Explorar el Código

Merge branch 'test'

Ritchie hace 1 año
padre
commit
ad73b6d174

+ 2 - 0
src/main/java/com/szwl/controller/TCoinOrderController.java

@@ -25,6 +25,7 @@ import com.szwl.service.TAdminService;
 import com.szwl.service.TCoinOrderService;
 import com.szwl.service.TEquipmentService;
 import com.szwl.service.es.EsTCoinOrderService;
+import com.szwl.util.IDGenerator;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -109,6 +110,7 @@ public class TCoinOrderController {
         String companyType = byId.getCompanyType();
 
         TCoinOrder coinOrder = new TCoinOrder();
+        coinOrder.setId(IDGenerator.coinOrderID());
         coinOrder.setType(null);
         coinOrder.setClientId(clientId);
         coinOrder.setAdminId(adminId);

+ 1 - 0
src/main/java/com/szwl/model/bean/ChartColumn.java

@@ -61,6 +61,7 @@ public class ChartColumn {
     }
     public static String format1(Float value){
         BigDecimal bd = new BigDecimal(value);//创建一个bd对象,将要转换的值value传入构造函数
+        // TODO: 客户想取消四舍五入,但我不赞同此更改。
         bd = bd.setScale(2, RoundingMode.HALF_UP);//调用setScale方法进行数据格式化,保留两位小数,采用四舍五入规则
         return bd.toString(); //返回bd对象的值(转化为string形式)
     }

+ 1 - 0
src/main/java/com/szwl/model/entity/TAdmin.java

@@ -28,6 +28,7 @@ public class TAdmin implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(value = "id", type = IdType.AUTO)
+//    @TableId(value = "id", type = IdType.ASSIGN_ID)
     private Long id;
 
     @ApiModelProperty(value = "创建时间")

+ 2 - 1
src/main/java/com/szwl/model/entity/TCoinOrder.java

@@ -25,7 +25,8 @@ public class TCoinOrder implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    @TableId(value = "id", type = IdType.AUTO)
+//    @TableId(value = "id", type = IdType.AUTO)
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
     private Long id;
 
     @ApiModelProperty(value = "订单创建时间")

+ 2 - 1
src/main/java/com/szwl/model/entity/TEquipment.java

@@ -24,7 +24,8 @@ public class TEquipment implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    @TableId(value = "id", type = IdType.AUTO)
+//    @TableId(value = "id", type = IdType.AUTO)
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
     private Long id;
 
     private Date createDate;

+ 2 - 1
src/main/java/com/szwl/model/entity/TOrder.java

@@ -32,7 +32,8 @@ public class TOrder implements Serializable {
 
     @JsonSerialize(using= ToStringSerializer.class)
     @ApiModelProperty(value = "订单唯一ID")
-    @TableId(value = "id", type = IdType.AUTO)
+//    @TableId(value = "id", type = IdType.AUTO)
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
     private Long id;
 
     @ApiModelProperty(value = "创建时间")

+ 97 - 0
src/main/java/com/szwl/util/IDGenerator.java

@@ -0,0 +1,97 @@
+package com.szwl.util;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Random;
+import java.util.concurrent.atomic.AtomicLong;
+
+public class IDGenerator {
+    private static final AtomicLong seq = new AtomicLong(0);
+    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
+    private static final SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+
+
+    /**
+     * 生成唯一的16位长整型ID --> equipment等常用表
+     *
+     * @return 订单ID
+     */
+    public static synchronized long commonID() {
+        String timestamp = dateFormat1.format(new Date()).substring(2);
+        long threadId = Thread.currentThread().getId();
+        String s1 = String.valueOf(threadId);
+        char c = s1.charAt(s1.length() - 1);
+        //huTool工具集的雪花算法 --> 生成19位id
+        //参数1为终端ID
+        //参数2为数据中心ID
+//        Snowflake snowflake = IdUtil.getSnowflake(1, 1);
+//        long id = snowflake.nextId();
+//        System.out.println("id***" + id);
+
+        return Long.parseLong(timestamp + c);
+    }
+
+    /**
+     * 生成唯一的18位长整型ID --> 用于国内订单
+     *
+     * @return 订单ID
+     */
+    public static synchronized long orderID() {
+        String timestamp = dateFormat.format(new Date()).substring(2);
+        long threadId = Thread.currentThread().getId();
+        String s1 = String.valueOf(threadId);
+        char c = s1.charAt(s1.length() - 1);
+        String randomNumber = generateRandomNumber();
+
+        // 乐观锁部分
+        long currentSeq;
+        long nextSeq;
+        do {
+            currentSeq = seq.get();
+            nextSeq = (currentSeq >= 999) ? 0 : currentSeq + 1;
+        } while (!seq.compareAndSet(currentSeq, nextSeq));
+        String s2 = String.valueOf(nextSeq);
+        char c1 = s2.charAt(s2.length() - 1);
+
+        String s = "5"; // 表示国内订单
+        return Long.parseLong(s + timestamp + c + randomNumber + c1);
+    }
+
+    /**
+     * 生成唯一的18位长整型ID --> 用于海外订单
+     *
+     * @return 订单ID
+     */
+    public static synchronized long coinOrderID() {
+        String timestamp = dateFormat.format(new Date()).substring(2);
+        long threadId = Thread.currentThread().getId();
+        String s1 = String.valueOf(threadId);
+        char c = s1.charAt(s1.length() - 1);
+        String randomNumber = generateRandomNumber();
+
+        // 乐观锁部分
+        long currentSeq;
+        long nextSeq;
+        do {
+            currentSeq = seq.get();
+            nextSeq = (currentSeq >= 999) ? 0 : currentSeq + 1;
+        } while (!seq.compareAndSet(currentSeq, nextSeq));
+        String s2 = String.valueOf(nextSeq);
+        char c1 = s2.charAt(s2.length() - 1);
+
+        String s = "1"; // 表示海外订单
+        return Long.parseLong(s + timestamp + c + randomNumber + c1);
+    }
+
+    /**
+     * 生成3位伪随机数
+     * 因为long类型范围是-9223372036854775808到9223372036854775807,无法容纳更大范围数字,可以将数据库字段类型改为无符号,或者使用varchar类型
+     * @return 随机数
+     */
+    private static String generateRandomNumber() {
+        Random random = new Random();
+        int nextInt = random.nextInt(1000);
+        // 格式化为3位数,并在不满三位的数字前面补零
+        return String.format("%03d", nextInt);
+    }
+}