3

完成了后端核心代码

@RestController
@RequestMapping("/api/return-factory")
public class ReturnFactoryController {

@Autowired
private ReturnFactoryService returnFactoryService;

// 发起返厂申请
@PostMapping
public ResponseEntity createOrder(
@RequestBody ReturnFactoryRequest request) {
return ResponseEntity.ok(returnFactoryService.createOrder(request));
}

// 厂商状态回调接口
@PostMapping("/{orderId}/status")
public ResponseEntity updateStatus(
@PathVariable Long orderId,
@RequestParam String status,
@RequestBody(required = false) RepairResultDTO result) {
returnFactoryService.updateStatus(orderId, status, result);
return ResponseEntity.ok().build();
}
}
完成了状态机服务(关键业务逻辑)

@Service
@Transactional
public class ReturnFactoryService {

public ReturnFactoryOrder createOrder(ReturnFactoryRequest request) {
// 校验备件是否可返厂
SparePart part = sparePartRepository.findBySnCode(request.getSnCode())
.orElseThrow(() -> new IllegalArgumentException("Invalid SN Code"));

if (!part.getStatus().equals(SparePartStatus.FAULTY)) {
throw new IllegalStateException("Only faulty parts can be returned");
}

// 生成返厂工单
ReturnFactoryOrder order = new ReturnFactoryOrder();
order.setSnCode(request.getSnCode());
order.setStatus(ReturnStatus.PENDING);
order.setVendor(vendorRepository.findById(request.getVendorId()).orElseThrow());

// 锁定库存状态
part.setStatus(SparePartStatus.IN_REPAIR);
sparePartRepository.save(part);

return returnFactoryRepository.save(order);
}

public void updateStatus(Long orderId, String status, RepairResultDTO result) {
ReturnFactoryOrder order = returnFactoryRepository.findById(orderId)
.orElseThrow(() -> new IllegalArgumentException("Order not found"));

// 状态机转换
switch (ReturnStatus.valueOf(status)) {
case RETURNED:
handleReturnedOrder(order, result);
break;
case SCRAPPED:
handleScrappedOrder(order);
break;
// ...其他状态处理
}
}

private void handleReturnedOrder(ReturnFactoryOrder order, RepairResultDTO result) {
// 更新备件状态为修好件
SparePart part = sparePartRepository.findBySnCode(order.getSnCode()).orElseThrow();
part.setStatus(SparePartStatus.REPAIRED);
sparePartRepository.save(part);

// 记录维修结果
order.setRepairResult(result.getDetails());
order.setCost(result.getCost());
order.setStatus(ReturnStatus.RETURNED);
returnFactoryRepository.save(order);
}
}

posted @ 2025-04-22 23:10  Lomook  阅读(21)  评论(0)    收藏  举报