From 601b81b140ded3e86ec9da2aa495ae4a929a9ce3 Mon Sep 17 00:00:00 2001
From: aike <17730485278@139.com>
Date: Fri, 10 Apr 2026 11:14:49 +0800
Subject: [PATCH] =?UTF-8?q?demand:=20=20=20=20=20TMS=E7=B3=BB=E7=BB=9F=20-?=
=?UTF-8?q?=20=E8=BF=90=E5=8D=95=E7=AE=A1=E7=90=86=20-=20=E8=BF=90?=
=?UTF-8?q?=E5=8D=95=E7=AD=BE=E6=94=B6=E5=9B=BE=E7=89=87=E4=B8=8A=E4=BC=A0?=
=?UTF-8?q?=20-=20=E7=95=8C=E9=9D=A2=E8=B0=83=E6=95=B4=20=20=20TMS?=
=?UTF-8?q?=E7=B3=BB=E7=BB=9F=20-=20=E8=BF=90=E5=8D=95=E7=AE=A1=E7=90=86?=
=?UTF-8?q?=20-=20=E8=BF=90=E5=8D=95=E6=89=B9=E9=87=8F=E5=BD=95=E5=85=A5?=
=?UTF-8?q?=20-=20=E7=BC=85=E7=94=B8=E8=99=9A=E6=8B=9F=E5=8D=95=20?=
=?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96=20=20TMS/APP=E7=B3=BB?=
=?UTF-8?q?=E7=BB=9F=20-=20=E6=8E=A5=E5=8D=95/=E8=BF=90=E5=8D=95=E5=BD=95?=
=?UTF-8?q?=E5=85=A5/=E8=BF=90=E5=8D=95=E4=BF=AE=E6=94=B9=20/=20=E7=BD=91?=
=?UTF-8?q?=E7=82=B9=E8=B4=B9=E7=94=A8=E7=94=B3=E8=AF=B7/=E6=89=B9?=
=?UTF-8?q?=E9=87=8F=E5=BD=95=E5=85=A5=20-=20=E6=94=AF=E4=BB=98=E6=96=B9?=
=?UTF-8?q?=E5=BC=8F=EF=BC=9A=E5=88=B0=E4=BB=98/=E7=8E=B0=E9=87=91/?=
=?UTF-8?q?=E5=85=B6=E4=BB=96=20=E5=88=A4=E6=96=AD=E5=9B=9E=E6=AC=BE?=
=?UTF-8?q?=E8=81=94=E7=B3=BB=E4=BA=BA/=E9=94=80=E5=94=AE=E8=81=94?=
=?UTF-8?q?=E7=B3=BB=E4=BA=BA/=E9=94=80=E5=94=AE=E6=94=AF=E6=8C=81=20?=
=?UTF-8?q?=E9=80=BB=E8=BE=91=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../xdadan/erp/emis/domain/EmisWaybill.java | 5 ++
.../erp/emis/domain/vo/WaybillOrder.java | 4 +-
.../service/impl/EmisWaybillServiceImpl.java | 68 +++++++++++++++++++
.../resources/mapper/EmisWaybillMapper.xml | 13 +++-
4 files changed, 88 insertions(+), 2 deletions(-)
diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybill.java b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybill.java
index ba59fe02b..9a6b03592 100644
--- a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybill.java
+++ b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybill.java
@@ -57,6 +57,11 @@ public class EmisWaybill extends BaseEntity {
private String billCodeSub;
/* 订单状态 字典 */
private String orderStatus;
+ /**
+ * 正式运单标识
+ */
+ @TableField(exist = false)
+ private String blFormalWaybill;
/* 组批次状态 */
private String siteBatchStatus;
/* 运单状态 字典 */
diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/vo/WaybillOrder.java b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/vo/WaybillOrder.java
index 1bae0f435..7937d70c6 100644
--- a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/vo/WaybillOrder.java
+++ b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/vo/WaybillOrder.java
@@ -6,7 +6,6 @@ import com.xdadan.erp.common.annotation.audit.DataAuditField;
import com.xdadan.erp.emis.domain.*;
import lombok.Data;
-import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.math.BigDecimal;
@@ -48,6 +47,8 @@ public class WaybillOrder implements Serializable {
/* 运单状态 字典 */
private String waybillStatus;
+ private String blFormalWaybill;
+
/* 运单号 */
@Size(min = 0, max = 20, message = "运单号长度不能超过20个字符")
private String billCode;
@@ -519,6 +520,7 @@ public class WaybillOrder implements Serializable {
voItem.setOrderStatus(dbWaybill.getOrderStatus());
voItem.setWaybillStatus(dbWaybill.getWaybillStatus());
+ voItem.setBlFormalWaybill(dbWaybill.getBlFormalWaybill());
// voItem.setOrderType(dbWaybill.getOrderType());
voItem.setOrderDate(dbWaybill.getOrderDate());
diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java
index 8cc350ece..1dc55e448 100644
--- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java
+++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java
@@ -586,6 +586,11 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb
emisWaybillSave.setBillCode(waybillNo);
}
+ if(StringUtils.isNotBlank(emisWaybillSave.getMasterBillCode())){
+ if(!"1".equals(emisWaybillSave.getBlVirtual())){
+ throw new EmisBizError(EmisBizErrorType.PARAM_ERROR1, "是否虚拟单信息填写错误");
+ }
+ }
// 开始下单
addNewWaybill(emisWaybillSave);
@@ -1257,6 +1262,64 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb
return users;
}
+ private void validatePayeeSalesmenSalesSupport(EmisWaybill wb) throws EmisBizError {
+ if (wb == null) {
+ return;
+ }
+ String payee = wb.getPayee();
+ if (StringUtils.isNotBlank(payee)) {
+ String payeeName = payee.trim();
+ SysUser payeeUser = getEmisStaffByEmpName(payeeName);
+ if (payeeUser == null) {
+ throw new EmisBizError(EmisBizErrorType.NOT_EXISTS, "回款联系人" + payeeName + "不存在");
+ }
+ if (!"1".equals(payeeUser.getBlPayeeRemark())) {
+ throw new EmisBizError(EmisBizErrorType.FAIL, "回款联系人" + payeeName + "无回款权限");
+ }
+ if (!"1".equals(payeeUser.getBlOpen())) {
+ throw new EmisBizError(EmisBizErrorType.FAIL, "回款联系人" + payeeName + "未启用");
+ }
+ }
+ String salesmen = wb.getSalesmen();
+ if (StringUtils.isNotBlank(salesmen)) {
+ String salesmenName = salesmen.trim();
+ SysUser salesUser = getEmisStaffByEmpName(salesmenName);
+ if (salesUser == null) {
+ throw new EmisBizError(EmisBizErrorType.NOT_EXISTS, "销售联系人" + salesmenName + "不存在");
+ }
+ if (!"1".equals(salesUser.getBlPayeeRemark())) {
+ throw new EmisBizError(EmisBizErrorType.FAIL, "销售联系人" + salesmenName + "无回款权限");
+ }
+ if (!"1".equals(salesUser.getBlOpen())) {
+ throw new EmisBizError(EmisBizErrorType.FAIL, "销售联系人" + salesmenName + "未启用");
+ }
+ }
+ String salesSupportRaw = null;
+ if (wb.getWaybillOther() != null) {
+ salesSupportRaw = wb.getWaybillOther().getSalesSupport();
+ }
+ if (StringUtils.isBlank(salesSupportRaw)) {
+ salesSupportRaw = wb.getSalesSupport();
+ }
+ String salesSupportToCheck = StringUtils.trimToEmpty(salesSupportRaw);
+ if (StringUtils.isNotBlank(salesSupportToCheck)) {
+ String[] supports = salesSupportToCheck.split("[,,]");
+ for (String support : supports) {
+ if (StringUtils.isBlank(support)) {
+ continue;
+ }
+ String supportName = support.trim();
+ SysUser supportUser = getEmisStaffByEmpName(supportName);
+ if (supportUser == null) {
+ throw new EmisBizError(EmisBizErrorType.NOT_EXISTS, "销售支持" + supportName + "不存在");
+ }
+ if (!"1".equals(supportUser.getBlOpen())) {
+ throw new EmisBizError(EmisBizErrorType.FAIL, "销售支持" + supportName + "未启用");
+ }
+ }
+ }
+ }
+
private void cvtWaybillDraftToRealByOms(EmisWaybill emisWaybillSave) throws EmisBizError {
@@ -1816,6 +1879,8 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb
throw new EmisBizError(EmisBizErrorType.FAIL,"非当前网点运单,请先指派到当前网点!");
}
+ validatePayeeSalesmenSalesSupport(emisWaybillSave);
+
// 子单号做扣减
if ("1".equals(emisWaybillSave.getBlGenSubbill())) {
@@ -3348,6 +3413,7 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb
// 公共计算部分
calcWayBillCommonInfo(emisWaybillSave,null,true);
+ validatePayeeSalesmenSalesSupport(emisWaybillSave);
// 图片标识
String goodsPicsStr=emisWaybillSave.getGoodsPics();
@@ -3880,6 +3946,8 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb
// 校验产品类型与线路是否匹配
checkLineWithProd(emisWaybillSave);
+ validatePayeeSalesmenSalesSupport(emisWaybillSave);
+
calcWayBillCommonInfo(emisWaybillSave,oldEmisWaybill,false);
emisWaybillSave.preUpdate();
diff --git a/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml b/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml
index b6ba208cb..bda3ccd56 100644
--- a/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml
+++ b/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml
@@ -11,6 +11,7 @@
+
@@ -499,7 +500,17 @@
z.type_name as problem_type_name,
start.site_name as start_site_name,
- k.trans_type as trans_type
+ k.trans_type as trans_type,
+ CASE
+ WHEN a.order_status = '1'
+ AND NOT EXISTS (
+ SELECT 1 FROM emis_waybill_problem_info ewpi
+ WHERE ewpi.bill_code = a.bill_code
+ AND ewpi.del_flag = '0'
+ AND ewpi.problem_type IN (151, 170, 173)
+ )
+ THEN '1' ELSE '0'
+ END AS bl_formal_waybill
from emis_waybill a