From 90afc3c94cb659d5b533587d9615f5bf431a997a Mon Sep 17 00:00:00 2001 From: b2894lxlx <517289602@qq.com> Date: Fri, 4 Sep 2026 16:52:24 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=B8=9A=E5=8A=A1=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../transport/excel/LoadingManageExcel.java | 9 ++-- .../impl/LoadingManageServiceImpl.java | 13 ++++++ .../service/impl/MasterOrderServiceImpl.java | 41 ++++++++++++++++++- .../wrapper/LoadingManageWrapper.java | 2 +- 4 files changed, 59 insertions(+), 6 deletions(-) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/LoadingManageExcel.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/LoadingManageExcel.java index 950f89f..6380c7a 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/LoadingManageExcel.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/LoadingManageExcel.java @@ -6,6 +6,7 @@ package org.springblade.transport.excel; import cn.idev.excel.annotation.ExcelIgnore; import cn.idev.excel.annotation.ExcelProperty; +import cn.idev.excel.annotation.format.DateTimeFormat; import cn.idev.excel.annotation.write.style.ColumnWidth; import cn.idev.excel.annotation.write.style.ContentRowHeight; import cn.idev.excel.annotation.write.style.HeadRowHeight; @@ -13,7 +14,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; -import java.time.LocalDateTime; +import java.util.Date; /** * 配载管理 Excel @@ -54,9 +55,11 @@ public class LoadingManageExcel implements Serializable { @ExcelProperty("数据来源") private String dataSource; @ExcelProperty("创建时间") - private LocalDateTime createTime; + @DateTimeFormat("yyyy-MM-dd HH:mm:ss") + private Date createTime; @ExcelProperty("更新时间") - private LocalDateTime updateTime; + @DateTimeFormat("yyyy-MM-dd HH:mm:ss") + private Date updateTime; @ExcelProperty("过程节点") private String currentProcessNode; @ExcelProperty("状态") diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/LoadingManageServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/LoadingManageServiceImpl.java index c872e33..270cc5c 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/LoadingManageServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/LoadingManageServiceImpl.java @@ -14,6 +14,7 @@ import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.tool.jackson.JsonUtil; import org.springblade.core.tool.utils.BeanUtil; import org.springblade.core.tool.utils.Func; +import org.springblade.system.cache.DictCache; import org.springblade.system.pojo.entity.Dept; import org.springblade.transport.excel.LoadingManageExcel; import org.springblade.transport.mapper.LoadingManageMapper; @@ -185,10 +186,22 @@ public class LoadingManageServiceImpl extends BaseServiceImpl { LoadingManageExcel excel = new LoadingManageExcel(); BeanUtil.copyProperties(record, excel); + excel.setTransportType(transportTypeName(record.getTransportType())); + excel.setCreateTime(record.getCreateTime()); + excel.setUpdateTime(record.getUpdateTime()); + excel.setBusinessStatus(LoadingManageWrapper.businessStatusName(record.getBusinessStatus())); return excel; }).toList(); } + private String transportTypeName(String value) { + if (Func.isEmpty(value)) { + return value; + } + String name = DictCache.getValue("transport_type", value); + return Func.isEmpty(name) ? value : name; + } + @Override @Transactional(rollbackFor = Exception.class) public LoadingManageVO copy(Long id) { diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MasterOrderServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MasterOrderServiceImpl.java index 11f7195..b4f530b 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MasterOrderServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/MasterOrderServiceImpl.java @@ -292,6 +292,7 @@ public class MasterOrderServiceImpl extends BaseServiceImpl boundWaybills = waybillsByMasterNo(entity.getMasterNo()); vo.setBoundWaybills(boundWaybills); @@ -329,6 +330,8 @@ public class MasterOrderServiceImpl extends BaseServiceImpl 0) throw new ServiceException("货物【" + string(dispatch, "cargoName") + "】的调度数量超过可调度数量"); } + validatePreviousSegmentCompletedQuantity(masterOrder, dispatches); + } + private void validatePreviousSegmentCompletedQuantity(MasterOrder masterOrder, List> dispatches) { + List> routes = parseArray(masterOrder.getRouteJson()); + Map requestQuantityBySegment = new LinkedHashMap<>(); + for (Map dispatch : dispatches) { + requestQuantityBySegment.merge(string(dispatch, "segmentNo"), decimal(dispatch, "quantity"), BigDecimal::add); + } + for (int index = 1; index < routes.size(); index++) { + Map route = routes.get(index); + String segmentNo = string(route, "segmentNo"); + BigDecimal requestQuantity = requestQuantityBySegment.get(segmentNo); + if (requestQuantity == null) continue; + BigDecimal dispatchTotal = routeDispatchedQuantity(masterOrder, route).add(requestQuantity); + BigDecimal previousCompletedQuantity = completedQuantity(masterOrder.getMasterNo(), routes.get(index - 1)); + if (dispatchTotal.compareTo(previousCompletedQuantity) > 0) { + throw new ServiceException(segmentNo + "调度总量不能大于上一段已完成数量(" + previousCompletedQuantity.stripTrailingZeros().toPlainString() + ")"); + } + } + } + private BigDecimal routeDispatchedQuantity(MasterOrder masterOrder, Map route) { + List waybills = waybillsByMasterNo(masterOrder.getMasterNo()).stream() + .filter(item -> belongsToRoute(item, route)).toList(); + List plans = transportPlanService.list(new LambdaQueryWrapper() + .eq(TransportPlan::getMasterNo, masterOrder.getMasterNo())).stream() + .filter(item -> belongsToRoute(item, route)).toList(); + return dispatchedGoods(waybills, plans).values().stream().reduce(BigDecimal.ZERO, BigDecimal::add); + } + private BigDecimal completedQuantity(String masterNo, Map route) { + return waybillsByMasterNo(masterNo).stream() + .filter(item -> "completed".equals(item.getBusinessStatus())) + .filter(item -> belongsToRoute(item, route)) + .flatMap(item -> waybillGoods(item).stream()) + .map(item -> decimal(item, "quantity")) + .reduce(BigDecimal.ZERO, BigDecimal::add); } private Map availableGoods(MasterOrder masterOrder) { Map available = new LinkedHashMap<>(); @@ -435,7 +472,7 @@ public class MasterOrderServiceImpl extends BaseServiceImpl