fix(edu): savePackages 补全课包快照字段(name/type/listPrice/salePrice/finalAmount), 修复合同创建因 NOT NULL 列插入失败

This commit is contained in:
liuhuayong 2026-06-28 23:26:02 +08:00
parent b0bfc25f8c
commit b9bbd0049d

View File

@ -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<Long> pkgIds = packages.stream()
.map(EduContractPackageBo::getPackageId)
.filter(java.util.Objects::nonNull)
.collect(java.util.stream.Collectors.toSet());
java.util.Map<Long, org.dromara.edu.domain.model.package_.EduCoursePackage> 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<EduContractPackage> 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;