package com.adc.da.mq; import com.adc.da.slrs.otSvpps.service.IOtSvppsService; import com.adc.da.slrs.sarStandardsInfo.entity.SarStandardsInfo; import com.adc.da.slrs.sarStandardsInfo.service.ISarStandardsInfoService; import com.adc.da.slrs.sysInfo.service.SysInfoEOService; import com.adc.da.sys.dao.DicTypeEODao; import com.adc.da.sys.entity.DicTypeEO; import com.adc.da.utils.util.InitStandAttrUtil; import com.adc.da.utils.util.Utils; import com.rabbitmq.client.Channel; import net.sf.json.JSONObject; import org.apache.commons.lang.StringUtils; import org.json.JSONTokener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.amqp.rabbit.annotation.Exchange; import org.springframework.amqp.rabbit.annotation.Queue; import org.springframework.amqp.rabbit.annotation.QueueBinding; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.support.AmqpHeaders; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.messaging.Message; import org.springframework.stereotype.Component; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @Component public class SendStandMQService { @Autowired private ISarStandardsInfoService sarStandardsInfoService; @Autowired private SysInfoEOService sysInfoEOService; @Autowired private DicTypeEODao dicTypeEODao; @Autowired private IOtSvppsService otSvppsEOService; private static final Logger logger = LoggerFactory.getLogger(SendStandMQService.class); @RabbitListener(bindings = @QueueBinding( value = @Queue(value = "createStandMQ_SQ_GSAR_RELEASE", durable = "true"), exchange = @Exchange(value = "stand-exchange_SQ_GSAR_RELEASE", ignoreDeclarationExceptions = "true"), key = "stand-key_SQ_GSAR_RELEASE")) public void createMQ(Map standMap, Message message, Channel channel) throws Exception{ try{ try{ Thread.sleep(5000); insertOrUpdateStandInfo(standMap); }catch(InterruptedException e){ logger.error(e.toString()); Thread.currentThread().interrupt(); } } catch (Exception e) { logger.error("搜索中心标准消息队列进入添加数据方法前失败!"); logger.error(e.getMessage(),e); }finally { Long tag = (Long) message.getHeaders().get(AmqpHeaders.DELIVERY_TAG); channel.basicAck(tag,false); logger.debug("消息确认成功!!!!!!!!!"); } } public void insertOrUpdateStandInfo(Map standMap){ String addOrUpdate = standMap.get("addOrUpdate").toString(); String sarStandards = standMap.get("sarStandards").toString(); JSONObject jsonobject = JSONObject.fromObject(sarStandards); SarStandardsInfo infoEO = (SarStandardsInfo) JSONObject.toBean(jsonobject,SarStandardsInfo.class); if(infoEO.getMapItems() == null || infoEO.getMapItems().isEmpty()){ if(jsonobject.get("mapItems") != null){ infoEO.setMapItems(net.sf.json.JSONObject.fromObject(jsonobject.get("mapItems"))); } } String sarStandAttrEOStr = infoEO.getSarStandAttrEOStr(); Map attrInfoMap = new TreeMap<>(); Map attrInfoMapForAuth = new TreeMap<>(); if(StringUtils.isNotBlank(sarStandAttrEOStr)){ attrInfoMap = JSONObject.fromObject(sarStandAttrEOStr); attrInfoMapForAuth.putAll(attrInfoMap); } Map infoMap = infoEO.getAttrInfoMap(); Map infoEOMapItems = infoEO.getMapItems(); //查询字典表,形成Hash映射提升速度 List dicInfo = dicTypeEODao.getDicInfo("dic_id","dic_type_code", "dic_type_name","show_index"); dicInfo = dicInfo.stream().filter(dicTypeEO -> { if(org.apache.commons.lang3.StringUtils.isNotBlank(dicTypeEO.getDicTypeCode())){ dicTypeEO.setDicTypeCode(dicTypeEO.getDicTypeCode().replace(" ","")); return true; } return false; }).collect(Collectors.toList()); Map dicMap = dicInfo.stream() .filter(item-> ("2klxdk7fo3tvpvin70dk".equals(item.getDicId()) || "18mg1g4x0rwubcto7fdd".equals(item.getDicId()) || "08rerbsn8ucjfk13z2ci".equals(item.getDicId()) || "pnv0ik979yqogocqujwo".equals(item.getDicId())) && !item.getDicTypeCode().isEmpty()) .collect(Collectors.toMap(DicTypeEO::getDicTypeCode,DicTypeEO::getShowIndex,(value1, value2 )->value2)); // 往索引表中插入数据 String getCodeName = ""; Map saveMap = new HashMap<>(); String baseSearchContent = ""; // 开始存放数据 -------- 国内外标准 ----------- saveMap.put("id",infoEO.getId()); saveMap.put("BYYBJ", attrInfoMap.getOrDefault("BYYBJ", "")); saveMap.put("BDTBH", attrInfoMap.getOrDefault("BDTBH", "")); saveMap.put("country",infoEO.getCountry()); if (StringUtils.isNotEmpty(infoEO.getCountry())) { String codeName = sysInfoEOService.getDicNamesByCodes(infoEO.getCountry(),"RFRFRFSCXVB"); saveMap.put("countryShow",codeName); } saveMap.put("standSortOrder",esStateOrder(String.valueOf(infoEO.getStandSort()),dicMap)); saveMap.put("standSort",infoEO.getStandSort()); saveMap.put("stand_sort",infoEO.getStandSort()); if (StringUtils.isNotEmpty(infoEO.getStandSort())) { String codeName = sysInfoEOService.getDicNamesByCodes(infoEO.getStandSort(),"JKSADFH564S"); saveMap.put("standSortShow",codeName); getCodeName = codeName; } saveMap.put("standNumber",infoEO.getStandNumber()); saveMap.put("stand_number",infoEO.getStandNumber()); saveMap = dealNumberMsg(saveMap,infoEO,infoEO.getStandSort()); saveMap.put("standYear",infoEO.getStandYear()); saveMap.put("stand_year",infoEO.getStandYear()); saveMap.put("nameshow",infoEO.getStandName()); saveMap.put("stand_name",infoEO.getStandName()); saveMap.put("standName",infoEO.getStandName()); saveMap.put("standEnName",infoEO.getStandEnName()); saveMap.put("stand_en_name",infoEO.getStandEnName()); if (StringUtils.isNotEmpty(infoEO.getStandState())) { String codeName = sysInfoEOService.getDicNamesByCodes(infoEO.getStandState(),""); saveMap.put("standstateshow",codeName); } saveMap.put("issueTime",dateFormatToStr(infoEO.getIssueTime())); Date issue_time_data = null; if (StringUtils.isNotBlank(infoEO.getIssueTime())) { try { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); issue_time_data = format.parse(dateFormatToStr(infoEO.getIssueTime())+" 00:00:00"); } catch (ParseException ignored) { } } if (issue_time_data != null) { saveMap.put("issue_time_data",issue_time_data.getTime()); }else{ saveMap.put("issue_time_data",-1000000000000000000L); } String standNatureName = ""; if(infoEO.getStandNature() != null && StringUtils.isNotBlank(infoEO.getStandNature())){ List valArr = Arrays.asList(infoEO.getStandNature().split(",")); standNatureName = dicTypeEODao.getDicNamesByCodes(valArr,""); } saveMap.put("standNature",infoEO.getStandNature()); saveMap.put("standNatureName",standNatureName); saveMap.put("synopsis",infoEO.getSynopsis()); saveMap.put("standType",infoEO.getStandType()); String textStatusName = ""; if(infoEO.getTextStatus() != null && StringUtils.isNotBlank(infoEO.getTextStatus())){ List valArr = Arrays.asList(infoEO.getTextStatus().split(",")); textStatusName = dicTypeEODao.getDicNamesByCodes(valArr,""); } saveMap.put("textStatus",infoEO.getTextStatus()); saveMap.put("textStatusName",textStatusName); String isRelateAccessName = ""; if(infoEO.getIsRelateAccess() != null && StringUtils.isNotBlank(infoEO.getIsRelateAccess())){ if(infoEO.getIsRelateAccess().equals("1")){ isRelateAccessName = "是"; }else { isRelateAccessName = "否"; } } saveMap.put("isRelateAccess",infoEO.getIsRelateAccess()); saveMap.put("isRelateAccessName",isRelateAccessName); saveMap.put("standSystem",infoEO.getStandSystem()); // 自定义属性字段 if (attrInfoMap != null && !attrInfoMap.isEmpty()) { attrInfoMap = sysInfoEOService.changeSelectInfo(attrInfoMap, "stand",baseSearchContent); saveMap.putAll(attrInfoMap); } saveMap.put("baseSearchContent",baseSearchContent); saveMap.put("type","stand"); saveMap.put("validFlag","0"); saveMap.put("content",infoEO.getFileIds()); saveMap.put("CHJL",infoEO.getCHJL()); String fieldInfo = InitStandAttrUtil.queryField; List fieldInfoList = Arrays.asList(fieldInfo .split(",")).stream().map(s -> (s.trim())).collect(Collectors.toList()); // 动态存储属性字段 for (String field : fieldInfoList) { String fieldValue = ""; try { saveMap.put(field,attrInfoMap.getOrDefault(field,"")); if(infoMap.get(field) != null && StringUtils.isNotBlank(infoMap.get(field).toString())){ Object json= new JSONTokener(infoMap.get(field).toString()).nextValue(); if(json instanceof org.json.JSONArray){ fieldValue = String.join(",", com.alibaba.fastjson.JSONObject.parseArray(infoMap.get(field).toString(),String.class)); }else { if(!("null").equals(json)){ fieldValue = infoMap.get(field).toString(); } } if(fieldValue.contains("null")){ fieldValue = fieldValue.replace("null",""); } } saveMap.put(field+"Name",fieldValue); }catch (Exception e){ logger.info("国内外标准 消息队列: "+addOrUpdate+", 标准ID:"+infoEO.getId()+",问题字段:"+field); logger.error(e.getMessage(),e); saveMap.put(field+"Name",fieldValue); } } if(infoEOMapItems != null && !infoEOMapItems.isEmpty()){ saveMap.put("mapItems",infoEOMapItems); } //当建立代替时,产生的没有文件的问题 if (StringUtils.isBlank(String.valueOf(saveMap.get("content")))) { List list = new ArrayList<>(); String context = filterStringIsNotBlank(String.valueOf(saveMap.get("FBGBJBD")),true) + filterStringIsNotBlank(String.valueOf(saveMap.get("XXZLXX")),true) + filterStringIsNotBlank(String.valueOf(saveMap.get("ZQYJG")),true) + filterStringIsNotBlank(String.valueOf(saveMap.get("BPG")),true) + filterStringIsNotBlank(String.valueOf(saveMap.get("CA")),true) + filterStringIsNotBlank(String.valueOf(saveMap.get("SSG")),true) + filterStringIsNotBlank(String.valueOf(saveMap.get("JDWJ")),true) + filterStringIsNotBlank(String.valueOf(saveMap.get("XGD")),true) + filterStringIsNotBlank(String.valueOf(saveMap.get("KWJ")),true) + filterStringIsNotBlank(String.valueOf(saveMap.get("ZBJBD")),false); context = context.replace(",,", ","); saveMap.put("content", context); } // 如果出现提示查询报错,而且提示 查询内容无法转换为 日期格式的 情况,原因可能是没有把日期转换为字符串,可以考虑放开下面的代码(目前,域内没有报错,但是,本地有问题) // //部分字段没有转为汉字,在此处转为汉字 // if(StringUtils.isNotBlank(String.valueOf(saveMap.get("XCXSSRQName")))) { // saveMap.put("XCXSSRQName"," " + String.valueOf(saveMap.get("XCXSSRQName"))); // } // if(StringUtils.isNotBlank(String.valueOf(saveMap.get("ZCCSSRQName")))) { // saveMap.put("ZCCSSRQName"," " + String.valueOf(saveMap.get("ZCCSSRQName"))); // } // if(StringUtils.isNotBlank(String.valueOf(saveMap.get("SSRQName")))) { // saveMap.put("SSRQName"," " + String.valueOf(saveMap.get("SSRQName"))); // } // if(StringUtils.isNotBlank(String.valueOf(saveMap.get("issueTime")))) { // saveMap.put("issueTime"," " + String.valueOf(saveMap.get("issueTime"))); // } // if(StringUtils.isNotBlank(String.valueOf(saveMap.get("ZCCSSRQ")))) { // saveMap.put("ZCCSSRQ"," " + String.valueOf(saveMap.get("ZCCSSRQ"))); // } String numberShow = String.valueOf(saveMap.get("numbershow")); if (!"null".equals(numberShow) && StringUtils.isNotBlank(numberShow)) { saveMap.put("numberShowBig", numberShow.toUpperCase()); } String nameshow = String.valueOf(saveMap.get("nameshow")); if (!"null".equals(nameshow) && StringUtils.isNotBlank(nameshow)) { saveMap.put("nameshowBig", nameshow.toUpperCase()); } String standEnName = String.valueOf(saveMap.get("standEnName")); if (!"null".equals(standEnName) && StringUtils.isNotBlank(standEnName)) { saveMap.put("standEnNameBig", standEnName.toUpperCase()); } if ("1".equals(attrInfoMapForAuth.get("updateAuth"))) { Map getAttrMap = new TreeMap<>(attrInfoMapForAuth); if (getAttrMap != null && getAttrMap.size() > 0) { for (Map.Entry entry : getAttrMap.entrySet()) { String name = entry.getKey(); String value = ""; List valArr = new ArrayList<>(); if (entry.getValue() != null && InitStandAttrUtil.selectionFieldList != null && InitStandAttrUtil.selectionFieldList.size() > 0 && InitStandAttrUtil.selectionFieldList.contains(name)) { if (StringUtils.isNotBlank(entry.getValue().toString())) { Object json = null; if (Utils.isJson(entry.getValue().toString())) { json = new JSONTokener(entry.getValue().toString()).nextValue(); } if (json instanceof org.json.JSONArray) { valArr = com.alibaba.fastjson.JSONObject.parseArray(entry.getValue().toString(), String.class); } else { value = entry.getValue().toString(); valArr = Arrays.asList(value.split(",")); } if (!valArr.isEmpty()) { value = dicTypeEODao.getDicNamesByCodes(valArr, ""); } } saveMap.put(name + "Name",value); } } } } if("add".equals(addOrUpdate)){ sarStandardsInfoService.insertIntoIndexForMap(saveMap); } else { sarStandardsInfoService.updateIntoIndexForMap(saveMap); } } private String esStateOrder(String data, Map dicMap){ if(StringUtils.isNotBlank(data)){ data = data.replace(" ",""); if(dicMap.get(data.trim().toUpperCase()) != null){ return String.valueOf(dicMap.get(data.trim().toUpperCase())); }else { return "99999"; } }else { return "99999"; } } private String filterStringIsNotBlank(String str,boolean boo){ String f = ","; return (str == null || str.equals("") || str.equals("null")) ? "" : (boo ? str+f : str); } private String dateFormatToStr(String dateStr){ if(dateStr == null || dateStr.equals("")){ return ""; } String dateToStr = ""; try { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); dateToStr = dateFormat.format(dateFormat.parse(dateStr.trim().substring(0,10))); }catch (Exception e){ e.getMessage(); } return dateToStr; } public Map dealNumberMsg (Map saveMap,SarStandardsInfo infoEO,String getCodeName) { if(StringUtils.isNotEmpty(infoEO.getStandYear())){ String number = getCodeName + " " + infoEO.getStandNumber() + "-" + infoEO.getStandYear(); saveMap.put("numbershow",number); int index = infoEO.getStandNumber().indexOf("."); int index1 = infoEO.getStandNumber().indexOf(":"); String numberExpNull = ""; if(index > -1){ numberExpNull = (getCodeName + infoEO.getStandNumber() + "-" + number.replaceAll(" ","") + "-" + getCodeName + infoEO.getStandNumber().substring(0,index) + "-" + infoEO.getStandNumber().substring(0,index)); } else if (index1 > -1) { numberExpNull = getCodeName + infoEO.getStandNumber() + "-" + number.replaceAll(" ","") + "-" + getCodeName + infoEO.getStandNumber().substring(0,index1) + "-" + infoEO.getStandNumber().substring(0,index1); } else { numberExpNull = getCodeName + infoEO.getStandNumber() + "-" + number.replaceAll(" ",""); } saveMap.put("numberExpNull",numberExpNull); } else { String num = getCodeName + " " + infoEO.getStandNumber(); saveMap.put("numbershow",num); int index = infoEO.getStandNumber().indexOf("."); String numberExpNull = ""; if(index > -1){ numberExpNull = getCodeName + infoEO.getStandNumber() + "-" + num.replaceAll(" ","") + "-" + getCodeName + infoEO.getStandNumber().substring(0,index) + "-" + infoEO.getStandNumber().substring(0,index); } else { numberExpNull = getCodeName + infoEO.getStandNumber() + "-" + num.replaceAll(" ",""); } saveMap.put("numberExpNull",numberExpNull); } return saveMap; } }