package com.xzx.gc.role.service; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.RandomUtil; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.xzx.gc.common.constant.CommonEnum; import com.xzx.gc.common.constant.Constants; import com.xzx.gc.common.dto.log.OperationAppLog; import com.xzx.gc.common.exception.PlatformException; import com.xzx.gc.common.exception.RestException; import com.xzx.gc.common.utils.BusinessUtil; import com.xzx.gc.common.utils.SecurityUtil; import com.xzx.gc.entity.*; import com.xzx.gc.model.ExceptionEnum; import com.xzx.gc.model.JsonResult; import com.xzx.gc.model.MiException; import com.xzx.gc.role.mapper.CityPartnerMapper; import com.xzx.gc.role.mapper.CoreOrgMapper; import com.xzx.gc.role.mapper.CoreUserMapper; import com.xzx.gc.role.model.CoreUserModel; import com.xzx.gc.role.rbac.UserLoginInfoAdmin; import com.xzx.gc.util.BeanUtils; import com.xzx.gc.util.enums.DelFlagEnum; import com.xzx.gc.util.enums.GeneralStateEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import tk.mybatis.mapper.entity.Example; import javax.validation.constraints.NotBlank; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Service @Transactional public class CoreUserService { @Autowired CoreUserMapper userMapper ; @Autowired CityPartnerMapper partnerMapper ; @Autowired PartnerGaodeService gaodeService; @Autowired AddressLevelService addressLevelService; @Autowired CoreOrgMapper orgMapper; @Autowired private CityPartnerMapper cityPartnerMapper; @Autowired private CoreRoleService coreRoleService; @Autowired private CoreUserRoleService coreUserRoleService; @Autowired private CityPartnerService cityPartnerService; public UserLoginInfoAdmin login(String userName, String password){ CoreUser query = new CoreUser(); query.setCode(userName); query.setPassword(password); CoreUser user =userMapper.selectOne(query); if(user==null) { throw new RestException("用户"+"不存在或者密码错误"); } if(!user.getState().equals(GeneralStateEnum.ENABLE.getValue())){ throw new RestException("用户"+"已经失效"); } if(user.getDelFlag()== DelFlagEnum.DELETED.getValue()) { throw new RestException("用户"+"已经删除"); } List orgs = getUserOrg(user.getId(),user.getOrgId()); UserLoginInfoAdmin loginInfo = new UserLoginInfoAdmin(); loginInfo.setOrgs(orgs); loginInfo.setUser(user); return loginInfo; } public Map loginApi(String userName, String password,String userType){ Map map = new HashMap<>(); String msg = ""; CoreUser query = new CoreUser(); List> cityTown=new ArrayList<>(); Example example = new Example(CoreUser.class); Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("code", userName); criteria.andEqualTo("delFlag", 0); CoreUser user =userMapper.selectOneByExample(example); //对比密码 if(user==null) { Example example1 = new Example(CityPartner.class); Example.Criteria criteria1 = example1.createCriteria(); criteria1.andEqualTo("accountNo", userName); criteria1.andEqualTo("delFlag", 0); CityPartner partner =cityPartnerMapper.selectOneByExample(example1); if(partner==null){ msg = "用户"+"不存在或者密码错误"; }else{ String salt = partner.getSalt(); if(null!=salt&&!"".equals(salt)){ String oldPassword = SecurityUtil.decrypt(salt,partner.getPassword()); if(oldPassword.equals(password)){ user = new CoreUser(); user.setName(partner.getPartnerName()); user.setState(partner.getState()); user.setPassword(partner.getPassword()); user.setCode(partner.getAccountNo()); user.setDelFlag(partner.getDelFlag()); user.setAttachmentId(partner.getAttachmentId()); user.setJobType0(partner.getJobType0()); user.setJobType1(partner.getJobType1()); user.setOrgId(Long.parseLong(partner.getOrgId()+"")); user.setId(Long.parseLong(partner.getId()+"")); List gaodeList = gaodeService.queryPartnerGaodeList(partner.getId()+""); List townIds = new ArrayList<>(); for (PartnerGaode gaode:gaodeList) { townIds.add(gaode.getTownId()); } List addressLevelInfoList=addressLevelService.queryAddressList(townIds); List> children = new ArrayList<>(); Map map1 = new HashMap<>(); String cityName = ""; int i=1; for (AddressLevelInfo address:addressLevelInfoList) { Map townMap = new HashMap<>(); if(cityName.equals(address.getLevel2Name())){ townMap.put("name",address.getLevel3Name()); townMap.put("id",address.getLevel3Id()); children.add(townMap); }else{ map1 = new HashMap<>(); if(null!=cityName&&!"".equals(cityName)){ map1.put("children",children); cityTown.add(map1); }else{ map1.put("cityName",address.getLevel2Name()); map1.put("cityId",address.getLevel2Id()); cityName = address.getLevel2Name(); children = new ArrayList<>(); townMap.put("name",address.getLevel3Name()); townMap.put("id",address.getLevel3Id()); children.add(townMap); } } if(addressLevelInfoList.size()==i){ map1.put("children",children); cityTown.add(map1); } i++; } userType="2"; }else{ msg = "用户"+"不存在或者密码错误"; } }else{ msg = "用户"+"不存在或者密码错误"; } } }else{ if(!user.getState().equals(GeneralStateEnum.ENABLE.getValue())){ msg ="用户"+"已经失效"; } if(user.getDelFlag()==DelFlagEnum.DELETED.getValue()) { msg ="用户"+"已经删除"; } String salt = user.getSalt(); if(null!=salt&&!"".equals(salt)) { String oldPassword = SecurityUtil.decrypt(salt, user.getPassword()); if (oldPassword.equals(password)) { }else{ msg = "用户"+"不存在或者密码错误"; } }else{ if (user.getPassword().equals(password)) { }else{ msg = "用户"+"不存在或者密码错误"; } } } UserLoginInfoAdmin loginInfo = new UserLoginInfoAdmin(); if(!"".equals(msg)){ map.put("msg",msg); map.put("userLoginInfo",loginInfo); }else{ List orgs = new ArrayList<>(); if(null!=user.getOrgId()){ orgs = getUserOrg(user.getId(),user.getOrgId()); }else{ orgs = getUserOrg(user.getId(),1); } loginInfo.setOrgs(orgs); loginInfo.setUser(user); map.put("userLoginInfo",loginInfo); map.put("userType",userType); map.put("cityTown",cityTown); } return map; } public List getUserOrg(long userId,long orgId){ List orgs = orgMapper.queryOrgByUser(userId); if(orgs.isEmpty()){ //没有赋值任何角色,默认给一个所在部门 //排除打包站 if(orgId==16){ throw new MiException(ExceptionEnum.MONITOR_EXCEPTION); } CoreOrg userOrg = orgMapper.selectByPrimaryKey(orgId); orgs.add(userOrg); } return orgs; } public void update(CoreUser user){ userMapper.updateByPrimaryKeySelective(user); } public CoreUser getUserById(Long userId){ return userMapper.selectOneByExample(userId); } public CoreUser getCoreUserById(Long id){ return userMapper.selectByPrimaryKey(id); } public void update(CoreUserModel model) { Long roleId = model.getRoleId(); CoreRole byId = coreRoleService.findById(roleId); String code = byId.getCode(); String salt = null; String newPassword = null; if (null != model.getPassword() && !"".equals(model.getPassword())) { salt = RandomUtil.randomString(16); newPassword = SecurityUtil.encrypt(salt, model.getPassword()); } //合伙人 if (Constants.PARTNER_CODE_QG.equals(code) || Constants.PARTNER_CODE_CS.equals(code)) { CityPartner user = BeanUtils.copy(model, CityPartner.class); user.setPassword(newPassword); user.setSalt(salt); cityPartnerService.updateById(user); } else { //用户 CoreUser user = BeanUtils.copy(model, CoreUser.class); user.setPassword(newPassword); user.setSalt(salt); update(user); } coreUserRoleService.updateRoleByUserAndOrg(model.getId(), model.getOrgId(), model.getRoleId()); } }