获取订单号

获取订单号

需求

​ 开发过程中,有一个这样的需求,自动生成一个订单,该订单需要每天从第一单开始生成

​ 格式为:前缀+日期+第几单

代码实现

/**
 * 获取订单号
 *
 * @return G-202208050001
 */
public String getWorkOrderNum() {
    // 获取当前日期
    String time = DateUtil.format(new Date(), "yyyyMMdd");
    // 获取数据库存的日期
    DictData dictDataTime = this.dictDataService.lambdaQuery().eq(DictData::getDictValue, "0")
            .eq(DictData::getDictType, "work_order_num")
            .one();
    // 判断当前日期和数据库存的日期是否相同
    if (!dictDataTime.getDictLabel().equals(time)) {
        // 将当前日期存入到数据库
        this.dictDataService.lambdaUpdate().eq(DictData::getDictValue, "0")
                .eq(DictData::getDictType, "work_order_num")
                .set(DictData::getDictLabel, time)
                .update();
        // 将当天的订单数重置为第一单
        this.dictDataService.lambdaUpdate().eq(DictData::getDictValue, "1")
                .eq(DictData::getDictType, "work_order_num")
                .set(DictData::getDictLabel, "1")
                .update();
    }
    // 获取当前订单数
    DictData dictDataNum = this.dictDataService.lambdaQuery().eq(DictData::getDictValue, "1")
            .eq(DictData::getDictType, "work_order_num")
            .one();
    String num = dictDataNum.getDictLabel();
    // 修改订单数为当前订单数+1
    this.dictDataService.lambdaUpdate().eq(DictData::getDictValue, "1")
            .eq(DictData::getDictType, "work_order_num")
            .set(DictData::getDictLabel, Integer.parseInt(num) + 1)
            .update();
    // 将订单信息进行拼接
    StringBuffer str = new StringBuffer();
    str.append(num); // str = 1
    int len = str.length();
    // 如果一天的订单数量较多,可以增加循环次数
    for (int i = 3; i >= len; i--) {
        str.insert(0, "0");
    } // str = 0001
    str.insert(0, time); // str = 202208050001
    str.insert(0, "G-"); // 订单前缀 str = G-202208050001
    return str.toString();
}
posted @   执迷1202  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示