| | |
| | | package com.ruoyi.process.listener; |
| | | |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.ruoyi.basic.mapper.StandardMethodMapper; |
| | | import com.ruoyi.basic.mapper.StandardTreeMapper; |
| | | import com.ruoyi.basic.pojo.StandardMethod; |
| | | import com.ruoyi.basic.pojo.StandardTree; |
| | | import com.ruoyi.inspect.event.NewJuOrderPlacedEvent; |
| | | import com.ruoyi.inspect.mapper.InsOrderStandardTemplateMapper; |
| | | import com.ruoyi.inspect.mapper.InsSampleMapper; |
| | | import com.ruoyi.inspect.pojo.InsOrder; |
| | | import com.ruoyi.inspect.pojo.InsOrderStandardTemplate; |
| | | import com.ruoyi.inspect.pojo.InsSample; |
| | | import com.ruoyi.inspect.service.InsOrderService; |
| | | import com.ruoyi.process.mapper.InspectionOrderDetailMapper; |
| | | import com.ruoyi.process.mapper.InspectionOrderMapper; |
| | | import com.ruoyi.process.pojo.InspectionOrder; |
| | | import com.ruoyi.process.pojo.InspectionOrderDetail; |
| | | import lombok.AllArgsConstructor; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.context.event.EventListener; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.time.LocalDate; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 新聚成品下单成功后,自动生成一条检验委托单。 |
| | |
| | | |
| | | private final InsOrderService insOrderService; |
| | | private final InspectionOrderMapper inspectionOrderMapper; |
| | | private final InspectionOrderDetailMapper inspectionOrderDetailMapper; |
| | | private final InsSampleMapper insSampleMapper; |
| | | private final InsOrderStandardTemplateMapper insOrderStandardTemplateMapper; |
| | | private final StandardTreeMapper standardTreeMapper; |
| | | private final StandardMethodMapper standardMethodMapper; |
| | | |
| | | @EventListener |
| | | public void onNewJuOrderPlaced(NewJuOrderPlacedEvent event) { |
| | |
| | | return; |
| | | } |
| | | // 幂等:同一成品订单已有检验委托单则跳过 |
| | | Long count = inspectionOrderMapper.selectCount(Wrappers.<InspectionOrder>lambdaQuery() |
| | | .eq(InspectionOrder::getInsOrderId, order.getId())); |
| | | if (count > 0) { |
| | | InspectionOrder existingOrder = inspectionOrderMapper.selectOne(Wrappers.<InspectionOrder>lambdaQuery() |
| | | .eq(InspectionOrder::getInsOrderId, order.getId()).last("limit 1")); |
| | | if (existingOrder != null) { |
| | | existingOrder.setEntrustCode(order.getEntrustCode()); |
| | | existingOrder.setBatchNo(order.getBatchNo()); |
| | | existingOrder.setSampleName(StringUtils.isNotBlank(order.getSampleView()) ? order.getSampleView() : order.getSample()); |
| | | existingOrder.setProduction(order.getProduction()); |
| | | existingOrder.setQuantity(order.getTestQuantity()); |
| | | existingOrder.setCommissionUnit(order.getCompany()); |
| | | existingOrder.setCommissionUser(order.getPrepareUser()); |
| | | existingOrder.setCommissionPhone(order.getPhone()); |
| | | existingOrder.setIsLeave(Integer.valueOf(1).equals(order.getIsLeave()) ? 1 : 2); |
| | | existingOrder.setProcessing(Integer.valueOf(1).equals(order.getSampleDisposal()) ? 0 : 1); |
| | | existingOrder.setSend(Integer.valueOf(1).equals(order.getReportDelivery()) ? 1 : 0); |
| | | inspectionOrderMapper.updateById(existingOrder); |
| | | return; |
| | | } |
| | | InspectionOrder inspectionOrder = new InspectionOrder(); |
| | | inspectionOrder.setInsOrderId(order.getId()); |
| | | inspectionOrder.setEntrustCode(order.getEntrustCode()); |
| | | inspectionOrder.setBatchNo(order.getBatchNo()); |
| | | // 试样名称优先取报告展示字段 |
| | | inspectionOrder.setSampleName(StringUtils.isNotBlank(order.getSampleView()) |
| | | ? order.getSampleView() : order.getSample()); |
| | | inspectionOrder.setProduction(order.getProduction()); |
| | | inspectionOrder.setQuantity(order.getTestQuantity()); |
| | | inspectionOrder.setCommissionDate(LocalDate.now()); |
| | | inspectionOrder.setCommissionDate(order.getSampleDate() != null ? order.getSampleDate() : LocalDate.now()); |
| | | inspectionOrder.setCommissionUnit(order.getCompany()); |
| | | inspectionOrder.setCommissionUser(order.getPrepareUser()); |
| | | inspectionOrder.setCommissionPhone(order.getPhone()); |
| | | inspectionOrder.setSampleStatus("完好"); |
| | | inspectionOrder.setSampleStatus(order.getSampleStatus()); |
| | | // 是否留样语义转换:ins 0否/1是 -> cnas 1是/2否 |
| | | inspectionOrder.setIsLeave(Integer.valueOf(1).equals(order.getIsLeave()) ? 1 : 2); |
| | | // 样品处置:1委托方取回/2检测方处置 -> processing 0委托单位取回/1实验室处理;未选时沿用旧字段 |
| | |
| | | } |
| | | // 报告文件与约定时间生成时为空,后续在检验委托单页面编辑/上传 |
| | | inspectionOrderMapper.insert(inspectionOrder); |
| | | createDetailRow(inspectionOrder, order); |
| | | } |
| | | |
| | | /** |
| | | * 下单即生成一行样品明细,批量下单后整批样品直接汇总在同一张委托书里。 |
| | | */ |
| | | private void createDetailRow(InspectionOrder inspectionOrder, InsOrder order) { |
| | | InspectionOrderDetail detail = new InspectionOrderDetail(); |
| | | detail.setInspectionOrderId(inspectionOrder.getInspectionOrderId()); |
| | | detail.setSampleName(inspectionOrder.getSampleName()); |
| | | detail.setQuantity(order.getTestQuantity()); |
| | | detail.setSampleStatus(inspectionOrder.getSampleStatus()); |
| | | detail.setRemark(order.getRemark()); |
| | | |
| | | List<InsSample> samples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery() |
| | | .eq(InsSample::getInsOrderId, order.getId()) |
| | | .orderByAsc(InsSample::getId)); |
| | | if (!samples.isEmpty()) { |
| | | detail.setSampleNumber(samples.get(0).getSampleCode()); |
| | | } |
| | | List<InsOrderStandardTemplate> templates = insOrderStandardTemplateMapper.selectList( |
| | | Wrappers.<InsOrderStandardTemplate>lambdaQuery() |
| | | .eq(InsOrderStandardTemplate::getInsOrderId, order.getId()) |
| | | .orderByAsc(InsOrderStandardTemplate::getSort, InsOrderStandardTemplate::getId)); |
| | | detail.setTestStandard(resolveTestStandard(order, templates)); |
| | | detail.setTestItem(templates.stream() |
| | | .map(InsOrderStandardTemplate::getName) |
| | | .filter(StringUtils::isNotBlank) |
| | | .collect(Collectors.joining("、"))); |
| | | inspectionOrderDetailMapper.insert(detail); |
| | | } |
| | | |
| | | /** |
| | | * 检测依据显示“标准号+标准名称”,优先取标准方法,取不到时回退到模板快照编号。 |
| | | */ |
| | | private String resolveTestStandard(InsOrder order, List<InsOrderStandardTemplate> templates) { |
| | | if (order.getStandardTreeId() != null) { |
| | | StandardTree tree = standardTreeMapper.selectById(order.getStandardTreeId()); |
| | | if (tree != null && tree.getStandardMethodId() != null) { |
| | | StandardMethod method = standardMethodMapper.selectById(tree.getStandardMethodId()); |
| | | if (method != null) { |
| | | String combined = (StringUtils.trimToEmpty(method.getCode()) + " " |
| | | + StringUtils.trimToEmpty(method.getName())).trim(); |
| | | if (StringUtils.isNotBlank(combined)) { |
| | | return combined; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return templates.stream() |
| | | .map(InsOrderStandardTemplate::getNumber) |
| | | .filter(StringUtils::isNotBlank) |
| | | .distinct() |
| | | .collect(Collectors.joining("、")); |
| | | } |
| | | } |