| | |
| | | import cn.gistack.resource.entity.QieTuEntity; |
| | | import cn.gistack.resource.feign.IOssClient; |
| | | import cn.gistack.sm.skPanorama.entity.ParamEntity; |
| | | import cn.gistack.sm.skPanorama.entity.SkPicCountEntity; |
| | | import cn.gistack.sm.skPanorama.utils.Img4JavaUtil; |
| | | import cn.gistack.sm.skPanorama.utils.PanoramaUtilDict; |
| | | import cn.gistack.sm.skPanoramaState.entity.SkPanoramaStateEntity; |
| | |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.io.FileUtils; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.im4java.core.IM4JavaException; |
| | | import org.im4java.core.InfoException; |
| | | import org.springblade.core.secure.BladeUser; |
| | |
| | | import org.springblade.core.tool.api.R; |
| | | import org.springblade.core.tool.utils.Func; |
| | | import org.springblade.core.tool.utils.StringUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import cn.gistack.sm.skPanorama.entity.SkPanoramaEntity; |
| | |
| | | /** |
| | | * 对象存储构建类 |
| | | */ |
| | | @Autowired |
| | | private final IOssClient iOssClient; |
| | | |
| | | |
| | |
| | | @GetMapping("/list") |
| | | @ApiOperation(value = "分页", notes = "传入skPanorama") |
| | | public R<IPage<SkPanoramaVO>> list(SkPanoramaEntity skPanorama, Query query) { |
| | | IPage<SkPanoramaEntity> pages = skPanoramaService.page(Condition.getPage(query), Condition.getQueryWrapper(skPanorama)); |
| | | QueryWrapper<SkPanoramaEntity> queryWrapper = Condition.getQueryWrapper(skPanorama); |
| | | queryWrapper.orderBy(true,false,"res_guid","sort" ); |
| | | IPage<SkPanoramaEntity> pages = skPanoramaService.page(Condition.getPage(query), queryWrapper); |
| | | return R.data(SkPanoramaWrapper.build().pageVO(pages)); |
| | | } |
| | | |
| | |
| | | */ |
| | | @GetMapping("/page") |
| | | @ApiOperation(value = "分页", notes = "传入skPanorama") |
| | | public R<IPage<SkPanoramaVO>> page(SkPanoramaVO skPanorama, Query query) { |
| | | IPage<SkPanoramaVO> pages = skPanoramaService.selectSkPanoramaPage(Condition.getPage(query), skPanorama); |
| | | public R<IPage<SkPicCountEntity>> page(SkPicCountEntity skPanorama, Query query) { |
| | | Integer current = query.getCurrent(); |
| | | Integer size = query.getSize(); |
| | | IPage<SkPicCountEntity> page = Condition.getPage(query); |
| | | |
| | | // System.err.println("current:"+current); |
| | | // System.err.println("size:"+size); |
| | | Integer startIndex = (current -1) * size; |
| | | Integer endIndex = current * size; |
| | | |
| | | IPage<SkPicCountEntity> pages = skPanoramaService.selectPageR( page,startIndex, endIndex, skPanorama); |
| | | return R.data(pages); |
| | | } |
| | | |
| | | // @GetMapping("/page") |
| | | // @ApiOperation(value = "分页", notes = "传入skPanorama") |
| | | // public R<IPage<SkPanoramaVO>> page2(SkPanoramaVO skPanorama, Query query) { |
| | | // IPage<SkPanoramaVO> pages = skPanoramaService.selectSkPanoramaPage(Condition.getPage(query), skPanorama); |
| | | // return R.data(pages); |
| | | // } |
| | | |
| | | /** |
| | | * 水库全景图 新增 |
| | |
| | | List<SkPanoramaStateEntity> updateList = new ArrayList<>(); |
| | | List<SkPanoramaStateEntity> addList = new ArrayList<>(); |
| | | if (stateLsit != null && stateLsit.size()>0) { |
| | | // for (SkPanoramaStateEntity item :stateLsit) { |
| | | // Long id = item.getId(); |
| | | // if (id != null) { |
| | | // // 更新 |
| | | // updateList.add(item); |
| | | // } else { |
| | | // // 新增 |
| | | // addList.add(item); |
| | | // } |
| | | // } |
| | | // boolean b = true; |
| | | // if (addList != null) { |
| | | // b = skPanoramaStateService.saveBatch(addList); |
| | | // } |
| | | // if (updateList != null) { |
| | | // b = skPanoramaStateService.saveOrUpdateBatch(updateList); |
| | | // } |
| | | |
| | | boolean b =skPanoramaStateService.saveOrUpdateBatch(stateLsit); |
| | | |
| | | return R.status(b); |
| | |
| | | @PostMapping("/submit") |
| | | @ApiOperation(value = "新增或修改", notes = "传入skPanorama") |
| | | public R submit(@Valid @RequestBody SkPanoramaEntity skPanorama) { |
| | | if (skPanorama.getId() == null ) { // 新增 |
| | | if (StringUtils.isBlank(skPanorama.getPicUrl())) { |
| | | skPanorama.setStatus(PanoramaUtilDict.panorama_status_0); |
| | | } |
| | | picIfFormate(skPanorama); |
| | | } else { // 修改 |
| | | picIfFormate(skPanorama); |
| | | } |
| | | return R.status(skPanoramaService.saveOrUpdate(skPanorama)); |
| | | } |
| | | |
| | | private SkPanoramaEntity picIfFormate(SkPanoramaEntity skPanorama) { |
| | | Integer picwidth = skPanorama.getPicwidth(); |
| | | Integer picheight = skPanorama.getPicheight(); |
| | | if (picwidth == picheight * 2) { |
| | | skPanorama.setStatus(PanoramaUtilDict.panorama_status_2); |
| | | } |
| | | return skPanorama; |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | */ |
| | | |
| | | /** |
| | | * 批量切图 |
| | | * @param ids |
| | | * @return |
| | | * @throws IOException |
| | | * @throws InterruptedException |
| | | * @throws IM4JavaException |
| | | * @throws IllegalAccessException |
| | | */ |
| | | @PostMapping("/cutPicBatch") |
| | | public R cutPicBatch(@RequestParam String ids) throws IOException, InterruptedException, IM4JavaException, IllegalAccessException { |
| | | List<Long> idlist = Func.toLongList(ids); |
| | | if (idlist!= null && idlist.size()>0) { |
| | | for (Long id : idlist ) { |
| | | SkPanoramaEntity entity = skPanoramaService.getById(id); |
| | | Integer status = entity.getStatus(); |
| | | String resGuname = entity.getResGuname(); |
| | | String name = entity.getName(); |
| | | if (PanoramaUtilDict.panorama_status_3 == status) continue; |
| | | R r = cutPicture2(entity); |
| | | boolean success = r.isSuccess(); |
| | | if (!success) { |
| | | return R.fail(resGuname+"-"+name+" 切图失败!"); |
| | | } |
| | | |
| | | } |
| | | } |
| | | return R.status(true); |
| | | } |
| | | |
| | | |
| | | private static final String linShiBaseUrl = "/data/panorama/qietu/"; |
| | | @GetMapping("/cutPicture2") |
| | | public R cutPicture2(SkPanoramaEntity skPanorama) |
| | | throws IOException, InterruptedException, IM4JavaException, IllegalAccessException { |
| | | |
| | | SkPanoramaEntity entity = skPanoramaService.getOne(Condition.getQueryWrapper(skPanorama)); |
| | | SkPanoramaEntity entity = skPanoramaService.getById(skPanorama.getId()); |
| | | String picUrl = entity.getPicUrl(); |
| | | String picName = entity.getPicName(); |
| | | String resGuid = entity.getResGuid(); |
| | |
| | | String dirPath = linShiBaseUrl + resGuid + "/"; //临时文件夹路径 |
| | | String lingshiPic = linShiBaseUrl + resGuid + "/" + picName; //临时文件 |
| | | |
| | | // File dir = new File(dirPath); |
| | | // if (dir.isDirectory()) { |
| | | // // 清除该目录下的文件及子目录文件而不删除该目录文件夹。该目录不存在会报错 |
| | | // FileUtils.cleanDirectory(dir); |
| | | // } else { |
| | | // dir.mkdirs(); |
| | | // } |
| | | // // 线上全景图路径,下载到临时路径 |
| | | // URL url = new URL(picUrl); |
| | | // InputStream inputStream = url.openStream(); |
| | | // OutputStream outputStream = new FileOutputStream(lingshiPic); |
| | | // byte[] buffer = new byte[4096]; |
| | | // int bytesRead; |
| | | // while ((bytesRead = inputStream.read(buffer)) != -1) { |
| | | // outputStream.write(buffer, 0, bytesRead); |
| | | // } |
| | | // inputStream.close(); |
| | | // outputStream.close(); |
| | | |
| | | // Path lingshiqjPath = Paths.get(lingshiPic); |
| | | // File lingshiqjfile = lingshiqjPath.toFile(); // 获取临时全景文件,准备切图 |
| | | |
| | | File lingshiqjfile = getquanjingFile(dirPath,lingshiPic,entity); |
| | | File lingshiqjfile = getquanjingFile(dirPath,lingshiPic,entity.getId()); |
| | | |
| | | /** |
| | | * 这里开始切图 |
| | |
| | | /************************************切图结束********************************************/ |
| | | |
| | | // 上传切片全景图 |
| | | System.err.println("切图的路径数量"+qietuHashMap.size()); |
| | | System.err.println("水库编码"+resGuid); |
| | | |
| | | QieTuEntity qieTuEntity = new QieTuEntity(); |
| | | qieTuEntity.setQietuHashMap(qietuHashMap); |
| | |
| | | entity.setUrlhead(urlHead); |
| | | entity.setQierow(row); |
| | | entity.setQiecol(col); |
| | | entity.setPicwidth(width); |
| | | entity.setPicheight(height); |
| | | // entity.setPicwidth(width); |
| | | // entity.setPicheight(height); |
| | | entity.setStatus(PanoramaUtilDict.panorama_status_3); |
| | | skPanoramaService.updateById(entity); |
| | | boolean b = skPanoramaService.updateById(entity); |
| | | |
| | | |
| | | return R.status(true); |
| | | return R.status(b); |
| | | } |
| | | |
| | | private File getquanjingFile (String dirPath ,String linshiUrl , SkPanoramaEntity skPanorama) throws IOException { |
| | | SkPanoramaEntity entity = skPanoramaService.getOne(Condition.getQueryWrapper(skPanorama)); |
| | | private File getquanjingFile (String dirPath ,String linshiUrl , Long id) throws IOException { |
| | | |
| | | // SkPanoramaEntity entity = skPanoramaService.getOne(Condition.getQueryWrapper(skPanorama)); |
| | | SkPanoramaEntity entity = skPanoramaService.getById(id); |
| | | String picUrl = entity.getPicUrl(); |
| | | String picName = entity.getPicName(); |
| | | String resGuid = entity.getResGuid(); |
| | |
| | | File dir = new File(dirPath); |
| | | if (dir.isDirectory()) { |
| | | // 清除该目录下的文件及子目录文件而不删除该目录文件夹。该目录不存在会报错 |
| | | FileUtils.cleanDirectory(dir); |
| | | // FileUtils.cleanDirectory(dir); |
| | | } else { |
| | | dir.mkdirs(); |
| | | } |
| | |
| | | * 将图片转化为长宽比为2:1的比例 |
| | | */ |
| | | private static final String linShiformateBaseUrl = "/data/panorama/formate/"; |
| | | @GetMapping("/formatePic") |
| | | public R formatePic(ParamEntity param) throws IOException, InterruptedException, IM4JavaException { |
| | | List<String> idlist = param.getSkPanoramaIdList(); |
| | | @PostMapping("/formatePic") |
| | | public R formatePic(@RequestParam String ids) throws IOException, InterruptedException, IM4JavaException { |
| | | System.err.println(ids); |
| | | |
| | | List<Long> idlist = Func.toLongList(ids); |
| | | |
| | | |
| | | ArrayList<SkPanoramaEntity> panoramalist = new ArrayList<SkPanoramaEntity>(); |
| | | |
| | | // 已上传的全景图已符合比例,仅用改变数据状态 |
| | | ArrayList<SkPanoramaEntity> justUpdateStatusList = new ArrayList<SkPanoramaEntity>(); |
| | | |
| | | ArrayList<FormateTuEntity> list = new ArrayList<FormateTuEntity>(); |
| | | |
| | | |
| | | if (idlist!= null && idlist.size()>0) { |
| | | for (String id : idlist ) { |
| | | for (Long id : idlist ) { |
| | | FormateTuEntity formateTuEntity = new FormateTuEntity(); |
| | | |
| | | SkPanoramaEntity skPanorama = new SkPanoramaEntity(); |
| | | skPanorama.setId(Long.valueOf(id)); |
| | | SkPanoramaEntity entity = skPanoramaService.getOne(Condition.getQueryWrapper(skPanorama)); |
| | | |
| | | SkPanoramaEntity entity = skPanoramaService.getById(id); |
| | | Integer status = entity.getStatus(); |
| | | if (PanoramaUtilDict.panorama_status_2 == status) continue; |
| | | String picUrl = entity.getPicUrl(); |
| | | String picName = entity.getPicName(); |
| | | String resGuid = entity.getResGuid(); |
| | |
| | | String dirPath = linShiformateBaseUrl + resGuid + "/"; //临时文件夹路径 |
| | | String lingshiPic = linShiformateBaseUrl + resGuid + "/" + picName; //临时文件 |
| | | |
| | | String lingshigeshibiliPic = linShiformateBaseUrl + resGuid + "/geshibili/" + picName; //格式化后的临时文件 |
| | | String lingshigeshibilipath = linShiformateBaseUrl + resGuid + "/geshibili/" ; |
| | | String lingshigeshibiliPic = lingshigeshibilipath + picName; //格式化后的临时文件 |
| | | |
| | | File lingshiqjfile = getquanjingFile(dirPath,lingshiPic,entity); |
| | | File lingshiqjfile = getquanjingFile(dirPath,lingshiPic,id); |
| | | |
| | | // 创建文件夹 |
| | | File lingshigeshibilidir = new File(lingshigeshibilipath); |
| | | if (lingshigeshibilidir.isDirectory()) { |
| | | // 清除该目录下的文件及子目录文件而不删除该目录文件夹。该目录不存在会报错 |
| | | // FileUtils.cleanDirectory(lingshigeshibilidir); |
| | | // 批量操作不能清空文件夹下的全部文件 |
| | | } else { |
| | | lingshigeshibilidir.mkdirs(); |
| | | } |
| | | |
| | | /**************进行格式化******************/ |
| | | // 获取原始全景图图片信息 |
| | | HashMap<String, Integer> imgInfoRT = Img4JavaUtil.getImgInfoRT(lingshiqjfile); |
| | | Integer width = imgInfoRT.get("width"); |
| | | Integer height = imgInfoRT.get("height"); |
| | | System.err.println(id); |
| | | System.err.println("图片分辨率:"+ width +" * " + height); |
| | | if (width == height * 2) { |
| | | System.err.println("符合标准"); |
| | | // 已经符合格式化标准 |
| | | SkPanoramaEntity upEntity = new SkPanoramaEntity(); |
| | | upEntity.setId(id); |
| | | upEntity.setPicheight(height); |
| | | upEntity.setPicwidth(width); |
| | | upEntity.setStatus(PanoramaUtilDict.panorama_status_2); |
| | | justUpdateStatusList.add(upEntity); |
| | | |
| | | // 完成格式化后删除原始临时图片 |
| | | Path qietuPath = Paths.get(lingshiPic); |
| | | File yuanspic = qietuPath.toFile(); |
| | | if (yuanspic.exists()) { |
| | | // 删除指定文件,不存在报异常 |
| | | FileUtils.forceDelete(yuanspic); |
| | | } |
| | | // boolean b = skPanoramaService.updateById(upEntity); |
| | | // return R.status( b); |
| | | } else { |
| | | Integer newWidth = height * 2; |
| | | // 图片格式化 |
| | | Img4JavaUtil.sampleImg(lingshiPic,lingshigeshibiliPic, newWidth , height,null); |
| | | |
| | | Integer newWidth = height * 2; |
| | | Img4JavaUtil.resizeImg(lingshiPic,lingshigeshibiliPic, newWidth , height); |
| | | Path lingshiformPath = Paths.get(lingshigeshibiliPic); |
| | | File lingshiformFile = lingshiformPath.toFile(); // 获取临时全景文件 |
| | | if(lingshiformFile.exists()) { |
| | | formateTuEntity.setPicName(picName); |
| | | formateTuEntity.setId(Long.toString(id)); |
| | | formateTuEntity.setResGuid(resGuid); |
| | | formateTuEntity.setLinshiUrl(lingshigeshibiliPic); |
| | | formateTuEntity.setPicheight(height); |
| | | formateTuEntity.setPicwidth(newWidth); |
| | | list.add(formateTuEntity); |
| | | } |
| | | // 完成格式化后删除原始临时图片 |
| | | Path qietuPath = Paths.get(lingshiPic); |
| | | File yuanspic = qietuPath.toFile(); |
| | | if (yuanspic.exists()) { |
| | | // 删除指定文件,不存在报异常 |
| | | FileUtils.forceDelete(yuanspic); |
| | | } |
| | | |
| | | Path lingshiformPath = Paths.get(lingshigeshibiliPic); |
| | | File lingshiformFile = lingshiformPath.toFile(); // 获取临时全景文件 |
| | | if(lingshiformFile.exists()) { |
| | | formateTuEntity.setPicName(picName); |
| | | formateTuEntity.setId(id); |
| | | formateTuEntity.setResGuid(resGuid); |
| | | formateTuEntity.setLinshiUrl(lingshigeshibiliPic); |
| | | formateTuEntity.setPicheight(height); |
| | | formateTuEntity.setPicwidth(newWidth); |
| | | list.add(formateTuEntity); |
| | | } |
| | | |
| | | } // for循环结束 |
| | |
| | | Object data = r.getData(); |
| | | QieTuEntity result = JSONObject.parseObject(JSONObject.toJSONString(data),QieTuEntity.class); |
| | | ArrayList<FormateTuEntity> newList = result.getList(); |
| | | |
| | | |
| | | if (newList != null && newList.size()>0) { |
| | | for (FormateTuEntity item : newList) { |
| | |
| | | } |
| | | } |
| | | |
| | | boolean b = skPanoramaService.updateBatchById(panoramalist); |
| | | |
| | | return R.status(true); |
| | | System.err.println("panoramalist:"+panoramalist.size()); |
| | | boolean b = false; |
| | | if (panoramalist != null && panoramalist.size()>0) { |
| | | b = skPanoramaService.updateBatchById(panoramalist); |
| | | } else { |
| | | b = true; |
| | | } |
| | | System.err.println("justUpdateStatusList:"+justUpdateStatusList.size()); |
| | | boolean formatB = false; |
| | | // 已上传的全景图已符合比例,仅用改变数据状态 |
| | | if (justUpdateStatusList != null && justUpdateStatusList.size()>0) { |
| | | formatB = skPanoramaService.updateBatchById(justUpdateStatusList); |
| | | } else { |
| | | formatB = true; |
| | | } |
| | | |
| | | |
| | | return R.status((formatB && b)); |
| | | } |
| | | |
| | | |