From b9bbd0049d34a5be7bff1bee2d4b71d6f2c15292 Mon Sep 17 00:00:00 2001 From: liuhuayong <995058772@qq.com> Date: Sun, 28 Jun 2026 23:26:02 +0800 Subject: [PATCH] =?UTF-8?q?fix(edu):=20savePackages=20=E8=A1=A5=E5=85=A8?= =?UTF-8?q?=E8=AF=BE=E5=8C=85=E5=BF=AB=E7=85=A7=E5=AD=97=E6=AE=B5(name/typ?= =?UTF-8?q?e/listPrice/salePrice/finalAmount),=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=90=88=E5=90=8C=E5=88=9B=E5=BB=BA=E5=9B=A0=20NOT=20NULL=20?= =?UTF-8?q?=E5=88=97=E6=8F=92=E5=85=A5=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../contract/impl/EduContractServiceImpl.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/ruoyi-modules/ruoyi-edu/src/main/java/org/dromara/edu/application/service/contract/impl/EduContractServiceImpl.java b/ruoyi-modules/ruoyi-edu/src/main/java/org/dromara/edu/application/service/contract/impl/EduContractServiceImpl.java index 8bcdfd63e..07119f9de 100644 --- a/ruoyi-modules/ruoyi-edu/src/main/java/org/dromara/edu/application/service/contract/impl/EduContractServiceImpl.java +++ b/ruoyi-modules/ruoyi-edu/src/main/java/org/dromara/edu/application/service/contract/impl/EduContractServiceImpl.java @@ -54,6 +54,7 @@ public class EduContractServiceImpl implements IEduContractService { private final EduContractMapper contractMapper; private final EduContractPackageMapper contractPackageMapper; + private final org.dromara.edu.infrastructure.persistence.mapper.EduCoursePackageMapper coursePackageMapper; private final EduContractGiftMapper contractGiftMapper; private final EduContractLogMapper contractLogMapper; private final EduHoursLogMapper hoursLogMapper; @@ -506,11 +507,31 @@ public class EduContractServiceImpl implements IEduContractService { if (CollUtil.isEmpty(packages)) { return; } + // 按 packageId 批量查课包, 填充 name/type 快照(表列 NOT NULL) + java.util.Set pkgIds = packages.stream() + .map(EduContractPackageBo::getPackageId) + .filter(java.util.Objects::nonNull) + .collect(java.util.stream.Collectors.toSet()); + java.util.Map pkgMap; + if (!pkgIds.isEmpty()) { + pkgMap = coursePackageMapper.selectBatchIds(pkgIds).stream() + .collect(java.util.stream.Collectors.toMap(org.dromara.edu.domain.model.package_.EduCoursePackage::getId, p -> p, (a, b) -> a)); + } else { + pkgMap = java.util.Collections.emptyMap(); + } List list = StreamUtils.toList(packages, p -> { EduContractPackage e = MapstructUtils.convert(p, EduContractPackage.class); e.setContractId(contractId); e.setUsedHours(BigDecimal.ZERO); e.setRemainHours(nz(p.getTotalHours())); + // 课包快照: name/type/listPrice BO 可能未传, 从课包表查(表列均 NOT NULL) + org.dromara.edu.domain.model.package_.EduCoursePackage src = pkgMap.get(p.getPackageId()); + e.setPackageName(src != null && src.getPackageName() != null ? src.getPackageName() : "未知课包"); + e.setPackageType(src != null && src.getPackageType() != null ? src.getPackageType() : "UNKNOWN"); + e.setListPrice(p.getListPrice() != null ? p.getListPrice() + : (src != null && src.getListPrice() != null ? src.getListPrice() : nz(p.getSalePrice()))); + // salePrice/finalAmount 表列 NOT NULL, 兜底非 null + e.setSalePrice(nz(p.getSalePrice())); e.setFinalAmount(nz(p.getFinalAmount(), p.getSalePrice())); e.setStatus("0"); return e;