GroupUser.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426
  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. $num=$this->today_worker_out_num;
  246. $labor_cost_money_avg=round(bcdiv(strval($labor_cost_money_avg['labor_cost_money_sum']),strval($this->today_worker_out_num),4),2);
  247. foreach ($list as $item) {
  248. if($item['selected']){
  249. $item['balance']=$labor_cost_money_avg;
  250. }
  251. }
  252. return $this->success('出工人员列表',$list);
  253. } catch (ValidateException $e) {
  254. return $this->error($e->getError());
  255. }
  256. }
  257. //添加今日出工人员
  258. public function set_worker_out(GroupUserModel $groupUserModel, UserModel $userModel, WorkerOutModel $workerOutModel)
  259. {
  260. $param = $this->request->post();
  261. try {
  262. validate(UserValidate::class)->scene('set_worker_out')->check($param);
  263. $list = $this->comma_str_array($param['list']);
  264. if(empty($list)) return $this->error('请添加出工人员');;
  265. $add_worker=[];
  266. $pid=$this->userinfo['id'];
  267. $time=time();
  268. foreach ($list as $key => $value) {
  269. $state=$this->get_worker_out_state((int)$value,$pid);
  270. if($state>0) continue;
  271. $item=[
  272. 'user_id'=>(int)$value,
  273. 'pid'=>$pid,
  274. 'createtime'=>$time
  275. ];
  276. $add_worker[]=$item;
  277. }
  278. $res=$workerOutModel->saveAll($add_worker);
  279. if($res) return $this->success('添加出工人员成功');
  280. } catch (ValidateException $e) {
  281. return $this->error($e->getError());
  282. }
  283. return $this->error('添加出工人员失败');
  284. }
  285. //清除今日出工人员
  286. public function clear_worker_out(GroupUserModel $groupUserModel, UserModel $userModel, WorkerOutModel $workerOutModel)
  287. {
  288. $param = $this->request->post();
  289. try {
  290. validate(UserValidate::class)->scene('set_worker_out')->check($param);
  291. $list = $this->comma_str_array($param['list']);
  292. if(empty($list)) return $this->error('请添加取消人员');
  293. $add_worker=[];
  294. $pid=$this->userinfo['id'];
  295. $time=time();
  296. foreach ($list as $key => $value) {
  297. $id=$this->get_worker_out_id((int)$value,$pid);
  298. if(empty($id)) continue;
  299. $item=[
  300. 'id'=>$id,
  301. 'state'=>0,
  302. 'updatetime'=>$time
  303. ];
  304. $add_worker[]=$item;
  305. }
  306. $res=$workerOutModel->saveAll($add_worker);
  307. if($res) return $this->success('取消成功');
  308. } catch (ValidateException $e) {
  309. return $this->error($e->getError());
  310. }
  311. return $this->error('取消失败');
  312. }
  313. //获取今天出工人员状态,0=未出个,1=出工
  314. public function get_worker_out_state($id,$pid)
  315. {
  316. $groupUserModel=new GroupUserModel();
  317. $count=$groupUserModel->where('id',$id)->where('pid',$pid)->count();
  318. if($count==0) return 1;
  319. $workerOutModel=new WorkerOutModel();
  320. $todayTime = strtotime('today');
  321. $where=[];
  322. $where[] = ['user_id', '=',$id];
  323. $where[] = ['pid', '=',$pid];
  324. $where[] = ['state', '=',1];
  325. $where[]=['createtime', '>=',$todayTime];
  326. return $workerOutModel->where($where)->count();
  327. }
  328. //获取今天出工人员id
  329. public function get_worker_out_id($id,$pid)
  330. {
  331. $workerOutModel=new WorkerOutModel();
  332. $todayTime = strtotime('today');
  333. $where=[];
  334. $where[] = ['user_id', '=',$id];
  335. $where[] = ['pid', '=',$pid];
  336. $where[] = ['state', '=',1];
  337. $where[]=['createtime', '>=',$todayTime];
  338. $count=$workerOutModel->where($where)->count();
  339. if($count==0) return null;
  340. $id=$workerOutModel->where($where)->value('id');
  341. return $id;
  342. }
  343. //逗号分隔转数组
  344. public function comma_str_array($arr_string)
  345. {
  346. // 1. 清除所有空格(含全角)
  347. $array = str_replace([' ', ' '], '', $arr_string);
  348. // 2. 清除开头/结尾的逗号(关键改进)
  349. $array = trim($array, ',');
  350. $array=explode(',', $array);
  351. if(empty($array)) return null;
  352. $arr=[];
  353. foreach ($array as &$item) {
  354. if(empty($item)){
  355. continue;
  356. }
  357. $arr[]=$item;
  358. }
  359. return $arr;
  360. }
  361. // 方法1.1:使用strpos()精准匹配
  362. public function startsWithHttp($url)
  363. {
  364. return strpos($url, 'https://') === 0
  365. || strpos($url, 'http://') === 0;
  366. }
  367. //今日出工人员打包汇总
  368. public function worker_pack_sum(GroupUserModel $groupUserModel, UserModel $userModel, WorkerOutModel $workerOutModel)
  369. {
  370. $param = $this->request->post();
  371. try {
  372. } catch (ValidateException $e) {
  373. return $this->error($e->getError());
  374. }
  375. }
  376. }