|
@@ -6,6 +6,11 @@ package com.jeeplus.sys.service;
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.jeeplus.center.enums.ServiceAliasEnum;
|
|
|
+import com.jeeplus.centerservice.utils.RestTemplateService;
|
|
|
import com.jeeplus.sys.domain.*;
|
|
|
import com.jeeplus.sys.mapper.OfficeMapper;
|
|
|
import com.jeeplus.sys.service.dto.CertDTO;
|
|
@@ -36,6 +41,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -71,6 +77,12 @@ public class UserService extends ServiceImpl<UserMapper, User> {
|
|
|
@Autowired
|
|
|
private RosterBaseCService rosterBaseCService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private SysUserFailedLogService sysUserFailedLogService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private RestTemplateService restTemplateService;
|
|
|
+
|
|
|
/**
|
|
|
* 单一登录判断,是否允许登录
|
|
|
* @return
|
|
@@ -197,9 +209,15 @@ public class UserService extends ServiceImpl<UserMapper, User> {
|
|
|
*/
|
|
|
public IPage <UserDTO> findPage(Page <UserDTO> page, QueryWrapper queryWrapper) {
|
|
|
queryWrapper.eq ("a.del_flag", 0 ); // 排除已经删除
|
|
|
- return baseMapper.findList (page, queryWrapper);
|
|
|
-
|
|
|
-
|
|
|
+ IPage<UserDTO> list = baseMapper.findList(page, queryWrapper);
|
|
|
+ if(CollectionUtil.isNotEmpty(list.getRecords())){
|
|
|
+ list.getRecords().stream().forEach(item->{
|
|
|
+ // 查询是否有需要手动推送到子系统的数据
|
|
|
+ Map<String,Object> checkResp = rosterBaseCService.checkIsSyncFailed(item.getId());
|
|
|
+ item.setPushFailed((Boolean)checkResp.get("success"));
|
|
|
+ });
|
|
|
+ }
|
|
|
+ return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -252,6 +270,14 @@ public class UserService extends ServiceImpl<UserMapper, User> {
|
|
|
* @param userDTO
|
|
|
*/
|
|
|
public void saveOrUpdate(UserDTO userDTO) throws Exception {
|
|
|
+ // 获取修改前的所属部门id
|
|
|
+ String oldOffice = "";
|
|
|
+ if (ObjectUtil.isNotEmpty(userDTO) && StringUtils.isNotBlank(userDTO.getId())) {
|
|
|
+ User byIdUser = baseMapper.selectById(userDTO.getId());
|
|
|
+ if (ObjectUtil.isNotEmpty(byIdUser) && StringUtils.isNotBlank(byIdUser.getOfficeId())) {
|
|
|
+ oldOffice = byIdUser.getOfficeId();
|
|
|
+ }
|
|
|
+ }
|
|
|
User user = userWrapper.toEntity (userDTO);
|
|
|
super.saveOrUpdate ( user );
|
|
|
if( StrUtil.isBlank ( userDTO.getId () ) ){
|
|
@@ -282,21 +308,103 @@ public class UserService extends ServiceImpl<UserMapper, User> {
|
|
|
this.updateUserManageOffice(officeIdList, userDTO);
|
|
|
|
|
|
// 新增/修改关联花名册数据
|
|
|
- this.saveOrUpdateRoster(user);
|
|
|
+ this.saveOrUpdateRoster(user, oldOffice);
|
|
|
|
|
|
UserUtils.deleteCache ( userDTO );
|
|
|
}
|
|
|
|
|
|
|
|
|
- public void deleteUser(UserDTO userDTO) {
|
|
|
- baseMapper.deleteUserRole(userDTO.getId ());
|
|
|
- baseMapper.deleteUserPost ( userDTO.getId () );
|
|
|
- super.removeById (userDTO.getId ());
|
|
|
- if (StringUtils.isNotBlank(userDTO.getRosterId())) {
|
|
|
- // 删除与用户关联的花名册数据
|
|
|
- rosterBaseCService.removeById(userDTO.getRosterId());
|
|
|
+ public Map<String,Object> deleteUser(UserDTO userDTO) {
|
|
|
+ Map<String,Object> responseMap = new HashMap<>();
|
|
|
+ if (ObjectUtil.isNotEmpty(userDTO) && StringUtils.isNotBlank(userDTO.getRosterId())) {
|
|
|
+ String rosterId = userDTO.getRosterId();
|
|
|
+ AtomicBoolean runSuccess = new AtomicBoolean(true);
|
|
|
+ // 先删除子系统花名册以及用户数据
|
|
|
+ Map<String,Object> paramMap = new HashMap<>();
|
|
|
+ paramMap.put("rosterId",rosterId);
|
|
|
+ User u = this.getOne(new QueryWrapper<User>().lambda().eq(User::getRosterId, rosterId));
|
|
|
+ paramMap.put("userId",u.getId());
|
|
|
+ String officeCode = rosterBaseCService.getServiceByOffice(u.getOfficeId()); // 根据这个部门id获取二级部门的别名code来获取所属哪个子系统
|
|
|
+ if (StringUtils.isNotBlank(officeCode)) {
|
|
|
+ // 评估
|
|
|
+ if (ServiceAliasEnum.CPA_EVALUATION.getValue().equals(officeCode) || ServiceAliasEnum.CPA_PUBLIC.getValue().equals(officeCode)) {
|
|
|
+ // 首先将数据记录为清除失败,待获取到其他系统执行成功的回值后再将此记录删掉
|
|
|
+ boolean succ = false;
|
|
|
+ String dataId_evaluation = sysUserFailedLogService.removeFailedLog(u.getId(), ServiceAliasEnum.CPA_EVALUATION.getValue());
|
|
|
+ Object res_evaluation = restTemplateService.getCPA_EVALUATION("/roster/base/removeByRosterId",null,paramMap);
|
|
|
+ if (ObjectUtil.isNotEmpty(res_evaluation)) {
|
|
|
+ Map<String,Object> resMap = JSONObject.parseObject(JSON.toJSONString(res_evaluation), Map.class);
|
|
|
+ if ((Boolean) resMap.get("success")) {
|
|
|
+ // 删除成功,将刚才记录的数据删除
|
|
|
+ sysUserFailedLogService.removeById(dataId_evaluation);
|
|
|
+ succ = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!succ) { // succ的值为false,那么说明数据删除失败
|
|
|
+ runSuccess.set(false);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 财务
|
|
|
+ if (ServiceAliasEnum.CPA_FINANCE.getValue().equals(officeCode) || ServiceAliasEnum.CPA_PUBLIC.getValue().equals(officeCode)) {
|
|
|
+ // 首先将数据记录为清除失败,待获取到其他系统执行成功的回值后再将此记录删掉
|
|
|
+ boolean succ = false;
|
|
|
+ String dataId_finance = sysUserFailedLogService.removeFailedLog(u.getId(), ServiceAliasEnum.CPA_FINANCE.getValue());
|
|
|
+ Object res_finance = restTemplateService.getCPA_FINANCE("/roster/base/removeByRosterId",null,paramMap);
|
|
|
+ if (ObjectUtil.isNotEmpty(res_finance)) {
|
|
|
+ Map<String,Object> resMap = JSONObject.parseObject(JSON.toJSONString(res_finance), Map.class);
|
|
|
+ if ((Boolean) resMap.get("success")) {
|
|
|
+ // 删除成功,将刚才记录的数据删除
|
|
|
+ sysUserFailedLogService.removeById(dataId_finance);
|
|
|
+ succ = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!succ) { // succ的值为false,那么说明数据删除失败
|
|
|
+ runSuccess.set(false);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 中审
|
|
|
+ if (ServiceAliasEnum.CPA_AUDIT.getValue().equals(officeCode) || ServiceAliasEnum.CPA_PUBLIC.getValue().equals(officeCode)) {
|
|
|
+ // 首先将数据记录为清除失败,待获取到其他系统执行成功的回值后再将此记录删掉
|
|
|
+ boolean succ = false;
|
|
|
+ String dataId_audit = sysUserFailedLogService.removeFailedLog(u.getId(), ServiceAliasEnum.CPA_AUDIT.getValue());
|
|
|
+ Object res_audit = restTemplateService.getCPA_AUDIT("/roster/base/removeByRosterId",null,paramMap);
|
|
|
+ if (ObjectUtil.isNotEmpty(res_audit)) {
|
|
|
+ Map<String,Object> resMap = JSONObject.parseObject(JSON.toJSONString(res_audit), Map.class);
|
|
|
+ if ((Boolean) resMap.get("success")) {
|
|
|
+ // 删除成功,将刚才记录的数据删除
|
|
|
+ sysUserFailedLogService.removeById(dataId_audit);
|
|
|
+ succ = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!succ) { // succ的值为false,那么说明数据删除失败
|
|
|
+ runSuccess.set(false);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (runSuccess.get()) { // runSuccess的值为true,则说明子系统的操作都执行成功
|
|
|
+ // 删除花名册数据
|
|
|
+ rosterBaseCService.removeById(rosterId);
|
|
|
+ // 删除用户关联的管理部门信息
|
|
|
+ this.deleteUserManageOffice(userDTO); // 根据用户id删除用户的管理部门信息
|
|
|
+ // 删除用户关联的岗位信息
|
|
|
+ this.deleteUserPost(userDTO.getId());
|
|
|
+ // 删除用户关联的角色信息
|
|
|
+ this.deleteUserRole(userDTO.getId());
|
|
|
+ // 删除用户
|
|
|
+ this.removeById(userDTO.getId());
|
|
|
+ // 清除redis缓存
|
|
|
+ UserUtils.deleteCache ( userDTO );
|
|
|
+ responseMap.put("success", true);
|
|
|
+ responseMap.put("message", "删除成功");
|
|
|
+ } else {
|
|
|
+ responseMap.put("success", false);
|
|
|
+ responseMap.put("message", "删除失败,子系统删除数据未成功");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ responseMap.put("success", false);
|
|
|
+ responseMap.put("message", "删除失败,未找到用户或关联花名册数据");
|
|
|
}
|
|
|
- UserUtils.deleteCache ( userDTO );
|
|
|
+ return responseMap;
|
|
|
}
|
|
|
|
|
|
public void updateUserLoginInfo(UserDTO userDTO) {
|
|
@@ -497,7 +605,7 @@ public class UserService extends ServiceImpl<UserMapper, User> {
|
|
|
}
|
|
|
|
|
|
// 新增/修改花名册数据
|
|
|
- public void saveOrUpdateRoster (User user) throws Exception {
|
|
|
+ public void saveOrUpdateRoster (User user, String oldOfficeId) throws Exception {
|
|
|
RosterBaseC r = new RosterBaseC();
|
|
|
r.setName(user.getName()); // 姓名
|
|
|
r.setOfficeId(""); // 部门
|
|
@@ -534,15 +642,25 @@ public class UserService extends ServiceImpl<UserMapper, User> {
|
|
|
rosterBaseCService.saveOrUpdate(r);
|
|
|
user.setRosterId(r.getId());
|
|
|
this.updateById(user);
|
|
|
+ r.setUserId(u.getId());
|
|
|
+ rosterBaseCService.syncPushSubsystem(r,oldOfficeId);
|
|
|
}
|
|
|
|
|
|
// 修改用户信息
|
|
|
public ResponseEntity updateInfo(UserDTO userDTO) throws Exception {
|
|
|
+ // 获取修改前的所属部门id
|
|
|
+ String oldOffice = "";
|
|
|
+ if (ObjectUtil.isNotEmpty(userDTO) && StringUtils.isNotBlank(userDTO.getId())) {
|
|
|
+ User byIdUser = baseMapper.selectById(userDTO.getId());
|
|
|
+ if (ObjectUtil.isNotEmpty(byIdUser) && StringUtils.isNotBlank(byIdUser.getOfficeId())) {
|
|
|
+ oldOffice = byIdUser.getOfficeId();
|
|
|
+ }
|
|
|
+ }
|
|
|
User user = UserWrapper.INSTANCE.toEntity(userDTO);
|
|
|
// 根据用户id修改用户信息
|
|
|
this.updateById (user);
|
|
|
// 修改用户信息的同时更新花名册数据
|
|
|
- this.saveOrUpdateRoster(user);
|
|
|
+ this.saveOrUpdateRoster(user, oldOffice);
|
|
|
//更新缓存信息
|
|
|
UserUtils.deleteCache ( UserUtils.getCurrentUserDTO ( ) );
|
|
|
return ResponseEntity.ok ( "修改个人资料成功!" );
|
|
@@ -557,4 +675,119 @@ public class UserService extends ServiceImpl<UserMapper, User> {
|
|
|
public List<User> getUserIdByPost(String postId) {
|
|
|
return userMapper.getUserByPost(postId);
|
|
|
}
|
|
|
+
|
|
|
+ public void deleteUserManageOffice(UserDTO userDTO) {
|
|
|
+ userMapper.deleteUserManageOffice(userDTO);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void deleteUserPost(String id) {
|
|
|
+ userMapper.deleteUserPost(id);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void deleteUserRole(String id) {
|
|
|
+ userMapper.deleteUserRole(id);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 手动向子系统推送之前同步失败的数据
|
|
|
+ * @param userId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public boolean pushUserSync(String userId) {
|
|
|
+ AtomicBoolean respBool = new AtomicBoolean(true);
|
|
|
+ User user = this.getById(userId);
|
|
|
+ RosterBaseC rosterBase = rosterBaseCService.getById(user.getRosterId());
|
|
|
+ rosterBase.setUserId(userId);
|
|
|
+ Map<String,Object> bodyMap = JSONObject.parseObject(JSON.toJSONString(rosterBase), Map.class);
|
|
|
+ // 查询日志表中未重新推送的”删除”推送
|
|
|
+ List<SysUserFailedLog> deleteUserFailedLogList = sysUserFailedLogService.list(new LambdaQueryWrapper<SysUserFailedLog>()
|
|
|
+ .eq(SysUserFailedLog::getUserId, user.getId())
|
|
|
+ .eq(SysUserFailedLog::getIsSuccess, "2") // 查询删除操作
|
|
|
+ .ne(SysUserFailedLog::getIsPush, "1") // isPush != 1说明未推送成功
|
|
|
+ .orderByDesc(SysUserFailedLog::getCreateDate)
|
|
|
+ );
|
|
|
+ // 查询当前用户推送子系统是否成功, isPush != 1说明未推送成功
|
|
|
+ List<SysUserFailedLog> sysUserFailedLogList = sysUserFailedLogService.list(new LambdaQueryWrapper<SysUserFailedLog>()
|
|
|
+ .eq(SysUserFailedLog::getUserId, user.getId())
|
|
|
+ .ne(SysUserFailedLog::getIsPush, "1")
|
|
|
+ .orderByDesc(SysUserFailedLog::getCreateDate)
|
|
|
+ );
|
|
|
+ if (CollectionUtil.isNotEmpty(sysUserFailedLogList)) {
|
|
|
+ sysUserFailedLogList.stream().forEach(sysUserFailedLog -> {
|
|
|
+ switch (sysUserFailedLog.getIsSuccess()) {
|
|
|
+ case "0": // 保存操作失败
|
|
|
+ boolean succ = false;
|
|
|
+ Object res = null;
|
|
|
+ if (ServiceAliasEnum.CPA_EVALUATION.getValue().equals(sysUserFailedLog.getBelongService())) {
|
|
|
+ // 调用评估系统的用户保存操作
|
|
|
+ res = restTemplateService.postCPA_EVALUATION("/roster/base/saveOrUpdateUserRoster",null,null,bodyMap);
|
|
|
+
|
|
|
+ } else if (ServiceAliasEnum.CPA_FINANCE.getValue().equals(sysUserFailedLog.getBelongService())) {
|
|
|
+ // 调用财务系统的用户保存操作
|
|
|
+ res = restTemplateService.postCPA_FINANCE("/roster/base/saveOrUpdateUserRoster",null,null,bodyMap);
|
|
|
+
|
|
|
+ } else if (ServiceAliasEnum.CPA_AUDIT.getValue().equals(sysUserFailedLog.getBelongService())) {
|
|
|
+ // 调用财务系统的用户保存操作
|
|
|
+ res = restTemplateService.postCPA_AUDIT("/roster/base/saveOrUpdateUserRoster",null,null,bodyMap);
|
|
|
+
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isNotEmpty(res)) {
|
|
|
+ Map<String,Object> resMap = JSONObject.parseObject(JSON.toJSONString(res), Map.class);
|
|
|
+ if ((Boolean) resMap.get("success")) {
|
|
|
+ // 保存成功,将推送日志表中的数据修改为推送完成
|
|
|
+ sysUserFailedLogService.finishById(sysUserFailedLog.getId());
|
|
|
+ succ = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!succ) { // succ的值为false,说明此次手动推送失败
|
|
|
+ respBool.set(false);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "1": case "2": // 1:清除操作失败(这里指的是切换所属系统,要清除原系统中的人员信息) 2:删除操作失败
|
|
|
+ boolean succ1 = false;
|
|
|
+ Object res1 = null;
|
|
|
+ if (ServiceAliasEnum.CPA_EVALUATION.getValue().equals(sysUserFailedLog.getBelongService())) {
|
|
|
+ // 调用评估系统的用户清除操作
|
|
|
+ res1 = restTemplateService.postCPA_EVALUATION("/roster/base/deleteUserRoster",null,null,bodyMap);
|
|
|
+ } else if (ServiceAliasEnum.CPA_FINANCE.getValue().equals(sysUserFailedLog.getBelongService())) {
|
|
|
+ // 调用财务系统的用户清除操作
|
|
|
+ res1 = restTemplateService.postCPA_FINANCE("/roster/base/deleteUserRoster",null,null,bodyMap);
|
|
|
+ } else if (ServiceAliasEnum.CPA_AUDIT.getValue().equals(sysUserFailedLog.getBelongService())) {
|
|
|
+ // 调用财务系统的用户清除操作
|
|
|
+ res1 = restTemplateService.postCPA_AUDIT("/roster/base/deleteUserRoster",null,null,bodyMap);
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isNotEmpty(res1)) {
|
|
|
+ Map<String,Object> resMap = JSONObject.parseObject(JSON.toJSONString(res1), Map.class);
|
|
|
+ if ((Boolean) resMap.get("success")) {
|
|
|
+ // 清除成功,将推送日志表中的数据修改为推送完成
|
|
|
+ sysUserFailedLogService.finishById(sysUserFailedLog.getId());
|
|
|
+ succ1 = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!succ1) { // succ的值为false,说明此次手动推送失败
|
|
|
+ respBool.set(false);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ // respBool值为true 说明推送失败的操作现已全部重新推送
|
|
|
+ if (respBool.get()) {
|
|
|
+ if (CollectionUtil.isNotEmpty(deleteUserFailedLogList)) { // deleteUserFailedLogList不是空,说明有删除操作
|
|
|
+ // 删除花名册数据
|
|
|
+ rosterBaseCService.removeById(rosterBase.getId());
|
|
|
+ // 删除用户
|
|
|
+ this.removeById(userId);
|
|
|
+ UserDTO userDTO = new UserDTO();
|
|
|
+ userDTO.setId(userId);
|
|
|
+ // 删除用户关联的管理部门信息
|
|
|
+ this.deleteUserManageOffice(userDTO); // 根据用户id删除用户的管理部门信息
|
|
|
+ // 删除用户关联的岗位信息
|
|
|
+ this.deleteUserPost(userId);
|
|
|
+ // 删除用户关联的角色信息
|
|
|
+ this.deleteUserRole(userId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return respBool.get();
|
|
|
+ }
|
|
|
}
|