FundManagerOrderServiceImpl.java 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639
  1. package com.goafanti.order.service.impl;
  2. import com.goafanti.admin.bo.AdminListBo;
  3. import com.goafanti.admin.service.DepartmentService;
  4. import com.goafanti.common.bo.EmailBo;
  5. import com.goafanti.common.bo.Error;
  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.OrderLogProcess;
  10. import com.goafanti.common.error.BusinessException;
  11. import com.goafanti.common.model.*;
  12. import com.goafanti.common.utils.AsyncUtils;
  13. import com.goafanti.common.utils.LoggerUtils;
  14. import com.goafanti.common.utils.StringUtils;
  15. import com.goafanti.core.mybatis.BaseMybatisDao;
  16. import com.goafanti.core.mybatis.page.Pagination;
  17. import com.goafanti.core.shiro.token.TokenManager;
  18. import com.goafanti.order.bo.OrderListBo;
  19. import com.goafanti.order.bo.TOrderNewBo;
  20. import com.goafanti.order.bo.TOrderTaskBo;
  21. import com.goafanti.order.enums.*;
  22. import com.goafanti.order.service.FundManageOrderService;
  23. import com.goafanti.order.service.OrderNewService;
  24. import com.goafanti.organization.bo.OrganizationListOut;
  25. import org.slf4j.Logger;
  26. import org.slf4j.LoggerFactory;
  27. import org.springframework.beans.factory.annotation.Autowired;
  28. import org.springframework.stereotype.Service;
  29. import java.math.BigDecimal;
  30. import java.util.*;
  31. @Service
  32. public class FundManagerOrderServiceImpl extends BaseMybatisDao<TOrderNewMapper> implements FundManageOrderService {
  33. @Autowired
  34. private TOrderNewMapper tOrderNewMapper;
  35. @Autowired
  36. private AdminMapper adminMapper;
  37. @Autowired
  38. private TOrderBillNewMapper billNewMapper;
  39. @Autowired
  40. private TOrderBackMapper backMapper;
  41. @Autowired
  42. private TOrderRefundMapper refundMapper;
  43. @Autowired
  44. private TOrderBonusMapper bonusMapper;
  45. @Autowired
  46. private TOrderMonthReportMapper monthReportMapper;
  47. @Autowired
  48. private TOrderTaskMapper taskMapper;
  49. @Autowired
  50. private TOrderLogMapper tOrderLogMapper;
  51. @Autowired
  52. private OrderNewService orderNewService;
  53. @Autowired
  54. private DepartmentMapper departmentMapper;
  55. @Autowired
  56. private DepartmentService departmentService;
  57. @Autowired
  58. private TOrderExamineMapper tOrderExamineMapper;
  59. @Autowired
  60. private FinanceCountMapper financeCountMapper;
  61. @Autowired
  62. private AsyncUtils asyncUtils;
  63. Logger logger = LoggerFactory.getLogger(FundManagerOrderServiceImpl.class);
  64. @SuppressWarnings("unchecked")
  65. @Override
  66. public Pagination<OrderListBo> allUnassignedOrder(OrderListBo order, Integer pageNo,
  67. Integer pageSize) {
  68. Map<String, Object> params = new HashMap<String, Object>();
  69. //if (order.getOutsource()==null)order.setOutsource(0);//默认非外包
  70. params.put("o", order);
  71. Pagination<OrderListBo> data = (Pagination<OrderListBo>)findPage("getAllUnassignedListOrder", "getAllUnassignedCountOrder", params, pageNo, pageSize);
  72. return data;
  73. }
  74. @Override
  75. public Integer updateDistributionFinance(String orderNo, String financeId, Integer approval) {
  76. // 先判断订单id和财务专员是否存在或者能够使用
  77. //判断是不是特批的数据
  78. if(approval != ApprovalNewState.TPTG.getCode() && approval != ApprovalNewState.FTP.getCode()){//特批未通过 2 0
  79. return -1;
  80. }
  81. TOrderNew torder=checkDeleteSign(orderNo);
  82. TOrderNew onew = new TOrderNew();
  83. onew.setOrderNo(orderNo);
  84. //onew.setDeleteSign(0);//锁定订单也能走流程
  85. onew.setApproval(approval);//特批状态
  86. // onew.setProcessStatus(ProcessStatus.YPCWGLY.getCode());//已派财务管理员 废除
  87. onew.setOrderStatus(OrderNewState.QDSHTG.getCode());//营销管理员审核通过
  88. int idCount = tOrderNewMapper.getCountByIdAndStatus(onew);
  89. int fidCount = adminMapper.getCountById(financeId);
  90. Integer r = null;
  91. if(idCount == 1 && fidCount == 1){
  92. //修改订单流程状态
  93. TOrderNew record = new TOrderNew();
  94. record.setOrderNo(orderNo);
  95. record.setFinanceId(financeId);
  96. if(torder.getProcessStatus()<ProcessStatus.YPZXSGLY.getCode()) {
  97. record.setProcessStatus(ProcessStatus.YPCW_JSZJ.getCode());
  98. }
  99. addOrderLog(orderNo, OrderLogProcess.CWSH.getCode(),null);
  100. r = tOrderNewMapper.update(record);
  101. }else{
  102. //返回错误标志 提示订单编号或者财务专员选择错误
  103. r = -2;
  104. }
  105. return r;
  106. }
  107. private TOrderNew checkDeleteSign(String orderNo) {
  108. TOrderNew t=tOrderNewMapper.queryById(orderNo);
  109. //if(t.getDeleteSign()==2) throw new BusinessException(new Error(ErrorConstants.ORDER_ALREADY_REVOKE, t.getOrderNo(),""));
  110. return t;
  111. }
  112. public void addOrderLog(String orderNo, Integer code, String reason) {
  113. TOrderLog tl=new TOrderLog();
  114. tl.setOrderNo(orderNo);
  115. tl.setProcess(code);
  116. tl.setRemarks(reason);
  117. tl.setAid(TokenManager.getAdminId());
  118. tOrderLogMapper.insertSelective(tl);
  119. }
  120. @SuppressWarnings("unchecked")
  121. @Override
  122. public Map<String, Object> financeList(OrderListBo order, Integer pageNo, Integer pageSize) {
  123. Map<String, Object> result = new HashMap<String, Object>();
  124. Map<String, Object> params = new HashMap<String, Object>();
  125. List<String> fids=new ArrayList<>();
  126. if(TokenManager.hasRole(AFTConstants.CED)||TokenManager.hasRole(AFTConstants.APPROVAL_DECISION)||
  127. TokenManager.hasRole(AFTConstants.VICE_CEO)||TokenManager.hasRole(AFTConstants.FINANCE_ADMIN)||
  128. TokenManager.hasRole(AFTConstants.SUPERADMIN)) {
  129. //如果是这些角色则看全部
  130. }else if(TokenManager.hasRole(AFTConstants.FINANCE_MANAGER)) {
  131. fids =adminMapper.selectBySuperId(TokenManager.getAdminId());
  132. params.put("fids", fids);
  133. } else {
  134. fids.add(TokenManager.getAdminId());
  135. params.put("fids",fids);
  136. }
  137. if (order.getOutsource()==null)order.setOutsource(0);//默认非外包
  138. params.put("o", order);
  139. List<String> types=null;
  140. if (order.getType()!=null){
  141. types=Arrays.asList(order.getType().split(","));
  142. params.put("type", types);
  143. }
  144. List<String> listDep=null;
  145. if (order.getDeps()!=null){
  146. params.put("deps", departmentService.parseArray(order.getDeps()));
  147. listDep=departmentService.parseArray(order.getDeps());
  148. params.put("deps", listDep);
  149. }
  150. Pagination<OrderListBo> data = (Pagination<OrderListBo>)findPage("financeList", "financeCount", params, pageNo, pageSize);
  151. result.put("pagination", data);
  152. //如果是财务看,则要看是否还需要审核
  153. if (TokenManager.hasRole(AFTConstants.FINANCE)){
  154. List<OrderListBo> list = (List<OrderListBo>) data.getList();
  155. for (OrderListBo o : list) {
  156. int i = tOrderExamineMapper.selectByOrderNoAndAid(o.getOrderNo(), TokenManager.getAdminId());
  157. if (i==0) o.setMyExamine(1);
  158. else o.setMyExamine(0);
  159. }
  160. }
  161. Map<String, Object> count = tOrderNewMapper.countTotalAndActually(order,fids,listDep,types);
  162. result.put("count", count);
  163. return result;
  164. }
  165. @Override
  166. public Integer updateReject(TOrderBack back) {
  167. // 是否已经收款
  168. TOrderNew t=checkDeleteSign(back.getOrderNo());
  169. BigDecimal bd = billNewMapper.getAmountByOid(back.getOrderNo());
  170. if(bd.compareTo(new BigDecimal(0.0)) == 1){
  171. return 0;//已经收款不能驳回
  172. }
  173. TOrderNewBo b = tOrderNewMapper.getSaleIdByOno(back.getOrderNo());//订单和订单负责人相关信息
  174. if(null == b || StringUtils.isBlank(b.getSalesmanId())){
  175. return -1;
  176. }
  177. //否 可以处理驳回
  178. //修改订单状态
  179. TOrderNew orderNew = new TOrderNew();
  180. orderNew.setOrderNo(back.getOrderNo());
  181. orderNew.setOrderStatus(OrderNewState.YBH.getCode());
  182. orderNew.setProcessStatus(ProcessStatus.YPYXY.getCode());
  183. //设置驳回人为财务、将财务负责人置空
  184. orderNew.setBackStatus(3);
  185. orderNew.setFinanceId("");
  186. int c = tOrderNewMapper.update(orderNew);
  187. //新增驳回数据
  188. if(c>0){
  189. back.setBackStatus(0);
  190. back.setInitiate(TokenManager.getAdminId());//发起人
  191. back.setAccept(b.getSalesmanId()); //查看该订单的负责人
  192. addOrderLog(back.getOrderNo(), OrderLogProcess.BH.getCode(),back.getReason());
  193. c = backMapper.insertSelective(back);
  194. List<String> aids = new ArrayList<>();
  195. aids.add(t.getSalesmanId());;
  196. if (aids.isEmpty()) {
  197. throw new BusinessException(new Error( "邮件发送失败,对方设置邮箱错误","邮件发送失败,对方设置邮箱错误"));
  198. }
  199. TOrderNewBo order = tOrderNewMapper.getSaleIdByOno(t.getOrderNo());
  200. pushGeneralSendNoticeAndEmail(aids, NoticeStatus.ORDER_NO.getCode(),order, TokenManager.getAdminId(),t.getApproval());
  201. }
  202. orderNewService.updateAdminUserCountOrder(t.getSalesmanId(),t.getCreateTime());
  203. Admin admin=adminMapper.selectFinanceAdminByOrderDep(t.getOrderDep());
  204. orderNewService.financeCountOrderUnauditedSubtraction(t,1);
  205. return c;
  206. }
  207. public void pushGeneralSendNoticeAndEmail(List<String> alist, Integer type,TOrderNewBo o,String adminId,Integer approval){
  208. orderNewService.pushGeneralSendNoticeAndEmail(alist, type,o, adminId,approval);
  209. }
  210. @Override
  211. public Integer addReceiptsFlow(TOrderBillNew billNew, String contractNo) {
  212. //判断有没有要加入的金额有没有超过总金额
  213. BigDecimal bill = billNewMapper.getAmountByOid(billNew.getOrderNo());
  214. //获得的单个订单金额数据(首付金额和总金额)
  215. TOrderNew o = checkDeleteSign(billNew.getOrderNo());
  216. if(null == o){
  217. return -2;
  218. }
  219. if(o.getDeleteSign()==3)return -3;
  220. BigDecimal bd = bill.add(billNew.getTransactionAmount().abs());
  221. //奖金信息
  222. TOrderBonus bonus = new TOrderBonus();
  223. bonus.setId(UUID.randomUUID().toString());
  224. bonus.setOrderNo(billNew.getOrderNo());
  225. bonus.setGrantBy(TokenManager.getAdminId());
  226. int lstaus = 0;//如果订单流水小于首付 lstaus 0
  227. // 0 相等
  228. // -1 小于
  229. // 1 大于
  230. if(bd.compareTo(o.getTotalAmount()) == 1){//如果订单流水总额大于总金额 return -1
  231. return -1;//超过不能添加
  232. }else if(bd.compareTo(o.getTotalAmount()) == 0){//付完款//如果订单流水等于于总金额 lstaus 2
  233. lstaus = 2;
  234. bonus.setBonusSubject(BonusSubject.WK.getCode());//12
  235. //发放给技术员如果付完款所有参与这个项目任务的人都会有结算奖
  236. //获得所有的任务负责人
  237. List<TOrderTaskBo> l = taskMapper.getReceiverByOid(billNew.getOrderNo());
  238. // 取消没有技术员不能支付全款
  239. // if(null == l || l.size() == 0){
  240. // return -3;//没有给将任务分给咨询师(技术员)
  241. // }
  242. for (TOrderTaskBo tOrderTask : l) {
  243. if(null != tOrderTask &&null != tOrderTask.getTaskReceiver()){
  244. bonus.setTaskId(tOrderTask.getId());//任务id
  245. bonus.setGrantTarget(tOrderTask.getTaskReceiver());
  246. bonus.setGrantType(1);
  247. int c = bonusMapper.checkByOnoAndSub(bonus);
  248. //不存在就设置
  249. if(c==0){
  250. bonus.setId(UUID.randomUUID().toString());
  251. bonusMapper.insertSelective(bonus);
  252. }
  253. }
  254. }
  255. addOrderLog(billNew.getOrderNo(), OrderLogProcess.CWQK.getCode(),billNew.getRemarks());
  256. }else if(bd.compareTo(o.getTotalAmount()) == -1){//如果订单流水小于总金额
  257. if(bd.compareTo(o.getFirstAmount()) == 0 || bd.compareTo(o.getFirstAmount()) == 1){//首付完成
  258. //查看首付奖是否存在
  259. TOrderBonus b = new TOrderBonus();
  260. b.setOrderNo(billNew.getOrderNo());
  261. b.setBonusSubject(11);
  262. b.setGrantType(0);
  263. b.setGrantTarget(o.getSalesmanId());
  264. int c = bonusMapper.checkByOnoAndSub(b);
  265. //不存在就设置
  266. if(c==0){
  267. bonus.setBonusSubject(BonusSubject.SF.getCode());//11
  268. }
  269. lstaus = 1;
  270. addOrderLog(billNew.getOrderNo(), OrderLogProcess.CWSF.getCode(),billNew.getRemarks());
  271. }
  272. }
  273. //否则新增流水信息
  274. billNew.setBillNo(UUID.randomUUID().toString().replaceAll("-", ""));
  275. billNew.setCreater(TokenManager.getAdminId());
  276. int result = billNewMapper.insertSelective(billNew);
  277. //修改订单结算金额和结算状态
  278. //如果已经首付并且流程状态是没有派给咨询师的修改流程状态为4
  279. TOrderNew orderNew = new TOrderNew();
  280. orderNew.setOrderNo(billNew.getOrderNo());
  281. if(contractNo!=null)orderNew.setContractNo(contractNo);
  282. //这里的已收金额是以前收的所有金额加上本次收的金额
  283. orderNew.setSettlementAmount(billNew.getTransactionAmount().add(o.getSettlementAmount()));
  284. orderNew.setLiquidationStatus(lstaus);
  285. if(result > 0){
  286. result = tOrderNewMapper.update(orderNew);
  287. //如果达到奖金发放要求新增奖金信息
  288. if(null != bonus.getBonusSubject()){
  289. bonus.setId(UUID.randomUUID().toString());
  290. bonus.setGrantTarget(o.getSalesmanId());
  291. //设置发放人类型
  292. bonus.setGrantType(0);
  293. bonusMapper.insertSelective(bonus);
  294. }
  295. }
  296. return result;
  297. }
  298. @Override
  299. public Integer updateChangeRefund(TOrderRefund refund) {
  300. //查看当前退单状态
  301. TOrderRefund d = refundMapper.selectByPrimaryKey(refund.getId());
  302. if(d.getRefundStatus() != refundState.DSH.getCode()){
  303. return -1;
  304. }
  305. //如果审核通过给咨询师和营销员发起退单通知
  306. if(refund.getRefundStatus() == refundState.SHTG.getCode()){
  307. //修改订单状态
  308. TOrderNewBo o = tOrderNewMapper.agreeEmailData(refund.getId());
  309. TOrderNew record = new TOrderNew();
  310. record.setOrderNo(o.getOrderNo());
  311. record.setOrderStatus(OrderNewState.YTD.getCode());//7
  312. record.setProofCount(0.0d);//订单单量为0
  313. tOrderNewMapper.update(record);
  314. //更新统计表
  315. updateCount(o.getOrderNo());
  316. //新增奖金信息表数据
  317. TOrderBonus bonus = new TOrderBonus();
  318. bonus.setId(UUID.randomUUID().toString());
  319. bonus.setOrderNo(o.getOrderNo());
  320. bonus.setGrantBy(TokenManager.getAdminId());
  321. bonus.setGrantTarget(o.getSalesmanId());
  322. bonus.setBonusSubject(BonusSubject.TK.getCode());//16
  323. bonusMapper.insertSelective(bonus);
  324. //退单邮件发送需要的数据
  325. AdminListBo a = adminMapper.getDeptNameByAid(TokenManager.getAdminId());
  326. String content = "<div>退单编号: "+ refund.getId() +"</div><div>客户名称: " + o.getUserName() + "</div>";
  327. content += "<div>订单编号: "+ o.getOrderNo() +"</div>";
  328. if(StringUtils.isNotBlank(o.getEmail())){
  329. EmailBo emailBo = new EmailBo("同意退单", o.getEmail(), a.getDepartmentName(), o.getSalesmanName());
  330. asyncUtils.send(emailBo);
  331. }
  332. //发送站内消息
  333. //addNotic(o.getOrderNo(),NoticeStatus.ORDER_REFUND.getCode(),o.getSalesmanId());//给营销员
  334. //根据订单编号获得所有的技术员
  335. List<TOrderTaskBo> l = taskMapper.getReceiverByOid(o.getOrderNo());
  336. for (TOrderTaskBo tOrderTask : l) {
  337. if(null != tOrderTask && null != tOrderTask.getTaskReceiver()){
  338. //addNotic(o.getOrderNo(),NoticeStatus.ORDER_REFUND.getCode(),tOrderTask.getTaskReceiver());//给技术员
  339. //发邮件给技术员
  340. if(StringUtils.isNotBlank(tOrderTask.getEmail())){
  341. EmailBo emailBo = new EmailBo("同意退单", tOrderTask.getEmail(), a.getDepartmentName(), tOrderTask.getName());
  342. asyncUtils.send(emailBo);
  343. }
  344. }
  345. }
  346. }else{//审核拒绝
  347. //给营销员发通知和邮件
  348. TOrderNewBo o = tOrderNewMapper.agreeEmailData(refund.getId());
  349. //addNotic(o.getOrderNo(),NoticeStatus.ORDER_REFUND_REFUSE.getCode(),o.getSalesmanId());//给营销员
  350. AdminListBo a = adminMapper.getDeptNameByAid(TokenManager.getAdminId());
  351. String content = "<div>退单编号: "+ refund.getId() +"</div><div>客户名称: " + o.getUserName() + "</div>";
  352. content += "<div>订单编号: "+ o.getOrderNo() +"</div>";
  353. String email = o.getEmail();
  354. if(StringUtils.isNotBlank(email)){
  355. email = email.substring(0, email.indexOf(","));
  356. String sale = o.getSalesmanName();
  357. sale = sale.substring(0,sale.indexOf(","));
  358. if(email.matches("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+")){//email格式校验
  359. EmailBo emailBo = new EmailBo("拒绝退单",email, a.getDepartmentName(), sale);
  360. asyncUtils.send(emailBo);
  361. }
  362. }
  363. }
  364. //修改退单审核状态
  365. return refundMapper.updateRefundById(refund);
  366. }
  367. @Override
  368. public Integer addRefundFlow(TOrderBillNew billNew) {
  369. // 查看收款总金额流水
  370. BigDecimal bd = billNewMapper.getAmountByOid(billNew.getOrderNo());
  371. billNew.setTransactionAmount(billNew.getTransactionAmount().abs());//绝对值
  372. int lstaus = 3;
  373. //如果小于要退的金额 return -1
  374. //如果等于要退的金额 lstatus 4
  375. //如果大于 要退的金额 lstatus 3
  376. if(bd.compareTo(billNew.getTransactionAmount()) == -1){
  377. return -1;
  378. }else if(bd.compareTo(billNew.getTransactionAmount()) == 0){
  379. lstaus = 4;
  380. }
  381. //新增退款流水
  382. billNew.setBillNo(UUID.randomUUID().toString().replaceAll("-", ""));
  383. billNew.setCreater(TokenManager.getAdminId());
  384. billNew.setTransactionAmount(billNew.getTransactionAmount().negate());// 取负数
  385. int result = billNewMapper.insertSelective(billNew);
  386. //修改订单数据结算状态和结算金额
  387. TOrderNew orderNew = new TOrderNew();
  388. orderNew.setOrderNo(billNew.getOrderNo());
  389. TOrderNew o = tOrderNewMapper.queryById(billNew.getOrderNo());
  390. //这里修改退款金额数据之前退的金额加上本次退的金额
  391. orderNew.setRefundAmount(billNew.getTransactionAmount().add(o.getRefundAmount()));
  392. orderNew.setRefundAmount(o.getSettlementAmount().subtract(billNew.getTransactionAmount().abs()));
  393. orderNew.setLiquidationStatus(lstaus);
  394. if(lstaus == 4){//如果款项全部退完就更改订单状态,这里不一定待商榷
  395. addOrderLog(billNew.getOrderNo(), OrderLogProcess.WCTD.getCode(),billNew.getRemarks());
  396. //orderNew.setProcessStatus(6);
  397. }
  398. if(result > 0){
  399. result = tOrderNewMapper.update(orderNew);
  400. }
  401. return result;
  402. }
  403. @Override
  404. public TOrderBillNew selectOneRefundFlow(String BillNo) {
  405. return billNewMapper.getOneRefundFlow(BillNo);
  406. }
  407. @Override
  408. public List<TOrderBillNew> selectOneOrderAllRefundFlow(String orderNo) {
  409. return billNewMapper.getOneOrderAllRefundFlow(orderNo);
  410. }
  411. @Override
  412. public Integer updateProofreading(TOrderNew orderNew) {
  413. // 创建人
  414. orderNew.setProofAid(TokenManager.getAdminId());
  415. //校对状态
  416. orderNew.setProofStatus(1);
  417. //校对时间
  418. orderNew.setProofTime(new Date());
  419. tOrderNewMapper.update(orderNew);
  420. updateCount(orderNew.getOrderNo());
  421. return 0;
  422. }
  423. private void updateCount(String orderNo){
  424. //获得订单数据
  425. TOrderNew new1 = tOrderNewMapper.queryById(orderNo);
  426. Calendar cal = Calendar.getInstance();
  427. cal.setTime(new1.getSignTime());
  428. int sy = cal.get(Calendar.YEAR);
  429. int sm = cal.get(Calendar.MONTH);
  430. Integer month = sy*100+(sm+1);
  431. //重新校对月统计
  432. int c = monthReportMapper.updateByMonth(month);
  433. LoggerUtils.debug(logger, "更新订单统计【%s】条。", c);
  434. }
  435. @Override
  436. public int updateContractNo(TOrderNew orderNew) {
  437. return tOrderNewMapper.update(orderNew);
  438. }
  439. @Override
  440. public int updateFinanceApproval(String orderNo,String remarks,String aid) {
  441. TOrderNew t=new TOrderNew();
  442. TOrderNew use =checkDeleteSign(orderNo);
  443. if (use.getProcessStatus()!=3) {
  444. throw new BusinessException("订单流程不正确。");
  445. }
  446. t.setOrderNo(orderNo);
  447. t.setApproval(use.getApproval());
  448. if (use.getBackStatus()==3) {
  449. t.setBackStatus(0);
  450. }
  451. //判断是否走入下一个流程
  452. boolean flag=judgeOrderExamine(orderNo);
  453. TOrderLog tl=new TOrderLog();
  454. tl.setAid(TokenManager.getAdminId());
  455. tl.setOrderNo(t.getOrderNo());
  456. if (TokenManager.hasRole(AFTConstants.FINANCE)){
  457. //财务审核当天未审核数量减一
  458. if (use.getFinanceId().equals(TokenManager.getAdminId())){
  459. tl.setProcess(OrderLogProcess.CWSH.getCode());
  460. orderNewService.financeCountOrderUnauditedSubtraction(use,0);
  461. }else {
  462. tl.setProcess(OrderLogProcess.CWFS.getCode());
  463. }
  464. }else if (TokenManager.hasRole(AFTConstants.TECH_ADMIN)){
  465. tl.setProcess(OrderLogProcess.XMZJSH.getCode());
  466. }
  467. tl.setRemarks(remarks);
  468. tOrderLogMapper.insertSelective(tl);
  469. orderNewService.pushExamineName(t);
  470. //如果全部派单完成才需要通知和走下个流程
  471. if (flag){
  472. //如果设置了特定审核需要步入特定审核
  473. // if (aid!=null){
  474. // t.setProcessStatus(ProcessStatus.CWZDSH.getCode());
  475. // List<String> aids = new ArrayList<>();
  476. // aids.add(aid);
  477. // TOrderNewBo order = tOrderNewMapper.getSaleIdByOno(t.getOrderNo());
  478. // order.setProcessStatus(ProcessStatus.CWZDSH.getCode());
  479. // pushGeneralSendNoticeAndEmail(aids, NoticeStatus.ORDER_YES.getCode(),order, TokenManager.getAdminId(), use.getApproval());
  480. // }else {
  481. pushNoticeAndEmail(t, use);
  482. // }
  483. }else {
  484. List<TOrderExamine> tOrderExamines = tOrderExamineMapper.selectByOrderNo(orderNo,0);
  485. StringBuffer str=new StringBuffer();
  486. for (TOrderExamine e : tOrderExamines) {
  487. if (e.getStatus()==0){
  488. str=str.append(e.getAname()).append(",");
  489. }
  490. }
  491. t.setExamineName(str.substring(0,str.length()-1));
  492. }
  493. tOrderNewMapper.update(t);
  494. return 1;
  495. }
  496. private void pushNoticeAndEmail(TOrderNew t, TOrderNew new1) {
  497. List<String> aids = new ArrayList<>();
  498. StringBuffer str= new StringBuffer();
  499. boolean flag= false;
  500. TOrderNewBo order = tOrderNewMapper.getSaleIdByOno(t.getOrderNo());
  501. //如果订单是特批
  502. if (new1.getApproval()==ApprovalNewState.TPDSH.getCode()|| new1.getApproval()==ApprovalNewState.TPBH.getCode()) {
  503. if (StringUtils.isNotEmpty(order.getOperationGuaranteeId())){
  504. t.setProcessStatus(ProcessStatus.YYBZSH.getCode());
  505. str.append(order.getOperationGuaranteeName()).append(",");
  506. aids.add(order.getOperationGuaranteeId());
  507. } else if (order.getApprovalStatus()==0){
  508. t.setProcessStatus(ProcessStatus.YPZXSGLY.getCode());
  509. t.setApproval(ApprovalNewState.TPTG.getCode());
  510. flag=true;
  511. }else {
  512. t.setProcessStatus(ProcessStatus.YPTPSH.getCode());
  513. aids.add(order.getApprovalAid());
  514. str.append(order.getApprovalName()).append(",");
  515. }
  516. }else if (new1.getApproval()==ApprovalNewState.DSZDSH.getCode()|| new1.getApproval()==ApprovalNewState.DSZBH.getCode()) {
  517. if (order.getOperationGuaranteeId()!=null){
  518. t.setProcessStatus(ProcessStatus.YYBZSH.getCode());
  519. str.append(order.getApprovalName()).append(",");
  520. }else {
  521. t.setProcessStatus(ProcessStatus.YPTPSH.getCode());
  522. List<String> types=new ArrayList<>();
  523. //董事长加助理
  524. types.add(AFTConstants.APPROVAL_DECISION);
  525. types.add(AFTConstants.APPROVAL_DECISION_ASSISTANT);
  526. for (Admin admin : adminMapper.getAdminRoleTypesList(types)) {
  527. aids.add(admin.getId());
  528. str.append(admin.getName()).append(",");
  529. }
  530. }
  531. }else {
  532. t.setProcessStatus(ProcessStatus.YPZXSGLY.getCode());
  533. }
  534. if (t.getProcessStatus()==ProcessStatus.YPZXSGLY.getCode()){
  535. //设置发送邮件标识
  536. order.setProcessStatus(ProcessStatus.YPZXSGLY.getCode());
  537. OrganizationListOut oo=departmentMapper.selectAllById(new1.getOrderDep());
  538. t.setFinanceId(oo.getFinanceId());
  539. for (Admin admin : adminMapper.getAdminRoleTypeList(AFTConstants.TECH_ADMIN)) {
  540. aids.add(admin.getId());
  541. str.append(admin.getName()).append(",");
  542. }
  543. }
  544. //用与外部修改名称
  545. t.setExamineName(str.substring(0,str.length()-1));
  546. pushGeneralSendNoticeAndEmail(aids, NoticeStatus.ORDER_YES.getCode(),order, TokenManager.getAdminId(), new1.getApproval());
  547. if (flag){
  548. addTorderLog(t);
  549. }
  550. }
  551. private void addTorderLog(TOrderNew t) {
  552. TOrderLog tl=new TOrderLog();
  553. tl.setAid(AFTConstants.SUPERADMIN_ID);
  554. tl.setProcess(OrderLogProcess.TP.getCode());
  555. tl.setOrderNo(t.getOrderNo());
  556. tl.setRemarks("部门特批审核人未设置,系统自动通过");
  557. tOrderLogMapper.insertSelective(tl);
  558. }
  559. private boolean judgeOrderExamine(String orderNo) {
  560. tOrderExamineMapper.updateStatusByOrderNo(orderNo,TokenManager.getAdminId(),1);
  561. List<TOrderExamine> tOrderExamines = tOrderExamineMapper.selectByOrderNo(orderNo,0);
  562. int max = tOrderExamines.size();
  563. int yes=0;
  564. for (TOrderExamine e : tOrderExamines) {
  565. if (e.getStatus()==1){
  566. yes++;
  567. }
  568. }
  569. if (yes==max){
  570. return true;
  571. }
  572. return false;
  573. }
  574. }