package com.goafanti.permission.service.impl; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; import com.goafanti.common.bo.OrderExamineBo; import com.goafanti.common.dao.*; import com.goafanti.common.model.*; import com.goafanti.order.bo.NewOrderChangeBo; import com.goafanti.order.bo.TOrderTaskBo; import com.goafanti.order.enums.ChangeState; import com.goafanti.order.enums.NewProjectStatus; import com.goafanti.order.enums.OrderChangeProcess; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.goafanti.common.bo.Error; import com.goafanti.common.constant.AFTConstants; import com.goafanti.common.enums.roleResources; import com.goafanti.common.error.BusinessException; import com.goafanti.common.utils.StringUtils; import com.goafanti.core.mybatis.BaseMybatisDao; import com.goafanti.core.mybatis.page.Pagination; import com.goafanti.core.shiro.token.TokenManager; import com.goafanti.permission.bo.RoleBo; import com.goafanti.permission.bo.RolePermissionBo; import com.goafanti.permission.service.NewRoleService; @Service public class NewRoleServiceImpl extends BaseMybatisDao implements NewRoleService { @Autowired private RoleMapper roleMapper; @Autowired private UserMapper userMapper; @Autowired private UserRoleMapper userRoleMapper; @Autowired private RolePermissionMapper rolePermissionMapper; @Autowired private RoleResourcesMapper roleResourcesMapper; @Autowired private UserBusinessMapper userBusinessMapper; @Autowired private PatentNewMapper patentNewMapper; @Autowired private OrganizationContactBookMapper organizationContactBookMapper; @Autowired private TOrderTaskMapper tOrderTaskMapper; @Autowired private TOrderNewMapper tOrderNewMapper; @Autowired private TTaskLogMapper tTaskLogMapper; @Autowired private TOrderMidMapper tOrderMidMapper; @Autowired private OrderExamineMapper orderExamineMapper; @Autowired private UserTransferLogMapper userTransferLogMapper; @Autowired private AdminMapper adminMapper; @Autowired private TaskAttributionLogMapper taskAttributionLogMapper; @Autowired private TOrderLogMapper tOrderLogMapper; @Autowired private TChangeTaskMapper tChangeTaskMapper; @Autowired private NewOrderChangeMapper newOrderChangeMapper; @Autowired private OrderChangeLogMapper orderChangeLogMapper; @Override public Pagination findRoles(RoleBo role, Integer pageNo, Integer pageSize) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Map params =disposeParams(role); @SuppressWarnings("unchecked") Pagination p=(Pagination)findPage("selectRoleList","selectRoleCount",params,pageNo,pageSize); @SuppressWarnings("unchecked") List list=(List) p.getList(); for(RoleBo i:list){ if(i.getCreateTime()!=null){ i.setCreateTimez(sdf.format(i.getCreateTime())); } } return p; } private Map disposeParams(RoleBo role){ Map params = new HashMap(); if(StringUtils.isNotBlank(role.getRoleName())) params.put("roleName", role.getRoleName()); return params; } @Override public Set findRoleByUserId(String userId) { return roleMapper.findRoleByUserId(userId); } @Override public int insert(List records) { return roleMapper.insertBatch(records); } @Override public int deleteByPrimaryKeys(List records) { rolePermissionMapper.deleteByRoleId(records); userRoleMapper.deleteByRoleId(records); List data= userRoleMapper.findUserIdByRoleIds(records); TokenManager.clearUserAuthByUserId(data.toArray(new String[]{})); return roleMapper.deleteByPrimaryKeys(records); } @Override public int bindPermission(String rid, String pid) { TokenManager.clearUserAuthByUserId((String[]) userRoleMapper.findUserIdByRoleId(rid).toArray()); return rolePermissionMapper.insert(new RolePermission(rid, pid)); } @Override public int bindUser(String rid, String uid) { TokenManager.clearUserAuthByUserId(new String[] { uid }); return userRoleMapper.insert(new UserRole(uid, rid)); } @Override public int unbindPermission(String roleId, String permissionId) { Map params = new HashMap<>(); params.put("rid", roleId); params.put("pid", permissionId); TokenManager.clearUserAuthByUserId((String[]) userRoleMapper.findUserIdByRoleId(roleId).toArray()); return rolePermissionMapper.deleteByPrimaryKey(params); } @Override public int unbindUser(String roleId, String userId) { Map params = new HashMap<>(); params.put("rid", roleId); params.put("uid", userId); TokenManager.clearUserAuthByUserId(new String[] { userId }); return 0; } @Override public int insert(Role record, List permissions) { Date now = new Date(); if (record.getId() != null) { List rps = new ArrayList<>(); rolePermissionMapper.deleteByRid(record.getId()); for (String pid : permissions) { rps.add(new RolePermission(record.getId(), pid)); } if (!rps.isEmpty()) { rolePermissionMapper.insertBatch(rps); } List ids = userRoleMapper.findUserIdByRoleId(record.getId()); TokenManager.clearUserAuthByUserId(ids.toArray(new String[ids.size()])); }else { record.setId(UUID.randomUUID().toString()); } record.getId(); record.setCreater("管理员"); record.setCreateTime(now); return roleMapper.insert(record); } @Override public List selectRolePList(String id) { List list=roleMapper.selectRolePList(id); return list; } @Override public int addResources(String rid, String resources) { List list = Arrays.asList(resources.split(",")); RoleResources rr=new RoleResources(); if (roleResourcesMapper.checkRid(rid)>0) { roleResourcesMapper.deleteResources(rid); } for (String s : list) { rr.setId(UUID.randomUUID().toString()); rr.setRoleId(rid); rr.setCreateTime(new Date()); try { rr.setResources(Integer.parseInt(s)); } catch (NumberFormatException e) { e.printStackTrace(); } roleResourcesMapper.insert(rr); } return 1; } @Override public int updatedimission(String aid, String transferId) { List list=roleResourcesMapper.selectAdminRoleResources(aid); if (list.isEmpty()||list.get(0)==null) { throw new BusinessException(new Error("","用户角色资源不存在")); } Date date=new Date(); Admin admin=adminMapper.selectAllByid(aid); Admin tadmin=adminMapper.selectAllByid(transferId); for (Integer s : list) { if (s==roleResources.YXKH.getCode()) { userTransferLogMapper.insertUserLog(aid,transferId,date); roleResourcesMapper.updateLockRelease("0",aid,transferId);//将用户锁转给指定人 userBusinessMapper.updateDimissionTransfer(aid,transferId); organizationContactBookMapper.updateDimissionTransfer(aid,transferId); //所有客户转交给接受者 userMapper.updateDimissionTransfer(aid,transferId); } if (s==roleResources.QDYW.getCode()) { userTransferLogMapper.insertUserLockLog(aid,transferId,date); patentNewMapper.updateAdmin(aid,transferId); roleResourcesMapper.updateLockRelease("1",aid,transferId);//将业务锁转给指定人 } if (s == roleResources.YQDD.getCode()) { StringBuffer str=new StringBuffer(); str.append(admin.getName()).append("离职转交到").append(tadmin.getName()); tOrderLogMapper.insertOrderLog(aid,TokenManager.getAdminId(),date,str.toString()); tOrderNewMapper.updateSalesmanId(aid, transferId); tOrderMidMapper.updateSalesmanId(aid, transferId); } if (s == roleResources.XMRW.getCode()) { // 获取被转角色判断修改对应任务角色 pushTechTransfer(aid,transferId,date,admin,tadmin); } if (s!=roleResources.QDYW.getCode()) { roleResourcesMapper.updateDimissionTransfer(s,aid,transferId); } } return 1; } public void pushTechTransfer(String aid, String transferId,Date date,Admin admin,Admin tadmin) { //获取旧人员与新人员的角色 int useType=getTech(aid); int newType=getTech(transferId); //如果不是咨询或者经理不走项目转交 if(useType!=-1&&newType!=-1){ //获取所有需要修改角色的变更项目 List list = tOrderTaskMapper.selectByAid(aid); if ((useType==0&&newType==0)||(useType==1&&newType==1)){ tOrderTaskMapper.updateDimissionTransfer(aid, transferId, useType); orderExamineMapper.updateDimissionTransfer(aid, transferId,useType); }else if (useType==0&&newType==1){//下转上 下清空 tOrderTaskMapper.updateDimissionTransfer(aid, transferId, 3); orderExamineMapper.updateDimissionTransfer(aid, transferId,newType); orderExamineMapper.deleteByAidAndStatus(null,aid,useType); }else if (useType==1&&newType==0){//上转下 上清空 tOrderTaskMapper.updateDimissionTransfer(aid, transferId, 4); orderExamineMapper.updateDimissionTransfer(aid, transferId,newType); orderExamineMapper.deleteByAidAndStatus(null,aid,useType); } List clist=new ArrayList<>(); for (TChangeTask tct : list) { TChangeTask nt = new TChangeTask(); tct.setId(tct.getId()); tct.setReceiverName(tadmin.getName()); tChangeTaskMapper.updateByPrimaryKeySelective(tct); if (!clist.contains(tct.getCid()))clist.add(tct.getCid()); } for (Integer i : clist) { NewOrderChangeBo changeBo = newOrderChangeMapper.selectById(i); int x=1; if (changeBo.getProcessState()== OrderChangeProcess.JSY.getCode()){ x=orderExamineMapper.checkCountStatus(changeBo.getOrderNo(), 0,0); }else if (changeBo.getProcessState()==OrderChangeProcess.JSJL.getCode()){ x=orderExamineMapper.checkCountStatus(changeBo.getOrderNo(), 1,0); } if (x==0){ OrderChangeLog log=new OrderChangeLog(); log.setChangeId(i); log.setCreateTime(date); log.setOrderNo(changeBo.getOrderNo()); log.setStatus(2); log.setRemarks("离职转交自动通过"); log.setAuditor("1"); orderChangeLogMapper.insertSelective(log); changeBo.setProcessState(changeBo.getProcessState()+1); newOrderChangeMapper.updateByPrimaryKeySelective(changeBo); } } newOrderChangeMapper.updateTaskExamineName(aid,transferId,OrderChangeProcess.JSY.getCode()); newOrderChangeMapper.updateTaskExamineName(aid,transferId,OrderChangeProcess.JSJL.getCode()); taskAttributionLogMapper.insertList(aid, transferId, date); tTaskLogMapper.updateDimissionTransfer(aid, transferId); } } /** * 判断角色 * @param transferId * @return 0咨询师 1经理 -1非咨询角色 */ private int getTech(String transferId) { List l=adminMapper.getAdminRoleListByAid(transferId); for (String str : l) { if (str==null){ break; }else if (str.equals(AFTConstants.TECH_MANAGER)) { return 1; }else if (str.equals(AFTConstants.TECH)){ return 0; } } return -1; } @Override public List ResourcesDetail(String rid) { return roleResourcesMapper.selectByRid(rid); } }