diff --git a/src/main/java/com/xujie/sys/modules/pms/service/Impl/EamProjectServiceImpl.java b/src/main/java/com/xujie/sys/modules/pms/service/Impl/EamProjectServiceImpl.java index 14acf12d..90c43006 100644 --- a/src/main/java/com/xujie/sys/modules/pms/service/Impl/EamProjectServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/pms/service/Impl/EamProjectServiceImpl.java @@ -26,6 +26,7 @@ import com.xujie.sys.common.utils.PageUtils; import com.xujie.sys.modules.pms.service.EamProjectService; import com.xujie.sys.modules.pms.util.ResponseData; import com.xujie.sys.modules.pms.mapper.EamProjectMapper; +import com.xujie.sys.modules.sampletracking.mapper.SampleTrackingMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -93,6 +94,9 @@ public class EamProjectServiceImpl implements EamProjectService { @Autowired ProofingInformationServiceImpl proofingInformationService; + @Autowired + private SampleTrackingMapper sampleTrackingMapper; + @Override public PageUtils eamProjectSearch(EamProjectInfoData inData){ IPage eamProjectList = this.EamProjectMapper.eamProjectSearch(new Page(inData.getPage(), inData.getLimit()), inData); @@ -155,6 +159,8 @@ public class EamProjectServiceImpl implements EamProjectService { } } EamProjectMapper.eamProjectEdit(inData); + // 已互通时(tracking.id = NPI.id)把本次项目修改同步到 tracking,避免两边主档漂移。 + //syncAlignedProjectInfoTracking(inData.getProjectId(), inData.getUpdateBy()); responseData.setMsg("修改成功!"); responseData.setSuccess(true); responseData.setCode("0"); @@ -273,6 +279,8 @@ public class EamProjectServiceImpl implements EamProjectService { throw new RuntimeException("当前项目下已存在相同的项目料号!"); } else { EamProjectMapper.eamProjectPartInfoEdit(inData); + // 已互通时(tracking.id = NPI.id)把本次物料修改同步到 tracking。 + //syncAlignedProjectPartTracking(inData.getProjectPartId(), inData.getUpdateBy()); } if(Objects.equals(inData.getStatus2(), "进行中")) { @@ -312,6 +320,8 @@ public class EamProjectServiceImpl implements EamProjectService { throw new RuntimeException("当前项目下已存在相同的项目料号!"); } else { EamProjectMapper.eamProjectPartInfoEdit(inData); + // 取消转量产同样走物料编辑,已互通时继续回写 tracking。 + //syncAlignedProjectPartTracking(inData.getProjectPartId(), inData.getUpdateBy()); } // 通过存储过程查询当前part下所有转量产文档 @@ -1441,4 +1451,26 @@ public class EamProjectServiceImpl implements EamProjectService { mailRecord.setType("自动提醒"); qcMapper.saveSendMailRecord(mailRecord); } + + private void syncAlignedProjectInfoTracking(Integer projectId, String updateBy) { + if (projectId == null) { + return; + } + // 互通判定就是 tracking 与 NPI 使用同一主键;INNER JOIN 未命中时不更新未互通记录。 + int syncedRows = sampleTrackingMapper.updateProjectInfoTrackingFromNpi(projectId, updateBy); + if (syncedRows > 0) { + logger.info("NPI项目信息已同步到tracking: projectId={}, updateBy={}, rows={}", projectId, updateBy, syncedRows); + } + } + + private void syncAlignedProjectPartTracking(Integer projectPartId, String updateBy) { + if (projectPartId == null) { + return; + } + // 物料互通同样按主键对齐;未互通的 tracking 物料继续独立维护。 + int syncedRows = sampleTrackingMapper.updateProjectPartTrackingFromNpi(projectPartId, updateBy); + if (syncedRows > 0) { + logger.info("NPI项目物料已同步到tracking: projectPartId={}, updateBy={}, rows={}", projectPartId, updateBy, syncedRows); + } + } } diff --git a/src/main/java/com/xujie/sys/modules/sampletracking/mapper/SampleTrackingMapper.java b/src/main/java/com/xujie/sys/modules/sampletracking/mapper/SampleTrackingMapper.java index a9935bcf..780b993a 100644 --- a/src/main/java/com/xujie/sys/modules/sampletracking/mapper/SampleTrackingMapper.java +++ b/src/main/java/com/xujie/sys/modules/sampletracking/mapper/SampleTrackingMapper.java @@ -56,6 +56,9 @@ public interface SampleTrackingMapper { void updateNpiProjectFromTracking(ProjectInfoTrackingData data); + int updateProjectInfoTrackingFromNpi(@Param("projectId") Integer projectId, + @Param("updateBy") String updateBy); + Integer existsProjectInfoTrackingId(@Param("projectId") Integer projectId); Integer selectNextProjectInfoTrackingId(); @@ -80,6 +83,9 @@ public interface SampleTrackingMapper { void updateNpiProjectPartFromTracking(ProjectPartTrackingData data); + int updateProjectPartTrackingFromNpi(@Param("projectPartId") Integer projectPartId, + @Param("updateBy") String updateBy); + Integer existsProjectPartTrackingId(@Param("projectPartId") Integer projectPartId); Integer selectNextProjectPartTrackingId(); diff --git a/src/main/resources/mapper/sampletracking/SampleProofTrackingMapper.xml b/src/main/resources/mapper/sampletracking/SampleProofTrackingMapper.xml index f81111c8..576dc99d 100644 --- a/src/main/resources/mapper/sampletracking/SampleProofTrackingMapper.xml +++ b/src/main/resources/mapper/sampletracking/SampleProofTrackingMapper.xml @@ -109,6 +109,23 @@ and UPPER(t.proofing_no) like '%' + UPPER(#{query.proofingNo}) + '%' + + and p.c_project_region = #{query.cProjectRegion} + + + and UPPER(LTRIM(RTRIM(ISNULL(t.engineer, '')))) = UPPER(LTRIM(RTRIM(#{query.engineer}))) + + + and UPPER(LTRIM(RTRIM(ISNULL(pp.project_manager, '')))) = UPPER(LTRIM(RTRIM(#{query.projectManager}))) + + + + and UPPER(LTRIM(RTRIM(COALESCE( + NULLIF(LTRIM(RTRIM(pp.project_owner)), ''), + NULLIF(LTRIM(RTRIM(p.project_owner)), ''), + '' + )))) = UPPER(LTRIM(RTRIM(#{query.pic}))) + and t.proofing_status in diff --git a/src/main/resources/mapper/sampletracking/SampleTrackingMapper.xml b/src/main/resources/mapper/sampletracking/SampleTrackingMapper.xml index 58468695..1c6e6637 100644 --- a/src/main/resources/mapper/sampletracking/SampleTrackingMapper.xml +++ b/src/main/resources/mapper/sampletracking/SampleTrackingMapper.xml @@ -394,6 +394,50 @@ WHERE id = #{projectId} + + + UPDATE t + SET t.project_no = p.project_no, + t.project_category = p.project_category, + t.project_name = p.project_name, + t.status = p.status, + t.project_source = p.project_source, + t.customer_no = p.customer_no, + t.priority = p.priority, + t.site = p.site, + t.project_desc = p.project_desc, + t.customer_remark = p.customer_remark, + t.remark = p.remark, + t.need_date = p.need_date, + t.bu_no = p.bu_no, + t.parent_project_no = p.parent_project_no, + t.final_customer_id = p.final_customer_id, + t.c_project_region = p.c_project_region, + t.project_manager = p.project_manager, + t.project_owner = p.project_owner, + t.c_project_build_date = p.c_project_build_date, + t.c_quality_engineer1 = p.c_quality_engineer1, + t.c_quality_engineer2 = p.c_quality_engineer2, + t.c_quality_engineer3 = p.c_quality_engineer3, + t.c_manufacture_engineer = p.c_manufacture_engineer, + t.project_close_date = p.project_close_date, + t.project_creation_date = p.project_creation_date, + t.engineer = p.engineer, + t.ori_project_id = p.ori_project_id, + t.doc_engineer = p.doc_engineer, + t.c_quality_engineer4 = p.c_quality_engineer4, + t.c_quality_engineer5 = p.c_quality_engineer5, + t.c_quality_engineer6 = p.c_quality_engineer6, + t.ipqc_hard_tag = p.ipqc_hard_tag, + t.c_quality_engineer7 = p.c_quality_engineer7, + t.doc_engineer2 = p.doc_engineer2, + t.update_date = GETDATE(), + t.update_by = #{updateBy} + FROM plm_project_info_tracking t + INNER JOIN plm_project_info p ON p.id = t.id + WHERE t.id = #{projectId} + + SELECT TOP 1 id FROM plm_project_part_tracking