Преглед изворни кода

Merge branch 'master' into rpt

fengyanjie пре 4 година
родитељ
комит
e991cceaf6
46 измењених фајлова са 3079 додато и 555 уклоњено
  1. 10 10
      dmp-model/src/main/java/com/persagy/dmp/rwd/enums/FuncidDataType.java
  2. 19 0
      dmp-rwd-datautils/src/main/java/com/persagy/dmp/rwd/datautils/config/GraphMapping.java
  3. 2 2
      dmp-rwd-datautils/src/main/java/com/persagy/dmp/rwd/datautils/service/TransObjInfoService.java
  4. 0 49
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/ChangeRecordController.java
  5. 45 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/ClassDefChangeRecordController.java
  6. 28 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/ClassDefController.java
  7. 0 71
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/DmpGatewayController.java
  8. 24 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/DtDataController.java
  9. 44 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/FuncidDefChangeRecordController.java
  10. 23 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/FuncidDefController.java
  11. 40 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/RwdeditRefTypeController.java
  12. 40 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/RwdeditRefTypeInfoController.java
  13. 45 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/RwdeditVersionController.java
  14. 0 82
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/ChangeRecord.java
  15. 70 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/ClassDef.java
  16. 52 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/ClassDefChangeRecord.java
  17. 73 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/DtData.java
  18. 114 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/FuncidDef.java
  19. 71 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/FuncidDefChangeRecord.java
  20. 48 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/GroupPK.java
  21. 48 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/RefTypeInfoPK.java
  22. 59 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/RwdeditRefType.java
  23. 37 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/RwdeditRefTypeInfos.java
  24. 26 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/RwdeditVersion.java
  25. 19 6
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/model/ChangeRecordModel.java
  26. 26 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/model/DtDataModel.java
  27. 21 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/model/RwdeditRefTypeModel.java
  28. 0 9
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/repository/ChangeRecordRepository.java
  29. 17 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/repository/ClassDefChangeRecordRepository.java
  30. 17 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/repository/FuncidDefChangeRecordRepository.java
  31. 9 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/repository/RwdeditRefTypeInfosRepository.java
  32. 9 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/repository/RwdeditRefTypeRepository.java
  33. 9 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/repository/RwdeditVersionRepository.java
  34. 0 325
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/ChangeRecordService.java
  35. 308 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/ClassDefChangeRecordService.java
  36. 71 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/ClassDefService.java
  37. 45 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/DtDataService.java
  38. 410 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/FuncidDefChangeRecordService.java
  39. 124 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/FuncidDefService.java
  40. 129 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/RwdeditRefTypeInfosService.java
  41. 116 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/RwdeditRefTypeService.java
  42. 173 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/RwdeditVersionService.java
  43. 65 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/util/ClassCodeUtils.java
  44. 1 1
      dmp-rwd-edit/src/main/resources/application.yml
  45. 590 0
      dmp-rwd-edit/数据字典编辑工具接口文档.md
  46. 2 0
      dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/ObjectInstanceQueryService.java

+ 10 - 10
dmp-model/src/main/java/com/persagy/dmp/rwd/enums/FuncidDataType.java

@@ -2,16 +2,16 @@ package com.persagy.dmp.rwd.enums;
 
 public enum FuncidDataType {
 
-	INTEGER,
-	DOUBLE,
-	BOOLEAN,
-	STRING,
-	DATETIME,
-	ENUM,
-	MENUM,
-	ATTACHMENT,
-	OBJECT,
-	ENUMREF
+    INTEGER,
+    DOUBLE,
+    BOOLEAN,
+    STRING,
+    DATETIME,
+    ENUM,
+    MENUM,
+    ATTACHMENT,
+    OBJECT,
+    REFENUM
 
 }
 

+ 19 - 0
dmp-rwd-datautils/src/main/java/com/persagy/dmp/rwd/datautils/config/GraphMapping.java

@@ -150,6 +150,25 @@ public class GraphMapping {
 		list.add(new Item("PropertyInArch", "Pe2Fl"));
 		list.add(new Item("PropertyInArch", "Pe2Sh"));
 		list.add(new Item("PropertyInArch", "Pe2Sp"));
+
+		list.add(new Item("ArchForArch", "Bd2Bd"));
+		list.add(new Item("ArchForArch", "Bd2Fl"));
+		list.add(new Item("ArchForArch", "Bd2Sh"));
+		list.add(new Item("ArchForArch", "Bd2Sp"));
+		list.add(new Item("ArchForArch", "Fl2Bd"));
+		list.add(new Item("ArchForArch", "Fl2Fl"));
+		list.add(new Item("ArchForArch", "Fl2Sh"));
+		list.add(new Item("ArchForArch", "Fl2Sp"));
+		list.add(new Item("ArchForArch", "Sh2Bd"));
+		list.add(new Item("ArchForArch", "Sh2Fl"));
+		list.add(new Item("ArchForArch", "Sh2Sh"));
+		list.add(new Item("ArchForArch", "Sh2Sp"));
+		list.add(new Item("ArchForArch", "Sp2Bd"));
+		list.add(new Item("ArchForArch", "Sp2Fl"));
+		list.add(new Item("ArchForArch", "Sp2Sh"));
+		list.add(new Item("ArchForArch", "Sp2Sp"));
+
+
 		return list;
 	}
 

+ 2 - 2
dmp-rwd-datautils/src/main/java/com/persagy/dmp/rwd/datautils/service/TransObjInfoService.java

@@ -193,7 +193,7 @@ public class TransObjInfoService {
 
 			String classCode = JacksonMapper.getString(obj, "classCode");
 			Map<String, FuncidDefModel> funcidCache = getFuncidCache(ctx, classDefCache, classCode);
-			FuncidDefModel funcidDefModel = funcidCache.get(infoId);
+			FuncidDefModel funcidDefModel = funcidCache.get(infoId.toLowerCase());
 			if (funcidDefModel == null) {
 				model.error = "funcid def not exists";
 				errorWriter.println(JacksonMapper.toSimpleJson(model));
@@ -315,7 +315,7 @@ public class TransObjInfoService {
 				for (JsonNode datum : data) {
 					ObjectNode funcJson = (ObjectNode) datum;
 					FuncidDefModel funcidDefModel = JacksonMapper.toObject(funcJson.toString(), FuncidDefModel.class);
-					funcidCache.put(funcidDefModel.getOrigCode(), funcidDefModel);
+					funcidCache.put(funcidDefModel.getOrigCode().toLowerCase(), funcidDefModel);
 				}
 			}
 			classDefCache.put(classCode, funcidCache);

+ 0 - 49
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/ChangeRecordController.java

@@ -1,49 +0,0 @@
-package com.persagy.dmp.rwd.edit.controller;
-
-import com.persagy.common.criteria.JacksonCriteria;
-import com.persagy.common.web.MapResponse;
-import com.persagy.common.web.PagedResponse;
-import com.persagy.dmp.rwd.edit.entity.ChangeRecord;
-import com.persagy.dmp.rwd.edit.service.ChangeRecordService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.servlet.http.HttpServletResponse;
-import java.util.List;
-
-@RestController
-@RequestMapping("/rwdedit/rwdChangeRecord")
-public class ChangeRecordController {
-
-    @Autowired
-    private ChangeRecordService service;
-
-    @PostMapping("/query")
-    public PagedResponse<ChangeRecord> query(@RequestBody JacksonCriteria criteria) {
-        return service.query(criteria);
-    }
-
-    @PostMapping("/create")
-    public MapResponse create(@RequestBody ChangeRecord param) {
-        return service.create(param);
-    }
-
-    @PostMapping("/update")
-    public MapResponse update(@RequestBody ChangeRecord param) {
-        return service.update(param);
-    }
-
-    @PostMapping("/delete")
-    public MapResponse delete(@RequestBody List<Integer> idList) {
-        return service.delete(idList);
-    }
-
-    @PostMapping("/download")
-    public void download(@RequestBody List<Integer> idList, HttpServletResponse response) {
-        service.download(response, idList);
-    }
-
-}

+ 45 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/ClassDefChangeRecordController.java

@@ -0,0 +1,45 @@
+package com.persagy.dmp.rwd.edit.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.rwd.edit.entity.ClassDefChangeRecord;
+import com.persagy.dmp.rwd.edit.service.ClassDefChangeRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/rwdedit/classDef/changeRecord")
+public class ClassDefChangeRecordController {
+
+    @Autowired
+    private ClassDefChangeRecordService service;
+
+    @PostMapping("/query")
+    public PagedResponse<ClassDefChangeRecord> query(@RequestBody JacksonCriteria criteria) {
+        return service.query(criteria);
+    }
+
+    @PostMapping("/create")
+    public MapResponse create(@RequestBody ClassDefChangeRecord param) {
+        return service.create(param);
+    }
+
+    @PostMapping("/update")
+    public MapResponse update(@RequestBody ClassDefChangeRecord param) {
+        return service.update(param);
+    }
+
+    @PostMapping("/delete")
+    public MapResponse delete(@RequestBody ClassDefChangeRecord param) {
+        return service.delete(param);
+    }
+
+    @PostMapping("/addVersion")
+    public MapResponse addVersion(@RequestParam String version, @RequestBody List<Integer> idList) {
+        return service.addVersion(version, idList);
+    }
+
+}

+ 28 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/ClassDefController.java

@@ -0,0 +1,28 @@
+package com.persagy.dmp.rwd.edit.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.json.JacksonMapper;
+import com.persagy.common.web.ListResponse;
+import com.persagy.dmp.rwd.edit.service.ClassDefService;
+import com.persagy.dmp.rwd.model.ClassDefModel;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Slf4j
+@RestController
+@RequestMapping("/rwdedit/def/class")
+public class ClassDefController {
+    @Autowired
+    private ClassDefService service;
+
+    @PostMapping("")
+    public ListResponse<ClassDefModel> queryClass(@RequestBody JacksonCriteria criteria) {
+        log.info("/class/query: {}", JacksonMapper.toSimpleJson(criteria));
+        return service.queryClass(criteria);
+    }
+
+}

+ 0 - 71
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/DmpGatewayController.java

@@ -1,71 +0,0 @@
-package com.persagy.dmp.rwd.edit.controller;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.persagy.common.web.ServletUtils;
-import com.persagy.dmp.common.http.HttpUtils;
-import com.persagy.dmp.rwd.edit.config.web.UserUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * @author: yaoll
- * @date: 2020-12-29
- * @verison: 1.0
- */
-@RestController
-@RequestMapping("/rwdedit/dmp")
-public class DmpGatewayController {
-
-    @Autowired
-    private HttpUtils httpUtils;
-
-    @Value("${persagy.dmp.server}")
-    private String dmpServer;
-
-    @PostMapping("/dic/**")
-    public void dic(HttpServletRequest request, HttpServletResponse response, @RequestBody JsonNode param) {
-        dispatch(request, response, param);
-    }
-
-    @PostMapping("/org/**")
-    public void org(HttpServletRequest request, HttpServletResponse response, @RequestBody JsonNode param) {
-        dispatch(request, response, param);
-    }
-
-    @PostMapping("/rwd/**")
-    public void rwd(HttpServletRequest request, HttpServletResponse response, @RequestBody JsonNode param) {
-        dispatch(request, response, param);
-    }
-
-    private void dispatch(HttpServletRequest request, HttpServletResponse response, @RequestBody JsonNode param) {
-        StringBuilder url = new StringBuilder(dmpServer);
-        String uri = request.getRequestURI().replace("/rwdedit/dmp", "");
-        url.append(uri);
-        String queryString = request.getQueryString();
-        if (!"/rwd/def/class".equalsIgnoreCase(uri) && !"/rwd/def/funcid".equalsIgnoreCase(uri)) {
-            queryString = appendParamIfNotExists(queryString, "appId", "datautils");
-            queryString = appendParamIfNotExists(queryString, "userId", "admin" + UserUtils.currentUserId());
-        }
-        url.append("?").append(queryString);
-
-        HttpUtils.HttpResult post = httpUtils.post(url.toString(), param.toString(), 30000);
-        String content = post.getContent();
-        ServletUtils.writeJson(response, content);
-    }
-
-    private String appendParamIfNotExists(String queryString, String key, String value) {
-        if (queryString == null) {
-            return key + "=" + value;
-        } else {
-            return queryString + "&" + key + "=" + value;
-        }
-    }
-
-}

+ 24 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/DtDataController.java

@@ -0,0 +1,24 @@
+package com.persagy.dmp.rwd.edit.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.rwd.edit.model.DtDataModel;
+import com.persagy.dmp.rwd.edit.service.DtDataService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/rwdedit/dt/data")
+public class DtDataController {
+
+    @Autowired
+    private DtDataService service;
+
+    @PostMapping("/query")
+    public PagedResponse<DtDataModel> query(@RequestBody JacksonCriteria criteria) {
+        return service.query(criteria);
+    }
+}

+ 44 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/FuncidDefChangeRecordController.java

@@ -0,0 +1,44 @@
+package com.persagy.dmp.rwd.edit.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.rwd.edit.entity.FuncidDefChangeRecord;
+import com.persagy.dmp.rwd.edit.service.FuncidDefChangeRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/rwdedit/funcidDef/changeRecord")
+public class FuncidDefChangeRecordController {
+
+    @Autowired
+    private FuncidDefChangeRecordService service;
+
+    @PostMapping("/query")
+    public PagedResponse<FuncidDefChangeRecord> query(@RequestBody JacksonCriteria criteria) {
+        return service.query(criteria);
+    }
+
+    @PostMapping("/create")
+    public MapResponse create(@RequestBody FuncidDefChangeRecord param) {
+        return service.create(param);
+    }
+
+    @PostMapping("/update")
+    public MapResponse update(@RequestBody FuncidDefChangeRecord param) {
+        return service.update(param);
+    }
+
+    @PostMapping("/delete")
+    public MapResponse delete(@RequestBody FuncidDefChangeRecord param) {
+        return service.delete(param);
+    }
+
+    @PostMapping("/addVersion")
+    public MapResponse addVersion(@RequestParam String version, @RequestBody List<Integer> idList) {
+        return service.addVersion(version, idList);
+    }
+}

+ 23 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/FuncidDefController.java

@@ -0,0 +1,23 @@
+package com.persagy.dmp.rwd.edit.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.ListResponse;
+import com.persagy.dmp.rwd.edit.service.FuncidDefService;
+import com.persagy.dmp.rwd.model.FuncidDefModel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/rwdedit/def/funcid")
+public class FuncidDefController {
+    @Autowired
+    private FuncidDefService service;
+
+    @PostMapping("")
+    public ListResponse<FuncidDefModel> query(@RequestBody JacksonCriteria criteria) {
+        return service.queryFuncid(criteria);
+    }
+}

+ 40 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/RwdeditRefTypeController.java

@@ -0,0 +1,40 @@
+package com.persagy.dmp.rwd.edit.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.rwd.edit.model.RwdeditRefTypeModel;
+import com.persagy.dmp.rwd.edit.service.RwdeditRefTypeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/rwdedit/ref/type")
+public class RwdeditRefTypeController {
+
+    @Autowired
+    private RwdeditRefTypeService service;
+
+    @PostMapping("/query")
+    public PagedResponse<RwdeditRefTypeModel> query(@RequestBody JacksonCriteria criteria) {
+        return service.query(criteria);
+    }
+
+    @PostMapping("/create")
+    public MapResponse create(@RequestBody RwdeditRefTypeModel params) {
+        return service.create(params);
+    }
+
+    @PostMapping("/update")
+    public MapResponse update(@RequestBody RwdeditRefTypeModel params) {
+        return service.update(params);
+    }
+
+    @PostMapping("/delete")
+    public MapResponse delete(@RequestBody RwdeditRefTypeModel params) {
+        return service.delete(params);
+    }
+}

+ 40 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/RwdeditRefTypeInfoController.java

@@ -0,0 +1,40 @@
+package com.persagy.dmp.rwd.edit.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.rwd.edit.entity.RwdeditRefTypeInfos;
+import com.persagy.dmp.rwd.edit.service.RwdeditRefTypeInfosService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/rwdedit/ref/type/infos")
+public class RwdeditRefTypeInfoController {
+
+    @Autowired
+    private RwdeditRefTypeInfosService service;
+
+    @PostMapping("/query")
+    public PagedResponse<RwdeditRefTypeInfos> query(@RequestBody JacksonCriteria criteria) {
+        return service.query(criteria);
+    }
+
+    @PostMapping("/create")
+    public MapResponse create(@RequestBody RwdeditRefTypeInfos params) {
+        return service.create(params);
+    }
+
+    @PostMapping("/update")
+    public MapResponse update(@RequestBody RwdeditRefTypeInfos params) {
+        return service.update(params);
+    }
+
+    @PostMapping("/delete")
+    public MapResponse delete(@RequestBody RwdeditRefTypeInfos params) {
+        return service.delete(params);
+    }
+}

+ 45 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/RwdeditVersionController.java

@@ -0,0 +1,45 @@
+package com.persagy.dmp.rwd.edit.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.rwd.edit.entity.RwdeditVersion;
+import com.persagy.dmp.rwd.edit.service.RwdeditVersionService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+
+@RestController
+@RequestMapping("/rwdedit/version")
+public class RwdeditVersionController {
+
+    @Autowired
+    private RwdeditVersionService service;
+
+    @PostMapping("/query")
+    public PagedResponse<RwdeditVersion> query(@RequestBody JacksonCriteria criteria) {
+        return service.query(criteria);
+    }
+
+    @PostMapping("/create")
+    public MapResponse create(@RequestBody RwdeditVersion param) {
+        return service.create(param);
+    }
+
+    @PostMapping("/update")
+    public MapResponse update(@RequestBody RwdeditVersion param) {
+        return service.update(param);
+    }
+
+    @PostMapping("/delete")
+    public MapResponse delete(@RequestBody RwdeditVersion param) {
+        return service.delete(param);
+    }
+
+    @PostMapping("/download")
+    public void download(@RequestParam String version, HttpServletResponse response) {
+        service.download(response, version);
+    }
+
+}

+ 0 - 82
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/ChangeRecord.java

@@ -1,82 +0,0 @@
-package com.persagy.dmp.rwd.edit.entity;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.persagy.dmp.rwd.edit.enumeration.EnumOperationType;
-import com.persagy.dmp.rwd.edit.model.ChangeRecordModel;
-import com.vladmihalcea.hibernate.type.json.JsonStringType;
-import lombok.Getter;
-import lombok.Setter;
-import org.hibernate.annotations.SQLDelete;
-import org.hibernate.annotations.Type;
-import org.hibernate.annotations.TypeDef;
-import org.hibernate.annotations.Where;
-
-import javax.persistence.*;
-import java.util.Date;
-
-@Setter
-@Getter
-@Entity
-@Table(name = "rwd_change_record")
-@TypeDef(name = "json", typeClass = JsonStringType.class)
-@Where(clause = "valid = 1")
-@SQLDelete(sql = "update rwd_change_record set valid = 0 where id = ?")
-public class ChangeRecord {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Integer id;
-    private String code;
-    private String infoCode;
-    @Type(type = "json")
-    private ObjectNode value;
-    private EnumOperationType operationType;//操作类型
-    private String operationUser;//操作人
-    private Date operationTime;//操作时间
-    private String confirmUser;//确认人
-    private Date confirmTime;//确认时间
-    private String publishUser;//发布人
-    private Date publishTime;//发布时间
-    private Date finishTime;//完成时间
-    private Boolean valid;//true 正常 false 失效
-    private Integer state;//状态 0.取消 1.初始化 2.确认 3.发布 4.完成
-
-    public static ChangeRecord fromModel(ChangeRecordModel model) {
-        ChangeRecord entity = new ChangeRecord();
-        entity.setId(model.getId());
-        entity.setCode(model.getCode());
-        entity.setInfoCode(model.getInfoCode());
-        entity.setValue(model.getValue());
-        entity.setOperationType(model.getOperationType());
-        entity.setOperationUser(model.getOperationUser());
-        entity.setOperationTime(model.getOperationTime());
-        entity.setConfirmUser(model.getConfirmUser());
-        entity.setConfirmTime(model.getConfirmTime());
-        entity.setPublishUser(model.getPublishUser());
-        entity.setPublishTime(model.getPublishTime());
-        entity.setFinishTime(model.getFinishTime());
-        entity.setValid(model.getValid());
-        entity.setState(model.getState());
-        return entity;
-    }
-
-    public ChangeRecordModel toModel() {
-        ChangeRecordModel model = new ChangeRecordModel();
-        model.setId(this.id);
-        model.setCode(this.code);
-        model.setInfoCode(this.infoCode);
-        model.setValue(this.value);
-        model.setOperationType(this.operationType);
-        model.setOperationUser(this.operationUser);
-        model.setOperationTime(this.operationTime);
-        model.setConfirmUser(this.confirmUser);
-        model.setConfirmTime(this.confirmTime);
-        model.setPublishUser(this.publishUser);
-        model.setPublishTime(this.publishTime);
-        model.setFinishTime(this.finishTime);
-        model.setValid(this.valid);
-        model.setState(this.state);
-        return model;
-    }
-
-}

+ 70 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/ClassDef.java

@@ -0,0 +1,70 @@
+package com.persagy.dmp.rwd.edit.entity;
+
+import com.persagy.dmp.rwd.enums.ObjType;
+import com.persagy.dmp.rwd.model.ClassDefModel;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.persistence.*;
+
+@Setter
+@Getter
+@Entity
+@Table(name = "rwd_def_class")
+@IdClass(GroupPK.class)
+public class ClassDef {
+
+	@Id
+	private String id;
+	@Id
+	private String groupCode;
+	private String code;
+	@Enumerated(value = EnumType.STRING)
+	private ObjType objType;
+	private String name;
+	private String aliasCode;
+	private String aliasName;
+	private String type;
+	private String projectId;
+	private String majorCode;
+	private String systemCode;
+	private String equipmentCode;
+	private String parentCode;
+
+	public static ClassDef fromModel(ClassDefModel model) {
+		ClassDef entity = new ClassDef();
+		entity.setId(model.getId());
+		entity.setCode(model.getCode());
+		entity.setObjType(model.getObjType());
+		entity.setName(model.getName());
+		entity.setAliasCode(model.getAliasCode());
+		entity.setAliasName(model.getAliasName());
+		entity.setType(model.getType());
+		entity.setGroupCode(model.getGroupCode());
+		entity.setProjectId(model.getProjectId());
+		entity.setMajorCode(model.getMajorCode());
+		entity.setSystemCode(model.getSystemCode());
+		entity.setEquipmentCode(model.getEquipmentCode());
+		entity.setParentCode(model.getParentCode());
+		return entity;
+	}
+
+	public ClassDefModel toModel() {
+		ClassDefModel model = new ClassDefModel();
+		model.setId(this.getId());
+		model.setCode(this.getCode());
+		model.setObjType(this.getObjType());
+		model.setName(this.getName());
+		model.setAliasCode(this.getAliasCode());
+		model.setAliasName(this.getAliasName());
+		model.setType(this.getType());
+		model.setGroupCode(this.getGroupCode());
+		model.setProjectId(this.getProjectId());
+		model.setMajorCode(this.getMajorCode());
+		model.setSystemCode(this.getSystemCode());
+		model.setEquipmentCode(this.getEquipmentCode());
+		model.setParentCode(this.getParentCode());
+		return model;
+	}
+
+}

+ 52 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/ClassDefChangeRecord.java

@@ -0,0 +1,52 @@
+package com.persagy.dmp.rwd.edit.entity;
+
+import com.persagy.dmp.rwd.edit.enumeration.EnumOperationType;
+import com.persagy.dmp.rwd.enums.ObjType;
+import com.vladmihalcea.hibernate.type.json.JsonStringType;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.annotations.SQLDelete;
+import org.hibernate.annotations.TypeDef;
+import org.hibernate.annotations.Where;
+
+import javax.persistence.*;
+import java.util.Date;
+
+@Setter
+@Getter
+@Entity
+@Table(name = "rwd_def_class_change_record")
+@TypeDef(name = "json", typeClass = JsonStringType.class)
+@Where(clause = "valid = 1")
+@SQLDelete(sql = "update rwd_def_class_change_record set valid = 0 where id = ?")
+public class ClassDefChangeRecord {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+    private String code;
+    private String groupCode;
+    @Enumerated(value = EnumType.STRING)
+    private ObjType objType;
+    private String name;
+    private String aliasCode;
+    private String aliasName;
+    private String type;
+    private String projectId;
+    private String majorCode;
+    private String systemCode;
+    private String equipmentCode;
+    private String parentCode;
+    @Enumerated(EnumType.STRING)
+    private EnumOperationType operationType;//操作类型
+    private String operationUser;//操作人
+    private Date operationTime;//操作时间
+    private String confirmUser;//确认人
+    private Date confirmTime;//确认时间
+    private String publishUser;//发布人
+    private Date publishTime;//发布时间
+    private Date finishTime;//完成时间
+    private Boolean valid;//true 正常 false 失效
+    private Integer state;//状态 0.取消 1.初始化 2.确认 3.发布 4.完成
+    private String version;//版本
+}

+ 73 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/DtData.java

@@ -0,0 +1,73 @@
+package com.persagy.dmp.rwd.edit.entity;
+
+import com.persagy.dmp.rwd.edit.model.DtDataModel;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import java.util.Date;
+
+@Setter
+@Getter
+@Entity
+@Table(name = "dic_dt_data")
+public class DtData {
+
+    @Id
+    @GeneratedValue(generator = "assignedId")
+    @GenericGenerator(name = "assignedId", strategy = "assigned")
+    private String id;
+    private String dictTypeId;
+    private String parentId;
+    private String type;
+    private String code;
+    private String label;
+    private Integer orderNum;
+    private Integer status;
+    private Date createTime;
+    private String createUser;
+    private Date updateTime;
+    private String updateUser;
+    private String remark;
+
+    public static DtData fromModel(DtDataModel model) {
+        DtData entity = new DtData();
+        entity.setId(model.getId());
+        entity.setDictTypeId(model.getDictTypeId());
+        entity.setParentId(model.getParentId());
+        entity.setType(model.getType());
+        entity.setCode(model.getCode());
+        entity.setLabel(model.getLabel());
+        entity.setOrderNum(model.getOrderNum());
+        entity.setStatus(model.getStatus());
+        entity.setCreateTime(model.getCreateTime());
+        entity.setCreateUser(model.getCreateUser());
+        entity.setUpdateTime(model.getUpdateTime());
+        entity.setUpdateUser(model.getUpdateUser());
+        entity.setRemark(model.getRemark());
+        return entity;
+    }
+
+    public DtDataModel toModel() {
+        DtDataModel model = new DtDataModel();
+        model.setId(this.id);
+        model.setDictTypeId(this.getDictTypeId());
+        model.setParentId(this.getParentId());
+        model.setType(this.getType());
+        model.setCode(this.getCode());
+        model.setLabel(this.getLabel());
+        model.setOrderNum(this.getOrderNum());
+        model.setStatus(this.getStatus());
+        model.setCreateTime(this.getCreateTime());
+        model.setCreateUser(this.getCreateUser());
+        model.setUpdateTime(this.getUpdateTime());
+        model.setUpdateUser(this.getUpdateUser());
+        model.setRemark(this.getRemark());
+        return model;
+    }
+
+}

+ 114 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/FuncidDef.java

@@ -0,0 +1,114 @@
+package com.persagy.dmp.rwd.edit.entity;
+
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.persagy.dmp.rwd.enums.FuncidCategory;
+import com.persagy.dmp.rwd.enums.FuncidDataType;
+import com.persagy.dmp.rwd.model.FuncidDefModel;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.annotations.Type;
+
+import javax.persistence.*;
+
+@Setter
+@Getter
+@Entity
+@Table(name = "rwd_def_funcid")
+@IdClass(GroupPK.class)
+public class FuncidDef {
+
+    @Id
+    private String id;
+    @Id
+    private String groupCode;
+    @Column(updatable = false)
+    private String projectId;
+    private String code;
+    private String origCode;
+    private String name;
+    private String aliasCode;
+    private String aliasName;
+    @Column(updatable = false)
+    private String classCode;
+    @Enumerated(EnumType.STRING)
+    private FuncidCategory category;
+    private String type;
+    private String firstTag;
+    private String secondTag;
+    private String priority;
+    private String inputMode;
+    private String unit;
+    @Enumerated(EnumType.STRING)
+    private FuncidDataType dataType;
+    private String origDataType;
+    private Boolean isMultiple = false;
+    private Boolean isRegion = false;
+    private String formater;
+
+    @Type(type = "json")
+    private ArrayNode dataSource;
+    private String note;
+    private Boolean subFlag;
+    private Boolean weakPoint;
+
+    public static FuncidDef fromModel(FuncidDefModel model) {
+        FuncidDef entity = new FuncidDef();
+        entity.setId(model.getId());
+        entity.setCode(model.getCode());
+        entity.setOrigCode(model.getOrigCode());
+        entity.setName(model.getName());
+        entity.setAliasCode(model.getAliasCode());
+        entity.setAliasName(model.getAliasName());
+        entity.setClassCode(model.getClassCode());
+        entity.setCategory(model.getCategory());
+        entity.setType(model.getType());
+        entity.setGroupCode(model.getGroupCode());
+        entity.setProjectId(model.getProjectId());
+        entity.setFirstTag(model.getFirstTag());
+        entity.setSecondTag(model.getSecondTag());
+        entity.setPriority(model.getPriority());
+        entity.setInputMode(model.getInputMode());
+        entity.setUnit(model.getUnit());
+        entity.setDataType(model.getDataType());
+        entity.setOrigDataType(model.getOrigDataType());
+        entity.setIsMultiple(model.getIsMultiple());
+        entity.setIsRegion(model.getIsRegion());
+        entity.setFormater(model.getFormater());
+        entity.setDataSource(model.getDataSource());
+        entity.setNote(model.getNote());
+        entity.setSubFlag(model.getSubFlag());
+        entity.setWeakPoint(model.getWeakPoint());
+        return entity;
+    }
+
+    public FuncidDefModel toModel() {
+        FuncidDefModel model = new FuncidDefModel();
+        model.setId(this.id);
+        model.setCode(this.getCode());
+        model.setOrigCode(this.getOrigCode());
+        model.setName(this.getName());
+        model.setAliasCode(this.aliasCode);
+        model.setAliasName(this.aliasName);
+        model.setClassCode(this.getClassCode());
+        model.setCategory(this.getCategory());
+        model.setType(this.getType());
+        model.setGroupCode(this.getGroupCode());
+        model.setProjectId(this.getProjectId());
+        model.setFirstTag(this.getFirstTag());
+        model.setSecondTag(this.getSecondTag());
+        model.setPriority(this.getPriority());
+        model.setInputMode(this.getInputMode());
+        model.setUnit(this.getUnit());
+        model.setDataType(this.getDataType());
+        model.setOrigDataType(this.getOrigDataType());
+        model.setIsMultiple(this.getIsMultiple());
+        model.setIsRegion(this.getIsRegion());
+        model.setFormater(this.getFormater());
+        model.setDataSource(this.getDataSource());
+        model.setNote(this.getNote());
+        model.setSubFlag(this.getSubFlag());
+        model.setWeakPoint(this.getWeakPoint());
+        return model;
+    }
+
+}

+ 71 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/FuncidDefChangeRecord.java

@@ -0,0 +1,71 @@
+package com.persagy.dmp.rwd.edit.entity;
+
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.persagy.dmp.rwd.edit.enumeration.EnumOperationType;
+import com.persagy.dmp.rwd.enums.FuncidCategory;
+import com.persagy.dmp.rwd.enums.FuncidDataType;
+import com.vladmihalcea.hibernate.type.json.JsonStringType;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.annotations.SQLDelete;
+import org.hibernate.annotations.Type;
+import org.hibernate.annotations.TypeDef;
+import org.hibernate.annotations.Where;
+
+import javax.persistence.*;
+import java.util.Date;
+
+@Setter
+@Getter
+@Entity
+@Table(name = "rwd_def_funcid_change_record")
+@TypeDef(name = "json", typeClass = JsonStringType.class)
+@Where(clause = "valid = 1")
+@SQLDelete(sql = "update rwd_def_funcid_change_record set valid = 0 where id = ?")
+public class FuncidDefChangeRecord {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+    private String code;
+    private String groupCode;
+    @Column(updatable = false)
+    private String projectId;
+    private String origCode;
+    private String name;
+    private String aliasCode;
+    private String aliasName;
+    @Column(updatable = false)
+    private String classCode;
+    @Enumerated(EnumType.STRING)
+    private FuncidCategory category;
+    private String type;
+    private String firstTag;
+    private String secondTag;
+    private String priority;
+    private String inputMode;
+    private String unit;
+    @Enumerated(EnumType.STRING)
+    private FuncidDataType dataType;
+    private String origDataType;
+    private Boolean isMultiple = false;
+    private Boolean isRegion = false;
+    private String formater;
+    @Type(type = "json")
+    private ArrayNode dataSource;
+    private String note;
+    private Boolean subFlag;
+    private Boolean weakPoint;
+    @Enumerated(EnumType.STRING)
+    private EnumOperationType operationType;//操作类型
+    private String operationUser;//操作人
+    private Date operationTime;//操作时间
+    private String confirmUser;//确认人
+    private Date confirmTime;//确认时间
+    private String publishUser;//发布人
+    private Date publishTime;//发布时间
+    private Date finishTime;//完成时间
+    private Boolean valid;//true 正常 false 失效
+    private Integer state;//状态 0.取消 1.初始化 2.确认 3.发布 4.完成
+    private String version;//版本
+}

+ 48 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/GroupPK.java

@@ -0,0 +1,48 @@
+package com.persagy.dmp.rwd.edit.entity;
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+import java.io.Serializable;
+import java.util.Objects;
+
+/**
+ * @author: yaoll
+ * @date: 2020-11-01
+ * @verison: 1.0
+ */
+@Embeddable
+public class GroupPK implements Serializable {
+
+	@Column
+	private String id;
+
+	@Column
+	private String groupCode;
+
+	public GroupPK() {
+	}
+
+	public GroupPK(String id, String groupCode) {
+		this.id = id;
+		this.groupCode = groupCode;
+	}
+
+	@Override
+	public boolean equals(Object o) {
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+		GroupPK groupPK = (GroupPK) o;
+		return id.equals(groupPK.id) &&
+				groupCode.equals(groupPK.groupCode);
+	}
+
+	@Override
+	public int hashCode() {
+		return Objects.hash(id, groupCode);
+	}
+
+	@Override
+	public String toString() {
+		return "GroupPK{id=\"" + id + "\", groupCode=\"" + groupCode + "\"}";
+	}
+}

+ 48 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/RefTypeInfoPK.java

@@ -0,0 +1,48 @@
+package com.persagy.dmp.rwd.edit.entity;
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+import java.io.Serializable;
+import java.util.Objects;
+
+/**
+ * @author: yaoll
+ * @date: 2020-11-01
+ * @verison: 1.0
+ */
+@Embeddable
+public class RefTypeInfoPK implements Serializable {
+
+    @Column
+    private String refKey;
+
+    @Column
+    private String code;
+
+    public RefTypeInfoPK() {
+    }
+
+    public RefTypeInfoPK(String refKey, String code) {
+        this.refKey = refKey;
+        this.code = code;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        RefTypeInfoPK groupPK = (RefTypeInfoPK) o;
+        return refKey.equals(groupPK.refKey) &&
+                code.equals(groupPK.code);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(refKey, code);
+    }
+
+    @Override
+    public String toString() {
+        return "GroupPK{id=\"" + refKey + "\", groupCode=\"" + code + "\"}";
+    }
+}

+ 59 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/RwdeditRefType.java

@@ -0,0 +1,59 @@
+package com.persagy.dmp.rwd.edit.entity;
+
+import com.persagy.dmp.rwd.edit.model.RwdeditRefTypeModel;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.annotations.CreationTimestamp;
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.UpdateTimestamp;
+
+import javax.persistence.*;
+import java.util.Date;
+import java.util.List;
+
+@Setter
+@Getter
+@Entity
+@Table(name = "rwdedit_ref_type")
+public class RwdeditRefType {
+
+    @Id
+    @GeneratedValue(generator = "assignedId")
+    @GenericGenerator(name = "assignedId", strategy = "assigned")
+    private String refKey;
+    private String name;
+    @Column(updatable = false)
+    private Integer createUser;
+    @CreationTimestamp
+    @Column(updatable = false)
+    private Date createTime;
+    private Integer updateUser;
+    @UpdateTimestamp
+    private Date updateTime;
+
+    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "refKey")
+    private List<RwdeditRefTypeInfos> infos;
+
+    public static RwdeditRefType fromModel(RwdeditRefTypeModel model) {
+        RwdeditRefType entity = new RwdeditRefType();
+        entity.setRefKey(model.getRefKey());
+        entity.setName(model.getName());
+        entity.setCreateTime(model.getCreateTime());
+        entity.setUpdateTime(model.getUpdateTime());
+        entity.setCreateUser(model.getCreateUser());
+        entity.setUpdateUser(model.getUpdateUser());
+        entity.setInfos(model.getInfos());
+        return entity;
+    }
+
+    public RwdeditRefTypeModel toModel() {
+        RwdeditRefTypeModel model = new RwdeditRefTypeModel();
+        model.setRefKey(this.getRefKey());
+        model.setName(this.getName());
+        model.setCreateTime(this.getCreateTime());
+        model.setUpdateTime(this.getUpdateTime());
+        model.setCreateUser(this.getCreateUser());
+        model.setUpdateUser(this.getUpdateUser());
+        return model;
+    }
+}

+ 37 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/RwdeditRefTypeInfos.java

@@ -0,0 +1,37 @@
+package com.persagy.dmp.rwd.edit.entity;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.annotations.CreationTimestamp;
+import org.hibernate.annotations.Type;
+import org.hibernate.annotations.UpdateTimestamp;
+
+import javax.persistence.*;
+import java.util.Date;
+
+@Setter
+@Getter
+@Entity
+@Table(name = "rwdedit_ref_type_infos")
+@IdClass(RefTypeInfoPK.class)
+public class RwdeditRefTypeInfos {
+
+    @Id
+    private String refKey;
+    @Id
+    private String code;
+    private String name;
+    private String parentCode;
+    @Type(type = "json")
+    private ObjectNode dataSource;
+    @Column(updatable = false)
+    private Integer createUser;
+    @CreationTimestamp
+    @Column(updatable = false)
+    private Date createTime;
+    private Integer updateUser;
+    @UpdateTimestamp
+    private Date updateTime;
+}

+ 26 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/RwdeditVersion.java

@@ -0,0 +1,26 @@
+package com.persagy.dmp.rwd.edit.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import java.util.Date;
+
+@Setter
+@Getter
+@Entity
+@Table(name = "rwdedit_version")
+public class RwdeditVersion {
+
+    @Id
+    private String version;
+
+    @Column(name = "create_time", insertable = false, updatable = false)
+    private Date createTime;
+    private String createUser;
+    private Integer state;
+
+}

+ 19 - 6
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/model/ChangeRecordModel.java

@@ -1,20 +1,34 @@
 package com.persagy.dmp.rwd.edit.model;
 
-import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.dmp.rwd.edit.enumeration.EnumOperationType;
+import com.persagy.dmp.rwd.enums.ObjType;
+import com.persagy.dmp.rwd.model.FuncidDefModel;
+import com.vladmihalcea.hibernate.type.json.JsonStringType;
 import lombok.Getter;
 import lombok.Setter;
+import org.hibernate.annotations.SQLDelete;
+import org.hibernate.annotations.TypeDef;
+import org.hibernate.annotations.Where;
 
+import javax.persistence.*;
 import java.util.Date;
 
 @Setter
 @Getter
-public class ChangeRecordModel {
-
+public class ClassDefChangeRecordModel {
     private Integer id;
     private String code;
-    private String infoCode;
-    private ObjectNode value;
+    private String groupCode;
+    private ObjType objType;
+    private String name;
+    private String aliasCode;
+    private String aliasName;
+    private String type;
+    private String projectId;
+    private String majorCode;
+    private String systemCode;
+    private String equipmentCode;
+    private String parentCode;
     private EnumOperationType operationType;//操作类型
     private String operationUser;//操作人
     private Date operationTime;//操作时间
@@ -25,5 +39,4 @@ public class ChangeRecordModel {
     private Date finishTime;//完成时间
     private Boolean valid;//true 正常 false 失效
     private Integer state;//状态 0.取消 1.初始化 2.确认 3.发布 4.完成
-
 }

+ 26 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/model/DtDataModel.java

@@ -0,0 +1,26 @@
+package com.persagy.dmp.rwd.edit.model;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+@Setter
+@Getter
+public class DtDataModel {
+
+    private String id;
+    private String dictTypeId;
+    private String parentId;
+    private String type;
+    private String code;
+    private String label;
+    private Integer orderNum;
+    private Integer status;
+    private Date createTime;
+    private String createUser;
+    private Date updateTime;
+    private String updateUser;
+    private String remark;
+
+}

+ 21 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/model/RwdeditRefTypeModel.java

@@ -0,0 +1,21 @@
+package com.persagy.dmp.rwd.edit.model;
+
+import com.persagy.dmp.rwd.edit.entity.RwdeditRefTypeInfos;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+import java.util.List;
+
+@Setter
+@Getter
+public class RwdeditRefTypeModel {
+
+    private String refKey;
+    private String name;
+    private Integer createUser;
+    private Date createTime;
+    private Integer updateUser;
+    private Date updateTime;
+    private List<RwdeditRefTypeInfos> infos;
+}

+ 0 - 9
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/repository/ChangeRecordRepository.java

@@ -1,9 +0,0 @@
-package com.persagy.dmp.rwd.edit.repository;
-
-import com.persagy.dmp.rwd.edit.entity.ChangeRecord;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.querydsl.QuerydslPredicateExecutor;
-
-public interface ChangeRecordRepository extends JpaRepository<ChangeRecord, Integer>, QuerydslPredicateExecutor<ChangeRecord> {
-}
-

+ 17 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/repository/ClassDefChangeRecordRepository.java

@@ -0,0 +1,17 @@
+package com.persagy.dmp.rwd.edit.repository;
+
+import com.persagy.dmp.rwd.edit.entity.ClassDefChangeRecord;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.querydsl.QuerydslPredicateExecutor;
+
+import java.util.List;
+
+public interface ClassDefChangeRecordRepository extends JpaRepository<ClassDefChangeRecord, Integer>, QuerydslPredicateExecutor<ClassDefChangeRecord> {
+
+    @Modifying
+    @Query(nativeQuery = true, value = "update rwd_def_class_change_record set version = ?1 where version is null and id in (?2)")
+    Integer addVersion(String version, List<Integer> idList);
+}
+

+ 17 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/repository/FuncidDefChangeRecordRepository.java

@@ -0,0 +1,17 @@
+package com.persagy.dmp.rwd.edit.repository;
+
+import com.persagy.dmp.rwd.edit.entity.FuncidDefChangeRecord;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.querydsl.QuerydslPredicateExecutor;
+
+import java.util.List;
+
+public interface FuncidDefChangeRecordRepository extends JpaRepository<FuncidDefChangeRecord, Integer>, QuerydslPredicateExecutor<FuncidDefChangeRecord> {
+
+    @Modifying
+    @Query(nativeQuery = true, value = "update rwd_def_funcid_change_record set version = ?1 where version is null and id in (?2)")
+    Integer addVersion(String version, List<Integer> idList);
+}
+

+ 9 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/repository/RwdeditRefTypeInfosRepository.java

@@ -0,0 +1,9 @@
+package com.persagy.dmp.rwd.edit.repository;
+
+import com.persagy.dmp.rwd.edit.entity.RwdeditRefTypeInfos;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.querydsl.QuerydslPredicateExecutor;
+
+public interface RwdeditRefTypeInfosRepository extends JpaRepository<RwdeditRefTypeInfos, String>, QuerydslPredicateExecutor<RwdeditRefTypeInfos> {
+}
+

+ 9 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/repository/RwdeditRefTypeRepository.java

@@ -0,0 +1,9 @@
+package com.persagy.dmp.rwd.edit.repository;
+
+import com.persagy.dmp.rwd.edit.entity.RwdeditRefType;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.querydsl.QuerydslPredicateExecutor;
+
+public interface RwdeditRefTypeRepository extends JpaRepository<RwdeditRefType, String>, QuerydslPredicateExecutor<RwdeditRefType> {
+}
+

+ 9 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/repository/RwdeditVersionRepository.java

@@ -0,0 +1,9 @@
+package com.persagy.dmp.rwd.edit.repository;
+
+import com.persagy.dmp.rwd.edit.entity.RwdeditVersion;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.querydsl.QuerydslPredicateExecutor;
+
+public interface RwdeditVersionRepository extends JpaRepository<RwdeditVersion, String>, QuerydslPredicateExecutor<RwdeditVersion> {
+}
+

+ 0 - 325
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/ChangeRecordService.java

@@ -1,325 +0,0 @@
-package com.persagy.dmp.rwd.edit.service;
-
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.JsonNodeFactory;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.gson.Gson;
-import com.google.gson.JsonSyntaxException;
-import com.google.gson.reflect.TypeToken;
-import com.persagy.common.criteria.CriteriaUtils;
-import com.persagy.common.criteria.JacksonCriteria;
-import com.persagy.common.date.DateUtils;
-import com.persagy.common.json.JacksonMapper;
-import com.persagy.common.web.MapResponse;
-import com.persagy.common.web.PagedResponse;
-import com.persagy.dmp.common.http.HttpUtils;
-import com.persagy.dmp.rwd.edit.config.web.UserUtils;
-import com.persagy.dmp.rwd.edit.entity.ChangeRecord;
-import com.persagy.dmp.rwd.edit.entity.QChangeRecord;
-import com.persagy.dmp.rwd.edit.enumeration.EnumOperationType;
-import com.persagy.dmp.rwd.edit.repository.ChangeRecordRepository;
-import com.querydsl.core.types.dsl.BooleanExpression;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-
-import javax.servlet.http.HttpServletResponse;
-import javax.transaction.Transactional;
-import java.io.*;
-import java.net.URLEncoder;
-import java.util.*;
-
-@Slf4j
-@Service
-public class ChangeRecordService {
-
-    @Value("${persagy.dmp.server}")
-    private String dmpServer;
-
-    @Autowired
-    ChangeRecordRepository repository;
-
-    @Autowired
-    CriteriaUtils criteriaUtils;
-
-    @Autowired
-    HttpUtils httpUtils;
-
-    private List<BooleanExpression> parse(ObjectNode object) {
-        List<BooleanExpression> list = new LinkedList<>();
-        QChangeRecord qt = QChangeRecord.changeRecord;
-        list.addAll(CriteriaUtils.parse(qt.id, object.get("id")));
-        list.addAll(CriteriaUtils.parse(qt.code, object.get("code")));
-        list.addAll(CriteriaUtils.parse(qt.infoCode, object.get("infoCode")));
-        list.addAll(CriteriaUtils.parse(qt.operationType, object.get("operationType"), EnumOperationType.class));
-        list.addAll(CriteriaUtils.parse(qt.operationUser, object.get("operationUser")));
-        list.addAll(CriteriaUtils.parse(qt.operationTime, object.get("operationTime")));
-        list.addAll(CriteriaUtils.parse(qt.confirmUser, object.get("confirmUser")));
-        list.addAll(CriteriaUtils.parse(qt.confirmTime, object.get("confirmTime")));
-        list.addAll(CriteriaUtils.parse(qt.publishUser, object.get("publishUser")));
-        list.addAll(CriteriaUtils.parse(qt.publishTime, object.get("publishTime")));
-        list.addAll(CriteriaUtils.parse(qt.finishTime, object.get("finishTime")));
-        list.addAll(CriteriaUtils.parse(qt.state, object.get("state")));
-        return list;
-    }
-
-    public PagedResponse<ChangeRecord> query(JacksonCriteria criteria) {
-        PagedResponse<ChangeRecord> result = criteriaUtils.query(QChangeRecord.changeRecord, this::parse, criteria);
-        return result;
-    }
-
-    @Transactional
-    public MapResponse create(ChangeRecord param) {
-        MapResponse response = new MapResponse();
-        String code = param.getCode();
-        String infoCode = param.getInfoCode();
-        if (code == null) {
-            response.setFail("code is required");
-            return response;
-        }
-        if (EnumOperationType.create.equals(param.getOperationType())) {
-            Boolean isExists = isExists(code, infoCode);
-            if (!isExists) {
-                response.setFail("code is exists");
-                return response;
-            }
-        }
-        QChangeRecord qt = QChangeRecord.changeRecord;
-        BooleanExpression ex = qt.code.eq(code).and(qt.state.eq(1));
-        if (infoCode != null) {
-            ex.and(qt.infoCode.eq(infoCode));
-        }
-        Iterable<ChangeRecord> all = repository.findAll(ex);
-        List<ChangeRecord> list = new ArrayList<>();
-        all.forEach(list::add);
-        if (list.size() > 0) {
-            repository.deleteAll(list);
-        }
-        param.setOperationUser(UserUtils.currentUserId() + "");
-        param.setOperationTime(new Date());
-        param.setValid(true);
-        param.setState(1);
-        repository.save(param);
-        response.add("id", param.getId());
-        return response;
-    }
-
-    private Boolean isExists(String code, String infoCode) {
-        JacksonCriteria criteria = JacksonCriteria.newInstance();
-        HttpUtils.HttpResult result;
-        if (infoCode != null) {
-            criteria.add("type", "common");
-            criteria.add("classCode", code);
-            criteria.add("code", infoCode);
-            StringBuilder url = new StringBuilder(dmpServer);
-            url.append("/rwd/def/funcid");
-            url.append("?groupCode=0");
-            result = httpUtils.post(url.toString(), JacksonMapper.toSimpleJson(criteria), 300000);
-        } else {
-            criteria.add("type", "common");
-            criteria.add("code", code);
-            StringBuilder url = new StringBuilder(dmpServer);
-            url.append("/rwd/def/funcid");
-            url.append("?groupCode=0");
-            result = httpUtils.post(url.toString(), JacksonMapper.toSimpleJson(criteria), 300000);
-        }
-        if (result.success()) {
-            String content = result.getContent();
-            ObjectNode object = JacksonMapper.toObject(content, ObjectNode.class);
-            ArrayNode data = JacksonMapper.getArray(object, "data", JsonNodeFactory.instance.arrayNode());
-            if (data.size() > 0) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    @Transactional
-    public MapResponse update(ChangeRecord param) {
-        MapResponse response = new MapResponse();
-        if (param.getId() == null) {
-            response.setFail("id is required");
-            return response;
-        }
-        List<ChangeRecord> data = repository.findAllById(Arrays.asList(param.getId()));
-        if (data.size() == 0) {
-            response.setFail("id not exists");
-            return response;
-        }
-        ChangeRecord changeRecord = data.get(0);
-        if (param.getValue() != null) {
-            changeRecord.setValue(param.getValue());
-        }
-        if (param.getState() != null) {
-            changeRecord.setState(param.getState());
-        }
-        if (param.getState() == 2) {
-            changeRecord.setConfirmUser(UserUtils.currentUserId() + "");
-            changeRecord.setConfirmTime(new Date());
-        }
-        if (param.getState() == 3) {
-            changeRecord.setPublishUser(UserUtils.currentUserId() + "");
-            changeRecord.setPublishTime(new Date());
-        }
-        if (param.getState() == 4) {
-            changeRecord.setFinishTime(new Date());
-        }
-        repository.save(changeRecord);
-        response.add("id", param.getId());
-        return response;
-    }
-
-    @Transactional
-    public MapResponse delete(List<Integer> param) {
-        MapResponse response = new MapResponse();
-        List<ChangeRecord> list = repository.findAllById(param);
-        repository.deleteAll(list);
-        return response;
-    }
-
-    @Transactional
-    public void download(HttpServletResponse resp, List<Integer> idList) {
-        List<ChangeRecord> data = repository.findAllById(idList);
-        data.forEach(item -> {
-            item.setState(3);
-            item.setPublishUser(UserUtils.currentUserId() + "");
-            item.setPublishTime(new Date());
-        });
-        repository.saveAll(data);
-
-        String fileName = DateUtils.format(new Date()) + ".sql";
-        List<String> sqlList = getSqlList(idList);
-
-        OutputStream out = null;
-        try {
-            InputStream stream = getStream(sqlList);
-            resp.reset();// 清空输出流
-            String resultFileName = URLEncoder.encode(fileName, "UTF-8");
-            resp.setCharacterEncoding("UTF-8");
-            resp.setHeader("Content-disposition", "attachment; filename=" + resultFileName);// 设定输出文件头
-            resp.setContentType("application/txt");// 定义输出类型
-            out = resp.getOutputStream();
-            byte[] buff = new byte[4096];
-            int size = 0;
-            while ((size = stream.read(buff)) != -1) {
-                out.write(buff, 0, size);
-            }
-            out.flush();
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            try {
-                if (out != null) {
-                    out.close();
-                }
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
-    }
-
-    public InputStream getStream(List<String> list) throws IOException {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        DataOutputStream out = new DataOutputStream(baos);
-        for (String sql : list) {
-            out.writeBytes(sql + "\r\n");
-        }
-        byte[] bytes = baos.toByteArray();
-        ByteArrayInputStream tInputStringStream = new ByteArrayInputStream(bytes);
-        baos.close();
-        out.close();
-        return tInputStringStream;
-    }
-
-    private List<String> getSqlList(List<Integer> idList) {
-        List<String> sqlList = new ArrayList<>();
-        List<ChangeRecord> data = repository.findAllById(idList);
-        for (ChangeRecord changeRecord : data) {
-            StringBuilder sql = new StringBuilder();
-            Map<String, Object> map = json2map(JacksonMapper.toSimpleJson(changeRecord.getValue()));
-            switch (changeRecord.getOperationType()) {
-                case create:
-                    sql.append("insert into");
-                    if (changeRecord.getInfoCode() == null) {
-                        sql.append(" RWD_DEF_CLASS");
-                    } else {
-                        sql.append(" RWD_DEF_FUNCID");
-                    }
-                    sql.append(" (");//表名
-                    map.keySet().forEach(item -> {
-                        sql.append(humpToUnderline(item) + ",");
-                    });
-                    sql.deleteCharAt(sql.length() - 1);
-                    sql.append(") values (");
-                    map.values().forEach(item -> {
-                        sql.append("'" + item + "',");
-                    });
-                    sql.deleteCharAt(sql.length() - 1);
-                    sql.append(")");
-                    break;
-                case update:
-                    sql.append("update");
-                    if (changeRecord.getInfoCode() == null) {
-                        sql.append(" RWD_DEF_CLASS");
-                    } else {
-                        sql.append(" RWD_DEF_FUNCID");
-                    }
-                    sql.append(" set");
-                    for (Map.Entry<String, Object> entry : map.entrySet()) {
-                        sql.append(" " + humpToUnderline(entry.getKey()) + " = '" + entry.getValue() + "',");
-                    }
-                    sql.deleteCharAt(sql.length() - 1);
-                    break;
-                case delete:
-                    sql.append("delete from");
-                    if (changeRecord.getInfoCode() == null) {
-                        sql.append(" RWD_DEF_CLASS");
-                    } else {
-                        sql.append(" RWD_DEF_FUNCID");
-                    }
-                    break;
-            }
-            sql.append(" where 1=1");
-            if (changeRecord.getInfoCode() == null) {
-                sql.append(" and code = '" + changeRecord.getCode() + "'");
-            } else {
-                sql.append(" and class_code = '" + changeRecord.getCode() + "'");
-                sql.append(" and code = '" + changeRecord.getInfoCode() + "'");
-            }
-            sql.append(";");
-            sqlList.add(sql.toString());
-        }
-        return sqlList;
-    }
-
-    private static Map<String, Object> json2map(String str_json) {
-        Map<String, Object> res = null;
-        try {
-            Gson gson = new Gson();
-            res = gson.fromJson(str_json, new TypeToken<Map<String, Object>>() {
-            }.getType());
-        } catch (JsonSyntaxException e) {
-        }
-        return res;
-    }
-
-    /***
-     * 驼峰命名转为下划线命名
-     */
-    private String humpToUnderline(String para) {
-        StringBuilder sb = new StringBuilder(para);
-        int temp = 0;//定位
-        if (!para.contains("_")) {
-            for (int i = 0; i < para.length(); i++) {
-                if (Character.isUpperCase(para.charAt(i))) {
-                    sb.insert(i + temp, "_");
-                    temp += 1;
-                }
-            }
-        }
-        return sb.toString().toUpperCase();
-    }
-
-}
-

+ 308 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/ClassDefChangeRecordService.java

@@ -0,0 +1,308 @@
+package com.persagy.dmp.rwd.edit.service;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.common.criteria.CriteriaUtils;
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.rwd.edit.config.web.UserUtils;
+import com.persagy.dmp.rwd.edit.entity.ClassDefChangeRecord;
+import com.persagy.dmp.rwd.edit.entity.QClassDefChangeRecord;
+import com.persagy.dmp.rwd.edit.enumeration.EnumOperationType;
+import com.persagy.dmp.rwd.edit.repository.ClassDefChangeRecordRepository;
+import com.persagy.dmp.rwd.model.ClassDefModel;
+import com.querydsl.core.types.dsl.BooleanExpression;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.transaction.Transactional;
+import java.util.*;
+
+@Slf4j
+@Service
+public class ClassDefChangeRecordService {
+
+    @Autowired
+    ClassDefChangeRecordRepository repository;
+
+    @Autowired
+    ClassDefService classDefService;
+
+    @Autowired
+    CriteriaUtils criteriaUtils;
+
+    private List<BooleanExpression> parse(ObjectNode object) {
+        List<BooleanExpression> list = new LinkedList<>();
+        QClassDefChangeRecord qt = QClassDefChangeRecord.classDefChangeRecord;
+        list.addAll(CriteriaUtils.parse(qt.id, object.get("id")));
+        list.addAll(CriteriaUtils.parse(qt.code, object.get("code")));
+        list.addAll(CriteriaUtils.parse(qt.majorCode, object.get("majorCode")));
+        list.addAll(CriteriaUtils.parse(qt.systemCode, object.get("systemCode")));
+        list.addAll(CriteriaUtils.parse(qt.equipmentCode, object.get("equipmentCode")));
+        list.addAll(CriteriaUtils.parse(qt.parentCode, object.get("parentCode")));
+        list.addAll(CriteriaUtils.parse(qt.operationType, object.get("operationType"), EnumOperationType.class));
+        list.addAll(CriteriaUtils.parse(qt.operationUser, object.get("operationUser")));
+        list.addAll(CriteriaUtils.parse(qt.operationTime, object.get("operationTime")));
+        list.addAll(CriteriaUtils.parse(qt.confirmUser, object.get("confirmUser")));
+        list.addAll(CriteriaUtils.parse(qt.confirmTime, object.get("confirmTime")));
+        list.addAll(CriteriaUtils.parse(qt.publishUser, object.get("publishUser")));
+        list.addAll(CriteriaUtils.parse(qt.publishTime, object.get("publishTime")));
+        list.addAll(CriteriaUtils.parse(qt.finishTime, object.get("finishTime")));
+        list.addAll(CriteriaUtils.parse(qt.state, object.get("state")));
+        list.addAll(CriteriaUtils.parse(qt.version, object.get("version")));
+        return list;
+    }
+
+    public PagedResponse<ClassDefChangeRecord> query(JacksonCriteria criteria) {
+        return criteriaUtils.query(QClassDefChangeRecord.classDefChangeRecord, this::parse, criteria);
+    }
+
+    @Transactional
+    public MapResponse create(ClassDefChangeRecord param) {
+        MapResponse response = new MapResponse();
+        String code = param.getCode();
+        if (code == null) {
+            response.setFail("code is required");
+            return response;
+        }
+        List<ClassDefModel> classDefList = queryClassDef(code);
+        if (EnumOperationType.create.equals(param.getOperationType())) {
+            if (classDefList.size() > 0) {
+                response.setFail("code is exists");
+                return response;
+            }
+        } else {
+            if (classDefList.size() == 0) {
+                response.setFail("code not exists");
+                return response;
+            }
+            ClassDefModel classDef = classDefList.get(0);
+            param.setGroupCode(classDef.getGroupCode());
+            param.setObjType(classDef.getObjType());
+            param.setName(classDef.getName());
+            if (param.getAliasCode() == null) {
+                param.setAliasCode(classDef.getAliasCode());
+            }
+            if (param.getAliasName() == null) {
+                param.setAliasName(classDef.getAliasName());
+            }
+            param.setType(classDef.getType());
+            param.setProjectId(classDef.getProjectId());
+            param.setMajorCode(classDef.getMajorCode());
+            param.setSystemCode(classDef.getSystemCode());
+            param.setEquipmentCode(classDef.getEquipmentCode());
+            param.setParentCode(classDef.getParentCode());
+        }
+        QClassDefChangeRecord qt = QClassDefChangeRecord.classDefChangeRecord;
+        BooleanExpression ex = qt.code.eq(code).and(qt.state.eq(1)).and(qt.version.isNull());
+        Iterable<ClassDefChangeRecord> all = repository.findAll(ex);
+        List<ClassDefChangeRecord> list = new ArrayList<>();
+        all.forEach(list::add);
+        if (list.size() > 0) {
+            repository.deleteAll(list);
+        }
+        param.setOperationUser(UserUtils.currentUserId() + "");
+        param.setOperationTime(new Date());
+        param.setValid(true);
+        param.setState(1);
+        repository.save(param);
+        response.add("id", param.getId());
+        return response;
+    }
+
+    private List<ClassDefModel> queryClassDef(String code) {
+        JacksonCriteria criteria = JacksonCriteria.newInstance();
+        criteria.add("type", "common");
+        criteria.add("code", code);
+        PagedResponse<ClassDefModel> query = classDefService.query(criteria);
+        List<ClassDefModel> data = query.getData();
+        return data;
+    }
+
+    @Transactional
+    public MapResponse update(ClassDefChangeRecord param) {
+        MapResponse response = new MapResponse();
+        Optional<ClassDefChangeRecord> optional = repository.findById(param.getId());
+        if (!optional.isPresent()) {
+            response.setFail("code not exists");
+            return response;
+        }
+        ClassDefChangeRecord changeRecord = optional.get();
+        if (changeRecord.getState() == 1 && changeRecord.getVersion() == null) {
+            if (param.getAliasCode() != null) {
+                changeRecord.setAliasCode(param.getAliasCode());
+            }
+            if (param.getAliasName() != null) {
+                changeRecord.setAliasName(param.getAliasName());
+            }
+        }
+        if (param.getState() != null) {
+            switch (param.getState()) {
+                case 2: {
+                    changeRecord.setConfirmUser(UserUtils.currentUserId() + "");
+                    changeRecord.setConfirmTime(new Date());
+                    break;
+                }
+                case 3: {
+                    changeRecord.setPublishUser(UserUtils.currentUserId() + "");
+                    changeRecord.setPublishTime(new Date());
+                    break;
+                }
+                case 4: {
+                    changeRecord.setFinishTime(new Date());
+                    break;
+                }
+                default: {
+                    break;
+                }
+            }
+        }
+        repository.save(changeRecord);
+        return response;
+    }
+
+    @Transactional
+    public void updateStateByVersion(Integer state, String version) {
+        JacksonCriteria criteria = JacksonCriteria.newInstance();
+        criteria.add("version", version);
+        PagedResponse<ClassDefChangeRecord> query = query(criteria);
+        if (query.getCount() == 0) {
+            return;
+        }
+        List<ClassDefChangeRecord> data = query.getData();
+        switch (state) {
+            case 2: {
+                for (ClassDefChangeRecord changeRecord : data) {
+                    changeRecord.setConfirmUser(UserUtils.currentUserId() + "");
+                    changeRecord.setConfirmTime(new Date());
+                }
+                break;
+            }
+            case 3: {
+                for (ClassDefChangeRecord changeRecord : data) {
+                    changeRecord.setPublishUser(UserUtils.currentUserId() + "");
+                    changeRecord.setPublishTime(new Date());
+                }
+                break;
+            }
+            case 4: {
+                for (ClassDefChangeRecord changeRecord : data) {
+                    changeRecord.setFinishTime(new Date());
+                }
+                break;
+            }
+            default: {
+                break;
+            }
+        }
+        repository.saveAll(data);
+    }
+
+    @Transactional
+    public MapResponse addVersion(String version, List<Integer> idList) {
+        MapResponse response = new MapResponse();
+//        JacksonCriteria criteria = JacksonCriteria.newInstance();
+//        criteria.add("version", version);
+//        Long count = rwdeditVersionService.query(criteria).getCount();
+//        if (count == 0) {
+//            response.setFail("version not exists");
+//            return response;
+//        }
+        Integer num = repository.addVersion(version, idList);
+        response.setMessage("update num: " + num);
+        return response;
+    }
+
+    @Transactional
+    public MapResponse delete(ClassDefChangeRecord param) {
+        MapResponse response = new MapResponse();
+        Optional<ClassDefChangeRecord> optional = repository.findById(param.getId());
+        if (optional.isPresent()) {
+            ClassDefChangeRecord changeRecord = optional.get();
+            if (changeRecord.getState() != 1 || changeRecord.getVersion() != null) {
+                response.setFail(changeRecord.getId() + " 不可删除!");
+                return response;
+            }
+        }
+        repository.delete(param);
+        return response;
+    }
+
+    public List<String> getSqlList(String version) {
+        List<String> sqlList = new ArrayList<>();
+        JacksonCriteria criteria = JacksonCriteria.newInstance();
+        criteria.add("version", version);
+        PagedResponse<ClassDefChangeRecord> response = query(criteria);
+        List<ClassDefChangeRecord> data = response.getData();
+        for (ClassDefChangeRecord changeRecord : data) {
+            StringBuilder sql = new StringBuilder();
+            switch (changeRecord.getOperationType()) {
+                case create: {
+                    String uuid = UUID.randomUUID().toString().replace("-", "");
+                    sql.append("INSERT INTO `rwd_def_class` (`id`,`code`,`obj_type`,`name`,`type`,`group_code`,`project_id`,`alias_code`,`alias_name`,`major_code`,`system_code`,`equipment_code`,`parent_code`) VALUES (");
+                    sql.append("'" + uuid + "',");
+                    sql.append("'" + changeRecord.getCode() + "',");
+                    if (changeRecord.getObjType() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getObjType().name() + "',");
+                    }
+                    sql.append("'" + changeRecord.getName() + "',");
+                    if (changeRecord.getType() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getType() + "',");
+                    }
+                    sql.append("'" + changeRecord.getGroupCode() + "',");
+                    sql.append("'" + changeRecord.getProjectId() + "',");
+                    sql.append("'" + changeRecord.getAliasCode() + "',");
+                    sql.append("'" + changeRecord.getAliasName() + "',");
+                    if (changeRecord.getMajorCode() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getMajorCode() + "',");
+                    }
+                    if (changeRecord.getSystemCode() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getSystemCode() + "',");
+                    }
+                    if (changeRecord.getEquipmentCode() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getEquipmentCode() + "',");
+                    }
+                    if (changeRecord.getParentCode() == null) {
+                        sql.append("null);");
+                    } else {
+                        sql.append("'" + changeRecord.getParentCode() + "');");
+                    }
+                    break;
+                }
+                case update: {
+                    sql.append("UPDATE `rwd_def_class` SET");
+                    sql.append(" `alias_code` = '" + changeRecord.getAliasCode() + "',");
+                    sql.append(" `alias_name` = '" + changeRecord.getAliasName() + "'");
+                    sql.append(" WHERE `code` = '" + changeRecord.getCode() + "'");
+                    sql.append(" and `group_code` = '" + changeRecord.getGroupCode() + "'");
+                    sql.append(" and `project_id` = '" + changeRecord.getProjectId() + "';");
+                    break;
+                }
+                case delete: {
+                    sql.append("DELETE FROM `rwd_def_class`");
+                    sql.append(" WHERE `code` = '" + changeRecord.getCode() + "'");
+                    sql.append(" and `group_code` = '" + changeRecord.getGroupCode() + "'");
+                    sql.append(" and `project_id` = '" + changeRecord.getProjectId() + "';");
+                    break;
+                }
+                default: {
+                    break;
+                }
+            }
+            sqlList.add(sql.toString());
+        }
+        return sqlList;
+    }
+}
+

+ 71 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/ClassDefService.java

@@ -0,0 +1,71 @@
+package com.persagy.dmp.rwd.edit.service;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.common.criteria.CriteriaUtils;
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.ListResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.rwd.edit.entity.ClassDef;
+import com.persagy.dmp.rwd.edit.entity.QClassDef;
+import com.persagy.dmp.rwd.enums.ObjType;
+import com.persagy.dmp.rwd.model.ClassDefModel;
+import com.querydsl.core.types.dsl.BooleanExpression;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+public class ClassDefService {
+
+    @Autowired
+    private CriteriaUtils criteriaUtils;
+
+    public ListResponse<ClassDefModel> queryClass(JacksonCriteria criteria) {
+        ListResponse<ClassDefModel> resp = new ListResponse<>();
+
+        Map<String, ClassDefModel> map = new HashMap<>();
+        // 查询平台级
+        JacksonCriteria jacksonCriteria = JacksonCriteria.newInstance();
+        jacksonCriteria.getCriteria().setAll(criteria.getCriteria());
+        jacksonCriteria.add("type", "common");
+        jacksonCriteria.add("groupCode", "0");
+        jacksonCriteria.setWithoutCount(true);
+        PagedResponse<ClassDefModel> queryResponse = query(jacksonCriteria);
+        for (ClassDefModel model : queryResponse.getData()) {
+            map.put(model.getCode(), model);
+        }
+
+        List<ClassDefModel> data = new ArrayList<>(map.size());
+        data.addAll(map.values());
+        resp.setData(data);
+        return resp;
+    }
+
+    private List<BooleanExpression> parse(ObjectNode object) {
+        List<BooleanExpression> list = new LinkedList<>();
+        QClassDef qt = QClassDef.classDef;
+        list.addAll(CriteriaUtils.parse(qt.objType, object.get("objType"), ObjType.class));
+        list.addAll(CriteriaUtils.parse(qt.code, object.get("code")));
+        return list;
+    }
+
+    public PagedResponse<ClassDefModel> query(JacksonCriteria criteria) {
+        PagedResponse<ClassDef> resp = criteriaUtils.query(QClassDef.classDef, this::parse, criteria);
+        PagedResponse<ClassDefModel> result = new PagedResponse<>();
+        result.setCount(resp.getCount());
+        List<ClassDef> dataList = resp.getData();
+        if (dataList != null && dataList.size() > 0) {
+            List<ClassDefModel> collect = dataList.stream().map(entity -> {
+                ClassDefModel model = entity.toModel();
+                return model;
+            }).collect(Collectors.toList());
+            result.setData(collect);
+        }
+        return result;
+    }
+}
+

+ 45 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/DtDataService.java

@@ -0,0 +1,45 @@
+package com.persagy.dmp.rwd.edit.service;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.common.criteria.CriteriaUtils;
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.rwd.edit.entity.DtData;
+import com.persagy.dmp.rwd.edit.entity.QDtData;
+import com.persagy.dmp.rwd.edit.model.DtDataModel;
+import com.querydsl.core.types.dsl.BooleanExpression;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class DtDataService {
+
+    @Autowired
+    private CriteriaUtils criteriaUtils;
+
+    private List<BooleanExpression> parse(ObjectNode criteria) {
+        // TODO
+        return null;
+    }
+
+    public PagedResponse<DtDataModel> query(JacksonCriteria criteria) {
+        PagedResponse<DtDataModel> result = new PagedResponse<>();
+
+        PagedResponse<DtData> resp = criteriaUtils.query(QDtData.dtData, this::parse, criteria);
+        result.setCount(resp.getCount());
+        List<DtData> dataList = resp.getData();
+        if (dataList != null && dataList.size() > 0) {
+            List<DtDataModel> collect = dataList.stream().map(entity -> {
+                DtDataModel model = entity.toModel();
+                return model;
+            }).collect(Collectors.toList());
+            result.setData(collect);
+        }
+        return result;
+    }
+}
+

+ 410 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/FuncidDefChangeRecordService.java

@@ -0,0 +1,410 @@
+package com.persagy.dmp.rwd.edit.service;
+
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.common.criteria.CriteriaUtils;
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.json.JacksonMapper;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.rwd.edit.config.web.UserUtils;
+import com.persagy.dmp.rwd.edit.entity.FuncidDefChangeRecord;
+import com.persagy.dmp.rwd.edit.entity.QFuncidDefChangeRecord;
+import com.persagy.dmp.rwd.edit.entity.RwdeditRefTypeInfos;
+import com.persagy.dmp.rwd.edit.enumeration.EnumOperationType;
+import com.persagy.dmp.rwd.edit.repository.FuncidDefChangeRecordRepository;
+import com.persagy.dmp.rwd.enums.FuncidDataType;
+import com.persagy.dmp.rwd.model.FuncidDefModel;
+import com.querydsl.core.types.dsl.BooleanExpression;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.transaction.Transactional;
+import java.util.*;
+
+@Slf4j
+@Service
+public class FuncidDefChangeRecordService {
+
+    @Autowired
+    FuncidDefChangeRecordRepository repository;
+
+    @Autowired
+    FuncidDefService funcidDefService;
+
+    @Autowired
+    RwdeditRefTypeInfosService rwdeditRefTypeInfosService;
+
+    @Autowired
+    CriteriaUtils criteriaUtils;
+
+    private List<BooleanExpression> parse(ObjectNode object) {
+        List<BooleanExpression> list = new LinkedList<>();
+        QFuncidDefChangeRecord qt = QFuncidDefChangeRecord.funcidDefChangeRecord;
+        list.addAll(CriteriaUtils.parse(qt.id, object.get("id")));
+        list.addAll(CriteriaUtils.parse(qt.code, object.get("code")));
+        list.addAll(CriteriaUtils.parse(qt.operationType, object.get("operationType"), EnumOperationType.class));
+        list.addAll(CriteriaUtils.parse(qt.operationUser, object.get("operationUser")));
+        list.addAll(CriteriaUtils.parse(qt.operationTime, object.get("operationTime")));
+        list.addAll(CriteriaUtils.parse(qt.confirmUser, object.get("confirmUser")));
+        list.addAll(CriteriaUtils.parse(qt.confirmTime, object.get("confirmTime")));
+        list.addAll(CriteriaUtils.parse(qt.publishUser, object.get("publishUser")));
+        list.addAll(CriteriaUtils.parse(qt.publishTime, object.get("publishTime")));
+        list.addAll(CriteriaUtils.parse(qt.finishTime, object.get("finishTime")));
+        list.addAll(CriteriaUtils.parse(qt.state, object.get("state")));
+        list.addAll(CriteriaUtils.parse(qt.version, object.get("version")));
+        return list;
+    }
+
+    public PagedResponse<FuncidDefChangeRecord> query(JacksonCriteria criteria) {
+        PagedResponse<FuncidDefChangeRecord> result = criteriaUtils.query(QFuncidDefChangeRecord.funcidDefChangeRecord, this::parse, criteria);
+        return result;
+    }
+
+    @Transactional
+    public MapResponse create(FuncidDefChangeRecord param) {
+        MapResponse response = new MapResponse();
+        String code = param.getCode();
+        String classCode = param.getClassCode();
+        if (code == null) {
+            response.setFail("code is required");
+            return response;
+        }
+        if (classCode == null) {
+            response.setFail("classCode is required");
+            return response;
+        }
+        List<FuncidDefModel> funcidDefList = queryFuncidDef(code, classCode);
+        if (EnumOperationType.create.equals(param.getOperationType())) {
+            if (funcidDefList.size() > 0) {
+                response.setFail("code is exists");
+                return response;
+            }
+        } else {
+            if (funcidDefList.size() == 0) {
+                response.setFail("code not exists");
+                return response;
+            }
+            FuncidDefModel funcidDef = funcidDefList.get(0);
+            param.setOrigCode(funcidDef.getOrigCode());
+            param.setName(funcidDef.getName());
+            if (param.getAliasCode() == null) {
+                param.setAliasCode(funcidDef.getAliasCode());
+            }
+            if (param.getAliasName() == null) {
+                param.setAliasName(funcidDef.getAliasName());
+            }
+            param.setClassCode(funcidDef.getClassCode());
+            param.setCategory(funcidDef.getCategory());
+            param.setType(funcidDef.getType());
+            param.setGroupCode(funcidDef.getGroupCode());
+            param.setProjectId(funcidDef.getProjectId());
+            if (param.getFirstTag() == null) {
+                param.setFirstTag(funcidDef.getFirstTag());
+            }
+            if (param.getSecondTag() == null) {
+                param.setSecondTag(funcidDef.getSecondTag());
+            }
+            param.setPriority(funcidDef.getPriority());
+            param.setInputMode(funcidDef.getInputMode());
+            param.setUnit(funcidDef.getUnit());
+            param.setDataType(funcidDef.getDataType());
+            param.setOrigDataType(funcidDef.getOrigDataType());
+            param.setIsMultiple(funcidDef.getIsMultiple());
+            param.setIsRegion(funcidDef.getIsRegion());
+            param.setFormater(funcidDef.getFormater());
+            param.setDataSource(funcidDef.getDataSource());
+            if (param.getNote() == null) {
+                param.setNote(funcidDef.getNote());
+            }
+            param.setSubFlag(funcidDef.getSubFlag());
+            param.setWeakPoint(funcidDef.getWeakPoint());
+        }
+        QFuncidDefChangeRecord qt = QFuncidDefChangeRecord.funcidDefChangeRecord;
+        BooleanExpression ex = qt.code.eq(code).and(qt.state.eq(1)).and(qt.version.isNull());
+        Iterable<FuncidDefChangeRecord> all = repository.findAll(ex);
+        List<FuncidDefChangeRecord> list = new ArrayList<>();
+        all.forEach(list::add);
+        if (list.size() > 0) {
+            repository.deleteAll(list);
+        }
+        param.setOperationUser(UserUtils.currentUserId() + "");
+        param.setOperationTime(new Date());
+        param.setValid(true);
+        param.setState(1);
+        repository.save(param);
+        response.add("id", param.getId());
+        return response;
+    }
+
+    private List<FuncidDefModel> queryFuncidDef(String code, String classCode) {
+        JacksonCriteria criteria = JacksonCriteria.newInstance();
+        criteria.add("type", "common");
+        criteria.add("code", code);
+        criteria.add("classCode", classCode);
+        PagedResponse<FuncidDefModel> query = funcidDefService.query(criteria);
+        List<FuncidDefModel> data = query.getData();
+        return data;
+    }
+
+    @Transactional
+    public MapResponse update(FuncidDefChangeRecord param) {
+        MapResponse response = new MapResponse();
+        Optional<FuncidDefChangeRecord> optional = repository.findById(param.getId());
+        if (!optional.isPresent()) {
+            response.setFail("code not exists");
+            return response;
+        }
+        FuncidDefChangeRecord changeRecord = optional.get();
+        if (changeRecord.getState() == 1 && changeRecord.getVersion() == null) {
+            if (param.getAliasCode() != null) {
+                changeRecord.setAliasCode(param.getAliasCode());
+            }
+            if (param.getAliasName() != null) {
+                changeRecord.setAliasName(param.getAliasName());
+            }
+            if (param.getFirstTag() != null) {
+                changeRecord.setFirstTag(param.getFirstTag());
+            }
+            if (param.getSecondTag() != null) {
+                changeRecord.setSecondTag(param.getSecondTag());
+            }
+            if (param.getNote() != null) {
+                changeRecord.setNote(param.getNote());
+            }
+        }
+        if (param.getState() != null) {
+            switch (param.getState()) {
+                case 2: {
+                    changeRecord.setConfirmUser(UserUtils.currentUserId() + "");
+                    changeRecord.setConfirmTime(new Date());
+                    break;
+                }
+                case 3: {
+                    changeRecord.setPublishUser(UserUtils.currentUserId() + "");
+                    changeRecord.setPublishTime(new Date());
+                    break;
+                }
+                case 4: {
+                    changeRecord.setFinishTime(new Date());
+                    break;
+                }
+                default: {
+                    break;
+                }
+            }
+        }
+        repository.save(changeRecord);
+        return response;
+    }
+
+    @Transactional
+    public void updateStateByVersion(Integer state, String version) {
+        JacksonCriteria criteria = JacksonCriteria.newInstance();
+        criteria.add("version", version);
+        PagedResponse<FuncidDefChangeRecord> query = query(criteria);
+        if (query.getCount() == 0) {
+            return;
+        }
+        List<FuncidDefChangeRecord> data = query.getData();
+        switch (state) {
+            case 2: {
+                for (FuncidDefChangeRecord changeRecord : data) {
+                    changeRecord.setConfirmUser(UserUtils.currentUserId() + "");
+                    changeRecord.setConfirmTime(new Date());
+                }
+                break;
+            }
+            case 3: {
+                for (FuncidDefChangeRecord changeRecord : data) {
+                    changeRecord.setPublishUser(UserUtils.currentUserId() + "");
+                    changeRecord.setPublishTime(new Date());
+                }
+                break;
+            }
+            case 4: {
+                for (FuncidDefChangeRecord changeRecord : data) {
+                    changeRecord.setFinishTime(new Date());
+                }
+                break;
+            }
+            default: {
+                break;
+            }
+        }
+        repository.saveAll(data);
+    }
+
+    @Transactional
+    public MapResponse addVersion(String version, List<Integer> idList) {
+        MapResponse response = new MapResponse();
+//        JacksonCriteria criteria = JacksonCriteria.newInstance();
+//        criteria.add("version", version);
+//        Long count = rwdeditVersionService.query(criteria).getCount();
+//        if (count == 0) {
+//            response.setFail("version not exists");
+//            return response;
+//        }
+        Integer num = repository.addVersion(version, idList);
+        response.setMessage("update num: " + num);
+        return response;
+    }
+
+    @Transactional
+    public MapResponse delete(FuncidDefChangeRecord param) {
+        MapResponse response = new MapResponse();
+        Optional<FuncidDefChangeRecord> optional = repository.findById(param.getId());
+        if (optional.isPresent()) {
+            FuncidDefChangeRecord changeRecord = optional.get();
+            if (changeRecord.getState() != 1 || changeRecord.getVersion() != null) {
+                response.setFail(changeRecord.getId() + " 不可删除!");
+                return response;
+            }
+        }
+        repository.delete(param);
+        return response;
+    }
+
+    public List<String> getSqlList(String version) {
+        List<String> sqlList = new ArrayList<>();
+        JacksonCriteria criteria = JacksonCriteria.newInstance();
+        criteria.add("version", version);
+        PagedResponse<FuncidDefChangeRecord> response = query(criteria);
+        List<FuncidDefChangeRecord> data = response.getData();
+        for (FuncidDefChangeRecord changeRecord : data) {
+            StringBuilder sql = new StringBuilder();
+            switch (changeRecord.getOperationType()) {
+                case create: {
+                    String uuid = UUID.randomUUID().toString().replace("-", "");
+                    sql.append("INSERT INTO `rwd_def_funcid`(`id`,`code`,`orig_code`,`name`,`alias_code`,`alias_name`,`class_code`,`type`," +
+                            "`group_code`,`project_id`,`category`,`first_tag`,`second_tag`,`priority`,`input_mode`,`unit`,`data_type`,`orig_data_type`," +
+                            "`is_multiple`,`is_region`,`formater`,`data_source`,`note`,`sub_flag`,`weak_point`) VALUES (");
+                    sql.append("'" + uuid + "',");
+                    sql.append("'" + changeRecord.getCode() + "',");
+                    if (changeRecord.getOrigCode() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getOrigCode() + "',");
+                    }
+                    sql.append("'" + changeRecord.getName() + "',");
+                    sql.append("'" + changeRecord.getAliasCode() + "',");
+                    sql.append("'" + changeRecord.getAliasName() + "',");
+                    sql.append("'" + changeRecord.getClassCode() + "',");
+                    if (changeRecord.getType() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getType() + "',");
+                    }
+                    sql.append("'" + changeRecord.getGroupCode() + "',");
+                    sql.append("'" + changeRecord.getProjectId() + "',");
+                    if (changeRecord.getCategory() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getCategory().name() + "',");
+                    }
+                    if (changeRecord.getFirstTag() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getFirstTag() + "',");
+                    }
+                    if (changeRecord.getSecondTag() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getSecondTag() + "',");
+                    }
+                    if (changeRecord.getPriority() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getPriority() + "',");
+                    }
+                    if (changeRecord.getInputMode() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getInputMode() + "',");
+                    }
+                    if (changeRecord.getUnit() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getUnit() + "',");
+                    }
+                    boolean refenumBool = FuncidDataType.REFENUM.equals(changeRecord.getDataType());
+                    if (refenumBool) {
+                        sql.append("'ENUM',");
+                    } else {
+                        sql.append("'" + changeRecord.getDataType().name() + "',");
+                    }
+                    if (changeRecord.getOrigDataType() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getOrigDataType() + "',");
+                    }
+                    if (changeRecord.getIsMultiple() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getIsMultiple() + "',");
+                    }
+                    if (changeRecord.getFormater() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getFormater() + "')");
+                    }
+                    if (refenumBool) {
+                        ArrayNode dataSource = changeRecord.getDataSource();
+                        String refKey = dataSource.get(0).get("refKey").asText();
+                        JacksonCriteria queryRef = JacksonCriteria.newInstance();
+                        queryRef.add("refKey", refKey);
+                        List<RwdeditRefTypeInfos> refInfos = rwdeditRefTypeInfosService.query(queryRef).getData();
+                        sql.append("'" + JacksonMapper.toSimpleJson(refInfos) + "')");
+                    } else {
+                        if (changeRecord.getDataSource() == null) {
+                            sql.append("null,");
+                        } else {
+                            sql.append("'" + JacksonMapper.toSimpleJson(changeRecord.getDataSource()) + "')");
+                        }
+                    }
+                    if (changeRecord.getNote() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getNote() + "')");
+                    }
+                    if (changeRecord.getSubFlag() == null) {
+                        sql.append("null,");
+                    } else {
+                        sql.append("'" + changeRecord.getSubFlag() + "')");
+                    }
+                    if (changeRecord.getWeakPoint() == null) {
+                        sql.append("null);");
+                    } else {
+                        sql.append("'" + changeRecord.getWeakPoint() + "');");
+                    }
+                    break;
+                }
+                case update: {
+                    sql.append("UPDATE `rwd_def_funcid` SET");
+                    sql.append(" `alias_code` = '" + changeRecord.getAliasCode() + "',");
+                    sql.append(" `alias_name` = '" + changeRecord.getAliasName() + "'");
+                    sql.append(" WHERE `code` = '" + changeRecord.getCode() + "'");
+                    sql.append(" WHERE `class_code` = '" + changeRecord.getClassCode() + "'");
+                    sql.append(" and `group_code` = '" + changeRecord.getGroupCode() + "'");
+                    sql.append(" and `project_id` = '" + changeRecord.getProjectId() + "';");
+                    break;
+                }
+                case delete: {
+                    sql.append("DELETE FROM `rwd_def_funcid`");
+                    sql.append(" WHERE `code` = '" + changeRecord.getCode() + "'");
+                    sql.append(" WHERE `class_code` = '" + changeRecord.getClassCode() + "'");
+                    sql.append(" and `group_code` = '" + changeRecord.getGroupCode() + "'");
+                    sql.append(" and `project_id` = '" + changeRecord.getProjectId() + "';");
+                    break;
+                }
+                default: {
+                    break;
+                }
+            }
+            sqlList.add(sql.toString());
+        }
+        return sqlList;
+    }
+}
+

+ 124 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/FuncidDefService.java

@@ -0,0 +1,124 @@
+package com.persagy.dmp.rwd.edit.service;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.common.criteria.CriteriaUtils;
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.ListResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.rwd.edit.entity.FuncidDef;
+import com.persagy.dmp.rwd.edit.entity.QFuncidDef;
+import com.persagy.dmp.rwd.edit.util.ClassCodeUtils;
+import com.persagy.dmp.rwd.enums.FuncidCategory;
+import com.persagy.dmp.rwd.enums.FuncidDataType;
+import com.persagy.dmp.rwd.model.ClassDefModel;
+import com.persagy.dmp.rwd.model.FuncidDefModel;
+import com.querydsl.core.types.dsl.BooleanExpression;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+public class FuncidDefService {
+
+    @Autowired
+    private ClassDefService classDefService;
+
+    @Autowired
+    private ClassCodeUtils classCodeUtils;
+
+    @Autowired
+    private CriteriaUtils criteriaUtils;
+
+
+    public ListResponse<FuncidDefModel> queryFuncid(JacksonCriteria request) {
+        ListResponse<FuncidDefModel> resp = new ListResponse<>();
+        List<FuncidDefModel> list = null;
+        boolean hasClassCode = request.getCriteria().has("classCode");
+        if (hasClassCode) {
+            list = queryWithClassCode(request);
+        }
+
+        resp.setData(list);
+        return resp;
+    }
+
+    public PagedResponse<FuncidDefModel> query(JacksonCriteria criteria) {
+        // 预处理criteria
+        classCodeUtils.prepareCriteriaForFuncid(criteria, "classCode");
+
+        PagedResponse<FuncidDef> resp = criteriaUtils.query(QFuncidDef.funcidDef, this::parse, criteria);
+        PagedResponse<FuncidDefModel> result = new PagedResponse<>();
+        result.setCount(resp.getCount());
+        List<FuncidDef> dataList = resp.getData();
+        if (dataList != null && dataList.size() > 0) {
+            List<FuncidDefModel> collect = dataList.stream().map(entity -> {
+                FuncidDefModel model = entity.toModel();
+                return model;
+            }).collect(Collectors.toList());
+            result.setData(collect);
+        }
+        return result;
+    }
+
+    private List<BooleanExpression> parse(ObjectNode object) {
+        // TODO
+        List<BooleanExpression> list = new LinkedList<>();
+        QFuncidDef qt = QFuncidDef.funcidDef;
+        list.addAll(criteriaUtils.parse(qt.category, object.get("category"), FuncidCategory.class));
+        list.addAll(criteriaUtils.parse(qt.dataType, object.get("dataType"), FuncidDataType.class));
+        return list;
+    }
+
+    private List<FuncidDefModel> queryWithClassCode(JacksonCriteria request) {
+        JsonNode classCode = request.getCriteria().get("classCode");
+        JacksonCriteria criteria = JacksonCriteria.newInstance();
+        criteria.getCriteria().set("code", classCode);
+        criteria.setWithoutCount(true);
+        ListResponse<ClassDefModel> classDefModelListResponse = classDefService.queryClass(criteria);
+        List<ClassDefModel> classDefModelList = classDefModelListResponse.getData();
+        List<FuncidDefModel> list = new LinkedList<>();
+        if (classDefModelList.size() > 0) {
+            for (ClassDefModel classDefModel : classDefModelList) {
+                JacksonCriteria funcidCriteria = JacksonCriteria.newInstance();
+                funcidCriteria.getCriteria().setAll(request.getCriteria());
+                if (classDefModel.getParentCode() != null) {
+                    funcidCriteria.add("classCode").in(Arrays.asList(classDefModel.getCode(), classDefModel.getParentCode()));
+                } else {
+                    funcidCriteria.add("classCode", classDefModel.getCode());
+                }
+                List<FuncidDefModel> funcidDefModels = queryWithoutClassCode(funcidCriteria);
+                funcidDefModels.forEach(model -> model.setClassCode(classDefModel.getCode()));
+                list.addAll(funcidDefModels);
+            }
+        }
+        return list;
+    }
+
+    private List<FuncidDefModel> queryWithoutClassCode(JacksonCriteria request) {
+        Map<String, FuncidDefModel> cache = new HashMap<>();
+        // 预处理criteria
+        classCodeUtils.prepareCriteriaForFuncid(request, "classCode");
+
+        ObjectNode requestCriteria = request.getCriteria();
+        // 查询平台级
+        JacksonCriteria criteria = JacksonCriteria.newInstance();
+        criteria.getCriteria().setAll(requestCriteria);
+        criteria.add("type", "common");
+        criteria.add("groupCode", "0");
+        criteria.setWithoutCount(true);
+        PagedResponse<FuncidDefModel> queryResp = query(criteria);
+
+        queryResp.getData().forEach(model -> cache.put(model.getClassCode() + "-" + model.getCode(), model));
+
+        // 继承父级信息点
+        List<FuncidDefModel> list = new LinkedList<>();
+        list.addAll(cache.values());
+        return list;
+    }
+}
+

+ 129 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/RwdeditRefTypeInfosService.java

@@ -0,0 +1,129 @@
+package com.persagy.dmp.rwd.edit.service;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.common.criteria.CriteriaUtils;
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.rwd.edit.config.web.UserUtils;
+import com.persagy.dmp.rwd.edit.entity.QRwdeditRefTypeInfos;
+import com.persagy.dmp.rwd.edit.entity.RwdeditRefTypeInfos;
+import com.persagy.dmp.rwd.edit.repository.RwdeditRefTypeInfosRepository;
+import com.querydsl.core.types.dsl.BooleanExpression;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.transaction.Transactional;
+import java.util.LinkedList;
+import java.util.List;
+
+@Slf4j
+@Service
+public class RwdeditRefTypeInfosService {
+
+    @Autowired
+    private CriteriaUtils criteriaUtils;
+
+    @Autowired
+    RwdeditRefTypeInfosRepository repository;
+
+    private List<BooleanExpression> parse(ObjectNode object) {
+        List<BooleanExpression> list = new LinkedList<>();
+        QRwdeditRefTypeInfos qt = QRwdeditRefTypeInfos.rwdeditRefTypeInfos;
+        list.addAll(CriteriaUtils.parse(qt.refKey, object.get("refKey")));
+        list.addAll(CriteriaUtils.parse(qt.code, object.get("code")));
+        list.addAll(CriteriaUtils.parse(qt.createUser, object.get("createUser")));
+        list.addAll(CriteriaUtils.parse(qt.updateUser, object.get("updateUser")));
+        return list;
+    }
+
+    public PagedResponse<RwdeditRefTypeInfos> query(JacksonCriteria criteria) {
+        return criteriaUtils.query(QRwdeditRefTypeInfos.rwdeditRefTypeInfos, this::parse, criteria);
+    }
+
+    @Transactional
+    public MapResponse create(RwdeditRefTypeInfos refTypeInfos) {
+        MapResponse response = new MapResponse();
+        String refKey = refTypeInfos.getRefKey();
+        String code = refTypeInfos.getCode();
+        if (refKey == null) {
+            response.setFail("refKey is required");
+            return response;
+        }
+        if (code == null) {
+            response.setFail("code is required");
+            return response;
+        }
+        JacksonCriteria criteria = JacksonCriteria.newInstance();
+        criteria.add("refKey", refKey);
+        criteria.add("code", code);
+        Long count = query(criteria).getCount();
+        if (count != 0L) {
+            response.setFail("refKey and code is exists");
+            return response;
+        }
+        refTypeInfos.setCreateUser(UserUtils.currentUserId());
+        repository.save(refTypeInfos);
+        response.add("refKey", refKey);
+        response.add("code", code);
+        return response;
+    }
+
+    @Transactional
+    public MapResponse update(RwdeditRefTypeInfos refTypeInfos) {
+        MapResponse response = new MapResponse();
+        String refKey = refTypeInfos.getRefKey();
+        String code = refTypeInfos.getCode();
+        if (refKey == null) {
+            response.setFail("refKey is required");
+            return response;
+        }
+        if (code == null) {
+            response.setFail("code is required");
+            return response;
+        }
+        JacksonCriteria criteria = JacksonCriteria.newInstance();
+        criteria.add("refKey", refKey);
+        criteria.add("code", code);
+        Long count = query(criteria).getCount();
+        if (count == 0L) {
+            response.setFail("refKey and code not exists");
+            return response;
+        }
+        RwdeditRefTypeInfos entity = query(criteria).getData().get(0);
+        entity.setUpdateUser(UserUtils.currentUserId());
+        if (refTypeInfos.getName() != null) {
+            entity.setName(refTypeInfos.getName());
+        }
+        repository.save(entity);
+        return response;
+    }
+
+    @Transactional
+    public MapResponse delete(RwdeditRefTypeInfos refTypeInfos) {
+        MapResponse response = new MapResponse();
+        String refKey = refTypeInfos.getRefKey();
+        String code = refTypeInfos.getCode();
+        if (refKey == null) {
+            response.setFail("refKey is required");
+            return response;
+        }
+        if (code == null) {
+            response.setFail("code is required");
+            return response;
+        }
+        JacksonCriteria criteria = JacksonCriteria.newInstance();
+        criteria.add("refKey", refKey);
+        criteria.add("code", code);
+        PagedResponse<RwdeditRefTypeInfos> query = query(criteria);
+        Long count = query.getCount();
+        if (count == 0L) {
+            response.setFail("refKey and code not exists");
+            return response;
+        }
+        repository.delete(query.getData().get(0));
+        return response;
+    }
+}
+

+ 116 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/RwdeditRefTypeService.java

@@ -0,0 +1,116 @@
+package com.persagy.dmp.rwd.edit.service;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.common.criteria.CriteriaUtils;
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.rwd.edit.config.web.UserUtils;
+import com.persagy.dmp.rwd.edit.entity.QRwdeditRefType;
+import com.persagy.dmp.rwd.edit.entity.RwdeditRefType;
+import com.persagy.dmp.rwd.edit.model.RwdeditRefTypeModel;
+import com.persagy.dmp.rwd.edit.repository.RwdeditRefTypeRepository;
+import com.querydsl.core.types.dsl.BooleanExpression;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.transaction.Transactional;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+public class RwdeditRefTypeService {
+
+    @Autowired
+    private CriteriaUtils criteriaUtils;
+
+    @Autowired
+    RwdeditRefTypeRepository repository;
+
+    private List<BooleanExpression> parse(ObjectNode object) {
+        List<BooleanExpression> list = new LinkedList<>();
+        QRwdeditRefType qt = QRwdeditRefType.rwdeditRefType;
+        list.addAll(CriteriaUtils.parse(qt.refKey, object.get("refKey")));
+        list.addAll(CriteriaUtils.parse(qt.createUser, object.get("createUser")));
+        list.addAll(CriteriaUtils.parse(qt.updateUser, object.get("updateUser")));
+        return list;
+    }
+
+    public PagedResponse<RwdeditRefTypeModel> query(JacksonCriteria criteria) {
+        PagedResponse<RwdeditRefType> resp = criteriaUtils.query(QRwdeditRefType.rwdeditRefType, this::parse, criteria);
+        PagedResponse<RwdeditRefTypeModel> result = new PagedResponse<>();
+        result.setCount(resp.getCount());
+        List<RwdeditRefType> dataList = resp.getData();
+        Set<String> withColumns = criteria.getWithColumns();
+        if (dataList != null && dataList.size() > 0) {
+            List<RwdeditRefTypeModel> collect = dataList.stream().map(entity -> {
+                RwdeditRefTypeModel model = entity.toModel();
+                if (withColumns != null && withColumns.contains("infos")) {
+                    model.setInfos(entity.getInfos());
+                }
+                return model;
+            }).collect(Collectors.toList());
+            result.setData(collect);
+        }
+        return result;
+    }
+
+    @Transactional
+    public MapResponse create(RwdeditRefTypeModel param) {
+        MapResponse response = new MapResponse();
+        String refKey = param.getRefKey();
+        if (refKey == null) {
+            response.setFail("refKey is required");
+            return response;
+        }
+        if (repository.findById(refKey).isPresent()) {
+            response.setFail("refKey is exists");
+            return response;
+        }
+        RwdeditRefType refType = RwdeditRefType.fromModel(param);
+        refType.setCreateUser(UserUtils.currentUserId());
+        repository.save(refType);
+        response.add("refKey", refKey);
+        return response;
+    }
+
+    @Transactional
+    public MapResponse update(RwdeditRefTypeModel param) {
+        MapResponse response = new MapResponse();
+        if (param.getRefKey() == null) {
+            response.setFail("refKey is required");
+            return response;
+        }
+        Optional<RwdeditRefType> optional = repository.findById(param.getRefKey());
+        if (!optional.isPresent()) {
+            response.setFail("refKey is exists");
+            return response;
+        }
+        RwdeditRefType refType = optional.get();
+        if (param.getName() != null) {
+            refType.setName(param.getName());
+            refType.setUpdateUser(UserUtils.currentUserId());
+        }
+        repository.save(refType);
+        response.add("refKey", refType.getRefKey());
+        return response;
+    }
+
+    @Transactional
+    public MapResponse delete(RwdeditRefTypeModel param) {
+        MapResponse response = new MapResponse();
+        String refKey = param.getRefKey();
+        if (refKey == null) {
+            response.setFail("refKey is required");
+            return response;
+        }
+        repository.deleteById(param.getRefKey());
+        return response;
+    }
+}
+

+ 173 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/RwdeditVersionService.java

@@ -0,0 +1,173 @@
+package com.persagy.dmp.rwd.edit.service;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.common.criteria.CriteriaUtils;
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.date.DateUtils;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.rwd.edit.config.web.UserUtils;
+import com.persagy.dmp.rwd.edit.entity.ClassDefChangeRecord;
+import com.persagy.dmp.rwd.edit.entity.FuncidDefChangeRecord;
+import com.persagy.dmp.rwd.edit.entity.QRwdeditVersion;
+import com.persagy.dmp.rwd.edit.entity.RwdeditVersion;
+import com.persagy.dmp.rwd.edit.repository.RwdeditVersionRepository;
+import com.querydsl.core.types.dsl.BooleanExpression;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.transaction.Transactional;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.util.*;
+
+@Service
+public class RwdeditVersionService {
+
+    @Autowired
+    private CriteriaUtils criteriaUtils;
+
+    @Autowired
+    private RwdeditVersionRepository repository;
+
+    @Autowired
+    private ClassDefChangeRecordService classDefChangeRecordService;
+
+    @Autowired
+    private FuncidDefChangeRecordService funcidDefChangeRecordService;
+
+    private List<BooleanExpression> parse(ObjectNode criteria) {
+        List<BooleanExpression> list = new LinkedList<>();
+        QRwdeditVersion qt = QRwdeditVersion.rwdeditVersion;
+        list.addAll(CriteriaUtils.parse(qt.version, criteria.get("version")));
+        list.addAll(CriteriaUtils.parse(qt.createTime, criteria.get("createTime")));
+        list.addAll(CriteriaUtils.parse(qt.createUser, criteria.get("createUser")));
+        list.addAll(CriteriaUtils.parse(qt.state, criteria.get("state")));
+        return list;
+    }
+
+    public PagedResponse<RwdeditVersion> query(JacksonCriteria criteria) {
+        return criteriaUtils.query(QRwdeditVersion.rwdeditVersion, this::parse, criteria);
+    }
+
+    @Transactional
+    public MapResponse create(RwdeditVersion param) {
+        MapResponse response = new MapResponse();
+        // TODO
+        String version = param.getVersion();
+        if (version == null) {
+            response.setFail("版本编号不可为空!");
+            return response;
+        }
+        long count = repository.count(QRwdeditVersion.rwdeditVersion.version.eq(version));
+        if (count > 0) {
+            response.setFail("版本编号已存在!");
+            return response;
+        }
+
+        RwdeditVersion entity = new RwdeditVersion();
+        entity.setVersion(version);
+        entity.setState(1);
+        entity.setCreateTime(new Date());
+        entity.setCreateUser(UserUtils.currentUserId() + "");
+        repository.save(entity);
+        response.add("id", entity.getVersion());
+        return response;
+    }
+
+    @Transactional
+    public MapResponse update(RwdeditVersion param) {
+        MapResponse response = new MapResponse();
+        String version = param.getVersion();
+        Integer state = param.getState();
+        if (version == null) {
+            response.setFail("version is required");
+            return response;
+        }
+        if (state == null) {
+            response.setFail("state is required");
+            return response;
+        }
+        Optional<RwdeditVersion> data = repository.findById(version);
+        if (!data.isPresent()) {
+            response.setFail("version not exists");
+            return response;
+        }
+        JacksonCriteria criteria = JacksonCriteria.newInstance();
+        criteria.add("version", version);
+        //修改类型变更记录状态
+        classDefChangeRecordService.updateStateByVersion(state, version);
+        //修改信息点变更记录状态
+        funcidDefChangeRecordService.updateStateByVersion(state, version);
+        RwdeditVersion rwdeditVersion = data.get();
+        rwdeditVersion.setState(state);
+        repository.save(rwdeditVersion);
+        return response;
+    }
+
+    @Transactional
+    public MapResponse delete(RwdeditVersion param) {
+        MapResponse response = new MapResponse();
+        String version = param.getVersion();
+        Integer state = param.getState();
+        if (version == null) {
+            response.setFail("version is required");
+            return response;
+        }
+        Optional<RwdeditVersion> data = repository.findById(version);
+        if (!data.isPresent()) {
+            response.setFail("version not exists");
+            return response;
+        }
+        RwdeditVersion rwdeditVersion = data.get();
+        if (state == 1) {
+            repository.delete(rwdeditVersion);
+        } else {
+            JacksonCriteria criteria = JacksonCriteria.newInstance();
+            criteria.add("version", rwdeditVersion.getVersion());
+            PagedResponse<ClassDefChangeRecord> classDefResponse = classDefChangeRecordService.query(criteria);
+            PagedResponse<FuncidDefChangeRecord> funcidDefResponse = funcidDefChangeRecordService.query(criteria);
+            if (classDefResponse.getCount() == 0 && funcidDefResponse.getCount() == 0) {
+                repository.delete(rwdeditVersion);
+            } else {
+                response.setFail("该版本有变更记录不可直接删除");
+            }
+        }
+        return response;
+    }
+
+    @Transactional
+    public void download(HttpServletResponse resp, String version) {
+        String fileName = DateUtils.format(new Date()) + ".sql";
+        List<String> sqlList = new ArrayList<>();
+        sqlList.addAll(classDefChangeRecordService.getSqlList(version));
+        sqlList.addAll(funcidDefChangeRecordService.getSqlList(version));
+
+        OutputStream out = null;
+        try {
+            String resultFileName = URLEncoder.encode(fileName, "UTF-8");
+            resp.reset();// 清空输出流
+            resp.setCharacterEncoding("UTF-8");
+            resp.setHeader("Content-disposition", "attachment; filename=" + resultFileName);
+            resp.setContentType("application/txt");
+            out = resp.getOutputStream();
+            for (String sql : sqlList) {
+                out.write(sql.getBytes());
+            }
+            out.flush();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (out != null) {
+                    out.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}
+

+ 65 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/util/ClassCodeUtils.java

@@ -0,0 +1,65 @@
+package com.persagy.dmp.rwd.edit.util;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+import com.fasterxml.jackson.databind.node.JsonNodeType;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.common.criteria.JacksonCriteria;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author: yaoll
+ * @date: 2020-09-22
+ * @verison: 1.0
+ */
+@Component
+public class ClassCodeUtils {
+
+    public void prepareCriteriaForFuncid(JacksonCriteria criteria, String codeName) {
+        ObjectNode objectNode = criteria.getCriteria();
+        if (objectNode.has(codeName)) {
+            JsonNode classCodeNode = objectNode.get(codeName);
+            JsonNodeType nodeType = classCodeNode.getNodeType();
+            if (nodeType == JsonNodeType.ARRAY) {
+                ArrayNode array = JsonNodeFactory.instance.arrayNode();
+                for (JsonNode jsonNode : ((ArrayNode) classCodeNode)) {
+                    String str = jsonNode.asText();
+                    if (str.indexOf("&") == -1) {
+                        array.add(str);
+                    } else {
+                        array.add(str.substring(str.indexOf("&")));
+                    }
+                }
+                objectNode.remove(codeName);
+                objectNode.set(codeName, array);
+            } else if (nodeType == JsonNodeType.OBJECT) {
+                ObjectNode obj = (ObjectNode) classCodeNode;
+                if (obj.has("$in")) {
+                    JsonNode $in = obj.get("$in");
+                    if ($in.getNodeType() == JsonNodeType.ARRAY) {
+                        ArrayNode array = JsonNodeFactory.instance.arrayNode();
+                        for (JsonNode jsonNode : ((ArrayNode) $in)) {
+                            String str = jsonNode.asText();
+                            if (str.indexOf("&") == -1) {
+                                array.add(str);
+                            } else {
+                                array.add(str.substring(str.indexOf("&")));
+                            }
+                        }
+                        obj.remove("$in");
+                        obj.set("$in", array);
+                    }
+                }
+            } else if (nodeType == JsonNodeType.STRING) {
+                String code = classCodeNode.asText();
+                int idx = code.indexOf("&");
+                if (idx > -1) {
+                    criteria.add(codeName, code.substring(0, idx));
+                }
+            }
+        }
+    }
+
+
+}

+ 1 - 1
dmp-rwd-edit/src/main/resources/application.yml

@@ -16,7 +16,7 @@ spring:
     - dev,log-dev
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://192.168.64.15:9934/dmp_rwdedit?useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8&useSSL=false
+    url: jdbc:mysql://192.168.64.15:9934/dmp_rwdedit?useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
     username: root
     password: brzj123456
     type: com.alibaba.druid.pool.DruidDataSource

+ 590 - 0
dmp-rwd-edit/数据字典编辑工具接口文档.md

@@ -0,0 +1,590 @@
+## 类型
+### 类型-查询变更记录
+
+地址:POST /rwdedit/classDef/changeRecord/query
+
+参数
+
+```json
+{
+    "criteria":{
+        "id":1,
+        "code":"project",//类型编码
+        "operationType":"create",//创建:create 修改:update 删除:delete
+        "operationUser":"90000000",//操作人
+        "operationTime":1611295200000,//操作时间
+        "confirmUser":"90000000",//确认人
+        "confirmTime":1611295200000,//确认时间
+        "publishUser":"90000000",//发布人
+        "publishTime":1611295200000,//发布时间
+        "finishTime":1611295200000,//完成时间
+        "state":0,//状态 0.取消 1.初始化 2.确认 3.发布 4.完成
+        "version":"3.1.3"//版本编号
+    },
+    "page":1,
+    "size":10
+}
+```
+
+返回结果
+
+```json
+{
+    "result": "success",
+    "data": [
+        {
+            "id": 1,
+            "code": "project",
+            "operationType": "update",
+            "operationUser": "90000000",
+            "operationTime": 1611295200000,
+            "confirmUser": "90000000",
+            "confirmTime": 1611295200000,
+            "publishUser": "90000000",
+            "publishTime": 1611295200000,
+            "finishTime": 1611312582000,
+            "valid": true,
+            "state": 4
+        }
+    ],
+    "count": 1
+}
+```
+
+### 类型-新增变更记录
+
+地址:POST /rwdedit/classDef/changeRecord/create
+
+参数
+
+ ```json
+{
+    "code": "projectItem",//必传 信息点编码
+    //参考物理世界-类型定义接口文档
+    "operationType": "create"
+}
+ ```
+
+返回结果
+
+```json
+{
+    "result": "success",
+    "data": {
+        "id": 2
+    }
+}
+```
+
+### 类型-修改变更记录
+
+地址:POST /rwdedit/classDef/changeRecord/update
+
+ 参数
+
+```json
+{
+      "id":"1",//必传
+      "aliasCode":"project",//选填 别编码
+      "aliasName":"项目",//选填 别名称
+}  
+```
+
+ 返回结果
+
+```json
+{
+    "result": "success"
+}
+```
+### 类型-删除变更记录
+
+
+地址:POST /rwdedit/classDef/changeRecord/delete
+
+参数
+
+```json
+    {
+        "id":1 //变更记录id
+    }
+```
+
+返回结果
+
+```json
+{
+    "result": "success"
+}
+```
+
+
+### 类型-加入版本号
+
+
+地址:POST /rwdedit/classDef/changeRecord/addVersion?version=3.1.1
+
+路径参数说明
+```
+   version:版本编号id
+```
+
+参数
+
+```json
+    [
+        1,2,3 //变更记录id
+    ]
+```
+
+返回结果
+
+```json
+{
+    "result": "success"
+}
+```
+ 
+## 信息点
+ 
+### 信息点-查询变更记录
+
+地址:POST /rwdedit/funcidDef/changeRecord/query
+
+参数
+
+```json
+{
+    "criteria":{
+        "id":1,
+        "code":"project",//类型编码
+        "operationType":"create",//创建:create 修改:update 删除:delete
+        "operationUser":"90000000",//操作人
+        "operationTime":1611295200000,//操作时间
+        "confirmUser":"90000000",//确认人
+        "confirmTime":1611295200000,//确认时间
+        "publishUser":"90000000",//发布人
+        "publishTime":1611295200000,//发布时间
+        "finishTime":1611295200000,//完成时间
+        "state":0,//状态 0.取消 1.初始化 2.确认 3.发布 4.完成
+        "version":"3.1.3"//版本编号
+    },
+    "page":1,
+    "size":10
+}
+```
+
+返回结果
+
+```json
+{
+    "result": "success",
+    "data": [
+        {
+            "id": 1,
+            "code": "project",
+            "operationType": "update",
+            "operationUser": "90000000",
+            "operationTime": 1611295200000,
+            "confirmUser": "90000000",
+            "confirmTime": 1611295200000,
+            "publishUser": "90000000",
+            "publishTime": 1611295200000,
+            "finishTime": 1611312582000,
+            "valid": true,
+            "state": 4
+        }
+    ],
+    "count": 1
+}
+```
+
+### 信息点-新增变更记录
+
+地址:POST /rwdedit/funcidDef/changeRecord/create
+
+参数
+
+ ```json
+{
+    "code": "projectItem",//必传 信息点编码
+    "classCode": "projectItem",//必传 类型编码
+    //参考物理世界-信息点定义接口文档
+    "operationType": "create"
+}
+ ```
+
+返回结果
+
+```json
+{
+    "result": "success",
+    "data": {
+        "id": 2
+    }
+}
+```
+
+### 信息点-修改变更记录
+
+地址:POST /rwdedit/funcidDef/changeRecord/update
+
+ 参数
+
+```json
+{
+      "id":"1",//必传
+      "aliasCode":"project",//选填 别编码
+      "aliasName":"项目",//选填 别名称
+      "firstTag":"建筑信息",//选填 一级标签
+      "secondTag":"结构参数",//选填 二级标签
+      "note":"备注",//选填 备注
+}   
+```
+
+返回结果
+
+```json
+{
+    "result": "success"
+}
+```
+### 信息点-删除变更记录
+
+
+地址:POST /rwdedit/funcidDef/changeRecord/delete
+
+参数
+
+```json
+    {
+        "id":1 //变更记录id
+    }
+```
+
+返回结果
+
+```json
+{
+    "result": "success"
+}
+```
+
+### 信息点-加入版本号
+
+
+地址:POST /rwdedit/funcidDef/changeRecord/addVersion?version=3.1.1
+
+路径参数说明
+```
+   version:版本编号id
+```
+
+参数
+
+```json
+    [
+        1,2,3 //变更记录id
+    ]
+```
+
+返回结果
+
+```json
+{
+    "result": "success"
+}
+```
+### 信息点-查询所有引用类型
+
+
+地址:POST /rwdedit/ref/type/query
+
+参数
+
+```json
+    {
+    "criteria":{}
+}
+```
+
+返回结果
+
+```json
+{
+    {
+    "result": "success",
+    "data": [
+        {
+            "refKey": "airWindRating", //引用类型键
+            "name": "空气风力等级",//引用类型名称
+            "createUser": 0,
+            "createTime": 1614046154000,
+            "updateUser": 0,
+            "updateTime": 1614046241000
+        }
+    ],
+    "count": 1
+}
+}
+```
+
+## 版本
+
+### 版本号查询
+
+
+地址:POST /rwdedit/version/query
+
+参数
+
+```json
+{
+    "criteria":{
+        "id":1,
+        "version":"3.1.1",//版本编号
+        "createTime":"1611295200000",//创建时间
+        "createUser":"90000000",//创建人
+    },
+    "page":1,
+    "size":10
+}
+```
+
+返回结果
+
+```json
+{
+    "result": "success",
+    "data": [
+        {
+            "id":1,
+            "version":"3.1.1",//版本编号
+            "createTime":"1611295200000",//创建时间
+            "createUser":"90000000",//创建人
+         }
+    ],
+    "count": 1
+}
+```
+### 新增版本号
+
+
+地址:POST /rwdedit/version/create
+
+参数
+
+```json
+{
+    "version":"3.1.1"//版本编号
+}
+```
+
+返回结果
+
+```json
+{
+    "result": "success"
+}
+```
+### 修改版本状态
+
+
+地址:POST /rwdedit/version/update
+
+参数
+
+```json
+    {
+        "version":"1.1.1",
+        "state":3
+    }
+```
+
+返回结果
+
+```json
+{
+    "result": "success"
+}
+```
+
+### 发布下载
+
+地址:POST /rwdedit/version/download?version=1.1.1
+
+ 返回结果 sql文件
+
+## 知识库
+
+### 知识库-创建知识库引用
+
+
+地址:POST /rwdedit/ref/type/create
+
+参数
+
+```json
+{
+    "refKey": "test",//必填
+    "name":"test"
+}
+```
+
+返回结果
+
+```json
+{
+    "result": "success",
+    "data": {
+        "refKey": "test"
+    }
+}
+```
+
+### 知识库-修改知识库引用
+
+
+地址:POST /rwdedit/ref/type/update
+
+参数
+
+```json
+{
+    "refKey": "test",//必填
+    "name":"test2"
+}
+```
+
+返回结果
+
+```json
+{
+    "result": "success",
+    "data": {
+        "refKey": "test"
+    }
+}
+```
+### 知识库-删除知识库引用
+
+
+地址:POST /rwdedit/ref/type/delete
+
+参数
+
+```json
+{
+    "refKey": "test"//必填
+}
+```
+
+返回结果
+
+```json
+{
+    "result": "success",
+    "data": {
+        "refKey": "test"
+    }
+}
+```
+### 知识库信息-查询知识库详情
+
+
+地址:POST /rwdedit/ref/type/infos/query
+
+参数
+
+```json
+{
+    "refKey": "test",//必填
+    "name":"test"
+}
+```
+
+返回结果
+
+```json
+{
+    "result": "success",
+    "data": {
+        "refKey": "test"
+    }
+}
+```
+### 知识库-创建知识库详情
+
+
+地址:POST /rwdedit/ref/type/infos/create
+
+参数
+
+```json
+{
+    "refKey": "test",//必填
+    "code": "test",//必填
+    "name":"test"
+}
+```
+
+返回结果
+
+```json
+{
+    "result": "success",
+    "data": {
+        "refKey": "test"
+    }
+}
+```
+
+### 知识库-修改知识库详情
+
+
+地址:POST /rwdedit/ref/type/infos/update
+
+参数
+
+```json
+{
+    "refKey": "test",//必填
+    "code": "test",//必填
+    "name":"test2"
+}
+```
+
+返回结果
+
+```json
+{
+    "result": "success",
+    "data": {
+        "refKey": "test"
+    }
+}
+```
+### 知识库-删除知识库详情
+
+
+地址:POST /rwdedit/ref/type/infos/delete
+
+参数
+
+```json
+{
+    "refKey": "test",//必填
+    "code": "test"//必填
+}
+```
+
+返回结果
+
+```json
+{
+    "result": "success",
+    "data": {
+        "refKey": "test"
+    }
+}
+```

+ 2 - 0
dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/ObjectInstanceQueryService.java

@@ -110,8 +110,10 @@ public class ObjectInstanceQueryService extends BaseService {
 			if (funcidDataType == FuncidDataType.STRING) {
 				list.addAll(CriteriaUtils.parse(Expressions.stringTemplate(exp, qt.infos), value));
 			} else if (funcidDataType == FuncidDataType.INTEGER) {
+				exp = "ifnull(json_extract({0}, '$." + infoCode + "'), -9999)";
 				list.addAll(CriteriaUtils.parse(Expressions.numberTemplate(Long.class, exp, qt.infos), value));
 			} else if (funcidDataType == FuncidDataType.DOUBLE) {
+				exp = "ifnull(json_extract({0}, '$." + infoCode + "'), -9999.99)";
 				list.addAll(CriteriaUtils.parse(Expressions.numberTemplate(Double.class, exp, qt.infos), value));
 			} else if (funcidDataType == FuncidDataType.BOOLEAN) {
 				// TODO