修改:权重值 - 购买商品赠送权重值 重构
This commit is contained in:
parent
e871b80e32
commit
988d9740a5
|
|
@ -1,35 +0,0 @@
|
|||
<?php
|
||||
namespace app\backend\modules\finance\controllers;
|
||||
|
||||
use app\common\components\BaseController;
|
||||
use app\common\helpers\PaginationHelper;
|
||||
use app\common\models\weightValue\WeightValueLog;
|
||||
|
||||
class WeightValueController extends BaseController{
|
||||
/**
|
||||
* Common: 进入首页
|
||||
* Author: wu-hui
|
||||
* Time: 2023/09/27 13:44
|
||||
* @return array|string
|
||||
* @throws \Throwable
|
||||
*/
|
||||
public function index(){
|
||||
//参数获取
|
||||
$pageSize = request()->input('page_size',10);
|
||||
$search = request()->input('search');
|
||||
// 获取列表信息
|
||||
$field = ['id','member_id','type','change_type','change_quantity','change_front','change_after','remark','created_at'];
|
||||
$result = WeightValueLog::getList($pageSize,$search,$field);
|
||||
|
||||
$data = [
|
||||
'list' => $result['data'],
|
||||
'pager' => PaginationHelper::show($result['total'],$result['current_page'],$result['per_page']),
|
||||
'search' => $search
|
||||
];
|
||||
|
||||
return view('finance.weight.index',$data)->render();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -18,15 +18,6 @@ class SaleObserver extends \app\common\observers\BaseObserver
|
|||
// (new \app\common\services\operation\SaleLog($model, 'update'));
|
||||
// }
|
||||
|
||||
// 处理阶梯价信息
|
||||
$weightValueLadder = $model->weight_value_ladder ?? [];
|
||||
foreach($weightValueLadder as $weightValueLadderIndex => $weightValueLadderItem){
|
||||
if((float)$weightValueLadderItem['where'] <= 0 || (float)$weightValueLadderItem['num'] <= 0) unset($weightValueLadder[$weightValueLadderIndex]);
|
||||
}
|
||||
$model->weight_value_ladder = $weightValueLadder ?? [];
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
public function updating( $model)
|
||||
|
|
|
|||
|
|
@ -6141,36 +6141,6 @@ class Menu
|
|||
],
|
||||
]
|
||||
],
|
||||
|
||||
'weight_value_records' => [
|
||||
'name' => '权重值明细',
|
||||
'url' => 'finance.weight-value.index',
|
||||
'url_params' => '',
|
||||
'permit' => 1,
|
||||
'menu' => 1,
|
||||
'icon' => 'fa-file-text-o',
|
||||
'sort' => 0,
|
||||
'item' => 'weight_value_records',
|
||||
'parents' => ['finance'],
|
||||
'child' => [
|
||||
'finance_weight_value_see' => [
|
||||
'name' => '记录',
|
||||
'url' => 'finance.weight-value.index',
|
||||
'url_params' => '',
|
||||
'permit' => 1,
|
||||
'menu' => 0,
|
||||
'icon' => '',
|
||||
'sort' => 0,
|
||||
'item' => 'finance_weight_value_see',
|
||||
'parents' => ['finance', 'weight_value_records'],
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
],
|
||||
|
||||
],
|
||||
|
|
|
|||
|
|
@ -40,10 +40,6 @@ class Sale extends BaseModel
|
|||
'ed_areas' => '',
|
||||
'push_goods_ids' => 0,
|
||||
'is_push' => 0,
|
||||
'weight_value_user' => 1,
|
||||
'weight_value_type' => 0,
|
||||
'weight_value_num' => 0,
|
||||
'weight_value_ladder' => [],
|
||||
];
|
||||
|
||||
protected $appends = ['point_deduct_type'];
|
||||
|
|
|
|||
|
|
@ -1,212 +0,0 @@
|
|||
<?php
|
||||
namespace app\common\models\weightValue;
|
||||
|
||||
|
||||
use app\common\models\BaseModel;
|
||||
use app\common\models\goods\Sale;
|
||||
use app\common\models\Member;
|
||||
use app\common\models\OrderGoods;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Yunshop\TeamDividend\models\MemberParent;
|
||||
use Yunshop\TeamDividend\models\TeamDividendAgencyModel;
|
||||
|
||||
class WeightValue extends BaseModel{
|
||||
|
||||
public $table = false;
|
||||
/**
|
||||
* Common: 购买商品赠送权重值 - 开始处理
|
||||
* Author: wu-hui
|
||||
* Time: 2023/09/27 10:55
|
||||
* @param $model
|
||||
*/
|
||||
public function giveInit($model){
|
||||
\Log::debug('------购买商品赠送权重值 - 开始处理------',$model->id);
|
||||
DB::beginTransaction();
|
||||
try{
|
||||
// 获取准备信息
|
||||
$orderGoods = OrderGoods::uniacid()
|
||||
->where('order_id',$model->id)
|
||||
->select(['id','goods_id','total','title'])
|
||||
->get()
|
||||
->makeHidden(['order','after_sales','buttons'])
|
||||
->toArray();
|
||||
$goodsIds = array_column($orderGoods,'goods_id');
|
||||
$goodsSale = Sale::whereIn('goods_id',$goodsIds)
|
||||
->select(['id','goods_id','weight_value_user','weight_value_type','weight_value_num','weight_value_ladder'])
|
||||
->get()
|
||||
->keyBy('goods_id')
|
||||
->toArray();
|
||||
// 获取当前用户及上级信息
|
||||
$agents = $this->getParent($model->uid);// 全部上级信息(包含购买人)
|
||||
$uidS = array_column($agents,'uid');
|
||||
// 获取相关用户的权重值信息
|
||||
$memberList = Member::uniacid()
|
||||
->select(['uid','weight_value'])
|
||||
->whereIn('uid',(array)$uidS)
|
||||
->get()
|
||||
->keyBy('uid')
|
||||
->makeHidden(['avatar_image','username'])
|
||||
->toArray();
|
||||
// 循环处理每个商品
|
||||
$insertData = [];
|
||||
foreach($orderGoods as $orderGoodItem){
|
||||
/**
|
||||
* currentSale参数说明:
|
||||
* weight_value_user(受赠用户类型):0=全部用户,1=仅经销商
|
||||
* weight_value_type(赠送方式):
|
||||
* 0=普通赠送:仅获取三人(购买人、购买人上级、购买人上级的上级)进行处理
|
||||
* 1=阶梯赠送:仅获取二人(购买人、购买人上级)进行处理
|
||||
* PS:所有赠送权重值数量需要乘以购买的商品数量
|
||||
*/
|
||||
$currentSale = $goodsSale[$orderGoodItem['goods_id']];// 当前商品销售设置
|
||||
$useAgentList = $agents;// 由于涉及到删除 使用的经销商列表重新赋值给新的变量 方便操作
|
||||
// 判断:赠送方式为阶梯赠送时并且经销商个人大于等于3 删除最后一个经销商
|
||||
if($currentSale['weight_value_type'] == 1 && count($useAgentList) >= 3) unset($useAgentList[2]);
|
||||
// 循环上级信息 处理每一个用户、每一个商品的赠送情况
|
||||
foreach($useAgentList as $agentInfo){
|
||||
$isBlack = (int)$agentInfo['teamDividend']['is_black'] ?? 0;
|
||||
$currentAgentHasWeightValue = $memberList[$agentInfo['uid']]['weight_value'] ?? 0;
|
||||
// 判断:当前用户是否可以领取;受赠用户类型为经销商,并且用户存在经销商信息 或者 受赠用户类型为全部用户;如果用户经销商信息为黑名单 则不参与
|
||||
if((((int)$currentSale['weight_value_user'] == 1 && $agentInfo['teamDividend']) || (int)$currentSale['weight_value_user'] == 0) && $isBlack != 1){
|
||||
// 符合条件 获取当前用户应得的权重值
|
||||
$weightValue = $this->getWeightValue($currentSale,$agentInfo);
|
||||
$totalWeightValue = $orderGoodItem['total'] * $weightValue;// 总数量
|
||||
// 最终的数据处理 全部数据都在这里进行处理
|
||||
if((float)$totalWeightValue > 0){
|
||||
$insertData[] = [
|
||||
'uniacid' => $model->uniacid,
|
||||
'member_id' => $agentInfo['uid'],// 用户id
|
||||
'type' => 0,// 权重值类型:0=经纪人(经销商)权重值
|
||||
'goods_id' => $orderGoodItem['goods_id'],// 商品id
|
||||
'order_id' => $model->id,// 订单id
|
||||
'order_goods_id' => $orderGoodItem['id'],// 订单商品id
|
||||
'change_type' => 1,// 变更类型:0=减少,1=增加
|
||||
'change_quantity' => $totalWeightValue,// 变更数量
|
||||
'change_front' => (float)$currentAgentHasWeightValue,// 变更前拥有的数量
|
||||
'change_after' => (float)($currentAgentHasWeightValue + $totalWeightValue),// 变更后拥有的数量
|
||||
'remark' => "订单{$model->order_sn}赠送",// 备注
|
||||
'created_at' => time(),// 变更时间
|
||||
];
|
||||
$memberList[$agentInfo['uid']]['weight_value'] = (float)($currentAgentHasWeightValue + $totalWeightValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 修改用户权重值变更信息 | 处理权重值变更记录
|
||||
if($insertData){
|
||||
(new Member())->batchUpdate($memberList,'uid','uid');
|
||||
WeightValueLog::insert($insertData);
|
||||
}
|
||||
|
||||
DB::commit();
|
||||
}catch(\Exception $e){
|
||||
\Log::debug('------购买商品赠送权重值 - 错误抛出------',$e->getMessage());
|
||||
DB::rollBack();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
/**
|
||||
* Common: 购买商品赠送权重值 - 获取上级信息
|
||||
* Author: wu-hui
|
||||
* Time: 2023/09/26 16:59
|
||||
* @param $uid
|
||||
* @return array
|
||||
*/
|
||||
private function getParent($uid){
|
||||
// 获取上级信息
|
||||
$parents = MemberParent::uniacid()
|
||||
->where('member_id', $uid)
|
||||
->select(['parent_id','level'])
|
||||
->orderBy('level', 'asc')
|
||||
->limit(2)// 由于最多只分三层,这里只获取直推上级及其上级
|
||||
->get()
|
||||
->toArray();
|
||||
// 包含购买人
|
||||
$parents = array_merge([
|
||||
[
|
||||
'parent_id' => $uid,
|
||||
'level' => 0
|
||||
]
|
||||
],$parents);
|
||||
$parentIds = array_column($parents,'parent_id');
|
||||
// 获取经销商信息
|
||||
$teamDividend = TeamDividendAgencyModel::uniacid()
|
||||
->select(['uid','level','is_black'])
|
||||
->whereIn('uid',$parentIds)
|
||||
->get();
|
||||
$teamDividend = $teamDividend ? $teamDividend->keyBy('uid')->toArray() : [];
|
||||
// 获取全部经销商 以此来获取排名信息
|
||||
$allTeamDividend = TeamDividendAgencyModel::uniacid()->pluck('uid')->toArray();
|
||||
$allTeamDividend = array_flip($allTeamDividend);
|
||||
$agents = [];
|
||||
foreach($parents as $memberInfo){
|
||||
$teamDividendInfo = $teamDividend[$memberInfo['parent_id']] ?? [];
|
||||
if($teamDividendInfo) $teamDividendInfo['ranking'] = ((int)$allTeamDividend[$memberInfo['parent_id']] + 1);
|
||||
|
||||
$agents[] = [
|
||||
'uid' => $memberInfo['parent_id'],
|
||||
'level' => $memberInfo['level'],
|
||||
'teamDividend' => $teamDividendInfo
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
return $agents;
|
||||
}
|
||||
/**
|
||||
* Common: 购买商品赠送权重值 - 获取应得权重值
|
||||
* Author: wu-hui
|
||||
* Time: 2023/09/27 10:05
|
||||
* @param $currentSale
|
||||
* @param $agentInfo
|
||||
* @return float|int
|
||||
*/
|
||||
private function getWeightValue($currentSale,$agentInfo){
|
||||
if((int)$currentSale['weight_value_type'] == 0){
|
||||
// 普通赠送
|
||||
return $currentSale['weight_value_num'];
|
||||
}else if($agentInfo['teamDividend']){
|
||||
// 阶梯赠送 阶梯判断条件必须按照从大到小排序
|
||||
$weightValueLadder = json_decode($currentSale['weight_value_ladder'],true);
|
||||
array_multisort(array_column($weightValueLadder,'where'),SORT_ASC, $weightValueLadder);
|
||||
$ranking = $agentInfo['teamDividend']['ranking'];
|
||||
$weightValueNum = 0;
|
||||
foreach($weightValueLadder as $ladder){
|
||||
if($ranking <= $ladder['where']){
|
||||
$weightValueNum = (float)$ladder['num'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $weightValueNum;
|
||||
}else {
|
||||
return (float)0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -8,7 +8,6 @@
|
|||
|
||||
namespace app\frontend\modules\finance\controllers;
|
||||
|
||||
use app\common\models\weightValue\WeightValueLog;
|
||||
use app\common\components\ApiController;
|
||||
use app\common\models\Member;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
|
|
|||
|
|
@ -5,9 +5,6 @@ namespace Yunshop\CollectionRoom\admin;
|
|||
use app\common\components\BaseController;
|
||||
use app\common\facades\Setting;
|
||||
use app\common\helpers\PaginationHelper;
|
||||
use app\common\helpers\Url;
|
||||
use app\common\models\Order;
|
||||
use app\common\models\weightValue\WeightValue;
|
||||
use Yunshop\CollectionRoom\models\CollectionRoomModel;
|
||||
|
||||
class IndexController extends BaseController{
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ namespace Yunshop\TeamDividend\jobs;
|
|||
|
||||
use app\common\models\Member;
|
||||
use app\common\models\Order;
|
||||
use app\common\models\weightValue\WeightValue;
|
||||
use app\common\services\credit\ConstService;
|
||||
use app\common\services\finance\PointService;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
|
|
@ -20,7 +19,6 @@ use Illuminate\Queue\InteractsWithQueue;
|
|||
use Illuminate\Support\Facades\Redis;
|
||||
use Illuminate\Support\Str;
|
||||
use Yunshop\CollectionRoom\models\CollectionRoomModel;
|
||||
use Yunshop\Love\Common\Services\LoveChangeService;
|
||||
use Yunshop\TeamDividend\models\Log;
|
||||
use Yunshop\TeamDividend\models\TeamDividendAgencyModel;
|
||||
use Yunshop\TeamDividend\models\TeamDividendLevelModel;
|
||||
|
|
@ -30,6 +28,7 @@ use Yunshop\TeamDividend\services\UpgradeService;
|
|||
use Yunshop\TeamDividend\services\upgrate\AgentsService;
|
||||
use Yunshop\TeamDividend\services\upgrate\UpgrateConditionService;
|
||||
use Yunshop\TeamDividend\services\upgrate\UplogService;
|
||||
use Yunshop\WeightValue\models\WeightValue;
|
||||
|
||||
/**
|
||||
* Class NewUpgrateJob
|
||||
|
|
@ -70,7 +69,7 @@ class NewUpgrateJob implements ShouldQueue
|
|||
$this->eachLevelHandle($agent);
|
||||
}
|
||||
|
||||
// 订单支付成功 处理权重值相关内容
|
||||
// 订单支付成功 处理权重值相关内容(因为需要兼容 用户不是经销商,但是成为经销商后当前订单如果存在赠送权重值,则需要同步赠送。因此只能在这里调用赠送操作 )
|
||||
if($this->order_status == TeamDividendLevelUpgrade::ORDER_PAY && $this->order){
|
||||
(new WeightValue())->giveInit($this->order);
|
||||
}
|
||||
|
|
@ -118,7 +117,7 @@ class NewUpgrateJob implements ShouldQueue
|
|||
foreach ($upgradeLevels as $level) {
|
||||
// \Log::debug('经销商升级 - 当前等级信息:',$level->toArray());
|
||||
// 判断:如果当前等级人数已经达到限制 则不升级(上限小于等于已存在数量 不能升级到该等级)
|
||||
$hasNum = (int)TeamDividendAgencyModel::uniacid()->count();
|
||||
$hasNum = (int)TeamDividendAgencyModel::uniacid()->where('level',$level->id)->count();
|
||||
// \Log::debug('经销商升级 - 数量限制比较:',[$hasNum,(int)$level->number_limit]);
|
||||
if((int)$level->number_limit <= $hasNum && (int)$level->number_limit > 0) continue;
|
||||
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ class DealerObserver extends BaseObserver
|
|||
*/
|
||||
event(new LevelChangeEvent($model));
|
||||
// 判断:如果当前等级人数已经达到限制 则不升级(上限小于等于已存在数量 不能升级到该等级)
|
||||
$hasNum = (int)TeamDividendAgencyModel::uniacid()->where('uid','!=',$model->uid)->count();
|
||||
$hasNum = (int)TeamDividendAgencyModel::uniacid()->where('uid','!=',$model->uid)->where('level',$model->level)->count();
|
||||
$levelNumberLimit = (int)TeamDividendLevelModel::uniacid()->where('id',$model->level)->value('number_limit');
|
||||
if((int)$levelNumberLimit <= $hasNum && (int)$levelNumberLimit > 0) return false;
|
||||
}
|
||||
|
|
@ -43,7 +43,7 @@ class DealerObserver extends BaseObserver
|
|||
*/
|
||||
event(new LevelChangeEvent($model));
|
||||
// 判断:如果当前等级人数已经达到限制 则不升级(上限小于等于已存在数量 不能升级到该等级)
|
||||
$hasNum = (int)TeamDividendAgencyModel::uniacid()->count();
|
||||
$hasNum = (int)TeamDividendAgencyModel::uniacid()->where('uid','!=',$model->uid)->where('level',$model->level)->count();
|
||||
$levelNumberLimit = (int)TeamDividendLevelModel::uniacid()->where('id',$model->level)->value('number_limit');
|
||||
if((int)$levelNumberLimit <= $hasNum && (int)$levelNumberLimit > 0) return false;
|
||||
|
||||
|
|
|
|||
|
|
@ -11,8 +11,6 @@ class IndexController extends BaseController{
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
return view('Yunshop\WeightValue::index.index')->render();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ class WeightValueWidget extends BaseGoodsWidget{
|
|||
|
||||
public function getData(){
|
||||
return GoodsWeightValue::uniacid()
|
||||
->select(['is_open','user_type','gift_type','lv_type','quantity','ladder'])
|
||||
->select(['is_open','gift_type','lv_type','quantity','ladder'])
|
||||
->where('goods_id', $this->goods->id)
|
||||
->first();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,10 +20,12 @@ class GoodsWeightValue extends BaseModel{
|
|||
$info->uniacid = \YunShop::app()->uniacid;
|
||||
$info->goods_id = $goodsId;
|
||||
$info->is_open = $data['is_open'] ?? 0;// 是否开启购买商品赠送权重值:0=未开启,1=开启
|
||||
$info->user_type = $data['user_type'] ?? 0;// 受赠用户类型:0=全部用户,1=仅经销商
|
||||
$info->gift_type = $data['gift_type'] ?? 0;// 赠送方式:0=赠送固定值,1=阶梯值赠送
|
||||
$info->lv_type = $data['lv_type'] ?? 0;// 赠送方式:0=二级,1=三级
|
||||
$info->quantity = $data['quantity'] ?? 0;// 固定值赠送数量
|
||||
foreach($data['ladder'] as $ladderIndex => $ladderItem){
|
||||
if((float)$ladderItem['where'] <= 0 || (float)$ladderItem['num'] <= 0) unset($data['ladder'][$ladderIndex]);
|
||||
}
|
||||
$info->ladder = json_encode($data['ladder'] ?? []);// 阶梯赠送信息
|
||||
|
||||
return $info->save();
|
||||
|
|
|
|||
|
|
@ -0,0 +1,241 @@
|
|||
<?php
|
||||
namespace Yunshop\WeightValue\models;
|
||||
|
||||
|
||||
use app\common\models\BaseModel;
|
||||
use app\common\models\member\MemberParent;
|
||||
use app\common\models\OrderGoods;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Yunshop\TeamDividend\models\TeamDividendAgencyModel;
|
||||
|
||||
class WeightValue extends BaseModel{
|
||||
|
||||
public $table = 'yz_weight_value';
|
||||
public $timestamps = false;
|
||||
|
||||
|
||||
/**
|
||||
* Common: 购买商品赠送权重值 - 开始处理
|
||||
* Author: wu-hui
|
||||
* Time: 2023/10/12 15:10
|
||||
* @param $model
|
||||
*/
|
||||
public function giveInit($model){
|
||||
\Log::debug('------购买商品赠送权重值 - 开始处理------',$model->id);
|
||||
DB::beginTransaction();
|
||||
try{
|
||||
// 当前订单全部商品
|
||||
$goodsList = $this->getGoodsList($model->id);
|
||||
// 获取当前用户及上级信息
|
||||
$agents = $this->getParent($model->uid);// 全部上级信息(包含购买人)
|
||||
// 循环处理每个商品
|
||||
$changeRecord = [];// 变更记录
|
||||
foreach($goodsList as $goodsInfo){
|
||||
// 由于涉及到删除 使用的经销商列表重新赋值给新的变量 方便操作
|
||||
$useAgentList = $agents;
|
||||
// 判断:赠送等级为二级时,删除第三个用户 赠送等级:0=二级,1=三级
|
||||
if($goodsInfo['lv_type'] == 1 && count($useAgentList) >= 3) unset($useAgentList[2]);
|
||||
// 循环上级信息 处理每一个用户、每一个商品的赠送情况
|
||||
foreach($useAgentList as $agentKey => $agentInfo){
|
||||
// 用户当前的权重值
|
||||
$currentAgentHasWeightValue = (float)$agents[$agentKey]['weight_value']['quantity'] ?? 0;
|
||||
// 符合条件 获取当前用户应得的权重值
|
||||
$weightValue = $this->getWeightValue($goodsInfo,$agentInfo);// 应得权重值
|
||||
$totalWeightValue = (float)sprintf("%.2f",$goodsInfo['total'] * $weightValue);// 总数量 * 应得权重值 = 总应得权重值
|
||||
// 应得权重值大于0 记录改变信息并且修改持有权重值
|
||||
if((float)$totalWeightValue > 0){
|
||||
$changeAfter = sprintf("%.2f",($currentAgentHasWeightValue + $totalWeightValue));
|
||||
$changeRecord[] = [
|
||||
'uniacid' => $model->uniacid,
|
||||
'member_id' => $agentInfo['uid'],// 用户id
|
||||
'team_dividend_agency_level_id' => $agentInfo['team_dividend_agency_level_id'],// 经销商等级id
|
||||
'goods_id' => $goodsInfo['goods_id'],// 商品id
|
||||
'order_id' => $model->id,// 订单id
|
||||
'order_goods_id' => $goodsInfo['id'],// 订单商品id
|
||||
'change_type' => 1,// 变更类型:0=减少,1=增加
|
||||
'change_quantity' => $totalWeightValue,// 变更数量
|
||||
'change_front' => (float)$currentAgentHasWeightValue,// 变更前拥有的数量
|
||||
'change_after' => $changeAfter,// 变更后拥有的数量
|
||||
'remark' => "订单{$model->order_sn}赠送",// 备注
|
||||
'created_at' => time(),// 变更时间
|
||||
];
|
||||
$agents[$agentKey]['weight_value']['quantity'] = $changeAfter;
|
||||
}
|
||||
}
|
||||
}
|
||||
// 修改用户权重值变更信息 | 处理权重值变更记录
|
||||
if($changeRecord){
|
||||
$updateWeightValueList = array_column($agents,'weight_value');
|
||||
self::updateInfo($updateWeightValueList);
|
||||
WeightValueLog::insert($changeRecord);
|
||||
}
|
||||
|
||||
DB::commit();
|
||||
}catch(\Exception $e){
|
||||
\Log::debug('------购买商品赠送权重值 - 错误抛出------',$e->getMessage());
|
||||
DB::rollBack();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
/**
|
||||
* Common: 购买商品赠送权重值 - 获取相关商品列表
|
||||
* Author: wu-hui
|
||||
* Time: 2023/10/12 11:26
|
||||
* @param $orderId
|
||||
* @return array
|
||||
*/
|
||||
private function getGoodsList($orderId){
|
||||
$list = OrderGoods::uniacid()
|
||||
->join('yz_goods_weight_value', 'yz_goods_weight_value.goods_id', 'yz_order_goods.goods_id')
|
||||
->where('yz_order_goods.order_id',$orderId)
|
||||
->where('yz_goods_weight_value.is_open',1)
|
||||
->select([
|
||||
'yz_order_goods.id',
|
||||
'yz_order_goods.goods_id',
|
||||
'yz_order_goods.total',
|
||||
'yz_order_goods.title',
|
||||
'yz_goods_weight_value.is_open',
|
||||
'yz_goods_weight_value.gift_type',
|
||||
'yz_goods_weight_value.lv_type',
|
||||
'yz_goods_weight_value.quantity',
|
||||
'yz_goods_weight_value.ladder'
|
||||
])
|
||||
->get()
|
||||
->makeHidden(['order','after_sales','buttons']);
|
||||
|
||||
return $list ? $list->toArray() : [];
|
||||
}
|
||||
/**
|
||||
* Common: 购买商品赠送权重值 - 获取上级信息
|
||||
* Author: wu-hui
|
||||
* Time: 2023/10/12 11:06
|
||||
* @param $uid
|
||||
* @return array
|
||||
*/
|
||||
private function getParent($uid){
|
||||
// 获取上级信息
|
||||
$parents = MemberParent::uniacid()
|
||||
->where('member_id', $uid)
|
||||
->select(['parent_id','level'])
|
||||
->orderBy('level', 'asc')
|
||||
->limit(2)// 由于最多只分三层,这里只获取直推上级及其上级
|
||||
->get()
|
||||
->toArray();
|
||||
// 包含购买人
|
||||
$parents = array_merge([['parent_id' => $uid,'level' => 0]],$parents);
|
||||
$uidS = array_column($parents,'parent_id');
|
||||
// 获取经销商信息
|
||||
$teamDividend = TeamDividendAgencyModel::uniacid()
|
||||
->select(['uid','level','is_black'])
|
||||
->whereIn('uid',$uidS)
|
||||
->get();
|
||||
$teamDividend = $teamDividend ? $teamDividend->keyBy('uid')->toArray() : [];
|
||||
// 获取相关用户的权重值信息
|
||||
$weightValueList = WeightValue::uniacid()
|
||||
->select(['id','member_id','team_dividend_agency_level_id','quantity'])
|
||||
->whereIn('member_id',(array)$uidS)
|
||||
->get()
|
||||
->toArray();
|
||||
$weightValueGroup = [];
|
||||
foreach($weightValueList as $weightValueItem){
|
||||
$weightValueGroup[$weightValueItem['member_id']][$weightValueItem['team_dividend_agency_level_id']] = $weightValueItem;
|
||||
}
|
||||
// 获取全部经销商 以此来获取排名信息
|
||||
$allTeamDividend = TeamDividendAgencyModel::uniacid()->pluck('uid')->toArray();
|
||||
$allTeamDividend = array_flip($allTeamDividend);
|
||||
$agents = [];
|
||||
foreach($parents as $memberInfo){
|
||||
$teamDividendInfo = $teamDividend[$memberInfo['parent_id']] ?? [];
|
||||
// 判断:仅经销商 且 不是黑名单的用户才会赠送
|
||||
$isBlack = (int)$teamDividendInfo['is_black'] ?? 0;// 是否为黑名单
|
||||
if($teamDividendInfo && $isBlack != 1) {
|
||||
$teamDividendInfo['ranking'] = ((int)$allTeamDividend[$memberInfo['parent_id']] + 1);
|
||||
$weightValue = $weightValueGroup[$memberInfo['parent_id']][(int)$teamDividendInfo['level']] ?? [
|
||||
'uniacid' => \YunShop::app()->uniacid,
|
||||
'member_id' => $memberInfo['parent_id'],
|
||||
'team_dividend_agency_level_id' => (int)$teamDividendInfo['level'],
|
||||
'quantity' => 0,
|
||||
];
|
||||
$agents[] = [
|
||||
'uid' => $memberInfo['parent_id'],
|
||||
'level' => $memberInfo['level'],
|
||||
'team_dividend_agency_level_id' => (int)$teamDividendInfo['level'],
|
||||
'weight_value' => $weightValue,
|
||||
'teamDividend' => $teamDividendInfo
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
return $agents;
|
||||
}
|
||||
/**
|
||||
* Common: 购买商品赠送权重值 - 获取应得权重值
|
||||
* Author: wu-hui
|
||||
* Time: 2023/10/12 14:03
|
||||
* @param $currentSale
|
||||
* @param $agentInfo
|
||||
* @return float|int
|
||||
*/
|
||||
private function getWeightValue($currentSale,$agentInfo){
|
||||
if((int)$currentSale['gift_type'] == 0){
|
||||
// 赠送固定值
|
||||
return $currentSale['quantity'];
|
||||
}else if($agentInfo['teamDividend']){
|
||||
// 阶梯赠送 阶梯判断条件必须按照从大到小排序
|
||||
$ladderList = json_decode($currentSale['ladder'],true);
|
||||
array_multisort(array_column($ladderList,'where'),SORT_ASC, $ladderList);
|
||||
$ranking = (int)$agentInfo['teamDividend']['ranking'];
|
||||
$weightValueNum = 0;
|
||||
foreach($ladderList as $ladder){
|
||||
if($ranking <= $ladder['where'] && $ranking > 0){
|
||||
$weightValueNum = (float)$ladder['num'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $weightValueNum;
|
||||
}else {
|
||||
return (float)0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Common: 修改信息
|
||||
* 必须是包含member_id、team_dividend_agency_level_id、quantity的二维数组
|
||||
* Author: wu-hui
|
||||
* Time: 2023/10/12 15:09
|
||||
* @param $updateWeightValueList
|
||||
*/
|
||||
public static function updateInfo($updateWeightValueList){
|
||||
// 判断:是否为二维数组
|
||||
if(!is_array($updateWeightValueList[0])) $updateWeightValueList = [$updateWeightValueList];
|
||||
// 循环处理 存在修改,不存在添加
|
||||
foreach($updateWeightValueList as $wv){
|
||||
$weightValueModel = self::uniacid()
|
||||
->where('member_id',$wv['member_id'])
|
||||
->where('team_dividend_agency_level_id',$wv['team_dividend_agency_level_id'])
|
||||
->first();
|
||||
if(!$weightValueModel) $weightValueModel = new static();
|
||||
// 修改赋值
|
||||
if((int)$weightValueModel->id <= 0){
|
||||
$weightValueModel->uniacid = \YunShop::app()->uniacid;
|
||||
$weightValueModel->member_id = $wv['member_id'];
|
||||
$weightValueModel->team_dividend_agency_level_id = $wv['team_dividend_agency_level_id'];
|
||||
}
|
||||
$weightValueModel->quantity = (float)$wv['quantity'];
|
||||
|
||||
$weightValueModel->save();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -1,10 +1,8 @@
|
|||
<?php
|
||||
namespace app\common\models\weightValue;
|
||||
|
||||
namespace Yunshop\WeightValue\models;
|
||||
|
||||
use app\common\models\BaseModel;
|
||||
use app\common\models\Member;
|
||||
use function PHPUnit\Framework\isNull;
|
||||
|
||||
class WeightValueLog extends BaseModel{
|
||||
|
||||
|
|
@ -122,4 +120,7 @@ class WeightValueLog extends BaseModel{
|
|||
return $this->hasOne(Member::class, 'uid', 'member_id');
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -11,14 +11,9 @@ define({
|
|||
<el-form-item label="是否开启" label-width="155px">
|
||||
<el-radio v-model="json.is_open" :label="0">关闭</el-radio>
|
||||
<el-radio v-model="json.is_open" :label="1">开启</el-radio>
|
||||
<div class="form-item_tips">仅存在经销商身份的用户可以获得权重值</div>
|
||||
</el-form-item>
|
||||
<template v-if="json.is_open == 1">
|
||||
<el-form-item label="受赠用户类型" label-width="155px">
|
||||
<el-radio v-model="json.user_type" :label="0">全部用户</el-radio>
|
||||
<el-radio v-model="json.user_type" :label="1">仅经销商</el-radio>
|
||||
<div class="form-item_tips">全部用户:普通所有用户购买后都会赠送权重值</div>
|
||||
<div class="form-item_tips">仅经销商:存在经销商身份且未加入黑名单的用户会赠送权重值</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="赠送方式" label-width="155px">
|
||||
<el-radio v-model="json.gift_type" :label="0">普通赠送</el-radio>
|
||||
<el-radio v-model="json.gift_type" :label="1">阶梯赠送</el-radio>
|
||||
|
|
@ -83,7 +78,6 @@ define({
|
|||
return {
|
||||
json: {
|
||||
is_open: 0,// 是否开启购买商品赠送权重值:0=未开启,1=开启
|
||||
user_type: 0,// 受赠用户类型:0=全部用户,1=仅经销商
|
||||
gift_type: 0,// 赠送方式:0=赠送固定值,1=阶梯值赠送
|
||||
lv_type: 0,// 赠送方式:0=二级,1=三级
|
||||
quantity: 0,// 赠送数量
|
||||
|
|
@ -91,13 +85,12 @@ define({
|
|||
}
|
||||
}
|
||||
},
|
||||
watch: {},
|
||||
watch: { },
|
||||
mounted() {
|
||||
console.log(this.form);
|
||||
if (this.form) {
|
||||
let weight_value = this.form || {};
|
||||
this.json.is_open = weight_value.is_open ? weight_value.is_open : 0;
|
||||
this.json.user_type = weight_value.user_type ? weight_value.user_type : 0;
|
||||
this.json.gift_type = weight_value.gift_type ? weight_value.gift_type : 0;
|
||||
this.json.lv_type = weight_value.lv_type ? weight_value.lv_type : 0;
|
||||
this.json.quantity = weight_value.quantity ? weight_value.quantity : 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue