|
@@ -1,6 +1,7 @@
|
|
|
package com.sd.business.service.order.impl;
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
@@ -16,18 +17,15 @@ import com.sd.business.entity.department.po.Department;
|
|
|
import com.sd.business.entity.order.dto.OrderExchangeDto;
|
|
|
import com.sd.business.entity.order.dto.OrderExchangeSelectDto;
|
|
|
import com.sd.business.entity.order.enums.OrderClassifyEnum;
|
|
|
-import com.sd.business.entity.order.po.OrderExchange;
|
|
|
-import com.sd.business.entity.order.po.OrderExchangeDetail;
|
|
|
-import com.sd.business.entity.order.po.OrderInfo;
|
|
|
-import com.sd.business.entity.order.po.OrderSku;
|
|
|
+import com.sd.business.entity.order.enums.OrderStatusEnum;
|
|
|
+import com.sd.business.entity.order.po.*;
|
|
|
import com.sd.business.entity.order.vo.OrderExchangeDetailVo;
|
|
|
import com.sd.business.entity.order.vo.OrderExchangeVo;
|
|
|
+import com.sd.business.entity.statement.dto.StatementOfAccountDto;
|
|
|
import com.sd.business.mapper.order.OrderExchangeMapper;
|
|
|
-import com.sd.business.service.order.OrderExchangeDetailService;
|
|
|
-import com.sd.business.service.order.OrderExchangeService;
|
|
|
-import com.sd.business.service.order.OrderService;
|
|
|
-import com.sd.business.service.order.OrderSkuService;
|
|
|
+import com.sd.business.service.order.*;
|
|
|
import com.sd.business.service.sku.SkuSpecService;
|
|
|
+import com.sd.business.service.statement.StatementOfAccountService;
|
|
|
import com.sd.business.util.CodeEnum;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
@@ -60,6 +58,12 @@ public class OrderExchangeServiceImpl extends ServiceImpl<OrderExchangeMapper, O
|
|
|
@Autowired
|
|
|
private OrderService orderService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private OrderSkuBomService orderSkuBomService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private StatementOfAccountService statementOfAccountService;
|
|
|
+
|
|
|
@Override
|
|
|
public Page<OrderExchangeVo> getPage(OrderExchangeSelectDto dto) {
|
|
|
IWrapper<OrderExchange> wrapper = getWrapper();
|
|
@@ -201,10 +205,54 @@ public class OrderExchangeServiceImpl extends ServiceImpl<OrderExchangeMapper, O
|
|
|
orderExchangeDetailService.saveBatch(orderExchangeDetailList);
|
|
|
ObsFileUtil.saveFile(orderExchangeDto.getFileList(), orderExchangeDto.getId());
|
|
|
|
|
|
- // 订单分类修改为售后订单
|
|
|
- orderService.update(q -> q
|
|
|
- .set(OrderInfo::getClassify, OrderClassifyEnum.AFTER_SALE_ORDER.getKey())
|
|
|
- .eq(BaseIdPo::getId, orderExchangeDto.getOrderInfoId()));
|
|
|
+ Map<Long, BigDecimal> exchangeDetailMap = orderExchangeDetailList.stream()
|
|
|
+ .filter(item -> item.getQuantity().compareTo(BigDecimal.ZERO) > 0)
|
|
|
+ .collect(Collectors.toMap(OrderExchangeDetail::getOrderSkuId, OrderExchangeDetail::getQuantity));
|
|
|
+ if (ObjectUtil.isEmpty(exchangeDetailMap)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 新增售后订单,分类修改为售后订单
|
|
|
+ OrderInfo orderInfo = orderService.getById(orderExchangeDto.getOrderInfoId());
|
|
|
+ orderInfo.setId(IdWorker.getId());
|
|
|
+ orderInfo.setWlnUid(null);
|
|
|
+ orderInfo.setClassify(OrderClassifyEnum.AFTER_SALE_ORDER.getKey());
|
|
|
+ orderInfo.setStatus(OrderStatusEnum.EXCHANGE.getKey());
|
|
|
+ orderInfo.setTotalAmount(BigDecimal.ZERO);
|
|
|
+ orderInfo.setProductTotalAmount(BigDecimal.ZERO);
|
|
|
+ orderInfo.setCustomProcessingFee(BigDecimal.ZERO);
|
|
|
+ orderInfo.setLssueFee(BigDecimal.ZERO);
|
|
|
+ orderInfo.setDeliveryMaterialsFee(BigDecimal.ZERO);
|
|
|
+ orderInfo.setPackingLabor(BigDecimal.ZERO);
|
|
|
+ orderInfo.setManagementFee(BigDecimal.ZERO);
|
|
|
+ orderInfo.setPackagingMaterialCost(BigDecimal.ZERO);
|
|
|
+ List<OrderSku> orderSkuList = orderSkuService.list(q -> q.in(BaseIdPo::getId, exchangeDetailMap.keySet()));
|
|
|
+ Map<Long, Long> orderSkuIdMap = new HashMap<>();
|
|
|
+ for (OrderSku orderSku : orderSkuList) {
|
|
|
+ BigDecimal quantity = exchangeDetailMap.get(orderSku.getId());
|
|
|
+ long orderSkuId = IdWorker.getId();
|
|
|
+ orderSkuIdMap.put(orderSku.getId(), orderSkuId);
|
|
|
+ orderSku.setQuantity(quantity);
|
|
|
+ orderSku.setId(orderSkuId);
|
|
|
+ orderSku.setOrderId(orderInfo.getId());
|
|
|
+ this.addOrderInfoPrice(orderInfo, orderSku);
|
|
|
+ }
|
|
|
+ List<OrderSkuBom> orderSkuBomList = orderSkuBomService.list(q -> q.in(OrderSkuBom::getOrderSkuId, exchangeDetailMap.keySet()));
|
|
|
+ // 替换订单id和订单sku id
|
|
|
+ for (OrderSkuBom orderSkuBom : orderSkuBomList) {
|
|
|
+ orderSkuBom.setId(null);
|
|
|
+ orderSkuBom.setOrderId(orderInfo.getId());
|
|
|
+ orderSkuBom.setOrderSkuId(orderSkuIdMap.get(orderSkuBom.getOrderSkuId()));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 新增订单信息
|
|
|
+ orderService.save(orderInfo);
|
|
|
+ orderSkuService.saveBatch(orderSkuList);
|
|
|
+ orderSkuBomService.saveBatch(orderSkuBomList);
|
|
|
+ // 生成对账单
|
|
|
+ StatementOfAccountDto statement = new StatementOfAccountDto();
|
|
|
+ statement.setDepartmentId(orderInfo.getDepartmentId());
|
|
|
+ statement.setOrderIdList(Collections.singletonList(orderInfo.getId()));
|
|
|
+ statementOfAccountService.add(statement);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -212,4 +260,34 @@ public class OrderExchangeServiceImpl extends ServiceImpl<OrderExchangeMapper, O
|
|
|
this.removeById(id);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 添加订单价格
|
|
|
+ */
|
|
|
+ private void addOrderInfoPrice(OrderInfo orderInfo, OrderSku orderSku) {
|
|
|
+ BigDecimal quantity = orderSku.getQuantity();
|
|
|
+
|
|
|
+ BigDecimal productTotalAmount = quantity.multiply(orderSku.getUnitPrice());
|
|
|
+ BigDecimal customProcessingFee = quantity.multiply(orderSku.getCustomProcessingFee());
|
|
|
+ BigDecimal lssueFee = quantity.multiply(orderSku.getLssueFee());
|
|
|
+ BigDecimal deliveryMaterialsFee = quantity.multiply(orderSku.getDeliveryMaterialsFee());
|
|
|
+ BigDecimal packingLabor = quantity.multiply(orderSku.getPackingLabor());
|
|
|
+ BigDecimal packagingMaterialCost = quantity.multiply(orderSku.getPackagingMaterialCost());
|
|
|
+ BigDecimal managementFee = quantity.multiply(orderSku.getManagementFee());
|
|
|
+ BigDecimal totalAmount = productTotalAmount
|
|
|
+ .add(customProcessingFee)
|
|
|
+ .add(lssueFee)
|
|
|
+ .add(deliveryMaterialsFee)
|
|
|
+ .add(packingLabor)
|
|
|
+ .add(packagingMaterialCost)
|
|
|
+ .add(managementFee);
|
|
|
+
|
|
|
+ orderInfo.setProductTotalAmount(orderInfo.getProductTotalAmount().add(productTotalAmount));
|
|
|
+ orderInfo.setCustomProcessingFee(orderInfo.getCustomProcessingFee().add(customProcessingFee));
|
|
|
+ orderInfo.setLssueFee(orderInfo.getLssueFee().add(lssueFee));
|
|
|
+ orderInfo.setDeliveryMaterialsFee(orderInfo.getDeliveryMaterialsFee().add(deliveryMaterialsFee));
|
|
|
+ orderInfo.setPackingLabor(orderInfo.getPackingLabor().add(packingLabor));
|
|
|
+ orderInfo.setManagementFee(orderInfo.getManagementFee().add(managementFee));
|
|
|
+ orderInfo.setPackagingMaterialCost(orderInfo.getPackagingMaterialCost().add(packagingMaterialCost));
|
|
|
+ orderInfo.setTotalAmount(orderInfo.getTotalAmount().add(totalAmount));
|
|
|
+ }
|
|
|
}
|