71 lines
2.7 KiB
PHP
71 lines
2.7 KiB
PHP
<?php
|
||
namespace addon\carmi\app\service;
|
||
|
||
use core\base\BaseAdminService;
|
||
use addon\carmi\app\model\Test;
|
||
use think\Response;
|
||
|
||
class CarmiService extends BaseAdminService
|
||
{
|
||
public function __construct()
|
||
{
|
||
parent::__construct();
|
||
$this->model = new Test();
|
||
}
|
||
// 添加
|
||
public function add(array $data)
|
||
{
|
||
$list = [];
|
||
for ($x=0; $x<$data['nums']; $x++) {
|
||
$item=[
|
||
"state"=>0,
|
||
"number"=>$this->generateOrderNumber(),
|
||
"code"=>$this->generateActivationCode(18),
|
||
"type"=>intval($data['type'])
|
||
];
|
||
array_push($list,$item);
|
||
}
|
||
return $this->model->saveAll($list);
|
||
}
|
||
// 获取列表
|
||
public function get(array $where = [])
|
||
{
|
||
$search_model = $this->model->withSearch(['number','create_time','state'],$where)->order('create_time desc');
|
||
return $this->pageQuery($search_model);
|
||
}
|
||
// 删除
|
||
public function del(int $id)
|
||
{
|
||
return $this->model->find($id)->delete();
|
||
}
|
||
// 生成订单号
|
||
function generateOrderNumber() {
|
||
$microtime = microtime(true);
|
||
$microtimeStr = str_replace('.', '', (string)$microtime); // 移除小数点
|
||
$uniqidPart = substr(uniqid(), -8); // 或者 substr(uniqid(), 7, 8) 去除前缀
|
||
return date('Ymd') . substr($microtimeStr, -6) . $uniqidPart;
|
||
}
|
||
// 生成激活码
|
||
// 使用 uniqid() 函数结合微秒时间戳获取基础唯一标识符
|
||
function generateActivationCode($length = 32) {
|
||
$uniqidPart = bin2hex(openssl_random_pseudo_bytes(16)); // 或者使用 uniqid('', true)
|
||
|
||
// 可选:添加额外的安全性,如用户ID或其它上下文信息(如果适用)
|
||
// $userId = get_current_user_id(); // 假设这是一个获取当前用户ID的方法
|
||
// $contextInfo = hash('sha256', $userId . time());
|
||
// $activationBase = $uniqidPart . $contextInfo;
|
||
|
||
// 直接使用 uniqidPart
|
||
$activationBase = $uniqidPart;
|
||
|
||
// 使用安全的哈希函数进一步处理,例如 SHA-256
|
||
$activationCode = hash('sha256', $activationBase);
|
||
|
||
// 如果需要特定长度的激活码,可以截取哈希值的一部分或者用更短的哈希函数
|
||
if ($length > 0 && $length < strlen($activationCode)) {
|
||
$activationCode = substr($activationCode, 0, $length);
|
||
}
|
||
|
||
return strtoupper($activationCode); // 返回大写字符串形式的激活码
|
||
}
|
||
} |