fix(lastleg): repair dispatch cancellation and return execution contracts
This commit is contained in:
+10
-2
@@ -52,6 +52,7 @@ public class CustomerVisitService {
|
||||
@Resource private LastlegInboundOrderMapper inboundOrders;
|
||||
@Resource private CustomerVisitFileGateway files;
|
||||
@Resource private ObjectMapper objectMapper;
|
||||
@Resource private com.baiyue.lastleg.delivery.repository.DeliveryExecutionRepository deliveryExecution;
|
||||
|
||||
public CustomerVisitResponses.Page page(String scopedCustomerId, CustomerVisitRequests.Query query) {
|
||||
String customerId = customerScope(scopedCustomerId, query.customerId());
|
||||
@@ -76,6 +77,7 @@ public class CustomerVisitService {
|
||||
return detail(visit);
|
||||
}
|
||||
|
||||
/** 人工派送动作必须在真实出库后执行,取消统一走出库聚合命令。 */
|
||||
@Transactional
|
||||
public CustomerVisitResponses.Completed updateDeliveryStatus(String customerId, String operatorId,
|
||||
String deliveryNo,
|
||||
@@ -84,8 +86,14 @@ public class CustomerVisitService {
|
||||
if (!DeliveryStatusPolicy.isEditableTarget(target)) {
|
||||
throw badRequest("不支持的派送状态");
|
||||
}
|
||||
DeliveryOrder delivery = deliveryOrders.lockByNo(customerId, deliveryNo);
|
||||
var observed = deliveryExecution.findDelivery(customerId, deliveryNo);
|
||||
if (observed == null) throw notFound("派送单不存在");
|
||||
// 不反向申请排车锁;按出库→派送顺序与取消、发车串行。
|
||||
var outbound = deliveryExecution.lockOutbound(customerId, observed.getOutboundNo());
|
||||
DeliveryOrder delivery = deliveryExecution.lockDelivery(customerId, deliveryNo);
|
||||
if (delivery == null) throw notFound("派送单不存在");
|
||||
if (!com.baiyue.lastleg.delivery.service.DeliveryExecutionGuard.matches(delivery, outbound))
|
||||
throw conflict("派送尚未实际出库,不能开始派送或拒签");
|
||||
if (target.equals(delivery.getStatus())) {
|
||||
CustomerVisit existing = visits.findByDelivery(customerId, delivery.getId());
|
||||
return new CustomerVisitResponses.Completed(existing == null ? null : existing.getId(), deliveryNo,
|
||||
@@ -99,7 +107,7 @@ public class CustomerVisitService {
|
||||
if ("DELIVERING".equals(target) && delivery.getDispatchedAt() == null) delivery.setDispatchedAt(now);
|
||||
delivery.setUpdatedAt(now);
|
||||
delivery.setVersion(version(delivery) + 1);
|
||||
deliveryOrders.updateById(delivery);
|
||||
deliveryExecution.save(delivery);
|
||||
String result = "派送状态由 " + from + " 修改为 " + target;
|
||||
if (StringUtils.hasText(request.remark())) result += ",备注:" + trim(request.remark());
|
||||
recordOperation(delivery, operatorId, "UPDATE_DELIVERY_STATUS", result, now);
|
||||
|
||||
Reference in New Issue
Block a user