Administrator 2 年 前
コミット
b44155303f
37 ファイル変更839 行追加2695 行削除
  1. 170 0
      src/main/java/com/sysu/admin/api/crop/ApiCropController.java
  2. 0 103
      src/main/java/com/sysu/admin/api/crop/CropController.java
  3. 3 0
      src/main/java/com/sysu/admin/api/crop/CropVo.java
  4. 97 0
      src/main/java/com/sysu/admin/api/interceptor/WebLogAspect.java
  5. 37 0
      src/main/java/com/sysu/admin/controller/city/City.java
  6. 67 0
      src/main/java/com/sysu/admin/controller/city/CityController.java
  7. 7 0
      src/main/java/com/sysu/admin/controller/city/CityRepository.java
  8. 37 0
      src/main/java/com/sysu/admin/controller/city/District.java
  9. 9 0
      src/main/java/com/sysu/admin/controller/city/DistrictRepository.java
  10. 40 0
      src/main/java/com/sysu/admin/controller/city/Province.java
  11. 8 0
      src/main/java/com/sysu/admin/controller/city/ProvinceRepository.java
  12. 2 0
      src/main/java/com/sysu/admin/controller/crop/CropLand.java
  13. 10 2
      src/main/java/com/sysu/admin/controller/crop/CropLandController.java
  14. 3 9
      src/main/java/com/sysu/admin/controller/crop/CropLandRepository.java
  15. 77 9
      src/main/java/com/sysu/admin/controller/crop/CropLandService.java
  16. 7 1
      src/main/java/com/sysu/admin/controller/crop/CropLandVo.java
  17. 52 0
      src/main/java/com/sysu/admin/controller/crop/CropPoint.java
  18. 21 0
      src/main/java/com/sysu/admin/controller/crop/CropPointRepository.java
  19. 23 0
      src/main/java/com/sysu/admin/controller/crop/images/CropImage.java
  20. 22 0
      src/main/java/com/sysu/admin/controller/crop/images/CropImageService.java
  21. 5 0
      src/main/java/com/sysu/admin/controller/crop/images/ImageType.java
  22. 2 2
      src/main/java/com/sysu/admin/controller/geo/qyz/Qyz.java
  23. 30 24
      src/main/java/com/sysu/admin/controller/geo/qyz/QyzController.java
  24. 4 2
      src/main/java/com/sysu/admin/support/base/BaseVo.java
  25. 3 0
      src/main/java/com/sysu/admin/support/base/RepositoryContext.java
  26. 9 0
      src/main/java/com/sysu/admin/support/system/config/ConfigContext.java
  27. 1 1
      src/main/java/com/sysu/admin/support/system/region/Region.java
  28. 4 4
      src/main/java/com/sysu/admin/support/system/region/RegionRepository.java
  29. 17 0
      src/main/java/com/sysu/admin/utils/NumberUtil.java
  30. 1 0
      src/main/resources/application-adm.yml
  31. 1 0
      src/main/resources/application-dev.yml
  32. 3 3
      src/main/webapp/WEB-INF/jsp/comm/admin2.jsp
  33. 5 10
      src/main/webapp/WEB-INF/jsp/page/publish_task.jsp
  34. 3 2511
      src/main/webapp/static/js/city-picker/city-picker.data.js
  35. 33 14
      src/main/webapp/static/package/city.js
  36. 19 0
      src/main/webapp/static/package/cityland.js
  37. 7 0
      src/test/java/com/sysu/admin/api/crop/CropControllerTest.java

+ 170 - 0
src/main/java/com/sysu/admin/api/crop/ApiCropController.java

@@ -0,0 +1,170 @@
+package com.sysu.admin.api.crop;
+
+import com.alibaba.fastjson.JSON;
+import com.mysql.jdbc.StringUtils;
+import com.sysu.admin.controller.crop.CropLand;
+import com.sysu.admin.controller.crop.CropLandService;
+import com.sysu.admin.controller.crop.CropPoint;
+import com.sysu.admin.controller.crop.images.CropImage;
+import com.sysu.admin.controller.crop.images.CropImageService;
+import com.sysu.admin.controller.crop.images.ImageType;
+import com.sysu.admin.support.base.BaseComponent;
+import com.sysu.admin.support.shiro.ShiroService;
+import com.sysu.admin.support.system.config.ConfigContext;
+import com.sysu.admin.support.system.config.SConfigService;
+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.utils.CopyUtils;
+import org.apache.commons.codec.binary.Base64;
+import org.opengis.referencing.FactoryException;
+import org.opengis.referencing.operation.TransformException;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@RequestMapping("/api/crop")
+@RestController
+public class ApiCropController extends BaseComponent {
+    @Autowired
+    CropLandService cityLandService;
+    @Autowired
+    SConfigService mSConfigService;
+    @Autowired
+    ShiroService mShiroService;
+
+    @Autowired
+    CropImageService cropImageService;
+
+    static Long testId = 102L;
+
+    @RequestMapping("/point_list")
+    public BaseResult pointList(@RequestBody String data) throws FactoryException, TransformException {
+        CropVo vo = JSON.parseObject(data, CropVo.class);
+        if(vo.getMeter() > 5000){
+            vo.setMeter(5000);
+        }
+        List<CropPoint> cropPoints = cityLandService.findByBuffer(vo.getPoint(), vo.getMeter());
+
+        return R.succ(cropPoints);
+    }
+
+    @RequestMapping("/info")
+    public BaseResult info(@RequestBody String data){
+        CropVo vo = JSON.parseObject(data, CropVo.class);
+        CropLand cityLand = null;
+        if(vo.getId() != null) {
+            cityLand = cityLandService.findOne(vo.getId());
+        }else{
+            cityLand = cityLandService.findByPoint(vo.getPoint());
+        }
+        if(cityLand == null){
+            return R.fail();
+        }
+        cityLand.setGeojson(GeoCastUtil.gjson.toString(cityLand.getGeom()));
+        List<CropImage> cropImageList = cropImageService.findByCropId(cityLand.getId());
+        for(CropImage cropImage : cropImageList){
+            ImageType imageType = CropImage.getImageType(cropImage.getType().intValue());
+            switch (imageType){
+                case fay:
+                    cityLand.setFay(cropImage);
+                    break;
+                case center:
+                    cityLand.setCenter(cropImage);
+                    break;
+                case near:
+                    cityLand.setNear(cropImage);
+                    break;
+            }
+        }
+        return R.succ(cityLand);
+    }
+
+    @RequestMapping("/data")
+    public BaseResult data(@RequestBody String data) throws FactoryException, TransformException {
+        CropVo vo = JSON.parseObject(data, CropVo.class);
+        List<CropLand> cityLandList = null;
+        cityLandList = cityLandService.findByExecutor(testId);
+        List<CropImage> cropImages = cropImageService.findByCropIds(cityLandList.stream().map(CropLand::getId).collect(Collectors.toList()));
+        setImages(cityLandList, cropImages);
+        cityLandList.stream().forEach(cityLand -> {
+            cityLand.setGeojson(GeoCastUtil.gjson.toString(cityLand.getGeom()));
+        });
+        return R.succ(cityLandList);
+    }
+
+    @RequestMapping("/updateStatus")
+    public BaseResult updateStatus(@RequestBody String data){
+        CropVo vo = JSON.parseObject(data, CropVo.class);
+        cityLandService.updateStatus(vo.getId(),vo.getStatus());
+        return R.succ();
+    }
+
+    @PostMapping("/uploadData")
+    public BaseResult uploadData(@RequestBody String json){
+        CropVo vo = JSON.parseObject(json, CropVo.class);
+        CropLand bean = cityLandService.findOne(vo.getId());
+        BeanUtils.copyProperties(vo, bean, CopyUtils.nullNames(vo));
+        bean.setExecutor(testId);
+        cityLandService.saveCropAndImages(bean);
+        return R.succ();
+    }
+
+
+
+    /**
+     * 把文件转化为base64.
+     *
+     * @param filePath 源文件路径
+     * @return String 转化后的base64
+     */
+    public static String encryptToBase64(String filePath) {
+        if (!StringUtils.isNullOrEmpty(filePath)) {
+            try {
+                byte[] bytes = Files.readAllBytes(Paths.get(filePath));
+                return Base64.encodeBase64String(bytes);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return null;
+    }
+
+
+    private void setImages(List<CropLand> cropClassList, List<CropImage> cropImageList){
+        int i = 0;
+        for(CropLand cropLand : cropClassList){
+            while (i < cropImageList.size()){
+                CropImage cropImageItem = cropImageList.get(i);
+                if(cropImageItem.getCropId() > cropLand.getId()){
+                    break;
+                }
+                if(cropImageItem.getCropId().equals(cropLand.getId())){
+                    ImageType imageType = CropImage.getImageType(cropImageItem.getType().intValue());
+                    switch (imageType){
+                        case fay:
+                            cropLand.setFay(cropImageItem);
+                            break;
+                        case center:
+                            cropLand.setCenter(cropImageItem);
+                            break;
+                        case near:
+                            cropLand.setNear(cropImageItem);
+                            break;
+                    }
+                }
+                i++;
+            }
+        }
+    }
+
+
+}

+ 0 - 103
src/main/java/com/sysu/admin/api/crop/CropController.java

@@ -1,103 +0,0 @@
-package com.sysu.admin.api.crop;
-
-import com.alibaba.fastjson.JSON;
-import com.google.common.collect.Lists;
-import com.sysu.admin.controller.crop.CropLand;
-import com.sysu.admin.controller.crop.CropLandService;
-import com.sysu.admin.controller.crop.images.CropImage;
-import com.sysu.admin.controller.crop.images.CropImageService;
-import com.sysu.admin.support.base.BaseComponent;
-import com.sysu.admin.support.shiro.ShiroService;
-import com.sysu.admin.support.system.config.ConfigContext;
-import com.sysu.admin.support.system.config.SConfigService;
-import com.sysu.admin.utils.TextUtil;
-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.utils.CopyUtils;
-import org.opengis.referencing.FactoryException;
-import org.opengis.referencing.operation.TransformException;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-@RequestMapping("/api/crop")
-@RestController
-public class CropController extends BaseComponent {
-    @Autowired
-    CropLandService cityLandService;
-    @Autowired
-    SConfigService mSConfigService;
-    @Autowired
-    ShiroService mShiroService;
-    @Autowired
-    ConfigContext configContext;
-    @Autowired
-    CropImageService cropImageService;
-
-    @RequestMapping("/list")
-    public BaseResult list(@RequestBody String data) throws FactoryException, TransformException {
-        CropVo vo = JSON.parseObject(data, CropVo.class);
-        List<CropLand> cityLandList = cityLandService.findByBuffer(vo.getPoint(),vo.getMeter());
-        cityLandList.stream().forEach(cityLand -> {
-            cityLand.setGeojson(GeoCastUtil.gjson.toString(cityLand.getGeom()));
-        });
-        return R.succ(cityLandList);
-    }
-
-    @RequestMapping("/updateStatus")
-    public BaseResult updateStatus(@RequestBody String data){
-        CropVo vo = JSON.parseObject(data, CropVo.class);
-        cityLandService.updateStatus(vo.getId(),vo.getStatus());
-        return R.succ();
-    }
-
-    @PostMapping("/uploadData")
-    public BaseResult uploadData(@RequestParam("fay") MultipartFile fay,
-                                 @RequestParam("center") MultipartFile center,
-                                 @RequestParam("near") MultipartFile near,
-                                 String json){
-        CropVo vo = JSON.parseObject(json, CropVo.class);
-        validate(vo);
-        CropLand bean = cityLandService.findOne(vo.getId());
-        BeanUtils.copyProperties(vo, bean, CopyUtils.nullNames(vo));
-        CropImage fayImage = vo.getFay();
-        fayImage.setType(0);
-        CropImage centerImage = vo.getCenter();
-        centerImage.setType(1);
-        CropImage nearImage = vo.getNear();
-        nearImage.setType(2);
-        fayImage.setFilename(saveFile(fay, "fay","test"));
-        centerImage.setFilename(saveFile(center, "center","test"));
-        nearImage.setFilename(saveFile(near, "near","test"));
-        cityLandService.saveCropAndImages(bean, new CropImage[]{fayImage, centerImage, nearImage});
-        return R.succ();
-    }
-
-    public String saveFile(MultipartFile file, String sign, String username){
-        if(file != null){
-            String imageDirPath = configContext.getImageDirPath();
-            String hz = TextUtil.rightSubstring(".",file.getOriginalFilename());
-            String newFileName = System.currentTimeMillis() + "_" + username+"_"+sign+"." + hz;
-            try {
-                //复制到零时文件
-                File target = new File(imageDirPath + newFileName);
-                file.transferTo(target);
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-            return newFileName;
-        }
-        return "";
-    }
-
-
-
-}

+ 3 - 0
src/main/java/com/sysu/admin/api/crop/CropVo.java

@@ -6,6 +6,7 @@ import lombok.experimental.FieldNameConstants;
 
 import javax.persistence.Column;
 import javax.validation.constraints.NotNull;
+import java.util.Date;
 
 @Data
 @FieldNameConstants(innerTypeName = "FIELDS")
@@ -30,6 +31,8 @@ public class CropVo {
     private Double pickLongitude;
     @NotNull(message = "采集纬度为空!")
     private Double pickLatitude;
+    @NotNull(message = "采集时间为空!")
+    private Date pickDate;
     private String desc;
 
 }

+ 97 - 0
src/main/java/com/sysu/admin/api/interceptor/WebLogAspect.java

@@ -0,0 +1,97 @@
+package com.sysu.admin.api.interceptor;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.AfterReturning;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestAttributes;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * 用于记录web请求/响应日志
+ */
+@Component
+@Aspect
+@Slf4j
+public class WebLogAspect {
+
+    public WebLogAspect(){
+        log.info("WebLogAspect started! ");
+    }
+    /**
+     * 切面, xxx.xxx.xxx.web.ctl是Controller包名
+     */
+    @Pointcut("execution(* com.sysu.admin.api.*.controller..*.*(..))")
+    private void parameterPointCut() {}
+
+
+    public static boolean startLog = true;
+
+    /**
+     * 方法执行前,记录请求
+     * @param joinPoint
+     */
+    @Before("parameterPointCut()")
+    public void requestLog(JoinPoint joinPoint){
+        if(startLog) {
+            RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();//这个RequestContextHolder是Springmvc提供来获得请求的东西
+            HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
+            String queryStr = request.getQueryString();
+            if (StringUtils.isNotEmpty(queryStr)) {
+                log.warn("请求地址: [{}] {}", request.getMethod(), request.getRequestURI());
+            } else {
+                log.warn("请求地址: [{}] {}?{} ", request.getMethod(), request.getRequestURI(), queryStr);
+            }
+            printRequestArgs(joinPoint);
+        }
+    }
+
+    private void printRequestArgs(JoinPoint joinPoint){
+        log.warn("请求方法: {}", joinPoint.toString());
+        Object[] reqArgs = joinPoint.getArgs();
+        if(null == reqArgs){
+            return;
+        }
+        int c = 0;
+        ObjectMapper mapper = new ObjectMapper();
+        for(Object arg: reqArgs){
+            if(arg instanceof ServletRequest){
+                continue;
+            }
+            try{
+                log.warn("请求入参[{}]: {}", c, mapper.writeValueAsString(arg));
+            }catch (Exception ex){
+                log.error("请求入参转换异常", ex);
+            }
+            c++;
+        }
+    }
+
+    /**
+     * 方法执行后,记录响应
+     * @param joinPoint
+     * @param ret 方法执行结果注入对象
+     * @return
+     */
+    @AfterReturning(returning = "ret",pointcut = "parameterPointCut()")
+    public Object responeLog(JoinPoint joinPoint, Object ret){
+        if(startLog) {
+            try {
+                ObjectMapper mapper = new ObjectMapper();
+                log.warn("响应出参: {}", mapper.writeValueAsString(ret));
+            } catch (Throwable ex) {
+                log.error("响应异常", ex);
+            }
+        }
+        return ret;
+    }
+}

+ 37 - 0
src/main/java/com/sysu/admin/controller/city/City.java

@@ -0,0 +1,37 @@
+package com.sysu.admin.controller.city;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import lombok.experimental.FieldNameConstants;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+import org.locationtech.jts.geom.MultiPolygon;
+
+import javax.persistence.*;
+
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@FieldNameConstants(innerTypeName = "FIELDS")
+@Table(name = "p_city")
+@Entity
+@DynamicInsert
+@DynamicUpdate
+public class City{
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    @JSONField(serialize = false)
+    @Column(columnDefinition = "geom")
+    private MultiPolygon geom;
+
+    @Column()
+    private String name;
+
+    @Column()
+    private Integer code;
+
+}

+ 67 - 0
src/main/java/com/sysu/admin/controller/city/CityController.java

@@ -0,0 +1,67 @@
+package com.sysu.admin.controller.city;
+
+import com.sysu.admin.controller.geo.qyz.QyzService;
+import com.sysu.admin.support.system.region.Region;
+import com.sysu.admin.support.system.region.RegionRepository;
+import com.sysu.admin.utils.shape.GeoCastUtil;
+import com.xiesx.fastboot.base.result.BaseResult;
+import com.xiesx.fastboot.base.result.R;
+import org.locationtech.jts.geom.Geometry;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 镇区域
+ */
+@RequestMapping("/city")
+@Controller
+public class CityController {
+
+    @Autowired
+    ProvinceRepository provinceRepository;
+    @Autowired
+    CityRepository cityRepository;
+    @Autowired
+    DistrictRepository districtRepository;
+
+    /**
+     * 种植结构
+     * @return
+     */
+    @RequestMapping(value = "/zzjg")
+    public String zzjg(Model model){
+        model.addAttribute("pac","441821");
+        return "page/zzjg";
+    }
+
+    @RequestMapping(value = "/findJson")
+    @ResponseBody
+    public BaseResult findJson(int code, int level){
+        Geometry geometry = null;
+        switch (level){
+            case 0:
+                Province province = provinceRepository.findByCode(code);
+                geometry = province == null ? null : province.getGeom();
+                break;
+            case 1:
+                City city = cityRepository.findByCode(code);
+                geometry = city == null ? null : city.getGeom();
+                break;
+            case 2:
+                District district = districtRepository.findByCode(code);
+                geometry = district == null ? null : district.getGeom();
+                break;
+        }
+        return R.succ("",GeoCastUtil.geomToWkt(geometry));
+    }
+
+
+
+
+}

+ 7 - 0
src/main/java/com/sysu/admin/controller/city/CityRepository.java

@@ -0,0 +1,7 @@
+package com.sysu.admin.controller.city;
+
+import com.xiesx.fastboot.core.jpa.JpaPlusRepository;
+
+public interface CityRepository extends JpaPlusRepository<City, Integer> {
+    City findByCode(int code);
+}

+ 37 - 0
src/main/java/com/sysu/admin/controller/city/District.java

@@ -0,0 +1,37 @@
+package com.sysu.admin.controller.city;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import lombok.experimental.FieldNameConstants;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+import org.locationtech.jts.geom.MultiPolygon;
+
+import javax.persistence.*;
+
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@FieldNameConstants(innerTypeName = "FIELDS")
+@Table(name = "p_district")
+@Entity
+@DynamicInsert
+@DynamicUpdate
+public class District{
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    @JSONField(serialize = false)
+    @Column(columnDefinition = "geom")
+    private MultiPolygon geom;
+
+    @Column()
+    private String name;
+
+    @Column()
+    private Integer code;
+
+}

+ 9 - 0
src/main/java/com/sysu/admin/controller/city/DistrictRepository.java

@@ -0,0 +1,9 @@
+package com.sysu.admin.controller.city;
+
+import com.xiesx.fastboot.core.jpa.JpaPlusRepository;
+
+public interface DistrictRepository extends JpaPlusRepository<District, Integer> {
+
+    District findByCode(int code);
+
+}

+ 40 - 0
src/main/java/com/sysu/admin/controller/city/Province.java

@@ -0,0 +1,40 @@
+package com.sysu.admin.controller.city;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import lombok.experimental.FieldNameConstants;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+import org.locationtech.jts.geom.MultiPolygon;
+
+import javax.persistence.*;
+
+/**
+ * 省
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@FieldNameConstants(innerTypeName = "FIELDS")
+@Table(name = "p_province")
+@Entity
+@DynamicInsert
+@DynamicUpdate
+public class Province{
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    @JSONField(serialize = false)
+    @Column(columnDefinition = "geom")
+    private MultiPolygon geom;
+
+    @Column()
+    private String name;
+
+    @Column()
+    private Integer code;
+
+}

+ 8 - 0
src/main/java/com/sysu/admin/controller/city/ProvinceRepository.java

@@ -0,0 +1,8 @@
+package com.sysu.admin.controller.city;
+
+import com.xiesx.fastboot.core.jpa.JpaPlusRepository;
+
+
+public interface ProvinceRepository extends JpaPlusRepository<Province, Integer> {
+    Province findByCode(Integer code);
+}

+ 2 - 0
src/main/java/com/sysu/admin/controller/crop/CropLand.java

@@ -9,6 +9,8 @@ import lombok.experimental.FieldNameConstants;
 import org.hibernate.annotations.DynamicInsert;
 import org.hibernate.annotations.DynamicUpdate;
 import org.locationtech.jts.geom.MultiPolygon;
+import org.locationtech.jts.geom.Point;
+
 import javax.persistence.*;
 import java.util.Date;
 

+ 10 - 2
src/main/java/com/sysu/admin/controller/crop/CropLandController.java

@@ -6,6 +6,7 @@ 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.geo.land.LandTaskStatus;
+import com.sysu.admin.support.base.BaseVo;
 import com.sysu.admin.support.shiro.ShiroService;
 import com.sysu.admin.utils.shape.GeoCastUtil;
 import com.xiesx.fastboot.base.result.BaseResult;
@@ -33,12 +34,12 @@ public class CropLandController {
 
     @RequestMapping("/getInfo")
     public BaseResult getInfo(Double x, Double y){
-        CropLand cityLand = cityLandService.findByPoint(x,y);
+        CropLand cityLand = cityLandService.findByPoint(new Double[]{x,y});
         if(cityLand == null){
             return R.fail();
         }
         cityLand.setWkt(GeoCastUtil.geomToWkt(cityLand.getGeom()));
-//        cityLand.setWkt(cityLandService.getBuffer(new Double[]{x,y}, 1000));
+//        cityLand.setWkt(cityLandService.getBuffer(new Double[]{x, y}, 10));
         return R.succ(cityLand);
     }
 
@@ -53,9 +54,16 @@ public class CropLandController {
         BeanUtils.copyProperties(vo, bean, CopyUtils.nullNames(vo));
         bean.setWkt(GeoCastUtil.geomToWkt(bean.getGeom()));
         cityLandService.save(bean);
+        cityLandService.updateCenterPoint(bean.getId());
         return R.succ(bean);
     }
 
+    @RequestMapping("/batchPublish")
+    @ResponseBody
+    public BaseResult batchPublish(CropLandVo vo){
+        return R.succ();
+    }
+
     @RequestMapping("/addTest")
     @ResponseBody
     public BaseResult addTest(String wkt){

+ 3 - 9
src/main/java/com/sysu/admin/controller/crop/CropLandRepository.java

@@ -12,15 +12,9 @@ public interface CropLandRepository extends JpaPlusRepository<CropLand, Long> {
 
     @Query(value = "SELECT * FROM \"p_crop\" where St_within(st_geomfromtext(?1), geom) limit 1", nativeQuery = true)
     CropLand findByPoint(String pointWKT);
-
-
-    @Query(value = "SELECT * from \"p_crop\" where St_Intersects(geom," +
-            " ST_Buffer(st_geomfromtext(?1),?2, 'quad_segs=8')" +
-            ");",nativeQuery = true)
-    List<CropLand> findByBuffer(String pointWKT, Double degree);
-
-    @Query(value = "select ST_AsText(ST_Buffer(st_geomfromtext(?1),?2, 'quad_segs=8'))", nativeQuery = true)
-    String getBuffer(String pointWKT, Double degree);
+    @Query(value = "update p_crop set center_point = st_centroid(geom) where id = ?1",nativeQuery = true)
+    @Modifying
+    int updateCenterPoint(Long id);
 
 
 }

+ 77 - 9
src/main/java/com/sysu/admin/controller/crop/CropLandService.java

@@ -1,14 +1,24 @@
 package com.sysu.admin.controller.crop;
 
+import com.mysql.jdbc.StringUtils;
 import com.sysu.admin.controller.crop.images.CropImage;
 import com.sysu.admin.controller.crop.images.CropImageService;
+import com.sysu.admin.controller.crop.images.ImageType;
 import com.sysu.admin.controller.geo.land.LandTaskStatus;
 import com.sysu.admin.support.base.BaseService;
+import com.sysu.admin.support.system.config.ConfigContext;
+import com.sysu.admin.utils.file.FileUtil;
 import com.xiesx.fastboot.core.jpa.JpaPlusRepository;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.transaction.Transactional;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
 import java.util.Date;
 import java.util.List;
 
@@ -17,20 +27,27 @@ public class CropLandService extends BaseService<CropLand, Long> {
 
     @Autowired
     CropImageService cropImageService;
+    @Autowired
+    ConfigContext configContext;
 
-    public List<CropLand> findByBuffer(Double[] point, Integer meter){
+    public List<CropPoint> findByBuffer(Double[] point, Integer meter){
         double degree = meter / (2 * Math.PI * 6371004) * 360;
-        return mCropLandRepository.findByBuffer("Point("+point[0]+" "+point[1]+")",degree);
+        return mCropPointRepository.findByBuffer("Point("+point[0]+" "+point[1]+")",degree);
+    }
+
+    public List<CropLand> findByExecutor(Long executor){
+        QCropLand qCropLand = QCropLand.cropLand;
+        return mCropLandRepository.findAll(qCropLand.executor.eq(executor));
     }
 
-    public CropLand findByPoint(double x, double y){
-        CropLand cityLand = mCropLandRepository.findByPoint("Point("+x+" "+y+")");
+    public CropLand findByPoint(Double[] point){
+        CropLand cityLand = mCropLandRepository.findByPoint("Point("+point[0]+" "+point[1]+")");
         return cityLand;
     }
 
     public String getBuffer(Double[] point, Integer meter){
         double degree = meter / (2 * Math.PI * 6371004) * 360;
-        return mCropLandRepository.getBuffer("Point("+point[0]+" "+point[1]+")", degree);
+        return mCropPointRepository.getBuffer("Point("+point[0]+" "+point[1]+")", degree);
     }
 
     @Transactional
@@ -44,16 +61,67 @@ public class CropLandService extends BaseService<CropLand, Long> {
     }
 
     @Transactional
-    public void saveCropAndImages(CropLand bean, CropImage[] cropImages){
-        for(CropImage cropImage: cropImages){
-            cropImage.setCropId(bean.getId());
-            cropImageService.save(cropImage);
+    public int updateCenterPoint(Long id){
+        return  mCropLandRepository.updateCenterPoint(id);
+    }
+
+    @Transactional
+    public void saveCropAndImages(CropLand bean){
+        CropImage fay = bean.getFay();
+        CropImage center = bean.getCenter();
+        CropImage near = bean.getNear();
+        if(ObjectUtils.isNotEmpty(fay)) {
+            cropImageService.deleteAll(cropImageService.findByCropIdAndType(bean.getId(), ImageType.fay));
+            fay.setType(ImageType.fay.ordinal());
+            fay.setFilename(decryptByBase64(fay.getBase64(), "fay","test"));
+            fay.setCropId(bean.getId());
+            cropImageService.save(fay);
+        }
+        if(ObjectUtils.isNotEmpty(center)) {
+            cropImageService.deleteAll(cropImageService.findByCropIdAndType(bean.getId(), ImageType.center));
+            center.setType(ImageType.center.ordinal());
+            center.setFilename(decryptByBase64(center.getBase64(), "center","test"));
+            center.setCropId(bean.getId());
+            cropImageService.save(center);
+        }
+        if(ObjectUtils.isNotEmpty(near)) {
+            cropImageService.deleteAll(cropImageService.findByCropIdAndType(bean.getId(), ImageType.near));
+            near.setType(ImageType.near.ordinal());
+            near.setFilename(decryptByBase64(center.getBase64(), "near","test"));
+            near.setCropId(bean.getId());
+            cropImageService.save(near);
         }
         mCropLandRepository.save(bean);
     }
 
+    /**
+     * 把base64转化为文件.
+     *
+     * @param base64   base64
+     * @return boolean isTrue
+     */
+    public String decryptByBase64(String base64, String sign, String username) {
+        if (StringUtils.isNullOrEmpty(base64)) {
+            return null;
+        }
+        int index = base64.indexOf(",");
+        if(index > -1){
+            base64 = base64.substring(index + 1);
+        }
+        String imageDirPath = configContext.getImageDirPath();
+        String newFileName = System.currentTimeMillis() + "_" + username+"_"+sign+".jpg";
+        try {
+            Files.write(Paths.get(imageDirPath+ newFileName),
+                    Base64.decodeBase64(base64), StandardOpenOption.CREATE);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return newFileName;
+    }
+
     @Override
     public JpaPlusRepository<CropLand, Long> r() {
         return mCropLandRepository;
     }
+
 }

+ 7 - 1
src/main/java/com/sysu/admin/controller/crop/CropLandVo.java

@@ -1,6 +1,7 @@
 package com.sysu.admin.controller.crop;
 
 import com.alibaba.fastjson.annotation.JSONField;
+import com.sysu.admin.support.base.BaseVo;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
@@ -16,7 +17,7 @@ import java.util.Date;
 
 @Data
 @Accessors(chain = true)
-public class CropLandVo {
+public class CropLandVo{
     /**
      * 主键
      */
@@ -57,6 +58,11 @@ public class CropLandVo {
      * 状态
      */
     private Integer status;
+    private Integer provinceId;
+    private Integer cityId;
+    private Integer districtId;
+
+
 
 
 }

+ 52 - 0
src/main/java/com/sysu/admin/controller/crop/CropPoint.java

@@ -0,0 +1,52 @@
+package com.sysu.admin.controller.crop;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.sysu.admin.controller.crop.images.CropImage;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import lombok.experimental.FieldNameConstants;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+import org.locationtech.jts.geom.MultiPolygon;
+import org.locationtech.jts.geom.Point;
+
+import javax.persistence.*;
+import java.util.Date;
+
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@FieldNameConstants(innerTypeName = "FIELDS")
+@Table(name = "p_crop")
+@Entity
+@DynamicInsert
+@DynamicUpdate
+public class CropPoint {
+    /**
+     * 主键
+     */
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+//    @JSONField(serialize = false)
+//    @Column(columnDefinition = "center_point")
+//    private Point centerPoint;
+
+    @Column
+    private String geojson;
+    /**
+     * 耕地类型
+     */
+    @Column
+    private Integer cropType;
+
+    /**
+     * 状态
+     */
+    @Column
+    private Integer status;
+
+
+}

+ 21 - 0
src/main/java/com/sysu/admin/controller/crop/CropPointRepository.java

@@ -0,0 +1,21 @@
+package com.sysu.admin.controller.crop;
+
+import com.xiesx.fastboot.core.jpa.JpaPlusRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.List;
+
+
+public interface CropPointRepository extends JpaPlusRepository<CropPoint, Long> {
+
+
+    @Query(value = "SELECT id,crop_type,st_asgeojson(center_point) as geojson,status from \"p_crop\" where St_within(center_point," +
+            " ST_Buffer(st_geomfromtext(?1),?2, 'quad_segs=8')" +
+            ");",nativeQuery = true)
+    List<CropPoint> findByBuffer(String pointWKT, Double degree);
+
+    @Query(value = "select ST_AsText(ST_Buffer(st_geomfromtext(?1),?2, 'quad_segs=8'))", nativeQuery = true)
+    String getBuffer(String pointWKT, Double degree);
+
+
+}

+ 23 - 0
src/main/java/com/sysu/admin/controller/crop/images/CropImage.java

@@ -1,6 +1,8 @@
 package com.sysu.admin.controller.crop.images;
 
 
+import com.alibaba.fastjson.annotation.JSONField;
+import com.sysu.admin.support.system.config.ConfigContext;
 import com.xiesx.fastboot.core.jpa.entity.JpaPlusEntity;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -12,6 +14,7 @@ import org.springframework.data.annotation.CreatedDate;
 import org.springframework.data.jpa.domain.support.AuditingEntityListener;
 
 import javax.persistence.*;
+import java.util.Base64;
 import java.util.Date;
 
 /**
@@ -76,4 +79,24 @@ public class CropImage extends JpaPlusEntity<CropImage> {
 
     @Column
     private String gamma;
+
+    public String getUrl(){
+        return ConfigContext.imageBase + this.filename;
+    }
+
+    @Transient
+    private String base64;
+
+    @JSONField(serialize = false)
+    public static ImageType getImageType(int val){
+        switch (val){
+            case 0:
+                return ImageType.fay;
+            case 1:
+                return ImageType.center;
+            case 2:
+                return ImageType.near;
+        }
+        return null;
+    }
 }

+ 22 - 0
src/main/java/com/sysu/admin/controller/crop/images/CropImageService.java

@@ -1,13 +1,35 @@
 package com.sysu.admin.controller.crop.images;
 
 
+import com.querydsl.core.types.Predicate;
 import com.sysu.admin.support.base.BaseService;
 import com.xiesx.fastboot.core.jpa.JpaPlusRepository;
+import org.springframework.data.domain.Sort;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 @Service
 public class CropImageService extends BaseService<CropImage, Long> {
 
+    public List<CropImage> findByCropIds(List<Long> cropIds){
+        QCropImage cropImage = QCropImage.cropImage;
+        return mCropImageRepository.findAll(cropImage.cropId.in(cropIds), Sort.by(CropImage.FIELDS.cropId));
+    }
+
+    public List<CropImage> findByCropId(Long cropId){
+        QCropImage cropImage = QCropImage.cropImage;
+        Predicate predicate = cropImage.cropId.eq(cropId);
+        return mCropImageRepository.findAll(predicate);
+    }
+
+    public List<CropImage> findByCropIdAndType(Long cropId, ImageType imageType){
+        QCropImage cropImage = QCropImage.cropImage;
+        Predicate predicate = cropImage.cropId.eq(cropId).and(cropImage.type.eq(imageType.ordinal()));
+        return mCropImageRepository.findAll(predicate);
+    }
+
+
 
     @Override
     public JpaPlusRepository<CropImage, Long> r() {

+ 5 - 0
src/main/java/com/sysu/admin/controller/crop/images/ImageType.java

@@ -0,0 +1,5 @@
+package com.sysu.admin.controller.crop.images;
+
+public enum ImageType {
+    fay,center,near
+}

+ 2 - 2
src/main/java/com/sysu/admin/controller/geo/qyz/Qyz.java

@@ -25,8 +25,8 @@ public class Qyz {
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Integer gid;
 
-    @Column(name = "code")
-    private Integer code;
+    @Column(name = "pac")
+    private Integer pac;
 
     @Column(name = "name")
     private String name;

+ 30 - 24
src/main/java/com/sysu/admin/controller/geo/qyz/QyzController.java

@@ -1,19 +1,14 @@
 package com.sysu.admin.controller.geo.qyz;
 
-import com.sysu.admin.utils.shape.postgis.PostGisUtil;
+import com.sysu.admin.support.system.region.Region;
+import com.sysu.admin.support.system.region.RegionRepository;
 import com.xiesx.fastboot.base.result.BaseResult;
 import com.xiesx.fastboot.base.result.R;
-import org.geotools.geometry.jts.WKTWriter2;
-import org.locationtech.jts.geom.Geometry;
-import org.opengis.feature.simple.SimpleFeature;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
-
-import java.io.IOException;
-import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -25,6 +20,8 @@ import java.util.List;
 public class QyzController {
     @Autowired
     QyzService qyzService;
+    @Autowired
+    RegionRepository regionRepository;
 
     /**
      * 种植结构
@@ -39,24 +36,33 @@ public class QyzController {
     @RequestMapping(value = "/findJson")
     @ResponseBody
     public BaseResult findJson(String code){
-        PostGisUtil postGisUtil = new PostGisUtil();
-        postGisUtil.connPostGis();
-        postGisUtil.openConnection();
-        List<SimpleFeature> cropFeatureList = null;
-        try {
-            cropFeatureList = postGisUtil.queryMethod("pac like '"+code+"%'", null, "qy-z", false);
-        } catch (SQLException | IOException throwables) {
-            throwables.printStackTrace();
-        } finally {
-            postGisUtil.closeConnection();
-            postGisUtil.dispose();
+        return R.succ();
+    }
+
+    /**
+     * @return
+     */
+    public BaseResult generateCity(){
+        List<Region> cityList = new ArrayList<>();
+        cityList.add(regionRepository.findByCode(441800));
+        for(Region region : cityList){
+
         }
-        WKTWriter2 writer2 = new WKTWriter2();
-        List<String> wktList = new ArrayList<>();
-        cropFeatureList.stream().forEach(simpleFeature -> {
-            wktList.add(writer2.write((Geometry)simpleFeature.getDefaultGeometry()));
-        });
-        return R.succ(wktList);
+        return R.succ();
     }
 
+    public static int clearEndZero(int num){
+        while(num % 10 == 0 && num != 0){
+            num = num / 10;
+        }
+        return num;
+    }
+
+    public static void main(String[] args) {
+        System.out.println(clearEndZero(0));
+    }
+
+
+
+
 }

+ 4 - 2
src/main/java/com/sysu/admin/support/base/BaseVo.java

@@ -28,8 +28,10 @@ public class BaseVo {
 
     /** 排序 **/
     private Integer sort;
-    /** 省市区 **/
-    private String region;
+
+    private Integer provinceId;
+    private Integer cityId;
+    private Integer districtId;
 
     private Long organId;
 

+ 3 - 0
src/main/java/com/sysu/admin/support/base/RepositoryContext.java

@@ -2,6 +2,7 @@ package com.sysu.admin.support.base;
 
 
 import com.sysu.admin.controller.crop.CropLandRepository;
+import com.sysu.admin.controller.crop.CropPointRepository;
 import com.sysu.admin.controller.crop.images.CropImageRepository;
 import com.sysu.admin.controller.geo.qyz.QyzRepository;
 import com.sysu.admin.support.system.user_role.UserRoleRepository;
@@ -38,6 +39,8 @@ public class RepositoryContext extends BaseComponent{
     @Autowired
     public CropLandRepository mCropLandRepository;
     @Autowired
+    public CropPointRepository mCropPointRepository;
+    @Autowired
     public CropImageRepository mCropImageRepository;
 
 }

+ 9 - 0
src/main/java/com/sysu/admin/support/system/config/ConfigContext.java

@@ -8,6 +8,15 @@ import org.springframework.stereotype.Component;
 public class ConfigContext {
 
     private String imageDirPath;
+    public static String imageBase;
+
+    public String getImageBase() {
+        return imageBase;
+    }
+
+    public void setImageBase(String imageBase) {
+        this.imageBase = imageBase;
+    }
 
     public String getImageDirPath() {
         return imageDirPath;

+ 1 - 1
src/main/java/com/sysu/admin/support/system/region/Region.java

@@ -35,7 +35,7 @@ public class Region extends JpaPlusEntity<Region> {
      */
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
+    private Integer id;
 
     /**
      * 代码

+ 4 - 4
src/main/java/com/sysu/admin/support/system/region/RegionRepository.java

@@ -5,12 +5,12 @@ import org.springframework.data.jpa.repository.Query;
 
 import java.util.List;
 
-public interface RegionRepository extends JpaPlusRepository<Region, Long> {
+public interface RegionRepository extends JpaPlusRepository<Region, Integer> {
 
-    Region findByCode(Long code);
+    Region findByCode(Integer code);
 
-    Region findByNameShortAndParent(String nameShort, Long parentCode);
+    Region findByNameShortAndParent(String nameShort, Integer parentCode);
 
     @Query(value = "SELECT * FROM (SELECT * FROM sys_region a WHERE a.`parent` = ?2) b WHERE b.code IN (?1)", nativeQuery = true)
-    List<Region> findByCodeIsInParent(Long child, Long parent);
+    List<Region> findByCodeIsInParent(Integer child, Integer parent);
 }

+ 17 - 0
src/main/java/com/sysu/admin/utils/NumberUtil.java

@@ -0,0 +1,17 @@
+package com.sysu.admin.utils;
+
+public class NumberUtil {
+
+    /**
+     * 清理整数后的零
+     * @param num
+     * @return
+     */
+    public static int clearEndZero(int num){
+        while(num % 10 == 0 && num != 0){
+            num = num / 10;
+        }
+        return num;
+    }
+
+}

+ 1 - 0
src/main/resources/application-adm.yml

@@ -58,6 +58,7 @@ spring:
     show-sql: false
 config:
   image-dir-path: /www/wwwroot/emap.sysuimars.com/images/
+  image-base: https://emap.sysuimars.com/images/
 postgis:
   url: localhost
   port: 39543

+ 1 - 0
src/main/resources/application-dev.yml

@@ -19,6 +19,7 @@ spring:
 
 config:
   image-dir-path: E:/zcjy/workspace3/sysu_emap/src/main/webapp/images/
+  image-base: http://127.0.0.1/images/
 postgis:
   url: 101.35.200.5
   port: 39543

+ 3 - 3
src/main/webapp/WEB-INF/jsp/comm/admin2.jsp

@@ -29,7 +29,7 @@
     <fb:script src="${base}/static/package/geo_server_context.js"></fb:script>
     <fb:script src="${base}/static/package/plough_land.js"></fb:script>
     <fb:script src="${base}/static/package/zsjc.js"></fb:script>
-    <fb:script src="${base}/static/package/qyz.js"></fb:script>
+    <fb:script src="${base}/static/package/city.js"></fb:script>
     <fb:script src="${base}/static/package/cityland.js"></fb:script>
     <fb:script src="${base}/static/package/task_action.js"></fb:script>
     <fb:script src="${base}/static/package/style.js"></fb:script>
@@ -60,7 +60,7 @@
                 var target = "map"
 
                 view1 = new ol.View({
-                    center: [113.348406, 23.166332],
+                    center: [114.42386133133742,30.50481808578734],
                     projection: projection,
                     zoom: 14
                 })
@@ -163,7 +163,7 @@
                             geoServerContext.actions["3"].fit(item.code)
                         }
                     }});
-                geoServerContext.createAction("3", QyzAction).start();
+                geoServerContext.createAction("3", CityAction).start();
                 $("#gray-shade").hide()
             });
 

+ 5 - 10
src/main/webapp/WEB-INF/jsp/page/publish_task.jsp

@@ -12,9 +12,7 @@
                 var $ = layui.$, tool = layui.tool, form = layui.form, city= layui.city;
 
                 let currentPicker = new city("#city-picker", {
-                    getValListener: function(item){
-
-                    }});
+                    getValListener: function(item){}});
                 document.getElementById("file").onchange = function(){
                     var blob = document.getElementById("file").files[0];
                     console.log(blob)
@@ -37,9 +35,6 @@
                     defaultOption:'<option value="">请选择分类</option>'
                 })
 
-                document.getElementById("cropClassId").onchange = function(e){
-                    console.log(e)
-                }
                 form.on('select(cropClassId)', function (data) {
                     tool.loadSelect("${base}/crop_item/list",{
                         id:"cropItemId",
@@ -49,10 +44,10 @@
                         defaultOption:'<option value="">请选择作物</option>'
                     })
                 });
-
             });
             function publish(){
-                alert(123)
+                let data = $("#form1").serializeArray();
+                layui.tool.submit('${base}/organ/submit', data);
             }
         </script>
 
@@ -61,12 +56,12 @@
         <fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
             <legend>发布任务</legend>
         </fieldset>
-        <form class="layui-form" action="">
+        <form class="layui-form" id="form1" action="">
             <div class="layui-form-item">
                 <div class="layui-inline">
                     <label class="layui-form-label">地区</label>
                     <div class="layui-input-inline">
-                        <input  id="city-picker"   class="layui-input">
+                        <input  id="city-picker"    class="layui-input">
                     </div>
                 </div>
             </div>

ファイルの差分が大きいため隠しています
+ 3 - 2511
src/main/webapp/static/js/city-picker/city-picker.data.js


+ 33 - 14
src/main/webapp/static/package/qyz.js → src/main/webapp/static/package/city.js

@@ -1,14 +1,14 @@
-function QyzAction(context,id){
+function CityAction(context, id){
     this.context = context
     this.id = id
     this.selected = {}
     this.vectorLayer = null
-    this.obj = new Qyz({
+    this.obj = new City({
         url : context.local_wfs_path
     })
 }
 
-QyzAction.prototype = {
+CityAction.prototype = {
     clickLock:false,
     startStatus : false,
     createStatus : false,
@@ -38,25 +38,44 @@ QyzAction.prototype = {
         this.startStatus = false;
     },
     find(code, success){
+        let level;
+        let endZeroCount = this.endZeroCount(code)
+        switch (endZeroCount){
+            case 2:
+            case 3:
+                level = 1
+                break;
+            case 4:
+                level = 0
+                break;
+            default:
+                level = 2
+        }
+        if(level == 0)
+            return
         $.ajax({
             type : 'POST',
-            url : "/qyz/findJson",
-            data : {code: this.clearEndZero(code + "")},
+            url : "/city/findJson",
+            data : {level: level, code: code},
             dataType : 'json',
             success : success
         });
     },
     fit(code){
         let that = this
-        this.find(code, function(data){
-            let geometries = new Array()
-            for(let wktStr of data.data){
-                geometries.push(new ol.format.WKT().readGeometry(wktStr))
-            }
-            let geometryCollection = new ol.geom.GeometryCollection(geometries)
-            that.context.currentView.fit(geometryCollection.getExtent(),{duration: 1000})
+        this.find(code, function(res){
+            if(res.code == 0)
+                that.context.currentView.fit(new ol.format.WKT().readGeometry(res.data).getExtent(),{duration: 1000})
         })
     },
+    endZeroCount(code){
+        let count = 0;
+        while(code % 10 == 0 && code != 0){
+            code = code / 10;
+            count++;
+        }
+        return count;
+    },
     clearEndZero(code){
         return code.replace(/(0+)\b/gi,"")
     },
@@ -80,7 +99,7 @@ QyzAction.prototype = {
     }
 }
 
-function Qyz(opt){
+function City(opt){
     this.name = "Qyz"
     this.wmsData = {
         layers:"wuhan:qy-z",
@@ -94,7 +113,7 @@ function Qyz(opt){
     }
 }
 
-Qyz.prototype = {
+City.prototype = {
     getTileLayer(){
         let url = this.wmsData.url +
             "?service=WFS&version=1.0.0&request=GetFeature&typeName="+this.wmsData.layers+"&maxFeatures=1000&outputFormat=application/json"

+ 19 - 0
src/main/webapp/static/package/cityland.js

@@ -230,6 +230,25 @@ function CityLand(opt){
 
 CityLand.prototype = {
     getTileLayer(){
+        this.getWMS()
+    },getWMS(){
+        this.layerData.source = new ol.source.ImageWMS({
+            ratio: 1,
+            url: 'http://change.zylfsm.com/geoserver/wuhan/wms',
+            params: {'FORMAT': this.wmsData.params['FORMAT'],
+                'VERSION': '1.1.1',
+                "STYLES": '',
+                "LAYERS": 'wuhan:p_crop',
+                "exceptions": 'application/vnd.ogc.se_inimage',
+            }
+        })
+        this.layerData.layer = new ol.layer.Image({
+            source: this.layerData.source,
+            zIndex: 2,
+            minZoom: 7,
+            maxZoom: 30
+        });
+    },getWMTS(){
         var resolutions = [0.703125, 0.3515625, 0.17578125, 0.087890625, 0.0439453125, 0.02197265625, 0.010986328125, 0.0054931640625, 0.00274658203125, 0.001373291015625, 6.866455078125E-4, 3.4332275390625E-4, 1.71661376953125E-4, 8.58306884765625E-5, 4.291534423828125E-5, 2.1457672119140625E-5, 1.0728836059570312E-5, 5.364418029785156E-6, 2.682209014892578E-6, 1.341104507446289E-6, 6.705522537231445E-7, 3.3527612686157227E-7];
         var baseUrl = this.wmsData.url;
         var baseParams = ['VERSION','LAYER','STYLE','TILEMATRIX','TILEMATRIXSET','SERVICE','FORMAT'];

+ 7 - 0
src/test/java/com/sysu/admin/api/crop/CropControllerTest.java

@@ -0,0 +1,7 @@
+package com.sysu.admin.api.crop;
+
+import junit.framework.TestCase;
+
+public class CropControllerTest extends TestCase {
+
+}

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません