yzc il y a 1 an
Parent
commit
e3c7b9094a
21 fichiers modifiés avec 744 ajouts et 2 suppressions
  1. 2 1
      hx-item/src/main/java/com/fjhx/item/enums/ProductAvailableRecordType.java
  2. 2 1
      hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductInfoServiceImpl.java
  3. 46 0
      hx-sale/src/main/java/com/fjhx/sale/controller/purchase/PurchaseBackController.java
  4. 20 0
      hx-sale/src/main/java/com/fjhx/sale/controller/purchase/PurchaseBackDetailsController.java
  5. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/purchase/dto/PurchaseBackDetailsDto.java
  6. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/purchase/dto/PurchaseBackDetailsSelectDto.java
  7. 25 0
      hx-sale/src/main/java/com/fjhx/sale/entity/purchase/dto/PurchaseBackDto.java
  8. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/purchase/dto/PurchaseBackSelectDto.java
  9. 46 0
      hx-sale/src/main/java/com/fjhx/sale/entity/purchase/po/PurchaseBack.java
  10. 58 0
      hx-sale/src/main/java/com/fjhx/sale/entity/purchase/po/PurchaseBackDetails.java
  11. 45 0
      hx-sale/src/main/java/com/fjhx/sale/entity/purchase/vo/PurchaseBackDetailsVo.java
  12. 42 0
      hx-sale/src/main/java/com/fjhx/sale/entity/purchase/vo/PurchaseBackVo.java
  13. 149 0
      hx-sale/src/main/java/com/fjhx/sale/flow/PurchaseBackFlow.java
  14. 17 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/purchase/PurchaseBackDetailsMapper.java
  15. 26 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/purchase/PurchaseBackMapper.java
  16. 17 0
      hx-sale/src/main/java/com/fjhx/sale/service/purchase/PurchaseBackDetailsService.java
  17. 30 0
      hx-sale/src/main/java/com/fjhx/sale/service/purchase/PurchaseBackService.java
  18. 21 0
      hx-sale/src/main/java/com/fjhx/sale/service/purchase/impl/PurchaseBackDetailsServiceImpl.java
  19. 123 0
      hx-sale/src/main/java/com/fjhx/sale/service/purchase/impl/PurchaseBackServiceImpl.java
  20. 4 0
      hx-sale/src/main/resources/mapper/purchase/PurchaseBackDetailsMapper.xml
  21. 20 0
      hx-sale/src/main/resources/mapper/purchase/PurchaseBackMapper.xml

+ 2 - 1
hx-item/src/main/java/com/fjhx/item/enums/ProductAvailableRecordType.java

@@ -14,7 +14,8 @@ public enum ProductAvailableRecordType {
     HAND_IN(5, "手动入库"),
     HAND_OUT(6, "手动出库"),
     SALE_CANCEL(7, "销售合同作废"),
-    SALE_UPDATE(8, "销售合同变更");
+    SALE_UPDATE(8, "销售合同变更"),
+    PURCHASE_BACK(9, "采购退货");
 
     /**
      * 类型

+ 2 - 1
hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductInfoServiceImpl.java

@@ -395,7 +395,8 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
             //销售合同作废          可用库存=可用库存-((待采购量-已采购量)-合同量)
             //申购的-采购合同作废    可用库存 = 当前可用库存 - 采购明细数量
             //手动出库             可用库存 = 当前可用库存 - 出库数量
-            else if (ProductAvailableRecordType.SALE_CANCEL.equals(businessType) || ProductAvailableRecordType.PURCHASE_CANCEL.equals(businessType) || ProductAvailableRecordType.HAND_OUT.equals(businessType)) {
+            //采购退货             可用库存 = 当前可用库存 - 退货数量
+            else if (ProductAvailableRecordType.SALE_CANCEL.equals(businessType) || ProductAvailableRecordType.PURCHASE_CANCEL.equals(businessType) || ProductAvailableRecordType.HAND_OUT.equals(businessType) || ProductAvailableRecordType.PURCHASE_BACK.equals(businessType)) {
                 availableQuantity = availableQuantity.subtract(quantity);
             }
             //申购的-采购合同通过    可用库存 = 当前可用库存 + 采购明细数量

+ 46 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/purchase/PurchaseBackController.java

@@ -0,0 +1,46 @@
+package com.fjhx.sale.controller.purchase;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.purchase.dto.PurchaseBackSelectDto;
+import com.fjhx.sale.entity.purchase.vo.PurchaseBackVo;
+import com.fjhx.sale.service.purchase.PurchaseBackService;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+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>
+ * sale_采购退货 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2024-01-30
+ */
+@RestController
+@RequestMapping("/purchaseBack")
+public class PurchaseBackController {
+
+    @Autowired
+    private PurchaseBackService purchaseBackService;
+
+    /**
+     * sale_采购退货分页
+     */
+    @PostMapping("/page")
+    public Page<PurchaseBackVo> page(@RequestBody PurchaseBackSelectDto dto) {
+        return purchaseBackService.getPage(dto);
+    }
+
+    /**
+     * sale_采购退货明细
+     */
+    @PostMapping("/detail")
+    public PurchaseBackVo detail(@RequestBody BaseSelectDto dto) {
+        return purchaseBackService.detail(dto.getId());
+    }
+
+}

+ 20 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/purchase/PurchaseBackDetailsController.java

@@ -0,0 +1,20 @@
+package com.fjhx.sale.controller.purchase;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * <p>
+ * sale_采购退货明细 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2024-01-30
+ */
+@RestController
+@RequestMapping("/purchaseBackDetails")
+public class PurchaseBackDetailsController {
+
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/purchase/dto/PurchaseBackDetailsDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.purchase.dto;
+
+import com.fjhx.sale.entity.purchase.po.PurchaseBackDetails;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * sale_采购退货明细新增编辑入参实体
+ *
+ * @author
+ * @since 2024-01-30
+ */
+@Getter
+@Setter
+public class PurchaseBackDetailsDto extends PurchaseBackDetails {
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/purchase/dto/PurchaseBackDetailsSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.purchase.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * sale_采购退货明细列表查询入参实体
+ *
+ * @author
+ * @since 2024-01-30
+ */
+@Getter
+@Setter
+public class PurchaseBackDetailsSelectDto extends BaseSelectDto {
+
+}

+ 25 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/purchase/dto/PurchaseBackDto.java

@@ -0,0 +1,25 @@
+package com.fjhx.sale.entity.purchase.dto;
+
+import com.fjhx.sale.entity.purchase.po.PurchaseBack;
+import com.fjhx.sale.entity.purchase.po.PurchaseBackDetails;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * sale_采购退货新增编辑入参实体
+ *
+ * @author
+ * @since 2024-01-30
+ */
+@Getter
+@Setter
+public class PurchaseBackDto extends PurchaseBack {
+
+    /**
+     * 退货明细
+     */
+    private List<PurchaseBackDetails> purchaseBackDetailsList;
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/purchase/dto/PurchaseBackSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.purchase.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * sale_采购退货列表查询入参实体
+ *
+ * @author
+ * @since 2024-01-30
+ */
+@Getter
+@Setter
+public class PurchaseBackSelectDto extends BaseSelectDto {
+
+}

+ 46 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/purchase/po/PurchaseBack.java

@@ -0,0 +1,46 @@
+package com.fjhx.sale.entity.purchase.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * sale_采购退货
+ * </p>
+ *
+ * @author
+ * @since 2024-01-30
+ */
+@Getter
+@Setter
+@TableName("purchase_back")
+public class PurchaseBack extends BasePo {
+
+    /**
+     * 采购id
+     */
+    private Long purchaseId;
+
+    /**
+     * 退货单号
+     */
+    private String code;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 退货状态
+     */
+    private Integer status;
+
+    /**
+     * 归属公司id
+     */
+    private Long companyId;
+
+}

+ 58 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/purchase/po/PurchaseBackDetails.java

@@ -0,0 +1,58 @@
+package com.fjhx.sale.entity.purchase.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>
+ * sale_采购退货明细
+ * </p>
+ *
+ * @author
+ * @since 2024-01-30
+ */
+@Getter
+@Setter
+@TableName("purchase_back_details")
+public class PurchaseBackDetails extends BasePo {
+
+    /**
+     * 采购退货id
+     */
+    private Long purchaseBackId;
+
+    /**
+     * 采购id
+     */
+    private Long purchaseId;
+
+    /**
+     * 采购明细id
+     */
+    private Long purchaseDetailsId;
+
+    /**
+     * 产品id
+     */
+    private Long productId;
+
+    /**
+     * 退货数量
+     */
+    private BigDecimal quantity;
+
+    /**
+     * 金额
+     */
+    private BigDecimal amount;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 45 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/purchase/vo/PurchaseBackDetailsVo.java

@@ -0,0 +1,45 @@
+package com.fjhx.sale.entity.purchase.vo;
+
+import com.fjhx.sale.entity.purchase.po.PurchaseBackDetails;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * sale_采购退货明细列表查询返回值实体
+ *
+ * @author
+ * @since 2024-01-30
+ */
+@Getter
+@Setter
+public class PurchaseBackDetailsVo extends PurchaseBackDetails {
+
+    /**
+     * 产品编号
+     */
+    private String productCode;
+    /**
+     * 产品名称
+     */
+    private String productName;
+    /**
+     * 产品长
+     */
+    private BigDecimal productLength;
+    /**
+     * 产品宽
+     */
+    private BigDecimal productWidth;
+    /**
+     * 产品高
+     */
+    private BigDecimal productHeight;
+
+    /**
+     * 采购数量
+     */
+    private BigDecimal purchaseQuantity;
+
+}

+ 42 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/purchase/vo/PurchaseBackVo.java

@@ -0,0 +1,42 @@
+package com.fjhx.sale.entity.purchase.vo;
+
+import com.fjhx.sale.entity.purchase.po.PurchaseBack;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * sale_采购退货列表查询返回值实体
+ *
+ * @author
+ * @since 2024-01-30
+ */
+@Getter
+@Setter
+public class PurchaseBackVo extends PurchaseBack {
+
+    private List<PurchaseBackDetailsVo> purchaseBackDetailsList;
+
+    /**
+     * 采购金额
+     */
+    private BigDecimal purchaseAmount;
+
+    /**
+     * 已付金额
+     */
+    private BigDecimal payAmount;
+
+    /**
+     * 供应商id
+     */
+    private Long supplierId;
+
+    /**
+     * 供应商名称
+     */
+    private String supplierName;
+
+}

+ 149 - 0
hx-sale/src/main/java/com/fjhx/sale/flow/PurchaseBackFlow.java

@@ -0,0 +1,149 @@
+package com.fjhx.sale.flow;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.fjhx.common.entity.AvailableStockBo;
+import com.fjhx.common.enums.CodingRuleEnum;
+import com.fjhx.common.enums.FlowStatusEnum1;
+import com.fjhx.common.service.coding.CodingRuleService;
+import com.fjhx.flow.core.FlowDelegate;
+import com.fjhx.flow.enums.FlowStatusEnum;
+import com.fjhx.item.enums.ProductAvailableRecordType;
+import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.sale.entity.purchase.dto.PurchaseBackDto;
+import com.fjhx.sale.entity.purchase.po.PurchaseBack;
+import com.fjhx.sale.entity.purchase.po.PurchaseBackDetails;
+import com.fjhx.sale.service.purchase.PurchaseBackDetailsService;
+import com.fjhx.sale.service.purchase.PurchaseBackService;
+import com.fjhx.wms.entity.stock.emums.JournalType;
+import com.fjhx.wms.entity.stock.po.StockWait;
+import com.fjhx.wms.entity.stock.po.StockWaitDetails;
+import com.fjhx.wms.service.stock.StockWaitDetailsService;
+import com.fjhx.wms.service.stock.StockWaitService;
+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.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Component
+public class PurchaseBackFlow extends FlowDelegate {
+
+    @Autowired
+    private CodingRuleService codingRuleService;
+    @Autowired
+    private PurchaseBackService purchaseBackService;
+    @Autowired
+    private PurchaseBackDetailsService purchaseBackDetailsService;
+    @Autowired
+    private StockWaitService stockWaitService;
+    @Autowired
+    private StockWaitDetailsService stockWaitDetailsService;
+    @Autowired
+    private ProductInfoService productInfoService;
+
+    @Override
+    public String getFlowKey() {
+        return "purchase_back_flow";
+    }
+
+    @Override
+    public Long start(Long flowId, JSONObject submitData) {
+        PurchaseBackDto purchaseBackDto = submitData.toJavaObject(PurchaseBackDto.class);
+
+        purchaseBackDto.setCompanyId(SecurityUtils.getCompanyId());
+
+        //赋值编号
+        if (ObjectUtil.isEmpty(purchaseBackDto.getId())) {
+            purchaseBackDto.setCode(codingRuleService.createCode(CodingRuleEnum.PURCHASE_BACK.getKey(), null));
+        }
+
+        //改成审批中
+        purchaseBackDto.setStatus(FlowStatusEnum1.UNDER_REVIEW.getKey());
+
+        purchaseBackService.saveOrUpdate(purchaseBackDto);
+        List<PurchaseBackDetails> purchaseBackDetailsList = purchaseBackDto.getPurchaseBackDetailsList();
+        for (PurchaseBackDetails purchaseBackDetails : purchaseBackDetailsList) {
+            purchaseBackDetails.setPurchaseBackId(purchaseBackDto.getId());
+            purchaseBackDetails.setPurchaseId(purchaseBackDto.getPurchaseId());
+        }
+        purchaseBackDetailsService.saveOrUpdateBatch(purchaseBackDetailsList);
+
+        //回传单号
+        submitData.put("code", purchaseBackDto.getCode());
+        return purchaseBackDto.getId();
+    }
+
+    @Override
+    public void end(Long flowId, Long businessId, JSONObject submitData) {
+        PurchaseBack purchaseBack = purchaseBackService.getById(businessId);
+        purchaseBack.setStatus(FlowStatusEnum1.PASS.getKey());
+        purchaseBackService.updateById(purchaseBack);
+
+        //创建待出库
+        StockWait stockWait = new StockWait();
+        stockWait.setType(2);//出库
+        stockWait.setStatus(0);//待出库
+        stockWait.setBusinessType(JournalType.PURCHASE_RETURN_OUT.getDetailType());
+        stockWait.setBusinessId(purchaseBack.getId());
+        stockWait.setBusinessCode(purchaseBack.getCode());
+        stockWaitService.save(stockWait);
+
+        List<StockWaitDetails> stockWaitDetailsList = new ArrayList<>();
+        List<AvailableStockBo> availableStockBoList = new ArrayList<>();
+
+        List<PurchaseBackDetails> list = purchaseBackDetailsService.list(q -> q.eq(PurchaseBackDetails::getPurchaseBackId, businessId));
+        for (PurchaseBackDetails purchaseBackDetails : list) {
+            Long productId = purchaseBackDetails.getProductId();
+            BigDecimal quantity = purchaseBackDetails.getQuantity();
+            //生成待出库
+            StockWaitDetails stockWaitDetails = new StockWaitDetails();
+            stockWaitDetails.setStockWaitId(stockWait.getId());
+            stockWaitDetails.setProductId(productId);
+            stockWaitDetails.setQuantity(quantity);
+            stockWaitDetailsList.add(stockWaitDetails);
+
+
+            //生成操作可用库存的实体
+            AvailableStockBo availableStockBo = new AvailableStockBo();
+            availableStockBo.setProductId(productId);
+            availableStockBo.setQuantity(quantity);
+            availableStockBoList.add(availableStockBo);
+        }
+        stockWaitDetailsService.saveBatch(stockWaitDetailsList);
+
+        //修改可用库存
+        productInfoService.editAvailableQuantity(availableStockBoList, businessId, ProductAvailableRecordType.PURCHASE_BACK, purchaseBack.getCompanyId());
+    }
+
+    @Override
+    public void relaunch(Long flowId, Long businessId, FlowStatusEnum flowStatus, JSONObject submitData) {
+        start(flowId, submitData);
+    }
+
+    @Override
+    public void reject(Long flowId, Long businessId, FlowStatusEnum flowStatus) {
+        //作废
+        purchaseBackService.update(q -> q
+                .eq(PurchaseBack::getId, businessId)
+                .set(PurchaseBack::getStatus, FlowStatusEnum1.REJECT.getKey())
+                .set(BasePo::getUpdateTime, new Date())
+                .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+        );
+    }
+
+    @Override
+    public void cancellation(Long flowId, Long businessId, FlowStatusEnum flowStatus) {
+        //作废
+        purchaseBackService.update(q -> q
+                .eq(PurchaseBack::getId, businessId)
+                .set(PurchaseBack::getStatus, FlowStatusEnum1.CANCELLATION.getKey())
+                .set(BasePo::getUpdateTime, new Date())
+                .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+        );
+    }
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/purchase/PurchaseBackDetailsMapper.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.mapper.purchase;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fjhx.sale.entity.purchase.po.PurchaseBackDetails;
+
+
+/**
+ * <p>
+ * sale_采购退货明细 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2024-01-30
+ */
+public interface PurchaseBackDetailsMapper extends BaseMapper<PurchaseBackDetails> {
+
+}

+ 26 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/purchase/PurchaseBackMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.sale.mapper.purchase;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.purchase.po.PurchaseBack;
+import com.fjhx.sale.entity.purchase.vo.PurchaseBackVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * sale_采购退货 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2024-01-30
+ */
+public interface PurchaseBackMapper extends BaseMapper<PurchaseBack> {
+
+    /**
+     * sale_采购退货分页
+     */
+    Page<PurchaseBackVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<PurchaseBack> wrapper);
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/service/purchase/PurchaseBackDetailsService.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.service.purchase;
+
+import com.fjhx.sale.entity.purchase.po.PurchaseBackDetails;
+import com.ruoyi.common.core.service.BaseService;
+
+
+/**
+ * <p>
+ * sale_采购退货明细 服务类
+ * </p>
+ *
+ * @author
+ * @since 2024-01-30
+ */
+public interface PurchaseBackDetailsService extends BaseService<PurchaseBackDetails> {
+
+}

+ 30 - 0
hx-sale/src/main/java/com/fjhx/sale/service/purchase/PurchaseBackService.java

@@ -0,0 +1,30 @@
+package com.fjhx.sale.service.purchase;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.purchase.dto.PurchaseBackSelectDto;
+import com.fjhx.sale.entity.purchase.po.PurchaseBack;
+import com.fjhx.sale.entity.purchase.vo.PurchaseBackVo;
+import com.ruoyi.common.core.service.BaseService;
+
+
+/**
+ * <p>
+ * sale_采购退货 服务类
+ * </p>
+ *
+ * @author
+ * @since 2024-01-30
+ */
+public interface PurchaseBackService extends BaseService<PurchaseBack> {
+
+    /**
+     * sale_采购退货分页
+     */
+    Page<PurchaseBackVo> getPage(PurchaseBackSelectDto dto);
+
+    /**
+     * sale_采购退货明细
+     */
+    PurchaseBackVo detail(Long id);
+
+}

+ 21 - 0
hx-sale/src/main/java/com/fjhx/sale/service/purchase/impl/PurchaseBackDetailsServiceImpl.java

@@ -0,0 +1,21 @@
+package com.fjhx.sale.service.purchase.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.sale.entity.purchase.po.PurchaseBackDetails;
+import com.fjhx.sale.mapper.purchase.PurchaseBackDetailsMapper;
+import com.fjhx.sale.service.purchase.PurchaseBackDetailsService;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * <p>
+ * sale_采购退货明细 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2024-01-30
+ */
+@Service
+public class PurchaseBackDetailsServiceImpl extends ServiceImpl<PurchaseBackDetailsMapper, PurchaseBackDetails> implements PurchaseBackDetailsService {
+
+}

+ 123 - 0
hx-sale/src/main/java/com/fjhx/sale/service/purchase/impl/PurchaseBackServiceImpl.java

@@ -0,0 +1,123 @@
+package com.fjhx.sale.service.purchase.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.purchase.entity.pay.po.PayDetail;
+import com.fjhx.purchase.service.pay.PayDetailService;
+import com.fjhx.sale.entity.purchase.dto.PurchaseBackSelectDto;
+import com.fjhx.sale.entity.purchase.po.EhsdPurchase;
+import com.fjhx.sale.entity.purchase.po.EhsdPurchaseProduct;
+import com.fjhx.sale.entity.purchase.po.PurchaseBack;
+import com.fjhx.sale.entity.purchase.po.PurchaseBackDetails;
+import com.fjhx.sale.entity.purchase.vo.PurchaseBackDetailsVo;
+import com.fjhx.sale.entity.purchase.vo.PurchaseBackVo;
+import com.fjhx.sale.mapper.purchase.PurchaseBackMapper;
+import com.fjhx.sale.service.purchase.EhsdPurchaseProductService;
+import com.fjhx.sale.service.purchase.EhsdPurchaseService;
+import com.fjhx.sale.service.purchase.PurchaseBackDetailsService;
+import com.fjhx.sale.service.purchase.PurchaseBackService;
+import com.fjhx.supply.entity.supplier.po.SupplierInfo;
+import com.fjhx.supply.service.supplier.SupplierInfoService;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.ruoyi.common.utils.wrapper.SqlField;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+
+/**
+ * <p>
+ * sale_采购退货 服务实现类
+ * </p>
+ *
+ * @since 2024-01-30
+ */
+@Service
+public class PurchaseBackServiceImpl extends ServiceImpl<PurchaseBackMapper, PurchaseBack> implements PurchaseBackService {
+
+    private final PurchaseBackDetailsService purchaseBackDetailsService;
+    private final ProductInfoService productInfoService;
+    private final EhsdPurchaseProductService purchaseProductService;
+    private final EhsdPurchaseService ehsdPurchaseService;
+    private final PayDetailService payDetailService;
+    private final SupplierInfoService supplierInfoService;
+
+    @Autowired
+    public PurchaseBackServiceImpl(PurchaseBackDetailsService purchaseBackDetailsService, ProductInfoService productInfoService, EhsdPurchaseProductService purchaseProductService, EhsdPurchaseService ehsdPurchaseService, PayDetailService payDetailService, SupplierInfoService supplierInfoService) {
+        this.purchaseBackDetailsService = purchaseBackDetailsService;
+        this.productInfoService = productInfoService;
+        this.purchaseProductService = purchaseProductService;
+        this.ehsdPurchaseService = ehsdPurchaseService;
+        this.payDetailService = payDetailService;
+        this.supplierInfoService = supplierInfoService;
+    }
+
+    @Override
+    public Page<PurchaseBackVo> getPage(PurchaseBackSelectDto dto) {
+        IWrapper<PurchaseBack> wrapper = getWrapper();
+
+        wrapper.keyword(dto.getKeyword(), new SqlField("pb.code"), new SqlField("p.code"));
+
+        wrapper.orderByDesc("pb", PurchaseBack::getId);
+        return this.baseMapper.getPage(dto.getPage(), wrapper);
+    }
+
+    @Override
+    public PurchaseBackVo detail(Long id) {
+        PurchaseBack PurchaseBack = this.getById(id);
+        PurchaseBackVo result = BeanUtil.toBean(PurchaseBack, PurchaseBackVo.class);
+
+        //赋值采购信息
+        EhsdPurchase purchase = ehsdPurchaseService.getById(result.getPurchaseId());
+        if (ObjectUtil.isNotEmpty(purchase)) {
+            result.setPurchaseAmount(purchase.getAmount());
+
+            //获取供应商
+            SupplierInfo supplierInfo = supplierInfoService.getById(purchase.getSellCorporationId());
+            if (ObjectUtil.isNotEmpty(supplierInfo)) {
+                result.setSupplierId(supplierInfo.getId());
+                result.setSupplierName(supplierInfo.getName());
+            }
+
+            List<PayDetail> payDetails = payDetailService.list(q -> q.eq(PayDetail::getPurchaseId, purchase.getId()));
+            if (ObjectUtil.isNotEmpty(payDetails)) {
+                BigDecimal payAmount = payDetails.stream().map(PayDetail::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
+                result.setPayAmount(payAmount);
+            }
+        }
+
+
+        List<PurchaseBackDetails> list = purchaseBackDetailsService.list(q -> q.eq(PurchaseBackDetails::getPurchaseBackId, id));
+        if (ObjectUtil.isEmpty(list)) {
+            return result;
+        }
+        List<PurchaseBackDetailsVo> purchaseBackDetailsVos = BeanUtil.copyToList(list, PurchaseBackDetailsVo.class);
+        //赋值产品信息
+        productInfoService.attributeAssign(purchaseBackDetailsVos, PurchaseBackDetailsVo::getProductId, (detail, product) -> {
+            detail.setProductCode(product.getCustomCode());
+            detail.setProductName(product.getName());
+            detail.setProductLength(product.getLength());
+            detail.setProductWidth(product.getWidth());
+            detail.setProductHeight(product.getHeight());
+        });
+
+        //赋值采购数量
+        List<Long> pdIds = purchaseBackDetailsVos.stream().map(PurchaseBackDetails::getPurchaseDetailsId).collect(Collectors.toList());
+        Map<Long, BigDecimal> ppMap = purchaseProductService.mapKV(EhsdPurchaseProduct::getId, EhsdPurchaseProduct::getQuantity, q -> q.in(EhsdPurchaseProduct::getId, pdIds));
+        for (PurchaseBackDetailsVo purchaseBackDetailsVo : purchaseBackDetailsVos) {
+            purchaseBackDetailsVo.setPurchaseQuantity(ppMap.get(purchaseBackDetailsVo.getPurchaseDetailsId()));
+        }
+
+        result.setPurchaseBackDetailsList(purchaseBackDetailsVos);
+
+        return result;
+    }
+
+}

+ 4 - 0
hx-sale/src/main/resources/mapper/purchase/PurchaseBackDetailsMapper.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.purchase.PurchaseBackDetailsMapper">
+</mapper>

+ 20 - 0
hx-sale/src/main/resources/mapper/purchase/PurchaseBackMapper.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.sale.mapper.purchase.PurchaseBackMapper">
+    <select id="getPage" resultType="com.fjhx.sale.entity.purchase.vo.PurchaseBackVo">
+        SELECT pb.id,
+               pb.`code`,
+               pb.purchase_id,
+               pb.remark,
+               pb.`status`,
+               pb.create_user,
+               pb.create_time,
+               pb.update_user,
+               pb.update_time,
+               p.`code` AS purchaseCode
+        FROM purchase_back pb
+                 LEFT JOIN ehsd_purchase p ON pb.purchase_id = p.id
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>