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 @@ -
- -
- -
+
+ +
+
-
-

会员购买后当前等级分销商的最多能获取几层

+
+
+

会员购买后当前等级分销商的最多能获取几层

+
+
+ +
+ +
+
diff --git a/addon/fenxiao/shop/view/level/edit.html b/addon/fenxiao/shop/view/level/edit.html index 9599bdd..c919207 100644 --- a/addon/fenxiao/shop/view/level/edit.html +++ b/addon/fenxiao/shop/view/level/edit.html @@ -64,6 +64,13 @@

会员购买后当前等级分销商的最多能获取几层

+
+ +
+ + +
+
diff --git a/addon/fenxiao/shop/view/public/js/order_list.js b/addon/fenxiao/shop/view/public/js/order_list.js index 059d759..5c36a20 100644 --- a/addon/fenxiao/shop/view/public/js/order_list.js +++ b/addon/fenxiao/shop/view/public/js/order_list.js @@ -117,6 +117,7 @@ Order.prototype.cols = [ }else{ html += '
进货分佣:'+ ' ¥--' +'
'; } + if(orderitem.founder_commission > 0){ var array_detail = $.parseJSON(orderitem.founder_fenxiao_detail); for(var i=0;i'; } + + if(orderitem.is_weight){ + html += '
入池分红:'+ (orderitem.weight_money > 0 ? ' ¥' + orderitem.weight_money : '--') +'
'; + }else{ + html += '
入池分红:'+ ' ¥--' +'
'; + } return html; } }, diff --git a/app/model/Model.php b/app/model/Model.php index 7f8b94d..aff3416 100644 --- a/app/model/Model.php +++ b/app/model/Model.php @@ -305,7 +305,7 @@ class Model * @param string $key 索引 * @return array */ - final public function getColumn($where = [], $field = '', $key = '') + final public function getColumn($where = [], $field = '', $key = '',$or = []) { if ($this->is_cache) { $cache_name = $this->table . '_' . __FUNCTION__ . '_' . serialize(func_get_args()); @@ -314,7 +314,9 @@ class Model return $cache; } } - + if($or){ + Db::name($this->table)->whereOr($or); + } $result = Db::name($this->table)->where($where)->column($field, $key); if ($this->is_cache && $result) { Cache::tag("cache_table" . $this->table)->set($cache_name, $result, 300); diff --git a/app/model/upload/Upload.php b/app/model/upload/Upload.php index 57f9893..99ea898 100644 --- a/app/model/upload/Upload.php +++ b/app/model/upload/Upload.php @@ -675,6 +675,7 @@ class Upload extends BaseModel 'original' => null ); $compress = $this->config['upload']['compress'] ?? 'original'; + if ($compress == 'original' && !empty($tmp_file)) { \think\facade\Filesystem::disk('public')->putFileAs('', $tmp_file, $file); } else { @@ -735,6 +736,9 @@ class Upload extends BaseModel return $this->success($file, "UPLOAD_SUCCESS"); } } + if (empty($put_result)) { + $put_result = $this->success($file, "UPLOAD_SUCCESS"); + } //云上传没有成功 保存到本地 return $put_result; @@ -941,6 +945,7 @@ class Upload extends BaseModel $new_file = $file_name . ".png"; $image = $this->getImageService($file); + $result = $this->imageCloud($image, $new_file);//原图云上传(文档流上传) if ($result["code"] < 0) return $result; diff --git a/app/pay/controller/Test.php b/app/pay/controller/Test.php index 80102e0..eafdd02 100644 --- a/app/pay/controller/Test.php +++ b/app/pay/controller/Test.php @@ -17,7 +17,7 @@ use extend\Kdzhushou; use think\Exception; use think\facade\Cache; use think\facade\Db; - +use addon\fenxiao\model\WeightOrder; use EasyWeChat\Kernel\Messages\TextCard; class Test{ @@ -28,10 +28,11 @@ class Test{ $order_info = model('order')->getInfo(['order_id' => $orderId]); // $fenxiao_order = new OrderPay(); // $res = $fenxiao_order->handle($order_info); - // $fenxiao_order = new FenxiaoOrder(); - // $res = $fenxiao_order->calculate($order_info); - $fenxiao_order_model = new FenxiaoOrder(); - $res = $fenxiao_order_model->calculateOrder($order_info['order_id']); + $fenxiao_order = new WeightOrder(); + $res = $fenxiao_order->calculate(1); + // $fenxiao_order_model = new FenxiaoOrder(); + // $res = $fenxiao_order_model->calculate($order_info); + // $res = $fenxiao_order_model->calculateOrder($order_info['order_id']); dump($res);die; $fenxiao_id = 195; $fenxiao = new Fenxiao();