添加:订单分销佣金重新计算,添加商户分销设置判断
This commit is contained in:
parent
8428b019ab
commit
94aa3e1255
|
|
@ -6,6 +6,7 @@
|
|||
namespace app\common\model\store\product;
|
||||
|
||||
use app\common\model\BaseModel;
|
||||
use think\facade\Log;
|
||||
|
||||
class ProductAttrValue extends BaseModel
|
||||
{
|
||||
|
|
@ -62,18 +63,33 @@ class ProductAttrValue extends BaseModel
|
|||
return '未设置';
|
||||
}
|
||||
|
||||
public function getBcExtensionOneAttr()
|
||||
{
|
||||
if(!intval(systemConfig('extension_status'))) return 0;
|
||||
// 计算一级佣金
|
||||
public function getBcExtensionOneAttr(){
|
||||
$merId = (int)$this->product->mer_id;
|
||||
// 判断:平台和商户是否开启分销
|
||||
if(!intval(systemConfig('extension_status')) && !intval(merchantConfig((int)$merId,'extension_status'))) return 0;
|
||||
// 商品设置固定金额 直接返回固定金额
|
||||
if($this->product->extension_type == 1) return $this->extension_one;
|
||||
return floatval(round(bcmul(systemConfig('extension_one_rate'), isset($this->org_price) ? $this->org_price : $this->price, 3),2));
|
||||
}
|
||||
// 计算佣金
|
||||
$oneRate = (float)systemConfig('extension_one_rate');// 平台比例
|
||||
$merOneRate = (float)merchantConfig((int)$merId,'extension_one_rate');// 商家比例
|
||||
$rate = $merOneRate > 0 ? $merOneRate : $oneRate;
|
||||
|
||||
public function getBcExtensionTwoAttr()
|
||||
{
|
||||
if(!intval(systemConfig('extension_status'))) return 0;
|
||||
return floatval(round(bcmul($rate, isset($this->org_price) ? $this->org_price : $this->price, 3),2));
|
||||
}
|
||||
// 计算二级佣金
|
||||
public function getBcExtensionTwoAttr(){
|
||||
$merId = (int)$this->product->mer_id;
|
||||
// 判断:平台和商户是否开启分销
|
||||
if(!intval(systemConfig('extension_status')) && !intval(merchantConfig((int)$merId,'extension_status'))) return 0;
|
||||
// 商品设置固定金额 直接返回固定金额
|
||||
if($this->product->extension_type == 1) return $this->extension_two;
|
||||
return floatval(round(bcmul(systemConfig('extension_two_rate'), isset($this->org_price) ? $this->org_price : $this->price, 3),2));
|
||||
// 计算佣金
|
||||
$twoRate = (float)systemConfig('extension_two_rate');// 平台比例
|
||||
$merTwoRate = (float)merchantConfig((int)$merId,'extension_two_rate');// 商家比例
|
||||
$rate = $merTwoRate > 0 ? $merTwoRate : $twoRate;
|
||||
|
||||
return floatval(round(bcmul($rate, isset($this->org_price) ? $this->org_price : $this->price, 3),2));
|
||||
}
|
||||
|
||||
public function productSku()
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@
|
|||
namespace app\common\model\store\product;
|
||||
|
||||
use app\common\model\BaseModel;
|
||||
use app\common\repositories\store\product\ProductRepository;
|
||||
use think\facade\Log;
|
||||
|
||||
class ProductPresellSku extends BaseModel
|
||||
{
|
||||
|
|
@ -54,17 +56,40 @@ class ProductPresellSku extends BaseModel
|
|||
$query->where('product_presell_id',$value);
|
||||
}
|
||||
|
||||
public function getBcExtensionOneAttr()
|
||||
{
|
||||
if (!intval(systemConfig('extension_status'))) return 0;
|
||||
if ($this->sku->extension_one > 0) return $this->sku->extension_one;
|
||||
return floatval(round(bcmul(systemConfig('extension_one_rate'), $this->presell_price, 3), 2));
|
||||
}
|
||||
// 计算一级佣金
|
||||
public function getBcExtensionOneAttr(){
|
||||
// 获取当前商品关联的商户id
|
||||
$merId = app()->make(ProductRepository::class)
|
||||
->getSearch([])
|
||||
->where('product_id',$this->product_id)
|
||||
->value('mer_id');
|
||||
// 判断:平台和商户是否开启分销
|
||||
if(!intval(systemConfig('extension_status')) && !intval(merchantConfig((int)$merId,'extension_status'))) return 0;
|
||||
// 商品设置固定金额 直接返回固定金额
|
||||
if($this->sku->extension_type == 1) return $this->sku->extension_one;
|
||||
// 计算佣金
|
||||
$oneRate = (float)systemConfig('extension_one_rate');// 平台比例
|
||||
$merOneRate = (float)merchantConfig((int)$merId,'extension_one_rate');// 商家比例
|
||||
$rate = $merOneRate > 0 ? $merOneRate : $oneRate;
|
||||
|
||||
public function getBcExtensionTwoAttr()
|
||||
{
|
||||
if (!intval(systemConfig('extension_status'))) return 0;
|
||||
if ($this->sku->extension_two > 0) return $this->sku->extension_two;
|
||||
return floatval(round(bcmul(systemConfig('extension_two_rate'), $this->presell_price, 3), 2));
|
||||
return floatval(round(bcmul($rate, $this->presell_price, 3), 2));
|
||||
}
|
||||
// 计算二级佣金
|
||||
public function getBcExtensionTwoAttr(){
|
||||
// 获取当前商品关联的商户id
|
||||
$merId = app()->make(ProductRepository::class)
|
||||
->getSearch([])
|
||||
->where('product_id',$this->product_id)
|
||||
->value('mer_id');
|
||||
// 判断:平台和商户是否开启分销
|
||||
if(!intval(systemConfig('extension_status')) && !intval(merchantConfig((int)$merId,'extension_status'))) return 0;
|
||||
// 商品设置固定金额 直接返回固定金额
|
||||
if($this->sku->extension_type == 1) return $this->sku->extension_two;
|
||||
// 计算佣金
|
||||
$twoRate = (float)systemConfig('extension_two_rate');// 平台比例
|
||||
$merTwoRate = (float)merchantConfig((int)$merId,'extension_two_rate');// 商家比例
|
||||
$rate = $merTwoRate > 0 ? $merTwoRate : $twoRate;
|
||||
|
||||
return floatval(round(bcmul($rate, $this->presell_price, 3), 2));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
namespace app\common\repositories\store\order;
|
||||
|
||||
use app\common\repositories\system\config\ConfigValueRepository;
|
||||
use crmeb\jobs\SendSmsJob;
|
||||
use crmeb\services\SwooleTaskService;
|
||||
use think\exception\ValidateException;
|
||||
|
|
@ -1059,6 +1060,20 @@ class StoreOrderCreateRepository extends StoreOrderRepository
|
|||
$orderList = [];
|
||||
|
||||
foreach ($merchantCartList as $k => $merchantCart) {
|
||||
// 获取当前商户相关的分销设置信息
|
||||
$merPromoterConfig = app()->make(ConfigValueRepository::class)->getMerPromoterConfig((int)$merchantCart['mer_id']);
|
||||
$spreadUserExtensionOneRate = 0;// 一级佣金上浮比例
|
||||
if($spreadUid > 0 && $spreadUser->brokerage_level > 0 && $spreadUser->brokerage && $spreadUser->brokerage->extension_one_rate > 0){
|
||||
$merSpreadUserExtensionOneRate = $merPromoterConfig['extension_level_set'][$spreadUser->brokerage_level]['one_rate'] ?? 0;
|
||||
$spreadUserExtensionOneRate = $merSpreadUserExtensionOneRate > 0 ? $merSpreadUserExtensionOneRate : $spreadUser->brokerage->extension_one_rate;
|
||||
}
|
||||
$topUserExtensionTwoRate = 0;// 二级佣金上浮比例
|
||||
if($topUid > 0 && $topUser->brokerage_level > 0 && $topUser->brokerage && $topUser->brokerage->extension_two_rate > 0){
|
||||
$merTopUserExtensionTwoRate = $merPromoterConfig['extension_level_set'][$topUser->brokerage_level]['two_rate'] ?? 0;
|
||||
$topUserExtensionTwoRate = $merTopUserExtensionTwoRate > 0 ? $merTopUserExtensionTwoRate : $topUser->brokerage->extension_two_rate;
|
||||
}
|
||||
|
||||
|
||||
$cost = 0;
|
||||
$total_extension_one = 0;
|
||||
$total_extension_two = 0;
|
||||
|
|
@ -1070,34 +1085,27 @@ class StoreOrderCreateRepository extends StoreOrderRepository
|
|||
$cost = bcadd(bcmul($cart['cost'], $cart['cart_num'], 2), $cost, 2);
|
||||
$extension_one = 0;
|
||||
$extension_two = 0;
|
||||
if ($ex) {
|
||||
if ($ex && $merPromoterConfig['extension_status']) {
|
||||
//预售订单
|
||||
if ($orderType == 2) {
|
||||
// 预售商品
|
||||
$_payPrice = $merchantCart['order']['pay_price'];
|
||||
$rate = $cart['productPresell']['presell_type'] == 2 ? bcdiv($cart['productPresellAttr']['down_price'], $cart['productPresellAttr']['presell_price'], 3) : 1;
|
||||
$one_price = $_payPrice > 0 ? bcdiv($_payPrice, $cart['cart_num'], 2) : 0;
|
||||
if ($spreadUid && $cart['productPresellAttr']['bc_extension_one'] > 0) {
|
||||
$org_extension = $cart['productPresellAttr']['bc_extension_one'];
|
||||
if ($spreadUser->brokerage_level > 0 && $spreadUser->brokerage && $spreadUser->brokerage->extension_one_rate > 0) {
|
||||
$org_extension = bcmul($org_extension, 1 + $spreadUser->brokerage->extension_one_rate, 2);
|
||||
}
|
||||
if ($spreadUserExtensionOneRate > 0) $org_extension = bcmul($org_extension, 1 + $spreadUserExtensionOneRate, 2);
|
||||
$_extension_one = bcmul($rate, $org_extension, 3);
|
||||
$presell_extension_one = 0;
|
||||
if ($cart['true_price'] > 0) {
|
||||
$extension_one = bcmul(bcdiv($one_price, $cart['productPresellAttr']['down_price'], 3), $_extension_one, 2);
|
||||
}
|
||||
if ($rate < 1) {
|
||||
$presell_extension_one = bcmul(1 - $rate, $org_extension, 2);
|
||||
}
|
||||
if ($cart['true_price'] > 0) $extension_one = bcmul(bcdiv($one_price, $cart['productPresellAttr']['down_price'], 3), $_extension_one, 2);
|
||||
if ($rate < 1) $presell_extension_one = bcmul(1 - $rate, $org_extension, 2);
|
||||
$cart['final_extension_one'] = bcmul($extension_one, $cart['cart_num'], 2);
|
||||
$extension_one = bcadd($extension_one, $presell_extension_one, 2);
|
||||
$cart['presell_extension_one'] = bcmul($presell_extension_one, $cart['cart_num'], 2);
|
||||
}
|
||||
if ($topUid && $cart['productPresellAttr']['bc_extension_two'] > 0) {
|
||||
$org_extension = $cart['productPresellAttr']['bc_extension_two'];
|
||||
if ($topUser->brokerage_level > 0 && $topUser->brokerage && $topUser->brokerage->extension_two_rate > 0) {
|
||||
$org_extension = bcmul($org_extension, 1 + $topUser->brokerage->extension_two_rate, 2);
|
||||
}
|
||||
if ($topUserExtensionTwoRate > 0) $org_extension = bcmul($org_extension, 1 + $topUserExtensionTwoRate, 2);
|
||||
$_extension_two = bcmul($rate, $org_extension, 2);
|
||||
$presell_extension_two = 0;
|
||||
if ($cart['true_price'] > 0) {
|
||||
|
|
@ -1111,18 +1119,15 @@ class StoreOrderCreateRepository extends StoreOrderRepository
|
|||
$cart['presell_extension_two'] = bcmul($presell_extension_two, $cart['cart_num'], 2);
|
||||
}
|
||||
} else if (!$orderType) {
|
||||
// 其他商品
|
||||
if ($spreadUid && $cart['productAttr']['bc_extension_one'] > 0) {
|
||||
$org_extension = $cart['productAttr']['bc_extension_one'];
|
||||
if ($spreadUser->brokerage_level > 0 && $spreadUser->brokerage && $spreadUser->brokerage->extension_one_rate > 0) {
|
||||
$org_extension = bcmul($org_extension, 1 + $spreadUser->brokerage->extension_one_rate, 2);
|
||||
}
|
||||
if ($spreadUserExtensionOneRate > 0) $org_extension = bcmul($org_extension, 1 + $spreadUserExtensionOneRate, 2);
|
||||
$extension_one = $cart['true_price'] > 0 ? bcmul(bcdiv($cart['true_price'], $cart['total_price'], 3), $org_extension, 2) : 0;
|
||||
}
|
||||
if ($topUid && $cart['productAttr']['bc_extension_two'] > 0) {
|
||||
$org_extension = $cart['productAttr']['bc_extension_two'];
|
||||
if ($topUser->brokerage_level > 0 && $topUser->brokerage && $topUser->brokerage->extension_two_rate > 0) {
|
||||
$org_extension = bcmul($org_extension, 1 + $topUser->brokerage->extension_two_rate, 2);
|
||||
}
|
||||
if ($topUserExtensionTwoRate > 0) $org_extension = bcmul($org_extension, 1 + $topUserExtensionTwoRate, 2);
|
||||
$extension_two = $cart['true_price'] > 0 ? bcmul(bcdiv($cart['true_price'], $cart['total_price'], 3), $org_extension, 2) : 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -1188,6 +1193,9 @@ class StoreOrderCreateRepository extends StoreOrderRepository
|
|||
$totalCost = bcadd($totalCost, $cost, 2);
|
||||
$totalNum += $merchantCart['order']['total_num'];
|
||||
}
|
||||
|
||||
|
||||
|
||||
$groupOrder = [
|
||||
'uid' => $uid,
|
||||
'group_order_sn' => count($orderList) === 1 ? $orderList[0]['order_sn'] : ($this->getNewOrderId(StoreOrderRepository::TYPE_SN_ORDER) . '0'),
|
||||
|
|
|
|||
|
|
@ -1933,7 +1933,8 @@ class ProductRepository extends BaseRepository
|
|||
if (!$sku) throw new ValidateException('SKU不存在');
|
||||
//分销礼包
|
||||
if ($product['is_gift_bag']) {
|
||||
if (!systemConfig('extension_status')) throw new ValidateException('分销功能未开启');
|
||||
// 平台开启分销 && 商户开启分销
|
||||
if (!systemConfig('extension_status') || !merchantConfig($product->mer_id,'extension_status')) throw new ValidateException('分销功能未开启');
|
||||
if (!$data['is_new']) throw new ValidateException('礼包商品不可加入购物车');
|
||||
if ($data['cart_num'] !== 1) throw new ValidateException('礼包商品只能购买一个');
|
||||
if ($userInfo->is_promoter) throw new ValidateException('您已经是分销员了');
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ use app\common\repositories\BaseRepository;
|
|||
use app\common\repositories\store\product\ProductRepository;
|
||||
use app\common\repositories\system\groupData\GroupDataRepository;
|
||||
use app\common\repositories\system\groupData\GroupRepository;
|
||||
use app\common\repositories\user\UserBrokerageRepository;
|
||||
use crmeb\jobs\SyncProductTopJob;
|
||||
use crmeb\services\DownloadImageService;
|
||||
use crmeb\services\RedisCacheService;
|
||||
|
|
@ -200,5 +201,44 @@ class ConfigValueRepository extends BaseRepository
|
|||
}
|
||||
return $data;
|
||||
}
|
||||
/**
|
||||
* Common: 获取商户分销商配置
|
||||
* Author: wu-hui
|
||||
* Time: 2023/11/15 16:47
|
||||
* @param int $merId
|
||||
* @return array
|
||||
*/
|
||||
public function getMerPromoterConfig(int $merId){
|
||||
// 获取分销商等级
|
||||
$levelList = app()->make(UserBrokerageRepository::class)->getSearch(['type'=>0])
|
||||
->field(['user_brokerage_id','brokerage_name'])
|
||||
->order('brokerage_level Desc')
|
||||
->select();
|
||||
// 获取配置信息
|
||||
$data['extension_status'] = (int)merchantConfig($merId,'extension_status');// 是否开启 0=关闭,1=开启
|
||||
$data['extension_one_rate'] = (float)merchantConfig($merId,'extension_one_rate');// 一级返佣比例
|
||||
$data['extension_two_rate'] = (float)merchantConfig($merId,'extension_two_rate');// 二级返佣比例
|
||||
$extensionLevelSet = merchantConfig($merId,'extension_level_set');// 每个等级设置的上浮比例
|
||||
if($extensionLevelSet) {
|
||||
$extensionLevelSet = json_decode($extensionLevelSet,true);
|
||||
$extensionLevelSet = array_column($extensionLevelSet,null,'user_brokerage_id');
|
||||
}
|
||||
$data['extension_level_set'] = [];
|
||||
foreach($levelList as $levelInfo){
|
||||
$data['extension_level_set'][$levelInfo['user_brokerage_id']] = [
|
||||
'user_brokerage_id' => $levelInfo['user_brokerage_id'],
|
||||
'brokerage_name' => $levelInfo['brokerage_name'],
|
||||
'one_rate' => $extensionLevelSet[$levelInfo['user_brokerage_id']]['one_rate'] ?? 0,
|
||||
'two_rate' => $extensionLevelSet[$levelInfo['user_brokerage_id']]['two_rate'] ?? 0,
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -251,29 +251,7 @@ class ConfigOthers extends BaseController
|
|||
*/
|
||||
public function getMerConfig(){
|
||||
$merId = $this->request->merId();
|
||||
// 获取分销商等级
|
||||
$levelList = app()->make(UserBrokerageRepository::class)->getSearch(['type'=>0])
|
||||
->field(['user_brokerage_id','brokerage_name'])
|
||||
->order('brokerage_level Desc')
|
||||
->select();
|
||||
// 获取配置信息
|
||||
$data['extension_status'] = (int)merchantConfig($merId,'extension_status');// 是否开启 0=关闭,1=开启
|
||||
$data['extension_one_rate'] = (float)merchantConfig($merId,'extension_one_rate');// 一级返佣比例
|
||||
$data['extension_two_rate'] = (float)merchantConfig($merId,'extension_two_rate');// 二级返佣比例
|
||||
$extensionLevelSet = merchantConfig($merId,'extension_level_set');// 每个等级设置的上浮比例
|
||||
if($extensionLevelSet) {
|
||||
$extensionLevelSet = json_decode($extensionLevelSet,true);
|
||||
$extensionLevelSet = array_column($extensionLevelSet,null,'user_brokerage_id');
|
||||
}
|
||||
$data['extension_level_set'] = [];
|
||||
foreach($levelList as $levelInfo){
|
||||
$data['extension_level_set'][$levelInfo['user_brokerage_id']] = [
|
||||
'user_brokerage_id' => $levelInfo['user_brokerage_id'],
|
||||
'brokerage_name' => $levelInfo['brokerage_name'],
|
||||
'one_rate' => $extensionLevelSet[$levelInfo['user_brokerage_id']]['one_rate'] ?? 0,
|
||||
'two_rate' => $extensionLevelSet[$levelInfo['user_brokerage_id']]['two_rate'] ?? 0,
|
||||
];
|
||||
}
|
||||
$data = app()->make(ConfigValueRepository::class)->getMerPromoterConfig((int)$merId);
|
||||
|
||||
return app('json')->success($data);
|
||||
}
|
||||
|
|
@ -286,6 +264,13 @@ class ConfigOthers extends BaseController
|
|||
public function setMerConfig(){
|
||||
$merId = $this->request->merId();
|
||||
$params = $this->request->params(['extension_status','extension_one_rate','extension_two_rate','extension_level_set']);
|
||||
// 判断:一级返佣比例 是否 小于 二级返佣比例
|
||||
if (bccomp($params['extension_one_rate'], $params['extension_two_rate'], 4) == -1)
|
||||
return app('json')->fail('一级比例不能小于二级比例');
|
||||
// 判断:一级返佣比例和二级返佣比例之和不能大于1
|
||||
if (bccomp(bcadd($params['extension_one_rate'], $params['extension_two_rate'], 3), 1, 3) == 1)
|
||||
return app('json')->fail('比例之和不能超过1,即100%');
|
||||
// 保存设置
|
||||
app()->make(ConfigValueRepository::class)->setFormData($params, $merId);
|
||||
|
||||
return app('json')->success('编辑成功');
|
||||
|
|
|
|||
Loading…
Reference in New Issue