| package com.xzx.gc.user.controller;  | 
|   | 
|   | 
| import cn.hutool.core.collection.CollUtil;  | 
| import cn.hutool.core.convert.Convert;  | 
| import cn.hutool.core.date.DateUtil;  | 
| import cn.hutool.core.util.StrUtil;  | 
| import com.github.pagehelper.PageHelper;  | 
| import com.github.pagehelper.PageInfo;  | 
| import com.xzx.gc.common.Result;  | 
| import com.xzx.gc.common.annotations.valid.Update;  | 
| import com.xzx.gc.common.constant.CommonEnum;  | 
| import com.xzx.gc.common.constant.Constants;  | 
| import com.xzx.gc.common.constant.UserEnum;  | 
| import com.xzx.gc.common.dto.CommonDto;  | 
| import com.xzx.gc.common.dto.log.OperationAppLog;  | 
| import com.xzx.gc.common.exception.RestException;  | 
| import com.xzx.gc.common.request.BaseController;  | 
| import com.xzx.gc.common.utils.BusinessUtil;  | 
| import com.xzx.gc.common.utils.IdUtils;  | 
| import com.xzx.gc.common.utils.MqUtil;  | 
| import com.xzx.gc.common.utils.SecurityUtil;  | 
| import com.xzx.gc.entity.*;  | 
| import com.xzx.gc.model.JsonResult;  | 
| import com.xzx.gc.model.admin.UserEditroleModel;  | 
| import com.xzx.gc.model.admin.UserModel;  | 
| import com.xzx.gc.model.user.SelectUserTypeDTO;  | 
| import com.xzx.gc.user.dto.RoleDto;  | 
| import com.xzx.gc.user.dto.SelectOtherUserDto;  | 
| import com.xzx.gc.user.mapper.OrderMapper;  | 
| import com.xzx.gc.user.mapper.OtherUserMapper;  | 
| import com.xzx.gc.user.mapper.SysStorageMapper;  | 
| import com.xzx.gc.user.mapper.UserRoleMapper;  | 
| import com.xzx.gc.user.service.*;  | 
| import com.xzx.gc.util.SessionUtil;  | 
| import io.swagger.annotations.Api;  | 
| import io.swagger.annotations.ApiImplicitParam;  | 
| import io.swagger.annotations.ApiImplicitParams;  | 
| import io.swagger.annotations.ApiOperation;  | 
| import org.springframework.beans.factory.annotation.Autowired;  | 
| import org.springframework.validation.annotation.Validated;  | 
| import org.springframework.web.bind.annotation.*;  | 
| import tk.mybatis.mapper.entity.Example;  | 
|   | 
| import javax.servlet.http.HttpServletRequest;  | 
| import java.util.*;  | 
| import java.util.stream.Collectors;  | 
|   | 
| @Api(tags = "角色管理")  | 
| @RestController  | 
| @Validated  | 
| public class RoleController extends BaseController {  | 
|   | 
|     @Autowired  | 
|     private OtherUserMapper otherUserMapper;  | 
|   | 
|     @Autowired  | 
|     private FenceService fenceService;  | 
|   | 
|     @Autowired  | 
|     private UserRoleMapper userRoleMapper;  | 
|   | 
|   | 
|     @Autowired  | 
|     private UserRoleService userRoleService;  | 
|   | 
|     @Autowired  | 
|     private OtherUserService otherUserService;  | 
|   | 
|   | 
|     @Autowired  | 
|     private SysStorageMapper sysStorageMapper;  | 
|   | 
|     @Autowired  | 
|     private UserService userService;  | 
|   | 
|     @Autowired  | 
|     private SessionUtil sessionUtil;  | 
|   | 
|     @Autowired  | 
|     private OrderService orderService;  | 
|   | 
|     @Autowired  | 
|     private CityPartnerService cityPartnerService;  | 
|   | 
|     @ApiOperation(value = "分页查询所有角色")  | 
|     @PostMapping(value = "/role/select")  | 
|     public Result<PageInfo<OtherUserInfo>> selectReceiver(HttpServletRequest request,@RequestBody SelectOtherUserDto selectOtherUserDto){  | 
|         Example example=new Example(OtherUserInfo.class);  | 
|         Example.Criteria criteria = example.createCriteria();  | 
|         criteria.andEqualTo("delFlag",Constants.DEL_NOT_FLAG);  | 
| //        criteria.andEqualTo("isProhibit",Constants.DEL_NOT_FLAG);  | 
|         if(StrUtil.isNotBlank(selectOtherUserDto.getUserType())){  | 
|             criteria.andIn("userType",Arrays.asList(selectOtherUserDto.getUserType().split(",")));  | 
|         }  | 
|   | 
|         String userId=getUserId(request);  | 
|         OtherUserInfo byId = otherUserService.findById(userId);  | 
|         if(byId!=null){  | 
|             criteria.andEqualTo("partnerId",byId.getPartnerId());  | 
|         }  | 
|   | 
|         if(StrUtil.isNotBlank(selectOtherUserDto.getKeyword())){  | 
|             String keyword="%"+selectOtherUserDto.getKeyword()+"%";  | 
|             example.and().orLike("name",keyword).orLike("mobilePhone",keyword);  | 
|         }  | 
|   | 
|         PageHelper.startPage(selectOtherUserDto.getPageNo(),selectOtherUserDto.getPageSize());  | 
|         List<OtherUserInfo> select = otherUserMapper.selectByExample(example);  | 
|         if(CollUtil.isNotEmpty(select)){  | 
|             for (OtherUserInfo userInfo : select) {  | 
|                 List<UserRole> byRoleCode = userRoleService.findByRoleCode(userInfo.getUserType());  | 
|                 if(CollUtil.isNotEmpty(byRoleCode)){  | 
|                     userInfo.setUserTypeName(byRoleCode.get(0).getRoleName());  | 
|                 }  | 
|                 String townId = userInfo.getTownId();  | 
|                 List<Fence> byTownIds = fenceService.findByIds(townId);  | 
|                 if(CollUtil.isNotEmpty(byTownIds)){  | 
|                     String collect = byTownIds.stream().map(Fence::getFenceName).collect(Collectors.joining(","));  | 
|                     userInfo.setTownNames(collect);  | 
|                 }  | 
|   | 
|                 if(StrUtil.isNotBlank(userInfo.getPassword())){  | 
|                     String decrypt = SecurityUtil.decrypt(userInfo.getSalt(), userInfo.getPassword());  | 
|                     userInfo.setPassword(decrypt);  | 
|                 }  | 
|                 userInfo.setSalt(null);  | 
|   | 
|                 //转换areaId  | 
|                 Integer cityId = userInfo.getCityId();  | 
|                 Integer townshipId = userInfo.getTownshipId();  | 
|                 if(townshipId!=null){  | 
|                     userInfo.setAreaId(townshipId.toString());  | 
|                     userInfo.setLevel(3);  | 
|                     userInfo.setAreaName(userInfo.getTownship());  | 
|                 }else  if(cityId!=null){  | 
|                     userInfo.setAreaId(cityId.toString());  | 
|                     userInfo.setLevel(2);  | 
|                     userInfo.setAreaName(userInfo.getCity());  | 
|                 }  | 
|   | 
|                 String storageId = userInfo.getStorageId();  | 
|                 if(StrUtil.isNotBlank(storageId)){  | 
|                     String storageName = sysStorageMapper.selectByPrimaryKey(storageId).getStorageName();  | 
|                     userInfo.setStorageName(storageName);  | 
|                 }  | 
|   | 
|                 //是否请假期间  | 
|                 String leaveStartTime = userInfo.getLeaveStartTime();  | 
|                 String leaveEndTime = userInfo.getLeaveEndTime();  | 
|                 if(StrUtil.isNotBlank(leaveStartTime)){  | 
|                     if(DateUtil.compare(new Date(),DateUtil.parse(leaveStartTime))>=0&&DateUtil.compare(new Date(),DateUtil.parse(leaveEndTime))<=0){  | 
|                         userInfo.setLeaveFlag(true);  | 
|                     }  | 
|                 }  | 
|   | 
|             }  | 
|         }  | 
|         PageInfo<OtherUserInfo> pageInfo=new PageInfo<>(select);  | 
|         return Result.success(pageInfo);  | 
|     }  | 
|   | 
|     @ApiOperation( value = "查询所有角色")  | 
|     @PostMapping("/role/selectUserType")  | 
|     public Result<List<UserRole>> add(HttpServletRequest request,@RequestBody SelectUserTypeDTO selectUserTypeDTO) {  | 
|         String userId = getUserId(request);  | 
|         List<UserRole> byRoleCode=null;  | 
|         //根据运营员查询其下所属的角色  | 
|         if(StrUtil.isBlank(selectUserTypeDTO.getExtra())) {  | 
|             String mobilePhone = otherUserService.findById(userId).getMobilePhone();  | 
|             //查出所有角色  | 
|             List<OtherUserInfo> byMobile = otherUserService.findByMobile(mobilePhone);  | 
|             List<String> collect = byMobile.stream().map(x -> x.getUserType()).collect(Collectors.toList());  | 
|             if(collect.contains(CommonEnum.打包站运营员.getValue())){  | 
|                 byRoleCode = userRoleService.findByRoleCode(CommonEnum.打包员.getValue());  | 
|             }else if(collect.contains(CommonEnum.运营员.getValue())) {  | 
|                 byRoleCode = userRoleService.findByRoleCode(null);  | 
|                 //排除打包员相关和自己  | 
|                 byRoleCode.removeIf(x->CommonEnum.打包站运营员.getValue().equals(x.getRoleCode())||CommonEnum.打包员.getValue().equals(x.getRoleCode())||CommonEnum.运营员.getValue().equals(x.getRoleCode()));  | 
|             }  | 
|         }else {  | 
|             byRoleCode = userRoleService.findByRoleCodes(selectUserTypeDTO.getExtra());  | 
|         }  | 
|         return Result.success(byRoleCode);  | 
|   | 
|     }  | 
|   | 
|   | 
|     @ApiOperation( value = "新增角色")  | 
|     @PostMapping("/role/add")  | 
|     public Result add(HttpServletRequest request, @RequestBody RoleDto roleDto) {  | 
|         //设置合伙人ID  | 
|         OtherUserInfo byId = otherUserService.findById(getUserId(request));  | 
|         String partnerId = byId.getPartnerId();  | 
|   | 
|         List<OtherUserInfo> byMobile = otherUserService.findByMobileForBidden(roleDto.getMobilePhone());  | 
|         if(CollUtil.isNotEmpty(byMobile)){  | 
|                 throw new RestException("该手机号已存在别的身份");  | 
|         }  | 
|   | 
|         Result<String> add = userRoleService.add(roleDto,partnerId);  | 
|         if(add.getCode()==0){  | 
|             String mobilePhone = userService.findOtherByUserId(getUserId(request),0);  | 
|             OperationAppLog build = OperationAppLog.builder().appPrograme(getFrontClient(request)).opreateName(mobilePhone)  | 
|                     .methodName(Constants.USER_MODUL_NAME).operateAction("新增角色-"+roleDto.getUserId()).build();  | 
|             mqUtil.sendApp(build);  | 
|         }  | 
|         return add;  | 
|     }  | 
|   | 
|     @ApiOperation( value = "编辑角色")  | 
|     @PostMapping("/role/update")  | 
|     public Result update(HttpServletRequest request, @Validated(value = {Update.class}) @RequestBody RoleDto roleDto) {  | 
|         roleDto.setLoginUserId(getUserId(request));  | 
|   | 
|         List<OtherUserInfo> byMobile = otherUserService.findByMobileForBidden(roleDto.getMobilePhone());  | 
|         if(CollUtil.isNotEmpty(byMobile)){  | 
|             //修改  | 
|             long count = byMobile.stream().filter(x -> !x.getUserId().equals(roleDto.getUserId())).count();  | 
|             if(count>0) {  | 
|                 throw new RestException("该手机号已存在别的身份");  | 
|             }  | 
|         }  | 
|   | 
|         Result edit = userRoleService.edit(roleDto);  | 
|         if(edit.getCode()==0){  | 
|             String mobilePhone = userService.findOtherByUserId(getUserId(request),0);  | 
|             OperationAppLog build = OperationAppLog.builder().appPrograme(getFrontClient(request)).opreateName(mobilePhone)  | 
|                     .methodName(Constants.USER_MODUL_NAME).operateAction("编辑角色-"+roleDto.getUserId()).build();  | 
|             mqUtil.sendApp(build);  | 
|         }  | 
|         return edit;  | 
|   | 
|     }  | 
|   | 
|     /**  | 
|      * 身份设定查询  | 
|      * @param userModel  | 
|      * @return  | 
|      */  | 
|     @PostMapping( "/admin/front/role/queryEditroleApi.do")  | 
|     @ApiOperation(value="用户管理-身份设定查询", notes="test: 仅0有正确返回")  | 
|     public JsonResult<Map<String, Object>> queryEditroleApi(@RequestBody UserEditroleModel userModel){  | 
|         Map<String, Object> map = userRoleService.queryEditroleApi(userModel);  | 
|         return JsonResult.success(map);  | 
|     }  | 
|   | 
|     /**  | 
|      * 根据Id删除用户角色  | 
|      * @param userModel  | 
|      */  | 
|     @PostMapping( "/admin/front/role/delEditroleApi.json")  | 
|     @ApiOperation(value="用户管理-身份设定删除", notes="test: 仅0有正确返回")  | 
|     @ApiImplicitParams({  | 
|             @ApiImplicitParam(paramType="query", name = "userId", value = "用户Id", required = true, dataType = "String"),  | 
|             @ApiImplicitParam(paramType="query", name = "userType", value = "用户类型", required = true, dataType = "String"),  | 
|             @ApiImplicitParam(paramType="query", name = "mobilePhone", value = "手机号", required = true, dataType = "String")  | 
|     })  | 
|     public JsonResult<Map<String, Object>> delEditroleApi(@RequestBody UserModel userModel, HttpServletRequest request){  | 
|         CoreUser user = sessionUtil.getCurrentUser();  | 
|         String code=user.getCode();  | 
|         //合伙人的运营员那个账号不能删。其他合伙人的账号都可以通过运营员删  | 
|         // 运营管理员和超管最高权限。都可以删  | 
|   | 
|         if(!SessionUtil.ACCESS_CS_ADMIN.equals(code)&&!SessionUtil.ACCESS_SUPPER_ADMIN.equals(code)){  | 
|             if(userModel.getUserType().equals(CommonEnum.打包站运营员.getValue())){  | 
|                 return JsonResult.failMessage("不能删除主打包员的角色!");  | 
|             }  | 
|             if(userModel.getUserType().equals(CommonEnum.运营员.getValue())){  | 
|                 return JsonResult.failMessage("不能删除主运营员的角色!");  | 
|             }  | 
|             if(userModel.getUserType().equals(CommonEnum.总部管理员.getValue())){  | 
|                 return JsonResult.failMessage("不能删除总部管理员的角色!");  | 
|             }  | 
|         }  | 
|   | 
|         if(userModel.getUserType().equals(CommonEnum.回收员.getValue())){  | 
|             List<OrderInfo> list1 =   orderService.findByManageReceiver(userModel.getUserId());  | 
|             if(CollUtil.isNotEmpty(list1)){  | 
|                 return JsonResult.failMessage("当前回收员存在未完成的订单");  | 
|             }  | 
|         }  | 
|   | 
|         otherUserService.delCuserById(userModel.getUserId(), userModel.getMobilePhone(), userModel.getUserType());  | 
|         Map<String, Object> map = new HashMap<>();  | 
|         map.put("code",0);  | 
|         map.put("userId",userModel.getUserId());  | 
|   | 
|         OperationAppLog build = OperationAppLog.builder().appPrograme(CommonEnum.后台.getValue()).opreateName(getAdminName(request))  | 
|                 .methodName(Constants.ORDER_MODUL_NAME).operateAction("身份设定删除-"+userModel.getUserId()).build();  | 
|         mqUtil.sendApp(build);  | 
|   | 
|         return JsonResult.success(map);  | 
|     }  | 
|   | 
|     /**  | 
|      * @param userModel  | 
|      * @return  | 
|      */  | 
|     @PostMapping( "/admin/front/role/addEditroleApi.json")  | 
|     @ApiOperation(value="用户管理-身份设定(添加和修改接口合并)", notes="test: 仅0有正确返回")  | 
|     @ApiImplicitParams({  | 
|             @ApiImplicitParam(paramType="query", name = "password", value = "初始密码", required = true, dataType = "String"),  | 
|             @ApiImplicitParam(paramType="query", name = "userType", value = "用户类型", required = true, dataType = "String"),  | 
|             @ApiImplicitParam(paramType="query", name = "mobilePhone", value = "手机号", required = true, dataType = "String"),  | 
|             @ApiImplicitParam(paramType="query", name = "area", value = "地区Id", required = true, dataType = "String"),  | 
|             @ApiImplicitParam(paramType="query", name = "cityId", value = "市Id", required = true, dataType = "String"),  | 
|             @ApiImplicitParam(paramType="query", name = "roleId", value = "角色Id", required = true, dataType = "String")  | 
|     })  | 
|     public JsonResult<Map<String, Object>>  addEditroleApi(@RequestBody UserEditroleModel userModel,HttpServletRequest request){  | 
|         Map<String, Object> map = new HashMap<>();  | 
|         CoreUser user = sessionUtil.getCurrentUser();  | 
|         String code=user.getCode();  | 
|         if(SessionUtil.ACCESS_SUPPER_ADMIN.equals(code)||SessionUtil.ACCESS_CS_ADMIN.equals(code)){  | 
|             if(StrUtil.isBlank(userModel.getPartnerId())){  | 
|                 return JsonResult.failMessage("超管新增或修改用户身份必须选择合伙人!");  | 
|             }  | 
|         }else{  | 
|             CityPartner partner = cityPartnerService.findById(Convert.toInt(user.getId()));  | 
|             if(null!=partner){  | 
|                 if(userModel.getUserType().equals(CommonEnum.总部管理员.getValue())){  | 
|                     return JsonResult.failMessage("合伙人不能新建总部管理员!");  | 
|   | 
|                 }  | 
|             }  | 
|         }  | 
|         if(userModel.getArea()==null&&"".equals(userModel.getArea())){  | 
|             return JsonResult.failMessage("地区不能为空!");  | 
|         }  | 
|         if(userModel.getUserType().equals(CommonEnum.打包员.getValue())){  | 
|             return JsonResult.failMessage("不能新增或修改打包员,请在手机端进行该操作!");  | 
|         }  | 
|         if(userModel.getUserType().equals(CommonEnum.打包站运营员.getValue())){  | 
|             return JsonResult.failMessage("不能新增主打包员,每个打包站只能有一个主打包员!");  | 
|         }  | 
|         if(userModel.getUserType().equals(CommonEnum.入库员.getValue())){  | 
|             if(StrUtil.isBlank(userModel.getStorageId())){  | 
|                 return JsonResult.failMessage("仓管员必须关联仓库!");  | 
|             }  | 
|         }  | 
|         //新增 : 回收员与入库员不能共存  | 
|         int num = userRoleService.addEditroleApi(userModel);  | 
|         if(num>0){  | 
|             map.put("code",0);  | 
|             map.put("changeNum",num);  | 
|             map.put("msg","添加成功");  | 
|         }else if(num==-1){  | 
|             return JsonResult.failMessage("回收员不能与入库员共存!");  | 
|         }else if(num==-2){  | 
|             return JsonResult.failMessage("不能新增打包员!");  | 
|         }else if(num==-3){  | 
|             return JsonResult.failMessage("不能新增打包员!");  | 
|         }else{  | 
|             return JsonResult.failMessage("添加身份,区域不能为空!");  | 
|         }  | 
|   | 
|         OperationAppLog build = OperationAppLog.builder().appPrograme(CommonEnum.后台.getValue()).opreateName(getAdminName(request))  | 
|                 .methodName(Constants.ORDER_MODUL_NAME).operateAction("身份设定-"+userModel.getUserId()).build();  | 
|         mqUtil.sendApp(build);  | 
|   | 
|         return JsonResult.success(map);  | 
|     }  | 
|     /**  | 
|      * 查询字典里面的角色  | 
|      * @return  | 
|      */  | 
|     @PostMapping( "/admin/front/role/queryAllRoleApi.json")  | 
|     @ApiOperation(value="用户管理-身份设定(查询字典里面的角色)", notes="test: 仅0有正确返回")  | 
|     public JsonResult<List<Map<String, Object>>> queryAllRoleApi(){  | 
|         List<String> partnerIds = cityPartnerService.queryPartnerByCurrent();  | 
|         String partnerId= "";  | 
|         if(null!=partnerIds&&partnerIds.size()>0){  | 
|             partnerId = partnerIds.get(0);  | 
|         }  | 
|         List<Map<String, Object>> list = userRoleMapper.queryAllAPPRoleExt(partnerId);  | 
|         return JsonResult.success(list);  | 
|     }  | 
|   | 
| }  |