diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/impl/BussDocumentLibraryEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/impl/BussDocumentLibraryEOServiceImpl.java index 4b4a4189e..6640c4b1a 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/impl/BussDocumentLibraryEOServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/impl/BussDocumentLibraryEOServiceImpl.java @@ -2980,13 +2980,13 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl map, List> dataList, + List fieldList, List fieldDateList, + List fieldFileList, List fieldPullList, + String cut,String flagTemp) { + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + //调整dataList中map中字段顺序与表单中的一致 + Map mapNew = new LinkedHashMap<>(); + for (OnlCgformField onlCgformField : fieldList) { + for (Map.Entry entry : dataList.get(0).entrySet()) { + if (onlCgformField.getDbFieldName().equals(entry.getKey())) { + mapNew.put(entry.getKey(), entry.getValue()); + break; + } + } + } + dataList.remove(0); + dataList.add(mapNew); + Map mapTemp = new HashMap<>(); + mapCopy(map, mapTemp); + //时间类型的字段 + List fieldDate = fieldDateList.stream().map(OnlCgformField::getDbFieldName).collect(Collectors.toList()); + //文件类型的字段 + List fieldFile = fieldFileList.stream().map(OnlCgformField::getDbFieldName).collect(Collectors.toList()); + //下拉类型的字段 + //过滤出树形字段 + List treeFieldList = fieldList.stream() + .filter(e -> FieldTypeEnum.TREE.getValue().equals(e.getFieldShowType())) + .collect(Collectors.toList()); + + //数据字典 + List sysDictItems = sysDictItemServiceImpl.selectItemsAll(); + //树形数据字典 + List categoryList = sysCategoryService.list(); + //下拉选处理数据字典 + for (Map.Entry entry : dataList.get(0).entrySet()) { + //下拉选处理数据字典 + dictItemCn(sysDictItems, entry, cut, fieldList,flagTemp); + treeDictItemCn(categoryList, entry, treeFieldList, cut,flagTemp); + } + for (Map.Entry entry : mapTemp.entrySet()) { + //下拉选处理数据字典 + dictItemCn(sysDictItems, entry, cut, fieldList,flagTemp); + treeDictItemCn(categoryList, entry, treeFieldList, cut,flagTemp); + } + + StringBuilder sb = new StringBuilder(); + dataList.get(0).entrySet().forEach(entry -> { + String key = entry.getKey(); + Object value = entry.getValue(); + //字段中文名 + List fields = fieldList.stream().filter(e -> e.getDbFieldName().equals(key)).collect(Collectors.toList()); + + if (fields.size() != 0) { + String dbFieldTxt = fields.get(0).getDbFieldTxt(); + if("2".equals(flagTemp)){ + dbFieldTxt = fields.get(0).getDbFieldTxt(); + }else{ + dbFieldTxt = fields.get(0).getDbFieldTxt(); + } + dbFieldTxt = "" + dbFieldTxt + ""; + if (value == null) { + value = ""; + } + for (Map.Entry entryTemp : mapTemp.entrySet()) { + String keyTemp = entryTemp.getKey(); + Object valueTemp = entryTemp.getValue(); + if (valueTemp == null) { + valueTemp = ""; + } + if (!"create_time".equals(key) && !"update_time".equals(key)) { + if (key.equals(keyTemp)) { + if (fieldDate.contains(key)) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + if (ObjectUtils.isNotEmpty(value)) { + value = sdf.format(value); + } + if (ObjectUtils.isNotEmpty(valueTemp)) { + try { + valueTemp = sdf.format(sdf.parse((String) valueTemp)); + } catch (ParseException e) { + } + } + //处理时间类型字段 + if (ObjectUtils.isNotEmpty(value)) { + if (ObjectUtils.isNotEmpty(valueTemp) && !value.equals(valueTemp)) { + if("2".equals(flagTemp)){ + sb.append(dbFieldTxt + "由\"" + value + "\"改为\"“" + valueTemp + "\","); + }else{ + sb.append(dbFieldTxt + "由\"" + value + "\"改为\"“" + valueTemp + "\","); + } + } else if (ObjectUtils.isEmpty(valueTemp)) { + if("2".equals(flagTemp)){ + sb.append(dbFieldTxt + "由\"" + value + "\"改为空" + ","); + }else{ + sb.append(dbFieldTxt + "由\"" + value + "\"改为空" + ","); + } + } + } else { + if (ObjectUtils.isNotEmpty(valueTemp)) { + if("2".equals(flagTemp)){ + sb.append(dbFieldTxt + "由空改为\"" + valueTemp + "\","); + }else{ + sb.append(dbFieldTxt + "由空改为\"" + valueTemp + "\","); + } + + } + } + + } else if (fieldFile.contains(key)) { + //处理文件类型字段 + List fileNameList = new ArrayList<>(); + List fileNameListTemp = new ArrayList<>(); + //之前的文件 + if (ObjectUtils.isNotEmpty(value)) { + List fileInfos = iOSSFileService.getFileInfosByConnectId((String) value); + fileNameList = fileInfos.stream().map(OSSFile::getFileName).collect(Collectors.toList()); + } + //修改的文件 + if (ObjectUtils.isNotEmpty(valueTemp)) { + List fileInfosTemp = iOSSFileService.getFileInfos((String) valueTemp); + fileNameListTemp = fileInfosTemp.stream().map(OSSFile::getFileName).collect(Collectors.toList()); + } + + if (ObjectUtils.isNotEmpty(value)) { + boolean checkDiffrent = checkDiffrent(fileNameList, fileNameListTemp); + + if (fileNameListTemp.size() != 0 && !checkDiffrent) { + if("2".equals(flagTemp)){ + //sysUser + sb.append(dbFieldTxt + "由\"" + StringUtils.join(fileNameList, ",") + "\"改为\"" + StringUtils.join(fileNameListTemp, ",") + "\","); + }else{ + sb.append(dbFieldTxt + "由\"" + StringUtils.join(fileNameList, ",") + "\"改为\"" + StringUtils.join(fileNameListTemp, ",") + "\","); + } + } else if (fileNameListTemp.size() == 0) { + if("2".equals(flagTemp)){ + sb.append(dbFieldTxt + "由\"" + StringUtils.join(fileNameList, ",") + "\"改为空" + ","); + }else{ + sb.append(dbFieldTxt + "由\"" + StringUtils.join(fileNameList, ",") + "\"改为空" + ","); + } + + } + } else { + if (fileNameListTemp.size() != 0) { + if("2".equals(flagTemp)){ + sb.append(dbFieldTxt + "由空改为\"" + StringUtils.join(fileNameListTemp, ",") + "\","); + }else{ + sb.append(dbFieldTxt + "由空改为\"" + StringUtils.join(fileNameListTemp, ",") + "\","); + } + + } + } + } else { +// if ("replace_standard".equals(key) || "corresponding_standard".equals(key)) { +// if (ObjectUtils.isNotEmpty(value)) { +// value = getReplaceStandardName(value); +// } +// if (ObjectUtils.isNotEmpty(valueTemp)) { +// valueTemp = getReplaceStandardName(valueTemp); +// } +// } + //其他类型(被代替标准不处理) + if (!"replaced_standard".equals(key)) { + if (ObjectUtils.isNotEmpty(value)) { + if (ObjectUtils.isNotEmpty(valueTemp) && !value.equals(valueTemp)) { + if("2".equals(flagTemp)){ + sb.append(dbFieldTxt + "由\"" + value + "\"改为\"" + valueTemp + "\","); + }else{ + sb.append(dbFieldTxt + "由\"" + value + "\"改为\"" + valueTemp + "\","); + } + } else if (ObjectUtils.isEmpty(valueTemp)) { + if("2".equals(flagTemp)){ + sb.append(dbFieldTxt + "由\"" + value + "\"改为空" + ","); + }else{ + sb.append(dbFieldTxt + "由\"" + value + "\"改为空" + ","); + } + } + } else { + if (ObjectUtils.isNotEmpty(valueTemp)) { + if("2".equals(flagTemp)){ + sb.append(dbFieldTxt + "由空改为\"" + valueTemp + "\","); }else{ sb.append(dbFieldTxt + "由空改为\"" + valueTemp + "\","); } @@ -3114,20 +3310,34 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl fieldFileList, List fieldPullList, String cut) { + List> dataListTemp = new ArrayList<>(); + for (Map stringObjectMap : dataList) { + Map mapT = new HashMap<>(); + mapCopy(stringObjectMap, mapT); + dataListTemp.add(mapT); + } + String technologyTerritoryNew = (String) dataList.get(0).get("technology_territory"); //1. 处理订阅的发送消息 //修改的内容 String flag ="1";//消息的标识(英文) StringBuilder sb = getUpdateInfo(map, dataList, fieldList, fieldDateList, fieldFileList, fieldPullList, null,flag); + String flagTemp ="2";//消息的标识(中文--消息采用卡片型式发送, 消息内容包含中英文, 所以此处需要获取消息的中文) + StringBuilder sbCn = getUpdateInfoCn(map, dataListTemp, fieldList, fieldDateList, fieldFileList, fieldPullList, null,flagTemp); //树形数据字典 List categoryList = sysCategoryService.list(); String sbStr = ""; if (ObjectUtils.isNotEmpty(sb)) { sbStr = sb.substring(0, sb.length() - 1); } + String sbStrCn = ""; + if (ObjectUtils.isNotEmpty(sbCn)) { + sbStrCn = sbCn.substring(0, sbCn.length() - 1); + } LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String serialNumber = (String) dataList.get(0).get("serial_number"); String category = (String)map.get("lei4_bie2"); + String categoryCn = (String)map.get("lei4_bie2"); String technologyTerritory = (String) map.get("technology_territory"); if(StringUtils.isNotBlank(category)){ List dictItemList = sysDictItemServiceImpl.selectItemsAll(); @@ -3137,6 +3347,7 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl", "") + .replaceAll("","").replaceAll("\"", "<"); + feishuMsgVo.setContent(replaceAllCn); +// + iFeishuService.sendCardMsgDocument(userIdListUpdateFeishu.toArray(new String[]{}), feishuMsgVo); + // String contentInfoFei = "In the "+category + " " + serialNumber +" you subscribed to, "+sysUser.getUsername()+" changed the " + sbStr.toString();; // //跳转文档详情 // String url = backUrl + "/docManage/library/detail?id=" + id; -// FeishuMsgVo feishuMsgVo = new FeishuMsgVo(); -// feishuMsgVo.setTitle(MessageTypeEnum.READ.getName()); -// feishuMsgVo.setUrl(url); -// String replaceAll = contentInfoFei.replaceAll("\"", "<"); -// feishuMsgVo.setContent(replaceAll); -// -// iFeishuService.sendCardMsgDocument(userIdListUpdateFeishu.toArray(new String[]{}), feishuMsgVo); - String contentInfoFei = "In the "+category + " " + serialNumber +" you subscribed to, "+sysUser.getUsername()+" changed the " + sbStr.toString();; - //跳转文档详情 - String url = backUrl + "/docManage/library/detail?id=" + id; - iFeishuService.batchSendMessage(userIdListUpdateFeishu.toArray(new String[]{}), contentInfoFei, MessageTypeEnum.READ.getName(), url); +// iFeishuService.batchSendMessage(userIdListUpdateFeishu.toArray(new String[]{}), contentInfoFei, MessageTypeEnum.READ.getName(), url); } catch (IOException e) { log.error("文档新增飞书消息推送失败"); } @@ -3939,6 +4158,64 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl sysDictItems, Map.Entry entry, String cut, List fieldList,String flagTemp) { + //通过dictField判断字段是否为下拉选(不为空则为下拉选) + List onlCgformFieldList = fieldList.stream().filter(e -> entry.getKey().equals(e.getDbFieldName())).collect(Collectors.toList()); + //数据字典中文 + List dictItemsCh = new ArrayList<>(); + List dictItemsEn = new ArrayList<>(); + for (OnlCgformField onlCgformField : onlCgformFieldList) { + if (FieldTypeEnum.PULL_SINGLE.getValue().equals(onlCgformField.getFieldShowType()) + || FieldTypeEnum.PULL_MORE.getValue().equals(onlCgformField.getFieldShowType())) { + String value = (String) entry.getValue(); + if (StringUtils.isNotBlank(value) && onlCgformFieldList.size() != 0 && StringUtils.isNotBlank(onlCgformFieldList.get(0).getDictField())) { + for (String itemValue : value.split(",")) { + //字段的数据字典 + List dictItemList = sysDictItems.stream() + .filter(e -> StringUtils.isNotBlank(e.getDictCode()) && e.getDictCode().equals(onlCgformFieldList.get(0).getDictField())) + .collect(Collectors.toList()); + if (dictItemList.size() != 0) { + List dictItems = dictItemList.stream() + .filter(e -> itemValue.equals(e.getItemValue())) + .collect(Collectors.toList()); + if (dictItems.size() != 0) { + List itemText = new ArrayList<>(); + if (CutEnum.CN.getValue().equals(cut)) { + itemText = dictItems.stream().map(SysDictItem::getItemText).collect(Collectors.toList()); + } else if(CutEnum.EN.getValue().equals(cut)) { + itemText = dictItems.stream().map(SysDictItem::getEnName).collect(Collectors.toList()); + }else if("2".equals(flagTemp)){ + itemText = dictItems.stream().map(SysDictItem::getItemText).collect(Collectors.toList()); + } + dictItemsCh.addAll(itemText); + dictItemsEn.addAll(itemText); + } + } + } + } + } + } + + + if (onlCgformFieldList.size() != 0 && StringUtils.isNotBlank(onlCgformFieldList.get(0).getDictField())) { + if(FieldTypeEnum.PULL_SINGLE.getValue().equals(onlCgformFieldList.get(0).getFieldShowType()) + || FieldTypeEnum.PULL_MORE.getValue().equals(onlCgformFieldList.get(0).getFieldShowType())){ + if (CutEnum.CN.getValue().equals(cut)) { + entry.setValue(StringUtils.join(dictItemsCh, ",")); + } else if(CutEnum.EN.getValue().equals(cut)){ + entry.setValue(StringUtils.join(dictItemsEn, ",")); + }else if("2".equals(flagTemp)){ + entry.setValue(StringUtils.join(dictItemsEn, ",")); + } + } + } + } @Override @@ -4963,6 +5240,34 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl categoryList, Map.Entry entry, List treeFieldList, String cut,String flagTemp) { + List treeFields = treeFieldList.stream().map(OnlCgformField::getDbFieldName).collect(Collectors.toList()); + String key = entry.getKey(); + if (treeFields.contains(entry.getKey())) { + String value = StringUtils.valueOf(entry.getValue()); + if (StringUtils.isNotBlank(value)) { + List idList = Arrays.asList(value.split(",")); + List sysCategoryList = categoryList.stream().filter(e -> idList.contains(e.getId())).collect(Collectors.toList()); + List nameList = sysCategoryList.stream().map(SysCategory::getName).collect(Collectors.toList()); + List nameEnList = sysCategoryList.stream().map(SysCategory::getEnName).collect(Collectors.toList()); + if (CutEnum.CN.getValue().equals(cut)) { + entry.setValue(StringUtils.join(nameList, ",")); + } else if(CutEnum.EN.getValue().equals(cut)){ + entry.setValue(StringUtils.join(nameEnList, ",")); + }else if("2".equals(flagTemp)){ + entry.setValue(StringUtils.join(nameList, ",")); + } + } + } + } @SneakyThrows diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/service/impl/FeishuServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/service/impl/FeishuServiceImpl.java index 36b0d9597..f20cd3981 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/service/impl/FeishuServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/service/impl/FeishuServiceImpl.java @@ -25,6 +25,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -299,7 +300,7 @@ public class FeishuServiceImpl implements IFeishuService { StringBuilder contentSb = new StringBuilder(); contentSb.append("{"); contentSb.append("\"elements\": ["); - // 补充内容 + // 内容中文 if (StrUtil.isNotEmpty(feishuMsgVo.getContent())){ contentSb.append("{"); contentSb.append("\"tag\": \"div\","); @@ -309,6 +310,19 @@ public class FeishuServiceImpl implements IFeishuService { contentSb.append("}"); contentSb.append("},"); }; + contentSb.append("{\"tag\": \"hr\"},"); + + //内容英文 + if (StrUtil.isNotEmpty(feishuMsgVo.getContentEn())){ + contentSb.append("{"); + contentSb.append("\"tag\": \"div\","); + contentSb.append("\"text\": {"); + contentSb.append("\"content\": \"" + feishuMsgVo.getContentEn() + "\","); + contentSb.append("\"tag\": \"lark_md\""); + contentSb.append("}"); + contentSb.append("},"); + }; + contentSb.append("{\"tag\": \"hr\"},"); @@ -341,15 +355,35 @@ public class FeishuServiceImpl implements IFeishuService { JSONObject jsonObject = JSONObject.parseObject(contentSb.toString()); -// String content = JSONObject.parseObject(JSONObject.parseObject(JSONArray.parseArray(jsonObject.get("elements").toString()).get(0).toString()).get("text").toString()).get("content").toString(); -// String contentReplaceAll = content.replaceAll("<", "\""); -// JSONObject.parseObject(JSONObject.parseObject(JSONArray.parseArray(jsonObject.get("elements").toString()).get(0).toString()).get("text").toString()).put("content",contentReplaceAll); -// JSONObject jsonObject1 = JSONObject.parseObject(JSONObject.parseObject(JSONArray.parseArray(jsonObject.get("elements").toString()).get(0).toString()).get("text").toString()); -// jsonObject1.put("content",contentReplaceAll); -// -// -// JSONObject text = JSONObject.parseObject(JSONObject.parseObject(JSONArray.parseArray(jsonObject.get("elements").toString()).get(0).toString()).get("text").toString()); -// text.put("value",jsonObject1); + String content = JSONObject.parseObject( + JSONObject.parseObject(JSONArray.parseArray(jsonObject.get("elements").toString()).get(0).toString()).get("text").toString()) + .get("content").toString(); + String contentEn = JSONObject.parseObject( + JSONObject.parseObject(JSONArray.parseArray(jsonObject.get("elements").toString()).get(2).toString()).get("text").toString()) + .get("content").toString(); + + JSONObject elementTwo = + JSONObject.parseObject(JSONArray.parseArray(jsonObject.get("elements").toString()).get(1).toString()); + JSONObject elementFour = + JSONObject.parseObject(JSONArray.parseArray(jsonObject.get("elements").toString()).get(3).toString()); + JSONObject elementFive = + JSONObject.parseObject(JSONArray.parseArray(jsonObject.get("elements").toString()).get(4).toString()); + + //处理内容中的双引号(将尖括号替换成双引号) + JSONObject elementOne = getJsonObject(jsonObject, content); + JSONObject elementThree = getJsonObject(jsonObject, contentEn); + + JSONArray jsonArray = new JSONArray(); + jsonArray.add(elementOne); + jsonArray.add(elementTwo); + jsonArray.add(elementThree); + jsonArray.add(elementFour); + jsonArray.add(elementFive); + + jsonObject.put("elements",jsonArray); + + + // 设置请求参数 @@ -368,6 +402,24 @@ public class FeishuServiceImpl implements IFeishuService { return tokenJson.get("msg").toString(); } + @NotNull + private JSONObject getJsonObject(JSONObject jsonObject, String content) { + String contentReplaceAll = content.replaceAll("<", "\""); + + JSONObject jsonObject1 = JSONObject.parseObject( + JSONObject.parseObject( + JSONArray.parseArray(jsonObject.get("elements").toString()).get(0).toString()) + .get("text").toString()); + jsonObject1.put("content",contentReplaceAll); + + + JSONObject elementOne = + JSONObject.parseObject(JSONArray.parseArray(jsonObject.get("elements").toString()).get(0).toString()); + + elementOne.put("text",jsonObject1); + return elementOne; + } + /** * 翻译文本 * 参数: diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/vo/FeishuMsgVo.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/vo/FeishuMsgVo.java index 0aee3596c..63c74a9a6 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/vo/FeishuMsgVo.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/vo/FeishuMsgVo.java @@ -12,6 +12,8 @@ public class FeishuMsgVo { private String content; //内容 + private String contentEn; //内容英文 + private String taskType; //任务类型 private String regulationNo; //法规编号