recuitlogic.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: sicilon_IT
  5. * Date: 2020/4/15
  6. * Time: 16:27
  7. */
  8. namespace app\index\logic;
  9. use app\index\model\recuitmodel;
  10. use app\index\model\recuitawardmodel;
  11. use app\index\model\daycheckinfo;
  12. use app\index\model\gworkermodel;
  13. class recuitlogic{
  14. public function savenewrecuit($arr){
  15. $t_r=new recuitmodel();
  16. $rid=$t_r->insinfo($arr);
  17. return $rid;
  18. }
  19. public function getulistbyrecuit($arr){
  20. $recuitid=$arr['recuituser'];
  21. $t_r=new recuitmodel();
  22. $rlist=$t_r->selulistbyrecuit($recuitid);
  23. return $rlist;
  24. }
  25. /*
  26. * 20200416
  27. *修改数据结构,直接存储
  28. */
  29. public function getallrecuit($arr){
  30. $t_r=new recuitmodel();
  31. $rlist=$t_r->selrlist();
  32. // $t_m= new gworkermodel();
  33. // foreach($rlist as &$k){
  34. // $recuitid=$k['recuituserid'];
  35. // $uid=$k['userid'];
  36. // $recuitinfo=$t_m->getinfobyid($recuitid);
  37. // $uinfo=$t_m->getinfobyid($uid);
  38. // $k['recuitname']=$recuitinfo['wname'];
  39. // $k['wname']=$uinfo['wname'];
  40. //
  41. // }
  42. return $rlist;
  43. }
  44. /*
  45. * 20200417
  46. */
  47. public function getnamebytl($arr){
  48. $tel=$arr['tel'];
  49. $t_m=new gworkermodel();
  50. $rec=$t_m->seluinfobytel($tel);
  51. return $rec;
  52. }
  53. /*
  54. * 20200418
  55. * 计算
  56. */
  57. private function countaward($uid){
  58. //调用时已确认此用户数据需要重新计算,所以不再判断
  59. //获取推荐人清单,同进要读取最早的入职日期
  60. $t_r=new recuitmodel();
  61. $ulist=$t_r->selulistbyrecuit($uid);
  62. if (!$ulist){
  63. //直接返回空,什么也不做
  64. return 0;
  65. }
  66. $firstindate=$ulist[0]['indate'];//获取第一条入职记录,以确认是否在需要处理上个月的记录
  67. //获取已有的记录
  68. $t_ra=new recuitawardmodel();
  69. $recordlist=$t_ra->selinfolistbywid($uid,1);
  70. //循环计算准备
  71. $t_ds=new daycheckinfo();
  72. $edate=date('Y-m-d',strtotime('-2 day'));
  73. $smonth=date('Y-m',strtotime('-2 day'));//计算的月份
  74. // echo $edate;
  75. // echo $smonth;
  76. //如果有记录,则获取最后一条记录的月份
  77. $lastrecmonth='';
  78. if ($recordlist){
  79. $lastrecmonth=$recordlist[0]['summonth'];
  80. }
  81. //确定开始日期
  82. //如果确定开始日期,如果已有记录,则开始日期从最后一条记录月份的第一天开始,如果没有记录,则从内推人员的第一个入职日期开始
  83. if ($lastrecmonth>''){
  84. $bdate=$lastrecmonth.'-01';
  85. $commonth=$lastrecmonth;
  86. }else{
  87. $bdate=$firstindate;
  88. $commonth=substr($bdate,0,7);
  89. }
  90. // echo $commonth;
  91. //从确定的开始日期开始,循环计算,循环结束条件,下一个计算月份超出当前月份
  92. while ($commonth<=$smonth){
  93. //设置初始变量
  94. $recuitworks=0;
  95. $sumcounts=0;
  96. $tmpbdate=$commonth.'-01';
  97. $commothendate=date('Y-m-d',strtotime("$tmpbdate +1 month -1 day"));
  98. //如果超出,则设置实际日期,避免最后两天被统计进去
  99. if ($commothendate>=$edate){
  100. $commothendate=$edate;
  101. }
  102. //循环遍历每个推荐的员工,获取阶段考勤日
  103. foreach($ulist as &$kv ){
  104. $kid=$kv['userid'];
  105. $indate=$kv['indate'];
  106. if ($indate>$bdate){
  107. $combdate=$indate;
  108. }else{
  109. $combdate=$bdate;
  110. }
  111. $sumw=$t_ds->selcountbyidwithdate($kid,$combdate,$commothendate);
  112. $sumcounts+=$sumw;
  113. if ($indate<=$commothendate){
  114. $recuitworks+=1;
  115. }
  116. //echo "kid=$kid,combdate=$combdate,commonthenddate=$commothendate,sumw=$sumw,sumcounts=$sumcounts"."</br>";
  117. }
  118. //存储
  119. //新增或更新组装数据
  120. $awardinfo['recuituser']=$uid;
  121. $awardinfo['recuitworks']=$recuitworks;
  122. $awardinfo['summonth']=$commonth;
  123. $awardinfo['sumdate']=$commothendate;
  124. $awardinfo['sumcounts']=$sumcounts;
  125. $awardinfo['sumaward']=$sumcounts*5;
  126. if ($commonth==$lastrecmonth){
  127. //更新
  128. $lastrecid=$recordlist[0]['id'];
  129. $t_ra->updateinfobyid($lastrecid,$awardinfo);
  130. }else{
  131. //新增
  132. $rid=$t_ra->insinfo($awardinfo);
  133. }
  134. //准备计算下一月
  135. $bdate=date('Y-m-01',strtotime("$bdate +1 month"));
  136. $commonth=substr($bdate,0,7);
  137. };
  138. return 1;
  139. }
  140. /*
  141. * 20200419
  142. *获取某人的分数
  143. * 2020-04-20
  144. * 返回数据不同了,要返回所有的数据
  145. */
  146. public function getawardbyrid($arr){
  147. //是否有推荐的人,没有直接退出
  148. $uid=$arr['uid'];
  149. $t_r=new recuitmodel();
  150. $ulist=$t_r->selulistbyrecuit($uid);
  151. if (!$ulist){
  152. //直接返回空,什么也不做
  153. return 0;
  154. }
  155. //是否有已经到的计算日的数据
  156. $edate=date('Y-m-d',strtotime('-2 day'));
  157. $t_ra=new recuitawardmodel();
  158. $rec=$t_ra->selinfobyiddate($uid,$edate);
  159. if (!$rec){
  160. $rec=$this->countaward($uid);
  161. if ($rec==0){
  162. return 0;
  163. }
  164. }
  165. //获取所有数据
  166. $rlist=$t_ra->selinfolistbywid($uid,0);
  167. //获取这两天的临时数据
  168. $temprec=$this->counttmpaward($uid);
  169. array_push($rlist,$temprec);
  170. return $rlist;
  171. }
  172. /*
  173. * 20200419
  174. * 计算这两天的临时数据
  175. */
  176. private function counttmpaward($uid){
  177. //获取推荐人清单
  178. $t_r=new recuitmodel();
  179. $t_ds=new daycheckinfo();
  180. $ulist=$t_r->selulistbyrecuit($uid);
  181. $bdate=date('Y-m-d',strtotime('-1 day'));
  182. $edate=date('Y-m-d');
  183. $sumcounts=0;
  184. $recuitworks=0;
  185. foreach($ulist as &$kv ){
  186. $kid=$kv['userid'];
  187. $indate=$kv['indate'];
  188. //确定开始日期
  189. if ($indate>$bdate){
  190. $bdate=$indate;
  191. }
  192. $sumw=$t_ds->selcountbyidwithdate($kid,$bdate,$edate);
  193. $sumcounts+=$sumw;
  194. $recuitworks+=1;
  195. }
  196. //新增或更新组装数据
  197. $awardinfo['recuituser']=$uid;
  198. $awardinfo['recuitworks']=$recuitworks;
  199. $awardinfo['summonth']='近两日';
  200. $awardinfo['somdate']=$edate;
  201. $awardinfo['sumcounts']=$sumcounts;
  202. $awardinfo['sumaward']=$sumcounts*5;
  203. return $awardinfo;
  204. }
  205. /*
  206. * 20200421
  207. * 轮询处理
  208. */
  209. public function oprrecuitaward(){
  210. // 获取所有关系:
  211. $t_r=new recuitmodel();
  212. $ulist=$t_r->selrlist();
  213. //批量处理
  214. $edate=date('Y-m-d',strtotime('-2 day'));
  215. $t_ra=new recuitawardmodel();
  216. foreach ($ulist as $kv) {
  217. $uid=$kv['recuituserid'];
  218. $rec=$t_ra->selinfobyiddate($uid,$edate);
  219. if (!$rec){
  220. $this->countaward($uid);
  221. }
  222. }
  223. }
  224. }