TrainingLogic.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <?php
  2. namespace app\workerapi\logic;
  3. use app\adminapi\logic\master_worker_register\MasterWorkerRegisterLogic;
  4. use app\common\enum\worker\WorkerAccountLogEnum;
  5. use app\common\enum\YesNoEnum;
  6. use app\common\logic\BaseLogic;
  7. use app\common\model\bank_account\BankAccount;
  8. use app\common\model\master_worker\MasterWorker;
  9. use app\common\model\master_worker\MasterWorkerAccountLog;
  10. use app\common\model\master_worker\MasterWorkerAgree;
  11. use app\common\model\master_worker\MasterWorkerInfo;
  12. use app\common\model\master_worker\MasterWorkerTeam;
  13. use app\common\model\training\TrainingCourse;
  14. use app\common\model\training\TrainingWorkerTask;
  15. use app\common\model\works\ServiceWork;
  16. use app\common\service\FileService;
  17. use app\workerapi\lists\MasterWorkerLists;
  18. use app\workerapi\lists\ServiceWorkLists;
  19. use think\Exception;
  20. use think\facade\Config;
  21. use think\facade\Db;
  22. class TrainingLogic extends BaseLogic
  23. {
  24. public static function getDetail(int $masterWorkerId)
  25. {
  26. try {
  27. //shop_goods_id INT ( 10 ) DEFAULT 0 NOT NULL COMMENT '商品id(套餐)',
  28. //shop_orders_id int(10) NOT NULL DEFAULT '0' COMMENT '购买单号id',
  29. // 检查是否已经购买套餐
  30. $shop_orders = Db::name('shop_orders')->where('worker_id',$masterWorkerId)->where('shop_goods_id',1)->find();
  31. // `worker_id` int(11) NOT NULL COMMENT '师傅ID', `pay_status` tinyint(1) NOT NULL COMMENT '支付状态:0-待支付 1-已支付 2-已取消', `refund_status` tinyint(1) DEFAULT '0' COMMENT '退款状态 0-
  32. $task_info = ['id'=>0];
  33. $task = TrainingWorkerTask::where('master_worker_id',$masterWorkerId)->findOrEmpty();
  34. if (!$task->isEmpty()) {
  35. $task_info = $task->toArray();
  36. // 0 不展示按钮 1 去学习 2 已学完
  37. $task_info['learning_status'] = $task_info['shop_orders_id']>0?($task_info['training_status'] <2?1:2):0;
  38. $task_info['bank_status'] = BankAccount::where('worker_id',$masterWorkerId)->where('audit_state',1)->value('id')?1:0;
  39. $masterWorker = MasterWorker::where('id',$masterWorkerId)->find();
  40. $task_info['category_status'] = empty($masterWorker['category_ids'])?0:1;
  41. $task_info['service_status'] = (empty($masterWorker['lon']) || empty($masterWorker['lat']))?0:1;
  42. }
  43. $task_info['free_videos'] = TrainingCourse::where('course_lock',1)->select()->toArray();
  44. return $task_info;
  45. } catch (\Exception $e) {
  46. self::setError($e->getMessage());
  47. return [];
  48. }
  49. }
  50. public static function addTeamMember(array $params,int $masterWorkerId)
  51. {
  52. try {
  53. $team = MasterWorkerTeam::where('master_worker_id',$masterWorkerId)->findOrEmpty();
  54. if ($team->isEmpty()) {
  55. throw new \Exception('团队不存在');
  56. }
  57. $masterWorker = \app\common\model\master_worker\MasterWorker::where('mobile',$params['mobile'])->findOrEmpty();
  58. if (!$masterWorker->isEmpty()) {
  59. throw new \Exception('该手机号已占用');
  60. }
  61. // 新增工程师
  62. $mwId = MasterWorkerRegisterLogic::createMasterWorker([
  63. 'mobile' => $params['mobile'],
  64. 'lon' => isset($params['lon'])?$params['lon']:0,
  65. 'lat' => isset($params['lat'])?$params['lat']:0,
  66. ]);
  67. MasterWorker::where('id',$mwId)->update(['team_id'=>$team->id,'team_role'=>2]);
  68. return true;
  69. } catch (\Exception $e) {
  70. self::setError($e->getMessage());
  71. return false;
  72. }
  73. }
  74. public static function getMemberList(int $masterWorkerId)
  75. {
  76. try {
  77. $team = MasterWorkerTeam::where('master_worker_id',$masterWorkerId)->findOrEmpty();
  78. if ($team->isEmpty()) {
  79. throw new \Exception('团队不存在');
  80. }
  81. return MasterWorker::where('team_id',$team['id'])->where('team_role',2)->field(['id','nickname','avatar','mobile','real_name','team_role'])->select()->toArray();
  82. } catch (\Exception $e) {
  83. self::setError($e->getMessage());
  84. return [];
  85. }
  86. }
  87. /**
  88. * 分配给团队成员
  89. * @param int $teamId
  90. * @param int $masterWorkerId
  91. * @return array
  92. */
  93. public static function allocation($params,$userInfo){
  94. Db::startTrans();
  95. try {
  96. $work = ServiceWork::findOrEmpty($params['work_id']);
  97. if($work->isEmpty()){
  98. throw new Exception('工单不存在');
  99. }
  100. if($work->work_status != 1 ){
  101. throw new \Exception('工单已被领取,不可分配');
  102. }
  103. if($work->master_worker_id == $params['master_worker_id']){
  104. throw new \Exception('分配的工程师相同');
  105. }
  106. $worker = MasterWorker::where(['id'=>$params['master_worker_id'],'team_id' =>$userInfo['team_id'],'team_role' =>2,'is_disable' =>0])->findOrEmpty();
  107. if($worker->isEmpty()){
  108. throw new \Exception('成员工程师不存在或被禁用');
  109. }
  110. if($worker->master_worker_id){
  111. MasterWorker::setWorktotal('dec',$worker->master_worker_id);
  112. }
  113. $work->master_worker_id = $params['master_worker_id'];
  114. $work->work_status = 1;
  115. $work->dispatch_time = time();
  116. MasterWorker::setWorktotal('inc',$params['master_worker_id']);
  117. $work->save();
  118. $work_log = [
  119. 'work_id'=>$work->id,
  120. 'master_worker_id'=>$work->master_worker_id,
  121. 'opera_log'=>'团队负责人['.$userInfo['user_id'].']'.$userInfo['real_name'].'于'.date('Y-m-d H:i:s',time()).'分配了工程师成员'.'编号['.$worker->worker_number.']'.$worker->real_name
  122. ];
  123. ServiceWorkerAllocateWorkerLogic::add($work_log);
  124. Db::commit();
  125. return true;
  126. }catch(\Exception $e){
  127. Db::rollback();
  128. self::setError($e->getMessage());
  129. return false;
  130. }
  131. }
  132. /**
  133. * 团队成员工单统计
  134. * @param int $teamId
  135. * @param int $masterWorkerId
  136. * @return array
  137. */
  138. public static function MemberWorkStatistics($userInfo){
  139. $lists = ServiceWork::whereIn('master_worker_id',
  140. MasterWorker::where('team_id', $userInfo['team_id'])->where('team_role', 2)->column('id')
  141. )->group('work_status')
  142. ->field('work_status, COUNT(id) as count_num')
  143. ->order('work_status asc')
  144. ->select()->toArray();
  145. $lists = array_column($lists,'count_num','work_status');
  146. $work_status_txt = array_slice(ServiceWork::WORK_STATUS_TXT, 1, 8,true);
  147. $res = [];
  148. foreach ($work_status_txt as $work_status => $name) {
  149. $res[] = [
  150. 'work_status' => $work_status,
  151. 'work_status_text' => $name,
  152. 'count_num' => $lists[$work_status]??0,
  153. ];
  154. }
  155. return $res;
  156. }
  157. }