GroupUser.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425
  1. <?php
  2. namespace app\api\controller;
  3. use app\api\service\auth\GroupMysqlAdapter;
  4. use app\api\service\auth\ApiAuthGroupService;
  5. use app\api\validate\User as UserValidate;
  6. use think\exception\ValidateException;
  7. use app\common\model\GroupUser as GroupUserModel;
  8. use app\common\model\User as UserModel;
  9. use app\common\model\WorkerOut as WorkerOutModel;
  10. use \think\facade\Filesystem;
  11. use app\admin\controller\user\GroupUser as AdminGroupUser;
  12. use app\api\controller\Worker;
  13. use app\common\model\ScanLog;
  14. class GroupUser extends Base
  15. {
  16. protected $noNeedLogin = ['login'];
  17. protected $today_worker_out_num=0;
  18. protected function _initialize()
  19. {
  20. parent::_initialize();
  21. }
  22. public function userinfo(GroupUserModel $userModel)
  23. {
  24. $user = $userModel->find($this->userinfo['id']);
  25. return $this->success('ok', $user);
  26. }
  27. //编辑用户
  28. public function edit(GroupUserModel $userModel)
  29. {
  30. $data = $this->request->post();
  31. try {
  32. validate(UserValidate::class)->scene('edit')->check($data);
  33. $user = $userModel->find($this->userinfo['id']);
  34. if (!$user) {
  35. return $this->error('用户不存在');
  36. }
  37. $user->save($data);
  38. return $this->success('ok');
  39. } catch (ValidateException $e) {
  40. return $this->error($e->getError());
  41. }
  42. }
  43. //修改密码
  44. public function password(GroupUserModel $userModel)
  45. {
  46. $data = $this->request->post();
  47. try {
  48. validate(UserValidate::class)->scene('password')->check($data);
  49. $user = $userModel->find($this->userinfo['id']);
  50. if (!$user) {
  51. return $this->error('用户不存在');
  52. }
  53. if ($user->password != md5(md5($data['oldpassword'] . $user->salt))) {
  54. return $this->error('旧密码错误');
  55. }
  56. $user->password = md5(md5($data['password'] . $user->salt));
  57. $user->save();
  58. return $this->success('ok');
  59. } catch (ValidateException $e) {
  60. return $this->error($e->getError());
  61. }
  62. }
  63. public function login(ApiAuthGroupService $authService, GroupUserModel $userModel)
  64. {
  65. $data = $this->request->post();
  66. try {
  67. validate(UserValidate::class)->scene('login')->check($data);
  68. $terminal = $this->request->post('terminal/d', 0);
  69. $user = $authService->login($data['username'], $data['password'], $terminal);
  70. } catch (ValidateException $e) {
  71. return $this->error($e->getError());
  72. } catch (\Exception $e) {
  73. return $this->error($e->getMessage());
  74. }
  75. return $this->success('ok', $user);
  76. }
  77. //退出登录
  78. public function logout()
  79. {
  80. GroupMysqlAdapter::logout($this->userinfo['id']);
  81. return $this->success('ok');
  82. }
  83. //获取全部人员
  84. public function getAllUser(GroupUserModel $userModel)
  85. {
  86. $list = $userModel->where('status', 'normal')->field('id,nickname,avatar')->select();
  87. return $this->success('ok', $list);
  88. }
  89. //组员列表
  90. public function group_list(GroupUserModel $userModel)
  91. {
  92. $list = $userModel->where('status', 'normal')->where('pid', $this->userinfo['id'])->select()->each(function ($item, $key) {
  93. $item['avatar'] = request()->domain() . '/' . $item['avatar'];
  94. return $item;
  95. });;
  96. return $this->success('ok', $list);
  97. }
  98. //添加组员
  99. public function add_group_user(GroupUserModel $groupUserModel, UserModel $userModel)
  100. {
  101. $file = request()->file('avatar');
  102. $param = $this->request->post();
  103. try {
  104. validate(UserValidate::class)->scene('add_group_user')->check($param);
  105. // $todayTime = strtotime('today');
  106. //判断手机号和身份证号是否注册今天是否添加到该团队
  107. $where_item_id_card = [];
  108. $where_item_id_card[] = ['pid', '=', $this->userinfo['id']];
  109. $where_item_id_card[] = ['id_card', '=', $param['id_card']];
  110. // $where_item_id_card[]=['createtime', '>=',$todayTime];
  111. $group_user_data = $groupUserModel->where($where_item_id_card)->find();
  112. if (!empty($group_user_data)) return $this->error('该身份证号已添加');
  113. $where_item_mobile = [];
  114. $where_item_mobile[] = ['pid', '=', $this->userinfo['id']];
  115. $where_item_mobile[] = ['mobile', '=', $param['mobile']];
  116. // $where_item_mobile[]=['createtime', '>=',$todayTime];
  117. $group_user_data = $groupUserModel->where($where_item_mobile)->find();
  118. if (!empty($group_user_data)) return $this->error('该手机号已添加');
  119. $user = $userModel->find($this->userinfo['id']);
  120. $pid = $user['id'];
  121. $time = time();
  122. $add_data = [
  123. 'pid' => $pid,
  124. 'nickname' => $param['nickname'],
  125. 'id_card' => $param['id_card'],
  126. 'avatar' => '',
  127. 'mobile' => $param['mobile'],
  128. 'sex' => $param['sex'],
  129. 'role' => '1',
  130. 'status' => 'normal',
  131. 'joinip' => request()->ip(),
  132. 'jointime' => $time
  133. ];
  134. if (!empty($file)) {
  135. // 文件夹
  136. $folder = strtotime('today');
  137. $fileName = time() . '_' . mt_rand(1000, 9999) . '.png';
  138. $avatar = $file->move('uploads/avatar/' . $folder, $fileName);
  139. //检查目标文件是否存在
  140. if (!empty($avatar)) {
  141. //有图片上传,进行添加用户
  142. $add_data['avatar'] = $avatar;
  143. $res = $groupUserModel->save($add_data);
  144. if ($res) return $this->success('添加成功');
  145. } else {
  146. return $this->error('头像上传失败');
  147. }
  148. } else {
  149. return $this->error('请上传头像');
  150. }
  151. } catch (ValidateException $e) {
  152. return $this->error($e->getError());
  153. }
  154. return $this->error('添加失败');
  155. }
  156. //修改组员
  157. public function edit_group_user(GroupUserModel $groupUserModel, UserModel $userModel)
  158. {
  159. $file = request()->file('avatar');
  160. $param = $this->request->post();
  161. try {
  162. validate(UserValidate::class)->scene('edit_group_user')->check($param);
  163. $user = $userModel->find($this->userinfo['id']);
  164. $edit_data = $groupUserModel->find($param['id']);
  165. if ($edit_data['pid'] != $this->userinfo['id']) return $this->error('无该用户');
  166. // $todayTime = strtotime('today');
  167. //判断手机号和身份证号是否注册今天是否添加到该团队
  168. $where_item_id_card = [];
  169. $where_item_id_card[] = ['id', '!=', $edit_data['id']];
  170. $where_item_id_card[] = ['pid', '=', $this->userinfo['id']];
  171. $where_item_id_card[] = ['id_card', '=', $param['id_card']];
  172. // $where_item_id_card[]=['createtime', '>=',$todayTime];
  173. $group_user_data = $groupUserModel->where($where_item_id_card)->find();
  174. if (!empty($group_user_data)) return $this->error('该身份证号已添加');
  175. $where_item_mobile = [];
  176. $where_item_mobile[] = ['id', '!=', $edit_data['id']];
  177. $where_item_mobile[] = ['pid', '=', $this->userinfo['id']];
  178. $where_item_mobile[] = ['mobile', '=', $param['mobile']];
  179. // $where_item_mobile[]=['createtime', '>=',$todayTime];
  180. $group_user_data = $groupUserModel->where($where_item_mobile)->find();
  181. if (!empty($group_user_data)) return $this->error('该手机号已添加');
  182. $pid = $user['id'];
  183. $time = time();
  184. $add_data = [
  185. 'pid' => $pid,
  186. 'nickname' => $param['nickname'],
  187. 'id_card' => $param['id_card'],
  188. 'mobile' => $param['mobile'],
  189. 'sex' => $param['sex'],
  190. 'role' => '1',
  191. 'status' => 'normal',
  192. 'joinip' => request()->ip(),
  193. 'updatetime' => $time
  194. ];
  195. if (!empty($file)) {
  196. // 文件夹
  197. $folder = strtotime('today');
  198. $fileName = time() . '_' . mt_rand(1000, 9999) . '.png';
  199. $avatar = $file->move('uploads/avatar/' . $folder, $fileName);
  200. //检查目标文件是否存在
  201. if (!empty($avatar)) {
  202. if (!empty($edit_data['avatar'])) {
  203. $avatar_file = root_path() . 'public' . DS . $edit_data['avatar'];
  204. if (file_exists($avatar_file)) {
  205. unlink($avatar_file);
  206. }
  207. }
  208. //有图片上传,进行添加用户
  209. $add_data['avatar'] = $avatar;
  210. $res = $edit_data->save($add_data);
  211. if ($res) return $this->success('修改成功');
  212. }
  213. } else {
  214. $res = $edit_data->save($add_data);
  215. if ($res) return $this->success('修改成功');
  216. }
  217. } catch (ValidateException $e) {
  218. return $this->error($e->getError());
  219. }
  220. return $this->error('修改失败');
  221. }
  222. //获取今日出工人员列表
  223. public function get_worker_out_list(GroupUserModel $groupUserModel, UserModel $userModel, WorkerOutModel $workerOutModel)
  224. {
  225. try {
  226. $workerOutModel=new WorkerOutModel();
  227. $worker=new Worker();
  228. $scanLog=new ScanLog();
  229. $labor_cost_money_avg=empty($worker->quantity_labor_cost_money($scanLog))?0:$worker->quantity_labor_cost_money($scanLog);
  230. $todayTime = strtotime('today');
  231. $pid=$this->userinfo['id'];
  232. $where=[];
  233. $where[] = ['pid', '=',$pid];
  234. $list = $groupUserModel->where($where)
  235. ->select()->each(function ($item, $key) {
  236. $state=$this->get_worker_out_state($item['id'],$this->userinfo['id']);
  237. $state=$state==0?false:true;
  238. if($state){
  239. $this->today_worker_out_num++;
  240. }
  241. $item['selected']=$state;
  242. $item['avatar']= $this->startsWithHttp($item['avatar'])?$item['avatar']:request()->domain().'/' . $item['avatar'];
  243. return $item;
  244. });
  245. $labor_cost_money_avg=round(bcdiv(strval($labor_cost_money_avg['labor_cost_money_sum']),strval($this->today_worker_out_num),2),2);
  246. foreach ($list as $item) {
  247. if($item['selected']){
  248. $item['balance']=$labor_cost_money_avg;
  249. }
  250. }
  251. return $this->success('出工人员列表',$list);
  252. } catch (ValidateException $e) {
  253. return $this->error($e->getError());
  254. }
  255. }
  256. //添加今日出工人员
  257. public function set_worker_out(GroupUserModel $groupUserModel, UserModel $userModel, WorkerOutModel $workerOutModel)
  258. {
  259. $param = $this->request->post();
  260. try {
  261. validate(UserValidate::class)->scene('set_worker_out')->check($param);
  262. $list = $this->comma_str_array($param['list']);
  263. if(empty($list)) return $this->error('请添加出工人员');;
  264. $add_worker=[];
  265. $pid=$this->userinfo['id'];
  266. $time=time();
  267. foreach ($list as $key => $value) {
  268. $state=$this->get_worker_out_state((int)$value,$pid);
  269. if($state>0) continue;
  270. $item=[
  271. 'user_id'=>(int)$value,
  272. 'pid'=>$pid,
  273. 'createtime'=>$time
  274. ];
  275. $add_worker[]=$item;
  276. }
  277. $res=$workerOutModel->saveAll($add_worker);
  278. if($res) return $this->success('添加出工人员成功');
  279. } catch (ValidateException $e) {
  280. return $this->error($e->getError());
  281. }
  282. return $this->error('添加出工人员失败');
  283. }
  284. //清除今日出工人员
  285. public function clear_worker_out(GroupUserModel $groupUserModel, UserModel $userModel, WorkerOutModel $workerOutModel)
  286. {
  287. $param = $this->request->post();
  288. try {
  289. validate(UserValidate::class)->scene('set_worker_out')->check($param);
  290. $list = $this->comma_str_array($param['list']);
  291. if(empty($list)) return $this->error('请添加取消人员');
  292. $add_worker=[];
  293. $pid=$this->userinfo['id'];
  294. $time=time();
  295. foreach ($list as $key => $value) {
  296. $id=$this->get_worker_out_id((int)$value,$pid);
  297. if(empty($id)) continue;
  298. $item=[
  299. 'id'=>$id,
  300. 'state'=>0,
  301. 'updatetime'=>$time
  302. ];
  303. $add_worker[]=$item;
  304. }
  305. $res=$workerOutModel->saveAll($add_worker);
  306. if($res) return $this->success('取消成功');
  307. } catch (ValidateException $e) {
  308. return $this->error($e->getError());
  309. }
  310. return $this->error('取消失败');
  311. }
  312. //获取今天出工人员状态,0=未出个,1=出工
  313. public function get_worker_out_state($id,$pid)
  314. {
  315. $groupUserModel=new GroupUserModel();
  316. $count=$groupUserModel->where('id',$id)->where('pid',$pid)->count();
  317. if($count==0) return 1;
  318. $workerOutModel=new WorkerOutModel();
  319. $todayTime = strtotime('today');
  320. $where=[];
  321. $where[] = ['user_id', '=',$id];
  322. $where[] = ['pid', '=',$pid];
  323. $where[] = ['state', '=',1];
  324. $where[]=['createtime', '>=',$todayTime];
  325. return $workerOutModel->where($where)->count();
  326. }
  327. //获取今天出工人员id
  328. public function get_worker_out_id($id,$pid)
  329. {
  330. $workerOutModel=new WorkerOutModel();
  331. $todayTime = strtotime('today');
  332. $where=[];
  333. $where[] = ['user_id', '=',$id];
  334. $where[] = ['pid', '=',$pid];
  335. $where[] = ['state', '=',1];
  336. $where[]=['createtime', '>=',$todayTime];
  337. $count=$workerOutModel->where($where)->count();
  338. if($count==0) return null;
  339. $id=$workerOutModel->where($where)->value('id');
  340. return $id;
  341. }
  342. //逗号分隔转数组
  343. public function comma_str_array($arr_string)
  344. {
  345. // 1. 清除所有空格(含全角)
  346. $array = str_replace([' ', ' '], '', $arr_string);
  347. // 2. 清除开头/结尾的逗号(关键改进)
  348. $array = trim($array, ',');
  349. $array=explode(',', $array);
  350. if(empty($array)) return null;
  351. $arr=[];
  352. foreach ($array as &$item) {
  353. if(empty($item)){
  354. continue;
  355. }
  356. $arr[]=$item;
  357. }
  358. return $arr;
  359. }
  360. // 方法1.1:使用strpos()精准匹配
  361. public function startsWithHttp($url)
  362. {
  363. return strpos($url, 'https://') === 0
  364. || strpos($url, 'http://') === 0;
  365. }
  366. //今日出工人员打包汇总
  367. public function worker_pack_sum(GroupUserModel $groupUserModel, UserModel $userModel, WorkerOutModel $workerOutModel)
  368. {
  369. $param = $this->request->post();
  370. try {
  371. } catch (ValidateException $e) {
  372. return $this->error($e->getError());
  373. }
  374. }
  375. }