Browse Source

撤回

ecss-tx
han\hanst 3 weeks ago
parent
commit
7a1e17aca4
  1. 5
      src/main/java/com/xujie/sys/modules/sampletracking/mapper/SampleProofTrackingMapper.java
  2. 55
      src/main/java/com/xujie/sys/modules/sampletracking/service/impl/SampleProofTrackingServiceImpl.java
  3. 9
      src/main/resources/mapper/sampletracking/SampleProofTrackingMapper.xml

5
src/main/java/com/xujie/sys/modules/sampletracking/mapper/SampleProofTrackingMapper.java

@ -74,6 +74,11 @@ public interface SampleProofTrackingMapper {
@Param("actualityDeliveryDate") Date actualityDeliveryDate,
@Param("updateBy") String updateBy);
int updateTrackingProofingStatusAndActualityDate(@Param("trackingId") Integer trackingId,
@Param("proofingStatus") String proofingStatus,
@Param("actualityDeliveryDate") Date actualityDeliveryDate,
@Param("updateBy") String updateBy);
void deleteProofTrackingLogByTrackingId(@Param("trackingId") Integer trackingId);
void deleteProcessValuesByTrackingId(@Param("trackingId") Integer trackingId);

55
src/main/java/com/xujie/sys/modules/sampletracking/service/impl/SampleProofTrackingServiceImpl.java

@ -64,6 +64,9 @@ public class SampleProofTrackingServiceImpl implements SampleProofTrackingServic
private static final String DEFAULT_PROCESS_CONFIG_BU = "*";
private static final String DELIVERY_PACKAGE_PROCESS_CODE = "deliveryPackage";
private static final String DELIVERY_PACKAGE_PROCESS_NAME = "Delivery&Package";
private static final String TRACKING_PROOFING_STATUS_IN_PROGRESS = "进行中";
private static final String TRACKING_PROOFING_STATUS_FINISHED = "打样完成";
private static final String NPI_PROOFING_STATUS_FINISHED = "完成";
private static final int NPI_ID_THRESHOLD = 100000;
/**
@ -931,6 +934,9 @@ public class SampleProofTrackingServiceImpl implements SampleProofTrackingServic
if (isCompletedStatus(status)) {
Date completionDate = resolveDeliveryPackageCompletionDate(newValue, data.getActualDate(), trackingData.getActualityDeliveryDate());
markProofingCompletedAndSyncNpi(trackingData, completionDate, updateBy);
} else {
// 误点已完成时允许从 Delivery&Package 回退避免整单长期锁死在打样完成态
rollbackProofingCompletedAndSyncNpi(trackingData, updateBy);
}
}
}
@ -1135,7 +1141,9 @@ public class SampleProofTrackingServiceImpl implements SampleProofTrackingServic
if (isBlank(normalizedStatus) || "未完成".equals(normalizedStatus) || "进行中".equals(normalizedStatus)) {
return false;
}
if ("已完成".equals(normalizedStatus) || "打样完成".equals(normalizedStatus) || "完成".equals(normalizedStatus)) {
if ("已完成".equals(normalizedStatus)
|| TRACKING_PROOFING_STATUS_FINISHED.equals(normalizedStatus)
|| NPI_PROOFING_STATUS_FINISHED.equals(normalizedStatus)) {
return true;
}
return normalizedStatus.contains("完成") && !normalizedStatus.contains("未");
@ -1169,7 +1177,7 @@ public class SampleProofTrackingServiceImpl implements SampleProofTrackingServic
}
int syncedRows = sampleTrackingMapper.updateNpiProofingStatusAndActualityDate(
npiProofingId,
"完成",
NPI_PROOFING_STATUS_FINISHED,
completionDate,
updateBy
);
@ -1178,6 +1186,49 @@ public class SampleProofTrackingServiceImpl implements SampleProofTrackingServic
}
}
private void rollbackProofingCompletedAndSyncNpi(ProofTrackingData trackingData,
String updateBy) {
if (trackingData == null || trackingData.getTrackingId() == null) {
throw new RuntimeException("跟踪记录不存在,无法撤回打样完成");
}
if (!isTrackingProofingCompleted(trackingData.getProofingStatus())) {
return;
}
int trackingUpdatedRows = sampleProofTrackingMapper.updateTrackingProofingStatusAndActualityDate(
trackingData.getTrackingId(),
TRACKING_PROOFING_STATUS_IN_PROGRESS,
null,
updateBy
);
if (trackingUpdatedRows <= 0) {
throw new RuntimeException("撤回打样完成失败,跟踪记录不存在");
}
Integer npiProofingId = resolveNpiProofingIdForAutoComplete(trackingData);
if (npiProofingId == null) {
// 历史未同步到 NPI 的记录允许仅回退 tracking避免误点后无法恢复
return;
}
int syncedRows = sampleTrackingMapper.updateNpiProofingStatusAndActualityDate(
npiProofingId,
TRACKING_PROOFING_STATUS_IN_PROGRESS,
null,
updateBy
);
if (syncedRows <= 0) {
throw new RuntimeException("撤回NPI打样状态失败,请先确认NPI打样单是否存在");
}
}
private boolean isTrackingProofingCompleted(String proofingStatus) {
if (isBlank(proofingStatus)) {
return false;
}
String normalizedStatus = proofingStatus.trim();
return TRACKING_PROOFING_STATUS_FINISHED.equals(normalizedStatus)
|| "已完成".equals(normalizedStatus)
|| NPI_PROOFING_STATUS_FINISHED.equals(normalizedStatus);
}
private Integer resolveNpiProofingIdForAutoComplete(ProofTrackingData trackingData) {
if (trackingData == null) {
return null;

9
src/main/resources/mapper/sampletracking/SampleProofTrackingMapper.xml

@ -472,6 +472,15 @@
WHERE id = #{trackingId}
</update>
<update id="updateTrackingProofingStatusAndActualityDate">
UPDATE plm_proofing_information_tracking
SET proofing_status = #{proofingStatus},
actuality_delivery_date = #{actualityDeliveryDate,jdbcType=DATE},
update_date = GETDATE(),
update_by = #{updateBy}
WHERE id = #{trackingId}
</update>
<delete id="deleteProofTrackingLogByTrackingId">
DELETE FROM plm_proofing_information_tracking_log
WHERE tracking_id = #{trackingId}

Loading…
Cancel
Save