|
|
@@ -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;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+}
|