package com.yuanchu.mom.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.UUID; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; 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.ObjectUtils; 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.deepoove.poi.config.ConfigureBuilder; import com.deepoove.poi.data.*; import com.deepoove.poi.data.style.*; import com.deepoove.poi.util.TableTools; import com.yuanchu.mom.common.GetLook; import com.yuanchu.mom.common.PrintChina; import com.yuanchu.mom.dto.ExcelDto; import com.yuanchu.mom.dto.InsOrderPlanDTO; import com.yuanchu.mom.dto.SampleProductDto; import com.yuanchu.mom.exception.ErrorException; import com.yuanchu.mom.mapper.*; import com.yuanchu.mom.pojo.*; import com.yuanchu.mom.service.*; import com.yuanchu.mom.utils.JackSonUtil; import com.yuanchu.mom.utils.MatrixToImageWriter; import com.yuanchu.mom.utils.QueryWrappers; import com.yuanchu.mom.utils.RedisUtil; import com.yuanchu.mom.vo.*; import org.apache.commons.io.IOUtils; import org.apache.poi.xwpf.usermodel.*; 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.HttpServletRequest; import java.io.*; import java.nio.file.Files; import java.nio.file.Paths; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; /** * 检验任务-业务实现层 */ @Service public class InsOrderPlanServiceImpl extends ServiceImpl implements InsOrderPlanService { @Resource private InsSampleMapper insSampleMapper; @Resource private InsSampleUserMapper insSampleUserMapper; @Resource private GetLook getLook; @Resource private InsOrderMapper insOrderMapper; @Resource private InsOrderService insOrderService; @Resource private StandardTemplateService standardTemplateService; @Resource private InsOrderStateMapper insOrderStateMapper; @Resource private InsProductMapper insProductMapper; @Value("${wordUrl}") private String wordUrl; @Value("${twoCode}") private String twoCode; @Resource private InsReportMapper insReportMapper; @Resource private InsProductResultMapper insProductResultMapper; @Resource private InsProductUserMapper insProductUserMapper; @Resource private InsUnPassService insUnPassService; @Resource AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper; @Resource private InformationNotificationService informationNotificationService; @Resource private UserMapper userMapper; @Resource private CustomMapper customMapper; @Value("${file.path}") private String imgUrl; @Resource private InsBushingService insBushingService; @Resource private InsBushingMapper insBushingMapper; @Resource private InsFiberMapper insFiberMapper; @Resource private InsFibersMapper insFibersMapper; @Resource private InsOrderFileMapper insOrderFileMapper; @Override public Map selectInsOrderPlanList(Page page, InsOrderPlanDTO insOrderPlanDTO) { Map map = new HashMap<>(); map.put("head", PrintChina.printChina(InsOrderPlanVO.class)); Integer userId = null; if (ObjectUtil.isNotEmpty(insOrderPlanDTO.getUserId()) ) { Map map1 = getLook.selectPowerByMethodAndUserId(null); userId = map1.get("userId"); insOrderPlanDTO.setUserId(userId.longValue()); } String sonLaboratory = insOrderPlanDTO.getSonLaboratory();//试验室 IPage insOrderPage = insSampleMapper.findInsSampleAndOrder(page, QueryWrappers.queryWrappers(insOrderPlanDTO), userId,sonLaboratory); map.put("body", insOrderPage); return map; } @Override public Map inspectionOrderDetailsTaskSwitching(Page page, InsOrderPlanDTO insOrderPlanDTO) { Map map = new HashMap<>(); map.put("head", PrintChina.printChina(InsOrderPlanTaskSwitchVo.class)); Map map1 = getLook.selectPowerByMethodAndUserId(null); Integer userId = map1.get("userId"); if (ObjectUtil.isNotEmpty(insOrderPlanDTO.getUserId())) { insOrderPlanDTO.setUserId(userId.longValue()); } String sonLaboratory = insOrderPlanDTO.getSonLaboratory();//试验室 IPage insOrderPage = insSampleMapper.inspectionOrderDetailsTaskSwitching(page, QueryWrappers.queryWrappers(insOrderPlanDTO), userId,sonLaboratory); map.put("body", insOrderPage); return map; } //认领任务 @Override public boolean claimInsOrderPlan(InsOrderPlanDTO entity) { if (Objects.isNull(entity)) { return false; } Map map1 = getLook.selectPowerByMethodAndUserId(null); Integer userId = map1.get("userId"); InsSampleUser insSampleUser = new InsSampleUser(entity.getInsSampleId().intValue(), userId, 1,entity.getSonLaboratory()); return insSampleUserMapper.insert(insSampleUser) > 0; } @Override public Map doInsOrder(Integer id, String laboratory) { InsOrder insOrder = new InsOrder(); insOrder.setId(id); InsOrder order = insOrderMapper.selectById(id); if (BeanUtil.isEmpty(order.getInsTime())) { insOrder.setInsTime(LocalDateTime.now()); insOrderMapper.updateById(insOrder); insOrderStateMapper.update(null, Wrappers.lambdaUpdate().eq(InsOrderState::getInsOrderId, id).eq(InsOrderState::getLaboratory, laboratory).set(InsOrderState::getInsTime, LocalDateTime.now()).set(InsOrderState::getInsState, 1)); } Map map = insOrderService.getInsOrderAndSample(id, laboratory); List list = JSON.parseArray(JSON.toJSONString(map.get("sampleProduct")), SampleProductDto.class); for (SampleProductDto samples : list) { if (BeanUtil.isEmpty(samples.getInsProduct())) continue; samples.setBushing(insBushingService.selectBushingBySampleId(samples.getId())); } map.put("sampleProduct", list); return map; } @Override public List getInsProduct(Integer id, Integer type, String laboratory, HttpServletRequest request) { List insProducts = new ArrayList<>(); switch (type) { case 0: insProducts = insSampleMapper.getInsProduct1(id, laboratory); break; case 1: insProducts = insSampleMapper.getInsProduct2(id); break; case 2: insProducts = insSampleMapper.getInsProduct3(id); break; } // 数采新增 getDeviceMessage(insProducts, request); Set set = new HashSet<>(); Map map2 = new HashMap<>(); if (BeanUtil.isEmpty(insProducts)) return null; getTemplateThing(set, map2, insProducts); return insProducts; } private List getDeviceMessage(List insProducts, HttpServletRequest request) { String ipAddress = request.getRemoteAddr(); // 防止回环地址变为IPv6 String ip = ipAddress.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ipAddress; insProducts.forEach(i -> { Map devices = baseMapper.getDeviceMessage(ip, i.getInspectionItem()); if (ObjectUtils.isNotEmpty(devices)) { InsProductResult insProductResult = i.getInsProductResult(); List list = new ArrayList<>(); Map hashMap = new HashMap<>(); hashMap.put("v", devices.get("device_name")); list.add(hashMap); insProductResult.setEquipName(JSON.toJSON(list).toString()); List listValue = new ArrayList<>(); Map hashMapValue = new HashMap<>(); hashMapValue.put("v", devices.get("management_number")); listValue.add(hashMapValue); insProductResult.setEquipName(JSON.toJSON(list).toString()); insProductResult.setEquipValue(JSON.toJSON(listValue).toString()); } }); return insProducts; } @Override public List checkSubmitPlan(Integer orderId, String laboratory) { List collect = new ArrayList<>(); List insSamples = insSampleMapper.selectList(Wrappers.lambdaQuery().eq(InsSample::getInsOrderId, orderId).select(InsSample::getId)); List ids = insSamples.stream().map(a -> a.getId()).collect(Collectors.toList()); List insProducts = insProductMapper.selectList(Wrappers.lambdaQuery() .in(InsProduct::getInsSampleId, ids) .eq(InsProduct::getSonLaboratory, laboratory) .eq(InsProduct::getState, 1) .eq(InsProduct::getInsResult, 0)); if (insProducts.size() > 0) { collect = insProducts.stream().map(insProduct -> { return insProduct.getInspectionItem() + "-" + insProduct.getInspectionItemSubclass(); }).collect(Collectors.toList()); } return collect; } @Override public Map getFileList(Page page, InsOrderFile insOrderFile) { Map map = new HashMap<>(); map.put("head", PrintChina.printChina(InsOrderFile.class)); IPage insOrderFileIPage = insOrderFileMapper.getFileList(page, QueryWrappers.queryWrappers(insOrderFile)); map.put("body", insOrderFileIPage); return map; } @Override public int uploadFile(Integer orderId, MultipartFile file) { String urlString; String pathName; String path; String filename = file.getOriginalFilename(); String contentType = file.getContentType(); InsOrderFile insOrderFile = new InsOrderFile(); insOrderFile.setInsOrderId(orderId); insOrderFile.setFileName(filename); if (contentType != null && contentType.startsWith("image/")) { // 是图片 path = imgUrl; insOrderFile.setType(1); } else { // 是文件 path = wordUrl; insOrderFile.setType(2); } try { File realpath = new File(path); if (!realpath.exists()) { realpath.mkdirs(); } pathName = UUID.randomUUID() + "_" + file.getOriginalFilename(); urlString = realpath + "/" + pathName; file.transferTo(new File(urlString)); insOrderFile.setFileUrl(pathName); return insOrderFileMapper.insert(insOrderFile); } catch (Exception e) { e.printStackTrace(); System.err.println("附件上传错误"); return 0; } } //切换记录模版查询检验内容 @Override public Map getReportModel(Integer sampleId) { Map map = new HashMap<>(); //先查出套管 List insBushings = insBushingMapper.selectList(Wrappers.lambdaQuery().eq(InsBushing::getInsSampleId, sampleId)); List fibers = new ArrayList<>(); List fiber = new ArrayList<>(); for (InsBushing insBushing : insBushings) { //再查询出所有的光纤带 List insFibers = insFibersMapper.selectList(Wrappers.lambdaQuery().eq(InsFibers::getInsBushingId, insBushing.getId())); if (CollectionUtils.isNotEmpty(insFibers)) { for (InsFibers insFiber : insFibers) { List insProducts = insProductMapper.selectList(Wrappers.lambdaQuery().eq(InsProduct::getInsFibersId, insFiber.getId())); List collect = insProducts.stream().map(InsProduct::getInsResult).filter(sm -> ObjectUtils.isNotEmpty(sm)).collect(Collectors.toList()); if (insProducts.size()==collect.size()) { insFiber.setState(1);//已检验 }else { insFiber.setState(0);//未检验 } } fibers.addAll(insFibers); //查出光纤带下所有的光纤 List fiberList = insFiberMapper.selectList(Wrappers.lambdaQuery().in(InsFiber::getInsFibersId, insFibers.stream().map(InsFibers::getId).collect(Collectors.toList()))); for (InsFiber insFiber : fiberList) { List insProducts = insProductMapper.selectList(Wrappers.lambdaQuery().eq(InsProduct::getInsFiberId, insFiber.getId())); List collect = insProducts.stream().map(InsProduct::getInsResult).filter(sm -> ObjectUtils.isNotEmpty(sm)).collect(Collectors.toList()); if (insProducts.size()==collect.size()) { insFiber.setState(1);//已检验 }else { insFiber.setState(0);//未检验 } } fiber.addAll(fiberList); } else { //如果套管下没有光纤带就只有光纤了 List insFiberList = insFiberMapper.selectList(Wrappers.lambdaQuery().eq(InsFiber::getInsBushingId, insBushing.getId())); for (InsFiber insFiber : insFiberList) { List insProducts = insProductMapper.selectList(Wrappers.lambdaQuery().eq(InsProduct::getInsFiberId, insFiber.getId())); List collect = insProducts.stream().map(InsProduct::getInsResult).filter(sm -> ObjectUtils.isNotEmpty(sm)).collect(Collectors.toList()); if (insProducts.size()==collect.size()) { insFiber.setState(1);//已检验 }else { insFiber.setState(0);//未检验 } } fiber.addAll(insFiberList); } } map.put("光纤带", fibers); map.put("光纤", fiber); return map; } //温度循环查看列表数据(包括通过样品id,循环次数,温度,循环次数进行筛选) @Override public Map temCycle(Integer sampleId, String inspectionItem, String inspectionItemSubclass) { Map map = new HashMap<>(); //样品信息 SampleVo sampleVo = insSampleMapper.getDetailById(sampleId); map.put("sampleVo", sampleVo); List productVos = new ArrayList<>(); //先查出这个样品下有哪些管色标,光纤带,光纤色标 //先查出套管 List insBushings = insBushingMapper.selectList(Wrappers.lambdaQuery().eq(InsBushing::getInsSampleId, sampleId)); if (insBushings.size()>0) { //通信--温度循环 for (InsBushing insBushing : insBushings) { //再查询出所有的光纤带 List insFibers = insFibersMapper.selectList(Wrappers.lambdaQuery().eq(InsFibers::getInsBushingId, insBushing.getId())); if (CollectionUtils.isNotEmpty(insFibers)) { for (InsFibers insFiber : insFibers) { //查出光纤带下所有的光纤 List fiberList = insFiberMapper.selectList(Wrappers.lambdaQuery().eq(InsFiber::getInsFibersId, insFiber.getId())); for (InsFiber fiber : fiberList) { //再根据关联的光纤配置的id和循环次数和温度和样品id进行查询检验项目 List insProducts = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getInsSampleId, sampleId) .eq(InsProduct::getInspectionItem, inspectionItem) .eq(InsProduct::getInspectionItemSubclass, inspectionItemSubclass) .eq(InsProduct::getInsFiberId, fiber.getId())); for (InsProduct insProduct : insProducts) { InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.lambdaQuery().eq(InsProductResult::getInsProductId, insProduct.getId())); ProductVo productVo = new ProductVo(); productVo.setCode(insFiber.getCode()); productVo.setColor(fiber.getColor()); productVo.setBushColor(fiber.getBushColor()); if (ObjectUtils.isNotEmpty(insProductResult)) { insProduct.setInsProductResult(insProductResult); } //求同等条件下1次循环20度常温的计算值 InsProductResult insProductResult1 = insProductResultMapper.selectOne(Wrappers.lambdaQuery().eq(InsProductResult::getInsProductId,insProductMapper.selectOne(Wrappers.lambdaQuery() .eq(InsProduct::getInsSampleId,sampleId) .eq(InsProduct::getInspectionItem, "1") .eq(InsProduct::getInspectionItemSubclass, "20℃(常温)") .eq(InsProduct::getInspectionItemClass, insProduct.getInspectionItemClass()) .eq(InsProduct::getInsFiberId, fiber.getId())).getId() )); if (!insProductResult1.getComValue().equals("[]")) { insProduct.setComplue(insProductResult1.getComValue().split(":")[1].split("\"")[1]); } productVo.setInsProduct(insProduct); productVos.add(productVo); } } } } else { //如果套管下没有光纤带就只有光纤了 List insFiberList = insFiberMapper.selectList(Wrappers.lambdaQuery().eq(InsFiber::getInsBushingId, insBushing.getId())); for (InsFiber fiber : insFiberList) { //再根据关联的光纤配置的id和循环次数和温度和样品id进行查询检验项目 List insProducts = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getInsSampleId, sampleId) .eq(InsProduct::getInspectionItem, inspectionItem) .eq(InsProduct::getInspectionItemSubclass, inspectionItemSubclass) .eq(InsProduct::getInsFiberId, fiber.getId())); for (InsProduct insProduct : insProducts) { InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.lambdaQuery().eq(InsProductResult::getInsProductId, insProduct.getId())); ProductVo productVo = new ProductVo(); productVo.setCode("/"); productVo.setColor(fiber.getColor()); productVo.setBushColor(fiber.getBushColor()); insProduct.setInsProductResult(insProductResult); //求同等条件下1次循环20度常温的计算值 InsProductResult insProductResult1 = insProductResultMapper.selectOne(Wrappers.lambdaQuery().eq(InsProductResult::getInsProductId,insProductMapper.selectOne(Wrappers.lambdaQuery() .eq(InsProduct::getInsSampleId,sampleId) .eq(InsProduct::getInspectionItem, "1") .eq(InsProduct::getInspectionItemSubclass, "20℃(常温)") .eq(InsProduct::getInspectionItemClass, insProduct.getInspectionItemClass()) .eq(InsProduct::getInsFiberId, fiber.getId())).getId() )); if (!insProductResult1.getComValue().equals("[]")) { insProduct.setComplue(insProductResult1.getComValue().split(":")[1].split("\"")[1]); } productVo.setInsProduct(insProduct); productVos.add(productVo); } } } } productVos = productVos.stream().sorted(Comparator.comparing(productVo -> productVo.getInsProduct().getInspectionItemClass())).collect(Collectors.toList()); } else { //电力--热循环和温升试验 List insProducts = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getInsSampleId, sampleId) .eq(InsProduct::getInspectionItem, inspectionItem)); for (InsProduct insProduct : insProducts) { InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.lambdaQuery().eq(InsProductResult::getInsProductId, insProduct.getId())); ProductVo productVo = new ProductVo(); if (ObjectUtils.isNotEmpty(insProductResult)) { insProduct.setInsProductResult(insProductResult); } productVo.setInsProduct(insProduct); productVos.add(productVo); } } map.put("productVos", productVos); return map; } @Override public void saveInsContext(Map insContext) { Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId"); CompletableFuture.supplyAsync(() -> { insContext.forEach((k, v) -> { JSONObject jo = JSON.parseObject(JSON.toJSONString(v)); InsProduct insProduct = new InsProduct(); insProduct.setId(Integer.parseInt(k)); List results = insProductResultMapper.selectList(Wrappers.lambdaQuery().eq(InsProductResult::getInsProductId, insProduct.getId())); InsProductResult result; if (CollectionUtils.isEmpty(results)) { result = new InsProductResult(); } else { result = results.get(0); } result.setInsProductId(Integer.parseInt(k)); if (jo.get("insValue") != null) { JSONArray jsonArray = JSON.parseArray(JSON.toJSONString(jo.get("insValue"))); List> iv = new ArrayList<>(); for (Object o : jsonArray) { JSONObject insValue = JSON.parseObject(JSON.toJSONString(o)); Map map = new HashMap<>(); map.put("v", JSON.parseObject(JSON.toJSONString(insValue.get("v"))).get("v")); map.put("r", JSON.toJSONString(insValue.get("r"))); map.put("c", JSON.toJSONString(insValue.get("c"))); try { if ((insValue.get("u") == null || insValue.get("u").equals("")) && StrUtil.isNotEmpty(JSON.parseObject(JSON.toJSONString(insValue.get("v"))).get("v").toString())) { map.put("u", userId + ""); } else { map.put("u", insValue.get("u")); } iv.add(map); } catch (Exception e) { } } result.setInsValue(JSON.toJSONString(iv)); } if (jo.get("comValue") != null && !Objects.equals(jo.get("comValue"), "")) { JSONArray jsonArray2 = JSON.parseArray(JSON.toJSONString(jo.get("comValue"))); List> cv = new ArrayList<>(); for (Object o : jsonArray2) { JSONObject comValue = JSON.parseObject(JSON.toJSONString(o)); Map map = new HashMap<>(); map.put("v", JSON.parseObject(JSON.toJSONString(comValue.get("v"))).get("v")); cv.add(map); } result.setComValue(JSON.toJSONString(cv)); } try { JSONObject resValue = JSON.parseObject(JSON.toJSONString(jo.get("resValue"))); if (resValue.get("v") != null) { Object o = JSON.parseObject(JSON.toJSONString(resValue.get("v"))).get("v"); insProduct.setLastValue(o.equals("") ? null : (o.toString())); } } catch (Exception e) { } if (jo.get("equipValue") != null) { JSONArray jsonArray2 = JSON.parseArray(JSON.toJSONString(jo.get("equipValue"))); List> ev = new ArrayList<>(); for (Object o : jsonArray2) { JSONObject equipValue = JSON.parseObject(JSON.toJSONString(o)); Map map = new HashMap<>(); map.put("v", JSON.parseObject(JSON.toJSONString(equipValue.get("v"))).get("v")); ev.add(map); } result.setEquipValue(JSON.toJSONString(ev)); } if (jo.get("equipName") != null) { JSONArray jsonArray2 = JSON.parseArray(JSON.toJSONString(jo.get("equipName"))); List> ev = new ArrayList<>(); for (Object o : jsonArray2) { JSONObject equipValue = JSON.parseObject(JSON.toJSONString(o)); Map map = new HashMap<>(); map.put("v", JSON.parseObject(JSON.toJSONString(equipValue.get("v"))).get("v")); ev.add(map); } result.setEquipName(JSON.toJSONString(ev)); } try { JSONObject insResult = JSON.parseObject(JSON.toJSONString(jo.get("insResult"))); String ir = JSON.parseObject(JSON.toJSONString(insResult.get("v"))).get("v") + ""; insProduct.setInsResult(Integer.parseInt(ir)); } catch (Exception e) { } if (BeanUtil.isEmpty(result.getId())) { result.setCreateUser(userId); result.setUpdateUser(userId); insProductResultMapper.insert(result); } else { result.setUpdateUser(userId); result.setUpdateTime(LocalDateTime.now()); insProductResultMapper.updateById(result); } insProduct.setUpdateUser(userId); insProductMapper.updateById(insProduct); insProductUserMapper.insert(new InsProductUser(null, userId, LocalDateTime.now(), insProduct.getId())); insProduct = insProductMapper.selectById(insProduct); //查询检验单信息 InsOrder insOrder = insOrderMapper.selectById(insSampleMapper.selectById(insProduct.getInsSampleId()).getInsOrderId()); //校验如果这个人这个检测项目已经添加过了则不需要再新增 Long count = auxiliaryOutputWorkingHoursMapper.selectCount(Wrappers.lambdaQuery() .eq(AuxiliaryOutputWorkingHours::getCheck, userId) .eq(AuxiliaryOutputWorkingHours::getInspectionItem, insProduct.getInspectionItem()) .eq(AuxiliaryOutputWorkingHours::getInspectionItemSubclass, insProduct.getInspectionItemSubclass()) .eq(AuxiliaryOutputWorkingHours::getOrderNo, insOrder.getEntrustCode())); if (count == 0 && ObjectUtils.isNotEmpty(insProduct.getManHour())) { //添加每个人的产量工时,要判断当前时间是否是这个人的排班时间,如果不是则是加班 AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours = new AuxiliaryOutputWorkingHours(); auxiliaryOutputWorkingHours.setInspectionItem(insProduct.getInspectionItem());//检测父项 auxiliaryOutputWorkingHours.setInspectionItemSubclass(insProduct.getInspectionItemSubclass());//检测子项 auxiliaryOutputWorkingHours.setSample(insSampleMapper.selectById(insProduct.getInsSampleId()).getSampleCode());//样品编号 auxiliaryOutputWorkingHours.setOrderNo(insOrder.getEntrustCode());//非加班委托单号 auxiliaryOutputWorkingHours.setWorkTime(insProduct.getManHour());//非加班工时 auxiliaryOutputWorkingHours.setAmount(1);//非加班数量 auxiliaryOutputWorkingHours.setOutputWorkTime(insProduct.getManHour());//产量工时 auxiliaryOutputWorkingHours.setManHourGroup(insProduct.getManHourGroup());//工时分组 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); auxiliaryOutputWorkingHours.setDateTime(LocalDateTime.now().toLocalDate().atStartOfDay().format(formatters));//日期 LocalDateTime localDateTime = LocalDateTime.now(); DateTime parse = DateUtil.parse(localDateTime.format(formatter)); auxiliaryOutputWorkingHours.setWeekDay(getWeek(localDateTime.format(formatters)));//星期 auxiliaryOutputWorkingHours.setWeek(String.valueOf(DateUtil.weekOfYear(DateUtil.offsetDay(parse, 1))));//周次 auxiliaryOutputWorkingHours.setCheck(userId);//检测人 auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours); } InsSample insSample = insSampleMapper.selectById(insProductMapper.selectById(insProduct.getId()).getInsSampleId()); insSample.setInsState(1); Long l = insProductMapper.selectCount(Wrappers.lambdaQuery() .eq(InsProduct::getInsSampleId, insSample.getId())); Long l1 = insProductMapper.selectCount(Wrappers.lambdaQuery() .eq(InsProduct::getInsSampleId, insSample.getId()).isNotNull(InsProduct::getInsResult)); if (l == l1) { insSample.setInsState(2); } insSampleMapper.updateById(insSample); /*校验一下result表*/ List insProductResults = insProductResultMapper.selectList(Wrappers.lambdaQuery().eq(InsProductResult::getInsProductId, insProduct.getId()).orderByDesc(InsProductResult::getId)); if (insProductResults.size() > 1) { insProductResultMapper.deleteById(insProductResults.get(0)); } }); return insContext.keySet().stream().findFirst().orElse(null); }).thenAccept(res -> { if (res != null) { int pId = Integer.parseInt(res.replaceAll("\\D+", "")); InsProduct insProduct = insProductMapper.selectById(pId); // 通过pId 获取当前样本id int sampleId = insProductMapper.selectById(pId).getInsSampleId(); // 通过样本id获取订单id int orderId = insSampleMapper.selectById(sampleId).getInsOrderId(); // 通过订单id查找所有样本id List sampleIds = insSampleMapper.selectList(Wrappers.lambdaQuery().eq(InsSample::getInsOrderId, orderId)).stream().map(InsSample::getId).collect(Collectors.toList()); // 通过检查每一个样本id查到属于检验项结论 is null的数量 Long count = insProductMapper.selectCount(Wrappers.lambdaQuery().in(InsProduct::getInsSampleId, sampleIds).isNull(InsProduct::getInsResult).eq(InsProduct::getSonLaboratory, insProduct.getSonLaboratory()).eq(InsProduct::getState, 1)); if (count == 0) { insOrderStateMapper.update(new InsOrderState(), Wrappers.lambdaUpdate() .eq(InsOrderState::getInsOrderId, orderId) .eq(InsOrderState::getLaboratory, insProduct.getSonLaboratory()) .set(InsOrderState::getInsState, 2)); } } }).exceptionally(e -> { e.printStackTrace(); return null; }); } //交接 @Override public int upPlanUser(Integer userId, Integer orderId,String sonLaboratory) { InsSampleUser insSampleUser = new InsSampleUser(); insSampleUser.setUserId(userId); insSampleUser.setInsSampleId(orderId); insSampleUser.setState(0); insSampleUser.setSonLaboratory(sonLaboratory); return insSampleUserMapper.insert(insSampleUser); } @Override @Transactional(rollbackFor = Exception.class) public int verifyPlan(Integer orderId, String laboratory, Integer type, String tell) { Integer num = (type == 1 ? 5 : 4); LocalDateTime now = LocalDateTime.now(); insOrderStateMapper.update(null, Wrappers.lambdaUpdate().eq(InsOrderState::getInsOrderId, orderId).eq(InsOrderState::getLaboratory, laboratory).set(InsOrderState::getInsTime, now).set(InsOrderState::getInsState, num).set(InsOrderState::getVerifyTell, tell).set(InsOrderState::getVerifyUser, getLook.selectPowerByMethodAndUserId(null).get("userId"))); Long count = insOrderStateMapper.selectCount(Wrappers.lambdaQuery().eq(InsOrderState::getInsOrderId, orderId).ne(InsOrderState::getInsState, 5)); if (count == 0 && num == 5) { List insUnPasses = new ArrayList<>(); /*样品下的项目只要有一个项目不合格则检验结果为0,否则为1*/ //这里的insSamples是订单下的所有样品包括("/") List insSamples = insSampleMapper.selectList(Wrappers.lambdaQuery().eq(InsSample::getInsOrderId, orderId)); for (InsSample insSample : insSamples) { List insProducts = insProductMapper.selectList(Wrappers.lambdaQuery().eq(InsProduct::getInsSampleId, insSample.getId()).eq(InsProduct::getState, 1)); List results = insProducts.stream().map(InsProduct::getInsResult).filter(str -> str != null).collect(Collectors.toList()); if (results.contains(0)) { insSample.setInsResult(0); } else { insSample.setInsResult(1); } insSampleMapper.updateById(insSample); /*复核通过后,将不合格的项目信息添加到ins_un_pass表中*/ for (InsProduct insProduct : insProducts) { if (insProduct.getInsResult() == 0) { InsUnPass insUnPass = new InsUnPass(); insUnPass.setId(null); insUnPass.setModel(insSample.getModel()); insUnPass.setSample(insSample.getSample()); insUnPass.setInspectionItem(insProduct.getInspectionItem()); insUnPass.setInspectionItemSubclass(insProduct.getInspectionItemSubclass()); insUnPass.setLastValue(insProduct.getLastValue()); insUnPass.setEntrustCode(insOrderMapper.selectById(orderId).getEntrustCode()); List userIds = insProductUserMapper.selectList(Wrappers.lambdaQuery().eq(InsProductUser::getInsProductId, insProduct.getId())).stream().map(InsProductUser::getCreateUser).distinct().collect(Collectors.toList()); String name = userMapper.selectBatchIds(userIds).stream().map(User::getName).collect(Collectors.joining(",")); insUnPass.setName(name); insUnPasses.add(insUnPass); } } } insUnPassService.saveBatch(insUnPasses); InsOrder insOrder = insOrderMapper.selectById(orderId); Map user = insProductMapper.selectUserById(insOrder.getUserId()); //samples是不包括带有"/"的样品 List samples = insSampleMapper.selectSampleProductListByOrderId(orderId); InsReport insReport = new InsReport(); insReport.setCode(insOrder.getEntrustCode()); insReport.setInsOrderId(orderId); List> tables = new ArrayList<>(); Set standardMethod = new HashSet<>(); Set deviceSet = new HashSet<>(); Set models = new HashSet<>(); AtomicReference productSize = new AtomicReference<>(0); String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; AtomicReference resultCh = new AtomicReference<>(""); AtomicReference resultEn = new AtomicReference<>(""); /*基础报告(根据绘制的原始记录模版形成)*/ samples.forEach(a -> { Set set = new HashSet<>(); Map map2 = new HashMap<>(); Long productCount = insProductMapper.selectCount(Wrappers.lambdaQuery().eq(InsProduct::getInsSampleId, a.getId())); productSize.set(productSize.get() + Integer.parseInt(productCount + "")); models.add(a.getModel()); standardMethod.add(baseMapper.getStandardMethodCode(a.getStandardMethodListId())); Set templateSet = new HashSet<>(); getTemplateThing(set, map2, a.getInsProduct()); for (InsProduct b : a.getInsProduct()) { if (b.getInsProductResult() != null) { List jsonObjects = JSON.parseArray(b.getInsProductResult().getEquipValue(), JSONObject.class); for (JSONObject jsonObject : jsonObjects) { if (!"".equals(jsonObject.get("v") + "")) { deviceSet.add(jsonObject.get("v") + ""); } } } if (b.getTemplate() == null) { continue; } if (b.getTemplate().size() == 0) { continue; } templateSet.add(JSON.toJSONString(b.getTemplate())); } AtomicInteger index = new AtomicInteger(); Set itemSet = new HashSet<>(); templateSet.forEach(tem -> { Set set2 = new HashSet<>(); List rows = new ArrayList<>(); List text = new ArrayList<>(); RowRenderData rowRenderData; Set delSet = new HashSet<>(); List excelDtos = JSON.parseArray(tem, ExcelDto.class); List mcList = new ArrayList<>(); excelDtos.forEach(b -> { if (b.getV().getMc() != null && b.getV().getMc().getCs() != null && b.getV().getMc().getRs() != null) { mcList.add(b); } }); int count5 = 0; for (ExcelDto b : mcList) { for (ExcelDto excelDto : excelDtos) { for (int i = 0; i < b.getV().getMc().getCs(); i++) { for (int i2 = 0; i2 < b.getV().getMc().getRs(); i2++) { if (excelDto.getC() == b.getC() + i && excelDto.getR() == b.getR() + i2) { ExcelDto bb = JSON.parseObject(JSON.toJSONString(b), ExcelDto.class); excelDto.getV().setV(bb.getV().getV()); excelDto.getV().setPs(bb.getV().getPs()); excelDto.getV().setFc(bb.getV().getFc()); excelDto.getV().setFs(bb.getV().getFs()); excelDto.getV().setHt(bb.getV().getHt()); excelDto.setMc(count5); break; } } } } count5++; } List temp = JSON.parseArray(JSON.toJSONString(excelDtos), JSONObject.class); Map pMap = new HashMap<>(); Set delRSet = new HashSet<>(); delRSet.add("0"); for (JSONObject jo1 : temp) { JSONObject v = JSON.parseObject(JSON.toJSONString(jo1.get("v"))); if (Integer.parseInt(jo1.get("c") + "") > 9) { delSet.add(jo1.get("c") + ""); continue; } if (v.get("ps") != null) { int count3 = 0; String str = ""; String s = JSON.parseObject(JSON.toJSONString(v.get("ps"))).get("value") + ""; if (s.contains("检验值") || s.contains("设备名称") || s.contains("设备编码") || s.contains("试验方法") || s.contains("检测方法")) { delSet.add(jo1.get("c") + ""); continue; } for (JSONObject jo2 : temp) { JSONObject v2 = JSON.parseObject(JSON.toJSONString(jo2.get("v"))); if (jo1.get("r").equals(jo2.get("r"))) { if (v2.get("ps") != null && JSON.parseObject(JSON.toJSONString(v2.get("ps"))).get("value").toString().contains("检验项")) { if (count3 == 0) { str += v2.get("v"); count3 += 1; } } else if (v2.get("ps") != null && JSON.parseObject(JSON.toJSONString(v2.get("ps"))).get("value").toString().contains("检验子项")) { if (count3 == 1) { str += v2.get("v"); count3 += 1; } } } } if (!str.equals("")) { int count2 = 0; for (InsProduct product : a.getInsProduct()) { if ((product.getInspectionItem() + product.getInspectionItemSubclass()).equals(str)) { pMap.put(jo1.get("r") + "", product); break; } else { count2++; } } if (count2 == a.getInsProduct().size()) { delRSet.add(jo1.get("r") + ""); } } } } for (int i = 0; i < temp.size(); i++) { JSONObject jo1 = temp.get(i); TextRenderData textRenderData = new TextRenderData(); if (set2.add(Integer.parseInt(jo1.get("r") + ""))) { if (text.size() > 0) { TextRenderData[] text2 = text.toArray(new TextRenderData[0]); rowRenderData = Rows.of(text2).center().rowAtleastHeight(1).create(); rows.add(rowRenderData); text = new ArrayList<>(); } } if (delRSet.stream().anyMatch(e -> e.equals(jo1.get("r") + ""))) { continue; } if (delSet.stream().anyMatch(e -> e.equals(jo1.get("c") + ""))) { continue; } JSONObject v = JSON.parseObject(JSON.toJSONString(jo1.get("v"))); InsProduct p = pMap.get(jo1.get("r") + ""); if (p != null && v.get("ps") != null) { String value = JSON.parseObject(JSON.toJSONString(v.get("ps"))).get("value") + ""; if (value.contains("要求值")) { textRenderData.setText(ObjectUtils.isNotEmpty(p.getTell()) ? p.getTell() : ""); } else if (value.contains("单位")) { textRenderData.setText(p.getUnit()); } else if (value.contains("结论")) { switch (p.getInsResult()) { case 1: textRenderData.setText("√"); break; case 0: resultCh.set(resultCh.get() + "、" + p.getInspectionItem() + (Objects.equals(p.getInspectionItemSubclass(), "") ? "" : " " + p.getInspectionItemSubclass())); resultEn.set(resultEn.get() + "、" + p.getInspectionItemEn() + ((Objects.equals(p.getInspectionItemSubclassEn(), "") || Objects.equals(p.getInspectionItemSubclassEn(), null)) ? "" : " " + p.getInspectionItemSubclassEn())); textRenderData.setText("×"); break; default: textRenderData.setText("-"); break; } } else if (value.contains("序号")) { if (itemSet.add(p.getInspectionItem())) { index.getAndIncrement(); } textRenderData.setText(index + ""); } else if (value.contains("计算值")) { JSONArray jsonArray = JSON.parseArray(p.getInsProductResult().getComValue()); textRenderData.setText((JSON.parseObject(JSON.toJSONString(jsonArray.get(0))).get("v") + "").equals("") ? "/" : JSON.parseObject(JSON.toJSONString(jsonArray.get(0))).get("v") + ""); } else if (value.contains("最终值")) { textRenderData.setText(p.getLastValue()); } else if (value.contains("样品编号")) { textRenderData.setText(a.getSampleCode()); } else if (value.contains("样品型号")) { textRenderData.setText(a.getModel()); } else if (value.contains("样品名称")) { textRenderData.setText(a.getSample()); } else if (value.contains("试验方法")) { textRenderData.setText(p.getMethodS()); } else if (value.contains("检验项")) { if (ObjectUtils.isEmpty(p.getInspectionItemEn())) { textRenderData.setText(p.getInspectionItem()); } else { textRenderData.setText(p.getInspectionItem() + "@" + p.getInspectionItemEn()); } } else if (value.contains("检验子项")) { if (ObjectUtils.isEmpty(p.getInspectionItemSubclassEn())) { textRenderData.setText(p.getInspectionItemSubclass()); } else { textRenderData.setText(p.getInspectionItemSubclass() + "@" + p.getInspectionItemSubclassEn()); } } else { textRenderData.setText(v.get("v") == null ? "" : v.get("v") + ""); } } else if (p == null && v.get("ps") != null) { String value = JSON.parseObject(JSON.toJSONString(v.get("ps"))).get("value") + ""; p = pMap.get(pMap.keySet().iterator().next()); if (value.contains("最终值")) { textRenderData.setText(p.getLastValue()); } else if (value.contains("结论")) { switch (p.getInsResult()) { case 1: textRenderData.setText("✔"); break; case 0: resultCh.set(resultCh.get() + "、" + p.getInspectionItem() + (p.getInspectionItemSubclass().equals("") ? "" : " " + p.getInspectionItemSubclass())); resultEn.set(resultEn.get() + "、" + p.getInspectionItemEn() + ((Objects.equals(p.getInspectionItemSubclassEn(), "") || Objects.equals(p.getInspectionItemSubclassEn(), null)) ? "" : " " + p.getInspectionItemSubclassEn())); textRenderData.setText("✖"); break; default: textRenderData.setText("-"); break; } } else if (value.contains("样品编号")) { textRenderData.setText(a.getSampleCode()); } else if (value.contains("样品型号")) { textRenderData.setText(a.getModel()); } else if (value.contains("样品名称")) { textRenderData.setText(a.getSample()); } else { textRenderData.setText(v.get("v") == null ? "" : v.get("v") + ""); } } else { textRenderData.setText(v.get("v") == null ? "" : v.get("v") + ""); } if (jo1.get("mc") != null) { textRenderData.setText(textRenderData.getText() + "∑" + jo1.get("mc")); } Style style = new Style(); style.setFontFamily("宋体"); if (!((v.get("fc") + "").indexOf("rgb") > -1)) { style.setColor(v.get("fc") == null ? "000000" : (v.get("fc") + "").replace("#", "")); } else { style.setColor("000000"); } textRenderData.setStyle(style); text.add(textRenderData); } TextRenderData[] text2 = text.toArray(new TextRenderData[0]); rowRenderData = Rows.of(text2).rowAtleastHeight(1).center().create(); if (rowRenderData.getCells().size() != 0) { rows.add(rowRenderData); } List tables1 = new ArrayList<>(); TableRenderData tableRenderData = new TableRenderData(); tableRenderData.setRows(new ArrayList<>()); double totalHeight = 0.0; // 用于跟踪当前表格的总行高 double heightThreshold = 8000.0; // 阈值, List firstTwoRows = new ArrayList<>(); // 保存前两行以便复制到新表格 // 保存前两行以便复制到新表格 if (rows.size() >= 2) { firstTwoRows.add(rows.get(0)); firstTwoRows.add(rows.get(1)); } for (RowRenderData row : rows) { double rowHeight = row.getRowStyle().getHeight(); // 获取当前行的行高 totalHeight += rowHeight; // 更新总行高 if (totalHeight >= heightThreshold) { // 创建新表格并复制前两行 TableRenderData newTableRenderData = new TableRenderData(); newTableRenderData.setRows(new ArrayList<>(firstTwoRows)); //设置样式 TableStyle tableStyle = new TableStyle(); tableStyle.setColWidths(new int[]{650, 1600, 2000, 750, 2800, 1100, 1100}); tableStyle.setWidth("10000"); tableStyle.setAlign(TableRowAlign.CENTER); BorderStyle borderStyle = new BorderStyle(); borderStyle.setColor("000000"); borderStyle.setType(XWPFTable.XWPFBorderType.THICK); borderStyle.setSize(14); tableStyle.setLeftBorder(borderStyle); tableStyle.setTopBorder(borderStyle); tableStyle.setRightBorder(borderStyle); tableStyle.setBottomBorder(borderStyle); tableRenderData.setTableStyle(tableStyle); newTableRenderData.setTableStyle(tableStyle); tables1.add(tableRenderData); tableRenderData = newTableRenderData; totalHeight = rowHeight; } tableRenderData.getRows().add(row); } if (!tableRenderData.getRows().isEmpty()) { //设置样式 TableStyle tableStyle = new TableStyle(); tableStyle.setColWidths(new int[]{650, 1600, 2000, 750, 2800, 1100, 1100}); tableStyle.setWidth("10000"); tableStyle.setAlign(TableRowAlign.CENTER); BorderStyle borderStyle = new BorderStyle(); borderStyle.setColor("000000"); borderStyle.setType(XWPFTable.XWPFBorderType.THICK); borderStyle.setSize(14); tableStyle.setLeftBorder(borderStyle); tableStyle.setTopBorder(borderStyle); tableStyle.setRightBorder(borderStyle); tableStyle.setBottomBorder(borderStyle); tableRenderData.setTableStyle(tableStyle); tables1.add(tableRenderData); } tables1.forEach(table -> { Map tableMap = new HashMap<>(); tableMap.put("table", table); tableMap.put("report", insReport); tables.add(tableMap); }); }); }); /*光纤接头损耗的报告样式*/ //查询订单下所有样品的检验项目,如果有光纤接头损耗则重新构建表格 List> tables4 = new ArrayList<>(); List insProducts0 = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getState, 1) .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList()))); if (insProducts0.stream().map(InsProduct::getInspectionItem).collect(Collectors.toList()).contains("光纤接头损耗")) { //清空原有的基础表格 tables.clear(); //去重的检验项目 List filteredProducts = insProducts0.stream().map(insProduct -> { return (insProduct.getInspectionItem() + "," + insProduct.getInspectionItemEn() + "," + insProduct.getInspectionItemSubclass() + "," + insProduct.getInspectionItemSubclassEn() + "," + insProduct.getTell()); }).distinct().collect(Collectors.toList()); //检验项目的总数量(去重) long size = filteredProducts.size(); long number = 10; long number2 = 7; long index = 1; //检验结果报告(当检验项目超过10个新建表) for (long i = 0; i < size; i++) { if (i % number == 0) { List rows = new ArrayList<>(); //表格的行数 × √ ✖ ✔ long count1 = size-(index-1)*number < number ? size-(index-1)*number + 3 : number + 3; for (int j = 0; j cells = new ArrayList<>(); //表格的列数 for (int k = 0; k < 6; k++) { CellRenderData cellRenderData = new CellRenderData(); CellStyle cellStyle = new CellStyle(); cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER); cellRenderData.setCellStyle(cellStyle); List paragraphRenderDataList = new ArrayList<>(); ParagraphRenderData paragraphRenderData = new ParagraphRenderData(); ParagraphStyle paragraphStyle = new ParagraphStyle(); paragraphStyle.setAlign(ParagraphAlignment.CENTER); paragraphRenderData.setParagraphStyle(paragraphStyle); List renderData = new ArrayList<>(); TextRenderData textRenderData = new TextRenderData(); Style style = new Style(); style.setFontFamily("宋体"); style.setColor("000000"); textRenderData.setStyle(style); if (j == 0) { //第一行 if (k < 4) { //前4列 textRenderData.setText("规格型号@Type∑11"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //后2列 textRenderData.setText(insSamples.get(0).getModel() + "∑12"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else if (j == 1) { //第二行 if (k == 0) { //第一列 textRenderData.setText("序号@No.∑13"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k == 1) { //第二列 textRenderData.setText("检验项目@Test Item∑14"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k == 2 || k == 3) { //第三四列 textRenderData.setText("标准要求@Requirement∑15"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k == 4) { //第五列 textRenderData.setText("检验结果@Test result∑16"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //第六列 textRenderData.setText("结论@Conclusion∑17"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else if (j == count1-1) { //最后一行 if (k == 0 || k == 1) { //前两列 textRenderData.setText("备注∑18"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { textRenderData.setText("“√”表示项目合格,“×”表示项目不合格@“√”indicates test Item is qualified,“×”indicates test Item is unqualified∑19"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else { if (k == 0) { //第一列 textRenderData.setText((j - 1) + ""); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k == 1) { //第二列 String insProduct; try { insProduct = filteredProducts.get((int) ((j - 2) + 10 * (index - 1))); } catch (Exception e) { continue; } String[] split = insProduct.split(","); if (ObjectUtils.isEmpty(split[1]) || split[1].equals("")) { textRenderData.setText(split[0]); } else { textRenderData.setText(split[0] + "@" + split[1]); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k == 2) { //第三列 //先判断检验项是否有子类 String insProduct; try { insProduct = filteredProducts.get((int) ((j - 2) + 10 * (index - 1))); } catch (Exception e) { continue; } String[] split = insProduct.split(","); if (ObjectUtils.isEmpty(split[2]) || split[2].equals("")) { //如果没有子类 textRenderData.setText(split[4] + "∑2" + j);//要求描述 } else { //如果有子类 //还要判断是否有英文 if (ObjectUtils.isEmpty(split[3]) || split[3].equals("")) { textRenderData.setText(split[2]);//检验子项 } else { textRenderData.setText(split[2] + "@" + split[3]);//检验子项+英文 } } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k == 3) { //第四列 //先判断检验项是否有子类 String insProduct; try { insProduct = filteredProducts.get((int) ((j - 2) + 10 * (index - 1))); } catch (Exception e) { continue; } String[] split = insProduct.split(","); if (ObjectUtils.isEmpty(split[2]) || split[2].equals("")) { //如果没有子类 textRenderData.setText(split[4] + "∑2" + j);//要求描述 } else { //如果有子类 textRenderData.setText(split[4]);//要求描述 } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k == 4) { //第五列 String insProduct; try { insProduct = filteredProducts.get((int) ((j - 2) + 10 * (index - 1))); } catch (Exception e) { continue; } String[] split = insProduct.split(","); //查询所有样品该检验项的检验结果(最终值) List products = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getState, 1) .eq(InsProduct::getInspectionItem, split[0]) .eq(InsProduct::getInspectionItemSubclass, split[2]) .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList()))); //获取最小值和最大值 Optional max = products.stream().map(InsProduct::getLastValue) .filter(value -> !value.isEmpty()) .max(String::compareTo); Optional min = products.stream().map(InsProduct::getLastValue) .filter(value -> !value.isEmpty()) .min(String::compareTo); textRenderData.setText(min.get() + "-" + max.get());//检验结果 renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //最后一列 String insProduct; try { insProduct = filteredProducts.get((int) ((j - 2) + 10 * (index - 1))); } catch (Exception e) { continue; } String[] split = insProduct.split(","); //查询所有样品该检验项的检验结论(ins_result) List products = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getState, 1) .eq(InsProduct::getInspectionItem, split[0]) .eq(InsProduct::getInspectionItemSubclass, split[2]) .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList()))); List result = products.stream().map(InsProduct::getInsResult).distinct().collect(Collectors.toList()); if (result.size() == 1 && result.contains(1)) { //合格 textRenderData.setText("√"); } else { //不合格 textRenderData.setText("×"); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } } rowRenderData.setCells(cells); if (rowRenderData.getCells().size() != 0) { rows.add(rowRenderData); } } TableRenderData tableRenderData = new TableRenderData(); tableRenderData.setRows(rows); int countSize = tableRenderData.getRows().get(0).getCells().size(); for (RowRenderData row : tableRenderData.getRows()) { /* for (CellRenderData cell : row.getCells()) { System.out.print(cell.getParagraphs().get(0).getContents()); } System.out.println("");*/ if (row.getCells().size() != countSize) { throw new ErrorException("每行单元格不相等1"); } } TableStyle tableStyle = new TableStyle(); tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH); tableStyle.setAlign(TableRowAlign.CENTER); BorderStyle borderStyle = new BorderStyle(); borderStyle.setColor("000000"); borderStyle.setType(XWPFTable.XWPFBorderType.THICK); borderStyle.setSize(14); tableStyle.setLeftBorder(borderStyle); tableStyle.setTopBorder(borderStyle); tableStyle.setRightBorder(borderStyle); tableStyle.setBottomBorder(borderStyle); tableRenderData.setTableStyle(tableStyle); Map table = new HashMap<>(); table.put("table", tableRenderData); table.put("report", insReport); table.put("index", index); tables.add(table); index++; } } long index4 = 1; //检验报告报告(当检验项目超过7个新建表) for (long j = 0; j < size; j++) { if (j % number2 == 0) { List rows = new ArrayList<>(); //表格的行数(根据样品数量来) for (int i = 0; i < samples.size() + 2; i++) { RowRenderData rowRenderData = new RowRenderData(); RowStyle rowStyle = new RowStyle(); rowStyle.setHeight(40); rowRenderData.setRowStyle(rowStyle); List cells = new ArrayList<>(); //表格的列数 for (int k = 0; k < 8; k++) { CellRenderData cellRenderData = new CellRenderData(); CellStyle cellStyle = new CellStyle(); cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER); cellRenderData.setCellStyle(cellStyle); List paragraphRenderDataList = new ArrayList<>(); ParagraphRenderData paragraphRenderData = new ParagraphRenderData(); ParagraphStyle paragraphStyle = new ParagraphStyle(); paragraphStyle.setAlign(ParagraphAlignment.CENTER); paragraphRenderData.setParagraphStyle(paragraphStyle); List renderData = new ArrayList<>(); TextRenderData textRenderData = new TextRenderData(); Style style = new Style(); style.setFontFamily("宋体"); style.setColor("000000"); textRenderData.setStyle(style); if (i == 0) { //第一行 if (k == 0) { //第一列 textRenderData.setText("样品编号@Sample number∑30"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //第二列 String product; try { product = filteredProducts.get((int) ((k - 1) + (index4 - 1) * 7)); } catch (Exception e) { continue; } String[] split = product.split(","); if (ObjectUtils.isEmpty(split[2]) || split[2].equals("")) { if (ObjectUtils.isEmpty(split[1]) || split[1].equals("")) { textRenderData.setText(split[0] + "∑3" + k); } else { textRenderData.setText(split[0] + "@" + split[1] + "∑3" + k); } } else { if (ObjectUtils.isEmpty(split[1]) || split[1].equals("")) { textRenderData.setText(split[0]); } else { textRenderData.setText(split[0] + "@" + split[1]); } } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else if (i == 1) { //第二行 if (k == 0) { //第一列 textRenderData.setText("样品编号@Sample number∑30"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //第二列 String product; try { product = filteredProducts.get((int) ((k - 1) + (index4 - 1) * 7)); } catch (Exception e) { continue; } String[] split = product.split(","); if (ObjectUtils.isEmpty(split[2]) || split[2].equals("")) { if (ObjectUtils.isEmpty(split[1]) || split[1].equals("")) { textRenderData.setText(split[0] + "∑3" + k); } else { textRenderData.setText(split[0] + "@" + split[1] + "∑3" + k); } } else { if (ObjectUtils.isEmpty(split[3]) || split[3].equals("")) { textRenderData.setText(split[2]); } else { textRenderData.setText(split[2] + "@" + split[3]); } } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else { if (k == 0) { //第一列 textRenderData.setText(samples.get(i - 2).getSampleCode()); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //根据样品编号和项目去查询最终值 String product; try { product = filteredProducts.get((int) ((k - 1) + (index4 - 1) * 7)); } catch (Exception e) { continue; } String[] split = product.split(","); InsProduct insProduct = insProductMapper.selectOne(Wrappers.lambdaQuery() .eq(InsProduct::getState, 1) .eq(InsProduct::getInsSampleId, samples.get(i - 2).getId()) .eq(InsProduct::getInspectionItem, split[0]) .eq(InsProduct::getInspectionItemSubclass, split[2])); if (ObjectUtils.isEmpty(insProduct)) { //可能根据正常的样品编号和光纤接头损耗的项目查不到对应的项目,则需要根据"/"来查 List sampleList = insSampleMapper.selectList(Wrappers.lambdaQuery().like(InsSample::getSampleCode, samples.get(i - 2).getSampleCode())); List products = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getState, 1) .in(InsProduct::getInsSampleId, sampleList.stream().map(InsSample::getId).collect(Collectors.toList())) .eq(InsProduct::getInspectionItem, split[0]) .eq(InsProduct::getInspectionItemSubclass, split[2])); insProduct = products.get(0); } textRenderData.setText(insProduct.getLastValue()); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } } rowRenderData.setCells(cells); if (rowRenderData.getCells().size() != 0) { rows.add(rowRenderData); } } TableRenderData tableRenderData = new TableRenderData(); tableRenderData.setRows(rows); int countSize = tableRenderData.getRows().get(0).getCells().size(); for (RowRenderData row : tableRenderData.getRows()) { /*for (CellRenderData cell : row.getCells()) { System.out.print(cell.getParagraphs().get(0).getContents()); } System.out.println("");*/ if (row.getCells().size() != countSize) { throw new ErrorException("每行单元格不相等2"); } } TableStyle tableStyle = new TableStyle(); tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH); tableStyle.setAlign(TableRowAlign.CENTER); BorderStyle borderStyle = new BorderStyle(); borderStyle.setColor("000000"); borderStyle.setType(XWPFTable.XWPFBorderType.THICK); borderStyle.setSize(14); tableStyle.setLeftBorder(borderStyle); tableStyle.setTopBorder(borderStyle); tableStyle.setRightBorder(borderStyle); tableStyle.setBottomBorder(borderStyle); tableRenderData.setTableStyle(tableStyle); Map table = new HashMap<>(); table.put("table4", tableRenderData); table.put("report", insReport); table.put("index4", index4); tables4.add(table); index4++; } } //光纤接头损耗的报告还是tables4 //查询样品(只查询带"/")的数量 List sampleList = insSamples.stream().filter(insSample -> insSample.getSampleCode().contains("/")).collect(Collectors.toList()); //过滤出光纤接头损耗的检验项目 List strings = filteredProducts.stream().filter(s -> s.contains("光纤接头损耗")).distinct().collect(Collectors.toList()); long index41 = 1; for (int i = 0; i < sampleList.size(); i++) { if (i % 16 == 0) { //样品数量超过16需要新增表格 List rows = new ArrayList<>(); int count2 = sampleList.size()-(index41-1)*16 < 16 ? (int) (sampleList.size() - (index41 - 1) * 16 + 1) : 17; //表格的行数 for (int j = 0; j < count2; j++) { RowRenderData rowRenderData = new RowRenderData(); RowStyle rowStyle = new RowStyle(); rowStyle.setHeight(40); rowRenderData.setRowStyle(rowStyle); List cells = new ArrayList<>(); //表格的列数 for (int k = 0; k < 6; k++) { CellRenderData cellRenderData = new CellRenderData(); CellStyle cellStyle = new CellStyle(); cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER); cellRenderData.setCellStyle(cellStyle); List paragraphRenderDataList = new ArrayList<>(); ParagraphRenderData paragraphRenderData = new ParagraphRenderData(); ParagraphStyle paragraphStyle = new ParagraphStyle(); paragraphStyle.setAlign(ParagraphAlignment.CENTER); paragraphRenderData.setParagraphStyle(paragraphStyle); List renderData = new ArrayList<>(); TextRenderData textRenderData = new TextRenderData(); Style style = new Style(); style.setFontFamily("宋体"); style.setColor("000000"); textRenderData.setStyle(style); if (j == 0) { //第一行 if (k == 0) { //第一列 textRenderData.setText("光纤类型@Fiber type"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k == 1 || k == 2) { //第二 三列 textRenderData.setText("样品编号@Sample number"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { String[] split = strings.get(k - 3).split(","); if (ObjectUtils.isEmpty(split[3]) || split[3].equals("")) { textRenderData.setText(split[2]); } else { textRenderData.setText(split[2] + "@" + split[3]); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else { if (k == 0) { //第一列 textRenderData.setText(sampleList.get(0).getModel() + "∑44"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k == 1) { //第二列 textRenderData.setText(sampleList.get(j - 1).getSampleCode().split("/")[0]); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k == 2) { //第三列 textRenderData.setText(sampleList.get(j - 1).getSampleCode().split("/")[1]); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //根据对应的样品编号和检验项目查询对应数据(最终值) String[] split = strings.get(k - 3).split(","); InsProduct insProduct = insProductMapper.selectOne(Wrappers.lambdaQuery() .eq(InsProduct::getState, 1) .eq(InsProduct::getInsSampleId, sampleList.get(j - 1).getId()) .eq(InsProduct::getInspectionItem, split[0]) .eq(InsProduct::getInspectionItemSubclass, split[2])); textRenderData.setText(insProduct.getLastValue()); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } } rowRenderData.setCells(cells); if (rowRenderData.getCells().size() != 0) { rows.add(rowRenderData); } } TableRenderData tableRenderData = new TableRenderData(); tableRenderData.setRows(rows); int countSize = tableRenderData.getRows().get(0).getCells().size(); for (RowRenderData row : tableRenderData.getRows()) { /*for (CellRenderData cell : row.getCells()) { System.out.print(cell.getParagraphs().get(0).getContents()); } System.out.println("");*/ if (row.getCells().size() != countSize) { throw new ErrorException("每行单元格不相等3"); } } TableStyle tableStyle = new TableStyle(); tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH); tableStyle.setAlign(TableRowAlign.CENTER); BorderStyle borderStyle = new BorderStyle(); borderStyle.setColor("000000"); borderStyle.setType(XWPFTable.XWPFBorderType.THICK); borderStyle.setSize(14); tableStyle.setLeftBorder(borderStyle); tableStyle.setTopBorder(borderStyle); tableStyle.setRightBorder(borderStyle); tableStyle.setBottomBorder(borderStyle); tableRenderData.setTableStyle(tableStyle); Map table = new HashMap<>(); table.put("table4", tableRenderData); table.put("report", insReport); table.put("index4", index4 + 1); tables4.add(table); index4++; index41++; } } tables4.forEach(table4 -> { table4.put("tableSize4", tables4.size()); }); } String url; try { InputStream inputStream = this.getClass().getResourceAsStream("/static/report-template.docx"); File file = File.createTempFile("temp", ".tmp"); OutputStream outputStream = new FileOutputStream(file); IOUtils.copy(inputStream, outputStream); url = file.getAbsolutePath(); } catch (FileNotFoundException e) { throw new ErrorException("找不到模板文件"); } catch (IOException e) { throw new RuntimeException(e); } StringBuilder standardMethod2 = new StringBuilder(); for (String s : standardMethod) { standardMethod2.append("、").append(s); } standardMethod2.replace(0, 1, ""); tables.forEach(table -> { table.put("tableSize", tables.size() + 1); }); List> deviceList = null; if (deviceSet.size() != 0) { deviceList = insOrderMapper.selectDeviceList(deviceSet); } Map codeStr = new HashMap<>(); codeStr.put("报告编号", insReport.getCode()); codeStr.put("样品名称", insOrder.getSample()); codeStr.put("规格型号", samples.get(0).getModel()); codeStr.put("发放日期", now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); String codePath; try { codePath = new MatrixToImageWriter().code(JackSonUtil.marshal(codeStr).replaceAll("\\{", "") .replaceAll("}", "").replaceAll(",", "").replaceAll("\"", ""), twoCode); } catch (Exception e) { throw new RuntimeException(e); } String modelStr = ""; for (String model : models) { modelStr += "," + model; } String finalModelStr = modelStr; String sampleEn = insSampleMapper.getSampleEn(insOrder.getSample()); String orderType = insOrderMapper.getEnumLabelByValue(insOrder.getOrderType()); String formType = insOrderMapper.getEnumLabelByValue(insOrder.getFormType()); ConfigureBuilder builder = Configure.builder(); builder.useSpringEL(true); List> finalDeviceList = deviceList; Integer userId = insSampleUserMapper.selectOne(Wrappers.lambdaQuery().eq(InsSampleUser::getInsSampleId, orderId).last("limit 1")).getUserId(); String signatureUrl; try { signatureUrl = userMapper.selectById(userId).getSignatureUrl(); } catch (Exception e) { throw new ErrorException("找不到检验人的签名"); } if (signatureUrl.equals("")) { throw new ErrorException("找不到检验人的签名"); } //Custom custom = customMapper.selectById(user.get("company")); Custom custom = customMapper.selectById(insOrder.getCompanyId()); if (!resultCh.get().equals("")) { resultCh.set("依据委托要求," + resultCh.get().replaceFirst("、", "") + "等所检项目不符合要求,其余所检项目均符合要求。"); resultEn.set("According to commissioned requirements," + resultEn.get().replaceFirst("、", "") + " these inspected items do not meet the requirements, all other inspected items meet the requirements."); } else { resultCh.set("依据委托要求,所检项目均符合要求。"); resultEn.set("According to commissioned requirements, all the tested items meet the requirements."); } /*光纤配置的检验报告*/ //先判断是否有光纤配置 List insProducts = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getState, 1) .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList())) .isNotNull(InsProduct::getInsFiberId) .isNull(InsProduct::getInspectionItemClass));//用检验分项字段区别光纤配置与温度循环 List> tables2 = new ArrayList<>(); if (insProducts.size() > 0) { samples.forEach(sample -> { List insProducts1 = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getState, 1) .eq(InsProduct::getInsSampleId, sample.getId()) .isNotNull(InsProduct::getInsFiberId) .isNull(InsProduct::getInspectionItemClass)); List filteredProducts = insProducts1.stream() .collect(Collectors.groupingBy(product -> product.getInspectionItem() + product.getInspectionItemSubclass())) .values().stream() .map(group -> group.get(0)) .sorted(Comparator.comparing(InsProduct::getInspectionItem)) .collect(Collectors.toList()); long size = insProducts1.stream().map(insProduct -> { return (insProduct.getInspectionItem() + insProduct.getInspectionItemSubclass()); }).distinct().collect(Collectors.toList()).size(); long size2 = insProducts1.stream().map(InsProduct::getInsFiberId).distinct().count(); long number = 7; long k = 0; long index2 = 1; for (long c = 0; c < size; c++) { if (c % number == 0) { List rows = new ArrayList<>(); //判断检验项目是否有父子关系 Boolean state = true; for (InsProduct insProduct : filteredProducts) { if (!insProduct.getInspectionItemSubclass().equals("") && insProduct.getInspectionItemSubclass() != null) { state = false; } } int a = 1; if (!state) { a = 2; } //表格的行数 for (long i = 0; i < size2 + a; i++) { RowRenderData rowRenderData = new RowRenderData(); RowStyle rowStyle = new RowStyle(); rowStyle.setHeight(40); rowRenderData.setRowStyle(rowStyle); List cells = new ArrayList<>(); //表格的列数 for (long j = 0; j < 9; j++) { CellRenderData cellRenderData = new CellRenderData(); CellStyle cellStyle = new CellStyle(); cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER); cellRenderData.setCellStyle(cellStyle); List paragraphRenderDataList = new ArrayList<>(); ParagraphRenderData paragraphRenderData = new ParagraphRenderData(); ParagraphStyle paragraphStyle = new ParagraphStyle(); paragraphStyle.setAlign(ParagraphAlignment.CENTER); paragraphRenderData.setParagraphStyle(paragraphStyle); List renderData = new ArrayList<>(); TextRenderData textRenderData = new TextRenderData(); Style style = new Style(); style.setFontFamily("宋体"); style.setColor("000000"); textRenderData.setStyle(style); if (i == 0) { //第一行 if (j == 0) { //第一列 textRenderData.setText("管色标@Pipe∑100"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 1) { //第二列 textRenderData.setText("光纤色标@Scanning Number∑101"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //项目信息 try { filteredProducts.get((int) (j - 2 + k)); } catch (Exception e) { continue; } textRenderData.setText(filteredProducts.get((int) (j - 2 + k)).getInspectionItem() + "@" + insProducts1.get((int) (j - 2 + k)).getInspectionItemEn() + "∑" + (j + 101 + k)); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else if (a == 2 && i == 1) { //有父子项目关系的第三行 if (j == 0) { //第一列 textRenderData.setText("管色标@Pipe∑100"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 1) { //第二列 textRenderData.setText("光纤色标@Scanning Number∑101"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //项目信息 try { filteredProducts.get((int) (j - 2 + k)); } catch (Exception e) { continue; } //判断是否有项目子类 if (filteredProducts.get((int) (j - 2 + k)).getInspectionItemSubclass().equals("") || filteredProducts.get((int) (j - 2 + k)).getInspectionItemSubclass() == null) { textRenderData.setText(filteredProducts.get((int) (j - 2 + k)).getInspectionItem() + "@" + filteredProducts.get((int) (j - 2 + k)).getInspectionItemEn() + "∑" + (j + 101 + k)); } else { textRenderData.setText(filteredProducts.get((int) (j - 2 + k)).getInspectionItemSubclass() + "@" + filteredProducts.get((int) (j - 2 + k)).getInspectionItemSubclassEn()); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else { int aa; if (a == 2) { aa = (int) i - 2; } else aa = (int) i - 1; List list = insProducts1.stream().map(InsProduct::getInsFiberId).distinct().collect(Collectors.toList()); try { insFiberMapper.selectById(list.get(aa)); } catch (Exception e) { continue; } InsFiber insFiber = insFiberMapper.selectById(list.get(aa)); //填值 if (j == 0) { //第一列 textRenderData.setText(insFiber.getBushColor()); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 1) { //第二列 textRenderData.setText(insFiber.getColor()); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //项目信息 try { filteredProducts.get((int) (j - 2 + k)); } catch (Exception e) { continue; } textRenderData.setText(filteredProducts.get((int) (j - 2 + k)).getLastValue()); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } } rowRenderData.setCells(cells); if (rowRenderData.getCells().size() != 0) { rows.add(rowRenderData); } } TableRenderData tableRenderData = new TableRenderData(); tableRenderData.setRows(rows); int countSize = tableRenderData.getRows().get(0).getCells().size(); for (RowRenderData row : tableRenderData.getRows()) { /*for (CellRenderData cell : row.getCells()) { System.out.print(cell.getParagraphs().get(0).getContents()); } System.out.println("");*/ if (row.getCells().size() != countSize) { throw new ErrorException("每行单元格不相等4"); } } TableStyle tableStyle = new TableStyle(); tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH); tableStyle.setAlign(TableRowAlign.CENTER); BorderStyle borderStyle = new BorderStyle(); borderStyle.setColor("000000"); borderStyle.setType(XWPFTable.XWPFBorderType.THICK); borderStyle.setSize(14); tableStyle.setLeftBorder(borderStyle); tableStyle.setTopBorder(borderStyle); tableStyle.setRightBorder(borderStyle); tableStyle.setBottomBorder(borderStyle); tableRenderData.setTableStyle(tableStyle); Map table = new HashMap<>(); table.put("table2", tableRenderData); table.put("report", insReport); table.put("sample_number", sample.getSampleCode()); table.put("type", sample.getModel()); table.put("index2", index2); tables2.add(table); k += 7; index2++; } } }); } tables2.forEach(table2 -> { table2.put("tableSize2", tables2.size()); }); /*温度循环的检验报告*/ //先判断是否有温度循环 List insProducts3 = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getState, 1) .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList())) .isNotNull(InsProduct::getInspectionItemClass)//用检验分项字段区别光纤配置与温度循环 .isNotNull(InsProduct::getInsFiberId)); List> tables3 = new ArrayList<>(); if (insProducts3.size() > 0) { samples.forEach(sample -> { //查询温度循环下的检验项目 List insPros = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getState, 1) .eq(InsProduct::getInsSampleId, sample.getId()) .isNotNull(InsProduct::getInsFiberId) .isNotNull(InsProduct::getInspectionItemClass)); //获取所有检验项目,按照循环次数,色标,温度,nm进行排序 Map temperatureToIdMap = new HashMap<>(); for (InsProduct product : insPros) { String temperature = product.getInspectionItemSubclass(); int id = product.getId(); temperatureToIdMap.putIfAbsent(temperature, id); if (temperatureToIdMap.get(temperature) > id) { temperatureToIdMap.put(temperature, id); } } // 自定义排序 Collections.sort(insPros, new Comparator() { @Override public int compare(InsProduct p1, InsProduct p2) { // 首先按getInspectionItem排序 int result = p1.getInspectionItem().compareTo(p2.getInspectionItem()); if (result != 0) { return result; } // 如果getInspectionItem相等,再按getInsFiberId排序 result = p1.getInsFiberId().compareTo(p2.getInsFiberId()); if (result != 0) { return result; } // 如果getInsFiberId也相等,最后按getInspectionItemSubclass排序 return compareTemperature(p1.getInspectionItemSubclass(), p2.getInspectionItemSubclass()); } private int compareTemperature(String temp1, String temp2) { // 根据温度对应的id进行排序 int id1 = temperatureToIdMap.get(temp1); int id2 = temperatureToIdMap.get(temp2); return Integer.compare(id1, id2); } }); List filteredProducts = insPros; //获取所有光纤色标 List insFibers = insFiberMapper.selectBatchIds(insPros.stream().map(InsProduct::getInsFiberId).collect(Collectors.toList())); //获取所有的温度(除了第一个20℃(常温)) List temperature = insPros.stream().map(InsProduct::getInspectionItemSubclass).filter(s -> !s.equals("20℃(常温)")).distinct().collect(Collectors.toList()); //获取所有的温度(除了第一个20℃(常温)和最后一个20℃) List temperature2 = insPros.stream().map(InsProduct::getInspectionItemSubclass).filter(s -> !s.equals("20℃(常温)")).filter(s -> !s.equals("20℃")).distinct().collect(Collectors.toList()); //获取所有的光纤项目(1310nm) List nm = insPros.stream().map(InsProduct::getInspectionItemClass).distinct().collect(Collectors.toList()); //获取所有检验项目的数量(列数)(这里需要注意两个温度,一个是20℃常温(只有第一次循环才有),另一个是20℃(只有最后一个循环才有)) long size = insPros.stream().map(insProduct -> { return (insProduct.getInspectionItemSubclass() + insProduct.getInspectionItemClass()); }).distinct().collect(Collectors.toList()).size(); //获取循环次数(表格的数量) int size1 = insPros.stream().map(InsProduct::getInspectionItem).distinct().collect(Collectors.toList()).size(); //获取光纤色标的数量(行数) long size2 = insPros.stream().map(InsProduct::getInsFiberId).distinct().count(); long index3 = 1; for (int i = 0; i < size1; i++) { //按照循环次数生成对应数量的表格 List rows = new ArrayList<>(); //表格的行数(光纤色标的数量+8) for (long j = 0; j < size2 + 8; j++) { RowRenderData rowRenderData = new RowRenderData(); RowStyle rowStyle = new RowStyle(); rowStyle.setHeight(40); rowRenderData.setRowStyle(rowStyle); List cells = new ArrayList<>(); //表格的列数需要根据循环的次数对应的改变 if (size1 == 1) { //如果只循环一次,那么列数包括20℃和20℃常温(2 * size - nm.size()+1) for (long k = 0; k < 2 * size - nm.size() + 1; k++) { CellRenderData cellRenderData = new CellRenderData(); CellStyle cellStyle = new CellStyle(); cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER); cellRenderData.setCellStyle(cellStyle); List paragraphRenderDataList = new ArrayList<>(); ParagraphRenderData paragraphRenderData = new ParagraphRenderData(); ParagraphStyle paragraphStyle = new ParagraphStyle(); paragraphStyle.setAlign(ParagraphAlignment.CENTER); paragraphRenderData.setParagraphStyle(paragraphStyle); List renderData = new ArrayList<>(); TextRenderData textRenderData = new TextRenderData(); Style style = new Style(); style.setFontFamily("宋体"); style.setColor("000000"); textRenderData.setStyle(style); if (j == 0) { //第一行 if (k <= (2 * size - nm.size() + 1) / 4) { //第一列 textRenderData.setText("样品编号@Sample number∑1000"); } else if (k > (2 * size - nm.size() + 1) / 4 && k <= (2 * size - nm.size() + 1) / 2) { //第二列 textRenderData.setText(sample.getSampleCode() + "∑998"); } else if (k > (2 * size - nm.size() + 1) / 2 && k < 2 * size - nm.size()) { //第三列 textRenderData.setText("规格型号@Type ∑999"); } else { //第四列 textRenderData.setText(sample.getModel()); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 1) { //第二行 if (k == 0) { //第一列 textRenderData.setText("光纤色标@ScanningNumber∑1004"); } else { textRenderData.setText("检测结果(循环" + (i + 1) + ")∑1005"); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 2) { //第三行 if (k == 0) { //第一列 textRenderData.setText("光纤色标@ScanningNumber∑1004"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k > 0 && k <= nm.size()) { //第二列 textRenderData.setText("20℃(常温)∑1006"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //根据温度循环 for (int i1 = 0; i1 < temperature.size(); i1++) { if (k > (2 * i1 + 1) * nm.size() && k <= (2 * i1 + 3) * nm.size()) { //第三列 textRenderData.setText(temperature.get(i1) + "∑52" + i1); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } } } else if (j == 3) { //第四行 if (k == 0) { //第一列 textRenderData.setText("光纤色标@ScanningNumber∑1004"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k > 0 && k <= nm.size()) { //第二列和第三列 for (int i1 = 0; i1 < nm.size(); i1++) { if (k == i1 + 1) { textRenderData.setText(nm.get(i1)); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } } else { for (int j1 = 0; j1 < temperature.size(); j1++) { for (int i1 = 0; i1 < nm.size(); i1++) { if (k > (i1 + 1 + 2 * j1) * nm.size() && k <= (i1 + 1 + 2 * j1) * nm.size() + 2) { textRenderData.setText(nm.get(i1)); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } } } } else if (j == 4) { //第五行 if (k == 0) { //第一列 textRenderData.setText("光纤色标@ScanningNumber∑1004"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k > 0 && k <= nm.size()) { //第二列和第三列 textRenderData.setText("衰减"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k > nm.size() && (k - (nm.size())) % 2 == 0) { textRenderData.setText("|∆ α|"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { textRenderData.setText("衰减"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else if (j == size2 + 5) { //倒数第三行 if (k == 0) { //第一列 textRenderData.setText("|max|"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k <= nm.size()) { //计算20℃常温的第(k-1)个项目的所有色标的平均值的最大值 List ips = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getInsSampleId, sample.getId()) .isNotNull(InsProduct::getInsFiberId) .eq(InsProduct::getInspectionItem, i + 1) .eq(InsProduct::getInspectionItemSubclass, "20℃(常温)") .eq(InsProduct::getInspectionItemClass, nm.get((int) (k - 1)))).stream().map(InsProduct::getId).collect(Collectors.toList()); List insProductResults = insProductResultMapper.selDetail(ips); Optional max = insProductResults.stream().map(insProductResult -> { return insProductResult.getComValue().split(":")[1].split("\"")[1]; }).filter(value -> !value.isEmpty()) .max(String::compareTo); if (max.isPresent()) { textRenderData.setText(max.get()); } else { textRenderData.setText(""); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if ((k - (nm.size())) % 2 == 0) { //计算第()温度的第()个项目的所有色标的最终值的最大值 Optional max = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getInsSampleId, sample.getId()) .isNotNull(InsProduct::getInsFiberId) .eq(InsProduct::getInspectionItem, i + 1) .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) ((k / (nm.size() + 2)) - 1))) .eq(InsProduct::getInspectionItemClass, nm.get((int) ((k - (nm.size() + 2)) / 2 % nm.size())))) .stream().map(InsProduct::getLastValue) .filter(value -> !value.isEmpty()) .max(String::compareTo); if (max.isPresent()) { textRenderData.setText(max.get()); } else { textRenderData.setText(""); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //计算第()温度的第()个项目的所有色标的平均值的最大值 List ips = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getInsSampleId, sample.getId()) .isNotNull(InsProduct::getInsFiberId) .eq(InsProduct::getInspectionItem, i + 1) .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) (((k + 1) / (nm.size() + 2)) - 1))) .eq(InsProduct::getInspectionItemClass, nm.get((int) (((k + 1) - (nm.size() + 2)) / 2 % nm.size())))).stream().map(InsProduct::getId).collect(Collectors.toList()); List insProductResults = insProductResultMapper.selDetail(ips); Optional max = insProductResults.stream().map(insProductResult -> { return insProductResult.getComValue().split(":")[1].split("\"")[1]; }).filter(value -> !value.isEmpty()).max(String::compareTo); if (max.isPresent()) { textRenderData.setText(max.get()); } else { textRenderData.setText(""); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else if (j == size2 + 6) { //倒数第二行 if (k == 0) { //第一列 textRenderData.setText("|∆ α max|"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k <= nm.size()) { textRenderData.setText("-"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if ((k - (nm.size())) % 2 == 0) { Optional max = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getInsSampleId, sample.getId()) .isNotNull(InsProduct::getInsFiberId) .eq(InsProduct::getInspectionItem, i + 1) .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) ((k / (nm.size() + 2)) - 1))) .eq(InsProduct::getInspectionItemClass, nm.get((int) ((k - (nm.size() + 2)) / 2 % nm.size())))) .stream().map(InsProduct::getLastValue) .filter(value -> !value.isEmpty()) .max(String::compareTo); if (max.isPresent()) { textRenderData.setText(max.get()); } else { textRenderData.setText(""); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { textRenderData.setText("-"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else if (j == size2 + 7) { //倒数第一行 textRenderData.setText("“|∆ α|”表示附加衰减绝对值∑111111"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //其余填写检验值的内容 if (k == 0) { //第一列填写色标 textRenderData.setText(insFibers.get((int) (j - 5)).getColor()); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k <= nm.size()) { //第二列和第三列填写20℃常温的平均值(result表里面的com_value) textRenderData.setText(insProductResultMapper.selectOne(Wrappers.lambdaQuery().eq(InsProductResult::getInsProductId, filteredProducts.get((int) ((j - 5) * (temperature.size() + 1) * nm.size() + k - 1)).getId())).getComValue().split(":")[1].split("\"")[1]); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if ((k - (nm.size())) % 2 == 0) { //填写衰减差就是last_value textRenderData.setText(filteredProducts.get((int) ((j - 5) * (temperature.size() + 1) * nm.size() + k / 2)).getLastValue()); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //填写其余正常温度的衰减(result表里面的com_value) textRenderData.setText(insProductResultMapper.selectOne(Wrappers.lambdaQuery().eq(InsProductResult::getInsProductId, filteredProducts.get((int) ((j - 5) * (temperature.size() + 1) * nm.size() + (k + 1) / 2)).getId())).getComValue().split(":")[1].split("\"")[1]); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } } rowRenderData.setCells(cells); if (rowRenderData.getCells().size() != 0) { rows.add(rowRenderData); } } else { //如果有多次循环 if (i == 0) { //第一次循环的列数,那么列数包括20℃常温(2 * (size-nm.size()) -nm.size()+1) for (long k = 0; k < 2 * (size - nm.size()) - nm.size() + 1; k++) { CellRenderData cellRenderData = new CellRenderData(); CellStyle cellStyle = new CellStyle(); cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER); cellRenderData.setCellStyle(cellStyle); List paragraphRenderDataList = new ArrayList<>(); ParagraphRenderData paragraphRenderData = new ParagraphRenderData(); ParagraphStyle paragraphStyle = new ParagraphStyle(); paragraphStyle.setAlign(ParagraphAlignment.CENTER); paragraphRenderData.setParagraphStyle(paragraphStyle); List renderData = new ArrayList<>(); TextRenderData textRenderData = new TextRenderData(); Style style = new Style(); style.setFontFamily("宋体"); style.setColor("000000"); textRenderData.setStyle(style); if (j == 0) { //第一行 if (k <= (2 * (size - nm.size()) - nm.size() + 1) / 4) { //第一列 textRenderData.setText("样品编号@Sample number∑1000"); } else if (k > (2 * (size - nm.size()) - nm.size() + 1) / 4 && k <= (2 * (size - nm.size()) - nm.size() + 1) / 2) { //第二列 textRenderData.setText(sample.getSampleCode() + "∑998"); } else if (k > (2 * (size - nm.size()) - nm.size() + 1) / 2 && k < 2 * (size - nm.size()) - nm.size()) { //第三列 textRenderData.setText("规格型号@Type∑999"); } else { //第四列 textRenderData.setText(sample.getModel()); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 1) { //第二行 if (k == 0) { //第一列 textRenderData.setText("光纤色标@ScanningNumber∑1004"); } else { textRenderData.setText("检测结果(循环" + (i + 1) + ")∑1005"); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 2) { //第三行 if (k == 0) { //第一列 textRenderData.setText("光纤色标@ScanningNumber∑1004"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k > 0 && k <= nm.size()) { //第二列 textRenderData.setText("20℃(常温)∑1006"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //根据温度循环 for (int i1 = 0; i1 < temperature2.size(); i1++) { if (k > (2 * i1 + 1) * nm.size() && k <= (2 * i1 + 3) * nm.size()) { //第三列 textRenderData.setText(temperature2.get(i1) + "∑52" + i1); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } } } else if (j == 3) { //第四行 if (k == 0) { //第一列 textRenderData.setText("光纤色标@ScanningNumber∑1004"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k > 0 && k <= nm.size()) { //第二列和第三列 for (int i1 = 0; i1 < nm.size(); i1++) { if (k == i1 + 1) { textRenderData.setText(nm.get(i1)); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } } else { for (int j1 = 0; j1 < temperature2.size(); j1++) { for (int i1 = 0; i1 < nm.size(); i1++) { if (k > (i1 + 1 + 2 * j1) * nm.size() && k <= (i1 + 1 + 2 * j1) * nm.size() + 2) { textRenderData.setText(nm.get(i1)); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } } } } else if (j == 4) { //第五行 if (k == 0) { //第一列 textRenderData.setText("光纤色标@ScanningNumber∑1004"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k > 0 && k <= nm.size()) { //第二列和第三列 textRenderData.setText("衰减"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k > nm.size() && (k - (nm.size())) % 2 == 0) { textRenderData.setText("|∆ α|"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { textRenderData.setText("衰减"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else if (j == size2 + 5) { //倒数第三行 if (k == 0) { //第一列 textRenderData.setText("|max|"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k <= nm.size()) { //计算20℃常温的第(k-1)个项目的所有色标的平均值的最大值 List ips = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getInsSampleId, sample.getId()) .isNotNull(InsProduct::getInsFiberId) .eq(InsProduct::getInspectionItem, i + 1) .eq(InsProduct::getInspectionItemSubclass, "20℃(常温)") .eq(InsProduct::getInspectionItemClass, nm.get((int) (k - 1)))).stream().map(InsProduct::getId).collect(Collectors.toList()); List insProductResults = insProductResultMapper.selDetail(ips); Optional max = insProductResults.stream().map(insProductResult -> { return insProductResult.getComValue().split(":")[1].split("\"")[1]; }).filter(value -> !value.isEmpty()) .max(String::compareTo); if (max.isPresent()) { textRenderData.setText(max.get()); } else { textRenderData.setText(""); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if ((k - (nm.size())) % 2 == 0) { //计算第()温度的第()个项目的所有色标的最终值的最大值 Optional max = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getInsSampleId, sample.getId()) .isNotNull(InsProduct::getInsFiberId) .eq(InsProduct::getInspectionItem, i + 1) .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) ((k / (nm.size() + 2)) - 1))) .eq(InsProduct::getInspectionItemClass, nm.get((int) ((k - (nm.size() + 2)) / 2 % nm.size())))) .stream().map(InsProduct::getLastValue) .filter(value -> !value.isEmpty()) .max(String::compareTo); if (max.isPresent()) { textRenderData.setText(max.get()); } else { textRenderData.setText(""); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //计算第()温度的第()个项目的所有色标的平均值的最大值 List ips = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getInsSampleId, sample.getId()) .isNotNull(InsProduct::getInsFiberId) .eq(InsProduct::getInspectionItem, i + 1) .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) (((k + 1) / (nm.size() + 2)) - 1))) .eq(InsProduct::getInspectionItemClass, nm.get((int) (((k + 1) - (nm.size() + 2)) / 2 % nm.size())))).stream().map(InsProduct::getId).collect(Collectors.toList()); List insProductResults = insProductResultMapper.selDetail(ips); Optional max = insProductResults.stream().map(insProductResult -> { return insProductResult.getComValue().split(":")[1].split("\"")[1]; }).filter(value -> !value.isEmpty()).max(String::compareTo); if (max.isPresent()) { textRenderData.setText(max.get()); } else { textRenderData.setText(""); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else if (j == size2 + 6) { //倒数第二行 if (k == 0) { //第一列 textRenderData.setText("|∆ α max|"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k <= nm.size()) { textRenderData.setText("-"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if ((k - (nm.size())) % 2 == 0) { Optional max = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getInsSampleId, sample.getId()) .isNotNull(InsProduct::getInsFiberId) .eq(InsProduct::getInspectionItem, i + 1) .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) ((k / (nm.size() + 2)) - 1))) .eq(InsProduct::getInspectionItemClass, nm.get((int) ((k - (nm.size() + 2)) / 2 % nm.size())))) .stream().map(InsProduct::getLastValue) .filter(value -> !value.isEmpty()) .max(String::compareTo); if (max.isPresent()) { textRenderData.setText(max.get()); } else { textRenderData.setText(""); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { textRenderData.setText("-"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else if (j == size2 + 7) { //倒数第一行 textRenderData.setText("“|∆ α|”表示附加衰减绝对值∑111111"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //其余填写检验值的内容 if (k == 0) { //第一列填写色标 textRenderData.setText(insFibers.get((int) (j - 5)).getColor()); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k <= nm.size()) { //第二列和第三列填写20℃常温的平均值(result表里面的com_value) textRenderData.setText(insProductResultMapper.selectOne(Wrappers.lambdaQuery().eq(InsProductResult::getInsProductId, filteredProducts.get((int) ((j - 5) * (temperature.size() + 1) * nm.size() + k - 1)).getId())).getComValue().split(":")[1].split("\"")[1]); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if ((k - (nm.size())) % 2 == 0) { //填写衰减差就是last_value textRenderData.setText(filteredProducts.get((int) ((j - 5) * (temperature.size()) * nm.size() + k / 2)).getLastValue()); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //填写其余正常温度的衰减(result表里面的com_value) textRenderData.setText(insProductResultMapper.selectOne(Wrappers.lambdaQuery().eq(InsProductResult::getInsProductId, filteredProducts.get((int) ((j - 5) * (temperature.size()) * nm.size() + (k + 1) / 2)).getId())).getComValue().split(":")[1].split("\"")[1]); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } } } else if (i == size1 - 1) { //最后一次循环的列数,那么列数包括20℃(2 * (size-nm.size())+1) for (long k = 0; k < 2 * (size - nm.size()) + 1; k++) { CellRenderData cellRenderData = new CellRenderData(); CellStyle cellStyle = new CellStyle(); cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER); cellRenderData.setCellStyle(cellStyle); List paragraphRenderDataList = new ArrayList<>(); ParagraphRenderData paragraphRenderData = new ParagraphRenderData(); ParagraphStyle paragraphStyle = new ParagraphStyle(); paragraphStyle.setAlign(ParagraphAlignment.CENTER); paragraphRenderData.setParagraphStyle(paragraphStyle); List renderData = new ArrayList<>(); TextRenderData textRenderData = new TextRenderData(); Style style = new Style(); style.setFontFamily("宋体"); style.setColor("000000"); textRenderData.setStyle(style); if (j == 0) { //第一行 if (k <= (2 * (size - nm.size()) + 1) / 4) { //第一列 textRenderData.setText("样品编号@Sample number∑1000"); } else if (k > (2 * (size - nm.size()) + 1) / 4 && k <= (2 * (size - nm.size()) + 1) / 2) { //第二列 textRenderData.setText(sample.getSampleCode() + "∑998"); } else if (k > (2 * (size - nm.size()) + 1) / 2 && k < 2 * (size - nm.size())) { //第三列 textRenderData.setText("规格型号@Type∑999"); } else { //第四列 textRenderData.setText(sample.getModel()); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 1) { //第二行 if (k == 0) { //第一列 textRenderData.setText("光纤色标@ScanningNumber∑1004"); } else { textRenderData.setText("检测结果(循环" + (i + 1) + ")∑1005"); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 2) { //第三行 if (k == 0) { //第一列 textRenderData.setText("光纤色标@ScanningNumber∑1004"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //根据温度循环 for (int i1 = 0; i1 < temperature.size(); i1++) { if (k > (2 * i1) * nm.size() && k <= (2 * i1 + 2) * nm.size()) { //第三列 textRenderData.setText(temperature.get(i1) + "∑52" + i1); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } } } else if (j == 3) { //第四行 if (k == 0) { //第一列 textRenderData.setText("光纤色标@ScanningNumber∑1004"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { for (int j1 = 0; j1 < temperature.size(); j1++) { for (int i1 = 0; i1 < nm.size(); i1++) { if (k > (i1 + 2 * j1) * nm.size() && k <= (i1 + 2 * j1) * nm.size() + 2) { textRenderData.setText(nm.get(i1)); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } } } } else if (j == 4) { //第五行 if (k == 0) { //第一列 textRenderData.setText("光纤色标@ScanningNumber∑1004"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k % 2 == 0) { textRenderData.setText("|∆ α|"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { textRenderData.setText("衰减"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else if (j == size2 + 5) { //倒数第三行 if (k == 0) { //第一列 textRenderData.setText("|max|"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k % 2 == 0) { //计算第()温度的第()个项目的所有色标的最终值的最大值 Optional max = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getInsSampleId, sample.getId()) .isNotNull(InsProduct::getInsFiberId) .eq(InsProduct::getInspectionItem, i + 1) .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) ((k - 1) / (2 * nm.size())))) .eq(InsProduct::getInspectionItemClass, nm.get((int) ((k - nm.size()) / 2 % nm.size())))) .stream().map(InsProduct::getLastValue) .filter(value -> !value.isEmpty()) .max(String::compareTo); if (max.isPresent()) { textRenderData.setText(max.get()); } else { textRenderData.setText(""); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //计算第()温度的第()个项目的所有色标的平均值的最大值 List ips = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getInsSampleId, sample.getId()) .isNotNull(InsProduct::getInsFiberId) .eq(InsProduct::getInspectionItem, i + 1) .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) (k / (2 * nm.size())))) .eq(InsProduct::getInspectionItemClass, nm.get((int) (((k + 1) - nm.size()) / 2 % nm.size())))).stream().map(InsProduct::getId).collect(Collectors.toList()); List insProductResults = insProductResultMapper.selDetail(ips); Optional max = insProductResults.stream().map(insProductResult -> { return insProductResult.getComValue().split(":")[1].split("\"")[1]; }).filter(value -> !value.isEmpty()).max(String::compareTo); if (max.isPresent()) { textRenderData.setText(max.get()); } else { textRenderData.setText(""); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else if (j == size2 + 6) { //倒数第二行 if (k == 0) { //第一列 textRenderData.setText("|∆ α max|"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k % 2 == 0) { Optional max = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getInsSampleId, sample.getId()) .isNotNull(InsProduct::getInsFiberId) .eq(InsProduct::getInspectionItem, i + 1) .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) ((k - 1) / (2 * nm.size())))) .eq(InsProduct::getInspectionItemClass, nm.get((int) ((k - nm.size()) / 2 % nm.size())))) .stream().map(InsProduct::getLastValue) .filter(value -> !value.isEmpty()) .max(String::compareTo); if (max.isPresent()) { textRenderData.setText(max.get()); } else { textRenderData.setText(""); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { textRenderData.setText("-"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else if (j == size2 + 7) { //倒数第一行 textRenderData.setText("“|∆ α|”表示附加衰减绝对值∑111111"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //其余填写检验值的内容 if (k == 0) { //第一列填写色标 textRenderData.setText(insFibers.get((int) (j - 5)).getColor()); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k % 2 == 0) { //填写衰减差就是last_value textRenderData.setText(filteredProducts.get((int) ((j - 5) * (temperature.size()) * nm.size() + ((temperature.size() * nm.size() * size2 * i) - (size2 * nm.size() * (i - 1))) + (k - 2) / 2)).getLastValue()); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //填写其余正常温度的衰减(result表里面的com_value) textRenderData.setText(insProductResultMapper.selectOne(Wrappers.lambdaQuery().eq(InsProductResult::getInsProductId, filteredProducts.get((int) ((j - 5) * (temperature.size()) * nm.size() + ((temperature.size() * nm.size() * size2 * i) - (size2 * nm.size() * (i - 1))) + ((k - 2) + 1) / 2)).getId())).getComValue().split(":")[1].split("\"")[1]); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } } } else { //其余循环的列数,,那么列数不包括20℃+20℃(常温)(2 * (size- 2*nm.size()) +1) for (long k = 0; k < 2 * (size - 2 * nm.size()) + 1; k++) { CellRenderData cellRenderData = new CellRenderData(); CellStyle cellStyle = new CellStyle(); cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER); cellRenderData.setCellStyle(cellStyle); List paragraphRenderDataList = new ArrayList<>(); ParagraphRenderData paragraphRenderData = new ParagraphRenderData(); ParagraphStyle paragraphStyle = new ParagraphStyle(); paragraphStyle.setAlign(ParagraphAlignment.CENTER); paragraphRenderData.setParagraphStyle(paragraphStyle); List renderData = new ArrayList<>(); TextRenderData textRenderData = new TextRenderData(); Style style = new Style(); style.setFontFamily("宋体"); style.setColor("000000"); textRenderData.setStyle(style); if (j == 0) { //第一行 if (k <= (2 * (size - 2 * nm.size()) + 1) / 4) { //第一列 textRenderData.setText("样品编号@Sample number∑1000"); } else if (k > (2 * (size - 2 * nm.size()) + 1) / 4 && k <= (2 * (size - 2 * nm.size()) + 1) / 2) { //第二列 textRenderData.setText(sample.getSampleCode() + "∑998"); } else if (k > (2 * (size - 2 * nm.size()) + 1) / 2 && k < 2 * (size - 2 * nm.size())) { //第三列 textRenderData.setText("规格型号@Type∑999"); } else { //第四列 textRenderData.setText(sample.getModel()); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 1) { //第二行 if (k == 0) { //第一列 textRenderData.setText("光纤色标@ScanningNumber∑1004"); } else { textRenderData.setText("检测结果(循环" + (i + 1) + ")∑1005"); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 2) { //第三行 if (k == 0) { //第一列 textRenderData.setText("光纤色标@ScanningNumber∑1004"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //根据温度循环 for (int i1 = 0; i1 < temperature2.size(); i1++) { if (k > (2 * i1) * nm.size() && k <= (2 * i1 + 2) * nm.size()) { //第三列 textRenderData.setText(temperature2.get(i1) + "∑52" + i1); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } } } else if (j == 3) { //第四行 if (k == 0) { //第一列 textRenderData.setText("光纤色标@ScanningNumber∑1004"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { for (int j1 = 0; j1 < temperature2.size(); j1++) { for (int i1 = 0; i1 < nm.size(); i1++) { if (k > (i1 + 2 * j1) * nm.size() && k <= (i1 + 2 * j1) * nm.size() + 2) { textRenderData.setText(nm.get(i1)); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } } } } else if (j == 4) { //第五行 if (k == 0) { //第一列 textRenderData.setText("光纤色标@ScanningNumber∑1004"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k % 2 == 0) { textRenderData.setText("|∆ α|"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { textRenderData.setText("衰减"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else if (j == size2 + 5) { //倒数第三行 if (k == 0) { //第一列 textRenderData.setText("|max|"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k % 2 == 0) { //计算第()温度的第()个项目的所有色标的最终值的最大值 Optional max = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getInsSampleId, sample.getId()) .isNotNull(InsProduct::getInsFiberId) .eq(InsProduct::getInspectionItem, i + 1) .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) (((k - 1) / (2 * nm.size()))))) .eq(InsProduct::getInspectionItemClass, nm.get((int) ((k - nm.size()) / 2 % nm.size())))) .stream().map(InsProduct::getLastValue) .filter(value -> !value.isEmpty()) .max(String::compareTo); if (max.isPresent()) { textRenderData.setText(max.get()); } else { textRenderData.setText(""); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //计算第()温度的第()个项目的所有色标的平均值的最大值 List ips = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getInsSampleId, sample.getId()) .isNotNull(InsProduct::getInsFiberId) .eq(InsProduct::getInspectionItem, i + 1) .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) (k / (2 * nm.size())))) .eq(InsProduct::getInspectionItemClass, nm.get((int) (((k + 1) - nm.size()) / 2 % nm.size())))).stream().map(InsProduct::getId).collect(Collectors.toList()); List insProductResults = insProductResultMapper.selDetail(ips); Optional max = insProductResults.stream().map(insProductResult -> { return insProductResult.getComValue().split(":")[1].split("\"")[1]; }).filter(value -> !value.isEmpty()).max(String::compareTo); if (max.isPresent()) { textRenderData.setText(max.get()); } else { textRenderData.setText(""); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else if (j == size2 + 6) { //倒数第二行 if (k == 0) { //第一列 textRenderData.setText("|∆ α max|"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k % 2 == 0) { Optional max = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getInsSampleId, sample.getId()) .isNotNull(InsProduct::getInsFiberId) .eq(InsProduct::getInspectionItem, i + 1) .eq(InsProduct::getInspectionItemSubclass, temperature.get((int) ((k - 1) / (2 * nm.size())))) .eq(InsProduct::getInspectionItemClass, nm.get((int) ((k - nm.size()) / 2 % nm.size())))) .stream().map(InsProduct::getLastValue) .filter(value -> !value.isEmpty()) .max(String::compareTo); if (max.isPresent()) { textRenderData.setText(max.get()); } else { textRenderData.setText(""); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { textRenderData.setText("-"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else if (j == size2 + 7) { //倒数第一行 textRenderData.setText("“|∆ α|”表示附加衰减绝对值∑111111"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //其余填写检验值的内容 if (k == 0) { //第一列填写色标 textRenderData.setText(insFibers.get((int) (j - 5)).getColor()); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k % 2 == 0) { //填写衰减差就是last_value textRenderData.setText(filteredProducts.get((int) ((j - 5) * (temperature.size() - 1) * nm.size() + (temperature.size() * nm.size() * size2) + (k - 2) / 2)).getLastValue()); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //填写其余正常温度的衰减(result表里面的com_value) textRenderData.setText(insProductResultMapper.selectOne(Wrappers.lambdaQuery().eq(InsProductResult::getInsProductId, filteredProducts.get((int) ((j - 5) * (temperature.size() - 1) * nm.size() + (temperature.size() * nm.size() * size2) + ((k - 2) + 1) / 2)).getId())).getComValue().split(":")[1].split("\"")[1]); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } } } rowRenderData.setCells(cells); if (rowRenderData.getCells().size() != 0) { rows.add(rowRenderData); } } } TableRenderData tableRenderData = new TableRenderData(); tableRenderData.setRows(rows); int countSize = tableRenderData.getRows().get(0).getCells().size(); for (RowRenderData row : tableRenderData.getRows()) { /*for (CellRenderData cell : row.getCells()) { System.out.print(cell.getParagraphs().get(0).getContents()); } System.out.println("");*/ if (row.getCells().size() != countSize) { throw new ErrorException("每行单元格不相等5"); } } TableStyle tableStyle = new TableStyle(); tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH); tableStyle.setAlign(TableRowAlign.CENTER); BorderStyle borderStyle = new BorderStyle(); borderStyle.setColor("000000"); borderStyle.setType(XWPFTable.XWPFBorderType.THICK); borderStyle.setSize(14); tableStyle.setLeftBorder(borderStyle); tableStyle.setTopBorder(borderStyle); tableStyle.setRightBorder(borderStyle); tableStyle.setBottomBorder(borderStyle); tableRenderData.setTableStyle(tableStyle); Map table = new HashMap<>(); table.put("table3", tableRenderData); table.put("report", insReport); table.put("index3", index3); tables3.add(table); index3++; } }); } tables3.forEach(table3 -> { table3.put("tableSize3", tables3.size()); }); /*获取附件图片类型*/ List> images = new ArrayList<>(); List insOrderFiles = insOrderFileMapper.selectList(Wrappers.lambdaQuery().eq(InsOrderFile::getType, 1).eq(InsOrderFile::getInsOrderId, orderId)); if (CollectionUtils.isNotEmpty(insOrderFiles)) { insOrderFiles.forEach(insOrderFile -> { Map image = new HashMap<>(); PictureRenderData pictureRenderData = Pictures.ofLocal(imgUrl + "/" + insOrderFile.getFileUrl()).sizeInCm(17, 20).create(); image.put("url", pictureRenderData); image.put("report", insReport); images.add(image); }); } //委托人和电话字段判断 if (ObjectUtils.isEmpty(insOrder.getPrepareUser())) { insOrder.setPrepareUser("/"); } if (ObjectUtils.isEmpty(insOrder.getPhone())) { insOrder.setPhone("/"); } //检验项目的环境 InsProduct insProduct = insProductMapper.selectList(Wrappers.lambdaQuery().eq(InsProduct::getState, 1).eq(InsProduct::getInsSampleId, samples.get(0).getId())).get(0); String environment = ""; environment = (ObjectUtils.isNotEmpty(insProduct.getTemperature()) ? insProduct.getTemperature() + "℃ " : "") + (ObjectUtils.isNotEmpty(insProduct.getHumidity()) ? insProduct.getHumidity() + "%" : ""); String finalEnvironment = environment; XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render( new HashMap() {{ put("order", insOrder); put("report", insReport); put("environment", finalEnvironment); put("custom", custom); put("sampleSize", samples.size()); put("tables", tables); put("tableSize", tables.size() + 1); put("tables2", tables2); put("tableSize2", tables2.size()); put("tables3", tables3); put("tableSize3", tables3.size()); put("tables4", tables4); put("tableSize4", tables4.size()); put("standardMethod", (standardMethod2.toString().equals("null") ? "" : standardMethod2)); put("deviceList", finalDeviceList); put("twoCode", Pictures.ofLocal(codePath).create()); put("models", finalModelStr.replace(",", "")); put("productSize", productSize); put("createTime", now.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日"))); put("createTimeEn", monthNames[now.getMonthValue() - 1] + " " + now.getDayOfMonth() + ", " + now.getYear()); put("insTime", insOrder.getInsTime().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日"))); put("insTimeEn", monthNames[insOrder.getInsTime().getMonthValue() - 1] + " " + now.getDayOfMonth() + ", " + now.getYear()); put("writeUrl", null); put("insUrl", Pictures.ofLocal(imgUrl + "/" + signatureUrl).create()); put("images", images); put("examineUrl", null); put("ratifyUrl", null); put("sampleEn", sampleEn); put("orderType", orderType); put("getTime", insOrder.getExamineTime().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日"))); put("getTimeEn", monthNames[insOrder.getExamineTime().getMonthValue() - 1] + " " + insOrder.getExamineTime().getDayOfMonth() + ", " + insOrder.getExamineTime().getYear()); put("seal1", null); put("seal2", null); put("formTypeCh", formType); put("formTypeEn", insOrder.getFormType()); put("resultCh", resultCh.get()); put("resultEn", resultEn.get()); }}); try { String name = insReport.getCode().replace("/", "") + ".docx"; template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name))); insReport.setUrl("/word/" + name); insReportMapper.insert(insReport); insOrder.setInsState(5); insOrderMapper.updateById(insOrder); } catch (IOException e) { throw new RuntimeException(e); } // 处理合并单元格的问题 String path = wordUrl + "/" + insReport.getCode().replace("/", "") + ".docx"; try { FileInputStream stream = new FileInputStream(path); XWPFDocument document = new XWPFDocument(stream); List xwpfTables = document.getTables(); for (int i = 1; i < xwpfTables.size() - (deviceList == null ? 1 : 2); i++) { Set set1 = new HashSet<>(); Map> maps = new HashMap<>(); for (int j = 0; j < xwpfTables.get(i).getRows().size(); j++) { for (int k = 0; k < xwpfTables.get(i).getRows().get(j).getTableCells().size(); k++) { if (xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().indexOf("∑") > -1) { String[] split = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("∑"); if (set1.add(split[1])) { Map map = new HashMap<>(); map.put("sr", j); map.put("sc", k); map.put("er", j + 0); map.put("ec", k + 0); maps.put(split[1], map); } else { Map map1 = maps.get(split[1]); if (j == map1.get("sr")) { map1.put("ec", map1.get("ec") + 1); } else if (k == map1.get("sc")) { map1.put("er", map1.get("er") + 1); } } String str = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("∑")[0]; xwpfTables.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0); xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setText(str); xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getParagraphArray(0).setAlignment(ParagraphAlignment.CENTER); } } } List list = new ArrayList<>(); for (String s : maps.keySet()) { list.add(s); } for (int a = list.size() - 1; a >= 0; a--) { Map v = maps.get(list.get(a)); for (int j = 0; j < v.get("er") - v.get("sr") + 1; j++) { if (v.get("ec") > v.get("sc")) { try { TableTools.mergeCellsHorizonal(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec")); } catch (Exception e) { } } } if (v.get("er") > v.get("sr")) { try { TableTools.mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er")); } catch (Exception e) { } } } } FileOutputStream fileOutputStream = new FileOutputStream(path); document.write(fileOutputStream); fileOutputStream.close(); } catch (FileNotFoundException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } //处理中英文换行的问题 try { FileInputStream stream1 = new FileInputStream(path); XWPFDocument document1 = new XWPFDocument(stream1); List xwpfTables1 = document1.getTables(); for (int i = 1; i < xwpfTables1.size() - (deviceList == null ? 1 : 2); i++) { for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) { for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) { if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) { String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText(); String[] split = text.split("@"); xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0); XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph(); XWPFRun run = xwpfParagraph.createRun(); run.setText(split[0]); if (ObjectUtils.isNotNull(split[1])) { run.addBreak(); run.setText(split[1]); } xwpfParagraph.setAlignment(ParagraphAlignment.CENTER); } } } } FileOutputStream fileOutputStream1 = new FileOutputStream(path); document1.write(fileOutputStream1); fileOutputStream1.close(); } catch (FileNotFoundException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } } return 1; } private void getTemplateThing (Set set, Map map2, List insProducts) { for (InsProduct product : insProducts) { if (product.getTemplateId() == null) { product.setTemplate(new ArrayList<>()); continue; } String thing = null; if (product.getTemplateId() != null && set.add(product.getTemplateId())) { map2.put(product.getTemplateId(), standardTemplateService.getStandTempThingById(product.getTemplateId()) + ""); thing = map2.get(product.getTemplateId()); } if (StrUtil.isNotEmpty(thing)) { JSONObject sheet = JSON.parseObject(JSON.toJSONString(JSON.parseArray(JSON.toJSONString(JSON.parseObject(thing).get("data"))).get(0))); JSONObject config = JSON.parseObject(JSON.toJSONString(sheet.get("config"))); List cellData = JSON.parseArray(JSON.toJSONString(sheet.get("celldata")), JSONObject.class); Map style = new HashMap<>(); style.put("rowlen", config.get("rowlen")); style.put("columnlen", config.get("columnlen")); product.setTemplate(cellData); product.setStyle(style); product.setTemplateName(standardTemplateService.getStandTempNameById(product.getTemplateId())); } } } @Override public int submitPlan(Integer orderId, String laboratory, Integer verifyUser, String entrustCode, String sampleCode) { List insSamples = insSampleMapper.selectList(Wrappers.lambdaQuery().eq(InsSample::getInsOrderId, orderId).select(InsSample::getId)); List ids = insSamples.stream().map(a -> a.getId()).collect(Collectors.toList()); List insProducts = insProductMapper.selectList(Wrappers.lambdaQuery() .in(InsProduct::getInsSampleId, ids) .eq(InsProduct::getSonLaboratory, laboratory) .eq(InsProduct::getState, 1) .isNull(InsProduct::getInsResult) .isNull(InsProduct::getInsFiberId) .isNull(InsProduct::getInsFibersId)); insProducts.addAll(insProductMapper.selectFiberInsProduct(ids, laboratory)); if (insProducts.size() > 0) { String str = ""; int count = 0; for (InsProduct product : insProducts) { //如果是光缆的温度循环 if (product.getInspectionItem().equals("温度循环") && insOrderMapper.selectById(orderId).getSampleType().equals("光缆")) { //查询那些循环温度的检验项目的结论是否全部检验 List insProductList = insProductMapper.selectList(Wrappers.lambdaQuery().eq(InsProduct::getInsSampleId, product.getInsSampleId()) .isNotNull(InsProduct::getInsFiberId).like(InsProduct::getInspectionItemSubclass, "℃")); List collect = insProductList.stream().filter(insProduct -> insProduct.getInsResult() != null).map(InsProduct::getInsResult).collect(Collectors.toList()); List tt = new ArrayList<>(); tt.add(1); if (collect.contains(0)) { product.setLastValue("不合格"); product.setInsResult(0); } else if (collect.size() == insProductList.size() && collect.stream().distinct().collect(Collectors.toList()).containsAll(tt)) { product.setLastValue("合格"); product.setInsResult(1); } insProductMapper.updateById(product); } //如果是热循环或者是温升试验 else if (product.getInspectionItem().equals("热循环") || product.getInspectionItem().equals("温升试验")){ //查询这些项目下的其他检验项目是否全部检验 List insProductList = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getInsSampleId, product.getInsSampleId()) .like(InsProduct::getInspectionItemSubclass, "温度")); List collect = insProductList.stream().filter(insProduct -> insProduct.getInsResult() != null).map(InsProduct::getInsResult).collect(Collectors.toList()); List tt = new ArrayList<>(); tt.add(1); if (collect.contains(0)) { product.setLastValue("不合格"); product.setInsResult(0); } else if (collect.size() == insProductList.size() && collect.stream().distinct().collect(Collectors.toList()).containsAll(tt)) { product.setLastValue("合格"); product.setInsResult(1); } insProductMapper.updateById(product); } else { count++; str += "
" + count + ":" + product.getInspectionItem() + " " + product.getInspectionItemSubclass() + "
"; } } if (ObjectUtils.isNotEmpty(str)) { throw new ErrorException("存在待检验的项目:
" + str); } } insOrderStateMapper.update(null, Wrappers.lambdaUpdate().eq(InsOrderState::getInsOrderId, orderId).eq(InsOrderState::getLaboratory, laboratory).set(InsOrderState::getInsTime, LocalDateTime.now()).set(InsOrderState::getInsState, 3).set(InsOrderState::getVerifyUser, verifyUser)); Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId"); InformationNotification info = new InformationNotification(); info.setCreateUser(insProductMapper.selectUserById(userId).get("name")); info.setMessageType("2"); info.setTheme("复核通知"); info.setContent("您有一条检验任务待复核消息"); info.setSenderId(userId); info.setConsigneeId(verifyUser); info.setViewStatus(false); info.setJumpPath("b1-inspect-order-plan"); informationNotificationService.addInformationNotification(info); //复核人--检验单相关负责人 InsSampleUser insSampleUser = new InsSampleUser(); insSampleUser.setUserId(verifyUser); insSampleUser.setInsSampleId(orderId); insSampleUser.setState(0); insSampleUser.setSonLaboratory(laboratory); insSampleUserMapper.insert(insSampleUser); /*校验一下result表*/ CompletableFuture.supplyAsync(() -> { List ips = insProducts.stream().map(InsProduct::getId).distinct().collect(Collectors.toList()); for (Integer ip : ips) { List insProductResults = insProductResultMapper.selectList(Wrappers.lambdaQuery().eq(InsProductResult::getInsProductId, ip).orderByDesc(InsProductResult::getId)); if (insProductResults.size() > 1) { insProductResultMapper.deleteById(insProductResults.get(0)); } } return null; }); // 删除数采采集次数 String key = "frequency" + ":" + entrustCode + ":" + sampleCode; RedisUtil.del(key); return 1; } public int pxToCm(int px) { return px / 9; } // 获取两个localDateTime的每一天 public static List getLocalDateTimesBetween(LocalDateTime start, LocalDateTime end) { List localDateTimes = new ArrayList<>(); LocalDate currentDate = start.toLocalDate(); LocalDateTime currentLocalDateTime = start; while (!currentDate.isAfter(end.toLocalDate())) { localDateTimes.add(currentLocalDateTime); currentLocalDateTime = currentLocalDateTime.plusDays(1); currentDate = currentDate.plusDays(1); } return localDateTimes; } public static String getWeek(String dayStr) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date date = sdf.parse(dayStr); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); int day = calendar.get(Calendar.DAY_OF_MONTH); return getWeekDay(dayOfWeek); } catch (Exception e) { e.printStackTrace(); } return null; } public static String getWeekDay(int dayOfWeek) { switch (dayOfWeek) { case Calendar.MONDAY: return "周一"; case Calendar.TUESDAY: return "周二"; case Calendar.WEDNESDAY: return "周三"; case Calendar.THURSDAY: return "周四"; case Calendar.FRIDAY: return "周五"; case Calendar.SATURDAY: return "周六"; case Calendar.SUNDAY: return "周日"; default: return "未知"; } } }