소스 검색

销售出库功能修改

yzc 1 년 전
부모
커밋
543189baed
24개의 변경된 파일554개의 추가작업 그리고 57개의 파일을 삭제
  1. 2 5
      hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractController.java
  2. 32 0
      hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractOutboundInfoController.java
  3. 20 0
      hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractOutboundRecordsController.java
  4. 0 5
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractDto.java
  5. 25 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractOutboundInfoDto.java
  6. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractOutboundInfoSelectDto.java
  7. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractOutboundRecordsDto.java
  8. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractOutboundRecordsSelectDto.java
  9. 34 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/ContractOutboundInfo.java
  10. 53 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/ContractOutboundRecords.java
  11. 23 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractOutboundInfoVo.java
  12. 44 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractOutboundRecordsVo.java
  13. 30 7
      hx-sale/src/main/java/com/fjhx/sale/flow/SalesOutboundApprovedFlow.java
  14. 19 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractOutboundInfoMapper.java
  15. 17 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractOutboundRecordsMapper.java
  16. 21 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractOutboundInfoService.java
  17. 17 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractOutboundRecordsService.java
  18. 6 5
      hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractService.java
  19. 53 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractOutboundInfoServiceImpl.java
  20. 21 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractOutboundRecordsServiceImpl.java
  21. 71 33
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java
  22. 2 2
      hx-sale/src/main/resources/mapper/contract/ContractMapper.xml
  23. 9 0
      hx-sale/src/main/resources/mapper/contract/ContractOutboundInfoMapper.xml
  24. 4 0
      hx-sale/src/main/resources/mapper/contract/ContractOutboundRecordsMapper.xml

+ 2 - 5
hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractController.java

@@ -7,10 +7,7 @@ import com.fjhx.account.entity.account.vo.AccountRunningWaterVo;
 import com.fjhx.item.entity.product.bo.ProductAnalysisBo;
 import com.fjhx.item.entity.product.dto.ProductInfoDto;
 import com.fjhx.item.entity.product.dto.ProductInfoSelectDto;
-import com.fjhx.sale.entity.contract.dto.ContractDto;
-import com.fjhx.sale.entity.contract.dto.ContractSelectDto;
-import com.fjhx.sale.entity.contract.dto.DecisionAidDto;
-import com.fjhx.sale.entity.contract.dto.PayDecisionAidDto;
+import com.fjhx.sale.entity.contract.dto.*;
 import com.fjhx.sale.entity.contract.po.Contract;
 import com.fjhx.sale.entity.contract.vo.*;
 import com.fjhx.sale.entity.purchase.po.EhsdPurchase;
@@ -350,7 +347,7 @@ public class ContractController {
      * 销售出库
      */
     @PostMapping("/saleOutbound")
-    public void saleOutbound(@RequestBody ContractDto dto) {
+    public void saleOutbound(@RequestBody ContractOutboundInfoDto dto) {
         contractService.saleOutbound(dto);
     }
 

+ 32 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractOutboundInfoController.java

@@ -0,0 +1,32 @@
+package com.fjhx.sale.controller.contract;
+
+import com.fjhx.sale.entity.contract.dto.ContractOutboundInfoDto;
+import com.fjhx.sale.entity.contract.vo.ContractOutboundInfoVo;
+import com.fjhx.sale.service.contract.ContractOutboundInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * <p>
+ * 销售出货信息 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2024-03-13
+ */
+@RestController
+@RequestMapping("/contractOutboundInfo")
+public class ContractOutboundInfoController {
+    @Autowired
+    private ContractOutboundInfoService contractOutboundInfoService;
+
+    @PostMapping("/detail")
+    public ContractOutboundInfoVo detail(@RequestBody ContractOutboundInfoDto dto) {
+        return contractOutboundInfoService.detail(dto.getId());
+    }
+
+}

+ 20 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractOutboundRecordsController.java

@@ -0,0 +1,20 @@
+package com.fjhx.sale.controller.contract;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * <p>
+ * 销售出库详情 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2024-03-13
+ */
+@RestController
+@RequestMapping("/contractOutboundRecords")
+public class ContractOutboundRecordsController {
+
+
+}

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

@@ -105,11 +105,6 @@ public class ContractDto extends Contract implements SetCustomizeAreaId {
     private List<ContractProductBom> contractProductBomList;
 
     /**
-     * 特批出库
-     */
-    private Boolean specialOutbound;
-
-    /**
      * 合同附件
      */
     private List<ObsFile> contractFileList;

+ 25 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractOutboundInfoDto.java

@@ -0,0 +1,25 @@
+package com.fjhx.sale.entity.contract.dto;
+
+import com.fjhx.sale.entity.contract.po.ContractOutboundInfo;
+import com.fjhx.sale.entity.contract.po.ContractOutboundRecords;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 销售出货信息新增编辑入参实体
+ *
+ * @author
+ * @since 2024-03-13
+ */
+@Getter
+@Setter
+public class ContractOutboundInfoDto extends ContractOutboundInfo {
+
+    /**
+     * 出库记录列表
+     */
+    List<ContractOutboundRecords> outboundRecordList;
+
+}

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

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.contract.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 销售出货信息列表查询入参实体
+ *
+ * @author
+ * @since 2024-03-13
+ */
+@Getter
+@Setter
+public class ContractOutboundInfoSelectDto extends BaseSelectDto {
+
+}

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

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.contract.dto;
+
+import com.fjhx.sale.entity.contract.po.ContractOutboundRecords;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 销售出库详情新增编辑入参实体
+ *
+ * @author
+ * @since 2024-03-13
+ */
+@Getter
+@Setter
+public class ContractOutboundRecordsDto extends ContractOutboundRecords {
+
+}

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

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.contract.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 销售出库详情列表查询入参实体
+ *
+ * @author
+ * @since 2024-03-13
+ */
+@Getter
+@Setter
+public class ContractOutboundRecordsSelectDto extends BaseSelectDto {
+
+}

+ 34 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/ContractOutboundInfo.java

@@ -0,0 +1,34 @@
+package com.fjhx.sale.entity.contract.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 销售出货信息
+ * </p>
+ *
+ * @author
+ * @since 2024-03-13
+ */
+@Getter
+@Setter
+@TableName("contract_outbound_info")
+public class ContractOutboundInfo extends BasePo {
+
+    /**
+     * 合同id
+     */
+    private Long contractId;
+    /**
+     * 流程审批状态
+     */
+    private Integer status;
+    /**
+     * 流程id
+     */
+    private Long flowId;
+
+}

+ 53 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/ContractOutboundRecords.java

@@ -0,0 +1,53 @@
+package com.fjhx.sale.entity.contract.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 销售出库详情
+ * </p>
+ *
+ * @author
+ * @since 2024-03-13
+ */
+@Getter
+@Setter
+@TableName("contract_outbound_records")
+public class ContractOutboundRecords extends BasePo {
+
+    /**
+     * 出货记录id
+     */
+    private Long recordId;
+
+    /**
+     * 合同id
+     */
+    private Long contractId;
+
+    /**
+     * 合同产品id
+     */
+    private Long contractProductId;
+
+    /**
+     * 商品ID
+     */
+    private Long productId;
+
+    /**
+     * 出库数量
+     */
+    private BigDecimal quantity;
+
+    /**
+     * 销售单价
+     */
+    private BigDecimal price;
+
+}

+ 23 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractOutboundInfoVo.java

@@ -0,0 +1,23 @@
+package com.fjhx.sale.entity.contract.vo;
+
+import com.fjhx.sale.entity.contract.po.ContractOutboundInfo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 销售出货信息列表查询返回值实体
+ *
+ * @author
+ * @since 2024-03-13
+ */
+@Getter
+@Setter
+public class ContractOutboundInfoVo extends ContractOutboundInfo {
+
+    /**
+     * 出库明细
+     */
+    List<ContractOutboundRecordsVo> outboundRecordList;
+}

+ 44 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractOutboundRecordsVo.java

@@ -0,0 +1,44 @@
+package com.fjhx.sale.entity.contract.vo;
+
+import com.fjhx.sale.entity.contract.po.ContractOutboundRecords;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * 销售出库详情列表查询返回值实体
+ *
+ * @author
+ * @since 2024-03-13
+ */
+@Getter
+@Setter
+public class ContractOutboundRecordsVo extends ContractOutboundRecords {
+
+    /**
+     * 产品编号
+     */
+    private String productCode;
+    /**
+     * 产品名称
+     */
+    private String productName;
+    /**
+     * 产品长
+     */
+    private BigDecimal productLength;
+    /**
+     * 产品宽
+     */
+    private BigDecimal productWidth;
+    /**
+     * 产品高
+     */
+    private BigDecimal productHeight;
+    /**
+     * 产品颜色
+     */
+    private String productColor;
+
+}

+ 30 - 7
hx-sale/src/main/java/com/fjhx/sale/flow/SalesOutboundApprovedFlow.java

@@ -1,17 +1,29 @@
 package com.fjhx.sale.flow;
 
+import cn.hutool.core.bean.BeanUtil;
 import com.alibaba.fastjson.JSONObject;
+import com.fjhx.common.enums.FlowStatusEnum1;
+import com.fjhx.common.utils.Assert;
 import com.fjhx.flow.core.FlowDelegate;
-import com.fjhx.sale.entity.contract.dto.ContractDto;
+import com.fjhx.sale.entity.contract.dto.ContractOutboundInfoDto;
 import com.fjhx.sale.entity.contract.po.Contract;
+import com.fjhx.sale.entity.contract.po.ContractOutboundInfo;
+import com.fjhx.sale.entity.contract.vo.ContractOutboundInfoVo;
+import com.fjhx.sale.service.contract.ContractOutboundInfoService;
 import com.fjhx.sale.service.contract.ContractService;
+import com.ruoyi.common.core.domain.BasePo;
+import com.ruoyi.common.utils.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.Date;
+
 @Component
 public class SalesOutboundApprovedFlow extends FlowDelegate {
     @Autowired
     private ContractService contractService;
+    @Autowired
+    private ContractOutboundInfoService contractOutboundInfoService;
 
     @Override
     public String getFlowKey() {
@@ -20,18 +32,29 @@ public class SalesOutboundApprovedFlow extends FlowDelegate {
 
     @Override
     public Long start(Long flowId, JSONObject submitData) {
-        Long id = submitData.getLong("id");
-        Contract contract = contractService.getById(id);
+        ContractOutboundInfoDto dto = submitData.toJavaObject(ContractOutboundInfoDto.class);
+        dto.setFlowId(flowId);
+        dto.setStatus(FlowStatusEnum1.UNDER_REVIEW.getKey());
+        contractService.createOutboundInfo(dto);
+
+        Contract contract = contractService.getById(dto.getContractId());
+        Assert.notEmpty(contract, "查询不到合同信息");
         //将code赋值给流程引擎
         submitData.put("code", contract.getCode());
-        return id;
+        return dto.getId();
     }
 
     @Override
     public void end(Long flowId, Long businessId, JSONObject submitData) {
-        ContractDto contractDto = submitData.toJavaObject(ContractDto.class);
+        contractOutboundInfoService.update(q -> q
+                .eq(ContractOutboundInfo::getId, businessId)
+                .set(ContractOutboundInfo::getStatus, FlowStatusEnum1.PASS.getKey())
+                .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+                .set(BasePo::getUpdateTime, new Date())
+        );
+        ContractOutboundInfoVo detail = contractOutboundInfoService.detail(businessId);
+        ContractOutboundInfoDto dto = BeanUtil.copyProperties(detail, ContractOutboundInfoDto.class);
         //特批无需校验金额
-        contractDto.setSpecialOutbound(true);
-        contractService.saleOutbound(contractDto);
+        contractService.saleOutboundComm(dto);
     }
 }

+ 19 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractOutboundInfoMapper.java

@@ -0,0 +1,19 @@
+package com.fjhx.sale.mapper.contract;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fjhx.sale.entity.contract.po.ContractOutboundInfo;
+import com.fjhx.sale.entity.contract.vo.ContractOutboundInfoVo;
+
+
+/**
+ * <p>
+ * 销售出货信息 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2024-03-13
+ */
+public interface ContractOutboundInfoMapper extends BaseMapper<ContractOutboundInfo> {
+
+    ContractOutboundInfoVo detail(Long id);
+}

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

@@ -0,0 +1,17 @@
+package com.fjhx.sale.mapper.contract;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fjhx.sale.entity.contract.po.ContractOutboundRecords;
+
+
+/**
+ * <p>
+ * 销售出库详情 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2024-03-13
+ */
+public interface ContractOutboundRecordsMapper extends BaseMapper<ContractOutboundRecords> {
+
+}

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

@@ -0,0 +1,21 @@
+package com.fjhx.sale.service.contract;
+
+import com.fjhx.sale.entity.contract.po.ContractOutboundInfo;
+import com.fjhx.sale.entity.contract.vo.ContractOutboundInfoVo;
+import com.ruoyi.common.core.service.BaseService;
+
+
+/**
+ * <p>
+ * 销售出货信息 服务类
+ * </p>
+ *
+ * @author
+ * @since 2024-03-13
+ */
+public interface ContractOutboundInfoService extends BaseService<ContractOutboundInfo> {
+    /**
+     * 详情
+     */
+    ContractOutboundInfoVo detail(Long id);
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractOutboundRecordsService.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.service.contract;
+
+import com.fjhx.sale.entity.contract.po.ContractOutboundRecords;
+import com.ruoyi.common.core.service.BaseService;
+
+
+/**
+ * <p>
+ * 销售出库详情 服务类
+ * </p>
+ *
+ * @author
+ * @since 2024-03-13
+ */
+public interface ContractOutboundRecordsService extends BaseService<ContractOutboundRecords> {
+
+}

+ 6 - 5
hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractService.java

@@ -7,10 +7,7 @@ import com.fjhx.customer.entity.customer.dto.CustomerDto;
 import com.fjhx.item.entity.product.bo.ProductAnalysisBo;
 import com.fjhx.item.entity.product.dto.ProductInfoDto;
 import com.fjhx.item.entity.product.dto.ProductInfoSelectDto;
-import com.fjhx.sale.entity.contract.dto.ContractDto;
-import com.fjhx.sale.entity.contract.dto.ContractSelectDto;
-import com.fjhx.sale.entity.contract.dto.DecisionAidDto;
-import com.fjhx.sale.entity.contract.dto.PayDecisionAidDto;
+import com.fjhx.sale.entity.contract.dto.*;
 import com.fjhx.sale.entity.contract.po.Contract;
 import com.fjhx.sale.entity.contract.vo.*;
 import com.fjhx.sale.entity.purchase.po.EhsdPurchase;
@@ -252,7 +249,11 @@ public interface ContractService extends BaseService<Contract> {
     /**
      * 销售出库
      */
-    void saleOutbound(ContractDto dto);
+    void saleOutbound(ContractOutboundInfoDto dto);
+
+    void saleOutboundComm(ContractOutboundInfoDto dto);
+
+    void createOutboundInfo(ContractOutboundInfoDto dto);
 
     /**
      * 生产终止

+ 53 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractOutboundInfoServiceImpl.java

@@ -0,0 +1,53 @@
+package com.fjhx.sale.service.contract.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.sale.entity.contract.po.ContractOutboundInfo;
+import com.fjhx.sale.entity.contract.po.ContractOutboundRecords;
+import com.fjhx.sale.entity.contract.vo.ContractOutboundInfoVo;
+import com.fjhx.sale.entity.contract.vo.ContractOutboundRecordsVo;
+import com.fjhx.sale.mapper.contract.ContractOutboundInfoMapper;
+import com.fjhx.sale.service.contract.ContractOutboundInfoService;
+import com.fjhx.sale.service.contract.ContractOutboundRecordsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 销售出货信息 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2024-03-13
+ */
+@Service
+public class ContractOutboundInfoServiceImpl extends ServiceImpl<ContractOutboundInfoMapper, ContractOutboundInfo> implements ContractOutboundInfoService {
+
+    @Autowired
+    private ContractOutboundRecordsService contractOutboundRecordsService;
+    @Autowired
+    private ProductInfoService productInfoService;
+
+    @Override
+    public ContractOutboundInfoVo detail(Long id) {
+        ContractOutboundInfoVo detail = baseMapper.detail(id);
+        List<ContractOutboundRecords> list = contractOutboundRecordsService.list(q -> q.eq(ContractOutboundRecords::getRecordId, id));
+        List<ContractOutboundRecordsVo> contractOutboundRecordsVos = BeanUtil.copyToList(list, ContractOutboundRecordsVo.class);
+        //赋值产品信息
+        productInfoService.attributeAssign(contractOutboundRecordsVos, ContractOutboundRecordsVo::getProductId, (item, productInfo) -> {
+            item.setProductCode(productInfo.getCode());
+            item.setProductName(productInfo.getName());
+            item.setProductLength(productInfo.getLength());
+            item.setProductWidth(productInfo.getWidth());
+            item.setProductHeight(productInfo.getHeight());
+            item.setProductColor(productInfo.getColor());
+        });
+
+        detail.setOutboundRecordList(contractOutboundRecordsVos);
+        return detail;
+    }
+}

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

@@ -0,0 +1,21 @@
+package com.fjhx.sale.service.contract.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.sale.entity.contract.po.ContractOutboundRecords;
+import com.fjhx.sale.mapper.contract.ContractOutboundRecordsMapper;
+import com.fjhx.sale.service.contract.ContractOutboundRecordsService;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * <p>
+ * 销售出库详情 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2024-03-13
+ */
+@Service
+public class ContractOutboundRecordsServiceImpl extends ServiceImpl<ContractOutboundRecordsMapper, ContractOutboundRecords> implements ContractOutboundRecordsService {
+
+}

+ 71 - 33
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java

@@ -217,6 +217,11 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
     @Autowired
     private ProductClassifyService productClassifyService;
 
+    @Autowired
+    private ContractOutboundInfoService contractOutboundInfoService;
+    @Autowired
+    private ContractOutboundRecordsService contractOutboundRecordsService;
+
     /**
      * 合同和样品单 下拉分页
      */
@@ -3061,19 +3066,50 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
 
     @DSTransactional
     @Override
-    public void saleOutbound(ContractDto dto) {
-        Long id = dto.getId();
-        List<ContractProductDto> productDtoList = dto.getContractProductList();
+    public void saleOutbound(ContractOutboundInfoDto dto) {
+        Long contractId = dto.getContractId();
+        List<ContractOutboundRecords> productDtoList = dto.getOutboundRecordList();
+
+        dto.setStatus(FlowStatusEnum1.PASS.getKey());
+
+        ContractVo contract = baseMapper.detail(contractId);
+        Assert.notEmpty(contract, "查询不到销售订单信息!");
+        //创建出入库信息
+        createOutboundInfo(dto);
+
+        //校验是否能出货(非特批校验,特批跳过)
+        //数量*(1-预付比例%)*单价<=(累计收款金额-预付款金额)-已出货金额
+        //预付比例-小数
+        BigDecimal multiply = new BigDecimal(contract.getAdvanceRatio()).multiply(BigDecimal.valueOf(0.01));
+        //剩下比例-小数
+        BigDecimal subtract = BigDecimal.ONE.subtract(multiply);
+        //(累计收款金额-预付款金额)-已出货金额
+        BigDecimal subtract2 = contract.getSumClaimMoney().subtract(contract.getAmount().multiply(multiply)).subtract(contract.getShipmentAmount());
+        for (ContractOutboundRecords productDto : productDtoList) {
+            BigDecimal multiply1 = productDto.getQuantity().multiply(subtract).multiply(productDto.getPrice());
+            if (multiply1.compareTo(subtract2) > 0) {
+                throw new ServiceException(String.format("收款金额不满足出货条件,至少需再收款%s %s 才能出货!", contract.getCurrency(), multiply1.subtract(subtract2).setScale(4, RoundingMode.HALF_UP)));
+            }
+        }
+
+        //创建待出库
+        saleOutboundComm(dto);
+    }
+
+    @Override
+    public void saleOutboundComm(ContractOutboundInfoDto dto) {
+        Long contractId = dto.getContractId();
+        List<ContractOutboundRecords> productDtoList = dto.getOutboundRecordList();
         //补充数据
-        for (ContractProductDto contractProductDto : productDtoList) {
-            ContractProduct byId = contractProductService.getById(contractProductDto.getId());
-            contractProductDto.setProductId(byId.getProductId());
-            contractProductDto.setPrice(byId.getPrice());
+        for (ContractOutboundRecords outboundRecords : productDtoList) {
+            ContractProduct byId = contractProductService.getById(outboundRecords.getContractProductId());
+            outboundRecords.setProductId(byId.getProductId());
+            outboundRecords.setPrice(byId.getPrice());
         }
 
         //修改订单出库状态
         this.update(q -> q
-                .eq(Contract::getId, id)
+                .eq(Contract::getId, contractId)
                 .set(Contract::getOutboundStatus, 1)
                 .set(Contract::getOutboundTime, new Date())
                 .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
@@ -3081,27 +3117,11 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         );
 
         //修改生产订单出库状态为出库中
-        stockWaitDetailsMapper.updateOrderStatusByContractId(id, 5);
+        stockWaitDetailsMapper.updateOrderStatusByContractId(contractId, 5);
 
-        ContractVo contract = baseMapper.detail(id);
+        ContractVo contract = baseMapper.detail(contractId);
         Assert.notEmpty(contract, "查询不到销售订单信息!");
 
-        //校验是否能出货(非特批校验,特批跳过)
-        if (ObjectUtil.isEmpty(dto.getSpecialOutbound()) || !dto.getSpecialOutbound()) {
-            //数量*(1-预付比例%)*单价<=(累计收款金额-预付款金额)-已出货金额
-            //预付比例-小数
-            BigDecimal multiply = new BigDecimal(contract.getAdvanceRatio()).multiply(BigDecimal.valueOf(0.01));
-            //剩下比例-小数
-            BigDecimal subtract = BigDecimal.ONE.subtract(multiply);
-            //(累计收款金额-预付款金额)-已出货金额
-            BigDecimal subtract2 = contract.getSumClaimMoney().subtract(contract.getAmount().multiply(multiply)).subtract(contract.getShipmentAmount());
-            for (ContractProduct productDto : productDtoList) {
-                BigDecimal multiply1 = productDto.getQuantity().multiply(subtract).multiply(productDto.getPrice());
-                if (multiply1.compareTo(subtract2) > 0) {
-                    throw new ServiceException(String.format("收款金额不满足出货条件,至少需再收款%s %s 才能出货!", contract.getCurrency(), multiply1.subtract(subtract2)));
-                }
-            }
-        }
 
         //生成待出库数据
         StockWait stockWait = new StockWait();
@@ -3109,30 +3129,48 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         stockWait.setType(2);
         stockWait.setBusinessCode(contract.getCode());
         stockWait.setBusinessType(JournalType.SALE_OUT.getDetailType());
-        stockWait.setBusinessId(id);
-        stockWait.setContractId(id);
+        stockWait.setBusinessId(dto.getId());
+        stockWait.setContractId(contractId);
         stockWait.setStatus(0);
         stockWaitService.save(stockWait);
 
         List<StockWaitDetails> stockWaitDetailsList = new ArrayList<>();
-        for (ContractProductDto contractProduct : productDtoList) {
-            BigDecimal quantity = contractProduct.getQuantity();
+        for (ContractOutboundRecords outboundRecords : productDtoList) {
+            BigDecimal quantity = outboundRecords.getQuantity();
             //跳过出库数量为空||出库数量为0
             if (ObjectUtil.isEmpty(quantity) || quantity.compareTo(BigDecimal.ZERO) <= 0) {
                 continue;
             }
             StockWaitDetails stockWaitDetails = new StockWaitDetails();
             stockWaitDetails.setStockWaitId(stockWait.getId());
-            stockWaitDetails.setProductId(contractProduct.getProductId());
+            stockWaitDetails.setProductId(outboundRecords.getProductId());
             stockWaitDetails.setQuantity(quantity);
             stockWaitDetails.setReceiptQuantity(BigDecimal.ZERO);
-            stockWaitDetails.setBusinessDetailsId(contractProduct.getId());
-            stockWaitDetails.setContractDetailId(contractProduct.getId());
+            stockWaitDetails.setBusinessDetailsId(outboundRecords.getId());
+            stockWaitDetails.setContractDetailId(outboundRecords.getContractProductId());
             stockWaitDetailsList.add(stockWaitDetails);
         }
         stockWaitDetailsService.saveBatch(stockWaitDetailsList);
     }
 
+
+    @Override
+    public void createOutboundInfo(ContractOutboundInfoDto dto) {
+        Assert.notEmpty(dto.getContractId(), "合同id不能为空!");
+        contractOutboundInfoService.save(dto);
+        List<ContractOutboundRecords> outboundRecordList = dto.getOutboundRecordList();
+        for (ContractOutboundRecords records : outboundRecordList) {
+            Assert.notEmpty(records.getContractProductId(), "合同明细id不能为空!");
+            records.setContractId(records.getContractId());
+            records.setRecordId(dto.getId());
+            ContractProduct contractProduct = contractProductService.getById(records.getContractProductId());
+            Assert.notEmpty(contractProduct, "查询不到合同明细信息!");
+            records.setProductId(contractProduct.getProductId());
+            records.setPrice(contractProduct.getPrice());
+        }
+        contractOutboundRecordsService.saveBatch(outboundRecordList);
+    }
+
     @DSTransactional
     @Override
     public void productionTermination(ContractDto dto) {

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

@@ -616,11 +616,11 @@
 
     <select id="detail" resultType="com.fjhx.sale.entity.contract.vo.ContractVo">
         SELECT c.*,
-               sum(cc.contract_money)        as sumClaimMoney,
+               IFNULL(sum(cc.contract_money), 0) as sumClaimMoney,
                (SELECT IFNULL(sum(swd.receipt_quantity * cp.price), 0)
                 FROM contract_product cp
                          LEFT JOIN stock_wait_details swd ON swd.contract_detail_id = cp.id
-                WHERE cp.contract_id = c.id) AS shipmentAmount
+                WHERE cp.contract_id = c.id)     AS shipmentAmount
         FROM contract c
                  LEFT JOIN claim_contract cc ON cc.contract_id = c.id
         WHERE c.id = #{id}

+ 9 - 0
hx-sale/src/main/resources/mapper/contract/ContractOutboundInfoMapper.xml

@@ -0,0 +1,9 @@
+<?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.contract.ContractOutboundInfoMapper">
+    <select id="detail" resultType="com.fjhx.sale.entity.contract.vo.ContractOutboundInfoVo">
+        SELECT *
+        FROM contract_outbound_info
+        WHERE id = #{id}
+    </select>
+</mapper>

+ 4 - 0
hx-sale/src/main/resources/mapper/contract/ContractOutboundRecordsMapper.xml

@@ -0,0 +1,4 @@
+<?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.contract.ContractOutboundRecordsMapper">
+</mapper>