AsyncUtils.java 30 KB

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