| 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<CoreOrg>  orgs = getUserOrg(user.getId(),user.getOrgId());  | 
|         UserLoginInfoAdmin loginInfo = new UserLoginInfoAdmin();  | 
|         loginInfo.setOrgs(orgs);  | 
|         loginInfo.setUser(user);  | 
|         return loginInfo;  | 
|   | 
|     }  | 
|   | 
|     public Map<String,Object> loginApi(String userName, String password,String userType){  | 
|         Map<String,Object> map = new HashMap<>();  | 
|         String msg = "";  | 
|         CoreUser query = new CoreUser();  | 
|         List<Map<String,Object>> 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<PartnerGaode> gaodeList = gaodeService.queryPartnerGaodeList(partner.getId()+"");  | 
|                         List<String> townIds = new ArrayList<>();  | 
|                         for (PartnerGaode gaode:gaodeList) {  | 
|                             townIds.add(gaode.getTownId());  | 
|                         }  | 
|                         List<AddressLevelInfo> addressLevelInfoList=addressLevelService.queryAddressList(townIds);  | 
|                         List<Map<String,String>> children = new ArrayList<>();  | 
|                         Map<String,Object> map1 = new HashMap<>();  | 
|                         String cityName = "";  | 
|                         int i=1;  | 
|                         for (AddressLevelInfo address:addressLevelInfoList) {  | 
|                             Map<String,String> 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<CoreOrg> 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<CoreOrg> getUserOrg(long userId,long orgId){  | 
|         List<CoreOrg> 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());  | 
|     }  | 
| }  |