以年月日+编号拼接id,且编号每天从0开始

我这里的需求,是一个执法系统中的案件表。要求每个案件,每天的编号,都要从0重新计算,且格式为年月日+编号,而且如果编号为个位数,还要给它补0。因此,这里的例子,将有两个表。一个表为task,案件数据表。一个表为task_key,用于做编号拼接。

task_key的字段

id 主键
num 编号
updateTime 数据更新时间

准备三个函数

函数一,获取当前时间

# 获取当前年月日-时分秒
function getTime(){
    $time = time();
    $date = date('Y-m-d H:i:s', $time);
    return $date;
}

函数二,获取无符号的年月日

# 获取当前年月入时分秒,无符号
function getTime2(){
    $time = time();
    $date = date('YmdHis', $time);
    return $date;
}
# 打印结果,例:20210604

函数三,自带多个0的五位数编号

# 自动补4个0
function bu_4_0($num){
    # 当编号小于10,在编号前拼接4个0
    if($num < 10){
        return '0000'.$num;
    }
    # 当编号小于100……
    if($num < 100){
        return '000'.$num;
    }
    if($num < 1000){
        return '00'.$num;
    }
    if($num < 10000){
        return '0'.$num;
    }
    if($num < 100000){
        return $num;
    }
}

开始搞

# 获取task_key
$task_key = Db::table('task_key')->select()->toArray();
# 获取task_key的更新时间
$key_up = $task_key[0]['updateTime'];
# 预设值
$key = '';

## 1、当日案件序号设置
# 要点:如果task_key的数据是昨天的,则更新为今天的。而如果是今天的,那直接读取即可
# 如果task_key的最后更新时间,小于今天0点
,那么,task_key的数据,为昨天数据
if($key_up < date('Y-m-d').' 00:00:00'){
      // 重置num的值为0,并+1(用于下一次获取),预设值$key的值也设为0
      // 重置updateTime的时间为当前时间
      $key = 0;
      Db::table('task_key')->where('Id', '=', 1)->update([
              'num'=>$key+1,
              'updateTime'=>getTime()
      ]);
}
# 如果task_key的最后更新时间,大于今天0点
else{
      // 获取num当前的值,储存在变量$key中
      // 创建新数据,要为num+1
      $key = $task_key[0]['num'];
      Db::table('task_key')->where('Id', '=', 1)->update([
             'num'=>$key+1,
             'updateTime'=>getTime()
      ]);
       
}

## 2、新建案件
$res_taskId = Db::table('task')->insertGetId([
       'xxxx'=>$xxxx
]);
## 3、将拼接的2021060400000格式的id,更新入新建的案件
Db::table('task')->where('Id', $res_taskId)->update([
       'taskId'=>getTime2().bu_4_0($key)
]);

为TA充电
共{{data.count}}人
人已赞赏
tp6-边用边总结

获取路由参数

2021-6-3 9:12:48

tp6-边用边总结

thinkPHP6跨域

2021-6-5 12:31:14

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索