diff --git a/src/main/java/com/xujie/sys/modules/sampletracking/controller/SampleProofTrackingController.java b/src/main/java/com/xujie/sys/modules/sampletracking/controller/SampleProofTrackingController.java index e3285dd1..0ba3aaa4 100644 --- a/src/main/java/com/xujie/sys/modules/sampletracking/controller/SampleProofTrackingController.java +++ b/src/main/java/com/xujie/sys/modules/sampletracking/controller/SampleProofTrackingController.java @@ -91,6 +91,17 @@ public class SampleProofTrackingController { } } + @PostMapping("/oneKeyUpdate") + public R oneKeyUpdate(@RequestBody ProofTrackingData data) { + try { + sampleProofTrackingService.oneKeyUpdateProjectPartAndTracking(data); + return R.ok("项目/物料/打样修改成功"); + } catch (Exception e) { + log.error("一键修改项目/物料/打样失败: {}", e.getMessage(), e); + return R.error("一键修改项目/物料/打样失败: " + e.getMessage()); + } + } + @PostMapping("/finishProofing") public R finishProofing(@RequestBody ProofTrackingData data) { try { diff --git a/src/main/java/com/xujie/sys/modules/sampletracking/mapper/SampleProofTrackingMapper.java b/src/main/java/com/xujie/sys/modules/sampletracking/mapper/SampleProofTrackingMapper.java index ab35efda..c2074e79 100644 --- a/src/main/java/com/xujie/sys/modules/sampletracking/mapper/SampleProofTrackingMapper.java +++ b/src/main/java/com/xujie/sys/modules/sampletracking/mapper/SampleProofTrackingMapper.java @@ -35,6 +35,8 @@ public interface SampleProofTrackingMapper { void updateTrackingComments(ProofTrackingData data); + void updateTrackingBaseInfo(ProofTrackingData data); + Integer countUnfinishedProcess(@Param("trackingId") Integer trackingId); void finishProofing(@Param("trackingId") Integer trackingId, diff --git a/src/main/java/com/xujie/sys/modules/sampletracking/service/SampleProofTrackingService.java b/src/main/java/com/xujie/sys/modules/sampletracking/service/SampleProofTrackingService.java index dd1fa45c..28014836 100644 --- a/src/main/java/com/xujie/sys/modules/sampletracking/service/SampleProofTrackingService.java +++ b/src/main/java/com/xujie/sys/modules/sampletracking/service/SampleProofTrackingService.java @@ -18,6 +18,8 @@ public interface SampleProofTrackingService { R oneKeyCreateProjectPartAndTracking(ProofTrackingData data); + void oneKeyUpdateProjectPartAndTracking(ProofTrackingData data); + R createProofRecord(ProofTrackingData data); void batchUpdatePlanDates(ProofTrackingBatchUpdateData data); diff --git a/src/main/java/com/xujie/sys/modules/sampletracking/service/impl/SampleProofTrackingServiceImpl.java b/src/main/java/com/xujie/sys/modules/sampletracking/service/impl/SampleProofTrackingServiceImpl.java index 5dd41e2e..aeb379d5 100644 --- a/src/main/java/com/xujie/sys/modules/sampletracking/service/impl/SampleProofTrackingServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/sampletracking/service/impl/SampleProofTrackingServiceImpl.java @@ -4,13 +4,17 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.xujie.sys.common.utils.PageUtils; import com.xujie.sys.common.utils.R; +import com.xujie.sys.modules.sampletracking.data.ProjectInfoTrackingData; +import com.xujie.sys.modules.sampletracking.data.ProjectPartTrackingData; import com.xujie.sys.modules.sampletracking.data.ProofTrackingBatchUpdateData; import com.xujie.sys.modules.sampletracking.data.ProofTrackingData; import com.xujie.sys.modules.sampletracking.data.ProofTrackingProcessLogData; import com.xujie.sys.modules.sampletracking.data.ProofTrackingProcessUpdateData; import com.xujie.sys.modules.sampletracking.mapper.SampleProofTrackingMapper; import com.xujie.sys.modules.sampletracking.service.SampleProofTrackingService; +import com.xujie.sys.modules.sampletracking.service.SampleTrackingService; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -30,6 +34,9 @@ public class SampleProofTrackingServiceImpl implements SampleProofTrackingServic @Autowired private SampleProofTrackingMapper sampleProofTrackingMapper; + @Autowired + private SampleTrackingService sampleTrackingService; + @Override public PageUtils searchProofTracking(ProofTrackingData data) { long page = data.getPage() <= 0 ? 1 : data.getPage(); @@ -286,6 +293,85 @@ public class SampleProofTrackingServiceImpl implements SampleProofTrackingServic sampleProofTrackingMapper.updateTrackingComments(data); } + @Override + @Transactional(rollbackFor = Exception.class) + public void oneKeyUpdateProjectPartAndTracking(ProofTrackingData data) { + if (data == null) { + throw new RuntimeException("修改参数不能为空"); + } + if (data.getProjectId() == null || data.getProjectPartId() == null || data.getTrackingId() == null) { + throw new RuntimeException("项目/物料/打样记录ID缺失,无法修改"); + } + // 单次提交时将项目、物料、打样更新放在同一事务内,任一失败即整体回滚。 + String operateUser = resolveOperateUser(data.getUpdateBy(), data.getCreateBy()); + ProofTrackingData oldData = sampleProofTrackingMapper.selectTrackingForProofing(data.getTrackingId()); + if (oldData == null) { + throw new RuntimeException("打样记录不存在"); + } + + ProjectInfoTrackingData projectInfoData = new ProjectInfoTrackingData(); + BeanUtils.copyProperties(data, projectInfoData); + if (isBlank(projectInfoData.getProjectName()) && !isBlank(projectInfoData.getProjectDesc())) { + projectInfoData.setProjectName(projectInfoData.getProjectDesc().trim()); + } + if (isBlank(projectInfoData.getProjectDesc()) && !isBlank(projectInfoData.getProjectName())) { + projectInfoData.setProjectDesc(projectInfoData.getProjectName().trim()); + } + projectInfoData.setStatus(isBlank(data.getProjectStatus()) ? "草稿" : data.getProjectStatus().trim()); + projectInfoData.setPriority(data.getPriorityLevel()); + projectInfoData.setUpdateBy(operateUser); + sampleTrackingService.updateProjectInfoTracking(projectInfoData); + + ProjectPartTrackingData projectPartData = new ProjectPartTrackingData(); + BeanUtils.copyProperties(data, projectPartData); + projectPartData.setStatus(isBlank(data.getPartStatus()) ? "草稿" : data.getPartStatus().trim()); + projectPartData.setPriority(data.getPriorityLevel()); + projectPartData.setUpdateBy(operateUser); + sampleTrackingService.updateProjectPartTracking(projectPartData); + + updateTrackingBaseInfo(data, oldData, operateUser); + } + + private void updateTrackingBaseInfo(ProofTrackingData data, ProofTrackingData oldData, String operateUser) { + String site = isBlank(data.getSite()) ? oldData.getSite() : data.getSite(); + String proofingNo = isBlank(data.getProofingNo()) ? oldData.getProofingNo() : data.getProofingNo().trim(); + if (data.getProofingNumber() != null && data.getProofingNumber() <= 0) { + throw new RuntimeException("数量必须是正整数"); + } + if (!isBlank(proofingNo)) { + ProofTrackingData exists = sampleProofTrackingMapper.selectProofingByNo(proofingNo, site); + if (exists != null && !Objects.equals(exists.getProofingId(), data.getTrackingId())) { + throw new RuntimeException("打样单号已存在: " + proofingNo); + } + } + + ProofTrackingData updateData = new ProofTrackingData(); + updateData.setTrackingId(data.getTrackingId()); + updateData.setProjectPhase(isBlank(data.getProjectPhase()) ? oldData.getProjectPhase() : data.getProjectPhase().trim()); + updateData.setProjectCategory(isBlank(data.getProjectCategory()) ? oldData.getProjectCategory() : data.getProjectCategory().trim()); + updateData.setProofingNo(proofingNo); + updateData.setProofingStatus(isBlank(data.getProofingStatus()) ? oldData.getProofingStatus() : data.getProofingStatus().trim()); + updateData.setProofingNumber(data.getProofingNumber() == null ? oldData.getProofingNumber() : data.getProofingNumber()); + updateData.setPlanStartDate(data.getPlanStartDate() == null ? oldData.getPlanStartDate() : data.getPlanStartDate()); + updateData.setRequiredDeliveryDate(data.getRequiredDeliveryDate() == null ? oldData.getRequiredDeliveryDate() : data.getRequiredDeliveryDate()); + updateData.setTracker(isBlank(data.getTracker()) ? oldData.getTracker() : data.getTracker().trim()); + updateData.setEngineer(isBlank(data.getEngineer()) ? oldData.getEngineer() : data.getEngineer().trim()); + updateData.setPriorityLevel(isBlank(data.getPriorityLevel()) ? oldData.getPriorityLevel() : data.getPriorityLevel().trim()); + updateData.setRemark(data.getRemark()); + updateData.setUpdateBy(operateUser); + + if (isBlank(updateData.getProjectPhase())) { + updateData.setProjectPhase("Sample"); + } + if (isBlank(updateData.getProofingStatus())) { + updateData.setProofingStatus("草稿"); + } + if (updateData.getProofingNumber() == null || updateData.getProofingNumber() <= 0) { + updateData.setProofingNumber(1); + } + sampleProofTrackingMapper.updateTrackingBaseInfo(updateData); + } + @Override @Transactional(rollbackFor = Exception.class) public void finishProofing(ProofTrackingData data) { diff --git a/src/main/resources/mapper/sampletracking/SampleProofTrackingMapper.xml b/src/main/resources/mapper/sampletracking/SampleProofTrackingMapper.xml index 685b9e87..2eb5f90c 100644 --- a/src/main/resources/mapper/sampletracking/SampleProofTrackingMapper.xml +++ b/src/main/resources/mapper/sampletracking/SampleProofTrackingMapper.xml @@ -12,7 +12,9 @@ t.proofing_no, t.proofing_status, t.project_phase, - t.project_category, + COALESCE(NULLIF(LTRIM(RTRIM(t.project_category)), ''), + NULLIF(LTRIM(RTRIM(pp.project_category)), ''), + NULLIF(LTRIM(RTRIM(p.project_category)), '')) AS project_category, t.tracker, t.engineer, t.priority_level, @@ -70,7 +72,6 @@ p.project_desc, p.customer_no, p.bu_no, - p.project_category, p.c_project_region, p.project_manager, p.project_owner, @@ -463,6 +464,24 @@ WHERE id = #{trackingId} + + UPDATE plm_proofing_information_tracking + SET project_phase = #{projectPhase}, + project_category = #{projectCategory}, + proofing_no = #{proofingNo}, + proofing_status = #{proofingStatus}, + proofing_number = #{proofingNumber}, + plan_start_date = #{planStartDate,jdbcType=DATE}, + required_delivery_date = #{requiredDeliveryDate,jdbcType=DATE}, + tracker = #{tracker}, + engineer = #{engineer}, + priority_level = #{priorityLevel}, + remark = #{remark,jdbcType=NVARCHAR}, + update_date = GETDATE(), + update_by = #{updateBy} + WHERE id = #{trackingId} + + UPDATE plm_proofing_information_tracking SET comments = #{comments,jdbcType=NVARCHAR}, @@ -481,7 +500,9 @@ t.proofing_no, t.proofing_status, t.project_phase, - t.project_category, + COALESCE(NULLIF(LTRIM(RTRIM(t.project_category)), ''), + NULLIF(LTRIM(RTRIM(pp.project_category)), ''), + NULLIF(LTRIM(RTRIM(p.project_category)), '')) AS project_category, t.tracker, t.engineer, t.priority_level, @@ -539,7 +560,6 @@ p.project_desc, p.customer_no, p.bu_no, - p.project_category, pp.test_part_no, pp.part_desc, pp.final_part_no @@ -559,7 +579,9 @@ t.proofing_no, t.proofing_status, t.project_phase, - t.project_category, + COALESCE(NULLIF(LTRIM(RTRIM(t.project_category)), ''), + NULLIF(LTRIM(RTRIM(pp.project_category)), ''), + NULLIF(LTRIM(RTRIM(p.project_category)), '')) AS project_category, t.tracker, t.engineer, t.priority_level, @@ -617,7 +639,6 @@ p.project_desc, p.customer_no, p.bu_no, - p.project_category, pp.test_part_no, pp.part_desc, pp.final_part_no