Administrator преди 2 години
родител
ревизия
21bd862b26
променени са 23 файла, в които са добавени 639 реда и са изтрити 139 реда
  1. 17 1
      pom.xml
  2. 55 0
      src/main/java/com/sysu/admin/api/base/BaseTest.java
  3. 34 0
      src/main/java/com/sysu/admin/api/crop/CropClassController.java
  4. 39 0
      src/main/java/com/sysu/admin/controller/crop/class_item/CropClassItem.java
  5. 10 0
      src/main/java/com/sysu/admin/controller/crop/class_item/CropClassItemRepository.java
  6. 33 0
      src/main/java/com/sysu/admin/controller/crop/class_item_period/CropClassItemPeriod.java
  7. 22 0
      src/main/java/com/sysu/admin/controller/crop/class_item_period/CropClassItemPeriodRepository.java
  8. 32 0
      src/main/java/com/sysu/admin/controller/crop/class_item_period/PKRP.java
  9. 36 0
      src/main/java/com/sysu/admin/controller/crop/clazz/CropClass.java
  10. 10 0
      src/main/java/com/sysu/admin/controller/crop/clazz/CropClassRepository.java
  11. 32 0
      src/main/java/com/sysu/admin/controller/crop/period/CropPeriod.java
  12. 11 0
      src/main/java/com/sysu/admin/controller/crop/period/CropPeriodRepository.java
  13. 15 0
      src/main/java/com/sysu/admin/controller/geo/task/TaskController.java
  14. 1 1
      src/main/java/com/sysu/admin/support/system/role_permission/RolePermissionRepository.java
  15. 1 1
      src/main/java/com/sysu/admin/support/system/role_permission/RolePermissionService.java
  16. 1 1
      src/main/webapp/WEB-INF/jsp/comm/admin2.jsp
  17. 84 0
      src/main/webapp/WEB-INF/jsp/page/publish_task.jsp
  18. 2 2
      src/main/webapp/static/js/adm/adm_tool.js
  19. 6 2
      src/main/webapp/static/package/geo_server_context.js
  20. 11 131
      src/main/webapp/static/package/publish_task_action.js
  21. 49 0
      src/test/java/CropClassPeriodExcel.java
  22. 90 0
      src/test/java/CropClassPeriodExcelListener.java
  23. 48 0
      src/test/java/CropClassPeriodTest.java

+ 17 - 1
pom.xml

@@ -74,6 +74,11 @@
 			<artifactId>spring-boot-configuration-processor</artifactId>
 			<optional>true</optional>
 		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-test</artifactId>
+			<version>1.5.9.RELEASE</version>
+		</dependency>
 		<!-- quartz -->
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
@@ -131,7 +136,6 @@
 		<dependency>
 			<groupId>junit</groupId>
 			<artifactId>junit</artifactId>
-			<scope>test</scope>
 		</dependency>
 
 		<dependency>
@@ -253,6 +257,18 @@
 					</dependency>
 				</dependencies>
 			</plugin>
+			<plugin>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<configuration>
+					<source>1.8</source>
+					<target>1.8</target>
+					<encoding>UTF-8</encoding>
+					<!--					<compilerArguments>-->
+					<!--						<verbose />-->
+					<!--						<bootclasspath>${java.home}\lib\rt.jar;${java.home}\lib\jce.jar;</bootclasspath>-->
+					<!--					</compilerArguments>-->
+				</configuration>
+			</plugin>
 
 <!--			<plugin>-->
 <!--				<groupId>org.apache.maven.plugins</groupId>-->

+ 55 - 0
src/main/java/com/sysu/admin/api/base/BaseTest.java

@@ -0,0 +1,55 @@
+package com.sysu.admin.api.base;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.google.common.collect.Maps;
+import com.sysu.admin.support.base.ServiceContext;
+import com.xiesx.fastboot.core.token.JwtHelper;
+import com.xiesx.fastboot.core.token.cfg.TokenCfg;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.mgt.SecurityManager;
+import org.junit.Before;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+import org.springframework.web.context.WebApplicationContext;
+
+import java.util.Map;
+
+/**
+ * @author shu hao
+ * @description:
+ * @date 2022/1/5 10:05
+ */
+public class BaseTest extends ServiceContext {
+
+    @Autowired
+    WebApplicationContext wac;
+    @Autowired
+    SecurityManager securityManager;
+    private MockMvc mockMvc;
+    @Autowired
+    public ServiceContext serviceContext;
+
+
+    @Before
+    public void brfore() {
+        mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
+        SecurityUtils.setSecurityManager(securityManager);
+    }
+
+    public String getToken(String userId, String username){
+        Map<String, Object> claims = Maps.newConcurrentMap();
+        claims.put(TokenCfg.USERID, userId);
+        claims.put(TokenCfg.USERNAME, username);
+        String token = JwtHelper.create("zedu", "api", claims, JwtHelper.JWT_EXPIRE_D_7);
+        return token;
+    }
+
+    public void printJsonString(Object o){
+        System.out.println(JSON.toJSONString(o, SerializerFeature.PrettyFormat));
+    }
+
+
+
+}

+ 34 - 0
src/main/java/com/sysu/admin/api/crop/CropClassController.java

@@ -0,0 +1,34 @@
+package com.sysu.admin.api.crop;
+
+import com.sysu.admin.controller.crop.class_item.CropClassItemRepository;
+import com.sysu.admin.controller.crop.class_item_period.CropClassItemPeriodRepository;
+import com.sysu.admin.controller.crop.clazz.CropClassRepository;
+import com.sysu.admin.controller.crop.period.CropPeriodRepository;
+import com.xiesx.fastboot.base.result.BaseResult;
+import com.xiesx.fastboot.base.result.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RequestMapping("/api/crop_class")
+@RestController
+public class CropClassController {
+
+    @Autowired
+    private CropClassItemPeriodRepository cropClassItemPeriodRepository;
+    @Autowired
+    private CropClassItemRepository cropClassItemRepository;
+    @Autowired
+    private CropClassRepository cropClassRepository;
+    @Autowired
+    private CropPeriodRepository cropPeriodRepository;
+
+    @RequestMapping("/list")
+    public BaseResult list(){
+        cropClassRepository.findAll();
+        cropClassItemRepository.findAll();
+        cropPeriodRepository.findAll();
+        cropClassItemPeriodRepository.findAll();
+        return R.succ();
+    }
+}

+ 39 - 0
src/main/java/com/sysu/admin/controller/crop/class_item/CropClassItem.java

@@ -0,0 +1,39 @@
+package com.sysu.admin.controller.crop.class_item;
+
+import com.sysu.admin.controller.crop.period.CropPeriod;
+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.*;
+import java.util.List;
+
+/**
+ * 作物类别条目
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@FieldNameConstants(innerTypeName = "FIELDS")
+@Table(name = "p_crop_class_item")
+@Entity
+@DynamicInsert
+@DynamicUpdate
+public class CropClassItem {
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    @Column()
+    private String name;
+
+    @Column()
+    private Integer classId;
+
+    @Transient
+    private List<CropPeriod> periods;
+
+}

+ 10 - 0
src/main/java/com/sysu/admin/controller/crop/class_item/CropClassItemRepository.java

@@ -0,0 +1,10 @@
+package com.sysu.admin.controller.crop.class_item;
+
+import com.sysu.admin.controller.crop.clazz.CropClass;
+import com.xiesx.fastboot.core.jpa.JpaPlusRepository;
+
+public interface CropClassItemRepository extends JpaPlusRepository<CropClassItem, Integer> {
+
+    CropClassItem findByName(String name);
+
+}

+ 33 - 0
src/main/java/com/sysu/admin/controller/crop/class_item_period/CropClassItemPeriod.java

@@ -0,0 +1,33 @@
+package com.sysu.admin.controller.crop.class_item_period;
+
+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_crop_class_item_period")
+@Entity
+@DynamicInsert
+@DynamicUpdate
+public class CropClassItemPeriod {
+
+    /**
+     * 联合主键
+     */
+    @EmbeddedId
+    private PKRP pk;
+
+}

+ 22 - 0
src/main/java/com/sysu/admin/controller/crop/class_item_period/CropClassItemPeriodRepository.java

@@ -0,0 +1,22 @@
+package com.sysu.admin.controller.crop.class_item_period;
+
+import com.sysu.admin.controller.crop.class_item.CropClassItem;
+import com.xiesx.fastboot.core.jpa.JpaPlusRepository;
+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;
+
+/**
+ * 作物类别条目 与 生长周期关联表
+ */
+public interface CropClassItemPeriodRepository extends JpaPlusRepository<CropClassItemPeriod, PKRP> {
+
+
+}

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

@@ -0,0 +1,32 @@
+package com.sysu.admin.controller.crop.class_item_period;
+
+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 Integer cropItemId;
+
+    /**
+     * 生长周期id
+     */
+    @Column
+    private Integer periodId;
+
+}

+ 36 - 0
src/main/java/com/sysu/admin/controller/crop/clazz/CropClass.java

@@ -0,0 +1,36 @@
+package com.sysu.admin.controller.crop.clazz;
+
+import com.sysu.admin.controller.crop.class_item.CropClassItem;
+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.*;
+import java.util.List;
+
+/**
+ * 作物大类
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@FieldNameConstants(innerTypeName = "FIELDS")
+@Table(name = "p_crop_class")
+@Entity
+@DynamicInsert
+@DynamicUpdate
+public class CropClass {
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    @Column()
+    private String name;
+
+    @Transient
+    private List<CropClassItem> items;
+
+}

+ 10 - 0
src/main/java/com/sysu/admin/controller/crop/clazz/CropClassRepository.java

@@ -0,0 +1,10 @@
+package com.sysu.admin.controller.crop.clazz;
+
+import com.sysu.admin.controller.crop.clazz.CropClass;
+import com.xiesx.fastboot.core.jpa.JpaPlusRepository;
+
+public interface CropClassRepository extends JpaPlusRepository<CropClass, Integer> {
+
+    CropClass findByName(String name);
+
+}

+ 32 - 0
src/main/java/com/sysu/admin/controller/crop/period/CropPeriod.java

@@ -0,0 +1,32 @@
+package com.sysu.admin.controller.crop.period;
+
+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.*;
+
+/**
+ * 作物生长周期
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@FieldNameConstants(innerTypeName = "FIELDS")
+@Table(name = "p_crop_period")
+@Entity
+@DynamicInsert
+@DynamicUpdate
+public class CropPeriod {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    @Column()
+    private String name;
+
+}

+ 11 - 0
src/main/java/com/sysu/admin/controller/crop/period/CropPeriodRepository.java

@@ -0,0 +1,11 @@
+package com.sysu.admin.controller.crop.period;
+
+import com.sysu.admin.controller.crop.class_item.CropClassItem;
+import com.sysu.admin.controller.crop.clazz.CropClass;
+import com.xiesx.fastboot.core.jpa.JpaPlusRepository;
+
+public interface CropPeriodRepository extends JpaPlusRepository<CropPeriod, Integer> {
+
+    CropPeriod findByName(String name);
+
+}

+ 15 - 0
src/main/java/com/sysu/admin/controller/geo/task/TaskController.java

@@ -0,0 +1,15 @@
+package com.sysu.admin.controller.geo.task;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@RequestMapping("/task")
+@Controller
+public class TaskController {
+
+    @RequestMapping("/publish_index")
+    public String publishIndex(){
+        return "page/publish_task";
+    }
+
+}

+ 1 - 1
src/main/java/com/sysu/admin/support/system/role_permission/RolePermissionRepository.java

@@ -5,7 +5,7 @@ import org.springframework.data.jpa.repository.Query;
 
 import java.util.List;
 
-public interface RolePermissionRepository extends JpaPlusRepository<RolePermission, Long> {
+public interface RolePermissionRepository extends JpaPlusRepository<RolePermission, PKRP> {
 
     @Query(value = "select * from sys_role_permission where roles=?1", nativeQuery = true)
     List<RolePermission> getListByRole(Long roesId);

+ 1 - 1
src/main/java/com/sysu/admin/support/system/role_permission/RolePermissionService.java

@@ -27,7 +27,7 @@ public class RolePermissionService {
         List<RolePermission> list = mRolePermissionRepository.getListByRole(roleId);
         String[] ids = new String[list.size()];
         for (int i = 0; i < ids.length; i++) {
-            ids[i] = String.valueOf(list.get(i).getPk().menu());
+            ids[i] = String.valueOf(list.get(i).getPk().getMenu());
         }
         return ids;
     }

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

@@ -130,7 +130,7 @@
                             let action;
                             if(treeNode.Action){
                                 action = geoServerContext.createAction(treeNode.id, treeNode.Action, treeNode)
-                                geoServerContext.stopActions()
+                                geoServerContext.stopActions(treeNode.id)
                                 action.start()
                             }
                         }

+ 84 - 0
src/main/webapp/WEB-INF/jsp/page/publish_task.jsp

@@ -0,0 +1,84 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8" trimDirectiveWhitespaces="true"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/fastboot" prefix="fb"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
+<%@ taglib uri="http://shiro.apache.org/tags" prefix="shiro"%>
+<fb:ui src="base/main">
+    <fb:property name="title">批量发布任务</fb:property>
+    <fb:css href="${base}/static/js/city-picker/city-picker.css"></fb:css>
+    <fb:script src="${base}/static/js/city-picker/city-picker.data.js"></fb:script>
+    <fb:script type="text/javascript">
+        <script>
+            layui.use([ 'tool', 'form', 'city' ], function() {
+                var $ = layui.$, tool = layui.tool, form = layui.form, city= layui.city;
+
+                let currentPicker = new city("#city-picker", {
+                    getValListener: function(item){
+
+                    }});
+                document.getElementById("file").onchange = function(){
+                    var blob = document.getElementById("file").files[0];
+                    console.log(blob)
+                    $("#filename").val(blob.name)
+                }
+
+                $("#select").on("click",function(){
+                    document.getElementById("file").click()
+                })
+                $("#clean").on("click",function(){
+                    document.getElementById("file").value = ""
+                    $("#filename").val("")
+                })
+            });
+            function publish(){
+                alert(123)
+            }
+        </script>
+
+    </fb:script>
+    <fb:layout>
+        <fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
+            <legend>发布任务</legend>
+        </fieldset>
+        <form class="layui-form" 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">
+                    </div>
+                </div>
+            </div>
+            <div class="layui-form-item">
+                <label class="layui-form-label">作物种类</label>
+                <div class="layui-input-inline">
+                    <select name="quiz1">
+                        <option value="">请选择分类</option>
+                    </select>
+                </div>
+                <div class="layui-input-inline">
+                    <select name="quiz2">
+                        <option value="">请选择作物</option>
+                    </select>
+                </div>
+            </div>
+
+            <div class="layui-form-item">
+                <div class="layui-inline">
+                    <label class="layui-form-label">上传表格</label>
+                    <div class="layui-input-inline">
+                        <input type="text" id="filename"  readonly  autocomplete="off" class="layui-input">
+                    </div>
+                </div>
+                <div class="layui-inline">
+                    <div class="layui-input-inline">
+                        <button type="button" class="layui-btn" id="select" >选择</button>
+                        <button type="button" class="layui-btn layui-btn-primary" id="clean" >清除</button>
+                    </div>
+                </div>
+            </div>
+
+            <input type="file" id="file" style="display: none"  />
+            <input type="button" onclick="publish()" id="submit" style="display: none"  />
+        </form>
+    </fb:layout>
+</fb:ui>

+ 2 - 2
src/main/webapp/static/js/adm/adm_tool.js

@@ -324,7 +324,7 @@ layui.define([ 'layer', 'table', 'form', 'element', 'notice' ], function(exports
 				}
 			});
 		},
-		dialog2 : function(url, h,buttonConfigs, callback) {
+		dialog2 : function(url, w, h,buttonConfigs, callback) {
 
 			var opt ={
 				type : 2,
@@ -332,7 +332,7 @@ layui.define([ 'layer', 'table', 'form', 'element', 'notice' ], function(exports
 				content : [ url ],
 				shade : 0.6,
 				resize : true,
-				area : [ '64%', h ],
+				area : [ w, h ],
 				closeBtn : 0,
 				anim : 0,
 				isOutAnim : false,

+ 6 - 2
src/main/webapp/static/package/geo_server_context.js

@@ -27,9 +27,13 @@ GeoServerContext.prototype = {
         }
         return this.actions[key]
     },
-    stopActions(){
+    stopActions(currentKey){
         for(let key in this.actions){
-            if(!this.actions[key].obj.layerData["always"]){
+            let always = false;
+            if(this.actions[key].obj && this.actions[key].obj.layerData){
+                always = this.actions[key].obj.layerData["always"]
+            }
+            if(!always && currentKey != key){
                 this.actions[key].stop()
             }
         }

+ 11 - 131
src/main/webapp/static/package/publish_task_action.js

@@ -1,62 +1,23 @@
-function PublishTaskAction(context, id, ext){
+function PublishTaskAction(context, id){
     this.context = context
     this.id = id
-    this.selected = {}
-    this.popup = null
-    this.tipLayer = null
-    this.obj = new TaskLand({
-        url : context.local_wfs_path,
-        status : ext.status
-    })
 }
 
 PublishTaskAction.prototype = {
-    clickLock:false,
     startStatus : false,
-    createStatus : false,
     create(){
-        let that = this
-        this.obj.getTileLayer()
-        this.popup = new Popup({map: this.context.currentMap,
-            close(){
-                that.clickLock = false
-            },
-            buttons:[
-                {"name":"放大到合适","click":"fit"}
-            ],
-            listener: {
-                info(){
-                    window.location = "/field_point/info"
-                },
-                fit(popup, event, ext){
-                    that.context.currentView.fit(ext.getGeometry(),{duration:1000})
-                }
-            }
-        });
-        this.createStatus = true;
+
     },
     start(){
-        if(this.startStatus){
-            console.log("startStatus is true")
-            return
-        }
-        this.context.clicks[this.id] = this
-        this.context.currentMap.addLayer(this.obj.layerData.layer)
-        let source = this.obj.layerData.layer.getSource();
-        let that = this;
-
-        if(that.tipLayer){
-            that.context.currentMap.addLayer(that.tipLayer.vector)
-            that.context.currentView.fit(source.getExtent(),{duration:1000})
-        }else{
-            source.on("featuresloadend",function(){
-                that.tipLayer = new TipLayer({features: source.getFeatures(), zIndex:3, style: globalStyle.pointStyle })
-                that.context.currentMap.addLayer(that.tipLayer.vector)
-                that.context.currentView.fit(source.getExtent(),{duration:1000})
-            })
-        }
-
-        this.context.getSldStyleSign(this.obj.wmsData.params.STYLE)
+        // if(this.startStatus){
+        //     console.log("startStatus is true")
+        //     return
+        // }
+        layui.tool.dialog2("/task/publish_index","40%","50%",{buttons:["确定","取消"],funs:[
+            function(index) {
+                    var iframeBody = parent.layer.getChildFrame('body', index);
+                    iframeBody.find('#submit').click();
+            }]})
         this.startStatus = true;
     },
     stop(){
@@ -64,88 +25,7 @@ PublishTaskAction.prototype = {
             console.log("startStatus is false")
             return
         }
-        this.context.currentMap.removeLayer(this.obj.layerData.layer)
-        this.context.currentMap.removeLayer(this.tipLayer.vector)
-        console.log("tempVectorLayer cleared")
-        this.context.clicks[this.id] = null
         console.log("remove click")
-        this.popup._close()
-        console.log("close popup")
         this.startStatus = false;
-    },
-    addFieldPointOfTempLayer(TaskLand){
-        let geometry = this.context.wkt.readGeometry(TaskLand.wkt)
-        let extent = ol.extent.getCenter(geometry.getExtent());
-        let point = new ol.Feature({
-            geometry: new ol.geom.Point(extent)
-        });
-        point.set("isPoint",1)
-        point.set("id",TaskLand.id)
-        let source = this.tempVectorLayer.getSource();
-        source.addFeature(point)
     }
-    ,
-    landType:{
-        0:"其他",
-        1:"湿地",
-        2:"耕地",
-        3:"种植",
-        4:"林地",
-        5:"草地",
-        6:"水域",
-    },getInfoHtml(feature){
-        let html = ""
-        let data = {
-            "地块类别":this.landType[feature.get("gridcode")],
-            "地块图斑编号":feature.get("id"),
-            "地块面积(亩)":feature.get("area"),
-            "地块周长(米)":"10000",
-        }
-        for(let key in data){
-            html += "<div class='layui-row'><div class='lab' >"+key+"</div><div class='val' >"+data[key]+"</div></div>"
-        }
-        return html
-    }
-
 }
-
-function TaskLand(opt){
-
-    this.name = "TaskLand"
-
-    this.wmsData = {
-        url: opt.url,
-        projection: new ol.proj.Projection({
-            code: 'EPSG:4326',
-            units: 'degrees',
-            axisOrientation: 'neu'
-        }),
-        params:{
-            'LAYER': "wuhan:p_crop",
-            'STATUS': opt.status,
-            'STYLE': "wuhan:city_land",
-        }
-    }
-    this.layerData = {
-        layer : null,
-        source : null,
-        select : null,
-        always : false
-    }
-}
-
-TaskLand.prototype = {
-    getTileLayer(){
-        let url = this.wmsData.url +
-            "?service=WFS&version=1.0.0&request=GetFeature&typeName="+this.wmsData.params["LAYER"]+"&maxFeatures=1000&outputFormat=application/json"
-        url+="&Filter=(<Filter>" +
-            "<ogc:PropertyIsEqualTo  xmlns:ogc=\"http://www.opengis.net/ogc\" ><ogc:PropertyName>status</ogc:PropertyName>" +
-            "<ogc:Literal>"+this.wmsData.params["STATUS"]+"</ogc:Literal></ogc:PropertyIsEqualTo></Filter>)"
-        console.log(url)
-        let myGeoJsonLayer = new MyGeoJsonLayer({url: url, zIndex:2, style: this.style})
-        this.layerData.layer = myGeoJsonLayer.vector;
-    },style(f){
-        return globalStyle.cityLand(f.get("gridcode"))
-    },
-
-}

+ 49 - 0
src/test/java/CropClassPeriodExcel.java

@@ -0,0 +1,49 @@
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+@Data
+public class CropClassPeriodExcel {
+    @ExcelProperty(value = "作物名称", index = 0)
+    private String cropItemName;
+
+    @ExcelProperty(value = "分类", index = 1)
+    private String cropClass;
+
+    @ExcelProperty( index = 2)
+    private String period1;
+
+    @ExcelProperty( index = 3)
+    private String period2;
+
+    @ExcelProperty( index = 4)
+    private String period3;
+
+    @ExcelProperty( index = 5)
+    private String period4;
+
+    @ExcelProperty( index = 6)
+    private String period5;
+
+    @ExcelProperty( index = 7)
+    private String period6;
+
+    @ExcelProperty( index = 8)
+    private String period7;
+
+    @ExcelProperty( index = 9)
+    private String period8;
+
+    @ExcelProperty( index = 10)
+    private String period9;
+
+    @ExcelProperty( index = 11)
+    private String period10;
+
+    @ExcelProperty( index = 12)
+    private String period11;
+
+    @ExcelProperty( index = 13)
+    private String period12;
+
+}

+ 90 - 0
src/test/java/CropClassPeriodExcelListener.java

@@ -0,0 +1,90 @@
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.sysu.admin.controller.crop.class_item.CropClassItem;
+import com.sysu.admin.controller.crop.class_item.CropClassItemRepository;
+import com.sysu.admin.controller.crop.class_item_period.CropClassItemPeriod;
+import com.sysu.admin.controller.crop.class_item_period.CropClassItemPeriodRepository;
+import com.sysu.admin.controller.crop.class_item_period.PKRP;
+import com.sysu.admin.controller.crop.clazz.CropClass;
+import com.sysu.admin.controller.crop.clazz.CropClassRepository;
+import com.sysu.admin.controller.crop.period.CropPeriod;
+import com.sysu.admin.controller.crop.period.CropPeriodRepository;
+import org.apache.commons.lang3.StringUtils;
+
+public class CropClassPeriodExcelListener extends AnalysisEventListener<CropClassPeriodExcel> {
+
+    private CropClassItemPeriodRepository cropClassItemPeriodRepository;
+    private CropClassItemRepository cropClassItemRepository;
+    private CropClassRepository cropClassRepository;
+    private CropPeriodRepository cropPeriodRepository;
+
+    public CropClassPeriodExcelListener(CropClassItemPeriodRepository cropClassItemPeriodRepository, CropClassItemRepository cropClassItemRepository, CropClassRepository cropClassRepository, CropPeriodRepository cropPeriodRepository) {
+        this.cropClassItemPeriodRepository = cropClassItemPeriodRepository;
+        this.cropClassItemRepository = cropClassItemRepository;
+        this.cropClassRepository = cropClassRepository;
+        this.cropPeriodRepository = cropPeriodRepository;
+    }
+
+    @Override
+    public void invoke(CropClassPeriodExcel cropClassPeriodExcel, AnalysisContext analysisContext) {
+        if(StringUtils.isBlank(cropClassPeriodExcel.getCropItemName()) || StringUtils.isBlank(cropClassPeriodExcel.getCropClass())){
+            return;
+        }
+        CropClass cropClass = getCropClass(cropClassPeriodExcel.getCropClass());
+        CropClassItem cropClassItem = getCropClassItem(cropClassPeriodExcel.getCropItemName(), cropClass);
+        String[] periods = {
+                cropClassPeriodExcel.getPeriod1(),
+                cropClassPeriodExcel.getPeriod2(),
+                cropClassPeriodExcel.getPeriod3(),
+                cropClassPeriodExcel.getPeriod4(),
+                cropClassPeriodExcel.getPeriod5(),
+                cropClassPeriodExcel.getPeriod6(),
+                cropClassPeriodExcel.getPeriod7(),
+                cropClassPeriodExcel.getPeriod8(),
+                cropClassPeriodExcel.getPeriod9(),
+                cropClassPeriodExcel.getPeriod10(),
+                cropClassPeriodExcel.getPeriod11(),
+                cropClassPeriodExcel.getPeriod12(),
+        };
+        for(String period : periods){
+            if(StringUtils.isNotBlank(period)){
+                CropPeriod cropPeriod = getCropPeriod(period);
+                PKRP pkrp = new PKRP().cropItemId(cropClassItem.getClassId()).periodId(cropPeriod.getId());
+                CropClassItemPeriod cropClassItemPeriod = new CropClassItemPeriod().setPk(pkrp);
+                cropClassItemPeriodRepository.saveAndFlush(cropClassItemPeriod);
+            }
+        }
+    }
+
+    private CropClass getCropClass(String name){
+        CropClass bean = cropClassRepository.findByName(name);
+        if(bean == null){
+            bean = new CropClass().setName(name);
+            bean = cropClassRepository.saveAndFlush(bean);
+        }
+        return bean;
+    }
+
+    private CropClassItem getCropClassItem(String name,  CropClass cropClass){
+        CropClassItem bean = cropClassItemRepository.findByName(name);
+        if(bean == null){
+            bean = new CropClassItem().setName(name).setClassId(cropClass.getId());
+            bean = cropClassItemRepository.saveAndFlush(bean);
+        }
+        return bean;
+    }
+
+    private CropPeriod getCropPeriod(String name){
+        CropPeriod bean = cropPeriodRepository.findByName(name);
+        if(bean == null){
+            bean = new CropPeriod().setName(name);
+            bean = cropPeriodRepository.saveAndFlush(bean);
+        }
+        return bean;
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+
+    }
+}

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

@@ -0,0 +1,48 @@
+import com.alibaba.excel.EasyExcel;
+import com.sysu.admin.MarkApplication;
+import com.sysu.admin.api.base.BaseTest;
+import com.sysu.admin.controller.crop.class_item.CropClassItemRepository;
+import com.sysu.admin.controller.crop.class_item_period.CropClassItemPeriodRepository;
+import com.sysu.admin.controller.crop.clazz.CropClassRepository;
+import com.sysu.admin.controller.crop.period.CropPeriodRepository;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = MarkApplication.class)
+public class CropClassPeriodTest extends BaseTest {
+
+    @Autowired
+    private CropClassItemPeriodRepository cropClassItemPeriodRepository;
+    @Autowired
+    private CropClassItemRepository cropClassItemRepository;
+    @Autowired
+    private CropClassRepository cropClassRepository;
+    @Autowired
+    private CropPeriodRepository cropPeriodRepository;
+
+    @Test
+    public void importCropClassPeriod(){
+        FileInputStream file = null;
+        try {
+            file = new FileInputStream(new File("C:\\Users\\Administrator\\Documents\\WeChat Files\\wxid_0rs9qy7rezsh22\\FileStorage\\File\\2022-11",
+                    "作物种类及生长期(1).xlsx"));
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        }
+        EasyExcel.read(file, CropClassPeriodExcel.class,
+                new CropClassPeriodExcelListener(
+                    cropClassItemPeriodRepository,cropClassItemRepository,cropClassRepository,cropPeriodRepository
+                )
+        ).doReadAllSync();
+        System.out.println("导入完成");
+    }
+
+}