AsyncUtils.java 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835
  1. package com.goafanti.common.utils;
  2. import com.goafanti.admin.bo.AdminListBo;
  3. import com.goafanti.common.bo.EmailBo;
  4. import com.goafanti.common.bo.OrderExamineBo;
  5. import com.goafanti.common.bo.OrderOperator;
  6. import com.goafanti.common.constant.AFTConstants;
  7. import com.goafanti.common.dao.*;
  8. import com.goafanti.common.enums.NoticeStatus;
  9. import com.goafanti.common.enums.NoticeTypes;
  10. import com.goafanti.common.error.BusinessException;
  11. import com.goafanti.common.model.*;
  12. import com.goafanti.core.shiro.token.TokenManager;
  13. import com.goafanti.order.bo.NewOrderChangeBo;
  14. import com.goafanti.order.bo.TOrderNewBo;
  15. import com.goafanti.order.bo.TOrderTaskBo;
  16. import com.goafanti.order.enums.NewProjectStatus;
  17. import com.goafanti.order.enums.OrderChangeProcess;
  18. import com.goafanti.order.enums.OrderChangeType;
  19. import com.goafanti.order.enums.ProcessStatus;
  20. import com.goafanti.organization.bo.OrganizationListOut;
  21. import org.springframework.scheduling.annotation.Async;
  22. import org.springframework.stereotype.Component;
  23. import javax.annotation.Resource;
  24. import javax.mail.MessagingException;
  25. import java.io.UnsupportedEncodingException;
  26. import java.math.BigDecimal;
  27. import java.math.RoundingMode;
  28. import java.util.ArrayList;
  29. import java.util.Date;
  30. import java.util.List;
  31. import java.util.UUID;
  32. @Component
  33. @Async
  34. public class AsyncUtils {
  35. @Resource
  36. private NoticeMapper noticeMapper;
  37. @Resource
  38. private AdminMapper adminMapper;
  39. @Resource
  40. private TOrderNewMapper tOrderNewMapper;
  41. @Resource
  42. private TOrderTaskMapper tOrderTaskMapper;
  43. @Resource
  44. private NewOrderChangeMapper newOrderChangeMapper;
  45. @Resource
  46. private OrderExamineMapper orderExamineMapper;
  47. @Resource
  48. private TaskAttributionLogMapper taskAttributionLogMapper;
  49. @Resource
  50. private TTaskLogMapper tTaskLogMapper;
  51. @Resource
  52. private DepartmentMapper departmentMapper;
  53. @Resource
  54. private OrderChangeLogMapper orderChangeLogMapper;
  55. @Resource
  56. private TOrderMidMapper tOrderMidMapper;
  57. @Resource
  58. private RoleMapper roleMapper;
  59. @Resource
  60. private ExpenseAccountMapper expenseAccountMapper;
  61. @Resource
  62. private TOrderInvoiceMapper tOrderInvoiceMapper;
  63. @Resource
  64. private TTaskMemberMapper tTaskMemberMapper;
  65. @Resource
  66. private TOrderPaymentMapper tOrderPaymentMapper;
  67. @Resource
  68. private FinanceCountMapper financeCountMapper;
  69. @Resource
  70. private WeChatUtils weChatUtils;
  71. @Resource
  72. private AdminProjectStatisticsMapper adminProjectStatisticsMapper;
  73. public void patentSend(EmailBo bo) throws UnsupportedEncodingException, MessagingException {
  74. SendEmailUtil.getInstance().patentSend(bo);
  75. }
  76. public void patentSend(List<EmailBo> list) {
  77. try {
  78. for (EmailBo emailBo : list) {
  79. SendEmailUtil.getInstance().patentSend(emailBo);
  80. }
  81. } catch (MessagingException | UnsupportedEncodingException e) {
  82. e.printStackTrace();
  83. }
  84. }
  85. public void sendList(List<EmailBo> list) {
  86. try {
  87. for (EmailBo emailBo : list) {
  88. SendEmailUtil.getInstance().send(emailBo);
  89. LoggerUtils.debug(getClass(),String.format("=============发送邮件==>%s===>%s",emailBo.getSubject(),emailBo.getAddress()));
  90. }
  91. } catch (MessagingException | UnsupportedEncodingException e) {
  92. e.printStackTrace();
  93. }
  94. }
  95. /**
  96. * 发送邮件
  97. * @param bo 邮件信息
  98. */
  99. public void send(EmailBo bo){
  100. try {
  101. if (bo.getAddress()==null){
  102. LoggerUtils.debug(getClass(),"邮件发送失败,发送地址不纯在");
  103. }else {
  104. SendEmailUtil.getInstance().send(bo);
  105. LoggerUtils.debug(getClass(),String.format("====================" +
  106. "邮件发送成功,地址={%s},类型={%s}",bo.getAddress(),bo.getSubject()));
  107. }
  108. } catch (UnsupportedEncodingException | MessagingException e) {
  109. LoggerUtils.error(getClass(),"邮件发送错误");
  110. }
  111. }
  112. public void addNotice(Notice n ) {
  113. n.setType(NoticeTypes.getType(n.getNoticeType()));
  114. noticeMapper.insertSelective(n);
  115. }
  116. public void addNotic(Integer type, String aid,String str) {
  117. Notice n =new Notice();
  118. n.setId(UUID.randomUUID().toString());
  119. n.setAid(aid);
  120. n.setNoticeType(type);
  121. n.setContent(str);
  122. n.setReaded(0);//未读
  123. addNotice(n);
  124. }
  125. /**
  126. *
  127. * @param type NoticeStatus的类型
  128. * @param aid 接受者编号
  129. * @param str 推送信息
  130. */
  131. public void addNoticAndEmail(Integer type, String aid,String str) {
  132. Notice n =new Notice();
  133. n.setId(UUID.randomUUID().toString());
  134. n.setAid(aid);
  135. n.setNoticeType(type);
  136. n.setContent(str);
  137. n.setReaded(0);//未读
  138. addNoticAndEmail(n);
  139. }
  140. public void addNoticAndEmail(Notice n) {
  141. n.setType(NoticeTypes.getType(n.getNoticeType()));
  142. AdminListBo a = adminMapper.getDeptNameByAid(n.getAid());
  143. EmailBo bo=new EmailBo(NoticeStatus.getStatus(n.getNoticeType()).getDesc(),a.getEmail(),n.getContent()) ;
  144. noticeMapper.insertSelective(n);
  145. if (StringUtils.isNotBlank(bo.getAddress())){
  146. send(bo);
  147. }
  148. }
  149. /**
  150. *
  151. * @param aid 通知对象
  152. * @param noticeType 通知类型
  153. * @param content 通知内容
  154. */
  155. public void addNoticAndEmail(String aid,Integer noticeType,String content) {
  156. Notice n=new Notice();
  157. n.setId(UUID.randomUUID().toString());
  158. n.setAid(aid);
  159. n.setNoticeType(noticeType);
  160. n.setContent(content);
  161. n.setReaded(0);
  162. n.setType(NoticeTypes.getType(n.getNoticeType()));
  163. addNoticAndEmail(n);
  164. }
  165. public void addNoticeBatch(List<Notice> ln) {
  166. List<Notice> newList=new ArrayList<Notice>();
  167. if (ln != null && ln.size() > 0) {
  168. for (int i = 0; i < ln.size(); i++) {
  169. ln.get(i).setType(NoticeTypes.getType(ln.get(i).getNoticeType()));
  170. newList.add(ln.get(i));
  171. if (50 == newList.size() || i == ln.size() - 1) {
  172. if (newList.size() > 0) noticeMapper.insertBatch(newList);
  173. for (Notice e : newList) {
  174. LoggerUtils.debug(getClass(),String.format("=============发送站内信==>%s===>%s",NoticeStatus.getValueByCode(e.getNoticeType()),e.getContent()));
  175. }
  176. newList.clear();
  177. try {
  178. Thread.sleep(2000);
  179. } catch (InterruptedException e) {
  180. e.printStackTrace();
  181. }
  182. }
  183. }
  184. }
  185. }
  186. public void batchUpdateUnreaded(List<String> dl) {
  187. noticeMapper.batchUpdateUnreaded(dl);
  188. }
  189. /**
  190. *
  191. * @param type 发送对象 0发起营销管理员 1 完成通知所有人 2拒绝发送给营销员
  192. * @param sotpType 发送对象 类型 0=项目暂停,1=项目重启
  193. *
  194. */
  195. public void addProjectSotpNotic(Integer type, Integer sotpType, String ids, TOrderTask task) {
  196. Integer noticeType=0;
  197. if (task==null)task = tOrderTaskMapper.queryById(Integer.valueOf(ids.split(",")[0]));
  198. TOrderNewBo tOrderNew = tOrderNewMapper.getOrderNewDetail(task.getOrderNo());
  199. List<Notice> notes=new ArrayList<>();
  200. StringBuffer emails=new StringBuffer();
  201. if (type==0){
  202. noticeType=sotpType==0?NoticeStatus.PROJECT_SOPT_START.getCode() :NoticeStatus.PROJECT_RENEW_START.getCode();
  203. String str=String.format("客户名称[%s]订单编号[%s]项目编号[%s],请及时审核。",tOrderNew.getUserName(),task.getOrderNo(),ids);
  204. List<Admin> admins = adminMapper.listAdminBydepIdAndRoleType(tOrderNew.getOrderDep(),AFTConstants.SALESMAN_ADMIN);
  205. for (Admin admin : admins) {
  206. addNotic( noticeType,admin.getId(), str);
  207. send(new EmailBo(NoticeStatus.getValueByCode(noticeType),admin.getEmail(),str));
  208. }
  209. }else if(type==1){
  210. String str=String.format("客户名称[%s]订单编号[%s]项目编号[%s],已%s请悉知。",tOrderNew.getUserName(),task.getOrderNo(),task.getId(),sotpType==1?"重启":"暂停");
  211. noticeType=sotpType==0?NoticeStatus.PROJECT_SOPT_YES.getCode() :NoticeStatus.PROJECT_RENEW_YES.getCode();
  212. OrderOperator orderOperator = tOrderTaskMapper.selectAidByParam(task.getId());
  213. List<String >aids=new ArrayList<>();
  214. if (orderOperator.getSalesmanId()!=null&&!aids.contains(orderOperator.getFinanceId())){
  215. aids.add(orderOperator.getSalesmanId());
  216. }
  217. if (task.getConsultantId()!=null&&!aids.contains(task.getConsultantId())){
  218. aids.add(task.getConsultantId());
  219. }
  220. if (task.getManagerId()!=null&&!aids.contains(task.getManagerId())){
  221. aids.add(task.getManagerId());
  222. }
  223. if (orderOperator.getFinanceId()!=null&&!aids.contains(orderOperator.getFinanceId())){
  224. aids.add(orderOperator.getFinanceId());
  225. }
  226. List<Admin> cwgly = adminMapper.selectAdminByRoleType(AFTConstants.FINANCE_ADMIN);
  227. for (Admin admin : cwgly) {
  228. if (!aids.contains(admin.getId())){
  229. aids.add(admin.getId());
  230. }
  231. }
  232. List<Admin> zxsgly = adminMapper.selectAdminByRoleType(AFTConstants.TECH_ADMIN);
  233. for (Admin admin : zxsgly) {
  234. if (!aids.contains(admin.getId())){
  235. aids.add(admin.getId());
  236. }
  237. }
  238. List<Admin> zc = adminMapper.selectAdminByRoleType(AFTConstants.CED);
  239. for (Admin admin : zc) {
  240. if (!aids.contains(admin.getId())){
  241. aids.add(admin.getId());
  242. }
  243. }
  244. List<Admin> dsz = adminMapper.selectAdminByRoleType(AFTConstants.APPROVAL_DECISION);
  245. for (Admin admin : dsz) {
  246. if (!aids.contains(admin.getId())){
  247. aids.add(admin.getId());
  248. }
  249. }
  250. if (!aids.isEmpty()){
  251. for (String aid : aids) {
  252. pushParam( aid, noticeType, str, notes, emails);
  253. }
  254. }
  255. noticeMapper.insertBatch(notes);
  256. send(new EmailBo(NoticeStatus.getValueByCode(noticeType),emails.substring(0,emails.length()-1),str));
  257. }else if (type==2){
  258. noticeType=sotpType==0?NoticeStatus.PROJECT_SOPT_NO.getCode() :NoticeStatus.PROJECT_RENEW_NO.getCode();
  259. String str=String.format("客户名称[%s]订单编号[%s]项目编号[%s],已经被驳回。",tOrderNew.getUserName(),task.getOrderNo(),task.getId());
  260. if (tOrderNew.getSalesmanId()!=null){
  261. Admin admin = adminMapper.queryById(tOrderNew.getSalesmanId());
  262. addNotic( noticeType,admin.getId(), str);
  263. send(new EmailBo(NoticeStatus.getValueByCode(noticeType),admin.getEmail(),str));
  264. }
  265. }
  266. }
  267. private void pushParam(String id, Integer noticeType, String str, List<Notice> notes, StringBuffer emails) {
  268. Admin admin = adminMapper.queryById(id);
  269. pushParam(admin,noticeType,str,notes,emails);
  270. }
  271. private void pushParam(Admin admin, Integer noticeType, String str, List<Notice> notes, StringBuffer emails) {
  272. notes.add(new Notice(UUID.randomUUID().toString(), new Date(), 0, admin.getId(),
  273. noticeType, str));
  274. if (admin!=null &&StringUtils.isNotBlank(admin.getEmail())) {
  275. if (!emails.toString().contains(admin.getEmail())){
  276. emails = emails.append(admin.getEmail()).append(",");
  277. }
  278. }
  279. }
  280. /**
  281. * @param date 日期
  282. * @param admin 原本管理员
  283. * @param tadmin 转交管理员
  284. */
  285. public void pushTechTransfer(Admin admin,Admin tadmin,Date date) {
  286. //获取旧人员与新人员的角色
  287. List<String> useType=adminMapper.getAdminRoleListByAid(admin.getId());
  288. List<String> newType=adminMapper.getAdminRoleListByAid(tadmin.getId());
  289. List<String> useOrderNo=tOrderTaskMapper.selectOrderNoAllByaid(admin.getId());
  290. String aid=admin.getId();
  291. String transferId=tadmin.getId();
  292. if (useType.contains(AFTConstants.TECH)&&newType.contains(AFTConstants.TECH)){
  293. //System.out.println("同咨询师");
  294. List<Integer> list = newOrderChangeMapper.selectProcess(3, aid);
  295. tOrderTaskMapper.updateDimissionTransfer(aid, transferId, 0);
  296. orderExamineMapper.updateDimissionTransfer(aid, transferId,0,null);
  297. pushChangeProcessZXS(list);
  298. }else if (useType.contains(AFTConstants.TECH)&&newType.contains(AFTConstants.TECH_MANAGER)){
  299. // System.out.println("不同职业");
  300. List<Integer> list = newOrderChangeMapper.selectProcess(3, aid);
  301. tOrderTaskMapper.updateDimissionTransfer(aid, transferId, 3);
  302. orderExamineMapper.updateDimissionTransfer(aid, transferId,3,null);
  303. List<Integer> list2 = newOrderChangeMapper.selectProcess(4, transferId);
  304. //如果转交后订单全通过了,则变更+1
  305. pushChangeProcessZXS(list);
  306. pushChangeProcessZXSJL(list2);
  307. }
  308. if (useType.contains(AFTConstants.TECH_MANAGER)&&newType.contains(AFTConstants.TECH_MANAGER)){
  309. // System.out.println("同咨询师经理");
  310. List<Integer> list = newOrderChangeMapper.selectProcess(4, aid);
  311. tOrderTaskMapper.updateDimissionTransfer(aid, transferId, 1);
  312. tOrderTaskMapper.updateDimissionTransferManager(aid, transferId);
  313. orderExamineMapper.updateDimissionTransfer(aid, transferId,1,null);
  314. pushChangeProcessZXSJL(list);
  315. }else if (useType.contains(AFTConstants.TECH_MANAGER)&&newType.contains(AFTConstants.TECH)){
  316. // System.out.println("不同职业");
  317. //获取转交前的
  318. List<Integer> list = newOrderChangeMapper.selectProcess(4, aid);
  319. tOrderTaskMapper.updateDimissionTransfer(aid, transferId, 4);
  320. tOrderTaskMapper.updateDimissionTransferManager(aid, null);
  321. orderExamineMapper.updateDimissionTransfer(aid, transferId,4,null);
  322. List<Integer> list2 = newOrderChangeMapper.selectProcess(3, transferId);
  323. pushChangeProcessZXSJL(list);
  324. pushChangeProcessZXS(list2);
  325. }else {
  326. throw new BusinessException("无法将项目转给非咨询角色");
  327. }
  328. taskAttributionLogMapper.insertList(aid, transferId, date);
  329. tTaskLogMapper.updateDimissionTransfer(aid, transferId);
  330. updateOrderMidServiceProject(useOrderNo);
  331. }
  332. private void updateOrderMidServiceProject(List<String> useOrderNo) {
  333. for (String orderNo : useOrderNo) {
  334. updateOrderMidServiceProject(orderNo);
  335. }
  336. }
  337. private void updateOrderMidServiceProject(String orderNo) {
  338. {
  339. List<TOrderTaskBo> taskBos = tOrderTaskMapper.selectOrderTaskAll(orderNo, null);
  340. if (!taskBos.isEmpty()){
  341. List<String > cp=new ArrayList<>();
  342. List<String > cc=new ArrayList<>();
  343. StringBuffer ps=new StringBuffer();
  344. StringBuffer cs=new StringBuffer();
  345. for (TOrderTaskBo taskBo : taskBos) {
  346. if (!cp.contains(taskBo.getCommodityName())){
  347. cp.add(taskBo.getCommodityName());
  348. ps=ps.append(taskBo.getCommodityName());
  349. String str= NewProjectStatus.getValueByCode(taskBo.getProjectStatus());
  350. ps=ps.append("-").append(str).append("-").append(taskBo.getContacts()).append(",");
  351. }
  352. if (!cc.contains(taskBo.getCname())){
  353. cc.add(taskBo.getCname());
  354. cs=cs.append(taskBo.getCname()).append(",");
  355. }
  356. }
  357. TOrderMid tOrderMid = new TOrderMid();
  358. tOrderMid.setOrderNo(orderNo);
  359. if (ps.length()>1)tOrderMid.setServiceProject(ps.substring(0,ps.length()-1));
  360. if (ps.length()>1)tOrderMid.setServiceType(cs.substring(0,cs.length()-1));
  361. tOrderMidMapper.updateByOrderNo(tOrderMid);
  362. }
  363. }
  364. }
  365. private void pushChangeProcessZXSJL(List<Integer> list) {
  366. if(!list.isEmpty()){
  367. Date date =new Date();
  368. for (Integer i : list) {
  369. NewOrderChangeBo changeBo = newOrderChangeMapper.selectById(i);
  370. pushZXSJL(changeBo,date,1);
  371. pushOrderCangeProcess(changeBo);
  372. newOrderChangeMapper.updateByPrimaryKeySelective(changeBo);
  373. }
  374. }
  375. }
  376. public void pushZXS(NewOrderChangeBo nb, Date date,Integer type) {
  377. int zxs=orderExamineMapper.checkCountStatus(nb.getOrderNo(),0,null);
  378. if (zxs>0){
  379. nb.setProcessState(OrderChangeProcess.JSY.getCode());
  380. }else {
  381. if(type==1){
  382. date.setTime(date.getTime()+100);
  383. addOrderChangeLog("无咨询师自动通过", 2, nb.getOrderNo(), nb.getId(), date);
  384. }
  385. pushZXSJL(nb,date,1);
  386. }
  387. }
  388. public void pushZXSJL(NewOrderChangeBo nb,Date date,Integer type) {
  389. int zxsjl=orderExamineMapper.checkCountStatus(nb.getOrderNo(),1,0);
  390. if (nb.getType()== OrderChangeType.XMJJEBG.getCode()||
  391. nb.getType()==OrderChangeType.TDTK.getCode()||
  392. nb.getType()==OrderChangeType.TDBTK.getCode()||
  393. nb.getType()==OrderChangeType.CB.getCode()||
  394. nb.getType()==OrderChangeType.JXMBG.getCode()){
  395. if (zxsjl>0){
  396. nb.setProcessState(OrderChangeProcess.JSJL.getCode());
  397. }else {
  398. if (type==1){
  399. date.setTime(date.getTime()+100);
  400. addOrderChangeLog("无咨询师经理自动通过", 2, nb.getOrderNo(), nb.getId(),date);
  401. }
  402. //重报 没有技术员跳入财务
  403. if (nb.getType()==OrderChangeType.CB.getCode()){
  404. nb.setProcessState(OrderChangeProcess.CWZY.getCode());
  405. //项目变更没有跳入技术总监
  406. }else{
  407. nb.setProcessState(OrderChangeProcess.JSZJ.getCode());
  408. }
  409. }
  410. }
  411. }
  412. private void addOrderChangeLog(String remarks, Integer status, String orderNo, Integer id,Date date) {
  413. if (date ==null)date=new Date();
  414. OrderChangeLog ocl = new OrderChangeLog();
  415. ocl.setAuditor(TokenManager.getAdminId());
  416. ocl.setOrderNo(orderNo);
  417. ocl.setRemarks(remarks);
  418. ocl.setChangeId(id);
  419. ocl.setStatus(status);
  420. ocl.setCreateTime(date);
  421. orderChangeLogMapper.insertSelective(ocl);
  422. }
  423. private void pushChangeProcessZXS(List<Integer> list) {
  424. if(!list.isEmpty()){
  425. Date date =new Date();
  426. for (Integer i : list) {
  427. NewOrderChangeBo changeBo = newOrderChangeMapper.selectById(i);
  428. pushZXS(changeBo,date,1);
  429. pushOrderCangeProcess(changeBo);
  430. newOrderChangeMapper.updateByPrimaryKeySelective(changeBo);
  431. }
  432. }
  433. }
  434. public void pushOrderCangeProcess(NewOrderChange noc) {
  435. if (noc.getProcessState()== OrderChangeProcess.YXY.getCode()){
  436. TOrderNewBo ton = tOrderNewMapper.getSaleIdByOno(noc.getOrderNo());
  437. noc.setExamineName(ton.getSalesmanName());
  438. }else if (noc.getProcessState()== OrderChangeProcess.YXJL.getCode()){
  439. TOrderNewBo ton = tOrderNewMapper.getSaleIdByOno(noc.getOrderNo());
  440. Admin saleman = adminMapper.queryById(ton.getSalesmanId());
  441. Admin manager = adminMapper.queryById(saleman.getManagerId());
  442. noc.setExamineName(manager.getName());
  443. }else if (noc.getProcessState()== OrderChangeProcess.YXGLY.getCode()){
  444. TOrderNewBo ton = tOrderNewMapper.getSaleIdByOno(noc.getOrderNo());
  445. StringBuffer str=new StringBuffer();
  446. List<Admin> admins = adminMapper.listAdminBydepIdAndRoleType(ton.getOrderDep(),AFTConstants.SALESMAN_ADMIN);
  447. if (admins.isEmpty()){
  448. OrganizationListOut dep = departmentMapper.selectAllById(ton.getOrderDep());
  449. admins = adminMapper.listAdminBydepIdAndRoleType(dep.getSuperId(),AFTConstants.SALESMAN_ADMIN);
  450. }
  451. for (Admin admin : admins) {
  452. if (!str.toString().contains(admin.getName()))str.append(admin.getName()).append(",");
  453. }
  454. if (str.length()>0)noc.setExamineName(str.substring(0,str.length()-1));
  455. }else if (noc.getProcessState()== OrderChangeProcess.JSY.getCode()){
  456. List<OrderExamineBo> os = orderExamineMapper.selectByOrderNo(noc.getOrderNo(), 0);
  457. StringBuffer str=new StringBuffer();
  458. for (OrderExamineBo o : os) {
  459. if (o.getStatus()==0){
  460. if (!str.toString().contains(o.getName()))str.append(o.getName()).append(",");
  461. }
  462. }
  463. if (str.length()>0)noc.setExamineName(str.substring(0,str.length()-1));
  464. }else if (noc.getProcessState()== OrderChangeProcess.JSJL.getCode()){
  465. List<OrderExamineBo> os = orderExamineMapper.selectByOrderNo(noc.getOrderNo(), 1);
  466. StringBuffer str=new StringBuffer();
  467. for (OrderExamineBo o : os) {
  468. if (o.getStatus()==0){
  469. if (!str.toString().contains(o.getName()))str.append(o.getName()).append(",");
  470. }
  471. }
  472. if (str.length()>0)noc.setExamineName(str.substring(0,str.length()-1));
  473. }else if (noc.getProcessState()== OrderChangeProcess.JSZJ.getCode()){
  474. StringBuffer str=new StringBuffer();
  475. List<Admin> admins = adminMapper.getAdminRoleTypeList(AFTConstants.TECH_ADMIN);
  476. for (Admin a : admins) {
  477. str=str.append(a.getName()).append(",");
  478. }
  479. if (str.length()>0)noc.setExamineName(str.substring(0,str.length()-1));
  480. }else if (noc.getProcessState()== OrderChangeProcess.CWZY.getCode()){
  481. TOrderNewBo ton = tOrderNewMapper.getSaleIdByOno(noc.getOrderNo());
  482. OrganizationListOut dep = departmentMapper.selectAllById(ton.getOrderDep());
  483. noc.setExamineName(dep.getFinanceName());
  484. }else if (noc.getProcessState()== OrderChangeProcess.CWZJ.getCode()){
  485. StringBuffer str=new StringBuffer();
  486. List<Admin> admins = adminMapper.getAdminRoleTypeList(AFTConstants.FINANCE_ADMIN);
  487. for (Admin a : admins) {
  488. str=str.append(a.getName()).append(",");
  489. }
  490. if (str.length()>0)noc.setExamineName(str.substring(0,str.length()-1));
  491. }else if (noc.getProcessState()== OrderChangeProcess.TPSH.getCode()||noc.getProcessState()== OrderChangeProcess.DSZ.getCode()){
  492. if(noc.getStatus()==2){
  493. TOrderNewBo ton = tOrderNewMapper.getSaleIdByOno(noc.getOrderNo());
  494. OrganizationListOut dep = departmentMapper.selectAllById(ton.getOrderDep());
  495. noc.setExamineName(dep.getFinanceName());
  496. }else {
  497. noc.setExamineName("");
  498. }
  499. }
  500. }
  501. /**
  502. * 处理修改角色对于订单、变更审核人员的修改
  503. * @param ad
  504. * @param usead
  505. * @param roleIds
  506. */
  507. public void pushRoleUpdateExamine(Admin ad, Admin usead, List<String> roleIds, List<Role> useRole) {
  508. List<Role> roles = roleMapper.selectByIdList(roleIds);
  509. updateExamineByRole(ad, usead, useRole, roles,AFTConstants.SALESMAN);
  510. updateExamineByRole(ad, usead, useRole, roles,AFTConstants.SALESMAN_MANAGER);
  511. updateExamineByRole(ad, usead, useRole, roles,AFTConstants.SALESMAN_ADMIN);
  512. updateExamineByRole(ad, usead, useRole, roles,AFTConstants.TECH);
  513. updateExamineByRole(ad, usead, useRole, roles,AFTConstants.TECH_MANAGER);
  514. updateExamineByRole(ad, usead, useRole, roles,AFTConstants.TECH_ADMIN);
  515. updateExamineByRole(ad, usead, useRole, roles,AFTConstants.FINANCE);
  516. updateExamineByRole(ad, usead, useRole, roles,AFTConstants.FINANCE_ADMIN);
  517. }
  518. private void updateExamineByRole(Admin ad, Admin usead, List<Role> useRole, List<Role> roles, String roleType) {
  519. boolean updateParam=false;
  520. int updatedep =0;
  521. if (!ad.getName().equals(usead.getName())){
  522. updateParam=true;
  523. }
  524. boolean newDEP=Rolescontains(roles,roleType);
  525. boolean useDep=Rolescontains(useRole,roleType);
  526. if (newDEP||useDep){
  527. if (roleType.equals(AFTConstants.SALESMAN_ADMIN)){
  528. if (ad.getDepartmentId().equals(usead.getDepartmentId())){
  529. updatedep=1;
  530. }else{
  531. updatedep=2;
  532. }
  533. if (newDEP&&useDep){
  534. //新旧为同一个,修改当前就可以了
  535. if (updatedep ==1&& updateParam){
  536. updateOrderAndChangeExamine(ad, roleType);
  537. //新旧不是同一个,俩个都要修改
  538. }else if (updatedep ==2){
  539. updateOrderAndChangeExamine(ad, roleType);
  540. updateOrderAndChangeExamine(usead, roleType);
  541. }
  542. }else if (!newDEP&&useDep){
  543. updateOrderAndChangeExamine(usead, roleType);
  544. }
  545. }else if (roleType.equals(AFTConstants.SALESMAN)){
  546. if (ad.getManagerId()!=null&&usead.getManagerId()!=null&&!ad.getManagerId().equals(usead.getManagerId())){
  547. updateOrderAndChangeExamine(ad, roleType);
  548. }
  549. }else {
  550. if (updateParam){
  551. updateOrderAndChangeExamine(ad, roleType);
  552. }
  553. }
  554. }
  555. }
  556. private boolean Rolescontains(List<Role> roles, String roleType) {
  557. for (Role role : roles) {
  558. if (role.getRoleType().equals(Integer.valueOf(roleType))){
  559. return true;
  560. }
  561. }
  562. return false;
  563. }
  564. /**
  565. *
  566. * @param ad
  567. * @param roleType
  568. */
  569. public void updateOrderAndChangeExamine(Admin ad, String roleType) {
  570. if (roleType.equals(AFTConstants.SALESMAN_ADMIN)){
  571. updateSalesmanAdminExamine(ad.getId());
  572. }else if (roleType.equals(AFTConstants.SALESMAN)){
  573. updateSalesmanExamine(ad.getManagerId());
  574. }else if (roleType.equals(AFTConstants.SALESMAN_MANAGER)){
  575. // 订单 0=营销员,1=经理,2=营销管理员,3=财务专员,4=总裁,5=技术总监,6部分分配,7全部分配
  576. // 变更 流程状态 0=营销员,1=营销经理,2=营销管理员,3=技术员,4=技术经理,5=技术总监,6=财务专员,7=财务总监,8=总裁,9=董事长
  577. updateSalesmanManagerExamine(ad);
  578. }else if (roleType.equals(AFTConstants.FINANCE)){
  579. updateFinanceExamine(ad.getId());
  580. }else if (roleType.equals(AFTConstants.TECH)) {
  581. newOrderChangeMapper.updateExamineById(ad.getId(), OrderChangeProcess.JSY.getCode());
  582. }else if (roleType.equals(AFTConstants.TECH_MANAGER)) {
  583. newOrderChangeMapper.updateExamineById(ad.getId(), OrderChangeProcess.JSJL.getCode());
  584. }else if (roleType.equals(AFTConstants.TECH_ADMIN)) {
  585. tOrderNewMapper.updateExamineById(null, ProcessStatus.YPZXSGLY.getCode());
  586. newOrderChangeMapper.updateExamineById(null, OrderChangeProcess.JSZJ.getCode());
  587. }else if (roleType.equals(AFTConstants.FINANCE_ADMIN)) {
  588. newOrderChangeMapper.updateExamineById(null, OrderChangeProcess.CWZJ.getCode());
  589. }
  590. }
  591. private void updateSalesmanExamine(String id) {
  592. tOrderNewMapper.updateExamineById(id,ProcessStatus.YPYXY.getCode());
  593. newOrderChangeMapper.updateExamineById(id,OrderChangeProcess.YXY.getCode());
  594. }
  595. private void updateSalesmanAdminExamine(String id) {
  596. tOrderNewMapper.updateExamineById(id,ProcessStatus.YPYXGLY.getCode());
  597. newOrderChangeMapper.updateExamineById(id,OrderChangeProcess.YXGLY.getCode());
  598. }
  599. private void updateSalesmanManagerExamine(Admin ad) {
  600. updateSalesmanManagerExamine(ad.getId());
  601. }
  602. private void updateSalesmanManagerExamine(String id) {
  603. tOrderNewMapper.updateExamineById(id, ProcessStatus.YPYXJL.getCode());
  604. newOrderChangeMapper.updateExamineById(id, OrderChangeProcess.YXJL.getCode());
  605. }
  606. public void updateFinanceExamine(String id) {
  607. tOrderNewMapper.updateExamineById(id,ProcessStatus.YPCW_JSZJ.getCode());
  608. newOrderChangeMapper.updateExamineById(id,OrderChangeProcess.CWZY.getCode());
  609. }
  610. public void financeCoutSwitch(List<String> aids) {
  611. for (String aid : aids) {
  612. List<FinanceCount> list=new ArrayList<>();
  613. financeCountRestart(aid,list);
  614. financeCountMapper.deleteByAid(aid);
  615. listBatches(list);
  616. }
  617. }
  618. public void financeCoutSwitch(String aid) {
  619. List<FinanceCount> list=new ArrayList<>();
  620. financeCountRestart(aid,list);
  621. financeCountMapper.deleteByAid(aid);
  622. listBatches(list);
  623. }
  624. private void listBatches(List<FinanceCount> list) {
  625. List<FinanceCount> addList=new ArrayList<>();
  626. for (int i = 0; i <list.size(); i++) {
  627. FinanceCount financeCount = list.get(i);
  628. FinanceCount newFc=FinanceCount.initialization(financeCount);
  629. addList.add(newFc);
  630. if (addList.size()==50||i==list.size()-1){
  631. financeCountMapper.insetBatch(addList);
  632. addList.clear();
  633. try {
  634. Thread.sleep(500);
  635. } catch (InterruptedException exception) {
  636. exception.printStackTrace();
  637. }
  638. }
  639. }
  640. }
  641. private void financeCountRestart(String financeId, List<FinanceCount> list) {
  642. List<FinanceCount> aList=new ArrayList<>();
  643. List<FinanceCount> orderList = tOrderNewMapper.selectCountByFinance(financeId);
  644. if (!orderList.isEmpty()){
  645. aList.addAll(orderList);
  646. }
  647. List<FinanceCount> expenseList = expenseAccountMapper.selectCountByFinance(financeId);
  648. pushFinanceList(aList, expenseList,0);
  649. List<FinanceCount> invoiceList =tOrderInvoiceMapper.selectCountByFinance(financeId);
  650. pushFinanceList(aList, invoiceList,1);
  651. List<FinanceCount> memberList =tTaskMemberMapper.selectCountByFinance(financeId);
  652. pushFinanceList(aList, memberList,2);
  653. List<FinanceCount> paymentList =tOrderPaymentMapper.selectCountByFinance(financeId);
  654. pushFinanceList(aList, paymentList,3);
  655. if (!aList.isEmpty()){
  656. list.addAll(aList);
  657. }
  658. }
  659. /**
  660. *
  661. * @param list
  662. * @param minList
  663. * @param type
  664. */
  665. private void pushFinanceList(List<FinanceCount> list, List<FinanceCount> minList,Integer type) {
  666. if (!minList.isEmpty()){
  667. for (FinanceCount expense : minList) {
  668. boolean flag=true;
  669. for (FinanceCount e : list) {
  670. if (e.getDateTime().getTime()==expense.getDateTime().getTime()){
  671. if (type==0){
  672. e.setExpenseCount(expense.getExpenseCount());
  673. e.setExpenseUnauditedCount(expense.getExpenseUnauditedCount());
  674. }else if (type==1){
  675. e.setInvoiceCount(expense.getInvoiceCount());
  676. e.setInvoiceUnauditedCount(expense.getInvoiceUnauditedCount());
  677. }else if (type==2){
  678. e.setMemberCount(expense.getMemberCount());
  679. e.setMemberUnauditedCount(expense.getMemberUnauditedCount());
  680. }else if (type==3){
  681. e.setPaymentCount(expense.getPaymentCount());
  682. e.setPaymentUnauditedCount(expense.getPaymentUnauditedCount());
  683. }
  684. flag=false;
  685. }
  686. }
  687. if (flag){
  688. list.add(expense);
  689. }
  690. }
  691. }
  692. }
  693. public void sendWeChat( String publicCarbonCopy,Integer id, String name, String startTime, String endTime, String typeName, String plan) {
  694. Admin admin = adminMapper.queryById(publicCarbonCopy);
  695. weChatUtils.addSendCopyNotice(admin.getOpenId(), id, name, startTime, endTime, typeName, plan);
  696. }
  697. public void updateAdminByAid(String aid,String aid2) {
  698. updateAdminByAid(aid);
  699. updateAdminByAid(aid2);
  700. }
  701. public void updateAdminByAid(String aid) {
  702. List<TOrderTaskBo> tOrderTaskBos = tOrderTaskMapper.selectAdminTaskByAid(aid);
  703. int htSatCount = 0,htSatScoreCount = 0,htSatNotScoreCount = 0,
  704. memberCount=0,memberScoreCount = 0,memberNotScoreCount = 0;
  705. BigDecimal ht_satSum=new BigDecimal(0);
  706. BigDecimal hySum=new BigDecimal(0);
  707. for (TOrderTaskBo tOrderTaskBo : tOrderTaskBos) {
  708. if (aid ==null) aid =tOrderTaskBo.getTaskReceiver();
  709. if (tOrderTaskBo.getcSort()==3||tOrderTaskBo.getcSort()==9){
  710. htSatCount++;
  711. if (tOrderTaskBo.getScoreStatus()==1){
  712. htSatNotScoreCount++;
  713. }else if (tOrderTaskBo.getScoreStatus()==2){
  714. htSatScoreCount++;
  715. ht_satSum=ht_satSum.add(new BigDecimal(tOrderTaskBo.getScoreNumber()));
  716. }
  717. }else if (tOrderTaskBo.getcSort()==6) {
  718. memberCount++;
  719. if (tOrderTaskBo.getScoreStatus()==1){
  720. memberNotScoreCount++;
  721. }else if (tOrderTaskBo.getScoreStatus()==2){
  722. memberScoreCount++;
  723. hySum=hySum.add(new BigDecimal(tOrderTaskBo.getScoreNumber()));
  724. }
  725. }
  726. }
  727. BigDecimal htSatScoreAverage = BigDecimal.ZERO;
  728. BigDecimal memberScoreAverage = BigDecimal.ZERO;
  729. if (htSatScoreCount>0)htSatScoreAverage=ht_satSum.divide(new BigDecimal(htSatScoreCount),2, RoundingMode.HALF_UP);
  730. if (memberScoreCount>0)memberScoreAverage=hySum.divide(new BigDecimal(memberScoreCount),2, RoundingMode.HALF_UP);
  731. AdminProjectStatistics adminProjectStatistics = adminProjectStatisticsMapper.queryByAid(aid);
  732. AdminProjectStatistics aps=new AdminProjectStatistics();
  733. aps.setAid(aid);
  734. aps.setHtSatCount(htSatCount);
  735. aps.setHtSatScoreAverage(htSatScoreAverage.doubleValue());
  736. aps.setHtSatNotScoreCount(htSatNotScoreCount);
  737. aps.setHtSatScoreCount(htSatScoreCount);
  738. aps.setMemberScoreAverage(memberScoreAverage.doubleValue());
  739. aps.setMemberScoreCount(memberScoreCount);
  740. aps.setMemberNotScoreCount(memberNotScoreCount);
  741. aps.setMemberCount(memberCount);
  742. if (adminProjectStatistics==null){
  743. adminProjectStatisticsMapper.insert(aps);
  744. }else {
  745. aps.setId(adminProjectStatistics.getId());
  746. adminProjectStatisticsMapper.update(aps);
  747. }
  748. }
  749. }