package com.wabestway.recall.web; import com.wabestway.recall.model.Order; import com.wabestway.recall.model.Record; import com.wabestway.recall.model.ResObj; import com.wabestway.recall.repository.OrderRepository; import com.wabestway.recall.repository.RecordRepository; import org.springframework.web.bind.annotation.*; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import java.util.UUID; @RestController @RequestMapping("/track") public class RecallController { private final RecordRepository recordRepository; private final OrderRepository orderRepository; public RecallController(RecordRepository recordRepository, OrderRepository orderRepository) { this.recordRepository = recordRepository; this.orderRepository = orderRepository; } @GetMapping public Flux getAllUsers() { return recordRepository.findAll(); } @PostMapping("/save") public Mono save(@RequestBody Record record) { if (record.getOrderId() != null && !record.getOrderId().isEmpty()) { Mono order = orderRepository.findByOrderId(record.getOrderId()); order.hasElement().subscribe(exit -> { if (!exit) { if (record.getTraceId() != null && !record.getTraceId().isEmpty()) { Mono tcOrder = orderRepository.findByTraceId(record.getTraceId()); tcOrder.filter(to -> to.getId() != null).flatMap(to -> { to.setOrderId(record.getOrderId()); if (record.isLast()) { to.setComplete("1"); } return orderRepository.save(to); }).subscribe(); } else { record.setTraceId(UUID.randomUUID().toString().replace("-", "")); Order forder = new Order(); forder.setOrderId(record.getOrderId()); forder.setTraceId(record.getTraceId()); forder.setProductCode(record.getProductCode()); forder.setProductName(record.getProductName()); forder.setCreateAt(System.currentTimeMillis()); forder.setAppKey(record.getAppKey()); forder.setArchived("0"); forder.setComplete("0"); forder.setHolderName("王五"); forder.setHolderPhone("18515064530"); forder.setSupplierName("阳光保险"); forder.setStartDate("2023-01-01"); forder.setEndDate("2035-01-01"); if (record.isLast()) { forder.setComplete("1"); } orderRepository.save(forder).subscribe(); } } else { order.subscribe(to -> { if (record.isLast()) { to.setComplete("1"); orderRepository.save(to).subscribe(); } }); } }); } else { if (record.getTraceId() == null || record.getTraceId().isEmpty()) { record.setTraceId(UUID.randomUUID().toString().replace("-", "")); Order order = new Order(); order.setTraceId(record.getTraceId()); order.setProductCode(record.getProductCode()); order.setProductName(record.getProductName()); order.setCreateAt(System.currentTimeMillis()); order.setAppKey(record.getAppKey()); order.setArchived("0"); order.setComplete("0"); order.setHolderName("王五"); order.setHolderPhone("18515064530"); order.setSupplierName("阳光保险"); order.setStartDate("2023-01-01"); order.setEndDate("2035-01-01"); if (record.isLast()) { order.setComplete("1"); } orderRepository.save(order).subscribe(); } } record.setCreateAt(System.currentTimeMillis()); return recordRepository.save(record).flatMap(ss -> { ss.setEvents(null); return Mono.just(ResObj.ok(ss)); }); } }