ソースを参照

feat(打卡):完成开发

geek 5 年 前
コミット
29b48ab741

+ 31 - 0
application/common.php

@@ -10,3 +10,34 @@
 // +----------------------------------------------------------------------
 
 // 应用公共文件
+function curl(string $url,  $data, $type = 'form') {
+    switch ($type) {
+        case 'json':
+            $data = json_encode($data);
+            $header = ['Content-Type: application/json', 'Content-Length:' . strlen($data)];
+            break;
+        case 'form':
+            $data = http_build_query($data);
+            $header = ['Content-Type: application/x-www-form-urlencoded'];
+    }
+
+
+    $ch = curl_init();
+
+    curl_setopt($ch, CURLOPT_URL, $url);
+
+    curl_setopt($ch, CURLOPT_POST, 1);
+
+    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
+
+    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
+
+    curl_setopt($ch, CURLOPT_POSTFIELDS , $data);
+
+    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+
+    $output = curl_exec($ch);
+    curl_close($ch);
+    return $output;
+
+}

+ 20 - 0
application/index/controller/DaKa.php

@@ -0,0 +1,20 @@
+<?php
+/**
+ * Author: luzheng.liu
+ * Time: 2019-09-22 16:17
+ */
+
+namespace app\index\controller;
+
+
+use app\index\service\DaKaService;
+use think\Controller;
+
+class DaKa extends Controller {
+
+    public function daKa() {
+        $service = new DaKaService();
+        $service->run();
+    }
+
+}

+ 6 - 0
application/index/controller/Index.php

@@ -37,4 +37,10 @@ class Index
     {
         return 'hello,' . $name;
     }
+
+
+    public function daka() {
+
+
+    }
 }

+ 17 - 0
application/index/model/DakaHoliday.php

@@ -0,0 +1,17 @@
+<?php
+/**
+ * Author: luzheng.liu
+ * Time: 2019-09-22 16:40
+ */
+
+namespace app\index\model;
+
+
+use think\Model;
+
+class DakaHoliday extends Model {
+
+    protected $table = 'daka_holiday';
+
+
+}

+ 206 - 0
application/index/service/DaKaService.php

@@ -0,0 +1,206 @@
+<?php
+/**
+ * Author: luzheng.liu
+ * Time: 2019-09-22 16:18
+ */
+
+namespace app\index\service;
+
+
+use app\index\model\DakaHoliday;
+
+class DaKaService {
+
+
+    public $data = [
+        'ValidYN'      => 'Y',
+        'AppToken'     => 66778899,
+        'CardTime'     => '2019-09-17+09:04',
+        'Address'      => '潮州路办公室考勤点',
+        'AppID'        => 'A|MI+8+SE-9|2.2.4|11584|862860041542790|',
+        'StaffID'      => '796996',
+        'UserID'       => '11584',
+        'Dimension'    => '31.265277',
+        'Longitude'    => '121.414143',
+        'MobileID'     => '862860041542790',
+        'CardRemarkSZ' => ''
+    ];
+//
+//    public $dakaInfo = [
+//        "OrderBy"   => "",
+//        "AppToken"  => "66778899",
+//        'StaffID'   => '796996',
+//        'pageSize'  => '31',
+//        'CardFrom'  => '',
+//        'DeptID'    => '',
+//        'EndDate'   => '2019-09-11',
+//        'pageNum'   => '1',
+//        "CompanyId" => 10,
+//        'AppID'     => 'A|MI+8+SE-9|2.2.4|11584|862860041542790|192.168.31.25',
+//        'BeginDate' => '2019-09-11',
+//        'UserID'    => '11584',
+//        'LangID'    => '1',
+//    ];
+
+
+    public function __construct() {
+        $date = date('Y-m-d');
+        $hour = date('H');
+        list($year, $month, $day) = explode('-', $date);
+        if ($hour >= 6 && $hour <= 12) {
+            $min = $day +2;
+            $this->data['CardTime'] = $date . '+09:' . $min;
+            $makeTime = "$date 09:$min";
+
+        } else {
+            $min = $day ;
+            $this->data['CardTime'] = $date . '+19:' . $min;
+            $makeTime = "$date 19:$min";
+        }
+        $cronTime = date('Y-m-d H:i');
+        var_dump($makeTime, $cronTime);
+        if ($cronTime != $makeTime) {
+            die();
+        }
+        var_dump("打卡时间" . date('Y-m-d H:i:s'));
+    }
+
+    public function run() {
+        list($hour, $min, $sec) = explode(':', date('H:i:s'));
+        $date = date('Y-m-d');
+        list($year, $month, $day) = explode('-', $date);
+        $isHoliday = $this->getHoliday($year, (int)$month);
+        if ($isHoliday) {
+            var_dump($date . "这天是假期不打卡,退出");
+            die();
+        }
+        var_dump($date . "正常上班");
+        if ($hour >= 6 && $hour <= 12) {
+            var_dump($date . "上班,打卡");
+            $this->data['CardTime'] = $date . '+09:' . random_int(0, 30);
+            var_dump('生成上班打卡时间' . $this->data['CardTime']);
+        } else {
+            var_dump($date . "下班,打卡");
+            $this->data['CardTime'] = $date . '+19:' . random_int(0, 30);
+            var_dump('生成下班打卡时间' . $this->data['CardTime']);
+        }
+        $this->data['AppID'] .=  '192.168.1.'.random_int(1, 200);
+        $this->curlDaka($this->data);
+
+
+    }
+
+    //获取当月假期
+    public function getHoliday($year, $month) {
+        $holidayModel = new DakaHoliday();
+        $holidayListByDb = $holidayModel::where(['request_date' => date('Y-m')])->column('holiday');
+        if (!empty($holidayListByDb)) {
+            if (in_array(date('Y-m-d'), $holidayListByDb)) {
+                var_dump(date('Y-m-d') . "这天是假期不打卡,退出");
+                return true;
+            }
+            var_dump(date('Y-m-d') . "正常上班");
+            return false;
+        }
+        $holidayFlag = false;
+        $returnInfo = file_get_contents("http://v.juhe.cn/calendar/month?year-month={$year}-{$month}&key=3384938f081a4a6338dcc11fdb66252f");
+        $data = json_decode($returnInfo, true);
+        if ($data['error_code'] !== 0) {
+            var_dump("请求假期接口失败--{$returnInfo}");
+            die();
+        }
+        $insertData = [];
+        $holidayList = array_column($data['result']['data']['holiday_array'], 'list');
+        $holidayList = array_merge(...$holidayList);
+        foreach ($holidayList as $k => $v) {
+            if ($v['status'] != 1) {
+                continue;
+            }
+            $date = date('Y-m-d', strtotime($v['date']));
+            if ($date === date('Y-m-d')) {
+                $holidayFlag = true;
+            }
+            $insertData[] = [
+                'holiday'      => date('Y-m-d', strtotime($v['date'])),
+                'request_date' => date('Y-m')
+            ];
+        }
+        $holidayModel->insertAll($insertData, true);
+
+        return $holidayFlag;
+    }
+
+    function curlDaka($data) {
+        $data = http_build_query($data);
+
+        $curl = curl_init();
+
+        curl_setopt_array($curl, [
+            CURLOPT_PORT           => "1001",
+            CURLOPT_URL            => "http://hr.baodao.com.cn:1001/AppWebService/GhrApp.asmx/InsertStaffCardRecord",
+            CURLOPT_RETURNTRANSFER => true,
+            CURLOPT_ENCODING       => "",
+            CURLOPT_MAXREDIRS      => 10,
+            CURLOPT_TIMEOUT        => 30,
+            CURLOPT_HTTP_VERSION   => CURL_HTTP_VERSION_1_1,
+            CURLOPT_CUSTOMREQUEST  => "POST",
+            CURLOPT_POSTFIELDS     => $data,
+            CURLOPT_HTTPHEADER     => [
+                "Content-Type: application/x-www-form-urlencoded",
+                "cache-control: no-cache"
+            ],
+        ]);
+
+        $response = curl_exec($curl);
+        $err = curl_error($curl);
+
+        curl_close($curl);
+
+        if ($err) {
+            echo "cURL Error #:" . $err."\n";
+            die();
+        }
+        echo $response."\n";
+
+    }
+
+    public function curlDakaInfo($data) {
+
+        $data = http_build_query($data);
+
+        $curl = curl_init();
+
+        curl_setopt_array($curl, [
+            CURLOPT_PORT           => "1001",
+            CURLOPT_URL            => "http://hr.baodao.com.cn:1001/AppWebService/GhrApp.asmx/GetStaffCardRecordPeyDay",
+            CURLOPT_RETURNTRANSFER => true,
+            CURLOPT_ENCODING       => "",
+            CURLOPT_MAXREDIRS      => 10,
+            CURLOPT_TIMEOUT        => 30,
+            CURLOPT_HTTP_VERSION   => CURL_HTTP_VERSION_1_1,
+            CURLOPT_CUSTOMREQUEST  => "POST",
+            CURLOPT_POSTFIELDS     => $data,
+            CURLOPT_HTTPHEADER     => [
+                "Accept: */*",
+                "Accept-Encoding: gzip, deflate",
+                "Cache-Control: no-cache",
+                "Connection: keep-alive",
+                "Content-Type: application/x-www-form-urlencoded",
+                "Host: hr.baodao.com.cn:1001",
+                "cache-control: no-cache"
+            ],
+        ]);
+
+        $response = curl_exec($curl);
+        $err = curl_error($curl);
+
+        curl_close($curl);
+
+        if ($err) {
+            echo "cURL Error #:" . $err . "\n";
+            die();
+        }
+        return $response;
+
+    }
+}

+ 8 - 2
composer.json

@@ -16,9 +16,15 @@
         }
     ],
     "require": {
-        "php": ">=5.6.0",
+        "php": ">=7.0.0",
         "topthink/framework": "5.1.*",
-        "robmorgan/phinx": "^0.10.7"
+        "robmorgan/phinx": "^0.10.7",
+        "ext-curl": "*",
+        "ext-json": "*"
+    }
+    ,
+    "require-dev": {
+        "roave/security-advisories": "dev-master"
     },
     "autoload": {
         "psr-4": {

+ 2 - 2
config/database.php

@@ -13,13 +13,13 @@ return [
     // 数据库类型
     'type'            => 'mysql',
     // 服务器地址
-    'hostname'        => '127.0.0.1',
+    'hostname'        => 'llzlovesh.top',
     // 数据库名
     'database'        => 'test',
     // 用户名
     'username'        => 'root',
     // 密码
-    'password'        => '123456',
+    'password'        => '649114390',
     // 端口
     'hostport'        => '',
     // 连接dsn