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.entity.sys.UserEntity;
|
import com.moon.server.helper.PathHelper;
|
import com.moon.server.helper.RestHelper;
|
import com.moon.server.helper.StringHelper;
|
import com.moon.server.helper.WebHelper;
|
import com.moon.server.mapper.data.PublishMapper;
|
import com.moon.server.service.sys.TokenService;
|
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.LogFactory;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
import java.io.File;
|
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;
|
|
@Resource
|
PublishMapper publishMapper;
|
|
@Resource
|
FmeService fmeService;
|
|
@Resource
|
PathHelper pathHelper;
|
|
@Resource
|
TokenService tokenService;
|
|
private final static Log log = LogFactory.getLog(PublishService.class);
|
|
@Override
|
public Integer selectCount(String name, String dircode, String type) {
|
name = StringHelper.getLikeUpperStr(name);
|
dircode = StringHelper.getRightLike(dircode);
|
|
return publishMapper.selectCount(name, dircode, type);
|
}
|
|
@Override
|
public List<PublishEntity> selectByPage(String name, String dircode, String type, Integer limit, Integer offset) {
|
name = StringHelper.getLikeUpperStr(name);
|
dircode = StringHelper.getRightLike(dircode);
|
|
return publishMapper.selectByPage(name, dircode, type, limit, offset);
|
}
|
|
@Override
|
public List<PublishEntity> selectAll() {
|
return publishMapper.selectAll();
|
}
|
|
@Override
|
public PublishEntity selectById(int id) {
|
return publishMapper.selectById(id);
|
}
|
|
@Override
|
public List<PublishEntity> selectByIds(String ids) {
|
return publishMapper.selectByIds(ids);
|
}
|
|
@Override
|
public List<String> selectCodesForDir(String dircode, Integer isDom) {
|
return publishMapper.selectCodesForDir(dircode, isDom);
|
}
|
|
@Override
|
public Integer insert(PublishEntity entity) {
|
return publishMapper.insert(entity);
|
}
|
|
@Override
|
public Integer inserts(List<PublishEntity> 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<PublishEntity> 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<MetaEntity> 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 List<Integer> selectLasCs(PubEntity entity, String method, HttpServletRequest req) {
|
Map<String, Object> map = getMapData(entity);
|
|
String str = RestHelper.postForRest(exportServer + method, map);
|
if (StringHelper.isEmpty(str)) {
|
return null;
|
}
|
|
ResponseMsg<String> msg = JSON.parseObject(str, ResponseMsg.class);
|
if (msg == null || msg.getCode() != StaticData.TWO_HUNDRED) {
|
return null;
|
}
|
|
String rs = msg.getResult();
|
if (StringHelper.isEmpty(rs)) {
|
return null;
|
}
|
|
return StringHelper.strToIntegers(rs);
|
}
|
|
/**
|
* 发送发布请求
|
*/
|
public long postForPub(PubEntity entity, String method, HttpServletRequest req) {
|
Map<String, Object> map = getMapData(entity);
|
|
String str = RestHelper.postForRest(exportServer + method, map);
|
if (StringHelper.isEmpty(str)) {
|
return 0;
|
}
|
|
ResponseMsg<String> 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<String, Object> getMapData(PubEntity entity) {
|
Map<String, Object> 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<PublishEntity> list = selectByIds(ids);
|
if (null == list || list.isEmpty()) {
|
return;
|
}
|
|
for (PublishEntity entity : list) {
|
// 避免重复注册
|
if (null != entity.getUpdateTime()) {
|
continue;
|
}
|
|
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 "三维场景服务";
|
case "las":
|
case "laz":
|
case "cpt":
|
return "三维点云服务";
|
default:
|
return "三维模型服务";
|
}
|
}
|
|
/**
|
* 删除多条
|
*/
|
public Integer deletes(List<Integer> idList, HttpServletRequest req) {
|
String ids = StringHelper.join(idList, ",");
|
|
deleteRes(ids, req);
|
|
return deletes(ids);
|
}
|
|
/**
|
* 删除资源
|
*/
|
private void deleteRes(String ids, HttpServletRequest req) {
|
List<PublishEntity> 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);
|
}
|
}
|
}
|
|
/**
|
* 删除发布文件
|
*/
|
public void deleteFiles(List<PublishEntity> list) {
|
String lfData = pathHelper.getConfig().getLfData();
|
for (PublishEntity pub : list) {
|
if (null != pub.getUrl() && pub.getUrl().contains("/SG/")) {
|
continue;
|
}
|
|
String path = lfData + pub.getPath().replace("\\tileset.json", "");
|
File file = new File(path);
|
if (!file.exists() || !file.isDirectory()) {
|
continue;
|
}
|
|
String cmd = String.format("cmd /c rd \"%s\" /s /q", path);
|
WebHelper.exec(cmd);
|
}
|
}
|
|
/**
|
* 删除发布文件
|
*/
|
public void deleteFiles(List<Integer> ids, HttpServletRequest req) {
|
PubEntity entity = new PubEntity();
|
entity.setIds(ids);
|
entity.setDircode("00");
|
|
UserEntity ue = tokenService.getCurrentUser(req);
|
if (ue != null) {
|
entity.setUserId(ue.getId());
|
entity.setToken(WebHelper.getToken(req));
|
}
|
|
long rows = postForPub(entity, "/Convert/DeleteFiles");
|
}
|
|
/**
|
* 发送发布请求
|
*/
|
public long postForPub(PubEntity entity, String method) {
|
Map<String, Object> map = getMapData(entity);
|
|
String str = RestHelper.postForRest(exportServer + method, map);
|
if (StringHelper.isEmpty(str)) {
|
return 0;
|
}
|
|
ResponseMsg<String> msg = JSON.parseObject(str, ResponseMsg.class);
|
if (msg == null || msg.getCode() != StaticData.TWO_HUNDRED) {
|
return 0;
|
}
|
|
return msg.getCount();
|
}
|
}
|