java如何根據(jù)日期生成單號
java根據(jù)日期生成單號
1.查詢出創(chuàng)建時間等于當天的訂單,按照時間倒序排序去一條數(shù)據(jù)。
select a.* from t_solid_waste_production a WHERE deleted = 0 and TO_DAYS(create_time) = TO_DAYS(NOW()) order by create_time desc limit 1
2.編寫編碼生成規(guī)則
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd"); String date = df.format(new Date()); String recordNumber = "CF" + date + "001";
3.判斷最新一天是否有數(shù)據(jù),如果沒有則執(zhí)行疊加
if (lastData != null){ Format f1=new DecimalFormat("000"); recordNumber = "CF" + date + f1.format((Integer.parseInt(lastData.getRecordNumber().substring(lastData.getRecordNumber().length() - 3)) + 1)); }
java根據(jù)日期生成一定規(guī)則的單號
由于業(yè)務需求,需要根據(jù)一定的規(guī)則生成有規(guī)則的單號比如:YC-20231203-001
該規(guī)則單號前面部分 "YC-" 為異常的拼音縮寫,中間部分 “20231203” 為時間,后面為遞增的數(shù)字。
我的代碼實現(xiàn):
@ApiOperation("異常單號生成") @GetMapping("getCode") public Response<Object> getCode(){ return new Response<>().success().data(exceptionItemService.getCode()); } @Override public String getCode() { //前綴 String prefix = "YC-"; //后綴 String lastIndex; //獲取最大三位數(shù) Integer maxCode = exceptionItemMapper.selectMaxCode(prefix); //查詢出數(shù)據(jù)庫中當前最大的單號,如果沒有則說明今天還未添加一條數(shù)據(jù),有的話則將最大的查出來 +1 if (maxCode != null && maxCode <= 8) { maxCode += 1; //Integer轉換為字符串 String i = String.valueOf(maxCode); lastIndex = "00" + i; } else if (maxCode != null && maxCode <= 98) { maxCode += 1; String i = String.valueOf(maxCode); lastIndex = "0" + i; } else if (maxCode != null) { maxCode += 1; lastIndex = String.valueOf(maxCode); } else { lastIndex = "001"; } // 中間部分 “20231211” String middle = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); //設置新的異常單號 YC-20231203-001 return prefix + middle + "-" + lastIndex; }
代碼中
Integer maxCode = exceptionItemMapper.selectMaxCode(prefix)
是通過查詢數(shù)據(jù)庫來得出單號后三位最大的數(shù)字,sql實現(xiàn)如下(本人用的postgres數(shù)據(jù)庫):
<select id="selectMaxCode" resultType="java.lang.Integer"> SELECT MAX(CAST(SUBSTRING(exception_code, LENGTH(exception_code) - 2) AS INTEGER)) FROM qc_exception_item WHERE exception_code LIKE CONCAT(#{prefix}, TO_CHAR(NOW(), 'YYYYMMDD'),'-%','%'); </select>
如果是mysql數(shù)據(jù)庫的話,上面代碼中的:
WHERE exception_code LIKE CONCAT(#{prefix}, TO_CHAR(NOW(), 'YYYYMMDD'),'-%','%')
中的
TO_CHAR(NOW(), 'YYYYMMDD')
改為
DATE_FORMAT(NOW(), '%Y%m%d')
即可。
本人現(xiàn)在代碼未考慮多線程的情況,如果需要的話可以自己看情況修改。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
解決mybatis plus報錯com.microsoft.sqlserver.jdbc.SQLServerE
這篇文章主要介紹了解決mybatis plus報錯com.microsoft.sqlserver.jdbc.SQLServerException:必須執(zhí)行該語句才能獲得結果,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05Java整合mybatis實現(xiàn)過濾數(shù)據(jù)
這篇文章主要介紹了Java整合mybatis實現(xiàn)過濾數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2023-01-01IntelliJ IDEA修改內(nèi)存大小,使得idea運行更流暢
今天小編就為大家分享一篇關于IntelliJ IDEA修改內(nèi)存大小,使得idea運行更流暢的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10