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 @@ + +