|
@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
|
|
|
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.fjhx.file.utils.ObsFileUtil;
|
|
@@ -51,6 +52,9 @@ import com.sd.business.entity.price.po.PriceBillingStandardDetail;
|
|
|
import com.sd.business.entity.sku.po.SkuSpec;
|
|
|
import com.sd.business.entity.sku.po.SkuSpecLink;
|
|
|
import com.sd.business.entity.warehouse.constant.WarehouseConstant;
|
|
|
+import com.sd.business.entity.work.constant.MaterialsConstant;
|
|
|
+import com.sd.business.entity.work.po.WorkOrder;
|
|
|
+import com.sd.business.entity.work.po.WorkOrderDetail;
|
|
|
import com.sd.business.mapper.order.OrderInfoMapper;
|
|
|
import com.sd.business.service.bom.BomService;
|
|
|
import com.sd.business.service.bom.BomSpecService;
|
|
@@ -65,6 +69,8 @@ import com.sd.business.service.price.PriceBillingStandardDetailService;
|
|
|
import com.sd.business.service.price.PriceBillingStandardService;
|
|
|
import com.sd.business.service.sku.SkuSpecLinkService;
|
|
|
import com.sd.business.service.sku.SkuSpecService;
|
|
|
+import com.sd.business.service.work.WorkOrderDetailService;
|
|
|
+import com.sd.business.service.work.WorkOrderService;
|
|
|
import com.sd.business.service.work.impl.WorkOrderServiceImpl;
|
|
|
import com.sd.business.util.CodeEnum;
|
|
|
import com.sd.framework.util.Assert;
|
|
@@ -144,6 +150,12 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
|
|
|
@Autowired
|
|
|
private HttpServletResponse response;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private WorkOrderService workOrderService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private WorkOrderDetailService workOrderDetailService;
|
|
|
+
|
|
|
@Override
|
|
|
public Page<OrderInfoVo> getPage(OrderInfoSelectDto dto) {
|
|
|
|
|
@@ -364,9 +376,12 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
|
|
|
|
|
|
if (Objects.equals(orderInfo.getDelFlag(), StatusConstant.NOT_DELETED)
|
|
|
&& orderInfo.getStatus() > OrderStatusEnum.SCHEDULING.getKey()) {
|
|
|
- throw new ServiceException("订单已生产,无法删除");
|
|
|
+ throw new ServiceException("订单已排单生产,无法删除");
|
|
|
}
|
|
|
|
|
|
+ // 删除订单重新排单
|
|
|
+ reschedule(id);
|
|
|
+
|
|
|
List<Long> orderSkuIdList = orderSkuService.listObject(BaseIdPo::getId, q -> q.eq(OrderSku::getOrderId, id));
|
|
|
|
|
|
removeById(id);
|
|
@@ -842,4 +857,43 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
|
|
|
}).collect(Collectors.toList());
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 重新排单
|
|
|
+ */
|
|
|
+ private void reschedule(Long id) {
|
|
|
+ // 获取所有已排订单
|
|
|
+ List<WorkOrderDetail> list = workOrderDetailService.list(q -> q.eq(WorkOrderDetail::getOrderInfoId, id));
|
|
|
+ if (list.isEmpty()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ workOrderDetailService.remove(q -> q.eq(WorkOrderDetail::getOrderInfoId, id));
|
|
|
+
|
|
|
+ Map<Long, List<WorkOrderDetail>> map = list.stream().collect(Collectors.groupingBy(WorkOrderDetail::getWorkOrderId));
|
|
|
+
|
|
|
+ // 获取工单
|
|
|
+ List<WorkOrder> workOrderList = workOrderService.list(q -> q.in(BaseIdPo::getId, map.keySet()));
|
|
|
+ Map<Long, WorkOrder> workOrderMap = workOrderList.stream().collect(Collectors.toMap(BaseIdPo::getId, Function.identity()));
|
|
|
+
|
|
|
+ map.forEach((workOrderId, workOrderDetailList) -> {
|
|
|
+ WorkOrder workOrder = workOrderMap.get(workOrderId);
|
|
|
+ BigDecimal masterLength = ObjectUtil.defaultIfNull(workOrder.getMasterLength(), new BigDecimal(MaterialsConstant.MASTER_LENGTH));
|
|
|
+
|
|
|
+ BigDecimal deleteUsedArea = workOrderDetailList.stream().map(item -> item.getBleedingLength().multiply(item.getBleedingWidth())).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ Map<String, Object> maxLengthMap = workOrderDetailService.getMap(Wrappers.<WorkOrderDetail>query()
|
|
|
+ .select("ifnull(max(y+length),0) maxLength")
|
|
|
+ .eq("work_order_id", workOrderId));
|
|
|
+
|
|
|
+ workOrder.setSchedulingNum(workOrder.getSchedulingNum().subtract(new BigDecimal(workOrderDetailList.size())));
|
|
|
+ workOrder.setUsedArea(workOrder.getUsedArea().subtract(deleteUsedArea));
|
|
|
+ workOrder.setUseRatio(workOrder.getUsedArea().multiply(new BigDecimal(100))
|
|
|
+ .divide(masterLength.multiply(new BigDecimal(MaterialsConstant.MASTER_WIDTH)), 2, RoundingMode.HALF_UP));
|
|
|
+ workOrder.setMaxLength((BigDecimal) maxLengthMap.get("maxLength"));
|
|
|
+ });
|
|
|
+
|
|
|
+ workOrderService.updateBatchById(workOrderList);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|