MasterWorkerTeamLogic.php 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. <?php
  2. namespace app\workerapi\logic;
  3. use app\adminapi\logic\master_worker_register\MasterWorkerRegisterLogic;
  4. use app\adminapi\logic\training\TrainingBlockConfigLogic;
  5. use app\common\enum\worker\WorkerAccountLogEnum;
  6. use app\common\enum\YesNoEnum;
  7. use app\common\logic\BaseLogic;
  8. use app\common\model\bank_account\BankAccount;
  9. use app\common\model\goods_category\GoodsCategory;
  10. use app\common\model\master_worker\MasterWorker;
  11. use app\common\model\master_worker\MasterWorkerAccountLog;
  12. use app\common\model\master_worker\MasterWorkerAgree;
  13. use app\common\model\master_worker\MasterWorkerInfo;
  14. use app\common\model\master_worker\MasterWorkerTeam;
  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. use think\facade\Log;
  23. /**
  24. * @author 林海涛
  25. * @date 2024/7/10 下午1:45
  26. */
  27. class MasterWorkerTeamLogic extends BaseLogic
  28. {
  29. public static function getDetail(int $masterWorkerId)
  30. {
  31. try {
  32. $team = MasterWorkerTeam::where('master_worker_id',$masterWorkerId)->findOrEmpty();
  33. if ($team->isEmpty()) {
  34. throw new \Exception('团队不存在');
  35. }
  36. $team = $team->toArray();
  37. $team['count_num'] = MasterWorker::where('team_id',$team['id'])->count();
  38. return $team;
  39. } catch (\Exception $e) {
  40. self::setError($e->getMessage());
  41. return [];
  42. }
  43. }
  44. public static function addTeamMember(array $params,int $masterWorkerId)
  45. {
  46. try {
  47. $team = MasterWorkerTeam::where('master_worker_id',$masterWorkerId)->findOrEmpty();
  48. if ($team->isEmpty()) {
  49. throw new \Exception('团队不存在');
  50. }
  51. $masterWorker = \app\common\model\master_worker\MasterWorker::where('mobile',$params['mobile'])->findOrEmpty();
  52. if (!$masterWorker->isEmpty()) {
  53. throw new \Exception('该手机号已占用');
  54. }
  55. if(isset($params['category_ids']) && !empty($params['category_ids']) && is_array($params['category_ids'])){
  56. $params['category_ids'] = implode(',',$params['category_ids']);
  57. }
  58. // 新增工程师 - 所属团队、租户
  59. $mwId = MasterWorkerRegisterLogic::createMasterWorker([
  60. 'mobile' => $params['mobile'],
  61. 'real_name' => $params['real_name'],
  62. 'lon' => isset($params['lon'])?$params['lon']:0,
  63. 'lat' => isset($params['lat'])?$params['lat']:0,
  64. 'tenant_id'=>$team->tenant_id,
  65. 'category_ids' => $params['category_ids']??'',
  66. 'identity_source' => 1,
  67. ]);
  68. MasterWorker::where('id',$mwId)->update(['team_id'=>$team->id,'team_role'=>2]);
  69. $block_setting = TrainingBlockConfigLogic::getBlockConfig(1);
  70. \app\adminapi\logic\training\TrainingWorkerTaskLogic::add([
  71. 'master_worker_id' => $masterWorker->id,
  72. 'shop_goods_id' => $block_setting['shop_goods_id']??0,
  73. 'training_task_id' => $block_setting['training_task_id']??0,
  74. 'task_list' => $block_setting['task_list']??0,
  75. ]);
  76. return true;
  77. } catch (\Exception $e) {
  78. self::setError($e->getMessage());
  79. return false;
  80. }
  81. }
  82. public static function upTeamMember(array $params,int $masterWorkerId,int $userId = 0)
  83. {
  84. try {
  85. $team = MasterWorkerTeam::where('master_worker_id',$userId)->findOrEmpty();
  86. if ($team->isEmpty()) {
  87. throw new \Exception('团队不存在');
  88. }
  89. // $masterWorkerId 当前要修改的工程师ID
  90. // 若非自己的其他工程师存在则不允许修改
  91. $masterWorker = MasterWorker::where('id','<>',$masterWorkerId)->where('mobile',$params['mobile'])->findOrEmpty();
  92. if (!$masterWorker->isEmpty()) {
  93. throw new \Exception('该手机号已占用');
  94. }
  95. if(isset($params['category_ids']) && !empty($params['category_ids']) && is_array($params['category_ids'])){
  96. $params['category_ids'] = implode(',',$params['category_ids']);
  97. }
  98. // 包括队长自己 ->where('team_role',2)
  99. MasterWorker::where('team_id',$team->id)->where('id',$masterWorkerId)->update(['real_name'=>$params['real_name'],'account'=>$params['mobile'],'mobile'=>$params['mobile'],'category_ids'=>$params['category_ids']??'']);
  100. return true;
  101. } catch (\Exception $e) {
  102. self::setError($e->getMessage());
  103. return false;
  104. }
  105. }
  106. public static function getMemberList(int $masterWorkerId)
  107. {
  108. try {
  109. $team = MasterWorkerTeam::where('master_worker_id',$masterWorkerId)->findOrEmpty();
  110. if ($team->isEmpty()) {
  111. throw new \Exception('团队不存在');
  112. }
  113. return MasterWorker::where('team_id',$team['id'])->field(['id','nickname','avatar','mobile','real_name','team_role'])->select()->toArray();
  114. } catch (\Exception $e) {
  115. self::setError($e->getMessage());
  116. return [];
  117. }
  118. }
  119. /**
  120. * 分配给团队成员
  121. * @param int $teamId
  122. * @param int $masterWorkerId
  123. * @return array
  124. */
  125. public static function allocation($params,$userInfo){
  126. Db::startTrans();
  127. try {
  128. $work = ServiceWork::findOrEmpty($params['work_id']);
  129. if($work->isEmpty()){
  130. throw new Exception('工单不存在');
  131. }
  132. if(!in_array($work->work_status, [1,2,3,4,5])){
  133. throw new \Exception('工单已被领取,不可分配');
  134. }
  135. if($work->master_worker_id == $params['master_worker_id']){
  136. throw new \Exception('分配的工程师相同');
  137. }
  138. $worker = MasterWorker::where(['id'=>$params['master_worker_id'],'team_id' =>$userInfo['team_id'],'is_disable' =>0])->findOrEmpty();
  139. if($worker->isEmpty()){
  140. throw new \Exception('成员工程师不存在或被禁用');
  141. }
  142. if($worker->master_worker_id){
  143. MasterWorker::setWorktotal('dec',$worker->master_worker_id);
  144. }
  145. $work->master_worker_id = $params['master_worker_id'];
  146. $work->work_status = 1;
  147. $work->dispatch_time = time();
  148. MasterWorker::setWorktotal('inc',$params['master_worker_id']);
  149. $work->save();
  150. $work_log = [
  151. 'work_id'=>$work->id,
  152. 'master_worker_id'=>$work->master_worker_id,
  153. 'type' => 0,
  154. 'opera_log'=>'团队负责人['.$userInfo['user_id'].']'.$userInfo['real_name'].'于'.date('Y-m-d H:i:s',time()).'分配了工程师成员'.'编号['.$worker->worker_number.']'.$worker->real_name
  155. ];
  156. ServiceWorkerAllocateWorkerLogic::add($work_log);
  157. Db::commit();
  158. return true;
  159. }catch(\Exception $e){
  160. Db::rollback();
  161. self::setError($e->getMessage());
  162. return false;
  163. }
  164. }
  165. /**
  166. * 团队成员工单统计
  167. * @param int $teamId
  168. * @param int $masterWorkerId
  169. * @return array
  170. */
  171. public static function MemberWorkStatistics($userInfo){
  172. $lists = ServiceWork::where('tenant_id',
  173. (MasterWorkerTeam::where('id',$userInfo['team_id'])->value('tenant_id')??-1)
  174. )->group('work_status')
  175. ->field('work_status, COUNT(id) as count_num')
  176. ->order('work_status asc')
  177. ->select()->toArray();
  178. $lists = array_column($lists,'count_num','work_status');
  179. $work_status_txt = array_slice(ServiceWork::WORK_STATUS_TXT, 1, 8,true);
  180. $res = [];
  181. foreach ($work_status_txt as $work_status => $name) {
  182. $res[] = [
  183. 'is_allocation' => in_array($work_status, [1,2,3,4,5]) ? 1 : 0,
  184. 'work_status' => $work_status,
  185. 'work_status_text' => $name,
  186. 'count_num' => $lists[$work_status]??0,
  187. ];
  188. }
  189. return $res;
  190. }
  191. /**
  192. * 团队工单统计- 当天日期的前x天范围
  193. * @param int $teamId
  194. * @param int $masterWorkerId
  195. * @return array
  196. */
  197. public static function TeamOrderStatistics($userInfo,$day_num = 7,$month = ''){
  198. if(!empty($day_num)){
  199. $start_time = strtotime(date('Y-m-d', time() - $day_num * 86400));
  200. $end_time = time();
  201. }
  202. if(!empty($month)){
  203. $start_time = strtotime($month.'-01');
  204. $end_time = $start_time + 31 * 86400;
  205. }
  206. $lists = ServiceWork::where('tenant_id',
  207. (MasterWorkerTeam::where('id',$userInfo['team_id'])->value('tenant_id')??-1)
  208. )->group('DATE(FROM_UNIXTIME(create_time))')
  209. ->field('DATE(FROM_UNIXTIME(create_time)) as days, COUNT(id) as count_num')
  210. ->where('create_time','between',[$start_time,$end_time])
  211. ->order('create_time desc')
  212. ->select()->toArray();
  213. return array_column($lists,'count_num','days');
  214. }
  215. }