Quellcode durchsuchen

提交贸易合同相关接口

chenxiaofei vor 2 Monaten
Ursprung
Commit
f469729b74
18 geänderte Dateien mit 832 neuen und 11 gelöschten Zeilen
  1. 2 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictEnum.java
  2. 1 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictTypeEnum.java
  3. 17 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/controller/KwcContractSaleController.java
  4. 3 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractLogisticsGoods.java
  5. 4 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractLogisticsUnit.java
  6. 38 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractTradeOrder.java
  7. 4 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractTradeUnit.java
  8. 38 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/ApprovalReq.java
  9. 27 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/ContractDetailReq.java
  10. 331 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/ContractDetailResp.java
  11. 24 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractLogisticsGoodsRepository.java
  12. 25 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractLogisticsUnitRepository.java
  13. 5 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractTradeGoodsRepository.java
  14. 22 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractTradeOrderRepository.java
  15. 20 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractTradeRepository.java
  16. 25 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractTradeUnitRepository.java
  17. 234 10
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractTradeService.java
  18. 12 1
      sql/2025/11/30/2025_11_30_cxf_alert.sql

+ 2 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictEnum.java

@@ -91,6 +91,8 @@ public enum DictEnum {
     WANT_BUY_STATUS_2("want_buy_status", "2","已下架"),
     PREPAID_LIMIT_NO("prepaid_limit", "0","否"),
     PREPAID_LIMIT_YES("prepaid_limit", "1","是"),
+    CONSIGNMENT_WAY_1("consignment_way", "1", "采购方托运"),
+    CONSIGNMENT_WAY_2("consignment_way", "2", "供应方托运"),
     ;
 
     private final String type;

+ 1 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictTypeEnum.java

@@ -50,6 +50,7 @@ public enum DictTypeEnum {
     PREPAID_LIMIT("prepaid_limit", "预付限额"),
     WANT_BUY_STATUS("want_buy_status", "求购状态"),
     ORDER_SOURCE("order_source", "订单来源"),
+    CONSIGNMENT_WAY("consignment_way", "托运方式"),
     ;
 
     private final String type;

+ 17 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/controller/KwcContractSaleController.java

@@ -1,6 +1,7 @@
 package com.sckw.contract.controller;
 
 import com.sckw.contract.model.vo.req.*;
+import com.sckw.contract.model.vo.res.ContractDetailResp;
 import com.sckw.contract.model.vo.res.QueryListResVo;
 import com.sckw.contract.service.operateService.KwcContractTradeService;
 import com.sckw.core.model.enums.EntTypeEnum;
@@ -219,4 +220,20 @@ public class KwcContractSaleController {
         kwcContractTradeService.exportTradeList(reqVo, response);
     }
 
+    /**
+     * 修改合同状态 (审核,手动完结)
+     */
+    @PostMapping("/updateStatus")
+    public BaseResult<Boolean> updateStatus(@Valid @RequestBody ApprovalReq req) {
+        return BaseResult.success(kwcContractTradeService.updateStatus(req));
+    }
+
+    /**
+     * 查询合同详情
+     */
+
+    @PostMapping("/queryContractDetail")
+    public BaseResult<ContractDetailResp> queryContractDetail(@Valid @RequestBody ContractDetailReq req) {
+        return BaseResult.success(kwcContractTradeService.queryContractDetail(req));
+    }
 }

+ 3 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractLogisticsGoods.java

@@ -1,5 +1,6 @@
 package com.sckw.contract.model.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
@@ -121,4 +122,6 @@ public class KwcContractLogisticsGoods implements Serializable {
      */
     private Integer delFlag;
 
+    @TableField(exist = false)
+    private String contractIdGoodsIdKey;
 }

+ 4 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractLogisticsUnit.java

@@ -1,5 +1,6 @@
 package com.sckw.contract.model.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
@@ -89,4 +90,7 @@ public class KwcContractLogisticsUnit implements Serializable {
      */
     private Integer delFlag;
 
+    @TableField(exist = false)
+    private String contractIdUnitTypeKey;
+
 }

+ 38 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractTradeOrder.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 import lombok.Data;
 
@@ -69,5 +70,42 @@ public class KwcContractTradeOrder implements Serializable {
      * 是否删除(0未删除,1删除)
      */
     private Integer delFlag;
+    /**
+     * 商品id
+     */
+    @TableField("goods_id")
+    private Long goodsId;
 
+    /**
+     * 计费方式 1:按卸货量 2:按装货量
+     */
+    @TableField("billing_way")
+    private Integer billingWay;
+    /**
+     * 下单量
+     */
+    @TableField("amount")
+    private BigDecimal amount;
+    /**
+     * 累计装货量
+     */
+    @TableField("load_amount")
+    private BigDecimal loadAmount;
+
+    /**
+     * 累计卸货量
+     */
+    @TableField("unload_amount")
+    private BigDecimal unloadAmount;
+    /**
+     * 装货地址
+     */
+    @TableField("load_address")
+    private String loadAddress;
+    /**
+     * 卸货地址
+     *
+     */
+    @TableField("unload_address")
+    private String unloadAddress;
 }

+ 4 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractTradeUnit.java

@@ -1,5 +1,6 @@
 package com.sckw.contract.model.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
@@ -89,4 +90,7 @@ public class KwcContractTradeUnit implements Serializable {
      */
     private String signPhone;
 
+    @TableField(exist = false)
+    private String contractIdUniTypeKey;
+
 }

+ 38 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/ApprovalReq.java

@@ -0,0 +1,38 @@
+package com.sckw.contract.model.vo.req;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description : 修改合同状态请求参数
+ * @create :2025-11-05 11:23:00
+ */
+@Data
+public class ApprovalReq implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 6314692652242563859L;
+    /**
+     * 合同id
+     */
+    @Schema(description = "合同id")
+    @NotBlank(message = "合同id不能为空")
+    private String contractId;
+    /**
+     * 状态
+     */
+    @Schema(description = "状态")
+    @NotNull(message = "状态不能为空")
+    private Integer status;
+    /**
+     * 备注
+     */
+    @Schema(description = "备注")
+    private String remark;
+}

+ 27 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/ContractDetailReq.java

@@ -0,0 +1,27 @@
+package com.sckw.contract.model.vo.req;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description : 合同详情请求对象
+ * @create :2025-11-05 14:20:00
+ */
+@Data
+public class ContractDetailReq implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -8524284571455415054L;
+
+    /**
+     * 合同编号
+     */
+    @Schema(description = "合同编号")
+    @NotBlank(message = "合同编号不能为空")
+    private String contractCode;
+}

+ 331 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/ContractDetailResp.java

@@ -0,0 +1,331 @@
+package com.sckw.contract.model.vo.res;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Digits;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author czh
+ * @desc 贸易合同
+ * @date 2023/7/19
+ */
+@Data
+public class ContractDetailResp implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -3838851258036291498L;
+
+    /**
+     * 合同id 修改时必传
+     */
+    @Schema(description = "合同id")
+    private Long id;
+
+    /**
+     * 父合同ID 补充合同
+     */
+    @Schema(description = "父合同ID")
+    private Long pid;
+
+    /**
+     * 基础信息
+     */
+    @Schema(description = "基础信息")
+    private TradeBaseInfo baseInfo;
+
+    /**
+     * 合同文件
+     */
+    @Schema(description = "合同文件")
+    private String contractFile;
+
+    /**
+     * 标的信息
+     */
+    @Schema(description = "标的信息")
+    private List<TradeGoodsInfo> goodsInfo;
+
+    @Schema(description = "关联贸易订单")
+    private AssociatedOrder associatedOrder;
+
+    /**
+     * 备注
+     */
+    @Schema(description = "备注")
+    private String remark;
+    @Data
+    public static class TradeBaseInfo implements Serializable{
+
+        @Serial
+        private static final long serialVersionUID = -5828478625710244673L;
+
+        /**
+         * 采购单位id
+         */
+        @Schema(description = "采购单位id")
+        private Long purchaseEntId;
+        /**
+         * 采购单位名称
+         */
+        @Schema(description = "采购单位名称")
+        private String purchaseFirmName;
+
+        /**
+         * 采购单位联系电话
+         */
+        @Schema(description = "采购单位联系电话")
+        private String purchasePhone;
+
+        /**
+         * 供应单位id
+         */
+        @NotNull(message = "供应单位不能为空")
+        private Long provideEntId;
+        /**
+         * 供应单位名称
+         */
+        @Schema(description = "供应单位名称")
+        private String provideFirmName;
+
+        /**
+         * 供应单位联系电话
+         */
+        @Schema(description = "供应单位联系电话")
+        private String providePhone;
+
+        /**
+         * 合同编号
+         */
+        @Schema(description = "合同编号")
+        private String contractCode;
+
+        /**
+         * 合同名称
+         */
+        @Schema(description = "合同名称")
+        private String contractName;
+
+        /**
+         * 终止时间
+         */
+        @DateTimeFormat(pattern = "yyyy-MM-dd")
+        @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
+        @Schema(description = "终止时间")
+        private Date endTime;
+
+        /**
+         * 签约方式(1线上签约、2线下签约)
+         */
+        @Schema(description = "签约方式")
+        private Integer signingWay;
+        /**
+         * 签约方式描述
+         */
+        @Schema(description = "签约方式描述")
+        private String signingWayDesc;
+
+        /**
+         * 生效时间
+         */
+        @DateTimeFormat(pattern = "yyyy-MM-dd")
+        @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
+        @Schema(description = "生效时间")
+        private Date startTime;
+
+        /**
+         * 结算方式
+         */
+        @Schema(description = "结算方式")
+        private Integer settlement;
+        /**
+         * 结算方式描述
+         */
+        @Schema(description = "结算方式描述")
+        private String settlementDesc;
+
+        /**
+         * 托运方式
+         */
+        @Schema(description = "托运方式")
+        private Integer consignment;
+        /**
+         * 托运方式描述
+         */
+        @Schema(description = "托运方式描述")
+        private String consignmentDesc;
+        /**
+         * 卸货方式
+         */
+        @Schema(description = "卸货方式")
+        private Integer unloadWay;
+        /**
+         * 卸货方式描述
+         */
+        @Schema(description = "卸货方式描述")
+        private String unloadWayDesc;
+        /**
+         * 销售人员id
+         */
+        @Schema(description = "销售人员id")
+        private Long salesmanId;
+        /**
+         * 销售联系电话
+         */
+        @Schema(description = "销售联系电话")
+        private String salesmanPhone;
+    }
+    @Data
+    public static class TradeGoodsInfo implements Serializable{
+        @Serial
+        private static final long serialVersionUID = -7003603561892852639L;
+
+        /**
+         * 商品id
+         */
+        @Schema(description = "商品id")
+        private Long goodsId;
+        /**
+         * 商品名称
+         */
+        @Schema(description = "商品名称")
+        private String goodsName;
+
+        /**
+         * 采购数量
+         */
+        @Schema(description = "采购数量")
+        private BigDecimal amount;
+
+        /**
+         * 单价
+         */
+        @Schema(description = "单价")
+        private BigDecimal price;
+
+        /**
+         * 单位
+         */
+        @Schema(description = "单位")
+        private String unit;
+        /**
+         * 生效时间
+         */
+        @Schema(description = "生效开始时间")
+        private Date effectiveStartTime;
+        /**
+         * 生效时间
+         */
+        @Schema(description = "生效结束时间")
+        private Date effectiveEntTime;
+    }
+    @Data
+    public static class AssociatedOrder implements Serializable{
+        @Serial
+        private static final long serialVersionUID = 3157352506945080734L;
+        /**
+         * 订单id
+         */
+        @Schema(description = "订单id")
+        private Long orderId;
+        /**
+         * 订单状态
+         */
+        @Schema(description = "订单状态")
+        private Integer orderStatus;
+        /**
+         * 订单编号
+         */
+        @Schema(description = "订单编号")
+        private String orderCode;
+        /**
+         * 采购单位id
+         */
+        @Schema(description = "采购单位id")
+        private Long purchaseEntId;
+        /**
+         * 采购单位名称
+         */
+        @Schema(description = "采购单位名称")
+        private String purchaseEntName;
+        /**
+         * 供应单位id
+         */
+        @Schema(description = "供应单位id")
+        private Long provideEntId;
+        /**
+         * 供应单位名称
+         */
+        @Schema(description = "供应单位名称")
+        private String provideEntName;
+        /**
+         * 运输单位id
+         */
+        @Schema(description = "运输单位id")
+        private Long transportEntId;
+        /**
+         * 运输单位名称
+         */
+        @Schema(description = "运输单位名称")
+        private String transportEntName;
+        /**
+         * 商品id
+         */
+        @Schema(description = "商品id")
+        private Long goodsId;
+        /**
+         * 商品名称
+         */
+        @Schema(description = "商品名称")
+        private String goodsName;
+        /**
+         * 计费方式
+         */
+        @Schema(description = "计费方式")
+        private Integer billingWay;
+        /**
+         * 计费方式描述
+         */
+        @Schema(description = "计费方式描述")
+        private String billingWayDesc;
+        /**
+         * 下单量
+         */
+        @Schema(description = "下单量")
+        private String amount;
+        /**
+         * 累计装货量
+         */
+        @Schema(description = "累计装货量")
+        private String loadAmount;
+        /**
+         * 累计卸货量
+         */
+        @Schema(description = "累计卸货量")
+        private String unloadAmount;
+        /**
+         * 运输单价
+         */
+        private String transportPrice;
+        /**
+         * 装货地址
+         */
+        @Schema(description = "装货地址")
+        private String loadAddress;
+        /**
+         * 卸货地址
+         */
+        @Schema(description = "卸货地址")
+        private String unloadAddress;
+    }
+}

+ 24 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractLogisticsGoodsRepository.java

@@ -0,0 +1,24 @@
+package com.sckw.contract.repository;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.contract.dao.KwcContractLogisticsGoodsMapper;
+import com.sckw.contract.model.entity.KwcContractLogisticsGoods;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description : 物流商品接口
+ * @create :2025-11-06 08:32:00
+ */
+@Repository
+public class KwcContractLogisticsGoodsRepository extends ServiceImpl<KwcContractLogisticsGoodsMapper, KwcContractLogisticsGoods> {
+    public List<KwcContractLogisticsGoods> queryByContractId(Long contractId) {
+        return list(Wrappers.<KwcContractLogisticsGoods>lambdaQuery()
+                .eq(KwcContractLogisticsGoods::getDelFlag,0)
+                .eq(KwcContractLogisticsGoods::getContractId,contractId));
+    }
+}

+ 25 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractLogisticsUnitRepository.java

@@ -0,0 +1,25 @@
+package com.sckw.contract.repository;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.contract.dao.KwcContractLogisticsUnitMapper;
+import com.sckw.contract.model.entity.KwcContractLogisticsUnit;
+import com.sckw.contract.model.entity.KwcContractTradeUnit;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description : 物流企业信息
+ * @create :2025-11-05 17:31:00
+ */
+@Repository
+public class KwcContractLogisticsUnitRepository extends ServiceImpl<KwcContractLogisticsUnitMapper, KwcContractLogisticsUnit> {
+    public List<KwcContractLogisticsUnit> queryByContractId(Long contractId) {
+        return list(Wrappers.<KwcContractLogisticsUnit>lambdaQuery()
+                .eq(KwcContractLogisticsUnit::getContractId, contractId)
+                .eq(KwcContractLogisticsUnit::getDelFlag,0));
+    }
+}

+ 5 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractTradeGoodsRepository.java

@@ -37,4 +37,9 @@ public class KwcContractTradeGoodsRepository extends ServiceImpl<KwcContractTrad
                 .in(KwcContractTradeGoods::getGoodsId, goodsIds));
     }
 
+    public List<KwcContractTradeGoods> queryByContractId(Long contractId) {
+        return list(Wrappers.<KwcContractTradeGoods>lambdaQuery()
+                .eq(KwcContractTradeGoods::getDelFlag,0)
+                .eq(KwcContractTradeGoods::getContractId, contractId));
+    }
 }

+ 22 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractTradeOrderRepository.java

@@ -0,0 +1,22 @@
+package com.sckw.contract.repository;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.contract.dao.KwcContractTradeOrderMapper;
+import com.sckw.contract.model.entity.KwcContractTradeOrder;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description : 贸易订单接口
+ * @create :2025-11-05 16:35:00
+ */
+@Repository
+public class KwcContractTradeOrderRepository extends ServiceImpl<KwcContractTradeOrderMapper, KwcContractTradeOrder> {
+    public KwcContractTradeOrder queryByContractId(Long tradeOrderId) {
+        return getOne(Wrappers.<KwcContractTradeOrder>lambdaQuery()
+                .eq(KwcContractTradeOrder::getDelFlag, 0)
+                .eq(KwcContractTradeOrder::getContractId, tradeOrderId));
+    }
+}

+ 20 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractTradeRepository.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.sckw.contract.dao.KwcContractTradeMapper;
 import com.sckw.contract.model.entity.KwcContractTrade;
+import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 import org.springframework.stereotype.Repository;
 
@@ -22,4 +23,23 @@ public class KwcContractTradeRepository extends ServiceImpl<KwcContractTradeMapp
                 .eq(KwcContractTrade::getDelFlag, 0)
                 .eq(KwcContractTrade::getContractPid, pid));
     }
+
+    public KwcContractTrade queryByContractId( String contractId) {
+        return getOne(Wrappers.<KwcContractTrade>lambdaQuery()
+                .eq(KwcContractTrade::getDelFlag, 0)
+                .eq(KwcContractTrade::getContractNo, contractId)
+                .last("limit 1"));
+    }
+
+    public Boolean updateByContractId(KwcContractTrade updateKwcContractTrade) {
+       return update(updateKwcContractTrade, Wrappers.<KwcContractTrade>lambdaQuery()
+                .eq(KwcContractTrade::getId, updateKwcContractTrade.getId()));
+    }
+
+    public KwcContractTrade queryByContractNo( String contractCode) {
+        return getOne(Wrappers.<KwcContractTrade>lambdaQuery()
+                .eq(KwcContractTrade::getDelFlag, 0)
+                .eq(KwcContractTrade::getContractNo, contractCode)
+                .last("limit 1"));
+    }
 }

+ 25 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractTradeUnitRepository.java

@@ -0,0 +1,25 @@
+package com.sckw.contract.repository;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.contract.dao.KwcContractTradeUnitMapper;
+import com.sckw.contract.model.entity.KwcContractTradeUnit;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description : 公司合同信息接口
+ * @create :2025-11-05 14:52:00
+ */
+@Repository
+public class KwcContractTradeUnitRepository extends ServiceImpl<KwcContractTradeUnitMapper, KwcContractTradeUnit> {
+    public List<KwcContractTradeUnit> queryByContractId(Long contractId) {
+        return list(Wrappers.<KwcContractTradeUnit>lambdaQuery()
+                .eq(KwcContractTradeUnit::getContractId, contractId)
+                .eq(KwcContractTradeUnit::getDelFlag, 0));
+    }
+}

+ 234 - 10
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractTradeService.java

@@ -7,17 +7,15 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
 import com.sckw.contract.dao.KwcContractTradeMapper;
 import com.sckw.contract.model.dto.req.QueryListReqDto;
 import com.sckw.contract.model.dto.res.QueryListResDto;
-import com.sckw.contract.model.entity.KwcContractTrade;
-import com.sckw.contract.model.entity.KwcContractTradeGoods;
-import com.sckw.contract.model.entity.KwcContractTradeUnit;
+import com.sckw.contract.model.entity.*;
 import com.sckw.contract.model.report.TradeListExport;
 import com.sckw.contract.model.vo.req.*;
 import com.sckw.contract.model.vo.res.*;
-import com.sckw.contract.repository.KwcContractTradeGoodsRepository;
-import com.sckw.contract.repository.KwcContractTradeRepository;
+import com.sckw.contract.repository.*;
 import com.sckw.contract.service.CommonBusinessService;
 import com.sckw.contract.service.KwcContractTradeGoodsService;
 import com.sckw.contract.service.KwcContractTradeTrackService;
@@ -46,10 +44,7 @@ import com.sckw.stream.enums.MessageEnum;
 import com.sckw.stream.model.UserInfo;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.RemoteUserService;
-import com.sckw.system.api.model.dto.res.EntCacheResDto;
-import com.sckw.system.api.model.dto.res.KwsUserResDto;
-import com.sckw.system.api.model.dto.res.SysDictResDto;
-import com.sckw.system.api.model.dto.res.UserCacheResDto;
+import com.sckw.system.api.model.dto.res.*;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
@@ -93,6 +88,10 @@ public class KwcContractTradeService {
 
     private final KwcContractTradeGoodsRepository kwcContractTradeGoodsRepository;
     private final KwcContractTradeRepository kwcContractTradeRepository;
+    private final KwcContractTradeUnitRepository kwcContractTradeUnitRepository;
+    private final KwcContractTradeOrderRepository kwcContractTradeOrderRepository;
+    private final KwcContractLogisticsUnitRepository kwcContractLogisticsUnitRepository;
+    private final KwcContractLogisticsGoodsRepository kwcContractLogisticsGoodsRepository;
 
     @DubboReference(version = "1.0.0", group = "design", check = false)
     private RemoteSystemService remoteSystemService;
@@ -222,7 +221,8 @@ public class KwcContractTradeService {
             queryListResVo.setSigningWayName(DictEnum.getLabel(DictTypeEnum.SIGNING_TYPE.getType(), queryListResDto.getSigningWay()));
             queryListResVo.setSigningWay(String.valueOf(queryListResDto.getSigningWay()));
             queryListResVo.setUnloadWay(String.valueOf(queryListResDto.getUnloadWay()));
-            queryListResVo.setUnloadWayName(DictEnum.getLabel(String.valueOf(queryListResDto.getUnloadWay())));
+            queryListResVo.setUnloadWayName(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(),
+                    String.valueOf(queryListResDto.getUnloadWay())));
             queryListResVo.setAmount(queryListResDto.getAmount());
             queryListResVo.setPerformedAmount(queryListResDto.getPerformedAmount());
 
@@ -1275,4 +1275,228 @@ public class KwcContractTradeService {
         }
         return false;
     }
+
+    public Boolean updateStatus(@Valid ApprovalReq req) {
+        log.info("修改合同状态,请求参数 :{}", JSON.toJSONString(req));
+        //查询本地商品合同信息
+        KwcContractTrade kwcContractTrade = kwcContractTradeRepository.queryByContractId(req.getContractId());
+        if (Objects.isNull(kwcContractTrade)) {
+            throw new BusinessException("合同不存在");
+        }
+        //创建修改对象
+        KwcContractTrade updateKwcContractTrade = new KwcContractTrade();
+        updateKwcContractTrade.setId(kwcContractTrade.getId());
+        updateKwcContractTrade.setRemark(req.getRemark());
+        //审核  审核后变成待签约
+        if (Objects.equals(req.getStatus(), ContractStatusEnum.SUBMIT.getCode()) && Objects.equals(kwcContractTrade.getStatus(), ContractStatusEnum.WAIT_APPROVE.getCode())) {
+            updateKwcContractTrade.setStatus(ContractStatusEnum.SUBMIT.getCode());
+        }
+        //审核拒绝 (状态由待审核变成已作废)
+        if (Objects.equals(req.getStatus(), ContractStatusEnum.CANNEL.getCode())
+                && Arrays.asList(ContractStatusEnum.WAIT_APPROVE.getCode(), ContractStatusEnum.SUBMIT.getCode()).contains(kwcContractTrade.getStatus())) {
+            updateKwcContractTrade.setStatus(ContractStatusEnum.CANNEL.getCode());
+        }
+        //签约 (状态由带签约变成签约)
+        if (Objects.equals(req.getStatus(), ContractStatusEnum.SIGNED.getCode()) && Objects.equals(kwcContractTrade.getStatus(), ContractStatusEnum.SUBMIT.getCode())) {
+            updateKwcContractTrade.setStatus(ContractStatusEnum.SIGNED.getCode());
+        }
+        //手动完结 (如果不传状态就表示手动完结) 如果当前状态是待签约或者待签约 那么变为作废
+        if (Objects.equals(req.getStatus(),ContractStatusEnum.CANNEL.getCode()) && Arrays.asList(ContractStatusEnum.WAIT_APPROVE.getCode(),
+                ContractStatusEnum.SUBMIT.getCode()).contains(kwcContractTrade.getStatus())){
+            updateKwcContractTrade.setStatus(ContractStatusEnum.CANNEL.getCode());
+        }
+        //手动完结 如果当前的状态是已经签约,订单变成已完结
+        if (Objects.equals(req.getStatus(),ContractStatusEnum.CANNEL.getCode()) && Objects.equals(kwcContractTrade.getStatus(),
+                ContractStatusEnum.SIGNED.getCode())){
+            updateKwcContractTrade.setStatus(ContractStatusEnum.COMPLETE.getCode());
+        }
+       return kwcContractTradeRepository.updateByContractId(updateKwcContractTrade);
+
+    }
+
+    public ContractDetailResp queryContractDetail(@Valid ContractDetailReq req) {
+        log.info("查询合同详情,请求参数 :{}", JSON.toJSONString(req));
+        //查询本地商品合同信息
+        KwcContractTrade kwcContractTrade = kwcContractTradeRepository.queryByContractNo(req.getContractCode());
+        if (Objects.isNull(kwcContractTrade)) {
+            return new ContractDetailResp();
+        }
+        //根据订单号查询交易企业信息
+        List<KwcContractTradeUnit> tradeUnits = kwcContractTradeUnitRepository.queryByContractId(kwcContractTrade.getId());
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(tradeUnits)){
+            return new ContractDetailResp();
+        }
+        //安装合同id和单位类型组合成key映射公司对象
+        Map<String, KwcContractTradeUnit> ctTypeKeyAndUnitMap = tradeUnits.stream()
+                .peek(t -> t.setContractIdUniTypeKey(t.getContractId() + "-" + t.getUnitType()))
+                .collect(Collectors.toMap(KwcContractTradeUnit::getContractIdUniTypeKey, Function.identity(),
+                        (v1, v2) -> v1));
+
+        //查询商品合同
+        List<KwcContractTradeGoods> tradeGoods = kwcContractTradeGoodsRepository.queryByContractId(kwcContractTrade.getId());
+        Map<String, KwcContractTradeGoods> contractTradeKeyAndGoodsMap = Maps.newHashMap();
+        List<Long> goodsIds = Lists.newArrayList();
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(tradeGoods)){
+            //获取商品id
+             goodsIds = tradeGoods.stream()
+                    .map(KwcContractTradeGoods::getGoodsId)
+                     .distinct()
+                    .collect(Collectors.toList());
+
+            //过滤主合同查看的标信息 , 合同id商品id组成唯一key映射商品信息
+            contractTradeKeyAndGoodsMap =
+                    tradeGoods.stream()
+                            .peek(x -> x.setContractIdGoodsIdKey(x.getContractId() + "-" + x.getGoodsId()))
+                            .collect(Collectors.toMap(KwcContractTradeGoods::getContractIdGoodsIdKey, Function.identity(), (x, y) -> x));
+
+        }
+        //查询商品 商品id映射商品
+        Map<Long, KwpGoods> goodsIdAndGoodsMap = Maps.newHashMap();
+        if (CollectionUtils.isNotEmpty(goodsIds)){
+            goodsIdAndGoodsMap = goodsInfoService.getGoodsByIds(goodsIds);
+
+        }
+        //查询贸易订单
+        KwcContractTradeOrder kwcContractTradeOrder =
+                kwcContractTradeOrderRepository.queryByContractId(kwcContractTrade.getId());
+
+        //查询物流合同
+        List<KwcContractLogisticsUnit> kwcContractLogisticsUnits = kwcContractLogisticsUnitRepository.queryByContractId(kwcContractTrade.getId());
+        //合同id和单位类型组合成key映射物流对象
+        Map<String, KwcContractLogisticsUnit> contractIdUnitTypeKeyAndUnitMap = kwcContractLogisticsUnits.stream()
+                .peek(x -> x.setContractIdUnitTypeKey(x.getContractId() + "-" + x.getUnitType()))
+                .collect(Collectors.toMap(KwcContractLogisticsUnit::getContractIdUnitTypeKey, Function.identity(), (x, y) -> x));
+
+        //查询物流商品
+        List<KwcContractLogisticsGoods> kwcContractLogisticsGoods = kwcContractLogisticsGoodsRepository.queryByContractId(kwcContractTrade.getId());
+        //合同id和商品id组成唯一key映射物流信息
+        Map<String, KwcContractLogisticsGoods> contractIdGoodsIdKeyAndGoodsMap = kwcContractLogisticsGoods.stream()
+                .peek(x -> x.setContractIdGoodsIdKey(x.getContractId() + "-" + x.getGoodsId()))
+                .collect(Collectors.toMap(KwcContractLogisticsGoods::getContractIdGoodsIdKey, Function.identity(), (x, y) -> x));
+
+        ContractDetailResp contractDetailResp = new ContractDetailResp();
+        contractDetailResp.setId(kwcContractTrade.getId());
+        contractDetailResp.setPid(kwcContractTrade.getContractPid());
+        //获取基本信息
+        ContractDetailResp.TradeBaseInfo baseInfo = getBaseInfo(ctTypeKeyAndUnitMap, kwcContractTrade);
+        contractDetailResp.setBaseInfo(baseInfo);
+        //文件合同
+        contractDetailResp.setContractFile(kwcContractTrade.getSignedUrl());
+
+        //标地信息
+        if (CollectionUtils.isNotEmpty(tradeGoods)){
+            Map<Long, KwpGoods> finalGoodsIdAndGoodsMap = goodsIdAndGoodsMap;
+            List<ContractDetailResp.TradeGoodsInfo> tradeGoodsInfos = tradeGoods.stream()
+                    .map(t -> getTradeGoodsInfo(t, finalGoodsIdAndGoodsMap))
+                    .collect(Collectors.toList());
+            contractDetailResp.setGoodsInfo(tradeGoodsInfos);
+        }
+
+        ContractDetailResp.AssociatedOrder associatedOrder = new ContractDetailResp.AssociatedOrder();
+        if (Objects.nonNull(kwcContractTradeOrder)){
+            associatedOrder.setOrderId(kwcContractTradeOrder.getOrderId());
+            associatedOrder.setOrderStatus(kwcContractTradeOrder.getStatus());
+            associatedOrder.setOrderCode(kwcContractTradeOrder.getOrderNo());
+            KwcContractTradeUnit purchaseUnit =
+                    ctTypeKeyAndUnitMap.getOrDefault(kwcContractTrade.getId() + "-" + CooperateTypeEnum.PURCHASER.getCode(), new KwcContractTradeUnit());
+
+
+            KwcContractTradeUnit provideUnit =
+                    ctTypeKeyAndUnitMap.getOrDefault(kwcContractTrade.getId() + "-" + CooperateTypeEnum.SUPPLIER.getCode(), new KwcContractTradeUnit());
+
+            associatedOrder.setPurchaseEntId(purchaseUnit.getEntId());
+            associatedOrder.setPurchaseEntName(purchaseUnit.getFirmName());
+            associatedOrder.setProvideEntId(provideUnit.getEntId());
+            associatedOrder.setProvideEntName(provideUnit.getFirmName());
+
+            KwcContractLogisticsUnit logisticsUnit =
+                    contractIdUnitTypeKeyAndUnitMap.get(kwcContractTrade.getId() + "-" + CooperateTypeEnum.CONSIGN.getCode());
+            if (Objects.nonNull(logisticsUnit)){
+                associatedOrder.setTransportEntId(logisticsUnit.getEntId());
+                associatedOrder.setTransportEntName(logisticsUnit.getFirmName());
+            }
+            KwcContractLogisticsUnit logisticsCarrigeUnit =
+                    contractIdUnitTypeKeyAndUnitMap.get(kwcContractTrade.getId() + "-" + CooperateTypeEnum.CARRIAGE.getCode());
+            if (Objects.nonNull(logisticsCarrigeUnit)){
+                associatedOrder.setTransportEntId(logisticsCarrigeUnit.getEntId());
+                associatedOrder.setTransportEntName(logisticsCarrigeUnit.getFirmName());
+            }
+
+
+            associatedOrder.setGoodsId(kwcContractTradeOrder.getGoodsId());
+            KwpGoods goods = goodsIdAndGoodsMap.getOrDefault(kwcContractTradeOrder.getGoodsId(), new KwpGoods());
+            associatedOrder.setGoodsName(goods.getName());
+            associatedOrder.setBillingWay(kwcContractTradeOrder.getBillingWay());
+            associatedOrder.setBillingWayDesc(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(),
+                    String.valueOf(kwcContractTradeOrder.getBillingWay())));
+            associatedOrder.setAmount(Objects.nonNull(kwcContractTradeOrder.getAmount()) ?
+                    kwcContractTradeOrder.getAmount().toPlainString() : null);
+            associatedOrder.setLoadAmount(Objects.nonNull(kwcContractTradeOrder.getLoadAmount()) ?
+                    kwcContractTradeOrder.getLoadAmount().toPlainString() : null);
+            associatedOrder.setUnloadAmount(Objects.nonNull(kwcContractTradeOrder.getUnloadAmount()) ?
+                    kwcContractTradeOrder.getUnloadAmount().toPlainString() : null);
+            KwcContractTradeGoods contractTradeGoods = contractTradeKeyAndGoodsMap
+                    .getOrDefault(kwcContractTradeOrder.getContractId() + "-" + kwcContractTradeOrder.getGoodsId(), new KwcContractTradeGoods());
+            KwcContractLogisticsGoods logisticsGoods =
+                    contractIdGoodsIdKeyAndGoodsMap.getOrDefault(kwcContractTradeOrder.getContractId() + "-" + kwcContractTradeOrder.getGoodsId(), new KwcContractLogisticsGoods());
+            associatedOrder.setTransportPrice(Objects.nonNull(logisticsGoods.getPrice()) ? logisticsGoods.getPrice().toPlainString() : null);
+            associatedOrder.setLoadAddress(kwcContractTradeOrder.getLoadAddress());
+            associatedOrder.setUnloadAddress(kwcContractTradeOrder.getUnloadAddress());
+            contractDetailResp.setAssociatedOrder(associatedOrder);
+        }
+
+
+        contractDetailResp.setRemark(kwcContractTrade.getRemark());
+
+
+        return null;
+    }
+
+    private static ContractDetailResp.TradeGoodsInfo getTradeGoodsInfo(KwcContractTradeGoods t, Map<Long,
+            KwpGoods> finalGoodsIdAndGoodsMap) {
+        ContractDetailResp.TradeGoodsInfo tradeGoodsInfo = new ContractDetailResp.TradeGoodsInfo();
+        tradeGoodsInfo.setGoodsId(t.getGoodsId());
+        KwpGoods goods = finalGoodsIdAndGoodsMap.getOrDefault(t.getGoodsId(), new KwpGoods());
+        tradeGoodsInfo.setGoodsName(goods.getName());
+        tradeGoodsInfo.setAmount(t.getAmount());
+        tradeGoodsInfo.setPrice(t.getPrice());
+        tradeGoodsInfo.setUnit(t.getUnit());
+        tradeGoodsInfo.setEffectiveStartTime(t.getStartTime());
+        tradeGoodsInfo.setEffectiveEntTime(t.getEndTime());
+        return tradeGoodsInfo;
+    }
+
+    private static ContractDetailResp.TradeBaseInfo getBaseInfo(Map<String, KwcContractTradeUnit> ctTypeKeyAndUnitMap, KwcContractTrade kwcContractTrade) {
+        ContractDetailResp.TradeBaseInfo tradeBaseInfo = new ContractDetailResp.TradeBaseInfo();
+        KwcContractTradeUnit purchaseUnit =
+                ctTypeKeyAndUnitMap.getOrDefault(kwcContractTrade.getId() + "-" + CooperateTypeEnum.PURCHASER.getCode(), new KwcContractTradeUnit());
+        tradeBaseInfo.setPurchaseEntId(purchaseUnit.getEntId());
+
+        tradeBaseInfo.setPurchaseFirmName(purchaseUnit.getFirmName());
+        tradeBaseInfo.setPurchasePhone(purchaseUnit.getPhone());
+        KwcContractTradeUnit provideUnit =
+                ctTypeKeyAndUnitMap.getOrDefault(kwcContractTrade.getId() + "-" + CooperateTypeEnum.SUPPLIER.getCode(), new KwcContractTradeUnit());
+        tradeBaseInfo.setProvideEntId(provideUnit.getEntId());
+        tradeBaseInfo.setProvideFirmName(provideUnit.getFirmName());
+        tradeBaseInfo.setProvidePhone(provideUnit.getPhone());
+        tradeBaseInfo.setContractCode(kwcContractTrade.getContractNo());
+        tradeBaseInfo.setContractName(kwcContractTrade.getName());
+        tradeBaseInfo.setEndTime(kwcContractTrade.getEndTime());
+        tradeBaseInfo.setSigningWay(kwcContractTrade.getSigningWay());
+        tradeBaseInfo.setSigningWayDesc(DictEnum.getLabel(DictTypeEnum.SIGNING_WAY.getType(), String.valueOf(kwcContractTrade.getSigningWay())));
+        tradeBaseInfo.setStartTime(kwcContractTrade.getStartTime());
+        tradeBaseInfo.setSettlement(kwcContractTrade.getSettlement());
+        tradeBaseInfo.setSettlementDesc(DictEnum.getLabel(DictTypeEnum.SIGNING_TYPE.getType(),
+                String.valueOf(kwcContractTrade.getSettlement())));
+        tradeBaseInfo.setConsignment(kwcContractTrade.getConsignment());
+        tradeBaseInfo.setConsignmentDesc(DictEnum.getLabel(DictTypeEnum.CONSIGNMENT_WAY.getType(),
+                String.valueOf(kwcContractTrade.getConsignment())));
+
+        tradeBaseInfo.setUnloadWay(kwcContractTrade.getUnloadWay());
+        tradeBaseInfo.setUnloadWayDesc(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(),
+                String.valueOf(kwcContractTrade.getUnloadWay())));
+        tradeBaseInfo.setSalesmanId(kwcContractTrade.getSalesmanId());
+        tradeBaseInfo.setSalesmanPhone(kwcContractTrade.getSalesmanPhone());
+        return tradeBaseInfo;
+    }
 }

+ 12 - 1
sql/2025/11/30/2025_11_30_cxf_alert.sql

@@ -11,4 +11,15 @@ ALTER TABLE kws_role ADD ent_id bigint NOT NULL default 0  comment '企业id';
 
 ALTER TABLE kwc_contract_trade_goods ADD start_time date NOT NULL default '1000-01-01'  comment '开始日期';
 
-ALTER TABLE kwc_contract_trade_goods ADD end_time date NOT NULL default '1000-01-01'  comment '结束日期';
+ALTER TABLE kwc_contract_trade_goods ADD end_time date NOT NULL default '1000-01-01'  comment '结束日期';
+
+ALTER TABLE kwc_contract_trade_order ADD goods_id  bigint NOT NULL default '0'  comment '商品id';
+ALTER TABLE kwc_contract_trade_order ADD billing_way  bigint NOT NULL default '0'  comment '计费方式';
+ALTER TABLE kwc_contract_trade_order ADD amount decimal(10, 2)  NOT NULL default '0'  comment '下单量';
+ALTER TABLE kwc_contract_trade_order ADD load_amount  decimal(10, 2) NOT NULL default '0'  comment '累计装货量';
+ALTER TABLE kwc_contract_trade_order ADD unload_amount  decimal(10, 2) NOT NULL default '0'  comment '累计卸货量';
+ALTER TABLE kwc_contract_trade_order ADD load_address  varchar(255) NOT NULL default ''  comment '装货地址';
+ALTER TABLE kwc_contract_trade_order ADD unload_address  varchar(255) NOT NULL default ''  comment '卸货地址';
+
+ALTER TABLE kwc_contract_logistics_goods ADD price decimal(10, 2)  NOT NULL default '0'  comment '运输单价';
+