From 5509c2484ff4f74aa051b72582b852f7264d3b62 Mon Sep 17 00:00:00 2001 From: fengyuan_yang <1976974459@qq.com> Date: Wed, 9 Sep 2026 11:02:59 +0800 Subject: [PATCH] =?UTF-8?q?2026-09-08=20=E9=A1=B9=E7=9B=AE=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E5=A2=9E=E5=8A=A0oa=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/PartInformationServiceImpl.java | 56 +++++++++++++++++++ .../modules/project/dao/ProjectDao.java | 4 ++ .../service/impl/ProjectServiceImpl.java | 25 +++++++++ .../resources/mapper/project/ProjectDao.xml | 13 +++++ 4 files changed, 98 insertions(+) diff --git a/src/main/java/com/spring/modules/part/service/impl/PartInformationServiceImpl.java b/src/main/java/com/spring/modules/part/service/impl/PartInformationServiceImpl.java index 76128e91..3f1a528f 100644 --- a/src/main/java/com/spring/modules/part/service/impl/PartInformationServiceImpl.java +++ b/src/main/java/com/spring/modules/part/service/impl/PartInformationServiceImpl.java @@ -53,6 +53,7 @@ import com.spring.modules.part.service.PartInformationService; import com.spring.modules.part.util.UtilsClass; import com.spring.modules.part.vo.*; import com.spring.modules.project.data.PlmProjectPartData; +import com.spring.modules.project.dao.ProjectDao; import com.spring.modules.proofing.mapper.ProofingInformationMapper; import com.spring.modules.proofing.service.ProofingInformationService; import com.spring.modules.proofing.vo.ProofingInformationVo; @@ -171,6 +172,9 @@ public class PartInformationServiceImpl extends ServiceImpl addProjectPart(PlmProjectPartData data) { List partList = data.getPartList().stream().map(a -> { a.setProjectId(data.getProjectId()); @@ -2895,6 +2901,8 @@ public class PartInformationServiceImpl extends ServiceImpl row1 = partInformationMapper.getProjectPartList1(data); List row2 = partInformationMapper.getProjectPartList2(data); HashMap map = new HashMap<>(); @@ -2919,6 +2927,8 @@ public class PartInformationServiceImpl extends ServiceImpl customerPartToAdd = partList.stream() @@ -5657,6 +5667,52 @@ public class PartInformationServiceImpl extends ServiceImpl partList) { + if (data != null && StringUtils.hasText(data.getSite())) { + return data.getSite(); + } + if (partList != null) { + for (PartInformationVo part : partList) { + if (part != null && StringUtils.hasText(part.getSite())) { + return part.getSite(); + } + } + } + return null; + } + + private boolean containsTemporaryPart(String site, List partList) { + if (partList == null || partList.isEmpty()) { + return false; + } + for (PartInformationVo part : partList) { + if (isTemporaryPart(site, part)) { + return true; + } + } + return false; + } + + private boolean isTemporaryPart(String site, PartInformationVo part) { + if (part == null) { + return false; + } + String status = part.getStatus(); + if (!StringUtils.hasText(status) && StringUtils.hasText(site) && StringUtils.hasText(part.getPartNo())) { + PartInformationEntity dbPart = partInformationMapper.selectOne( + new QueryWrapper().eq("site", site).eq("part_no", part.getPartNo())); + status = dbPart == null ? null : dbPart.getStatus(); + } + return "N".equals(status); + } + + private void resetCompletedProjectIfTemporaryPartAdded(String site, String projectId, String updateBy, boolean hasTemporaryPart) { + if (!hasTemporaryPart || !StringUtils.hasText(site) || !StringUtils.hasText(projectId)) { + return; + } + projectDao.resetCompletedProjectToDraft(site, projectId, updateBy); + } + } diff --git a/src/main/java/com/spring/modules/project/dao/ProjectDao.java b/src/main/java/com/spring/modules/project/dao/ProjectDao.java index a9a74bd3..59f529e9 100644 --- a/src/main/java/com/spring/modules/project/dao/ProjectDao.java +++ b/src/main/java/com/spring/modules/project/dao/ProjectDao.java @@ -285,4 +285,8 @@ public interface ProjectDao extends BaseMapper { @Param("projectId") String projectId, @Param("status") String status, @Param("updateBy") String updateBy); + + int resetCompletedProjectToDraft(@Param("site") String site, + @Param("projectId") String projectId, + @Param("updateBy") String updateBy); } diff --git a/src/main/java/com/spring/modules/project/service/impl/ProjectServiceImpl.java b/src/main/java/com/spring/modules/project/service/impl/ProjectServiceImpl.java index 0fe23265..a56cd526 100644 --- a/src/main/java/com/spring/modules/project/service/impl/ProjectServiceImpl.java +++ b/src/main/java/com/spring/modules/project/service/impl/ProjectServiceImpl.java @@ -742,6 +742,7 @@ public class ProjectServiceImpl implements ProjectService { if (!StringUtils.hasText(menuId)) { throw new RuntimeException("菜单ID不能为空"); } + validateManagerRequiredFields(site, projectId, project); int issueLocked = projectDao.lockIssue(site, projectId); if (issueLocked <= 0) { @@ -812,6 +813,8 @@ public class ProjectServiceImpl implements ProjectService { projectDao.deletePlmProjectTeam(data); projectDao.deleteUserRoleList(data); saveProjectTeamAndRole(data); + PlmProjectInfo afterSave = projectDao.getProjectData(site, projectId); + validateManagerRequiredFields(site, projectId, afterSave == null ? current : afterSave); if (!Boolean.TRUE.equals(dataUrlOa)) { projectDao.updateProjectStatus(site, projectId, "已完成", userName); @@ -1042,6 +1045,28 @@ public class ProjectServiceImpl implements ProjectService { return oaIdList.length() > 0 ? oaIdList.substring(0, oaIdList.length() - 1) : ""; } + private void validateManagerRequiredFields(String site, String projectId, PlmProjectInfo project) { + List operatorList = projectDao.selectProjectTeam(site, projectId); + boolean hasManager = operatorList != null && operatorList.stream() + .anyMatch(item -> "manager".equals(item.getType()) && StringUtils.hasText(item.getOperatorId())); + if (!hasManager) { + return; + } + List missing = new ArrayList<>(); + if (project == null || project.getProjectAmount() == null) { + missing.add("项目年销售额"); + } + if (project == null || !StringUtils.hasText(project.getFinalCustomerId())) { + missing.add("直接客户"); + } + if (project == null || !StringUtils.hasText(project.getCustomerRemark())) { + missing.add("客户应用/要求"); + } + if (!missing.isEmpty()) { + throw new RuntimeException("项目经理不为空时," + String.join("、", missing) + "不能为空值"); + } + } + private void handleSubmitRollback(ParamData paramData, Exception e) { DoForceDrawBackParam doForceDrawBackParam = new DoForceDrawBackParam(); doForceDrawBackParam.setUserId(paramData.getUserId()); diff --git a/src/main/resources/mapper/project/ProjectDao.xml b/src/main/resources/mapper/project/ProjectDao.xml index 76d6966c..32cf1019 100644 --- a/src/main/resources/mapper/project/ProjectDao.xml +++ b/src/main/resources/mapper/project/ProjectDao.xml @@ -1013,4 +1013,17 @@ customer_project_no,productSet,project_amount,step_id,reject_flag,reject_step_id where site = #{site} and project_id = #{projectId} + + + update plm_project_info + set status = '草稿', + step_id = 10, + reject_flag = 'N', + reject_step_id = null, + update_by = #{updateBy}, + update_date = GetDate() + where site = #{site} + and project_id = #{projectId} + and status = '已完成' +