Forráskód Böngészése

Merge branch 'commission-m' into tmp-master

liugc 1 éve
szülő
commit
88a3a266c0

+ 133 - 0
app/adminapi/controller/master_commission/MasterWorkerCommissionConfigController.php

@@ -0,0 +1,133 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+
+
+namespace app\adminapi\controller\master_commission;
+
+
+use app\adminapi\controller\BaseAdminController;
+use app\adminapi\lists\master_commission\MasterWorkerCommissionConfigLists;
+use app\adminapi\logic\master_commission\MasterWorkerCommissionConfigLogic;
+use app\adminapi\validate\master_commission\MasterWorkerCommissionConfigValidate;
+
+
+/**
+ * MasterWorkerCommissionConfig控制器
+ * Class MasterWorkerCommissionConfigController
+ * @package app\adminapi\controller
+ */
+class MasterWorkerCommissionConfigController extends BaseAdminController
+{
+
+
+    /**
+     * @notes 获取列表
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2024/12/06 10:42
+     */
+    public function lists()
+    {
+        return $this->dataLists(new MasterWorkerCommissionConfigLists());
+    }
+
+
+    /**
+     * @notes 添加
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2024/12/06 10:42
+     */
+    public function add()
+    {
+        $params = (new MasterWorkerCommissionConfigValidate())->post()->goCheck('add',[
+            'adminId' => $this->adminId
+        ]);
+        $result = MasterWorkerCommissionConfigLogic::add($params);
+        if (true === $result) {
+            return $this->success('添加成功', [], 1, 1);
+        }
+        return $this->fail(MasterWorkerCommissionConfigLogic::getError());
+    }
+
+
+    /**
+     * @notes 编辑
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2024/12/06 10:42
+     */
+    public function edit()
+    {
+        $params = (new MasterWorkerCommissionConfigValidate())->post()->goCheck('edit',[
+            'adminId' => $this->adminId
+        ]);
+        $result = MasterWorkerCommissionConfigLogic::edit($params);
+        if (true === $result) {
+            return $this->success('编辑成功', [], 1, 1);
+        }
+        return $this->fail(MasterWorkerCommissionConfigLogic::getError());
+    }
+
+
+    /**
+     * @notes 删除
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2024/12/06 10:42
+     */
+    public function delete()
+    {
+        $params = (new MasterWorkerCommissionConfigValidate())->post()->goCheck('delete');
+        MasterWorkerCommissionConfigLogic::delete($params);
+        return $this->success('删除成功', [], 1, 1);
+    }
+
+
+    /**
+     * @notes 获取详情
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2024/12/06 10:42
+     */
+    public function detail()
+    {
+        $params = (new MasterWorkerCommissionConfigValidate())->goCheck('detail');
+        $result = MasterWorkerCommissionConfigLogic::detail($params);
+        return $this->data($result);
+    }
+
+    public function examine()
+    {
+        $params = (new MasterWorkerCommissionConfigValidate())->post()->goCheck('delete',[
+            'adminId' => $this->adminId
+        ]);
+        $result = MasterWorkerCommissionConfigLogic::examine($params);
+        if (true === $result) {
+            return $this->success('启动成功', [], 1, 1);
+        }
+        return $this->fail(MasterWorkerCommissionConfigLogic::getError());
+    }
+    public function offCommission()
+    {
+        $params = (new MasterWorkerCommissionConfigValidate())->post()->goCheck('delete',[
+            'adminId' => $this->adminId
+        ]);
+        $result = MasterWorkerCommissionConfigLogic::offCommission($params);
+        if (true === $result) {
+            return $this->success('关闭成功', [], 1, 1);
+        }
+        return $this->fail(MasterWorkerCommissionConfigLogic::getError());
+    }
+}

+ 86 - 0
app/adminapi/lists/master_commission/MasterWorkerCommissionConfigLists.php

@@ -0,0 +1,86 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+
+namespace app\adminapi\lists\master_commission;
+
+
+use app\adminapi\lists\BaseAdminDataLists;
+use app\common\model\master_commission\MasterWorkerCommissionConfig;
+use app\common\lists\ListsSearchInterface;
+use app\common\model\master_worker\MasterWorker;
+
+
+/**
+ * MasterWorkerCommissionConfig列表
+ * Class MasterWorkerCommissionConfigLists
+ * @package app\adminapi\lists
+ */
+class MasterWorkerCommissionConfigLists extends BaseAdminDataLists implements ListsSearchInterface
+{
+
+
+    /**
+     * @notes 设置搜索条件
+     * @return \string[][]
+     * @author likeadmin
+     * @date 2024/12/06 10:42
+     */
+    public function setSearch(): array
+    {
+        return [
+            '=' => ['master_worker_id', 'submit_admin_id', 'examine_admin_id', 'voucher_status', 'notice_rule'],
+
+        ];
+    }
+
+    public function queryWhere(){
+        $where = [];
+        if (isset($this->params['mobile_account']) && !empty($this->params['mobile_account'])) {
+            $mw_ids = MasterWorker::where('mobile|account','like', '%' . $this->params['mobile_account'] . '%')->column('id');
+            $where[] = [ 'master_worker_id','in',$mw_ids?:[0]];
+        }
+        return $where;
+    }
+    /**
+     * @notes 获取列表
+     * @return array
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @author likeadmin
+     * @date 2024/12/06 10:42
+     */
+    public function lists(): array
+    {
+        return MasterWorkerCommissionConfig::with(['masterWorker','examineAdmin'])->where($this->searchWhere)->where($this->queryWhere())
+            ->field(['id', 'master_worker_id', 'submit_admin_id', 'examine_admin_id', 'voucher_status', 'notice_rule','block_data'])
+            ->limit($this->limitOffset, $this->limitLength)
+            ->order(['id' => 'desc'])
+            ->select()
+            ->toArray();
+    }
+
+
+    /**
+     * @notes 获取数量
+     * @return int
+     * @author likeadmin
+     * @date 2024/12/06 10:42
+     */
+    public function count(): int
+    {
+        return MasterWorkerCommissionConfig::where($this->searchWhere)->count();
+    }
+
+}

+ 218 - 0
app/adminapi/logic/master_commission/MasterWorkerCommissionConfigLogic.php

@@ -0,0 +1,218 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+
+namespace app\adminapi\logic\master_commission;
+
+
+use app\common\model\master_commission\MasterWorkerCommissionConfig;
+use app\common\logic\BaseLogic;
+use app\common\model\master_commission\MasterWorkerCommissionRatio;
+use think\facade\Db;
+use think\facade\Log;
+
+
+/**
+ * MasterWorkerCommissionConfig逻辑
+ * Class MasterWorkerCommissionConfigLogic
+ * @package app\adminapi\logic
+ */
+class MasterWorkerCommissionConfigLogic extends BaseLogic
+{
+
+
+    /**
+     * @notes 添加
+     * @param array $params
+     * @return bool
+     * @author likeadmin
+     * @date 2024/12/06 10:42
+     */
+    public static function add(array $params): bool
+    {
+        if(isset($params['block_data'])){
+            foreach ($params['block_data'] as &$data) {
+                if($data['category_ids']){
+                    $ids = [];
+                    foreach ($data['category_ids'] as $val){
+                        is_array($val)?($ids[] = end($val)):($ids[] = $val);
+                    }
+                    //$params['category_ids'] = ["goods_category_ids"=>$params['category_ids'],"ids"=>$ids];
+                    $data['category_ids'] = implode(',',$ids);
+                }
+            }
+        }
+        Db::startTrans();
+        try {
+            $info = MasterWorkerCommissionConfig::where('master_worker_id',$params['master_worker_id'])->where('voucher_status',3)->findOrEmpty();
+            if($info->isEmpty()){
+                MasterWorkerCommissionConfig::create([
+                    'master_worker_id' => $params['master_worker_id'],
+                    'submit_admin_id' => $params['adminId'],
+                    'voucher_status' => 3,
+                    'notice_rule' => $params['notice_rule'],
+                    'block_data' => $params['block_data'],
+                ]);
+            }else{
+                throw new \Exception('存在审核中规则,无法新增');
+            }
+            Db::commit();
+            return true;
+        } catch (\Exception $e) {
+            Db::rollback();
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
+
+
+    /**
+     * @notes 编辑
+     * @param array $params
+     * @return bool
+     * @author likeadmin
+     * @date 2024/12/06 10:42
+     */
+    public static function edit(array $params): bool
+    {
+        if(isset($params['block_data'])){
+            foreach ($params['block_data'] as &$data) {
+                if($data['category_ids']){
+                    $ids = [];
+                    foreach ($data['category_ids'] as $val){
+                        is_array($val)?($ids[] = end($val)):($ids[] = $val);
+                    }
+                    $data['category_ids'] = implode(',',$ids);
+                }
+            }
+        }
+        Db::startTrans();
+        try {
+            $info = MasterWorkerCommissionConfig::where('master_worker_id',$params['master_worker_id'])->where('voucher_status',3)->findOrEmpty();
+            if($info->isEmpty()){
+                throw new \Exception('不存在待审核规则,无法编辑');
+            }else{
+                MasterWorkerCommissionConfig::where('id', $params['id'])->update([
+                    'master_worker_id' => $params['master_worker_id'],
+                    'submit_admin_id' => $params['adminId'],
+                    'voucher_status' => $params['voucher_status'],
+                    'notice_rule' => $params['notice_rule']?json_encode($params['notice_rule']):0,
+                    'block_data' => $params['block_data']?json_encode($params['block_data']):0,
+                ]);
+            }
+            Db::commit();
+            return true;
+        } catch (\Exception $e) {
+            Db::rollback();
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
+
+
+    /**
+     * @notes 删除
+     * @param array $params
+     * @return bool
+     * @author likeadmin
+     * @date 2024/12/06 10:42
+     */
+    public static function delete(array $params): bool
+    {
+        MasterWorkerCommissionRatio::where('commission_config_id',$params['id'])->delete();
+        return MasterWorkerCommissionConfig::destroy($params['id']);
+    }
+
+
+    /**
+     * @notes 获取详情
+     * @param $params
+     * @return array
+     * @author likeadmin
+     * @date 2024/12/06 10:42
+     */
+    public static function detail($params): array
+    {
+        return MasterWorkerCommissionConfig::findOrEmpty($params['id'])->toArray();
+    }
+
+    public static function examine($params): bool
+    {
+
+        Db::startTrans();
+        try {
+            $info = MasterWorkerCommissionConfig::where('id',$params['id'])->where('voucher_status',3)->findOrEmpty();
+            if($info->isEmpty()){
+                throw new \Exception('不存在待审核规则,无法审核');
+            }else{
+                // 关闭所有旧规则
+                MasterWorkerCommissionConfig::where('master_worker_id',$info->master_worker_id)->update(['voucher_status'=>1]);
+
+                // 生成比例数据 [{"block_key":"0","category_ids":"59,54,53,20,36,35,34,33,32,48","ratio":"0.2"},{"block_key":"1","category_ids":"3","ratio":"0.7"}]
+                $ratioData = [];
+                foreach ($info->block_data as $data){
+                    $category_ids = explode(',',$data['category_ids']);
+                    foreach ($category_ids as $category_id) {
+                        $ratioData[] = [
+                            'commission_config_id' => $params['id'],
+                            'goods_category_id' => $category_id,
+                            'ratio' => $data['ratio'],
+                            'create_time' => time(),
+                            'update_time' => time(),
+                        ];
+                    }
+                }
+                Db::name('master_worker_commission_ratio')->insertAll($ratioData);
+
+                // 启动
+                MasterWorkerCommissionConfig::where('id', $params['id'])->update([
+                    'examine_admin_id' => $params['adminId'],
+                    'voucher_status' => 2
+                ]);
+            }
+            Db::commit();
+            return true;
+        } catch (\Exception $e) {
+            Db::rollback();
+            if (str_contains($e->getMessage(), "key 'category_config_id'")) {
+                self::setError('规则中存在重复商品分类,请重新编辑');
+            }else{
+                self::setError($e->getMessage());
+            }
+            return false;
+        }
+
+
+    }
+    public static function offCommission($params): bool
+    {
+        Db::startTrans();
+        try {
+            $info = MasterWorkerCommissionConfig::where('id',$params['id'])->findOrEmpty();
+            if($info->isEmpty()){
+                throw new \Exception('不存在规则,无法操作');
+            }else{
+                // 关闭
+                MasterWorkerCommissionConfig::where('id',$params['id'])->update(['voucher_status'=>1]);
+            }
+            Db::commit();
+            return true;
+        } catch (\Exception $e) {
+            Db::rollback();
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
+
+
+}

+ 17 - 7
app/adminapi/logic/works/ServiceWorkLogic.php

@@ -21,6 +21,8 @@ use app\common\logic\WorkerAccountLogLogic;
 use app\common\model\coupon\CouponCategory;
 use app\common\model\coupon\CouponCategory;
 use app\common\model\coupon\UserCoupon;
 use app\common\model\coupon\UserCoupon;
 use app\common\model\dict\DictData;
 use app\common\model\dict\DictData;
+use app\common\model\master_commission\MasterWorkerCommissionConfig;
+use app\common\model\master_commission\MasterWorkerCommissionRatio;
 use app\common\model\master_worker\MasterWorker;
 use app\common\model\master_worker\MasterWorker;
 use app\common\model\master_worker\MasterWorkerAccountLog;
 use app\common\model\master_worker\MasterWorkerAccountLog;
 use app\common\model\master_worker\MasterWorkerRetentionMoneyLog;
 use app\common\model\master_worker\MasterWorkerRetentionMoneyLog;
@@ -667,14 +669,22 @@ class ServiceWorkLogic extends BaseLogic
             if((int)$serviceWorkInfo['work_pay_status'] !== 3){
             if((int)$serviceWorkInfo['work_pay_status'] !== 3){
                 throw new \Exception('该工单非待结算状态');
                 throw new \Exception('该工单非待结算状态');
             }
             }
-            //获取工单对应的商品id
-            $order_sns = \app\common\model\orders\RechargeOrder::where('work_id',$serviceWorkInfo->id)->column('sn');
-            $goods_id = OrderGoods::whereIn('sn',$order_sns)->value('goods_id');
-            $rule = PerformanceRules::whereFindInSet('goods_id',$goods_id)->findOrEmpty();
-            if($rule->isEmpty()){
-                throw new \Exception('请配置商品业绩规则');
+            $ratio = 0;
+            $commissionConfig = MasterWorkerCommissionConfig::where('master_worker_id',$serviceWorkInfo->master_worker_id)->where('voucher_status',2)->findOrEmpty();
+            !$commissionConfig->isEmpty() && $ratio = MasterWorkerCommissionRatio::where('commission_config_id',$commissionConfig['id'])->where('goods_category_id',$serviceWorkInfo->goods_category_id)->value('ratio')?:0;
+            if($commissionConfig->isEmpty() || empty($ratio)){
+                //获取工单对应的商品id
+                $order_sns = \app\common\model\orders\RechargeOrder::where('work_id',$serviceWorkInfo->id)->column('sn');
+                $goods_id = OrderGoods::whereIn('sn',$order_sns)->value('goods_id');
+                $rule = PerformanceRules::whereFindInSet('goods_id',$goods_id)->findOrEmpty();
+                if($rule->isEmpty()){
+                    throw new \Exception('请配置商品业绩规则');
+                }
+                PerformanceLogic::calculatePerformance($serviceWorkInfo);
+            }else{
+                // 存在服务分类比例进行结算
+                PerformanceLogic::calculatePerformanceCommission($serviceWorkInfo);
             }
             }
-            PerformanceLogic::calculatePerformance($serviceWorkInfo);
             Db::commit();
             Db::commit();
             return true;
             return true;
         } catch (\Exception $e) {
         } catch (\Exception $e) {

+ 104 - 0
app/adminapi/validate/master_commission/MasterWorkerCommissionConfigValidate.php

@@ -0,0 +1,104 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+
+namespace app\adminapi\validate\master_commission;
+
+
+use app\common\validate\BaseValidate;
+
+
+/**
+ * MasterWorkerCommissionConfig验证器
+ * Class MasterWorkerCommissionConfigValidate
+ * @package app\adminapi\validate
+ */
+class MasterWorkerCommissionConfigValidate extends BaseValidate
+{
+
+     /**
+      * 设置校验规则
+      * @var string[]
+      */
+    protected $rule = [
+        'id' => 'require',
+        'master_worker_id' => 'require',
+        'submit_admin_id' => 'require',
+        'examine_admin_id' => 'require',
+        'voucher_status' => 'require',
+
+    ];
+
+
+    /**
+     * 参数描述
+     * @var string[]
+     */
+    protected $field = [
+        'id' => 'id',
+        'master_worker_id' => '工程师ID',
+        'submit_admin_id' => '提交人ID',
+        'examine_admin_id' => '审核人ID',
+        'voucher_status' => '状态:1=关闭,2=启用',
+
+    ];
+
+
+    /**
+     * @notes 添加场景
+     * @return MasterWorkerCommissionConfigValidate
+     * @author likeadmin
+     * @date 2024/12/06 10:42
+     */
+    public function sceneAdd()
+    {
+        return $this->only(['master_worker_id']);
+    }
+
+
+    /**
+     * @notes 编辑场景
+     * @return MasterWorkerCommissionConfigValidate
+     * @author likeadmin
+     * @date 2024/12/06 10:42
+     */
+    public function sceneEdit()
+    {
+        return $this->only(['id','master_worker_id']);
+    }
+
+
+    /**
+     * @notes 删除场景
+     * @return MasterWorkerCommissionConfigValidate
+     * @author likeadmin
+     * @date 2024/12/06 10:42
+     */
+    public function sceneDelete()
+    {
+        return $this->only(['id']);
+    }
+
+
+    /**
+     * @notes 详情场景
+     * @return MasterWorkerCommissionConfigValidate
+     * @author likeadmin
+     * @date 2024/12/06 10:42
+     */
+    public function sceneDetail()
+    {
+        return $this->only(['id']);
+    }
+
+}

+ 72 - 0
app/api/logic/PerformanceLogic.php

@@ -7,6 +7,8 @@ use app\common\logic\BaseLogic;
 use app\common\logic\EffectiveLogic;
 use app\common\logic\EffectiveLogic;
 use app\common\logic\WorkAddMoneyLogic;
 use app\common\logic\WorkAddMoneyLogic;
 use app\common\logic\WorkerAccountLogLogic;
 use app\common\logic\WorkerAccountLogLogic;
+use app\common\model\master_commission\MasterWorkerCommissionConfig;
+use app\common\model\master_commission\MasterWorkerCommissionRatio;
 use app\common\model\master_worker\MasterWorker;
 use app\common\model\master_worker\MasterWorker;
 use app\common\model\orders\RechargeOrder;
 use app\common\model\orders\RechargeOrder;
 use app\common\model\performance\PerformanceRules;
 use app\common\model\performance\PerformanceRules;
@@ -115,4 +117,74 @@ class PerformanceLogic extends BaseLogic
         //生成保修卡
         //生成保修卡
         EffectiveLogic::receiveEffective($work);
         EffectiveLogic::receiveEffective($work);
     }
     }
+
+    public static function calculatePerformanceCommission($work)
+    {
+        Log::info('calculatePerformanceCommission:'.json_encode($work->toArray()));
+        //工单已完结,进行结算,结算完成后设置work_pay_status为2,已结算
+        //获取工单对应的商品id
+        $order_sns = RechargeOrder::where('work_id',$work->id)->column('sn');
+        $goods_id = OrderGoods::whereIn('sn',$order_sns)->value('goods_id');
+        $commissionConfig = MasterWorkerCommissionConfig::where('master_worker_id',$work->master_worker_id)->where('voucher_status',2)->find()->toArray();
+        $ratio = MasterWorkerCommissionRatio::where('commission_config_id',$commissionConfig['id'])->where('goods_category_id',$work->goods_category_id)->value('ratio');
+
+        Log::info('calculatePerformanceCommission:'.json_encode([$commissionConfig,$ratio]));
+
+        if($commissionConfig && 0 < $ratio  && $ratio < 1){
+            $work->work_pay_status = 2;
+            //工程师金额结算
+            //$coupon_price = RechargeOrder::where('work_id',$work->id)->sum('coupon_price');
+            $work->worker_price = $work->work_total;
+            $settlement_amount = bcmul($work->work_total, $ratio,2);
+            // 缴纳质保金
+            $masterWorkerInfo = MasterWorker::where('id', $work->master_worker_id)->where('retention_money_status', 1)->findOrEmpty()->toArray();
+            Log::info('缴纳质保金工程师信息:'.json_encode($masterWorkerInfo));
+            if(!empty($masterWorkerInfo) && $masterWorkerInfo['retention_pay_status'] == 2 && ($masterWorkerInfo['earnest_money'] > $masterWorkerInfo['earnest_money_usable'])){
+                $retentionData['action'] = WorkerAccountLogEnum::INC;
+                $retentionData['worker_id'] = $work->master_worker_id;
+                $retentionData['work_id'] = $work->id;
+                $amount = bcmul($work->worker_price, bcdiv($masterWorkerInfo['installment_ratio'], 100, 4),2);
+                $retentionData['amount'] = $amount;
+                $retentionData['remark'] = "分期缴纳质保金:工单提成--{$work->worker_price},分期每单缴纳比例--{$masterWorkerInfo['installment_ratio']}%,缴纳金额--{$amount}";
+                $settlement_amount -= (float)$amount;
+                $surplusMoney = RetentionMoneyLogic::retentionPayment($retentionData);
+                Log::info('Commission-分期缴纳质保金:'.$surplusMoney,$retentionData);
+                if($surplusMoney === false){
+                    Log::info('Commission-分期缴纳质保金支付失败-'.RetentionMoneyLogic::getError(),$retentionData);
+                    $settlement_amount += (float)$amount;
+                }else{
+                    $settlement_amount += (float)$surplusMoney;
+
+                    $work->earnest_money = $amount - $surplusMoney;//质保金金额
+                }
+            }
+
+            if($settlement_amount<0){
+                //修改工单为待结算,后台处理
+                $work->work_pay_status = 3;
+            }
+
+            //工程师可提现金额
+            $work->settlement_amount = $settlement_amount;
+
+            //工程师加单金额判定
+            //$add_work_amount = 0;测试
+            $add_work_amount = WorkAddMoneyLogic::checkAddWork($work,$work->worker_price);
+            $work->add_work_amount = $add_work_amount;
+
+            //系统回收金额
+            $work->system_amount = $work->worker_price-$settlement_amount-$work->earnest_money-$work->add_work_amount;
+
+            //工程师可提现金额,汇总了加单金额
+            $settlement_amount += (float)$work->add_work_amount;
+
+            Log::info('工单'.$work->id.',总服务费:'.$work->worker_price.'可提现金额:'.$settlement_amount.',加单金额:'.$work->add_work_amount.',缴纳质保金:'.$work->earnest_money.',系统回收金额:'.$work->system_amount);
+
+            WorkerAccountLogLogic::addAccountLog($work,$settlement_amount,WorkerAccountLogEnum::UM_INC_ADMIN,WorkerAccountLogEnum::INC);
+        }
+        $work->save();
+        //生成保修卡
+        EffectiveLogic::receiveEffective($work);
+    }
+
 }
 }

+ 49 - 0
app/common/model/master_commission/MasterWorkerCommissionConfig.php

@@ -0,0 +1,49 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+
+namespace app\common\model\master_commission;
+
+
+use app\common\model\auth\Admin;
+use app\common\model\BaseModel;
+use app\common\model\master_worker\MasterWorker;
+
+
+/**
+ * MasterWorkerCommissionConfig模型
+ * Class MasterWorkerCommissionConfig
+ * @package app\common\model
+ */
+class MasterWorkerCommissionConfig extends BaseModel
+{
+    
+    protected $name = 'master_worker_commission_config';
+    
+    protected $type = [
+        'notice_rule' => 'array',
+        'block_data' => 'array',
+    ];
+    public function masterWorker()
+    {
+        return $this->hasOne(MasterWorker::class, 'id', 'master_worker_id');
+    }
+    public function submitAdmin()
+    {
+        return $this->hasOne(Admin::class,'id','submit_admin_id')->field('id,name');
+    }
+    public function examineAdmin()
+    {
+        return $this->hasOne(Admin::class,'id','examine_admin_id')->field('id,name');
+    }
+}

+ 34 - 0
app/common/model/master_commission/MasterWorkerCommissionRatio.php

@@ -0,0 +1,34 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+
+namespace app\common\model\master_commission;
+
+
+use app\common\model\BaseModel;
+
+
+
+/**
+ * MasterWorkerCommissionRatio模型
+ * Class MasterWorkerCommissionRatio
+ * @package app\common\model
+ */
+class MasterWorkerCommissionRatio extends BaseModel
+{
+    
+    protected $name = 'master_worker_commission_ratio';
+    
+
+    
+}

+ 11 - 1
app/common/model/works/ServiceWork.php

@@ -18,6 +18,8 @@ namespace app\common\model\works;
 use app\api\logic\PerformanceLogic;
 use app\api\logic\PerformanceLogic;
 use app\common\model\BaseModel;
 use app\common\model\BaseModel;
 use app\common\model\goods_category\GoodsCategory;
 use app\common\model\goods_category\GoodsCategory;
+use app\common\model\master_commission\MasterWorkerCommissionConfig;
+use app\common\model\master_commission\MasterWorkerCommissionRatio;
 use app\common\model\master_worker\MasterWorker;
 use app\common\model\master_worker\MasterWorker;
 use app\common\model\orders\RechargeOrder;
 use app\common\model\orders\RechargeOrder;
 use app\common\model\property\PropertyHead;
 use app\common\model\property\PropertyHead;
@@ -40,7 +42,15 @@ class ServiceWork extends BaseModel
     {
     {
         if($model->user_confirm_status == 5 and $model->work_status == 7 and $model->work_pay_status==1){
         if($model->user_confirm_status == 5 and $model->work_status == 7 and $model->work_pay_status==1){
             //工单已完结,进行结算,结算完成后设置work_pay_status为2,已结算
             //工单已完结,进行结算,结算完成后设置work_pay_status为2,已结算
-            PerformanceLogic::calculatePerformance($model);
+            $ratio = 0;
+            $commissionConfig = MasterWorkerCommissionConfig::where('master_worker_id',$model->master_worker_id)->where('voucher_status',2)->findOrEmpty();
+            !$commissionConfig->isEmpty() && $ratio = MasterWorkerCommissionRatio::where('commission_config_id',$commissionConfig['id'])->where('goods_category_id',$model->goods_category_id)->value('ratio')?:0;
+            if($commissionConfig->isEmpty() || empty($ratio)){
+                PerformanceLogic::calculatePerformance($model);
+            }else{
+                // 存在服务分类比例进行结算
+                PerformanceLogic::calculatePerformanceCommission($model);
+            }
             //工单已完结, - 物业后续分成事件 $params['user_id']) || empty($params['sn']
             //工单已完结, - 物业后续分成事件 $params['user_id']) || empty($params['sn']
             event('PropertyCommission',['id'=>$model->id]);
             event('PropertyCommission',['id'=>$model->id]);
         }
         }