From 1d250d0e8f5882af28ae854f756cfc5802342d3e Mon Sep 17 00:00:00 2001 From: aike <17730485278@139.com> Date: Fri, 5 Dec 2025 17:15:29 +0800 Subject: [PATCH] =?UTF-8?q?demand:=20=20=20=20TMS-=E8=BF=90=E5=8D=95?= =?UTF-8?q?=E7=AE=A1=E7=90=86-=E6=89=80=E6=9C=89=E8=BF=90=E5=8D=95?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=88=86=E9=A1=B5=E9=80=BB=E8=BE=91=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../erp/web/emis/EmisWaybillController.java | 34 +- .../emis/annotation/WaybillLightCount.java | 14 + .../emis/aspect/WaybillLightCountAspect.java | 81 ++++ .../erp/emis/mapper/EmisWaybillMapper.java | 5 + .../erp/emis/service/IEmisWaybillService.java | 1 + .../service/impl/EmisWaybillServiceImpl.java | 5 + .../resources/mapper/EmisWaybillMapper.xml | 354 +++++++++++++++++- 7 files changed, 479 insertions(+), 15 deletions(-) create mode 100644 emis-biz-web/src/main/java/com/xdadan/erp/web/emis/annotation/WaybillLightCount.java create mode 100644 emis-biz-web/src/main/java/com/xdadan/erp/web/emis/aspect/WaybillLightCountAspect.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 d6e4f94ed..1a80163fb 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 @@ -46,6 +46,7 @@ import com.xdadan.erp.emis.utils.WaybillHelper; 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 lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; @@ -541,10 +542,11 @@ public class EmisWaybillController extends EmisBaseController */ @PreAuthorize("@ss.hasPermi('emis:emisWaybill:list')") @GetMapping("/list") + @WaybillLightCount public TableDataInfo list(EmisWaybill emisWaybill) { // 非总部只能查看自己的或者与自己相关的订单 - startPage(); +// startPage(); setPrivParams(emisWaybill); @@ -578,11 +580,12 @@ public class EmisWaybillController extends EmisBaseController */ @PreAuthorize("@ss.hasPermi('emis:emisWaybill:list')") @GetMapping("/listOrder") + @WaybillLightCount public TableDataInfo listOrder(EmisWaybill emisWaybill) { // 非总部只能查看自己的或者与自己相关的订单 - startPage(); +// startPage(); setPrivParams(emisWaybill); @@ -618,10 +621,11 @@ public class EmisWaybillController extends EmisBaseController */ @PreAuthorize("@ss.hasPermi('emis:emisWaybill:list')") @GetMapping("/getQueryStatInfoMap") + @WaybillLightCount public AjaxResult getQueryStatInfoMap(EmisWaybill emisWaybill) { - startPage(); +// startPage(); setPrivParams(emisWaybill); @@ -650,9 +654,10 @@ public class EmisWaybillController extends EmisBaseController */ @PreAuthorize("@ss.hasPermi('emis:app:op:bizStatList')") @GetMapping("/getMyBizStatInfo") + @WaybillLightCount public AjaxResult getMyBizStatInfo(EmisWaybill emisWaybill) { - startPage(); +// startPage(); setPrivParams(emisWaybill); String empName = getLoginUser().getUser().getEmpName(); emisWaybill.setSalesmen(empName); @@ -680,11 +685,12 @@ public class EmisWaybillController extends EmisBaseController */ @PreAuthorize("@ss.hasPermi('emis:emisWaybill:list')") @GetMapping("/querySignlist") + @WaybillLightCount public TableDataInfo querySignlist(EmisWaybill emisWaybill) { // 非总部只能查看自己的或者与自己相关的订单 - startPage(); +// startPage(); // 设置通用权限查询参数 setPrivParams(emisWaybill); @@ -728,9 +734,10 @@ public class EmisWaybillController extends EmisBaseController "intoWarehouseBillCode" },value= EmisWaybill.class,type= JacksonFilter.JscksonFilterType.RESPONSE) @GetMapping("/listSimple") + @WaybillLightCount public TableDataInfo listSimple(EmisWaybill emisWaybill) { - startPage(); +// startPage(); // 设置通用权限查询参数 setPrivParams(emisWaybill); @@ -791,9 +798,10 @@ public class EmisWaybillController extends EmisBaseController * @return */ @GetMapping("/getSiteSendStatInfoMap") + @WaybillLightCount public TableDataInfo getSiteSendStatInfoMap(EmisWaybill emisWaybill) { - startPage(); +// startPage(); // 设置通用权限查询参数 setPrivParams(emisWaybill); @@ -808,9 +816,10 @@ public class EmisWaybillController extends EmisBaseController * @return */ @GetMapping("/getSiteDestStatInfoMap") + @WaybillLightCount public TableDataInfo getSiteDestStatInfoMap(EmisWaybill emisWaybill) { - startPage(); +// startPage(); // 设置通用权限查询参数 setPrivParams(emisWaybill); @@ -825,9 +834,10 @@ public class EmisWaybillController extends EmisBaseController * @return */ @GetMapping("/queryScanStatInfoDtlList") + @WaybillLightCount public TableDataInfo queryScanStatInfoDtlList(EmisWaybill emisWaybill) { - startPage(); +// startPage(); // 设置通用权限查询参数 setPrivParams(emisWaybill); @@ -860,9 +870,10 @@ public class EmisWaybillController extends EmisBaseController @GetMapping("/selectEmisWaybillByMutiBillCode") + @WaybillLightCount public TableDataInfo selectEmisWaybillByMutiBillCode(EmisWaybill emisWaybill) { - startPage(); +// startPage(); // 设置通用权限查询参数 setPrivParams(emisWaybill); @@ -891,9 +902,10 @@ public class EmisWaybillController extends EmisBaseController // ,"printManName" // },value= EmisWaybill.class,type= JacksonFilter.JscksonFilterType.RESPONSE) @GetMapping("/queryPrintListSimple") + @WaybillLightCount public TableDataInfo queryPrintListSimple(EmisWaybill emisWaybill) { - startPage(); +// startPage(); List list = null; // 如果单号不为空,则去除其他参数 diff --git a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/annotation/WaybillLightCount.java b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/annotation/WaybillLightCount.java new file mode 100644 index 000000000..51ce9fd0b --- /dev/null +++ b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/annotation/WaybillLightCount.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 WaybillLightCount { +} + diff --git a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/aspect/WaybillLightCountAspect.java b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/aspect/WaybillLightCountAspect.java new file mode 100644 index 000000000..14c242e25 --- /dev/null +++ b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/aspect/WaybillLightCountAspect.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.WaybillLightCount; +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 WaybillLightCountAspect { + + private final IEmisWaybillService emisWaybillService; + + @Pointcut("@annotation(com.xdadan.erp.web.emis.annotation.WaybillLightCount)") + 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.countWaybillList(param); + } catch (Exception ex) { + log.warn("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/mapper/EmisWaybillMapper.java b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisWaybillMapper.java index ef98b061a..b83b67fa9 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 @@ -141,6 +141,11 @@ public interface EmisWaybillMapper extends BaseMapper public List selectPrintWaybillList(EmisWaybill emisWaybill); + /** + * 运单列表轻量计数 + */ + public long countWaybillList(EmisWaybill emisWaybill); + 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 52ced9b71..bc9c499dd 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 @@ -251,6 +251,7 @@ public interface IEmisWaybillService extends IDataAuditService public List selectPrintWaybillList(EmisWaybill emisWaybill); + public long countWaybillList(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 8b604e30b..0538c8dba 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 @@ -4557,6 +4557,11 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb return emisWaybillMapper.selectPrintWaybillList(emisWaybill); } + @Override + public long countWaybillList(EmisWaybill emisWaybill){ + return emisWaybillMapper.countWaybillList(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 46a2d875e..f82e6f6a9 100644 --- a/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml @@ -1568,6 +1568,356 @@ + +