最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java生成獨一無二的工單號實例

 更新時間:2024年09月04日 10:04:29   作者:碼農研究僧  
這篇文章主要介紹了Java生成獨一無二的工單號實例,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Java生成獨一無二的工單號

此文主要以Demo為例,對此直奔主題

以下Demo有參考價值

Demo

接口文件

/**
 * 使用redis生成分布式ID
 */
public interface IdGeneratorService {

	/**
	 * @param biz 業(yè)務名稱
	 */
	long generatorId(String biz);

	/**
	 *
	 * @return
	 */
	long generatorId();

	/**
	 * 返回工單號 customizerStr-日期-序號
	 * @param customizerStr 自定義參數
	 */
	String  generatorOrderNo(String customizerStr);
}

其生成的工單函數

如下:

import com.google.common.base.Strings;

import org.springblade.equipment.service.IdGeneratorService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.TimeUnit;

import lombok.extern.slf4j.Slf4j;

@Service
@Slf4j
public class RedisIdGeneratorService implements IdGeneratorService {

	private static final String keyPrefix = "smart";

	/**
	 * JedisClient對象
	 */
	@Autowired
	private RedisTemplate<String, Object> redisTemplate;


	/**
	 * @Description
	 * @author butterfly
	 */
	private String getIDPrefix() {
		Date date = new Date();
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		int year = c.get(Calendar.YEAR);
		int day = c.get(Calendar.DAY_OF_YEAR); // 今天是第多少天
		int hour = c.get(Calendar.HOUR_OF_DAY);
		int minute = c.get(Calendar.MINUTE);
		int second = c.get(Calendar.SECOND);
		String dayFmt = String.format("%1$03d", day); // 0補位操作 必須滿足三位
		String hourFmt = String.format("%1$02d", hour);  // 0補位操作 必須滿足2位
		String minuteFmt = String.format("%1$02d", minute);  // 0補位操作 必須滿足2位
		String secondFmt = String.format("%1$02d", second);  // 0補位操作 必須滿足2位
		StringBuffer prefix = new StringBuffer();
		prefix.append((year - 2000)).append(dayFmt).append(hourFmt).append(minuteFmt).append(secondFmt);
		return prefix.toString();
	}

	/**
	 * 自定義工單前綴
	 */
	private String getOrderNoPrefix(String customizerStr){
		StringBuffer prefix = new StringBuffer();
		LocalDate now = LocalDate.now();
		prefix.append(customizerStr).append("-").append(now.getYear()).append(now.getMonthValue()).append(now.getDayOfMonth());
		return prefix.toString();
	}

	/**
	 * @author butterfly
	 */
	private long incrDistrId(String biz) {
		String prefix = getIDPrefix();
		String orderId = null;
		String key = "#{biz}:id:".replace("#{biz}", biz).concat(prefix); // 00001
		try {
			ValueOperations<String, Object> valueOper = redisTemplate.opsForValue();
			Long index = valueOper.increment(key, 1);
			orderId = prefix.concat(String.format("%1$05d", index)); // 補位操作 保證滿足5位
		} catch (Exception ex) {
			log.error("分布式訂單號生成失敗異常。。。。。", ex);
		} finally {
			redisTemplate.expire(key, 600, TimeUnit.SECONDS);//保留10分鐘內的key
		}
		if (Strings.isNullOrEmpty(orderId)) return 0;
		return Long.parseLong(orderId);
	}

	/**
	 * @Description 生成分布式ID
	 * @author butterfly
	 */
	@Override
	public long generatorId(String biz) {
		// 轉成數字類型,可排序
		return incrDistrId(biz);
	}

	@Override
	public long generatorId() {
		return incrDistrId(keyPrefix);
	}

	/**
	 * 獲得前綴
	 * 去redis查看是否有對應的值
	 * 有的話取回來新增 001-》002
	 * 沒有的直接插入,值為001
	 * 設置過期時間24小時
	 * @param customizerStr 自定義參數
	 * @return
	 */
	@Override
	public String generatorOrderNo(String customizerStr) {
		String orderNoPrefix = this.getOrderNoPrefix(customizerStr);
		String key = orderNoPrefix;
		String value ="";
		try{
			ValueOperations<String, Object> valueOper = redisTemplate.opsForValue();
			Object o = valueOper.get(key);
			//沒有的直接插入,值為001
			if(o==null){
				valueOper.set(key,1);
				value="001";
			}else{
				//有的話取回來新增 001-》002
				Integer oldValue = Integer.valueOf(o.toString());
				int newValue = oldValue + 1;
				valueOper.set(key,newValue);
				//其中0表示補零而不是補空格,6表示至少6位
				value=String.format("%03d",newValue);
			}
		}catch (Exception e){
			log.error("工單no生成失敗,reason:"+e);
		}finally {
			redisTemplate.expire(key,24,TimeUnit.HOURS);
		}
		return key+"-"+value;
	}


}

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java?Object類和包裝類深入解讀

    Java?Object類和包裝類深入解讀

    Object類是一個特殊的類,是所有類的父類,如果一個類沒有用extends明確指出繼承于某個類,那么它默認繼承Object類,所謂包裝類,就是能夠直接將簡單類型的變量表示為一個類,在執(zhí)行變量類型的相互轉換時,我們會大量使用這些包裝類
    2022-02-02
  • Java 多線程的同步代碼塊詳解

    Java 多線程的同步代碼塊詳解

    這篇文章主要介紹了Java 多線程的同步代碼塊,使用synchronized關鍵字創(chuàng)建線程同步方法是實現線程同步的關鍵,需要的朋友可以參考下
    2021-10-10
  • springboot Actuator的指標監(jiān)控可視化功能詳解

    springboot Actuator的指標監(jiān)控可視化功能詳解

    SpringBoot Actuator是springboot為簡化我們對微服務項目的監(jiān)控功能抽取出來的模塊,使得我們每個微服務快速引用即可獲得生產界別的應用監(jiān)控、審計等功能。這篇文章主要介紹了springboot Actuator的指標監(jiān)控可視化,需要的朋友可以參考下
    2021-08-08
  • java實現簡單銀行ATM系統

    java實現簡單銀行ATM系統

    這篇文章主要為大家詳細介紹了java實現簡單銀行ATM系統,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java使用Swing實現一個模擬電腦計算器

    Java使用Swing實現一個模擬電腦計算器

    Java Swing 是一個用于創(chuàng)建 Java GUI(圖形用戶界面)的框架,它提供了一系列的 GUI 組件和工具,可以用于創(chuàng)建桌面應用程序,包括按鈕、文本框、標簽、表格等等,本文給大家介紹了Java使用Swing實現一個模擬計算器,感興趣的同學可以自己動手嘗試一下
    2024-05-05
  • 靈活控制任務執(zhí)行時間的Cron表達式范例

    靈活控制任務執(zhí)行時間的Cron表達式范例

    這篇文章主要為大家介紹了靈活控制任務執(zhí)行時間的Cron表達式范例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • 4個Java8中你需要知道的函數式接口分享

    4個Java8中你需要知道的函數式接口分享

    Java?8?中提供了許多函數式接口,包括Function、Consumer、Supplier、Predicate?等等。本文主要來和大家介紹一下它們的具體使用,需要的可以參考一下
    2023-04-04
  • Java中Jackson的多態(tài)反序列化詳解

    Java中Jackson的多態(tài)反序列化詳解

    這篇文章主要介紹了Java中Jackson的多態(tài)反序列化詳解,多態(tài)序列化與反序列化,主要是借助于Jackson的@JsonTypeInfo與@JsonSubTypes注解實現,下面將通過幾個例子來簡述其運用,需要的朋友可以參考下
    2023-11-11
  • idea創(chuàng)建的idea項目時springframework出現紅色的原因和解決方法

    idea創(chuàng)建的idea項目時springframework出現紅色的原因和解決方法

    當使用 IntelliJ IDEA 創(chuàng)建 Spring Framework 項目時,springframework 出現紅色可能是因為相關的 Spring Framework 依賴沒有正確加載或項目的配置有問題,本文給大家介紹了一些常見的原因和解決方法,需要的朋友可以參考下
    2023-09-09
  • 關于@PropertySource配置的用法解析

    關于@PropertySource配置的用法解析

    這篇文章主要介紹了關于@PropertySource配置的用法解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03

最新評論

遂平县| 化州市| 阜南县| 高青县| 甘肃省| 房产| 南宫市| 大渡口区| 吉木乃县| 明星| 湘乡市| 科尔| 米脂县| 定兴县| 砚山县| 平顶山市| 洪湖市| 澄城县| 瓮安县| 平武县| 泗水县| 万州区| 靖江市| 德保县| 怀远县| 夏河县| 达尔| 罗田县| 西藏| 宁乡县| 贵定县| 尖扎县| 涪陵区| 余干县| 盖州市| 龙川县| 达日县| 宁化县| 郑州市| 桓仁| 犍为县|