OrderChangeServiceImpl.java 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592
  1. package com.goafanti.order.service.impl;
  2. import java.io.IOException;
  3. import java.io.OutputStream;
  4. import java.math.BigDecimal;
  5. import java.text.SimpleDateFormat;
  6. import java.util.ArrayList;
  7. import java.util.Date;
  8. import java.util.HashMap;
  9. import java.util.List;
  10. import java.util.Map;
  11. import java.util.UUID;
  12. import javax.servlet.http.HttpServletResponse;
  13. import org.apache.poi.ss.util.CellRangeAddress;
  14. import org.apache.poi.xssf.usermodel.XSSFCell;
  15. import org.apache.poi.xssf.usermodel.XSSFCellStyle;
  16. import org.apache.poi.xssf.usermodel.XSSFRow;
  17. import org.apache.poi.xssf.usermodel.XSSFSheet;
  18. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.stereotype.Service;
  21. import com.goafanti.admin.bo.AdminListBo;
  22. import com.goafanti.common.bo.Error;
  23. import com.goafanti.common.bo.OrderExamineBo;
  24. import com.goafanti.common.dao.AdminMapper;
  25. import com.goafanti.common.dao.NewOrderChangeMapper;
  26. import com.goafanti.common.dao.OrderChangeLogMapper;
  27. import com.goafanti.common.dao.OrderExamineMapper;
  28. import com.goafanti.common.dao.OrderRefundInvoiceMapper;
  29. import com.goafanti.common.dao.OrganizationManagementMapper;
  30. import com.goafanti.common.dao.TOrderBillNewMapper;
  31. import com.goafanti.common.dao.TOrderDunMapper;
  32. import com.goafanti.common.dao.TOrderInvoiceMapper;
  33. import com.goafanti.common.dao.TOrderLogMapper;
  34. import com.goafanti.common.dao.TOrderNewMapper;
  35. import com.goafanti.common.dao.TOrderTaskMapper;
  36. import com.goafanti.common.enums.NoticeStatus;
  37. import com.goafanti.common.error.BusinessException;
  38. import com.goafanti.common.model.OrderChangeLog;
  39. import com.goafanti.common.model.OrderExamine;
  40. import com.goafanti.common.model.OrderRefundInvoice;
  41. import com.goafanti.common.model.TOrderDun;
  42. import com.goafanti.common.model.TOrderNew;
  43. import com.goafanti.common.model.Admin;
  44. import com.goafanti.common.model.NewOrderChange;
  45. import com.goafanti.common.utils.ExportExcelUtil;
  46. import com.goafanti.common.utils.StringUtils;
  47. import com.goafanti.core.mybatis.BaseMybatisDao;
  48. import com.goafanti.core.mybatis.JDBCIdGenerator;
  49. import com.goafanti.core.mybatis.page.Pagination;
  50. import com.goafanti.core.shiro.token.TokenManager;
  51. import com.goafanti.order.bo.BillBo;
  52. import com.goafanti.order.bo.InvoiceBo;
  53. import com.goafanti.order.bo.NewOderCahngeListBo;
  54. import com.goafanti.order.bo.NewOrderChangeBo;
  55. import com.goafanti.order.bo.OrderChangeLogBo;
  56. import com.goafanti.order.bo.TOrderLogBo;
  57. import com.goafanti.order.bo.TOrderTaskBo;
  58. import com.goafanti.order.enums.OrderChangeType;
  59. import com.goafanti.order.enums.OrderNewState;
  60. import com.goafanti.order.enums.OrderType;
  61. import com.goafanti.order.service.OrderChangeService;
  62. import com.goafanti.order.service.OrderNewService;
  63. import com.goafanti.order.service.OrderService;
  64. @Service
  65. public class OrderChangeServiceImpl extends BaseMybatisDao<NewOrderChangeMapper> implements OrderChangeService {
  66. @Autowired
  67. private NewOrderChangeMapper newOrderChangeMapper;
  68. @Autowired
  69. private OrderChangeLogMapper orderChangeLogMapper;
  70. @Autowired
  71. private TOrderNewMapper tOrderNewMapper;
  72. @Autowired
  73. private TOrderDunMapper tOrderDunMapper;
  74. @Autowired
  75. private TOrderLogMapper tOrderLogMapper;
  76. @Autowired
  77. private TOrderTaskMapper tOrderTaskMapper;
  78. @Autowired
  79. private TOrderBillNewMapper tOrderBillNewMapper;
  80. @Autowired
  81. private TOrderInvoiceMapper tOrderInvoiceMapper;
  82. @Autowired
  83. private OrderRefundInvoiceMapper orderRefundInvoiceMapper;
  84. @Autowired
  85. private OrganizationManagementMapper organizationManagementMapper;
  86. @Autowired
  87. private OrderExamineMapper orderExamineMapper;
  88. @Autowired
  89. private OrderService orderService;
  90. @Autowired
  91. private JDBCIdGenerator idGenerator;
  92. @Autowired
  93. private AdminMapper adminMapper;
  94. @Autowired
  95. private OrderNewService orderNewService;
  96. @Override
  97. public int addOrderChange(NewOrderChangeBo t,String startRemarks) {
  98. TOrderNew ton=new TOrderNew();
  99. ton.setOrderNo(t.getOrderNo());
  100. ton.setDeleteSign(2);//将订单置为锁定
  101. t.setProcessState(1);//设置营销管理员来审核
  102. tOrderNewMapper.updateByPrimaryKeySelective(ton);
  103. BigDecimal invoiceAmount=tOrderInvoiceMapper.conutAmountByOrderNo(t.getOrderNo());
  104. t.setInvoiceAmount(invoiceAmount);//开票金额
  105. BigDecimal paymentAmount=tOrderBillNewMapper.conutAmountByOrderNo(t.getOrderNo());
  106. t.setPaymentAmount(paymentAmount);//收款金额
  107. //预计成本与预计退款:预计成本=项目价格*数量 预计退款=收款-预计成本
  108. BigDecimal estimateCost=new BigDecimal(tOrderTaskMapper.selectEstimateCost(t.getOrderNo()));
  109. t.setEstimateCost(estimateCost);
  110. t.setEstimateRefundable(paymentAmount.subtract(estimateCost));
  111. newOrderChangeMapper.insertSelective(t);
  112. NewOrderChangeBo ncb=newOrderChangeMapper.selectByorderNo(t.getOrderNo());
  113. OrderChangeLog ocl=new OrderChangeLog();
  114. ocl.setAuditor(TokenManager.getAdminId());
  115. ocl.setOrderNo(t.getOrderNo());
  116. ocl.setRemarks(startRemarks);
  117. ocl.setChangeId(ncb.getId());
  118. ocl.setStatus(0);
  119. sendNotice(0, t);//设置与通过一样发送信息
  120. orderChangeLogMapper.insertSelective(ocl);
  121. return 1;
  122. }
  123. /*
  124. * 新增审核流程中的
  125. */
  126. private void insertOrderExamine(String orderNo) {
  127. List<TOrderTaskBo> list=tOrderTaskMapper.selectOrderTask(orderNo);
  128. for (TOrderTaskBo t : list) {
  129. if (t.getConsultantId()!=null) {
  130. OrderExamine o=new OrderExamine();
  131. o.setAid(t.getConsultantId());
  132. o.setOrderNo(orderNo);
  133. o.setCreateTime(new Date());
  134. o.setType(0);//咨询师
  135. o.setStatus(0);//正常
  136. orderExamineMapper.insertSelective(o);
  137. }
  138. if (t.getManagerId()!=null) {
  139. OrderExamine o=new OrderExamine();
  140. o.setAid(t.getManagerId());
  141. o.setOrderNo(orderNo);
  142. o.setCreateTime(new Date());
  143. o.setType(1);//咨询师经理
  144. o.setStatus(0);//正常
  145. orderExamineMapper.insertSelective(o);
  146. }
  147. }
  148. }
  149. @Override
  150. public NewOrderChangeBo orderChangeDetails(String orderNo) {
  151. NewOrderChangeBo nb=newOrderChangeMapper.selectByorderNo(orderNo);
  152. return nb;
  153. }
  154. @Override
  155. public NewOrderChangeBo orderChangeDetailsById(Integer id) {
  156. NewOrderChangeBo nb=newOrderChangeMapper.selectById(id);
  157. List<OrderExamineBo> consultantExamine =orderExamineMapper.selectByOrderNo(nb.getOrderNo(),0);
  158. List<OrderExamineBo> managerExamine=orderExamineMapper.selectByOrderNo(nb.getOrderNo(),1);
  159. int isExamine=orderExamineMapper.selectByOrderNoAndAid(nb.getOrderNo(),TokenManager.getAdminId());
  160. nb.setConsultantExamine(consultantExamine);
  161. nb.setManagerExamine(managerExamine);
  162. nb.setIsExamine(isExamine);
  163. return nb;
  164. }
  165. @Override
  166. public int pushOrderChangeAudit(String orderNo, String remarks, Integer status,Integer processState,Integer rejectState) {
  167. NewOrderChangeBo nb=newOrderChangeMapper.selectByorderNo(orderNo);
  168. if (processState==null||(nb.getProcessState()!=9&&processState !=nb.getProcessState()) ) {
  169. throw new BusinessException(new Error( "变更流程与您所操作流程不匹配","变更流程与您所操作流程不匹配"));
  170. }
  171. if (nb.getStatus()==4) {
  172. throw new BusinessException(new Error( "变更流程已通过审核","变更流程已通过审核"));
  173. }
  174. //2通过 3驳回
  175. if (status==2) {
  176. //变更类型 0退单退款 1项目及金额变更 2仅项目变更 3仅金额变更 4重报 5赠送
  177. if(nb.getType() !=null){
  178. if (nb.getChangeAmount().compareTo(new BigDecimal("0.2"))<0) {//小于则总裁通过,大于则董事长
  179. if(nb.getProcessState()==7) {//总裁项目变更通过
  180. nb.setStatus(2);
  181. }
  182. }else {
  183. if(nb.getProcessState()==7) {
  184. nb.setProcessState(nb.getProcessState()+1);
  185. }else if(nb.getProcessState()==8) {//董事长项目变更通过
  186. nb.setStatus(2);
  187. }
  188. }
  189. if(nb.getProcessState()==1){//营销管理通过则设置技术管理员通过表
  190. if (orderExamineMapper.checkCountStatus(orderNo,null,null)<1) {
  191. insertOrderExamine(orderNo);
  192. }
  193. nb.setProcessState(nb.getProcessState()+1);
  194. }
  195. if(nb.getProcessState()==4) {//必须放置在咨询师与咨询师经理前,否则会直接通过不走咨询师管理员
  196. nb.setProcessState(nb.getProcessState()+1);
  197. }
  198. if(nb.getProcessState()==2){//咨询师
  199. //找出当时人的审核改为通过
  200. orderExamineMapper.updateByOrderNoAndAid(orderNo,TokenManager.getAdminId(),0);
  201. //全部通过了则跳下个流程
  202. if (orderExamineMapper.checkCountStatus(orderNo,0,0)<1) {
  203. nb.setProcessState(nb.getProcessState()+1);
  204. }
  205. }
  206. if(nb.getProcessState()==3){//咨询师经理
  207. //找出当时人的审核改为通过
  208. orderExamineMapper.updateByOrderNoAndAid(orderNo,TokenManager.getAdminId(),1);
  209. //全部通过了则跳下个流程
  210. if (orderExamineMapper.checkCountStatus(orderNo,1,0)<1) {
  211. nb.setProcessState(nb.getProcessState()+1);
  212. }
  213. }
  214. if(nb.getProcessState()==5||nb.getProcessState()==6) {
  215. nb.setProcessState(nb.getProcessState()+1);
  216. }
  217. }
  218. /*else {
  219. if(nb.getProcessState()==9) {
  220. //changgeAdopt(nb); 取消订单变更完成
  221. }
  222. //流程状态 0营销员 1营销管理员 2技术员 3技术经理 4技术总监 5财务专员(退单) 6财务总监 7总裁 8董事长 9 财务专员(非退单)
  223. if (nb.getProcessState()==1) nb.setProcessState(7);
  224. else if (nb.getProcessState()==7)nb.setProcessState(9);
  225. }*/ //去掉第二条线
  226. if(nb.getStatus()==3) {
  227. nb.setStatus(1);//如果驳回数据则改为正常数据
  228. }
  229. }else {
  230. nb.setProcessState(rejectState);
  231. nb.setStatus(3);//订单变更设置为驳回
  232. //驳回位置查看有无审核人,没有则直接跳下一个
  233. if (rejectState==2) {
  234. if (orderExamineMapper.checkCountStatus(orderNo,0,null)<1) nb.setProcessState(nb.getProcessState()+1);
  235. }
  236. if (rejectState==3) {
  237. if (orderExamineMapper.checkCountStatus(orderNo,1,null)<1) nb.setProcessState(nb.getProcessState()+1);
  238. }
  239. //如果驳回到技术经理之前则将审核表中状态跳回
  240. if(nb.getProcessState()==3) {
  241. orderExamineMapper.updateByOrderNo(orderNo,1);
  242. }else if (nb.getProcessState()<3) {
  243. orderExamineMapper.updateByOrderNo(orderNo,null);
  244. }
  245. }
  246. OrderChangeLog ocl=new OrderChangeLog();
  247. ocl.setAuditor(TokenManager.getAdminId());
  248. ocl.setOrderNo(orderNo);
  249. ocl.setRemarks(remarks);
  250. ocl.setChangeId(nb.getId());
  251. ocl.setStatus(status);
  252. orderChangeLogMapper.insertSelective(ocl);
  253. sendNotice(status,nb);
  254. newOrderChangeMapper.updateByPrimaryKeySelective(nb);
  255. return 1;
  256. }
  257. private void sendNotice(Integer status,NewOrderChangeBo nb) {
  258. //0发起2通过 3驳回
  259. Integer type=0;
  260. if(status==0)type=NoticeStatus.ORDER_CHANGE_START.getCode();
  261. if(status==2)type=NoticeStatus.ORDER_CHANGE_YES.getCode();
  262. if(status==3)type=NoticeStatus.ORDER_CHANGE_NO.getCode();
  263. //获取发起人与发起人部门
  264. AdminListBo a = adminMapper.getDeptNameByAid(TokenManager.getAdminId());
  265. //获取接收者
  266. //流程状态 0营销员 1营销管理员 2技术员 3技术经理 4技术总监 5财务专员(退单) 6财务总监 7总裁 8董事长 9 财务专员(非退单)
  267. List<String> alist = new ArrayList<>();
  268. TOrderNew o=tOrderNewMapper.selectByPrimaryKey(nb.getOrderNo());
  269. switch (nb.getProcessState()) {
  270. case 0:
  271. alist.add(o.getSalesmanId());
  272. break;
  273. case 1:
  274. alist.addAll(adminMapper.listNameByDepAndName(a.getDepartmentId(), "营销管理员"));
  275. break;
  276. case 2:
  277. alist.addAll(tOrderTaskMapper.listNameByDepAndName(o.getOrderNo(),0));
  278. break;
  279. case 3:
  280. alist.addAll(tOrderTaskMapper.listNameByDepAndName(o.getOrderNo(),1));
  281. break;
  282. case 4:
  283. for (Admin admin : adminMapper.getAdminRoleList("咨询师管理员")) {
  284. alist.add(admin.getId());
  285. }
  286. break;
  287. case 5:
  288. alist.add(organizationManagementMapper.selectByPrimaryKey(o.getOrderDep()).getFinanceId());
  289. break;
  290. case 6:
  291. for (Admin admin : adminMapper.getAdminRoleList("财务管理员")) {
  292. alist.add(admin.getId());
  293. }
  294. break;
  295. case 7:
  296. if(nb.getStatus()==2) {
  297. alist.add(organizationManagementMapper.selectByPrimaryKey(o.getOrderDep()).getFinanceId());
  298. }else {
  299. for (Admin admin : adminMapper.getAdminRoleList("总裁")) {
  300. alist.add(admin.getId());
  301. }
  302. }
  303. break;
  304. case 8:
  305. if(nb.getStatus()==2) {
  306. alist.add(organizationManagementMapper.selectByPrimaryKey(o.getOrderDep()).getFinanceId());
  307. }else {
  308. for (Admin admin : adminMapper.getAdminRoleList("运营决策者")) {
  309. alist.add(admin.getId());
  310. }
  311. }
  312. break;
  313. case 9:
  314. alist.add(organizationManagementMapper.selectByPrimaryKey(o.getOrderDep()).getFinanceId());
  315. break;
  316. }
  317. //发送站内信息与邮件
  318. orderNewService.pushGeneralSendNoticeAndEmail(alist, type, o.getOrderNo(), TokenManager.getAdminId());
  319. }
  320. private void changgeAdopt(NewOrderChangeBo nb) {
  321. TOrderNew t1=tOrderNewMapper.selectByPrimaryKey(nb.getOrderNo());
  322. List<TOrderDun> td1=tOrderDunMapper.selectByOrderNo(nb.getOrderNo());
  323. List<TOrderTaskBo> tt1=tOrderTaskMapper.selectOrderTask(nb.getOrderNo());
  324. List<TOrderLogBo> tl1=tOrderLogMapper.selectOrderByNo(nb.getOrderNo());
  325. String newOrderNo=idGenerator.generateId().toString();
  326. t1.setOrderNo(newOrderNo);
  327. t1.setDeleteSign(1);//将原订单作废,只能查看
  328. tOrderNewMapper.insertSelective(t1);
  329. for (TOrderTaskBo tOrderTaskBo : tt1) {
  330. tOrderTaskBo.setId(null);
  331. tOrderTaskBo.setOrderNo(newOrderNo);
  332. tOrderTaskMapper.insertSelective(tOrderTaskBo);
  333. }
  334. for (TOrderDun tOrderDun : td1) {
  335. tOrderDun.setId(UUID.randomUUID().toString());
  336. tOrderDun.setOrderNo(newOrderNo);
  337. tOrderDunMapper.insertSelective(tOrderDun);
  338. }
  339. for (TOrderLogBo tOrderLogBo : tl1) {
  340. tOrderLogBo.setId(null);
  341. tOrderLogBo.setOrderNo(newOrderNo);
  342. tOrderLogMapper.insertSelective(tOrderLogBo);
  343. }
  344. nb.setStatus(4);
  345. //将订单恢复正常
  346. TOrderNew orderNew =new TOrderNew();
  347. TOrderNew additionalOrder =new TOrderNew();
  348. String additionalOrderNo;
  349. orderNew.setOrderNo(nb.getOrderNo());
  350. orderNew.setDeleteSign(3);//设置为变更中
  351. orderNew.setPrimaryOrder(newOrderNo);
  352. if (nb.getType()==4||nb.getType()==5) {//重报或者赠送
  353. additionalOrderNo=idGenerator.generateId().toString();
  354. orderNew.setAdditionalOrder(additionalOrderNo);
  355. additionalOrder.setOrderNo(additionalOrderNo);
  356. additionalOrder.setCreater(TokenManager.getAdminId());
  357. additionalOrder.setContractNo(t1.getContractNo());
  358. additionalOrder.setSalesmanId(t1.getSalesmanId());
  359. additionalOrder.setOrderType(t1.getOrderType());
  360. additionalOrder.setBuyerId(t1.getBuyerId());
  361. tOrderNewMapper.insertSelective(additionalOrder);
  362. }
  363. tOrderNewMapper.updateByPrimaryKeySelective(orderNew);
  364. }
  365. @Override
  366. public boolean checkOderNo(String orderNo) {
  367. int i=newOrderChangeMapper.checkOderNo(orderNo);
  368. if (i>0) {
  369. return true;
  370. }
  371. return false;
  372. }
  373. @Override
  374. public List<OrderChangeLogBo> selectOrderChangeLogList(String changeId) {
  375. return orderChangeLogMapper.selectOrderChangeLogList(changeId);
  376. }
  377. @SuppressWarnings("unchecked")
  378. @Override
  379. public Pagination<NewOderCahngeListBo> selectOrderChangeList(String userName,Integer processState,Integer timeType,String startTime,String endTime,
  380. String depId,String salesmanName,Integer complete,String orderNo, String contractNo,Integer type,Integer pageSize, Integer pageNo) {
  381. Map<String, Object> parameter=new HashMap<String, Object>();
  382. if(pageSize==null||pageSize<0)pageSize=10;
  383. if(pageNo==null||pageNo<0)pageNo=1;
  384. parameter.put("processState", processState==null?0:processState);
  385. parameter.put("complete", complete==null?0:complete);
  386. if (StringUtils.isNotBlank(userName)) parameter.put("userName", userName);
  387. if (null!=processState) parameter.put("processState", processState);
  388. if (StringUtils.isNotBlank(orderNo)) parameter.put("orderNo", orderNo);
  389. if (StringUtils.isNotBlank(contractNo)) parameter.put("contractNo", contractNo);
  390. if (null!=type) parameter.put("type", type);
  391. if (null!=timeType) parameter.put("timeType", timeType);
  392. if (StringUtils.isNotBlank(startTime)) parameter.put("startTime", startTime);
  393. if (StringUtils.isNotBlank(endTime)) parameter.put("endTime", endTime+" 23:59:59");
  394. if (StringUtils.isNotBlank(depId)) parameter.put("depId", depId);
  395. if (StringUtils.isNotBlank(salesmanName)) parameter.put("salesmanName", salesmanName);
  396. parameter.put("aid", TokenManager.getAdminId());
  397. parameter.put("deps", orderService.selectMyDeps());
  398. Pagination<NewOderCahngeListBo> data = (Pagination<NewOderCahngeListBo>)findPage("selectOrderChangeList", "selectOrderChangeCount", parameter, pageNo, pageSize);
  399. return data;
  400. }
  401. @Override
  402. public int updateOrderChange(NewOrderChangeBo t,Integer changeType,String startRemarks) {
  403. NewOrderChange noc=new NewOrderChange();
  404. noc.setId(t.getId());
  405. if (changeType==0) {
  406. noc.setRemarks(t.getRemarks());
  407. noc.setType(t.getType());
  408. noc.setVoucherUrl(t.getVoucherUrl());
  409. noc.setTotalAmount(t.getTotalAmount());
  410. noc.setSettlementAmount(t.getSettlementAmount());
  411. noc.setChangeAmount(t.getChangeAmount());
  412. noc.setApplicant(t.getApplicant());
  413. noc.setStatus(1);//订单置为正常
  414. noc.setProcessState(1);//流程置为营销管理员
  415. noc.setDepName(t.getDepName());
  416. OrderChangeLog ocl=new OrderChangeLog();
  417. ocl.setAuditor(TokenManager.getAdminId());
  418. ocl.setOrderNo(t.getOrderNo());
  419. ocl.setRemarks(startRemarks==null?"":startRemarks);
  420. ocl.setChangeId(noc.getId());
  421. ocl.setStatus(0);
  422. orderChangeLogMapper.insertSelective(ocl);
  423. sendNotice(0, t);
  424. }else if (changeType==2) {
  425. noc.setCwCost(t.getCwCost());
  426. noc.setRefundableAmount(t.getRefundableAmount());
  427. }
  428. if(changeType!=1)newOrderChangeMapper.updateByPrimaryKeySelective(noc);
  429. return 1;
  430. }
  431. @Override
  432. public int addOrderRefundInvoice(OrderRefundInvoice o) {
  433. o.setCreateTime(new Date());
  434. newOrderChangeMapper.addRefundInvoice(o.getOrderNo(),o.getAmount());
  435. return orderRefundInvoiceMapper.insertSelective(o);
  436. }
  437. @Override
  438. public int deleteOrderRefundInvoice(Integer id) {
  439. OrderRefundInvoice or=orderRefundInvoiceMapper.selectByPrimaryKey(id);
  440. newOrderChangeMapper.subtractRefundInvoice(or.getOrderNo(),or.getAmount());
  441. return orderRefundInvoiceMapper.deleteByPrimaryKey(id);
  442. }
  443. @Override
  444. public List<OrderRefundInvoice> listOrderRefundInvoice(String orderNo) {
  445. return orderRefundInvoiceMapper.selectByorderNo(orderNo);
  446. }
  447. @Override
  448. public int pushCompleteOrderChange(NewOrderChangeBo nb) {
  449. changgeAdopt(nb);
  450. List<String> alist = new ArrayList<>();
  451. TOrderNew o=tOrderNewMapper.selectByPrimaryKey(nb.getOrderNo());
  452. alist.add(o.getSalesmanId());
  453. newOrderChangeMapper.updateByPrimaryKeySelective(nb);
  454. orderNewService.pushGeneralSendNoticeAndEmail(alist,NoticeStatus.ORDER_CHANGE_END.getCode(), o.getOrderNo(), TokenManager.getAdminId());
  455. return 1;
  456. }
  457. @Override
  458. public Map<String, Object> listOrderInvoiceAndBill(String orderNo) {
  459. Map<String, Object> map=new HashMap<>();
  460. List<BillBo>list=tOrderBillNewMapper.selectByOrderNo(orderNo);
  461. List<InvoiceBo>list2=tOrderInvoiceMapper.selectByOrderNo(orderNo);
  462. map.put("bill", list);
  463. map.put("invoice", list2);
  464. return map;
  465. }
  466. @SuppressWarnings("unchecked")
  467. @Override
  468. public void exportMyChange(HttpServletResponse response, String userName, Integer processState, Integer timeType,
  469. String startTime, String endTime, String depId, String salesmanName, Integer complete,String orderNo, String contractNo,Integer type,Integer pageSize,Integer pageNo) throws IOException {
  470. OutputStream out = response.getOutputStream();
  471. List<NewOderCahngeListBo>list=(List<NewOderCahngeListBo>) selectOrderChangeList( userName, processState, timeType, startTime, endTime,
  472. depId, salesmanName, complete, orderNo, contractNo, type, pageSize, pageNo).getList();
  473. try {
  474. //设计表头 String[] comment = {"合同编号","订单编号","客户名称","订单部门","订单类型","下单时间","订单状态","合同额(万元)","已付额(万元)","欠款(万元)","订单负责人","变更类型","变更审核状态","变更提交时间"}
  475. String[] comment = {"合同编号","订单编号","客户名称","订单部门","订单类型","下单时间","订单状态","合同额(万元)","已付额(万元)","欠款(万元)","订单负责人","变更类型","变更审核状态","变更提交时间"};
  476. String fileName ="开票变更记录表" + new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date()) + ".xls";
  477. //type 0 变更
  478. XSSFWorkbook wb =ExportExcelUtil.exportTemplateInfoS(comment,"开票变更记录");
  479. //根据列表编写文档
  480. XSSFSheet sheet =wb.getSheetAt(0);
  481. for (NewOderCahngeListBo ob : (List<NewOderCahngeListBo>)list) {
  482. //新增一行
  483. XSSFRow r = sheet.createRow(sheet.getLastRowNum()+1);
  484. for (int i = 0; i < comment.length; i++) {
  485. //当前列的只
  486. String o = "";
  487. switch (comment[i]) {
  488. // String[] comment = {"合同编号","订单编号","客户名称","订单部门","订单类型","下单时间",
  489. // "订单状态","合同额(万元)","已付额(万元)","欠款(万元)","订单负责人","变更类型","变更审核状态","变更提交时间"};
  490. case "合同编号": o = ob.getContractNo(); break;
  491. case "订单编号": o = ob.getOrderNo().toString(); break;
  492. case "客户名称": o = ob.getNickname(); break;
  493. case "订单部门": o = ob.getDepName(); break;
  494. case "订单类型": o = OrderType.getValueByCode(ob.getOrderType()); break;
  495. case "下单时间": o = ob.getEstablishTimes(); break;
  496. case "订单状态": o = OrderNewState.getValueByCode(ob.getOrderStatus()); break;
  497. case "合同额(万元)": o = ob.getTotalAmount(); break;
  498. case "已付额(万元)": o = ob.getSettlementAmount(); break;
  499. case "欠款(万元)": o = ob.getArrears(); break;
  500. case "订单负责人": o = ob.getSalesmanName(); break;
  501. case "变更类型": o = OrderChangeType.getValueByCode(ob.getType()); break;
  502. case "变更审核状态": o = getProcessState(ob.getProcessState(),ob.getStatus()); break;
  503. case "变更提交时间": o = ob.getCreateTimes(); break;
  504. default: o = ""; break;
  505. }
  506. XSSFCell c = r.createCell(i);
  507. c.setCellValue(o);
  508. }
  509. }
  510. //返回名称及参数
  511. response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes(),"iso-8859-1"));
  512. response.setContentType("application/octet-stream;charset=utf-8");
  513. // 返回数据流
  514. wb.write(out);
  515. out.flush();
  516. out.close();
  517. } catch (Exception e) {
  518. throw new BusinessException(new Error("表格生成错误。"));
  519. }finally {
  520. out.flush();
  521. out.close();
  522. }
  523. }
  524. public static String getProcessState(Integer processState,Integer status) {
  525. String str="";
  526. if (processState == 0) {
  527. str = "营销员";
  528. } else if (processState == 1) {
  529. str = "营销管理员";
  530. } else if (processState == 2) {
  531. str = "咨询师";
  532. } else if (processState == 3) {
  533. str = "咨询师经理";
  534. } else if (processState == 4) {
  535. str = "咨询师总监";
  536. } else if (processState == 5) {
  537. str = "财务专员";
  538. } else if (processState == 6) {
  539. str = "财务总监";
  540. } else if (processState == 7) {
  541. str = "总裁";
  542. } else if (processState == 8) {
  543. str = "董事长";
  544. }
  545. String num = "";
  546. if (status == 0) {
  547. num = "发起";
  548. } else if (status == 1) {
  549. num = "审核中";
  550. } else if (status == 2) {
  551. num = "通过";
  552. } else if (status == 3) {
  553. num = "驳回";
  554. return num + "到" + str;
  555. } else if (status == 4) {
  556. num = "完成";
  557. }
  558. if (processState == 7 && status == 2) {
  559. return "订单变更退票中";
  560. } else if (processState == 8 && status == 2) {
  561. return "订单变更退票中";
  562. } else if (processState >= 7 && status == 4) {
  563. return "订单变更已完成";
  564. } else {
  565. return str + num;
  566. }
  567. }
  568. }