fix(oa): 修复项目变更功能中的数据映射和初始化问题

- 移除重复的合同金额字段映射以避免数据冗余
- 添加 CollUtil 导入以支持集合空值检查
- 修改变更原因和后续工作继承逻辑,保留上次变更内容便于用户修改
- 更新进度明细初始化条件,仅在列表为空时进行初始化
- 更新预算明细初始化条件,仅在列表为空时进行初始化
- 修改进度查询方法,使用连表查询确保 project_phases 字段正确填充
dev
Yangk 1 month ago
parent 2764bda72c
commit 2f58c71125

@ -1,5 +1,6 @@
package org.dromara.oa.erp.service.impl; package org.dromara.oa.erp.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -374,8 +375,8 @@ public class ErpProjectChangeServiceImpl implements IErpProjectChangeService {
if (lastChange != null) { if (lastChange != null) {
// 复制上一次变更的项目当前情况说明等信息作为参考 // 复制上一次变更的项目当前情况说明等信息作为参考
vo.setCurrentStatus(lastChange.getCurrentStatus()); vo.setCurrentStatus(lastChange.getCurrentStatus());
vo.setChangeReason(""); // 变更原因需要重新填写 vo.setChangeReason(lastChange.getChangeReason()); // 继承之前的变更原因,方便用户修改
vo.setFollowUpWork(""); // 后续工作需要重新填写 vo.setFollowUpWork(lastChange.getFollowUpWork()); // 继承之前的后续工作,方便用户修改
// 查询上一次变更的预算变更明细作为参考 // 查询上一次变更的预算变更明细作为参考
List<ErpProjectChangeBudget> lastBudgetList = changeBudgetMapper.selectList( List<ErpProjectChangeBudget> lastBudgetList = changeBudgetMapper.selectList(
@ -423,8 +424,8 @@ public class ErpProjectChangeServiceImpl implements IErpProjectChangeService {
// 设置申请变更日期为当前日期 // 设置申请变更日期为当前日期
vo.setApplyChangeDate(Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant())); vo.setApplyChangeDate(Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant()));
// 如果没有历史变更记录,从项目计划阶段和预算明细中初始化数据 // 如果进度明细未被初始化比如这是第1次变更或过去的所有变更发生时还没有建立项目计划阶段
if (changeCount == 0) { if (CollUtil.isEmpty(vo.getProgressList())) {
// 查询项目计划阶段,转换为进度变更明细 // 查询项目计划阶段,转换为进度变更明细
List<ErpProjectPlanStage> planStages = planStageMapper.selectList( List<ErpProjectPlanStage> planStages = planStageMapper.selectList(
Wrappers.<ErpProjectPlanStage>lambdaQuery() Wrappers.<ErpProjectPlanStage>lambdaQuery()
@ -447,8 +448,10 @@ public class ErpProjectChangeServiceImpl implements IErpProjectChangeService {
progressList.add(progress); progressList.add(progress);
} }
vo.setProgressList(progressList); vo.setProgressList(progressList);
}
// 查询项目预算明细,转换为预算变更明细 // 如果预算明细未被初始化比如这是第1次变更或者过去的所有变更发生时项目还没有做过预算
if (CollUtil.isEmpty(vo.getBudgetList())) {
List<ErpProjectChangeBudget> budgetList = new ArrayList<>(); List<ErpProjectChangeBudget> budgetList = new ArrayList<>();
if (budgetInfo != null) { if (budgetInfo != null) {
// 查询预算明细 // 查询预算明细
@ -707,12 +710,8 @@ public class ErpProjectChangeServiceImpl implements IErpProjectChangeService {
.orderByAsc(ErpProjectChangeBudget::getSortOrder) .orderByAsc(ErpProjectChangeBudget::getSortOrder)
)); ));
vo.setProgressList(changeProgressMapper.selectList( // 使用 selectProgressWithStageInfo 连表查询以带出 project_phases否则在 @TableField(exist = false) 下字段会为空导致前端显示为“未知”
Wrappers.lambdaQuery(ErpProjectChangeProgress.class) vo.setProgressList(changeProgressMapper.selectProgressWithStageInfo(vo.getProjectChangeId()));
.eq(ErpProjectChangeProgress::getProjectChangeId, vo.getProjectChangeId())
.eq(ErpProjectChangeProgress::getDelFlag, "0")
.orderByAsc(ErpProjectChangeProgress::getSortOrder)
));
voList.add(vo); voList.add(vo);
} }

@ -348,8 +348,6 @@
pi.manager_id as project_manager_id, pi.manager_id as project_manager_id,
pi.charge_id as dept_head_id, pi.charge_id as dept_head_id,
pi.deputy_id as responsible_vp_id, pi.deputy_id as responsible_vp_id,
pi.amount as contract_amount,
pi.amount as contract_net_amount,
u1.nick_name as project_manager_name, u1.nick_name as project_manager_name,
u2.nick_name as dept_head_name, u2.nick_name as dept_head_name,
u3.nick_name as responsible_vp_name u3.nick_name as responsible_vp_name

Loading…
Cancel
Save