From 30563323a53b0d0260c97d08a9e8bd4cc8227a95 Mon Sep 17 00:00:00 2001
From: quanwei <419654421@qq.com>
Date: Sat, 13 Dec 2025 18:03:52 +0800
Subject: [PATCH] 完成级差奖 完成平级奖
---
admin/app/api/model/order/Order.php | 2
admin/app/api/service/order/settled/OrderSettledService.php | 5
admin/app/common/model/plus/bonus/User.php | 8
admin/app/api/model/plus/vip/Order.php | 1
admin/app/api/model/order/Cart.php | 2
admin/app/shop/model/order/OrderProduct.php | 12
admin/app/shop/model/order/Order.php | 4
admin/app/shop/model/product/Category.php | 2
admin/app/common/model/plus/shareholder/Apply.php | 1
admin/app/common/model/plus/vip/User.php | 98 ++++++++++++
admin/app/common/model/user/User.php | 2
admin/app/common/model/supplier/Supplier.php | 1
admin/app/common/model/plus/bonus/Order.php | 4
admin/app/common/model/product/Category.php | 34 ++++
shop_vue/src/views/plus/vip/setting/part/Basic.vue | 23 ++
admin/app/supplier/model/product/Category.php | 9 +
admin/app/api/model/supplier/Supplier.php | 4
admin/app/shop/model/plus/bonus/Order.php | 2
admin/app/shop/model/plus/vip/Order.php | 3
admin/app/shop/service/ProductService.php | 2
shop_vue/src/views/branch/branch/drawer/part/edit.vue | 7
admin/app/common/enum/plus/vip/VipAreaTypeEnum.php | 4
supplier_vue/src/views/setting/supplier/index.vue | 17 +-
admin/app/supplier/model/supplier/Supplier.php | 15 +
admin/app/api/controller/user/Shareholder.php | 8 +
admin/app/shop/model/plus/shareholder/User.php | 12 +
admin/app/supplier/controller/product/Category.php | 4
admin/app/common/model/plus/vip/Setting.php | 3
admin/app/common/model/plus/vip/Order.php | 164 ++++++++++++--------
shop_vue/src/views/plus/shareholder/bonus/Bonus.vue | 6
admin/app/shop/model/plus/shareholder/Bonus.php | 3
31 files changed, 356 insertions(+), 106 deletions(-)
diff --git a/admin/app/api/controller/user/Shareholder.php b/admin/app/api/controller/user/Shareholder.php
index 702bf55..b2a054a 100644
--- a/admin/app/api/controller/user/Shareholder.php
+++ b/admin/app/api/controller/user/Shareholder.php
@@ -45,6 +45,14 @@
{
//如果不是股东,列出条件 by lyzflash
$is_shareholder = $this->isShareholderUser();
+ if (!$is_shareholder){
+ if ( (new ShareholderApplyModel)->becomeShareholderByTeam($this->user['user_id'],110,$this->user['app_id'])){
+ // 股东信息
+ $this->shareholder = ShareholderUserModel::detail($this->user['user_id'],['user','grade']);
+ //如果不是股东,列出条件 by lyzflash
+ $is_shareholder = $this->isShareholderUser();
+ }
+ }
$setting = $this->setting['basic']['values'];
$agent_total = $agent_money = $team_money = 0;
//统计下级分销商总数
diff --git a/admin/app/api/model/order/Cart.php b/admin/app/api/model/order/Cart.php
index 177d024..8ce4f76 100644
--- a/admin/app/api/model/order/Cart.php
+++ b/admin/app/api/model/order/Cart.php
@@ -92,6 +92,8 @@
$product['total_num'] = $item['total_num'];
// 商品总价
$product['total_price'] = bcmul($product['product_price'], $item['total_num'], 2);
+ // 商品总结算价
+ $product['total_settlement_price'] = bcmul($product['settlement_price'], $item['total_num'], 2);
// 供应商
$product['shop_supplier_id'] = $item['shop_supplier_id'];
$product['supplier_price'] = bcmul($product['supplier_price'], $item['total_num'], 2);
diff --git a/admin/app/api/model/order/Order.php b/admin/app/api/model/order/Order.php
index ab6ed4e..641754f 100644
--- a/admin/app/api/model/order/Order.php
+++ b/admin/app/api/model/order/Order.php
@@ -228,6 +228,8 @@
$item['spec_sku_id'] = $item['product_sku']['spec_sku_id'];
// 商品购买总金额
$item['total_price'] = helper::bcmul($item['product_price'], $params['product_num']);
+ // 商品总结算价
+ $item['total_settlement_price'] = helper::bcmul($item['settlement_price'], $params['product_num']);
}
$supplierData[] = [
'shop_supplier_id' => $product['shop_supplier_id'],
diff --git a/admin/app/api/model/plus/vip/Order.php b/admin/app/api/model/plus/vip/Order.php
index 82a3360..d34223c 100644
--- a/admin/app/api/model/plus/vip/Order.php
+++ b/admin/app/api/model/plus/vip/Order.php
@@ -38,6 +38,7 @@
}
return $model->with(['user', 'vipUser', 'referee','orderMaster'=>['product'=>['image']]])
+ ->where('is_invalid', '=', 0)
->order(['create_time' => 'desc'])
->paginate($query);
}
diff --git a/admin/app/api/model/supplier/Supplier.php b/admin/app/api/model/supplier/Supplier.php
index 1b2a943..cea547d 100644
--- a/admin/app/api/model/supplier/Supplier.php
+++ b/admin/app/api/model/supplier/Supplier.php
@@ -108,7 +108,7 @@
->where('s.is_delete', '=', '0')
->where('s.is_recycle', '=', 0)
//->where('s.is_full', '=', 1)
- ->field("s.shop_supplier_id,s.name,s.fav_count,logo_id,category_id,server_score,product_sales,address,link_phone")
+ ->field("s.shop_supplier_id,s.name,s.fav_count,logo_id,category_id,server_score,product_sales,address,link_phone,longitude,latitude")
->order($sort)
->paginate($param);
$product_model = new ProductModel();
@@ -127,6 +127,8 @@
$v['productList'] = $productList;
$v['logos'] = isset($v['logo'])?$v['logo']['file_path']:'';
$v['category_name'] = $v['category']['name'];
+ $v['latitude'] = (float)$v['latitude'];
+ $v['longitude'] = (float)$v['longitude'];
unset($v['logo']);
unset($v['category']);
}
diff --git a/admin/app/api/service/order/settled/OrderSettledService.php b/admin/app/api/service/order/settled/OrderSettledService.php
index 2abfee4..8753840 100644
--- a/admin/app/api/service/order/settled/OrderSettledService.php
+++ b/admin/app/api/service/order/settled/OrderSettledService.php
@@ -112,7 +112,7 @@
// 设置订单商品总金额(不含优惠折扣)
$this->setOrderTotalPrice($supplier['productList']);
$orderTotalPrice += $this->orderData['order_total_price'];
- // 设置订单商品总结算金额(不含优惠折扣)
+ // 设置订单商品总结算金额
$this->setOrderSettlementPrice($supplier['productList']);
$settlementPrice += $this->orderData['settlement_price'];
// 先计算商品满减
@@ -794,6 +794,7 @@
'consumption_bonus' => isset($product['consumption_bonus'])?$product['consumption_bonus']:0,
'total_num' => $product['total_num'],
'total_price' => $product['total_price'],
+ 'total_settlement_price' => $product['total_settlement_price'],
'total_pay_price' => $product['total_pay_price'],
'supplier_money' => $product['supplier_money'],
'is_agent' => $product['is_agent'],
@@ -908,7 +909,7 @@
$product['max_points_num'] = $product['points_num'];
} else {
// 商品不允许积分抵扣
- if (!$product['is_points_discount']) continue;
+ if (!$product['is_points_discount']||$product['is_vip']||$product['is_newcomer']||$product['is_repurchase']) continue;
// 积分抵扣比例
$deductionRatio = helper::bcdiv($setting['discount']['max_money_ratio'], 100);
// 最多可抵扣的金额
diff --git a/admin/app/common/enum/plus/vip/VipAreaTypeEnum.php b/admin/app/common/enum/plus/vip/VipAreaTypeEnum.php
index 535b5a0..df10602 100644
--- a/admin/app/common/enum/plus/vip/VipAreaTypeEnum.php
+++ b/admin/app/common/enum/plus/vip/VipAreaTypeEnum.php
@@ -13,6 +13,8 @@
const DIRECT_SUPPLIER = 50; // 直推供应商佣金
const VIEWPOINT_MONEY = 60; // 见点佣金
+ const DIFFERENTIALPRIZE=70;//级差
+ const EQUALLEVELAWARD= 80;//平级奖
@@ -29,6 +31,8 @@
self::DIRECT_REFEREE => '平台直推佣金',
self::DIRECT_SUPPLIER => '直推商家佣金',
self::VIEWPOINT_MONEY => '见点佣金',
+ self::DIFFERENTIALPRIZE=> '级差奖',
+ self::EQUALLEVELAWARD=> '平级奖',
];
}
diff --git a/admin/app/common/model/plus/bonus/Order.php b/admin/app/common/model/plus/bonus/Order.php
index 5eea4ac..5af96d9 100644
--- a/admin/app/common/model/plus/bonus/Order.php
+++ b/admin/app/common/model/plus/bonus/Order.php
@@ -190,7 +190,7 @@
public static function getUserOrderCount($user_id)
{
- return (new static())->where('second_user_id', '=', $user_id)
+ return (new static())->where(['second_user_id'=>$user_id,'is_invalid'=>0])
->count();
}
@@ -236,7 +236,7 @@
'order_id' => $order['order_id'],
'order_type' => $order_type,
'order_price' => bcsub($order['pay_price'], $order['express_price'], 2),
- 'first_money' => $agentUser['first_user_id'] > 0 ? $one_money : 0,
+ 'first_money' => $one_money,
'second_money' => $two_money,
'first_user_id' => $one_money > 0 ?$agentUser['first_user_id']:0,
'second_user_id' => $agentUser['second_user_id'],
diff --git a/admin/app/common/model/plus/bonus/User.php b/admin/app/common/model/plus/bonus/User.php
index ea015db..0075882 100644
--- a/admin/app/common/model/plus/bonus/User.php
+++ b/admin/app/common/model/plus/bonus/User.php
@@ -308,7 +308,10 @@
$is_expire = User::isExpire($user_id);
// 队长详情
$model = static::detail($user_id);
- if (!$model || $model['is_delete']) {
+ if (!$model) {
+ return false;
+ }
+ if ($model['is_delete']){
return false;
}
if ($money_type == 20){
@@ -451,6 +454,9 @@
public static function isExpire($user_id)
{
$team = self::detail($user_id);
+ if (!$team) {
+ return false;
+ }
$setting = Setting::getItem('basic', $team['app_id']);
return !!$team && $team['is_expire'] && $team['is_permanent'] == 0 && $setting['expire_day'] > 0;
}
diff --git a/admin/app/common/model/plus/shareholder/Apply.php b/admin/app/common/model/plus/shareholder/Apply.php
index e0ec886..8df71c5 100644
--- a/admin/app/common/model/plus/shareholder/Apply.php
+++ b/admin/app/common/model/plus/shareholder/Apply.php
@@ -150,6 +150,7 @@
}
if ($config['become'] == '110'){
$subordinateUserId=(new TeamRefereeModel())->where(['heads_id'=>$userId])->column('user_id');
+ $subordinateUserId[]=$userId;
$vipNum=(new \app\common\model\user\User)->getRefereeGradeCount($subordinateUserId,$config['referee_grade_ids']);
$supplierNum=(new \app\common\model\supplier\Supplier())->getSubordinateNum($subordinateUserId);
$user=(new \app\common\model\user\User)->where(['user_id'=>$userId,'is_delete'=>0])->find();
diff --git a/admin/app/common/model/plus/vip/Order.php b/admin/app/common/model/plus/vip/Order.php
index 1268b63..e380504 100644
--- a/admin/app/common/model/plus/vip/Order.php
+++ b/admin/app/common/model/plus/vip/Order.php
@@ -15,7 +15,8 @@
{
protected $name = 'vip_area_order';
protected $pk = 'id';
- public $append=['vip_area_type_text'];
+ public $append = ['vip_area_type_text'];
+
/**
* VIP专区订单类型
* @param $value
@@ -24,7 +25,7 @@
public function getVipAreaTypeTextAttr($value, $data)
{
$types = VipAreaTypeEnum::getTypeName();
- return $types[$data['vip_area_type']];
+ return $types[$data['vip_area_type']];
}
/**
@@ -83,7 +84,7 @@
->where('order_type', '=', $orderType)
->find();
}
-
+
/**
* 获取订单的所有VIP专区订单记录
*/
@@ -109,13 +110,13 @@
if ($order['order_status']['value'] != 30) {
return false;
}
-
+
// 获取该订单的所有VIP专区订单记录
$models = self::getAllDetailsByOrderId($order['order_id'], $orderType);
if ($models->isEmpty()) {
return false;
}
-
+
// 佣金结算天数
$settleDays = Setting::getItem('settlement', $order['app_id'])['settle_days'];
$success = false;
@@ -126,16 +127,16 @@
if ($model['is_settled'] == 1) {
continue;
}
-
+
// 写入结算时间
$deadlineTime = $model['settle_time'] ?: 0;
- if($deadlineTime == 0){
- $deadlineTime = $order['receipt_time'] + $settleDays * 86400;
+ if ($deadlineTime == 0) {
+ $deadlineTime = $order['receipt_time'] + $settleDays * 86400;
$model->save([
'settle_time' => $deadlineTime
]);
}
-
+
// 未到结算时间,跳过
if ($deadlineTime > time()) {
continue;
@@ -143,36 +144,36 @@
if ($model['vip_area_user_id'] != 0) {
User::grantMoney($model['vip_area_user_id'], $model['vip_area_money'], VipAreaTypeEnum::getTypeName()[$model['vip_area_type']]);
}
- // 发放VIP专区补贴给下级用户(当下级获得推广佣金或复购佣金时)
+ // 发放下级收益补贴给下级用户(当下级获得推广佣金或复购佣金时)
if ($model['vip_area_type'] == 10 || $model['vip_area_type'] == 20) {
// 获取下级用户的推荐人(即上级用户)
$superiorUser = UserModel::detail($model['vip_area_user_id']);
if ($superiorUser && $superiorUser['referee_id']) {
$vipUser = VipUserModel::detail($superiorUser['vip_area_user_id']);
- if ($vipUser['grade']['operating_subsidy']>0){
+ if ($vipUser['grade']['operating_subsidy'] > 0) {
// 获取补贴比例设置
$subsidyRate = $vipUser['grade']['operating_subsidy'];
- // 计算VIP专区补贴
+ // 计算下级收益补贴
$subsidyAmount = bcmul($model['vip_area_money'], bcdiv((string)$subsidyRate, '100', 4), 2);
- User::grantMoney($superiorUser['referee_id'], $subsidyAmount, 'VIP专区补贴');
+ User::grantMoney($superiorUser['referee_id'], $subsidyAmount, '下级收益补贴');
// 记录分销订单
- self::createDistributionOrder($order, $superiorUser['referee_id'], $subsidyAmount, 'vip_subsidy',$model['vip_area_money']);
+ self::createDistributionOrder($order, $superiorUser['referee_id'], $subsidyAmount, 'vip_subsidy', $model['vip_area_money']);
}
}
}
-
+
// 发放平台直推佣金(满足直推条件后)
//self::grantPlatformCommission($order, $model);
-
+
// 更新VIP订单记录
$model->save([
'is_settled' => 1,
'settle_time' => time()
]);
-
+
$success = true;
}
-
+
return $success;
}
@@ -187,22 +188,22 @@
// 获取平台直推佣金设置
$setting = Setting::getItem('basic', $order['app_id']);
$requiredReferralCount = $setting['referee_buy_count'] ?? 0;
-
+
// 如果设置了直推条件且用户有推荐人
if ($requiredReferralCount > 0 && $model['vip_area_user_id'] > 0) {
// 检查推荐人是否满足直推条件(直推用户数量)
$directReferralsCount = UserModel::where('referee_id', '=', $model['vip_area_user_id'])->count();
-
+
if ($directReferralsCount >= $requiredReferralCount) {
// 计算平台直推佣金
$platformCommissionRate = $setting['platform_commission_rate'] ?? 5;
$platformCommissionAmount = bcmul($model['order_price'], bcdiv((string)$platformCommissionRate, '100', 4), 2);
-
+
// 发放平台直推佣金
User::grantMoney($model['vip_area_user_id'], $platformCommissionAmount, '平台直推佣金');
-
+
// 记录分销订单
- self::createDistributionOrder($order, $model['vip_area_user_id'], $platformCommissionAmount, 'platform_commission',$model['vip_area_money']);
+ self::createDistributionOrder($order, $model['vip_area_user_id'], $platformCommissionAmount, 'platform_commission', $model['vip_area_money']);
}
}
}
@@ -215,12 +216,12 @@
* @param $type
* @return bool
*/
- protected static function createDistributionOrder($order, $userId, $amount, $type,$subordinate_money)
+ protected static function createDistributionOrder($order, $userId, $amount, $type, $subordinate_money)
{
// 创建分销订单记录以跟踪各种类型的佣金
$distributionOrder = new self();
$vip_area_type = 0;
- switch($type) {
+ switch ($type) {
case 'vip_subsidy':
$vip_area_type = 30; // VIP专区补贴
break;
@@ -228,7 +229,7 @@
$vip_area_type = 40; // 平台直推佣金
break;
}
-
+
return $distributionOrder->save([
'user_id' => $userId,
'order_id' => $order['order_id'],
@@ -277,10 +278,10 @@
'settle_time' => 0,
'app_id' => $order['app_id']
];
- $list=[];
+ $list = [];
// 计算佣金金额
$orderPrice = bcsub(bcsub($order['pay_price'], $order['express_price'], 2), $order['settlement_price'], 2);
- $viewpoint_money=0;
+ //$viewpoint_money = 0;
// 获取当前买家的推荐人信息
$userModel = UserModel::detail($order['user_id']);
if (!empty($userModel) && !empty($userModel['referee_id'])) {
@@ -293,77 +294,110 @@
$vipGrade = Grade::detail($vipUser['grade_id']);
if ($vipGrade) {
$config = Setting::getItem('basic', $order['app_id']);
- if (!empty($config['become__buy_product_ids'])) {
- $purchase_count=(new self())->getPurchaseCount($order['user_id']);
- foreach ($order['product'] as $product){
- if ($product['is_repurchase']==1){
- $viewpoint_money=bcadd($viewpoint_money,($product['is_viewpoint_money']?$product['viewpoint_money']:$vipGrade['viewpoint_money']),2);
- }
- if (in_array($product['product_id'], $config['become__buy_product_ids'])||$product['is_vip']) {
- // 获取商品数量
- $quantity = $product['total_num'];
- // 为每个商品生成分红订单
- for ($i = 0; $i < $quantity; $i++) {
- if ($purchase_count==1){
- $list[]=array_merge($data,['vip_area_type'=>10,'vip_area_money'=>$vipGrade['agent_money'],'is_vip'=>1,'purchase_count'=>$purchase_count]);
+ $purchase_count = (new self())->getPurchaseCount($order['user_id']);
+ $vip_quantity=0;
+ $product_price_repurchase=0;
+ foreach ($order['product'] as $product) {
+ /*if ($product['is_repurchase'] == 1) {
+ $viewpoint_money = bcadd($viewpoint_money, ($product['is_viewpoint_money'] ? $product['viewpoint_money'] : $vipGrade['viewpoint_money']), 2);
+ }*/
+ if (in_array($product['product_id'], $config['become__buy_product_ids']) || $product['is_vip']) {
+ // 获取商品数量
+ $vip_quantity = bcadd($vip_quantity, $product['total_num'], 2);
+ // 为每个商品生成分红订单
+ /*for ($i = 0; $i < $quantity; $i++) {
+ if ($purchase_count == 1) {
+ $list[] = array_merge($data, ['vip_area_type' => 10, 'vip_area_money' => $vipGrade['agent_money'], 'is_vip' => 1, 'purchase_count' => $purchase_count]);
+ $purchase_count++;
+ } else {
+ if ($vipGrade['repurchase_money'] > 0) {
+ $list[] = array_merge($data, ['vip_area_type' => 20, 'vip_area_money' => $vipGrade['repurchase_money'], 'is_vip' => 1, 'purchase_count' => $purchase_count]);
$purchase_count++;
- }else{
- if ($vipGrade['repurchase_money']>0){
- $list[]=array_merge($data,['vip_area_type'=>20,'vip_area_money'=>$vipGrade['repurchase_money'],'is_vip'=>1,'purchase_count'=>$purchase_count]);
- $purchase_count++;
- }
}
}
+ }*/
+ }
+ //复购专区利润
+ if($product['is_repurchase']){
+ $product_price_repurchase=bcadd($product_price_repurchase, bcsub($product['total_pay_price'], $product['total_settlement_price'], 2));
+
+ }
+ }
+ if ($vip_quantity>0){
+ if ($purchase_count == 1) {
+ $list[] = array_merge($data, ['vip_area_type' => 10, 'vip_area_money' => bcmul($vipGrade['agent_money'],$vip_quantity,2), 'is_vip' => 1, 'purchase_count' => $purchase_count]);
+ } else {
+ if ($vipGrade['repurchase_money'] > 0) {
+ $list[] = array_merge($data, ['vip_area_type' => 20, 'vip_area_money' => bcmul($vipGrade['repurchase_money'],$vip_quantity,2), 'is_vip' => 1, 'purchase_count' => $purchase_count]);
+ }
+ }
+ }
+ if ($product_price_repurchase>0){
+ //复购专区级差奖
+ if ($setting['jcaward']){
+ $refereeJc=User::getAllJcUser($userModel['user_id']);
+ foreach ($refereeJc as $v){
+ $list[] = array_merge($data, ['vip_area_type' => 70, 'vip_area_money' =>bcmul($product_price_repurchase, bcdiv($v['bonus_percent'], 100, 4), 2),'vip_area_user_id'=>$v['user_id']]);
+ }
+ }
+ //复购专区平级奖
+ if ($setting['pjaward']){
+ $refereeJc=User::getAllPjUser($userModel['user_id'],$setting['pjaward_level']);
+ foreach ($refereeJc as $v){
+ $list[] = array_merge($data, ['vip_area_type' => 80, 'vip_area_money' => bcmul($product_price_repurchase, bcdiv($v['bonus_percent'], 100, 4), 2),'vip_area_user_id'=>$v['user_id']]);
}
}
}
// 检查并处理直推佣金
- $directReferralsCount=0;
- $user=UserModel::detail($order['user_id']);
+ $directReferralsCount = 0;
+ $user = UserModel::detail($order['user_id']);
//见点奖
- if (!empty($user['referee_id'])){
+ /* if (!empty($user['referee_id'])) {
+ if ($viewpoint_money > 0 && (new User())->getViewpointMoneyQualification($user['referee_id'], $setting)) {
+ $list[] = array_merge($data, ['vip_area_type' => 60, 'vip_area_money' => $viewpoint_money]);
+ }
+ }*/
+ $requiredReferralCount = $setting['referee_buy_count'] ?? 0;
+ if (!empty($user['referee_id'])) {
// 检查推荐人是否满足直推条件(直推用户数量)
$directReferralsCount = UserModel::where('referee_id', '=', $user['referee_id'])->count();
- if ($viewpoint_money>0&&(new User())->getViewpointMoneyQualification($user['referee_id'],$setting)){
- $list[]=array_merge($data,['vip_area_type'=>60,'vip_area_money'=>$viewpoint_money]);
- }
}
- $requiredReferralCount = $setting['referee_buy_count'] ?? 0;
- if ($vipGrade['commission']>0 && $directReferralsCount >= $requiredReferralCount&&$orderPrice>0){
+ if ($vipGrade['commission'] > 0 && $directReferralsCount >= $requiredReferralCount && $orderPrice > 0) {
// 计算平台直推佣金金额
$commissionAmount = bcmul($orderPrice, bcdiv($vipGrade['commission'], '100', 4), 2);
- $list[]=array_merge($data,['vip_area_type'=>40,'vip_area_money'=>$commissionAmount]);
+ $list[] = array_merge($data, ['vip_area_type' => 40, 'vip_area_money' => $commissionAmount]);
}
}
}
}
// 处理供应商推荐人佣金
- if($order['supplier']['referee_id']!=0){
- $supplierReferee=VipUserModel::detail($order['supplier']['referee_id']);
- if ($supplierReferee){
- $vipGradeSupplier=Grade::detail($supplierReferee['grade_id']);
- if ($vipGradeSupplier['supplier_money']>0&&$orderPrice>0){
+ if ($order['supplier']['referee_id'] != 0) {
+ $supplierReferee = VipUserModel::detail($order['supplier']['referee_id']);
+ if ($supplierReferee) {
+ $vipGradeSupplier = Grade::detail($supplierReferee['grade_id']);
+ if ($vipGradeSupplier['supplier_money'] > 0 && $orderPrice > 0) {
// 计算直推店铺交易额佣金金额
$supplier_money = bcmul($orderPrice, bcdiv($vipGrade['supplier_money'], '100', 4), 2);
- $list[]=array_merge($data,['vip_area_type'=>50,'vip_area_money'=>$supplier_money,'vip_area_user_id'=>$supplierReferee['user_id'],'referee_id'=>$supplierReferee['referee_id']]);
+ $list[] = array_merge($data, ['vip_area_type' => 50, 'vip_area_money' => $supplier_money, 'vip_area_user_id' => $supplierReferee['user_id'], 'referee_id' => $supplierReferee['referee_id']]);
}
}
}
log_write($list);
- if (empty($list)){
+ if (empty($list)) {
return true;
}
// 保存VIP专区订单记录
return $model->saveAll($list);
- }catch (\Exception $e){
- log_write('创建VIP专区订单失败:'.$e->getMessage());
+ } catch (\Exception $e) {
+ log_write('创建VIP专区订单失败:' . $e->getMessage());
return false;
}
}
+
public function getPurchaseCount($user_id)
{
- return self::where(['user_id'=>$user_id,'is_vip'=>1])->count()+1;
+ return self::where(['user_id' => $user_id, 'is_vip' => 1,'is_invalid'=>0])->count() + 1;
}
}
\ No newline at end of file
diff --git a/admin/app/common/model/plus/vip/Setting.php b/admin/app/common/model/plus/vip/Setting.php
index ec6f343..ea012ed 100644
--- a/admin/app/common/model/plus/vip/Setting.php
+++ b/admin/app/common/model/plus/vip/Setting.php
@@ -148,6 +148,9 @@
'subsidy_rate' => '10',
// 平台直推佣金比例
'platform_commission_rate' => '5',
+ 'jcaward'=>'0',
+ 'pjaward'=>'0',
+ 'pjaward_level'=>1
],
],
'settlement' => [
diff --git a/admin/app/common/model/plus/vip/User.php b/admin/app/common/model/plus/vip/User.php
index b2b0bc2..6167cda 100644
--- a/admin/app/common/model/plus/vip/User.php
+++ b/admin/app/common/model/plus/vip/User.php
@@ -183,4 +183,102 @@
}
return false;
}
+ /**
+
+ * 获取用户所有级差上级
+
+ */
+
+ public static function getAllJcUser($user_id, $jcUser = [], $percent_total = 0, $is_add = true)
+
+ {
+
+ $user = User::detail($user_id);
+ $is_add && $percent_total += $user['grade']['differential_prize'] - $percent_total;
+ if($user['referee_id']) {
+ $is_add = false;
+ $parent = User::detail($user['referee_id']);
+ if (!$parent){
+ return $jcUser;
+ }
+ if ($parent['grade']['weight'] > $user['grade']['weight'] && $parent['grade']['differential_prize'] > $percent_total) {
+ $jcUser[] = [
+ 'user_id' => $parent['user_id'],
+ 'bonus_percent' => $parent['grade']['differential_prize'] - $percent_total //分红比例
+ ];
+ $is_add = true;
+
+ }
+ if($parent['user_id']) {
+ return self::getAllJcUser($parent['user_id'], $jcUser, $percent_total, $is_add);
+ }
+
+ }
+ return $jcUser;
+
+ }
+
+ /**
+
+ * 获取用户所有平级
+
+ * 每个级别都发放$pjaward_level层平级奖
+
+ */
+
+ public static function getAllPjUser($user_id, $pjaward_level, $pjUser = [])
+
+ {
+
+ $user = User::detail($user_id);
+ $pj_user[$user['grade_id']][] = [];
+ $pj_user = self::getPjUser($user_id, $pj_user);
+ if ($pj_user) {
+ foreach ($pj_user as $u) {
+ foreach ($u as $k => $item) {
+ if ($k > 0 && $k <= $pjaward_level) {
+ $pjUser[] = $item;
+ }
+ }
+ }
+
+ }
+ return $pjUser;
+
+ }
+ /**
+
+ * 获取所有平级
+
+ */
+
+ private static function getPjUser($user_id, $pj_user = [])
+
+ {
+
+ $user = User::detail($user_id);
+ if($user['referee_id']) {
+ $parent = User::detail($user['referee_id']);
+ if (!$parent){
+ return $pj_user;
+ }
+ // 记录平级用户
+ if($parent && $parent['grade']['weight'] >= $user['grade']['weight']) {
+ if ( $parent['grade']['equal_level_award']){
+ $pj_user[$parent['grade_id']][] = [
+ 'user_id' => $parent['user_id'],
+ 'bonus_percent' => $parent['grade']['equal_level_award'], // 平级分红比例
+ ];
+ }
+ }
+ if($parent['referee_id']) {
+ return self::getPjUser($parent['user_id'], $pj_user);
+
+ }
+
+ }
+
+ return $pj_user;
+
+ }
}
\ No newline at end of file
diff --git a/admin/app/common/model/product/Category.php b/admin/app/common/model/product/Category.php
index d15b711..3c6a6b7 100644
--- a/admin/app/common/model/product/Category.php
+++ b/admin/app/common/model/product/Category.php
@@ -70,6 +70,40 @@
}
/**
+ * 所有分类
+ */
+ public static function getCategoryALL()
+ {
+ $model = new static;
+ if (!Cache::get('category_all_' . $model::$app_id)) {
+ $data = $model->with(['images'])->order(['sort' => 'asc', 'create_time' => 'asc'])->select();
+ $all = !empty($data) ? $data->toArray() : [];
+ $tree = [];
+ foreach ($all as $first) {
+ if ($first['parent_id'] != 0) continue;
+ $twoTree = [];
+ foreach ($all as $two) {
+ if ($two['parent_id'] != $first['category_id']) continue;
+ $threeTree = [];
+ foreach ($all as $three)
+ $three['parent_id'] == $two['category_id']
+ && $threeTree[$three['category_id']] = $three;
+ !empty($threeTree) && $two['child'] = $threeTree;
+ array_push($twoTree, $two);
+ }
+ if (!empty($twoTree)) {
+ $temp_two_tree = array_column($twoTree, 'sort');
+ array_multisort($temp_two_tree, SORT_ASC, $twoTree);
+ $first['child'] = $twoTree;
+ }
+ array_push($tree, $first);
+ }
+ Cache::tag('cache')->set('category_all_' . $model::$app_id, compact('all', 'tree'));
+ }
+ return Cache::get('category_all_' . $model::$app_id);
+ }
+
+ /**
* 获取所有分类
*/
public static function getCacheAll()
diff --git a/admin/app/common/model/supplier/Supplier.php b/admin/app/common/model/supplier/Supplier.php
index e3f684b..dba4dc2 100644
--- a/admin/app/common/model/supplier/Supplier.php
+++ b/admin/app/common/model/supplier/Supplier.php
@@ -17,6 +17,7 @@
protected $pk = 'shop_supplier_id';
+
/**
* 关联应用表
*/
diff --git a/admin/app/common/model/user/User.php b/admin/app/common/model/user/User.php
index 52c026e..3199aca 100644
--- a/admin/app/common/model/user/User.php
+++ b/admin/app/common/model/user/User.php
@@ -357,7 +357,7 @@
$quantity=0;
foreach ($product as $item){
// 检查商品是否是指定的分红商品
- if (in_array($item['product_id'], $config['become__buy_product_ids'])) {
+ if (in_array($item['product_id'], $config['become__buy_product_ids'])||$item['is_vip']==1) {
// 获取商品数量
$quantity+= $item['total_num'];
}
diff --git a/admin/app/shop/model/order/Order.php b/admin/app/shop/model/order/Order.php
index f843a21..3a9e04d 100644
--- a/admin/app/shop/model/order/Order.php
+++ b/admin/app/shop/model/order/Order.php
@@ -326,8 +326,8 @@
->where('pay_status', '=', 20)
->where('order_status', '=', 30)
->where('is_delete', '=', 0)
- ->where('create_time', '>=', $bonusData['start_time'])
- ->where('create_time', '<', $bonusData['end_time']);
+ ->where('create_time', '>=', strtotime($bonusData['start_time']))
+ ->where('create_time', '<=', strtotime($bonusData['end_time']));
return $model->sum('pay_price');
}
}
\ No newline at end of file
diff --git a/admin/app/shop/model/order/OrderProduct.php b/admin/app/shop/model/order/OrderProduct.php
index a2814c0..98af8cb 100644
--- a/admin/app/shop/model/order/OrderProduct.php
+++ b/admin/app/shop/model/order/OrderProduct.php
@@ -103,21 +103,21 @@
return 0;
}
- public static function getPurchaseCount($userId, $postData,$product_ids)
+ public static function getPurchaseCount($userId, $postData)
{
$model = new static();
//搜索时间段
- if (!empty($postData['create_time'])) {
- $sta_time = array_shift($postData['create_time']);
- $end_time = array_pop($postData['create_time']);
- $model = $model->whereBetweenTime('order.create_time', $sta_time, date('Y-m-d 23:59:59', strtotime($end_time)));
+ if (!empty($postData['start_time'])) {
+ $sta_time = $postData['start_time'];
+ $end_time = $postData['end_time'];
+ $model = $model->whereBetweenTime('order.create_time', strtotime($sta_time), strtotime($end_time));
}
return $model->alias('o_product')
->join('order', 'order.order_id = o_product.order_id')
->where('order.pay_status', '=', OrderPayStatusEnum::SUCCESS)
->where('order.order_status', '<>', OrderStatusEnum::CANCELLED)
->where('o_product.user_id', '=', $userId)
- ->where('o_product.product_id', 'in', $product_ids)
+ ->where('o_product.is_vip',1)
->group('o_product.product_id')
->sum("total_num");
}
diff --git a/admin/app/shop/model/plus/bonus/Order.php b/admin/app/shop/model/plus/bonus/Order.php
index dcf3c75..a6c0e97 100644
--- a/admin/app/shop/model/plus/bonus/Order.php
+++ b/admin/app/shop/model/plus/bonus/Order.php
@@ -14,7 +14,7 @@
*/
public function getList($user_id = null, $is_settled = -1)
{
- $model = $this;
+ $model = $this->where('is_invalid', '=', 0);
// 检索查询条件
if ($user_id > 1) {
$model = $model->where('first_user_id|second_user_id', '=', $user_id);
diff --git a/admin/app/shop/model/plus/shareholder/Bonus.php b/admin/app/shop/model/plus/shareholder/Bonus.php
index 1425d55..017f7ff 100644
--- a/admin/app/shop/model/plus/shareholder/Bonus.php
+++ b/admin/app/shop/model/plus/shareholder/Bonus.php
@@ -40,8 +40,9 @@
//是否有可分红订单,1有,0无
$is_bonus = 1;
$first_data = Order::orderFirst();
- if (empty($first_data)) {
+ if (empty($first_data)||!isset($first_data)) {
$is_bonus = 0;
+ $first_data['create_time']=date('Y-m-d');
}
//可结算时间需要加上分红结算天数
$create_time = strtotime($first_data['create_time']) + intval(Setting::getItem('settlement')['settle_days']) * 86400;
diff --git a/admin/app/shop/model/plus/shareholder/User.php b/admin/app/shop/model/plus/shareholder/User.php
index 4248c2d..218ed95 100644
--- a/admin/app/shop/model/plus/shareholder/User.php
+++ b/admin/app/shop/model/plus/shareholder/User.php
@@ -13,6 +13,11 @@
*/
class User extends UserModel
{
+ public static function checkExistByGradeId($grade_id)
+ {
+ self::where('grade_id',$grade_id)->find();
+ }
+
/**
* 获取股东用户列表
*/
@@ -57,18 +62,17 @@
// 先获取所有股东
$model = new static;
$shareholders = $model->where('is_delete', '=', 0)->with(['grade'])->select();
-
// 如果没有设置分红条件,返回所有股东
if (empty($setting['consumption_amount']) && empty($setting['condition_purchase_count'])) {
return $shareholders;
}
-
+
// 过滤满足条件的股东
$eligibleShareholders = [];
foreach ($shareholders as $shareholder) {
$userId = $shareholder['user_id'];
$isEligible = true;
-
+
// 检查消费金额条件
if (!empty($setting['consumption_amount'])) {
$totalConsumption = (new OrderModel)->getUserTotalConsumption($userId,$bonusData);
@@ -79,7 +83,7 @@
// 检查购买次数条件
if (!empty($setting['condition_purchase_count']) && $isEligible) {
- $purchaseCount = (new OrderProductModel)::getPurchaseCount($userId,$bonusData,$shareholder['product_ids']);
+ $purchaseCount = (new OrderProductModel)::getPurchaseCount($userId,$bonusData);
if ($purchaseCount < $setting['condition_purchase_count']) {
$isEligible = false;
}
diff --git a/admin/app/shop/model/plus/vip/Order.php b/admin/app/shop/model/plus/vip/Order.php
index 9f82a65..75847b7 100644
--- a/admin/app/shop/model/plus/vip/Order.php
+++ b/admin/app/shop/model/plus/vip/Order.php
@@ -14,7 +14,8 @@
*/
public function getList($param=[],$user_id = null, $is_settled = -1)
{
- $model = $this->with(['user', 'vipUser'=>['user'], 'referee','orderMaster'=>['product'=>['image']]]);
+ $model = $this->with(['user', 'vipUser'=>['user'], 'referee','orderMaster'=>['product'=>['image']]])
+ ->where('is_invalid', '=', 0);
// 筛选用户
$user_id > 0 && $model = $model->where('user_id', '=', $user_id);
// 筛选结算状态
diff --git a/admin/app/shop/model/product/Category.php b/admin/app/shop/model/product/Category.php
index 1466057..adcb6a5 100644
--- a/admin/app/shop/model/product/Category.php
+++ b/admin/app/shop/model/product/Category.php
@@ -58,7 +58,7 @@
* 删除缓存
*/
private function deleteCache()
- {
+ { Cache::delete('category_all_' . static::$app_id);
return Cache::delete('category_' . static::$app_id);
}
diff --git a/admin/app/shop/service/ProductService.php b/admin/app/shop/service/ProductService.php
index 1436ef1..d3182bb 100644
--- a/admin/app/shop/service/ProductService.php
+++ b/admin/app/shop/service/ProductService.php
@@ -19,7 +19,7 @@
public static function getEditData($model = null, $scene = 'edit')
{
// 商品分类
- $category = CategoryModel::getCacheTree();
+ $category = CategoryModel::getCategoryALL()['tree'];
// 配送模板,仅仅查当前模板
$delivery = [];
if($model){
diff --git a/admin/app/supplier/controller/product/Category.php b/admin/app/supplier/controller/product/Category.php
index 348629f..025d313 100644
--- a/admin/app/supplier/controller/product/Category.php
+++ b/admin/app/supplier/controller/product/Category.php
@@ -55,8 +55,10 @@
{
// 模板详情
$model = CategoryModel::detail($category_id);
+ $data = $this->request->post();
+ $data['shop_supplier_id'] = $this->getSupplierId();
// 更新记录
- if ($model->edit($this->request->post())) {
+ if ($model->edit($data)) {
return $this->renderSuccess('更新成功');
}
return $this->renderError($model->getError() ?: '更新失败');
diff --git a/admin/app/supplier/model/product/Category.php b/admin/app/supplier/model/product/Category.php
index 06eecad..b3904b3 100644
--- a/admin/app/supplier/model/product/Category.php
+++ b/admin/app/supplier/model/product/Category.php
@@ -95,6 +95,10 @@
*/
public function edit($data)
{
+ if ($this['shop_supplier_id']==0){
+ $this->error = '该分类为平台分类,不可以修改';
+ return false;
+ }
// 验证:一级分类如果存在子类,则不允许移动
if ($data['parent_id'] > 0 && static::hasSubCategory($this['category_id'])) {
$this->error = '该分类下存在子分类,不可以移动';
@@ -110,6 +114,10 @@
*/
public function remove($categoryId)
{
+ if ($this['shop_supplier_id']==0){
+ $this->error = '该分类为平台分类,不允许删除';
+ return false;
+ }
// 判断是否存在商品
if ($productCount = (new Product)->getProductTotal(['category_id' => $categoryId])) {
$this->error = '该分类下存在' . $productCount . '个商品,不允许删除';
@@ -130,6 +138,7 @@
private function deleteCache($shop_supplier_id)
{
Cache::delete('category_supplier_'.$shop_supplier_id);
+ Cache::delete('category_all_' . static::$app_id);
return Cache::delete('category_' . static::$app_id);
}
diff --git a/admin/app/supplier/model/supplier/Supplier.php b/admin/app/supplier/model/supplier/Supplier.php
index a097ff2..1130fd8 100644
--- a/admin/app/supplier/model/supplier/Supplier.php
+++ b/admin/app/supplier/model/supplier/Supplier.php
@@ -8,6 +8,12 @@
*/
class Supplier extends SupplierModel
{
+
+ protected $append=['coordinate'];
+ public function getCoordinateAttr($v,$data)
+ {
+ return $data['latitude'].','.$data['longitude'];
+ }
/**
*检查登录
*/
@@ -76,6 +82,13 @@
*/
public function edit($data){
$isexist = $this->where('name','=',$data['name'])->where('shop_supplier_id','<>',$data['shop_supplier_id'])->find();
+ $latitude=0;
+ $longitude=0;
+ if (!empty($data['coordinate'])){
+ $coordinate=explode(',',$data['coordinate']);
+ $latitude=$coordinate[0];
+ $longitude=$coordinate[1];
+ }
if($isexist){
$this->error = '店铺名称已存在';
return false;
@@ -87,6 +100,8 @@
'description' => $data['description'],
'logo_id' => $data['logo_id'],
'business_id' => $data['business_id'],
+ 'latitude' =>$latitude,
+ 'longitude' => $longitude,
'app_id' => self::$app_id,
'name' => $data['name'],
'is_full' => 1,
diff --git a/shop_vue/src/views/branch/branch/drawer/part/edit.vue b/shop_vue/src/views/branch/branch/drawer/part/edit.vue
index dfc393a..303427b 100644
--- a/shop_vue/src/views/branch/branch/drawer/part/edit.vue
+++ b/shop_vue/src/views/branch/branch/drawer/part/edit.vue
@@ -86,11 +86,10 @@
// category: [],
loading: false,
open_user: false,
-
};
},
props: ['form', 'areaList', 'branchList', 'user_info'],
-
+
methods: {
/*添加用户*/
onSubmit() {
@@ -132,11 +131,11 @@
/*初始化城市id*/
initCity() {
- this.form.city_id = ''
+ this.form.branch.city_id = '';
},
/*初始化区id*/
initRegion() {
- this.form.region_id = ''
+ this.form.branch.region_id = ''
},
/*打开弹出层*/
diff --git a/shop_vue/src/views/plus/shareholder/bonus/Bonus.vue b/shop_vue/src/views/plus/shareholder/bonus/Bonus.vue
index 180f77e..265c713 100644
--- a/shop_vue/src/views/plus/shareholder/bonus/Bonus.vue
+++ b/shop_vue/src/views/plus/shareholder/bonus/Bonus.vue
@@ -8,7 +8,7 @@
<div class="common-seach-wrap">
<el-form size="small" :inline="true" :model="formInline" class="demo-form-inline">
<el-form-item label="结算时间">
- <el-date-picker
+ <el-date-picker
size="small"
style="margin-right: 15px;"
v-model="year"
@@ -18,7 +18,7 @@
value-format="yyyy"
placeholder="选择年">
</el-date-picker>
- <el-date-picker
+ <el-date-picker
size="small"
style="margin-right: 15px;"
v-model="month"
@@ -256,7 +256,7 @@
this.getData();
}
},
- chooseYear(e) {
+ chooseYear(e) {
this.choose = e;
if(e != null && !(this.week != '' && this.week != null && this.month == null)) {
this.getData();
diff --git a/shop_vue/src/views/plus/vip/setting/part/Basic.vue b/shop_vue/src/views/plus/vip/setting/part/Basic.vue
index 88eb8b5..6e2857c 100644
--- a/shop_vue/src/views/plus/vip/setting/part/Basic.vue
+++ b/shop_vue/src/views/plus/vip/setting/part/Basic.vue
@@ -13,6 +13,24 @@
<el-radio v-model="form.is_open" label="0">关闭</el-radio>
</div>
</el-form-item>
+ <el-form-item label="是否开启级差奖">
+ <div>
+ <el-radio v-model="form.jcaward" label="1">开启</el-radio>
+ <el-radio v-model="form.jcaward" label="0">关闭</el-radio>
+ </div>
+ </el-form-item>
+ <el-form-item label="是否开启平级奖">
+ <div>
+ <el-radio v-model="form.pjaward" label="1">开启</el-radio>
+ <el-radio v-model="form.pjaward" label="0">关闭</el-radio>
+ </div>
+ </el-form-item>
+ <el-form-item label="平级奖励层级" v-if="form.pjaward==1">
+ <div>
+ <el-input v-model="form.pjaward_level" type="number" class="max-w460"></el-input>
+ <div class="tips">默认1级,即只往上找一个平级</div>
+ </div>
+ </el-form-item>
<el-form-item label="成为VIP需要购买的商品">
<div>
<el-row>
@@ -72,7 +90,10 @@
is_open: '0',
become__buy_product_ids: [],
referee_buy_count: '0',
- product_image: []
+ product_image: [],
+ jcaward: '0',
+ pjaward: '0',
+ pjaward_level: '1'
},
/*是否打开产品弹出层*/
isproduct: false,
diff --git a/supplier_vue/src/views/setting/supplier/index.vue b/supplier_vue/src/views/setting/supplier/index.vue
index f04b12f..045e964 100644
--- a/supplier_vue/src/views/setting/supplier/index.vue
+++ b/supplier_vue/src/views/setting/supplier/index.vue
@@ -25,12 +25,12 @@
<el-form-item label="坐标">
<el-row class="mb16">
<el-col :span="24">
- <el-input v-model="form.supplier.coordinate" class="max-w460"></el-input>
+ <el-input v-model="formData.coordinate" class="max-w460"></el-input>
</el-col>
</el-row>
<el-row class="mb16">
<el-col :span="24">
- <Getpoint :form="form.supplier" @getMapdata="getMapdataFunc" @chose="choseFunc"></Getpoint>
+ <Getpoint :form="formData.supplier" @getMapdata="getMapdataFunc" @chose="choseFunc"></Getpoint>
</el-col>
</el-row>
</el-form-item>
@@ -91,7 +91,8 @@
description:'',
logo_id:0,
//business_id:0,
- notice: ''
+ notice: '',
+ coordinate:''
},
/*是否打开图片选择*/
isupload:false,
@@ -107,22 +108,22 @@
methods:{
/*初始化城市id*/
initCity() {
- this.form.supplier.city_id = ''
+ this.formData.city_id = ''
},
/*初始化区id*/
initRegion() {
- this.form.supplier.region_id = ''
+ this.formData.region_id = ''
},
/*获取经纬度*/
getMapdataFunc(e) {
- this.form.supplier.coordinate = e.data[0].toFixed(6) + ',' + e.data[1].toFixed(6);
+ this.formData.coordinate = e.data[0].toFixed(6) + ',' + e.data[1].toFixed(6);
},
/*选择的地址*/
choseFunc(e){
- this.form.supplier.coordinate=e.location.lat+','+e.location.lng;
- this.form.supplier.address=e.address;
+ this.formData.coordinate=e.location.lat+','+e.location.lng;
+ this.formData.address=e.address;
},
--
Gitblit v1.9.2