| | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.moon.server.entity.all.StaticData; |
| | | import com.moon.server.entity.ctrl.PubEntity; |
| | | import com.moon.server.entity.data.MetaEntity; |
| | | import com.moon.server.entity.data.MetaPubEntity; |
| | | import com.moon.server.entity.data.PublishEntity; |
| | | import com.moon.server.entity.shujian.*; |
| | | import com.moon.server.entity.sys.ResEntity; |
| | | import com.moon.server.helper.HttpHelper; |
| | | import com.moon.server.helper.PathHelper; |
| | | import com.moon.server.helper.RestHelper; |
| | | import com.moon.server.helper.StringHelper; |
| | | import com.moon.server.service.sys.ResService; |
| | | import org.apache.commons.logging.Log; |
| | | import org.apache.commons.logging.LogFactory; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.lang.reflect.Field; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * 数简.服务 |
| | |
| | | */ |
| | | @Service |
| | | public class ShuJianService { |
| | | private final static Log log = LogFactory.getLog(ShuJianService.class); |
| | | |
| | | @Value("${shujian.ak}") |
| | | private String ak; |
| | | String ak; |
| | | |
| | | @Value("${shujian.url}") |
| | | private String sjUrl; |
| | | String sjUrl; |
| | | |
| | | @Value("${shujian.path}") |
| | | String sjPath; |
| | | |
| | | @Resource |
| | | PathHelper pathHelper; |
| | | |
| | | @Resource |
| | | ResService resService; |
| | | |
| | | @Resource |
| | | MetaService metaService; |
| | | |
| | | @Resource |
| | | PublishService publishService; |
| | | |
| | | private final static Log log = LogFactory.getLog(ShuJianService.class); |
| | | |
| | | public final static List<String> TYPES = new ArrayList<>(Arrays.asList("DOM", "DEM")); |
| | | |
| | | private final static String DOM_FORMAT = "%s/sj_raster/v6/wmts/service/system/%d/%s"; |
| | | |
| | | private final static String DEM_FORMAT = "%s/sj_raster/v6/terrain_mesh/service/system/%d/%s"; |
| | | |
| | | private final static String COLOR_TABLE = "%s/sj_raster/v6/api/color_table?%s&page_count=%d&page_num=%d&key="; |
| | | |
| | | /** |
| | | * 分页查询数简的颜色表 |
| | | */ |
| | | public void selectSjColorTables(Integer pageSize, Integer pageIndex, HttpServletRequest req, HttpServletResponse res) { |
| | | try { |
| | | String url = String.format("%s/sj_raster/v6/api/color_table?%s&page_count=%d&page_num=%d&key=", sjUrl, ak, pageSize, pageIndex); |
| | | String url = String.format(COLOR_TABLE, sjUrl, ak, pageSize, pageIndex); |
| | | |
| | | HttpHelper httpHelper = new HttpHelper(); |
| | | httpHelper.service(req, res, null, url); |
| | |
| | | /** |
| | | * 插入数简服务 |
| | | */ |
| | | public Integer insertSjService(PubEntity pubEntity, HttpServletRequest req, HttpServletResponse res) { |
| | | CreateLayerEntity layerEntity = createLayerEntity(pubEntity); |
| | | public Integer insertSjService(PubEntity pub) { |
| | | CreateLayerEntity layerEntity = createLayerEntity(pub); |
| | | Integer layerId = postLayerEntity(layerEntity); |
| | | if (null == layerId) { |
| | | return 0; |
| | | } |
| | | |
| | | CreateServiceEntity serviceEntity = createServiceEntity(pubEntity); |
| | | CreateServiceEntity serviceEntity = createServiceEntity(pub, layerId); |
| | | Integer serviceId = postServiceEntity(serviceEntity); |
| | | if (null == serviceId) { |
| | | return 0; |
| | | } |
| | | |
| | | PublishEntity publishEntity = createPublishEntity(pubEntity, layerId, serviceId); |
| | | PublishEntity publishEntity = createPublishEntity(pub, layerId, serviceId); |
| | | int rows = publishService.insert(publishEntity); |
| | | if (0 == rows) { |
| | | return 0; |
| | | } |
| | | |
| | | return publishService.insert(publishEntity); |
| | | ResEntity resEntity = createResEntity(publishEntity); |
| | | resService.insert(resEntity); |
| | | |
| | | return insertMetaPub(pub, publishEntity.getId()); |
| | | } |
| | | |
| | | /** |
| | | * 创建图层实体类 |
| | | */ |
| | | public CreateLayerEntity createLayerEntity(PubEntity pubEntity) { |
| | | CreateLayerEntity entity = new CreateLayerEntity(1, 3); |
| | | public CreateLayerEntity createLayerEntity(PubEntity pub) { |
| | | String ids = StringHelper.join(pub.getIds(), ","); |
| | | List<MetaEntity> metas = metaService.selectByIds(ids); |
| | | |
| | | CreateLayerEntity entity = new CreateLayerEntity(); |
| | | entity.setCreate_service(0); |
| | | |
| | | CreateLayerEntity.Layer layer = entity.getLayer(); |
| | | layer.setName(""); |
| | | layer.setProjection("ESRI:" + StaticData.I104903); |
| | | layer.setType(0); |
| | | layer.setEnhance_type(0); |
| | | layer.setName(pub.getName()); |
| | | layer.setProjection(getEpsg(pub)); |
| | | layer.setType(TYPES.indexOf(pub.getType())); |
| | | layer.setEnhance_type(pub.getEnhanceType()); |
| | | layer.setNodata(getNoData(pub, metas)); |
| | | |
| | | String[] noData = new String[3]; |
| | | noData[0] = "0"; |
| | | noData[1] = "0"; |
| | | noData[2] = "0"; |
| | | layer.setNodata(noData); |
| | | |
| | | CreateLayerEntity.ImagePathList imagePathList = entity.getImage_path_list().get(0); |
| | | imagePathList.setPath(""); |
| | | CreateLayerEntity.ImagePathList imagePathList = entity.new ImagePathList(); |
| | | imagePathList.setPath(sjPath); |
| | | entity.getImage_path_list().add(imagePathList); |
| | | |
| | | List<CreateLayerEntity.ImageList> imageLists = entity.getImage_list(); |
| | | CreateLayerEntity.ImageList imageList = imageLists.get(0); |
| | | imageList.setPath(""); |
| | | for (MetaEntity meta : metas) { |
| | | CreateLayerEntity.ImageList imageList = entity.new ImageList(); |
| | | imageList.setPath(meta.getPath().replace("\\", "/")); |
| | | imageLists.add(imageList); |
| | | } |
| | | |
| | | return entity; |
| | | } |
| | | |
| | | /** |
| | | * 获取EPSG编码 |
| | | */ |
| | | public String getEpsg(PubEntity pub) { |
| | | if (StaticData.I104903 == pub.getEpsg()) { |
| | | return "ESRI:" + pub.getEpsg(); |
| | | } |
| | | |
| | | return "EPSG:" + pub.getEpsg(); |
| | | } |
| | | |
| | | /** |
| | | * 获取 nodata |
| | | */ |
| | | private List<Integer> getNoData(PubEntity pub, List<MetaEntity> metas) { |
| | | int bands = 1; |
| | | for (MetaEntity meta : metas) { |
| | | if (StringHelper.isEmpty(meta.getBands())) { |
| | | continue; |
| | | } |
| | | try { |
| | | int b = Integer.parseInt(meta.getBands()); |
| | | if (b > bands) { |
| | | bands = b; |
| | | } |
| | | } catch (Exception e) { |
| | | // |
| | | } |
| | | } |
| | | |
| | | List<Integer> list = new ArrayList<>(); |
| | | for (int i = 0; i < bands; i++) { |
| | | list.add(pub.getNodata()); |
| | | } |
| | | |
| | | return list; |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | public Integer postLayerEntity(CreateLayerEntity layerEntity) { |
| | | Map<String, Object> map = getMapData(layerEntity); |
| | | String url = String.format("%s/sj_raster/sj_raster/v6/api/layer?%s", sjUrl, ak); |
| | | String url = String.format("%s/sj_raster/v6/api/layer?op=create_ex&%s", sjUrl, ak); |
| | | |
| | | LayerResultEntity rs = postForRest(url, map, LayerResultEntity.class); |
| | | boolean flag = null == rs || !StaticData.SUCCESS.equals(rs.getStatus()) || null == rs.getResult().getLayer_id(); |
| | |
| | | /** |
| | | * 创建服务实体类 |
| | | */ |
| | | public CreateServiceEntity createServiceEntity(PubEntity pubEntity) { |
| | | public CreateServiceEntity createServiceEntity(PubEntity pub, Integer layerId) { |
| | | CreateServiceEntity entity = new CreateServiceEntity(); |
| | | List<Integer> layerList = entity.getLayer_list(); |
| | | layerList.add(layerId); |
| | | |
| | | CreateServiceEntity.Services services = entity.getService(); |
| | | services.setName(""); |
| | | services.setAccess_name(StringHelper.getGuid()); |
| | | services.setName(pub.getName()); |
| | | services.setAccess_name(pub.getUuid()); |
| | | services.setPub_status(1); |
| | | services.setRect_minx(-180.0); |
| | | services.setRect_miny(-90.0); |
| | | services.setRect_maxx(180.0); |
| | | services.setRect_maxy(90.0); |
| | | services.setProjection("ESRI:" + StaticData.I104903); |
| | | services.setProjection(getEpsg(pub)); |
| | | services.setSat_id(-1); |
| | | services.setSensor_id(-1); |
| | | services.setImage_type(-1); |
| | | services.setConfig(null); |
| | | |
| | | return entity; |
| | | } |
| | |
| | | * 创建发布实体类 |
| | | */ |
| | | public PublishEntity createPublishEntity(PubEntity pub, Integer layerId, Integer serviceId) { |
| | | String epsg = (StaticData.I104903 == pub.getEpsgCode() ? "ESRI:" : "EPSG:") + pub.getEpsgCode(); |
| | | |
| | | PublishEntity entity = new PublishEntity(); |
| | | entity.setType(pub.getType()); |
| | | entity.setName(pub.getName()); |
| | | entity.setMin(pub.getMin()); |
| | | entity.setMax(pub.getMax()); |
| | | entity.setBak(epsg); |
| | | entity.setCreateUser(pub.getUserId()); |
| | | entity.setDirid(pub.getDircode()); |
| | | entity.setDepid(pub.getDepcode()); |
| | | entity.setStatus(3); |
| | | entity.setLayerid(layerId); |
| | | entity.setServiceid(serviceId); |
| | | entity.setEventid(pub.getUuid()); |
| | | entity.setName(pub.getName()); |
| | | entity.setUrl(String.format(TYPES.get(0).equals(pub.getType()) ? DOM_FORMAT : DEM_FORMAT, sjUrl, serviceId, StaticData.I0)); |
| | | entity.setPath(null); |
| | | entity.setType(pub.getType()); |
| | | entity.setStatus(3); |
| | | entity.setDirid(pub.getDircode()); |
| | | entity.setDepid(pub.getDepcode()); |
| | | entity.setEnhanceType(pub.getEnhanceType()); |
| | | entity.setMin(pub.getMin()); |
| | | entity.setMax(pub.getMax()); |
| | | entity.setEpsg(pub.getEpsg()); |
| | | entity.setCreateUser(pub.getUserId()); |
| | | entity.setCtType(getColorTableType(pub)); |
| | | entity.setCtJson(getColorTableJson(pub)); |
| | | entity.setCreateUser(pub.getUserId()); |
| | | entity.setGeom("null"); |
| | | |
| | | return entity; |
| | | } |
| | | |
| | | /** |
| | | * 创建资源实体类 |
| | | */ |
| | | private ResEntity createResEntity(PublishEntity pub) { |
| | | ResEntity entity = new ResEntity(); |
| | | entity.setCnName(pub.getName()); |
| | | // 状态:0-禁用,1-启用原始地址,2-启用代理地址 |
| | | entity.setStatus(2); |
| | | // 服务类别:0-其他,1-GisServer,2-GeoServer,3-数简 |
| | | entity.setCategory(3); |
| | | // 服务类型:0-URL,1-TMS,2-WMTS,3-WMS,4-WFS,5-Tileset |
| | | entity.setType(StaticData.DOM.equals(pub.getType()) ? 2 : 0); |
| | | // 数据类型:0-URL,1-DOM,2-DEM |
| | | entity.setData(StaticData.DOM.equals(pub.getType()) ? 1 : 2); |
| | | entity.setUrl(pub.getUrl()); |
| | | entity.setArgs(ak); |
| | | entity.setDescr("系统自动创建"); |
| | | entity.setDepid(pub.getDepid()); |
| | | entity.setDirid(pub.getDirid()); |
| | | entity.setCreateUser(pub.getCreateUser()); |
| | | entity.setPubid(pub.getId()); |
| | | |
| | | return entity; |
| | | } |
| | | |
| | | /** |
| | | * 获取颜色表类型 |
| | | */ |
| | | private String getColorTableType(PubEntity pub) { |
| | | if (null == pub.getColorTable() && null == pub.getGradientColorTable()) { |
| | | return null; |
| | | } |
| | | if (null != pub.getGradientColorTable()) { |
| | | return "渐变颜色表"; |
| | | } |
| | | |
| | | return "普通颜色表"; |
| | | } |
| | | |
| | | /** |
| | | * 获取颜色表的JSON字符串 |
| | | */ |
| | | public String getColorTableJson(PubEntity pub) { |
| | | if (null == pub.getColorTable() && null == pub.getGradientColorTable()) { |
| | | return null; |
| | | } |
| | | |
| | | if (null != pub.getGradientColorTable()) { |
| | | return JSON.toJSONString(pub.getGradientColorTable()); |
| | | } |
| | | |
| | | return JSON.toJSONString(pub.getColorTable()); |
| | | } |
| | | |
| | | /** |
| | | * 插入元数据发布类 |
| | | */ |
| | | private int insertMetaPub(PubEntity pub, Integer pubid) { |
| | | int count = 0; |
| | | for (Integer metaid : pub.getIds()) { |
| | | MetaPubEntity mp = new MetaPubEntity(); |
| | | mp.setMetaid(metaid); |
| | | mp.setPubid(pubid); |
| | | mp.setCreateUser(pub.getUserId()); |
| | | |
| | | count += publishService.insertMetaPub(mp); |
| | | } |
| | | |
| | | return count; |
| | | } |
| | | |
| | | /** |
| | | * 插入数简服务 |
| | | */ |
| | | public Integer updateSjService(PubEntity pub, HttpServletRequest req, HttpServletResponse res) { |
| | | public Integer updateSjService(PubEntity pub) { |
| | | PublishEntity entity = publishService.selectById(pub.getPubid()); |
| | | if (null == entity) { |
| | | return 0; |
| | |
| | | if (null != entity.getServiceid()) { |
| | | deleteService(entity.getServiceid()); |
| | | } |
| | | setPubEntity(pub, entity); |
| | | |
| | | return 1; |
| | | CreateLayerEntity layerEntity = createLayerEntity(pub); |
| | | Integer layerId = postLayerEntity(layerEntity); |
| | | if (null == layerId) { |
| | | return 0; |
| | | } |
| | | |
| | | CreateServiceEntity serviceEntity = createServiceEntity(pub, layerId); |
| | | Integer serviceId = postServiceEntity(serviceEntity); |
| | | if (null == serviceId) { |
| | | return 0; |
| | | } |
| | | |
| | | entity.setLayerid(layerId); |
| | | entity.setServiceid(serviceId); |
| | | entity.setUpdateUser(pub.getUserId()); |
| | | if (StringHelper.isEmpty(entity.getGeom())) { |
| | | entity.setGeom(StaticData.NULL); |
| | | } |
| | | |
| | | int rows = publishService.update(entity); |
| | | if (0 == rows) { |
| | | return 0; |
| | | } |
| | | |
| | | ResEntity resEntity = resService.selectByPubid(entity.getId()); |
| | | if (null == resEntity) { |
| | | resEntity = createResEntity(entity); |
| | | return resService.insert(resEntity); |
| | | } else { |
| | | resEntity.setCnName(entity.getName()); |
| | | resEntity.setUrl(entity.getUrl()); |
| | | return resService.update(resEntity); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 设置发布实体类 |
| | | */ |
| | | private void setPubEntity(PubEntity pub, PublishEntity entity) { |
| | | List<MetaEntity> metas = publishService.selectMetasByPubid(pub.getPubid()); |
| | | |
| | | List<Integer> ids = new ArrayList<>(); |
| | | for (MetaEntity meta : metas) { |
| | | ids.add(meta.getId()); |
| | | } |
| | | pub.setIds(ids); |
| | | |
| | | if (StringHelper.isEmpty(pub.getName())) { |
| | | pub.setName(entity.getName()); |
| | | } |
| | | if (null == pub.getEpsg() || 0 == pub.getEpsg()) { |
| | | pub.setEpsg(entity.getEpsg()); |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | public Integer deletesSjServices(List<Integer> ids) { |
| | | String strs = StringHelper.join(ids, ","); |
| | | |
| | | List<PublishEntity> list = publishService.selectByIds(strs); |
| | | if (null == list || list.isEmpty()) { |
| | | return 0; |