Worker.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421
  1. <?php
  2. namespace app\common\model;
  3. use app\hander\HelpHander;
  4. use think\Db;
  5. use think\Exception;
  6. use tools\Idcard;
  7. class Worker extends Base
  8. {
  9. public $status = [
  10. 0=>'待审核',
  11. 1=>'同意',
  12. 2=>'拒绝',
  13. ];
  14. public function updates($orgId){
  15. $data = request()->post();
  16. $validate = new \app\common\validate\User();
  17. $result = $validate->check($data,[],'add');
  18. if(true !== $result){
  19. $this->error = $validate->getError();
  20. return false;
  21. }
  22. $validate = new \app\common\validate\Worker();
  23. $result = $validate->check($data,[]);
  24. if(true !== $result){
  25. $this->error = $validate->getError();
  26. return false;
  27. }
  28. $idCard = new Idcard();
  29. if(!$idCard->isChinaIDCard($data['card'])){
  30. $this->error = '身份证格式错误';
  31. return false;
  32. }
  33. $userData = [
  34. 'id' => input('id/d',0),
  35. 'account' => input('account','','trim'),
  36. 'real_name' => input('real_name','','trim'),
  37. 'mobile' => input('mobile','','trim'),
  38. 'password' => input('password','','trim'),
  39. 'head_image' => input('head_image','','trim'),
  40. 'depId' => input('depId/d',0),
  41. 'rolesId' => input('rolesId/d',0),
  42. 'enable' => input('enable/d',1),
  43. ];
  44. Db::startTrans();
  45. try{
  46. $id = $userData['id'];
  47. unset($userData['id']);
  48. $depId = $userData['depId'];
  49. $rolesId = $userData['rolesId'];
  50. unset($userData['depId']);
  51. unset($userData['rolesId']);
  52. if($id > 0){
  53. if(!$userData['password']){
  54. unset($userData['password']);
  55. }
  56. $userData['update_time'] = date('Y-m-d H:i:s');
  57. $ret =Db::name('user')
  58. ->where(['id'=>$id])
  59. ->update($userData);
  60. if(!$ret){
  61. \exception('操作失败');
  62. }
  63. Db::name('user_dep')
  64. ->where('user_id',$id)
  65. ->setField('dep_id',$depId);
  66. Db::name('user_roles')
  67. ->where('user_id',$id)
  68. ->setField('roles_id',$rolesId);
  69. $workerData = [
  70. 'birthday'=>$idCard->getBirthday($data['card']),
  71. 'gender'=>$idCard->getChinaIDCardSex($data['card'])=='男'?1:2,
  72. 'card_imgs'=>!empty($data['card_imgs'])?implode(',',$data['card_imgs']):'' ,
  73. 'id_imgs'=>!empty($data['id_imgs'])?implode(',',$data['id_imgs']):'',
  74. 'work'=>$data['work']?$data['work']:null,
  75. 'content'=>$data['content'],
  76. 'recommend'=>$data['recommend'],
  77. 'card'=>$data['card'],
  78. 'update_time'=>getTime(),
  79. ];
  80. $res = $this->where('user_id',$id)
  81. ->update($workerData);
  82. if(!$res){
  83. \exception('护工信息更新失败');
  84. }
  85. }else{
  86. if(!$userData['password']){
  87. $userData['password'] = password_hash('Aa123456', PASSWORD_DEFAULT);
  88. }
  89. $userData['create_time'] = date('Y-m-d H:i:s');
  90. $userData['ip'] = request()->ip();
  91. $ret = Db::name('user')->insertGetId($userData);
  92. if(!$ret){
  93. \exception('操作失败');
  94. }
  95. Db::name('user_org')
  96. ->insert(['user_id'=>$ret,'org_id'=>$orgId]);
  97. Db::name('user_dep')
  98. ->insert(['user_id'=>$ret,'dep_id'=>$depId]);
  99. Db::name('user_roles')
  100. ->insert(['user_id'=>$ret,'roles_id'=>$rolesId]);
  101. }
  102. $workerData = [
  103. 'user_id'=>$ret,
  104. 'birthday'=>$idCard->getBirthday($data['card']),
  105. 'gender'=>$idCard->getChinaIDCardSex($data['card'])=='男'?1:2,
  106. 'card_imgs'=>!empty($data['card_imgs'])?implode(',',$data['card_imgs']):'' ,
  107. 'id_imgs'=>!empty($data['id_imgs'])?implode(',',$data['id_imgs']):'',
  108. 'work'=>$data['work']?$data['work']:null,
  109. 'content'=>$data['content'],
  110. 'recommend'=>$data['recommend'],
  111. 'card'=>$data['card'],
  112. ];
  113. $res = $this->save($workerData);
  114. if(!$res){
  115. \exception('护工信息更新失败');
  116. }
  117. Db::commit();
  118. return true;
  119. }catch (Exception $e){
  120. Db::rollback();
  121. $this->error = $e->getMessage();
  122. return false;
  123. }
  124. }
  125. //护工列表
  126. public function lists($orgId,$where,$page,$size){
  127. $map[] = ['o.org_id','=',$orgId];
  128. $map[] = ['u.del','=',0];
  129. if(isset($where['name']) && $where['name']!=''){
  130. $map[] = ['u.real_name','like','%'.$where['name'].'%'];
  131. }
  132. if(isset($where['enable']) && $where['enable']!=''){
  133. $map[] = ['u.enable','=',$where['enable']];
  134. }
  135. if(isset($where['recommend']) && $where['recommend']!=''){
  136. $map[] = ['a.recommend','=',$where['recommend']];
  137. }
  138. if(isset($where['gender']) && $where['gender']!=''){
  139. $map[] = ['a.gender','=',$where['gender']];
  140. }
  141. if(isset($where['balance']) && $where['balance']!=''){
  142. $map[] = ['a.balance','>',0];
  143. }
  144. $roles = Db::name('roles')
  145. ->where('parent_id',11)
  146. ->where('del',0)
  147. ->where('enable',1)
  148. ->column('id');
  149. if(empty($roles)){
  150. $result['zhZye'] = 0;
  151. $result['page'] = $page;
  152. $result['total'] = 0;
  153. $result['records'] = [];
  154. $result['rows'] = 0;
  155. return $result;
  156. }
  157. $map[] = ['r.roles_id','in',$roles];
  158. $offset = ($page-1)*$size;
  159. $list = $this->alias('a')
  160. ->join('user u','a.user_id=u.id')
  161. ->join('user_org o','a.user_id=o.user_id')
  162. ->join('user_roles r','a.user_id=r.user_id')
  163. ->field('u.real_name,u.enable,u.mobile,u.create_time,u.head_image,a.*')
  164. ->limit($offset,$size)
  165. ->where($map)
  166. ->order('a.id','desc')
  167. ->select();
  168. $count = $this->alias('a')
  169. ->join('user u','a.user_id=u.id')
  170. ->join('user_org o','a.user_id=o.user_id')
  171. ->join('user_roles r','a.user_id=r.user_id')
  172. ->field('u.real_name,u.mobile,u.create_time,u.head_image,a.*')
  173. ->where($map)
  174. ->count();
  175. $lists = $list?$list->toArray():[];
  176. foreach ($lists as $k=>$v){
  177. $lists[$k]['work'] = $v['work']?birthday($v['work']):0;
  178. $lists[$k]['content'] = $v['content']?$v['content']:'';
  179. $lists[$k]['birthday'] = $v['birthday']?$v['birthday']:'';
  180. $lists[$k]['card_imgs'] = $v['card_imgs']?$v['card_imgs']:'';
  181. $lists[$k]['id_imgs'] = $v['id_imgs']?$v['id_imgs']:'';
  182. $lists[$k]['update_time'] = $v['update_time']?$v['update_time']:'';
  183. $lists[$k]['card'] = $v['card']?$v['card']:'';
  184. $lists[$k]['age'] = $v['birthday']?birthday($v['birthday']):0;
  185. }
  186. $result['zhZye'] = $this->alias('a')
  187. ->join('user u','a.user_id=u.id')
  188. ->join('user_org o','a.user_id=o.user_id')
  189. ->join('user_roles r','a.user_id=r.user_id')
  190. ->field('u.real_name,u.mobile,u.create_time,u.head_image,a.*')
  191. ->where($map)
  192. ->sum('a.balance');;
  193. $totalPage = ceil($count/$size);
  194. $result['page'] = $page;
  195. $result['total'] = $totalPage;
  196. $result['records'] = $count;
  197. $result['rows'] = $lists;
  198. return $result;
  199. }
  200. public function apiLists($orgId,$where,$page,$size){
  201. $map[] = ['o.org_id','=',$orgId];
  202. $map[] = ['u.del','=',0];
  203. $map[] = ['u.enable','=',1];
  204. if(isset($where['name']) && $where['name']!=''){
  205. $map[] = ['u.real_name','like','%'.$where['name'].'%'];
  206. }
  207. if(isset($where['enable']) && $where['enable']!=''){
  208. $map[] = ['u.enable','=',$where['enable']];
  209. }
  210. if(isset($where['recommend']) && $where['recommend']!=''){
  211. $map[] = ['a.recommend','=',$where['recommend']];
  212. }
  213. if(isset($where['gender']) && $where['gender']!=''){
  214. $map[] = ['a.gender','=',$where['gender']];
  215. }
  216. if(isset($where['balance']) && $where['balance']!=''){
  217. $map[] = ['a.balance','>',0];
  218. }
  219. $roles = Db::name('roles')
  220. ->where('parent_id',11)
  221. ->where('del',0)
  222. ->where('enable',1)
  223. ->column('id');
  224. if(empty($roles)){
  225. $result['zhZye'] = 0;
  226. $result['page'] = $page;
  227. $result['total'] = 0;
  228. $result['records'] = [];
  229. $result['rows'] = 0;
  230. return $result;
  231. }
  232. $map[] = ['r.roles_id','in',$roles];
  233. $offset = ($page-1)*$size;
  234. $list = $this->alias('a')
  235. ->join('user u','a.user_id=u.id')
  236. ->join('user_org o','a.user_id=o.user_id')
  237. ->join('user_roles r','a.user_id=r.user_id')
  238. ->field('u.real_name,u.enable,u.mobile,u.create_time,u.head_image,a.*')
  239. ->limit($offset,$size)
  240. ->where($map)
  241. ->order('a.id','desc')
  242. ->select();
  243. $count = $this->alias('a')
  244. ->join('user u','a.user_id=u.id')
  245. ->join('user_org o','a.user_id=o.user_id')
  246. ->join('user_roles r','a.user_id=r.user_id')
  247. ->field('u.real_name,u.mobile,u.create_time,u.head_image,a.*')
  248. ->where($map)
  249. ->count();
  250. $lists = $list?$list->toArray():[];
  251. foreach ($lists as $k=>$v){
  252. $lists[$k]['work'] = $v['work']?birthday($v['work']):0;
  253. $lists[$k]['content'] = $v['content']?$v['content']:'';
  254. $lists[$k]['birthday'] = $v['birthday']?$v['birthday']:'';
  255. $lists[$k]['card_imgs'] = $v['card_imgs']?$v['card_imgs']:'';
  256. $lists[$k]['id_imgs'] = $v['id_imgs']?$v['id_imgs']:'';
  257. $lists[$k]['update_time'] = $v['update_time']?$v['update_time']:'';
  258. $lists[$k]['card'] = $v['card']?$v['card']:'';
  259. $lists[$k]['age'] = $v['birthday']?birthday($v['birthday']):0;
  260. }
  261. $result['zhZye'] = $this->alias('a')
  262. ->join('user u','a.user_id=u.id')
  263. ->join('user_org o','a.user_id=o.user_id')
  264. ->join('user_roles r','a.user_id=r.user_id')
  265. ->field('u.real_name,u.mobile,u.create_time,u.head_image,a.*')
  266. ->where($map)
  267. ->sum('a.balance');;
  268. $totalPage = ceil($count/$size);
  269. $result['page'] = $page;
  270. $result['total'] = $totalPage;
  271. $result['records'] = $count;
  272. $result['rows'] = $lists;
  273. return $result;
  274. }
  275. public function getUserInfo($id){
  276. $info = db('user')
  277. ->alias('u')
  278. ->join('user_dep ud','ud.user_id = u.id')
  279. ->join('user_roles ur','ur.user_id = u.id')
  280. ->join('worker a','u.id = a.user_id')
  281. ->field('u.account,u.enable,u.real_name,u.mobile,u.create_time,u.head_image,ud.dep_id,ur.roles_id,a.*')
  282. ->where('u.id',$id)->find();
  283. return $info;
  284. }
  285. public function getAllByOrg($org_id){
  286. $map[] = ['o.org_id','=',$org_id];
  287. $map[] = ['u.del','=',0];
  288. $map[] = ['u.enable','=',1];
  289. $roles = Db::name('roles')
  290. ->where('parent_id',11)
  291. ->where('del',0)
  292. ->where('enable',1)
  293. ->column('id');
  294. $map[] = ['r.roles_id','in',$roles];
  295. $lists = $this->alias('a')
  296. ->join('user u','a.user_id=u.id')
  297. ->join('user_org o','a.user_id=o.user_id')
  298. ->join('user_roles r','a.user_id=r.user_id')
  299. ->field('a.id,u.real_name as name,u.enable,u.mobile,u.create_time,u.head_image as img')
  300. ->where($map)
  301. ->order('a.id','desc')
  302. ->select();
  303. $lists = $lists?$lists->toArray():[];
  304. foreach ($lists as $k=>$v){
  305. $lists[$k]['count'] = Db::name('ph_todo')
  306. ->where('worker_id',$v['id'])
  307. ->where('status',1)->count();
  308. $lists[$k]['title'] = $v['name'].'('.$lists[$k]['count'].')';
  309. }
  310. return $lists;
  311. }
  312. //护工人数
  313. public function getAllByOrgCount($org_id,$map=[]){
  314. $map[] = ['o.org_id','=',$org_id];
  315. $map[] = ['u.enable','=',1];
  316. $map[] = ['u.del','=',0];
  317. $roles = Db::name('roles')
  318. ->where('parent_id',11)
  319. ->where('del',0)
  320. ->where('enable',1)
  321. ->column('id');
  322. $map[] = ['r.roles_id','in',$roles];
  323. $lists = $this->alias('a')
  324. ->join('user u','a.user_id=u.id')
  325. ->join('user_org o','a.user_id=o.user_id')
  326. ->join('user_roles r','a.user_id=r.user_id')
  327. ->field('a.id,u.real_name as name,u.enable,u.mobile,u.create_time,u.head_image as img')
  328. ->where($map)
  329. ->count();
  330. return $lists;
  331. }
  332. public function hotList($org_id){
  333. $map[] = ['o.org_id','=',$org_id];
  334. $map[] = ['u.del','=',0];
  335. $map[] = ['u.enable','=',1];
  336. $roles = Db::name('roles')
  337. ->where('parent_id',11)
  338. ->where('del',0)
  339. ->where('enable',1)
  340. ->column('id');
  341. $map[] = ['r.roles_id','in',$roles];
  342. $lists = $this->alias('a')
  343. ->join('user u','a.user_id=u.id')
  344. ->join('user_org o','a.user_id=o.user_id')
  345. ->join('user_roles r','a.user_id=r.user_id')
  346. ->field('a.id,a.birthday,a.work,u.real_name as name,u.enable,u.mobile,u.create_time,u.head_image as img')
  347. ->where($map)
  348. ->where('a.recommend',1)
  349. ->order('a.id','desc')
  350. ->select();
  351. $lists = $lists?$lists->toArray():[];
  352. foreach ($lists as $k=>$v){
  353. $lists[$k]['age'] = $v['birthday']?birthday($v['birthday']):0;
  354. $lists[$k]['worker'] = $v['work']?birthday($v['work']):0;;
  355. }
  356. return $lists;
  357. }
  358. public function getAddressName($id){
  359. $addressInfo = Db::name('address')
  360. ->where('id',$id)
  361. ->find();
  362. $name = $addressInfo['title'];
  363. if($addressInfo['pid'] > 0){
  364. $pInfo = Db::name('address')
  365. ->where('id',$addressInfo['pid'])
  366. ->value('title');
  367. $name = $pInfo.$name;
  368. }
  369. return $name;
  370. }
  371. //护工详情
  372. public function workerDetail($id,$orgId,$userId=0){
  373. $info = Db::name('worker')
  374. ->where('id',$id)
  375. ->find();
  376. if(empty($info)) HelpHander::error('护工信息不存在');
  377. $info['serviceList'] = $this->getService(explode(',',$info['services']));
  378. $info['age'] = birthday($info['birthday']);
  379. $info['work'] = strpos($info['work'],'-')!==false?birthday($info['work']):'';
  380. $info['serviceStatus'] =$this->checkServiceStatus($info['id'])?'服务中':'空闲中';
  381. $info['minPrice'] =$this->getWorkerMinPrice($info['id']);
  382. $info['maxPrice'] =$this->getWorkerMaxPrice($info['id']);
  383. $info['servicesNum'] =count(Db::name('orders')
  384. ->where('worker_id',$id)
  385. ->group('user_id')
  386. ->select()->toArray());
  387. $info['servicesDay'] =diffBetweenTwoDays($info['create_time'],date('Y-m-d H:i:s'));
  388. $info['commentNum'] = (new Comment())->getCommentNum($info['id']);
  389. $info['cateList'] = $this->getWorkerPrice($id,$orgId);
  390. if($userId > 0){
  391. $info['isCollect'] = (new Collect())->checkIsCollect($info['id'],$userId);//是否收藏该护工
  392. }
  393. $info['serviceInfo'] = implode('、',array_column($this->getService(explode(',',$info['services'])),'title'));
  394. return $info;
  395. }
  396. }