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());  
 | 
    }  
 | 
}  
 |