|
@@ -359,12 +359,15 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
|
|
|
throw new ServiceException("订单已生产,无法删除");
|
|
|
}
|
|
|
|
|
|
+ List<Long> orderSkuIdList = orderSkuService.listObject(BaseIdPo::getId, q -> q.eq(OrderSku::getOrderId, id));
|
|
|
+
|
|
|
removeById(id);
|
|
|
orderSkuService.remove(q -> q.eq(OrderSku::getOrderId, id));
|
|
|
orderSkuBomService.remove(q -> q.eq(OrderSkuBom::getOrderId, id));
|
|
|
orderPackageBomService.remove(q -> q.eq(OrderPackageBom::getOrderId, id));
|
|
|
orderSkuProductionCostService.remove(q -> q.eq(OrderSkuProductionCost::getOrderId, id));
|
|
|
ObsFileUtil.removeFile(id);
|
|
|
+ ObsFileUtil.removeFile(orderSkuIdList);
|
|
|
}
|
|
|
|
|
|
@DSTransactional
|
|
@@ -505,34 +508,24 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
|
|
|
@Override
|
|
|
public void saveOrderDeliveryCode(OrderInfoDto dto) {
|
|
|
OrderInfo orderInfo = getById(dto.getId());
|
|
|
- if (orderInfo == null) {
|
|
|
- throw new ServiceException("未找到订单");
|
|
|
- }
|
|
|
- if (StrUtil.isBlank(dto.getDeliveryCode())) {
|
|
|
- throw new ServiceException("送货单号不能为空");
|
|
|
- }
|
|
|
- OrderInfo one = getOne(q -> q.eq(OrderInfo::getDeliveryCode, dto.getDeliveryCode()));
|
|
|
- if (one != null) {
|
|
|
- throw new ServiceException("送货单号重复,请重新生成!");
|
|
|
- }
|
|
|
+ Assert.notNull(orderInfo, "未找到订单");
|
|
|
+ Assert.notBlank(dto.getDeliveryCode(), "送货单号不能为空");
|
|
|
+ Long count = count(q -> q.eq(OrderInfo::getDeliveryCode, dto.getDeliveryCode()).last("limit 1"));
|
|
|
+ Assert.eqZero(count, "送货单号重复,请重新生成!");
|
|
|
update(q -> q.set(OrderInfo::getDeliveryCode, dto.getDeliveryCode()).eq(BaseIdPo::getId, dto.getId()));
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void suspendOrder(Long id) {
|
|
|
OrderInfo orderInfo = getById(id);
|
|
|
- if (orderInfo == null) {
|
|
|
- throw new ServiceException("未找到订单");
|
|
|
- }
|
|
|
+ Assert.notNull(orderInfo, "未找到订单");
|
|
|
update(q -> q.set(OrderInfo::getStatus, OrderStatusEnum.SUSPEND.getKey()).eq(BaseIdPo::getId, id));
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void cancelSuspendOrder(Long id) {
|
|
|
OrderInfo orderInfo = getById(id);
|
|
|
- if (orderInfo == null) {
|
|
|
- throw new ServiceException("未找到订单");
|
|
|
- }
|
|
|
+ Assert.notNull(orderInfo, "未找到订单");
|
|
|
update(q -> q.set(OrderInfo::getStatus, OrderStatusEnum.SCHEDULING.getKey()).eq(BaseIdPo::getId, id));
|
|
|
}
|
|
|
|
|
@@ -550,8 +543,7 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
|
|
|
}
|
|
|
|
|
|
List<OrderPackageBomDto> tempOrderPackageBomList = dto.getOrderPackageBomList();
|
|
|
- BigDecimal totalAmount = orderInfo.getTotalAmount();
|
|
|
- BigDecimal oldDeliveryMaterialsFee = orderInfo.getDeliveryMaterialsFee();
|
|
|
+
|
|
|
BigDecimal newDeliveryMaterialsFee = BigDecimal.ZERO;
|
|
|
if (ObjectUtil.isEmpty(tempOrderPackageBomList)) {
|
|
|
orderPackageBomService.remove(q -> q.eq(OrderPackageBom::getOrderId, orderInfo.getId()));
|
|
@@ -566,12 +558,13 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
|
|
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
}
|
|
|
orderInfo.setDeliveryMaterialsFee(newDeliveryMaterialsFee);
|
|
|
+
|
|
|
List<OrderSku> orderSkuList = orderSkuService.list(q -> q.eq(OrderSku::getOrderId, orderInfo.getId()));
|
|
|
BigDecimal quantity = orderSkuList.stream().map(OrderSku::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- orderSkuList.forEach(item ->
|
|
|
- item.setDeliveryMaterialsFee(orderInfo.getDeliveryMaterialsFee()
|
|
|
- .divide(quantity, 4, RoundingMode.HALF_UP))
|
|
|
- );
|
|
|
+ BigDecimal totalAmount = orderInfo.getTotalAmount();
|
|
|
+ BigDecimal oldDeliveryMaterialsFee = orderInfo.getDeliveryMaterialsFee();
|
|
|
+ orderSkuList.forEach(item -> item.setDeliveryMaterialsFee(
|
|
|
+ orderInfo.getDeliveryMaterialsFee().divide(quantity, 4, RoundingMode.HALF_UP)));
|
|
|
orderInfo.setTotalAmount(totalAmount.subtract(oldDeliveryMaterialsFee).add(newDeliveryMaterialsFee));
|
|
|
updateById(orderInfo);
|
|
|
orderSkuService.updateBatchById(orderSkuList);
|
|
@@ -620,6 +613,7 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
|
|
|
return new ArrayList<>(bomVoMap.values());
|
|
|
}
|
|
|
|
|
|
+ @LogicIgnore
|
|
|
@Override
|
|
|
public Page<OrderInfoVo> deletedOrderPage(OrderInfoSelectDto dto) {
|
|
|
return Sql.create(OrderInfoVo.class)
|
|
@@ -645,23 +639,27 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
|
|
|
public void orderExportExcel(Long id) {
|
|
|
OrderInfo orderInfo = this.getById(id);
|
|
|
List<OrderSku> list = orderSkuService.list(q -> q.eq(OrderSku::getOrderId, id));
|
|
|
+
|
|
|
List<Long> bomSpecIds = list.stream().map(OrderSku::getBomSpecId).collect(Collectors.toList());
|
|
|
- List<Long> skuSpecIds = list.stream().map(OrderSku::getSkuSpecId).collect(Collectors.toList());
|
|
|
Map<Long, BomSpecBo> bomSpecBoMap = bomSpecService.getBomSpecBo(bomSpecIds);
|
|
|
+
|
|
|
+ List<Long> skuSpecIds = list.stream().map(OrderSku::getSkuSpecId).collect(Collectors.toList());
|
|
|
Map<Long, SkuSpec> skuSpecMap = skuSpecService.byIdsToMap(skuSpecIds);
|
|
|
+
|
|
|
List<OrderSku> orderPackageSkuList = list.stream()
|
|
|
.filter(item -> !Objects.equals(bomSpecBoMap.get(item.getBomSpecId()).getClassifyParentId(), 1L))
|
|
|
.collect(Collectors.toList());
|
|
|
+
|
|
|
List<OrderSku> orderSkuList = list.stream()
|
|
|
.filter(item -> Objects.equals(bomSpecBoMap.get(item.getBomSpecId()).getClassifyParentId(), 1L))
|
|
|
.collect(Collectors.toList());
|
|
|
+
|
|
|
BigDecimal orderPackageSku = orderPackageSkuList.stream()
|
|
|
- .map(item -> (item.getUnitPrice()
|
|
|
- .add(item.getDeliveryMaterialsFee())
|
|
|
- .add(item.getPackagingMaterialCost()))
|
|
|
- .multiply(item.getQuantity()))
|
|
|
+ .map(item -> item.getUnitPrice().add(item.getDeliveryMaterialsFee()).add(item.getPackagingMaterialCost()).multiply(item.getQuantity()))
|
|
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
BigDecimal orderPackagePrice = orderPackageSku.divide(BigDecimal.valueOf(orderSkuList.size()), 2, RoundingMode.HALF_UP);
|
|
|
+
|
|
|
List<OrderSkuExportVo> exportVoList = orderSkuList.stream().map(item -> {
|
|
|
BigDecimal subtotal = item.getUnitPrice()
|
|
|
.add(item.getDeliveryMaterialsFee())
|
|
@@ -678,6 +676,7 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
|
|
|
orderSkuExportVo.setTotalAmount(subtotal.multiply(item.getQuantity()).add(orderPackagePrice));
|
|
|
return orderSkuExportVo;
|
|
|
}).collect(Collectors.toList());
|
|
|
+
|
|
|
ExcelUtil.export(response, exportVoList, OrderSkuExportVo.class);
|
|
|
}
|
|
|
|
|
@@ -810,6 +809,11 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
|
|
|
private List<OrderSkuProductionCost> getOrderSkuProductionCostList(List<OrderSku> orderSkuList, List<OrderSkuBom> orderSkuBomList) {
|
|
|
Map<Long, List<OrderSkuBom>> orderSkuBomMap = orderSkuBomList.stream().collect(Collectors.groupingBy(OrderSkuBom::getOrderSkuId));
|
|
|
return orderSkuList.stream().map(item -> {
|
|
|
+ List<OrderSkuBom> bomList = orderSkuBomMap.getOrDefault(item.getId(), Collections.emptyList());
|
|
|
+ BigDecimal productPackagingMaterialCost = bomList.stream()
|
|
|
+ .map(orderSkuBom -> orderSkuBom.getQuantity().multiply(orderSkuBom.getUnitPrice()).multiply(item.getQuantity()))
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
OrderSkuProductionCost orderSkuProductionCost = new OrderSkuProductionCost();
|
|
|
orderSkuProductionCost.setOrderId(item.getOrderId());
|
|
|
orderSkuProductionCost.setOrderSkuId(item.getId());
|
|
@@ -818,15 +822,10 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
|
|
|
// 辅料成本暂时没有默认为零
|
|
|
orderSkuProductionCost.setAuxiliaryMaterialCost(BigDecimal.ZERO);
|
|
|
// 产品包材成本
|
|
|
- List<OrderSkuBom> bomList = orderSkuBomMap.getOrDefault(item.getId(), new ArrayList<>());
|
|
|
- BigDecimal productPackagingMaterialCost = bomList.stream()
|
|
|
- .map(orderSkuBom -> orderSkuBom.getQuantity()
|
|
|
- .multiply(orderSkuBom.getUnitPrice())
|
|
|
- .multiply(item.getQuantity()))
|
|
|
- .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
orderSkuProductionCost.setProductPackagingMaterialCost(productPackagingMaterialCost);
|
|
|
// 物流包材成本
|
|
|
orderSkuProductionCost.setLogisticsPackagingMaterialCost(item.getDeliveryMaterialsFee().multiply(item.getQuantity()));
|
|
|
+ // 成本总
|
|
|
orderSkuProductionCost.setTotalAmount(orderSkuProductionCost.getMaterialCost()
|
|
|
.add(orderSkuProductionCost.getAuxiliaryMaterialCost())
|
|
|
.add(orderSkuProductionCost.getProductPackagingMaterialCost())
|