77 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			77 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
| 
								 | 
							
								<?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);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |