MasterWorkerTeamLogic.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  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\goods_category\GoodsCategory;
  9. use app\common\model\master_worker\MasterWorker;
  10. use app\common\model\master_worker\MasterWorkerAccountLog;
  11. use app\common\model\master_worker\MasterWorkerAgree;
  12. use app\common\model\master_worker\MasterWorkerInfo;
  13. use app\common\model\master_worker\MasterWorkerTeam;
  14. use app\common\model\works\ServiceWork;
  15. use app\common\service\FileService;
  16. use app\workerapi\lists\MasterWorkerLists;
  17. use app\workerapi\lists\ServiceWorkLists;
  18. use think\Exception;
  19. use think\facade\Config;
  20. use think\facade\Db;
  21. /**
  22. * @author 林海涛
  23. * @date 2024/7/10 下午1:45
  24. */
  25. class MasterWorkerTeamLogic extends BaseLogic
  26. {
  27. public static function getDetail(int $masterWorkerId)
  28. {
  29. try {
  30. $team = MasterWorkerTeam::where('master_worker_id',$masterWorkerId)->findOrEmpty();
  31. if ($team->isEmpty()) {
  32. throw new \Exception('团队不存在');
  33. }
  34. $team = $team->toArray();
  35. $team['count_num'] = MasterWorker::where('team_id',$team['id'])->where('team_role',2)->count();
  36. // 团队负责人分类 ID 59,54,55,56,57,58
  37. $category_ids = MasterWorker::where('id',$team['master_worker_id'])->value('category_ids');
  38. if(!empty($category_ids)){
  39. $category_ids = array_map('intval', explode(',',$category_ids));
  40. $team['tree_data'] = getSuperiorCategoryTree($category_ids);
  41. }else{
  42. $team['tree_data'] = [];
  43. }
  44. return $team;
  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. if(isset($params['category_ids']) && !empty($params['category_ids']) && is_array($params['category_ids'])){
  62. $params['category_ids'] = implode(',',$params['category_ids']);
  63. }
  64. // 新增工程师 - 所属团队、租户
  65. $mwId = MasterWorkerRegisterLogic::createMasterWorker([
  66. 'mobile' => $params['mobile'],
  67. 'real_name' => $params['real_name'],
  68. 'lon' => isset($params['lon'])?$params['lon']:0,
  69. 'lat' => isset($params['lat'])?$params['lat']:0,
  70. 'tenant_id'=>$team->tenant_id,
  71. 'category_ids' => $params['category_ids']??'',
  72. ]);
  73. MasterWorker::where('id',$mwId)->update(['team_id'=>$team->id,'team_role'=>2]);
  74. return true;
  75. } catch (\Exception $e) {
  76. self::setError($e->getMessage());
  77. return false;
  78. }
  79. }
  80. public static function getMemberList(int $masterWorkerId)
  81. {
  82. try {
  83. $team = MasterWorkerTeam::where('master_worker_id',$masterWorkerId)->findOrEmpty();
  84. if ($team->isEmpty()) {
  85. throw new \Exception('团队不存在');
  86. }
  87. return MasterWorker::where('team_id',$team['id'])->where('team_role',2)->field(['id','nickname','avatar','mobile','real_name','team_role'])->select()->toArray();
  88. } catch (\Exception $e) {
  89. self::setError($e->getMessage());
  90. return [];
  91. }
  92. }
  93. /**
  94. * 分配给团队成员
  95. * @param int $teamId
  96. * @param int $masterWorkerId
  97. * @return array
  98. */
  99. public static function allocation($params,$userInfo){
  100. Db::startTrans();
  101. try {
  102. $work = ServiceWork::findOrEmpty($params['work_id']);
  103. if($work->isEmpty()){
  104. throw new Exception('工单不存在');
  105. }
  106. if($work->work_status != 1 ){
  107. throw new \Exception('工单已被领取,不可分配');
  108. }
  109. if($work->master_worker_id == $params['master_worker_id']){
  110. throw new \Exception('分配的工程师相同');
  111. }
  112. $worker = MasterWorker::where(['id'=>$params['master_worker_id'],'team_id' =>$userInfo['team_id'],'team_role' =>2,'is_disable' =>0])->findOrEmpty();
  113. if($worker->isEmpty()){
  114. throw new \Exception('成员工程师不存在或被禁用');
  115. }
  116. if($worker->master_worker_id){
  117. MasterWorker::setWorktotal('dec',$worker->master_worker_id);
  118. }
  119. $work->master_worker_id = $params['master_worker_id'];
  120. $work->work_status = 1;
  121. $work->dispatch_time = time();
  122. MasterWorker::setWorktotal('inc',$params['master_worker_id']);
  123. $work->save();
  124. $work_log = [
  125. 'work_id'=>$work->id,
  126. 'master_worker_id'=>$work->master_worker_id,
  127. 'opera_log'=>'团队负责人['.$userInfo['user_id'].']'.$userInfo['real_name'].'于'.date('Y-m-d H:i:s',time()).'分配了工程师成员'.'编号['.$worker->worker_number.']'.$worker->real_name
  128. ];
  129. ServiceWorkerAllocateWorkerLogic::add($work_log);
  130. Db::commit();
  131. return true;
  132. }catch(\Exception $e){
  133. Db::rollback();
  134. self::setError($e->getMessage());
  135. return false;
  136. }
  137. }
  138. /**
  139. * 团队成员工单统计
  140. * @param int $teamId
  141. * @param int $masterWorkerId
  142. * @return array
  143. */
  144. public static function MemberWorkStatistics($userInfo){
  145. $lists = ServiceWork::whereIn('master_worker_id',
  146. MasterWorker::where('team_id', $userInfo['team_id'])->where('team_role', 2)->column('id')
  147. )->group('work_status')
  148. ->field('work_status, COUNT(id) as count_num')
  149. ->order('work_status asc')
  150. ->select()->toArray();
  151. $lists = array_column($lists,'count_num','work_status');
  152. $work_status_txt = array_slice(ServiceWork::WORK_STATUS_TXT, 1, 8,true);
  153. $res = [];
  154. foreach ($work_status_txt as $work_status => $name) {
  155. $res[] = [
  156. 'work_status' => $work_status,
  157. 'work_status_text' => $name,
  158. 'count_num' => $lists[$work_status]??0,
  159. ];
  160. }
  161. return $res;
  162. }
  163. /**
  164. * 团队工单统计- 当天日期的前x天范围
  165. * @param int $teamId
  166. * @param int $masterWorkerId
  167. * @return array
  168. */
  169. public static function TeamOrderStatistics($userInfo,$day_num = 7) {
  170. $start_time = strtotime(date('Y-m-d', time() - $day_num * 86400));
  171. $end_time = time();
  172. $lists = ServiceWork::whereIn('master_worker_id',
  173. MasterWorker::where('team_id', $userInfo['team_id'])->where('team_role', 2)->column('id')
  174. )->group('DATE(FROM_UNIXTIME(create_time))')
  175. ->field('DATE(FROM_UNIXTIME(create_time)) as days, COUNT(id) as count_num')
  176. ->where('create_time','between',[$start_time,$end_time])
  177. ->order('create_time desc')
  178. ->select()->toArray();
  179. return array_column($lists,'count_num','days');
  180. }
  181. }