package com.moon.server.service.data; import com.alibaba.fastjson.JSON; import com.moon.server.entity.all.ResponseMsg; import com.moon.server.entity.all.StaticData; import com.moon.server.entity.ctrl.PubEntity; import com.moon.server.entity.ctrl.RegisterEntity; import com.moon.server.entity.data.MetaEntity; import com.moon.server.entity.data.PublishEntity; import com.moon.server.helper.RestHelper; import com.moon.server.helper.StringHelper; import com.moon.server.mapper.data.PublishMapper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Field; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 数据发布 * @author WWW */ @Service public class PublishService implements PublishMapper { @Value("${sys.exportServer}") private String exportServer; @Value("${sys.iisHost}") private String iisHost; @Autowired PublishMapper publishMapper; @Autowired FmeService fmeService; private final static Log log = LogFactory.getLog(PublishService.class); @Override public Integer selectCount(String name) { name = StringHelper.getLikeUpperStr(name); return publishMapper.selectCount(name); } @Override public List selectByPage(String name, Integer limit, Integer offset) { name = StringHelper.getLikeUpperStr(name); return publishMapper.selectByPage(name, limit, offset); } @Override public List selectAll() { return publishMapper.selectAll(); } @Override public PublishEntity selectById(int id) { return publishMapper.selectById(id); } @Override public List selectByIds(String ids) { return publishMapper.selectByIds(ids); } @Override public Integer insert(PublishEntity entity) { return publishMapper.insert(entity); } @Override public Integer inserts(List list) { return publishMapper.inserts(list); } @Override public Integer insertPubDown(Integer pubid, Integer downid, Integer createUser) { return publishMapper.insertPubDown(pubid, downid, createUser); } @Override public Integer delete(int id) { return publishMapper.delete(id); } @Override public Integer deletes(String ids) { return publishMapper.deletes(ids); } @Override public Integer update(PublishEntity entity) { return publishMapper.update(entity); } @Override public Integer updates(List list) { return publishMapper.updates(list); } @Override public Integer selectMetasByCount(String depcode, String dircode, Integer verid, String types, String name) { depcode = StringHelper.getRightLike(depcode); dircode = StringHelper.getRightLike(dircode); name = StringHelper.getLikeUpperStr(name); return publishMapper.selectMetasByCount(depcode, dircode, verid, types, name); } @Override public List selectMetasByPage(String depcode, String dircode, Integer verid, String types, String name, Integer limit, Integer offset) { depcode = StringHelper.getRightLike(depcode); dircode = StringHelper.getRightLike(dircode); name = StringHelper.getLikeUpperStr(name); return publishMapper.selectMetasByPage(depcode, dircode, verid, types, name, limit, offset); } /** * 发送发布请求 */ public long postForPub(PubEntity entity, String method, HttpServletRequest req) { Map map = getMapData(entity); String str = RestHelper.postForRest(exportServer + method, map); if (StringHelper.isEmpty(str)) { return 0; } ResponseMsg msg = JSON.parseObject(str, ResponseMsg.class); if (msg == null || msg.getCode() != StaticData.TWO_HUNDRED) { return 0; } if (msg.getCount() > 0) { serverRegister(msg.getResult(), req); } return msg.getCount(); } /** * 获取Map数据 */ private Map getMapData(PubEntity entity) { Map map = new HashMap<>(3); Field[] fields = entity.getClass().getDeclaredFields(); for (Field field : fields) { try { if ("serialVersionUID".equals(field.getName())) { continue; } field.setAccessible(true); Object obj = field.get(entity); map.put(field.getName(), obj); } catch (Exception ex) { // } } return map; } /** * 服务注册 */ private void serverRegister(String ids, HttpServletRequest req) { List list = selectByIds(ids); if (null == list || list.isEmpty()) { return; } for (PublishEntity entity : list) { String url = entity.getUrl().replace("{host}", iisHost); String type = getServerType(entity); RegisterEntity reg = fmeService.serverRegister(entity.getName(), url, type, req); if (null == reg || StringHelper.isEmpty(reg.getSerialnum())) { continue; } fmeService.serverApply(reg.getSerialnum(), entity.getId(), req); entity.setRegid(reg.getHashid()); update(entity); } } /** * 获取服务类型 */ private String getServerType(PublishEntity entity) { switch (entity.getType()) { case "DOM": return "TMS服务"; case "DEM": return "三维地形服务"; case "mpt": return "三维场景服务"; default: return "三维模型服务"; } } /** * 删除多条 */ public Integer deletes(List idList, HttpServletRequest req) { String ids = StringHelper.join(idList, ","); deleteRes(ids, req); return deletes(ids); } /** * 删除资源 */ private void deleteRes(String ids, HttpServletRequest req) { List list = selectByIds(ids); if (null == list || list.isEmpty()) { return; } for (PublishEntity entity : list) { if (StringHelper.isEmpty(entity.getRegid())) { continue; } try { fmeService.deleteRes(entity.getRegid(), req); } catch (Exception ex) { log.error(ex.getMessage(), ex); } } } }