fix: 追加数量后重新打开已完成作业

This commit is contained in:
zhouz
2026-08-14 17:28:33 +08:00
parent 80f5ddf87e
commit 1dd1f11384
3 changed files with 35 additions and 4 deletions

View File

@@ -97,6 +97,12 @@ public interface DailyPlanMapper extends BaseMapperX<DailyPlanDO> {
/** 原子确认数量并开始未开始订单。 */ /** 原子确认数量并开始未开始订单。 */
int startOrderWithVersion(@Param("plan") DailyPlanDO plan); int startOrderWithVersion(@Param("plan") DailyPlanDO plan);
/** 原子追加需求数量,并重新打开已经完成的备货、套管作业。 */
int appendQuantityWithVersion(@Param("dailyPlanId") Long dailyPlanId,
@Param("appendQty") Integer appendQty,
@Param("version") Integer version,
@Param("updater") String updater);
/** /**
* 乐观锁恢复已取消的订单状态,并清空前一订单状态。 * 乐观锁恢复已取消的订单状态,并清空前一订单状态。
*/ */

View File

@@ -400,11 +400,21 @@ public class DailyPlanServiceImpl implements DailyPlanService {
public void appendQuantity(DailyPlanAppendReqVO reqVO) { public void appendQuantity(DailyPlanAppendReqVO reqVO) {
DailyPlanDO current = validateVersion(reqVO.getId(), reqVO.getVersion()); DailyPlanDO current = validateVersion(reqVO.getId(), reqVO.getVersion());
validateOrderStatus(current, DailyPlanOrderStatusEnum.IN_PROGRESS, "追加数量"); validateOrderStatus(current, DailyPlanOrderStatusEnum.IN_PROGRESS, "追加数量");
DailyPlanDO update = newUpdate(current); Integer appendQty = safeAddQuantity(current.getAppendQty(), reqVO.getAppendQty());
update.setAppendQty(safeAddQuantity(current.getAppendQty(), reqVO.getAppendQty())); checkAffected(dailyPlanMapper.appendQuantityWithVersion(current.getDailyPlanId(), reqVO.getAppendQty(),
checkAffected(dailyPlanMapper.updateStateWithVersion(update)); current.getVersion(), String.valueOf(getLoginUserId())));
insertLog(current.getDailyPlanId(), TARGET_QUANTITY, TYPE_APPEND, String.valueOf(current.getAppendQty()), insertLog(current.getDailyPlanId(), TARGET_QUANTITY, TYPE_APPEND, String.valueOf(current.getAppendQty()),
String.valueOf(update.getAppendQty()), reqVO.getAppendQty(), null); String.valueOf(appendQty), reqVO.getAppendQty(), null);
if (DailyPlanWorkStatusEnum.COMPLETED.getCode().equals(current.getStockingStatus())) {
insertLog(current.getDailyPlanId(), TARGET_STOCKING, TYPE_RESTORE,
String.valueOf(current.getStockingStatus()),
String.valueOf(DailyPlanWorkStatusEnum.IN_PROGRESS.getCode()), null, "追加数量,重新开始备货");
}
if (DailyPlanWorkStatusEnum.COMPLETED.getCode().equals(current.getSleevingStatus())) {
insertLog(current.getDailyPlanId(), TARGET_SLEEVING, TYPE_RESTORE,
String.valueOf(current.getSleevingStatus()),
String.valueOf(DailyPlanWorkStatusEnum.IN_PROGRESS.getCode()), null, "追加数量,重新开始套管");
}
} }
/** 开始备货。 */ /** 开始备货。 */

View File

@@ -264,6 +264,21 @@
AND deleted = b'0' AND deleted = b'0'
</update> </update>
<update id="appendQuantityWithVersion">
UPDATE lms_daily_plan
SET stocking_complete_time = CASE WHEN stocking_status = 2 THEN NULL ELSE stocking_complete_time END,
sleeving_complete_time = CASE WHEN sleeving_status = 2 THEN NULL ELSE sleeving_complete_time END,
stocking_status = CASE WHEN stocking_status = 2 THEN 1 ELSE stocking_status END,
sleeving_status = CASE WHEN sleeving_status = 2 THEN 1 ELSE sleeving_status END,
append_qty = append_qty + #{appendQty},
updater = #{updater},
version = version + 1
WHERE daily_plan_id = #{dailyPlanId}
AND version = #{version}
AND order_status = 1
AND deleted = b'0'
</update>
<update id="updateSortWithVersion"> <update id="updateSortWithVersion">
UPDATE lms_daily_plan UPDATE lms_daily_plan
SET sort_seq = #{sortSeq}, updater = #{updater}, version = version + 1 SET sort_seq = #{sortSeq}, updater = #{updater}, version = version + 1