caozj il y a 2 ans
Parent
commit
5319e6a709
30 fichiers modifiés avec 695 ajouts et 49 suppressions
  1. 28 0
      hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractController.java
  2. 3 2
      hx-sale/src/main/java/com/fjhx/sale/controller/pack/PackController.java
  3. 8 0
      hx-sale/src/main/java/com/fjhx/sale/controller/pack/PackDetailController.java
  4. 68 0
      hx-sale/src/main/java/com/fjhx/sale/controller/pack/PackShipmentController.java
  5. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractVo.java
  6. 11 0
      hx-sale/src/main/java/com/fjhx/sale/entity/pack/dto/PackDetailDto.java
  7. 5 0
      hx-sale/src/main/java/com/fjhx/sale/entity/pack/dto/PackDetailSelectDto.java
  8. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/pack/dto/PackShipmentDto.java
  9. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/pack/dto/PackShipmentSelectDto.java
  10. 49 0
      hx-sale/src/main/java/com/fjhx/sale/entity/pack/enums/PackShipmentStatusEnum.java
  11. 3 8
      hx-sale/src/main/java/com/fjhx/sale/entity/pack/po/Pack.java
  12. 2 7
      hx-sale/src/main/java/com/fjhx/sale/entity/pack/po/PackDetail.java
  13. 0 5
      hx-sale/src/main/java/com/fjhx/sale/entity/pack/po/PackDetailProduct.java
  14. 37 0
      hx-sale/src/main/java/com/fjhx/sale/entity/pack/po/PackShipment.java
  15. 4 0
      hx-sale/src/main/java/com/fjhx/sale/entity/pack/vo/PackDetailVo.java
  16. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/pack/vo/PackShipmentVo.java
  17. 17 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractMapper.java
  18. 26 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/pack/PackShipmentMapper.java
  19. 21 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractService.java
  20. 31 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java
  21. 7 0
      hx-sale/src/main/java/com/fjhx/sale/service/pack/PackDetailService.java
  22. 1 1
      hx-sale/src/main/java/com/fjhx/sale/service/pack/PackService.java
  23. 46 0
      hx-sale/src/main/java/com/fjhx/sale/service/pack/PackShipmentService.java
  24. 55 1
      hx-sale/src/main/java/com/fjhx/sale/service/pack/impl/PackDetailServiceImpl.java
  25. 81 2
      hx-sale/src/main/java/com/fjhx/sale/service/pack/impl/PackServiceImpl.java
  26. 57 0
      hx-sale/src/main/java/com/fjhx/sale/service/pack/impl/PackShipmentServiceImpl.java
  27. 3 0
      hx-sale/src/main/java/com/fjhx/sale/util/code/CodeEnum.java
  28. 39 0
      hx-sale/src/main/resources/mapper/contract/ContractMapper.xml
  29. 7 23
      hx-sale/src/main/resources/mapper/pack/PackDetailMapper.xml
  30. 18 0
      hx-sale/src/main/resources/mapper/pack/PackShipmentMapper.xml

+ 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());
+    }
+
+}

+ 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 (PayTypeEnum 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 {
+
+}

+ 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>