package com.ruoyi.process.listener; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.inspect.event.NewJuOrderPlacedEvent; import com.ruoyi.inspect.pojo.InsOrder; import com.ruoyi.inspect.service.InsOrderService; import com.ruoyi.process.mapper.InspectionOrderMapper; import com.ruoyi.process.pojo.InspectionOrder; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; import java.time.LocalDate; /** * 新聚成品下单成功后,自动生成一条检验委托单。 */ @Component @AllArgsConstructor public class NewJuOrderInspectionListener { private final InsOrderService insOrderService; private final InspectionOrderMapper inspectionOrderMapper; @EventListener public void onNewJuOrderPlaced(NewJuOrderPlacedEvent event) { InsOrder order = insOrderService.getById(event.getInsOrderId()); if (order == null) { return; } // 幂等:同一成品订单已有检验委托单则跳过 Long count = inspectionOrderMapper.selectCount(Wrappers.lambdaQuery() .eq(InspectionOrder::getInsOrderId, order.getId())); if (count > 0) { return; } InspectionOrder inspectionOrder = new InspectionOrder(); inspectionOrder.setInsOrderId(order.getId()); inspectionOrder.setEntrustCode(order.getEntrustCode()); // 试样名称优先取报告展示字段 inspectionOrder.setSampleName(StringUtils.isNotBlank(order.getSampleView()) ? order.getSampleView() : order.getSample()); inspectionOrder.setProduction(order.getProduction()); inspectionOrder.setQuantity(order.getTestQuantity()); inspectionOrder.setCommissionDate(LocalDate.now()); inspectionOrder.setCommissionUnit(order.getCompany()); inspectionOrder.setCommissionUser(order.getPrepareUser()); inspectionOrder.setCommissionPhone(order.getPhone()); inspectionOrder.setSampleStatus("完好"); // 是否留样语义转换:ins 0否/1是 -> cnas 1是/2否 inspectionOrder.setIsLeave(Integer.valueOf(1).equals(order.getIsLeave()) ? 1 : 2); // 样品处置:1委托方取回/2检测方处置 -> processing 0委托单位取回/1实验室处理;未选时沿用旧字段 if (Integer.valueOf(1).equals(order.getSampleDisposal())) { inspectionOrder.setProcessing(0); } else if (Integer.valueOf(2).equals(order.getSampleDisposal())) { inspectionOrder.setProcessing(1); } else { inspectionOrder.setProcessing(order.getProcessing()); } // 报告交付方式:1自取 -> send 1,其余 0;未选时沿用旧字段 if (order.getReportDelivery() != null) { inspectionOrder.setSend(Integer.valueOf(1).equals(order.getReportDelivery()) ? 1 : 0); } else { inspectionOrder.setSend(order.getSend()); } // 报告文件与约定时间生成时为空,后续在检验委托单页面编辑/上传 inspectionOrderMapper.insert(inspectionOrder); } }