|
@@ -1,13 +1,17 @@
|
|
|
package com.sd.business.service.order.impl;
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.fjhx.file.utils.ObsFileUtil;
|
|
|
import com.ruoyi.common.core.domain.BaseIdPo;
|
|
|
import com.ruoyi.common.core.domain.BasePo;
|
|
|
+import com.ruoyi.common.exception.ServiceException;
|
|
|
import com.ruoyi.common.utils.SecurityUtils;
|
|
|
import com.ruoyi.common.utils.wrapper.IWrapper;
|
|
|
+import com.sd.business.entity.bom.po.BomSpec;
|
|
|
import com.sd.business.entity.order.dto.IssueBillSelectDto;
|
|
|
+import com.sd.business.entity.order.dto.OrderEncasementDto;
|
|
|
import com.sd.business.entity.order.dto.OrderInfoDto;
|
|
|
import com.sd.business.entity.order.enums.OrderStatusEnum;
|
|
|
import com.sd.business.entity.order.po.OrderEncasement;
|
|
@@ -20,10 +24,12 @@ import com.sd.business.entity.order.vo.OrderEncasementDetailVo;
|
|
|
import com.sd.business.entity.order.vo.OrderEncasementVo;
|
|
|
import com.sd.business.entity.production.dto.MergeOrderDto;
|
|
|
import com.sd.business.mapper.order.IssueBillMapper;
|
|
|
+import com.sd.business.service.bom.BomSpecService;
|
|
|
import com.sd.business.service.order.*;
|
|
|
import com.sd.business.service.sku.SkuSpecService;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import java.math.BigDecimal;
|
|
@@ -52,6 +58,9 @@ public class IssueBillServiceImpl implements IssueBillService {
|
|
|
@Autowired
|
|
|
private SkuSpecService skuSpecService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private BomSpecService bomSpecService;
|
|
|
+
|
|
|
@Override
|
|
|
public Page<IssueBillVo> getPage(IssueBillSelectDto dto) {
|
|
|
IWrapper<Object> wrapper = IWrapper.getWrapper();
|
|
@@ -134,18 +143,20 @@ public class IssueBillServiceImpl implements IssueBillService {
|
|
|
ObsFileUtil.editFile(dto.getPackagePictureList(), dto.getId(), 2);
|
|
|
}
|
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
@Override
|
|
|
public void merge(MergeOrderDto dto) {
|
|
|
orderService.update(q -> q.eq(OrderInfo::getId, dto.getId()).set(OrderInfo::getMasterOrderId, 0));
|
|
|
orderService.update(q -> q.in(OrderInfo::getId, dto.getMergeIdList()).set(OrderInfo::getMasterOrderId, dto.getId()));
|
|
|
- orderEncasementService.delete(dto.getId());
|
|
|
+ orderEncasementService.deleteByOrderId(dto.getId());
|
|
|
}
|
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
@Override
|
|
|
public void unmerge(Long id) {
|
|
|
orderService.update(q -> q.eq(OrderInfo::getId, id).set(OrderInfo::getMasterOrderId, null));
|
|
|
orderService.update(q -> q.eq(OrderInfo::getMasterOrderId, id).set(OrderInfo::getMasterOrderId, null));
|
|
|
- orderEncasementService.delete(id);
|
|
|
+ orderEncasementService.deleteByOrderId(id);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -165,6 +176,7 @@ public class IssueBillServiceImpl implements IssueBillService {
|
|
|
AssemblyDetailVo.SkuInfo skuInfo = new AssemblyDetailVo.SkuInfo();
|
|
|
skuInfo.setOrderSkuId(item.getId());
|
|
|
skuInfo.setSkuSpecId(item.getSkuSpecId());
|
|
|
+ skuInfo.setBomSpecId(item.getBomSpecId());
|
|
|
skuInfo.setTotalQuantity(item.getQuantity());
|
|
|
skuInfo.setSurplusQuantity(item.getQuantity());
|
|
|
return skuInfo;
|
|
@@ -219,4 +231,52 @@ public class IssueBillServiceImpl implements IssueBillService {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @Override
|
|
|
+ public void deleteAllowance(Long id) {
|
|
|
+ orderEncasementService.delete(id);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @Override
|
|
|
+ public AssemblyDetailVo copyAllowance(OrderEncasement dto) {
|
|
|
+ OrderEncasement orderEncasement = orderEncasementService.getById(dto.getId());
|
|
|
+ orderEncasement.setTotal(orderEncasement.getTotal() + dto.getTotal());
|
|
|
+ orderEncasementService.updateById(dto);
|
|
|
+ return verifiedQuantity(orderEncasement.getOrderId());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @Override
|
|
|
+ public AssemblyDetailVo addAllowance(OrderEncasementDto dto) {
|
|
|
+ dto.setNetWeight(BigDecimal.ZERO);
|
|
|
+ orderEncasementService.save(dto);
|
|
|
+ List<OrderEncasementDetail> orderEncasementDetailList = dto.getOrderEncasementDetailList();
|
|
|
+ List<Long> bomSpecIdList = orderEncasementDetailList.stream().map(OrderEncasementDetail::getBomSpecId).collect(Collectors.toList());
|
|
|
+ List<BomSpec> bomSpecList = bomSpecService.listByIds(bomSpecIdList);
|
|
|
+ Map<Long, BomSpec> bomSpecMap = bomSpecList.stream().collect(Collectors.toMap(BaseIdPo::getId, Function.identity()));
|
|
|
+
|
|
|
+ orderEncasementDetailList.forEach(item -> {
|
|
|
+ item.setOrderEncasementId(dto.getId());
|
|
|
+
|
|
|
+ BigDecimal netWeight = ObjectUtil.defaultIfNull(bomSpecMap.get(item.getBomSpecId()).getNetWeight(), BigDecimal.ZERO);
|
|
|
+ dto.setNetWeight(dto.getNetWeight().add(netWeight));
|
|
|
+ });
|
|
|
+ return verifiedQuantity(dto.getOrderId());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 验证数量
|
|
|
+ */
|
|
|
+ private AssemblyDetailVo verifiedQuantity(Long orderId) {
|
|
|
+ AssemblyDetailVo assemblyDetailVo = assemblyDetail(orderId);
|
|
|
+ List<AssemblyDetailVo.SkuInfo> skuInfoList = assemblyDetailVo.getSkuInfoList();
|
|
|
+ for (AssemblyDetailVo.SkuInfo skuInfo : skuInfoList) {
|
|
|
+ if (skuInfo.getSurplusQuantity().compareTo(BigDecimal.ZERO) < 0) {
|
|
|
+ throw new ServiceException("数量不足:装箱数量大于被装箱数量");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return assemblyDetailVo;
|
|
|
+ }
|
|
|
+
|
|
|
}
|