DaKaService.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. <?php
  2. /**
  3. * Author: luzheng.liu
  4. * Time: 2019-09-22 16:18
  5. */
  6. namespace app\index\service;
  7. use app\index\model\DakaHoliday;
  8. class DaKaService {
  9. public $data = [
  10. 'ValidYN' => 'Y',
  11. 'AppToken' => 66778899,
  12. 'CardTime' => '2019-09-17+09:04',
  13. 'Address' => '总部真北路办公考勤点',
  14. 'AppID' => 'A|MI 8 SE-9|2.2.4|11584|862860041542790|',
  15. 'StaffID' => '796996',
  16. 'UserID' => '11584',
  17. 'Dimension' => '31.258829',
  18. 'Longitude' => '121.398896',
  19. 'MobileID' => '862860041542790',
  20. 'CardRemarkSZ' => ''
  21. ];
  22. //
  23. // public $dakaInfo = [
  24. // "OrderBy" => "",
  25. // "AppToken" => "66778899",
  26. // 'StaffID' => '796996',
  27. // 'pageSize' => '31',
  28. // 'CardFrom' => '',
  29. // 'DeptID' => '',
  30. // 'EndDate' => '2019-09-11',
  31. // 'pageNum' => '1',
  32. // "CompanyId" => 10,
  33. // 'AppID' => 'A|MI+8+SE-9|2.2.4|11584|862860041542790|192.168.31.25',
  34. // 'BeginDate' => '2019-09-11',
  35. // 'UserID' => '11584',
  36. // 'LangID' => '1',
  37. // ];
  38. public function init() {
  39. $date = date('Y-m-d');
  40. $hour = date('H');
  41. $w = date('w', strtotime($date));
  42. if($w==6 || $w == 0){
  43. var_dump($date . '周末,跳过');
  44. die();
  45. }
  46. if($date < '2020-01-31' && $date > '2020-01-23'){
  47. var_dump($date . '放假时间');
  48. die();
  49. }
  50. list($year, $month, $day) = explode('-', $date);
  51. if ($hour >= 6 && $hour <= 12) {
  52. $min = $day + 2;
  53. $min >= 10 ?: $min = '0'.$min;
  54. $this->data['CardTime'] = $date . '+09:' . $min;
  55. $makeTime = "$date 09:$min";
  56. } else {
  57. $min = $day ;
  58. $this->data['CardTime'] = $date . '+19:' . $min;
  59. $makeTime = "$date 19:$min";
  60. }
  61. $cronTime = date('Y-m-d H:i');
  62. $makeTime = date('Y-m-d H:i', strtotime($makeTime));
  63. if ($cronTime != $makeTime) {
  64. var_dump($cronTime, $makeTime);
  65. var_dump("预想时间不一致,停止打卡");
  66. die();
  67. }
  68. var_dump("打卡时间" . date('Y-m-d H:i:s'));
  69. }
  70. public function run() {
  71. $this->init();
  72. list($hour, $min, $sec) = explode(':', date('H:i:s'));
  73. $date = date('Y-m-d');
  74. list($year, $month, $day) = explode('-', $date);
  75. // try {
  76. // $isHoliday = $this->getHoliday($year, (int)$month);
  77. // if ($isHoliday) {
  78. // var_dump($date . "这天是假期不打卡,退出");
  79. // die();
  80. // }
  81. // } catch (\Exception $e) {
  82. // var_dump('假期接口出错');
  83. // var_dump($e->getMessage());
  84. // }
  85. if ($hour >= 6 && $hour <= 12) {
  86. var_dump($date . "上班,打卡");
  87. } else {
  88. var_dump($date . "下班,打卡");
  89. }
  90. $this->data['AppID'] .= '192.168.1.'.random_int(1, 200);
  91. $this->curlDaka($this->data);
  92. }
  93. //获取当月假期
  94. public function getHoliday($year, $month) {
  95. $holidayModel = new DakaHoliday();
  96. $holidayListByDb = $holidayModel::where(['request_date' => date('Y-m')])->column('holiday');
  97. var_dump($holidayListByDb);
  98. if (!empty($holidayListByDb)) {
  99. if (in_array(date('Y-m-d'), $holidayListByDb)) {
  100. return true;
  101. }
  102. return false;
  103. }
  104. $holidayFlag = false;
  105. $returnInfo = file_get_contents("http://v.juhe.cn/calendar/month?year-month={$year}-{$month}&key=3384938f081a4a6338dcc11fdb66252f");
  106. $data = json_decode($returnInfo, true);
  107. if ($data['error_code'] !== 0) {
  108. var_dump("请求假期接口失败--{$returnInfo}");
  109. die();
  110. }
  111. $insertData = [];
  112. $holidayList = array_column($data['result']['data']['holiday_array'], 'list');
  113. $holidayList = array_merge(...$holidayList);
  114. foreach ($holidayList as $k => $v) {
  115. if ($v['status'] != 1) {
  116. continue;
  117. }
  118. $date = date('Y-m-d', strtotime($v['date']));
  119. if ($date === date('Y-m-d')) {
  120. $holidayFlag = true;
  121. }
  122. $insertData[] = [
  123. 'holiday' => date('Y-m-d', strtotime($v['date'])),
  124. 'request_date' => date('Y-m')
  125. ];
  126. }
  127. $holidayModel->insertAll($insertData, true);
  128. return $holidayFlag;
  129. }
  130. function curlDaka($data) {
  131. $data = http_build_query($data);
  132. $curl = curl_init();
  133. curl_setopt_array($curl, [
  134. CURLOPT_PORT => "1001",
  135. CURLOPT_URL => "http://hr.baodao.com.cn:1001/AppWebService/GhrApp.asmx/InsertStaffCardRecord",
  136. CURLOPT_RETURNTRANSFER => true,
  137. CURLOPT_ENCODING => "",
  138. CURLOPT_MAXREDIRS => 10,
  139. CURLOPT_TIMEOUT => 30,
  140. CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  141. CURLOPT_CUSTOMREQUEST => "POST",
  142. CURLOPT_POSTFIELDS => $data,
  143. CURLOPT_HTTPHEADER => [
  144. "Content-Type: application/x-www-form-urlencoded",
  145. "cache-control: no-cache"
  146. ],
  147. ]);
  148. $response = curl_exec($curl);
  149. $err = curl_error($curl);
  150. curl_close($curl);
  151. if ($err) {
  152. echo "cURL Error #:" . $err."\n";
  153. die();
  154. }
  155. echo $response."\n";
  156. }
  157. public function curlDakaInfo($data) {
  158. $data = http_build_query($data);
  159. $curl = curl_init();
  160. curl_setopt_array($curl, [
  161. CURLOPT_PORT => "1001",
  162. CURLOPT_URL => "http://hr.baodao.com.cn:1001/AppWebService/GhrApp.asmx/GetStaffCardRecordPeyDay",
  163. CURLOPT_RETURNTRANSFER => true,
  164. CURLOPT_ENCODING => "",
  165. CURLOPT_MAXREDIRS => 10,
  166. CURLOPT_TIMEOUT => 30,
  167. CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  168. CURLOPT_CUSTOMREQUEST => "POST",
  169. CURLOPT_POSTFIELDS => $data,
  170. CURLOPT_HTTPHEADER => [
  171. "Accept: */*",
  172. "Accept-Encoding: gzip, deflate",
  173. "Cache-Control: no-cache",
  174. "Connection: keep-alive",
  175. "Content-Type: application/x-www-form-urlencoded",
  176. "Host: hr.baodao.com.cn:1001",
  177. "cache-control: no-cache"
  178. ],
  179. ]);
  180. $response = curl_exec($curl);
  181. $err = curl_error($curl);
  182. curl_close($curl);
  183. if ($err) {
  184. echo "cURL Error #:" . $err . "\n";
  185. die();
  186. }
  187. return $response;
  188. }
  189. }