From 528b846ec3157e6759bcd35c2d035bf9611265d3 Mon Sep 17 00:00:00 2001 From: liqianjin <949671634@qq.com> Date: Sat, 12 Oct 2024 17:09:53 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=9B=E8=B4=A7=E7=B3=BB=E7=BB=9F=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addon/fenxiao/api/controller/Fenxiao.php | 14 +-- addon/fenxiao/config/event.php | 3 + addon/fenxiao/event/WeightOrder.php | 15 +++ addon/fenxiao/model/Config.php | 5 +- addon/fenxiao/model/FenxiaoOrder.php | 17 ++- addon/fenxiao/model/WeightOrder.php | 111 ++++++++++++++++++ addon/fenxiao/shop/controller/Level.php | 2 + addon/fenxiao/shop/view/level/add.html | 21 ++-- addon/fenxiao/shop/view/level/edit.html | 7 ++ .../fenxiao/shop/view/public/js/order_list.js | 7 ++ app/model/Model.php | 6 +- app/model/upload/Upload.php | 5 + app/pay/controller/Test.php | 11 +- 13 files changed, 195 insertions(+), 29 deletions(-) create mode 100644 addon/fenxiao/event/WeightOrder.php create mode 100644 addon/fenxiao/model/WeightOrder.php diff --git a/addon/fenxiao/api/controller/Fenxiao.php b/addon/fenxiao/api/controller/Fenxiao.php index 3eb4c79..8ac3266 100644 --- a/addon/fenxiao/api/controller/Fenxiao.php +++ b/addon/fenxiao/api/controller/Fenxiao.php @@ -338,21 +338,11 @@ class Fenxiao extends BaseApi $model = new FenxiaoModel(); $fenxiao_info = $model->getFenxiaoInfo([ [ 'member_id', '=', $this->member_id ] ], 'fenxiao_id')[ 'data' ]; if (empty($fenxiao_info)) return $this->response($this->error('', 'MEMBER_NOT_IS_FENXIAO')); - $parent_fenxiao_id = [ $fenxiao_info[ 'fenxiao_id' ] ]; // 上级分销商id集合 // 查询分销基础配置 - $config_model = new Config(); - $fenxiao_basic_config = $config_model->getFenxiaoBasicsConfig($this->site_id)[ 'data' ][ 'value' ]; - $level = $fenxiao_basic_config[ 'level' ]; - if ($level == 2) { - // 二级分销商id集合 - $one_level_fenxiao = model('fenxiao')->getColumn([ [ 'parent', '=', $fenxiao_info[ 'fenxiao_id' ] ] ], 'fenxiao_id'); - if (!empty($one_level_fenxiao)) { - $parent_fenxiao_id = array_merge($parent_fenxiao_id, $one_level_fenxiao); - } - } + $condition = [ [ 'f.site_id', '=', $this->site_id ], - [ 'f.parent', 'in', $parent_fenxiao_id ], + [ 'f.chain', 'like', '%'.$fenxiao_info[ 'fenxiao_id' ].'%' ], [ 'm.is_delete', '=', 0 ] ]; $field = 'm.nickname,m.headimg,m.member_id,m.order_num,m.order_money,f.fenxiao_id,f.audit_time,f.level_name,m.is_fenxiao,m.bind_fenxiao_time,f.one_child_num,f.one_child_fenxiao_num'; diff --git a/addon/fenxiao/config/event.php b/addon/fenxiao/config/event.php index 2581163..724824c 100644 --- a/addon/fenxiao/config/event.php +++ b/addon/fenxiao/config/event.php @@ -80,6 +80,9 @@ return [ ], 'NodeParent'=>[ 'addon\fenxiao\event\NodeParent', + ], + 'WeightOrder' => [ + 'addon\fenxiao\event\WeightOrder' ] ], diff --git a/addon/fenxiao/event/WeightOrder.php b/addon/fenxiao/event/WeightOrder.php new file mode 100644 index 0000000..b17ede3 --- /dev/null +++ b/addon/fenxiao/event/WeightOrder.php @@ -0,0 +1,15 @@ +calculate($param['relate_id']); + return $result; + } + return []; + } +} diff --git a/addon/fenxiao/model/Config.php b/addon/fenxiao/model/Config.php index f9dbd5a..271c399 100644 --- a/addon/fenxiao/model/Config.php +++ b/addon/fenxiao/model/Config.php @@ -70,8 +70,9 @@ class Config extends BaseModel ]; $res = $config->setConfig($relation_data, '分销上下级关系配置', $is_use, [ [ 'site_id', '=', $site_id ], [ 'app_module', '=', 'shop' ], [ 'config_key', '=', 'FENXIAO_RELATION_CONFIG' ] ]); $cron = new Cron(); - // $cron->deleteCron([ [ 'event', '=', 'WeightOrder' ], [ 'relate_id', '=', $param[ 'bale_id' ] ] ]); - // $cron->addCron(1, 0, '订单售后自动关闭', 'CronOrderAfterSaleClose', $execute_time, $order_id); + $cron->deleteCron([ [ 'event', '=', 'WeightOrder' ], [ 'relate_id', '=', $site_id ] ]); + $execute_time = strtotime(date('Y-m-d 00:00:00') . ' +1 day'); + $cron->addCron(2, 1, '计算加权分红', 'WeightOrder', $execute_time, $site_id,3); return $res; } diff --git a/addon/fenxiao/model/FenxiaoOrder.php b/addon/fenxiao/model/FenxiaoOrder.php index 0de41b8..875b533 100644 --- a/addon/fenxiao/model/FenxiaoOrder.php +++ b/addon/fenxiao/model/FenxiaoOrder.php @@ -82,6 +82,9 @@ class FenxiaoOrder extends BaseModel 'founder_rate' => 0, 'founder_commission' => 0, 'founder_fenxiao_detail' => [], + 'weight_money' => 0, + // 'weight_fenxiao_id' => [], + 'is_weight' => 0 ]; $goods_info = model('goods')->getInfo([['goods_id','=',$v['goods_id']]],'is_fenxiao, fenxiao_type,goods_kind_id'); @@ -126,6 +129,9 @@ class FenxiaoOrder extends BaseModel 'founder_rate' => $order_fenxiao_data['founder_rate'], 'founder_commission' => $order_fenxiao_data['founder_commission'], 'founder_fenxiao_detail' => json_encode($order_fenxiao_data['founder_fenxiao_detail']), + 'is_weight' => $order_fenxiao_data['is_weight'], + // 'weight_fenxiao_id' => json_encode($order_fenxiao_data['weight_fenxiao_id']), + 'weight_money' => $order_fenxiao_data['weight_money'], 'create_time' => time() ]; model("fenxiao_order")->add($data); @@ -218,7 +224,7 @@ class FenxiaoOrder extends BaseModel ->join('fenxiao_level l', 'f.level_id = l.level_id', 'right') ->where('f.fenxiao_id', '<>', $fenxiao_info['fenxiao_id']) ->whereIn('f.fenxiao_id', $chain) - ->field('f.fenxiao_id,f.fenxiao_name,f.member_id,f.level_id,f.site_id,f.fenxiao_name,f.status,l.level_num,l.rank') + ->field('f.fenxiao_id,f.fenxiao_name,f.member_id,f.level_id,f.site_id,f.fenxiao_name,f.status,l.level_num,l.rank,l.is_weight') ->select(); //获取上级用户 $nodeUser = $nodeUser ? $nodeUser->toArray() : []; if(count($nodeUser) > 0){ @@ -265,6 +271,15 @@ class FenxiaoOrder extends BaseModel $order_fenxiao_data['commission'] += $order_fenxiao_data[ 'founder_commission' ] += $commission; $order_fenxiao_data['founder_fenxiao_detail'][] = ['name' => $user['fenxiao_name'], 'commission' => $commission]; } + //计算加权分红 + if(!$order_fenxiao_data['is_weight'] && $goods_kind === 0){ + $is_weight = $user['is_weight']; + if($is_weight){ + $weight_money = $config['weight_rate'] * $v[ 'real_goods_money' ] / 100; + $order_fenxiao_data['weight_money'] = $weight_money; + } + $order_fenxiao_data['is_weight'] = $is_weight; + } } return $order_fenxiao_data; } diff --git a/addon/fenxiao/model/WeightOrder.php b/addon/fenxiao/model/WeightOrder.php new file mode 100644 index 0000000..8c0d585 --- /dev/null +++ b/addon/fenxiao/model/WeightOrder.php @@ -0,0 +1,111 @@ +getFenxiaoBasicsConfig($site_id)['data']['value']; + $time_type = $fenxiao_basic_config['time']; + $is_settlement = false; + switch($time_type){ + //按天分配 + case '1': + $is_settlement = true; + // $order_list = model('fenxiao_order')->getList([['is_weight' , '=' , 1] ,['weight_money' , '>' ,0] ,['weight_log_id' ,'=' ,0]]); + break; + //按周分配 + case '2': + $week = date('w',time()); + if($week){ + $is_settlement = true; + } + break; + //按月分配 + case '3': + $currentDate = date('Y-m-d'); // 获取当前日期 + $firstDayOfMonth = date('Y-m-01'); + if($currentDate == $firstDayOfMonth){ + $is_settlement = true; + } + break; + } + //符合条件 + if($is_settlement){ + $total_weight_money = model('fenxiao_order')->getSum([['site_id' ,'=' , $site_id],['is_weight' ,'=' ,1],['weight_log_id' ,'=' ,0]],'weight_money'); + $total_order_money = model('fenxiao_order')->getSum([['site_id' ,'=' , $site_id],['is_weight' ,'=' ,1],['weight_log_id' ,'=' ,0]],'real_goods_money'); + $alias = 'f'; + $join = [ + ['fenxiao_level l', 'f.level_id = l.level_id', 'right'] + ]; + $fenxiao_list = model('fenxiao')->getList([ [ 'l.is_weight', '=', 1 ], [ 'f.is_delete', '=', 0 ] ],'f.fenxiao_id,f.fenxiao_name','',$alias,$join); + if($fenxiao_list && $total_weight_money){ + $fenxiao_ids = $detail = $order_ids = []; + $total_commission = 0; + Db::startTrans(); + try { + foreach($fenxiao_list as $key => $val){ + $condition = [ + ['site_id', '=', $site_id], + ['chain' , 'like' ,'%' . $val['fenxiao_id']. ',%'], + ['is_delete' ,'=' ,0] + ]; + $ids = model('fenxiao')->getColumn($condition,'member_id'); + $weight_con = [ + ['site_id' ,'=' , $site_id], + ['is_weight' ,'=' ,1], + ['weight_log_id' ,'=' ,0], + ['member_id', 'in' ,$ids] + ]; + $weight_money = model('fenxiao_order')->getSum($weight_con,'weight_money'); + $order_ids = $key === 0 ?? model('fenxiao_order')->getColumn($weight_con,'order_id'); + $fenxiao_ids[] = $val['fenxiao_id']; + $commission = $weight_money / $total_weight_money * $total_order_money; + $total_commission += $commission; + $detail[] = [ + 'fenxiao_id' => $val['fenxiao_id'], + 'name' => $val['fenxiao_name'], + 'commission' => $commission + ]; + } + $add = [ + 'order_ids' => json_encode($order_ids), + 'fenxiao_ids' => json_encode($fenxiao_ids), + 'total_money' => $total_commission, + 'detail' => $detail, + 'create_time' => time() + ]; + $log_id = model('weight_order_log')->add($add); + model('fenxiao_order')->update(['weight_log_id' => $log_id],[['order_id', 'IN' , $order_ids]]); + Db::commit(); + return $log_id; + } catch (\Exception $e) { + Db::rollback(); + return error(-1, $e->getMessage()); + } + + } + } + + return $this->success(); + } +} diff --git a/addon/fenxiao/shop/controller/Level.php b/addon/fenxiao/shop/controller/Level.php index 1ee3b5e..0b650e8 100644 --- a/addon/fenxiao/shop/controller/Level.php +++ b/addon/fenxiao/shop/controller/Level.php @@ -84,6 +84,7 @@ class Level extends BaseShop 'one_child_num' => input('one_child_num',''), 'one_child_fenxiao_num' => input('one_child_fenxiao_num',''), 'one_child_fenxiao_equal' => input('one_child_fenxiao_equal',0), + 'is_weight' => input('is_weight',0), 'goods_ids' => input('goods_ids',''), ]; $res = $model->addLevel($data); @@ -132,6 +133,7 @@ class Level extends BaseShop 'one_child_num' => input('one_child_num',''), 'one_child_fenxiao_num' => input('one_child_fenxiao_num',''), 'one_child_fenxiao_equal' => input('one_child_fenxiao_equal',0), + 'is_weight' => input('is_weight',0), 'goods_ids' => input('goods_ids',''), ]; $level_id = input('level_id', ''); diff --git a/addon/fenxiao/shop/view/level/add.html b/addon/fenxiao/shop/view/level/add.html index 0b0de9e..60eec01 100644 --- a/addon/fenxiao/shop/view/level/add.html +++ b/addon/fenxiao/shop/view/level/add.html @@ -51,15 +51,22 @@ -
会员购买后当前等级分销商的最多能获取几层
+会员购买后当前等级分销商的最多能获取几层
+会员购买后当前等级分销商的最多能获取几层