3

完成了后端核心代码

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

@Autowired
private ReturnFactoryService returnFactoryService;

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

// 厂商状态回调接口
@PostMapping("/{orderId}/status")
public ResponseEntity<Void> 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  阅读(6)  评论(0)    收藏  举报