package com.goafanti.common.utils; import java.io.UnsupportedEncodingException; import java.util.*; import javax.mail.MessagingException; import com.goafanti.admin.bo.AdminListBo; import com.goafanti.common.bo.OrderExamineBo; import com.goafanti.common.bo.OrderOperator; import com.goafanti.common.constant.AFTConstants; import com.goafanti.common.dao.*; import com.goafanti.common.enums.NoticeStatus; import com.goafanti.common.model.*; import com.goafanti.core.shiro.token.TokenManager; import com.goafanti.order.bo.NewOrderChangeBo; import com.goafanti.order.bo.TOrderNewBo; import com.goafanti.order.enums.OrderChangeProcess; import com.goafanti.order.enums.OrderChangeType; import com.goafanti.order.enums.ProcessStatus; import com.goafanti.organization.bo.OrganizationListOut; import org.apache.ibatis.annotations.Param; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import com.goafanti.common.bo.EmailBo; import com.goafanti.common.enums.NoticeTypes; @Component @Async public class AsyncUtils { @Autowired private NoticeMapper noticeMapper; @Autowired private AdminMapper adminMapper; @Autowired private TOrderNewMapper tOrderNewMapper; @Autowired private TOrderTaskMapper tOrderTaskMapper; @Autowired private NewOrderChangeMapper newOrderChangeMapper; @Autowired private OrderExamineMapper orderExamineMapper; @Autowired private TaskAttributionLogMapper taskAttributionLogMapper; @Autowired private TTaskLogMapper tTaskLogMapper; @Autowired private DepartmentMapper departmentMapper; @Autowired private OrderChangeLogMapper orderChangeLogMapper; @Autowired private TChangeTaskMapper tChangeTaskMapper; @Autowired private RoleMapper roleMapper; public void patentSend(EmailBo bo) throws UnsupportedEncodingException, MessagingException { SendEmailUtil.getInstance().patentSend(bo); } public void sendList(List list) throws MessagingException, UnsupportedEncodingException { for (EmailBo emailBo : list) { SendEmailUtil.getInstance().patentSend(emailBo); } } public void send(EmailBo bo){ try { SendEmailUtil.getInstance().send(bo); } catch (UnsupportedEncodingException | MessagingException e) { e.printStackTrace(); } } public void addNotice(Notice n ) { n.setType(NoticeTypes.getType(n.getNoticeType())); noticeMapper.insertSelective(n); } public void addNotic(Integer type, String aid,String str) { Notice n =new Notice(); n.setId(UUID.randomUUID().toString()); n.setAid(aid); n.setNoticeType(type); n.setContent(str); n.setReaded(0);//未读 addNotice(n); } public void addNoticAndEmail(Notice n) { n.setType(NoticeTypes.getType(n.getNoticeType())); AdminListBo a = adminMapper.getDeptNameByAid(n.getAid()); EmailBo bo=new EmailBo(NoticeStatus.getStatus(n.getNoticeType()).getDesc(),a.getEmail(),n.getContent()) ; noticeMapper.insertSelective(n); if (StringUtils.isNotBlank(bo.getAddress())){ send(bo); } } /** * * @param aid 通知对象 * @param noticeType 通知类型 * @param content 通知内容 */ public void addNoticAndEmail(String aid,Integer noticeType,String content) { Notice n=new Notice(); n.setId(UUID.randomUUID().toString()); n.setAid(aid); n.setNoticeType(noticeType); n.setContent(content); n.setReaded(0); n.setType(NoticeTypes.getType(n.getNoticeType())); addNoticAndEmail(n); } public void addNoticeBatch(List ln) { List newList=new ArrayList(); if (ln != null && ln.size() > 0) { for (int i = 0; i < ln.size(); i++) { ln.get(i).setType(NoticeTypes.getType(ln.get(i).getNoticeType())); newList.add(ln.get(i)); if (50 == newList.size() || i == ln.size() - 1) { if (newList.size() > 0) noticeMapper.insertBatch(newList); newList.clear(); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } } } } public void batchUpdateUnreaded(List dl) { noticeMapper.batchUpdateUnreaded(dl); } /** * * @param type 发送对象 0发起营销管理员 1 完成通知所有人 2拒绝发送给营销员 * @param sotpType 发送对象 类型 0=项目暂停,1=项目重启 * */ public void addProjectSotpNotic(Integer type, Integer sotpType, String ids, TOrderTask task) { Integer noticeType=0; if (task==null)task = tOrderTaskMapper.selectByPrimaryKey(Integer.valueOf(ids.split(",")[0])); TOrderNewBo tOrderNew = tOrderNewMapper.getOrderNewDetail(task.getOrderNo()); List notes=new ArrayList<>(); StringBuffer emails=new StringBuffer(); if (type==0){ noticeType=sotpType==0?NoticeStatus.PROJECT_SOPT_START.getCode() :NoticeStatus.PROJECT_RENEW_START.getCode(); String str=String.format("客户名称[%s]订单编号[%s]项目编号[%s],请及时审核。",tOrderNew.getUserName(),task.getOrderNo(),ids); List admins = adminMapper.listAdminBydepIdAndRoleType(tOrderNew.getOrderDep(),AFTConstants.SALESMAN_ADMIN); for (Admin admin : admins) { addNotic( noticeType,admin.getId(), str); send(new EmailBo(NoticeStatus.getValueByCode(noticeType),admin.getEmail(),str)); } }else if(type==1){ String str=String.format("客户名称[%s]订单编号[%s]项目编号[%s],已%s请悉知。",tOrderNew.getUserName(),task.getOrderNo(),task.getId(),sotpType==1?"重启":"暂停"); noticeType=sotpType==0?NoticeStatus.PROJECT_SOPT_YES.getCode() :NoticeStatus.PROJECT_RENEW_YES.getCode(); OrderOperator orderOperator = tOrderTaskMapper.selectAidByParam(task.getId()); Listaids=new ArrayList<>(); if (orderOperator.getSalesmanId()!=null&&!aids.contains(orderOperator.getFinanceId())){ aids.add(orderOperator.getSalesmanId()); } if (task.getConsultantId()!=null&&!aids.contains(task.getConsultantId())){ aids.add(task.getConsultantId()); } if (task.getManagerId()!=null&&!aids.contains(task.getManagerId())){ aids.add(task.getManagerId()); } if (orderOperator.getFinanceId()!=null&&!aids.contains(orderOperator.getFinanceId())){ aids.add(orderOperator.getFinanceId()); } List cwgly = adminMapper.selectAdminByRoleType(AFTConstants.FINANCE_ADMIN); for (Admin admin : cwgly) { if (!aids.contains(admin.getId())){ aids.add(admin.getId()); } } List zxsgly = adminMapper.selectAdminByRoleType(AFTConstants.TECH_ADMIN); for (Admin admin : zxsgly) { if (!aids.contains(admin.getId())){ aids.add(admin.getId()); } } List zc = adminMapper.selectAdminByRoleType(AFTConstants.CED); for (Admin admin : zc) { if (!aids.contains(admin.getId())){ aids.add(admin.getId()); } } List dsz = adminMapper.selectAdminByRoleType(AFTConstants.APPROVAL_DECISION); for (Admin admin : dsz) { if (!aids.contains(admin.getId())){ aids.add(admin.getId()); } } if (!aids.isEmpty()){ for (String aid : aids) { pushParam( aid, noticeType, str, notes, emails); } } noticeMapper.insertBatch(notes); send(new EmailBo(NoticeStatus.getValueByCode(noticeType),emails.substring(0,emails.length()-1),str)); }else if (type==2){ noticeType=sotpType==0?NoticeStatus.PROJECT_SOPT_NO.getCode() :NoticeStatus.PROJECT_RENEW_NO.getCode(); String str=String.format("客户名称[%s]订单编号[%s]项目编号[%s],已经被驳回。",tOrderNew.getUserName(),task.getOrderNo(),task.getId()); if (tOrderNew.getSalesmanId()!=null){ Admin admin = adminMapper.selectByPrimaryKey(tOrderNew.getSalesmanId()); addNotic( noticeType,admin.getId(), str); send(new EmailBo(NoticeStatus.getValueByCode(noticeType),admin.getEmail(),str)); } } } private void pushParam(String id, Integer noticeType, String str, List notes, StringBuffer emails) { Admin admin = adminMapper.selectByPrimaryKey(id); pushParam(admin,noticeType,str,notes,emails); } private void pushParam(Admin admin, Integer noticeType, String str, List notes, StringBuffer emails) { notes.add(new Notice(UUID.randomUUID().toString(), new Date(), 0, admin.getId(), noticeType, str)); if (admin!=null &&StringUtils.isNotBlank(admin.getEmail())) { if (!emails.toString().contains(admin.getEmail())){ emails = emails.append(admin.getEmail()).append(","); } } } /** * @param date 日期 * @param admin 原本管理员 * @param tadmin 转交管理员 */ public void pushTechTransfer(Admin admin,Admin tadmin,Date date) { //获取旧人员与新人员的角色 List useType=adminMapper.getAdminRoleListByAid(admin.getId()); List newType=adminMapper.getAdminRoleListByAid(tadmin.getId()); String aid=admin.getId(); String transferId=tadmin.getId(); if (useType.contains(AFTConstants.TECH)&&newType.contains(AFTConstants.TECH)){ //System.out.println("同咨询师"); List list = newOrderChangeMapper.selectProcess(3, aid); tOrderTaskMapper.updateDimissionTransfer(aid, transferId, 0); orderExamineMapper.updateDimissionTransfer(aid, transferId,0); pushChangeProcessZXS(list); }else if (useType.contains(AFTConstants.TECH)&&newType.contains(AFTConstants.TECH_MANAGER)){ // System.out.println("不同职业"); List list = newOrderChangeMapper.selectProcess(3, aid); tOrderTaskMapper.updateDimissionTransfer(aid, transferId, 3); orderExamineMapper.updateDimissionTransfer(aid, transferId,3); List list2 = newOrderChangeMapper.selectProcess(4, transferId); //如果转交后订单全通过了,则变更+1 pushChangeProcessZXS(list); pushChangeProcessZXSJL(list2); } if (useType.contains(AFTConstants.TECH_MANAGER)&&newType.contains(AFTConstants.TECH_MANAGER)){ // System.out.println("同咨询师经理"); List list = newOrderChangeMapper.selectProcess(4, aid); tOrderTaskMapper.updateDimissionTransfer(aid, transferId, 1); tOrderTaskMapper.updateDimissionTransferManager(aid, transferId); orderExamineMapper.updateDimissionTransfer(aid, transferId,1); pushChangeProcessZXSJL(list); }else if (useType.contains(AFTConstants.TECH_MANAGER)&&newType.contains(AFTConstants.TECH)){ // System.out.println("不同职业"); //获取转交前的 List list = newOrderChangeMapper.selectProcess(4, aid); tOrderTaskMapper.updateDimissionTransfer(aid, transferId, 4); tOrderTaskMapper.updateDimissionTransferManager(aid, null); orderExamineMapper.updateDimissionTransfer(aid, transferId,4); List list2 = newOrderChangeMapper.selectProcess(3, transferId); pushChangeProcessZXSJL(list); pushChangeProcessZXS(list2); } taskAttributionLogMapper.insertList(aid, transferId, date); tTaskLogMapper.updateDimissionTransfer(aid, transferId); } private void pushChangeProcessZXSJL(List list) { if(!list.isEmpty()){ Date date =new Date(); for (Integer i : list) { NewOrderChangeBo changeBo = newOrderChangeMapper.selectById(i); pushZXSJL(changeBo,date,1); pushOrderCangeProcess(changeBo); newOrderChangeMapper.updateByPrimaryKeySelective(changeBo); } } } public void pushZXS(NewOrderChangeBo nb, Date date,Integer type) { int zxs=orderExamineMapper.checkCountStatus(nb.getOrderNo(),0,null); if (zxs>0){ nb.setProcessState(OrderChangeProcess.JSY.getCode()); }else { if(type==1){ date.setTime(date.getTime()+100); addOrderChangeLog("无咨询师自动通过", 2, nb.getOrderNo(), nb.getId(), date); } pushZXSJL(nb,date,1); } } public void pushZXSJL(NewOrderChangeBo nb,Date date,Integer type) { int zxsjl=orderExamineMapper.checkCountStatus(nb.getOrderNo(),1,0); if (nb.getType()== OrderChangeType.XMJJEBG.getCode()|| nb.getType()==OrderChangeType.TDTK.getCode()|| nb.getType()==OrderChangeType.TDBTK.getCode()|| nb.getType()==OrderChangeType.CB.getCode()|| nb.getType()==OrderChangeType.JXMBG.getCode()){ if (zxsjl>0){ nb.setProcessState(OrderChangeProcess.JSJL.getCode()); }else { if (type==1){ date.setTime(date.getTime()+100); addOrderChangeLog("无咨询师经理自动通过", 2, nb.getOrderNo(), nb.getId(),date); } //重报 没有技术员跳入财务 if (nb.getType()==OrderChangeType.CB.getCode()){ nb.setProcessState(OrderChangeProcess.CWZY.getCode()); //项目变更没有跳入技术总监 }else{ nb.setProcessState(OrderChangeProcess.JSZJ.getCode()); } } } } private void addOrderChangeLog(String remarks, Integer status, String orderNo, Integer id,Date date) { if (date ==null)date=new Date(); OrderChangeLog ocl = new OrderChangeLog(); ocl.setAuditor(TokenManager.getAdminId()); ocl.setOrderNo(orderNo); ocl.setRemarks(remarks); ocl.setChangeId(id); ocl.setStatus(status); ocl.setCreateTime(date); orderChangeLogMapper.insertSelective(ocl); } private void pushChangeProcessZXS(List list) { if(!list.isEmpty()){ Date date =new Date(); for (Integer i : list) { NewOrderChangeBo changeBo = newOrderChangeMapper.selectById(i); pushZXS(changeBo,date,1); pushOrderCangeProcess(changeBo); newOrderChangeMapper.updateByPrimaryKeySelective(changeBo); } } } public void pushOrderCangeProcess(NewOrderChange noc) { if (noc.getProcessState()== OrderChangeProcess.YXY.getCode()){ TOrderNewBo ton = tOrderNewMapper.getSaleIdByOno(noc.getOrderNo()); noc.setExamineName(ton.getSalesmanName()); }else if (noc.getProcessState()== OrderChangeProcess.YXJL.getCode()){ TOrderNewBo ton = tOrderNewMapper.getSaleIdByOno(noc.getOrderNo()); Admin saleman = adminMapper.selectByPrimaryKey(ton.getSalesmanId()); Admin manager = adminMapper.selectByPrimaryKey(saleman.getManagerId()); noc.setExamineName(manager.getName()); }else if (noc.getProcessState()== OrderChangeProcess.YXGLY.getCode()){ TOrderNewBo ton = tOrderNewMapper.getSaleIdByOno(noc.getOrderNo()); StringBuffer str=new StringBuffer(); List admins = adminMapper.listAdminBydepIdAndRoleType(ton.getOrderDep(),AFTConstants.SALESMAN_ADMIN); if (admins.isEmpty()){ OrganizationListOut dep = departmentMapper.selectAllById(ton.getOrderDep()); admins = adminMapper.listAdminBydepIdAndRoleType(dep.getSuperId(),AFTConstants.SALESMAN_ADMIN); } for (Admin admin : admins) { if (!str.toString().contains(admin.getName()))str.append(admin.getName()).append(","); } if (str.length()>0)noc.setExamineName(str.substring(0,str.length()-1)); }else if (noc.getProcessState()== OrderChangeProcess.JSY.getCode()){ List os = orderExamineMapper.selectByOrderNo(noc.getOrderNo(), 0); StringBuffer str=new StringBuffer(); for (OrderExamineBo o : os) { if (o.getStatus()==0){ if (!str.toString().contains(o.getName()))str.append(o.getName()).append(","); } } if (str.length()>0)noc.setExamineName(str.substring(0,str.length()-1)); }else if (noc.getProcessState()== OrderChangeProcess.JSJL.getCode()){ List os = orderExamineMapper.selectByOrderNo(noc.getOrderNo(), 1); StringBuffer str=new StringBuffer(); for (OrderExamineBo o : os) { if (o.getStatus()==0){ if (!str.toString().contains(o.getName()))str.append(o.getName()).append(","); } } if (str.length()>0)noc.setExamineName(str.substring(0,str.length()-1)); }else if (noc.getProcessState()== OrderChangeProcess.JSZJ.getCode()){ StringBuffer str=new StringBuffer(); List admins = adminMapper.getAdminRoleTypeList(AFTConstants.TECH_ADMIN); for (Admin a : admins) { str=str.append(a.getName()).append(","); } if (str.length()>0)noc.setExamineName(str.substring(0,str.length()-1)); }else if (noc.getProcessState()== OrderChangeProcess.CWZY.getCode()){ TOrderNewBo ton = tOrderNewMapper.getSaleIdByOno(noc.getOrderNo()); OrganizationListOut dep = departmentMapper.selectAllById(ton.getOrderDep()); noc.setExamineName(dep.getFinanceName()); }else if (noc.getProcessState()== OrderChangeProcess.CWZJ.getCode()){ StringBuffer str=new StringBuffer(); List admins = adminMapper.getAdminRoleTypeList(AFTConstants.FINANCE_ADMIN); for (Admin a : admins) { str=str.append(a.getName()).append(","); } if (str.length()>0)noc.setExamineName(str.substring(0,str.length()-1)); }else if (noc.getProcessState()== OrderChangeProcess.ZC.getCode()||noc.getProcessState()== OrderChangeProcess.DSZ.getCode()){ if(noc.getStatus()==2){ TOrderNewBo ton = tOrderNewMapper.getSaleIdByOno(noc.getOrderNo()); OrganizationListOut dep = departmentMapper.selectAllById(ton.getOrderDep()); noc.setExamineName(dep.getFinanceName()); }else { noc.setExamineName(""); } } } /** * 处理修改角色对于订单、变更审核人员的修改 * @param ad * @param usead * @param roleIds */ public void pushRoleUpdateExamine(Admin ad, Admin usead, List roleIds, List useRole) { List roles = roleMapper.selectByIdList(roleIds); updateExamineByRole(ad, usead, useRole, roles,AFTConstants.SALESMAN_MANAGER); updateExamineByRole(ad, usead, useRole, roles,AFTConstants.SALESMAN_ADMIN); updateExamineByRole(ad, usead, useRole, roles,AFTConstants.TECH_ADMIN); updateExamineByRole(ad, usead, useRole, roles,AFTConstants.FINANCE); updateExamineByRole(ad, usead, useRole, roles,AFTConstants.FINANCE_ADMIN); updateExamineByRole(ad, usead, useRole, roles,AFTConstants.SALESMAN_ADMIN); } private void updateExamineByRole(Admin ad, Admin usead, List useRole, List roles, String roleType) { boolean updateParam=false; int updatedep =0; if (!ad.getName().equals(usead.getName())){ updateParam=true; } boolean newDEP=Rolescontains(roles,roleType); boolean useDep=Rolescontains(useRole,roleType); if (roleType.equals(AFTConstants.SALESMAN_ADMIN)){ if (ad.getDepartmentId().equals(usead.getDepartmentId())){ updatedep=1; }else{ updatedep=2; } if (newDEP&&useDep){ //新旧为同一个,修改当前就可以了 if (updatedep ==1&& updateParam){ updateOrderAndChangeExamine(ad, roleType); //新旧不是同一个,俩个都要修改 }else if (updatedep ==2){ updateOrderAndChangeExamine(ad, roleType); updateOrderAndChangeExamine(usead, roleType); } }else if (newDEP&&!useDep){ updateOrderAndChangeExamine(ad, roleType); }else if (!newDEP&&useDep){ updateOrderAndChangeExamine(usead, roleType); } }else { if (updateParam){ updateOrderAndChangeExamine(ad, roleType); } } } private boolean Rolescontains(List roles, String roleType) { for (Role role : roles) { if (role.getRoleType().equals(roleType)){ return true; } } return false; } /** * * @param ad * @param roleType */ public void updateOrderAndChangeExamine(Admin ad, String roleType) { if (roleType.equals(AFTConstants.SALESMAN_ADMIN)){ tOrderNewMapper.updateExamine(ad.getDepartmentId()); newOrderChangeMapper.updateExamineName(ad.getDepartmentId()); }else if (roleType.equals(AFTConstants.SALESMAN_MANAGER)){ // 订单 0=营销员,1=经理,2=营销管理员,3=财务专员,4=总裁,5=技术总监,6部分分配,7全部分配 // 变更 流程状态 0=营销员,1=营销经理,2=营销管理员,3=技术员,4=技术经理,5=技术总监,6=财务专员,7=财务总监,8=总裁,9=董事长 tOrderNewMapper.updateExamineById(ad.getId(),1); newOrderChangeMapper.updateExamineById(ad.getId(),1); }else if (roleType.equals(AFTConstants.FINANCE)){ tOrderNewMapper.updateExamineById(ad.getId(),3); newOrderChangeMapper.updateExamineById(ad.getId(),3); }else if (roleType.equals(AFTConstants.TECH_ADMIN)) { tOrderNewMapper.updateExamineById(null, 5); newOrderChangeMapper.updateExamineById(null, 5); }else if (roleType.equals(AFTConstants.FINANCE_ADMIN)) { newOrderChangeMapper.updateExamineById(null, 7); } } }