From a129e3653b57415d0dbb4b4bf275647e61c38c12 Mon Sep 17 00:00:00 2001 From: aike <17730485278@139.com> Date: Tue, 16 Dec 2025 09:58:04 +0800 Subject: [PATCH] =?UTF-8?q?demand:=20=20TMS=E7=B3=BB=E7=BB=9F=20-=20?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=AE=A1=E7=90=86=20-=20=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E5=88=97=E8=A1=A8=20-=20=E6=95=B0=E6=8D=AE=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E4=BC=98=E5=8C=96-=E5=BA=95=E9=83=A8=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=95=B0=E6=8D=AE=E6=80=BB=E6=95=B0=E5=92=8C?= =?UTF-8?q?=E5=88=86=E9=A1=B5=E6=9F=A5=E7=9C=8B=E6=95=B0=E6=8D=AE=20?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E6=AF=8F=E9=A1=B520=E6=9D=A1=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=20=20=20TMS=E7=B3=BB=E7=BB=9F/APP=20-=20=E8=BF=90?= =?UTF-8?q?=E5=8D=95=E5=BD=95=E5=85=A5/=E8=BF=90=E5=8D=95=E4=BF=AE?= =?UTF-8?q?=E6=94=B9/=E7=BD=91=E7=82=B9=E8=B4=B9=E7=94=A8=E7=94=B3?= =?UTF-8?q?=E8=AF=B7-=E8=B4=A7=E7=89=A9=E5=90=8D=E7=A7=B0=20=E4=B8=8D?= =?UTF-8?q?=E5=85=81=E8=AE=B8=20=E5=8F=AA=E5=A1=AB=E5=86=99=E2=80=9D?= =?UTF-8?q?=E7=A9=BA=E6=A0=BC=E3=80=81=E6=A0=87=E7=82=B9=E7=AC=A6=E5=8F=B7?= =?UTF-8?q?=E3=80=81=E7=89=B9=E6=AE=8A=E7=AC=A6=E5=8F=B7=E2=80=9C=E6=9D=A5?= =?UTF-8?q?=E4=BB=A3=E6=9B=BF=20=E8=B4=A7=E7=89=A9=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../erp/web/emis/EmisWaybillController.java | 3 +- .../web/emis/annotation/OrderLightCount.java | 14 + .../emis/aspect/OrderLightCountAspect.java | 81 +++++ .../erp/emis/domain/EmisWaybillOther.java | 1 + .../erp/emis/mapper/EmisWaybillMapper.java | 5 + .../emis/mapper/EmisWaybillOtherMapper.java | 1 + .../erp/emis/service/IEmisWaybillService.java | 1 + .../service/impl/EmisWaybillServiceImpl.java | 14 +- .../resources/mapper/EmisWaybillMapper.xml | 283 ++++++++++++++++++ 9 files changed, 401 insertions(+), 2 deletions(-) create mode 100644 emis-biz-web/src/main/java/com/xdadan/erp/web/emis/annotation/OrderLightCount.java create mode 100644 emis-biz-web/src/main/java/com/xdadan/erp/web/emis/aspect/OrderLightCountAspect.java diff --git a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisWaybillController.java b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisWaybillController.java index b1aaf6326..c86d69f84 100644 --- a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisWaybillController.java +++ b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisWaybillController.java @@ -47,6 +47,7 @@ import com.xdadan.erp.system.domain.SysFileInfo; import com.xdadan.erp.system.service.ISysFileInfoService; import com.xdadan.erp.system.service.ISysUserService; import com.xdadan.erp.web.emis.annotation.WaybillLightCount; +import com.xdadan.erp.web.emis.annotation.OrderLightCount; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; @@ -580,7 +581,7 @@ public class EmisWaybillController extends EmisBaseController */ @PreAuthorize("@ss.hasPermi('emis:emisWaybill:list')") @GetMapping("/listOrder") - @WaybillLightCount + @OrderLightCount public TableDataInfo listOrder(EmisWaybill emisWaybill) { // 非总部只能查看自己的或者与自己相关的订单 diff --git a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/annotation/OrderLightCount.java b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/annotation/OrderLightCount.java new file mode 100644 index 000000000..9d56e9d54 --- /dev/null +++ b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/annotation/OrderLightCount.java @@ -0,0 +1,14 @@ +package com.xdadan.erp.web.emis.annotation; + +import java.lang.annotation.*; + +/** + * 订单查询轻量 count 注解 + * - 在控制器方法上使用,统一采用轻量 count 查询 + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface OrderLightCount { +} + diff --git a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/aspect/OrderLightCountAspect.java b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/aspect/OrderLightCountAspect.java new file mode 100644 index 000000000..15e4e56cf --- /dev/null +++ b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/aspect/OrderLightCountAspect.java @@ -0,0 +1,81 @@ +package com.xdadan.erp.web.emis.aspect; + +import com.github.pagehelper.PageHelper; +import com.xdadan.erp.common.core.page.PageDomain; +import com.xdadan.erp.common.core.page.TableDataInfo; +import com.xdadan.erp.common.core.page.TableSupport; +import com.xdadan.erp.emis.domain.EmisWaybill; +import com.xdadan.erp.emis.service.IEmisWaybillService; +import com.xdadan.erp.web.emis.annotation.OrderLightCount; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.stereotype.Component; + +/** + * 订单查询轻量 count 切面 + * - 统一关闭 PageHelper 自动 count + * - 使用轻量 count SQL 计算总数 + */ +@Aspect +@Component +@Slf4j +@RequiredArgsConstructor +public class OrderLightCountAspect { + + private final IEmisWaybillService emisWaybillService; + + @Pointcut("@annotation(com.xdadan.erp.web.emis.annotation.OrderLightCount)") + public void lightCountPointcut() {} + + @Around("lightCountPointcut()") + public Object around(ProceedingJoinPoint joinPoint) throws Throwable { + // 统一分页:禁用自动 count,保留 orderBy + PageDomain pageDomain = TableSupport.buildPageRequest(); + Integer pageNum = pageDomain.getPageNum(); + Integer pageSize = pageDomain.getPageSize(); + String orderBy = pageDomain.getOrderBy(); + if (pageNum != null && pageSize != null) { + PageHelper.startPage(pageNum, pageSize, false); + if (StringUtils.isNotEmpty(orderBy)) { + PageHelper.orderBy(orderBy); + } + } + + Object result = joinPoint.proceed(); + + if (!(result instanceof TableDataInfo)) { + return result; + } + + EmisWaybill param = null; + for (Object arg : joinPoint.getArgs()) { + if (arg instanceof EmisWaybill) { + param = (EmisWaybill) arg; + break; + } + } + + if (param == null) { + return result; + } + + long total = 0L; + try { + total = emisWaybillService.countOrderList(param); + } catch (Exception ex) { + log.warn("Order light count failed, fallback to current total. param={}", param.getBillCode(), ex); + } + + TableDataInfo table = (TableDataInfo) result; + if (total > 0) { + table.setTotal(total); + } + return table; + } +} + diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybillOther.java b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybillOther.java index 891f0c016..7ff78ac66 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybillOther.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybillOther.java @@ -51,3 +51,4 @@ public class EmisWaybillOther extends BaseEntity { + diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisWaybillMapper.java b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisWaybillMapper.java index b83b67fa9..37651a741 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisWaybillMapper.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisWaybillMapper.java @@ -146,6 +146,11 @@ public interface EmisWaybillMapper extends BaseMapper */ public long countWaybillList(EmisWaybill emisWaybill); + /** + * 订单列表轻量计数 + */ + public long countOrderList(EmisWaybill emisWaybill); + diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisWaybillOtherMapper.java b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisWaybillOtherMapper.java index 4f27c0854..425e4d341 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisWaybillOtherMapper.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisWaybillOtherMapper.java @@ -80,3 +80,4 @@ public interface EmisWaybillOtherMapper extends BaseMapper { + diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisWaybillService.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisWaybillService.java index bc9c499dd..94cc188ed 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisWaybillService.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisWaybillService.java @@ -252,6 +252,7 @@ public interface IEmisWaybillService extends IDataAuditService public List selectPrintWaybillList(EmisWaybill emisWaybill); public long countWaybillList(EmisWaybill emisWaybill); + public long countOrderList(EmisWaybill emisWaybill); public void genWarehouseInTplFileByOms(HttpServletResponse response, String orderSn,String fileType) throws EmisBizError ; public void genWarehouseInTplFile(HttpServletResponse response, String orderSn,String fileType) throws EmisBizError ; 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 e295c2bba..481db30f5 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 @@ -71,7 +71,8 @@ package com.xdadan.erp.emis.service.impl; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; - import java.util.stream.Collectors; +import java.util.stream.Collectors; +import java.util.regex.Pattern; /** * 运单列表Service业务层处理 @@ -2359,6 +2360,12 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb */ private void calcWayBillCommonInfo(EmisWaybill emisWaybillSave,EmisWaybill oldWaybil,boolean isNew) throws EmisBizError { + // 校验货物信息,不能只包含空格或符号 + String goodsInfo = emisWaybillSave.getGoodsInfo(); + if (StringUtils.isBlank(goodsInfo) || !Pattern.compile("[\\p{L}\\p{N}]").matcher(goodsInfo).find()) { + throw new EmisBizError(EmisBizErrorType.PARAM_ERROR1, "货物信息不能只包含空格、标点或特殊符号"); + } + String orderSn = WaybillHelper.genOrderSn(); // 订单号 @@ -4562,6 +4569,11 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb return emisWaybillMapper.countWaybillList(emisWaybill); } + @Override + public long countOrderList(EmisWaybill emisWaybill){ + return emisWaybillMapper.countOrderList(emisWaybill); + } + @Override public void genWarehouseInTplFileByOms(HttpServletResponse response, String orderSn,String fileType) throws EmisBizError { diff --git a/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml b/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml index 038b5675a..506615ac4 100644 --- a/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml @@ -1201,6 +1201,289 @@ + +