workermanger.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: sicilon_IT
  5. * Date: 2020/1/29
  6. * Time: 0:36
  7. */
  8. namespace app\index\logic;
  9. use app\index\model\gworkermodel;
  10. use app\index\model\inventrecmodel;
  11. use app\index\model\paydetailmodel;
  12. use app\index\model\pwrelationmodel;
  13. use app\index\model\daycheckinfo;
  14. use app\index\model\daypricerecodemodel;
  15. use app\index\model\pinfomodel;
  16. use app\index\model\transfermodel;
  17. use app\index\model\userlocationmodel;
  18. use app\index\model\userlocationhismodel;
  19. use app\index\model\prjlocationmodel;
  20. use app\index\model\noticemodel;
  21. use app\index\model\noticereadmodel;
  22. class workermanger {
  23. public function getallworkerlist($pagenum, $pagesize) {
  24. $start = ($pagenum - 1) * $pagesize;
  25. $workertable = new gworkermodel();
  26. $worker_list = $workertable->getallworker($start, $pagesize);
  27. //var_dump($userinfo);
  28. return $worker_list;
  29. }
  30. /*
  31. * 20230214
  32. * 按公司获取所有的项目的工人
  33. */
  34. public function getallworkerlistbycid($pagenum, $pagesize, $cid) {
  35. $start = ($pagenum - 1) * $pagesize;
  36. $workertable = new gworkermodel();
  37. //先获取公司清单
  38. /*
  39. $t_p=new pinfomodel();
  40. $plist=$t_p->sellistbycid($cid);
  41. $strpinfo='';
  42. foreach($plist as $pinfo){
  43. $strpinfo=$strpinfo.$pinfo['id'].",";
  44. }
  45. if($strpinfo>''){
  46. $lenstr=strlen($strpinfo);
  47. $strp=substr($strpinfo,0,-1);
  48. }
  49. */
  50. $worker_list = $workertable->getallworkerbycid($start, $pagesize, $cid);
  51. //var_dump($userinfo);
  52. return $worker_list;
  53. }
  54. /**
  55. * 查询已不在公司项目的历史工作人员
  56. *
  57. * @return void
  58. * @author wj
  59. * @date 2025-02-17
  60. */
  61. public function getnotinprojectuserlist($pagenum, $pagesize) {
  62. $start = ($pagenum - 1) * $pagesize;
  63. $workertable = new gworkermodel();
  64. $worker_list = $workertable->getnotinprojectuserlist($start, $pagesize);
  65. return $worker_list;
  66. }
  67. /*
  68. * 20200212
  69. * steelxu
  70. * 获取指定项目的员工
  71. */
  72. public function getprjworkerlist($pagenum, $pagesize, $pid) {
  73. $start = ($pagenum - 1) * $pagesize;
  74. $workertable = new gworkermodel();
  75. $worker_list = $workertable->getprjworker($start, $pagesize, $pid);
  76. //var_dump($userinfo);
  77. return $worker_list;
  78. }
  79. public function saveworker($worker) {
  80. $t_worker = new gworkermodel();
  81. $datenow = date('Y-m-d ');
  82. $t_worker['create_date'] = $datenow;
  83. $newid = $t_worker->saveworkerinfo($worker);
  84. //如果重复,直接返回
  85. if ($newid == -1) {
  86. return $newid;
  87. }
  88. //如果插入正常
  89. if ($newid > 0) {
  90. $r_table = new pwrelationmodel();
  91. $relation['pid'] = $worker['cprojectid'];
  92. $relation['wid'] = $newid;
  93. $relation['startdate'] = $datenow;
  94. $relation['checkstatus'] = 1;
  95. $rid = $r_table->savenewrelation($relation);
  96. }
  97. return $newid;
  98. }
  99. /*
  100. * 20200312
  101. * 统计各项目当天记工人数,两天前起,指定天数内的出勤的工人数
  102. * 先处理日期参数
  103. * 获取所有项目,ID和项目名称
  104. * 按项目获取出勤统计、分两次获取,一次是当天的,一次是前一阶段的
  105. * 组装数据
  106. */
  107. public function getcheckcountbydate($arr) {
  108. $daycount = $arr['daycount'];
  109. $strdc = strval($daycount + 2);
  110. $strparam = '-' . $strdc . ' day';
  111. $datenow = date('Y-m-d ');
  112. $dateend = date('Y-m-d', strtotime('-2 day'));
  113. $datestart = date('Y-m-d', strtotime($strparam));
  114. //获取所有项目
  115. $t_p = new pinfomodel();
  116. $p_list = $t_p->getallpinfo();
  117. $t_dc = new daycheckinfo();
  118. foreach ($p_list as &$v) {
  119. $pid = $v['id'];
  120. //获取当天数据
  121. $w_today = $t_dc->selcinfowithdate($datenow, $datenow, $pid);
  122. if ($w_today) {
  123. // var_dump($w_today);
  124. $v['todaycount'] = $w_today[0]['workernumber'];
  125. // echo 'ok<br>';
  126. } else {
  127. $v['todaycount'] = 0;
  128. }
  129. //获取历史记录
  130. $w_history = $t_dc->selcinfowithdate($datestart, $dateend, $pid);
  131. if ($w_history) {
  132. foreach ($w_history as $k) {
  133. $checkdate = strval($k['checkdate']);
  134. $v[$checkdate] = $k['workernumber'];
  135. }
  136. }
  137. }
  138. return $p_list;
  139. }
  140. /*
  141. * 20230214
  142. * 统计本公司各项目的记工人数,两天前起(不可更改)
  143. */
  144. public function getcheckcountbydatecompany($arr) {
  145. $daycount = $arr['daycount'];
  146. $cid = $arr['companyid'];
  147. $strdc = strval($daycount + 2);
  148. $strparam = '-' . $strdc . ' day';
  149. $datenow = date('Y-m-d ');
  150. $dateend = date('Y-m-d', strtotime('-2 day'));
  151. $datestart = date('Y-m-d', strtotime($strparam));
  152. //获取本公司项目
  153. $t_p = new pinfomodel();
  154. //$p_list=$t_p->getallpinfo();
  155. $p_list = $t_p->sellistbycid($cid);
  156. $t_dc = new daycheckinfo();
  157. foreach ($p_list as &$v) {
  158. $pid = $v['id'];
  159. //获取当天数据
  160. $w_today = $t_dc->selcinfowithdate($datenow, $datenow, $pid);
  161. if ($w_today) {
  162. // var_dump($w_today);
  163. $v['todaycount'] = $w_today[0]['workernumber'];
  164. // echo 'ok<br>';
  165. } else {
  166. $v['todaycount'] = 0;
  167. }
  168. //获取历史记录
  169. $w_history = $t_dc->selcinfowithdate($datestart, $dateend, $pid);
  170. if ($w_history) {
  171. foreach ($w_history as $k) {
  172. $checkdate = strval($k['checkdate']);
  173. $v[$checkdate] = $k['workernumber'];
  174. }
  175. }
  176. }
  177. return $p_list;
  178. }
  179. /*
  180. * 20210303
  181. * 获取待安排调出人员
  182. */
  183. public function getuntransworker($arr) {
  184. $t_trans = new transfermodel();
  185. $page = isset($arr['pageNum']) && !empty($arr['pageNum']) && is_numeric($arr['pageNum']) ? $arr['pageNum'] : 1;
  186. $size = isset($arr['pageSize']) && !empty($arr['pageSize']) && is_numeric($arr['pageSize']) ? $arr['pageSize'] : 10;
  187. $wlist = $t_trans->selinfolistbyopr($page, $size);
  188. $data = [
  189. "pageSize" => $size,
  190. "pageNum" => $page,
  191. 'list' => $wlist,
  192. ];
  193. return $data;
  194. }
  195. /*
  196. * 20210303
  197. * steelxu
  198. * 将用户由人才库,调入最终库
  199. * 没有组长权限处理,
  200. *更改调动表数据
  201. */
  202. public function oprtransferlist($prjid, $worker_arr) {
  203. $newdate = date('Y-m-d ');
  204. $r_tale = new pwrelationmodel();
  205. $w_table = new gworkermodel();
  206. $t_trans = new transfermodel();
  207. $icount = 0;
  208. //var_dump($worker_arr);
  209. foreach ($worker_arr as $k => $v) {
  210. //组织数据
  211. $relation['pid'] = $prjid;
  212. $relation['wid'] = $v['wid'];
  213. $relation['startdate'] = $newdate;
  214. $relation['checkstatus'] = 1;
  215. $w_table->updateprj($prjid, $v['wid']);
  216. $rid = $r_tale->addnewrelation($relation);
  217. if ($rid > 0) {
  218. $icount++;
  219. }
  220. //处理调动表
  221. $t_trans->updoprbywid($v['wid'], $prjid);
  222. }
  223. return $icount;
  224. }
  225. /*
  226. * 20210311
  227. * 根据用户姓名获取
  228. */
  229. public function getworkerinfobyname($arr) {
  230. $wname = $arr['wname'];
  231. $t_work = new gworkermodel();
  232. $rlist = $t_work->selinfobyname($wname);
  233. return $rlist;
  234. }
  235. /*
  236. * 20210416
  237. * 过生日更新员工年齿
  238. */
  239. public function updatewaggbybirthday() {
  240. $birthday = date('md');
  241. $t_w = new gworkermodel();
  242. $wlist = $t_w->selworklistbybirthday($birthday);
  243. $year = (int) date('Y');
  244. foreach ($wlist as $worker) {
  245. $byear = substr($worker['shengfengid'], 6, 4);
  246. $nage = $year - (int) $byear;
  247. $t_w->updwagebyid($worker['id'], $nage);
  248. }
  249. }
  250. /*
  251. * 20210427
  252. * 修改工人停止
  253. */
  254. public function updateworkerinfobyid($arr) {
  255. $wid = $arr['id'];
  256. $updarr['telno'] = $arr['telno'];
  257. $updarr['workclass'] = $arr['workclass'];
  258. $updarr['dayprice'] = $arr['dayprice'];
  259. $updarr['wage'] = $arr['wage'];
  260. $t_work = new gworkermodel();
  261. $winfo = $t_work->getinfobyid($wid);
  262. $rcount = $t_work->updinfobyid($wid, $updarr);
  263. if ($rcount > 0) {
  264. $m_dr = new daypricerecodemodel();
  265. $insertarr = [
  266. 'user_id' => $wid,
  267. 'old_dayprice' => $winfo['dayprice'],
  268. 'dayprice' => $arr['dayprice'],
  269. 'createtime' => date("Y-m-d H:i:s"),
  270. 'type' => 1, //修改用户信息
  271. ];
  272. $drid = $m_dr->insinfo($insertarr);
  273. }
  274. return $rcount;
  275. }
  276. /*
  277. * 20210502
  278. *
  279. */
  280. public function getlocationlist() {
  281. $t_ul = new userlocationmodel();
  282. $list = $t_ul->sellist();
  283. return $list;
  284. }
  285. /*
  286. * 20210430
  287. * 存储地址
  288. * 20210510
  289. * 修改为先保存历史
  290. * 当前表如果有,就
  291. */
  292. public function saveuserlocation($arr) {
  293. $t_ul = new userlocationmodel();
  294. $openid = $arr['openid'];
  295. $arr['createdate'] = date('Y-m-d H:i:s');
  296. $t_ulh = new userlocationhismodel();
  297. $t_ulh->insinfo($arr);
  298. $rinfo = $t_ul->selinfobyopenid($openid);
  299. if (empty($rinfo)) {
  300. $rid = $t_ul->insinfo($arr);
  301. return $rid;
  302. } else {
  303. $rid = $rinfo['id'];
  304. $nid = $t_ul->updinfobyid($rid, $arr);
  305. return $nid;
  306. }
  307. }
  308. /*
  309. * 20210511
  310. */
  311. public function getlocationgroupprovince() {
  312. $t_ul = new userlocationmodel();
  313. $tlist = $t_ul->selgroupby_p();
  314. return $tlist;
  315. }
  316. /*
  317. * 20210511
  318. */
  319. public function getlocationgroupcity() {
  320. $t_ul = new userlocationmodel();
  321. $tlist = $t_ul->selgroupby_c();
  322. return $tlist;
  323. }
  324. /*
  325. * 20210515
  326. * 获得项目的地址
  327. */
  328. public function getprjlocation() {
  329. $t_pl = new prjlocationmodel();
  330. $t_p = new pinfomodel();
  331. $plocationlist = $t_pl->sellist();
  332. $plist = $t_p->getallpinfo();
  333. foreach ($plist as $prj) {
  334. foreach ($plocationlist as &$prjlocation) {
  335. if ($prjlocation['prjid'] == $prj['id']) {
  336. $prjlocation['prjname'] = $prj['pname'];
  337. break;
  338. }
  339. }
  340. }
  341. return $plocationlist;
  342. }
  343. /*
  344. * 2030215
  345. * 只获得自己公司的项目位置
  346. */
  347. public function getmyprjlocation($arr) {
  348. $cid = $arr['companyid'];
  349. $t_pl = new prjlocationmodel();
  350. $t_p = new pinfomodel();
  351. $plocationlist = $t_pl->sellist();
  352. $plist = $t_p->sellistbycid($cid);
  353. $myplist = array();
  354. foreach ($plist as $prj) {
  355. foreach ($plocationlist as &$prjlocation) {
  356. if ($prjlocation['prjid'] == $prj['id']) {
  357. $prjlocation['prjname'] = $prj['pname'];
  358. array_push($myplist, $prjlocation);
  359. break;
  360. }
  361. }
  362. }
  363. //return $plocationlist;
  364. return $myplist;
  365. }
  366. /*
  367. * 20210515
  368. * 按项目统计人群
  369. */
  370. public function getworkerlocationcountgprj() {
  371. $t_ul = new userlocationmodel();
  372. $pwlist = $t_ul->selgroupbyprj();
  373. return $pwlist;
  374. }
  375. /*
  376. * 20230215
  377. * 获取自己公司项目的统计人数
  378. */
  379. public function getworkerlocationcountgprjbycid($arr) {
  380. $cid = $arr['companyid'];
  381. $t_ul = new userlocationmodel();
  382. $t_p = new pinfomodel();
  383. $plist = $t_p->sellistbycid($cid);
  384. $pwlist = array();
  385. foreach ($plist as $pinfo) {
  386. $pid = $pinfo['id'];
  387. $pwcount = $t_ul->selgroupcountbypid($pid);
  388. array_push($pwlist, $pwcount);
  389. }
  390. return $pwlist;
  391. }
  392. /*
  393. * 20210516
  394. * 提交公告
  395. */
  396. public function savenewnotice($arr) {
  397. $arr['createdate'] = date('Y-m-d H:i:s');
  398. $t_n = new noticemodel();
  399. $id = $t_n->insinfo($arr);
  400. return $id;
  401. }
  402. /*
  403. * 20210517
  404. *
  405. */
  406. public function getallnotice() {
  407. $t_n = new noticemodel();
  408. $rlist = $t_n->selalllist();
  409. return $rlist;
  410. }
  411. /*
  412. * 20230215
  413. */
  414. public function getnoticebycid($arr) {
  415. $cid = $arr['companyid'];
  416. $t_n = new noticemodel();
  417. $rlist = $t_n->sellistbycid($cid);
  418. return $rlist;
  419. }
  420. /*
  421. * 20210517
  422. * 获得最新消息
  423. */
  424. public function getnewnotice($arr) {
  425. $t_n = new noticemodel();
  426. $wid = $arr['wid'];
  427. $t_w = new gworkermodel();
  428. $winfo = $t_w->getinfobyid($wid);
  429. $pid = $winfo['cprojectid'];
  430. $t_p = new pinfomodel();
  431. $pinfo = $t_p->getbyid($pid);
  432. $cid = $pinfo['companyid'];
  433. $res_info = array();
  434. if (!$cid) {
  435. return $res_info;
  436. }
  437. $rlist = $t_n->selnewmsgbycid($cid);
  438. $t_nr = new noticereadmodel();
  439. $readinfo = $t_nr->selnewinfobywid($wid);
  440. if (!empty($rlist)) {
  441. if (empty($readinfo)) {
  442. $res_info = $rlist[0];
  443. } else {
  444. if ($readinfo[0]['readnoticeid'] < $rlist[0]['id']) {
  445. $res_info = $rlist[0];
  446. }
  447. }
  448. }
  449. return $res_info;
  450. }
  451. /*
  452. * 20210517
  453. */
  454. public function updatenoticereadstatus($arr) {
  455. $readinfo['wid'] = $arr['wid'];
  456. $update = true;
  457. if (array_key_exists('noticeid', $arr)) {
  458. $readinfo['readnoticeid'] = $arr['noticeid'];
  459. } else {
  460. $t_n = new noticemodel();
  461. $rlist = $t_n->selnewmsg();
  462. if (!empty($rlist)) {
  463. $readinfo['readnoticeid'] = $rlist[0]['id'];
  464. } else {
  465. $update = false;
  466. }
  467. }
  468. $readinfo['readtime'] = date("Y-m-d H:i:s");
  469. if ($update) {
  470. $t_nr = new noticereadmodel();
  471. $rid = $t_nr->insinfo($readinfo);
  472. } else {
  473. $rid = 0;
  474. }
  475. return $rid;
  476. }
  477. /*
  478. * 20210517
  479. *
  480. */
  481. public function getpaylistbyuplogid($arr) {
  482. $logid = $arr['logid'];
  483. $t_p = new paydetailmodel();
  484. $list = $t_p->sellistbyuplogid($logid);
  485. return $list;
  486. }
  487. /*
  488. * 20230130
  489. * 从水猫那里增加工人
  490. */
  491. public function savenewworkerfromwatercat($worker) {
  492. $t_worker = new gworkermodel();
  493. $datenow = date('Y-m-d ');
  494. $worker['create_date'] = $datenow;
  495. $worker['cprojectid'] = 1;
  496. if (isset($arr['prjtelno']) || !empty($arr['prjtelno'])) {
  497. $worker['workclass'] = $arr['prjtelno'];
  498. }
  499. $newid = $t_worker->saveworkerinfo($worker);
  500. //如果重复,直接返回
  501. if ($newid == -1) {
  502. return $newid;
  503. }
  504. //如果插入正常
  505. //项目id设置为1
  506. if ($newid > 0) {
  507. $r_table = new pwrelationmodel();
  508. $relation['pid'] = $worker['cprojectid'];
  509. $relation['wid'] = $newid;
  510. $relation['startdate'] = $datenow;
  511. $relation['checkstatus'] = 1;
  512. $rid = $r_table->savenewrelation($relation);
  513. }
  514. return $newid;
  515. }
  516. /*
  517. * 20230126
  518. */
  519. public function getworkerinfobytel($arr) {
  520. $tel = $arr['tel'];
  521. $t_m = new gworkermodel();
  522. $rec = $t_m->seluinfobytel($tel);
  523. $rworker = array();
  524. if ($rec) {
  525. $rworker['wid'] = $rec['id'];
  526. $rworker['wage'] = $rec['wage'];
  527. $rworker['wname'] = $rec['wname'];
  528. $rworker['workclass'] = $rec['workclass'];
  529. }
  530. return $rworker;
  531. }
  532. /*
  533. * 20230131
  534. */
  535. public function addnewinvent($arr) {
  536. $t_i = new inventrecmodel();
  537. $arr['inventdate'] = date('Y-m-d');
  538. $rid = $t_i->insinfo($arr);
  539. return $rid;
  540. }
  541. /*
  542. * 20230131
  543. */
  544. public function getinventinfobywid($arr) {
  545. $t_i = new inventrecmodel();
  546. $wid = $arr['wid'];
  547. $rec = $t_i->selinfobywid($wid);
  548. return $rec;
  549. }
  550. /*
  551. * 20230131
  552. */
  553. public function updateprjbyinvent($arr) {
  554. $newdate = date('Y-m-d ');
  555. $pid = $arr['pid'];
  556. $r_tale = new pwrelationmodel();
  557. $w_table = new gworkermodel();
  558. $i_table = new inventrecmodel();
  559. //检验GPS
  560. $iinfo = $i_table->selinfobyid($arr['id']);
  561. $p_lng = $iinfo['prj_lng'];
  562. $p_lat = $iinfo['prj_lat'];
  563. $m_lat = $arr['my_lat'];
  564. $m_lng = $arr['my_lng'];
  565. if ((abs($p_lng - $m_lng) > 0.1) || (abs($p_lat - $m_lat) > 0.1)) {
  566. return 0;
  567. }
  568. $icount = 0;
  569. //var_dump($worker_arr);
  570. //组织数据
  571. $relation['pid'] = $pid;
  572. $relation['wid'] = $arr['wid'];
  573. $relation['startdate'] = $newdate;
  574. $relation['checkstatus'] = 1;
  575. $w_table->updateprj($pid, $arr['wid']);
  576. $rid = $r_tale->addnewrelation($relation);
  577. //更新inventrec
  578. if ($rid > 0) {
  579. $i_table->updateacceptbyid($arr['id']);
  580. $icount++;
  581. }
  582. return $icount;
  583. }
  584. }