进货系统问题修改

This commit is contained in:
liqianjin 2024-10-12 17:09:53 +08:00
parent 0c8996e665
commit 528b846ec3
13 changed files with 195 additions and 29 deletions

View File

@ -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';

View File

@ -80,6 +80,9 @@ return [
],
'NodeParent'=>[
'addon\fenxiao\event\NodeParent',
],
'WeightOrder' => [
'addon\fenxiao\event\WeightOrder'
]
],

View File

@ -0,0 +1,15 @@
<?php
namespace addon\fenxiao\event;
class WeightOrder
{
public function handle($param)
{
if (isset($param['relate_id'])) {
$model = new \addon\fenxiao\model\WeightOrder();
$result = $model->calculate($param['relate_id']);
return $result;
}
return [];
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -0,0 +1,111 @@
<?php
/**
* SaaSMall商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 成都SAAS云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.gobuysaas.com
* =========================================================
*/
namespace addon\fenxiao\model;
use app\model\BaseModel;
use app\model\message\Message;
use app\model\system\Stat;
use think\facade\Db;
/**
* 分销商品
*/
class WeightOrder extends BaseModel{
/**
* 加权订单计算
* @param $site_id
*/
public function calculate($site_id){
//获取分销基础配置
$config_model = new Config();
$fenxiao_basic_config = $config_model->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();
}
}

View File

@ -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', '');

View File

@ -51,15 +51,22 @@
<input type="text" name="level_name" lay-verify="required" autocomplete="off" class="layui-input len-mid" maxlength="40">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>分红层级:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="rank" lay-verify="required" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required">*</span>分红层级:</label>
<div class="layui-input-inline">
<input type="number" min="0" name="rank" lay-verify="required" autocomplete="off" class="layui-input len-short">
</div>
<div class="word-aux">
<p>会员购买后当前等级分销商的最多能获取几层</p>
</div>
<div class="word-aux">
<p>会员购买后当前等级分销商的最多能获取几层</p>
</div>
<div class="layui-form-item">
<label class="layui-form-label">是否参与加权分红分配:</label>
<div class="layui-input-block">
<input type="radio" name="is_weight" value="0" lay-filter="withdraw_type" title="否" checked />
<input type="radio" name="is_weight" value="1" lay-filter="withdraw_type" title="是" />
</div>
</div>
<!--{if $basics_info.level == 1}-->
<!--<div class="layui-form-item">-->
<!--<label class="layui-form-label"><span class="required">*</span>一级佣金比例:</label>-->

View File

@ -64,6 +64,13 @@
<div class="word-aux">
<p>会员购买后当前等级分销商的最多能获取几层</p>
</div>
<div class="layui-form-item">
<label class="layui-form-label">是否参与加权分红分配:</label>
<div class="layui-input-block">
<input type="radio" name="is_weight" value="0" lay-filter="is_weight" title="否" checked />
<input type="radio" name="is_weight" value="1" lay-filter="is_weight" {if $info.is_weight == 1} checked {/if} title="是" />
</div>
</div>
<!--{if $basics_info.level == 1}-->
<!--<div class="layui-form-item">-->
<!--<label class="layui-form-label"><span class="required">*</span>一级佣金比例:</label>-->

View File

@ -117,6 +117,7 @@ Order.prototype.cols = [
}else{
html += '<div>进货分佣:'+ ' ¥--' +'</div>';
}
if(orderitem.founder_commission > 0){
var array_detail = $.parseJSON(orderitem.founder_fenxiao_detail);
for(var i=0;i<array_detail.length;i++){
@ -129,6 +130,12 @@ Order.prototype.cols = [
}else{
html += '<div>创始人分佣:'+ ' ¥--' +'</div>';
}
if(orderitem.is_weight){
html += '<div>入池分红:'+ (orderitem.weight_money > 0 ? ' ¥' + orderitem.weight_money : '--') +'</div>';
}else{
html += '<div>入池分红:'+ ' ¥--' +'</div>';
}
return html;
}
},

View File

@ -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);

View File

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

View File

@ -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();