| | |
| | | import com.ruoyi.common.utils.QueryWrappers; |
| | | import com.ruoyi.common.utils.SecurityUtils; |
| | | import com.ruoyi.framework.exception.ErrorException; |
| | | import com.ruoyi.inspect.mapper.InsOrderMapper; |
| | | import com.ruoyi.inspect.mapper.InsSampleMapper; |
| | | import com.ruoyi.inspect.mapper.InsSampleReceiptMapper; |
| | | import com.ruoyi.inspect.pojo.InsOrder; |
| | | import com.ruoyi.inspect.pojo.InsSample; |
| | | import com.ruoyi.inspect.pojo.InsSampleReceipt; |
| | | import com.ruoyi.inspect.util.HackLoopTableRenderPolicy; |
| | | import com.ruoyi.inspect.util.UserUtils; |
| | | import com.ruoyi.process.mapper.InspectionOrderMapper; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import com.ruoyi.process.dto.ProcessDealDto; |
| | | import com.ruoyi.process.mapper.ProcessDealMapper; |
| | | import com.ruoyi.process.mapper.ProcessSampleMapper; |
| | | import com.ruoyi.process.mapper.ProcessTotaldealMapper; |
| | | import com.ruoyi.process.pojo.InspectionOrder; |
| | | import com.ruoyi.process.pojo.ProcessDeal; |
| | | import com.ruoyi.process.pojo.ProcessSample; |
| | | import com.ruoyi.process.pojo.ProcessTotaldeal; |
| | | import com.ruoyi.process.service.ProcessDealService; |
| | | import com.ruoyi.process.service.ProcessTotaldealService; |
| | |
| | | import java.nio.file.Files; |
| | | import java.nio.file.Paths; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.time.LocalTime; |
| | | import java.time.YearMonth; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | import java.util.Set; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | private ProcessTotaldealMapper processTotaldealMapper; |
| | | |
| | | @Resource |
| | | private ProcessSampleMapper processSampleMapper; |
| | | |
| | | @Resource |
| | | private ProcessDealService processDealService; |
| | | |
| | | @Resource |
| | | private InspectionOrderMapper inspectionOrderMapper; |
| | | |
| | | @Resource |
| | | private ProcessDealMapper processDealMapper; |
| | |
| | | |
| | | @Resource |
| | | private UserMapper userMapper; |
| | | |
| | | @Resource |
| | | private InsOrderMapper insOrderMapper; |
| | | |
| | | @Resource |
| | | private InsSampleMapper insSampleMapper; |
| | | |
| | | @Resource |
| | | private InsSampleReceiptMapper insSampleReceiptMapper; |
| | | |
| | | @Override |
| | | public IPage<ProcessTotaldeal> pageProcessTotaldeal(Page page, ProcessTotaldeal processTotaldeal) { |
| | |
| | | |
| | | @Override |
| | | public int addProcessTotaldeal(String month) { |
| | | //新增总表 |
| | | ProcessTotaldeal processTotaldeal = new ProcessTotaldeal(); |
| | | //新增总表(同一月份复用已有总表) |
| | | ProcessTotaldeal processTotaldeal; |
| | | List<ProcessTotaldeal> processTotaldeals = processTotaldealMapper.selectList(Wrappers.<ProcessTotaldeal>lambdaQuery() |
| | | .eq(ProcessTotaldeal::getMonth, month)); |
| | | if (processTotaldeals.size()<=0) { |
| | | if (processTotaldeals.size() <= 0) { |
| | | processTotaldeal = new ProcessTotaldeal(); |
| | | processTotaldeal.setMonth(month);//月份 |
| | | processTotaldeal.setSubmitState("待提交"); |
| | | processTotaldealMapper.insert(processTotaldeal); |
| | | }else { |
| | | processTotaldeal=processTotaldeals.get(0); |
| | | } else { |
| | | processTotaldeal = processTotaldeals.get(0); |
| | | } |
| | | //新增详情表 |
| | | //1.获取该月份的第一天和最后一天 |
| | | DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); |
| | | YearMonth yearMonth = YearMonth.parse(month, formatter); |
| | | LocalDate firstDay = yearMonth.atDay(1); |
| | | LocalDate lastDay = yearMonth.atEndOfMonth(); |
| | | //2.查询在这个时间范围内的所有样品登记的数据 |
| | | List<ProcessSample> processSamples = processSampleMapper.selectList(Wrappers.<ProcessSample>lambdaQuery() |
| | | .between(ProcessSample::getLeaveDate, firstDay, lastDay)); |
| | | if (processSamples.size()>0){ |
| | | //获取处理方式 |
| | | InspectionOrder inspectionOrder = inspectionOrderMapper.selectById(processSamples.get(0).getInspectionOrderId()); |
| | | List<ProcessDeal> processDeals = new ArrayList<>(); |
| | | for (ProcessSample processSample : processSamples) { |
| | | long count = processDealService.count(Wrappers.<ProcessDeal>lambdaQuery().eq(ProcessDeal::getProcessSampleId, processSample.getId())); |
| | | if (count>0){ |
| | | continue; |
| | | } |
| | | ProcessDeal processDeal = new ProcessDeal(); |
| | | processDeal.setSampleName(processSample.getSampleName());//样品名称 |
| | | processDeal.setSampleCode(processSample.getSampleCode());//样品编号 |
| | | processDeal.setSampleSupplier(processSample.getSampleSupplier());//供样单位 |
| | | processDeal.setNum(processSample.getNum());//样品数量 |
| | | processDeal.setDealMethod(inspectionOrder.getProcessing()==1?"实验室处理":"委托单位取回");//处理方式 |
| | | processDeal.setDealTime(LocalDate.now());//时间=当前时间 |
| | | processDeal.setTotaldealId(processTotaldeal.getId());//总表id |
| | | processDeal.setProcessSampleId(processSample.getId());//样品接收id |
| | | processDeals.add(processDeal); |
| | | LocalDateTime startTime = yearMonth.atDay(1).atStartOfDay(); |
| | | LocalDateTime endTime = yearMonth.atEndOfMonth().atTime(LocalTime.MAX); |
| | | //2.该月下单的委托单(排除原材料,typeSource 为空视为成品) |
| | | List<InsOrder> orders = insOrderMapper.selectList(Wrappers.<InsOrder>lambdaQuery() |
| | | .ge(InsOrder::getCreateTime, startTime) |
| | | .le(InsOrder::getCreateTime, endTime)); |
| | | if (orders.isEmpty()) { |
| | | return 0; |
| | | } |
| | | //3.只保留已生成样品接收记录的委托(已审核受理) |
| | | List<Integer> orderIds = orders.stream().map(InsOrder::getId).collect(Collectors.toList()); |
| | | List<InsSampleReceipt> receipts = insSampleReceiptMapper.selectList(Wrappers.<InsSampleReceipt>lambdaQuery() |
| | | .in(InsSampleReceipt::getInsOrderId, orderIds)); |
| | | Set<Integer> receiptOrderIds = receipts.stream().map(InsSampleReceipt::getInsOrderId).collect(Collectors.toSet()); |
| | | Map<Integer, InsOrder> orderMap = orders.stream() |
| | | .filter(order -> !Integer.valueOf(1).equals(order.getTypeSource())) |
| | | .filter(order -> receiptOrderIds.contains(order.getId())) |
| | | .collect(Collectors.toMap(InsOrder::getId, order -> order, (a, b) -> a)); |
| | | if (orderMap.isEmpty()) { |
| | | return 0; |
| | | } |
| | | //4.委托对应的样品 |
| | | List<InsSample> samples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery() |
| | | .in(InsSample::getInsOrderId, orderMap.keySet())); |
| | | if (samples.isEmpty()) { |
| | | return 0; |
| | | } |
| | | //5.已进入任何处置批次的样品跳过(跨月也不会重复带入) |
| | | List<Integer> sampleIds = samples.stream().map(InsSample::getId).collect(Collectors.toList()); |
| | | Set<Integer> dealtSampleIds = processDealService.list(Wrappers.<ProcessDeal>lambdaQuery() |
| | | .select(ProcessDeal::getInsSampleId) |
| | | .in(ProcessDeal::getInsSampleId, sampleIds)) |
| | | .stream().map(ProcessDeal::getInsSampleId).filter(Objects::nonNull).collect(Collectors.toSet()); |
| | | List<ProcessDeal> processDeals = new ArrayList<>(); |
| | | for (InsSample insSample : samples) { |
| | | if (dealtSampleIds.contains(insSample.getId())) { |
| | | continue; |
| | | } |
| | | InsOrder order = orderMap.get(insSample.getInsOrderId()); |
| | | ProcessDeal processDeal = new ProcessDeal(); |
| | | //样品名称优先取报告展示字段 |
| | | processDeal.setSampleName(order != null && StringUtils.isNotBlank(order.getSampleView()) |
| | | ? order.getSampleView() : insSample.getSample()); |
| | | processDeal.setSampleCode(insSample.getSampleCode());//样品编号 |
| | | processDeal.setSampleSupplier(order == null ? null : order.getCompany());//供样单位=委托单位 |
| | | processDeal.setNum(insSample.getQuantity() == null ? 1 : insSample.getQuantity());//样品数量 |
| | | processDeal.setDealMethod(resolveDealMethod(order));//处理方式=下单时选择的样品处置 |
| | | processDeal.setDealTime(LocalDate.now());//时间=当前时间 |
| | | processDeal.setTotaldealId(processTotaldeal.getId());//总表id |
| | | processDeal.setInsSampleId(insSample.getId());//检验样品id |
| | | processDeals.add(processDeal); |
| | | } |
| | | if (!processDeals.isEmpty()) { |
| | | processDealService.saveBatch(processDeals); |
| | | } |
| | | return 0; |
| | | return processDeals.size(); |
| | | } |
| | | |
| | | /** |
| | | * 处理方式:下单时的样品处置 1委托方取回 2检测方处置;历史单无该字段时回退旧的处理方式字段 |
| | | */ |
| | | private String resolveDealMethod(InsOrder order) { |
| | | if (order == null) { |
| | | return StringUtils.EMPTY; |
| | | } |
| | | if (Integer.valueOf(1).equals(order.getSampleDisposal())) { |
| | | return "委托单位取回"; |
| | | } |
| | | if (Integer.valueOf(2).equals(order.getSampleDisposal())) { |
| | | return "实验室处理"; |
| | | } |
| | | return Integer.valueOf(1).equals(order.getProcessing()) ? "实验室处理" : "委托单位取回"; |
| | | } |
| | | |
| | | @Override |
| | | public void exportProcessTotaldeal(Integer id, HttpServletResponse response) { |
| | | List<ProcessDeal> sampleDealDtos = processDealMapper.selectDeal(id); |
| | | List<ProcessDealDto> sampleDealDtos = processDealMapper.selectDeal(id); |
| | | ProcessTotaldeal processTotaldeal = processTotaldealMapper.selectById(id); |
| | | |
| | | // 获取路径 |
| | |
| | | template.write(os); |
| | | os.flush(); |
| | | os.close(); |
| | | inputStream.close(); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | throw new RuntimeException("导出失败"); |