|
@@ -12,6 +12,7 @@ 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.ruoyi.framework.mybatis.holder.LogicHolder;
|
|
|
import com.sd.business.entity.bom.po.BomSpec;
|
|
|
import com.sd.business.entity.order.dto.IssueBillSelectDto;
|
|
|
import com.sd.business.entity.order.dto.OrderEncasementDto;
|
|
@@ -36,10 +37,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import java.math.BigDecimal;
|
|
|
-import java.util.Collections;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -77,7 +75,6 @@ public class IssueBillServiceImpl implements IssueBillService {
|
|
|
|
|
|
wrapper.like("oi", OrderInfo::getCode, dto.getCode());
|
|
|
wrapper.eq("oi", OrderInfo::getDepartmentId, dto.getDepartmentId());
|
|
|
- wrapper.like("oi", OrderInfo::getExpressDeliveryCode, dto.getExpressDeliveryCode());
|
|
|
|
|
|
wrapper.ge("ab", OrderInfo::getDeliveryTime, dto.getBeginTime());
|
|
|
wrapper.le("ab", OrderInfo::getDeliveryTime, dto.getEndTime());
|
|
@@ -110,15 +107,16 @@ public class IssueBillServiceImpl implements IssueBillService {
|
|
|
QueryWrapper<OrderEncasement> orderEncasementWrapper = new QueryWrapper<>();
|
|
|
orderEncasementWrapper.select(
|
|
|
"order_id as orderId",
|
|
|
- "ifnull(sum(total),0) total",
|
|
|
- "ifnull(sum(net_weight*total),0) totalNetWeight",
|
|
|
- "ifnull(sum(length*width*height*total/1000000),0) totalVolume"
|
|
|
+ "count(0) total",
|
|
|
+ "ifnull(sum(net_weight),0) totalNetWeight",
|
|
|
+ "ifnull(sum(length*width*height/1000000),0) totalVolume"
|
|
|
);
|
|
|
orderEncasementWrapper.in("order_id", orderIdList);
|
|
|
orderEncasementWrapper.groupBy("order_id");
|
|
|
|
|
|
List<Map<String, Object>> mapList = orderEncasementService.listMaps(orderEncasementWrapper);
|
|
|
- Map<Long, Map<String, Object>> orderEncasementMap = mapList.stream().collect(Collectors.toMap(item -> (Long) item.get("orderId"), Function.identity()));
|
|
|
+ Map<Long, Map<String, Object>> orderEncasementMap = mapList.stream()
|
|
|
+ .collect(Collectors.toMap(item -> (Long) item.get("orderId"), Function.identity()));
|
|
|
|
|
|
for (IssueBillVo record : records) {
|
|
|
Map<String, Object> itemMap = orderEncasementMap.get(record.getId());
|
|
@@ -161,10 +159,10 @@ public class IssueBillServiceImpl implements IssueBillService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void editExpressDeliveryCode(OrderInfo orderInfo) {
|
|
|
- orderService.update(q -> q
|
|
|
- .eq(BaseIdPo::getId, orderInfo.getId())
|
|
|
- .set(OrderInfo::getExpressDeliveryCode, orderInfo.getExpressDeliveryCode())
|
|
|
+ public void editExpressDeliveryCode(OrderEncasement orderEncasement) {
|
|
|
+ orderEncasementService.update(q -> q
|
|
|
+ .eq(BaseIdPo::getId, orderEncasement.getId())
|
|
|
+ .set(OrderEncasement::getTrackingNumber, orderEncasement.getTrackingNumber())
|
|
|
.set(BasePo::getUpdateTime, new Date())
|
|
|
.set(BasePo::getUpdateUser, SecurityUtils.getUserId())
|
|
|
);
|
|
@@ -219,10 +217,37 @@ public class IssueBillServiceImpl implements IssueBillService {
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@Override
|
|
|
- public AssemblyDetailVo copyAllowance(OrderEncasement dto) {
|
|
|
+ public AssemblyDetailVo copyAllowance(OrderEncasementDto dto) {
|
|
|
+
|
|
|
OrderEncasement orderEncasement = orderEncasementService.getById(dto.getId());
|
|
|
- orderEncasement.setTotal(orderEncasement.getTotal() + dto.getTotal());
|
|
|
- orderEncasementService.updateById(dto);
|
|
|
+ List<OrderEncasementDetail> list = orderEncasementDetailService.list(q -> q.eq(OrderEncasementDetail::getOrderEncasementId, dto.getId()));
|
|
|
+
|
|
|
+ Integer maxNumber = getMaxNumber(orderEncasement.getOrderId());
|
|
|
+
|
|
|
+ List<OrderEncasement> orderEncasementList = new ArrayList<>();
|
|
|
+ List<OrderEncasementDetail> orderEncasementDetailList = new ArrayList<>();
|
|
|
+
|
|
|
+ for (int i = 0; i < dto.getTotal(); i++) {
|
|
|
+ maxNumber++;
|
|
|
+
|
|
|
+ OrderEncasement tempOrderEncasement = BeanUtil.copyProperties(orderEncasement, OrderEncasement.class);
|
|
|
+ tempOrderEncasement.setId(IdWorker.getId());
|
|
|
+ tempOrderEncasement.setNumber(maxNumber);
|
|
|
+ tempOrderEncasement.setTrackingNumber(null);
|
|
|
+
|
|
|
+ List<OrderEncasementDetail> tempList = BeanUtil.copyToList(list, OrderEncasementDetail.class);
|
|
|
+ for (OrderEncasementDetail orderEncasementDetail : tempList) {
|
|
|
+ orderEncasementDetail.setId(IdWorker.getId());
|
|
|
+ orderEncasementDetail.setOrderEncasementId(tempOrderEncasement.getId());
|
|
|
+ }
|
|
|
+
|
|
|
+ orderEncasementList.add(tempOrderEncasement);
|
|
|
+ orderEncasementDetailList.addAll(tempList);
|
|
|
+ }
|
|
|
+
|
|
|
+ orderEncasementService.saveBatch(orderEncasementList);
|
|
|
+ orderEncasementDetailService.saveBatch(orderEncasementDetailList);
|
|
|
+
|
|
|
return verifiedQuantityAndGetDetail(orderEncasement.getOrderId());
|
|
|
}
|
|
|
|
|
@@ -231,17 +256,21 @@ public class IssueBillServiceImpl implements IssueBillService {
|
|
|
public AssemblyDetailVo addAllowance(OrderEncasementDto dto) {
|
|
|
dto.setId(IdWorker.getId());
|
|
|
dto.setNetWeight(BigDecimal.ZERO);
|
|
|
+ dto.setNumber(getMaxNumber(dto.getOrderId()) + 1);
|
|
|
|
|
|
List<OrderEncasementDetail> orderEncasementDetailList = dto.getOrderEncasementDetailList();
|
|
|
+
|
|
|
+ // 查询bom规格净重
|
|
|
List<Long> bomSpecIdList = orderEncasementDetailList.stream().map(OrderEncasementDetail::getBomSpecId).collect(Collectors.toList());
|
|
|
Map<Long, BomSpec> bomSpecMap = bomSpecService.mapKEntity(BaseIdPo::getId, q -> q.in(BaseIdPo::getId, bomSpecIdList));
|
|
|
- orderEncasementDetailList.forEach(item -> {
|
|
|
- BomSpec bomSpec = bomSpecMap.get(item.getBomSpecId());
|
|
|
- BigDecimal netWeight = ObjectUtil.defaultIfNull(bomSpec.getNetWeight(), BigDecimal.ZERO);
|
|
|
- dto.setNetWeight(dto.getNetWeight().add(netWeight));
|
|
|
|
|
|
- item.setOrderEncasementId(dto.getId());
|
|
|
- });
|
|
|
+ // 赋值包裹id、包裹净重
|
|
|
+ for (OrderEncasementDetail orderEncasementDetail : orderEncasementDetailList) {
|
|
|
+ BomSpec bomSpec = bomSpecMap.get(orderEncasementDetail.getBomSpecId());
|
|
|
+ BigDecimal netWeight = ObjectUtil.defaultIfNull(bomSpec.getNetWeight(), BigDecimal.ZERO);
|
|
|
+ dto.setNetWeight(dto.getNetWeight().add(netWeight.multiply(orderEncasementDetail.getQuantity())));
|
|
|
+ orderEncasementDetail.setOrderEncasementId(dto.getId());
|
|
|
+ }
|
|
|
|
|
|
orderEncasementService.save(dto);
|
|
|
orderEncasementDetailService.saveBatch(orderEncasementDetailList);
|
|
@@ -319,14 +348,25 @@ public class IssueBillServiceImpl implements IssueBillService {
|
|
|
Map<Long, List<OrderEncasementDetailVo>> collect = orderEncasementDetailList.stream()
|
|
|
.collect(Collectors.groupingBy(OrderEncasementDetail::getOrderSkuId));
|
|
|
for (AssemblyDetailVo.SkuInfo skuInfo : skuInfoList) {
|
|
|
- collect.getOrDefault(skuInfo.getOrderSkuId(), Collections.emptyList()).forEach(item -> {
|
|
|
- OrderEncasementVo orderEncasementVo = orderEncasementVoMap.get(item.getOrderEncasementId());
|
|
|
- BigDecimal quantity = item.getQuantity().multiply(new BigDecimal(orderEncasementVo.getTotal()));
|
|
|
- skuInfo.setSurplusQuantity(skuInfo.getSurplusQuantity().subtract(quantity));
|
|
|
- });
|
|
|
+ collect.getOrDefault(skuInfo.getOrderSkuId(), Collections.emptyList()).forEach(item ->
|
|
|
+ skuInfo.setSurplusQuantity(skuInfo.getSurplusQuantity().subtract(item.getQuantity())));
|
|
|
}
|
|
|
|
|
|
return orderEncasementList;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取包裹最大编号
|
|
|
+ */
|
|
|
+ private Integer getMaxNumber(Long orderId) {
|
|
|
+ LogicHolder.setLogicHolder(true);
|
|
|
+ OrderEncasement orderEncasement = orderEncasementService.getOne(q -> q
|
|
|
+ .eq(OrderEncasement::getOrderId, orderId)
|
|
|
+ .orderByDesc(OrderEncasement::getNumber)
|
|
|
+ );
|
|
|
+ LogicHolder.clear();
|
|
|
+
|
|
|
+ return orderEncasement == null ? 0 : orderEncasement.getNumber();
|
|
|
+ }
|
|
|
+
|
|
|
}
|