Browse Source

数据字典编辑工具 - 版本管理

yucheng 3 years ago
parent
commit
69cdc57cb9
25 changed files with 766 additions and 0 deletions
  1. 30 0
      dc-business/dc-dictionary-manage/pom.xml
  2. 24 0
      dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/constant/VersionOperator.java
  3. 23 0
      dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/constant/VersionOperatorLevel.java
  4. 26 0
      dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/constant/VersionState.java
  5. 51 0
      dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/controller/VersionDefineController.java
  6. 20 0
      dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/dao/ObjectInfoHistoryMapper.java
  7. 20 0
      dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/dao/ObjectTypeHistoryMapper.java
  8. 12 0
      dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/dao/VersionDefineMapper.java
  9. 14 0
      dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/entity/ObjectInfo.java
  10. 19 0
      dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/entity/ObjectInfoHistory.java
  11. 14 0
      dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/entity/ObjectType.java
  12. 19 0
      dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/entity/ObjectTypeHistory.java
  13. 37 0
      dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/entity/VersionDefine.java
  14. 44 0
      dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/service/IObjectInfoHistoryService.java
  15. 45 0
      dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/service/IObjectTypeHistoryService.java
  16. 31 0
      dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/service/IVersionDefineService.java
  17. 60 0
      dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/service/impl/ObjectInfoHistoryServiceImpl.java
  18. 60 0
      dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/service/impl/ObjectTypeHistoryServiceImpl.java
  19. 136 0
      dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/service/impl/VersionDefineServiceImpl.java
  20. 11 0
      dc-business/dc-dictionary-manage/src/main/resources/bootstrap.yml
  21. 0 0
      dc-business/dc-dictionary-manage/src/main/resources/db.init/data.sql
  22. 41 0
      dc-business/dc-dictionary-manage/src/main/resources/db.init/schema.sql
  23. 15 0
      dc-business/dc-dictionary-manage/src/main/resources/mapper/ObjectInfoHistoryMapper.xml
  24. 13 0
      dc-business/dc-dictionary-manage/src/main/resources/mapper/ObjectTypeHistoryMapper.xml
  25. 1 0
      dc-business/pom.xml

+ 30 - 0
dc-business/dc-dictionary-manage/pom.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>dc-business</artifactId>
+        <groupId>com.persagy</groupId>
+        <version>1.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>dc-dictionary-manage</artifactId>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <!-- 配置中心(包含注册中心) -->
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>integrated-config-client</artifactId>
+        </dependency>
+        <!-- 项目启动 -->
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>dc-server</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>dc-mybatis</artifactId>
+        </dependency>
+    </dependencies>
+</project>

+ 24 - 0
dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/constant/VersionOperator.java

@@ -0,0 +1,24 @@
+package com.persagy.dc.dictionary.constant;
+
+import lombok.Getter;
+
+/**
+ * 版本操作
+ * @author Charlie Yu
+ * @date 2021-06-23
+ */
+@Getter
+public enum VersionOperator {
+    /** 版本操作 */
+    CREATE("CREATE", "新增"),
+    UPDATE("UPDATE", "修改"),
+    DELETE("DELETE", "删除");
+
+    private String index;
+    private String name;
+
+    VersionOperator(String index, String name) {
+        this.index = index;
+        this.name = name;
+    }
+}

+ 23 - 0
dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/constant/VersionOperatorLevel.java

@@ -0,0 +1,23 @@
+package com.persagy.dc.dictionary.constant;
+
+import lombok.Getter;
+
+/**
+ * 操作等级
+ * @author Charlie Yu
+ * @date 2021-06-23
+ */
+@Getter
+public enum VersionOperatorLevel {
+    /** 操作等级 */
+    NORMAL(0, "普通"),
+    MAJOR(1, "重大");
+
+    private Integer index;
+    private String name;
+
+    VersionOperatorLevel(Integer index, String name) {
+        this.index = index;
+        this.name = name;
+    }
+}

+ 26 - 0
dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/constant/VersionState.java

@@ -0,0 +1,26 @@
+package com.persagy.dc.dictionary.constant;
+
+import lombok.Getter;
+
+/**
+ * 版本状态
+ * @author Charlie Yu
+ * @date 2021-06-23
+ */
+@Getter
+public enum VersionState {
+    /** 版本状态 */
+    CANCELED("0", "已取消"),
+    TO_CONFIRM("1", "待确认"),
+    TO_PUBLISH("2", "待发布"),
+    PUBLISHING("3", "发布中"),
+    FINISHED("4", "已完成");
+
+    private String index;
+    private String name;
+
+    VersionState(String index, String name) {
+        this.index = index;
+        this.name = name;
+    }
+}

+ 51 - 0
dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/controller/VersionDefineController.java

@@ -0,0 +1,51 @@
+package com.persagy.dc.dictionary.controller;
+
+import cn.hutool.core.util.StrUtil;
+import com.persagy.dc.common.constant.ResponseCode;
+import com.persagy.dc.common.exception.BusinessException;
+import com.persagy.dc.common.model.response.CommonResult;
+import com.persagy.dc.common.utils.ResultHelper;
+import com.persagy.dc.dictionary.entity.VersionDefine;
+import com.persagy.dc.dictionary.service.IVersionDefineService;
+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;
+
+/**
+ * 版本定义Controller
+ * @author Charlie Yu
+ * @date 2021-06-23
+ */
+@RestController
+@RequestMapping("/rwdedit/version")
+public class VersionDefineController {
+
+    @Autowired
+    private IVersionDefineService service;
+
+    @PostMapping("/create")
+    public CommonResult<VersionDefine> create(@RequestBody VersionDefine define) {
+        if(StrUtil.isBlank(define.getVersion())) {
+            throw new BusinessException(ResponseCode.A0400.getCode(), ResponseCode.A0400.getDesc());
+        }
+        define = service.insertVersion(define);
+        return ResultHelper.single(define);
+    }
+
+    @PostMapping("/update")
+    public CommonResult<VersionDefine> update(@RequestBody VersionDefine define) {
+        if(StrUtil.isBlank(define.getVersion())) {
+            throw new BusinessException(ResponseCode.A0400.getCode(), ResponseCode.A0400.getDesc());
+        }
+        define = service.updateVersion(define);
+        return ResultHelper.single(define);
+    }
+
+    @PostMapping("/delete")
+    public CommonResult delete(@RequestBody String id) {
+        service.deleteVersion(id);
+        return ResultHelper.success();
+    }
+}

+ 20 - 0
dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/dao/ObjectInfoHistoryMapper.java

@@ -0,0 +1,20 @@
+package com.persagy.dc.dictionary.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.dc.dictionary.entity.ObjectInfoHistory;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 信息点历史dao
+ * @author Charlie Yu
+ * @date 2021-06-23
+ */
+public interface ObjectInfoHistoryMapper extends BaseMapper<ObjectInfoHistory> {
+
+    /**
+     * 按版本复制
+     * @param srcVersion 源版本
+     * @param version 复制后版本
+     */
+    void copyByVersion(@Param("srcVersion")String srcVersion, @Param("version")String version);
+}

+ 20 - 0
dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/dao/ObjectTypeHistoryMapper.java

@@ -0,0 +1,20 @@
+package com.persagy.dc.dictionary.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.dc.dictionary.entity.ObjectTypeHistory;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 对象类型历史dao
+ * @author Charlie Yu
+ * @date 2021-06-23
+ */
+public interface ObjectTypeHistoryMapper extends BaseMapper<ObjectTypeHistory> {
+
+    /**
+     * 按版本复制
+     * @param srcVersion 源版本
+     * @param version 复制后版本
+     */
+    void copyByVersion(@Param("srcVersion")String srcVersion, @Param("version")String version);
+}

+ 12 - 0
dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/dao/VersionDefineMapper.java

@@ -0,0 +1,12 @@
+package com.persagy.dc.dictionary.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.dc.dictionary.entity.VersionDefine;
+
+/**
+ * 版本定义dao
+ * @author Charlie Yu
+ * @date 2021-06-23
+ */
+public interface VersionDefineMapper extends BaseMapper<VersionDefine> {
+}

+ 14 - 0
dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/entity/ObjectInfo.java

@@ -0,0 +1,14 @@
+package com.persagy.dc.dictionary.entity;
+
+import com.persagy.dc.common.model.entity.AuditableEntity;
+import lombok.Data;
+
+/**
+ * 对象信息点
+ * 应该是在RWD的SDK中,但SDK现在没有,所以暂时先在此定义一个
+ * @author Charlie Yu
+ * @date 2021-06-23
+ */
+@Data
+public class ObjectInfo extends AuditableEntity {
+}

+ 19 - 0
dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/entity/ObjectInfoHistory.java

@@ -0,0 +1,19 @@
+package com.persagy.dc.dictionary.entity;
+
+import lombok.Data;
+
+/**
+ * 信息点 历史记录
+ * @author Charlie Yu
+ * @date 2021-06-23
+ */
+@Data
+public class ObjectInfoHistory extends ObjectInfo{
+
+    /** 版本号 */
+    private String version;
+    /** 操作:CREATE,UPDATE,DELETE */
+    private String operator;
+    /** 操作等级:0-普通,1-重大 */
+    private Integer operatorLevel;
+}

+ 14 - 0
dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/entity/ObjectType.java

@@ -0,0 +1,14 @@
+package com.persagy.dc.dictionary.entity;
+
+import com.persagy.dc.common.model.entity.AuditableEntity;
+import lombok.Data;
+
+/**
+ * 对象类型
+ * 应该是在RWD的SDK中,但SDK现在没有,所以暂时先在此定义一个
+ * @author Charlie Yu
+ * @date 2021-06-23
+ */
+@Data
+public class ObjectType extends AuditableEntity {
+}

+ 19 - 0
dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/entity/ObjectTypeHistory.java

@@ -0,0 +1,19 @@
+package com.persagy.dc.dictionary.entity;
+
+import lombok.Data;
+
+/**
+ * 对象类型 历史记录
+ * @author Charlie Yu
+ * @date 2021-06-23
+ */
+@Data
+public class ObjectTypeHistory extends ObjectType{
+
+    /** 版本号 */
+    private String version;
+    /** 操作:CREATE,UPDATE,DELETE */
+    private String operator;
+    /** 操作等级:0-普通,1-重大 */
+    private Integer operatorLevel;
+}

+ 37 - 0
dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/entity/VersionDefine.java

@@ -0,0 +1,37 @@
+package com.persagy.dc.dictionary.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.persagy.dc.common.lang.PsDateTime;
+import com.persagy.dc.common.model.entity.AuditableEntity;
+import lombok.Data;
+
+/**
+ * 版本定义
+ * @author Charlie Yu
+ * @date 2021-06-23
+ */
+@Data
+@TableName("rwdedit_version")
+public class VersionDefine extends AuditableEntity {
+
+    /** 版本号 */
+    private String version;
+    /** 版本状态:@see VersionState */
+    private String state;
+    /** 最新标识 */
+    private Boolean lastFlag;
+    /** 上一版本号 */
+    private String lastVersion;
+    /** 显示顺序 */
+    private Integer showOrder;
+    /** 确认人 */
+    private String confirmUser;
+    /** 确认时间 */
+    private PsDateTime confirmTime;
+    /** 发布人 */
+    private String publishUser;
+    /** 发布时间 */
+    private PsDateTime publishTime;
+    /** 完成时间 */
+    private PsDateTime finishTime;
+}

+ 44 - 0
dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/service/IObjectInfoHistoryService.java

@@ -0,0 +1,44 @@
+package com.persagy.dc.dictionary.service;
+
+import com.persagy.dc.dictionary.entity.ObjectInfoHistory;
+
+/**
+ * 对象信息点 服务
+ * @author Charlie Yu
+ * @date 2021-06-23
+ */
+public interface IObjectInfoHistoryService {
+
+    /**
+     * 新增
+     * @param history
+     * @return
+     */
+    ObjectInfoHistory insert(ObjectInfoHistory history);
+
+    /**
+     * 按版本复制
+     * @param srcVersion 源版本
+     * @param version 复制后版本
+     */
+    void copyByVersion(String srcVersion, String version);
+
+    /**
+     * 修改
+     * @param history
+     * @return
+     */
+    ObjectInfoHistory update(ObjectInfoHistory history);
+
+    /**
+     * 删除
+     * @param id
+     */
+    void delete(String id);
+
+    /**
+     * 版本删除前校验
+     * @param version
+     */
+    void validateOnVersionDelete(String version);
+}

+ 45 - 0
dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/service/IObjectTypeHistoryService.java

@@ -0,0 +1,45 @@
+package com.persagy.dc.dictionary.service;
+
+import com.persagy.dc.dictionary.entity.ObjectTypeHistory;
+
+/**
+ * 对象类型 服务
+ * @author Charlie Yu
+ * @date 2021-06-23
+ */
+public interface IObjectTypeHistoryService {
+
+    /**
+     * 新增
+     * @param history
+     * @return
+     */
+    ObjectTypeHistory insert(ObjectTypeHistory history);
+
+    /**
+     * 按版本复制
+     * @param srcVersion 源版本
+     * @param version 复制后版本
+     */
+    void copyByVersion(String srcVersion, String version);
+
+    /**
+     * 修改
+     * @param history
+     * @return
+     */
+    ObjectTypeHistory update(ObjectTypeHistory history);
+
+    /**
+     * 删除
+     * @param id
+     */
+    void delete(String id);
+
+    /**
+     * 版本删除前校验
+     * @param version
+     */
+    void validateOnVersionDelete(String version);
+
+}

+ 31 - 0
dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/service/IVersionDefineService.java

@@ -0,0 +1,31 @@
+package com.persagy.dc.dictionary.service;
+
+import com.persagy.dc.dictionary.entity.VersionDefine;
+
+/**
+ * 版本定义接口
+ * @author Charlie Yu
+ * @date 2021-06-23
+ */
+public interface IVersionDefineService {
+
+    /**
+     * 创建版本
+     * @param vo
+     * @return
+     */
+    VersionDefine insertVersion(VersionDefine vo);
+
+    /**
+     * 修改版本
+     * @param vo
+     * @return
+     */
+    VersionDefine updateVersion(VersionDefine vo);
+
+    /**
+     * 删除版本
+     * @param id
+     */
+    void deleteVersion(String id);
+}

+ 60 - 0
dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/service/impl/ObjectInfoHistoryServiceImpl.java

@@ -0,0 +1,60 @@
+package com.persagy.dc.dictionary.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.persagy.common.exception.BusinessException;
+import com.persagy.dc.common.constant.ValidEnum;
+import com.persagy.dc.dictionary.dao.ObjectInfoHistoryMapper;
+import com.persagy.dc.dictionary.entity.ObjectInfoHistory;
+import com.persagy.dc.dictionary.service.IObjectInfoHistoryService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * 信息点历史 实现类
+ * @author Charlie Yu
+ * @date 2021-06-23
+ */
+@Service
+public class ObjectInfoHistoryServiceImpl implements IObjectInfoHistoryService {
+
+    @Resource
+    private ObjectInfoHistoryMapper dao;
+
+    @Override
+    public ObjectInfoHistory insert(ObjectInfoHistory history) {
+        dao.insert(history);
+        return history;
+    }
+
+    @Override
+    public void copyByVersion(String srcVersion, String version) {
+        dao.copyByVersion(srcVersion, version);
+    }
+
+    @Override
+    public ObjectInfoHistory update(ObjectInfoHistory history) {
+        dao.updateById(history);
+        return history;
+    }
+
+    @Override
+    public void delete(String id) {
+        ObjectInfoHistory vo = dao.selectById(id);
+        vo.setValid(ValidEnum.FALSE.getType());
+        dao.updateById(vo);
+    }
+
+    @Override
+    public void validateOnVersionDelete(String version) {
+        // 查询
+        LambdaQueryWrapper<ObjectInfoHistory> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(ObjectInfoHistory::getVersion, version);
+        queryWrapper.eq(ObjectInfoHistory::getValid, ValidEnum.TRUE.getType());
+        queryWrapper.isNotNull(ObjectInfoHistory::getOperator);
+        Integer count = dao.selectCount(queryWrapper);
+        if(count != null && count > 0) {
+            throw new BusinessException("该版本有信息点变更记录不可直接删除!");
+        }
+    }
+}

+ 60 - 0
dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/service/impl/ObjectTypeHistoryServiceImpl.java

@@ -0,0 +1,60 @@
+package com.persagy.dc.dictionary.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.persagy.common.exception.BusinessException;
+import com.persagy.dc.common.constant.ValidEnum;
+import com.persagy.dc.dictionary.dao.ObjectTypeHistoryMapper;
+import com.persagy.dc.dictionary.entity.ObjectTypeHistory;
+import com.persagy.dc.dictionary.service.IObjectTypeHistoryService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * 对象类型历史 实现类
+ * @author Charlie Yu
+ * @date 2021-06-23
+ */
+@Service
+public class ObjectTypeHistoryServiceImpl implements IObjectTypeHistoryService {
+
+    @Resource
+    private ObjectTypeHistoryMapper dao;
+
+    @Override
+    public ObjectTypeHistory insert(ObjectTypeHistory history) {
+        dao.insert(history);
+        return history;
+    }
+
+    @Override
+    public void copyByVersion(String srcVersion, String version) {
+        dao.copyByVersion(srcVersion, version);
+    }
+
+    @Override
+    public ObjectTypeHistory update(ObjectTypeHistory history) {
+        dao.updateById(history);
+        return history;
+    }
+
+    @Override
+    public void delete(String id) {
+        ObjectTypeHistory vo = dao.selectById(id);
+        vo.setValid(ValidEnum.FALSE.getType());
+        dao.updateById(vo);
+    }
+
+    @Override
+    public void validateOnVersionDelete(String version) {
+        // 查询
+        LambdaQueryWrapper<ObjectTypeHistory> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(ObjectTypeHistory::getVersion, version);
+        queryWrapper.eq(ObjectTypeHistory::getValid, ValidEnum.TRUE.getType());
+        queryWrapper.isNotNull(ObjectTypeHistory::getOperator);
+        Integer count = dao.selectCount(queryWrapper);
+        if(count != null && count > 0) {
+            throw new BusinessException("该版本有对象类型变更记录不可直接删除!");
+        }
+    }
+}

+ 136 - 0
dc-business/dc-dictionary-manage/src/main/java/com/persagy/dc/dictionary/service/impl/VersionDefineServiceImpl.java

@@ -0,0 +1,136 @@
+package com.persagy.dc.dictionary.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.persagy.common.exception.BusinessException;
+import com.persagy.dc.common.constant.ValidEnum;
+import com.persagy.dc.dictionary.constant.VersionState;
+import com.persagy.dc.dictionary.dao.VersionDefineMapper;
+import com.persagy.dc.dictionary.entity.VersionDefine;
+import com.persagy.dc.dictionary.service.IObjectInfoHistoryService;
+import com.persagy.dc.dictionary.service.IObjectTypeHistoryService;
+import com.persagy.dc.dictionary.service.IVersionDefineService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 版本定义实现类
+ * @author Charlie Yu
+ * @date 2021-06-23
+ */
+@Service
+public class VersionDefineServiceImpl implements IVersionDefineService {
+
+    @Resource
+    private VersionDefineMapper dao;
+    @Autowired
+    private IObjectTypeHistoryService typeHistoryService;
+    @Autowired
+    private IObjectInfoHistoryService infoHistoryService;
+
+    @Override
+    public VersionDefine insertVersion(VersionDefine vo) {
+        validate(vo);
+        // 查询最新版本
+        VersionDefine lastVersion = queryLastVersion();
+        if(lastVersion != null) {
+            vo.setLastVersion(lastVersion.getVersion());
+            vo.setShowOrder(lastVersion.getShowOrder() + 1);
+            // 修改原最新版本标识
+            lastVersion.setLastFlag(false);
+            dao.updateById(lastVersion);
+            // 生成此版本数据字典
+            typeHistoryService.copyByVersion(lastVersion.getVersion(), vo.getVersion());
+            infoHistoryService.copyByVersion(lastVersion.getVersion(), vo.getVersion());
+        } else {
+            vo.setShowOrder(1);
+        }
+        // 默认值
+        vo.setState(VersionState.TO_CONFIRM.getIndex());
+        vo.setLastFlag(true);
+        dao.insert(vo);
+        return vo;
+    }
+
+    /**
+     * 查询最新版本
+     * @return
+     */
+    private VersionDefine queryLastVersion() {
+        LambdaQueryWrapper<VersionDefine> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(VersionDefine::getValid, ValidEnum.TRUE.getType());
+        queryWrapper.eq(VersionDefine::getLastFlag, true);
+        return dao.selectOne(queryWrapper);
+    }
+
+    /**
+     * 保存校验
+     * @param vo
+     */
+    private void validate(VersionDefine vo) {
+        // 新增校验
+        if(StrUtil.isBlank(vo.getId())) {
+            if(hasFlowingVersion()) {
+                throw new BusinessException("存在未发布完成版本,不可重复创建!");
+            }
+        }
+        // 重名校验
+        LambdaQueryWrapper<VersionDefine> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(VersionDefine::getValid, ValidEnum.TRUE.getType());
+        queryWrapper.eq(VersionDefine::getVersion, vo.getVersion());
+        if(StrUtil.isNotBlank(vo.getId())) {
+            queryWrapper.ne(VersionDefine::getId, vo.getId());
+        }
+        Integer count = dao.selectCount(queryWrapper);
+        if(count != null && count >0) {
+            throw new BusinessException("版本编号已存在!");
+        }
+    }
+
+    /**
+     * 是否存在流程中版本
+     * 流程中:待确认、待发布、发布中
+     * @return
+     */
+    private boolean hasFlowingVersion() {
+        // 流程中的状态
+        List<String> flowingState = Arrays.asList(VersionState.TO_CONFIRM.getIndex(),
+                VersionState.TO_PUBLISH.getIndex(), VersionState.PUBLISHING.getIndex());
+        // 查询
+        LambdaQueryWrapper<VersionDefine> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(VersionDefine::getState, flowingState);
+        queryWrapper.eq(VersionDefine::getValid, ValidEnum.TRUE.getType());
+        Integer count = dao.selectCount(queryWrapper);
+        return count != null && count > 0;
+    }
+
+    @Override
+    public VersionDefine updateVersion(VersionDefine vo) {
+        validate(vo);
+        dao.updateById(vo);
+        return vo;
+    }
+
+    @Override
+    public void deleteVersion(String id) {
+        VersionDefine vo = dao.selectById(id);
+        if(VersionState.TO_CONFIRM.getIndex() != vo.getState()) {
+            throw new BusinessException("版本不是待确认状态,不允许删除!");
+        }
+        // 版本中存在维护记录时,不允许删除
+        typeHistoryService.validateOnVersionDelete(vo.getVersion());
+        infoHistoryService.validateOnVersionDelete(vo.getVersion());
+        // 恢复上一版本的最新标识
+        if(StrUtil.isNotBlank(vo.getLastVersion())) {
+            VersionDefine lastVersion = dao.selectById(vo.getLastVersion());
+            lastVersion.setLastFlag(true);
+            dao.updateById(lastVersion);
+        }
+        vo.setValid(ValidEnum.FALSE.getType());
+        dao.updateById(vo);
+    }
+}

+ 11 - 0
dc-business/dc-dictionary-manage/src/main/resources/bootstrap.yml

@@ -0,0 +1,11 @@
+server:
+  port: 9001
+spring:
+  application:
+    # 应用名称
+    name: dc-dic-manage
+
+config:
+  file:
+    absolute:
+      path: ${CONFIG_FILE_PATH:D:\SpringCloud}

+ 0 - 0
dc-business/dc-dictionary-manage/src/main/resources/db.init/data.sql


+ 41 - 0
dc-business/dc-dictionary-manage/src/main/resources/db.init/schema.sql

@@ -0,0 +1,41 @@
+-- ----------------------------
+-- Table structure for dic_dt_type
+-- ----------------------------
+CREATE TABLE IF NOT EXISTS `dic_dt_data` (
+`id` varchar(80) NOT NULL,
+`dict_type_id` varchar(80) NOT NULL COMMENT '字典类型ID',
+`parent_id` varchar(80) DEFAULT NULL COMMENT '父节点',
+`type` varchar(80) NOT NULL COMMENT '字典类型',
+`code` varchar(200) NOT NULL COMMENT '字典数据编码',
+`label` varchar(200) NOT NULL COMMENT '字典数据标签',
+`status` int(11) NOT NULL COMMENT '状态',
+`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+`create_user` varchar(40) DEFAULT NULL COMMENT '创建用户',
+`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+`update_user` varchar(40) DEFAULT NULL COMMENT '更新用户',
+`remark` varchar(200) DEFAULT NULL,
+`order_num` int(11) DEFAULT NULL,
+PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='字典数据';
+
+-- ----------------------------
+-- Table structure for dic_dt_data
+-- ----------------------------
+CREATE TABLE IF NOT EXISTS  `dic_dt_data` (
+`id` varchar(80) NOT NULL,
+`dict_type_id` varchar(80) NOT NULL COMMENT '字典类型ID',
+`parent_id` varchar(80) DEFAULT NULL COMMENT '父节点',
+`type` varchar(80) NOT NULL COMMENT '字典类型',
+`code` varchar(200) NOT NULL COMMENT '字典数据编码',
+`label` varchar(200) NOT NULL COMMENT '字典数据标签',
+`status` int(11) NOT NULL COMMENT '状态',
+`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+`create_user` varchar(40) DEFAULT NULL COMMENT '创建用户',
+`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+`update_user` varchar(40) DEFAULT NULL COMMENT '更新用户',
+`remark` varchar(200) DEFAULT NULL,
+`order_num` int(11) DEFAULT NULL,
+PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='字典数据';
+
+

+ 15 - 0
dc-business/dc-dictionary-manage/src/main/resources/mapper/ObjectInfoHistoryMapper.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.persagy.dc.dictionary.dao.ObjectInfoHistoryMapper">
+
+    <insert id="copyByVersion">
+        insert into rwd_object_info_his(id,group_code,project_id,code,orig_code,name,alias_code,alias_name,
+            class_code,category,type,first_tag,second_tag,priority,input_mode,unit,data_type,orig_data_type,
+            is_multiple,is_region,formatter,data_source,note,sub_flag,weak_point,is_used,version,operator,operator_level)
+        select id,group_code,project_id,code,orig_code,name,alias_code,alias_name,
+            class_code,category,type,first_tag,second_tag,priority,input_mode,unit,data_type,orig_data_type,
+            is_multiple,is_region,formatter,data_source,note,sub_flag,weak_point,is_used,${version},null,null
+        from rwd_object_info_his
+        where version = ${srcVersion}
+    </insert>
+</mapper>

+ 13 - 0
dc-business/dc-dictionary-manage/src/main/resources/mapper/ObjectTypeHistoryMapper.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.persagy.dc.dictionary.dao.ObjectTypeHistoryMapper">
+
+    <insert id="copyByVersion">
+        insert into rwd_object_type_his(id,group_code,obj_type,name,alias_code,alias_name,
+            type,project_id,major_code,system_code,equipment_code,parent_code,is_used,version,operator,operator_level)
+        select id,group_code,obj_type,name,alias_code,alias_name,type,project_id,major_code,system_code,
+            equipment_code,parent_code,is_used,${version},null,null
+        from rwd_object_type_his
+        where version = ${srcVersion}
+    </insert>
+</mapper>

+ 1 - 0
dc-business/pom.xml

@@ -16,5 +16,6 @@
     <modules>
         <module>dc-dictionary</module>
         <module>dc-digital</module>
+        <module>dc-dictionary-manage</module>
     </modules>
 </project>