package com.fdkankan.site.service.impl; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fdkankan.site.common.PageInfo; import com.fdkankan.site.common.ResultCode; import com.fdkankan.site.common.util.DateUtils; import com.fdkankan.site.exception.BusinessException; import com.fdkankan.site.httpClient.client.FdKKClient; import com.fdkankan.site.httpClient.client.LaserClient; import com.fdkankan.site.httpClient.request.LaserSceneParam; import com.fdkankan.site.httpClient.response.FdkkResponse; import com.fdkankan.site.request.SceneParam; import com.fdkankan.site.response.SceneProEntityVo; import com.fdkankan.site.response.SceneVo; import com.fdkankan.site.service.IProjectNumService; import com.fdkankan.site.service.ISceneService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.*; @Service public class SceneServiceImpl implements ISceneService { @Resource FdKKClient fdKKClient; @Resource LaserClient laserClient; @Autowired IProjectNumService projectNumService; @Override public List getListByNumList(List numList) { SceneParam param = new SceneParam(); param.setNumList(numList); param.setStatus(2); param.setPageNum(1); param.setType(0); param.setPageSize(9999); JSONArray list = fdkkList(param); param.setType(1); JSONArray list1 = fdkkList(param); list.addAll(list1); List sceneVos = overSceneVo(list, 0); JSONArray list2 = laserList(param); sceneVos.addAll(overSceneVo(list2,2)); return sceneVos; } @Override public List getListByNumMap(HashMap> typeMap) { List sceneVos = new ArrayList<>(); SceneParam param = new SceneParam(); param.setStatus(2); param.setPageNum(1); param.setPageSize(9999); for (Integer type : typeMap.keySet()) { param.setNumList(typeMap.get(type)); if(param.getNumList() == null || param.getNumList().size() <=0){ continue; } switch (type){ case 0 : //看看 param.setType(0); sceneVos.addAll(overSceneVo(fdkkList(param), type)) ; break; case 1 : //看见 param.setType(1); sceneVos.addAll(overSceneVo(fdkkList(param), type)) ; break; case 2 : //深时 param.setType(2); param.setSceneSource(4); sceneVos.addAll(overSceneVo(laserList(param), type)) ; break; case 3 : //深光 param.setType(3); param.setSceneSource(5); sceneVos.addAll(overSceneVo(laserList(param), type)) ; break; } } // List sceneVoList = new ArrayList<>(); // // for (SceneVo sceneVo : sceneVos) { // if(sceneVo.getBind()){ // sceneVoList.add(sceneVo); // } // } return sceneVos; } private JSONArray fdkkList(SceneParam param ){ FdkkResponse fdkkResponse = fdKKClient.sceneList(param); if (fdkkResponse.getCode() != 0) { return new JSONArray(); } PageInfo pageInfo = JSONObject.parseObject(JSONObject.toJSONString(fdkkResponse.getData()), PageInfo.class); return JSONArray.parseArray(JSONObject.toJSONString(pageInfo.getList())); } private JSONArray laserList(SceneParam param ){ LaserSceneParam laserSceneParam = new LaserSceneParam(); laserSceneParam.setPageNum(param.getPageNum()); laserSceneParam.setPageSize(param.getPageSize()); laserSceneParam.setStatus(param.getStatus()); if(StringUtils.isNotBlank(param.getSceneName())){ laserSceneParam.setTitle(param.getSceneName()); } if(param.getNumList() != null && param.getNumList().size() >0){ laserSceneParam.setSceneCodes(param.getNumList()); } laserSceneParam.setSceneSource(param.getSceneSource()); FdkkResponse fdkkResponse = laserClient.sceneList(laserSceneParam); if (fdkkResponse.getCode() != 200) { return new JSONArray(); } JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(fdkkResponse.getData())); JSONArray list = null; if(param.getNumList() == null || param.getNumList().size()<=0){ list = jsonObject.getJSONObject("pageInfo").getJSONArray("list"); }else { list = jsonObject.getJSONArray("list"); } return list; } @Override public PageInfo pageList(SceneParam param, String token) { if (param.getType() == null) { throw new BusinessException(ResultCode.PARAM_MISS); } List sceneVoList = new ArrayList<>(); long total = 0; if (param.getType() == 0 || param.getType() == 1) { //看看,看见 //获取四维(看看,看见)场景数据 FdkkResponse fdkkResponse = null; if (param.getNumList() == null || param.getNumList().size() <= 0) { fdkkResponse = fdKKClient.sceneList(param, token); } else { fdkkResponse = fdKKClient.sceneList(param); } if (fdkkResponse.getCode() != 0) { throw new BusinessException(fdkkResponse.getCode(), fdkkResponse.getMsg()); } PageInfo pageInfo = JSONObject.parseObject(JSONObject.toJSONString(fdkkResponse.getData()), PageInfo.class); total = pageInfo.getTotal(); JSONArray list = JSONArray.parseArray(JSONObject.toJSONString(pageInfo.getList())); sceneVoList = overSceneVo(list,0); } if(param.getType() == 2|| param.getType() == 3) { //深时 深光 //获取激光(深时)场景数据 LaserSceneParam laserSceneParam = new LaserSceneParam(); laserSceneParam.setPageNum(param.getPageNum()); laserSceneParam.setPageSize(param.getPageSize()); laserSceneParam.setStatus(param.getStatus()); if (StringUtils.isNotBlank(param.getSceneName())) { laserSceneParam.setTitle(param.getSceneName()); } if(param.getType()==2){ laserSceneParam.setSceneSource(4); //4深时 }else { laserSceneParam.setSceneSource(5); //5深光 } if (param.getNumList() != null && param.getNumList().size() > 0) { laserSceneParam.setSceneCodes(param.getNumList()); } FdkkResponse fdkkResponse = null; if (param.getNumList() == null || param.getNumList().size() <= 0) { fdkkResponse = laserClient.sceneList(laserSceneParam, token); } else { fdkkResponse = laserClient.sceneList(laserSceneParam); } if (fdkkResponse.getCode() != 200) { throw new BusinessException(fdkkResponse.getCode(), fdkkResponse.getMsg()); } JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(fdkkResponse.getData())); JSONArray list = null; if (param.getNumList() == null || param.getNumList().size() <= 0) { list = jsonObject.getJSONObject("pageInfo").getJSONArray("list"); total = jsonObject.getJSONObject("pageInfo").getLong("total"); } else { list = jsonObject.getJSONArray("list"); total = jsonObject.getLong("total"); } sceneVoList =overSceneVo(list, param.getType() ); } //一个场景对应一个项目 已绑定项目的设置为不可绑定 Set numList = projectNumService.getNumList(); for (SceneVo sceneVo : sceneVoList) { if(numList.contains(sceneVo.getNum())){ sceneVo.setBind(true); } } Page voPage = new Page<>(param.getPageNum(),param.getPageSize()); voPage.setRecords(sceneVoList); voPage.setTotal(total); return PageInfo.PageInfo(voPage); } /** * 四维看看返回数据格式转换 */ private List overSceneVo(JSONArray list,Integer type) { List sceneVoList = new ArrayList<>(); if(type == 2||type == 3){ //深时 深光 for (Object o : list) { String res = JSONObject.toJSONString(o); SceneVo vo = JSONObject.parseObject(res,SceneVo.class); if(vo.getStatus() == 4){ //4生成OBJ中 设置为计算中 vo.setStatus(0); } // if (StringUtils.isBlank(vo.getPhone())) { // vo.setBind(false); // } vo.setType(type); sceneVoList.add(vo); } }else { for (Object obj : list) { String res = JSONObject.toJSONString(obj); SceneProEntityVo fdkkScenePlusVo = JSONObject.parseObject(res, SceneProEntityVo.class); SceneVo sceneVo = new SceneVo(); sceneVo.setId(fdkkScenePlusVo.getId()); sceneVo.setBuildObjStatus(0); sceneVo.setCreateTime(fdkkScenePlusVo.getCreateTime()); sceneVo.setName(fdkkScenePlusVo.getSceneName()); sceneVo.setNum(fdkkScenePlusVo.getNum()); sceneVo.setPayStatus(1); sceneVo.setSceneName(fdkkScenePlusVo.getSceneName()); sceneVo.setSnCode(fdkkScenePlusVo.getSnCode()); sceneVo.setStatus(setLaserStatus(fdkkScenePlusVo.getStatus(), fdkkScenePlusVo.getPayStatus())); sceneVo.setThumb(fdkkScenePlusVo.getThumb()); sceneVo.setTitle(fdkkScenePlusVo.getSceneName()); sceneVo.setViewCount(fdkkScenePlusVo.getViewCount()); sceneVo.setIsLaser(false); sceneVo.setPhone(fdkkScenePlusVo.getPhone()); sceneVo.setType(fdkkScenePlusVo.getSceneType()); sceneVo.setShootCount(fdkkScenePlusVo.getShootCount()); // if (fdkkScenePlusVo.getUserId() == null) { // sceneVo.setBind(false); // } sceneVoList.add(sceneVo); } } return sceneVoList; } private Integer setLaserStatus(Integer status,Integer payStatus){ //深时状态,-1:场景被删 0:计算中 1计算失败 2计算成功 3封存 4生成OBJ中 if(payStatus != 1){ //封存 return 3; } if(status == -1){ return 1; } if(status == -2){ return 2; } return status; } }