Jelajahi Sumber

用户修改轨迹

xx 1 tahun lalu
induk
melakukan
4f3a7332b3
19 mengubah file dengan 726 tambahan dan 20 penghapusan
  1. 22 0
      src/main/java/com/ydtech/config/properties/PlatformMerchantsConfiguration.java
  2. 18 0
      src/main/java/com/ydtech/modules/admin/constants/UserWorkStatus.java
  3. 111 9
      src/main/java/com/ydtech/modules/admin/controller/SysUserController.java
  4. 9 1
      src/main/java/com/ydtech/modules/admin/dao/SysUserMapper.java
  5. 21 0
      src/main/java/com/ydtech/modules/admin/dao/SysUserRecordMapper.java
  6. 23 0
      src/main/java/com/ydtech/modules/admin/model/SysUserInfo.java
  7. 38 0
      src/main/java/com/ydtech/modules/admin/model/SysUserRecord.java
  8. 11 0
      src/main/java/com/ydtech/modules/admin/model/dto/AgentsAndChannelsDto.java
  9. 19 0
      src/main/java/com/ydtech/modules/admin/model/dto/UpdateManagementDto.java
  10. 23 0
      src/main/java/com/ydtech/modules/admin/model/record/UserImageVoRecord.java
  11. 73 0
      src/main/java/com/ydtech/modules/admin/model/record/UserInfoRecord.java
  12. 34 0
      src/main/java/com/ydtech/modules/admin/model/record/UserRecord.java
  13. 8 0
      src/main/java/com/ydtech/modules/admin/platform/PlatformMerchantsApi.java
  14. 6 4
      src/main/java/com/ydtech/modules/admin/service/SysUserService.java
  15. 36 6
      src/main/java/com/ydtech/modules/admin/service/impl/SysUserServiceImpl.java
  16. 167 0
      src/main/java/com/ydtech/modules/admin/utils/DifferentPropertyUtils.java
  17. 83 0
      src/main/java/com/ydtech/modules/admin/utils/RecordUserUtils.java
  18. 10 0
      src/main/resources/mapper/modules/admin/SysUserMapper.xml
  19. 14 0
      src/main/resources/mapper/modules/admin/SysUserRecordMapper.xml

+ 22 - 0
src/main/java/com/ydtech/config/properties/PlatformMerchantsConfiguration.java

@@ -0,0 +1,22 @@
+package com.ydtech.config.properties;
+
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * @description: 天天企赋平台商户接口 配置文件
+ * @author: wenks
+ * @date: 2024/8/8 16:33
+ **/
+@Data
+@Component
+@ConfigurationProperties(prefix = "")
+public class PlatformMerchantsConfiguration {
+
+
+
+
+
+}

+ 18 - 0
src/main/java/com/ydtech/modules/admin/constants/UserWorkStatus.java

@@ -20,4 +20,22 @@ public enum UserWorkStatus {
     private final Integer code;
 
     private final String desc;
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public static String getNameByRole(Integer role){
+        for (UserWorkStatus value : UserWorkStatus.values()) {
+            if(value.getCode().equals(role)){
+                return value.getDesc();
+            }
+        }
+        return null;
+    }
+
 }

+ 111 - 9
src/main/java/com/ydtech/modules/admin/controller/SysUserController.java

@@ -2,6 +2,8 @@ package com.ydtech.modules.admin.controller;
 
 
 import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.extra.spring.SpringUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -17,16 +19,16 @@ import com.ydtech.modules.admin.components.request.UnionPayRequest;
 import com.ydtech.modules.admin.components.response.UnionPayResponse;
 import com.ydtech.modules.admin.constants.RoleConstants;
 import com.ydtech.modules.admin.constants.UserWorkStatus;
+import com.ydtech.modules.admin.dao.SysUserRecordMapper;
 import com.ydtech.modules.admin.model.*;
-import com.ydtech.modules.admin.model.dto.AgentUserDto;
-import com.ydtech.modules.admin.model.dto.QuTeamNumDto;
-import com.ydtech.modules.admin.model.dto.QuUserNumDto;
-import com.ydtech.modules.admin.model.dto.SysUserDto;
+import com.ydtech.modules.admin.model.dto.*;
 import com.ydtech.modules.admin.model.po.SysUserBankCard;
 import com.ydtech.modules.admin.model.po.SysUserIsDial;
 import com.ydtech.modules.admin.model.po.SysUserTreeShowLevel;
 import com.ydtech.modules.admin.model.vo.*;
 import com.ydtech.modules.admin.service.*;
+import com.ydtech.modules.admin.utils.DifferentPropertyUtils;
+import com.ydtech.modules.admin.utils.RecordUserUtils;
 import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.base.model.dto.BaseDto;
 import com.ydtech.modules.base.model.dto.PageDto;
@@ -43,18 +45,20 @@ import com.ydtech.modules.protocol.utils.AssertionUtils;
 import com.ydtech.security.utils.PasswordUtils;
 import com.ydtech.utils.StringUtils;
 import com.ydtech.utils.idgen.IdGenerate;
-import io.swagger.annotations.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 
 import static com.ydtech.constants.RedisConstant.PHONE_VERIFICATION_CODE_KEY;
 
@@ -528,6 +532,8 @@ public class SysUserController extends BaseController {
             sysUserVo.setSysUser(sysUser);
             List<EsmUserImageQueryVo> esmUserImageQueryVo = esmUserImageService.getEsmUserImageQueryVo(userId);
             sysUserVo.setEsmUserImageVo(esmUserImageQueryVo);
+            sysUserVo.setSysUserInfo(sysUserInfoService.getById(userId));
+            SpringUtil.getBean(RecordUserUtils.class).addRecord(JSONObject.parseObject(JSONObject.toJSONString(sysUserVo),SysUser2Vo.class),BaseController.getUserName());
             return HttpResult.ok(sysUserVo);
         }
         // 查询推荐人
@@ -541,6 +547,12 @@ public class SysUserController extends BaseController {
         }
         //查询详情信息
         SysUserInfo userInfo = sysUserInfoService.getById(userId);
+
+        String addr = Optional.ofNullable(userInfo).map(SysUserInfo::getLiveAddress).orElse(null);
+        if (StringUtils.isNotEmpty(addr)){
+            userInfo.setLiveAddressString(addr.split(","));
+        }
+
         //查询用户绑定的银行卡信息
         SysUserBankCard queryBank = new SysUserBankCard();
         queryBank.setUserId(userId);
@@ -562,7 +574,8 @@ public class SysUserController extends BaseController {
         sysUserVo.setSysUser(sysUser);
         sysUserVo.setSysUserInfo(userInfo);
         sysUserVo.setEsmUserImageVo(esmUserImageQueryVo);
-
+        //初始化添加人员修改记录
+        SpringUtil.getBean(RecordUserUtils.class).addRecord(JSONObject.parseObject(JSONObject.toJSONString(sysUserVo),SysUser2Vo.class),BaseController.getUserName());
         return HttpResult.ok(sysUserVo);
 
     }
@@ -951,4 +964,93 @@ public class SysUserController extends BaseController {
         return HttpResult.ok("恢复成功");
     }
 
+
+    /**
+     * @version
+     * @author: hxl
+     * @Date: 2024/4/18 16:12
+     * @Description: 查询修改记录
+     */
+    @ApiOperation(value = "查询修改记录")
+    @GetMapping(value = "/getUserModificationRecords")
+    public HttpResult getUserModificationRecords(@RequestParam("userId") String userId) throws IllegalAccessException {
+        List<SysUserRecord> userList = SpringUtil.getBean(SysUserRecordMapper.class).queryByUserId(userId);
+        if (CollectionUtils.isEmpty(userList)){
+            return HttpResult.ok(new ArrayList[0]);
+        }
+        SysUserInfoQuery sysUserVo = new SysUserInfoQuery();
+        // 查询用户
+        SysUser sysUser = sysUserService.getById(userId);
+        // 查询角色
+        SysUserRole sysUserRole = sysUserRoleService.selectByUserId(userId);
+//        SysUserRole sysUserRole = sysUserRoleService.getById(userId);
+        if (!ObjectUtils.isEmpty(sysUserRole)) {
+            sysUser.setRoleId(StringUtils.toString(sysUserRole.getRoleId()));
+        }
+        //查询 机构的上级
+        SysDept sysDept = sysDeptService.getById(sysUser.getDeptId());
+        sysUser.setPdeptId(sysDept.getParentId());
+        if ("19".equals(sysUser.getRoleId())) {
+            SysUser operator = sysUserService.getById(sysUser.getOperatorCode());
+            sysUser.setReferrerId(operator != null ? operator.getId() : "");
+            sysUser.setReferrerName(operator != null ? operator.getName() : "");
+            sysUserVo.setSysUser(sysUser);
+            sysUserVo.setSysUserInfo(sysUserInfoService.getById(userId));
+            List<EsmUserImageQueryVo> esmUserImageQueryVo = esmUserImageService.getEsmUserImageQueryVo(userId);
+            sysUserVo.setEsmUserImageVo(esmUserImageQueryVo);
+            return HttpResult.ok(DifferentPropertyUtils.ModificationRecordData(sysUserVo, userList));
+        }
+        // 查询推荐人
+        EsmUserReferrer referrer = esmUserReferrerService.getById(userId);
+        if (ObjectUtils.isEmpty(referrer)) {
+            sysUser.setReferrerId(null);
+            sysUser.setReferrerName(null);
+        } else {
+            sysUser.setReferrerId(referrer.getReferrerId());
+            sysUser.setReferrerName(referrer.getReferrerName());
+        }
+        //查询详情信息
+        SysUserInfo userInfo = sysUserInfoService.getById(userId);
+        if (StringUtils.isNotEmpty(userInfo.getLiveAddress())){
+            userInfo.setLiveAddressString(userInfo.getLiveAddress().split(","));
+        }
+        //查询用户绑定的银行卡信息
+        SysUserBankCard queryBank = new SysUserBankCard();
+        queryBank.setUserId(userId);
+        queryBank.setAuditStatus("1");
+        HttpResult<List<SysUserBankCard>> userBankList = sysUserBankCardService.getUserBankListByQueryParam(queryBank);
+        if (!Objects.isNull(userInfo)) {
+            if (userBankList.getData().isEmpty()) {
+                userInfo.setBankName(null);
+                userInfo.setAccountno(null);
+            } else {
+                userInfo.setBankName(userBankList.getData().get(0).getBankAccount());
+                userInfo.setAccountno(userBankList.getData().get(0).getBankNumber());
+            }
+        }
+        List<EsmUserImageQueryVo> esmUserImageQueryVo = esmUserImageService.getEsmUserImageQueryVo(userId);
+        sysUserVo.setSysUser(sysUser);
+        sysUserVo.setSysUserInfo(userInfo);
+        sysUserVo.setEsmUserImageVo(esmUserImageQueryVo);
+        return HttpResult.ok(DifferentPropertyUtils.ModificationRecordData(sysUserVo, userList));
+
+    }
+
+    /**
+     * 代理人和渠道添加批量设置管理人
+     */
+    @PostMapping("updateManagementPersonnel")
+    public HttpResult updateManagementPersonnel(@RequestBody UpdateManagementDto managementDto){
+        return sysUserService.updateManagementPersonnel(managementDto);
+    }
+
+
+    /**
+     * 代理人和渠道用户查询
+     */
+    @PostMapping("selectForAgentsAndChannelsPage")
+    public HttpResult selectForAgentsAndChannelsPage(@RequestBody  AgentsAndChannelsDto agentsAndChannelsDto){
+        return sysUserService.selectForAgentsAndChannelsPage(agentsAndChannelsDto);
+    }
+
 }

+ 9 - 1
src/main/java/com/ydtech/modules/admin/dao/SysUserMapper.java

@@ -7,7 +7,6 @@ import com.ydtech.modules.admin.model.QuTeamNum;
 import com.ydtech.modules.admin.model.QuUserNum;
 import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.model.dto.*;
-import com.ydtech.modules.admin.model.report.user.HouLinePersonnelReportDto;
 import com.ydtech.modules.admin.model.report.user.QianLineQDPersonnelReportDto;
 import com.ydtech.modules.admin.model.vo.*;
 import com.ydtech.modules.base.model.dto.PageDto;
@@ -457,6 +456,15 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
      */
     Page<QxFrontlineAgentDto> findUserListByParam(@Param("page") Page page, @Param("vo") QxFrontlineAgentVo qxFrontlineAgentVo);
 
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/8/30 18:47
+     *  @Description: 更新
+     */
+    Integer updateManagementPersonnel(@Param("managementDto") UpdateManagementDto managementDto);
+
+
     List<SysUser> getAllAgent(String pid ,  List<String>  ids);
 
 }

+ 21 - 0
src/main/java/com/ydtech/modules/admin/dao/SysUserRecordMapper.java

@@ -0,0 +1,21 @@
+package com.ydtech.modules.admin.dao;
+
+
+import com.ydtech.modules.admin.model.SysUserRecord;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+import tk.mybatis.mapper.common.BaseMapper;
+
+import java.util.List;
+
+
+@Mapper
+@Repository
+public interface SysUserRecordMapper extends BaseMapper<SysUserRecord> {
+
+
+
+    SysUserRecord selectByUserId(String userId);
+
+    List<SysUserRecord> queryByUserId(String userId);
+}

+ 23 - 0
src/main/java/com/ydtech/modules/admin/model/SysUserInfo.java

@@ -143,6 +143,29 @@ public class SysUserInfo implements Serializable {
     @TableField(value = "remark")
     private String remark;
 
+    @ApiModelProperty(value = "")
+    @TableField(value = "live_address")
+    private String liveAddress;
+
+    @TableField(exist = false)
+    private String[] liveAddressString;
+
+    @ApiModelProperty(value = "")
+    @TableField(value = "we_chat")
+    private String weChat;
+
+    @ApiModelProperty(value = "")
+    @TableField(value = "alipay")
+    private String alipay;
+
+    @ApiModelProperty(value = "")
+    @TableField(value = "real_name")
+    private boolean realName;
+
+    @ApiModelProperty(value = "")
+    @TableField(value = "bank_authentication")
+    private boolean bankAuthentication;
+
 
 
 

+ 38 - 0
src/main/java/com/ydtech/modules/admin/model/SysUserRecord.java

@@ -0,0 +1,38 @@
+package com.ydtech.modules.admin.model;
+
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@TableName(value ="sys_user_record")
+@Data
+public class SysUserRecord implements Serializable {
+
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private String id;
+
+    private String userId;
+
+    private String sysUser;
+
+    private String sysUserInfo;
+
+    private String esmUserImageVo;
+
+    @TableField(value = "create_by")
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+
+    @TableField(value = "create_time")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+}

+ 11 - 0
src/main/java/com/ydtech/modules/admin/model/dto/AgentsAndChannelsDto.java

@@ -0,0 +1,11 @@
+package com.ydtech.modules.admin.model.dto;
+
+
+import lombok.Data;
+
+@Data
+public class AgentsAndChannelsDto {
+
+    private String leaderId;
+
+}

+ 19 - 0
src/main/java/com/ydtech/modules/admin/model/dto/UpdateManagementDto.java

@@ -0,0 +1,19 @@
+package com.ydtech.modules.admin.model.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+
+@Data
+public class UpdateManagementDto {
+
+    private String leaderId;
+
+    private String leaderName;
+
+
+    private List<String> userIds;
+
+
+}

+ 23 - 0
src/main/java/com/ydtech/modules/admin/model/record/UserImageVoRecord.java

@@ -0,0 +1,23 @@
+package com.ydtech.modules.admin.model.record;
+
+import lombok.Data;
+
+@Data
+public class UserImageVoRecord {
+
+    private String SFZ_01;
+
+    private String SFZ_02;
+
+    private String Z6Z_00;
+
+    private String LD_00;
+
+    private String YP_00;
+
+    private String DX_00;
+
+    private String LZ_01;
+
+
+}

+ 73 - 0
src/main/java/com/ydtech/modules/admin/model/record/UserInfoRecord.java

@@ -0,0 +1,73 @@
+package com.ydtech.modules.admin.model.record;
+
+import lombok.Data;
+
+@Data
+public class UserInfoRecord {
+
+
+    private String sex;
+
+    private String birthday;
+
+    private String nations;
+
+    private String koseki;
+
+    private String maritalStatus;
+
+    private String politicsStatus;
+
+    private String health;
+
+    private String address;
+
+    private String postalCode;
+
+    private String bloodType;
+
+    private String education;
+
+    private String school;
+
+    private String graduationTime;
+
+    private String formerEmployer;
+
+    private String emergencyContactName;
+
+    private String emergencyContactTel;
+
+    private String isSpeciality;
+
+    private String salary;
+
+    private String salaryLevel;
+
+    private String performance;
+
+    private String accountno;
+
+    private String bankName;
+
+    private String entryTime;
+
+    private String logoutTime;
+
+    private String approvalOpinion;
+
+    private String agentQualificationCode;
+
+    private String liveAddress;
+
+    private  String weChat;
+
+    private String alipay;
+
+    private String realName;
+
+    private String bankAuthentication;
+
+
+
+}

+ 34 - 0
src/main/java/com/ydtech/modules/admin/model/record/UserRecord.java

@@ -0,0 +1,34 @@
+package com.ydtech.modules.admin.model.record;
+
+
+import lombok.Data;
+
+@Data
+public class UserRecord {
+
+
+    private String pdeptId;
+
+    private String deptId;
+
+    private String positionId;
+
+    private String id;
+
+    private String name;
+
+    private String mobile;
+
+    private String status;
+
+    private String roleId;
+
+    private String leaderId;
+
+    private String identity;
+
+    private String logoutTime;
+
+    private String approvalOpinion;
+
+}

+ 8 - 0
src/main/java/com/ydtech/modules/admin/platform/PlatformMerchantsApi.java

@@ -0,0 +1,8 @@
+package com.ydtech.modules.admin.platform;
+
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class PlatformMerchantsApi {
+}

+ 6 - 4
src/main/java/com/ydtech/modules/admin/service/SysUserService.java

@@ -10,10 +10,7 @@ import com.ydtech.modules.admin.model.QuTeamNum;
 import com.ydtech.modules.admin.model.QuUserNum;
 import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.model.SysUserRole;
-import com.ydtech.modules.admin.model.dto.IpInfoDto;
-import com.ydtech.modules.admin.model.dto.QuTeamNumDto;
-import com.ydtech.modules.admin.model.dto.QuUserNumDto;
-import com.ydtech.modules.admin.model.dto.SysUserDto;
+import com.ydtech.modules.admin.model.dto.*;
 import com.ydtech.modules.admin.model.vo.*;
 import com.ydtech.modules.base.model.dto.PageDto;
 import com.ydtech.modules.base.model.vo.PageVo;
@@ -248,6 +245,11 @@ public interface SysUserService extends BaseIService<SysUser> {
      */
     List<SysUser> findNextTree();
 
+
+    HttpResult updateManagementPersonnel(UpdateManagementDto managementDto);
+
+    HttpResult selectForAgentsAndChannelsPage(AgentsAndChannelsDto agentsAndChannelsDto);
+
     /**
      * 获取当前用户的所有代理人
      * @return

+ 36 - 6
src/main/java/com/ydtech/modules/admin/service/impl/SysUserServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ydtech.modules.admin.service.impl;
 
+import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -14,19 +15,16 @@ import com.ydtech.core.page.PageResult;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.constants.QuMarks;
 import com.ydtech.modules.admin.constants.RoleConstants;
-import com.ydtech.modules.admin.constants.SystemType;
 import com.ydtech.modules.admin.constants.UserWorkStatus;
 import com.ydtech.modules.admin.dao.SysUserLinkAreaMapper;
 import com.ydtech.modules.admin.dao.SysUserMapper;
 import com.ydtech.modules.admin.model.*;
-import com.ydtech.modules.admin.model.dto.IpInfoDto;
-import com.ydtech.modules.admin.model.dto.QuTeamNumDto;
-import com.ydtech.modules.admin.model.dto.QuUserNumDto;
-import com.ydtech.modules.admin.model.dto.SysUserDto;
+import com.ydtech.modules.admin.model.dto.*;
 import com.ydtech.modules.admin.model.po.SysUserIsDial;
 import com.ydtech.modules.admin.model.po.SysUserTreeShowLevel;
 import com.ydtech.modules.admin.model.vo.*;
 import com.ydtech.modules.admin.service.*;
+import com.ydtech.modules.admin.utils.RecordUserUtils;
 import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.base.model.dto.PageDto;
 import com.ydtech.modules.base.model.vo.PageVo;
@@ -41,6 +39,7 @@ import com.ydtech.utils.idgen.IdGenerate;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
 import java.util.*;
@@ -632,6 +631,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                 userId = sysUser.getId();
                 updateById(sysUser);
             }
+            SysUserInfo userInfo = sysUserVo.getSysUserInfo();
+            userInfo.setId(sysUser.getId());
+            sysUserInfoService.save(userInfo);
         }else{
             userId = gainNextUserId(sysUser.getDeptId());
 
@@ -658,6 +660,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             }
             SysUserInfo userInfo = sysUserVo.getSysUserInfo();
             if (userInfo != null) {
+                if (null != userInfo.getLiveAddressString() && userInfo.getLiveAddressString().length > 0){
+                    sysUserVo.getSysUserInfo().setLiveAddress(Arrays.stream(userInfo.getLiveAddressString()).map(item->item.toString()).collect(Collectors.joining(",")));
+                }
                 userInfo.setId(sysUser.getId());
             }
 //        userInfo.setId(sysUser.getId());
@@ -772,6 +777,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                 userId = sysUser.getId();
                 updateById(sysUser);
             }
+            SysUserInfo sysUserInfo = sysUserVo.getSysUserInfo();
+            sysUserInfo.setId(userId);
+            sysUserInfoService.saveOrUpdate(sysUserInfo);
         }else{
             sysUser.setStatus(sysUserVo.getSysUser().getStatus());
             updateById(sysUser);
@@ -790,6 +798,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
             //用户详情信息
             SysUserInfo sysUserInfo = sysUserVo.getSysUserInfo();
+            if (null != sysUserInfo.getLiveAddressString() && sysUserInfo.getLiveAddressString().length > 0){
+                sysUserVo.getSysUserInfo().setLiveAddress(Arrays.stream(sysUserInfo.getLiveAddressString()).map(item->item.toString()).collect(Collectors.joining(",")));
+            }
             sysUserInfo.setId(userId);
             if (null == sysUserInfo.getRemark()) {
                 sysUserInfo.setRemark("");
@@ -819,7 +830,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             sysUserTrack.setApproveTime(new Date());
             sysUserTrackService.save(sysUserTrack);
         }
-
+        SpringUtil.getBean(RecordUserUtils.class).recordUser(sysUserVo,BaseController.getUserName());
         return HttpResult.ok("修改成功");
     }
 
@@ -1655,4 +1666,23 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             return  new ArrayList<>();
         }
     }
+    @Override
+    public HttpResult updateManagementPersonnel(UpdateManagementDto managementDto) {
+        try {
+            if (StringUtils.isEmpty(managementDto.getLeaderId()) && CollectionUtils.isEmpty(managementDto.getUserIds())){
+                return HttpResult.error("保存数据不能为空");
+            }
+            return HttpResult.ok(baseMapper.updateManagementPersonnel(managementDto));
+        }catch (Exception e){
+            log.error("批量更新管理人员出错{}" + e.getMessage());
+            return HttpResult.error("更新失败");
+        }
+    }
+
+    @Override
+    public HttpResult selectForAgentsAndChannelsPage(AgentsAndChannelsDto agentsAndChannelsDto) {
+        return HttpResult.ok();
+
+    }
+
 }

+ 167 - 0
src/main/java/com/ydtech/modules/admin/utils/DifferentPropertyUtils.java

@@ -0,0 +1,167 @@
+package com.ydtech.modules.admin.utils;
+
+import cn.hutool.extra.spring.SpringUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.ydtech.modules.admin.constants.UserWorkStatus;
+import com.ydtech.modules.admin.model.SysUserRecord;
+import com.ydtech.modules.admin.model.record.UserInfoRecord;
+import com.ydtech.modules.admin.model.record.UserRecord;
+import com.ydtech.modules.admin.model.vo.SysUserInfoQuery;
+import com.ydtech.modules.admin.service.SysPositionService;
+import com.ydtech.modules.admin.service.SysUserService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.util.CollectionUtils;
+
+import java.lang.reflect.Field;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+public class DifferentPropertyUtils {
+
+
+    private static  String[] userKey = new String[]{"leaderId","positionId","status"};
+
+    private static  String[] dateTimeKey = new String[]{"graduationTime","entryTime","logoutTime"};
+
+    public static List<Object> ModificationRecordData(SysUserInfoQuery sysUserVo, List<SysUserRecord> userList) throws IllegalAccessException {
+        if (CollectionUtils.isEmpty(userList)){
+            return new ArrayList<>();
+        }
+
+        UserRecord sysUser = JSONObject.parseObject(JSONObject.toJSONString(sysUserVo.getSysUser()), UserRecord.class);
+        Map<String, String> mapValue = objectToMap(sysUser);
+
+        UserInfoRecord userInfoRecord = JSONObject.parseObject(JSONObject.toJSONString(sysUserVo.getSysUserInfo()), UserInfoRecord.class);
+        Map<String, String> userInfoMapValue = objectToMap(userInfoRecord);
+
+        List<Object> list = new ArrayList<>();
+
+        for (SysUserRecord userRecord : userList) {
+            HashMap<String, Object> objectHashMap = new HashMap<>();
+            ArrayList<Object> objectArrayList = new ArrayList<>();
+            Map<String, String> newRecord = objectToMap(JSONObject.parseObject(userRecord.getSysUser(), UserRecord.class));
+            for (String name :  getFiledName(sysUser)) {
+                if ("status".equals(name)){
+                    continue;
+                }
+                if (!mapValue.get(name).equals(newRecord.get(name))){
+                    HashMap<String, Object> hashMap = new HashMap<>();
+                    hashMap.put("propertyName",name);
+                    if (Arrays.asList(userKey).contains(name)){
+                        hashMap.put("newValue",getDistName(name,mapValue.get(name)));
+                        hashMap.put("oldValue",getDistName(name,newRecord.get(name)));
+                    } else if (Arrays.asList(dateTimeKey).contains(name)) {
+                        hashMap.put("newValue",dateTime(mapValue.get(name)));
+                        hashMap.put("oldValue",dateTime(newRecord.get(name)));
+                    }else {
+                        hashMap.put("newValue",mapValue.get(name));
+                        hashMap.put("oldValue",newRecord.get(name));
+                    }
+                    objectArrayList.add(hashMap);
+                }
+            }
+            objectHashMap.put("status", UserWorkStatus.getNameByRole(Integer.valueOf(mapValue.get("status"))));
+            objectHashMap.put("createBy",userRecord.getCreateBy());
+            objectHashMap.put("createTime",userRecord.getCreateTime());
+            objectHashMap.put("user",objectArrayList);
+            mapValue = newRecord;
+
+
+
+
+            ArrayList<Object> userInfoList = new ArrayList<>();
+            Map<String, String> userInfoNewRecord = objectToMap(JSONObject.parseObject(userRecord.getSysUserInfo(), UserInfoRecord.class));
+
+            for (String name :  getFiledName(userInfoRecord)) {
+                if ("salary".equals(name)){
+                    if (new BigDecimal(userInfoMapValue.get(name)).compareTo(new BigDecimal(userInfoNewRecord.get(name))) != 0){
+                        HashMap<String, Object> hashMap = new HashMap<>();
+                        hashMap.put("propertyName",name);
+                        hashMap.put("newValue",userInfoMapValue.get(name));
+                        hashMap.put("oldValue",userInfoNewRecord.get(name));
+                        userInfoList.add(hashMap);
+                    }
+                }else {
+                    if (!userInfoMapValue.get(name).equals(userInfoNewRecord.get(name))){
+                        HashMap<String, Object> hashMap = new HashMap<>();
+                        hashMap.put("propertyName",name);
+                        if (Arrays.asList(dateTimeKey).contains(name)){
+                            hashMap.put("newValue",dateTime(userInfoMapValue.get(name)));
+                            hashMap.put("oldValue",dateTime(userInfoNewRecord.get(name)));
+                        }else {
+                            hashMap.put("newValue",userInfoMapValue.get(name));
+                            hashMap.put("oldValue",userInfoNewRecord.get(name));
+                        }
+                        userInfoList.add(hashMap);
+                    }
+                }
+            }
+            userInfoMapValue = userInfoNewRecord;
+            objectHashMap.put("userInfo",userInfoList);
+            if (!CollectionUtils.isEmpty(objectArrayList) || !CollectionUtils.isEmpty(userInfoList)){
+                list.add(objectHashMap);
+            }
+        }
+
+
+        return list;
+    }
+
+    public static String dateTime(String timestamp){
+        if (StringUtils.isEmpty(timestamp) || "null".equals(timestamp)){
+            return "";
+        }
+        Date date = new Date(Long.valueOf(timestamp));
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        return sdf.format(date);
+    }
+
+    public static String getDistName(String key,String value){
+        if(StringUtils.isEmpty(value) || "null".equals(value)){
+            return "";
+        }
+        switch (key){
+            case "leaderId":
+                return SpringUtil.getBean(SysUserService.class).getById(value).getName();
+            case "positionId":
+                return SpringUtil.getBean(SysPositionService.class).getById(value).getPostName();
+            case "status":
+                return UserWorkStatus.getNameByRole(Integer.valueOf(value));
+            default:
+                return "";
+        }
+    }
+
+
+    public static Map<String, String> objectToMap(Object obj) throws IllegalAccessException {
+        if (null == obj){
+            return new HashMap<>(0);
+        }
+        Map<String, String> map = new HashMap<>();
+        Class<?> clazz = obj.getClass();
+        Field[] fields = clazz.getDeclaredFields();
+        for (Field field : fields) {
+            field.setAccessible(true);
+            map.put(field.getName(), String.valueOf(field.get(obj)));
+        }
+        return map;
+    }
+
+
+    private static String[] getFiledName(Object o) {
+        if (null == o){
+            return new String[]{};
+        }
+        Field[] fields = o.getClass().getDeclaredFields();
+        String[] fieldNames = new String[fields.length];
+        for (int i = 0; i < fields.length; i++) {
+            fieldNames[i] = fields[i].getName();
+        }
+        return fieldNames;
+    }
+
+
+
+
+}

+ 83 - 0
src/main/java/com/ydtech/modules/admin/utils/RecordUserUtils.java

@@ -0,0 +1,83 @@
+package com.ydtech.modules.admin.utils;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.ydtech.modules.admin.dao.SysUserRecordMapper;
+import com.ydtech.modules.admin.model.SysUserRecord;
+import com.ydtech.modules.admin.model.record.UserInfoRecord;
+import com.ydtech.modules.admin.model.record.UserRecord;
+import com.ydtech.modules.admin.model.vo.SysUser2Vo;
+import com.ydtech.utils.StringUtils;
+import com.ydtech.utils.idgen.IdGenerate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+@Service
+public class RecordUserUtils {
+
+
+    @Autowired
+    private SysUserRecordMapper sysUserRecordMapper;
+
+    @Async
+    public void addRecord (SysUser2Vo sysUserVo,String createBy){
+        String userId = sysUserVo.getSysUser().getId();
+        SysUserRecord sysUserRecord = sysUserRecordMapper.selectByUserId(userId);
+        if (null == sysUserRecord){
+            addRecord(sysUserVo, userId,createBy);
+        }
+    }
+
+
+    @Async
+    public void recordUser(SysUser2Vo sysUserVo,String createBy){
+        String userId = sysUserVo.getSysUser().getId();
+        SysUserRecord sysUserRecord = sysUserRecordMapper.selectByUserId(userId);
+        if (null == sysUserRecord){
+            addRecord(sysUserVo, userId,createBy);
+        }else {
+            if (!StringUtils.equals(getString(sysUserVo.getSysUser(), "1"),sysUserRecord.getSysUser()) ||
+                    !StringUtils.equals(getString(sysUserVo.getSysUserInfo(), "2"),sysUserRecord.getSysUserInfo()) ||
+                    !StringUtils.equals(getString(sysUserVo.getEsmUserImageVo(), "3"),sysUserRecord.getEsmUserImageVo())) {
+                addRecord(sysUserVo, userId, createBy);
+            }
+        }
+
+    }
+
+    private void addRecord(SysUser2Vo sysUserVo, String userId,String createBy) {
+        SysUserRecord userRecord = new SysUserRecord();
+        userRecord.setId(IdGenerate.nextId());
+        userRecord.setSysUser(getString(sysUserVo.getSysUser(),"1"));
+        userRecord.setSysUserInfo(getString(sysUserVo.getSysUserInfo(),"2"));
+        userRecord.setEsmUserImageVo(getString(sysUserVo.getEsmUserImageVo(),"3"));
+        userRecord.setUserId(userId);
+        userRecord.setCreateBy(createBy);
+        userRecord.setCreateTime(new Date());
+        sysUserRecordMapper.insert(userRecord);
+    }
+
+    public String getString(Object obj,String type){
+        if (null == obj){
+            return "";
+        }
+        String jsonString = JSONObject.toJSONString(obj);
+        switch (type){
+            case "1" :
+                return JSONObject.toJSONString(JSONObject.parseObject(jsonString, UserRecord.class));
+            case "2" :
+                return JSONObject.toJSONString(JSONObject.parseObject(jsonString, UserInfoRecord.class));
+            case "3":
+                return JSONObject.toJSONString(JSONObject.parseObject(jsonString, List.class));
+            default:
+                return "";
+        }
+
+    }
+
+
+}

+ 10 - 0
src/main/resources/mapper/modules/admin/SysUserMapper.xml

@@ -1561,4 +1561,14 @@
             </when>
         </choose>
     </select>
+
+
+    <update id="updateManagementPersonnel">
+        UPDATE sys_user SET leader_id = #{managementDto.leaderId} , leader_name = #{managementDto.leaderName}  WHERE id in
+        <foreach item="item" collection="managementDto.userIds" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </update>
+
+
 </mapper>

+ 14 - 0
src/main/resources/mapper/modules/admin/SysUserRecordMapper.xml

@@ -0,0 +1,14 @@
+<?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.ydtech.modules.admin.dao.SysUserRecordMapper">
+
+    <select id="selectByUserId" resultType="com.ydtech.modules.admin.model.SysUserRecord">
+        SELECT * FROM  sys_user_record WHERE user_id = #{userId} ORDER BY create_time DESC LIMIT 1
+    </select>
+
+
+    <select id="queryByUserId" resultType="com.ydtech.modules.admin.model.SysUserRecord">
+        SELECT * FROM  sys_user_record WHERE user_id = #{userId} ORDER BY create_time DESC
+    </select>
+</mapper>