ApiCropController.java 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. package com.sysu.admin.api.crop;
  2. import com.alibaba.fastjson.JSON;
  3. import com.querydsl.core.types.Projections;
  4. import com.querydsl.core.types.QBean;
  5. import com.querydsl.jpa.impl.JPAQuery;
  6. import com.sysu.admin.api.interceptor.LogAspect;
  7. import com.sysu.admin.api.valid.ApiReqValid;
  8. import com.sysu.admin.controller.crop.CropLand;
  9. import com.sysu.admin.controller.crop.CropLandService;
  10. import com.sysu.admin.controller.crop.CropPoint;
  11. import com.sysu.admin.controller.crop.QCropLand;
  12. import com.sysu.admin.controller.crop.images.CropImage;
  13. import com.sysu.admin.controller.crop.images.CropImageService;
  14. import com.sysu.admin.controller.crop.images.ImageType;
  15. import com.sysu.admin.controller.crop.range.LandRangeIndex;
  16. import com.sysu.admin.controller.crop.range.LandRangeIndexService;
  17. import com.sysu.admin.controller.crop.range.QLandRangeIndex;
  18. import com.sysu.admin.controller.geo.land.LandTaskStatus;
  19. import com.sysu.admin.support.base.BaseComponent;
  20. import com.sysu.admin.support.shiro.ShiroService;
  21. import com.sysu.admin.support.system.config.SConfigService;
  22. import com.sysu.admin.utils.shape.GeoCastUtil;
  23. import com.xiesx.fastboot.base.result.BaseResult;
  24. import com.xiesx.fastboot.base.result.R;
  25. import com.xiesx.fastboot.core.token.handle.CurrentToken;
  26. import com.xiesx.fastboot.utils.CopyUtils;
  27. import org.apache.commons.codec.binary.Base64;
  28. import org.apache.commons.lang3.ObjectUtils;
  29. import org.apache.commons.lang3.StringUtils;
  30. import org.opengis.referencing.FactoryException;
  31. import org.opengis.referencing.operation.TransformException;
  32. import org.springframework.beans.BeanUtils;
  33. import org.springframework.beans.factory.annotation.Autowired;
  34. import org.springframework.web.bind.annotation.*;
  35. import java.io.IOException;
  36. import java.nio.file.Files;
  37. import java.nio.file.Paths;
  38. import java.util.Date;
  39. import java.util.List;
  40. @RequestMapping("/api/crop")
  41. @RestController
  42. public class ApiCropController extends BaseComponent {
  43. @Autowired
  44. CropLandService cityLandService;
  45. @Autowired
  46. SConfigService mSConfigService;
  47. @Autowired
  48. ShiroService mShiroService;
  49. @Autowired
  50. CropImageService cropImageService;
  51. @Autowired
  52. LandRangeIndexService landRangeIndexService;
  53. @RequestMapping("/table_names")
  54. public BaseResult tableNames(@RequestBody(required = false) String data){
  55. CropVo vo = JSON.parseObject(data, CropVo.class);
  56. if(StringUtils.isNotBlank(data) && vo.getPoint() != null) {
  57. String wkt = "'Point("+vo.getPoint()[0]+" "+vo.getPoint()[1]+")'";
  58. String sql = "select t.start,t.end,t.code,t.name,t.table_name,null as geom from p_land_range_index t where St_within(st_geomfromtext("+wkt+",4326),t.geom)";
  59. List<LandRangeIndex> landRangeIndices = mEntityManager.createNativeQuery(sql,LandRangeIndex.class).getResultList();
  60. if(landRangeIndices.size() == 0){
  61. LandRangeIndex defaultIndex = new LandRangeIndex();
  62. defaultIndex.setTableName("p_crop");
  63. defaultIndex.setName("其他地区");
  64. landRangeIndices.add(defaultIndex);
  65. }
  66. return R.succ(landRangeIndices);
  67. }
  68. QLandRangeIndex qLandRangeIndex = QLandRangeIndex.landRangeIndex;
  69. QBean<LandRangeIndex> selectBean = Projections.fields(qLandRangeIndex, qLandRangeIndex.code, qLandRangeIndex.name, qLandRangeIndex.tableName);
  70. JPAQuery<LandRangeIndex> jpaQuery = mJPAQueryFactory.select(selectBean)
  71. .from(qLandRangeIndex);
  72. return R.succ(jpaQuery.fetch());
  73. }
  74. @RequestMapping("/point_list")
  75. public BaseResult pointList(@RequestBody String data, @RequestHeader(value = "token",required = false) String token) throws FactoryException, TransformException {
  76. CropVo vo = JSON.parseObject(data, CropVo.class);
  77. if(vo.getMeter() > 5000){
  78. vo.setMeter(5000);
  79. }
  80. List<CropPoint> cropPoints = cityLandService.findByBuffer(vo.getPoint(), vo.getMeter());
  81. if(ObjectUtils.isNotEmpty(token)){
  82. Long userId = Long.valueOf(CurrentToken.getCurrentToken(token).getUserId());
  83. for(int i=cropPoints.size() - 1;i > -1;i--){
  84. if(cropPoints.get(i).getStatus().intValue() == LandTaskStatus.receive.ordinal() && !cropPoints.get(i).getReceiver().equals(userId)){
  85. cropPoints.remove(i);
  86. }
  87. }
  88. }
  89. return R.succ(cropPoints);
  90. }
  91. @RequestMapping("/info")
  92. public BaseResult info(@RequestBody String data){
  93. CropVo vo = JSON.parseObject(data, CropVo.class);
  94. CropLand cityLand = null;
  95. if(vo.getId() != null) {
  96. cityLand = cityLandService.findOne(vo.getId());
  97. }else{
  98. cityLand = cityLandService.findByPoint(vo.getPoint());
  99. }
  100. if(cityLand == null){
  101. return R.fail();
  102. }
  103. cityLand.setGeojson(GeoCastUtil.gjson.toString(cityLand.getGeom()));
  104. List<CropImage> cropImageList = cropImageService.findByCropId(cityLand.getId());
  105. for(CropImage cropImage : cropImageList){
  106. ImageType imageType = CropImage.getImageType(cropImage.getType().intValue());
  107. switch (imageType){
  108. case fay:
  109. cityLand.setFay(cropImage);
  110. break;
  111. case center:
  112. cityLand.setCenter(cropImage);
  113. break;
  114. case near:
  115. cityLand.setNear(cropImage);
  116. break;
  117. }
  118. }
  119. return R.succ(cityLand);
  120. }
  121. @RequestMapping("/list")
  122. @LogAspect
  123. public BaseResult list(@RequestHeader("token") String token){
  124. CurrentToken currentToken = CurrentToken.getCurrentToken(token);
  125. List<Object[]> cityLandList = cityLandService.findIdAndNameByExecutor(Long.valueOf(currentToken.getUserId()));
  126. return R.succ(cityLandList);
  127. }
  128. @RequestMapping("/updateStatus")
  129. public BaseResult updateStatus(@RequestBody String data, @RequestHeader("token") String token){
  130. CropVo vo = JSON.parseObject(data, CropVo.class);
  131. vo.setToken(token);
  132. super.validate(vo, ApiReqValid.TokenCheckValid.class);
  133. CurrentToken currentToken = CurrentToken.getCurrentToken(vo.getToken());
  134. cityLandService.updateStatus(vo.getId(),vo.getStatus(), Long.parseLong(currentToken.getUserId()));
  135. return R.succ();
  136. }
  137. @PostMapping("/uploadData")
  138. @LogAspect
  139. public BaseResult uploadData(@RequestBody String json, @RequestHeader("token") String token){
  140. CropVo vo = JSON.parseObject(json, CropVo.class);
  141. vo.setToken(token);
  142. super.validate(vo, ApiReqValid.TokenCheckValid.class);
  143. CurrentToken currentToken = CurrentToken.getCurrentToken(vo.getToken());
  144. CropLand bean = cityLandService.findOne(vo.getId());
  145. BeanUtils.copyProperties(vo, bean, CopyUtils.nullNames(vo));
  146. bean.setExecutor(Long.parseLong(currentToken.getUserId()));
  147. bean.setUpdateDate(new Date());
  148. cityLandService.saveCropAndImages(bean);
  149. return R.succ();
  150. }
  151. }