huodongdong vor 7 Jahren
Ursprung
Commit
69fe592df2
19 geänderte Dateien mit 340 neuen und 0 gelöschten Zeilen
  1. 9 0
      rankin-common-utils/src/main/java/cn/rankin/common/utils/constant/Constant.java
  2. 29 0
      rankin-common-utils/src/main/java/cn/rankin/common/utils/service/SerialNumberService.java
  3. 26 0
      rankin-common-utils/src/main/java/cn/rankin/common/utils/service/impl/SerialNumberServiceImpl.java
  4. 2 0
      rankin-data-api/src/main/java/cn/rankin/data/api/trade/dto/OrderDTO.java
  5. 3 0
      rankin-data-api/src/main/java/cn/rankin/data/api/trade/entity/Order.java
  6. 3 0
      rankin-data-api/src/main/java/cn/rankin/data/api/trade/entity/OrderDetail.java
  7. 107 0
      rankin-data-api/src/main/java/cn/rankin/data/api/trade/entity/SystemSerialNumber.java
  8. 2 0
      rankin-data-api/src/main/java/cn/rankin/data/api/trade/vo/OrderDetailVo.java
  9. 2 0
      rankin-data-api/src/main/java/cn/rankin/data/api/trade/vo/OrderVo.java
  10. 13 0
      rankin-task/src/main/java/cn/rankin/task/repository/SerialNumberRepository.java
  11. 4 0
      rankin-task/src/main/java/cn/rankin/task/service/OrderService.java
  12. 68 0
      rankin-task/src/main/java/cn/rankin/task/service/SerialNumberService.java
  13. 1 0
      rankin-task/src/main/java/cn/rankin/task/task/order/OrderSplitTask.java
  14. 10 0
      rankin-trade-service/src/main/java/cn/rankin/tradeservice/configuration/Constant.java
  15. 1 0
      rankin-trade-service/src/main/java/cn/rankin/tradeservice/configuration/PersistConfiguration.java
  16. 6 0
      rankin-trade-service/src/main/java/cn/rankin/tradeservice/controller/OrderController.java
  17. 13 0
      rankin-trade-service/src/main/java/cn/rankin/tradeservice/repository/SerialNumberRepository.java
  18. 1 0
      rankin-trade-service/src/main/java/cn/rankin/tradeservice/service/OrderService.java
  19. 40 0
      rankin-trade-service/src/main/java/cn/rankin/tradeservice/service/SerialNumberService.java

+ 9 - 0
rankin-common-utils/src/main/java/cn/rankin/common/utils/constant/Constant.java

@@ -12,6 +12,15 @@ public class Constant {
 
     public final static String PLAT_MERCHANT_ID = "1";
 
+
+    // 序列号表的配置
+    public final static String ORDER_MODULE = "order-service";
+
+    public final static String MASTER_ORDER_CODE = "1";
+
+    public final static String SLAVE_ORDER_CODE = "2";
+
+
     public final static class EntryType {
         // {0,1,2} eid, mobile, wechatid
         public final static int EID = 0;

+ 29 - 0
rankin-common-utils/src/main/java/cn/rankin/common/utils/service/SerialNumberService.java

@@ -0,0 +1,29 @@
+package cn.rankin.common.utils.service;
+
+public interface SerialNumberService {
+
+
+    String generateSerialNumberByModelCode(String moduleCode);
+
+    /**
+     * 设置最小值
+     * @param value 最小值,要求:大于等于零
+     * @return      流水号生成器实例
+     */
+    SerialNumberService setMin(int value);
+
+    /**
+     * 设置最大值
+     * @param value 最大值,要求:小于等于Long.MAX_VALUE ( 9223372036854775807 )
+     * @return      流水号生成器实例
+     */
+    SerialNumberService setMax(long value);
+
+    /**
+     * 设置预生成流水号数量
+     * @param count 预生成数量
+     * @return      流水号生成器实例
+     */
+    SerialNumberService setPrepare(int count);
+}
+

+ 26 - 0
rankin-common-utils/src/main/java/cn/rankin/common/utils/service/impl/SerialNumberServiceImpl.java

@@ -0,0 +1,26 @@
+package cn.rankin.common.utils.service.impl;
+
+import cn.rankin.common.utils.service.SerialNumberService;
+
+public class SerialNumberServiceImpl implements SerialNumberService{
+
+    @Override
+    public SerialNumberService setMin(int value) {
+        return null;
+    }
+
+    @Override
+    public SerialNumberService setMax(long value) {
+        return null;
+    }
+
+    @Override
+    public SerialNumberService setPrepare(int count) {
+        return null;
+    }
+
+    @Override
+    public String generateSerialNumberByModelCode(String moduleCode) {
+        return null;
+    }
+}

+ 2 - 0
rankin-data-api/src/main/java/cn/rankin/data/api/trade/dto/OrderDTO.java

@@ -16,6 +16,8 @@ public class OrderDTO implements Serializable {
 
     private String uid;
 
+    private String serialNo;
+
     private String merchantId;
 
     private BigDecimal originPrice;

+ 3 - 0
rankin-data-api/src/main/java/cn/rankin/data/api/trade/entity/Order.java

@@ -28,6 +28,9 @@ public class Order implements Serializable {
     @Column(updatable = false)
     private String uid;
 
+    @Column(name = "serial_no", updatable = false, nullable = false, unique = true)
+    private String serialNo;
+
     @Column(name = "merchant_id")
     private String merchantId;
 

+ 3 - 0
rankin-data-api/src/main/java/cn/rankin/data/api/trade/entity/OrderDetail.java

@@ -31,6 +31,9 @@ public class OrderDetail implements Serializable {
     @Column(updatable = false)
     private String uid;
 
+    @Column(name = "serial_no", updatable = false, nullable = false, unique = true)
+    private String serialNo;
+
     @Column(name = "origin_price")
     private BigDecimal originPrice;
 

+ 107 - 0
rankin-data-api/src/main/java/cn/rankin/data/api/trade/entity/SystemSerialNumber.java

@@ -0,0 +1,107 @@
+package cn.rankin.data.api.trade.entity;
+
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import java.io.Serializable;
+
+/**
+ * 功能描述:序列号表模型
+ *
+ * @author :Ay 2015/11/23
+ */
+@Entity
+@Table(name="sys_serial_number")
+@DynamicInsert
+@DynamicUpdate
+public class SystemSerialNumber implements Serializable {
+
+    @Id
+    private String id;
+
+    /**
+     * 模块名称
+     */
+    @Column(name = "module_name", nullable = false)
+    private String moduleName;
+
+    /**
+     * 模块编码
+     */
+    @Column(name = "module_code", nullable = false)
+    private String moduleCode;
+
+    /**
+     * 流水号配置模板
+     */
+    @Column(name = "config_template")
+    private String configTemplate;
+
+    /**
+     * 序列号最大值
+     */
+    @Column(name = "max_serial", nullable = false)
+    private Long maxSerial;
+
+    /**
+     * 预生成流水号数量
+     */
+    @Column(name = "pre_max_num")
+    private Integer preMaxNum;
+
+    public Integer getPreMaxNum() {
+        return preMaxNum;
+    }
+
+    public void setPreMaxNum(Integer preMaxNum) {
+        this.preMaxNum = preMaxNum;
+    }
+
+    public String getModuleName() {
+        return moduleName;
+    }
+
+    public void setModuleName(String moduleName) {
+        this.moduleName = moduleName;
+    }
+
+    public String getModuleCode() {
+        return moduleCode;
+    }
+
+    public void setModuleCode(String moduleCode) {
+        this.moduleCode = moduleCode;
+    }
+
+    public String getConfigTemplate() {
+        return configTemplate;
+    }
+
+    public void setConfigTemplet(String configTemplate) {
+        this.configTemplate = configTemplate;
+    }
+
+    public Long getMaxSerial() {
+        return maxSerial;
+    }
+
+    public void setMaxSerial(Long maxSerial) {
+        this.maxSerial = maxSerial;
+    }
+
+    public SystemSerialNumber(String id){
+        this.id = id;
+    }
+
+    public  SystemSerialNumber(String id,String moduleCode){
+        this.id = id;
+        this.moduleCode = moduleCode;
+    }
+
+    public SystemSerialNumber(){}
+}
+

+ 2 - 0
rankin-data-api/src/main/java/cn/rankin/data/api/trade/vo/OrderDetailVo.java

@@ -26,6 +26,8 @@ public class OrderDetailVo implements Serializable {
 
     private String uid;
 
+    private String serialNo;
+
     private BigDecimal originPrice;
 
     private BigDecimal finalPrice;

+ 2 - 0
rankin-data-api/src/main/java/cn/rankin/data/api/trade/vo/OrderVo.java

@@ -20,6 +20,8 @@ public class OrderVo implements Serializable {
 
     private String uid;
 
+    private String serialNo;
+
     private String merchantId;
 
     private String merchantName;

+ 13 - 0
rankin-task/src/main/java/cn/rankin/task/repository/SerialNumberRepository.java

@@ -0,0 +1,13 @@
+package cn.rankin.task.repository;
+
+import cn.rankin.common.utils.jpa.BasicJpaRepository;
+import cn.rankin.data.api.trade.entity.SystemSerialNumber;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+
+public interface SerialNumberRepository extends BasicJpaRepository<SystemSerialNumber, String> {
+
+    @Modifying(clearAutomatically = true)
+    @Query(value = "update SystemSerialNumber sn set sn.maxSerial = sn.maxSerial + 1 where sn.moduleName = ?1 and sn.moduleCode = ?2")
+    SystemSerialNumber updateMaxSerial(String name, String code);
+}

+ 4 - 0
rankin-task/src/main/java/cn/rankin/task/service/OrderService.java

@@ -35,6 +35,9 @@ public class OrderService {
     @Autowired
     private OrderProductSnapshotRepository orderProductSnapshotRepository;
 
+    @Autowired
+    private SerialNumberService serialNumberService;
+
     public List<Order> findOrderForCompleteList(Integer limit) {
         List<Order> orderList = orderRepository.findCompleteOrders(limit);
         if (orderList.size() == 0) {
@@ -153,6 +156,7 @@ public class OrderService {
 
         for (OrderDetail orderDetail : orderDetailList) {
             orderDetail.setOrderStatus(OrderStatusEnum.FORSEND);
+            orderDetail.setSerialNo(serialNumberService.getSlaveOrderSN());
             OrderDetail one = orderDetailRepository.save(orderDetail);
             String detailId = one.getId();
             List<String> goodsIdList = new ArrayList<>();

+ 68 - 0
rankin-task/src/main/java/cn/rankin/task/service/SerialNumberService.java

@@ -0,0 +1,68 @@
+package cn.rankin.task.service;
+
+import cn.rankin.common.utils.constant.Constant;
+import cn.rankin.data.api.trade.entity.SystemSerialNumber;
+import cn.rankin.task.repository.SerialNumberRepository;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.transaction.Transactional;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Random;
+
+@Service
+@Slf4j
+public class SerialNumberService {
+
+//    @Autowired
+//    private SerialNumberRepository serialNumberRepository;
+//
+//    @Transactional
+//    public Long getMaxSerial(String name, String code) {
+//        SystemSerialNumber systemSerialNumber = serialNumberRepository.updateMaxSerial(name, code);
+//        if (systemSerialNumber == null) {
+//            this.insertSerialNumber(name, code);
+//            systemSerialNumber = serialNumberRepository.updateMaxSerial(name, code);
+//        }
+//        return systemSerialNumber.getMaxSerial();
+//    }
+
+//    @Transactional
+//    public void insertSerialNumber(String name, String code) {
+//        SystemSerialNumber systemSerialNumber = new SystemSerialNumber();
+//        systemSerialNumber.setMaxSerial(0L);
+//        systemSerialNumber.setModuleName(name);
+//        systemSerialNumber.setModuleCode(code);
+//        systemSerialNumber.setPreMaxNum(10);
+//        serialNumberRepository.save(systemSerialNumber);
+//    }
+
+    @Transactional
+    public String getMasterOrderSN() {
+        String name = Constant.ORDER_MODULE;
+        String code = Constant.MASTER_ORDER_CODE;
+        return getSerialNumber(name, code);
+    }
+
+    @Transactional
+    public String getSlaveOrderSN() {
+        String name = Constant.ORDER_MODULE;
+        String code = Constant.SLAVE_ORDER_CODE;
+        return getSerialNumber(name, code);
+    }
+
+    @Transactional
+    public String getSerialNumber(String name, String code) {
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
+
+        Date date = new Date();
+        String dateStr = simpleDateFormat.format(date);
+
+        Random random = new Random();
+        int randNum = (int) (random.nextDouble() * (99999 - 10000 + 1)) + 10000;// 获取5位随机数
+
+        return String.format("%s%05d%s", dateStr, randNum, code);// 当前时间
+    }
+}

+ 1 - 0
rankin-task/src/main/java/cn/rankin/task/task/order/OrderSplitTask.java

@@ -13,6 +13,7 @@ import cn.rankin.data.api.trade.entity.OrderDetail;
 import cn.rankin.data.api.trade.entity.OrderGoods;
 import cn.rankin.task.service.OrderService;
 import cn.rankin.task.service.ProductService;
+import cn.rankin.task.service.SerialNumberService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;

+ 10 - 0
rankin-trade-service/src/main/java/cn/rankin/tradeservice/configuration/Constant.java

@@ -0,0 +1,10 @@
+package cn.rankin.tradeservice.configuration;
+
+public class Constant {
+
+    public final static String ORDER_MODULE = "order-service";
+
+    public final static String MASTER_ORDER_CODE = "1";
+
+    public final static String SLAVE_ORDER_CODE = "2";
+}

+ 1 - 0
rankin-trade-service/src/main/java/cn/rankin/tradeservice/configuration/PersistConfiguration.java

@@ -4,6 +4,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.context.EnvironmentAware;
+import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.core.env.Environment;
 

+ 6 - 0
rankin-trade-service/src/main/java/cn/rankin/tradeservice/controller/OrderController.java

@@ -9,6 +9,7 @@ import cn.rankin.data.api.trade.entity.OrderProductSnapshot;
 import cn.rankin.tradeservice.service.OrderDetailService;
 import cn.rankin.tradeservice.service.OrderProductSnapshotService;
 import cn.rankin.tradeservice.service.OrderService;
+import cn.rankin.tradeservice.service.SerialNumberService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.propertyeditors.CustomDateEditor;
 import org.springframework.web.bind.ServletRequestDataBinder;
@@ -37,9 +38,14 @@ public class OrderController {
     @Autowired
     private OrderDetailService orderDetailService;
 
+    @Autowired
+    private SerialNumberService serialNumberService;
+
     // cms web需要做前置校验
     @RequestMapping(method = RequestMethod.POST)
     public APIResult<Order> create(@RequestBody OrderDTO orderDTO) {
+        String serialNo = serialNumberService.getMasterOrderSN();
+        orderDTO.setSerialNo(serialNo);
         return orderService.create(orderDTO);
     }
 

+ 13 - 0
rankin-trade-service/src/main/java/cn/rankin/tradeservice/repository/SerialNumberRepository.java

@@ -0,0 +1,13 @@
+package cn.rankin.tradeservice.repository;
+
+import cn.rankin.common.utils.jpa.BasicJpaRepository;
+import cn.rankin.data.api.trade.entity.SystemSerialNumber;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+
+public interface SerialNumberRepository extends BasicJpaRepository<SystemSerialNumber, String> {
+
+    @Modifying(clearAutomatically = true)
+    @Query(value = "update SystemSerialNumber sn set sn.maxSerial = sn.maxSerial + 1 where sn.moduleName = ?1 and sn.moduleCode = ?2")
+    Integer updateMaxSerial(String name, String code);
+}

+ 1 - 0
rankin-trade-service/src/main/java/cn/rankin/tradeservice/service/OrderService.java

@@ -67,6 +67,7 @@ public class OrderService {
         Order order = convert(orderDTO);
         order.setOrderStatus(OrderStatusEnum.UNPAID);
         order.setStatus(BaseStatusEnum.NORMAL);
+        order.setSerialNo(orderDTO.getSerialNo());
         order.setSplitStatus(OrderSplitStatusEnum.NO);
         order = orderRepository.save(order);
         String orderId = order.getId();

+ 40 - 0
rankin-trade-service/src/main/java/cn/rankin/tradeservice/service/SerialNumberService.java

@@ -0,0 +1,40 @@
+package cn.rankin.tradeservice.service;
+
+import cn.rankin.tradeservice.configuration.Constant;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.transaction.Transactional;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Random;
+
+@Service
+@Slf4j
+public class SerialNumberService {
+
+    @Transactional
+    public String getMasterOrderSN() {
+        String name = Constant.ORDER_MODULE;
+        String code = Constant.MASTER_ORDER_CODE;
+        return getSerialNumber(name, code);
+    }
+
+    public String getSlaveOrderSN() {
+        String name = Constant.ORDER_MODULE;
+        String code = Constant.SLAVE_ORDER_CODE;
+        return getSerialNumber(name, code);
+    }
+
+    public String getSerialNumber(String name, String code) {
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
+
+        Date date = new Date();
+        String dateStr = simpleDateFormat.format(date);
+
+        Random random = new Random();
+        int randNum = (int) (random.nextDouble() * (99999 - 10000 + 1)) + 10000;// 获取5位随机数
+
+        return String.format("%s%05d%s", dateStr, randNum, code);// 当前时间
+    }
+}