分销商品设置单独返佣比例金额

This commit is contained in:
liqianjin 2024-09-27 18:07:18 +08:00
parent f61b59ab47
commit a87eff168c
22 changed files with 3498 additions and 81 deletions

View File

@ -84,10 +84,35 @@ class Fenxiao extends BaseApi
$one_in_progress_commission = $fenxiao_order_model->getFenxiaoOrderInfo([ [ 'one_fenxiao_id', '=', $info[ 'data' ][ 'fenxiao_id' ] ], [ 'is_settlement', '=', 0 ], [ 'is_refund', '=', 0 ] ], 'sum(one_commission) as commission');
$two_in_progress_commission = $fenxiao_order_model->getFenxiaoOrderInfo([ [ 'two_fenxiao_id', '=', $info[ 'data' ][ 'fenxiao_id' ] ], [ 'is_settlement', '=', 0 ], [ 'is_refund', '=', 0 ] ], 'sum(two_commission) as commission');
$three_in_progress_commission = $fenxiao_order_model->getFenxiaoOrderInfo([ [ 'three_fenxiao_id', '=', $info[ 'data' ][ 'fenxiao_id' ] ], [ 'is_settlement', '=', 0 ], [ 'is_refund', '=', 0 ] ], 'sum(three_commission) as commission');
$wholesale_in_progress_commission = $fenxiao_order_model->getFenxiaoOrderList([ [ 'wholesale_fenxiao_id', 'like', '%'.$info[ 'data' ][ 'fenxiao_id' ].'%' ], [ 'is_settlement', '=', 0 ], [ 'is_refund', '=', 0 ] ], 'wholesale_fenxiao_id,wholesale_fenxiao_detail');
$wholesale_money = 0;
if($wholesale_in_progress_commission){
foreach($wholesale_in_progress_commission['data'] as $key => &$val){
$ids = json_decode($val['wholesale_fenxiao_id'],true);
$detail = json_decode($val['wholesale_fenxiao_detail'],true);
$search = array_search($info[ 'data' ][ 'fenxiao_id' ],$ids);
if($search !== false){
$wholesale_money += $detail[$search]['commission'];
}
}
}
$founder_in_progress_commission = $fenxiao_order_model->getFenxiaoOrderList([ [ 'founder_fenxiao_id', 'like', '%'.$info[ 'data' ][ 'fenxiao_id' ].'%' ], [ 'is_settlement', '=', 0 ], [ 'is_refund', '=', 0 ] ], 'founder_fenxiao_id,founder_fenxiao_detail');
$founder_money = 0;
if($founder_in_progress_commission){
foreach($founder_in_progress_commission['data'] as $key => &$val){
$ids = json_decode($val['founder_fenxiao_id'],true);
$detail = json_decode($val['founder_fenxiao_detail'],true);
$search = array_search($info[ 'data' ][ 'fenxiao_id' ],$ids);
if($search !== false){
$founder_money += $detail[$search]['commission'];
}
}
}
if (!empty($one_in_progress_commission[ 'data' ][ 'commission' ])) $info[ 'data' ][ 'in_progress_money' ] += $one_in_progress_commission[ 'data' ][ 'commission' ];
if (!empty($two_in_progress_commission[ 'data' ][ 'commission' ])) $info[ 'data' ][ 'in_progress_money' ] += $two_in_progress_commission[ 'data' ][ 'commission' ];
if (!empty($three_in_progress_commission[ 'data' ][ 'commission' ])) $info[ 'data' ][ 'in_progress_money' ] += $three_in_progress_commission[ 'data' ][ 'commission' ];
if ($wholesale_money) $info[ 'data' ][ 'in_progress_money' ] += $wholesale_money;
if ($founder_money) $info[ 'data' ][ 'in_progress_money' ] += $founder_money;
}
return $this->response($info);
}

View File

@ -82,6 +82,8 @@ class Order extends BaseApi
$condition = [
['fo.one_fenxiao_id|fo.two_fenxiao_id|fo.three_fenxiao_id', '=', $fenxiao_info['data']['fenxiao_id']]
];
$OR = [[ 'fo.wholesale_fenxiao_id', 'like', ['%'.$fenxiao_info['data']['fenxiao_id'].'%']],[ 'fo.founder_fenxiao_id', 'like', ['%'.$fenxiao_info['data']['fenxiao_id'].'%']]];
// $OR = [];
if (!empty($is_settlement)) {
if ($is_settlement == 3) {
$condition[] = ['fo.is_refund', '=', 1];
@ -93,23 +95,39 @@ class Order extends BaseApi
}
$order_model = new FenxiaoOrderModel();
$list = $order_model->getFenxiaoOrderPageList($condition, $page, $page_size, 'fo.fenxiao_order_id desc');
$list = $order_model->getFenxiaoOrderPageList($condition, $page, $page_size, 'fo.fenxiao_order_id desc',$OR);
if (!empty($list['data']['list'])) {
foreach ($list['data']['list'] as $k => $item) {
if ($item['one_fenxiao_id'] == $fenxiao_info['data']['fenxiao_id']) {
$list['data']['list'][$k]['commission'] = $item['one_commission'];
$list['data']['list'][$k]['one_commission'] = $item['one_commission'];
$list['data']['list'][$k]['commission_level'] = 1;
unset($list['data']['list'][$k]['two_commission']);
} elseif ($item['two_fenxiao_id'] == $fenxiao_info['data']['fenxiao_id']) {
$list['data']['list'][$k]['commission'] = $item['two_commission'];
$list['data']['list'][$k]['two_commission'] = $item['two_commission'];
$list['data']['list'][$k]['commission_level'] = 2;
} elseif ($item['three_fenxiao_id'] == $fenxiao_info['data']['fenxiao_id']) {
$list['data']['list'][$k]['commission'] = $item['three_commission'];
$list['data']['list'][$k]['commission_level'] = 3;
unset($list['data']['list'][$k]['one_commission']);
}else{
unset($list['data']['list'][$k]['one_commission']);
unset($list['data']['list'][$k]['two_commission']);
}
$list['data']['list'][$k] = array_diff_key($list['data']['list'][$k], ['one_fenxiao_id' => '', 'one_rate' => '', 'one_commission' => '', 'one_fenxiao_name' => '', 'two_fenxiao_id' => '', 'two_rate' => '', 'two_commission' => '', 'two_fenxiao_name' => '', 'three_fenxiao_id' => '', 'three_rate' => '', 'three_commission' => '', 'three_fenxiao_name' => '']);
$ids = json_decode($item['wholesale_fenxiao_id'],true);
$detail = json_decode($item['wholesale_fenxiao_detail'],true);
$search = array_search($fenxiao_info['data']['fenxiao_id'],$ids);
if($search !== false){
$list['data']['list'][$k]['wholesale_point'] = $detail[$search]['commission'];
}
$ids = json_decode($item['founder_fenxiao_id'],true);
$detail = json_decode($item['founder_fenxiao_detail'],true);
$search = array_search($fenxiao_info['data']['fenxiao_id'],$ids);
if($search !== false){
$list['data']['list'][$k]['founder_point'] = $detail[$search]['commission'];
}
// if($item['fenxiao_order_id'] == 150){
// dump($list['data']['list'][$k]);
// }
}
}
return $this->response($list);
}
}
}

View File

@ -32,6 +32,8 @@ class Config extends BaseModel
//分销基本设置
$basics_data = [
'level' => $data[ 'level' ],//分销层级
'return' => $data[ 'return' ],//分销层级
'time' => $data[ 'time' ],//分销层级
'internal_buy' => $data[ 'internal_buy' ],//分销内购
'is_examine' => $data[ 'is_examine' ],//是否需要审核
'self_purchase_rebate' => $data[ 'self_purchase_rebate' ],//是否开启分销商自购返佣
@ -42,7 +44,7 @@ class Config extends BaseModel
'indirect_rate' => $data[ 'indirect_rate' ],//默认间推
'founder_rate' => $data[ 'founder_rate' ],//创始人分红比例
'four_rate' => $data[ 'four_rate' ],//创始人分红比例
'weight_rate' => $data[ 'weight_rate' ],//创始人分红比例
];
$config->setConfig($basics_data, '分销基本配置', $is_use, [ [ 'site_id', '=', $site_id ], [ 'app_module', '=', 'shop' ], [ 'config_key', '=', 'FENXIAO_BASICS_CONFIG' ] ]);
//分销商设置
@ -81,6 +83,7 @@ class Config extends BaseModel
if (empty($res[ 'data' ][ 'value' ])) {
$res[ 'data' ][ 'value' ] = [
'level' => 2,//分销层级
'return' => 1,//分红返还
'internal_buy' => 0,//分销内购
'is_examine' => 0,//是否需要审核
'is_apply' => 0,//分销商申请方式
@ -88,6 +91,8 @@ class Config extends BaseModel
'indirect_rate' => 0,//是否开启商品详情一级佣金
'founder_rate' => 0,//是否开启商品详情一级佣金
'four_rate' => 0,//是否开启商品详情一级佣金
'time' => 1,//加权分红时间段
'weight_rate' => 0//加权分红比例
];
}
$res[ 'data' ][ 'value' ][ 'is_commission_money' ] = $res[ 'data' ][ 'value' ][ 'is_commission_money' ] ?? 1;
@ -99,6 +104,9 @@ class Config extends BaseModel
$res[ 'data' ][ 'value' ][ 'indirect_rate' ] = $res[ 'data' ][ 'value' ][ 'indirect_rate' ] ?? 0;
$res[ 'data' ][ 'value' ][ 'founder_rate' ] = $res[ 'data' ][ 'value' ][ 'founder_rate' ] ?? 0;
$res[ 'data' ][ 'value' ][ 'four_rate' ] = $res[ 'data' ][ 'value' ][ 'four_rate' ] ?? 0;
$res[ 'data' ][ 'value' ][ 'return' ] = $res[ 'data' ][ 'value' ][ 'return' ] ?? 1;
$res[ 'data' ][ 'value' ][ 'time' ] = $res[ 'data' ][ 'value' ][ 'time' ] ?? 1;
$res[ 'data' ][ 'value' ][ 'weight_rate' ] = $res[ 'data' ][ 'value' ][ 'weight_rate' ] ?? 0;
return $res;
}

View File

@ -236,21 +236,19 @@ class Fenxiao extends BaseModel
public function getFenxiaoTeam($level, $fenxiao_id, $page = 1, $page_size = PAGE_LIST_ROWS, $is_pay = 0)
{
$condition = '';
// 下级分销商id集合
$one_level_fenxiao = model('fenxiao')->getColumn([ [ 'parent', '=', $fenxiao_id ] ], 'fenxiao_id');
switch ( $level ) {
switch ($level) {
// 一级分销
case 1:
// 直属会员 + 直属下级分销商
$or = " OR (f.parent = {$fenxiao_id}) ";
$condition = "( (m.fenxiao_id = {$fenxiao_id} AND m.is_fenxiao = 0) " . $or . ") AND m.is_delete = 0";
$condition = "f.parent = {$fenxiao_id}";
break;
// 二级分销
case 2:
// 下级分销商id集合
$one_level_fenxiao = model('fenxiao')->getColumn([['parent', '=', $fenxiao_id]], 'fenxiao_id');
// 直属下级分销商的下级分销商 + 直属下级分销商的会员
if (!empty($one_level_fenxiao)) {
$or = " OR (f.parent in (" . implode($one_level_fenxiao) . ") ) ";
$condition = "( (m.is_fenxiao = 0 AND m.fenxiao_id in (" . implode(',', $one_level_fenxiao) . ") )" . $or . ") AND m.is_delete = 0";
$condition = "f.grand_parent in (" . implode(',',$one_level_fenxiao) . ")";
}
break;
}
@ -264,9 +262,11 @@ class Fenxiao extends BaseModel
$field = 'm.member_id,m.nickname,m.headimg,m.is_fenxiao,m.reg_time,m.order_money,m.order_complete_money,m.order_num,m.order_complete_num,m.bind_fenxiao_time,f.fenxiao_id,f.fenxiao_no,f.fenxiao_name,f.audit_time,f.level_name,f.one_child_num,f.one_child_fenxiao_num';
$alias = 'm';
$join = [
[ 'fenxiao f', 'm.member_id = f.member_id', 'left' ]
['fenxiao f', 'm.member_id = f.member_id', 'left']
];
$list = model('member')->pageList($condition, $field, 'm.bind_fenxiao_time desc', $page, $page_size, $alias, $join);
return $this->success($list);
}
@ -286,7 +286,7 @@ class Fenxiao extends BaseModel
case 2:
// 直属下级分销商的下级分销商 + 直属下级分销商的会员
if (!empty($one_level_fenxiao)) {
$or = " OR (f.parent in (" . implode($one_level_fenxiao) . ") ) ";
$or = " OR (f.grand_parent in (" . implode(',',$one_level_fenxiao) . ") ) ";
$condition = "( (m.is_fenxiao = 0 AND m.fenxiao_id in (" . implode(',', $one_level_fenxiao) . ") )" . $or . ") AND m.is_delete = 0";
}
break;
@ -336,7 +336,7 @@ class Fenxiao extends BaseModel
$return[ 'num' ] += $num;
$return[ 'member_num' ] += $num;
$num = model('fenxiao')->getCount([ [ 'parent', 'in', $one_level_fenxiao ], [ 'is_delete', '=', 0 ] ], 'fenxiao_id');
$num = model('fenxiao')->getCount([ [ 'grand_parent', 'in', $one_level_fenxiao ], [ 'is_delete', '=', 0 ] ], 'fenxiao_id');
$return[ 'num' ] += $num;
$return[ 'fenxiao_num' ] += $num;
}

View File

@ -10,6 +10,7 @@
namespace addon\fenxiao\model;
use addon\fenxiao\model\Config as ConfigModel;
use app\model\BaseModel;
@ -32,7 +33,7 @@ class FenxiaoAccount extends BaseModel
* @param $relate_id
* @return array
*/
public function addAccount($fenxiao_id, $fenxiao_name, $type, $money, $relate_id)
public function addAccount($fenxiao_id, $fenxiao_name, $type, $money, $relate_id,$site_id)
{
$account_no = date('YmdHi') . rand(1000, 9999);
$data = array (
@ -41,14 +42,22 @@ class FenxiaoAccount extends BaseModel
'account_no' => $account_no,
'money' => $money,
'type' => $type,
'site_id' => $site_id,
'type_name' => $this->type[ $type ],
'relate_id' => $relate_id,
'create_time' => time(),
);
$res = model('fenxiao_account')->add($data);
$member_id = model('fenxiao')->getValue([ [ 'fenxiao_id', '=', $fenxiao_id ] ],'member_id');
model('fenxiao')->setInc([ [ 'member_id', '=', $member_id ] ], 'point', $money);
$model = new ConfigModel();
$basics = $model->getFenxiaoBasicsConfig($site_id);
$config = $basics[ 'data' ][ 'value' ];
if($config['return'] == 1){
$member_id = model('fenxiao')->getValue([ [ 'fenxiao_id', '=', $fenxiao_id ] ],'member_id');
model('member')->setInc([ [ 'member_id', '=', $member_id ] ], 'point', $money);
}else{
model('fenxiao')->setInc([ [ 'fenxiao_id', '=', $fenxiao_id ] ], 'account', $money);
}
return $this->success($res);
}

View File

@ -324,7 +324,7 @@ class FenxiaoOrder extends BaseModel
foreach ($fenxiao_orders as $fenxiao_order) {
$site_id = $fenxiao_order[ 'site_id' ];
$commission += $fenxiao_order[ 'one_commission' ];
$fenxiao_account->addAccount($fenxiao_order[ 'one_fenxiao_id' ], $fenxiao_order[ 'one_fenxiao_name' ], 'order', $fenxiao_order[ 'one_commission' ], $fenxiao_order[ 'fenxiao_order_id' ]);
$fenxiao_account->addAccount($fenxiao_order[ 'one_fenxiao_id' ], $fenxiao_order[ 'one_fenxiao_name' ], 'order', $fenxiao_order[ 'one_commission' ], $fenxiao_order[ 'fenxiao_order_id' ],$site_id);
// 分销佣金发放通知
( new Message() )->sendMessage([
@ -338,7 +338,7 @@ class FenxiaoOrder extends BaseModel
if ($fenxiao_order[ 'two_commission' ] > 0) {
$commission += $fenxiao_order[ 'two_commission' ];
$fenxiao_account->addAccount($fenxiao_order[ 'two_fenxiao_id' ], $fenxiao_order[ 'two_fenxiao_name' ], 'order', $fenxiao_order[ 'two_commission' ], $fenxiao_order[ 'fenxiao_order_id' ]);
$fenxiao_account->addAccount($fenxiao_order[ 'two_fenxiao_id' ], $fenxiao_order[ 'two_fenxiao_name' ], 'order', $fenxiao_order[ 'two_commission' ], $fenxiao_order[ 'fenxiao_order_id' ],$site_id);
// 分销佣金发放通知
( new Message() )->sendMessage([
@ -352,7 +352,7 @@ class FenxiaoOrder extends BaseModel
}
if ($fenxiao_order[ 'three_commission' ] > 0) {
$commission += $fenxiao_order[ 'three_commission' ];
$fenxiao_account->addAccount($fenxiao_order[ 'three_fenxiao_id' ], $fenxiao_order[ 'three_fenxiao_name' ], 'order', $fenxiao_order[ 'three_commission' ], $fenxiao_order[ 'fenxiao_order_id' ]);
$fenxiao_account->addAccount($fenxiao_order[ 'three_fenxiao_id' ], $fenxiao_order[ 'three_fenxiao_name' ], 'order', $fenxiao_order[ 'three_commission' ], $fenxiao_order[ 'fenxiao_order_id' ],$site_id);
// 分销佣金发放通知
( new Message() )->sendMessage([
'keywords' => 'COMMISSION_GRANT',
@ -408,13 +408,13 @@ class FenxiaoOrder extends BaseModel
* @param string $page_size
* @param string $order
*/
public function getFenxiaoOrderPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = 'fo.order_id DESC')
public function getFenxiaoOrderPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = 'fo.order_id DESC',$or = [])
{
$field = '
fo.fenxiao_order_id,fo.order_no,fo.site_id,fo.site_name,fo.sku_id,fo.sku_name,fo.sku_image,fo.price,fo.num,fo.real_goods_money,fo.member_name,
fo.member_mobile,fo.one_fenxiao_name,fo.is_settlement,fo.commission,fo.is_refund,
o.order_status_name,o.create_time,fo.one_fenxiao_id,fo.two_fenxiao_id,fo.three_fenxiao_id,fo.one_commission,fo.two_commission,fo.three_commission
';
,fo.wholesale_fenxiao_id,fo.wholesale_fenxiao_detail,fo.founder_fenxiao_id,fo.founder_fenxiao_detail';
$alias = 'fo';
$join = [
@ -424,7 +424,7 @@ class FenxiaoOrder extends BaseModel
'inner'
]
];
$list = model('fenxiao_order')->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
$list = model('fenxiao_order')->pageList($condition, $field, $order, $page, $page_size, $alias, $join,null,null,$or);
return $this->success($list);
}
@ -440,6 +440,18 @@ class FenxiaoOrder extends BaseModel
return $this->success($fenxiao_order_info);
}
/**
* 查询订单信息
* @param $condition
* @param string $field
* @return array
*/
public function getFenxiaoOrderList($condition, $field = '*')
{
$fenxiao_order_info = model('fenxiao_order')->getList($condition, $field);
return $this->success($fenxiao_order_info);
}
/**
* 查询订单信息
* @param $condition

View File

@ -34,6 +34,8 @@ class Config extends BaseShop
$data = [
'level' => input('level', ''),//分销层级
'return' => input('return', ''),//分销层级
'time' => input('time', ''),//加权分红时间
'internal_buy' => input('internal_buy', ''),//分销内购
'is_examine' => input('is_examine', ''),//是否需要审核0关闭 1开启
'self_purchase_rebate' => input('self_purchase_rebate', ''),//是否开启分销商自购返佣0关闭 1开启
@ -53,6 +55,7 @@ class Config extends BaseShop
'direct_rate' => input('direct_rate', 0.00),
'indirect_rate' => input('indirect_rate', 0.00),
'founder_rate' => input('founder_rate', 0.00),
'weight_rate' => input('weight_rate', 0.00),
'is_support_cashier' => input('is_support_cashier', 0)
];
@ -61,7 +64,6 @@ class Config extends BaseShop
} else {
$basics = $model->getFenxiaoBasicsConfig($this->site_id);
$this->assign("basics_info", $basics[ 'data' ][ 'value' ]);
$fenxiao = $model->getFenxiaoConfig($this->site_id);
$fenxiao[ 'data' ][ 'value' ][ 'goods_list' ] = '';

View File

@ -128,7 +128,7 @@ class Goods extends BaseShop
foreach ($fenxiao_skus as $level_id => $level_data) {
foreach ($level_data[ 'sku_id' ] as $key => $sku_id) {
$fenxiao_total = 0;
$fenxiao_level = [ 'one', 'two', 'three', 'direct', 'indirect' ];
$fenxiao_level = [ 'one', 'two', 'three','four', 'direct', 'indirect' ];
foreach ($fenxiao_level as $level) {
$item_rate_array = $level_data[ $level . '_rate' ] ?? [];
$item_rate = $item_rate_array[ $key ] ?? 0;
@ -151,15 +151,6 @@ class Goods extends BaseShop
return error(-1, '分销总金额不能大于商品sku价格的100%');
}
if ($fenxiao_config[ 'level' ] < 3) {
$three_rate = 0;
$three_money = 0;
//通过分销设置的等级配置
if ($fenxiao_config[ 'level' ] < 2) {
$two_rate = 0;
$two_money = 0;
}
}
$fenxiao_sku = [
'goods_id' => $goods_id,
'level_id' => $level_id,
@ -170,6 +161,8 @@ class Goods extends BaseShop
'two_money' => $two_money ?? 0,
'three_rate' => $three_rate ?? 0,
'three_money' => $three_money ?? 0,
'four_rate' => $four_rate ?? 0,
'four_money' => $four_money ?? 0,
'direct_rate' => $direct_rate ?? 0,
'direct_money' => $direct_money ?? 0,
'indirect_rate' => $indirect_rate ?? 0,

View File

@ -61,6 +61,33 @@
</div>
<div class="word-aux ">开启后,商品详情显示,关闭后,商品详情不显示</div>
</div>
<div class="layui-form-item distribution-index">
<label class="layui-form-label">分红返还:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="radio" name="return" value="1" title="积分" {if $basics_info.return == 1} checked {/if} lay-filter="return"/>
<input type="radio" name="return" value="2" title="佣金" {if $basics_info.return == 2} checked {/if} lay-filter="return"/>
</div>
</div>
</div>
<div class="layui-form-item distribution-index">
<label class="layui-form-label">加权分红时间:</label>
<div class="layui-input-block">
<div class="layui-input-inline">
<input type="radio" name="time" value="1" title="每天" {if $basics_info.time == 1} checked {/if} lay-filter="return"/>
<input type="radio" name="time" value="2" title="每周" {if $basics_info.time == 2} checked {/if} lay-filter="return"/>
<input type="radio" name="time" value="3" title="每月" {if $basics_info.time == 3} checked {/if} lay-filter="return"/>
</div>
</div>
<div class="word-aux">设置为每天后固定为凌晨12点</div>
<div class="word-aux">设置为每周后固定为周一凌晨12点</div>
<div class="word-aux">设置为每月后固定为一号凌晨12点</div>
<!-- <div class="word-aux {if $basics_info.time != 1}layui-hide{/if}" >设置为每天后固定为凌晨12点</div>-->
<!-- <div class="word-aux {if $basics_info.time != 2}layui-hide{/if}" >设置为每周后固定为周一凌晨12点</div>-->
<!-- <div class="word-aux {if $basics_info.time != 3}layui-hide{/if}">设置为每月后固定为一号凌晨12点</div>-->
</div>
</div>
</div>
@ -261,6 +288,18 @@
<p>会员购买后给上级创始人分销商的分红比例</p>
</div>
</div>
<div class="fenxiao-rate">
<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="weight_rate" value="{$basics_info.weight_rate ?? 0}" lay-verify="weight_rate" autocomplete="off" class="layui-input len-short">
</div>
<div class="layui-form-mid">%</div>
</div>
<div class="word-aux">
<p>根据设置时间按时给最高等级分销商分红</p>
</div>
</div>
</div>
</div>
@ -492,7 +531,6 @@
// 表格渲染
function renderTable(goods_list) {
console.log(goods_list,77777)
//展示已知数据
table = new Table({
elem: '#selected_sku_list',
@ -549,5 +587,6 @@
$(obj).val(Math.floor(Math.abs($(obj).val())));
}
}
</script>
{/block}

View File

@ -229,12 +229,12 @@
{if isset($goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id])}
<div class="line-height">
<div><input class="layui-input len-short input-rate" type="number" min="0" max="100" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][one_rate][]" value="{$goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['one_rate'] ?: ''}" {if $goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['one_money'] > 0}disabled{/if} > %</div>
<div><input class="layui-input len-short input-num" type="number" min="0" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][one_money][]" value="{$goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['one_money'] ?: ''}" {if $goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['one_rate'] > 0}disabled{/if} > 元</div>
<!-- <div><input class="layui-input len-short input-num" type="number" min="0" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][one_money][]" value="{$goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['one_money'] ?: ''}" {if $goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['one_rate'] > 0}disabled{/if} > 元</div>-->
</div>
{else/}
<div class="line-height">
<div><input class="layui-input len-short input-rate" type="number" min="0" max="100" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][one_rate][]" value="" > %</div>
<div><input class="layui-input len-short input-num" type="number" min="0" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][one_money][]" value="" ></div>
<!-- <div><input class="layui-input len-short input-num" type="number" min="0" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][one_money][]" value="" > 元</div>-->
</div>
{/if}
{/foreach}
@ -244,12 +244,12 @@
{if isset($goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id])}
<div class="line-height">
<div><input class="layui-input len-short input-rate" type="number" min="0" max="100" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][two_rate][]" value="{$goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['two_rate'] ?: ''}" {if $goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['two_money'] > 0}disabled{/if} > %</div>
<div><input class="layui-input len-short input-num" type="number" min="0" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][two_money][]" value="{$goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['two_money'] ?: ''}" {if $goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['two_rate'] > 0}disabled{/if} > 元</div>
<!-- <div><input class="layui-input len-short input-num" type="number" min="0" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][two_money][]" value="{$goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['two_money'] ?: ''}" {if $goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['two_rate'] > 0}disabled{/if} > 元</div>-->
</div>
{else/}
<div class="line-height">
<div><input class="layui-input len-short input-rate" type="number" min="0" max="100" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][two_rate][]" value=""> %</div>
<div><input class="layui-input len-short input-num" type="number" min="0" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][two_money][]" value=""></div>
<!-- <div><input class="layui-input len-short input-num" type="number" min="0" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][two_money][]" value=""> 元</div>-->
</div>
{/if}
{/foreach}
@ -259,12 +259,12 @@
{if isset($goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id])}
<div class="line-height">
<div><input class="layui-input len-short input-rate" type="number" min="0" max="100" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][three_rate][]" value="{$goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['three_rate'] ?: ''}" {if $goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['three_money'] > 0}disabled{/if} > %</div>
<div><input class="layui-input len-short input-num" type="number" min="0" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][three_money][]" value="{$goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['three_money'] ?: ''}" {if $goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['three_rate'] > 0}disabled{/if} > 元</div>
<!-- <div><input class="layui-input len-short input-num" type="number" min="0" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][three_money][]" value="{$goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['three_money'] ?: ''}" {if $goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['three_rate'] > 0}disabled{/if} > 元</div>-->
</div>
{else/}
<div class="line-height">
<div><input class="layui-input len-short input-rate" type="number" min="0" max="100" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][three_rate][]" value=""> %</div>
<div><input class="layui-input len-short input-num" type="number" min="0" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][three_money][]" value=""></div>
<!-- <div><input class="layui-input len-short input-num" type="number" min="0" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][three_money][]" value=""> 元</div>-->
</div>
{/if}
{/foreach}
@ -275,12 +275,12 @@
{if isset($goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id])}
<div class="line-height">
<div><input class="layui-input len-short input-rate" type="number" min="0" max="100" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][four_rate][]" value="{$goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['four_rate'] ?: ''}" {if $goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['four_money'] > 0}disabled{/if} > %</div>
<div><input class="layui-input len-short input-num" type="number" min="0" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][four_money][]" value="{$goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['four_money'] ?: ''}" {if $goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['four_rate'] > 0}disabled{/if} > 元</div>
<!-- <div><input class="layui-input len-short input-num" type="number" min="0" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][four_money][]" value="{$goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['four_money'] ?: ''}" {if $goods_info['fenxiao_skus'][$level.level_id . '_' . $sku.sku_id]['four_rate'] > 0}disabled{/if} > 元</div>-->
</div>
{else/}
<div class="line-height">
<div><input class="layui-input len-short input-rate" type="number" min="0" max="100" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][four_rate][]" value=""> %</div>
<div><input class="layui-input len-short input-num" type="number" min="0" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][four_money][]" value=""></div>
<!-- <div><input class="layui-input len-short input-num" type="number" min="0" lay-verify="required|flnum" name="fenxiao[{$level.level_id}][four_money][]" value=""> 元</div>-->
</div>
{/if}
{/foreach}

View File

@ -14,6 +14,7 @@
namespace app\api\controller;
use app\model\account\Account as accountModel;
use app\model\member\MemberAccount as MemberAccountModel;
use app\model\member\Member as MemberModel;
@ -124,4 +125,46 @@ class Memberaccount extends BaseApi
$data = ( new MemberModel() )->getMemberUsableBalance($this->site_id, $this->member_id);
return $this->response($data);
}
}
public function withdraw(){
$token = $this->checkToken();
if ($token[ 'code' ] < 0) return $this->response($token);
$set = (new accountModel())->getPointConfig($this->site_id);
$member_model = new MemberModel();
$info = $member_model->getMemberInfo([ [ 'member_id', '=', $token[ 'data' ][ 'member_id' ] ] ]);
$set['member_point'] = $info['data']['point'];
return $this->response($set);
}
public function search(){
$search = $this->params[ 'search' ];
if($search){
$member_model = new MemberModel();
$condition = [
['member_id|mobile', '=' ,$search]
];
$info = $member_model->getMemberInfo($condition,'member_id,nickname');
if($info['data']){
return $this->response($this->success($info['data']));
}else{
return $this->response($this->error($search,'未找到此用户'));
}
}else{
return $this->response($this->error($search,'请输入需要转赠的用户信息'));
}
}
public function give(){
$token = $this->checkToken();
if ($token[ 'code' ] < 0) return $this->response($token);
$give_id = $this->params[ 'give_id' ];
$point = $this->params[ 'point' ];
if($give_id && $point){
$member_model = new MemberAccountModel();
$res = $member_model->giveMemberPoint($give_id,$token[ 'data' ][ 'member_id' ],$point,$this->site_id);
return $this->response($res);
}else{
return $this->response($this->error([$give_id,$point],'请输入需要转赠的用户信息'));
}
}
}

View File

@ -229,7 +229,9 @@ class Ordercreate extends BaseApi
}
$res = $order_create->orderPayment($data); //计算订单优惠
if(isset($res) && $res['code'] === -10001){
return $this->response($this->error($res['data'],$res['data']['message']));
}
$res[ 'shop_goods_list' ][ 'promotion' ][ 'manjian' ][ 'manjian_info' ] = [];
if (!empty($res[ 'shop_goods_list' ][ 'promotion' ][ 'manjian' ][ 0 ][ 'manjian_id' ])) {
$manjian_model = new ManjianModel();
@ -257,4 +259,4 @@ class Ordercreate extends BaseApi
];
return $this->response(success(0,'成功',$res));
}
}
}

View File

@ -74,7 +74,6 @@ class DiyViewEdit extends Controller
$name = $diy_view_info[ 'name' ];
$template_id = $diy_view_info[ 'template_id' ];
}
// dump($diy_view_info);die;
$this->assign("diy_view_info", $diy_view_info);
}

View File

@ -116,7 +116,7 @@ class Model
* @param string $group
* @param string $limit
*/
final public function pageList($condition = [], $field = true, $order = '', $page = 1, $list_rows = PAGE_LIST_ROWS, $alias = 'a', $join = [], $group = null, $limit = null)
final public function pageList($condition = [], $field = true, $order = '', $page = 1, $list_rows = PAGE_LIST_ROWS, $alias = 'a', $join = [], $group = null, $limit = null,$or = [])
{
//关联查询多表无法控制不缓存,单独业务处理
if ($this->is_cache && empty($join)) {
@ -140,6 +140,9 @@ class Model
if (!empty($limit)) {
self::$query_obj = self::$query_obj->limit($limit);
}
if($or){
self::$query_obj = self::$query_obj->whereOr($or);
}
$count = $count_obj->count();
if ($list_rows == 0) {
//查询全部
@ -240,9 +243,9 @@ class Model
if ($this->is_cache && empty($join)) {
$cache_name = $this->table . '_' . __FUNCTION__ . '_' . serialize(func_get_args());
$cache = Cache::get($cache_name);
// if (!empty($cache)) {
// return $cache;
// }
if (!empty($cache)) {
return $cache;
}
}
if (empty($join)) {

View File

@ -22,6 +22,11 @@ class Account extends BaseModel{
'commission_handling_fees' => '',// 平台抽成相关收益提现手续费(百分比)
];
public array $defaultPointConfig = [
'is_open' => 0,// 是否开启转增
'commission_handling_fees' => 0,// 手续费(百分比)
];
/**
* Common: 财务设置 - 设置
* Author: wu-hui
@ -55,7 +60,43 @@ class Account extends BaseModel{
$res = (new Config())->getConfig($setWhere);
$value = $res['data'] ? $res['data']['value'] : [];
return array_merge($this->defaultConfig, $value);
return array_merge($this->defaultPointConfig, $value);
}
/**
* Common: 财务设置 - 设置
* Author: wu-hui
* Time: 2024/05/22 13:35
* @param int $siteId
* @param array $data
* @return array
*/
public function setPointConfig(int $siteId = 0,array $data = []){
$setWhere = [
['site_id','=', $siteId],
['app_module','=','shop'],
['config_key','=','point_give_setting']
];
return (new Config())->setConfig($data, '积分转赠设置', 1, $setWhere);
}
/**
* Common: 财务设置 - 获取
* Author: wu-hui
* Time: 2024/05/22 13:35
* @param int $siteId
* @return array|string[]
*/
public function getPointConfig(int $siteId = 0){
$setWhere = [
['site_id','=', $siteId],
['app_module','=','shop'],
['config_key','=','point_give_setting']
];
$res = (new Config())->getConfig($setWhere);
$value = $res['data'] ? $res['data']['value'] : [];
return array_merge($this->defaultPointConfig, $value);
}
/**
@ -241,4 +282,4 @@ class Account extends BaseModel{
}
}

View File

@ -117,6 +117,8 @@ class MemberAccount extends BaseModel
$from_type[ 'point' ][ 'point_expire' ] = [ 'type_name' => '积分到期', 'type_url' => '' ];
$from_type[ 'point' ][ 'point_set_zero' ] = [ 'type_name' => '积分清零', 'type_url' => '' ];
$from_type['point']['give'] = [ 'type_name' => '积分转赠', 'type_url' => '' ];
$this->from_type = $from_type;
}
@ -191,7 +193,6 @@ class MemberAccount extends BaseModel
'remark' => $remark,
'related_id'=>$related_id,
);
model('member_account')->add($data);
//账户更新
model('member')->update([
@ -322,4 +323,22 @@ class MemberAccount extends BaseModel
}
}
public function giveMemberPoint($give_id,$member_id,$point,$site_id){
$member_model = new MemberModel();
$member_info = $member_model->getMemberInfo([['member_id' ,'=',$member_id]],'member_id,point');
if($give_id == $member_id){
return $this->error('', '转赠人和赠送人不能相同');
}
if($point > $member_info['data']['point']){
return $this->error('', '转赠积分超出可转赠积分');
}
//添加记录
$res = self::addMemberAccount($site_id, $member_id, 'point', -$point, 'give', $give_id, "转赠积分给用户".$give_id);
if($res){
self::addMemberAccount($site_id, $give_id, 'point', $point, 'give', $member_id, "获取用户".$give_id.'的转赠积分');
}
return $this->success($res);
}
}

View File

@ -77,7 +77,6 @@ class OrderCreate extends BaseModel
{
//查询出会员相关信息
$calculate_data = $this->calculate($data);
if (isset($calculate_data['code']) && $calculate_data['code'] < 0)
return $calculate_data;
if ($this->error > 0) {
@ -497,8 +496,20 @@ class OrderCreate extends BaseModel
if ($data['is_balance'] > 0) {
$this->member_balance_money = $data['member_account']['balance_total'] ?? 0;
}
//商品列表信息
$shop_goods_list = $this->getOrderGoodsCalculate($data); //获取产品信息
$kind = array_column($shop_goods_list['goods_list'],'goods_kind_id');
$search = array_search(1,$kind);
$join = [
['fenxiao_level l', 'f.level_id = l.level_id', 'right']
];
$fenxiao_info = model('fenxiao')->getInfo([['f.member_id','=',$data['member_id']]],'f.fenxiao_id,f.level_id,l.level_num','f',$join);
if((!$fenxiao_info || $fenxiao_info['level_num'] === 0) && $search !== false){
return $this->error(1, "购买此商品需要有分销身份");
}
if ($shop_goods_list['goods_list'][0]['is_virtual']) {
$this->is_virtual = 1;
} else {
@ -588,6 +599,9 @@ class OrderCreate extends BaseModel
{
$site_id = $data['site_id'];
$calculate_data = $this->calculate($data);
if(isset($calculate_data['code']) && $calculate_data['code'] === -10001){
return $this->error($calculate_data);
}
$express_type = [];
if ($this->is_virtual == 0) {
$trade_result = event('OrderCreateCommonData', ['type' => 'trade', 'data' => $calculate_data], true);
@ -714,6 +728,7 @@ class OrderCreate extends BaseModel
public function getOrderGoodsCalculate($data)
{
$shop_goods = $this->getCartGoodsList($data);
$shop_goods['promotion_money'] = 0;
$shop_goods_list = $shop_goods;
// 会员卡项抵扣
@ -825,6 +840,7 @@ class OrderCreate extends BaseModel
$v['real_goods_money'] = $v['goods_money'];
$v['coupon_money'] = 0; //优惠券金额
$v['promotion_money'] = 0; //优惠金额
$v['goods_kind_id'] = model('goods')->getValue([['goods_id' ,'=' ,$v['goods_id']]],'goods_kind_id');
if (!empty($shop_goods_list)) {
$shop_goods_list['goods_list'][] = $v;
$shop_goods_list['order_name'] = string_split($shop_goods_list['order_name'], ',', $v['sku_name']);

View File

@ -15,7 +15,7 @@ use addon\coupon\model\Coupon;
use app\model\account\Point;
use app\model\member\Member as MemberModel;
use app\model\member\MemberAccount as MemberAccountModel;
use app\model\account\Account as accountModel;
/**
* 会员账户管理 控制器
*/
@ -43,6 +43,23 @@ class Memberaccount extends BaseShop
return $this->fetch('account/point');
}
public function set(){
if (request()->isAjax()) {
// 参数获取
$info = input('set',[]);
(new accountModel())->setPointConfig($this->site_id, $info);
return success(0, '修改成功');
}
else {
$set = (new accountModel())->getPointConfig($this->site_id);
$set['is_open'] = (int)$set['is_open'];
return $this->fetch("account/set",[
'set' => json_encode($set),
]);
}
}
/**
* 积分规则
* @return mixed
@ -62,7 +79,9 @@ class Memberaccount extends BaseShop
$this->assign('consume_point', abs(round($consume_point)));
$rule = event('PointRule', ['site_id' => $this->site_id]);
$set = (new accountModel())->getConfig($this->site_id);
$this->assign('rule', $rule);
$this->assign('set', json_encode($set, JSON_UNESCAPED_UNICODE));
return $this->fetch('account/point_config');
}
@ -217,4 +236,4 @@ class Memberaccount extends BaseShop
return $result;
}
}
}

View File

@ -105,6 +105,33 @@
</div>
</div>
</script>
<script>
new Vue({
el:'#vueContent',
data(){
return {
set: JSON.parse('{$set|raw}'),
};
},
mounted(){},
methods: {
// 提交修改
submitSet(){
let _this = this;
$.ajax({
url: ns.url("shop/account/set"),
data: { set: _this.set },
dataType: 'JSON',
type: 'POST',
success: function(res) {
layer.msg(res.message);
}
});
}
}
});
</script>
<script>
var form, laydate, laytpl;
layui.use(['laydate','form', 'element', 'laytpl'], function(){
@ -181,4 +208,4 @@
});
}
</script>
{/block}
{/block}

View File

@ -13,16 +13,12 @@
{block name="main"}
<div id="vueContent">
<el-form ref="form" :model="set" label-width="200px">
<el-form-item label="转账方式:">
<el-checkbox-group v-model="set.account_type">
<el-checkbox label="card">银行卡</el-checkbox>
<el-checkbox label="wechat">微信零钱</el-checkbox>
<el-checkbox label="alipay">支付宝</el-checkbox>
<!--<el-checkbox label="balance">余额</el-checkbox>-->
<el-checkbox label="threeStaff">第三方打款(灵活用工)</el-checkbox>
</el-checkbox-group>
<el-form-item label="是否开启:">
<div style="line-height:40px">
<el-switch v-model="set.is_open" :active-value="1" :inactive-value="0"></el-switch>
</div>
</el-form-item>
<el-form-item label="收益提现手续费">
<el-form-item label="转赠手续费" v-if="set.is_open == 1">
<el-input placeholder="请输入手续费比例" v-model.number="set.commission_handling_fees" type="number" step="0.01" :min="0" :max="100" class="shortWidth">
<template slot="append">%</template>
</el-input>
@ -51,7 +47,7 @@
submitSet(){
let _this = this;
$.ajax({
url: ns.url("shop/account/set"),
url: ns.url("shop/memberaccount/set"),
data: { set: _this.set },
dataType: 'JSON',
type: 'POST',
@ -64,4 +60,4 @@
}
});
</script>
{/block}
{/block}

3143
config/menu_shop.php Normal file

File diff suppressed because it is too large Load Diff

View File

@ -117,6 +117,7 @@ ns.parse_mobile = function (mobile) {
* type 类型 bigmidsmall
*/
ns.img = function (path, type = '') {
type='';
if (path.indexOf(",") != -1) {
path = path.split(',')[0];
}
@ -133,8 +134,10 @@ ns.img = function (path, type = '') {
var base_url = this.baseUrl.replace('/?s=', '');
var base_url = base_url.replace('/index.php', '');
if (isNaN(first[0])) {
var true_path = base_url + path;
} else {
var true_path = base_url + '/'+path;
} else if(first[0]=='upload'){
var true_path = base_url + '/' + path;
}else{
var true_path = base_url + 'attachment/' + path;
}
} else {
@ -361,14 +364,14 @@ ns.copy = function JScopy(dom, callback) {
var o = {
url: url.value
};
var inputText = document.createElement('input');
inputText.value = o.url;
document.body.appendChild(inputText);
inputText.select();
document.execCommand("Copy");
if (callback) callback.call(this, o);
inputText.type = 'hidden';
layer.msg('复制成功');