From 2da4d824fddfb2764fd9bd1902f4d9970f4fb3a2 Mon Sep 17 00:00:00 2001 From: b2894lxlx <517289602@qq.com> Date: Fri, 11 Sep 2026 15:30:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pojo/vo/DriverWaybillCardVO.java | 2 +- .../impl/DriverWaybillServiceImpl.java | 8 +++-- .../support/WaybillProcessSupport.java | 32 +++++++++++++------ 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/DriverWaybillCardVO.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/DriverWaybillCardVO.java index 1b87f5d..162b386 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/DriverWaybillCardVO.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/DriverWaybillCardVO.java @@ -109,7 +109,7 @@ public class DriverWaybillCardVO implements Serializable { @Schema(description = "过程配置是否启用在途打卡(在途节点 punch=是)") private Boolean transitPunchEnabled; - @Schema(description = "是否展示「今日在途打卡」面板(到期且在时段内,或今日已打)") + @Schema(description = "是否展示「今日在途打卡」面板(过程配置 punch=是即展示;频次/时段只影响 requireTransitCheckinToday)") private Boolean transitCheckinVisible; @Schema(description = "今日是否需要在途打卡(到期且未打且在时段内)") diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/DriverWaybillServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/DriverWaybillServiceImpl.java index 2071910..ad1cbc1 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/DriverWaybillServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/DriverWaybillServiceImpl.java @@ -716,12 +716,16 @@ public class DriverWaybillServiceImpl implements IDriverWaybillService { vo.setDefaultExpanded(false); if (isTransit) { - // 在途:今日已打则不可再打,回显最新一次信息 - boolean punchOn = transit != null && transit.punchEnabled(); + // 在途:过程配置 punch=是即下发可见卡;今日已打则不可再打,回显最新一次 + // 在途不采集货量;货物照片仅当过程配置勾选上传凭证时下发 + boolean punchOn = (transit != null && transit.punchEnabled()) + || WaybillProcessSupport.isTruthyPublic(cfg.get("punch")); boolean done = transit != null && transit.doneToday(); if (!punchOn) { continue; } + vo.setNeedCargo(false); + vo.setCargoTypes(Collections.emptyList()); vo.setVisible(true); vo.setDone(done); vo.setActionable(!done); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/support/WaybillProcessSupport.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/support/WaybillProcessSupport.java index 6e8236f..8814002 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/support/WaybillProcessSupport.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/support/WaybillProcessSupport.java @@ -164,9 +164,10 @@ public final class WaybillProcessSupport { * 规则: * */ public static TransitCheckinDecision evaluateTransitCheckin( @@ -182,24 +183,25 @@ public final class WaybillProcessSupport { int frequencyDays = parsePositiveInt(transit.get("frequencyDays"), 1); String timeStart = normalizeHm(stringVal(transit.get("timeStart")), "00:00"); String timeEnd = normalizeHm(stringVal(transit.get("timeEnd")), "23:59"); + // punch=是即展示卡片;非进行中仅不可作为「今日待打」 if (!STATUS_RUNNING.equals(businessStatus)) { - return new TransitCheckinDecision(true, false, false, false, frequencyDays, timeStart, timeEnd); + return new TransitCheckinDecision(true, true, false, false, frequencyDays, timeStart, timeEnd); } LocalDateTime current = now == null ? LocalDateTime.now() : now; LocalDate today = current.toLocalDate(); LocalDate lastDate = toLocalDate(lastPunchAt); boolean doneToday = lastDate != null && lastDate.equals(today); - boolean dueToday; + boolean dueByFrequency; if (lastDate == null) { - dueToday = true; + dueByFrequency = true; } else { LocalDate nextDue = lastDate.plusDays(frequencyDays); - dueToday = !today.isBefore(nextDue); + dueByFrequency = !today.isBefore(nextDue); } boolean inWindow = isWithinTimeWindow(current.toLocalTime(), timeStart, timeEnd); - boolean visible = doneToday || (dueToday && inWindow); - return new TransitCheckinDecision(true, visible, dueToday && inWindow && !doneToday, doneToday, frequencyDays, timeStart, timeEnd); + boolean dueToday = dueByFrequency && inWindow && !doneToday; + return new TransitCheckinDecision(true, true, dueToday, doneToday, frequencyDays, timeStart, timeEnd); } public static Map findTransitNode(String processJson) { @@ -274,6 +276,11 @@ public final class WaybillProcessSupport { return isTransitNode(node); } + /** 供业务层判断过程配置布尔字段(兼容 true/1/yes/是) */ + public static boolean isTruthyPublic(Object value) { + return isTruthy(value); + } + public static boolean nodeNeedLocation(Map node) { return isTruthy(node.get("location")); } @@ -395,8 +402,15 @@ public final class WaybillProcessSupport { if (value instanceof Boolean bool) { return bool; } + if (value instanceof Number number) { + return number.intValue() != 0; + } String text = String.valueOf(value).trim(); - return "true".equalsIgnoreCase(text) || "1".equals(text) || "yes".equalsIgnoreCase(text); + return "true".equalsIgnoreCase(text) + || "1".equals(text) + || "yes".equalsIgnoreCase(text) + || "y".equalsIgnoreCase(text) + || "是".equals(text); } private static String stringVal(Object value) {