| | |
| | | import com.yuanchu.mom.exception.ErrorException; |
| | | import com.yuanchu.mom.mapper.*; |
| | | import com.yuanchu.mom.pojo.*; |
| | | import com.yuanchu.mom.service.InformationNotificationService; |
| | | import com.yuanchu.mom.service.InsOrderPlanService; |
| | | import com.yuanchu.mom.service.InsOrderService; |
| | | import com.yuanchu.mom.service.StandardTemplateService; |
| | | import com.yuanchu.mom.utils.GiveCode; |
| | | import com.yuanchu.mom.utils.JackSonUtil; |
| | | import com.yuanchu.mom.utils.MatrixToImageWriter; |
| | | import com.yuanchu.mom.utils.QueryWrappers; |
| | |
| | | * 检验任务-业务实现层 |
| | | */ |
| | | @Service |
| | | //@AllArgsConstructor |
| | | public class InsOrderPlanServiceImpl extends ServiceImpl<InsOrderMapper, InsOrder> implements InsOrderPlanService { |
| | | |
| | | @Resource |
| | |
| | | private String twoCode; |
| | | |
| | | @Resource |
| | | private GiveCode giveCode; |
| | | |
| | | @Resource |
| | | private InsReportMapper insReportMapper; |
| | | |
| | | @Resource |
| | |
| | | |
| | | @Resource |
| | | private InsProductUserMapper insProductUserMapper; |
| | | |
| | | @Resource |
| | | private InformationNotificationService informationNotificationService; |
| | | |
| | | @Resource |
| | | private UserMapper userMapper; |
| | | |
| | | @Value("${file.path}") |
| | | private String imgUrl; |
| | | |
| | | @Override |
| | | public Map<String, Object> selectInsOrderPlanList(Page page, InsOrderPlanDTO insOrderPlanDTO) { |
| | |
| | | // 通过订单id查找所有样本id |
| | | List<Integer> sampleIds = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId)).stream().map(InsSample::getId).collect(Collectors.toList()); |
| | | // 通过检查每一个样本id查到属于检验项结论 is null的数量 |
| | | Long count = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery().in(InsProduct::getInsSampleId, sampleIds).isNull(InsProduct::getInsResult).eq(InsProduct::getSonLaboratory, insProduct.getSonLaboratory())); |
| | | // is null的数量为0是将订单状态表的状态改为已检验 |
| | | List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().in(InsProduct::getInsSampleId, sampleIds).isNull(InsProduct::getInsResult).eq(InsProduct::getSonLaboratory, insProduct.getSonLaboratory())); |
| | | Long count = insProductMapper.selectCount(Wrappers.<InsProduct>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.<InsOrderState>lambdaUpdate() |
| | | .eq(InsOrderState::getInsOrderId, orderId) |
| | |
| | | Map<String, String> user = insProductMapper.selectUserById(insOrder.getUserId()); |
| | | List<SampleProductDto> samples = insSampleMapper.selectSampleProductListByOrderId(orderId); |
| | | InsReport insReport = new InsReport(); |
| | | // insReport.setCode(giveCode.giveCode("JCZX/TX-", "ins_report", "-", "yyMMdd")); |
| | | insReport.setCode(insOrder.getEntrustCode()); |
| | | insReport.setInsOrderId(orderId); |
| | | Set<Integer> set = new HashSet<>(); |
| | |
| | | String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; |
| | | samples.forEach(a -> { |
| | | models.add(a.getModel()); |
| | | standardMethod.add(baseMapper.getStandardMethodCode(a.getStandardMethodListId())); |
| | | Set<String> templateSet = new HashSet<>(); |
| | | getTemplateThing(set, map2, a); |
| | | for (InsProduct b : a.getInsProduct()) { |
| | | standardMethod.add(b.getMethodS()); |
| | | productSize.set(productSize.get() + 1); |
| | | if (b.getInsProductResult() != null) { |
| | | List<JSONObject> jsonObjects = JSON.parseArray(b.getInsProductResult().getEquipValue(), JSONObject.class); |
| | |
| | | deviceSet.add(jsonObject.get("v") + ""); |
| | | } |
| | | } |
| | | } |
| | | if(b.getTemplate()==null){ |
| | | continue; |
| | | } |
| | | if (b.getTemplate().size() == 0) { |
| | | continue; |
| | |
| | | Set<String> delRSet = new HashSet<>(); |
| | | 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 = ""; |
| | | if ("检验值".equals(JSON.parseObject(JSON.toJSONString(v.get("ps"))).get("value") + "") || "设备名称".equals(JSON.parseObject(JSON.toJSONString(v.get("ps"))).get("value") + "") || "设备编码".equals(JSON.parseObject(JSON.toJSONString(v.get("ps"))).get("value") + "")) { |
| | | String s = JSON.parseObject(JSON.toJSONString(v.get("ps"))).get("value") + ""; |
| | | if ("检验值".equals(s) || "设备名称".equals(s) || "设备编码".equals(s) || "试验方法".equals(s) || "检测方法".equals(s)) { |
| | | delSet.add(jo1.get("c") + ""); |
| | | continue; |
| | | } |
| | |
| | | delRSet.add(jo1.get("r") + ""); |
| | | } |
| | | } |
| | | } else { |
| | | if ("参数".equals(v.get("v"))) delSet.add(jo1.get("c") + ""); |
| | | } |
| | | } |
| | | for (int i = 0; i < temp.size(); i++) { |
| | |
| | | } |
| | | Style style = new Style(); |
| | | style.setFontFamily(v.get("ff") == null ? "微软雅黑" : v.get("ff") + ""); |
| | | // style.setFontSize(v.get("fs")==null?14:Integer.parseInt(v.get("fs")+"")); |
| | | if (!((v.get("fc") + "").indexOf("rgb") > -1)) { |
| | | style.setColor(v.get("fc") == null ? "000000" : (v.get("fc") + "").replace("#", "")); |
| | | } else { |
| | |
| | | } |
| | | textRenderData.setStyle(style); |
| | | text.add(textRenderData); |
| | | if (i == temp.size() - 1) { |
| | | TextRenderData[] text2 = text.toArray(new TextRenderData[0]); |
| | | rowRenderData = Rows.of(text2).rowAtleastHeight(1).center().create(); |
| | | rows.add(rowRenderData); |
| | | text = new ArrayList<>(); |
| | | } |
| | | } |
| | | TextRenderData[] text2 = text.toArray(new TextRenderData[0]); |
| | | rowRenderData = Rows.of(text2).rowAtleastHeight(1).center().create(); |
| | | rows.add(rowRenderData); |
| | | TableRenderData tableRenderData = new TableRenderData(); |
| | | tableRenderData.setRows(rows); |
| | | TableStyle tableStyle = new TableStyle(); |
| | | /*JSONObject styleJo = JSON.parseObject(JSON.toJSONString(b.getStyle().get("columnlen"))); |
| | | List<Integer> colLen = new ArrayList<>(); |
| | | int colSize = rows.get(0).getCells().size(); |
| | | int colOne = Integer.parseInt(b.getTemplate().get(0).get("r") + ""); |
| | | for (int i = colOne; i < colSize + colOne; i++) { |
| | | if (styleJo.get(i + "") == null) { |
| | | colLen.add(pxToCm(100)); |
| | | } else { |
| | | int i1 = Integer.parseInt(styleJo.get(i + "") + ""); |
| | | colLen.add(pxToCm(i1)); |
| | | } |
| | | }*/ |
| | | // tableStyle.setColWidths(ArrayUtils.toPrimitive(colLen.toArray(new Integer[0]))); |
| | | tableStyle.setColWidths(new int[]{650,1600,2000,750,2800,1100,1100}); |
| | | tableStyle.setWidth("10000"); |
| | | tableStyle.setAlign(TableRowAlign.CENTER); |
| | | tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH); |
| | | BorderStyle borderStyle = new BorderStyle(); |
| | | borderStyle.setColor("000000"); |
| | | borderStyle.setType(XWPFTable.XWPFBorderType.THICK); |
| | |
| | | table.put("tableSize", tables.size() + 1); |
| | | }); |
| | | List<Map<String, String>> deviceList = null; |
| | | if(deviceSet.size()!=0){ |
| | | if (deviceSet.size() != 0) { |
| | | deviceList = insOrderMapper.selectDeviceList(deviceSet); |
| | | } |
| | | Map<String, String> codeStr = new HashMap<>(); |
| | |
| | | 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<Map<String, String>> finalDeviceList = deviceList; |
| | | Integer userId = insSampleUserMapper.selectOne(Wrappers.<InsSampleUser>lambdaQuery().eq(InsSampleUser::getInsSampleId, orderId).orderByDesc(InsSampleUser::getCreateTime).last("limit 1")).getUserId(); |
| | | String signatureUrl; |
| | | try { |
| | | signatureUrl = userMapper.selectById(userId).getSignatureUrl(); |
| | | }catch (Exception e){ |
| | | throw new ErrorException("找不到检验人的签名"); |
| | | } |
| | | if(signatureUrl == null || "".equals(signatureUrl)){ |
| | | throw new ErrorException("找不到检验人的签名"); |
| | | } |
| | | XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render( |
| | | new HashMap<String, Object>() {{ |
| | | put("order", insOrder); |
| | |
| | | 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", null); |
| | | put("insUrl", Pictures.ofLocal(imgUrl+"/"+signatureUrl).create()); |
| | | 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()); |
| | | }}); |
| | | try { |
| | | String name = insReport.getCode().replace("/", "") + ".docx"; |
| | | template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name))); |
| | | insReport.setUrl("/word/" + name); |
| | | insReportMapper.insert(insReport); |
| | | // insOrder.setState(4); |
| | | insOrder.setInsState(5); |
| | | insOrderMapper.updateById(insOrder); |
| | | } catch (IOException e) { |
| | |
| | | FileInputStream stream = new FileInputStream(path); |
| | | XWPFDocument document = new XWPFDocument(stream); |
| | | List<XWPFTable> xwpfTables = document.getTables(); |
| | | for (int i = 1; i < xwpfTables.size() - (deviceList==null?1:2); i++) { |
| | | for (int i = 1; i < xwpfTables.size() - (deviceList == null ? 1 : 2); i++) { |
| | | Set<String> set1 = new HashSet<>(); |
| | | Map<String, Map<String, Integer>> maps = new HashMap<>(); |
| | | for (int j = 0; j < xwpfTables.get(i).getRows().size(); j++) { |
| | |
| | | } |
| | | } |
| | | } |
| | | maps.forEach((k,v)->{ |
| | | maps.forEach((k, v) -> { |
| | | }); |
| | | List<String> list = new ArrayList<>(); |
| | | for (String s : maps.keySet()) { |
| | |
| | | for (int a = list.size() - 1; a >= 0; a--) { |
| | | Map<String, Integer> v = maps.get(list.get(a)); |
| | | for (int j = 0; j < v.get("er") - v.get("sr") + 1; j++) { |
| | | TableTools.mergeCellsHorizonal(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec")); |
| | | if (v.get("ec") > v.get("sc")) { |
| | | TableTools.mergeCellsHorizonal(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec")); |
| | | } |
| | | } |
| | | if(v.get("er")>v.get("sr")){ |
| | | if (v.get("er") > v.get("sr")) { |
| | | TableTools.mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er")); |
| | | } |
| | | } |
| | |
| | | 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()); |
| | | } |
| | | String thing = map2.get(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"))); |
| | |
| | | } |
| | | |
| | | @Override |
| | | public int submitPlan(Integer orderId, String laboratory) { |
| | | public int submitPlan(Integer orderId, String laboratory, Integer verifyUser) { |
| | | List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId).select(InsSample::getId)); |
| | | List<Integer> ids = insSamples.stream().map(a -> a.getId()).collect(Collectors.toList()); |
| | | List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().in(InsProduct::getInsSampleId, ids).eq(InsProduct::getSonLaboratory, laboratory).eq(InsProduct::getState, 1).isNull(InsProduct::getInsResult)); |
| | | if (insProducts.size() > 0) { |
| | | String str = ""; |
| | | for (InsProduct product : insProducts) { |
| | | str += product.getInspectionItem() + product.getInspectionItemSubclass() + ";"; |
| | | str += product.getInspectionItem() + " " + product.getInspectionItemSubclass() + ";"; |
| | | } |
| | | throw new ErrorException("以下是未检验的项目:" + str); |
| | | } |
| | | insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate().eq(InsOrderState::getInsOrderId, orderId).eq(InsOrderState::getLaboratory, laboratory).set(InsOrderState::getInsTime, LocalDateTime.now()).set(InsOrderState::getInsState, 3)); |
| | | insOrderStateMapper.update(null, Wrappers.<InsOrderState>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); |
| | | upPlanUser(verifyUser, orderId); |
| | | return 1; |
| | | } |
| | | |