Browse Source

Merge remote-tracking branch 'origin/master'

24282 2 years ago
parent
commit
a578a4ef9f
61 changed files with 1548 additions and 63 deletions
  1. 68 0
      hx-common/src/main/java/com/fjhx/common/controller/documentary/DocumentaryController.java
  2. 17 0
      hx-common/src/main/java/com/fjhx/common/entity/documentary/dto/DocumentaryDto.java
  3. 17 0
      hx-common/src/main/java/com/fjhx/common/entity/documentary/dto/DocumentarySelectDto.java
  4. 47 0
      hx-common/src/main/java/com/fjhx/common/entity/documentary/po/Documentary.java
  5. 17 0
      hx-common/src/main/java/com/fjhx/common/entity/documentary/vo/DocumentaryVo.java
  6. 26 0
      hx-common/src/main/java/com/fjhx/common/mapper/documentary/DocumentaryMapper.java
  7. 46 0
      hx-common/src/main/java/com/fjhx/common/service/documentary/DocumentaryService.java
  8. 57 0
      hx-common/src/main/java/com/fjhx/common/service/documentary/impl/DocumentaryServiceImpl.java
  9. 20 0
      hx-common/src/main/resources/mapper/documentary/DocumentaryMapper.xml
  10. 2 2
      hx-purchase/src/main/java/com/fjhx/purchase/entity/pay/enums/PayTypeEnum.java
  11. 28 0
      hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractController.java
  12. 3 2
      hx-sale/src/main/java/com/fjhx/sale/controller/pack/PackController.java
  13. 8 0
      hx-sale/src/main/java/com/fjhx/sale/controller/pack/PackDetailController.java
  14. 68 0
      hx-sale/src/main/java/com/fjhx/sale/controller/pack/PackShipmentController.java
  15. 9 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/ContractProduct.java
  16. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractVo.java
  17. 11 0
      hx-sale/src/main/java/com/fjhx/sale/entity/pack/dto/PackDetailDto.java
  18. 5 0
      hx-sale/src/main/java/com/fjhx/sale/entity/pack/dto/PackDetailSelectDto.java
  19. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/pack/dto/PackShipmentDto.java
  20. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/pack/dto/PackShipmentSelectDto.java
  21. 49 0
      hx-sale/src/main/java/com/fjhx/sale/entity/pack/enums/PackShipmentStatusEnum.java
  22. 3 8
      hx-sale/src/main/java/com/fjhx/sale/entity/pack/po/Pack.java
  23. 2 7
      hx-sale/src/main/java/com/fjhx/sale/entity/pack/po/PackDetail.java
  24. 0 5
      hx-sale/src/main/java/com/fjhx/sale/entity/pack/po/PackDetailProduct.java
  25. 37 0
      hx-sale/src/main/java/com/fjhx/sale/entity/pack/po/PackShipment.java
  26. 4 0
      hx-sale/src/main/java/com/fjhx/sale/entity/pack/vo/PackDetailVo.java
  27. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/pack/vo/PackShipmentVo.java
  28. 6 0
      hx-sale/src/main/java/com/fjhx/sale/flow/ContractFlow.java
  29. 17 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractMapper.java
  30. 26 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/pack/PackShipmentMapper.java
  31. 21 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractService.java
  32. 31 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java
  33. 7 0
      hx-sale/src/main/java/com/fjhx/sale/service/pack/PackDetailService.java
  34. 1 1
      hx-sale/src/main/java/com/fjhx/sale/service/pack/PackService.java
  35. 46 0
      hx-sale/src/main/java/com/fjhx/sale/service/pack/PackShipmentService.java
  36. 55 1
      hx-sale/src/main/java/com/fjhx/sale/service/pack/impl/PackDetailServiceImpl.java
  37. 81 2
      hx-sale/src/main/java/com/fjhx/sale/service/pack/impl/PackServiceImpl.java
  38. 57 0
      hx-sale/src/main/java/com/fjhx/sale/service/pack/impl/PackShipmentServiceImpl.java
  39. 3 0
      hx-sale/src/main/java/com/fjhx/sale/util/code/CodeEnum.java
  40. 39 0
      hx-sale/src/main/resources/mapper/contract/ContractMapper.xml
  41. 7 23
      hx-sale/src/main/resources/mapper/pack/PackDetailMapper.xml
  42. 18 0
      hx-sale/src/main/resources/mapper/pack/PackShipmentMapper.xml
  43. 70 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/controller/jd/JdBackQualityDetailsController.java
  44. 16 1
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/controller/jd/JdBackQualityWaitController.java
  45. 17 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/jd/dto/JdBackQualityDetailsDto.java
  46. 22 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/jd/dto/JdBackQualityDetailsSelectDto.java
  47. 44 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/jd/po/JdBackQualityDetails.java
  48. 41 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/jd/vo/JdBackQualityDetailsVo.java
  49. 25 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/jd/vo/JdBackQualityWaitVo.java
  50. 26 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/mapper/jd/JdBackQualityDetailsMapper.java
  51. 10 1
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/mapper/jd/JdBackQualityWaitMapper.java
  52. 48 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/JdBackQualityDetailsService.java
  53. 9 1
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/JdBackQualityWaitService.java
  54. 117 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/impl/JdBackQualityDetailsServiceImpl.java
  55. 26 1
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/impl/JdBackQualityWaitServiceImpl.java
  56. 8 8
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/impl/JdBackServiceImpl.java
  57. 2 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/utils/CodeEnum.java
  58. 19 0
      hx-victoriatourist/src/main/resources/mapper/jd/JdBackQualityDetailsMapper.xml
  59. 13 0
      hx-victoriatourist/src/main/resources/mapper/jd/JdBackQualityWaitMapper.xml
  60. 7 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockSelectDto.java
  61. 1 0
      hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockServiceImpl.java

+ 68 - 0
hx-common/src/main/java/com/fjhx/common/controller/documentary/DocumentaryController.java

@@ -0,0 +1,68 @@
+package com.fjhx.common.controller.documentary;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.common.entity.documentary.vo.DocumentaryVo;
+import com.fjhx.common.entity.documentary.dto.DocumentarySelectDto;
+import com.fjhx.common.entity.documentary.dto.DocumentaryDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.common.service.documentary.DocumentaryService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 跟单配置 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+@RestController
+@RequestMapping("/documentary")
+public class DocumentaryController {
+
+    @Autowired
+    private DocumentaryService documentaryService;
+
+    /**
+     * 跟单配置分页
+     */
+    @PostMapping("/page")
+    public Page<DocumentaryVo> page(@RequestBody DocumentarySelectDto dto) {
+        return documentaryService.getPage(dto);
+    }
+
+    /**
+     * 跟单配置明细
+     */
+    @PostMapping("/detail")
+    public DocumentaryVo detail(@RequestBody BaseSelectDto dto) {
+        return documentaryService.detail(dto.getId());
+    }
+
+    /**
+     * 跟单配置新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody DocumentaryDto documentaryDto) {
+        documentaryService.add(documentaryDto);
+    }
+
+    /**
+     * 跟单配置编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody DocumentaryDto documentaryDto) {
+        documentaryService.edit(documentaryDto);
+    }
+
+    /**
+     * 跟单配置删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        documentaryService.delete(dto.getId());
+    }
+
+}

+ 17 - 0
hx-common/src/main/java/com/fjhx/common/entity/documentary/dto/DocumentaryDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.common.entity.documentary.dto;
+
+import com.fjhx.common.entity.documentary.po.Documentary;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 跟单配置新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+@Getter
+@Setter
+public class DocumentaryDto extends Documentary {
+
+}

+ 17 - 0
hx-common/src/main/java/com/fjhx/common/entity/documentary/dto/DocumentarySelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.common.entity.documentary.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 跟单配置列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+@Getter
+@Setter
+public class DocumentarySelectDto extends BaseSelectDto {
+
+}

+ 47 - 0
hx-common/src/main/java/com/fjhx/common/entity/documentary/po/Documentary.java

@@ -0,0 +1,47 @@
+package com.fjhx.common.entity.documentary.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 跟单配置
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+@Getter
+@Setter
+@TableName("documentary")
+public class Documentary extends BasePo {
+
+    /**
+     * 跟单类型 字典documentary_type
+     */
+    private Integer type;
+
+    /**
+     * 节点名称
+     */
+    private String name;
+
+    /**
+     * 节点排序
+     */
+    private Integer sort;
+
+    /**
+     * 绑定类型 字典 documentary_bind
+     */
+    private Integer bind;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 17 - 0
hx-common/src/main/java/com/fjhx/common/entity/documentary/vo/DocumentaryVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.common.entity.documentary.vo;
+
+import com.fjhx.common.entity.documentary.po.Documentary;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 跟单配置列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+@Getter
+@Setter
+public class DocumentaryVo extends Documentary {
+
+}

+ 26 - 0
hx-common/src/main/java/com/fjhx/common/mapper/documentary/DocumentaryMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.common.mapper.documentary;
+
+import com.fjhx.common.entity.documentary.po.Documentary;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.common.entity.documentary.vo.DocumentaryVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 跟单配置 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+public interface DocumentaryMapper extends BaseMapper<Documentary> {
+
+    /**
+     * 跟单配置分页
+     */
+    Page<DocumentaryVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<Documentary> wrapper);
+
+}

+ 46 - 0
hx-common/src/main/java/com/fjhx/common/service/documentary/DocumentaryService.java

@@ -0,0 +1,46 @@
+package com.fjhx.common.service.documentary;
+
+import com.fjhx.common.entity.documentary.po.Documentary;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.common.entity.documentary.vo.DocumentaryVo;
+import com.fjhx.common.entity.documentary.dto.DocumentarySelectDto;
+import com.fjhx.common.entity.documentary.dto.DocumentaryDto;
+
+
+/**
+ * <p>
+ * 跟单配置 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+public interface DocumentaryService extends BaseService<Documentary> {
+
+    /**
+     * 跟单配置分页
+     */
+    Page<DocumentaryVo> getPage(DocumentarySelectDto dto);
+
+    /**
+     * 跟单配置明细
+     */
+    DocumentaryVo detail(Long id);
+
+    /**
+     * 跟单配置新增
+     */
+    void add(DocumentaryDto documentaryDto);
+
+    /**
+     * 跟单配置编辑
+     */
+    void edit(DocumentaryDto documentaryDto);
+
+    /**
+     * 跟单配置删除
+     */
+    void delete(Long id);
+
+}

+ 57 - 0
hx-common/src/main/java/com/fjhx/common/service/documentary/impl/DocumentaryServiceImpl.java

@@ -0,0 +1,57 @@
+package com.fjhx.common.service.documentary.impl;
+
+import com.fjhx.common.entity.documentary.po.Documentary;
+import com.fjhx.common.mapper.documentary.DocumentaryMapper;
+import com.fjhx.common.service.documentary.DocumentaryService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.common.entity.documentary.vo.DocumentaryVo;
+import com.fjhx.common.entity.documentary.dto.DocumentarySelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.common.entity.documentary.dto.DocumentaryDto;
+import cn.hutool.core.bean.BeanUtil;
+
+
+/**
+ * <p>
+ * 跟单配置 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+@Service
+public class DocumentaryServiceImpl extends ServiceImpl<DocumentaryMapper, Documentary> implements DocumentaryService {
+
+    @Override
+    public Page<DocumentaryVo> getPage(DocumentarySelectDto dto) {
+        IWrapper<Documentary> wrapper = getWrapper();
+        wrapper.orderByDesc("d", Documentary::getId);
+        Page<DocumentaryVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    @Override
+    public DocumentaryVo detail(Long id) {
+        Documentary Documentary = this.getById(id);
+        DocumentaryVo result = BeanUtil.toBean(Documentary, DocumentaryVo.class);
+        return result;
+    }
+
+    @Override
+    public void add(DocumentaryDto documentaryDto) {
+        this.save(documentaryDto);
+    }
+
+    @Override
+    public void edit(DocumentaryDto documentaryDto) {
+        this.updateById(documentaryDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

+ 20 - 0
hx-common/src/main/resources/mapper/documentary/DocumentaryMapper.xml

@@ -0,0 +1,20 @@
+<?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.fjhx.common.mapper.documentary.DocumentaryMapper">
+    <select id="getPage" resultType="com.fjhx.common.entity.documentary.vo.DocumentaryVo">
+        select
+            d.id,
+            d.type,
+            d.name,
+            d.sort,
+            d.bind,
+            d.remark,
+            d.create_user,
+            d.create_time,
+            d.update_user,
+            d.update_time
+        from documentary d
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 2 - 2
hx-purchase/src/main/java/com/fjhx/purchase/entity/pay/enums/PayTypeEnum.java

@@ -10,8 +10,8 @@ import java.util.Map;
  */
 public enum PayTypeEnum {
     TYPE_0(0, "未退款"),
-    TYPE_10(0, "部分退款"),
-    TYPE_20(10, "已退款"),
+    TYPE_10(10, "部分退款"),
+    TYPE_20(20, "已退款"),
     ;
     private int key;
 

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

@@ -1,5 +1,6 @@
 package com.fjhx.sale.controller.contract;
 
+import com.fjhx.sale.entity.contract.po.Contract;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.sale.entity.contract.vo.ContractVo;
@@ -9,6 +10,8 @@ import com.ruoyi.common.core.domain.BaseSelectDto;
 import com.fjhx.sale.service.contract.ContractService;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -65,4 +68,29 @@ public class ContractController {
         contractService.delete(dto.getId());
     }
 
+    /**
+     * 根据客户ID查询未包装的订单
+     */
+    @GetMapping("/getNoPackContractByCustomerId")
+    public List<ContractVo> getNoPackContractByCustomerId(@RequestParam("customerId")String customerId) {
+        return contractService.getNoPackContractByCustomerId(customerId);
+    }
+
+    /**
+     * 根据合同ID和客户ID查询未包装的产品
+     */
+    @GetMapping("/getNoPackContractProductById")
+    public List<ContractVo> getNoPackContractProductById(@RequestParam("customerId")String customerId,@RequestParam("contractId")String contractId) {
+        return contractService.getNoPackContractProductById(customerId,contractId);
+    }
+
+    /**
+     * 根据合同id集合查询合同列表
+     */
+    @PostMapping("/getByIds")
+    public List<Contract> getByIds(@RequestBody List<Long> ids) {
+        return contractService.getByIds(ids);
+    }
+
+
 }

+ 3 - 2
hx-sale/src/main/java/com/fjhx/sale/controller/pack/PackController.java

@@ -1,5 +1,6 @@
 package com.fjhx.sale.controller.pack;
 
+import com.fjhx.sale.entity.pack.po.Pack;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.sale.entity.pack.vo.PackVo;
@@ -45,8 +46,8 @@ public class PackController {
      * 装箱出货表新增
      */
     @PostMapping("/add")
-    public void add(@RequestBody PackDto packDto) {
-        packService.add(packDto);
+    public void add(@RequestBody Pack pack) {
+        packService.add(pack);
     }
 
     /**

+ 8 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/pack/PackDetailController.java

@@ -65,4 +65,12 @@ public class PackDetailController {
         packDetailService.delete(dto.getId());
     }
 
+    /**
+     * 出货
+     */
+    @PostMapping("/shipment")
+    public void shipment(@RequestBody PackDetailDto dto) {
+        packDetailService.shipment(dto.getIds(),dto.getContractId());
+    }
+
 }

+ 68 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/pack/PackShipmentController.java

@@ -0,0 +1,68 @@
+package com.fjhx.sale.controller.pack;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.pack.vo.PackShipmentVo;
+import com.fjhx.sale.entity.pack.dto.PackShipmentSelectDto;
+import com.fjhx.sale.entity.pack.dto.PackShipmentDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.sale.service.pack.PackShipmentService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 出货绑定主合同表 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+@RestController
+@RequestMapping("/packShipment")
+public class PackShipmentController {
+
+    @Autowired
+    private PackShipmentService packShipmentService;
+
+    /**
+     * 出货绑定主合同表分页
+     */
+    @PostMapping("/page")
+    public Page<PackShipmentVo> page(@RequestBody PackShipmentSelectDto dto) {
+        return packShipmentService.getPage(dto);
+    }
+
+    /**
+     * 出货绑定主合同表明细
+     */
+    @PostMapping("/detail")
+    public PackShipmentVo detail(@RequestBody BaseSelectDto dto) {
+        return packShipmentService.detail(dto.getId());
+    }
+
+    /**
+     * 出货绑定主合同表新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody PackShipmentDto packShipmentDto) {
+        packShipmentService.add(packShipmentDto);
+    }
+
+    /**
+     * 出货绑定主合同表编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody PackShipmentDto packShipmentDto) {
+        packShipmentService.edit(packShipmentDto);
+    }
+
+    /**
+     * 出货绑定主合同表删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        packShipmentService.delete(dto.getId());
+    }
+
+}

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

@@ -1,9 +1,13 @@
 package com.fjhx.sale.entity.contract.po;
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fjhx.file.entity.ObsFile;
 import com.ruoyi.common.core.domain.BasePo;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
+
 import lombok.Getter;
 import lombok.Setter;
 
@@ -60,4 +64,9 @@ public class ContractProduct extends BasePo {
      */
     private String remark;
 
+    /**
+     * 附件列表
+     */
+    @TableField(exist = false)
+    private List<ObsFile> fileList;
 }

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

@@ -4,6 +4,8 @@ import com.fjhx.sale.entity.contract.po.Contract;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
+
 /**
  * 外销合同表列表查询返回值实体
  *
@@ -23,4 +25,19 @@ public class ContractVo extends Contract {
      * 卖方名称
      */
     private String sellCorporationName;
+
+    /**
+     * 合同产品数量
+     */
+    private BigDecimal cpQuantity;
+
+    /**
+     * 已包装数量
+     */
+    private BigDecimal sumPackQuantity;
+
+    /**
+     * 合同产品ID
+     */
+    private Long contractProductId;
 }

+ 11 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/pack/dto/PackDetailDto.java

@@ -4,6 +4,8 @@ import com.fjhx.sale.entity.pack.po.PackDetail;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.List;
+
 /**
  * 装箱出货明细表	新增编辑入参实体
  *
@@ -14,4 +16,13 @@ import lombok.Setter;
 @Setter
 public class PackDetailDto extends PackDetail {
 
+    /**
+     * 出货明细id集合
+     */
+    private List<Long> ids;
+
+    /**
+     * 主合同
+     */
+    private Long contractId;
 }

+ 5 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/pack/dto/PackDetailSelectDto.java

@@ -14,4 +14,9 @@ import lombok.Setter;
 @Setter
 public class PackDetailSelectDto extends BaseSelectDto {
 
+
+    /**
+     * 出货状态 0未出货 1出货
+     */
+    private Integer shipmentStatus;
 }

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/pack/dto/PackShipmentDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.pack.dto;
+
+import com.fjhx.sale.entity.pack.po.PackShipment;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 出货绑定主合同表新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+@Getter
+@Setter
+public class PackShipmentDto extends PackShipment {
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/pack/dto/PackShipmentSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.pack.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 出货绑定主合同表列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+@Getter
+@Setter
+public class PackShipmentSelectDto extends BaseSelectDto {
+
+}

+ 49 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/pack/enums/PackShipmentStatusEnum.java

@@ -0,0 +1,49 @@
+package com.fjhx.sale.entity.pack.enums;
+
+import org.apache.commons.collections4.MapUtils;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * 出货状态枚举
+ */
+public enum PackShipmentStatusEnum {
+    STATUS_0(0, "未出货"),
+    STATUS_1(1, "已出货"),
+    ;
+    private int key;
+
+    private String value;
+
+    private static Map<Integer, String> map = new LinkedHashMap<>();
+
+    PackShipmentStatusEnum(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 (PackShipmentStatusEnum ms : values()) {
+            map.put(ms.key, ms.value);
+        }
+        return map;
+    }
+
+    public int getKey() {
+        return key;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+}

+ 3 - 8
hx-sale/src/main/java/com/fjhx/sale/entity/pack/po/Pack.java

@@ -19,7 +19,7 @@ import lombok.Setter;
  */
 @Getter
 @Setter
-@TableName("mapper/pack")
+@TableName("pack")
 public class Pack extends BasePo {
 
     /**
@@ -33,14 +33,9 @@ public class Pack extends BasePo {
     private Long customerId;
 
     /**
-     * 合同ID
+     * 合同IDS
      */
-    private Long contractIds;
-
-    /**
-     * 合同编码
-     */
-    private String contractCode;
+    private String contractIds;
 
     /**
      * 备注

+ 2 - 7
hx-sale/src/main/java/com/fjhx/sale/entity/pack/po/PackDetail.java

@@ -34,14 +34,9 @@ public class PackDetail extends BasePo {
     private Long customerId;
 
     /**
-     * 合同ID
+     * 合同IDS
      */
-    private Long contractId;
-
-    /**
-     * 合同编码
-     */
-    private String contractCode;
+    private String contractIds;
 
     /**
      * 箱数

+ 0 - 5
hx-sale/src/main/java/com/fjhx/sale/entity/pack/po/PackDetailProduct.java

@@ -21,11 +21,6 @@ import lombok.Setter;
 public class PackDetailProduct extends BasePo {
 
     /**
-     * 装箱单编码
-     */
-    private String code;
-
-    /**
      * 装箱明细ID
      */
     private Long packDetailId;

+ 37 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/pack/po/PackShipment.java

@@ -0,0 +1,37 @@
+package com.fjhx.sale.entity.pack.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 出货绑定主合同表
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+@Getter
+@Setter
+@TableName("pack_shipment")
+public class PackShipment extends BasePo {
+
+    /**
+     * 包装明细单ID  多个逗号隔开
+     */
+    private String packDetailIds;
+
+    /**
+     * 主合同ID
+     */
+    private Long contractId;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 4 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/pack/vo/PackDetailVo.java

@@ -14,4 +14,8 @@ import lombok.Setter;
 @Setter
 public class PackDetailVo extends PackDetail {
 
+    /**
+     * 合同编码+产品名称
+     */
+    private String codeAPName;
 }

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/pack/vo/PackShipmentVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.pack.vo;
+
+import com.fjhx.sale.entity.pack.po.PackShipment;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 出货绑定主合同表列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+@Getter
+@Setter
+public class PackShipmentVo extends PackShipment {
+
+}

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

@@ -3,9 +3,11 @@ 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.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.file.utils.ObsFileUtil;
 import com.fjhx.flow.core.FlowDelegate;
 import com.fjhx.sale.entity.contract.po.Contract;
 import com.fjhx.sale.entity.contract.po.ContractProduct;
@@ -18,6 +20,7 @@ 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 com.ruoyi.common.utils.uuid.IdUtils;
 import org.springframework.stereotype.Component;
 
 import java.util.Date;
@@ -47,6 +50,7 @@ public class ContractFlow extends FlowDelegate {
      * @return
      */
     @Override
+    @DSTransactional
     public Long start(Long flowId, JSONObject submitData) {
         ContractService contractService = SpringUtil.getBean(ContractService.class);
         ContractProductService contractProductService = SpringUtil.getBean(ContractProductService.class);
@@ -59,7 +63,9 @@ public class ContractFlow extends FlowDelegate {
         List<ContractProduct> contractProductList = contract.getContractProductList();
         if(CollectionUtils.isNotEmpty(contractProductList)){//保存合同产品
             for(ContractProduct c : contractProductList){
+                c.setId(IdUtils.gen19UUID());
                 c.setContractId(contract.getId());
+                ObsFileUtil.saveFile(c.getFileList(),c.getId());
             }
             contractProductService.saveBatch(contractProductList);
         }

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

@@ -7,6 +7,8 @@ import com.fjhx.sale.entity.contract.vo.ContractVo;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -23,4 +25,19 @@ public interface ContractMapper extends BaseMapper<Contract> {
      */
     Page<ContractVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<Contract> wrapper);
 
+    /**
+     * 根据客户ID查询未包装的订单
+     * @param customerId
+     * @return
+     */
+    List<ContractVo> getNoPackContractByCustomerId(@Param("customerId")String customerId);
+
+
+    /**
+     * 根据合同ID和客户ID查询未包装的产品
+     * @param customerId
+     * @param contractId
+     * @return
+     */
+    List<ContractVo> getNoPackContractProductById(@Param("customerId")String customerId,@Param("contractId")String contractId);
 }

+ 26 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/pack/PackShipmentMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.sale.mapper.pack;
+
+import com.fjhx.sale.entity.pack.po.PackShipment;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.pack.vo.PackShipmentVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 出货绑定主合同表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+public interface PackShipmentMapper extends BaseMapper<PackShipment> {
+
+    /**
+     * 出货绑定主合同表分页
+     */
+    Page<PackShipmentVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<PackShipment> wrapper);
+
+}

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

@@ -7,6 +7,8 @@ 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 java.util.List;
+
 
 /**
  * <p>
@@ -43,4 +45,23 @@ public interface ContractService extends BaseService<Contract> {
      */
     void delete(Long id);
 
+    /**
+     * 根据客户ID查询未包装的订单
+     * @param customerId
+     * @return
+     */
+    List<ContractVo> getNoPackContractByCustomerId(String customerId);
+
+    /**
+     * 根据合同ID和客户ID查询未包装的产品
+     * @param customerId
+     * @return
+     */
+    List<ContractVo> getNoPackContractProductById(String customerId,String contractId);
+
+
+    /**
+     * 根据合同ID集合查询合同
+     */
+    List<Contract> getByIds(List<Long> ids);
 }

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

@@ -93,4 +93,35 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> i
         this.removeById(id);
     }
 
+    /**
+     * 根据客户ID查询未包装的订单
+     * @param customerId
+     * @return
+     */
+    @Override
+    public List<ContractVo> getNoPackContractByCustomerId(String customerId) {
+        return baseMapper.getNoPackContractByCustomerId(customerId);
+    }
+
+    /**
+     * 根据合同ID和客户ID查询未包装的产品
+     * @param customerId
+     * @return
+     */
+    @Override
+    public List<ContractVo> getNoPackContractProductById(String customerId,String contractId) {
+        return baseMapper.getNoPackContractProductById(customerId,contractId);
+    }
+
+    /**
+     * 根据合同id集合查询合同列表
+     * @param ids
+     * @return
+     */
+    @Override
+    public List<Contract> getByIds(List<Long> ids) {
+        List<Contract> list = this.list(Wrappers.<Contract>query().lambda().in(Contract::getId,ids));
+        return list;
+    }
+
 }

+ 7 - 0
hx-sale/src/main/java/com/fjhx/sale/service/pack/PackDetailService.java

@@ -7,6 +7,8 @@ import com.fjhx.sale.entity.pack.vo.PackDetailVo;
 import com.fjhx.sale.entity.pack.dto.PackDetailSelectDto;
 import com.fjhx.sale.entity.pack.dto.PackDetailDto;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -43,4 +45,9 @@ public interface PackDetailService extends BaseService<PackDetail> {
      */
     void delete(Long id);
 
+    /**
+     * 出货
+     * @param ids
+     */
+    void shipment(List<Long> ids,Long contractId);
 }

+ 1 - 1
hx-sale/src/main/java/com/fjhx/sale/service/pack/PackService.java

@@ -31,7 +31,7 @@ public interface PackService extends BaseService<Pack> {
     /**
      * 装箱出货表新增
      */
-    void add(PackDto packDto);
+    void add(Pack pack);
 
     /**
      * 装箱出货表编辑

+ 46 - 0
hx-sale/src/main/java/com/fjhx/sale/service/pack/PackShipmentService.java

@@ -0,0 +1,46 @@
+package com.fjhx.sale.service.pack;
+
+import com.fjhx.sale.entity.pack.po.PackShipment;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.pack.vo.PackShipmentVo;
+import com.fjhx.sale.entity.pack.dto.PackShipmentSelectDto;
+import com.fjhx.sale.entity.pack.dto.PackShipmentDto;
+
+
+/**
+ * <p>
+ * 出货绑定主合同表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+public interface PackShipmentService extends BaseService<PackShipment> {
+
+    /**
+     * 出货绑定主合同表分页
+     */
+    Page<PackShipmentVo> getPage(PackShipmentSelectDto dto);
+
+    /**
+     * 出货绑定主合同表明细
+     */
+    PackShipmentVo detail(Long id);
+
+    /**
+     * 出货绑定主合同表新增
+     */
+    void add(PackShipmentDto packShipmentDto);
+
+    /**
+     * 出货绑定主合同表编辑
+     */
+    void edit(PackShipmentDto packShipmentDto);
+
+    /**
+     * 出货绑定主合同表删除
+     */
+    void delete(Long id);
+
+}

+ 55 - 1
hx-sale/src/main/java/com/fjhx/sale/service/pack/impl/PackDetailServiceImpl.java

@@ -1,9 +1,20 @@
 package com.fjhx.sale.service.pack.impl;
 
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fjhx.sale.entity.pack.dto.PackShipmentDto;
+import com.fjhx.sale.entity.pack.enums.PackShipmentStatusEnum;
 import com.fjhx.sale.entity.pack.po.PackDetail;
+import com.fjhx.sale.entity.pack.po.PackShipment;
 import com.fjhx.sale.mapper.pack.PackDetailMapper;
 import com.fjhx.sale.service.pack.PackDetailService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.sale.service.pack.PackShipmentService;
+import com.obs.services.internal.ServiceException;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.wrapper.SqlField;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.sale.entity.pack.vo.PackDetailVo;
@@ -11,6 +22,11 @@ import com.fjhx.sale.entity.pack.dto.PackDetailSelectDto;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.fjhx.sale.entity.pack.dto.PackDetailDto;
 import cn.hutool.core.bean.BeanUtil;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
 
 
 /**
@@ -24,10 +40,24 @@ import cn.hutool.core.bean.BeanUtil;
 @Service
 public class PackDetailServiceImpl extends ServiceImpl<PackDetailMapper, PackDetail> implements PackDetailService {
 
+    @Autowired
+    private PackShipmentService packShipmentService;
+    /**
+     * 分页
+     * @param dto
+     * @return
+     */
     @Override
     public Page<PackDetailVo> getPage(PackDetailSelectDto dto) {
         IWrapper<PackDetail> wrapper = getWrapper();
-        wrapper.orderByDesc("pd", PackDetail::getId);
+        wrapper.groupBy("t1.pack_id");
+        wrapper.orderByDesc("t1.create_time");
+        if(ObjectUtil.isNotEmpty(dto.getShipmentStatus())){
+            wrapper.eq("t1",PackDetailVo::getShipmentStatus,dto.getShipmentStatus());
+        }
+        if(StringUtils.isNotEmpty(dto.getKeyword())){
+            wrapper.keyword(dto.getKeyword(),new SqlField("t3.`code`"),new SqlField("t2.`product_name`"));
+        }
         Page<PackDetailVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         return page;
     }
@@ -54,4 +84,28 @@ public class PackDetailServiceImpl extends ServiceImpl<PackDetailMapper, PackDet
         this.removeById(id);
     }
 
+    /**
+     * 出货
+     * @param ids
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void shipment(List<Long> ids,Long contractId) {
+        if(CollectionUtils.isEmpty(ids)){
+            throw new ServiceException("最少选中一条记录");
+        }
+        if(ObjectUtil.isEmpty(contractId)){
+            throw new ServiceException("必须选择一条主合同");
+        }
+        this.update(Wrappers.<PackDetail>update().lambda()
+                .set(PackDetail::getShipmentStatus,PackShipmentStatusEnum.STATUS_1.getKey())
+                .set(PackDetail::getShipmentStatus,new Date())
+                .in(PackDetail::getId,ids));
+        //添加一条绑定主合同记录
+        PackShipment packShipment = new PackShipment();
+        packShipment.setPackDetailIds(StringUtils.join(ids,","));
+        packShipment.setContractId(contractId);
+        packShipmentService.save(packShipment);
+    }
+
 }

+ 81 - 2
hx-sale/src/main/java/com/fjhx/sale/service/pack/impl/PackServiceImpl.java

@@ -1,9 +1,21 @@
 package com.fjhx.sale.service.pack.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.fjhx.sale.entity.pack.po.Pack;
+import com.fjhx.sale.entity.pack.po.PackDetail;
+import com.fjhx.sale.entity.pack.po.PackDetailGoods;
+import com.fjhx.sale.entity.pack.po.PackDetailProduct;
 import com.fjhx.sale.mapper.pack.PackMapper;
+import com.fjhx.sale.service.pack.PackDetailGoodsService;
+import com.fjhx.sale.service.pack.PackDetailProductService;
+import com.fjhx.sale.service.pack.PackDetailService;
 import com.fjhx.sale.service.pack.PackService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.sale.util.code.CodeEnum;
+import com.obs.services.internal.ServiceException;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.uuid.IdUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.sale.entity.pack.vo.PackVo;
@@ -11,6 +23,10 @@ import com.fjhx.sale.entity.pack.dto.PackSelectDto;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.fjhx.sale.entity.pack.dto.PackDto;
 import cn.hutool.core.bean.BeanUtil;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
 
 
 /**
@@ -24,6 +40,15 @@ import cn.hutool.core.bean.BeanUtil;
 @Service
 public class PackServiceImpl extends ServiceImpl<PackMapper, Pack> implements PackService {
 
+    @Autowired
+    private PackDetailService packDetailService;
+
+    @Autowired
+    private PackDetailProductService packDetailProductService;
+
+    @Autowired
+    private PackDetailGoodsService packDetailGoodsService;
+
     @Override
     public Page<PackVo> getPage(PackSelectDto dto) {
         IWrapper<Pack> wrapper = getWrapper();
@@ -39,9 +64,63 @@ public class PackServiceImpl extends ServiceImpl<PackMapper, Pack> implements Pa
         return result;
     }
 
+    /**
+     * 新增
+     * @param pack
+     */
     @Override
-    public void add(PackDto packDto) {
-        this.save(packDto);
+    @Transactional(rollbackFor = Exception.class)
+    public void add(Pack pack) {
+        if(StringUtils.isEmpty(pack.getContractIds())){
+            throw new ServiceException("参数异常");
+        }
+        pack.setCode(CodeEnum.PACK.getCode());
+        this.save(pack);
+        List<PackDetail> packDetailList = pack.getPackDetailList();
+        if(CollectionUtils.isNotEmpty(packDetailList)){
+            List<PackDetailProduct> packDetailProductList = new ArrayList<>();
+            List<PackDetailGoods> packDetailGoodsList = new ArrayList<>();
+            for(PackDetail p:packDetailList){
+                p.setPackId(pack.getId());
+                p.setId(IdUtils.gen19UUID());
+                //处理装箱产品明细
+                setPackDetailProducts(p,packDetailProductList);
+                //处理自定义装箱货物
+                setPackDetailGoods(p,packDetailGoodsList);
+            }
+            packDetailService.saveBatch(packDetailList);
+            packDetailGoodsService.saveBatch(packDetailGoodsList);
+            packDetailProductService.saveBatch(packDetailProductList);
+        }
+    }
+
+    /**
+     * 处理装箱产品明细
+     * @param packDetail
+     * @param packDetailProductList
+     */
+    private void setPackDetailProducts(PackDetail packDetail,List<PackDetailProduct> packDetailProductList){
+        List<PackDetailProduct> list = packDetail.getPackDetailProductList();
+        if(CollectionUtils.isNotEmpty(list)){
+            for(PackDetailProduct p:list){
+                p.setPackDetailId(packDetail.getId());
+                packDetailProductList.add(p);
+            }
+        }
+    }
+    /**
+     * 处理装箱产品明细
+     * @param packDetail
+     * @param packDetailGoodsList
+     */
+    private void setPackDetailGoods(PackDetail packDetail,List<PackDetailGoods> packDetailGoodsList){
+        List<PackDetailGoods> list = packDetail.getPackDetailGoodsList();
+        if(CollectionUtils.isNotEmpty(list)){
+            for(PackDetailGoods p:list){
+                p.setPackDetailId(packDetail.getId());
+                packDetailGoodsList.add(p);
+            }
+        }
     }
 
     @Override

+ 57 - 0
hx-sale/src/main/java/com/fjhx/sale/service/pack/impl/PackShipmentServiceImpl.java

@@ -0,0 +1,57 @@
+package com.fjhx.sale.service.pack.impl;
+
+import com.fjhx.sale.entity.pack.po.PackShipment;
+import com.fjhx.sale.mapper.pack.PackShipmentMapper;
+import com.fjhx.sale.service.pack.PackShipmentService;
+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.pack.vo.PackShipmentVo;
+import com.fjhx.sale.entity.pack.dto.PackShipmentSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.sale.entity.pack.dto.PackShipmentDto;
+import cn.hutool.core.bean.BeanUtil;
+
+
+/**
+ * <p>
+ * 出货绑定主合同表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+@Service
+public class PackShipmentServiceImpl extends ServiceImpl<PackShipmentMapper, PackShipment> implements PackShipmentService {
+
+    @Override
+    public Page<PackShipmentVo> getPage(PackShipmentSelectDto dto) {
+        IWrapper<PackShipment> wrapper = getWrapper();
+        wrapper.orderByDesc("ps", PackShipment::getId);
+        Page<PackShipmentVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    @Override
+    public PackShipmentVo detail(Long id) {
+        PackShipment PackShipment = this.getById(id);
+        PackShipmentVo result = BeanUtil.toBean(PackShipment, PackShipmentVo.class);
+        return result;
+    }
+
+    @Override
+    public void add(PackShipmentDto packShipmentDto) {
+        this.save(packShipmentDto);
+    }
+
+    @Override
+    public void edit(PackShipmentDto packShipmentDto) {
+        this.updateById(packShipmentDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

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

@@ -6,7 +6,9 @@ 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.entity.pack.po.Pack;
 import com.fjhx.sale.service.contract.ContractService;
+import com.fjhx.sale.service.pack.PackService;
 import com.obs.services.internal.ServiceException;
 import lombok.Getter;
 
@@ -19,6 +21,7 @@ public enum CodeEnum {
     //外销合同
     CONTRACT("SC-", "yyMM-", "code", 3, ContractService.class),
     SALE_QUOTATION("GSQT-", "yyMM-", "code", 3, ContractService.class),
+    PACK("PACK-", "yyMM-", "code", 3, PackService.class),
     ;
 
     CodeEnum(String prefix, String dateFormat, String codeFieldName, Integer length, Class<? extends IService<?>> serviceCls) {

+ 39 - 0
hx-sale/src/main/resources/mapper/contract/ContractMapper.xml

@@ -8,4 +8,43 @@
             ${ew.customSqlSegment}
     </select>
 
+    <select id="getNoPackContractByCustomerId" resultType="com.fjhx.sale.entity.contract.vo.ContractVo">
+        SELECT
+            *
+        FROM
+            (
+                SELECT
+                    t1.*,
+                    t2.quantity AS cpQuantity,
+                    ( SELECT IFNULL( SUM( quantity ), 0 ) FROM pack_detail_product WHERE contract_product_id = t2.id ) AS sumPackQuantity
+                FROM
+                    contract t1
+                LEFT JOIN contract_product t2 ON t1.id = t2.contract_id
+                WHERE
+                    buy_corporation_id = #{customerId}
+            ) t1
+        WHERE t1.sumPackQuantity &lt; t1.cpQuantity
+        AND t1.`status` &gt;=30 &lt;999
+        GROUP BY t1.id
+    </select>
+
+    <select id="getNoPackContractProductById" resultType="com.fjhx.sale.entity.contract.vo.ContractVo">
+        SELECT
+            *
+        FROM
+            (
+                SELECT
+                    t1.*,
+                    t2.quantity AS cpQuantity,
+                    t2.id AS contractProductId,
+                    ( SELECT IFNULL( SUM( quantity ), 0 ) FROM pack_detail_product WHERE contract_product_id = t2.id ) AS sumPackQuantity
+                FROM
+                    contract t1
+                LEFT JOIN contract_product t2 ON t1.id = t2.contract_id
+                WHERE
+                    buy_corporation_id = #{customerId}
+            ) t1
+        WHERE t1.sumPackQuantity &lt; t1.cpQuantity
+          AND t1.id = #{contractId}
+    </select>
 </mapper>

+ 7 - 23
hx-sale/src/main/resources/mapper/pack/PackDetailMapper.xml

@@ -2,29 +2,13 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fjhx.sale.mapper.pack.PackDetailMapper">
     <select id="getPage" resultType="com.fjhx.sale.entity.pack.vo.PackDetailVo">
-        select
-            pd.id,
-            pd.pack_id,
-            pd.customer_id,
-            pd.contract_id,
-            pd.contract_code,
-            pd.pack_quantity,
-            pd.net_weight,
-            pd.rough_weight,
-            pd.box_long,
-            pd.box_wide,
-            pd.box_high,
-            pd.bom_volume,
-            pd.shipment_time,
-            pd.shipment_status,
-            pd.waybill_code,
-            pd.express_id,
-            pd.remark,
-            pd.update_time,
-            pd.update_user,
-            pd.create_user,
-            pd.create_time
-        from pack_detail pd
+        SELECT
+            t1.*,
+            GROUP_CONCAT(CONCAT(t3.`code`,"_",t2.product_name )) AS codeAPName
+        FROM
+            pack_detail t1
+                LEFT JOIN pack_detail_product t2 ON t1.id = t2.pack_detail_id
+                LEFT JOIN contract t3 ON t2.contract_id = t3.id
             ${ew.customSqlSegment}
     </select>
 

+ 18 - 0
hx-sale/src/main/resources/mapper/pack/PackShipmentMapper.xml

@@ -0,0 +1,18 @@
+<?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.fjhx.sale.mapper.pack.PackShipmentMapper">
+    <select id="getPage" resultType="com.fjhx.sale.entity.pack.vo.PackShipmentVo">
+        select
+            ps.id,
+            ps.pack_detail_ids,
+            ps.contract_id,
+            ps.remark,
+            ps.update_time,
+            ps.update_user,
+            ps.create_user,
+            ps.create_time
+        from pack_shipment ps
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 70 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/controller/jd/JdBackQualityDetailsController.java

@@ -0,0 +1,70 @@
+package com.fjhx.victoriatourist.controller.jd;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.victoriatourist.entity.jd.vo.JdBackQualityDetailsVo;
+import com.fjhx.victoriatourist.entity.jd.dto.JdBackQualityDetailsSelectDto;
+import com.fjhx.victoriatourist.entity.jd.dto.JdBackQualityDetailsDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.victoriatourist.service.jd.JdBackQualityDetailsService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 京东退货质检明细 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+@RestController
+@RequestMapping("/jdBackQualityDetails")
+public class JdBackQualityDetailsController {
+
+    @Autowired
+    private JdBackQualityDetailsService jdBackQualityDetailsService;
+
+    /**
+     * 京东退货质检明细分页
+     */
+    @PostMapping("/page")
+    public Page<JdBackQualityDetailsVo> page(@RequestBody JdBackQualityDetailsSelectDto dto) {
+        return jdBackQualityDetailsService.getPage(dto);
+    }
+
+    /**
+     * 京东退货质检明细明细
+     */
+    @PostMapping("/detail")
+    public List<JdBackQualityDetailsVo> detail(@RequestBody JdBackQualityDetailsSelectDto dto) {
+        return jdBackQualityDetailsService.detail(dto.getCode());
+    }
+
+    /**
+     * 京东退货质检明细新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody List<JdBackQualityDetailsDto> jdBackQualityDetailsDtoList) {
+        jdBackQualityDetailsService.add(jdBackQualityDetailsDtoList);
+    }
+
+    /**
+     * 京东退货质检明细编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody JdBackQualityDetailsDto jdBackQualityDetailsDto) {
+        jdBackQualityDetailsService.edit(jdBackQualityDetailsDto);
+    }
+
+    /**
+     * 京东退货质检明细删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        jdBackQualityDetailsService.delete(dto.getId());
+    }
+
+}

+ 16 - 1
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/controller/jd/JdBackQualityWaitController.java

@@ -1,6 +1,11 @@
 package com.fjhx.victoriatourist.controller.jd;
 
 import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.victoriatourist.entity.jd.vo.JdBackQualityWaitVo;
+import com.fjhx.victoriatourist.entity.jd.dto.JdBackQualityWaitSelectDto;
+import com.fjhx.victoriatourist.service.jd.JdBackQualityWaitService;
+import org.springframework.beans.factory.annotation.Autowired;
 
 
 /**
@@ -9,11 +14,21 @@ import org.springframework.web.bind.annotation.*;
  * </p>
  *
  * @author 
- * @since 2023-04-18
+ * @since 2023-04-19
  */
 @RestController
 @RequestMapping("/jdBackQualityWait")
 public class JdBackQualityWaitController {
 
+    @Autowired
+    private JdBackQualityWaitService jdBackQualityWaitService;
+
+    /**
+     * 京东退货待质检分页
+     */
+    @PostMapping("/page")
+    public Page<JdBackQualityWaitVo> page(@RequestBody JdBackQualityWaitSelectDto dto) {
+        return jdBackQualityWaitService.getPage(dto);
+    }
 
 }

+ 17 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/jd/dto/JdBackQualityDetailsDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.victoriatourist.entity.jd.dto;
+
+import com.fjhx.victoriatourist.entity.jd.po.JdBackQualityDetails;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 京东退货质检明细新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+@Getter
+@Setter
+public class JdBackQualityDetailsDto extends JdBackQualityDetails {
+
+}

+ 22 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/jd/dto/JdBackQualityDetailsSelectDto.java

@@ -0,0 +1,22 @@
+package com.fjhx.victoriatourist.entity.jd.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 京东退货质检明细列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+@Getter
+@Setter
+public class JdBackQualityDetailsSelectDto extends BaseSelectDto {
+
+    /***
+     * 质检当号
+     */
+    private String code;
+
+}

+ 44 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/jd/po/JdBackQualityDetails.java

@@ -0,0 +1,44 @@
+package com.fjhx.victoriatourist.entity.jd.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-19
+ */
+@Getter
+@Setter
+@TableName("jd_back_quality_details")
+public class JdBackQualityDetails extends BasePo {
+
+    /**
+     * 质检单号
+     */
+    private String code;
+
+    /**
+     * 产品id
+     */
+    private Long productId;
+
+    /**
+     * 质检合格数量
+     */
+    private BigDecimal qualifiedQuantity;
+
+    /**
+     * 不合格数量
+     */
+    private BigDecimal disqualificationQuantity;
+
+}

+ 41 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/jd/vo/JdBackQualityDetailsVo.java

@@ -0,0 +1,41 @@
+package com.fjhx.victoriatourist.entity.jd.vo;
+
+import com.fjhx.victoriatourist.entity.jd.po.JdBackQualityDetails;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 京东退货质检明细列表查询返回值实体
+ *
+ * @author
+ * @since 2023-04-19
+ */
+@Getter
+@Setter
+public class JdBackQualityDetailsVo extends JdBackQualityDetails {
+
+    /**
+     * 产品编号
+     */
+    private String productCode;
+
+    /**
+     * 产品名称
+     */
+    private String productName;
+
+    /**
+     * 产品规格
+     */
+    private String productSpec;
+
+    /**
+     * 产品单位
+     */
+    private String productUnit;
+
+    /**
+     * 质检人名称*/
+    private String qualityUserName;
+
+}

+ 25 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/jd/vo/JdBackQualityWaitVo.java

@@ -14,4 +14,29 @@ import lombok.Setter;
 @Setter
 public class JdBackQualityWaitVo extends JdBackQualityWait {
 
+    /**
+     * 产品编号
+     */
+    private String productCode;
+
+    /**
+     * 产品类型
+     */
+    private Integer productType;
+
+    /**
+     * 产品名称
+     */
+    private String productName;
+
+    /**
+     * 产品规格
+     */
+    private String productSpec;
+
+    /**
+     * 产品单位
+     */
+    private String productUnit;
+
 }

+ 26 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/mapper/jd/JdBackQualityDetailsMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.victoriatourist.mapper.jd;
+
+import com.fjhx.victoriatourist.entity.jd.po.JdBackQualityDetails;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.victoriatourist.entity.jd.vo.JdBackQualityDetailsVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 京东退货质检明细 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+public interface JdBackQualityDetailsMapper extends BaseMapper<JdBackQualityDetails> {
+
+    /**
+     * 京东退货质检明细分页
+     */
+    Page<JdBackQualityDetailsVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<JdBackQualityDetails> wrapper);
+
+}

+ 10 - 1
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/mapper/jd/JdBackQualityWaitMapper.java

@@ -2,6 +2,10 @@ package com.fjhx.victoriatourist.mapper.jd;
 
 import com.fjhx.victoriatourist.entity.jd.po.JdBackQualityWait;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.victoriatourist.entity.jd.vo.JdBackQualityWaitVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
 
 
 /**
@@ -10,8 +14,13 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * </p>
  *
  * @author 
- * @since 2023-04-18
+ * @since 2023-04-19
  */
 public interface JdBackQualityWaitMapper extends BaseMapper<JdBackQualityWait> {
 
+    /**
+     * 京东退货待质检分页
+     */
+    Page<JdBackQualityWaitVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<JdBackQualityWait> wrapper);
+
 }

+ 48 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/JdBackQualityDetailsService.java

@@ -0,0 +1,48 @@
+package com.fjhx.victoriatourist.service.jd;
+
+import com.fjhx.victoriatourist.entity.jd.po.JdBackQualityDetails;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.victoriatourist.entity.jd.vo.JdBackQualityDetailsVo;
+import com.fjhx.victoriatourist.entity.jd.dto.JdBackQualityDetailsSelectDto;
+import com.fjhx.victoriatourist.entity.jd.dto.JdBackQualityDetailsDto;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 京东退货质检明细 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+public interface JdBackQualityDetailsService extends BaseService<JdBackQualityDetails> {
+
+    /**
+     * 京东退货质检明细分页
+     */
+    Page<JdBackQualityDetailsVo> getPage(JdBackQualityDetailsSelectDto dto);
+
+    /**
+     * 京东退货质检明细明细
+     */
+    List<JdBackQualityDetailsVo> detail(String code);
+
+    /**
+     * 京东退货质检明细新增
+     */
+    void add(List<JdBackQualityDetailsDto> jdBackQualityDetailsDtoList);
+
+    /**
+     * 京东退货质检明细编辑
+     */
+    void edit(JdBackQualityDetailsDto jdBackQualityDetailsDto);
+
+    /**
+     * 京东退货质检明细删除
+     */
+    void delete(Long id);
+
+}

+ 9 - 1
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/JdBackQualityWaitService.java

@@ -2,6 +2,9 @@ package com.fjhx.victoriatourist.service.jd;
 
 import com.fjhx.victoriatourist.entity.jd.po.JdBackQualityWait;
 import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.victoriatourist.entity.jd.vo.JdBackQualityWaitVo;
+import com.fjhx.victoriatourist.entity.jd.dto.JdBackQualityWaitSelectDto;
 
 
 /**
@@ -10,8 +13,13 @@ import com.ruoyi.common.core.service.BaseService;
  * </p>
  *
  * @author 
- * @since 2023-04-18
+ * @since 2023-04-19
  */
 public interface JdBackQualityWaitService extends BaseService<JdBackQualityWait> {
 
+    /**
+     * 京东退货待质检分页
+     */
+    Page<JdBackQualityWaitVo> getPage(JdBackQualityWaitSelectDto dto);
+
 }

+ 117 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/impl/JdBackQualityDetailsServiceImpl.java

@@ -0,0 +1,117 @@
+package com.fjhx.victoriatourist.service.jd.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.victoriatourist.entity.jd.dto.JdBackQualityDetailsDto;
+import com.fjhx.victoriatourist.entity.jd.dto.JdBackQualityDetailsSelectDto;
+import com.fjhx.victoriatourist.entity.jd.po.JdBackQualityDetails;
+import com.fjhx.victoriatourist.entity.jd.po.JdBackQualityWait;
+import com.fjhx.victoriatourist.entity.jd.vo.JdBackQualityDetailsVo;
+import com.fjhx.victoriatourist.mapper.jd.JdBackQualityDetailsMapper;
+import com.fjhx.victoriatourist.service.jd.JdBackQualityDetailsService;
+import com.fjhx.victoriatourist.service.jd.JdBackQualityWaitService;
+import com.fjhx.victoriatourist.utils.CodeEnum;
+import com.obs.services.internal.ServiceException;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.ruoyi.system.utils.UserUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+
+/**
+ * <p>
+ * 京东退货质检明细 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-04-19
+ */
+@Service
+public class JdBackQualityDetailsServiceImpl extends ServiceImpl<JdBackQualityDetailsMapper, JdBackQualityDetails> implements JdBackQualityDetailsService {
+    @Autowired
+    private ProductInfoService productInfoService;
+    @Autowired
+    private JdBackQualityWaitService jdBackQualityWaitService;
+
+    @Override
+    public Page<JdBackQualityDetailsVo> getPage(JdBackQualityDetailsSelectDto dto) {
+        IWrapper<JdBackQualityDetails> wrapper = getWrapper();
+        wrapper.orderByDesc("jbqd", JdBackQualityDetails::getId);
+        Page<JdBackQualityDetailsVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        List<JdBackQualityDetailsVo> records = page.getRecords();
+        //赋值产品信息
+        productInfoService.attributeAssign(records, JdBackQualityDetailsVo::getProductId, (item, productinfo) -> {
+            item.setProductCode(productinfo.getCode());
+            item.setProductName(productinfo.getName());
+            item.setProductSpec(productinfo.getSpec());
+            item.setProductUnit(productinfo.getUnit());
+        });
+        //赋值质检人名字
+        UserUtil.assignmentNickName(records, JdBackQualityDetailsVo::getCreateUser, JdBackQualityDetailsVo::setQualityUserName);
+        return page;
+    }
+
+    @Override
+    public List<JdBackQualityDetailsVo> detail(String code) {
+        List<JdBackQualityDetails> list = list(q -> q.eq(JdBackQualityDetails::getCode, code));
+        List<JdBackQualityDetailsVo> result = BeanUtil.copyToList(list, JdBackQualityDetailsVo.class);
+        //赋值产品信息
+        productInfoService.attributeAssign(result, JdBackQualityDetailsVo::getProductId, (item, productinfo) -> {
+            item.setProductCode(productinfo.getCode());
+            item.setProductName(productinfo.getName());
+            item.setProductSpec(productinfo.getSpec());
+            item.setProductUnit(productinfo.getUnit());
+        });
+        //赋值质检人名字
+        UserUtil.assignmentNickName(result, JdBackQualityDetailsVo::getCreateUser, JdBackQualityDetailsVo::setQualityUserName);
+        return result;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(List<JdBackQualityDetailsDto> jdBackQualityDetailsDtoList) {
+        if(ObjectUtil.isEmpty(jdBackQualityDetailsDtoList)){
+            throw new ServiceException("质检列表不能为空");
+        }
+        String code = CodeEnum.JD_BACK_QUALITY.getCode();
+        List<JdBackQualityDetails> jdBackQualityDetailsList = BeanUtil.copyToList(jdBackQualityDetailsDtoList, JdBackQualityDetails.class);
+        //获取质检产品id列表
+        List<Long> productIds = jdBackQualityDetailsList.stream().map(JdBackQualityDetails::getProductId).collect(Collectors.toList());
+        List<JdBackQualityWait> jdBackQualityWaitList = jdBackQualityWaitService.list(q -> q.in(JdBackQualityWait::getProductId, productIds));
+        Map<Long, JdBackQualityWait> jdBackQualityWaitMap = jdBackQualityWaitList.stream().collect(Collectors.toMap(JdBackQualityWait::getProductId, Function.identity()));
+
+        for (JdBackQualityDetails jdBackQualityDetailsDto : jdBackQualityDetailsList) {
+            jdBackQualityDetailsDto.setCode(code);
+            //减少待质检数量
+            BigDecimal quality = jdBackQualityDetailsDto.getQualifiedQuantity().add(jdBackQualityDetailsDto.getDisqualificationQuantity());
+            JdBackQualityWait jdBackQualityWait = jdBackQualityWaitMap.get(jdBackQualityDetailsDto.getProductId());
+//            BigDecimal oldQuantity = jdBackQualityWait.getQuantity();
+//            jdBackQualityWait.setQuantity(oldQuantity.subtract(quality));
+            jdBackQualityWaitService.update(q -> q
+                    .eq(JdBackQualityWait::getId, jdBackQualityWait.getId())
+                    .setSql("quantity = quantity - " + quality));
+        }
+        saveBatch(jdBackQualityDetailsList);
+    }
+
+    @Override
+    public void edit(JdBackQualityDetailsDto jdBackQualityDetailsDto) {
+        this.updateById(jdBackQualityDetailsDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

+ 26 - 1
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/impl/JdBackQualityWaitServiceImpl.java

@@ -1,10 +1,17 @@
 package com.fjhx.victoriatourist.service.jd.impl;
 
+import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.victoriatourist.entity.jd.po.JdBackQualityWait;
+import com.fjhx.victoriatourist.entity.jd.vo.JdBackQualityDetailsVo;
 import com.fjhx.victoriatourist.mapper.jd.JdBackQualityWaitMapper;
 import com.fjhx.victoriatourist.service.jd.JdBackQualityWaitService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.victoriatourist.entity.jd.vo.JdBackQualityWaitVo;
+import com.fjhx.victoriatourist.entity.jd.dto.JdBackQualityWaitSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
 
 
 /**
@@ -13,9 +20,27 @@ import org.springframework.stereotype.Service;
  * </p>
  *
  * @author 
- * @since 2023-04-18
+ * @since 2023-04-19
  */
 @Service
 public class JdBackQualityWaitServiceImpl extends ServiceImpl<JdBackQualityWaitMapper, JdBackQualityWait> implements JdBackQualityWaitService {
+    @Autowired
+    private ProductInfoService productInfoService;
+
+    @Override
+    public Page<JdBackQualityWaitVo> getPage(JdBackQualityWaitSelectDto dto) {
+        IWrapper<JdBackQualityWait> wrapper = getWrapper();
+        wrapper.orderByDesc("jbqw", JdBackQualityWait::getId);
+        Page<JdBackQualityWaitVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        //赋值产品信息
+        productInfoService.attributeAssign(page.getRecords(), JdBackQualityWaitVo::getProductId, (item, productinfo) -> {
+            item.setProductType(productinfo.getType());
+            item.setProductCode(productinfo.getCode());
+            item.setProductName(productinfo.getName());
+            item.setProductSpec(productinfo.getSpec());
+            item.setProductUnit(productinfo.getUnit());
+        });
+        return page;
+    }
 
 }

+ 8 - 8
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/impl/JdBackServiceImpl.java

@@ -52,17 +52,17 @@ import java.util.stream.Collectors;
 @Service
 public class JdBackServiceImpl extends ServiceImpl<JdBackMapper, JdBack> implements JdBackService {
     @Autowired
-    WarehouseService warehouseService;
+    private WarehouseService warehouseService;
     @Autowired
-    CompanyInfoService companyInfoService;
+    private CompanyInfoService companyInfoService;
     @Autowired
-    LogisticsInfosService logisticsInfosService;
+    private LogisticsInfosService logisticsInfosService;
     @Autowired
-    JdBackDetailsService jdBackDetailsService;
+    private JdBackDetailsService jdBackDetailsService;
     @Autowired
-    ProductInfoService productInfoService;
+    private ProductInfoService productInfoService;
     @Autowired
-    JdBackQualityWaitService jdBackQualityWaitService;
+    private JdBackQualityWaitService jdBackQualityWaitService;
 
     @Override
     public Page<JdBackVo> getPage(JdBackSelectDto dto) {
@@ -141,7 +141,7 @@ public class JdBackServiceImpl extends ServiceImpl<JdBackMapper, JdBack> impleme
             jdBackDetailsService.saveBatch(jdBackDetailsList);
         }
         //创建待质检记录
-        createJdBackQualityWait(jdBackDetailsList);
+//        createJdBackQualityWait(jdBackDetailsList);
     }
 
     /**
@@ -210,7 +210,7 @@ public class JdBackServiceImpl extends ServiceImpl<JdBackMapper, JdBack> impleme
                 //处理更新部分
                 jdBackQualityWaitService.update(q -> q
                         .eq(JdBackQualityWait::getId, oldJdBackQualityWait.getId())
-                        .setSql("quantity = " + oldQuantity));
+                        .setSql("quantity = quantity + " + entry.getValue()));
             }
             //统一处理添加部分
             jdBackQualityWaitService.saveBatch(addJdBackQualityWaitList);

+ 2 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/utils/CodeEnum.java

@@ -21,6 +21,8 @@ public enum CodeEnum {
     STOCK_TRANSFER("SM", "yyMM-", "code", 3, StockTransferService.class),
     // 销售订单
     ORDER_SALES("SO", null, "code", 5, OrderInfoService.class),
+    //京东退货质检
+    JD_BACK_QUALITY("PA", "yyMM-", "code", 3, StockTransferService.class),
     ;
 
     CodeEnum(String prefix, String dateFormat, String codeFieldName, Integer length, Class<? extends IService<?>> serviceCls) {

+ 19 - 0
hx-victoriatourist/src/main/resources/mapper/jd/JdBackQualityDetailsMapper.xml

@@ -0,0 +1,19 @@
+<?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.fjhx.victoriatourist.mapper.jd.JdBackQualityDetailsMapper">
+    <select id="getPage" resultType="com.fjhx.victoriatourist.entity.jd.vo.JdBackQualityDetailsVo">
+        select
+            jbqd.id,
+            jbqd.code,
+            jbqd.product_id,
+            jbqd.qualified_quantity,
+            jbqd.disqualification_quantity,
+            jbqd.create_user,
+            jbqd.create_time,
+            jbqd.update_user,
+            jbqd.update_time
+        from jd_back_quality_details jbqd
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 13 - 0
hx-victoriatourist/src/main/resources/mapper/jd/JdBackQualityWaitMapper.xml

@@ -1,4 +1,17 @@
 <?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.fjhx.victoriatourist.mapper.jd.JdBackQualityWaitMapper">
+    <select id="getPage" resultType="com.fjhx.victoriatourist.entity.jd.vo.JdBackQualityWaitVo">
+        select
+            jbqw.id,
+            jbqw.product_id,
+            jbqw.quantity,
+            jbqw.create_user,
+            jbqw.create_time,
+            jbqw.update_user,
+            jbqw.update_time
+        from jd_back_quality_wait jbqw
+            ${ew.customSqlSegment}
+    </select>
+
 </mapper>

+ 7 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockSelectDto.java

@@ -4,6 +4,8 @@ import com.ruoyi.common.core.domain.BaseSelectDto;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.List;
+
 /**
  * 库存列表查询入参实体
  *
@@ -14,4 +16,9 @@ import lombok.Setter;
 @Setter
 public class StockSelectDto extends BaseSelectDto {
 
+    /**
+     * 根据产品id列表过滤
+     */
+    private List<Long> productIds;
+
 }

+ 1 - 0
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockServiceImpl.java

@@ -62,6 +62,7 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
         wrapper.orderByDesc("s", Stock::getId);
         wrapper.eq(Stock::getWarehouseId, dto.getId());
         wrapper.like(Stock::getQuantity, dto.getKeyword());
+        wrapper.in(Stock::getProductId,dto.getProductIds());
 
         Page<StockVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<StockVo> stockVos = page.getRecords();