package com.sysu.admin.site; import com.alibaba.excel.EasyExcel; import com.alibaba.fastjson.JSON; import com.sysu.admin.controller.city.CityRepository; import com.sysu.admin.controller.city.District; import com.sysu.admin.controller.city.DistrictRepository; import com.sysu.admin.controller.crop.CropLand; import com.sysu.admin.controller.crop.CropLandService; import com.sysu.admin.controller.crop.CropLandVo; import com.sysu.admin.controller.crop.CropPoint; import com.sysu.admin.controller.crop.range.LandRangeIndexService; import com.sysu.admin.controller.crop.xls.CropExcel; import com.sysu.admin.controller.crop.xls.CropExcelService; import com.sysu.admin.controller.crop.xls.CustomHandler; import com.sysu.admin.controller.crop.xls.PublishCropExcelListener; import com.sysu.admin.controller.geo.land.LandTaskStatus; import com.sysu.admin.support.base.ServiceContext; import com.sysu.admin.support.shiro.ShiroService; import com.sysu.admin.utils.shape.GeoCastUtil; import com.xiesx.fastboot.base.result.BaseResult; import com.xiesx.fastboot.base.result.R; import com.xiesx.fastboot.core.token.annotation.GoToken; import com.xiesx.fastboot.core.token.handle.CurrentToken; import com.xiesx.fastboot.utils.CopyUtils; import org.apache.catalina.util.URLEncoder; import org.apache.commons.lang3.StringUtils; import org.locationtech.jts.geom.MultiPolygon; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletResponse; import javax.transaction.Transactional; import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.Path; import java.util.Date; import java.util.List; import java.util.Map; /** * 读取地图数据信息 */ @RequestMapping("/site/crop") @Controller public class SiteCropLandController extends ServiceContext { @Autowired CropLandService cityLandService; @Autowired ShiroService shiroService; @Autowired LandRangeIndexService mLandRangeIndexService; @Autowired DistrictRepository districtRepository; @Autowired CityRepository cityRepository; @Autowired CropExcelService cropExcelService; @RequestMapping("/getInfo") @ResponseBody public BaseResult getInfo(Double x, Double y){ CropLand cityLand = cityLandService.findByPoint(new Double[]{x,y}); if(cityLand == null){ return R.fail(); } cityLand.setWkt(GeoCastUtil.geomToWkt(cityLand.getGeom())); return R.succ(cityLand); } @RequestMapping("/getGeoJson") @ResponseBody public BaseResult getGeojson(@RequestBody CommonVo commonVo, @GoToken() CurrentToken currentToken){ List cropLandList = cityLandService.findCropLandNoGeomByTableNamesAndBBox(commonVo.getTableNames(), commonVo.getX1(),commonVo.getY1(),commonVo.getX2(),commonVo.getY2(), commonVo.getStatus()); return R.succ(cropLandList); } @RequestMapping("/getBuffer") @ResponseBody public BaseResult getBuffer(Double x, Double y, Integer m){ return R.succ(cityLandService.getBuffer(new Double[]{x, y}, m)); } @RequestMapping("/save") @ResponseBody public BaseResult save(CropLandVo vo){ CropLand bean = cityLandService.findOne(vo.getId()); if(bean.getStatus().intValue() == LandTaskStatus.unpublished.ordinal()){ bean.setCreator(shiroService.getPrincipalId()); bean.setCreateDate(new Date()); } BeanUtils.copyProperties(vo, bean, CopyUtils.nullNames(vo)); bean.setWkt(GeoCastUtil.geomToWkt(bean.getGeom())); bean.setCenterPoint(cityLandService.getCenterPoint(bean.getGeom())); District district = districtRepository.findByPoint(bean.getCenterPoint()); if(district != null){ cityLandService.setCity(bean, district); } cityLandService.save(bean); return R.succ(bean); } @RequestMapping("/publish") @ResponseBody public BaseResult publish(@RequestBody CropLandVo vo, @GoToken() CurrentToken currentToken){ CropLand bean = cityLandService.findOne(vo.getId()); if(bean.getStatus().intValue() != LandTaskStatus.unpublished.ordinal()){ return R.fail("不是未发布的地块!"); } if(bean.getDistrict() == null || bean.getCenterPoint() == null){ bean.setCenterPoint(cityLandService.getCenterPoint(bean.getGeom())); bean.getCenterPoint().setSRID(4326); District district = districtRepository.findByPoint(bean.getCenterPoint()); if(district != null){ cityLandService.setCity(bean, district); } } bean.setStatus(LandTaskStatus.published.ordinal()); cityLandService.save(bean); return R.succ(); } @RequestMapping("/publish_index") public String publishIndex(){ return "page/publish_task"; } @RequestMapping("/batchPublish") @ResponseBody @Transactional public BaseResult batchPublish(CropLandVo vo, String fileBase64){ if(StringUtils.isNotBlank(fileBase64)){ Path path = cityLandService.fileByBase64(fileBase64,"xls",mShiroService.getPrincipalId()); PublishCropExcelListener publishCropExcelListener = new PublishCropExcelListener(mLandRangeIndexService); EasyExcel.read(path.toFile(), CropExcel.class,publishCropExcelListener).doReadAllSync(); Map> stringListMap = publishCropExcelListener.getTableIdsMap(); for(String tableName : stringListMap.keySet()) { cityLandService.batchPublishByIds(tableName, stringListMap.get(tableName)); } }else{ if(vo.getDistrictId() != null) { String tableName = mLandRangeIndexService.getTableNameByCode(vo.getDistrictId()); cityLandService.batchPublishByTableName(tableName); } } return R.succ(); } @RequestMapping("/export_index") public String exportIndex(){ return "page/export"; } @RequestMapping("/export") @ResponseBody @Transactional public void export(CropLandVo vo, HttpServletResponse response){ String tableNames; if(vo.getDistrictId() == null){ tableNames = mLandRangeIndexService.getAllTableNames(); }else{ tableNames = mLandRangeIndexService.getTableNameByCode(vo.getDistrictId()); } List cropLandList = cityLandService.findAllByStatusAndDistrict(tableNames, vo.getStatus()); List cropExcelList = cropExcelService.cropLandToCropExcel(cropLandList); String mimetype = "application/x-msdownload"; String downFileName = "重庆耕地信息.xlsx"; String inlineType = "attachment"; // 是否内联附件 response.setContentType(mimetype); response.setHeader("Content-Disposition", inlineType + ";filename=" + URLEncoder.DEFAULT.encode(downFileName, Charset.defaultCharset())); try { EasyExcel.write(response.getOutputStream(), CropExcel.class).registerWriteHandler(new CustomHandler()) .sheet("sheet1").doWrite(cropExcelList); } catch (IOException e) { e.printStackTrace(); } } @RequestMapping("/addTest") @ResponseBody public BaseResult addTest(@RequestBody String data){ String wkt = JSON.parseObject(data).get("wkt").toString(); CropLand bean = new CropLand().setGeom((MultiPolygon)GeoCastUtil.wktToGeom(wkt)) .setGridcode(2L).setStatus(LandTaskStatus.unpublished.ordinal()); bean.setCenterPoint(cityLandService.getCenterPoint(bean.getGeom())); bean.getCenterPoint().setSRID(4326); District district = districtRepository.findByPoint(bean.getCenterPoint()); if(district != null) { cityLandService.setCity(bean, district); } cityLandService.save(bean); return R.succ(); } }