fix: require dedicated appointment cancellation command

This commit is contained in:
2026-10-11 14:14:51 +08:00
parent 43494cbfa3
commit 29b562ebf5
4 changed files with 32 additions and 4 deletions
@@ -95,14 +95,15 @@ public class InboundFbaAppointmentService {
}
@Transactional(isolation=org.springframework.transaction.annotation.Isolation.READ_COMMITTED)
public FbaAppointmentResponse update(String operatorId,String appointmentNo,UpdateFbaAppointmentRequest request) {
if ("CANCELLED".equals(status(request.details().appointmentStatus()))) throw bad("取消预约请使用取消操作并填写实际取消原因");
return command("UPDATE:"+appointmentNo,operatorId,request.idempotencyKey(),request,()->{
var appointment=find(appointmentNo,true);if(appointment==null) throw missing();
if(!Objects.equals(appointment.getVersion(),request.version())) throw conflict("预约已更新,请重新读取后操作");
if(queryMapper.countActiveDispatches(appointment.getId())>0) throw conflict("已关联有效排车,请先核对并处理运输安排后再改约");
var current=items(appointment.getId());
String status=status(request.details().appointmentStatus());
if(Set.of("FAILED","CANCELLED").contains(status)) {
if(clean(request.details().appointmentRemark())==null) throw bad("取消或未约成时请填写原因");
if("FAILED".equals(status)) {
if(clean(request.details().appointmentRemark())==null) throw bad("未约成时请填写原因");
// Keep the last planned and confirmed times as historical facts.
appointment.setAppointmentStatus(status);appointment.setAppointmentRemark(request.details().appointmentRemark().trim());
current.forEach(item->{item.setActive(false);itemMapper.updateById(item);});