package cn.huge.module.ctuser.service;
|
|
import cn.huge.base.common.bo.ReturnBO;
|
import cn.huge.base.common.exception.ServiceException;
|
import cn.huge.base.common.utils.*;
|
import cn.huge.module.client.api.impl.SysClientImpl;
|
import cn.huge.module.client.api.impl.UtilsClientImpl;
|
import cn.huge.module.ctuser.dao.mapper.CtAccountMapper;
|
import cn.huge.module.ctuser.domain.po.*;
|
import cn.huge.module.ctuser.dto.*;
|
import cn.huge.module.cust.constant.UserBaseConsts;
|
import cn.huge.module.sys.dto.GridTokenBaseDTO;
|
import cn.huge.module.sys.dto.GridUserBaseDTO;
|
import cn.huge.module.sys.dto.GridUserRoleDTO;
|
import cn.huge.module.sys.vo.GridUserRoleVo;
|
import cn.huge.module.utils.JwtUtils;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.PageImpl;
|
import org.springframework.data.domain.PageRequest;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.DigestUtils;
|
|
import javax.annotation.Resource;
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* @author liyj
|
* @version 1.0.0
|
* @title: 客户用户账号表业务逻辑处理
|
* @Description 客户用户账号表业务逻辑处理
|
* @company hugeinfo
|
* @Time 2024-08-19 20:04:18
|
*/
|
@Slf4j
|
@Service
|
@Transactional(rollbackFor = Exception.class)
|
public class CtAccountService extends ServiceImpl<CtAccountMapper, CtAccount> {
|
|
@Autowired
|
private CtAccountMapper mapper;
|
|
@Autowired
|
private UtilsClientImpl utilsClient;
|
@Autowired
|
private CtUserService ctUserService;
|
@Autowired
|
private CtUseroleService ctUseroleService;
|
@Autowired
|
private SysClientImpl sysClient;
|
@Autowired
|
private CtUnitService ctUnitService;
|
|
@Resource
|
private GridUnitService gridUnitService;
|
|
/**
|
* 更新对象
|
*
|
* @param entity 对象
|
*/
|
public void updateCtAccount(CtAccount entity) {
|
try {
|
mapper.updateCtAccount(entity);
|
} catch (Exception e) {
|
log.error("[CtAccountService.updateCtAccount]调用失败,异常信息:" + e, e);
|
throw new ServiceException("CtAccountService.updateCtAccount", e);
|
}
|
}
|
|
/**
|
* 条件更新对象
|
*
|
* @param entity 对象
|
* @param terms 条件
|
*/
|
public void updateCtAccountTerms(CtAccount entity, Map<String, Object> terms) {
|
try {
|
mapper.updateCtAccountTerms(entity, terms);
|
} catch (Exception e) {
|
log.error("[CtAccountService.updateCtAccountTerms]调用失败,异常信息:" + e, e);
|
throw new ServiceException("CtAccountService.updateCtAccountTerms", e);
|
}
|
}
|
|
/**
|
* 根据编号物理删除
|
*
|
* @param id 查询条件集合
|
*/
|
public void deleteCtAccount(String id) {
|
try {
|
mapper.deleteCtAccount(id);
|
} catch (Exception e) {
|
log.error("[CtAccountService.deleteCtAccount]调用失败,异常信息:" + e, e);
|
throw new ServiceException("CtAccountService.deleteCtAccount", e);
|
}
|
}
|
|
/**
|
* 按条件查询
|
*
|
* @param terms 条件
|
* @return List
|
*/
|
public List<CtAccount> listTerms(Map<String, Object> terms) {
|
return mapper.listTerms(terms);
|
}
|
|
/**
|
* 按条件统计
|
*
|
* @param terms 条件
|
* @return long
|
*/
|
public long countTerms(Map<String, Object> terms) {
|
return mapper.countTerms(terms);
|
}
|
|
/**
|
* 按条件分页查询
|
*
|
* @param page 分页对象
|
* @param terms 条件
|
* @return Page
|
*/
|
public Page<CtAccount> pageQuery(PageRequest page, Map<String, Object> terms) {
|
long total = mapper.countTerms(terms);
|
List<CtAccount> content = mapper.pageTerms(page, terms);
|
return new PageImpl<CtAccount>(content, page, total);
|
}
|
|
/**
|
* 新增或更新对象
|
*
|
* @param ctAccount 实体对象
|
*/
|
public void saveCtAccount(CtAccount ctAccount) {
|
try {
|
Date nowDate = DateUtils.getNowDate();
|
// 判断是否新增
|
if (IdUtils.checkNewId(ctAccount.getId())) {
|
ctAccount.setId(utilsClient.getNewTimeId());
|
ctAccount.setCreateTime(nowDate);
|
}
|
ctAccount.setUpdateTime(nowDate);
|
this.saveOrUpdate(ctAccount);
|
} catch (Exception e) {
|
log.error("[CtAccountService.saveCtAccount]调用失败,异常信息:" + e, e);
|
throw new ServiceException("CtAccountService.saveCtAccount", e);
|
}
|
}
|
|
/**
|
* 根据账号和类型查询
|
*
|
* @param acc 账号
|
* @param accType 账号类型
|
* @return
|
*/
|
public CtAccount getByAccAndType(String acc, int accType) {
|
QueryWrapper<CtAccount> accountWrapper = new QueryWrapper<>();
|
accountWrapper.eq("acc", acc)
|
.eq("acc_type", accType);
|
CtAccount ctAccount = this.getOne(accountWrapper);
|
return ctAccount;
|
}
|
|
/**
|
* 根据用户编号和类型查询
|
*
|
* @param userId 用户编号
|
* @param accType 账号类型
|
* @return
|
*/
|
public CtAccount getByUserIdAndType(String userId, int accType) {
|
QueryWrapper<CtAccount> accountWrapper = new QueryWrapper<>();
|
accountWrapper.eq("user_id", userId)
|
.eq("acc_type", accType);
|
CtAccount ctAccount = this.getOne(accountWrapper);
|
return ctAccount;
|
}
|
|
/**
|
* 判断密码是否正确
|
*
|
* @param cipher 密码
|
* @param ctAccount 账号信息
|
* @return Boolean
|
*/
|
public Boolean checkCredential(String cipher, CtAccount ctAccount) {
|
String credentialMd5 = DigestUtils.md5DigestAsHex(cipher.getBytes());
|
log.info("xsd:{}", credentialMd5);
|
if (StringUtils.equals(credentialMd5, ctAccount.getCipher())) {
|
return true;
|
} else {
|
// SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
|
// String createTime = sdf.format(ctAccount.getCreateTime());
|
// String credentialTime = sdf.format(ctAccount.getCreateTime());
|
// //是否修改过密码,未修改过可以用默认密码登录
|
// if (createTime.equals(credentialTime)) {
|
// if (cipher.equals(UserBaseConsts.MR_CIPHER_BY) || cipher.equals(UserBaseConsts.MR_CIPHER_GZ)) {
|
// return true;
|
// } else {
|
// return false;
|
// }
|
// } else {
|
return false;
|
// }
|
}
|
}
|
|
/**
|
* web端-工作人员用户登录
|
*
|
* @param ctAccountLoginDTO 登录账号信息
|
* @return UserLoginDTO
|
*/
|
public ReturnBO webLogin(CtAccountLoginDTO ctAccountLoginDTO) {
|
try {
|
// 判断账号密码是否为空
|
if (StringUtils.isBlank(ctAccountLoginDTO.getAcc()) || StringUtils.isBlank(ctAccountLoginDTO.getCipher())) {
|
return ReturnFailUtils.getRepInfo("账号或密码错误,请确认后重试!");
|
}
|
// 判断账号是否存在
|
CtAccount ctAccount = this.getByAccAndType(ctAccountLoginDTO.getAcc(), UserBaseConsts.ACC_TYPE_1);
|
if (ObjectUtils.isNotEmpty(ctAccount)) {
|
// 判断账号是否被锁定
|
if (ObjectUtils.isNotEmpty(ctAccount.getLimitTime())) {
|
Date nowDate = new Date();
|
if (nowDate.before(ctAccount.getLimitTime())) {
|
SimpleDateFormat sdf = new SimpleDateFormat("HH点mm分");
|
return ReturnFailUtils.getRepInfo("账号已锁定,请于" + sdf.format(ctAccount.getLimitTime()) + "后重试,或者请联系管理员解锁!");
|
}
|
}
|
// 判断密码是否正确
|
if (checkCredential(ctAccountLoginDTO.getCipher(), ctAccount)) {
|
//返回结果
|
UserLoginDTO userLoginDTO = new UserLoginDTO();
|
CtUser ctUser = ctUserService.getById(ctAccount.getUserId());
|
if (ObjectUtils.isEmpty(ctUser)) {
|
return ReturnFailUtils.getRepInfo("账号或密码错误,请确认后重试!");
|
}
|
if (ctUser.getStatus() != UserBaseConsts.USER_STATUS_1) {
|
return ReturnFailUtils.getRepInfo("账号或密码错误,请确认后重试!");
|
}
|
// 封装用户信息
|
userLoginDTO.setToken(JwtUtils.buildJWT(ctUser.getId()));
|
userLoginDTO.setUserId(ctUser.getId());
|
userLoginDTO.setTrueName(ctUser.getTrueName());
|
userLoginDTO.setPhone(ctUser.getMobile());
|
CtUnit ctUnit = ctUnitService.getById(ctUser.getUnitId());
|
if (ObjectUtils.isNotEmpty(ctUnit)) {
|
if (ctUnit.getUnitGrade() == UserBaseConsts.UNIT_GRADE_3 && ctUnit.getUnitType() == UserBaseConsts.UNIT_TYPE_102) {
|
userLoginDTO.setUnit(ctUnit.getUnitName());
|
userLoginDTO.setUnitType(ctUnit.getUnitType());
|
// CtUnit parentCtUnit = ctUnitService.getById(ctUnit.getParentId());
|
// if (ObjectUtils.isNotEmpty(parentCtUnit)) {1
|
// userLoginDTO.setUnit(parentCtUnit.getUnitName());
|
// }else {
|
// userLoginDTO.setUnit(ctUnit.getUnitDes());
|
// }
|
} else {
|
userLoginDTO.setUnit(ctUnit.getUnitName());
|
userLoginDTO.setUnitType(ctUnit.getUnitType());
|
}
|
} else {
|
userLoginDTO.setUnit(ctUser.getUnitName());
|
}
|
userLoginDTO.setDept(ctUser.getDeptName());
|
userLoginDTO.setCustId(ctUser.getCustId());
|
// 登录用户角色
|
List<CtUserole> ctUseroleList = ctUseroleService.listByUserId(ctUser.getId());
|
userLoginDTO.setCtUseroleList(ctUseroleList);
|
// 登录用户地址信息
|
CtUserAddrDTO ctUserAddrDTO = new CtUserAddrDTO();
|
ctUserAddrDTO.setProv(ctUser.getProv());
|
ctUserAddrDTO.setProvName(ctUser.getProvName());
|
ctUserAddrDTO.setCity(ctUser.getCity());
|
ctUserAddrDTO.setCityName(ctUser.getCityName());
|
ctUserAddrDTO.setArea(ctUser.getArea());
|
ctUserAddrDTO.setAreaName(ctUser.getAreaName());
|
ctUserAddrDTO.setRoad(ctUser.getRoad());
|
ctUserAddrDTO.setRoadName(ctUser.getRoadName());
|
ctUserAddrDTO.setVillage(ctUser.getVillage());
|
ctUserAddrDTO.setVillageName(ctUser.getVillageName());
|
userLoginDTO.setCtUserAddrDTO(ctUserAddrDTO);
|
// 最后登录时间
|
Date loginTime = ctAccount.getLoginTime();
|
if (ObjectUtils.isEmpty(ctAccount.getLoginTime())) {
|
loginTime = DateUtils.getNowDate();
|
}
|
userLoginDTO.setLastLoginTime(loginTime);
|
// 更新最新登录时间
|
UpdateWrapper<CtAccount> accountUpdateWrapper = new UpdateWrapper<>();
|
accountUpdateWrapper.set("login_time", DateUtils.getNowDate()).eq("id", ctAccount.getId());
|
this.update(accountUpdateWrapper);
|
return ReturnSucUtils.getRepInfo(userLoginDTO);
|
} else {
|
return ReturnFailUtils.getRepInfo("账号或密码错误,请确认后重试!");
|
}
|
} else {
|
return ReturnFailUtils.getRepInfo("账号或密码错误,请确认后重试!");
|
}
|
} catch (Exception e) {
|
log.error("service方法[AccountService.webLogin]调用失败,异常信息:" + e, e);
|
throw new ServiceException("CtAccountService.webLogin", e);
|
}
|
}
|
|
/**
|
* web端-工作人员-修改密码
|
*
|
* @param userId 用户编号
|
* @param ctCipherDTO 修改密码信息
|
* @return
|
*/
|
public ReturnBO webChangeCipher(String userId, CtCipherDTO ctCipherDTO) {
|
try {
|
CtUser loginUser = ctUserService.getById(userId);
|
CtAccount ctAccount = this.getByAccAndType(loginUser.getAcc(), UserBaseConsts.ACC_TYPE_1);
|
// QueryWrapper<CtAccount> ctAccountQueryWrapper = new QueryWrapper<>();
|
// ctAccountQueryWrapper.eq("user_id", loginUser.getId()).
|
// eq("acc_type", UserBaseConsts.ACC_TYPE_1);
|
// CtAccount ctAccount =mapper.selectOne(ctAccountQueryWrapper);
|
if (ObjectUtils.isEmpty(ctAccount)) {
|
return ReturnFailUtils.getRepInfo("输入账号或密码不正确,请确认后重试!");
|
}
|
String oldCredentialMd5 = DigestUtils.md5DigestAsHex(ctCipherDTO.getOldCipher().getBytes());
|
if (!StringUtils.equals(oldCredentialMd5, ctAccount.getCipher())) {
|
return ReturnFailUtils.getRepInfo("输入账号或密码不正确,请确认后重试!");
|
}
|
String newCredentialMd5 = DigestUtils.md5DigestAsHex(ctCipherDTO.getNewCipher().getBytes());
|
if (StringUtils.equals(newCredentialMd5, ctAccount.getCipher())) {
|
return ReturnFailUtils.getRepInfo("新密码不能和旧密码相同!");
|
}
|
UpdateWrapper<CtAccount> accountUpdateWrapper = new UpdateWrapper<>();
|
accountUpdateWrapper.set("cipher", newCredentialMd5).set("cipher_open", ctCipherDTO.getNewCipher())
|
.set("update_time", DateUtils.getNowDate()).eq("id", ctAccount.getId());
|
this.update(accountUpdateWrapper);
|
return ReturnSucUtils.getRepInfo();
|
} catch (Exception e) {
|
log.error("service方法[AccountService.webChangeCipher]调用失败,异常信息:" + e, e);
|
throw new ServiceException("CtAccountService.webChangeCipher", e);
|
}
|
}
|
|
/**
|
* web端-网格系统单点登录
|
*
|
* @param gridTokenBaseDTO 网格系统token
|
* @return UserLoginDTO
|
*/
|
public ReturnBO webGridLogin(GridTokenBaseDTO gridTokenBaseDTO) {
|
try {
|
GridUserBaseDTO gridUserBaseDTO = sysClient.getUserInfo(gridTokenBaseDTO);
|
|
// 判断账号密码是否为空
|
if (ObjectUtils.isEmpty(gridUserBaseDTO)) {
|
return ReturnFailUtils.getRepInfo("gridToken已失效,请重新登录!");
|
}
|
// 判断账号是否存在
|
CtAccount ctAccount = null;
|
CtUser ctUser = null;
|
ctAccount = this.getByAccAndType(gridUserBaseDTO.getAccount(), UserBaseConsts.ACC_TYPE_1);
|
if (ObjectUtils.isEmpty(ctAccount)) {
|
ctAccount = this.getByAccAndType(gridUserBaseDTO.getMobile(), UserBaseConsts.ACC_TYPE_1);
|
}
|
if (ObjectUtils.isNotEmpty(ctAccount)) {
|
//返回结果
|
ctUser = ctUserService.getById(ctAccount.getUserId());
|
if (ObjectUtils.isEmpty(ctUser)) {
|
return ReturnFailUtils.getRepInfo("用户不存在!");
|
}
|
} else {
|
//如果和亿迅系统的手机号对不上,在用身份证号去查询用户,如果查询得到,就对得上,如果查询不到,就说明用户不存在
|
ctUser = ctUserService.getByIdCard(gridUserBaseDTO.getIdNumber());
|
if (ObjectUtils.isNotEmpty(ctUser)) {
|
ctAccount = this.getByUserIdAndType(ctUser.getId(), UserBaseConsts.ACC_TYPE_1);
|
}
|
}
|
if (ObjectUtils.isNotEmpty(ctUser)) {
|
//有对应用户,则模拟登录,返回对应信息
|
UserLoginDTO userLoginDTO = login(ctAccount, ctUser);
|
//获取角色
|
GridUserRoleVo gridUserRoleVo = new GridUserRoleVo();
|
gridUserRoleVo.setUserId(gridUserBaseDTO.getId());
|
GridUserRoleDTO userRoleDTO = sysClient.getUserRoleList(gridUserRoleVo);
|
if (userRoleDTO != null && StringUtils.isNotEmpty(userRoleDTO.getRoleName())) {
|
List<CtUserole> ctUseroleList = userLoginDTO.getCtUseroleList();
|
List<CtUserole> ctUseroleList2 = new ArrayList<>();
|
if (userRoleDTO.getRoleName().contains("经办员")) {
|
for (CtUserole userole : ctUseroleList) {
|
if ("22_00024-4".equals(userole.getRoleCode())) {
|
ctUseroleList2.add(userole);
|
}
|
}
|
if (ctUseroleList2.size() > 0) {
|
userLoginDTO.setCtUseroleList(ctUseroleList2);
|
} else {
|
Date nowDate = new Date();
|
CtUserole ctUserole = new CtUserole();
|
ctUserole.setId(utilsClient.getNewTimeId());
|
ctUserole.setUserId(ctUser.getId());
|
ctUserole.setRoleId("22_00024-4");
|
ctUserole.setRoleCode("22_00024-4");
|
ctUserole.setRoleName("纠纷化解人员");
|
ctUserole.setCustId(ctUser.getCustId());
|
ctUserole.setCreateTime(nowDate);
|
ctUserole.setUpdateTime(nowDate);
|
ctUseroleService.save(ctUserole);
|
ctUseroleList2.add(ctUserole);
|
userLoginDTO.setCtUseroleList(ctUseroleList2);
|
}
|
} else if (userRoleDTO.getRoleName().contains("管理员")) {
|
for (CtUserole userole : ctUseroleList) {
|
if ("22_00024-3".equals(userole.getRoleCode())) {
|
ctUseroleList2.add(userole);
|
}
|
}
|
if (ctUseroleList2.size() > 0) {
|
userLoginDTO.setCtUseroleList(ctUseroleList2);
|
} else {
|
Date nowDate = new Date();
|
CtUserole ctUserole = new CtUserole();
|
ctUserole.setId(utilsClient.getNewTimeId());
|
ctUserole.setUserId(ctUser.getId());
|
ctUserole.setRoleId("22_00024-3");
|
ctUserole.setRoleCode("22_00024-3");
|
ctUserole.setRoleName("单位管理员");
|
ctUserole.setCustId(ctUser.getCustId());
|
ctUserole.setCreateTime(nowDate);
|
ctUserole.setUpdateTime(nowDate);
|
ctUseroleService.save(ctUserole);
|
ctUseroleList2.add(ctUserole);
|
userLoginDTO.setCtUseroleList(ctUseroleList2);
|
}
|
} else if (userRoleDTO.getRoleName().contains("管理员")) {
|
for (CtUserole userole : ctUseroleList) {
|
if ("22_00024-2".equals(userole.getRoleCode())) {
|
ctUseroleList2.add(userole);
|
}
|
}
|
if (ctUseroleList2.size() > 0) {
|
userLoginDTO.setCtUseroleList(ctUseroleList2);
|
} else {
|
Date nowDate = new Date();
|
CtUserole ctUserole = new CtUserole();
|
ctUserole.setId(utilsClient.getNewTimeId());
|
ctUserole.setUserId(ctUser.getId());
|
ctUserole.setRoleId("22_00024-2");
|
ctUserole.setRoleCode("22_00024-2");
|
ctUserole.setRoleName("超级管理员");
|
ctUserole.setCustId(ctUser.getCustId());
|
ctUserole.setCreateTime(nowDate);
|
ctUserole.setUpdateTime(nowDate);
|
ctUseroleService.save(ctUserole);
|
ctUseroleList2.add(ctUserole);
|
userLoginDTO.setCtUseroleList(ctUseroleList2);
|
}
|
} else {
|
for (CtUserole userole : ctUseroleList) {
|
if ("22_00024-1".equals(userole.getRoleCode())) {
|
ctUseroleList2.add(userole);
|
}
|
}
|
if (ctUseroleList2.size() > 0)
|
userLoginDTO.setCtUseroleList(ctUseroleList2);
|
else {
|
Date nowDate = new Date();
|
CtUserole ctUserole = new CtUserole();
|
ctUserole.setId(utilsClient.getNewTimeId());
|
ctUserole.setUserId(ctUser.getId());
|
ctUserole.setRoleId("22_00024-2");
|
ctUserole.setRoleCode("22_00024-2");
|
ctUserole.setRoleName("超级管理员");
|
ctUserole.setCustId(ctUser.getCustId());
|
ctUserole.setCreateTime(nowDate);
|
ctUserole.setUpdateTime(nowDate);
|
ctUseroleService.save(ctUserole);
|
ctUseroleList2.add(ctUserole);
|
userLoginDTO.setCtUseroleList(ctUseroleList2);
|
}
|
}
|
}
|
//获取机构
|
CtUnit ctUnit = ctUnitService.selectUnitByGridId(userRoleDTO.getOrgId());
|
if (ctUnit != null) {
|
userLoginDTO.setUnit(ctUnit.getUnitName());
|
ctUser.setUnitName(ctUnit.getUnitName());
|
ctUser.setUnitId(ctUnit.getId());
|
ctUserService.updateCtUser(ctUser);
|
} else {
|
int grade = userRoleDTO.getGrade() - 1;
|
String districtCode = userRoleDTO.getDistrictCode().replace("-", "");
|
String districtName = userRoleDTO.getDistrictName();
|
String street = formatCode(userRoleDTO.getStreetCode());
|
String streetName = userRoleDTO.getStreetName();
|
String village = formatCode(userRoleDTO.getCommunityCode());
|
String villageName = userRoleDTO.getCommunityName();
|
String unitName = userRoleDTO.getOrgName();
|
String unitId = userRoleDTO.getOrgId();
|
ctUnit = new CtUnit();
|
GridUnit thGridUnit = new GridUnit();
|
ctUnit.setCity("440100");
|
ctUnit.setCityName("广州市");
|
ctUnit.setUnitName(unitName);
|
ctUnit.setUnitDes(unitName);
|
ctUnit.setId(unitId);
|
ctUnit.setArea(districtCode);
|
ctUnit.setAreaName(districtName);
|
ctUnit.setDeleteStatus(0);
|
CtUnit unitByRoad = null;
|
switch (grade) {
|
case 1:
|
//市级级
|
ctUnit.setLevel(grade);
|
ctUnit.setUnitGrade(grade);
|
ctUnit.setUnitType(UserBaseConsts.UNIT_TYPE_102);
|
ctUnit.setParentId("2024000000000001");
|
thGridUnit.setThirdGridCode(districtCode.replace("-", ""));
|
break;
|
case 2:
|
//区级
|
ctUnit.setLevel(grade);
|
ctUnit.setUnitGrade(grade);
|
ctUnit.setUnitType(UserBaseConsts.UNIT_TYPE_102);
|
unitByRoad = ctUnitService.getUnitByArea(districtCode);
|
ctUnit.setParentId(unitByRoad == null ? "100001" : unitByRoad.getId());
|
thGridUnit.setThirdGridCode(districtCode.replace("-", ""));
|
break;
|
case 3:
|
//镇街
|
ctUnit.setLevel(grade);
|
ctUnit.setUnitGrade(grade);
|
ctUnit.setUnitType(UserBaseConsts.UNIT_TYPE_102);
|
ctUnit.setRoad(street);
|
ctUnit.setRoadName(streetName);
|
unitByRoad = ctUnitService.getUnitByRoad(street);
|
ctUnit.setParentId(unitByRoad == null ? "100001" : unitByRoad.getId());
|
thGridUnit.setThirdGridCode(street);
|
break;
|
case 4:
|
//村居
|
ctUnit.setLevel(grade);
|
ctUnit.setUnitGrade(grade);
|
ctUnit.setUnitType(UserBaseConsts.UNIT_TYPE_104);
|
ctUnit.setRoad(street);
|
ctUnit.setRoadName(streetName);
|
ctUnit.setVillage(village);
|
ctUnit.setVillageName(villageName);
|
thGridUnit.setThirdGridCode(village);
|
unitByRoad = ctUnitService.getUnitByRoad(street);
|
ctUnit.setParentId(unitByRoad == null ? "100001" : unitByRoad.getId());
|
break;
|
case 5:
|
//网格-村居
|
ctUnit.setLevel(grade);
|
ctUnit.setUnitGrade(grade);
|
ctUnit.setUnitType(UserBaseConsts.UNIT_TYPE_104);
|
ctUnit.setRoad(street);
|
ctUnit.setRoadName(streetName);
|
ctUnit.setVillage(village);
|
ctUnit.setVillageName(villageName);
|
thGridUnit.setThirdGridCode(village);
|
unitByRoad = ctUnitService.getUnitByRoad(street);
|
ctUnit.setParentId(unitByRoad == null ? "100001" : unitByRoad.getId());
|
break;
|
}
|
log.info("xsdctUnit:{}", ctUnit);
|
ctUnitService.saveCtUnit(ctUnit);
|
userLoginDTO.setUnit(ctUnit.getUnitName());
|
userLoginDTO.setUnitType(ctUnit.getUnitType());
|
ctUser.setUnitName(ctUnit.getUnitName());
|
ctUser.setUnitId(ctUnit.getId());
|
ctUserService.updateCtUser(ctUser);
|
thGridUnit.setDyhUnitId(ctUnit.getId());
|
thGridUnit.setThirdUnitId(ctUnit.getId());
|
thGridUnit.setThirdUnitCode(userRoleDTO.getOrgCode());
|
thGridUnit.setThirdUnitName(ctUnit.getUnitName());
|
thGridUnit.setCreateTime(new Date());
|
thGridUnit.setId(gridUnitService.getMaxId() + 1);
|
log.info("xsdthGridUnit:{}", thGridUnit);
|
gridUnitService.saveOrUpdate(thGridUnit);
|
}
|
|
return ReturnSucUtils.getRepInfo(userLoginDTO);
|
} else {
|
//没有对应用户,创建用户,根据用户id获取用户信息
|
ReturnBO repInfo = initNewUser2(gridUserBaseDTO);
|
if (repInfo.getCode() == 0) {
|
//创建用户成功,模拟登录
|
ctUser = ctUserService.getByIdCard(gridUserBaseDTO.getIdNumber());
|
if (ObjectUtils.isNotEmpty(ctUser)) {
|
ctAccount = this.getByUserIdAndType(ctUser.getId(), UserBaseConsts.ACC_TYPE_1);
|
}
|
UserLoginDTO userLoginDTO = login(ctAccount, ctUser);
|
return ReturnSucUtils.getRepInfo(userLoginDTO);
|
} else {
|
//创建用户失败,返回失败信息
|
return repInfo;
|
}
|
|
}
|
} catch (Exception e) {
|
log.error("service方法[AccountService.webGridLogin]调用失败,异常信息:" + e, e);
|
throw new ServiceException("CtAccountService.webGridLogin", e);
|
}
|
}
|
|
public String formatCode(String input) {
|
if (input == null || input.isEmpty()) {
|
return "";
|
}
|
|
String[] parts = input.split("-");
|
if (parts.length == 3) {
|
return parts[0] + parts[1] + parts[2];
|
} else if (parts.length >= 4) {
|
return parts[0] + parts[1] + parts[2] + "-" + parts[3];
|
} else if (parts.length >= 5) {
|
return parts[0] + parts[1] + parts[2] + "-" + parts[3] + "-" + parts[4];
|
} else {
|
return input; // 或抛出异常
|
}
|
}
|
|
private UserLoginDTO login(CtAccount ctAccount, CtUser ctUser) {
|
UserLoginDTO userLoginDTO = new UserLoginDTO();
|
// 封装用户信息
|
userLoginDTO.setToken(JwtUtils.buildJWT(ctUser.getId()));
|
userLoginDTO.setUserId(ctUser.getId());
|
userLoginDTO.setTrueName(ctUser.getTrueName());
|
userLoginDTO.setUnit(ctUser.getUnitName());
|
CtUnit byId = ctUnitService.getById(ctUser.getUnitId());
|
if (byId != null) {
|
userLoginDTO.setUnitType(byId.getUnitType());
|
}
|
userLoginDTO.setDept(ctUser.getDeptName());
|
userLoginDTO.setPhone(ctUser.getMobile());
|
userLoginDTO.setCustId(ctUser.getCustId());
|
// 登录用户角色
|
List<CtUserole> ctUseroleList = ctUseroleService.listByUserId(ctUser.getId());
|
userLoginDTO.setCtUseroleList(ctUseroleList);
|
// 登录用户地址信息
|
CtUserAddrDTO ctUserAddrDTO = new CtUserAddrDTO();
|
ctUserAddrDTO.setProv(ctUser.getProv());
|
ctUserAddrDTO.setProvName(ctUser.getProvName());
|
ctUserAddrDTO.setCity(ctUser.getCity());
|
ctUserAddrDTO.setCityName(ctUser.getCityName());
|
ctUserAddrDTO.setArea(ctUser.getArea());
|
ctUserAddrDTO.setAreaName(ctUser.getAreaName());
|
ctUserAddrDTO.setRoad(ctUser.getRoad());
|
ctUserAddrDTO.setRoadName(ctUser.getRoadName());
|
ctUserAddrDTO.setVillage(ctUser.getVillage());
|
ctUserAddrDTO.setVillageName(ctUser.getVillageName());
|
userLoginDTO.setCtUserAddrDTO(ctUserAddrDTO);
|
// 最后登录时间
|
Date loginTime = new Date();
|
userLoginDTO.setLastLoginTime(loginTime);
|
// 更新最新登录时间
|
UpdateWrapper<CtAccount> accountUpdateWrapper = new UpdateWrapper<>();
|
accountUpdateWrapper.set("login_time", loginTime).eq("id", ctAccount.getId());
|
this.update(accountUpdateWrapper);
|
return userLoginDTO;
|
}
|
|
private ReturnBO initNewUser2(GridUserBaseDTO gridUserBaseDTO) {
|
String userId = gridUserBaseDTO.getId();
|
//拿到用户机构信息
|
GridUserRoleVo gridUserRoleVo = new GridUserRoleVo();
|
gridUserRoleVo.setUserId(userId);
|
GridUserRoleDTO userRoleDTO = sysClient.getUserRoleList(gridUserRoleVo);
|
if (StringUtils.isEmpty(userRoleDTO.getRoleName()) || (!userRoleDTO.getRoleName().contains("(M)") && !userRoleDTO.getRoleName().contains("领导") && !userRoleDTO.getRoleName().contains("调度干部"))) {
|
return ReturnFailUtils.getRepInfo("该用户没有矛调系统的权限");
|
}
|
CtUserole ctUserole = new CtUserole();
|
if (userRoleDTO.getRoleName().contains("经办员")) {
|
ctUserole.setRoleId("22_00024-4");
|
ctUserole.setRoleName("纠纷化解人员");
|
} else {
|
ctUserole.setRoleId("22_00024-3");
|
ctUserole.setRoleName("单位管理员");
|
}
|
|
List<CtUserole> ctUseroles = new ArrayList<>();
|
ctUseroles.add(ctUserole);
|
log.info("xsd:CtUserole:{}", ctUserole);
|
CtUnit ctUnit = ctUnitService.selectUnitByGridId(userRoleDTO.getOrgId());
|
log.info("xsd:ctUnit:{}", ctUnit);
|
if (ctUnit != null && StringUtils.isNotEmpty(ctUnit.getId())) {
|
CtUserSaveDTO ctUserSaveDTO = new CtUserSaveDTO();
|
ctUserSaveDTO.setUnitId(ctUnit.getId());
|
ctUserSaveDTO.setUnitName(ctUnit.getUnitName());
|
ctUserSaveDTO.setCipher("Byzfw2025!");
|
ctUserSaveDTO.setAcc(gridUserBaseDTO.getMobile());
|
ctUserSaveDTO.setTrueName(gridUserBaseDTO.getName());
|
ctUserSaveDTO.setMobile(gridUserBaseDTO.getMobile());
|
ctUserSaveDTO.setIdcard(gridUserBaseDTO.getIdNumber());
|
ctUserSaveDTO.setCtUseroleList(ctUseroles);
|
ctUserService.webSaveCtUser(ctUserSaveDTO, "-1");
|
log.info("xsd:ctUserSaveDTO:{}", ctUserSaveDTO);
|
} else {
|
//创建机构
|
//id,level,parent_id,unit_grade,unit_name,unit_type,
|
//prov,prov_name, city,city_name,area,area_name,road,road_name,village,village_name,addr,delete_status
|
int grade = userRoleDTO.getGrade() - 1;
|
String districtCode = userRoleDTO.getDistrictCode().replace("-", "");
|
String districtName = userRoleDTO.getDistrictName();
|
String street = formatCode(userRoleDTO.getStreetCode());
|
String streetName = userRoleDTO.getStreetName();
|
String village = userRoleDTO.getCommunityCode();
|
String villageName = userRoleDTO.getCommunityName();
|
String unitName = userRoleDTO.getOrgName();
|
String unitId = userRoleDTO.getOrgId();
|
ctUnit = new CtUnit();
|
GridUnit thGridUnit = new GridUnit();
|
ctUnit.setCity("440100");
|
ctUnit.setCityName("广州市");
|
ctUnit.setUnitName(unitName);
|
ctUnit.setUnitDes(unitName);
|
ctUnit.setId(unitId);
|
ctUnit.setArea(districtCode);
|
ctUnit.setAreaName(districtName);
|
ctUnit.setDeleteStatus(0);
|
CtUnit unitByRoad = null;
|
switch (grade) {
|
case 1:
|
//市级级
|
ctUnit.setLevel(grade);
|
ctUnit.setUnitGrade(grade);
|
ctUnit.setUnitType(UserBaseConsts.UNIT_TYPE_102);
|
ctUnit.setParentId("2024000000000001");
|
thGridUnit.setThirdGridCode(districtCode.replace("-", ""));
|
break;
|
case 2:
|
//区级
|
ctUnit.setLevel(grade);
|
ctUnit.setUnitGrade(grade);
|
ctUnit.setUnitType(UserBaseConsts.UNIT_TYPE_102);
|
unitByRoad = ctUnitService.getUnitByArea(districtCode);
|
ctUnit.setParentId(unitByRoad == null ? "100001" : unitByRoad.getId());
|
thGridUnit.setThirdGridCode(districtCode.replace("-", ""));
|
break;
|
case 3:
|
//镇街
|
ctUnit.setLevel(grade);
|
ctUnit.setUnitGrade(grade);
|
ctUnit.setUnitType(UserBaseConsts.UNIT_TYPE_102);
|
ctUnit.setRoad(street);
|
ctUnit.setRoadName(streetName);
|
unitByRoad = ctUnitService.getUnitByRoad(street);
|
ctUnit.setParentId(unitByRoad == null ? "100001" : unitByRoad.getId());
|
thGridUnit.setThirdGridCode(street);
|
break;
|
case 4:
|
//村居
|
ctUnit.setLevel(grade);
|
ctUnit.setUnitGrade(grade);
|
ctUnit.setUnitType(UserBaseConsts.UNIT_TYPE_104);
|
ctUnit.setRoad(street);
|
ctUnit.setRoadName(streetName);
|
ctUnit.setVillage(village);
|
ctUnit.setVillageName(villageName);
|
thGridUnit.setThirdGridCode(village);
|
unitByRoad = ctUnitService.getUnitByRoad(street);
|
ctUnit.setParentId(unitByRoad == null ? "100001" : unitByRoad.getId());
|
break;
|
case 5:
|
//网格-村居
|
ctUnit.setLevel(grade);
|
ctUnit.setUnitGrade(grade);
|
ctUnit.setUnitType(UserBaseConsts.UNIT_TYPE_104);
|
ctUnit.setRoad(street);
|
ctUnit.setRoadName(streetName);
|
ctUnit.setVillage(village);
|
ctUnit.setVillageName(villageName);
|
thGridUnit.setThirdGridCode(village);
|
unitByRoad = ctUnitService.getUnitByRoad(street);
|
ctUnit.setParentId(unitByRoad == null ? "100001" : unitByRoad.getId());
|
break;
|
}
|
log.info("xsdctUnit:{}", ctUnit);
|
ctUnitService.saveCtUnit(ctUnit);
|
thGridUnit.setDyhUnitId(ctUnit.getId());
|
thGridUnit.setThirdUnitId(ctUnit.getId());
|
thGridUnit.setThirdUnitCode(userRoleDTO.getOrgCode());
|
thGridUnit.setThirdUnitName(ctUnit.getUnitName());
|
thGridUnit.setCreateTime(new Date());
|
thGridUnit.setId(gridUnitService.getMaxId() + 1);
|
log.info("xsdthGridUnit:{}", thGridUnit);
|
gridUnitService.saveOrUpdate(thGridUnit);
|
CtUserSaveDTO ctUserSaveDTO = new CtUserSaveDTO();
|
ctUserSaveDTO.setUnitId(ctUnit.getId());
|
ctUserSaveDTO.setUnitName(ctUnit.getUnitName());
|
ctUserSaveDTO.setCipher("Byzfw2025!");
|
ctUserSaveDTO.setAcc(gridUserBaseDTO.getMobile());
|
ctUserSaveDTO.setTrueName(gridUserBaseDTO.getName());
|
ctUserSaveDTO.setMobile(gridUserBaseDTO.getMobile());
|
ctUserSaveDTO.setIdcard(gridUserBaseDTO.getIdNumber());
|
ctUserSaveDTO.setCtUseroleList(ctUseroles);
|
ctUserService.webSaveCtUser(ctUserSaveDTO, "-1");
|
}
|
return ReturnSucUtils.getRepInfo("创建账号成功");
|
}
|
|
}
|