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}
+
+