diff --git a/app/backend/modules/finance/controllers/WeightValueController.php b/app/backend/modules/finance/controllers/WeightValueController.php deleted file mode 100644 index b84919a9..00000000 --- a/app/backend/modules/finance/controllers/WeightValueController.php +++ /dev/null @@ -1,35 +0,0 @@ -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(); - } - - - -} \ No newline at end of file diff --git a/app/backend/modules/goods/observers/SaleObserver.php b/app/backend/modules/goods/observers/SaleObserver.php index 309795be..6c590367 100644 --- a/app/backend/modules/goods/observers/SaleObserver.php +++ b/app/backend/modules/goods/observers/SaleObserver.php @@ -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) diff --git a/app/backend/modules/menu/Menu.php b/app/backend/modules/menu/Menu.php index b9ebd06d..d4d6cabe 100644 --- a/app/backend/modules/menu/Menu.php +++ b/app/backend/modules/menu/Menu.php @@ -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'], - ], - ], - ], - - - - - ], ], diff --git a/app/common/models/Sale.php b/app/common/models/Sale.php index 537701c9..d924c650 100644 --- a/app/common/models/Sale.php +++ b/app/common/models/Sale.php @@ -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']; diff --git a/app/common/models/weightValue/WeightValue.php b/app/common/models/weightValue/WeightValue.php deleted file mode 100644 index 9192c954..00000000 --- a/app/common/models/weightValue/WeightValue.php +++ /dev/null @@ -1,212 +0,0 @@ -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; - } - } - - - - - - - - - - - - - - - - - - - - - - - - - -} diff --git a/app/frontend/modules/finance/controllers/WeightValueController.php b/app/frontend/modules/finance/controllers/WeightValueController.php index 4c840b78..a9b9fd0f 100644 --- a/app/frontend/modules/finance/controllers/WeightValueController.php +++ b/app/frontend/modules/finance/controllers/WeightValueController.php @@ -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; diff --git a/plugins/collection-room/src/admin/IndexController.php b/plugins/collection-room/src/admin/IndexController.php index 74ce8915..a14cb03f 100644 --- a/plugins/collection-room/src/admin/IndexController.php +++ b/plugins/collection-room/src/admin/IndexController.php @@ -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{ diff --git a/plugins/team-dividend/src/jobs/NewUpgrateJob.php b/plugins/team-dividend/src/jobs/NewUpgrateJob.php index 9d570816..f6597e27 100644 --- a/plugins/team-dividend/src/jobs/NewUpgrateJob.php +++ b/plugins/team-dividend/src/jobs/NewUpgrateJob.php @@ -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; diff --git a/plugins/team-dividend/src/observers/DealerObserver.php b/plugins/team-dividend/src/observers/DealerObserver.php index 7e7b4160..b56d8195 100644 --- a/plugins/team-dividend/src/observers/DealerObserver.php +++ b/plugins/team-dividend/src/observers/DealerObserver.php @@ -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; diff --git a/plugins/weight-value/src/admin/IndexController.php b/plugins/weight-value/src/admin/IndexController.php index 58dc808b..2386f411 100644 --- a/plugins/weight-value/src/admin/IndexController.php +++ b/plugins/weight-value/src/admin/IndexController.php @@ -11,8 +11,6 @@ class IndexController extends BaseController{ - - return view('Yunshop\WeightValue::index.index')->render(); } diff --git a/plugins/weight-value/src/admin/widget/WeightValueWidget.php b/plugins/weight-value/src/admin/widget/WeightValueWidget.php index 0d50e08e..19931dce 100644 --- a/plugins/weight-value/src/admin/widget/WeightValueWidget.php +++ b/plugins/weight-value/src/admin/widget/WeightValueWidget.php @@ -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(); } diff --git a/plugins/weight-value/src/models/GoodsWeightValue.php b/plugins/weight-value/src/models/GoodsWeightValue.php index 15886958..e5ecdf7c 100644 --- a/plugins/weight-value/src/models/GoodsWeightValue.php +++ b/plugins/weight-value/src/models/GoodsWeightValue.php @@ -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(); diff --git a/plugins/weight-value/src/models/WeightValue.php b/plugins/weight-value/src/models/WeightValue.php new file mode 100644 index 00000000..6f957060 --- /dev/null +++ b/plugins/weight-value/src/models/WeightValue.php @@ -0,0 +1,241 @@ +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(); + } + } + + + + + + + + + +} diff --git a/app/common/models/weightValue/WeightValueLog.php b/plugins/weight-value/src/models/WeightValueLog.php similarity index 98% rename from app/common/models/weightValue/WeightValueLog.php rename to plugins/weight-value/src/models/WeightValueLog.php index dc8c6270..a6b5b676 100644 --- a/app/common/models/weightValue/WeightValueLog.php +++ b/plugins/weight-value/src/models/WeightValueLog.php @@ -1,10 +1,8 @@ hasOne(Member::class, 'uid', 'member_id'); } + + + } diff --git a/plugins/weight-value/views/widget/marketing/weight_value.js b/plugins/weight-value/views/widget/marketing/weight_value.js index b99f306c..bd7e799f 100644 --- a/plugins/weight-value/views/widget/marketing/weight_value.js +++ b/plugins/weight-value/views/widget/marketing/weight_value.js @@ -11,14 +11,9 @@ define({ 关闭 开启 +
仅存在经销商身份的用户可以获得权重值