AsyncUtils.java 30 KB

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