|
@@ -0,0 +1,184 @@
|
|
|
+package com.fjhx.sale.service.after.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.fjhx.common.utils.Assert;
|
|
|
+import com.fjhx.sale.entity.after.dto.AfterSalesDto;
|
|
|
+import com.fjhx.sale.entity.after.po.AfterSales;
|
|
|
+import com.fjhx.sale.entity.after.po.AfterSalesDetail;
|
|
|
+import com.fjhx.sale.entity.contract.po.ContractProduct;
|
|
|
+import com.fjhx.sale.mapper.after.AfterSalesMapper;
|
|
|
+import com.fjhx.sale.service.after.AfterSalesDetailService;
|
|
|
+import com.fjhx.sale.service.after.AfterSalesService;
|
|
|
+import com.fjhx.sale.service.contract.ContractProductService;
|
|
|
+import com.fjhx.wms.entity.stock.emums.StockWaitType;
|
|
|
+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 org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+
|
|
|
+/**
|
|
|
+ * <p>
|
|
|
+ * 售后管理 服务实现类
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @author
|
|
|
+ * @since 2023-07-20
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class AfterSalesServiceImpl extends ServiceImpl<AfterSalesMapper, AfterSales> implements AfterSalesService {
|
|
|
+ @Autowired
|
|
|
+ private AfterSalesDetailService afterSalesDetailService;
|
|
|
+ @Autowired
|
|
|
+ private StockWaitService stockWaitService;
|
|
|
+ @Autowired
|
|
|
+ private StockWaitDetailsService stockWaitDetailsService;
|
|
|
+ @Autowired
|
|
|
+ private ContractProductService contractProductService;
|
|
|
+
|
|
|
+ @DSTransactional
|
|
|
+ @Override
|
|
|
+ public void add(AfterSalesDto afterSalesDto) {
|
|
|
+ this.save(afterSalesDto);
|
|
|
+ List<AfterSalesDetail> afterSalesDetailList = afterSalesDto.getAfterSalesDetailList();
|
|
|
+ afterSalesDetailList.forEach(item -> item.setAfterSalesId(afterSalesDto.getId()));
|
|
|
+ //赋值dan
|
|
|
+ List<Long> contractProductIds = afterSalesDetailList.stream().distinct().map(AfterSalesDetail::getContractProductId).collect(Collectors.toList());
|
|
|
+ Map<Long, ContractProduct> longContractProductMap = new HashMap<>();
|
|
|
+ if (ObjectUtil.isNotEmpty(contractProductIds)) {
|
|
|
+ longContractProductMap = contractProductService.mapKEntity(ContractProduct::getId, q -> q.in(ContractProduct::getId, contractProductIds));
|
|
|
+ }
|
|
|
+ for (AfterSalesDetail afterSalesDetail : afterSalesDetailList) {
|
|
|
+ //赋值单价信息
|
|
|
+ ContractProduct oldContractProduct = longContractProductMap.get(afterSalesDetail.getContractProductId());
|
|
|
+ afterSalesDetail.setPrice(BigDecimal.ZERO);
|
|
|
+ if (ObjectUtil.isNotEmpty(oldContractProduct)) {
|
|
|
+ afterSalesDetail.setPrice(oldContractProduct.getPrice());
|
|
|
+ }
|
|
|
+ afterSalesDetail.setAmount(afterSalesDetail.getQuantity().multiply(afterSalesDetail.getPrice()));
|
|
|
+ }
|
|
|
+ afterSalesDetailService.saveBatch(afterSalesDetailList);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void edit(AfterSalesDto afterSalesDto) {
|
|
|
+ this.updateById(afterSalesDto);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 退货
|
|
|
+ */
|
|
|
+ @DSTransactional
|
|
|
+ @Override
|
|
|
+ public void salesReturn(AfterSalesDto afterSalesDto) {
|
|
|
+ Assert.notEmpty(afterSalesDto.getId(), "售后id不能为空");
|
|
|
+ AfterSales afterSales = this.getById(afterSalesDto.getId());
|
|
|
+ Assert.notEmpty(afterSales, "查询不到售后信息");
|
|
|
+
|
|
|
+ //生成售后退货待入库信息
|
|
|
+ StockWait stockWait = new StockWait();
|
|
|
+ stockWait.setType(1);//入库
|
|
|
+ stockWait.setStatus(0);//待入库
|
|
|
+ stockWait.setBusinessType(StockWaitType.SALES_RETURN_IN.getDetailType());
|
|
|
+ stockWait.setBusinessId(afterSales.getId());
|
|
|
+ stockWaitService.save(stockWait);
|
|
|
+
|
|
|
+ //生成售后退货待入库明细
|
|
|
+ List<AfterSalesDetail> afterSalesDetailList = afterSalesDetailService.list(q -> q.eq(AfterSalesDetail::getAfterSalesId, afterSales.getId()));
|
|
|
+ List<StockWaitDetails> stockWaitDetailsList = new ArrayList<>();
|
|
|
+ for (AfterSalesDetail afterSalesDetail : afterSalesDetailList) {
|
|
|
+ StockWaitDetails stockWaitDetails = new StockWaitDetails();
|
|
|
+ stockWaitDetails.setStockWaitId(stockWait.getId());
|
|
|
+ stockWaitDetails.setProductId(afterSalesDetail.getProductId());
|
|
|
+ stockWaitDetails.setQuantity(afterSalesDetail.getQuantity());
|
|
|
+ stockWaitDetailsList.add(stockWaitDetails);
|
|
|
+ }
|
|
|
+ stockWaitDetailsService.saveBatch(stockWaitDetailsList);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 销售换货
|
|
|
+ */
|
|
|
+ @DSTransactional
|
|
|
+ @Override
|
|
|
+ public void salesReplace(AfterSalesDto afterSalesDto) {
|
|
|
+ Assert.notEmpty(afterSalesDto.getId(), "售后id不能为空");
|
|
|
+ AfterSales afterSales = this.getById(afterSalesDto.getId());
|
|
|
+ Assert.notEmpty(afterSales, "查询不到售后信息");
|
|
|
+
|
|
|
+ //生成售后换货待入库信息
|
|
|
+ StockWait stockWait = new StockWait();
|
|
|
+ stockWait.setType(1);//入库
|
|
|
+ stockWait.setStatus(0);//待入库
|
|
|
+ stockWait.setBusinessType(StockWaitType.SALES_REPLACE_IN.getDetailType());
|
|
|
+ stockWait.setBusinessId(afterSales.getId());
|
|
|
+ stockWaitService.save(stockWait);
|
|
|
+ //生成售后换货待出库信息
|
|
|
+ StockWait stockWait1 = new StockWait();
|
|
|
+ stockWait1.setType(2);//出库
|
|
|
+ stockWait1.setStatus(0);//待出库
|
|
|
+ stockWait1.setBusinessType(StockWaitType.SALES_REPLACE_OUT.getDetailType());
|
|
|
+ stockWait1.setBusinessId(afterSales.getId());
|
|
|
+ stockWaitService.save(stockWait1);
|
|
|
+
|
|
|
+ //生成售后换货待出入库明细
|
|
|
+ List<AfterSalesDetail> afterSalesDetailList = afterSalesDetailService.list(q -> q.eq(AfterSalesDetail::getAfterSalesId, afterSales.getId()));
|
|
|
+ List<StockWaitDetails> stockWaitDetailsList = new ArrayList<>();
|
|
|
+ List<StockWaitDetails> stockWaitDetailsList1 = new ArrayList<>();
|
|
|
+ for (AfterSalesDetail afterSalesDetail : afterSalesDetailList) {
|
|
|
+ //生成入库明细
|
|
|
+ StockWaitDetails stockWaitDetails = new StockWaitDetails();
|
|
|
+ stockWaitDetails.setStockWaitId(stockWait.getId());
|
|
|
+ stockWaitDetails.setProductId(afterSalesDetail.getProductId());
|
|
|
+ stockWaitDetails.setQuantity(afterSalesDetail.getQuantity());
|
|
|
+ stockWaitDetailsList.add(stockWaitDetails);
|
|
|
+ //生成出库明细
|
|
|
+ StockWaitDetails stockWaitDetails1 = new StockWaitDetails();
|
|
|
+ stockWaitDetails.setStockWaitId(stockWait1.getId());
|
|
|
+ stockWaitDetails.setProductId(afterSalesDetail.getProductId());
|
|
|
+ stockWaitDetails.setQuantity(afterSalesDetail.getQuantity());
|
|
|
+ stockWaitDetailsList1.add(stockWaitDetails1);
|
|
|
+ }
|
|
|
+ stockWaitDetailsService.saveBatch(stockWaitDetailsList);
|
|
|
+ stockWaitDetailsService.saveBatch(stockWaitDetailsList1);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发起采购
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public void initPurchase(AfterSalesDto afterSalesDto) {
|
|
|
+ Assert.notEmpty(afterSalesDto.getId(), "售后id不能为空");
|
|
|
+ AfterSales afterSales = this.getById(afterSalesDto.getId());
|
|
|
+ Assert.notEmpty(afterSales, "查询不到售后信息");
|
|
|
+ List<AfterSalesDetail> afterSalesDetailList = afterSalesDetailService.list(q -> q.eq(AfterSalesDetail::getAfterSalesId, afterSales.getId()));
|
|
|
+ //创建交接单
|
|
|
+ List<ContractProduct> newContractProductList = new ArrayList<>();
|
|
|
+ for (AfterSalesDetail afterSalesDetail : afterSalesDetailList) {
|
|
|
+ ContractProduct contractProduct = new ContractProduct();
|
|
|
+ contractProduct.setProductId(afterSalesDetail.getProductId());
|
|
|
+ contractProduct.setQuantity(afterSalesDetail.getQuantity());
|
|
|
+ contractProduct.setExpendQuantity(afterSalesDetail.getQuantity());
|
|
|
+ contractProduct.setContractId(afterSales.getContractId());
|
|
|
+ contractProduct.setPrice(afterSalesDetail.getPrice());
|
|
|
+ contractProduct.setAmount(afterSalesDetail.getAmount());
|
|
|
+ contractProduct.setRemark(afterSalesDetail.getRemark());
|
|
|
+ newContractProductList.add(contractProduct);
|
|
|
+ }
|
|
|
+ contractProductService.saveBatch(newContractProductList);
|
|
|
+ }
|
|
|
+
|
|
|
+}
|