77 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
| <?php
 | |
| 
 | |
| namespace app\model;
 | |
| 
 | |
| use think\model\relation\HasMany;
 | |
| use think\model\relation\HasOne;
 | |
| 
 | |
| /**
 | |
|  * 扫码日志表
 | |
|  * Class ScanLog
 | |
|  * @package app\model
 | |
|  */
 | |
| class ScanLog extends Base
 | |
| {
 | |
|     public const TYPE_SIGN = 'sign';//签到
 | |
| 
 | |
|     public const ACTION_SCAN_BY_STAFF   = 'scan_by_staff';//员工扫码
 | |
|     public const ACTION_SCAN_BY_MACHINE = 'scan_by_machine';//扫码器扫码
 | |
| 
 | |
|     /**
 | |
|      * 检测是否扫码成功
 | |
|      *
 | |
|      * @param  int  $accountId
 | |
|      * @param  string  $nonceStr
 | |
|      * @return bool
 | |
|      */
 | |
|     public static function isScan(int $accountId, string $nonceStr): bool
 | |
|     {
 | |
|         $where   = [];
 | |
|         $where[] = ['account_id', '=', $accountId];
 | |
|         $where[] = ['nonce_str', '=', $nonceStr];
 | |
|         $where[] = ['created_at', '>', date('Y-m-d H:i:s', time() - 15 * 60)];
 | |
| 
 | |
|         return self::where($where)->count() > 0;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * 记录扫码日志
 | |
|      *
 | |
|      * @param  int  $accountId
 | |
|      * @param  int  $scanUserId
 | |
|      * @param  string  $nonceStr
 | |
|      * @param  string  $type
 | |
|      * @param  string  $action
 | |
|      * @param  string  $deviceNumber  扫码设备编号 默认无 仅当二维码扫描器操作室可能存在
 | |
|      * @return ScanLog|\think\Model
 | |
|      */
 | |
|     public static function log(int $accountId, int $scanUserId, string $nonceStr, string $type = self::TYPE_SIGN, string $action = self::ACTION_SCAN_BY_STAFF, string $deviceNumber = '')
 | |
|     {
 | |
|         $insert = [
 | |
|             'type'          => $type,
 | |
|             'action'        => $action,
 | |
|             'account_id'    => $accountId,
 | |
|             'staff_id'      => $scanUserId,
 | |
|             'nonce_str'     => $nonceStr,
 | |
|             'device_number' => $deviceNumber,
 | |
|             'created_at'    => date('Y-m-d H:i:s'),
 | |
|         ];
 | |
| 
 | |
|         if ($action == self::ACTION_SCAN_BY_MACHINE) {
 | |
|             //机器扫码每天一次
 | |
|             $count = self::where('type', $type)
 | |
|                 ->where('action', $action)
 | |
|                 ->where('account_id', $accountId)
 | |
|                 ->where('created_at', '>', date('Y-m-d 00:00:00'))
 | |
|                 ->where('created_at', '<', date('Y-m-d 23:59:59'))
 | |
|                 ->count();
 | |
|             if ($count <= 0) {
 | |
|                 return self::create($insert);
 | |
|             }
 | |
|         } else {
 | |
|             // 非机器扫码 不限制
 | |
|             return self::create($insert);
 | |
| 
 | |
|         }
 | |
|     }
 | |
| } |