From 4f3a98f19143865cdc1de4791e8a95d96bd40c65 Mon Sep 17 00:00:00 2001 From: maven <2163098428@qq.com> Date: 星期五, 01 八月 2025 13:27:59 +0800 Subject: [PATCH] yys 密码已重置 --- cnas-process/src/main/java/com/ruoyi/process/service/impl/InspectionOrderServiceImpl.java | 439 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 439 insertions(+), 0 deletions(-) diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/InspectionOrderServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/InspectionOrderServiceImpl.java new file mode 100644 index 0000000..9b18aec --- /dev/null +++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/InspectionOrderServiceImpl.java @@ -0,0 +1,439 @@ +package com.ruoyi.process.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; +import com.ruoyi.common.core.domain.entity.User; +import com.ruoyi.common.utils.QueryWrappers; +import com.ruoyi.framework.exception.ErrorException; +import com.ruoyi.inspect.dto.InsOrderDeviceRecordDto; +import com.ruoyi.inspect.mapper.InsProductResultMapper; +import com.ruoyi.inspect.mapper.InsSampleMapper; +import com.ruoyi.inspect.pojo.*; +import com.ruoyi.inspect.service.InsOrderService; +import com.ruoyi.inspect.service.InsReportService; +import com.ruoyi.inspect.util.HackLoopTableRenderPolicy; +import com.ruoyi.process.dto.InspectionOrderDto; +import com.ruoyi.process.dto.InspectionOrderExportDto; +import com.ruoyi.process.mapper.InspectionOrderMapper; +import com.ruoyi.process.mapper.ProcessOrderDeviceMapper; +import com.ruoyi.process.mapper.ProcessSampleMapper; +import com.ruoyi.process.pojo.*; +import com.ruoyi.process.service.*; +import com.ruoyi.system.mapper.UserMapper; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URLEncoder; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.stream.Collectors; + +/** + * <p> + * 妫�楠屽鎵樺崟 鏈嶅姟瀹炵幇绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2024-12-09 + */ +@Service +@Transactional(rollbackFor = Exception.class) +public class InspectionOrderServiceImpl extends ServiceImpl<InspectionOrderMapper, InspectionOrder> implements InspectionOrderService { + @Resource + private InspectionOrderDetailService inspectionOrderDetailService; + @Resource + private InsOrderService insOrderService; + @Resource + private InsSampleMapper insSampleMapper; + @Resource + private InsReportService insReportService; + @Value("${wordUrl}") + private String wordUrl; + @Resource + private ProcessReportService processReportService; + @Resource + private ProcessOrderDeviceMapper processOrderDeviceMapper; + @Resource + private InsProductResultMapper insProductResultMapper; + @Resource + private ProcessOrderDeviceService processOrderDeviceService; + @Resource + private UserMapper userMapper; + @Resource + private ProcessSampleService processSampleService; + @Resource + private ProcessSampleMapper processSampleMapper; + @Resource + private ProcessDealService processDealService; + + + /** + * 妫�楠屽鎵樺崟鍒嗛〉鏌ヨ + * @param page + * @param InspectionOrder + * @return + */ + @Override + public IPage<InspectionOrderDto> pageInspectionOrder(Page page, InspectionOrder InspectionOrder) { + return baseMapper.pageInspectionOrder(page, QueryWrappers.queryWrappers(InspectionOrder)); + } + + /** + * 妫�楠屽鎵樺崟鏂板 + * @param inspectionOrder + * @return + */ + @Override + public boolean addInspectionOrder(InspectionOrderDto inspectionOrder) { + if (inspectionOrder.getInsOrderId() == null) { + throw new ErrorException("缂哄皯璁㈠崟id"); + } + + // 澶嶅埗鎶ュ憡 + // 鏌ヨ璁㈠崟鎶ュ憡 + InsReport insReport = insReportService.getOne(Wrappers.<InsReport>lambdaQuery() + .eq(InsReport::getInsOrderId, inspectionOrder.getInsOrderId())); + + String path = wordUrl + insReport.getUrl().replaceFirst("/word", ""); + + String fileName =LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + "濮旀墭鍗曟姤鍛�.docx"; + + // 婧愭枃浠惰矾寰� + Path sourcePath = Paths.get(path); + // 鐩爣鏂囦欢璺緞 + Path targetPath = Paths.get(wordUrl + "/" + fileName); + + try { + // 澶嶅埗鏂囦欢锛屽鏋滅洰鏍囨枃浠跺凡瀛樺湪锛屽垯瑕嗙洊 + Files.copy(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING); + // 娣诲姞鏂囦欢鍦板潃 + inspectionOrder.setFileUrl("/word/" + fileName); + + } catch (Exception e) { + e.printStackTrace(); + } + + baseMapper.insert(inspectionOrder); + // 鏂板璇︽儏 + if (CollectionUtils.isNotEmpty(inspectionOrder.getOrderDetailList())) { + for (InspectionOrderDetail InspectionOrderDetail : inspectionOrder.getOrderDetailList()) { + InspectionOrderDetail.setInspectionOrderId(inspectionOrder.getInspectionOrderId()); + } + inspectionOrderDetailService.saveBatch(inspectionOrder.getOrderDetailList()); + } + /*鏂板7.8鎶ュ憡缁撴灉*/ + ProcessReport processReport = new ProcessReport(); + processReport.setInspectionOrderId(inspectionOrder.getInsOrderId()); + processReport.setInsReportCode(inspectionOrder.getEntrustCode());//鎶ュ憡缂栧彿=濮旀墭缂栧彿 + //椤垫暟 + try { + com.aspose.words.Document doc = new com.aspose.words.Document(path); + processReport.setPages(doc.getPageCount()+""); + } catch (Exception e) { + } + processReport.setNumber("1");//鍙戦�佷唤鏁伴粯璁�1 + processReport.setSend(inspectionOrder.getCommissionUnit());//鍙戝線浣曞=濮旀墭鍗曚綅 + processReport.setMethod(inspectionOrder.getSend()==1?"鑷彇":"鍏朵粬");//鍙戦�佹柟寮� + processReport.setSendTime(insReport.getRatifyTime().toLocalDate());//鍙戦�佹棩鏈� + processReport.setSendUser(64);//鍙戦�佷汉鍥哄畾 + processReport.setSignatory(inspectionOrder.getCommissionUser());//绛炬敹浜�=濮旀墭浜� + processReportService.save(processReport); + /*鏂板7.1濮旀墭鍗曞搴旂殑璁惧浣跨敤璁板綍*/ + addDeviceRecord(inspectionOrder,insReport.getWriteUserId()); + /*鏂板7.4鏍峰搧鎺ユ敹*/ + List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery() + .eq(InsSample::getInsOrderId, inspectionOrder.getInsOrderId())); + if (insSamples.size()>0){ + List<ProcessSample> processSamples = new ArrayList<>(); + for (InsSample insSample : insSamples) { + ProcessSample processSample = new ProcessSample(); + processSample.setReceiveDate(inspectionOrder.getSampleData());//鏀舵牱鏃ユ湡=棰嗘牱鏃ユ湡 + processSample.setSampleCode(insSample.getSampleCode());//鏍峰搧缂栧彿 + processSample.setSampleName(insSample.getSample());//鏍峰搧鍚嶇О + processSample.setNum(1);//鏍峰搧鏁伴噺=1 + processSample.setSampleSupplier(inspectionOrder.getCommissionUnit());//鏉ユ牱鍗曚綅 + LocalDate plusMonths = inspectionOrder.getSampleData() == null ? null : inspectionOrder.getSampleData().plusMonths(1); + processSample.setLeaveDate(plusMonths);//鐣欐牱鏃ユ湡=鏀舵牱鏃ユ湡寰�鍚庡欢涓�涓湀 + processSample.setSampleState(inspectionOrder.getSampleStatus());//鏍峰搧鐘舵�� + processSample.setDealTime(plusMonths);//閫�鏍锋棩鏈�=鐣欐牱鏃ユ湡 + processSample.setInspectionOrderId(inspectionOrder.getInspectionOrderId());//濮旀墭鍗昳d + processSamples.add(processSample); + } + processSampleService.saveBatch(processSamples); + } + return true; + } + + private synchronized void addDeviceRecord(InspectionOrder inspectionOrder,Integer userId) { + // 鏌ヨ璁惧浣跨敤璁板綍鏌ヨ璇ヨ鍗曠殑浣跨敤璁板綍 + Set<String> recordCodeset = processOrderDeviceMapper.selectDeviceNumber(inspectionOrder.getInspectionOrderId()); + // 鑾峰彇璁㈠崟璁惧缂栧彿 + List<InsProductResult> resultList = insProductResultMapper.selectResultByOrderId(inspectionOrder.getInsOrderId()); + Set<String> deviceCodeSet = new HashSet<>(); + for (InsProductResult result : resultList) { + // 娣诲姞璁惧缂栧彿 + List<JSONObject> jsonObjects = JSON.parseArray(result.getEquipValue(), JSONObject.class); + for (JSONObject jsonObject : jsonObjects) { + if (!"".equals(jsonObject.get("v") + "")) { + List<String> v = StrUtil.split(jsonObject.get("v") + "", "锛�"); + deviceCodeSet.addAll(v); + } + } + } + // 1.鍒ゆ柇鏄惁鏈夋病鏈夋坊鍔犵殑浣跨敤璁板綍 + Set<String> orderDeviceNumbers = getDeviceDifference(deviceCodeSet, recordCodeset); + // 娣诲姞浣跨敤璁板綍, 鏍规嵁缂栧彿鏌ヨ璁惧id + if (CollectionUtils.isNotEmpty(orderDeviceNumbers)) { + List<Integer> orderDeviceIds = processOrderDeviceMapper.selectDeviceIdsByNumbers(orderDeviceNumbers); + List<ProcessOrderDevice> collect = orderDeviceIds.stream().map(deviceId -> { + ProcessOrderDevice processOrderDevice = new ProcessOrderDevice(); + processOrderDevice.setInspectionOrderId(inspectionOrder.getInspectionOrderId()); + processOrderDevice.setDeviceId(deviceId); + processOrderDevice.setSampleCode(inspectionOrder.getEntrustCode()); + processOrderDevice.setUseBefore(1); + processOrderDevice.setUseAfter(1); + processOrderDevice.setUsePerson(userMapper.selectById(userId).getName());//浣跨敤浜� + processOrderDevice.setUsePersonId(userId);//浣跨敤浜篿d + return processOrderDevice; + }).collect(Collectors.toList()); + processOrderDeviceService.saveBatch(collect); + } + } + + private static Set<String> getDeviceDifference(Set<String> number1, Set<String> number2) { + return number1.stream().filter(s1 -> number2.stream().noneMatch(s2 -> s1.equals(s2))) + .collect(Collectors.toSet()); + } + + /** + * 妫�楠屽鎵樺崟淇敼 + * @param InspectionOrder + * @return + */ + @Override + public boolean updateInspectionOrder(InspectionOrderDto InspectionOrder) { + baseMapper.updateById(InspectionOrder); + + // 鍒犻櫎涔嬪墠鐨勮鎯� + inspectionOrderDetailService.remove(Wrappers.<InspectionOrderDetail>lambdaQuery() + .eq(InspectionOrderDetail::getInspectionOrderId, InspectionOrder.getInspectionOrderId())); + + // 鏂板璇︽儏 + for (InspectionOrderDetail InspectionOrderDetail : InspectionOrder.getOrderDetailList()) { + InspectionOrderDetail.setInspectionOrderId(InspectionOrder.getInspectionOrderId()); + } + inspectionOrderDetailService.saveBatch(InspectionOrder.getOrderDetailList()); + + //淇敼7.9鎶ュ憡缁撴灉 + ProcessReport processReport = processReportService.getOne(Wrappers.<ProcessReport>lambdaQuery().eq(ProcessReport::getInspectionOrderId, InspectionOrder.getInspectionOrderId())); + processReport.setInsReportCode(InspectionOrder.getEntrustCode());//鎶ュ憡缂栧彿=濮旀墭缂栧彿 + processReportService.updateById(processReport); + + return true; + } + + /** + * 妫�楠屽鎵樺崟鍒犻櫎 + * @param inspectionOrderId + * @return + */ + @Override + public boolean delInspectionOrder(Integer inspectionOrderId) { + inspectionOrderDetailService.remove(Wrappers.<InspectionOrderDetail>lambdaQuery() + .eq(InspectionOrderDetail::getInspectionOrderId, inspectionOrderId)); + baseMapper.deleteById(inspectionOrderId); + //鍒犻櫎7.8鎶ュ憡 + processReportService.remove(Wrappers.<ProcessReport>lambdaQuery() + .eq(ProcessReport::getInspectionOrderId, inspectionOrderId)); + //鍒犻櫎瀵瑰簲鐨勮澶囦娇鐢ㄨ褰� + processOrderDeviceService.remove(Wrappers.<ProcessOrderDevice>lambdaQuery() + .eq(ProcessOrderDevice::getInspectionOrderId, inspectionOrderId)); + //鍒犻櫎瀵瑰簲鐨�7.4鐨勬牱鍝佺敵璇� + List<ProcessSample> processSamples = processSampleMapper.selectList(Wrappers.<ProcessSample>lambdaQuery() + .eq(ProcessSample::getInspectionOrderId, inspectionOrderId)); + if (processSamples.size()>0){ + List<Integer> list = processSamples.stream().map(ProcessSample::getId).collect(Collectors.toList()); + processDealService.remove(Wrappers.<ProcessDeal>lambdaQuery() + .in(ProcessDeal::getProcessSampleId,list)); + } + //鍒犻櫎瀵瑰簲7.4鐨勬牱鍝佹帴鏀� + processSampleService.remove(Wrappers.<ProcessSample>lambdaQuery() + .eq(ProcessSample::getInspectionOrderId,inspectionOrderId)); + return true; + } + + /** + * 妫�楠屽鎵樺崟鏌ョ湅璇︽儏 + * @param inspectionOrderId + * @return + */ + @Override + public InspectionOrderDto getInspectionOrderOne(Integer inspectionOrderId) { + InspectionOrder inspectionOrder = baseMapper.selectById(inspectionOrderId); + InspectionOrderDto inspectionOrderDto = new InspectionOrderDto(); + BeanUtils.copyProperties(inspectionOrder, inspectionOrderDto); + + // 鏌ヨ璇︾粏淇℃伅 + inspectionOrderDto.setOrderDetailList(inspectionOrderDetailService.list(Wrappers.<InspectionOrderDetail>lambdaQuery() + .eq(InspectionOrderDetail::getInspectionOrderId, inspectionOrderId))); + return inspectionOrderDto; + } + + /** + * 鏍规嵁鎴愬搧璁㈠崟id鏌ヨ濮旀墭鍗曡鎯� + * @param insOrderId + * @return + */ + @Override + public InspectionOrderDto getInspectionOrderByInsOderId(Integer insOrderId) { + InsOrder order = insOrderService.getById(insOrderId); + InspectionOrderDto inspectionOrderDto = new InspectionOrderDto(); + inspectionOrderDto.setInsOrderId(order.getId());//鎴愬搧璁㈠崟id + inspectionOrderDto.setEntrustCode(order.getEntrustCode());//濮旀墭缂栧彿 + inspectionOrderDto.setSampleName(order.getSample());//璇曟牱鍚嶇О + inspectionOrderDto.setProduction(order.getProduction());//鐢熶骇鍗曚綅 + inspectionOrderDto.setCommissionUnit(order.getCompany());//濮旀墭鍗曚綅 + inspectionOrderDto.setCommissionUser(order.getPrepareUser());//濮旀墭浜� + inspectionOrderDto.setSampleStatus("瀹屽ソ");//鏍峰搧鐘舵�� + inspectionOrderDto.setIsLeave(order.getIsLeave());//鏄惁鐣欐牱 + inspectionOrderDto.setProcessing(order.getProcessing());//鏍峰搧澶勭悊鏂瑰紡 + inspectionOrderDto.setAppointed(order.getAppointed());//绾﹀畾鏃堕棿 + inspectionOrderDto.setSend(order.getSend());//鎶ュ憡鍙戦�佹柟寮� + inspectionOrderDto.setCommissionPhone(order.getPhone());//鎶ュ憡鍙戦�佹柟寮� + + return inspectionOrderDto; + } + + + /** + * 濮旀墭鍗曟煡璇㈡垚鍝佽鍗� + * @return + */ + @Override + public IPage<InsOrder> getInsOrderOnInspection(Page page, InsOrder insOrder) { + return baseMapper.getInsOrderOnInspection(page, QueryWrappers.queryWrappers(insOrder)); + } + + /** + * 濮旀墭鍗曟垚鍝佹姤鍛婁笂浼� + * @param file + * @param inspectionOrderId + * @return + */ + @Override + public boolean uploadInspectionOrderFile(MultipartFile file, Integer inspectionOrderId) { + String urlString; + String pathName; + try { + String path = wordUrl; + File realpath = new File(path); + if (!realpath.exists()) { + realpath.mkdirs(); + } + pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + file.getOriginalFilename(); + urlString = realpath + "/" + pathName; + file.transferTo(new File(urlString)); + + baseMapper.update(null, Wrappers.<InspectionOrder>lambdaUpdate() + .eq(InspectionOrder::getInspectionOrderId, inspectionOrderId) + .set(InspectionOrder::getFileUrl, "/word/" + pathName)); + + + + } catch (Exception e) { + throw new ErrorException("鏂囦欢涓婁紶澶辫触"); + } + return true; + } + + @Override + public void exportInspectionOrder(Integer inspectionOrderId, HttpServletResponse response) { + InspectionOrder inspectionOrder = baseMapper.selectById(inspectionOrderId); + InspectionOrderExportDto inspectionOrderExportDto = extracted(inspectionOrder); + List<InspectionOrderDetail> list = inspectionOrderDetailService.list(Wrappers.<InspectionOrderDetail>lambdaQuery() + .eq(InspectionOrderDetail::getInspectionOrderId, inspectionOrderId)); + int index = 1; + for (InspectionOrderDetail inspectionOrderDetail : list) { + inspectionOrderDetail.setIndex(index); + index++; + } + + // 鑾峰彇璺緞 + InputStream inputStream = this.getClass().getResourceAsStream("/static/inspection-order.docx"); + Configure configure = Configure.builder() + .bind("inspectionOrderDetailList", new HackLoopTableRenderPolicy()) + .build(); + XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( + new HashMap<String, Object>() {{ + put("inspectionOrder", inspectionOrderExportDto); + put("inspectionOrderDetailList", list); + }}); + + try { + response.setContentType("application/msword"); + String fileName = URLEncoder.encode( + inspectionOrderExportDto.getSampleName(), "UTF-8"); + response.setHeader("Content-disposition", + "attachment;filename=" + fileName + ".docx"); + OutputStream os = response.getOutputStream(); + template.write(os); + os.flush(); + os.close(); + inputStream.close(); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("瀵煎嚭澶辫触"); + } + } + + private InspectionOrderExportDto extracted(InspectionOrder inspectionOrder) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�"); + InspectionOrderExportDto inspectionOrderExportDto = new InspectionOrderExportDto(); + BeanUtils.copyProperties(inspectionOrder, inspectionOrderExportDto); + + if (inspectionOrder.getCommissionDate() != null) { + inspectionOrderExportDto.setCommissionDateString(inspectionOrder.getCommissionDate().format(formatter)); + } + if (inspectionOrder.getReceiptData() != null) { + inspectionOrderExportDto.setReceiptDataString(inspectionOrder.getReceiptData().format(formatter)); + } + if (inspectionOrder.getSampleData() != null) { + inspectionOrderExportDto.setSampleDataString(inspectionOrder.getSampleData().format(formatter)); + } + if (inspectionOrder.getAppointed() != null) { + inspectionOrderExportDto.setAppointedString(inspectionOrder.getAppointed().format(formatter)); + } + + inspectionOrderExportDto.setIsLeave1(inspectionOrder.getIsLeave() != null && inspectionOrder.getIsLeave() == 1? "鈽�" : "鈻�"); + inspectionOrderExportDto.setIsLeave2(inspectionOrder.getIsLeave() != null && inspectionOrder.getIsLeave() == 0? "鈽�" : "鈻�"); + inspectionOrderExportDto.setSend0(inspectionOrder.getSend() != null && inspectionOrder.getSend() == 1? "鈽�" : "鈻�"); + inspectionOrderExportDto.setSend1(inspectionOrder.getSend() != null && inspectionOrder.getSend() == 0? "鈽�" : "鈻�"); + inspectionOrderExportDto.setProcessing0(inspectionOrder.getProcessing() != null && inspectionOrder.getProcessing() == 0? "鈽�" : "鈻�"); + inspectionOrderExportDto.setProcessing1(inspectionOrder.getProcessing() != null && inspectionOrder.getProcessing() == 1? "鈽�" : "鈻�"); + inspectionOrderExportDto.setCriterionRule0(inspectionOrder.getCriterionRule() != null && inspectionOrder.getCriterionRule() == 0? "鈽�" : "鈻�"); + inspectionOrderExportDto.setCriterionRule1(inspectionOrder.getCriterionRule() != null && inspectionOrder.getCriterionRule() == 1? "鈽�" : "鈻�"); + return inspectionOrderExportDto; + } +} -- Gitblit v1.9.3