Administrator 2 tahun lalu
induk
melakukan
ea4f089c0c
20 mengubah file dengan 348 tambahan dan 245 penghapusan
  1. 35 54
      src/main/java/com/sysu/admin/api/crop/ApiCropController.java
  2. 1 62
      src/main/java/com/sysu/admin/controller/crop/CropLandController.java
  3. 1 12
      src/main/java/com/sysu/admin/controller/crop/CropLandRepository.java
  4. 21 20
      src/main/java/com/sysu/admin/controller/crop/CropLandService.java
  5. 1 1
      src/main/java/com/sysu/admin/controller/crop/CropPointRepository.java
  6. 30 0
      src/main/java/com/sysu/admin/controller/crop/executor_table/ExecutorTable.java
  7. 12 0
      src/main/java/com/sysu/admin/controller/crop/executor_table/ExecutorTableRepository.java
  8. 33 0
      src/main/java/com/sysu/admin/controller/crop/executor_table/ExecutorTableService.java
  9. 32 0
      src/main/java/com/sysu/admin/controller/crop/executor_table/PKRP.java
  10. 14 0
      src/main/java/com/sysu/admin/controller/crop/interceptor/DynamicTableNames.java
  11. 111 0
      src/main/java/com/sysu/admin/controller/crop/interceptor/DynamicTableNamesAspect.java
  12. 4 4
      src/main/java/com/sysu/admin/controller/crop/range/AutoTableNameInterceptor.java
  13. 4 4
      src/main/java/com/sysu/admin/controller/crop/range/LandRangeIndexRepository.java
  14. 8 7
      src/main/java/com/sysu/admin/controller/crop/range/LandRangeIndexService.java
  15. 0 9
      src/main/java/com/sysu/admin/support/interceptor/DynamicTableNames.java
  16. 0 56
      src/main/java/com/sysu/admin/support/interceptor/DynamicTableNamesAspect.java
  17. 1 1
      src/main/webapp/WEB-INF/jsp/comm/admin2.jsp
  18. 25 15
      src/main/webapp/static/package/cityland.js
  19. 6 0
      src/test/java/CropClassPeriodTest.java
  20. 9 0
      src/test/java/com/sysu/admin/controller/crop/CropLandServiceTest.java

+ 35 - 54
src/main/java/com/sysu/admin/api/crop/ApiCropController.java

@@ -1,15 +1,21 @@
 package com.sysu.admin.api.crop;
 
 import com.alibaba.fastjson.JSON;
-import com.mysql.jdbc.StringUtils;
+import com.querydsl.core.types.Projections;
+import com.querydsl.core.types.QBean;
+import com.querydsl.jpa.impl.JPAQuery;
 import com.sysu.admin.api.interceptor.LogAspect;
 import com.sysu.admin.api.valid.ApiReqValid;
 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.QCropLand;
 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.crop.range.LandRangeIndex;
+import com.sysu.admin.controller.crop.range.LandRangeIndexService;
+import com.sysu.admin.controller.crop.range.QLandRangeIndex;
 import com.sysu.admin.controller.geo.land.LandTaskStatus;
 import com.sysu.admin.support.base.BaseComponent;
 import com.sysu.admin.support.shiro.ShiroService;
@@ -21,6 +27,7 @@ import com.xiesx.fastboot.core.token.handle.CurrentToken;
 import com.xiesx.fastboot.utils.CopyUtils;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.opengis.referencing.FactoryException;
 import org.opengis.referencing.operation.TransformException;
 import org.springframework.beans.BeanUtils;
@@ -44,6 +51,31 @@ public class ApiCropController extends BaseComponent {
     ShiroService mShiroService;
     @Autowired
     CropImageService cropImageService;
+    @Autowired
+    LandRangeIndexService landRangeIndexService;
+
+    @RequestMapping("/table_names")
+    public BaseResult tableNames(@RequestBody(required = false) String data){
+        CropVo vo = JSON.parseObject(data, CropVo.class);
+        if(StringUtils.isNotBlank(data) && vo.getPoint() != null) {
+            String wkt = "'Point("+vo.getPoint()[0]+" "+vo.getPoint()[1]+")'";
+            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)";
+            List<LandRangeIndex> landRangeIndices = mEntityManager.createNativeQuery(sql,LandRangeIndex.class).getResultList();
+            if(landRangeIndices.size() == 0){
+                LandRangeIndex defaultIndex = new LandRangeIndex();
+                defaultIndex.setTableName("p_crop");
+                defaultIndex.setName("其他地区");
+                landRangeIndices.add(defaultIndex);
+            }
+            return R.succ(landRangeIndices);
+        }
+        QLandRangeIndex qLandRangeIndex = QLandRangeIndex.landRangeIndex;
+        QBean<LandRangeIndex> selectBean = Projections.fields(qLandRangeIndex, qLandRangeIndex.code, qLandRangeIndex.name, qLandRangeIndex.tableName);
+        JPAQuery<LandRangeIndex> jpaQuery = mJPAQueryFactory.select(selectBean)
+                .from(qLandRangeIndex);
+        return R.succ(jpaQuery.fetch());
+
+    }
 
     @RequestMapping("/point_list")
     public BaseResult pointList(@RequestBody String data, @RequestHeader(value = "token",required = false) String token) throws FactoryException, TransformException {
@@ -96,11 +128,8 @@ public class ApiCropController extends BaseComponent {
 
     @RequestMapping("/list")
     @LogAspect
-    public BaseResult list(@RequestBody String data, @RequestHeader("token") String token){
-        CropVo vo = JSON.parseObject(data, CropVo.class);
-        vo.setToken(token);
-        super.validate(vo, ApiReqValid.TokenCheckValid.class);
-        CurrentToken currentToken = CurrentToken.getCurrentToken(vo.getToken());
+    public BaseResult list(@RequestHeader("token") String token){
+        CurrentToken currentToken = CurrentToken.getCurrentToken(token);
         List<CropLand> cityLandList = cityLandService.findIdAndNameByExecutor(Long.valueOf(currentToken.getUserId()));
         return R.succ(cityLandList);
     }
@@ -131,52 +160,4 @@ public class ApiCropController extends BaseComponent {
     }
 
 
-
-    /**
-     * 把文件转化为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++;
-            }
-        }
-    }
-
-
 }

+ 1 - 62
src/main/java/com/sysu/admin/controller/crop/CropLandController.java

@@ -89,8 +89,7 @@ public class CropLandController extends ServiceContext {
         }
         BeanUtils.copyProperties(vo, bean, CopyUtils.nullNames(vo));
         bean.setWkt(GeoCastUtil.geomToWkt(bean.getGeom()));
-        bean.setCenterPoint(cityLandService.getCenterPoint(bean.getId()));
-        bean.getCenterPoint().setSRID(4326);
+        bean.setCenterPoint(cityLandService.getCenterPoint(bean.getGeom()));
         District district = districtRepository.findByPoint(bean.getCenterPoint());
         if(district != null){
             cityLandService.setCity(bean, district);
@@ -167,66 +166,6 @@ public class CropLandController extends ServiceContext {
         return R.succ();
     }
 
-    Executor executor = Executors.newFixedThreadPool(10);
-    int size = 0;
-
-    @RequestMapping("/saveTestAll")
-    @ResponseBody
-    public BaseResult saveTestAll(){
-        QCropLand qCropLand = QCropLand.cropLand;
-        List<CropLand> landList = cityLandService.findAll(qCropLand.district.isNull());
-        List<District> districtList = districtRepository.findAll(Sort.by(District.FIELDS.code));
-        List<City> cityList = cityRepository.findAll(Sort.by(City.FIELDS.code));
-        int i=0;
-        for(City city : cityList){
-            List<District> districts = new ArrayList<>();
-            while(i < districtList.size()){
-                if(city.getCode() / 100 == districtList.get(i).getCode() / 100){
-                    districts.add(districtList.get(i));
-                    i++;
-                }else{
-                    break;
-                }
-            }
-            city.setDistrictList(districts);
-        }
-        size = landList.size();
-        System.out.println("landList load finnish");
-        GenericsUtil<CropLand> genericsUtil = new GenericsUtil<>(CropLand.class);
-        List<List<CropLand>> list = genericsUtil.subListBySegment(landList, 10);
-        for(List<CropLand> cropLandList : list){
-            executor.execute(() -> {
-                for(CropLand bean : cropLandList){
-                    District district = withinDistrict(cityList, bean);
-                    if(district != null){
-                        cityLandService.setCity(bean, district);
-                        cityLandService.save(bean);
-                        synchronized (this) {
-                            System.out.println("剩余:" + (--size));
-                        }
-                    }
-                }
-            });
-        }
-        return R.succ();
-    }
-
-    private District withinDistrict(List<City> cityList, CropLand bean){
-        for(City city : cityList){
-            if(bean.getCenterPoint() == null){
-                bean.setCenterPoint(cityLandService.getCenterPoint(bean.getGeom()));
-            }
-            if(bean.getCenterPoint().within(city.getGeom())){
-                for(District district : city.getDistrictList()){
-                    if(bean.getCenterPoint().within(district.getGeom())){
-                        return district;
-                    }
-                }
-            }
-        }
-        return null;
-    }
-
 
 }
 

+ 1 - 12
src/main/java/com/sysu/admin/controller/crop/CropLandRepository.java

@@ -12,24 +12,13 @@ import java.util.List;
 public interface CropLandRepository extends JpaPlusRepository<CropLand, Long> {
 
 
-    @Query(value = "SELECT * FROM \"p_crop\" where St_within(st_geomfromtext(?1,4326), geom) limit 1", nativeQuery = true)
+    @Query(value = "SELECT * FROM p_crop where St_within(st_geomfromtext(?1,4326), geom) limit 1", nativeQuery = true)
     CropLand findByPoint(String pointWKT);
 
-    @Query(value = "update p_crop set center_point = st_centroid(geom) where id = ?1",nativeQuery = true)
-    @Modifying
-    int updateCenterPoint(Long id);
-
-    @Query(value = "select st_astext(st_centroid(geom)) from p_crop  where id = ?1",nativeQuery = true)
-    String getCenterPoint(Long id);
-
     @Query(value = "select st_astext(st_centroid(?1))",nativeQuery = true)
     String getCenterPoint(Geometry geom);
 
 
-    @Query(value = "update p_crop set province = ?2,city = ?3,district = ?4, where id = ?1",nativeQuery = true)
-    @Modifying
-    int updateCity(Long id,Integer province, Integer city, Integer district);
-
 
 
 

+ 21 - 20
src/main/java/com/sysu/admin/controller/crop/CropLandService.java

@@ -6,9 +6,13 @@ import com.querydsl.core.types.QBean;
 import com.querydsl.core.types.QList;
 import com.querydsl.jpa.impl.JPAQuery;
 import com.sysu.admin.controller.city.*;
+import com.sysu.admin.controller.crop.executor_table.ExecutorTable;
+import com.sysu.admin.controller.crop.executor_table.ExecutorTableService;
+import com.sysu.admin.controller.crop.executor_table.PKRP;
 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.crop.interceptor.DynamicTableNames;
 import com.sysu.admin.controller.crop.range.AutoTableNameInterceptor;
 import com.sysu.admin.controller.crop.range.LandRangeIndexService;
 import com.sysu.admin.controller.geo.land.LandTaskStatus;
@@ -53,37 +57,37 @@ public class CropLandService extends BaseService<CropLand, Long> {
     DistrictRepository districtRepository;
     @Autowired
     LandRangeIndexService landRangeIndexService;
+    @Autowired
+    ExecutorTableService executorTableService;
 
     @Override
+    @DynamicTableNames(value = "aLong")
     public CropLand findOne(Long aLong) {
-        AutoTableNameInterceptor.myTable.set(landRangeIndexService.getTableName(aLong));
         CropLand bean = super.findOne(aLong);
         return bean;
     }
 
     @Override
+    @DynamicTableNames(value = "entity")
     public <S extends CropLand> S save(S entity) {
-        AutoTableNameInterceptor.myTable.set(landRangeIndexService.getTableName(entity.getId()));
         return super.save(entity);
     }
 
+    @DynamicTableNames(value = "point")
     public List<CropPoint> findByBuffer(Double[] point, Integer meter){
-        AutoTableNameInterceptor.myTable.set(landRangeIndexService.getTableName(point));
         double degree = meter / (2 * Math.PI * 6371004) * 360;
         return mCropPointRepository.findByBufferAndStatus("Point("+point[0]+" "+point[1]+")",degree, new Integer[]{
                 LandTaskStatus.published.ordinal(),LandTaskStatus.receive.ordinal()
         });
     }
 
+    @DynamicTableNames(executor = "executor")
     public List<CropLand> findIdAndNameByExecutor(Long executor){
-        QCropLand qCropLand = QCropLand.cropLand;
-        QBean<CropLand> selectBean = Projections.fields(qCropLand, qCropLand.id, qCropLand.name, qCropLand.updateDate);
-        JPAQuery<CropLand> jpaQuery = mJPAQueryFactory.select(selectBean)
-                .from(qCropLand)
-                .where(qCropLand.executor.eq(executor));
-        return jpaQuery.fetch();
+        Query query =mEntityManager.createQuery("select c.id,c.name,c.updateDate from CropLand c where c.executor = " + executor);
+        return query.getResultList();
     }
 
+    @DynamicTableNames(value = "point")
     public CropLand findByPoint(Double[] point){
         CropLand cityLand = mCropLandRepository.findByPoint("Point("+point[0]+" "+point[1]+")");
         return cityLand;
@@ -94,15 +98,16 @@ public class CropLandService extends BaseService<CropLand, Long> {
         return mCropPointRepository.getBuffer("Point("+point[0]+" "+point[1]+")", degree);
     }
 
+    @DynamicTableNames(value = "tableNames")
     public List<CropPoint> findCropLandNoGeomByTableNamesAndBBox(String tableNames, Double x1, Double y1, Double x2, Double y2){
         String wkt = bboxToWkt(x1, y1 , x2, y2);
-        AutoTableNameInterceptor.myTable.set(tableNames);
         String sql = " select  "+ CropPoint.selectColumns;
         sql += " from p_crop  where ST_Intersects(geom,st_geomfromtext('"+wkt+"',4326)) ";
         List<CropPoint> cropPointList = mEntityManager.createNativeQuery(sql, CropPoint.class).getResultList();
         return cropPointList;
     }
 
+    @DynamicTableNames(value = "id")
     @Transactional
     public void updateStatus(Long id, Integer status, Long updateUserId){
         CropLand bean = mCropLandRepository.findOne(id);
@@ -111,17 +116,9 @@ public class CropLandService extends BaseService<CropLand, Long> {
             bean.setReceiveDate(new Date());
             bean.setReceiver(updateUserId);
         }
-        mCropLandRepository.save(bean);
+        mCropLandRepository.saveAndFlush(bean);
     }
 
-    @Transactional
-    public int updateCenterPoint(Long id){
-        return  mCropLandRepository.updateCenterPoint(id);
-    }
-
-    public Point getCenterPoint(Long id){
-        return (Point)GeoCastUtil.wktToGeom(mCropLandRepository.getCenterPoint(id));
-    }
     public Point getCenterPoint(Geometry geometry){
         geometry.setSRID(4326);
         return (Point)GeoCastUtil.wktToGeom(mCropLandRepository.getCenterPoint(geometry));
@@ -135,6 +132,7 @@ public class CropLandService extends BaseService<CropLand, Long> {
         bean.setDistrict(district.getCode());
     }
 
+    @DynamicTableNames(value = "bean")
     @Transactional
     public void saveCropAndImages(CropLand bean){
         CropImage fay = bean.getFay();
@@ -143,7 +141,10 @@ public class CropLandService extends BaseService<CropLand, Long> {
         saveImage(fay, bean.getId(), ImageType.fay, bean.getExecutor());
         saveImage(center, bean.getId(), ImageType.center, bean.getExecutor());
         saveImage(near, bean.getId(), ImageType.near, bean.getExecutor());
-        mCropLandRepository.save(bean);
+        String tableName = AutoTableNameInterceptor.myTable.get();
+        ExecutorTable executorTable = new ExecutorTable().setPk(new PKRP().tableName(tableName).executor(bean.getExecutor()));
+        mCropLandRepository.saveAndFlush(bean);
+        executorTableService.save(executorTable);
     }
 
     private void saveImage(CropImage image, Long cropId, ImageType type, Long userId){

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

@@ -9,7 +9,7 @@ import java.util.List;
 public interface CropPointRepository extends JpaPlusRepository<CropPoint, Long> {
 
 
-    @Query(value = "SELECT id,gridcode,crop_type,st_asgeojson(center_point) as geojson,status,receiver,name,address,growing_period from \"p_crop\" where status in ?3 and St_within(center_point," +
+    @Query(value = "select id,gridcode,crop_type,st_asgeojson(center_point) as geojson,status,receiver,name,address,growing_period from p_crop where status in ?3 and St_within(center_point," +
             " ST_Buffer(st_geomfromtext(?1,4326),?2, 'quad_segs=8')" +
             ");",nativeQuery = true)
     List<CropPoint> findByBufferAndStatus(String pointWKT, Double degree, Integer[] status);

+ 30 - 0
src/main/java/com/sysu/admin/controller/crop/executor_table/ExecutorTable.java

@@ -0,0 +1,30 @@
+package com.sysu.admin.controller.crop.executor_table;
+
+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 javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@FieldNameConstants(innerTypeName = "FIELDS")
+@Table(name = "p_executor_table")
+@Entity
+@DynamicInsert
+@DynamicUpdate
+public class ExecutorTable {
+
+
+    /**
+     * 联合主键
+     */
+    @EmbeddedId
+    private PKRP pk;
+}

+ 12 - 0
src/main/java/com/sysu/admin/controller/crop/executor_table/ExecutorTableRepository.java

@@ -0,0 +1,12 @@
+package com.sysu.admin.controller.crop.executor_table;
+
+
+import com.xiesx.fastboot.core.jpa.JpaPlusRepository;
+
+
+
+public interface ExecutorTableRepository extends JpaPlusRepository<ExecutorTable, PKRP> {
+
+
+
+}

+ 33 - 0
src/main/java/com/sysu/admin/controller/crop/executor_table/ExecutorTableService.java

@@ -0,0 +1,33 @@
+package com.sysu.admin.controller.crop.executor_table;
+
+import com.sysu.admin.support.base.BaseService;
+import com.xiesx.fastboot.core.jpa.JpaPlusRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.persistence.Query;
+import java.util.List;
+
+@Service
+public class ExecutorTableService extends BaseService<ExecutorTable, PKRP> {
+
+    @Autowired
+    ExecutorTableRepository executorTableRepository;
+
+    public String getTableNames(Long executor){
+        Query query = mEntityManager.createQuery("select e.pk.tableName from ExecutorTable e where e.pk.executor = " + executor);
+        List<String> executorTableList = query.getResultList();
+        StringBuffer stringBuffer = new StringBuffer(executorTableList.size() * 15);
+        for(String executorTable : executorTableList){
+            stringBuffer.append(executorTable);
+            stringBuffer.append(",");
+        }
+        stringBuffer.deleteCharAt(stringBuffer.length() - 1);
+        return stringBuffer.toString();
+    }
+
+    @Override
+    public JpaPlusRepository<ExecutorTable, PKRP> r() {
+        return executorTableRepository;
+    }
+}

+ 32 - 0
src/main/java/com/sysu/admin/controller/crop/executor_table/PKRP.java

@@ -0,0 +1,32 @@
+package com.sysu.admin.controller.crop.executor_table;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+import java.io.Serializable;
+
+/**
+ * 联合主键
+ */
+@Data
+@Accessors(fluent = true)
+@Embeddable
+public class PKRP implements Serializable{
+
+
+    /**
+     * 用户id
+     */
+    @Column
+    private Long executor;
+
+    /**
+     * 表名
+     */
+    @Column()
+    private String tableName;
+
+}

+ 14 - 0
src/main/java/com/sysu/admin/controller/crop/interceptor/DynamicTableNames.java

@@ -0,0 +1,14 @@
+package com.sysu.admin.controller.crop.interceptor;
+
+import java.lang.annotation.*;
+
+@Target({ElementType.METHOD})
+@Retention(value = RetentionPolicy.RUNTIME)
+@Documented
+public @interface DynamicTableNames {
+    //crop or cropId or point[] or tableNames
+    String value() default "";
+
+    //与value 二选一
+    String executor() default "";
+}

+ 111 - 0
src/main/java/com/sysu/admin/controller/crop/interceptor/DynamicTableNamesAspect.java

@@ -0,0 +1,111 @@
+package com.sysu.admin.controller.crop.interceptor;
+
+import com.sysu.admin.controller.crop.executor_table.ExecutorTableService;
+import com.sysu.admin.controller.crop.executor_table.QExecutorTable;
+import com.sysu.admin.controller.crop.range.AutoTableNameInterceptor;
+import com.sysu.admin.controller.crop.range.LandRangeIndexService;
+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.aspectj.lang.reflect.MethodSignature;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.InvocationTargetException;
+
+/**
+ * 用于记录web请求/响应日志
+ */
+@Component
+@Aspect
+@Slf4j
+public class DynamicTableNamesAspect {
+
+    @Autowired
+    @Lazy
+    LandRangeIndexService landRangeIndexService;
+    @Autowired
+    @Lazy
+    ExecutorTableService executorTableService;
+
+    public DynamicTableNamesAspect(){
+        log.info("DynamicTableNamesAspect started! ");
+    }
+    /**
+     * 切面, 注解名
+     */
+    @Pointcut("@annotation(DynamicTableNames)")
+    private void parameterPointCut() {}
+
+    /**
+     * 方法执行前,记录请求
+     * @param joinPoint
+     */
+    @Before("parameterPointCut()")
+    public void requestLog(JoinPoint joinPoint){
+        MethodSignature methodSignature = (MethodSignature)joinPoint.getSignature();
+        String value = methodSignature.getMethod().getAnnotation(DynamicTableNames.class).value();
+        if(StringUtils.isNotBlank(value)){
+            execValue(joinPoint, methodSignature, value);
+        }else{
+            String executor = methodSignature.getMethod().getAnnotation(DynamicTableNames.class).executor();
+            execExecutor(joinPoint, methodSignature, executor);
+        }
+    }
+
+    private void execExecutor(JoinPoint joinPoint,MethodSignature methodSignature, String executor){
+        int i=0;
+        for(String paramName : methodSignature.getParameterNames()){
+            if(paramName.equals(executor)) {
+                Object obj = joinPoint.getArgs()[i];
+                String tableNames = executorTableService.getTableNames((Long)obj);
+                AutoTableNameInterceptor.myTable.set(tableNames);
+                return;
+            }
+            i++;
+        }
+    }
+
+    private void execValue(JoinPoint joinPoint,MethodSignature methodSignature, String value){
+        int i=0;
+        for(String paramName : methodSignature.getParameterNames()){
+            if(paramName.equals(value)) {
+                Object obj = joinPoint.getArgs()[i];
+                String tableNames = null;
+                if(obj instanceof Long){
+                    tableNames = landRangeIndexService.getTableName((Long)obj);
+                }else if(obj instanceof String){
+                    tableNames = (String)obj;
+                }else if(obj instanceof Double[]){
+                    tableNames = landRangeIndexService.getTableName((Double[])obj);
+                }else{
+                    try {
+                        Long id = (Long)obj.getClass().getMethod("getId").invoke(obj);
+                        tableNames = landRangeIndexService.getTableName(id);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+                AutoTableNameInterceptor.myTable.set(tableNames);
+                return;
+            }
+            i++;
+        }
+    }
+
+    /**
+     * 方法执行后,记录响应
+     * @param ret 方法执行结果注入对象
+     * @return
+     */
+    @AfterReturning(returning = "ret",pointcut = "parameterPointCut()")
+    public Object responeLog(Object ret){
+        AutoTableNameInterceptor.myTable.set(null);
+        return ret;
+    }
+}

+ 4 - 4
src/main/java/com/sysu/admin/controller/crop/range/AutoTableNameInterceptor.java

@@ -19,14 +19,14 @@ public class AutoTableNameInterceptor extends EmptyInterceptor {
     @Override
     public String onPrepareStatement(String sql) {
         String tableName = myTable.get();
-        if(StringUtils.isNotBlank(tableName) && sql.indexOf("p_crop") > -1) {
-            if (sql.indexOf("delete") > -1 || sql.indexOf("insert") > -1) {
+        if(StringUtils.isNotBlank(tableName) && sql.indexOf("p_crop ") > -1) {
+            if (sql.indexOf("delete ") > -1 || sql.indexOf("insert ") > -1) {
                 return sql;
             }
-            if(sql.indexOf("update") > -1){
+            if(sql.indexOf("update ") > -1){
                 sql = sql.replaceAll("p_crop", tableName);
             }
-            if (sql.indexOf("select") > -1) {
+            if (sql.indexOf("select ") > -1) {
                 String[] tableArray =  TextUtil.split(tableName,",");
                 if(tableArray.length == 1){
                     return sql.replaceAll("p_crop", tableArray[0]);

+ 4 - 4
src/main/java/com/sysu/admin/controller/crop/range/LandRangeIndexRepository.java

@@ -13,14 +13,14 @@ import java.util.List;
 public interface LandRangeIndexRepository extends JpaPlusRepository<LandRangeIndex, PKRP> {
 
 
-    @Query(value = "SELECT table_name from \"p_land_range_index\" where  St_within(geom," +
+    @Query(value = "SELECT table_name from p_land_range_index where  St_within(" +
             " st_geomfromtext(?1,4326) " +
-            ");",nativeQuery = true)
+            ",geom);",nativeQuery = true)
     String findTableNameByPoint(String pointWKT);
 
-    @Query(value = "SELECT table_name from \"p_land_range_index\" where  ST_Intersects(geom," +
+    @Query(value = "SELECT table_name from p_land_range_index where  ST_Intersects(" +
             " st_geomfromtext(?1,4326)" +
-            ");",nativeQuery = true)
+            ",geom);",nativeQuery = true)
     String[] findTableNameByWkt(String wkt);
 
 }

+ 8 - 7
src/main/java/com/sysu/admin/controller/crop/range/LandRangeIndexService.java

@@ -11,6 +11,7 @@ import javax.persistence.Column;
 import javax.persistence.EmbeddedId;
 import javax.persistence.Entity;
 import javax.persistence.Table;
+import java.util.Optional;
 
 @Service
 public class LandRangeIndexService extends BaseService<LandRangeIndex, PKRP> {
@@ -37,20 +38,20 @@ public class LandRangeIndexService extends BaseService<LandRangeIndex, PKRP> {
         }
         QLandRangeIndex qLandRangeIndex = QLandRangeIndex.landRangeIndex;
         Predicate predicate = qLandRangeIndex.pk.start.loe(id).and(qLandRangeIndex.pk.end.goe(id));
-        LandRangeIndex landRangeIndex = mLandRangeIndexRepository.findOne(predicate).get();
-        if(landRangeIndex != null){
-            return landRangeIndex.getTableName();
+        Optional<LandRangeIndex>  landRangeIndex = mLandRangeIndexRepository.findOne(predicate);
+        if(landRangeIndex.isPresent()){
+            return landRangeIndex.get().getTableName();
         }
         return defaultTableName;
     }
 
     public String getTableNameByCode(Integer code){
         QLandRangeIndex qLandRangeIndex = QLandRangeIndex.landRangeIndex;
-        LandRangeIndex landRangeIndex = mLandRangeIndexRepository.findOne(qLandRangeIndex.code.eq(code)).get();
-        if(landRangeIndex != null){
-            return landRangeIndex.getTableName();
+        Optional<LandRangeIndex> landRangeIndex = mLandRangeIndexRepository.findOne(qLandRangeIndex.code.eq(code));
+        if(landRangeIndex.isPresent()){
+            return landRangeIndex.get().getTableName();
         }
-        return null;
+        return defaultTableName;
     }
 
     public String getTableName(Double[] point){

+ 0 - 9
src/main/java/com/sysu/admin/support/interceptor/DynamicTableNames.java

@@ -1,9 +0,0 @@
-package com.sysu.admin.support.interceptor;
-
-import java.lang.annotation.*;
-
-@Target({ElementType.METHOD})
-@Retention(value = RetentionPolicy.RUNTIME)
-@Documented
-public @interface DynamicTableNames {
-}

+ 0 - 56
src/main/java/com/sysu/admin/support/interceptor/DynamicTableNamesAspect.java

@@ -1,56 +0,0 @@
-package com.sysu.admin.support.interceptor;
-
-import com.alibaba.fastjson.JSON;
-import com.sysu.admin.controller.crop.range.AutoTableNameInterceptor;
-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 DynamicTableNamesAspect {
-
-    public DynamicTableNamesAspect(){
-        log.info("DynamicTableNamesAspect started! ");
-    }
-    /**
-     * 切面, 注解名
-     */
-    @Pointcut("@annotation(DynamicTableNames)")
-    private void parameterPointCut() {}
-
-    /**
-     * 方法执行前,记录请求
-     * @param joinPoint
-     */
-    @Before("parameterPointCut()")
-    public void requestLog(JoinPoint joinPoint){
-
-    }
-
-    /**
-     * 方法执行后,记录响应
-     * @param ret 方法执行结果注入对象
-     * @return
-     */
-    @AfterReturning(returning = "ret",pointcut = "parameterPointCut()")
-    public Object responeLog(Object ret){
-        AutoTableNameInterceptor.myTable.set(null);
-        return ret;
-    }
-}

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

@@ -70,7 +70,7 @@
                 var target = "map"
 
                 view1 = new ol.View({
-                    center: [113.303138,23.101339],
+                    center: [113.3992039,23.1686076],
                     projection: projection,
                     zoom: 15
                 })

+ 25 - 15
src/main/webapp/static/package/cityland.js

@@ -202,7 +202,7 @@ CityLandAction.prototype = {
         let vector = new ol.layer.Vector({
             source:vectorSource,
             style: globalStyle.cropStyle,
-            minZoom:15,
+            minZoom:14,
             maxZoom:22,
             zIndex: 3,
             visible: true
@@ -299,7 +299,7 @@ CityLand.prototype = {
     layerNames:['wuhan:p_land_banan','wuhan:p_land_beibei','wuhan:p_land_bishan','wuhan:p_land_changshou','wuhan:p_land_chengkou','wuhan:p_land_dadukou','wuhan:p_land_dazu','wuhan:p_land_dianjiang','wuhan:p_land_fengdu','wuhan:p_land_fengjie','wuhan:p_land_fuling','wuhan:p_land_hechuan','wuhan:p_land_jiangbei','wuhan:p_land_jiangjin','wuhan:p_land_jiulongpo','wuhan:p_land_kaizhou','wuhan:p_land_liangping','wuhan:p_land_nanan','wuhan:p_land_nanchuan','wuhan:p_land_pengshui','wuhan:p_land_qianjiang','wuhan:p_land_qijiang','wuhan:p_land_qiuyang','wuhan:p_land_rongchang','wuhan:p_land_shapingba','wuhan:p_land_shizhu','wuhan:p_land_tongliang','wuhan:p_land_tongnan','wuhan:p_land_wanzhou','wuhan:p_land_wulong','wuhan:p_land_wushan','wuhan:p_land_wuxi','wuhan:p_land_xiushan','wuhan:p_land_yongchuan','wuhan:p_land_yubei','wuhan:p_land_yunyang','wuhan:p_land_yuzhong','wuhan:p_land_zhong','wuhan:p_crop'],
     createTileLayer(){
         for(let layer of this.layerNames){
-            this.getWMTS(layer)
+            this.getWMS(layer)
         }
     },
     addTileLayer(map){
@@ -312,22 +312,33 @@ CityLand.prototype = {
             map.removeLayer(layer)
         }
     }
-    ,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": '',
-                "exceptions": 'application/vnd.ogc.se_inimage',
-            }
+    ,getWMS(typeName){
+        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];
+        let source = new ol.source.ImageWMS({
+            url: 'http://change.zylfsm.com/geoserver/gwc/service/wms?SERVICE=WMS&',
+            layer: typeName,
+            matrixSet: this.wmsData.params['TILEMATRIXSET'],
+            format: this.wmsData.params['FORMAT'],
+            projection: this.wmsData.projection,
+            tileGrid: new ol.tilegrid.WMS({
+                tileSize: [256,256],
+                extent: [-180.0,-90.0,180.0,90.0],
+                origin: [-180.0, 90.0],
+                resolutions: resolutions,
+                matrixIds: this.wmsData.params['TILEMATRIX']
+            }),
+            style: this.wmsData.params['STYLE'],
+            wrapX: true
         })
-        this.layerData.layer = new ol.layer.Image({
-            source: this.layerData.source,
+        this.layerData.source.push(source)
+        let layer = new ol.layer.Image({
+            source: source,
             zIndex: 2,
             minZoom: 7,
-            maxZoom: 30
+            maxZoom: 30,
+            visible: true,
         });
+        this.layerData.layer.push(layer)
     },getWMTS(typeName){
         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;
@@ -370,7 +381,6 @@ CityLand.prototype = {
     visibleWMTS(tableNames){
         this.visibleLayers = tableNames
         for(let layer of this.layerData.layer){
-            console.log(layer.get("name"))
             if(tableNames.includes(layer.get("name"))){
                 layer.setVisible(true)
             }else{

+ 6 - 0
src/test/java/CropClassPeriodTest.java

@@ -28,6 +28,12 @@ public class CropClassPeriodTest extends BaseTest {
     @Autowired
     private CropPeriodRepository cropPeriodRepository;
 
+
+    @Test
+    public void printToken(){
+        System.out.println(getToken("381033297947398144","19874006220"));
+    }
+
     @Test
     public void importCropClassPeriod(){
         FileInputStream file = null;

+ 9 - 0
src/test/java/com/sysu/admin/controller/crop/CropLandServiceTest.java

@@ -3,6 +3,7 @@ package com.sysu.admin.controller.crop;
 import com.alibaba.fastjson.JSON;
 import com.sysu.admin.MarkApplication;
 import com.sysu.admin.api.base.BaseTest;
+import com.sysu.admin.support.system.user.User;
 import junit.framework.TestCase;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -10,7 +11,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import java.util.Arrays;
 import java.util.Date;
+import java.util.List;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
@@ -31,4 +34,10 @@ public class CropLandServiceTest extends BaseTest {
             System.out.println(JSON.toJSONString(cropLand));
         });
     }
+
+    @Test
+    public void testFindIdAndNameByExecutor() {
+        List<CropLand> cropLandList = cropLandService.findIdAndNameByExecutor(380402566221008896L);
+        System.out.println(JSON.toJSONString(cropLandList.toArray()));
+    }
 }