package com.yb.service; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.github.houbb.opencc4j.core.impl.ZhConvertBootstrap; import com.yb.config.XzConfig; import com.yb.helper.RsaHelper; import com.yb.util.EntityHttpUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Service public class IntentionService { @Autowired private XzConfig xzConfig; @Autowired private AgentService agentService; @Autowired private XzService xzService; @Autowired private EntityHttpUtil entityHttpUtil; public HashMap getFunctionMatch(String orderString, Map allParams) throws Exception { HashMap mapObj = new HashMap(); JSONObject orderObject = JSON.parseObject(orderString); String name = JSONObject.parseObject(orderObject.getString("args")).getString("place"); String func = orderObject.getString("name"); String history = orderObject.getString("history"); if (func.equals(xzConfig.funcName[0])) { mapObj = getPoiMap(orderObject, func); } else if (func.equals(xzConfig.funcName[1])) { mapObj = getAroundPoi(orderObject, func); } else if (func.equals(xzConfig.funcName[2])) { mapObj = getQueryMeta(orderObject, func); } else if (func.equals(xzConfig.funcName[3])) { mapObj = getQueryRelationship(orderObject, func); } else if (func.equals(xzConfig.funcName[4])) { mapObj = getCombatSimulate(orderObject, func); } else if (func.equals(xzConfig.funcName[5])) { mapObj = getBatEnv(orderObject, func, allParams); } return mapObj; } private HashMap getCombatSimulate(JSONObject orderObject, String func) { HashMap hashMap = new HashMap(); hashMap.put("func", func); return hashMap; } private HashMap getBatEnv(JSONObject orderObject, String func, Map allParams) throws Exception { HashMap hashMap = new HashMap(); hashMap.put("func", func); System.out.println("rec history1:" + allParams); String val = entityHttpUtil.postAgentMessage(xzConfig.battleReport, allParams); JSONObject js = JSONObject.parseObject(val); if (js == null) { hashMap.put("msg", "报告生成失败"); return hashMap; } System.out.println("rec history1:" + val); hashMap.put("msg", js.getString("content")); return hashMap; } //查看某个区域内各个实体/对象之间的关系 private HashMap getQueryRelationship(JSONObject orderObject, String func) throws Exception { HashMap hashMap = new HashMap(); hashMap.put("func", func); JSONObject argsObject = JSON.parseObject(orderObject.getString("args")); String place = argsObject.getString("place"); HashMap poiMap = agentService.getQueryRelationship(place, xzConfig.queryFiled); String key = "msg"; String msg = (String) poiMap.get(key); hashMap.put("msg", msg); String center = (String) poiMap.get("center"); if(center != null){ hashMap.put("data", poiMap); } return hashMap; } //查询数据统计 private HashMap getQueryMeta(JSONObject orderObject, String func) throws Exception { HashMap hashMap = new HashMap(); hashMap.put("func", func); String filedString = xzService.getQueryMeta(xzConfig.layerId, xzConfig.dbid, xzConfig.typeFiled, xzConfig.queryEntity); JSONObject metaObject = JSON.parseObject(filedString); JSONArray dataArray = metaObject.getJSONArray("data"); String markDown = "| 数据类型 | 数据量 |\n|------|------|\n"; ArrayList> list = new ArrayList<>(); for (int i = 0; i < dataArray.size(); i++) { JSONObject dataObj = dataArray.getJSONObject(i); System.out.println("rec queryMeta:" + dataObj); HashMap listhash = new HashMap<>(); String name = dataObj.getString(xzConfig.typeFiled); String count = dataObj.getString("count_" + xzConfig.typeFiled); ArrayList filedList = getQueryByFiledList(name); listhash.put("name", name); listhash.put("ids", filedList); list.add(listhash); markDown += "| " + name + " | " + count + " |\n"; } hashMap.put("ids", list); hashMap.put("data", markDown); return hashMap; } // 关键字查询分类查询数据量 private ArrayList getQueryByFiledList(String name) throws Exception { String obj = xzConfig.typeFiled + " = '" + name + "'" + ""; String encrypt = RsaHelper.encrypt(xzService.getPublickey(), obj); HashMap hashMap = xzService.getHashMap(xzConfig.layerId, xzConfig.dbid, "1", "0", encrypt, null); String val = entityHttpUtil.getPostMessage(xzConfig.queryEntity, hashMap); ArrayList list = new ArrayList(); String fObj = JSONObject.parseObject(val).getString("data"); System.out.println("rec queryMeta:" + fObj); if (fObj != null) { JSONArray fArray = JSONArray.parseArray(JSONObject.parseObject(fObj).getString("items")); if (fArray.size() > 0) { for (int i = 0; i < fArray.size(); i++) { String sid = JSONObject.parseObject(fArray.get(i).toString()).getString("seid"); list.add(sid); } } } return list; } //根据范围查询数据 private HashMap getAroundPoi(JSONObject orderString, String func) throws Exception { HashMap hashMap = new HashMap(); hashMap.put("func", func); JSONObject argsObject = JSON.parseObject(orderString.getString("args")); String place = argsObject.getString("place"); String type = argsObject.getString("attris"); String dis = argsObject.getString("redius"); int radius = 5000; if (dis != null && dis.contains("km")) { dis = dis.replace("km", ""); radius = Integer.parseInt(dis) * 1000; } if (dis != null && dis.contains("m")) { dis = dis.replace("m", ""); radius = Integer.parseInt(dis); } if (dis != null && dis.contains("千米")) { dis = dis.replace("千米", ""); radius = Integer.parseInt(dis) * 1000; } if (dis != null && dis.contains("米")) { dis = dis.replace("米", ""); radius = Integer.parseInt(dis); } String aroundPoi = agentService.getAgentAroundPoi(place, type, radius, xzConfig.queryFiled, xzConfig.typeFiled); if (aroundPoi == "" || aroundPoi.isEmpty()) { aroundPoi = agentService.getAgentAroundPoi(getTraditional(place), type, radius, xzConfig.queryFiled, xzConfig.typeFiled); if (aroundPoi == "" || aroundPoi.isEmpty()) { String msg = "未查询到" + place + "相关数据。请提供更加详细数据。"; hashMap.put("msg", msg); return hashMap; } } JSONArray dataArray = JSONArray.parseArray(aroundPoi); hashMap.put("data", dataArray); if (type.contains("全部目标")) { if (dataArray.size() == 0) { hashMap.put("data", dataArray); String msg = "已查询到" + place + "内的" + type + "相关数据。共查询到" + dataArray.size() + "条数据。"; hashMap.put("msg", msg); return hashMap; } ArrayList> listArray = new ArrayList<>(); String markDown = "| 数据类型 | 数据量 |\n|------|------|\n"; ArrayList> list = new ArrayList<>(); List cName = new ArrayList<>(); List cNum = new ArrayList<>(); for (int i = 0; i < dataArray.size(); i++) { JSONObject dataObj = dataArray.getJSONObject(i); String fclass1 = dataObj.getString("fclass_1"); String ids = dataObj.getString("seid"); if (cName.contains(fclass1)) { for (int j = 0; j < cName.size(); j++) { String name = cName.get(j); if (name.equals(fclass1)) { System.out.println("目标统计 = " + cName.get(j) + fclass1); int num = cNum.get(j) + 1; cNum.set(j, num); HashMap itemObj = list.get(j); for (String key : itemObj.keySet()) { if (key.contains("ids")) { ArrayList list_ids = (ArrayList) itemObj.get(key); list_ids.add(ids); itemObj.put(key,list_ids); } } } } } else { cName.add(fclass1); cNum.add(1); HashMap listhash = new HashMap<>(); ArrayList listId = new ArrayList(); listId.add(ids); listhash.put("name", fclass1); listhash.put("ids", listId); list.add(listhash); } } for (int i = 0; i < cName.size(); i++) { markDown += "| " + cName.get(i) + " | " + cNum.get(i) + " |\n"; } hashMap.put("ids", list); hashMap.put("data", markDown); hashMap.put("func", "queryMeta"); return hashMap; } String msg = "已查询到" + place + "内的" + type + "相关数据。共查询到" + dataArray.size() + "条数据。"; hashMap.put("msg", msg); return hashMap; } public String getTraditional(String place) { ZhConvertBootstrap zhConvertBootstrap = ZhConvertBootstrap.newInstance(); return zhConvertBootstrap.toTraditional(place); } //查询点位 public HashMap getPoiMap(JSONObject orderString, String func) throws Exception { HashMap hashMap = new HashMap(); JSONObject argsObject = JSON.parseObject(orderString.getString("args")); String place = argsObject.getString("place"); String poiMap = agentService.getAgentPoiMap(place, xzConfig.queryFiled); JSONObject poiObj = JSONObject.parseObject(poiMap); if (poiMap == "" || poiMap.isEmpty()) { poiMap = agentService.getAgentPoiMap(getTraditional(place), xzConfig.queryFiled); if (poiMap == "" || poiMap.isEmpty()) { String msg = "未查询到" + place + "相关数据。请提供更加详细数据。"; hashMap.put("msg", msg); return hashMap; } } System.out.println("poiMap: " + poiObj); hashMap.put("func", func); hashMap.put("data", poiObj); String msg = "已查询到" + place + "相关数据。" + place + "数据已在地图上显示"; hashMap.put("msg", msg); return hashMap; } }