caozj 2 gadi atpakaļ
vecāks
revīzija
78842ecaf0
35 mainītis faili ar 1589 papildinājumiem un 0 dzēšanām
  1. 68 0
      hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractController.java
  2. 68 0
      hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractProductController.java
  3. 68 0
      hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractProjectController.java
  4. 68 0
      hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractShipmentController.java
  5. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractDto.java
  6. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractProductDto.java
  7. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractProductSelectDto.java
  8. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractProjectDto.java
  9. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractProjectSelectDto.java
  10. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractSelectDto.java
  11. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractShipmentDto.java
  12. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractShipmentSelectDto.java
  13. 193 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/Contract.java
  14. 63 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/ContractProduct.java
  15. 44 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/ContractProject.java
  16. 48 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/ContractShipment.java
  17. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractProductVo.java
  18. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractProjectVo.java
  19. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractShipmentVo.java
  20. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractVo.java
  21. 51 0
      hx-sale/src/main/java/com/fjhx/sale/enums/FlowStatusEnum.java
  22. 100 0
      hx-sale/src/main/java/com/fjhx/sale/flow/ContractFlow.java
  23. 26 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractMapper.java
  24. 26 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractProductMapper.java
  25. 26 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractProjectMapper.java
  26. 26 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractShipmentMapper.java
  27. 46 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractProductService.java
  28. 46 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractProjectService.java
  29. 46 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractService.java
  30. 46 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractShipmentService.java
  31. 57 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractProductServiceImpl.java
  32. 57 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractProjectServiceImpl.java
  33. 57 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java
  34. 57 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractShipmentServiceImpl.java
  35. 98 0
      hx-sale/src/main/java/com/fjhx/sale/util/code/CodeEnum.java

+ 68 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractController.java

@@ -0,0 +1,68 @@
+package com.fjhx.sale.controller.contract;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractVo;
+import com.fjhx.sale.entity.contract.dto.ContractSelectDto;
+import com.fjhx.sale.entity.contract.dto.ContractDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.sale.service.contract.ContractService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 外销合同表 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+@RestController
+@RequestMapping("/contract")
+public class ContractController {
+
+    @Autowired
+    private ContractService contractService;
+
+    /**
+     * 外销合同表分页
+     */
+    @PostMapping("/page")
+    public Page<ContractVo> page(@RequestBody ContractSelectDto dto) {
+        return contractService.getPage(dto);
+    }
+
+    /**
+     * 外销合同表明细
+     */
+    @PostMapping("/detail")
+    public ContractVo detail(@RequestBody BaseSelectDto dto) {
+        return contractService.detail(dto.getId());
+    }
+
+    /**
+     * 外销合同表新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody ContractDto contractDto) {
+        contractService.add(contractDto);
+    }
+
+    /**
+     * 外销合同表编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody ContractDto contractDto) {
+        contractService.edit(contractDto);
+    }
+
+    /**
+     * 外销合同表删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        contractService.delete(dto.getId());
+    }
+
+}

+ 68 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractProductController.java

@@ -0,0 +1,68 @@
+package com.fjhx.sale.controller.contract;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractProductVo;
+import com.fjhx.sale.entity.contract.dto.ContractProductSelectDto;
+import com.fjhx.sale.entity.contract.dto.ContractProductDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.sale.service.contract.ContractProductService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 外销合同-产品 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+@RestController
+@RequestMapping("/contractProduct")
+public class ContractProductController {
+
+    @Autowired
+    private ContractProductService contractProductService;
+
+    /**
+     * 外销合同-产品分页
+     */
+    @PostMapping("/page")
+    public Page<ContractProductVo> page(@RequestBody ContractProductSelectDto dto) {
+        return contractProductService.getPage(dto);
+    }
+
+    /**
+     * 外销合同-产品明细
+     */
+    @PostMapping("/detail")
+    public ContractProductVo detail(@RequestBody BaseSelectDto dto) {
+        return contractProductService.detail(dto.getId());
+    }
+
+    /**
+     * 外销合同-产品新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody ContractProductDto contractProductDto) {
+        contractProductService.add(contractProductDto);
+    }
+
+    /**
+     * 外销合同-产品编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody ContractProductDto contractProductDto) {
+        contractProductService.edit(contractProductDto);
+    }
+
+    /**
+     * 外销合同-产品删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        contractProductService.delete(dto.getId());
+    }
+
+}

+ 68 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractProjectController.java

@@ -0,0 +1,68 @@
+package com.fjhx.sale.controller.contract;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractProjectVo;
+import com.fjhx.sale.entity.contract.dto.ContractProjectSelectDto;
+import com.fjhx.sale.entity.contract.dto.ContractProjectDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.sale.service.contract.ContractProjectService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 外销合同-收费项目 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+@RestController
+@RequestMapping("/contractProject")
+public class ContractProjectController {
+
+    @Autowired
+    private ContractProjectService contractProjectService;
+
+    /**
+     * 外销合同-收费项目分页
+     */
+    @PostMapping("/page")
+    public Page<ContractProjectVo> page(@RequestBody ContractProjectSelectDto dto) {
+        return contractProjectService.getPage(dto);
+    }
+
+    /**
+     * 外销合同-收费项目明细
+     */
+    @PostMapping("/detail")
+    public ContractProjectVo detail(@RequestBody BaseSelectDto dto) {
+        return contractProjectService.detail(dto.getId());
+    }
+
+    /**
+     * 外销合同-收费项目新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody ContractProjectDto contractProjectDto) {
+        contractProjectService.add(contractProjectDto);
+    }
+
+    /**
+     * 外销合同-收费项目编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody ContractProjectDto contractProjectDto) {
+        contractProjectService.edit(contractProjectDto);
+    }
+
+    /**
+     * 外销合同-收费项目删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        contractProjectService.delete(dto.getId());
+    }
+
+}

+ 68 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractShipmentController.java

@@ -0,0 +1,68 @@
+package com.fjhx.sale.controller.contract;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractShipmentVo;
+import com.fjhx.sale.entity.contract.dto.ContractShipmentSelectDto;
+import com.fjhx.sale.entity.contract.dto.ContractShipmentDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.sale.service.contract.ContractShipmentService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 外销合同-出货计划 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+@RestController
+@RequestMapping("/contractShipment")
+public class ContractShipmentController {
+
+    @Autowired
+    private ContractShipmentService contractShipmentService;
+
+    /**
+     * 外销合同-出货计划分页
+     */
+    @PostMapping("/page")
+    public Page<ContractShipmentVo> page(@RequestBody ContractShipmentSelectDto dto) {
+        return contractShipmentService.getPage(dto);
+    }
+
+    /**
+     * 外销合同-出货计划明细
+     */
+    @PostMapping("/detail")
+    public ContractShipmentVo detail(@RequestBody BaseSelectDto dto) {
+        return contractShipmentService.detail(dto.getId());
+    }
+
+    /**
+     * 外销合同-出货计划新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody ContractShipmentDto contractShipmentDto) {
+        contractShipmentService.add(contractShipmentDto);
+    }
+
+    /**
+     * 外销合同-出货计划编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody ContractShipmentDto contractShipmentDto) {
+        contractShipmentService.edit(contractShipmentDto);
+    }
+
+    /**
+     * 外销合同-出货计划删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        contractShipmentService.delete(dto.getId());
+    }
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.contract.dto;
+
+import com.fjhx.sale.entity.contract.po.Contract;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 外销合同表新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+@Getter
+@Setter
+public class ContractDto extends Contract {
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractProductDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.contract.dto;
+
+import com.fjhx.sale.entity.contract.po.ContractProduct;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 外销合同-产品新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+@Getter
+@Setter
+public class ContractProductDto extends ContractProduct {
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractProductSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.contract.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 外销合同-产品列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+@Getter
+@Setter
+public class ContractProductSelectDto extends BaseSelectDto {
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractProjectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.contract.dto;
+
+import com.fjhx.sale.entity.contract.po.ContractProject;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 外销合同-收费项目新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+@Getter
+@Setter
+public class ContractProjectDto extends ContractProject {
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractProjectSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.contract.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 外销合同-收费项目列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+@Getter
+@Setter
+public class ContractProjectSelectDto extends BaseSelectDto {
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.contract.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 外销合同表列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+@Getter
+@Setter
+public class ContractSelectDto extends BaseSelectDto {
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractShipmentDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.contract.dto;
+
+import com.fjhx.sale.entity.contract.po.ContractShipment;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 外销合同-出货计划新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+@Getter
+@Setter
+public class ContractShipmentDto extends ContractShipment {
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractShipmentSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.contract.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 外销合同-出货计划列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+@Getter
+@Setter
+public class ContractShipmentSelectDto extends BaseSelectDto {
+
+}

+ 193 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/Contract.java

@@ -0,0 +1,193 @@
+package com.fjhx.sale.entity.contract.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 外销合同表
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+@Getter
+@Setter
+@TableName("contract")
+public class Contract extends BasePo {
+
+    /**
+     * 编码
+     */
+    private String code;
+
+    /**
+     * 合同模版ID
+     */
+    private Long contractTemplateId;
+
+    /**
+     * 卖方公司ID
+     */
+    private Long sellCorporationId;
+
+    /**
+     * 卖方联系人名称
+     */
+    private String sellContactName;
+
+    /**
+     * 卖方联系人电话
+     */
+    private String sellContactNumber;
+
+    /**
+     * 合同审批状态 0草稿 10、审批中;20、驳回  30、审批通过   99终止
+     */
+    private Integer status;
+    /**
+     * 卖方国家表id
+     */
+    private String sellCountryId;
+
+    /**
+     * 卖方省份id
+     */
+    private String sellProvinceId;
+
+    /**
+     * 卖方城市id
+     */
+    private String sellCityId;
+
+    /**
+     * 卖方详细地址
+     */
+    private String sellAddress;
+
+    /**
+     * 买方公司ID
+     */
+    private Long buyCorporationId;
+
+    /**
+     * 买方联系人名称
+     */
+    private String buyContactName;
+
+    /**
+     * 买方联系人电话
+     */
+    private String buyContactNumber;
+
+    /**
+     * 买方国家表id
+     */
+    private String buyCountryId;
+
+    /**
+     * 买方省份id
+     */
+    private String buyProvinceId;
+
+    /**
+     * 买方城市id
+     */
+    private String buyCityId;
+
+    /**
+     * 买方详细地址
+     */
+    private String buyAddress;
+
+    /**
+     * 买方邮编
+     */
+    private String buyPostalCode;
+
+    /**
+     * 币种(字典account_currency)
+     */
+    private String currency;
+
+    /**
+     * 合同金额
+     */
+    private BigDecimal amount;
+
+    /**
+     * 付款方式(字典funds_payment_method
+     */
+    private String paymentMethod;
+
+    /**
+     * 贸易方式(字典trade_methods)
+     */
+    private String tradeMethods;
+
+    /**
+     * 预付比例
+     */
+    private String advanceRatio;
+
+    /**
+     * 运输方式(字典  shipping_method)
+     */
+    private String transportMethod;
+
+    /**
+     * 运输备注
+     */
+    private String transportRemark;
+
+    /**
+     * 收款账号ID
+     */
+    private Long shroffAccountId;
+
+    /**
+     * 审批通过时间
+     */
+    private Date approvedDate;
+
+    /**
+     * 质保期
+     */
+    private Integer warranty;
+
+    /**
+     * 付款条件
+     */
+    private String remark;
+
+    /**
+     * 创建人名称
+     */
+    private String userName;
+
+    /**
+     * 合同产品列表
+     */
+    @TableField(exist = false)
+    private List<ContractProduct> contractProductList;
+
+    /**
+     * 合同出货列表
+     */
+    @TableField(exist = false)
+    private List<ContractShipment> contractShipmentList;
+
+    /**
+     * 合同收费项目
+     */
+    @TableField(exist = false)
+    private List<ContractProject> contractProjectList;
+
+}

+ 63 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/ContractProduct.java

@@ -0,0 +1,63 @@
+package com.fjhx.sale.entity.contract.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 外销合同-产品
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+@Getter
+@Setter
+@TableName("contract_product")
+public class ContractProduct extends BasePo {
+
+    /**
+     * 合同ID
+     */
+    private Long contractId;
+
+    /**
+     * 商品ID
+     */
+    private Long productId;
+
+    /**
+     * 商品名称
+     */
+    private String productName;
+
+    /**
+     * 商品型号
+     */
+    private String productModel;
+
+    /**
+     * 商品数量
+     */
+    private BigDecimal quantity;
+
+    /**
+     * 商品单价
+     */
+    private BigDecimal price;
+
+    /**
+     * 商品金额
+     */
+    private BigDecimal amount;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 44 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/ContractProject.java

@@ -0,0 +1,44 @@
+package com.fjhx.sale.entity.contract.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 外销合同-收费项目
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+@Getter
+@Setter
+@TableName("contract_project")
+public class ContractProject extends BasePo {
+
+    /**
+     * 合同ID
+     */
+    private Long contractId;
+
+    /**
+     * 收费项目
+
+     */
+    private String payName;
+
+    /**
+     * 金额
+     */
+    private BigDecimal amount;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 48 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/ContractShipment.java

@@ -0,0 +1,48 @@
+package com.fjhx.sale.entity.contract.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 外销合同-出货计划
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+@Getter
+@Setter
+@TableName("contract_shipment")
+public class ContractShipment extends BasePo {
+
+    /**
+     * 合同ID
+     */
+    private Long contractId;
+
+    /**
+     * 商品ID
+     */
+    private Long productId;
+
+    /**
+     * 出货日期
+     */
+    private Date shipmentTime;
+
+    /**
+     * 出货数量
+     */
+    private BigDecimal quantity;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractProductVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.contract.vo;
+
+import com.fjhx.sale.entity.contract.po.ContractProduct;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 外销合同-产品列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+@Getter
+@Setter
+public class ContractProductVo extends ContractProduct {
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractProjectVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.contract.vo;
+
+import com.fjhx.sale.entity.contract.po.ContractProject;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 外销合同-收费项目列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+@Getter
+@Setter
+public class ContractProjectVo extends ContractProject {
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractShipmentVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.contract.vo;
+
+import com.fjhx.sale.entity.contract.po.ContractShipment;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 外销合同-出货计划列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+@Getter
+@Setter
+public class ContractShipmentVo extends ContractShipment {
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.contract.vo;
+
+import com.fjhx.sale.entity.contract.po.Contract;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 外销合同表列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+@Getter
+@Setter
+public class ContractVo extends Contract {
+
+}

+ 51 - 0
hx-sale/src/main/java/com/fjhx/sale/enums/FlowStatusEnum.java

@@ -0,0 +1,51 @@
+package com.fjhx.sale.enums;
+
+import org.apache.commons.collections4.MapUtils;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * 采购状态枚举
+ */
+public enum FlowStatusEnum {
+    DRAFT(0, "草稿"),
+    UNDER_REVIEW(10, "审批中"),
+    REJECT(20, "驳回"),
+    PASS(30,"通过"),
+    ;
+    private int key;
+
+    private String value;
+
+    private static Map<Integer, String> map = new LinkedHashMap<>();
+
+    FlowStatusEnum(int key, String value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    /**
+     * 获取枚举map
+     *
+     * @return
+     */
+    public static Map<Integer, String> getMap() {
+        if (MapUtils.isNotEmpty(map)) {
+            return map;
+        }
+        for (FlowStatusEnum ms : values()) {
+            map.put(ms.key, ms.value);
+        }
+        return map;
+    }
+
+    public int getKey() {
+        return key;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+}

+ 100 - 0
hx-sale/src/main/java/com/fjhx/sale/flow/ContractFlow.java

@@ -0,0 +1,100 @@
+package com.fjhx.sale.flow;
+
+import cn.hutool.extra.spring.SpringUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.flow.core.FlowDelegate;
+import com.fjhx.sale.entity.contract.po.Contract;
+import com.fjhx.sale.entity.contract.po.ContractProduct;
+import com.fjhx.sale.entity.contract.po.ContractProject;
+import com.fjhx.sale.entity.contract.po.ContractShipment;
+import com.fjhx.sale.enums.FlowStatusEnum;
+import com.fjhx.sale.service.contract.ContractProductService;
+import com.fjhx.sale.service.contract.ContractProjectService;
+import com.fjhx.sale.service.contract.ContractService;
+import com.fjhx.sale.service.contract.ContractShipmentService;
+import com.fjhx.sale.util.code.CodeEnum;
+import com.obs.services.internal.ServiceException;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 采购付款流程
+ * @Author:caozj
+ * @DATE:2023/4/3 17:38
+ */
+@DS(SourceConstant.SALE)
+@Component
+public class ContractFlow extends FlowDelegate {
+
+    @Override
+    public String getFlowKey() {
+        return "contract_flow";
+    }
+
+
+    /**
+     * 发起流程
+     * @param flowId 流程ID
+     * @param submitData 采购付款数据
+     * @return
+     */
+    @Override
+    public Long start(Long flowId, JSONObject submitData) {
+        ContractService contractService = SpringUtil.getBean(ContractService.class);
+        ContractProductService contractProductService = SpringUtil.getBean(ContractProductService.class);
+        ContractProjectService contractProjectService = SpringUtil.getBean(ContractProjectService.class);
+        ContractShipmentService contractShipmentService = SpringUtil.getBean(ContractShipmentService.class);
+        Contract contract = submitData.toJavaObject(Contract.class);
+        contract.setCode(CodeEnum.CONTRACT.getCode());
+        contract.setStatus(FlowStatusEnum.UNDER_REVIEW.getKey());
+        contractService.save(contract);
+        List<ContractProduct> contractProductList = contract.getContractProductList();
+        if(CollectionUtils.isNotEmpty(contractProductList)){//保存合同产品
+            for(ContractProduct c : contractProductList){
+                c.setContractId(contract.getId());
+            }
+            contractProductService.saveBatch(contractProductList);
+        }
+        List<ContractProject> contractProjectList = contract.getContractProjectList();
+        if(CollectionUtils.isNotEmpty(contractProjectList)){//保存合同产品
+            for(ContractProject c : contractProjectList){
+                c.setContractId(contract.getId());
+            }
+            contractProjectService.saveBatch(contractProjectList);
+        }
+        List<ContractShipment> contractShipmentList = contract.getContractShipmentList();
+        if(CollectionUtils.isNotEmpty(contractShipmentList)){//保存合同产品
+            for(ContractShipment c : contractShipmentList){
+                c.setContractId(contract.getId());
+            }
+            contractShipmentService.saveBatch(contractShipmentList);
+        }
+        return contract.getId();
+    }
+
+    /**
+     * 结束流程
+     * @param flowId 流程ID
+     * @param businessId 业务ID
+     * @param submitData 数据
+     */
+    @Override
+    public void end(Long flowId, Long businessId, JSONObject submitData) {
+        ContractService contractService = SpringUtil.getBean(ContractService.class);
+        //通过业务ID查询申购数据
+        Contract contract = contractService.getById(businessId);
+        if(ObjectUtils.isEmpty(contract)){
+            throw new ServiceException("合同不存在");
+        }
+        //修改采购状态为审批通过
+        contract.setStatus(FlowStatusEnum.PASS.getKey());
+        contract.setApprovedDate(new Date());
+        contractService.updateById(contract);
+    }
+}

+ 26 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.sale.mapper.contract;
+
+import com.fjhx.sale.entity.contract.po.Contract;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 外销合同表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+public interface ContractMapper extends BaseMapper<Contract> {
+
+    /**
+     * 外销合同表分页
+     */
+    Page<ContractVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<Contract> wrapper);
+
+}

+ 26 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractProductMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.sale.mapper.contract;
+
+import com.fjhx.sale.entity.contract.po.ContractProduct;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractProductVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 外销合同-产品 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+public interface ContractProductMapper extends BaseMapper<ContractProduct> {
+
+    /**
+     * 外销合同-产品分页
+     */
+    Page<ContractProductVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<ContractProduct> wrapper);
+
+}

+ 26 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractProjectMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.sale.mapper.contract;
+
+import com.fjhx.sale.entity.contract.po.ContractProject;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractProjectVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 外销合同-收费项目 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+public interface ContractProjectMapper extends BaseMapper<ContractProject> {
+
+    /**
+     * 外销合同-收费项目分页
+     */
+    Page<ContractProjectVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<ContractProject> wrapper);
+
+}

+ 26 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractShipmentMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.sale.mapper.contract;
+
+import com.fjhx.sale.entity.contract.po.ContractShipment;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractShipmentVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 外销合同-出货计划 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+public interface ContractShipmentMapper extends BaseMapper<ContractShipment> {
+
+    /**
+     * 外销合同-出货计划分页
+     */
+    Page<ContractShipmentVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<ContractShipment> wrapper);
+
+}

+ 46 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractProductService.java

@@ -0,0 +1,46 @@
+package com.fjhx.sale.service.contract;
+
+import com.fjhx.sale.entity.contract.po.ContractProduct;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractProductVo;
+import com.fjhx.sale.entity.contract.dto.ContractProductSelectDto;
+import com.fjhx.sale.entity.contract.dto.ContractProductDto;
+
+
+/**
+ * <p>
+ * 外销合同-产品 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+public interface ContractProductService extends BaseService<ContractProduct> {
+
+    /**
+     * 外销合同-产品分页
+     */
+    Page<ContractProductVo> getPage(ContractProductSelectDto dto);
+
+    /**
+     * 外销合同-产品明细
+     */
+    ContractProductVo detail(Long id);
+
+    /**
+     * 外销合同-产品新增
+     */
+    void add(ContractProductDto contractProductDto);
+
+    /**
+     * 外销合同-产品编辑
+     */
+    void edit(ContractProductDto contractProductDto);
+
+    /**
+     * 外销合同-产品删除
+     */
+    void delete(Long id);
+
+}

+ 46 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractProjectService.java

@@ -0,0 +1,46 @@
+package com.fjhx.sale.service.contract;
+
+import com.fjhx.sale.entity.contract.po.ContractProject;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractProjectVo;
+import com.fjhx.sale.entity.contract.dto.ContractProjectSelectDto;
+import com.fjhx.sale.entity.contract.dto.ContractProjectDto;
+
+
+/**
+ * <p>
+ * 外销合同-收费项目 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+public interface ContractProjectService extends BaseService<ContractProject> {
+
+    /**
+     * 外销合同-收费项目分页
+     */
+    Page<ContractProjectVo> getPage(ContractProjectSelectDto dto);
+
+    /**
+     * 外销合同-收费项目明细
+     */
+    ContractProjectVo detail(Long id);
+
+    /**
+     * 外销合同-收费项目新增
+     */
+    void add(ContractProjectDto contractProjectDto);
+
+    /**
+     * 外销合同-收费项目编辑
+     */
+    void edit(ContractProjectDto contractProjectDto);
+
+    /**
+     * 外销合同-收费项目删除
+     */
+    void delete(Long id);
+
+}

+ 46 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractService.java

@@ -0,0 +1,46 @@
+package com.fjhx.sale.service.contract;
+
+import com.fjhx.sale.entity.contract.po.Contract;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractVo;
+import com.fjhx.sale.entity.contract.dto.ContractSelectDto;
+import com.fjhx.sale.entity.contract.dto.ContractDto;
+
+
+/**
+ * <p>
+ * 外销合同表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+public interface ContractService extends BaseService<Contract> {
+
+    /**
+     * 外销合同表分页
+     */
+    Page<ContractVo> getPage(ContractSelectDto dto);
+
+    /**
+     * 外销合同表明细
+     */
+    ContractVo detail(Long id);
+
+    /**
+     * 外销合同表新增
+     */
+    void add(ContractDto contractDto);
+
+    /**
+     * 外销合同表编辑
+     */
+    void edit(ContractDto contractDto);
+
+    /**
+     * 外销合同表删除
+     */
+    void delete(Long id);
+
+}

+ 46 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractShipmentService.java

@@ -0,0 +1,46 @@
+package com.fjhx.sale.service.contract;
+
+import com.fjhx.sale.entity.contract.po.ContractShipment;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractShipmentVo;
+import com.fjhx.sale.entity.contract.dto.ContractShipmentSelectDto;
+import com.fjhx.sale.entity.contract.dto.ContractShipmentDto;
+
+
+/**
+ * <p>
+ * 外销合同-出货计划 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+public interface ContractShipmentService extends BaseService<ContractShipment> {
+
+    /**
+     * 外销合同-出货计划分页
+     */
+    Page<ContractShipmentVo> getPage(ContractShipmentSelectDto dto);
+
+    /**
+     * 外销合同-出货计划明细
+     */
+    ContractShipmentVo detail(Long id);
+
+    /**
+     * 外销合同-出货计划新增
+     */
+    void add(ContractShipmentDto contractShipmentDto);
+
+    /**
+     * 外销合同-出货计划编辑
+     */
+    void edit(ContractShipmentDto contractShipmentDto);
+
+    /**
+     * 外销合同-出货计划删除
+     */
+    void delete(Long id);
+
+}

+ 57 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractProductServiceImpl.java

@@ -0,0 +1,57 @@
+package com.fjhx.sale.service.contract.impl;
+
+import com.fjhx.sale.entity.contract.po.ContractProduct;
+import com.fjhx.sale.mapper.contract.ContractProductMapper;
+import com.fjhx.sale.service.contract.ContractProductService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractProductVo;
+import com.fjhx.sale.entity.contract.dto.ContractProductSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.sale.entity.contract.dto.ContractProductDto;
+import cn.hutool.core.bean.BeanUtil;
+
+
+/**
+ * <p>
+ * 外销合同-产品 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+@Service
+public class ContractProductServiceImpl extends ServiceImpl<ContractProductMapper, ContractProduct> implements ContractProductService {
+
+    @Override
+    public Page<ContractProductVo> getPage(ContractProductSelectDto dto) {
+        IWrapper<ContractProduct> wrapper = getWrapper();
+        wrapper.orderByDesc("cp", ContractProduct::getId);
+        Page<ContractProductVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    @Override
+    public ContractProductVo detail(Long id) {
+        ContractProduct ContractProduct = this.getById(id);
+        ContractProductVo result = BeanUtil.toBean(ContractProduct, ContractProductVo.class);
+        return result;
+    }
+
+    @Override
+    public void add(ContractProductDto contractProductDto) {
+        this.save(contractProductDto);
+    }
+
+    @Override
+    public void edit(ContractProductDto contractProductDto) {
+        this.updateById(contractProductDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

+ 57 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractProjectServiceImpl.java

@@ -0,0 +1,57 @@
+package com.fjhx.sale.service.contract.impl;
+
+import com.fjhx.sale.entity.contract.po.ContractProject;
+import com.fjhx.sale.mapper.contract.ContractProjectMapper;
+import com.fjhx.sale.service.contract.ContractProjectService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractProjectVo;
+import com.fjhx.sale.entity.contract.dto.ContractProjectSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.sale.entity.contract.dto.ContractProjectDto;
+import cn.hutool.core.bean.BeanUtil;
+
+
+/**
+ * <p>
+ * 外销合同-收费项目 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+@Service
+public class ContractProjectServiceImpl extends ServiceImpl<ContractProjectMapper, ContractProject> implements ContractProjectService {
+
+    @Override
+    public Page<ContractProjectVo> getPage(ContractProjectSelectDto dto) {
+        IWrapper<ContractProject> wrapper = getWrapper();
+        wrapper.orderByDesc("cp", ContractProject::getId);
+        Page<ContractProjectVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    @Override
+    public ContractProjectVo detail(Long id) {
+        ContractProject ContractProject = this.getById(id);
+        ContractProjectVo result = BeanUtil.toBean(ContractProject, ContractProjectVo.class);
+        return result;
+    }
+
+    @Override
+    public void add(ContractProjectDto contractProjectDto) {
+        this.save(contractProjectDto);
+    }
+
+    @Override
+    public void edit(ContractProjectDto contractProjectDto) {
+        this.updateById(contractProjectDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

+ 57 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java

@@ -0,0 +1,57 @@
+package com.fjhx.sale.service.contract.impl;
+
+import com.fjhx.sale.entity.contract.po.Contract;
+import com.fjhx.sale.mapper.contract.ContractMapper;
+import com.fjhx.sale.service.contract.ContractService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractVo;
+import com.fjhx.sale.entity.contract.dto.ContractSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.sale.entity.contract.dto.ContractDto;
+import cn.hutool.core.bean.BeanUtil;
+
+
+/**
+ * <p>
+ * 外销合同表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+@Service
+public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> implements ContractService {
+
+    @Override
+    public Page<ContractVo> getPage(ContractSelectDto dto) {
+        IWrapper<Contract> wrapper = getWrapper();
+        wrapper.orderByDesc("c", Contract::getId);
+        Page<ContractVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    @Override
+    public ContractVo detail(Long id) {
+        Contract Contract = this.getById(id);
+        ContractVo result = BeanUtil.toBean(Contract, ContractVo.class);
+        return result;
+    }
+
+    @Override
+    public void add(ContractDto contractDto) {
+        this.save(contractDto);
+    }
+
+    @Override
+    public void edit(ContractDto contractDto) {
+        this.updateById(contractDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

+ 57 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractShipmentServiceImpl.java

@@ -0,0 +1,57 @@
+package com.fjhx.sale.service.contract.impl;
+
+import com.fjhx.sale.entity.contract.po.ContractShipment;
+import com.fjhx.sale.mapper.contract.ContractShipmentMapper;
+import com.fjhx.sale.service.contract.ContractShipmentService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractShipmentVo;
+import com.fjhx.sale.entity.contract.dto.ContractShipmentSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.sale.entity.contract.dto.ContractShipmentDto;
+import cn.hutool.core.bean.BeanUtil;
+
+
+/**
+ * <p>
+ * 外销合同-出货计划 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+@Service
+public class ContractShipmentServiceImpl extends ServiceImpl<ContractShipmentMapper, ContractShipment> implements ContractShipmentService {
+
+    @Override
+    public Page<ContractShipmentVo> getPage(ContractShipmentSelectDto dto) {
+        IWrapper<ContractShipment> wrapper = getWrapper();
+        wrapper.orderByDesc("cs", ContractShipment::getId);
+        Page<ContractShipmentVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    @Override
+    public ContractShipmentVo detail(Long id) {
+        ContractShipment ContractShipment = this.getById(id);
+        ContractShipmentVo result = BeanUtil.toBean(ContractShipment, ContractShipmentVo.class);
+        return result;
+    }
+
+    @Override
+    public void add(ContractShipmentDto contractShipmentDto) {
+        this.save(contractShipmentDto);
+    }
+
+    @Override
+    public void edit(ContractShipmentDto contractShipmentDto) {
+        this.updateById(contractShipmentDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

+ 98 - 0
hx-sale/src/main/java/com/fjhx/sale/util/code/CodeEnum.java

@@ -0,0 +1,98 @@
+package com.fjhx.sale.util.code;
+
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.text.CharSequenceUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.extra.spring.SpringUtil;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fjhx.sale.service.contract.ContractService;
+import com.obs.services.internal.ServiceException;
+import lombok.Getter;
+
+import java.util.Date;
+import java.util.Map;
+
+@Getter
+public enum CodeEnum {
+
+    //外销合同
+    CONTRACT("SC", "yyMM-", "code", 3, ContractService.class),
+    ;
+
+    CodeEnum(String prefix, String dateFormat, String codeFieldName, Integer length, Class<? extends IService<?>> serviceCls) {
+        this.prefix = prefix;
+        this.dateFormat = dateFormat;
+        this.length = length;
+        this.codeFieldName = codeFieldName;
+        this.service = SpringUtil.getBean(serviceCls);
+    }
+
+    // 编码前缀
+    private final String prefix;
+    // 编码加日期规则
+    private final String dateFormat;
+    // 长度
+    private final Integer length;
+    // 编码字段名
+    private final String codeFieldName;
+    // service
+    private final IService<?> service;
+
+    /**
+     * 获取键值对
+     */
+    public String getCode() {
+        String itemPrefix;
+
+        if (ObjectUtil.isNotEmpty(dateFormat)) {
+            Date date = new Date();
+            String format = DateUtil.format(date, dateFormat);
+            itemPrefix = prefix + format;
+        } else {
+            itemPrefix = prefix;
+        }
+
+        Object obj = service.query()
+                .likeRight(codeFieldName, itemPrefix)
+                .orderByDesc(codeFieldName)
+                .last("limit 1")
+                .one();
+
+        if (obj == null) {
+            return itemPrefix + autoGenericCode(length, 0);
+        }
+
+        Map<String, Object> map = Convert.toMap(String.class, Object.class, obj);
+
+        String code = Convert.toStr(map.get(CharSequenceUtil.toCamelCase(codeFieldName)));
+        Integer codeNum = Convert.toInt(code.substring(itemPrefix.length()));
+        if (ObjectUtil.isEmpty(codeNum)) {
+            throw new ServiceException("自定义编码与系统编码生成规则冲突,暂时无法生成编码,请联系管理员");
+        }
+
+        return itemPrefix + autoGenericCode(length, codeNum);
+    }
+
+    /**
+     * 获取键值对
+     */
+    public String getCode(String code) {
+        if (ObjectUtil.isNotEmpty(code)) {
+            Long count = service.query().eq(codeFieldName, code).count();
+            if (count != 0) {
+                throw new ServiceException("编码已存在");
+            }
+            return code;
+        } else {
+            return getCode();
+        }
+    }
+    /**
+     * 不够位数的在前面补0,保留num的长度位数字
+     */
+    private static String autoGenericCode(int length, Integer codeNum) {
+        return String.format("%0" + length + "d", codeNum + 1);
+    }
+
+}