Просмотр исходного кода

Merge branch 'performance-m' into m--transfer

liugc 10 месяцев назад
Родитель
Сommit
b6b8418986

+ 109 - 0
app/adminapi/controller/master_worker/EngineerSettlementPermanentlyController.php

@@ -0,0 +1,109 @@
+<?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_worker;
+
+
+use app\adminapi\controller\BaseAdminController;
+use app\adminapi\lists\master_worker\EngineerSettlementPermanentlyLists;
+use app\adminapi\logic\master_worker\EngineerSettlementPermanentlyLogic;
+use app\adminapi\validate\master_worker\EngineerSettlementPermanentlyValidate;
+
+
+/**
+ * EngineerSettlementPermanently控制器
+ * Class EngineerSettlementPermanentlyController
+ * @package app\adminapi\controller
+ */
+class EngineerSettlementPermanentlyController extends BaseAdminController
+{
+
+
+    /**
+     * @notes 获取列表
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2025/06/09 10:33
+     */
+    public function lists()
+    {
+        return $this->dataLists(new EngineerSettlementPermanentlyLists());
+    }
+
+
+    /**
+     * @notes 添加
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2025/06/09 10:33
+     */
+    public function add()
+    {
+        $params = (new EngineerSettlementPermanentlyValidate())->post()->goCheck('add');
+        $result = EngineerSettlementPermanentlyLogic::add($params);
+        if (true === $result) {
+            return $this->success('添加成功', [], 1, 1);
+        }
+        return $this->fail(EngineerSettlementPermanentlyLogic::getError());
+    }
+
+
+    /**
+     * @notes 编辑
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2025/06/09 10:33
+     */
+    public function edit()
+    {
+        $params = (new EngineerSettlementPermanentlyValidate())->post()->goCheck('edit');
+        $params['admin_id'] = $this->adminId;
+        $result = EngineerSettlementPermanentlyLogic::edit($params);
+        if (true === $result) {
+            return $this->success('编辑成功', [], 1, 1);
+        }
+        return $this->fail(EngineerSettlementPermanentlyLogic::getError());
+    }
+
+
+    /**
+     * @notes 删除
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2025/06/09 10:33
+     */
+    public function delete()
+    {
+        $params = (new EngineerSettlementPermanentlyValidate())->post()->goCheck('delete');
+        EngineerSettlementPermanentlyLogic::delete($params);
+        return $this->success('删除成功', [], 1, 1);
+    }
+
+
+    /**
+     * @notes 获取详情
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2025/06/09 10:33
+     */
+    public function detail()
+    {
+        $params = (new EngineerSettlementPermanentlyValidate())->goCheck('detail');
+        $result = EngineerSettlementPermanentlyLogic::detail($params);
+        return $this->data($result);
+    }
+
+
+}

+ 133 - 0
app/adminapi/lists/master_worker/EngineerSettlementPermanentlyLists.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\lists\master_worker;
+
+
+use app\adminapi\lists\BaseAdminDataLists;
+use app\common\model\master_worker\EngineerSettlementPermanently;
+use app\common\lists\ListsSearchInterface;
+use app\common\model\master_worker\MasterWorker;
+
+
+/**
+ * EngineerSettlementPermanently列表
+ * Class EngineerSettlementPermanentlyLists
+ * @package app\adminapi\lists
+ */
+class EngineerSettlementPermanentlyLists extends BaseAdminDataLists implements ListsSearchInterface
+{
+
+
+    /**
+     * @notes 设置搜索条件
+     * @return \string[][]
+     * @author likeadmin
+     * @date 2025/06/09 10:33
+     */
+    public function setSearch(): array
+    {
+        return [
+            '=' => ['master_worker_id', 'last_settlement_time', 'settlement_time', 'step_days', 'status', 'admin_id', 'remark'],
+        ];
+    }
+
+    public function queryWhere(){
+        $where = [];
+        if(isset($this->params['settlement_time']) && empty($this->params['settlement_time'])){
+            $where[] = ['settlement_time', '=', ''];
+        }
+
+        /*if(isset($this->params['']) && $this->params['audit_state']!=''){
+            $ids = MasterWorker::where('audit_state',$this->params['audit_state'])->column('id');
+            $where[] = ['id', 'IN', $ids?:[0]];
+            //dd($ids);
+        }*/
+        /*$infoWorkerIds = MasterWorkerInfo::where('audit_state',0)->column('worker_id');
+        $bankWorkerIds = BankAccount::where('audit_state',0)->column('worker_id');
+        $agreeWorkerIds = MasterWorkerAgree::where('audit_state',0)->column('worker_id');
+        $ids = array_merge($infoWorkerIds,$bankWorkerIds,$agreeWorkerIds);*/
+        /*if(isset($this->params['real_name']) && !empty($this->params['real_name'])){
+            $where[] = ['master_worker_id', 'IN', MasterWorker::where([['real_name', 'like', "%{$this->params['real_name']}%"]])->column('id')?:[0]];
+        }
+        if(isset($this->params['nickname']) && !empty($this->params['nickname'])){
+            $where[] = ['master_worker_id', 'IN', MasterWorker::where([['nickname', 'like', "%{$this->params['nickname']}%"]])->column('id')?:[0]];
+        }
+        if(isset($this->params['account']) && !empty($this->params['account'])){
+            $where[] = ['master_worker_id', 'IN', MasterWorker::where([['account', 'like', "%{$this->params['account']}%"]])->column('id')?:[0]];
+        }*/
+        return $where;
+    }
+    /**
+     * 获取数据权限
+     * $this->adminInfo['data_rules']
+     * province city admin_id sale_group_id sale_id  property_head_id
+     */
+    public function queryDataWhere(){
+        $where = [];
+        /*$data_rules = $this->adminInfo['data_rules'];
+        if (isset($data_rules['province']) && !empty($data_rules['province'])) {
+            $where[] = ['province','in' ,$data_rules['province']];
+        }
+        if (isset($data_rules['city']) && !empty($data_rules['city'])) {
+            $where[] = ['city','in' ,$data_rules['city']];
+        }*/
+        return $where;
+    }
+    /**
+     * @notes 获取列表
+     * @return array
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @author likeadmin
+     * @date 2025/06/09 10:33
+     */
+    public function lists(): array
+    {
+        $list =  EngineerSettlementPermanently::with(['bankAccount','workerInfo','salaryItemPermanently'])->where($this->searchWhere)->where($this->queryWhere())
+            ->field(['*'])
+            ->limit($this->limitOffset, $this->limitLength)
+            ->order(['id' => 'desc'])
+            ->select()
+            ->toArray();
+        foreach ($list as &$item) {
+            $item['all_salary'] = $this->getAllSalary($item['salaryItemPermanently']);
+        }
+        return $list;
+    }
+
+
+    /**
+     * @notes 获取数量
+     * @return int
+     * @author likeadmin
+     * @date 2025/06/09 10:33
+     */
+    public function count(): int
+    {
+        return EngineerSettlementPermanently::where($this->searchWhere)->where($this->queryWhere())->count();
+    }
+
+    public function getAllSalary($salaryItemPermanently): float
+    {
+        $all_salary = 0.00;
+        foreach ($salaryItemPermanently as $item) {
+            $all_salary += $item['term_amount'];
+        }
+        return $all_salary;
+    }
+
+
+}

+ 239 - 0
app/adminapi/logic/master_worker/EngineerSettlementPermanentlyLogic.php

@@ -0,0 +1,239 @@
+<?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_worker;
+
+
+use app\common\model\dict\DictData;
+use app\common\model\master_worker\EngineerSettlementPermanently;
+use app\common\logic\BaseLogic;
+use app\common\model\master_worker\MasterWorker;
+use app\common\model\master_worker\SalaryItemPermanently;
+use think\facade\Db;
+use think\facade\Log;
+
+
+/**
+ * EngineerSettlementPermanently逻辑
+ * Class EngineerSettlementPermanentlyLogic
+ * @package app\adminapi\logic
+ */
+class EngineerSettlementPermanentlyLogic extends BaseLogic
+{
+    protected static int $conf_step_days = 7;
+    protected static string $conf_days = '2025-06-09 23:59:59';
+
+    /**
+     * @notes 添加
+     * @param array $params
+     * @return bool
+     * @author likeadmin
+     * @date 2025/06/09 10:33
+     */
+    public static function add(array $params): bool
+    {
+        Db::startTrans();
+        try {
+            EngineerSettlementPermanently::create([
+                'master_worker_id' => $params['master_worker_id'],
+                'last_settlement_time' => $params['last_settlement_time'],
+                'settlement_time' => $params['settlement_time'],
+                'step_days' => $params['step_days'],
+                'status' => $params['status'],
+                'admin_id' => $params['admin_id'],
+                'remark' => $params['remark']
+            ]);
+
+            Db::commit();
+            return true;
+        } catch (\Exception $e) {
+            Db::rollback();
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
+
+
+    /**
+     * @notes 编辑
+     * @param array $params
+     * @return bool
+     * @author likeadmin
+     * @date 2025/06/09 10:33
+     */
+    public static function edit(array $params): bool
+    {
+        Db::startTrans();
+        try {
+            EngineerSettlementPermanently::where('id', $params['id'])->update([
+//                'master_worker_id' => $params['master_worker_id'],
+//                'last_settlement_time' => $params['last_settlement_time'],
+//                'settlement_time' => $params['settlement_time'],
+//                'step_days' => $params['step_days'],
+                'status' => 1,
+                'admin_id' => $params['admin_id'],
+                //'remark' => $params['remark']
+            ]);
+
+            Db::commit();
+            return true;
+        } catch (\Exception $e) {
+            Db::rollback();
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
+
+
+    /**
+     * @notes 删除
+     * @param array $params
+     * @return bool
+     * @author likeadmin
+     * @date 2025/06/09 10:33
+     */
+    public static function delete(array $params): bool
+    {
+        return EngineerSettlementPermanently::destroy($params['id']);
+    }
+
+
+    /**
+     * @notes 获取详情
+     * @param $params
+     * @return array
+     * @author likeadmin
+     * @date 2025/06/09 10:33
+     */
+    public static function detail($params): array
+    {
+         function getAllSalary($salaryItemPermanently): float {
+            $all_salary = 0.00;
+            foreach ($salaryItemPermanently as $item) {
+                $all_salary += $item['term_amount'];
+            }
+            return $all_salary;
+        }
+        $item = EngineerSettlementPermanently::with(['bankAccount','workerInfo','salaryItemPermanently'])->findOrEmpty($params['id'])->toArray();
+        $item['all_salary'] = getAllSalary($item['salaryItemPermanently']);
+        return $item;
+    }
+
+    /**
+     * @notes 执行结算
+     * @param $params
+     * @author likeadmin
+     * @date 2025/06/09 10:33
+     */
+    public static function settlement($params)
+    {
+        Db::startTrans();
+        try {
+
+            $settlementPermanently = EngineerSettlementPermanently::where('id', $params['id'])->findOrEmpty();
+            if($settlementPermanently->isEmpty()){
+                throw new \Exception('结算记录不存在');
+            }
+            $amount = SalaryItemPermanently::where('permanently_settlement_id', $params['id'])->sum('term_amount');
+            $settlementPermanently->status = $params['status']??0;
+            $settlementPermanently->admin_id = $params['admin_id']??0;
+            $settlementPermanently->amount = $amount;
+            $settlementPermanently->save();
+
+            Db::commit();
+
+            // 删除该日期步进天数内的之前的快照
+            $ids = EngineerSettlementPermanently::where('status',0)->
+            where('settlement_time','between',[$settlementPermanently->last_settlement_time,$settlementPermanently->settlement_time])->column('id')??[];
+            if(!empty($ids)){
+                EngineerSettlementPermanently::where('id',$ids)->delete();
+                SalaryItemPermanently::where('permanently_settlement_id',$ids)->delete();
+            }
+
+            return true;
+        } catch (\Exception $e) {
+            Db::rollback();
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
+
+    /**
+     * @notes 定时任务
+     * @author likeadmin
+     * @date 2025/06/09 10:33
+     */
+    public static function settlementRegular($masterWorker_id = 0)
+    {
+        Db::startTrans();
+        try {
+            $wh =  ['type' => 2];
+            $masterWorker_id && $wh['id'] = $masterWorker_id;
+            //$masterWorker_id
+            // audit_state = 1
+            $masterWorkers = MasterWorker::where($wh)->select()->toArray();
+            foreach ($masterWorkers as $masterWorker) {
+                $last_settlement_time = self::getLastSettlementTime($masterWorker['id']);
+                $settlement_time = strtotime(date("Y-m-d",time())) + 86399;
+                $settlementPermanently = EngineerSettlementPermanently::create([
+                    'master_worker_id' => $masterWorker['id'],
+                    'last_settlement_time' => date('Y-m-d',$last_settlement_time),
+                    'settlement_time' => date('Y-m-d',$settlement_time),
+                    'step_days' => self::$conf_step_days,
+                    'status' => 0,
+                    'admin_id' => 0,
+                    'remark' => ''
+                ]);
+                //$settlementPermanently->id
+
+                $salary_item_data = DictData::where('type_value','salary_item')->column('name','value');
+                $salaryItemPermanently = new SalaryItemPermanently();
+                foreach ($salary_item_data as $salary_item => $item_name) {
+                    $fu_name = 'salary_item_'.$salary_item;
+                    if(!method_exists(SalaryItemPermanently::class,$fu_name)){
+                        continue;
+                    }
+                    $salaryItemPermanently->$fu_name($settlementPermanently['id'],$masterWorker['id'],[
+                        'start_time'=>$last_settlement_time,
+                        'end_time'=>$settlement_time,
+                        'step_days'=>self::$conf_step_days,'item_name'=>$item_name
+                    ]);
+                }
+            }
+            Db::commit();
+            return true;
+        } catch (\Exception $e) {
+            Db::rollback();
+            self::setError($e->getFile().':'.$e->getLine().':'.$e->getMessage());
+            return false;
+        }
+    }
+
+
+    public static function getLastSettlementTime($master_worker_id)
+    {
+        //查询该工程师上个结算日期
+        $last_settlement_time = EngineerSettlementPermanently::where('master_worker_id',$master_worker_id)->where('status',1)->order('settlement_time','desc')->value('settlement_time');
+        if(empty($last_settlement_time) || $last_settlement_time === '0000-00-00'){
+            return strtotime(self::$conf_days);
+        }
+        $current_time = strtotime(date("Y-m-d",time()));
+        $last_st_time = $current_time - (self::$conf_step_days * 86400);
+        if(strtotime($last_settlement_time) < $last_st_time){
+            return $last_st_time;
+        }else{
+            return strtotime($last_settlement_time);
+        }
+    }
+}

+ 102 - 0
app/adminapi/validate/master_worker/EngineerSettlementPermanentlyValidate.php

@@ -0,0 +1,102 @@
+<?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_worker;
+
+
+use app\common\validate\BaseValidate;
+
+
+/**
+ * EngineerSettlementPermanently验证器
+ * Class EngineerSettlementPermanentlyValidate
+ * @package app\adminapi\validate
+ */
+class EngineerSettlementPermanentlyValidate extends BaseValidate
+{
+
+     /**
+      * 设置校验规则
+      * @var string[]
+      */
+    protected $rule = [
+        'id' => 'require',
+        'master_worker_id' => 'require',
+        'last_settlement_time' => 'require',
+        'settlement_time' => 'require',
+        'admin_id' => 'require',
+    ];
+
+
+    /**
+     * 参数描述
+     * @var string[]
+     */
+    protected $field = [
+        'id' => 'id',
+        'master_worker_id' => '工程师ID',
+        'last_settlement_time' => '上个结算日期',
+        'settlement_time' => '日期',
+        'admin_id' => '管理员id',
+    ];
+
+
+    /**
+     * @notes 添加场景
+     * @return EngineerSettlementPermanentlyValidate
+     * @author likeadmin
+     * @date 2025/06/09 10:33
+     */
+    public function sceneAdd()
+    {
+        return $this->only(['master_worker_id','last_settlement_time','settlement_time','admin_id']);
+    }
+
+
+    /**
+     * @notes 编辑场景
+     * @return EngineerSettlementPermanentlyValidate
+     * @author likeadmin
+     * @date 2025/06/09 10:33
+     */
+    public function sceneEdit()
+    {
+        return $this->only(['id','master_worker_id','last_settlement_time','settlement_time','admin_id']);
+    }
+
+
+    /**
+     * @notes 删除场景
+     * @return EngineerSettlementPermanentlyValidate
+     * @author likeadmin
+     * @date 2025/06/09 10:33
+     */
+    public function sceneDelete()
+    {
+        return $this->only(['id']);
+    }
+
+
+    /**
+     * @notes 详情场景
+     * @return EngineerSettlementPermanentlyValidate
+     * @author likeadmin
+     * @date 2025/06/09 10:33
+     */
+    public function sceneDetail()
+    {
+        return $this->only(['id']);
+    }
+
+}

+ 2 - 2
app/api/logic/PerformanceLogic.php

@@ -134,7 +134,7 @@ class PerformanceLogic extends BaseLogic
             $settlement_amount += (float)$work->add_work_amount;
 
             //工程师可提现金额,汇总 配件总金额
-            $offering_price = ServiceWorkSpare::where("service_work_id", $work->id)->where('status', 1)->sum('offering_price')??0;
+            $offering_price = ServiceWorkSpare::where("service_work_id", $work->id)->where('status', 1)->sum(Db::raw("spare_number * offering_price"))??0;
             $freezeMoney = $work->spare_total - $offering_price;
             if($freezeMoney > 0){
                 // work_id
@@ -227,7 +227,7 @@ class PerformanceLogic extends BaseLogic
             //工程师可提现金额,汇总了加单金额
             $settlement_amount += (float)$work->add_work_amount;
             //工程师可提现金额,汇总 配件总金额
-            $offering_price = ServiceWorkSpare::where("service_work_id", $work->id)->where('status', 1)->sum('offering_price')??0;
+            $offering_price = ServiceWorkSpare::where("service_work_id", $work->id)->where('status', 1)->sum(Db::raw("spare_number * offering_price"))??0;
             $freezeMoney = $work->spare_total - $offering_price;
             if($freezeMoney > 0){
                 // work_id

+ 46 - 0
app/common/model/master_worker/EngineerSettlementPermanently.php

@@ -0,0 +1,46 @@
+<?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_worker;
+
+
+use app\common\model\BaseModel;
+
+
+
+/**
+ * EngineerSettlementPermanently模型
+ * Class EngineerSettlementPermanently
+ * @package app\common\model
+ */
+class EngineerSettlementPermanently extends BaseModel
+{
+
+    protected $name = 'engineer_settlement_permanently';
+
+    public function bankAccount()
+    {
+        return $this->hasOne(BankAccount::class, 'worker_id', 'master_worker_id');
+    }
+    public function workerInfo()
+    {
+        return $this->hasOne(MasterWorkerInfo::class, 'worker_id', 'master_worker_id');
+    }
+
+    public function salaryItemPermanently()
+    {
+        return $this->hasMany(SalaryItemPermanently::class, 'permanently_settlement_id', 'id');
+    }
+
+}

+ 298 - 0
app/common/model/master_worker/SalaryItemPermanently.php

@@ -0,0 +1,298 @@
+<?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_worker;
+
+
+use app\common\model\BaseModel;
+use app\common\model\works\ReturnWork;
+use app\common\model\works\ServiceWork;
+use think\facade\Log;
+
+
+/**
+ * SalaryItemPermanently模型
+ * Class SalaryItemPermanently
+ * @package app\common\model
+ */
+class SalaryItemPermanently extends BaseModel
+{
+    
+    protected $name = 'salary_item_permanently';
+
+    // 接单服务费
+    public function salary_item_1($permanently_settlement_id,$master_worker_id,$params,$extra = [])
+    {
+        try {
+            //$params['start_time'] $params['end_time']
+            $promotion_level = MasterWorker::where('id',$master_worker_id)->value('promotion_level');
+            $ratio = 0.00;
+            switch ($promotion_level){
+                case 1:
+                    $ratio = 0.65;
+                    break;
+                case 2:
+                    $ratio = 0.63;
+                    break;
+                case 3:
+                    $ratio = 0.55;
+                    break;
+                case 4:
+                    $ratio = 0.57;
+                    break;
+                case 5:
+                    $ratio = 0.59;
+                    break;
+                case 6:
+                    $ratio = 0.61;
+                    break;
+                case 7:
+                    $ratio = 0.5;
+                    break;
+            }
+            //$ratio
+            // 查询时间范围内所有已经完单的工单
+            $order_list = ServiceWork::where('master_worker_id',$master_worker_id)->
+            where('finished_time','between',[$params['start_time'],$params['end_time']])->
+            where('service_status','=',3)->where('work_pay_status','=',2)->
+            select(['id','work_sn','work_amount','spare_total','master_worker_id','finished_time','service_status','work_pay_status'])->toArray();
+
+            $amount = 0.00;
+            foreach ($order_list as $item) {
+                $amount += (float)bcsub($item['work_amount'] ,$item['spare_total']);//(float)bcmul(, $ratio,2);
+            }
+            $term_amount = (float)bcmul($amount, $ratio,2);
+
+            $itemData = [
+                'permanently_settlement_id' => $permanently_settlement_id,
+                'master_worker_id' => $master_worker_id,
+                'term' => 1,
+                'term_amount' => $term_amount,
+                'remark' => $params['item_name'].':  金额--'.$term_amount.'比例:--'.$ratio,
+                'extra' => json_encode([
+                    'step_days'=>$params['step_days'],'item_name'=>$params['item_name'],
+                    'start_time'=>$params['start_time'],'end_time'=>$params['end_time'],'promotion_level'=>$promotion_level,'ratio'=>$ratio,
+                    'amount'=>$amount,'count_order'=>count($order_list),'order_ids'=> array_column($order_list,'id')
+                ]),
+            ];
+            self::salaryCreateUpdate($itemData);
+            return true;
+        } catch (\Exception $e) {
+            Log::info('permanently_settlement_id:'.$permanently_settlement_id.':'.$e->getFile().':'.$e->getLine().':'.$e->getMessage());
+            return false;
+        }
+    }
+    // 加单奖励
+    public function salary_item_2($permanently_settlement_id,$master_worker_id,$params,$extra = [])
+    {
+        try {
+            // work_type = 2
+            $ratio = 0.1;
+
+            // 查询时间范围内所有已经完单的工单
+            $order_list = ServiceWork::where('master_worker_id',$master_worker_id)->
+            where('finished_time','between',[$params['start_time'],$params['end_time']])->
+            where('service_status','=',3)->where('work_pay_status','=',2)->where('work_type','=',2)->
+            select(['id','work_sn','work_amount','spare_total','master_worker_id','finished_time','service_status','work_pay_status'])->toArray();
+
+            $amount = 0.00;
+            foreach ($order_list as $item) {
+                $amount += (float)bcsub($item['work_amount'] ,$item['spare_total']);//(float)bcmul(, $ratio,2);
+            }
+            $term_amount = (float)bcmul($amount, $ratio,2);
+
+            $itemData = [
+                'permanently_settlement_id' => $permanently_settlement_id,
+                'master_worker_id' => $master_worker_id,
+                'term' => 2,
+                'term_amount' => $term_amount,
+                'remark' => $params['item_name'].':  金额--'.$term_amount.'比例:--'.$ratio,
+                'extra' => json_encode([
+                    'step_days'=>$params['step_days'],'item_name'=>$params['item_name'],
+                    'start_time'=>$params['start_time'],'end_time'=>$params['end_time'],'ratio'=>$ratio,
+                    'amount'=>$amount,'count_order'=>count($order_list),'order_ids'=> array_column($order_list,'id')
+                ]),
+            ];
+            self::salaryCreateUpdate($itemData);
+            return true;
+        } catch (\Exception $e) {
+            Log::info('permanently_settlement_id:'.$permanently_settlement_id.':'.$e->getFile().':'.$e->getLine().':'.$e->getMessage());
+            return false;
+        }
+    }
+    // 月度TOP3
+    public function salary_item_3($permanently_settlement_id,$master_worker_id,$params,$extra = [])
+    {
+        try {
+            $term_amount = 0;
+            $ranking = 3;
+
+            // 查询时间范围内所有已经完单的工单工程师排名 - 可以为当月月度
+            $order_list = ServiceWork::
+                where('finished_time','between',[$params['start_time'],$params['end_time']])->
+                where('service_status','=',3)->where('work_pay_status','=',2)->
+                field('master_worker_id,sum(work_amount) as work_amounts')->
+                group('master_worker_id')->
+                order('work_amounts desc')->
+                limit(3)->
+                select()->toArray();
+            $master_worker_ids = array_column($order_list,'master_worker_id');
+            if(in_array($master_worker_id,$master_worker_ids)){
+                $term_amount = 500;
+            }
+
+            $itemData = [
+                'permanently_settlement_id' => $permanently_settlement_id,
+                'master_worker_id' => $master_worker_id,
+                'term' => 3,
+                'term_amount' => $term_amount,
+                'remark' => $params['item_name'].':  金额--'.$term_amount.'排名:--'.$ranking,
+                'extra' => json_encode([
+                    'step_days'=>$params['step_days'],'item_name'=>$params['item_name'],
+                    'start_time'=>$params['start_time'],'end_time'=>$params['end_time']
+                ]),
+            ];
+            self::salaryCreateUpdate($itemData);
+            return true;
+        } catch (\Exception $e) {
+            Log::info('permanently_settlement_id:'.$permanently_settlement_id.':'.$e->getFile().':'.$e->getLine().':'.$e->getMessage());
+            return false;
+        }
+    }
+    // ≥4.8分且≥80单
+    public function salary_item_4($permanently_settlement_id,$master_worker_id,$params,$extra = [])
+    {
+        try {
+            $comprehensive_score = MasterWorkerScore::where('worker_id',$master_worker_id)->value('comprehensive_score');
+            // 查询时间范围内所有已经完单的工单
+            $order_count = ServiceWork::where('master_worker_id',$master_worker_id)->
+            where('finished_time','between',[$params['start_time'],$params['end_time']])->
+            where('service_status','=',3)->where('work_pay_status','=',2)->count();
+            $term_amount  = 0;
+            if( 4.8 <= (float)$comprehensive_score && 80 <= $order_count){
+                $term_amount = 500;
+            }
+
+            $itemData = [
+                'permanently_settlement_id' => $permanently_settlement_id,
+                'master_worker_id' => $master_worker_id,
+                'term' => 4,
+                'term_amount' => $term_amount,
+                'remark' => $params['item_name'].':  金额--'.$term_amount.'评分:--'.$comprehensive_score.'总单量:--'.$order_count,
+                'extra' => json_encode([
+                    'step_days'=>$params['step_days'],'item_name'=>$params['item_name'],
+                    'start_time'=>$params['start_time'],'end_time'=>$params['end_time'],'comprehensive_score'=>$comprehensive_score,'order_count'=>$order_count,
+                    'amount'=>$term_amount
+                ]),
+            ];
+            self::salaryCreateUpdate($itemData);
+            return true;
+        } catch (\Exception $e) {
+            Log::info('permanently_settlement_id:'.$permanently_settlement_id.':'.$e->getFile().':'.$e->getLine().':'.$e->getMessage());
+            return false;
+        }
+    }
+    // 工程师晋升
+    public function salary_item_5($permanently_settlement_id,$master_worker_id,$params,$extra = [])
+    {
+        try {
+            $title_promotion = MasterWorker::where('id',$master_worker_id)->value('title_promotion');
+            $amount = 0.00;
+            switch ($title_promotion){
+                case 2:
+                    $amount = 1000;
+                    break;
+                case 3:
+                    $amount = 1500;
+                    break;
+            }
+
+            $itemData = [
+                'permanently_settlement_id' => $permanently_settlement_id,
+                'master_worker_id' => $master_worker_id,
+                'term' => 5,
+                'term_amount' => $amount,
+                'remark' => $params['item_name'].':  金额--'.$amount.'称号:--'.$title_promotion,
+                'extra' => json_encode([
+                    'step_days'=>$params['step_days'],'item_name'=>$params['item_name'],
+                    'title_promotion'=>$title_promotion,
+                    'amount'=>$amount
+                ]),
+            ];
+            self::salaryCreateUpdate($itemData);
+            return true;
+        } catch (\Exception $e) {
+            Log::info('permanently_settlement_id:'.$permanently_settlement_id.':'.$e->getFile().':'.$e->getLine().':'.$e->getMessage());
+            return false;
+        }
+    }
+    // 投诉订单
+    public function salary_item_6($permanently_settlement_id,$master_worker_id,$params,$extra = [])
+    {
+        try {
+            // 查询时间范围内所有投诉的工单
+            $order_count = ReturnWork::where('master_worker_id',$master_worker_id)->
+                    where('finished_time','between',[$params['start_time'],$params['end_time']])->
+                    where('return_work_status','=',4)->count();
+            $amount = 50.00;
+            $term_amount = -(float)bcmul($order_count, $amount,2);
+
+            $itemData = [
+                'permanently_settlement_id' => $permanently_settlement_id,
+                'master_worker_id' => $master_worker_id,
+                'term' => 6,
+                'term_amount' => $term_amount,
+                'remark' => $params['item_name'].':  扣减金额--'.$term_amount.'投诉单量:--'.$order_count,// .'xx:--'.$ranking
+                'extra' => json_encode([
+                    'step_days'=>$params['step_days'],'item_name'=>$params['item_name'],
+                    'start_time'=>$params['start_time'],'end_time'=>$params['end_time'],
+                    'amount'=>$amount,'order_count'=>$order_count
+                ]),
+            ];
+            self::salaryCreateUpdate($itemData);
+            return true;
+        } catch (\Exception $e) {
+            Log::info('permanently_settlement_id:'.$permanently_settlement_id.':'.$e->getFile().':'.$e->getLine().':'.$e->getMessage());
+            return false;
+        }
+    }
+
+
+
+
+
+
+
+
+
+
+    public function salaryCreateUpdate($itemData = [])
+    {
+        $wh = ['permanently_settlement_id' => $itemData['permanently_settlement_id'], 'master_worker_id' => $itemData['master_worker_id'], 'term' => $itemData['term']];
+        if(self::where($wh)->isEmpty()){
+            self::create($itemData);
+        }else{
+            self::where($wh)->update($itemData);
+        }
+        return true;
+    }
+
+
+
+
+
+
+
+
+}