Browse Source

主题管理

xiaoqiao 1 year ago
parent
commit
81bbc0b9e7
27 changed files with 2850 additions and 983 deletions
  1. 749 468
      lib/华北油田Ai检索.PDM
  2. 749 468
      lib/华北油田Ai检索.pdb
  3. 1 0
      src/main/java/com/bowintek/practice/config/WebConfiguration.java
  4. 8 3
      src/main/java/com/bowintek/practice/controller/AccountController.java
  5. 12 3
      src/main/java/com/bowintek/practice/controller/SubjectController.java
  6. 30 0
      src/main/java/com/bowintek/practice/mapper/SrSubjectfieldtagMapper.java
  7. 30 0
      src/main/java/com/bowintek/practice/mapper/SrTagMapper.java
  8. 2 0
      src/main/java/com/bowintek/practice/mapper/cquery/SubjectCQuery.java
  9. 33 0
      src/main/java/com/bowintek/practice/model/SrSubjectfieldtag.java
  10. 409 0
      src/main/java/com/bowintek/practice/model/SrSubjectfieldtagExample.java
  11. 23 0
      src/main/java/com/bowintek/practice/model/SrTag.java
  12. 339 0
      src/main/java/com/bowintek/practice/model/SrTagExample.java
  13. 42 8
      src/main/java/com/bowintek/practice/services/impl/SubjectServiceImpl.java
  14. 5 2
      src/main/java/com/bowintek/practice/services/service/SubjectService.java
  15. 6 0
      src/main/java/com/bowintek/practice/vo/SubjectfieldVo.java
  16. 2 3
      src/main/resources/generatorConfig.xml
  17. 181 0
      src/main/resources/mapping/SrSubjectfieldtagMapper.xml
  18. 164 0
      src/main/resources/mapping/SrTagMapper.xml
  19. 11 0
      src/main/resources/mapping/cquery/SubjectCQuery.xml
  20. BIN
      src/main/resources/static/doc/template/主题字段导入模板.xlsx
  21. 1 1
      target/classes/application-user.yml
  22. BIN
      target/classes/com/bowintek/practice/config/WebConfiguration.class
  23. BIN
      target/classes/com/bowintek/practice/controller/AccountController.class
  24. 2 3
      target/classes/generatorConfig.xml
  25. 6 1
      vue/src/views/subject/edit.vue
  26. 43 22
      vue/src/views/subject/fieldedit.vue
  27. 2 1
      vue/src/views/subject/model.ts

File diff suppressed because it is too large
+ 749 - 468
lib/华北油田Ai检索.PDM


File diff suppressed because it is too large
+ 749 - 468
lib/华北油田Ai检索.pdb


+ 1 - 0
src/main/java/com/bowintek/practice/config/WebConfiguration.java

@@ -65,6 +65,7 @@ public class WebConfiguration implements WebMvcConfigurer {
         excludePath.add("/web/**");  //静态资源
         excludePath.add("/doc/**");  //静态资源
         excludePath.add("/");  //首页跳转
+        excludePath.add("/api/account/testpost");//单点登录
         registry.addInterceptor(tokenInterceptor)
                 .addPathPatterns("/**")
                 .excludePathPatterns(excludePath);

+ 8 - 3
src/main/java/com/bowintek/practice/controller/AccountController.java

@@ -55,6 +55,11 @@ public class AccountController {
         return RespGenerstor.success(item);
 
     }
+    @ResponseBody
+    @GetMapping("/testpost")
+    public BaseResponse<String> testpost(HttpServletResponse response, HttpServletRequest request) {
+        return RespGenerstor.success("11111");
+    }
 
     @ResponseBody
     @PostMapping("/login")
@@ -67,10 +72,10 @@ public class AccountController {
             throw new BaseException(BaseErrorEnum.USER_PASSWORD_ERROR);
 
         user.token = TokenUtils.sign(user.getUserId() + '|' + user.getUserTypeId());
-        user.dataRangeList =new ArrayList<>();// userService.getUserDataRange(user.getUserId());
+        user.dataRangeList = new ArrayList<>();// userService.getUserDataRange(user.getUserId());
         user.permissionList = accountService.getUserPerms(user.getUserId());
 
-        logService.save("登录","","登录",user.userId);
+        logService.save("登录", "", "登录", user.userId);
 
         return RespGenerstor.success(user);
 
@@ -92,7 +97,7 @@ public class AccountController {
 
         ObjectNode jObject = jsonMapper.jsonToObject(json, ObjectNode.class);*/
 
-       /* var Menus = accountService.getSysMenu("T01");*/
+        /* var Menus = accountService.getSysMenu("T01");*/
 
         var Menus = accountService.getUserMenuList(accountService.getLoginUserID());
 

+ 12 - 3
src/main/java/com/bowintek/practice/controller/SubjectController.java

@@ -6,6 +6,7 @@ import com.bowintek.practice.filter.exception.BaseResponse;
 import com.bowintek.practice.filter.exception.RespGenerstor;
 import com.bowintek.practice.model.SrSubject;
 import com.bowintek.practice.model.SrSubjectfield;
+import com.bowintek.practice.model.SrTag;
 import com.bowintek.practice.services.service.AccountService;
 import com.bowintek.practice.services.service.SubjectService;
 import com.bowintek.practice.services.service.UserService;
@@ -56,7 +57,7 @@ public class SubjectController {
         int count = 0;
         try {
             SrSubject dataModel = reqMap.getObject("dataModel", SrSubject.class);
-            List<SrSubjectfield> fieldList = reqMap.getJSONArray("fieldList").toJavaList(SrSubjectfield.class);
+            List<SubjectfieldVo> fieldList = reqMap.getJSONArray("fieldList").toJavaList(SubjectfieldVo.class);
             count = subjectService.saveSubject(dataModel, fieldList, accountService.getLoginUserID());
         } catch (Exception e) {
             return RespGenerstor.fail("-1", "程序异常:" + e.getMessage());
@@ -74,13 +75,21 @@ public class SubjectController {
 
     @ResponseBody
     @GetMapping("/getFieldList")
-    public BaseResponse<List<SrSubjectfield>> getFieldList(String subjectId) throws Exception {
+    public BaseResponse<List<SubjectfieldVo>> getFieldList(String subjectId) throws Exception {
 
-        List<SrSubjectfield> result = subjectService.getFieldList(subjectId);
+        List<SubjectfieldVo> result = subjectService.getFieldList(subjectId);
 
         return RespGenerstor.success(result);
     }
 
+    @ResponseBody
+    @GetMapping("/getTagList")
+    public BaseResponse<List<SrTag>> getTagList() {
+
+        List<SrTag> result = subjectService.getTagList();
+
+        return RespGenerstor.success(result);
+    }
     @ResponseBody
     @PostMapping("/delete")
     public BaseResponse delete(@RequestBody List<String> idList) {

+ 30 - 0
src/main/java/com/bowintek/practice/mapper/SrSubjectfieldtagMapper.java

@@ -0,0 +1,30 @@
+package com.bowintek.practice.mapper;
+
+import com.bowintek.practice.model.SrSubjectfieldtag;
+import com.bowintek.practice.model.SrSubjectfieldtagExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+public interface SrSubjectfieldtagMapper {
+    long countByExample(SrSubjectfieldtagExample example);
+
+    int deleteByExample(SrSubjectfieldtagExample example);
+
+    int deleteByPrimaryKey(String fieldTagId);
+
+    int insert(SrSubjectfieldtag row);
+
+    int insertSelective(SrSubjectfieldtag row);
+
+    List<SrSubjectfieldtag> selectByExample(SrSubjectfieldtagExample example);
+
+    SrSubjectfieldtag selectByPrimaryKey(String fieldTagId);
+
+    int updateByExampleSelective(@Param("row") SrSubjectfieldtag row, @Param("example") SrSubjectfieldtagExample example);
+
+    int updateByExample(@Param("row") SrSubjectfieldtag row, @Param("example") SrSubjectfieldtagExample example);
+
+    int updateByPrimaryKeySelective(SrSubjectfieldtag row);
+
+    int updateByPrimaryKey(SrSubjectfieldtag row);
+}

+ 30 - 0
src/main/java/com/bowintek/practice/mapper/SrTagMapper.java

@@ -0,0 +1,30 @@
+package com.bowintek.practice.mapper;
+
+import com.bowintek.practice.model.SrTag;
+import com.bowintek.practice.model.SrTagExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+public interface SrTagMapper {
+    long countByExample(SrTagExample example);
+
+    int deleteByExample(SrTagExample example);
+
+    int deleteByPrimaryKey(String tagId);
+
+    int insert(SrTag row);
+
+    int insertSelective(SrTag row);
+
+    List<SrTag> selectByExample(SrTagExample example);
+
+    SrTag selectByPrimaryKey(String tagId);
+
+    int updateByExampleSelective(@Param("row") SrTag row, @Param("example") SrTagExample example);
+
+    int updateByExample(@Param("row") SrTag row, @Param("example") SrTagExample example);
+
+    int updateByPrimaryKeySelective(SrTag row);
+
+    int updateByPrimaryKey(SrTag row);
+}

+ 2 - 0
src/main/java/com/bowintek/practice/mapper/cquery/SubjectCQuery.java

@@ -1,6 +1,7 @@
 package com.bowintek.practice.mapper.cquery;
 
 import com.bowintek.practice.model.SrSubject;
+import com.bowintek.practice.vo.SubjectfieldVo;
 
 import java.util.HashMap;
 import java.util.List;
@@ -9,4 +10,5 @@ public interface SubjectCQuery {
     List<SrSubject> getList(String subjectName,String tabName,String tabCode,String subjectIdsString);
     List<HashMap<String,Object>> getListToHashMap(String tabName);
     List<HashMap<String,Object>> getSubjectFieldToHashMapList(List<String> subIdList);
+    List<SubjectfieldVo> getFieldList(String subId);
 }

+ 33 - 0
src/main/java/com/bowintek/practice/model/SrSubjectfieldtag.java

@@ -0,0 +1,33 @@
+package com.bowintek.practice.model;
+
+public class SrSubjectfieldtag {
+    private String fieldTagId;
+
+    private String fieldId;
+
+    private String tagId;
+
+    public String getFieldTagId() {
+        return fieldTagId;
+    }
+
+    public void setFieldTagId(String fieldTagId) {
+        this.fieldTagId = fieldTagId == null ? null : fieldTagId.trim();
+    }
+
+    public String getFieldId() {
+        return fieldId;
+    }
+
+    public void setFieldId(String fieldId) {
+        this.fieldId = fieldId == null ? null : fieldId.trim();
+    }
+
+    public String getTagId() {
+        return tagId;
+    }
+
+    public void setTagId(String tagId) {
+        this.tagId = tagId == null ? null : tagId.trim();
+    }
+}

+ 409 - 0
src/main/java/com/bowintek/practice/model/SrSubjectfieldtagExample.java

@@ -0,0 +1,409 @@
+package com.bowintek.practice.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class SrSubjectfieldtagExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    public SrSubjectfieldtagExample() {
+        oredCriteria = new ArrayList<>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andFieldTagIdIsNull() {
+            addCriterion("fieldTagId is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldTagIdIsNotNull() {
+            addCriterion("fieldTagId is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldTagIdEqualTo(String value) {
+            addCriterion("fieldTagId =", value, "fieldTagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldTagIdNotEqualTo(String value) {
+            addCriterion("fieldTagId <>", value, "fieldTagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldTagIdGreaterThan(String value) {
+            addCriterion("fieldTagId >", value, "fieldTagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldTagIdGreaterThanOrEqualTo(String value) {
+            addCriterion("fieldTagId >=", value, "fieldTagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldTagIdLessThan(String value) {
+            addCriterion("fieldTagId <", value, "fieldTagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldTagIdLessThanOrEqualTo(String value) {
+            addCriterion("fieldTagId <=", value, "fieldTagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldTagIdLike(String value) {
+            addCriterion("fieldTagId like", value, "fieldTagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldTagIdNotLike(String value) {
+            addCriterion("fieldTagId not like", value, "fieldTagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldTagIdIn(List<String> values) {
+            addCriterion("fieldTagId in", values, "fieldTagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldTagIdNotIn(List<String> values) {
+            addCriterion("fieldTagId not in", values, "fieldTagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldTagIdBetween(String value1, String value2) {
+            addCriterion("fieldTagId between", value1, value2, "fieldTagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldTagIdNotBetween(String value1, String value2) {
+            addCriterion("fieldTagId not between", value1, value2, "fieldTagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldIdIsNull() {
+            addCriterion("fieldId is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldIdIsNotNull() {
+            addCriterion("fieldId is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldIdEqualTo(String value) {
+            addCriterion("fieldId =", value, "fieldId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldIdNotEqualTo(String value) {
+            addCriterion("fieldId <>", value, "fieldId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldIdGreaterThan(String value) {
+            addCriterion("fieldId >", value, "fieldId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldIdGreaterThanOrEqualTo(String value) {
+            addCriterion("fieldId >=", value, "fieldId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldIdLessThan(String value) {
+            addCriterion("fieldId <", value, "fieldId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldIdLessThanOrEqualTo(String value) {
+            addCriterion("fieldId <=", value, "fieldId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldIdLike(String value) {
+            addCriterion("fieldId like", value, "fieldId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldIdNotLike(String value) {
+            addCriterion("fieldId not like", value, "fieldId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldIdIn(List<String> values) {
+            addCriterion("fieldId in", values, "fieldId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldIdNotIn(List<String> values) {
+            addCriterion("fieldId not in", values, "fieldId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldIdBetween(String value1, String value2) {
+            addCriterion("fieldId between", value1, value2, "fieldId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldIdNotBetween(String value1, String value2) {
+            addCriterion("fieldId not between", value1, value2, "fieldId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdIsNull() {
+            addCriterion("tagId is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdIsNotNull() {
+            addCriterion("tagId is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdEqualTo(String value) {
+            addCriterion("tagId =", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdNotEqualTo(String value) {
+            addCriterion("tagId <>", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdGreaterThan(String value) {
+            addCriterion("tagId >", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdGreaterThanOrEqualTo(String value) {
+            addCriterion("tagId >=", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdLessThan(String value) {
+            addCriterion("tagId <", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdLessThanOrEqualTo(String value) {
+            addCriterion("tagId <=", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdLike(String value) {
+            addCriterion("tagId like", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdNotLike(String value) {
+            addCriterion("tagId not like", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdIn(List<String> values) {
+            addCriterion("tagId in", values, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdNotIn(List<String> values) {
+            addCriterion("tagId not in", values, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdBetween(String value1, String value2) {
+            addCriterion("tagId between", value1, value2, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdNotBetween(String value1, String value2) {
+            addCriterion("tagId not between", value1, value2, "tagId");
+            return (Criteria) this;
+        }
+    }
+
+    public static class Criteria extends GeneratedCriteria {
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}

+ 23 - 0
src/main/java/com/bowintek/practice/model/SrTag.java

@@ -0,0 +1,23 @@
+package com.bowintek.practice.model;
+
+public class SrTag {
+    private String tagId;
+
+    private String tagName;
+
+    public String getTagId() {
+        return tagId;
+    }
+
+    public void setTagId(String tagId) {
+        this.tagId = tagId == null ? null : tagId.trim();
+    }
+
+    public String getTagName() {
+        return tagName;
+    }
+
+    public void setTagName(String tagName) {
+        this.tagName = tagName == null ? null : tagName.trim();
+    }
+}

+ 339 - 0
src/main/java/com/bowintek/practice/model/SrTagExample.java

@@ -0,0 +1,339 @@
+package com.bowintek.practice.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class SrTagExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    public SrTagExample() {
+        oredCriteria = new ArrayList<>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andTagIdIsNull() {
+            addCriterion("tagId is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdIsNotNull() {
+            addCriterion("tagId is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdEqualTo(String value) {
+            addCriterion("tagId =", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdNotEqualTo(String value) {
+            addCriterion("tagId <>", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdGreaterThan(String value) {
+            addCriterion("tagId >", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdGreaterThanOrEqualTo(String value) {
+            addCriterion("tagId >=", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdLessThan(String value) {
+            addCriterion("tagId <", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdLessThanOrEqualTo(String value) {
+            addCriterion("tagId <=", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdLike(String value) {
+            addCriterion("tagId like", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdNotLike(String value) {
+            addCriterion("tagId not like", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdIn(List<String> values) {
+            addCriterion("tagId in", values, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdNotIn(List<String> values) {
+            addCriterion("tagId not in", values, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdBetween(String value1, String value2) {
+            addCriterion("tagId between", value1, value2, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdNotBetween(String value1, String value2) {
+            addCriterion("tagId not between", value1, value2, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagNameIsNull() {
+            addCriterion("tagName is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagNameIsNotNull() {
+            addCriterion("tagName is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagNameEqualTo(String value) {
+            addCriterion("tagName =", value, "tagName");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagNameNotEqualTo(String value) {
+            addCriterion("tagName <>", value, "tagName");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagNameGreaterThan(String value) {
+            addCriterion("tagName >", value, "tagName");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagNameGreaterThanOrEqualTo(String value) {
+            addCriterion("tagName >=", value, "tagName");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagNameLessThan(String value) {
+            addCriterion("tagName <", value, "tagName");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagNameLessThanOrEqualTo(String value) {
+            addCriterion("tagName <=", value, "tagName");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagNameLike(String value) {
+            addCriterion("tagName like", value, "tagName");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagNameNotLike(String value) {
+            addCriterion("tagName not like", value, "tagName");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagNameIn(List<String> values) {
+            addCriterion("tagName in", values, "tagName");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagNameNotIn(List<String> values) {
+            addCriterion("tagName not in", values, "tagName");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagNameBetween(String value1, String value2) {
+            addCriterion("tagName between", value1, value2, "tagName");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagNameNotBetween(String value1, String value2) {
+            addCriterion("tagName not between", value1, value2, "tagName");
+            return (Criteria) this;
+        }
+    }
+
+    public static class Criteria extends GeneratedCriteria {
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}

+ 42 - 8
src/main/java/com/bowintek/practice/services/impl/SubjectServiceImpl.java

@@ -3,6 +3,8 @@ package com.bowintek.practice.services.impl;
 import com.bowintek.practice.filter.exception.BaseException;
 import com.bowintek.practice.mapper.SrSubjectMapper;
 import com.bowintek.practice.mapper.SrSubjectfieldMapper;
+import com.bowintek.practice.mapper.SrSubjectfieldtagMapper;
+import com.bowintek.practice.mapper.SrTagMapper;
 import com.bowintek.practice.mapper.cquery.SubjectCQuery;
 import com.bowintek.practice.model.*;
 import com.bowintek.practice.services.service.SubjectService;
@@ -15,7 +17,7 @@ import com.github.pagehelper.PageInfo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.UUID;
@@ -28,6 +30,10 @@ public class SubjectServiceImpl implements SubjectService {
     @Autowired
     private SrSubjectfieldMapper subjectfieldMapper;
     @Autowired
+    private SrSubjectfieldtagMapper subjectfieldtagMapper;
+    @Autowired
+    private SrTagMapper tagMapper;
+    @Autowired
     private SubjectCQuery subjectCQuery;
     @Autowired
     private StringUtils stringUtils;
@@ -52,7 +58,7 @@ public class SubjectServiceImpl implements SubjectService {
     }
 
     @Override
-    public int saveSubject(SrSubject model, List<SrSubjectfield> fieldList, String userId) {
+    public int saveSubject(SrSubject model, List<SubjectfieldVo> fieldList, String userId) {
 
         if (model.getIsReferences() == 0) {
             model.setExecSql(model.getTabCode());
@@ -78,13 +84,24 @@ public class SubjectServiceImpl implements SubjectService {
             List<SrSubjectfield> dbList = subjectfieldMapper.selectByExample(example);
             List<String> ids = fieldList.stream().map(x -> x.getFieldId()).collect(Collectors.toList());
 
+            //删除字段前先删除关联标签
+            SrSubjectfieldtagExample ftExp = new SrSubjectfieldtagExample();
+            ftExp.or().andFieldIdIn(dbList.stream().map(x -> x.getFieldId()).collect(Collectors.toList()));
+            subjectfieldtagMapper.deleteByExample(ftExp);
+
             criteria.andFieldIdNotIn(ids);
             subjectfieldMapper.deleteByExample(example);
+
+            List<SrTag> tagList = tagMapper.selectByExample(null);
             fieldList.stream().forEach(x -> {
-                long count = dbList.stream().filter(f -> f.getFieldId() == x.getFieldId()).count();
+                long count = dbList.stream().filter(f -> f.getFieldId().equals(x.getFieldId())).count();
                 //不是外键字段编码和显示别名需一致
                 x.setFieldAlias(x.getIsForeignKey() == 0 ? x.getFieldCode() : x.getFieldAlias());
                 if (count > 0) {
+                    SrSubjectfieldtagExample fieldTagExp = new SrSubjectfieldtagExample();
+                    fieldTagExp.or().andFieldIdEqualTo(x.getFieldId());
+                    subjectfieldtagMapper.deleteByExample(fieldTagExp);
+
                     subjectfieldMapper.updateByPrimaryKeySelective(x);
                 } else {
                     x.setSubId(model.getSubId());
@@ -92,17 +109,29 @@ public class SubjectServiceImpl implements SubjectService {
                     x.setStatus(1);
                     subjectfieldMapper.insertSelective(x);
                 }
+                //新加标签
+                Arrays.stream(x.getTagList()).forEach(tag -> {
+                    SrTag dbTag = tagList.stream().filter(f -> f.getTagName().equals(tag.trim())).findFirst().orElse(null);
+                    if (dbTag == null) {
+                        dbTag = new SrTag();
+                        dbTag.setTagName(tag.trim());
+                        dbTag.setTagId(UUID.randomUUID().toString());
+                        tagMapper.insert(dbTag);
+                    }
+                    SrSubjectfieldtag row = new SrSubjectfieldtag();
+                    row.setFieldId(x.getFieldId());
+                    row.setTagId(dbTag.getTagId());
+                    row.setFieldTagId(UUID.randomUUID().toString());
+                    subjectfieldtagMapper.insert(row);
+                });
             });
         }
         return result;
     }
 
     @Override
-    public List<SrSubjectfield> getFieldList(String subjectId) {
-        SrSubjectfieldExample example = new SrSubjectfieldExample();
-        SrSubjectfieldExample.Criteria criteria = example.or();
-        criteria.andSubIdEqualTo(subjectId);
-        List<SrSubjectfield> dbList = subjectfieldMapper.selectByExample(example);
+    public List<SubjectfieldVo> getFieldList(String subjectId) {
+        List<SubjectfieldVo> dbList = subjectCQuery.getFieldList(subjectId);
         return dbList;
     }
 
@@ -123,6 +152,11 @@ public class SubjectServiceImpl implements SubjectService {
         return 1;
     }
 
+    @Override
+    public List<SrTag> getTagList() {
+        return tagMapper.selectByExample(null);
+    }
+
     @Override
     public List<SubjectfieldVo> importData(List<SubjectfieldVo> dataList, String loginUserID) {
 

+ 5 - 2
src/main/java/com/bowintek/practice/services/service/SubjectService.java

@@ -2,6 +2,7 @@ package com.bowintek.practice.services.service;
 
 import com.bowintek.practice.model.SrSubject;
 import com.bowintek.practice.model.SrSubjectfield;
+import com.bowintek.practice.model.SrTag;
 import com.bowintek.practice.vo.SubjectfieldVo;
 import com.bowintek.practice.vo.practicebase.ImportPositionModel;
 import com.github.pagehelper.PageInfo;
@@ -14,14 +15,16 @@ public interface SubjectService {
                                 String subjectName, String tabName, String tabCode,List<String> idList);
 
     int saveSubject(SrSubject model,
-                         List<SrSubjectfield>  fieldList,
+                         List<SubjectfieldVo>  fieldList,
                          String userId);
 
     SrSubject getSubject(String subjectId);
 
-    List<SrSubjectfield> getFieldList(String subjectId);
+    List<SubjectfieldVo> getFieldList(String subjectId);
 
     int delete(List<String> idList);
 
     List<SubjectfieldVo> importData(List<SubjectfieldVo> dataList, String loginUserID);
+
+    List<SrTag> getTagList();
 }

+ 6 - 0
src/main/java/com/bowintek/practice/vo/SubjectfieldVo.java

@@ -10,4 +10,10 @@ public class SubjectfieldVo extends SrSubjectfield {
     private String isSearchFieldText;
     private String isForeignKeyText;
     private String errorMessage;
+    private String tags;
+    private String[] tagList;
+
+    public String[] getTagList() {
+        return tags == null ? tagList == null ? new String[]{} : tagList : tags.split("[,,]");
+    }
 }

+ 2 - 3
src/main/resources/generatorConfig.xml

@@ -120,8 +120,7 @@
             <columnOverride column="StandardMajorID" javaType="java.lang.Integer" jdbcType="INTEGER" />
             <table schema="" tableName="Sys_Log"><property name="useActualColumnNames" value="true"/></table>
         </table>-->
-        <table schema="" tableName="sr_subject"><property name="useActualColumnNames" value="true"/></table>
-        <table schema="" tableName="sr_saerchTemp"><property name="useActualColumnNames" value="true"/></table>
-        <table schema="" tableName="sr_subjectField"><property name="useActualColumnNames" value="true"/></table>
+        <table schema="" tableName="sr_tag"><property name="useActualColumnNames" value="true"/></table>
+        <table schema="" tableName="sr_subjectFieldTag"><property name="useActualColumnNames" value="true"/></table>
     </context>
 </generatorConfiguration>

+ 181 - 0
src/main/resources/mapping/SrSubjectfieldtagMapper.xml

@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.bowintek.practice.mapper.SrSubjectfieldtagMapper">
+  <resultMap id="BaseResultMap" type="com.bowintek.practice.model.SrSubjectfieldtag">
+    <id column="fieldTagId" jdbcType="VARCHAR" property="fieldTagId" />
+    <result column="fieldId" jdbcType="VARCHAR" property="fieldId" />
+    <result column="tagId" jdbcType="VARCHAR" property="tagId" />
+  </resultMap>
+  <sql id="Example_Where_Clause">
+    <where>
+      <foreach collection="oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause">
+    <where>
+      <foreach collection="example.oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    fieldTagId, fieldId, tagId
+  </sql>
+  <select id="selectByExample" parameterType="com.bowintek.practice.model.SrSubjectfieldtagExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from sr_subjectfieldtag
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
+    select 
+    <include refid="Base_Column_List" />
+    from sr_subjectfieldtag
+    where fieldTagId = #{fieldTagId,jdbcType=VARCHAR}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
+    delete from sr_subjectfieldtag
+    where fieldTagId = #{fieldTagId,jdbcType=VARCHAR}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.bowintek.practice.model.SrSubjectfieldtagExample">
+    delete from sr_subjectfieldtag
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.bowintek.practice.model.SrSubjectfieldtag">
+    insert into sr_subjectfieldtag (fieldTagId, fieldId, tagId
+      )
+    values (#{fieldTagId,jdbcType=VARCHAR}, #{fieldId,jdbcType=VARCHAR}, #{tagId,jdbcType=VARCHAR}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.bowintek.practice.model.SrSubjectfieldtag">
+    insert into sr_subjectfieldtag
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="fieldTagId != null">
+        fieldTagId,
+      </if>
+      <if test="fieldId != null">
+        fieldId,
+      </if>
+      <if test="tagId != null">
+        tagId,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="fieldTagId != null">
+        #{fieldTagId,jdbcType=VARCHAR},
+      </if>
+      <if test="fieldId != null">
+        #{fieldId,jdbcType=VARCHAR},
+      </if>
+      <if test="tagId != null">
+        #{tagId,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.bowintek.practice.model.SrSubjectfieldtagExample" resultType="java.lang.Long">
+    select count(*) from sr_subjectfieldtag
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    update sr_subjectfieldtag
+    <set>
+      <if test="row.fieldTagId != null">
+        fieldTagId = #{row.fieldTagId,jdbcType=VARCHAR},
+      </if>
+      <if test="row.fieldId != null">
+        fieldId = #{row.fieldId,jdbcType=VARCHAR},
+      </if>
+      <if test="row.tagId != null">
+        tagId = #{row.tagId,jdbcType=VARCHAR},
+      </if>
+    </set>
+    <if test="example != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    update sr_subjectfieldtag
+    set fieldTagId = #{row.fieldTagId,jdbcType=VARCHAR},
+      fieldId = #{row.fieldId,jdbcType=VARCHAR},
+      tagId = #{row.tagId,jdbcType=VARCHAR}
+    <if test="example != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.bowintek.practice.model.SrSubjectfieldtag">
+    update sr_subjectfieldtag
+    <set>
+      <if test="fieldId != null">
+        fieldId = #{fieldId,jdbcType=VARCHAR},
+      </if>
+      <if test="tagId != null">
+        tagId = #{tagId,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where fieldTagId = #{fieldTagId,jdbcType=VARCHAR}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.bowintek.practice.model.SrSubjectfieldtag">
+    update sr_subjectfieldtag
+    set fieldId = #{fieldId,jdbcType=VARCHAR},
+      tagId = #{tagId,jdbcType=VARCHAR}
+    where fieldTagId = #{fieldTagId,jdbcType=VARCHAR}
+  </update>
+</mapper>

+ 164 - 0
src/main/resources/mapping/SrTagMapper.xml

@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.bowintek.practice.mapper.SrTagMapper">
+  <resultMap id="BaseResultMap" type="com.bowintek.practice.model.SrTag">
+    <id column="tagId" jdbcType="VARCHAR" property="tagId" />
+    <result column="tagName" jdbcType="VARCHAR" property="tagName" />
+  </resultMap>
+  <sql id="Example_Where_Clause">
+    <where>
+      <foreach collection="oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause">
+    <where>
+      <foreach collection="example.oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    tagId, tagName
+  </sql>
+  <select id="selectByExample" parameterType="com.bowintek.practice.model.SrTagExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from sr_tag
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
+    select 
+    <include refid="Base_Column_List" />
+    from sr_tag
+    where tagId = #{tagId,jdbcType=VARCHAR}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
+    delete from sr_tag
+    where tagId = #{tagId,jdbcType=VARCHAR}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.bowintek.practice.model.SrTagExample">
+    delete from sr_tag
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.bowintek.practice.model.SrTag">
+    insert into sr_tag (tagId, tagName)
+    values (#{tagId,jdbcType=VARCHAR}, #{tagName,jdbcType=VARCHAR})
+  </insert>
+  <insert id="insertSelective" parameterType="com.bowintek.practice.model.SrTag">
+    insert into sr_tag
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="tagId != null">
+        tagId,
+      </if>
+      <if test="tagName != null">
+        tagName,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="tagId != null">
+        #{tagId,jdbcType=VARCHAR},
+      </if>
+      <if test="tagName != null">
+        #{tagName,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.bowintek.practice.model.SrTagExample" resultType="java.lang.Long">
+    select count(*) from sr_tag
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    update sr_tag
+    <set>
+      <if test="row.tagId != null">
+        tagId = #{row.tagId,jdbcType=VARCHAR},
+      </if>
+      <if test="row.tagName != null">
+        tagName = #{row.tagName,jdbcType=VARCHAR},
+      </if>
+    </set>
+    <if test="example != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    update sr_tag
+    set tagId = #{row.tagId,jdbcType=VARCHAR},
+      tagName = #{row.tagName,jdbcType=VARCHAR}
+    <if test="example != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.bowintek.practice.model.SrTag">
+    update sr_tag
+    <set>
+      <if test="tagName != null">
+        tagName = #{tagName,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where tagId = #{tagId,jdbcType=VARCHAR}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.bowintek.practice.model.SrTag">
+    update sr_tag
+    set tagName = #{tagName,jdbcType=VARCHAR}
+    where tagId = #{tagId,jdbcType=VARCHAR}
+  </update>
+</mapper>

+ 11 - 0
src/main/resources/mapping/cquery/SubjectCQuery.xml

@@ -35,4 +35,15 @@
         </if>
         order by sub.tabName
     </select>
+    <select id="getFieldList" resultType="com.bowintek.practice.vo.SubjectfieldVo">
+        select *, ftag.tags
+        from sr_subjectfield field
+                 left join (
+            select ft.fieldId, GROUP_CONCAT(t.tagName) tags
+            from sr_subjectfieldtag ft
+                     inner join sr_tag t on ft.tagId = t.tagId
+            group by ft.fieldId
+        ) ftag on field.fieldId = ftag.fieldId
+        where field.subId = #{subId}
+    </select>
 </mapper>

BIN
src/main/resources/static/doc/template/主题字段导入模板.xlsx


+ 1 - 1
target/classes/application-user.yml

@@ -1,3 +1,3 @@
 spring:
   resources:
-    static-locations: file:D:/工作项目/学校党建管理系统/code/gt_partybuild/src/main/resources/static/
+    static-locations: file:D:/我的文件/博颖项目/华北油田AI检索/smartsearch/src/main/resources/static/

BIN
target/classes/com/bowintek/practice/config/WebConfiguration.class


BIN
target/classes/com/bowintek/practice/controller/AccountController.class


+ 2 - 3
target/classes/generatorConfig.xml

@@ -120,8 +120,7 @@
             <columnOverride column="StandardMajorID" javaType="java.lang.Integer" jdbcType="INTEGER" />
             <table schema="" tableName="Sys_Log"><property name="useActualColumnNames" value="true"/></table>
         </table>-->
-        <table schema="" tableName="sr_subject"><property name="useActualColumnNames" value="true"/></table>
-        <table schema="" tableName="sr_saerchTemp"><property name="useActualColumnNames" value="true"/></table>
-        <table schema="" tableName="sr_subjectField"><property name="useActualColumnNames" value="true"/></table>
+        <table schema="" tableName="sr_tag"><property name="useActualColumnNames" value="true"/></table>
+        <table schema="" tableName="sr_subjectFieldTag"><property name="useActualColumnNames" value="true"/></table>
     </context>
 </generatorConfiguration>

+ 6 - 1
vue/src/views/subject/edit.vue

@@ -165,7 +165,7 @@ export default defineComponent({
     };
 
     const onClose = (reload: any) => {
-      tabsViewStore.closeCurrentTabByPath("/views/subjectedit");
+      tabsViewStore.closeCurrentTabByPath("/subject/edit");
       tabsViewStore.openTab("/subject/list", {reload: reload});
     };
 
@@ -207,6 +207,10 @@ export default defineComponent({
       },
       {title: '取数字典编码', dataIndex: 'dictionaryCode', key: 'dictionaryCode', align: "center"},
       {title: '显示排序', dataIndex: 'disOrder', key: 'disOrder', align: "center"},
+      {
+        title: '标签', dataIndex: 'tagList', key: 'tagList', align: "center", customRender: ({record}) =>
+          record.tagList == null ? "" : (record.tagList as []).join(",")
+      },
       {
         title: '是否关联字段', dataIndex: 'isForeignKey', key: 'isForeignKey', align: "center", customRender: ({record}) =>
           record.isForeignKey == "1" ? "是" : "否"
@@ -229,6 +233,7 @@ export default defineComponent({
         {cnName: "查询类型", enName: "queryTypeName", width: 100},
         {cnName: "取数字典编码", enName: "dictionaryCode", width: 200},
         {cnName: "显示排序", enName: "disOrder", width: 200},
+        {cnName: "标签", enName: "tags", width: 200},
         {cnName: "是否查询字段", enName: "isSearchFieldText", width: 200},
         {cnName: "是否关联字段", enName: "isForeignKeyText", width: 100},
         {cnName: "外键表", enName: "referencesTab", width: 150},

+ 43 - 22
vue/src/views/subject/fieldedit.vue

@@ -68,12 +68,26 @@
           </a-form-item>
         </a-col>
         <a-col :span="7">
-          <a-form-item label="显示排序" name="disOrder" :label-col="{span:7}" :rules="[{ required: true, message: '请输入显示排序!' }]">
+          <a-form-item label="显示排序" name="disOrder" :label-col="{span:7}"
+                       :rules="[{ required: true, message: '请输入显示排序!' }]">
             <a-input-number v-model:value="dataModel.disOrder">
             </a-input-number>
           </a-form-item>
         </a-col>
       </a-row>
+      <a-row type="flex">
+        <a-col :span="14">
+          <a-form-item label="标签" name="queryTypeId" :label-col="{span:3}"
+                       :rules="[{ required: true, message: '请选择标签' }]">
+            <a-select
+              v-model:value="dataModel.tagList"
+              mode="tags"
+              style="width: 100%"
+              :options="tagOptions">
+            </a-select>
+          </a-form-item>
+        </a-col>
+      </a-row>
       <a-row type="flex">
         <a-col :span="7">
           <a-form-item label="是否关联字段" name="isForeignKey" :label-col="{span:7}">
@@ -91,7 +105,7 @@
           </a-form-item>
         </a-col>
       </a-row>
-      <a-row type="flex"  v-if="dataModel.isForeignKey==1">
+      <a-row type="flex" v-if="dataModel.isForeignKey==1">
         <a-col :span="7">
           <a-form-item label="外键表" name="referencesTab" :label-col="{span:7}"
                        :rules="[{ required: true, message: '请输入外键表!' }]">
@@ -107,7 +121,8 @@
           </a-form-item>
         </a-col>
         <a-col :span="7">
-          <a-form-item label="外键表显示列" name="displayColumn" :label-col="{span:7}" :rules="[{ required: true, message: '请输入外键表显示列!' }]">
+          <a-form-item label="外键表显示列" name="displayColumn" :label-col="{span:7}"
+                       :rules="[{ required: true, message: '请输入外键表显示列!' }]">
             <a-input v-model:value="dataModel.displayColumn" placeholder="">
             </a-input>
           </a-form-item>
@@ -115,7 +130,7 @@
       </a-row>
       <a-row v-if="dataModel.isForeignKey==1">
         <a-col :span="21">
-          <a-form-item label="sql预览" name="displayColumn" :label-col="{span:2}" >
+          <a-form-item label="sql预览" name="displayColumn" :label-col="{span:2}">
             <codemirror
               v-model="code"
               :style="{ height: '100px',width:'100%' }"
@@ -146,14 +161,15 @@ import type {SelectProps} from "ant-design-vue";
 import {getDictionaryItemList} from "@/api/system/dictionary";
 import type {FormInstance} from 'ant-design-vue';
 import {DataTypeList} from '@/enums/dictions';
-import { Codemirror } from 'vue-codemirror'
-import { oneDark } from '@codemirror/theme-one-dark'
-import { sql, MySQL } from '@codemirror/lang-sql';
+import {Codemirror} from 'vue-codemirror'
+import {oneDark} from '@codemirror/theme-one-dark'
+import {sql, MySQL} from '@codemirror/lang-sql';
 import type {Subjectfield} from "@/views/subject/model";
+import {get} from '@/api/common';
 
 export default defineComponent({
   name: 'FieldEdit',
-  components: {BUploadFile, Form,Codemirror,MySQL,sql,oneDark},
+  components: {BUploadFile, Form, Codemirror, MySQL, sql, oneDark},
   props: {
     onSave: {
       type: Function,
@@ -177,15 +193,17 @@ export default defineComponent({
       isForeignKey: 0,
       foreignKey: '',
       displayColumn: '',
-      referencesTab: ''
+      referencesTab: '',
+      tagList: []
     });
     const dataModel = ref({...defaultValue});
     const settingTypeList = ref<SelectProps['options']>();
     const queryTypeList = ref<SelectProps['options']>();
+    const tagOptions = ref();
     const title = ref();
 
-    const lang=sql();
-    const code =ref("");
+    const lang = sql();
+    const code = ref("");
     const options = {
       disabled: false,
       indentWithTab: true,
@@ -193,7 +211,7 @@ export default defineComponent({
       autofocus: true,
       height: 'auto',
       language: 'javascript',
-      theme:'oneDark'
+      theme: 'oneDark'
     }
     getDictionaryItemList({code: "settingType"}).then(data => {
       settingTypeList.value = data;
@@ -201,12 +219,14 @@ export default defineComponent({
     getDictionaryItemList({code: "queryType"}).then(data => {
       queryTypeList.value = data;
     });
-
+    get('subject/getTagList', {}).then((data: any[]) => {
+      tagOptions.value = data.map(x => ({value: x.tagName}));
+    })
     const show = (record: any) => {
-      if(record==null) {
-        record = {...defaultValue} ;
+      if (record == null) {
+        record = {...defaultValue};
       }
-      dataModel.value =record;
+      dataModel.value = record;
       title.value = "主题字段定义";
       visible.value = true;
     };
@@ -214,7 +234,7 @@ export default defineComponent({
 
     const handleOk = () => {
       props.onSave(dataModel.value);
-      visible.value=false;
+      visible.value = false;
     };
 
     const handleCancel = () => {
@@ -222,21 +242,22 @@ export default defineComponent({
     };
 
     watch(
-      () => [dataModel.value.fieldCode,dataModel.value.fieldAlias,dataModel.value.foreignKey,dataModel.value.referencesTab,dataModel.value.displayColumn],
+      () => [dataModel.value.fieldCode, dataModel.value.fieldAlias, dataModel.value.foreignKey, dataModel.value.referencesTab, dataModel.value.displayColumn],
       () => {
-       code.value=` select 主表.*,${dataModel.value.referencesTab}.${dataModel.value.displayColumn} as ${dataModel.value.fieldAlias} from 主表 ` +
-         `inner join ${dataModel.value.referencesTab}  on 主表.${dataModel.value.fieldCode} =${dataModel.value.referencesTab}.${dataModel.value.foreignKey}`
+        code.value = ` select 主表.*, ${dataModel.value.referencesTab}.${dataModel.value.displayColumn} as ${dataModel.value.fieldAlias}
+                       from 主表 ` +
+          `inner join ${dataModel.value.referencesTab}  on 主表.${dataModel.value.fieldCode} =${dataModel.value.referencesTab}.${dataModel.value.foreignKey}`
       },
     );
     return {
       dataModel,
       modalFormRef,
-      visible,title,options,code,oneDark,lang,
+      visible, title, options, code, oneDark, lang, tagOptions,
       confirmLoading,
       settingTypeList,
       DataTypeList,
       queryTypeList,
-      show, handleOk,handleCancel,
+      show, handleOk, handleCancel,
     };
   },
   mounted() {

+ 2 - 1
vue/src/views/subject/model.ts

@@ -20,5 +20,6 @@ export interface Subjectfield {
   isForeignKey: number,
   foreignKey: string,
   displayColumn: string,
-  referencesTab: string
+  referencesTab: string,
+  tagList:[]
 }