Device.php 4.11 KB
<?php

namespace domain\device;

use stdClass;
class Device
{
    /**
     * 序列号前缀,也是batchNo
     * @param $manufacture
     * @param $project
     * @param $model
     * @param $production
     * @return string
     */
    static function getBatchNo($manufacture, $project, $model, $production)
    {
        return $manufacture. $project. $model. $production;
    }

    static function explodeBarcode($barcode)
    {
        //建议格式:	0001	0001	0001	0001
        //供参考	厂商ID	项目ID	型号ID	生产日期ID
        $len = mb_strlen($barcode);
        if ($len != 16) {
            return null;
        }
        $manufactureNo  = mb_substr($barcode, 0, 4, 'utf-8');
        $projectNo      = mb_substr($barcode, 4, 4, 'utf-8');
        $modelNo        = mb_substr($barcode, 8, 4, 'utf-8');
        $productionNo   = mb_substr($barcode, 12, 4, 'utf-8');

        return [$manufactureNo, $projectNo, $modelNo, $productionNo];
    }

    /**
     * @param $deviceId
     * @param $manufactureNo
     * @param $projectNo
     * @param $modelNo
     * @param $productionNo
     * @return stdClass
     */
    static function authDevice($deviceId, $manufactureNo, $projectNo, $modelNo, $productionNo)
    {
        $e = new stdClass();
        $e->success = false;
        $e->message = '';
        $e->serial_no = '';
        $e->mac = '';
        $tt = time();
        $batchNo = self::getBatchNo($manufactureNo, $projectNo, $modelNo, $productionNo);
        $batchModel = CreateBatchRepository::findOne(['batch_no' => $batchNo]);
        if (empty($batchModel)) {
            $e->message = '没有该批次';
            return $e;
        }
        $batchId = $batchModel->id;
        $count = DeviceRepository::rowsCount(['batch_id' => $batchId, 'status' => DeviceStatus::HAS_AUTH, 'is_delete' => 0]);

        if (($count *1) >= ($batchModel->num * 1)) {
            // 超过了限制数,记录到另外一个表里面
            // to do 记录到表里面
            $failRecord = DeviceAuthFailRepository::findOne(['device_id' => $deviceId, 'is_delete' => 0]);
            if (!$failRecord) {
                $item = [
                    'manufacture_no'    => $manufactureNo,
                    'project_no'        => $projectNo,
                    'model_no'          => $modelNo,
                    'production_no'     => $productionNo,
                    'device_id'         => $deviceId,
                ];
                DeviceAuthFail::create($item);
            }
            $e->message = '授权失败';
            return $e;
        }


        $deviceModel = DeviceRepository::findOne(['device_id' => $deviceId, 'batch_id' => $batchId, 'is_delete' => 0]);
        if (empty($deviceModel)) {
            $newDeviceModel = DeviceRepository::findOne(['device_id'=> null,'batch_id' => $batchId, 'is_delete' => 0, 'status' => DeviceStatus::NO_AUTH]);
            $newDeviceModel->device_id = $deviceId;
            $newDeviceModel->status = DeviceStatus::HAS_AUTH;
            $newDeviceModel->apply_at = $tt ;
            $newDeviceModel->auth_at = $tt;
            $newDeviceModel->save();
            $e->message = '授权成功';
            $e->success = true;
            $e->serial_no = $newDeviceModel->serial_no;
            $e->mac = $newDeviceModel->mac;

            return $e;
        }
        if (DeviceStatus::HAS_AUTH == $deviceModel->status) {
            $e->message = '授权成功';
            $e->success = true;
            $e->serial_no = $deviceModel->serial_no;
            $e->mac = $deviceModel->mac;
        } elseif (DeviceStatus::FAIL_AUTH == $deviceModel->status) {
            $e->message = '授权失败';
        } elseif (DeviceStatus::NO_AUTH == $deviceModel->status) {
            // 删除之后恢复的数据
            $deviceModel->status = DeviceStatus::HAS_AUTH;
            $deviceModel->auth_at = $tt;
            $deviceModel->save();
            $e->message = '授权成功';
            $e->success = true;
            $e->serial_no = $deviceModel->serial_no;
            $e->mac = $deviceModel->mac;
        } else {
            $e->message = '授权失败!';
        }

        return $e;
    }
}