Răsfoiți Sursa

添加重要数据签名

ZhuDeKang 2 luni în urmă
părinte
comite
db1f9bcfe0
26 a modificat fișierele cu 475 adăugiri și 63 ștergeri
  1. 2 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java
  2. 4 9
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
  3. 0 1
      ruoyi-admin/src/main/resources/application-dev.yml
  4. 9 9
      ruoyi-admin/src/main/resources/application-test.yml
  5. 48 21
      ruoyi-admin/src/test/java/com/ruoyi/JasyptTest.java
  6. 0 2
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/controller/MdModelInfoController.java
  7. 2 2
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/controller/PtServiceController.java
  8. 2 0
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/controller/SysMetaDatasourceController.java
  9. 54 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/domain/MdModelInfo.java
  10. 39 0
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/domain/PtService.java
  11. 52 0
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/domain/SysMetaDatasource.java
  12. 2 9
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/service/impl/MdModelInfoServiceImpl.java
  13. 3 0
      ruoyi-api-patform/src/main/resources/mapper/interfaces/MdModelInfoMapper.xml
  14. 12 4
      ruoyi-api-patform/src/main/resources/mapper/interfaces/PtServiceMapper.xml
  15. 5 1
      ruoyi-api-patform/src/main/resources/mapper/interfaces/SysMetaDatasourceMapper.xml
  16. 48 0
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java
  17. 47 0
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java
  18. 47 0
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
  19. 34 0
      ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java
  20. 35 0
      ruoyi-common/src/main/java/com/ruoyi/common/utils/SignUtil.java
  21. 1 1
      ruoyi-framework/src/main/java/com/ruoyi/framework/websocket/WebSocketConfig.java
  22. 4 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
  23. 11 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
  24. 6 2
      ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
  25. 5 1
      ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
  26. 3 0
      ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml

+ 2 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java

@@ -88,6 +88,7 @@ public class SysDeptController extends BaseController
         }
         dept.setCreateBy(getUsername());
         dept.setPhone(sm4Util.encrypt(dept.getPhone()));
+        dept.sign();
         return toAjax(deptService.insertDept(dept));
     }
 
@@ -115,6 +116,7 @@ public class SysDeptController extends BaseController
         }
         dept.setUpdateBy(getUsername());
         dept.setPhone(sm4Util.encrypt(dept.getPhone()));
+        dept.sign();
         return toAjax(deptService.updateDept(dept));
     }
 

+ 4 - 9
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java

@@ -127,15 +127,12 @@ public class SysUserController extends BaseController
         {
             return error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
         }
-        else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
-        {
-            return error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
-        }
         user.setCreateBy(getUsername());
         user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
 
         user.setPhonenumber(sm4Util.encrypt(user.getPhonenumber()));
-
+        user.setEmail(sm4Util.encrypt(user.getEmail()));
+        user.sign();
         return toAjax(userService.insertUser(user));
     }
 
@@ -155,12 +152,10 @@ public class SysUserController extends BaseController
         {
             return error("修改用户'" + user.getUserName() + "'失败,登录账号已存在");
         }
-        else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
-        {
-            return error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
-        }
         user.setUpdateBy(getUsername());
         user.setPhonenumber(sm4Util.encrypt(user.getPhonenumber()));
+        user.setEmail(sm4Util.encrypt(user.getEmail()));
+        user.sign();
         return toAjax(userService.updateUser(user));
     }
 

+ 0 - 1
ruoyi-admin/src/main/resources/application-dev.yml

@@ -17,7 +17,6 @@ sys:
 spring:
   datasource:
     type: com.alibaba.druid.pool.DruidDataSource
-
     driverClassName: dm.jdbc.driver.DmDriver
     druid:
       # 主库数据源

+ 9 - 9
ruoyi-admin/src/main/resources/application-test.yml

@@ -4,15 +4,15 @@ ruoyi:
 sys:
   gateway:
     url: http://localhost:8081
-    report:
-      upload:
-        path: /soft/sh-model/report/
-    chart:
-      upload:
-        path: /soft/sh-model/chart/
-    map:
-      upload:
-        path: /soft/sh-model/map/
+  report:
+    upload:
+      path: /soft/sh-model/report/
+  chart:
+    upload:
+      path: /soft/sh-model/chart/
+  map:
+    upload:
+      path: /soft/sh-model/map/
 # 数据源配置
 spring:
   datasource:

+ 48 - 21
ruoyi-admin/src/test/java/com/ruoyi/JasyptTest.java

@@ -1,11 +1,19 @@
 package com.ruoyi;
 
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.core.domain.entity.SysRole;
+import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.utils.SM4Util;
 import com.ruoyi.interfaces.domain.MdModelInfo;
+import com.ruoyi.interfaces.domain.PtService;
+import com.ruoyi.interfaces.domain.SysMetaDatasource;
 import com.ruoyi.interfaces.mapper.MdModelInfoMapper;
+import com.ruoyi.interfaces.mapper.PtServiceMapper;
+import com.ruoyi.interfaces.mapper.SysMetaDatasourceMapper;
 import com.ruoyi.interfaces.service.ISysMetaDatasourceService;
 import com.ruoyi.interfaces.service.PtServiceService;
 import com.ruoyi.system.mapper.SysDeptMapper;
+import com.ruoyi.system.mapper.SysRoleMapper;
 import com.ruoyi.system.mapper.SysUserMapper;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -29,13 +37,15 @@ public class JasyptTest {
     private MdModelInfoMapper modelMapper;
 
     @Autowired
-    private PtServiceService ptServiceService;
+    private PtServiceMapper ptServiceMapper;
     @Autowired
-    private ISysMetaDatasourceService datasourceService;
+    private SysMetaDatasourceMapper datasourceMapper;
     @Autowired
-    private SysDeptMapper deptService;
+    private SysDeptMapper deptMapper;
     @Autowired
     private SysUserMapper userService;
+    @Autowired
+    private SysRoleMapper roleMapper;
 
 
     @Test
@@ -43,36 +53,46 @@ public class JasyptTest {
 
 /*List<MdModelInfo> mdModelInfos = modelMapper.selectMdModelInfoList(new MdModelInfo());
         mdModelInfos.forEach(p->{
-            p.setName(sm4Util.decrypt(p.getName()));
-            p.setEnname(sm4Util.decrypt(p.getEnname()));
-            p.setMdUnit(sm4Util.decrypt(p.getMdUnit()));
-            p.setMdContact(sm4Util.decrypt(p.getMdContact()));
-            p.setDevUnit(sm4Util.decrypt(p.getDevUnit()));
-            p.setDevContact(sm4Util.decrypt(p.getDevContact()));
+            p.sign();
             modelMapper.updateMdModelInfo(p);
         });*/
+
+/*        List<PtService> ptServices = ptServiceMapper.selectAllColumns(new PtService());
+        ptServices.forEach(p->{
+            p.sign();
+            ptServiceMapper.updateByPrimaryKeySelective(p);
+        });*/
+
+
 /*
+        List<SysMetaDatasource> sysMetaDatasources = datasourceMapper.selectSysMetaDatasourceList(new SysMetaDatasource());
+        sysMetaDatasources.forEach(p -> {
+                p.sign();
+            datasourceMapper.updateSysMetaDatasource(p);
+        });
+
+*/
 
 
-        List<PtService> ptServices = ptServiceService.selectAllColumns(null);
-        ptServices.forEach(p->{
-            p.setDevelopContacter(sm4Util.encrypt(p.getDevelopContacter()));
-            p.setMaintainContacer(sm4Util.encrypt(p.getMaintainContacer()));
-            p.setAdName(sm4Util.encrypt(p.getAdName()));
+/*
+        List<SysRole> sysRoles = roleMapper.selectRoleList(new SysRole());
+        sysRoles.forEach( p ->{
+            p.sign();
+            roleMapper.updateRole(p);
+        });
+*/
 
-            ptServiceService.put(p);
+        List<SysDept> sysDepts = deptMapper.selectDeptList(new SysDept());
+        sysDepts.forEach(p->{
+            p.sign();
+            deptMapper.updateDept(p);
         });
 
+/*
 
 
-     List<SysMetaDatasource> sysMetaDatasources = datasourceService.selectSysMetaDatasourceList(null);
-        sysMetaDatasources.forEach(p -> {
-            p.setDsUser(sm4Util.encrypt(p.getDsUser()));
-            p.setDsPass(sm4Util.encrypt(p.getDsPass()));
 
-            datasourceService.updateSysMetaDatasource(p);
 
-        });
 
         String encrypt = sm4Util.decrypt("oMd930VR5zYn5ySU4ZJHPg==");
 
@@ -83,6 +103,13 @@ public class JasyptTest {
         String prettyJsonString = JSONUtils.toPrettyJsonString(sysMetaDatasources);
         System.out.println(prettyJsonString);
 */
+/*        List<SysUser> sysUsers = userService.selectUserList(new SysUser());
+        sysUsers.forEach(p->{
+            p.setEmail(sm4Util.encrypt(p.getEmail()));
+            p.sign();
+            System.out.println(    p.getEmail());
+            System.out.println(    p.getDataSignature());
+        });*/
 
     }
 }

+ 0 - 2
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/controller/MdModelInfoController.java

@@ -89,8 +89,6 @@ public class MdModelInfoController extends BaseController {
         if (StringUtils.isNull(mdModelInfo.getName())) return error("【模型名称】不可为空");
         if (StringUtils.isNull(mdModelInfo.getEnname())) return error("【模型英文名称】不可为空");
         mdModelInfo.setRegUser(getUsername());
-
-
         return AjaxResult.success(mdModelInfoService.insertMdModelInfo(mdModelInfo));
     }
 

+ 2 - 2
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/controller/PtServiceController.java

@@ -71,7 +71,7 @@ public class PtServiceController extends BaseController {
 
         ptService.setAudit("0");
         ptService.setPublish("0");
-
+        ptService.sign();
         boolean save = ptServiceService.save(ptService);
 
         MdModelInfo mdModelInfo = mdModelInfoService.selectMdModelInfoByMdid(ptService.getMdid());
@@ -246,7 +246,7 @@ public class PtServiceController extends BaseController {
             mdModelInfoService.publish(mdModelInfo);
         }
 
-
+        ptService.sign();
         return AjaxResult.success(ptServiceService.put(ptService));
     }
 

+ 2 - 0
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/controller/SysMetaDatasourceController.java

@@ -76,6 +76,7 @@ public class SysMetaDatasourceController extends BaseController {
     public AjaxResult add(@RequestBody SysMetaDatasource sysMetaDatasource) {
         sysMetaDatasource.setDsUser(sm4Util.encrypt(sysMetaDatasource.getDsUser()));
         sysMetaDatasource.setDsPass(sm4Util.encrypt(sysMetaDatasource.getDsPass()));
+        sysMetaDatasource.sign();
         return toAjax(sysMetaDatasourceService.insertSysMetaDatasource(sysMetaDatasource));
     }
 
@@ -87,6 +88,7 @@ public class SysMetaDatasourceController extends BaseController {
     public AjaxResult edit(@RequestBody SysMetaDatasource sysMetaDatasource) {
         sysMetaDatasource.setDsUser(sm4Util.encrypt(sysMetaDatasource.getDsUser()));
         sysMetaDatasource.setDsPass(sm4Util.encrypt(sysMetaDatasource.getDsPass()));
+        sysMetaDatasource.sign();
         return toAjax(sysMetaDatasourceService.updateSysMetaDatasource(sysMetaDatasource));
     }
 

+ 54 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/domain/MdModelInfo.java

@@ -3,6 +3,7 @@ package com.ruoyi.interfaces.domain;
 import java.util.Date;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.utils.SignUtil;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ruoyi.common.annotation.Excel;
@@ -378,7 +379,7 @@ public class MdModelInfo extends BaseEntity {
 
     /**
      * 0=未发布;1=已发布 ; 2=下线 ;3=待更新;5=更新
-     *
+     * <p>
      * 发布操作
      */
     private String publish;
@@ -390,6 +391,58 @@ public class MdModelInfo extends BaseEntity {
      */
     private Integer mdFileId;
 
+    /**
+     * 签名字段
+     */
+    private String dataSignature;
+
+    /**
+     * 生成数据签名 - 自定义哪些字段参与签名
+     */
+    public String generateSignature() {
+        // 选择重要的业务字段参与签名
+        return SignUtil.generateSign(
+                mdid,
+                name,
+                enname,
+                mdUnit,
+                mdContact,
+                devUnit,
+                devContact
+        );
+    }
+
+    /**
+     * 验证数据完整性
+     */
+    public boolean verifySignature() {
+        return SignUtil.verifySign(
+                mdid,
+                name,
+                enname,
+                mdUnit,
+                mdContact,
+                devUnit,
+                devContact
+        );
+    }
+
+    /**
+     * 自动设置签名
+     */
+    public void sign() {
+        this.dataSignature = generateSignature();
+    }
+
+
+    public String getDataSignature() {
+        return dataSignature;
+    }
+
+    public void setDataSignature(String dataSignature) {
+        this.dataSignature = dataSignature;
+    }
+
     public Integer getMdFileId() {
         return mdFileId;
     }

+ 39 - 0
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/domain/PtService.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.core.domain.BaseEntity;
+import com.ruoyi.common.utils.SignUtil;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -147,4 +148,42 @@ public class PtService implements Serializable {
     private Integer senState;
 
 
+
+    /**
+     * 签名字段
+     */
+    private String dataSignature;
+
+    /**
+     * 生成数据签名 - 自定义哪些字段参与签名
+     */
+    public String generateSignature() {
+        // 选择重要的业务字段参与签名
+        return SignUtil.generateSign(
+                srvId,
+                developContacter,
+                maintainContacer,
+                adName
+        );
+    }
+
+    /**
+     * 验证数据完整性
+     */
+    public boolean verifySignature() {
+        return SignUtil.verifySign(
+                srvId,
+                developContacter,
+                maintainContacer,
+                adName
+        );
+    }
+
+    /**
+     * 自动设置签名
+     */
+    public void sign() {
+        this.dataSignature = generateSignature();
+    }
+
 }

+ 52 - 0
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/domain/SysMetaDatasource.java

@@ -1,5 +1,6 @@
 package com.ruoyi.interfaces.domain;
 
+import com.ruoyi.common.utils.SignUtil;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ruoyi.common.annotation.Excel;
@@ -52,6 +53,57 @@ public class SysMetaDatasource extends BaseEntity
 
     private Integer sort;
 
+
+
+    /**
+     * 签名字段
+     */
+    private String dataSignature;
+
+    /**
+     * 生成数据签名 - 自定义哪些字段参与签名
+     */
+    public String generateSignature() {
+        // 选择重要的业务字段参与签名
+        return SignUtil.generateSign(
+                String.valueOf(dsCode),
+                String.valueOf(dsType),
+                dsIp,
+                String.valueOf(dsPort),
+                dsUser,
+                dsPass
+        );
+    }
+
+    /**
+     * 验证数据完整性
+     */
+    public boolean verifySignature() {
+        return SignUtil.verifySign(
+                String.valueOf(dsCode),
+                String.valueOf(dsType),
+                dsIp,
+                String.valueOf(dsPort),
+                dsUser,
+                dsPass
+        );
+    }
+
+    /**
+     * 自动设置签名
+     */
+    public void sign() {
+        this.dataSignature = generateSignature();
+    }
+
+    public String getDataSignature() {
+        return dataSignature;
+    }
+
+    public void setDataSignature(String dataSignature) {
+        this.dataSignature = dataSignature;
+    }
+
     public Integer getSort() {
         return sort;
     }

+ 2 - 9
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/service/impl/MdModelInfoServiceImpl.java

@@ -42,9 +42,7 @@ public class MdModelInfoServiceImpl implements IMdModelInfoService {
     @Override
     public MdModelInfo selectMdModelInfoByMdid(String mdid) {
         MdModelInfo mdModelInfo = mdModelInfoMapper.selectMdModelInfoByMdid(mdid);
-        mdModelInfo.setName(sm4Util.decrypt(mdModelInfo.getName()));
         mdModelInfo.setEnname(sm4Util.decrypt(mdModelInfo.getEnname()));
-        mdModelInfo.setMdUnit(sm4Util.decrypt(mdModelInfo.getMdUnit()));
         mdModelInfo.setMdContact(sm4Util.decrypt(mdModelInfo.getMdContact()));
         mdModelInfo.setDevUnit(sm4Util.decrypt(mdModelInfo.getDevUnit()));
         mdModelInfo.setDevContact(sm4Util.decrypt(mdModelInfo.getDevContact()));
@@ -62,9 +60,7 @@ public class MdModelInfoServiceImpl implements IMdModelInfoService {
     public List<MdModelInfo> selectMdModelInfoList(MdModelInfo mdModelInfo) {
         List<MdModelInfo> mdModelInfos = mdModelInfoMapper.selectMdModelInfoList(mdModelInfo);
         mdModelInfos.forEach(p -> {
-            p.setName(sm4Util.decrypt(p.getName()));
             p.setEnname(sm4Util.decrypt(p.getEnname()));
-            p.setMdUnit(sm4Util.decrypt(p.getMdUnit()));
             p.setMdContact(sm4Util.decrypt(p.getMdContact()));
             p.setDevUnit(sm4Util.decrypt(p.getDevUnit()));
             p.setDevContact(sm4Util.decrypt(p.getDevContact()));
@@ -82,12 +78,11 @@ public class MdModelInfoServiceImpl implements IMdModelInfoService {
     public String insertMdModelInfo(MdModelInfo mdModelInfo) {
         mdModelInfo.setMdid(IdUtils.fastUUID());
         mdModelInfo.setCreateby(DateUtils.getNowDate());
-        mdModelInfo.setName(sm4Util.encrypt(mdModelInfo.getName()));
         mdModelInfo.setEnname(sm4Util.encrypt(mdModelInfo.getEnname()));
-        mdModelInfo.setMdUnit(sm4Util.encrypt(mdModelInfo.getMdUnit()));
         mdModelInfo.setMdContact(sm4Util.encrypt(mdModelInfo.getMdContact()));
         mdModelInfo.setDevUnit(sm4Util.encrypt(mdModelInfo.getDevUnit()));
         mdModelInfo.setDevContact(sm4Util.encrypt(mdModelInfo.getDevContact()));
+        mdModelInfo.sign();
         mdModelInfoMapper.insertMdModelInfo(mdModelInfo);
         return mdModelInfo.getMdid();
     }
@@ -100,14 +95,12 @@ public class MdModelInfoServiceImpl implements IMdModelInfoService {
      */
     @Override
     public int updateMdModelInfo(MdModelInfo mdModelInfo) {
-        mdModelInfo.setName(sm4Util.encrypt(mdModelInfo.getName()));
         mdModelInfo.setEnname(sm4Util.encrypt(mdModelInfo.getEnname()));
-        mdModelInfo.setMdUnit(sm4Util.encrypt(mdModelInfo.getMdUnit()));
         mdModelInfo.setMdContact(sm4Util.encrypt(mdModelInfo.getMdContact()));
         mdModelInfo.setDevUnit(sm4Util.encrypt(mdModelInfo.getDevUnit()));
         mdModelInfo.setDevContact(sm4Util.encrypt(mdModelInfo.getDevContact()));
-
         mdModelInfo.setModifyby(DateUtils.getNowDate());
+        mdModelInfo.sign();
         return mdModelInfoMapper.updateMdModelInfo(mdModelInfo);
     }
 

+ 3 - 0
ruoyi-api-patform/src/main/resources/mapper/interfaces/MdModelInfoMapper.xml

@@ -308,6 +308,7 @@
             <if test="regUser != null">REG_USER,</if>
             <if test="sort != null">SORT,</if>
             <if test="audit != null">"AUDIT",</if>
+            <if test="dataSignature != null">dataSignature,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="mdid != null">#{mdid},</if>
@@ -371,6 +372,7 @@
             <if test="regUser != null">#{regUser},</if>
             <if test="sort != null">#{sort},</if>
             <if test="audit != null">#{audit}</if>
+            <if test="dataSignature != null">#{dataSignature}</if>
         </trim>
     </insert>
     <insert id="insertModelSetRela">
@@ -444,6 +446,7 @@
             REG_USER = #{regUser,jdbcType=VARCHAR},
             SORT = #{sort,jdbcType=INTEGER},
             md_file_id = #{mdFileId,jdbcType=VARCHAR},
+            data_Signature = #{dataSignature,jdbcType=VARCHAR},
         </trim>
         where MDID = #{mdid}
     </update>

+ 12 - 4
ruoyi-api-patform/src/main/resources/mapper/interfaces/PtServiceMapper.xml

@@ -48,6 +48,7 @@
         <result column="PUBLISH_BY" property="publishBy" jdbcType="VARCHAR"/>
         <result column="state" property="state" jdbcType="VARCHAR"/>
         <result column="PUBLISH_TIME" property="publishTime"/>
+        <result column="data_Signature" property="dataSignature"/>
     </resultMap>
     <resultMap id="AuthVoResultMap" type="com.ruoyi.interfaces.domain.vo.PtServiceVo">
         <result property="id" jdbcType="VARCHAR" column="ID"/>
@@ -98,6 +99,7 @@
         <result column="PUBLISH" property="publish" jdbcType="VARCHAR"/>
         <result column="PUBLISH_BY" property="publishBy" jdbcType="VARCHAR"/>
         <result column="PUBLISH_TIME" property="publishTime"/>
+        <result column="data_Signature" property="dataSignature"/>
     </resultMap>
 
     <sql id="Base_Column_List">
@@ -115,7 +117,7 @@ AUDIT_REMARK,
 PUBLISH_BY,
 PUBLISH_TIME,
         GATEWAY_ID,
-        state
+        state,data_Signature
     </sql>
     <sql id="Blob_Column_List">
         RPCONTENT
@@ -131,7 +133,7 @@ AUDIT_REMARK,
 PUBLISH_BY,
 PUBLISH_TIME
         ,GATEWAY_ID,
-        state
+        state,data_Signature
     </sql>
     <sql id="table_columns">
         MDID
@@ -180,7 +182,8 @@ PUBLISH_TIME
             PUBLISH_BY,
             PUBLISH_TIME,
         GATEWAY_ID,
-        state
+        state,
+        DATA_SIGNATURE
     </sql>
     <sql id="entity_properties">
         #{mdid,jdbcType=VARCHAR},
@@ -228,7 +231,8 @@ PUBLISH_TIME
         #{publishBy,jdbcType=VARCHAR},
         #{publishTime,jdbcType=DATE},
         #{gatewayId,jdbcType=VARCHAR},
-        #{state,jdbcType=VARCHAR}
+        #{state,jdbcType=VARCHAR},
+        #{data_Signature,jdbcType=VARCHAR}
     </sql>
     <sql id="page_where">
         <trim prefix="where" prefixOverrides="and | or ">
@@ -464,6 +468,7 @@ PUBLISH_TIME
             <if test="uptm != null">UPTM = #{uptm},</if>
             <if test="rlstm != null">RLSTM = #{rlstm},</if>
             <if test="sort != null">SORT = #{sort},</if>
+            <if test="dataSignature != null">data_Signature = #{dataSignature},</if>
         </trim>
         where SRV_ID = #{srvId,jdbcType=VARCHAR}
     </update>
@@ -558,6 +563,7 @@ PUBLISH_TIME
                P.MAINTAIN_CONTACER,
                P.VIEW_NUM,
                P.state,
+               P.data_Signature,
                P.gateway_id,
         FROM PT_SERVICE P
                  JOIN PT_SERVICE_AUTH A ON P.SRV_ID = A.SRV_ID
@@ -674,6 +680,7 @@ PUBLISH_TIME
         <result column="S_PUBLISH" property="publish" jdbcType="VARCHAR"/>
         <result column="S_PUBLISH_BY" property="publishBy" jdbcType="VARCHAR"/>
         <result column="S_PUBLISH_TIME" property="publishTime"/>
+        <result column="data_Signature" property="dataSignature"/>
     </resultMap>
 
 
@@ -783,6 +790,7 @@ PUBLISH_TIME
         s.PUBLISH_BY AS S_PUBLISH_BY,
         s.PUBLISH_TIME AS S_PUBLISH_TIME,
         s.state,
+        s.data_Signature,
         r.SEN_STATE
         from md_model_info m left join pt_service s on m.mdid = s.MDID
         LEFT JOIN (

+ 5 - 1
ruoyi-api-patform/src/main/resources/mapper/interfaces/SysMetaDatasourceMapper.xml

@@ -15,10 +15,11 @@
         <result property="dsPass"    column="DS_PASS"    />
         <result property="dsNode"    column="DS_NODE"    />
         <result property="sort"    column="SORT"    />
+        <result property="dataSignature"    column="data_Signature"    />
     </resultMap>
 
     <sql id="selectSysMetaDatasourceVo">
-        select DS_CODE, DS_TITLE, DS_TYPE, DS_DBNAME, DS_IP, DS_PORT, DS_USER, DS_PASS, DS_NODE,SORT from sys_meta_datasource
+        select DS_CODE, DS_TITLE, DS_TYPE, DS_DBNAME, DS_IP, DS_PORT, DS_USER, DS_PASS, DS_NODE,SORT,data_Signature from sys_meta_datasource
     </sql>
 
     <select id="selectSysMetaDatasourceList" parameterType="com.ruoyi.interfaces.domain.SysMetaDatasource" resultMap="SysMetaDatasourceResult">
@@ -54,6 +55,7 @@
             <if test="dsPass != null">DS_PASS,</if>
             <if test="dsNode != null">DS_NODE,</if>
             <if test="sort != null">SORT,</if>
+            <if test="dataSignature != null">data_Signature,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="dsCode != null">#{dsCode},</if>
@@ -66,6 +68,7 @@
             <if test="dsPass != null">#{dsPass},</if>
             <if test="dsNode != null">#{dsNode},</if>
             <if test="sort != null">#{sort},</if>
+            <if test="dataSignature != null">#{dataSignature},</if>
         </trim>
     </insert>
 
@@ -81,6 +84,7 @@
             DS_PASS = #{dsPass,jdbcType=VARCHAR},
             DS_NODE = #{dsNode,jdbcType=VARCHAR},
             SORT = #{sort,jdbcType=INTEGER},
+            data_Signature = #{dataSignature,jdbcType=INTEGER},
         </trim>
         where DS_CODE = #{dsCode}
     </update>

+ 48 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java

@@ -6,6 +6,8 @@ import javax.validation.constraints.Email;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
+
+import com.ruoyi.common.utils.SignUtil;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ruoyi.common.core.domain.BaseEntity;
@@ -55,6 +57,52 @@ public class SysDept extends BaseEntity
     /** 子部门 */
     private List<SysDept> children = new ArrayList<SysDept>();
 
+
+    /**
+     * 签名字段
+     */
+    private String dataSignature;
+
+    /**
+     * 生成数据签名 - 自定义哪些字段参与签名
+     */
+    public String generateSignature() {
+        // 选择重要的业务字段参与签名
+        return SignUtil.generateSign(
+                String.valueOf(deptId),
+                String.valueOf(parentId),
+                phone,
+                email
+        );
+    }
+
+    /**
+     * 验证数据完整性
+     */
+    public boolean verifySignature() {
+        return SignUtil.verifySign(
+                String.valueOf(deptId),
+                String.valueOf(parentId),
+                phone,
+                email
+        );
+    }
+
+    /**
+     * 自动设置签名
+     */
+    public void sign() {
+        this.dataSignature = generateSignature();
+    }
+
+    public String getDataSignature() {
+        return dataSignature;
+    }
+
+    public void setDataSignature(String dataSignature) {
+        this.dataSignature = dataSignature;
+    }
+
     public Long getDeptId()
     {
         return deptId;

+ 47 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java

@@ -4,6 +4,8 @@ import java.util.Set;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
+
+import com.ruoyi.common.utils.SignUtil;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ruoyi.common.annotation.Excel;
@@ -64,6 +66,51 @@ public class SysRole extends BaseEntity
     /** 角色菜单权限 */
     private Set<String> permissions;
 
+
+    /**
+     * 签名字段
+     */
+    private String dataSignature;
+
+    /**
+     * 生成数据签名 - 自定义哪些字段参与签名
+     */
+    public String generateSignature() {
+        // 选择重要的业务字段参与签名
+        return SignUtil.generateSign(
+                String.valueOf(roleId),
+                String.valueOf(roleKey),
+                dataScope
+        );
+    }
+
+    /**
+     * 验证数据完整性
+     */
+    public boolean verifySignature() {
+        return SignUtil.verifySign(
+                String.valueOf(roleId),
+                String.valueOf(roleKey),
+                dataScope
+        );
+    }
+
+    /**
+     * 自动设置签名
+     */
+    public void sign() {
+        this.dataSignature = generateSignature();
+    }
+
+    public String getDataSignature() {
+        return dataSignature;
+    }
+
+    public void setDataSignature(String dataSignature) {
+        this.dataSignature = dataSignature;
+    }
+
+
     public SysRole()
     {
 

+ 47 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java

@@ -3,6 +3,8 @@ package com.ruoyi.common.core.domain.entity;
 import java.util.Date;
 import java.util.List;
 import javax.validation.constraints.*;
+
+import com.ruoyi.common.utils.SignUtil;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ruoyi.common.annotation.Excel;
@@ -89,6 +91,51 @@ public class SysUser extends BaseEntity
     /** 角色ID */
     private Long roleId;
 
+    /**
+     * 签名字段
+     */
+    private String dataSignature;
+
+    /**
+     * 生成数据签名 - 自定义哪些字段参与签名
+     */
+    public String generateSignature() {
+        // 选择重要的业务字段参与签名
+        return SignUtil.generateSign(
+                String.valueOf(deptId),
+                String.valueOf(userId),
+                phonenumber,
+                email
+        );
+    }
+
+    /**
+     * 验证数据完整性
+     */
+    public boolean verifySignature() {
+        return SignUtil.verifySign(
+                String.valueOf(deptId),
+                String.valueOf(userId),
+                phonenumber,
+                email
+        );
+    }
+
+    /**
+     * 自动设置签名
+     */
+    public void sign() {
+        this.dataSignature = generateSignature();
+    }
+
+    public String getDataSignature() {
+        return dataSignature;
+    }
+
+    public void setDataSignature(String dataSignature) {
+        this.dataSignature = dataSignature;
+    }
+
     public SysUser()
     {
 

+ 34 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java

@@ -1,5 +1,8 @@
 package com.ruoyi.common.utils;
 
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.util.Base64;
 import java.util.Collection;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -88,6 +91,8 @@ public class SecurityUtils
     {
         return SecurityContextHolder.getContext().getAuthentication();
     }
+    // 可选的加盐密钥,可以从配置文件中读取
+    private static final String SM3_SECRET = "your-sm3-secret-key";
 
     /**
      * 生成BCryptPasswordEncoder密码
@@ -99,6 +104,19 @@ public class SecurityUtils
     {
         BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
         return passwordEncoder.encode(password);
+        /*try {
+            // 密码+密钥进行SM3哈希
+            String passwordToEncode = password + SM3_SECRET;
+
+            MessageDigest sm3 = MessageDigest.getInstance("SM3", "BC");
+            byte[] hash = sm3.digest(passwordToEncode.getBytes(StandardCharsets.UTF_8));
+
+            // Base64编码存储
+            return Base64.getEncoder().encodeToString(hash);
+        } catch (Exception e) {
+            throw new RuntimeException("SM3密码加密失败", e);
+        }*/
+
     }
 
     /**
@@ -112,6 +130,22 @@ public class SecurityUtils
     {
         BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
         return passwordEncoder.matches(rawPassword, encodedPassword);
+        /*if (rawPassword == null || encodedPassword == null) {
+            return false;
+        }
+
+        try {
+            // 使用相同的逻辑计算输入密码的哈希值
+            String passwordToCheck = rawPassword + SM3_SECRET;
+
+            MessageDigest sm3 = MessageDigest.getInstance("SM3", "BC");
+            byte[] hash = sm3.digest(passwordToCheck.getBytes(StandardCharsets.UTF_8));
+            String checkEncoded = Base64.getEncoder().encodeToString(hash);
+
+            return encodedPassword.equals(checkEncoded);
+        } catch (Exception e) {
+            return false;
+        }*/
     }
 
     /**

+ 35 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/SignUtil.java

@@ -0,0 +1,35 @@
+package com.ruoyi.common.utils;
+
+import org.springframework.util.DigestUtils;
+
+import java.nio.charset.StandardCharsets;
+import java.util.StringJoiner;
+
+/**
+ * 数据签名工具类
+ */
+public class SignUtil {
+    
+    /**
+     * 生成MD5签名
+     */
+    public static String generateSign(String... fields) {
+        StringJoiner joiner = new StringJoiner("|");
+        for (String field : fields) {
+            joiner.add(field != null ? field : "");
+        }
+        String signContent = joiner.toString();
+        return DigestUtils.md5DigestAsHex(signContent.getBytes(StandardCharsets.UTF_8));
+    }
+    
+    /**
+     * 验证签名
+     */
+    public static boolean verifySign(String signature, String... fields) {
+        if (signature == null) {
+            return false;
+        }
+        String calculatedSign = generateSign(fields);
+        return signature.equals(calculatedSign);
+    }
+}

+ 1 - 1
ruoyi-framework/src/main/java/com/ruoyi/framework/websocket/WebSocketConfig.java

@@ -9,7 +9,7 @@ import org.springframework.web.socket.server.standard.ServerEndpointExporter;
  * 
  * @author ruoyi
  */
-@Configuration
+//@Configuration
 public class WebSocketConfig
 {
     @Bean

+ 4 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java

@@ -255,6 +255,7 @@ public class SysRoleServiceImpl implements ISysRoleService
     {
         role.setRoleKey(sm4Util.encrypt(role.getRoleKey()));
         // 新增角色信息
+        role.sign();
         roleMapper.insertRole(role);
         return insertRoleMenu(role);
     }
@@ -271,6 +272,7 @@ public class SysRoleServiceImpl implements ISysRoleService
     {
         role.setRoleKey(sm4Util.encrypt(role.getRoleKey()));
         // 修改角色信息
+        role.sign();
         roleMapper.updateRole(role);
         // 删除角色与菜单关联
         roleMenuMapper.deleteRoleMenuByRoleId(role.getRoleId());
@@ -287,6 +289,7 @@ public class SysRoleServiceImpl implements ISysRoleService
     public int updateRoleStatus(SysRole role)
     {
         role.setRoleKey(sm4Util.encrypt(role.getRoleKey()));
+        role.sign();
         return roleMapper.updateRole(role);
     }
 
@@ -301,6 +304,7 @@ public class SysRoleServiceImpl implements ISysRoleService
     public int authDataScope(SysRole role)
     {
         role.setRoleKey(sm4Util.encrypt(role.getRoleKey()));
+        role.sign();
         // 修改角色信息
         roleMapper.updateRole(role);
         // 删除角色与部门关联

+ 11 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java

@@ -79,6 +79,7 @@ public class SysUserServiceImpl implements ISysUserService
         List<SysUser> sysUsers = userMapper.selectUserList(user);
         sysUsers.forEach(p->{
             p.setPhonenumber(sm4Util.decrypt(p.getPhonenumber()));
+            p.setEmail(sm4Util.decrypt(p.getEmail()));
         });
 
         return sysUsers;
@@ -97,6 +98,7 @@ public class SysUserServiceImpl implements ISysUserService
         List<SysUser> sysUsers = userMapper.selectAllocatedList(user);
         sysUsers.forEach(p->{
             p.setPhonenumber(sm4Util.decrypt(p.getPhonenumber()));
+            p.setEmail(sm4Util.decrypt(p.getEmail()));
         });
 
         return sysUsers;
@@ -138,6 +140,7 @@ public class SysUserServiceImpl implements ISysUserService
     {
         SysUser sysUser = userMapper.selectUserById(userId);
         sysUser.setPhonenumber(sm4Util.decrypt(sysUser.getPhonenumber()));
+        sysUser.setEmail(sm4Util.decrypt(sysUser.getEmail()));
         return sysUser;
     }
 
@@ -273,6 +276,7 @@ public class SysUserServiceImpl implements ISysUserService
     @Transactional
     public int insertUser(SysUser user)
     {
+        user.sign();
         // 新增用户信息
         int rows = userMapper.insertUser(user);
         // 新增用户岗位关联
@@ -291,6 +295,7 @@ public class SysUserServiceImpl implements ISysUserService
     @Override
     public boolean registerUser(SysUser user)
     {
+        user.sign();
         return userMapper.insertUser(user) > 0;
     }
 
@@ -313,6 +318,7 @@ public class SysUserServiceImpl implements ISysUserService
         userPostMapper.deleteUserPostByUserId(userId);
         // 新增用户与岗位管理
         insertUserPost(user);
+        user.sign();
         return userMapper.updateUser(user);
     }
 
@@ -339,6 +345,7 @@ public class SysUserServiceImpl implements ISysUserService
     @Override
     public int updateUserStatus(SysUser user)
     {
+        user.sign();
         return userMapper.updateUser(user);
     }
 
@@ -351,6 +358,7 @@ public class SysUserServiceImpl implements ISysUserService
     @Override
     public int updateUserProfile(SysUser user)
     {
+        user.sign();
         return userMapper.updateUser(user);
     }
 
@@ -376,6 +384,7 @@ public class SysUserServiceImpl implements ISysUserService
     @Override
     public int resetPwd(SysUser user)
     {
+        user.sign();
         return userMapper.updateUser(user);
     }
 
@@ -519,6 +528,7 @@ public class SysUserServiceImpl implements ISysUserService
                     String password = configService.selectConfigByKey("sys.user.initPassword");
                     user.setPassword(SecurityUtils.encryptPassword(password));
                     user.setCreateBy(operName);
+                    user.sign();
                     userMapper.insertUser(user);
                     successNum++;
                     successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 导入成功");
@@ -531,6 +541,7 @@ public class SysUserServiceImpl implements ISysUserService
                     deptService.checkDeptDataScope(user.getDeptId());
                     user.setUserId(u.getUserId());
                     user.setUpdateBy(operName);
+                    user.sign();
                     userMapper.updateUser(user);
                     successNum++;
                     successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 更新成功");

+ 6 - 2
ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml

@@ -20,10 +20,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<result property="createTime" column="create_time" />
 		<result property="updateBy"   column="update_by"   />
 		<result property="updateTime" column="update_time" />
+		<result property="dataSignature" column="data_Signature" />
 	</resultMap>
 	
 	<sql id="selectDeptVo">
-        select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time 
+        select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time, d.data_Signature
         from sys_dept d
     </sql>
     
@@ -59,7 +60,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	</select>
     
     <select id="selectDeptById" parameterType="Long" resultMap="SysDeptResult">
-		select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status,
+		select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status,d.data_Signature,
 			(select dept_name from sys_dept where dept_id = d.parent_id) parent_name
 		from sys_dept d
 		where d.dept_id = #{deptId}
@@ -100,6 +101,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="email != null and email != ''">email,</if>
  			<if test="status != null">status,</if>
  			<if test="createBy != null and createBy != ''">create_by,</if>
+ 			<if test="dataSignature != null and dataSignature != ''">data_Signature,</if>
  			create_time
  		)values(
  			<if test="deptId != null and deptId != 0">#{deptId},</if>
@@ -112,6 +114,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="email != null and email != ''">#{email},</if>
  			<if test="status != null">#{status},</if>
  			<if test="createBy != null and createBy != ''">#{createBy},</if>
+ 			<if test="dataSignature != null and dataSignature != ''">#{dataSignature},</if>
  			sysdate()
  		)
 	</insert>
@@ -128,6 +131,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="email != null">email = #{email},</if>
  			<if test="status != null and status != ''">status = #{status},</if>
  			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+ 			<if test="dataSignature != null and dataSignature != ''">data_Signature = #{dataSignature},</if>
  			update_time = sysdate()
  		</set>
  		where dept_id = #{deptId}

+ 5 - 1
ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml

@@ -19,11 +19,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<result property="updateBy"           column="update_by"             />
 		<result property="updateTime"         column="update_time"           />
 		<result property="remark"             column="remark"                />
+		<result property="dataSignature"             column="data_Signature"                />
 	</resultMap>
 	
 	<sql id="selectRoleVo">
 	    select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly,
-            r.status, r.del_flag, r.create_time, r.remark 
+            r.status, r.del_flag, r.create_time, r.remark ,r.data_Signature
         from sys_role r
 	        left join sys_user_role ur on ur.role_id = r.role_id
 	        left join sys_user u on u.user_id = ur.user_id
@@ -105,6 +106,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="status != null and status != ''">status,</if>
  			<if test="remark != null and remark != ''">remark,</if>
  			<if test="createBy != null and createBy != ''">create_by,</if>
+ 			<if test="dataSignature != null and dataSignature != ''">data_Signature,</if>
  			create_time
  		)values(
  			<if test="roleId != null and roleId != 0">#{roleId},</if>
@@ -117,6 +119,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="status != null and status != ''">#{status},</if>
  			<if test="remark != null and remark != ''">#{remark},</if>
  			<if test="createBy != null and createBy != ''">#{createBy},</if>
+ 			<if test="dataSignature != null and dataSignature != ''">#{dataSignature},</if>
  			sysdate()
  		)
 	</insert>
@@ -133,6 +136,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="status != null and status != ''">status = #{status},</if>
  			<if test="remark != null">remark = #{remark},</if>
  			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+ 			<if test="dataSignature != null and dataSignature != ''">data_Signature = #{dataSignature},</if>
  			update_time = sysdate()
  		</set>
  		where role_id = #{roleId}

+ 3 - 0
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -158,6 +158,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="status != null and status != ''">status,</if>
  			<if test="createBy != null and createBy != ''">create_by,</if>
  			<if test="remark != null and remark != ''">remark,</if>
+ 			<if test="dataSignature != null and dataSignature != ''">data_Signature,</if>
  			create_time
  		)values(
  			<if test="userId != null and userId != ''">#{userId},</if>
@@ -172,6 +173,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="status != null and status != ''">#{status},</if>
  			<if test="createBy != null and createBy != ''">#{createBy},</if>
  			<if test="remark != null and remark != ''">#{remark},</if>
+ 			<if test="dataSignature != null and dataSignature != ''">#{dataSignature},</if>
  			sysdate()
  		)
 	</insert>
@@ -191,6 +193,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="loginDate != null">login_date = #{loginDate},</if>
  			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
  			<if test="remark != null">remark = #{remark},</if>
+ 			<if test="dataSignature != null">data_Signature = #{dataSignature},</if>
  			update_time = sysdate()
  		</set>
  		where user_id = #{userId}