Bläddra i källkod

feat: 两江用户管理状态操作记录以及状态同步,举报投诉删除失败问题解决

彭良苛 1 år sedan
förälder
incheckning
79bfcbe80e

+ 2 - 2
pom.xml

@@ -57,8 +57,8 @@
                 <spring.profile>dev</spring.profile>
                 <nacos.server.username>nacos</nacos.server.username>
                 <nacos.server.password>mxkj123..</nacos.server.password>
-                <nacos.server.address>172.20.21.8:8848</nacos.server.address>
-                <nacos.server.namespace>823425f6-a668-46bb-b916-9a451221c24d</nacos.server.namespace>
+                <nacos.server.address>127.0.0.1:8848</nacos.server.address>
+                <nacos.server.namespace>b98a94e3-baf2-45bd-b0a8-cffcf0fc607f</nacos.server.namespace>
                 <nacos.server.group>zfjg</nacos.server.group>
             </properties>
             <activation>

+ 13 - 0
zfjg-modules/zfjg-sync/src/main/java/com/zfjg/sync/controller/OpenApiController.java

@@ -38,6 +38,7 @@ import com.zfjg.sync.modules.obj.service.EnforceObjChangeHisService;
 import com.zfjg.sync.modules.random.mapper.*;
 import com.zfjg.sync.modules.random.service.RandomStandardDetailService;
 import com.zfjg.sync.modules.random.service.RandomStandardService;
+import com.zfjg.sync.modules.user.domain.SysUserStatusHisTo;
 import com.zfjg.sync.modules.user.service.SysUserStatusHisService;
 import com.zfjg.sync.modules.video.service.EnforceVideoOperHisService;
 import com.zfjg.sync.pojo.SyncEntity;
@@ -295,6 +296,18 @@ public class OpenApiController {
     }
 
 
+    @PostMapping("/sys_user_status_his/sync")
+    @PermitType(excludes = SyncType.DELETE)
+    @ApiOperation(
+            value = "同步系统用户",
+            tags = "基础数据同步",
+            notes = "提供同步系统用户的功能")
+    public AjaxResult acceptSysUserStatusHis(@Validated @RequestBody SyncEntity<SysUserStatusHisTo> syncEntity) {
+        receiveDataService.acceptSysStatusHis(syncEntity);
+        return AjaxResult.success();
+    }
+
+
     @PostMapping("/enforce_message/sync")
     @ApiOperation(
             value = "同步短信消息",

+ 105 - 0
zfjg-modules/zfjg-sync/src/main/java/com/zfjg/sync/modules/user/domain/SysUserStatusHisTo.java

@@ -0,0 +1,105 @@
+package com.zfjg.sync.modules.user.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Description: SysUserStatusHis参数共用类
+ * @Author Aatrox
+ * @CreateTime 2023/2/10 11:51
+ */
+
+@Data
+public class SysUserStatusHisTo {
+    /**
+     *
+     */
+    private Long id;
+
+    /**
+     * 组织ID
+     */
+    private String enforceOrgId;
+
+    /**
+     * 用户ID
+     */
+    private String userId;
+
+    /**
+     * 用户名
+     */
+    private String name;
+
+    /**
+     * 操作类型:freeze-冻结,unfreeze-解冻,disable-停用,enable-启用
+     */
+    private String operType;
+
+    /**
+     * 旧状态
+     */
+    private String oldStatus;
+
+    /**
+     * 新状态
+     */
+    private String newStatus;
+
+    /**
+     * 状态变更原因
+     */
+    private String statusChangeReason;
+
+    /**
+     * 状态变更详细描述
+     */
+    private String statusChangeDescribe;
+
+    /**
+     * 状态开始时间
+     */
+    private Date statusStartTime;
+
+    /**
+     * 状态结束时间
+     */
+    private Date statusEndTime;
+
+    /**
+     *
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    /**
+     *
+     */
+    private String createUserId;
+    /**
+     *
+     */
+    private String createUserName;
+
+
+    /**
+     *
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+
+    /**
+     *
+     */
+    private String updateUserId;
+
+    /**
+     *
+     */
+    private Integer isDeleted;
+
+    private String number;
+
+}

+ 8 - 0
zfjg-modules/zfjg-sync/src/main/java/com/zfjg/sync/modules/user/mapper/SysUserMapper.java

@@ -1,6 +1,7 @@
 package com.zfjg.sync.modules.user.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zfjg.sync.modules.user.domain.SysUserStatusHisTo;
 import com.zfjg.system.api.domain.SysUser;
 import org.springframework.stereotype.Repository;
 
@@ -10,4 +11,11 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
     void updateUser(SysUser user);
 
     int insertUser(SysUser user);
+
+
+    /**
+     * 新增执法人员变更记录
+     * @param statusHisTo
+     */
+    int addUserChangeHis(SysUserStatusHisTo statusHisTo);
 }

+ 2 - 0
zfjg-modules/zfjg-sync/src/main/java/com/zfjg/sync/modules/user/service/ISysUserService.java

@@ -1,6 +1,7 @@
 package com.zfjg.sync.modules.user.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zfjg.sync.modules.user.domain.SysUserStatusHisTo;
 import com.zfjg.system.api.domain.SysUser;
 
 
@@ -8,5 +9,6 @@ public interface ISysUserService extends IService<SysUser> {
 
     void saveOrUpdateSysUser(SysUser sysUser);
 
+    void addUserChangeHis(SysUserStatusHisTo statusHisTo);
 
 }

+ 6 - 0
zfjg-modules/zfjg-sync/src/main/java/com/zfjg/sync/modules/user/service/impl/SysUserServiceImpl.java

@@ -11,6 +11,7 @@ import com.zfjg.common.security.utils.SecurityUtils;
 import com.zfjg.sync.modules.config.mapper.SysConfigMapper;
 import com.zfjg.sync.modules.dept.mapper.SysDeptMapper;
 import com.zfjg.sync.modules.user.domain.SysUserRole;
+import com.zfjg.sync.modules.user.domain.SysUserStatusHisTo;
 import com.zfjg.sync.modules.user.mapper.SysUserMapper;
 import com.zfjg.sync.modules.user.mapper.SysUserRoleMapper;
 import com.zfjg.sync.modules.user.service.ISysUserService;
@@ -65,6 +66,11 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         }
     }
 
+    @Override
+    public void addUserChangeHis(SysUserStatusHisTo statusHisTo) {
+        this.sysUserMapper.addUserChangeHis(statusHisTo);
+    }
+
 
     private void insertUserRole(SysUser user) {
         if (StringUtils.isNotEmpty(user.getRoleIds())) {

+ 8 - 0
zfjg-modules/zfjg-sync/src/main/java/com/zfjg/sync/service/IReceiveDataService.java

@@ -3,6 +3,7 @@ package com.zfjg.sync.service;
 
 import com.zfjg.manage.api.domain.approve.EnforceApproveTemplete;
 import com.zfjg.manage.api.domain.device.Device;
+import com.zfjg.manage.api.domain.enforce.history.SysUserStatusHis;
 import com.zfjg.manage.api.domain.enforce.job.EnforceJobLog;
 import com.zfjg.manage.api.domain.enforce.message.EnforceMessage;
 import com.zfjg.manage.api.domain.enforce.obj.EnforceObj;
@@ -14,6 +15,7 @@ import com.zfjg.manage.api.dto.enforce.job.ArchiveEnforceJobDTO;
 import com.zfjg.manage.api.dto.enforce.job.EnforceJobDTO;
 import com.zfjg.manage.api.dto.other.IllegalOccupyDTO;
 import com.zfjg.manage.api.sync.EnforceJobSyncReport;
+import com.zfjg.sync.modules.user.domain.SysUserStatusHisTo;
 import com.zfjg.sync.pojo.SyncEntity;
 import com.zfjg.system.api.domain.SysUser;
 
@@ -144,4 +146,10 @@ public interface IReceiveDataService {
      */
     void acceptMessage(SyncEntity<EnforceMessage> syncEntity);
 
+    /**
+     * 接收西永用户状态
+     * @param syncEntity
+     */
+    void acceptSysStatusHis(SyncEntity<SysUserStatusHisTo> syncEntity);
+
 }

+ 17 - 0
zfjg-modules/zfjg-sync/src/main/java/com/zfjg/sync/service/impl/ReceiveDataServiceImpl.java

@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.zfjg.manage.api.domain.approve.EnforceApproveTemplete;
 import com.zfjg.manage.api.domain.device.Device;
+import com.zfjg.manage.api.domain.enforce.history.SysUserStatusHis;
 import com.zfjg.manage.api.domain.enforce.job.EnforceJobLog;
 import com.zfjg.manage.api.domain.enforce.message.EnforceMessage;
 import com.zfjg.manage.api.domain.enforce.obj.EnforceObj;
@@ -20,6 +21,7 @@ import com.zfjg.manage.api.dto.other.IllegalOccupyDTO;
 import com.zfjg.manage.api.sync.EnforceJobSyncReport;
 import com.zfjg.sync.api.constant.Constant;
 import com.zfjg.sync.modules.obj.service.EnforceObjChangeHisService;
+import com.zfjg.sync.modules.user.domain.SysUserStatusHisTo;
 import com.zfjg.sync.modules.video.service.EnforceVideoOperHisService;
 import com.zfjg.sync.pojo.SyncEntity;
 import com.zfjg.sync.enums.SyncType;
@@ -442,6 +444,21 @@ public class ReceiveDataServiceImpl extends AbstractReceiveDataService {
         }, "系统用户信息" );
     }
 
+    /**
+     * 接收用户状态日志
+     *
+     * @param syncEntity
+     */
+    @Override
+    public void acceptSysStatusHis(SyncEntity<SysUserStatusHisTo> syncEntity) {
+        receiveData(syncEntity ,history -> {
+            if (checkType(syncEntity, SyncType.INSERT)) {
+                history.setId(null);
+                sysUserService.addUserChangeHis(history);
+            }
+        }, "接收用户状态日志" );
+    }
+
     @Override
     public void acceptMessage(SyncEntity<EnforceMessage> syncEntity) {
         receiveData(syncEntity ,sysUser -> {

+ 38 - 0
zfjg-modules/zfjg-sync/src/main/resources/mapper/user/SysUserMapper.xml

@@ -69,4 +69,42 @@
         </set>
         where user_id = #{userId}
     </update>
+
+    <insert id="addUserChangeHis">
+        insert into sys_user_status_his(
+        <if test="enforceOrgId != null and enforceOrgId != ''">enforce_org_id,</if>
+        <if test="userId != null and userId != ''">user_id,</if>
+        <if test="name != null and name != ''">`name`,</if>
+        <if test="operType != null and operType != ''">oper_type,</if>
+        <if test="oldStatus != null and oldStatus != ''">old_status,</if>
+        <if test="newStatus != null and newStatus != ''">new_status,</if>
+        <if test="statusChangeReason != null and statusChangeReason != ''">status_change_reason,</if>
+        <if test="statusChangeDescribe != null and statusChangeDescribe != ''">status_change_describe,</if>
+        <if test="statusStartTime != null">status_start_time,</if>
+        <if test="statusEndTime != null">status_end_time,</if>
+        <if test="createTime != null">create_time,</if>
+        <if test="createUserId != null and createUserId != ''">create_user_id,</if>
+        <if test="updateTime != null">update_time,</if>
+        <if test="updateUserId != null and updateUserId != ''">update_user_id,</if>
+        <if test="number != null and number !=''">`number` = #{number},</if>
+        is_deleted
+        ) values (
+        <if test="enforceOrgId != null and enforceOrgId != ''">#{enforceOrgId},</if>
+        <if test="userId != null and userId != ''">#{userId},</if>
+        <if test="name != null and name != ''">#{name},</if>
+        <if test="operType != null and operType != ''">#{operType},</if>
+        <if test="oldStatus != null and oldStatus != ''">#{oldStatus},</if>
+        <if test="newStatus != null and newStatus != ''">#{newStatus},</if>
+        <if test="statusChangeReason != null and statusChangeReason != ''">#{statusChangeReason},</if>
+        <if test="statusChangeDescribe != null and statusChangeDescribe != ''">#{statusChangeDescribe},</if>
+        <if test="statusStartTime != null">#{statusStartTime},</if>
+        <if test="statusEndTime != null">#{statusEndTime},</if>
+        <if test="createTime != null">#{createTime},</if>
+        <if test="createUserId != null and createUserId != ''">#{createUserId},</if>
+        <if test="updateTime != null">#{updateTime},</if>
+        <if test="updateUserId != null and updateUserId != ''">#{updateUserId},</if>
+        <if test="number != null and number !=''">`number` = #{number},</if>
+        0
+        )
+    </insert>
 </mapper>

+ 20 - 0
zfjg-modules/zfjg-system/src/main/java/com/zfjg/system/common/event/SysUserStatusHisToEvent.java

@@ -0,0 +1,20 @@
+package com.zfjg.system.common.event;
+
+import com.zfjg.system.api.domain.SysUser;
+import com.zfjg.system.common.enums.OperationTypeEnum;
+import com.zfjg.system.domain.to.SysUserStatusHisTo;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+@Getter
+@Setter
+@EqualsAndHashCode(callSuper = false)
+@ToString
+public class SysUserStatusHisToEvent extends PushDataEvent<SysUserStatusHisTo> {
+    public SysUserStatusHisToEvent(Object source, String orgId, SysUserStatusHisTo entity, OperationTypeEnum operationType) {
+        super(source, orgId, entity, operationType);
+    }
+
+}

+ 95 - 0
zfjg-modules/zfjg-system/src/main/java/com/zfjg/system/common/listener/SysUserStatusHisToListener.java

@@ -0,0 +1,95 @@
+package com.zfjg.system.common.listener;
+
+import com.alibaba.fastjson.JSON;
+import com.zfjg.common.core.web.domain.AjaxResult;
+import com.zfjg.system.api.domain.SysUser;
+import com.zfjg.system.common.event.SysUserEvent;
+import com.zfjg.system.common.event.SysUserStatusHisToEvent;
+import com.zfjg.system.config.Constant;
+import com.zfjg.system.domain.to.SysUserStatusHisTo;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.event.EventListener;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import javax.annotation.Resource;
+import java.util.Objects;
+
+
+@Slf4j
+@Component
+public class SysUserStatusHisToListener extends PushDataEventListener<SysUserStatusHisTo, SysUserStatusHisToEvent>{
+
+    @Resource(name = "requestTemplate")
+    private RestTemplate requestTemplate;
+
+    /**
+     * 两江执法监督基础路由
+     */
+    @Value("${data.sync.lj}")
+    private String LJ_ZFJD_BASE_URL;
+
+    @Override
+    protected String getModuleName() {
+        return "用户操作记录";
+    }
+
+    @EventListener(SysUserStatusHisToEvent.class)
+    public void updateData(SysUserStatusHisToEvent event) {
+        this.dealEvent(event);
+    }
+
+    /**
+     * 执行插入数据操作
+     *
+     * @param entity 数据实体
+     */
+    @Override
+    protected void doInsert(SysUserStatusHisTo entity) {
+        request("/sys_user_status_his", entity, checkIsLjData(entity.getEnforceOrgId()));
+    }
+
+    private HttpHeaders auth(HttpHeaders requestHeaders) {
+        requestHeaders.set("Content-type", "application/json; charset=utf-8");
+        return requestHeaders;
+    }
+
+    /**
+     * 通用请求处理
+     * @param apiUrl
+     * @param data
+     */
+    private void request(String apiUrl, Object data, boolean isPush) {
+        if (!isPush) {
+            log.warn("{} 不符合要求不进行推送:{}", apiUrl, JSON.toJSONString(data));
+            return;
+        }
+        String requestUrl = LJ_ZFJD_BASE_URL + "/api/manage/accept/v1" + apiUrl;
+        log.info("开始推送{}: {}", apiUrl, JSON.toJSONString(data));
+        HttpEntity<Object> httpEntity = new HttpEntity<>(data, auth(new HttpHeaders()));
+        ResponseEntity<AjaxResult> exchange = requestTemplate.exchange(requestUrl, HttpMethod.POST, httpEntity, AjaxResult.class);
+        AjaxResult body = exchange.getBody();
+        if (exchange.getStatusCode().is2xxSuccessful() && Objects.nonNull(body) && body.isSuccess()) {
+            log.error("{}推送成功:{}", apiUrl, body.get(AjaxResult.MSG_TAG));
+        } else if (Objects.nonNull(body)) {
+            log.error("{}推送失败:{}", apiUrl, body.get(AjaxResult.MSG_TAG));
+        } else {
+            log.error("请求 {} 失败 状态码:{}", apiUrl, exchange.getStatusCodeValue());
+        }
+    }
+
+    /**
+     * 检查数据权限是否为两江
+     * @param enforceOrgId
+     * @return
+     */
+    private boolean checkIsLjData(String enforceOrgId) {
+        return Constant.NEED_PUSH_DATA_ORG_ID.equals(enforceOrgId);
+    }
+
+}

+ 12 - 2
zfjg-modules/zfjg-system/src/main/java/com/zfjg/system/service/impl/SysUserServiceImpl.java

@@ -21,6 +21,7 @@ import com.zfjg.system.api.domain.SysUser;
 import com.zfjg.system.api.domain.dto.UserStatDTO;
 import com.zfjg.system.common.enums.OperationTypeEnum;
 import com.zfjg.system.common.event.SysUserEvent;
+import com.zfjg.system.common.event.SysUserStatusHisToEvent;
 import com.zfjg.system.domain.SysPost;
 import com.zfjg.system.domain.SysUserDTO;
 import com.zfjg.system.domain.SysUserPost;
@@ -687,7 +688,10 @@ public class SysUserServiceImpl implements ISysUserService, ApplicationContextAw
         updateUser.setUpdateBy(SecurityUtils.getUsername());
         SysUser sysUser = userMapper.selectUserById(user.getUserId());
         statusHisTo.setOldStatus(sysUser.getStatus());
-        this.updateUserStatus(updateUser);
+        int rows = this.updateUserStatus(updateUser);
+        if (rows > 0) {
+            afterDealUser(userMapper.selectUserById(sysUser.getUserId()), OperationTypeEnum.UPDATE);
+        }
         statusHisTo.setNewStatus(user.getStatus());
         statusHisTo.setOldStatus(sysUser.getStatus());
         statusHisTo.setEnforceOrgId(sysUser.getEnforceOrgId());
@@ -704,7 +708,13 @@ public class SysUserServiceImpl implements ISysUserService, ApplicationContextAw
             statusHisTo.setStatusChangeReason(user.getStatusReason());
         }
         statusHisTo.setStatusChangeReason(user.getStatusReason());
-        return userMapper.addUserChangeHis(statusHisTo);
+        int rows2 = userMapper.addUserChangeHis(statusHisTo);
+        afterDealHis(statusHisTo);
+        return rows2;
+    }
+
+    private void afterDealHis(SysUserStatusHisTo statusHisTo) {
+        this.applicationContext.publishEvent(new SysUserStatusHisToEvent(this, statusHisTo.getEnforceOrgId() ,statusHisTo, OperationTypeEnum.INSERT));
     }
 
     private List<UserStatDTO> countUserByRole(String enforceOrgId, List<String> positions) {