ltt il y a 1 an
Parent
commit
c273474ef6
22 fichiers modifiés avec 1067 ajouts et 25 suppressions
  1. 18 0
      business-common/business-common-core/pom.xml
  2. 12 0
      business-common/business-common-redis/src/main/java/com/sckw/redis/config/RedissonConfig.java
  3. 85 0
      business-common/business-common-redis/src/main/java/com/sckw/redis/utils/GenOrderCode.java
  4. 6 0
      business-modules/business-mine/pom.xml
  5. 0 22
      business-modules/business-mine/src/main/java/com/sckw/mine/controller/MIneController.java
  6. 74 0
      business-modules/business-mine/src/main/java/com/sckw/mine/controller/MineController.java
  7. 67 0
      business-modules/business-mine/src/main/java/com/sckw/mine/entity/KwBusinessActionTrack.java
  8. 6 1
      business-modules/business-mine/src/main/java/com/sckw/mine/entity/KwBusinessMineOrder.java
  9. 14 1
      business-modules/business-mine/src/main/java/com/sckw/mine/entity/req/MineAddParam.java
  10. 41 0
      business-modules/business-mine/src/main/java/com/sckw/mine/entity/req/MineOrderPageListParam.java
  11. 141 0
      business-modules/business-mine/src/main/java/com/sckw/mine/entity/res/MineOrderDetailRes.java
  12. 141 0
      business-modules/business-mine/src/main/java/com/sckw/mine/entity/res/MineOrderPageListRes.java
  13. 22 0
      business-modules/business-mine/src/main/java/com/sckw/mine/entity/res/OrderFlowStepRes.java
  14. 18 0
      business-modules/business-mine/src/main/java/com/sckw/mine/mapper/KwBusinessActionTrackMapper.java
  15. 11 0
      business-modules/business-mine/src/main/java/com/sckw/mine/mapper/MineMapper.java
  16. 27 0
      business-modules/business-mine/src/main/java/com/sckw/mine/mapper/MineOrderMapper.java
  17. 11 0
      business-modules/business-mine/src/main/java/com/sckw/mine/mapper/TransportOrderNoMapper.java
  18. 234 0
      business-modules/business-mine/src/main/java/com/sckw/mine/service/MineService.java
  19. 21 0
      business-modules/business-mine/src/main/resources/mapper/KwBusinessActionTrackMapper.xml
  20. 98 0
      business-modules/business-mine/src/main/resources/mapper/MineOrderMapper.xml
  21. 5 0
      business-modules/business-mine/src/main/resources/mapper/TransportOrderNoMapper.xml
  22. 15 1
      business-modules/business-usual-transport/src/main/java/com/sckw/usual/service/OrderActionService.java

+ 18 - 0
business-common/business-common-core/pom.xml

@@ -24,6 +24,12 @@
             <version>2.0.49</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>business-common-redis</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-beans</artifactId>
@@ -61,5 +67,17 @@
             <version>6.1.5</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-webmvc</artifactId>
+            <version>6.1.5</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.aspectj</groupId>
+            <artifactId>aspectjweaver</artifactId>
+            <version>1.9.21</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 </project>

+ 12 - 0
business-common/business-common-redis/src/main/java/com/sckw/redis/config/RedissonConfig.java

@@ -7,7 +7,9 @@ import com.fasterxml.jackson.databind.SerializationFeature;
 import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
 import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
 import com.sckw.redis.utils.RedissonUtils;
+import org.redisson.Redisson;
 import org.redisson.api.RedissonClient;
+import org.redisson.config.Config;
 import org.springframework.boot.autoconfigure.AutoConfiguration;
 import org.springframework.context.annotation.Bean;
 import org.springframework.data.redis.connection.RedisConnectionFactory;
@@ -15,6 +17,8 @@ import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
 import org.springframework.data.redis.serializer.StringRedisSerializer;
 
+import java.io.IOException;
+
 /**
  * @Author xucaiqin
  * @date 2023-06-01 14:50:29
@@ -61,4 +65,12 @@ public class RedissonConfig {
         objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
         return new Jackson2JsonRedisSerializer<>(objectMapper, Object.class);
     }
+
+    //@Bean
+    //public RedissonClient redisson() throws IOException {
+    //    // 本例子使用的是yaml格式的配置文件,读取使用Config.fromYAML,如果是Json文件,则使用Config.fromJSON
+    //    Config config = Config.fromYAML(RedissonConfig.class.getClassLoader().getResource("redisson-config.yml"));
+    //    return Redisson.create(config);
+    //}
+
 }

+ 85 - 0
business-common/business-common-redis/src/main/java/com/sckw/redis/utils/GenOrderCode.java

@@ -0,0 +1,85 @@
+package com.sckw.redis.utils;
+
+import org.redisson.api.RAtomicLong;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
+import org.springframework.stereotype.Component;
+
+import java.util.Random;
+
+/**
+ * @desc:
+ * @author: Lt
+ * @date: 2024-05-27
+ */
+@Component
+public class GenOrderCode {
+    // 创建Redisson客户端实例
+    private final RedissonClient redissonClient;
+
+    public GenOrderCode(RedissonClient redissonClient) {
+        this.redissonClient = redissonClient;
+    }
+
+    /**
+     * 生成指定长度的订单号
+     *
+     * @param length   订单总长度
+     * @param prefix   前缀 当天日期-yyMMdd
+     * @param lockKey 分布式锁id
+     * @return 订单号
+     */
+    public String genOrderCode(int length, String prefix, String lockKey) {
+        // 检查参数合法性
+        if (length <= 0) {
+            throw new RuntimeException("订单总长度或随机码长度不能小于0");
+        }
+        if (length <= prefix.length()) {
+            throw new RuntimeException("订单总长度长度小于前缀长度");
+        }
+
+        // 获取分布式锁
+        RLock lock = redissonClient.getLock(lockKey);
+        lock.lock();
+        try {
+            // 从Redis中获取递增的序列号
+            RAtomicLong counter = redissonClient.getAtomicLong("counter");
+            // 递增计数器
+            long incrementedValue = counter.incrementAndGet();
+            String counterValue = String.valueOf(incrementedValue);
+            int incrLength = counterValue.length();
+
+            // 如果前缀长度加数字自增长度大于指定位数,则直接使用自增数据
+            if (incrLength + prefix.length() > length) {
+                return prefix + counterValue;
+            }
+
+            // 生成随机码
+            int randomLength = length - incrLength;
+            String randomAlphabetic = generateRandomAlphabeticString(randomLength);
+            // 格式化订单号
+            return prefix + randomAlphabetic + counterValue;
+        } finally {
+            // 释放锁
+            lock.unlock();
+        }
+    }
+
+
+    public static String generateRandomAlphabeticString(int length) {
+        if (length < 0) {
+            throw new IllegalArgumentException("Length cannot be negative.");
+        }
+
+        StringBuilder sb = new StringBuilder(length);
+        Random random = new Random();
+        String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+        for (int i = 0; i < length; i++) {
+            int index = random.nextInt(alphabet.length());
+            sb.append(alphabet.charAt(index));
+        }
+
+        return sb.toString();
+    }
+}

+ 6 - 0
business-modules/business-mine/pom.xml

@@ -38,5 +38,11 @@
             <artifactId>business-common-datasource</artifactId>
             <version>1.0.0</version>
         </dependency>
+
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>business-common-redis</artifactId>
+            <version>1.0.0</version>
+        </dependency>
     </dependencies>
 </project>

+ 0 - 22
business-modules/business-mine/src/main/java/com/sckw/mine/controller/MIneController.java

@@ -1,22 +0,0 @@
-package com.sckw.mine.controller;
-
-import com.sckw.core.web.response.HttpResult;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @desc:
- * @author: Lt
- * @date: 2024-05-24
- */
-@RestController
-@RequestMapping("/mine")
-public class MIneController {
-
-    @PostMapping(value = "/order/add")
-    public HttpResult mineOrderAdd()
-    {
-        return HttpResult.ok("hello world");
-    }
-}

+ 74 - 0
business-modules/business-mine/src/main/java/com/sckw/mine/controller/MineController.java

@@ -0,0 +1,74 @@
+package com.sckw.mine.controller;
+
+import com.sckw.core.web.response.HttpResult;
+import com.sckw.mine.entity.req.MineOrderPageListParam;
+import com.sckw.mine.entity.req.MineAddParam;
+import com.sckw.mine.service.MineService;
+import jakarta.validation.Valid;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @desc:
+ * @author: Lt
+ * @date: 2024-05-24
+ */
+@RestController
+@RequestMapping("/mine")
+@RequiredArgsConstructor
+public class MineController {
+
+    @Autowired
+    private MineService mineService;
+
+    /**
+    * @Description: 订单新增
+    * @Author: Lt
+    * @Date: 2024/5/27 15:21
+    */
+    @PostMapping(value = "/order/add")
+    public HttpResult mineOrderAdd(@RequestBody @Valid MineAddParam mineAddParam) throws Exception {
+        return HttpResult.ok(mineService.mineOrderAdd(mineAddParam));
+    }
+
+    /**
+    * @Description: 分页查询
+    * @Author: Lt
+    * @Date: 2024/5/27 15:21
+    */
+    @PostMapping(value = "/order/pageList")
+    public HttpResult pageList(@RequestBody MineOrderPageListParam param){
+        return HttpResult.ok(mineService.pageList(param));
+    }
+
+    /**
+     * @Description: 订单-详情
+     * @Author: Lt
+     * @Date: 2024/5/8 20:03
+     */
+    @GetMapping("/order/detail")
+    public HttpResult detail(@RequestParam("orderId") String orderId)
+    {
+        return HttpResult.ok(mineService.detail(orderId));
+    }
+
+    /**
+     * @Description: 订单列表状态统计
+     * @Author: Lt
+     * @Date: 2024/5/11 15:45
+     */
+    @GetMapping("/order/getStatusCountListInSingleQuery")
+    public HttpResult getStatusCountListInSingleQuery()
+    {
+        return HttpResult.ok(mineService.getStatusCountListInSingleQuery());
+    }
+
+    @GetMapping("/order/getActionTrackByMineOrderId")
+    public HttpResult getActionTrackByMineOrderId(@RequestParam("orderId") String orderId)
+    {
+        return HttpResult.ok(mineService.getActionTrackByMineOrderId(orderId));
+    }
+
+}

+ 67 - 0
business-modules/business-mine/src/main/java/com/sckw/mine/entity/KwBusinessActionTrack.java

@@ -0,0 +1,67 @@
+package com.sckw.mine.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @desc:
+ * @author: Lt
+ * @date: 2024-05-27
+ */
+@Data
+public class KwBusinessActionTrack implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    private Long id;
+
+    /**
+     * main_id
+     */
+    private Long mineOrderId;
+
+    /**
+     * 操作内容
+     */
+    private String content;
+
+    /**
+     * remark
+     */
+    private String remark;
+
+    /*
+    订单状态
+     */
+    private Integer status;
+
+    /**
+     * create_by
+     */
+    private String createBy;
+
+    /**
+     * update_by
+     */
+    private String updateBy;
+
+    /**
+     * create_time
+     */
+    private Date createTime;
+
+    /**
+     * update_time
+     */
+    private Date updateTime;
+
+    /**
+     * del_flag
+     */
+    private Integer delFlag;
+}

+ 6 - 1
business-modules/business-mine/src/main/java/com/sckw/mine/entity/KwBusinessMineOrder.java

@@ -53,7 +53,7 @@ public class KwBusinessMineOrder implements Serializable {
     /**
      * 付款单位id
      */
-    private Long fkEptId;
+    private Long fkDeptId;
 
     /**
      * 付款单位
@@ -90,6 +90,11 @@ public class KwBusinessMineOrder implements Serializable {
      */
     private Integer status;
 
+    /*
+    租户ID
+     */
+    private String tenantId;
+
     /*
     生产流程
      */

+ 14 - 1
business-modules/business-mine/src/main/java/com/sckw/mine/entity/req/MineAddParam.java

@@ -1,7 +1,11 @@
 package com.sckw.mine.entity.req;
 
+import com.baomidou.mybatisplus.annotation.EnumValue;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
 
 import java.math.BigDecimal;
 import java.util.Date;
@@ -11,6 +15,7 @@ import java.util.Date;
  * @author: Lt
  * @date: 2024-05-24
  */
+@Data
 public class MineAddParam {
 
     /*
@@ -58,7 +63,6 @@ public class MineAddParam {
     /*
     矿料id
      */
-    @NotBlank(message = "矿料id必填")
     private String mineId;
 
     /*
@@ -94,6 +98,15 @@ public class MineAddParam {
     private String workFlow;
 
 
+    @NotNull(message = "状态不能是空")
+    private Integer status;
+
+    /*
+    是否物流承接
+     */
+    private Integer isTransport;
+
+
 
 
 

+ 41 - 0
business-modules/business-mine/src/main/java/com/sckw/mine/entity/req/MineOrderPageListParam.java

@@ -0,0 +1,41 @@
+package com.sckw.mine.entity.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @desc:
+ * @author: Lt
+ * @date: 2024-05-27
+ */
+@Data
+public class MineOrderPageListParam {
+    private final Integer page = 1;
+
+    private final Integer pageSize = 10;
+
+    /*
+    矿山订单号
+     */
+    private String mineOrderNo;
+
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date startTime;
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endTime;
+
+    /*
+    订单来源
+     */
+    private Integer orderSource;
+
+    /*
+    租户ID
+     */
+    private String tenantId;
+
+
+
+}

+ 141 - 0
business-modules/business-mine/src/main/java/com/sckw/mine/entity/res/MineOrderDetailRes.java

@@ -0,0 +1,141 @@
+package com.sckw.mine.entity.res;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @desc:
+ * @author: Lt
+ * @date: 2024-05-27
+ */
+@Data
+public class MineOrderDetailRes {
+    /**
+     * id
+     */
+    private String id;
+
+    /**
+     * 订单编号
+     */
+    private String mineOrderNo;
+
+    /**
+     * 订单来源
+     */
+    private Integer orderSource;
+    private String orderSourceStr;
+
+    /**
+     * 采购企业id
+     */
+    private String cgCompanyId;
+
+    /**
+     * 采购企业
+     */
+    private String cgCompany;
+
+    /**
+     * 采购联系方式
+     */
+    private String cgCompanyConcat;
+
+    /**
+     * 采购联系人昵称
+     */
+    private String cgCompanyName;
+
+    /**
+     * 付款单位id
+     */
+    private Long fkDeptId;
+
+    /**
+     * 付款单位
+     */
+    private String fkDept;
+
+    /**
+     * 收款部门
+     */
+    private String skDeptId;
+
+    /**
+     * 收款部门
+     */
+    private String skDept;
+
+    /**
+     * 客户下单时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date customerOrderTime;
+
+    /**
+     * 交货截止时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date deliveryCutoffTime;
+
+    /**
+     * 是否物流承接
+     */
+    private Integer isTransport;
+
+    /**
+     * 订单状态
+     */
+    private Integer status;
+
+    private String statusStr;
+
+    /*
+    生产流程
+     */
+    private String workFlow;
+
+    /**
+     * create_by
+     */
+    private String createBy;
+
+    /**
+     * update_by
+     */
+    private String updateBy;
+
+    /**
+     * create_time
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    /*
+    矿料管理id
+     */
+    private String mineId;
+
+    /*
+    矿料体积
+     */
+    private String mineVol;
+
+    /*
+    采购数量
+     */
+    private BigDecimal purchaseNum;
+
+    /*
+    矿料重量
+     */
+    private BigDecimal mineWeight;
+
+    private String transportOrderNo;
+
+
+
+}

+ 141 - 0
business-modules/business-mine/src/main/java/com/sckw/mine/entity/res/MineOrderPageListRes.java

@@ -0,0 +1,141 @@
+package com.sckw.mine.entity.res;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @desc:
+ * @author: Lt
+ * @date: 2024-05-27
+ */
+@Data
+public class MineOrderPageListRes {
+    /**
+     * id
+     */
+    private String id;
+
+    /**
+     * 订单编号
+     */
+    private String mineOrderNo;
+
+    /**
+     * 订单来源
+     */
+    private Integer orderSource;
+    private String orderSourceStr;
+
+    /**
+     * 采购企业id
+     */
+    private String cgCompanyId;
+
+    /**
+     * 采购企业
+     */
+    private String cgCompany;
+
+    /**
+     * 采购联系方式
+     */
+    private String cgCompanyConcat;
+
+    /**
+     * 采购联系人昵称
+     */
+    private String cgCompanyName;
+
+    /**
+     * 付款单位id
+     */
+    private Long fkDeptId;
+
+    /**
+     * 付款单位
+     */
+    private String fkDept;
+
+    /**
+     * 收款部门
+     */
+    private String skDeptId;
+
+    /**
+     * 收款部门
+     */
+    private String skDept;
+
+    /**
+     * 客户下单时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date customerOrderTime;
+
+    /**
+     * 交货截止时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date deliveryCutoffTime;
+
+    /**
+     * 是否物流承接
+     */
+    private Integer isTransport;
+
+    /**
+     * 订单状态
+     */
+    private Integer status;
+
+    private String statusStr;
+
+    /*
+    生产流程
+     */
+    private String workFlow;
+
+    /**
+     * create_by
+     */
+    private String createBy;
+
+    /**
+     * update_by
+     */
+    private String updateBy;
+
+    /**
+     * create_time
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    /*
+    矿料管理id
+     */
+    private String mineId;
+
+    /*
+    矿料体积
+     */
+    private String mineVol;
+
+    /*
+    采购数量
+     */
+    private BigDecimal purchaseNum;
+
+    /*
+    矿料重量
+     */
+    private BigDecimal mineWeight;
+
+    private String transportOrderNo;
+
+
+
+}

+ 22 - 0
business-modules/business-mine/src/main/java/com/sckw/mine/entity/res/OrderFlowStepRes.java

@@ -0,0 +1,22 @@
+package com.sckw.mine.entity.res;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @desc:
+ * @author: Lt
+ * @date: 2024-05-28
+ */
+@Getter
+@Setter
+public class OrderFlowStepRes {
+
+    private String name;
+    private String color;
+
+    public OrderFlowStepRes(String name, String color) {
+        this.name = name;
+        this.color = color;
+    }
+}

+ 18 - 0
business-modules/business-mine/src/main/java/com/sckw/mine/mapper/KwBusinessActionTrackMapper.java

@@ -0,0 +1,18 @@
+package com.sckw.mine.mapper;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.mine.entity.KwBusinessActionTrack;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+@DS("mine")
+public interface KwBusinessActionTrackMapper extends BaseMapper<KwBusinessActionTrack> {
+
+    List<KwBusinessActionTrack> findByMainOrderIdOrderByCreateTime(@Param("orderId") String orderId);
+
+}

+ 11 - 0
business-modules/business-mine/src/main/java/com/sckw/mine/mapper/MineMapper.java

@@ -0,0 +1,11 @@
+package com.sckw.mine.mapper;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.mine.entity.KwBusinessMine;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+@DS("mine")
+public interface MineMapper extends BaseMapper<KwBusinessMine> {
+}

+ 27 - 0
business-modules/business-mine/src/main/java/com/sckw/mine/mapper/MineOrderMapper.java

@@ -0,0 +1,27 @@
+package com.sckw.mine.mapper;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.mine.entity.KwBusinessMineOrder;
+import com.sckw.mine.entity.req.MineOrderPageListParam;
+import com.sckw.mine.entity.res.MineOrderDetailRes;
+import com.sckw.mine.entity.res.MineOrderPageListRes;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author lt
+ */
+@Mapper
+@DS("mine")
+public interface MineOrderMapper extends BaseMapper<KwBusinessMineOrder> {
+
+    List<MineOrderPageListRes> mineOrderPageList(@Param("param") MineOrderPageListParam param);
+    MineOrderDetailRes selectOrderById(String orderId);
+
+    List<Map<String, Object>> countByStatus();
+
+}

+ 11 - 0
business-modules/business-mine/src/main/java/com/sckw/mine/mapper/TransportOrderNoMapper.java

@@ -0,0 +1,11 @@
+package com.sckw.mine.mapper;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.mine.entity.KwBusinessTransportOrderNo;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+@DS("mine")
+public interface TransportOrderNoMapper extends BaseMapper<KwBusinessTransportOrderNo> {
+}

+ 234 - 0
business-modules/business-mine/src/main/java/com/sckw/mine/service/MineService.java

@@ -0,0 +1,234 @@
+package com.sckw.mine.service;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.sckw.core.model.page.PageRes;
+import com.sckw.core.utils.IdWorker;
+import com.sckw.core.utils.TenantUtil;
+import com.sckw.core.web.response.HttpResult;
+import com.sckw.mine.entity.KwBusinessActionTrack;
+import com.sckw.mine.entity.KwBusinessMine;
+import com.sckw.mine.entity.KwBusinessMineOrder;
+import com.sckw.mine.entity.KwBusinessTransportOrderNo;
+import com.sckw.mine.entity.req.MineOrderPageListParam;
+import com.sckw.mine.entity.req.MineAddParam;
+import com.sckw.mine.entity.res.MineOrderDetailRes;
+import com.sckw.mine.entity.res.MineOrderPageListRes;
+import com.sckw.mine.entity.res.OrderFlowStepRes;
+import com.sckw.mine.enums.MineStatusEnum;
+import com.sckw.mine.mapper.KwBusinessActionTrackMapper;
+import com.sckw.mine.mapper.MineMapper;
+import com.sckw.mine.mapper.MineOrderMapper;
+import com.sckw.mine.mapper.TransportOrderNoMapper;
+import com.sckw.redis.utils.GenOrderCode;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ThreadLocalRandom;
+import java.util.stream.Collectors;
+
+/**
+ * @desc:
+ * @author: Lt
+ * @date: 2024-05-27
+ */
+@Service
+public class MineService {
+
+    private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
+
+    @Autowired
+    MineOrderMapper mineOrderMapper;
+
+    @Autowired
+    TransportOrderNoMapper transportOrderNoMapper;
+
+    @Autowired
+    MineMapper mineMapper;
+
+    @Autowired
+    KwBusinessActionTrackMapper kwBusinessActionTrackMapper;
+
+    @Autowired
+    private GenOrderCode genOrderCode;
+
+    /**
+     * @Description: 矿山域订单添加
+     * @Author: Lt
+     * @Date: 2024/5/27 9:43
+     */
+    public String mineOrderAdd(MineAddParam mineAddParam) throws Exception {
+        try {
+            Long orderId = new IdWorker(1L).nextId();
+            KwBusinessMineOrder kwBusinessMineOrder = BeanUtil.copyProperties(mineAddParam, KwBusinessMineOrder.class);
+            //生成订单编号
+            String mineOrderNo = "M" + LocalDateTime.now().format(FORMATTER) + ThreadLocalRandom.current().nextInt(1000, 9999);
+
+            //生成物流订单编号- 空了再来封装了
+            LocalDate currentDate = LocalDate.now();
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
+            String orderPrefix = currentDate.format(formatter);
+            String key = "O" + orderPrefix;
+            String usualTransportOrderNo = genOrderCode.genOrderCode(12, key, key);
+            kwBusinessMineOrder.setId(orderId);
+            kwBusinessMineOrder.setMineOrderNo(mineOrderNo);
+            kwBusinessMineOrder.setTenantId(TenantUtil.getTenant());   //租户id
+            int insert = mineOrderMapper.insert(kwBusinessMineOrder);
+            if (insert > 0) {
+                //生成kw_business_transport_order_no
+                KwBusinessTransportOrderNo kwBusinessTransportOrderNo = new KwBusinessTransportOrderNo();
+                kwBusinessTransportOrderNo.setId(new IdWorker(1L).nextId());
+                kwBusinessTransportOrderNo.setMainOrderId(orderId);
+                kwBusinessTransportOrderNo.setTransportOrderNo(usualTransportOrderNo);
+                transportOrderNoMapper.insert(kwBusinessTransportOrderNo);
+
+                KwBusinessMine kwBusinessMine = new KwBusinessMine();
+                kwBusinessMine.setId(new IdWorker(1L).nextId());
+                kwBusinessMine.setMainOrderId(orderId);
+                kwBusinessMine.setMineVol(mineAddParam.getMineVol());
+                kwBusinessMine.setMineWeight(mineAddParam.getMineWeight());
+                kwBusinessMine.setPurchaseNum(mineAddParam.getPurchaseNum());
+                mineMapper.insert(kwBusinessMine);
+            }
+            //添加操作记录
+            saveActionTrack(orderId, mineAddParam.getStatus(), null);
+
+            return "添加成功";
+        } catch (Exception e) {
+            throw new Exception(e.getMessage());
+        }
+
+    }
+
+    /**
+     * @Description: 列表分页查询
+     * @Author: Lt
+     * @Date: 2024/5/27 14:49
+     */
+    public HttpResult pageList(MineOrderPageListParam param) {
+        PageHelper.startPage(param.getPage(), param.getPageSize());
+        List<MineOrderPageListRes> businessTruckPageListRes = mineOrderMapper.mineOrderPageList(param);
+        businessTruckPageListRes.forEach(e -> {
+            if (ObjectUtils.isNotNull(e.getOrderSource())) {
+                e.setOrderSourceStr(e.getOrderSource() == 1 ? "生产自建" : "销售流转");
+            }
+        });
+        return HttpResult.ok(new PageRes<>(new PageInfo<>(businessTruckPageListRes)));
+    }
+
+    /**
+     * @Description: 订单详情
+     * @Author: Lt
+     * @Date: 2024/5/27 0027 15:54
+     */
+    public MineOrderDetailRes detail(String orderId) {
+        MineOrderDetailRes kwBusinessMineOrder = mineOrderMapper.selectOrderById(orderId);
+        if (ObjectUtils.isNull(kwBusinessMineOrder)) {
+            throw new RuntimeException("当前数据不存在");
+        }
+        if (ObjectUtils.isNotNull(kwBusinessMineOrder.getStatus())) {
+            kwBusinessMineOrder.setStatusStr(MineStatusEnum.getNameByCode(kwBusinessMineOrder.getStatus()));
+        }
+        if (ObjectUtils.isNotNull(kwBusinessMineOrder.getOrderSource())) {
+            kwBusinessMineOrder.setOrderSourceStr(kwBusinessMineOrder.getOrderSource() == 1 ? "生产自建" : "销售流转");
+        }
+
+        return kwBusinessMineOrder;
+
+    }
+
+    /**
+     * @Description: 操作记录
+     * @Author: Lt
+     * @Date: 2024/5/27 15:37
+     */
+    public void saveActionTrack(Long mainId, Integer status, String remark) {
+        KwBusinessActionTrack kwBusinessActionTrack = new KwBusinessActionTrack();
+        kwBusinessActionTrack.setId(new IdWorker(1L).nextId());
+        kwBusinessActionTrack.setMineOrderId(mainId);
+        kwBusinessActionTrack.setContent("订单" + MineStatusEnum.getNameByCode(status));
+        kwBusinessActionTrack.setStatus(status);
+        kwBusinessActionTrack.setRemark(remark);
+        kwBusinessActionTrackMapper.insert(kwBusinessActionTrack);
+    }
+
+
+    public List<Map<String, Object>> getStatusCountListInSingleQuery() {
+        // 查询每个状态的计数
+        List<Map<String, Object>> statusCounts = mineOrderMapper.countByStatus();
+
+        // 将查询结果转换为所需的格式
+        List<MineStatusEnum> sortedEnums = MineStatusEnum.getSortList();
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (MineStatusEnum enumItem : sortedEnums) {
+            Map<String, Object> statusCount = statusCounts.stream()
+                    .filter(c -> enumItem.getCode().equals(c.get("status")))
+                    .findFirst()
+                    .orElseGet(() -> Map.of("status", enumItem.getCode(), "count", 0));
+            result.add(
+                    Map.of(
+                            "key", enumItem.getMsg(),
+                            "value", enumItem.getCode(),
+                            "data", statusCount.get("count")
+                    )
+            );
+        }
+        return result;
+    }
+
+    public List<OrderFlowStepRes> getActionTrackByMineOrderId(String orderId) {
+        // 定义订单的标准流程
+        List<MineStatusEnum> orderFlowEnums = MineStatusEnum.getSortList();
+        List<OrderFlowStepRes> orderFlowSteps = orderFlowEnums.stream()
+                .map(e -> new OrderFlowStepRes(e.getMsg(), "gray"))
+                .collect(Collectors.toList());
+
+        // 获取订单的操作记录
+        List<KwBusinessActionTrack> actionTracks = kwBusinessActionTrackMapper.findByMainOrderIdOrderByCreateTime(orderId);
+
+        boolean orderCompleted = false;
+        int completedStepIndex = -1;
+
+        for (KwBusinessActionTrack actionTrack : actionTracks) {
+            if (actionTrack.getStatus().equals(MineStatusEnum.EIGHT.getCode())) {
+                orderCompleted = true;
+                break;
+            }
+            for (int i = 0; i < orderFlowSteps.size(); i++) {
+                OrderFlowStepRes step = orderFlowSteps.get(i);
+                if (step.getName().equals(MineStatusEnum.getNameByCode(actionTrack.getStatus()))) {
+                    step.setColor("green");
+                    completedStepIndex = i;
+                }
+            }
+        }
+
+        // 设置提前完结步骤
+        if (orderCompleted && completedStepIndex != -1) {
+            OrderFlowStepRes completedStep = orderFlowSteps.get(completedStepIndex);
+            completedStep.setName(completedStep.getName() + "(完结订单)");
+            completedStep.setColor("orange");
+
+            for (int i = 0; i < completedStepIndex; i++) {
+                orderFlowSteps.get(i).setColor("green");
+            }
+
+            for (int i = completedStepIndex + 1; i < orderFlowSteps.size(); i++) {
+                orderFlowSteps.get(i).setColor("gray");
+            }
+        }
+
+        return orderFlowSteps;
+    }
+
+
+}

+ 21 - 0
business-modules/business-mine/src/main/resources/mapper/KwBusinessActionTrackMapper.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sckw.mine.mapper.KwBusinessActionTrackMapper">
+
+    <sql id="Base_Column_List">
+        id,
+                mine_order_id,
+                content,
+                remark,
+                `status`,
+                create_by,
+                update_by,
+                create_time,
+                update_time,
+                del_flag
+    </sql>
+
+    <select id="findByMainOrderIdOrderByCreateTime" resultType="com.sckw.mine.entity.KwBusinessActionTrack">
+        select <include refid="Base_Column_List" /> from kw_business_action_track where mine_order_id = #{orderId} and del_flag = 0
+    </select>
+</mapper>

+ 98 - 0
business-modules/business-mine/src/main/resources/mapper/MineOrderMapper.xml

@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sckw.mine.mapper.MineOrderMapper">
+
+    <select id="mineOrderPageList" parameterType="com.sckw.mine.entity.req.MineOrderPageListParam"
+            resultType="com.sckw.mine.entity.res.MineOrderPageListRes">
+
+        select
+               o.id,
+        o.mine_order_no,
+        o.order_source,
+        o.cg_company_id,
+        o.cg_company,
+        o.cg_company_concat,
+        o.cg_company_name,
+        o.fk_dept_id,
+        o.fk_dept,
+        o.sk_dept_id,
+        o.sk_dept,
+        o.customer_order_time,
+        o.delivery_cutoff_time,
+        o.is_transport,
+        o.work_flow,
+        o.status,
+        o.create_by,
+        o.update_by,
+        o.create_time,
+        o.update_time,
+        m.mine_id,
+        m.mine_vol,
+        m.purchase_num,
+        m.mine_weight,
+        n.transport_order_no
+
+        from kw_business_mine_order o
+        left join kw_business_transport_order_no n on n.main_order_id = o.id
+        left join kw_business_mine m on m.main_order_id = o.id
+        <where>
+         o.del_flag = 0
+            <if test="param.mineOrderNo != '' and param.mineOrderNo != null">
+                and o.mine_order_no like concat('%',#{param.mineOrderNo},'%')
+            </if>
+            <if test="param.orderSource != '' and param.orderSource != null">
+                and o.order_source  = #{param.orderSource}
+            </if>
+            <if test="param.startTime != '' and param.startTime != null">
+                and o.create_time  >=  #{param.startTime}
+            </if>
+            <if test="param.endTime != '' and param.endTime != null">
+                and o.create_time  &lt; #{param.endTime}
+            </if>
+            <if test="param.tenantId != '' and param.tenantId != null">
+                and o.tenant_id  = #{param.tenantId}
+            </if>
+        </where>
+        order by o.create_time desc
+     </select>
+    <select id="selectOrderById" resultType="com.sckw.mine.entity.res.MineOrderDetailRes">
+        select
+        o.id,
+        o.mine_order_no,
+        o.order_source,
+        o.cg_company_id,
+        o.cg_company,
+        o.cg_company_concat,
+        o.cg_company_name,
+        o.fk_dept_id,
+        o.fk_dept,
+        o.sk_dept_id,
+        o.sk_dept,
+        o.customer_order_time,
+        o.delivery_cutoff_time,
+        o.is_transport,
+        o.work_flow,
+        o.status,
+        o.create_by,
+        o.update_by,
+        o.create_time,
+        o.update_time,
+        m.mine_id,
+        m.mine_vol,
+        m.purchase_num,
+        m.mine_weight,
+        n.transport_order_no
+
+        from kw_business_mine_order o
+        left join kw_business_transport_order_no n on n.main_order_id = o.id
+        left join kw_business_mine m on m.main_order_id = o.id
+        where o.del_flag = 0 and o.id = #{orderId} and o.del_flag = 0
+    </select>
+
+
+    <select id="countByStatus" resultType="java.util.Map">
+        SELECT `status`, COUNT(*) AS count FROM kw_business_mine_order where del_flag = 0 GROUP BY `status`
+    </select>
+
+
+</mapper>

+ 5 - 0
business-modules/business-mine/src/main/resources/mapper/TransportOrderNoMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sckw.mine.mapper.TransportOrderNoMapper">
+
+</mapper>

+ 15 - 1
business-modules/business-usual-transport/src/main/java/com/sckw/usual/service/OrderActionService.java

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.sckw.redis.utils.GenOrderCode;
 import com.sckw.redis.utils.GenerateOrderIdUtil;
 import com.sckw.usual.entity.*;
 import com.sckw.usual.entity.req.*;
@@ -27,6 +28,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 
 /**
@@ -82,6 +85,9 @@ public class OrderActionService {
     @Autowired
     KwOrderUsualLandTransportAmountMapper kwOrderUsualLandTransportAmountMapper;
 
+    @Autowired
+    GenOrderCode genOrderCode;
+
     /**
      * @desc: 订单列表
      * @author: lt
@@ -148,7 +154,15 @@ public class OrderActionService {
         KwOrder kwOrder = BeanUtil.copyProperties(orderGeneralTransportReq, KwOrder.class);
         long id = new IdWorker(Global.NUMERICAL_ONE).nextId();
         kwOrder.setId(id);
-        String orderNoNum =generateOrderIdUtil.getOrderNo("O");
+
+
+        LocalDate currentDate = LocalDate.now();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
+        String orderPrefix = currentDate.format(formatter);
+        String key = "O" + orderPrefix;
+        String orderNoNum = genOrderCode.genOrderCode(12, key, key);
+
+
         kwOrder.setOrderNo(orderNoNum);//生成订单号
         kwOrder.setOrderSource(OrderSourceEnum.SELF_BUILD_NORMAL_LAND_ORDER.getCode()); //普货运输
         kwOrder.setPids(String.valueOf(id));