OrderChangeServiceImpl.java 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290
  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.*;
  7. import javax.servlet.http.HttpServletResponse;
  8. import com.goafanti.admin.service.DepartmentService;
  9. import com.goafanti.common.dao.*;
  10. import com.goafanti.common.model.*;
  11. import com.goafanti.order.service.*;
  12. import org.apache.poi.xssf.usermodel.XSSFCell;
  13. import org.apache.poi.xssf.usermodel.XSSFRow;
  14. import org.apache.poi.xssf.usermodel.XSSFSheet;
  15. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  16. import org.slf4j.Logger;
  17. import org.slf4j.LoggerFactory;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.stereotype.Service;
  20. import com.goafanti.admin.bo.AdminListBo;
  21. import com.goafanti.common.bo.Error;
  22. import com.goafanti.common.bo.OrderExamineBo;
  23. import com.goafanti.common.constant.AFTConstants;
  24. import com.goafanti.common.enums.NoticeStatus;
  25. import com.goafanti.common.error.BusinessException;
  26. import com.goafanti.common.utils.DateUtils;
  27. import com.goafanti.common.utils.ExportExcelUtil;
  28. import com.goafanti.common.utils.StringUtils;
  29. import com.goafanti.core.mybatis.BaseMybatisDao;
  30. import com.goafanti.core.mybatis.JDBCIdGenerator;
  31. import com.goafanti.core.mybatis.page.Pagination;
  32. import com.goafanti.core.shiro.token.TokenManager;
  33. import com.goafanti.order.bo.BillBo;
  34. import com.goafanti.order.bo.InputNewOrderRefund;
  35. import com.goafanti.order.bo.InputTChangeTask;
  36. import com.goafanti.order.bo.InvoiceBo;
  37. import com.goafanti.order.bo.NewOderCahngeListBo;
  38. import com.goafanti.order.bo.NewOrderChangeBo;
  39. import com.goafanti.order.bo.OrderChangeLogBo;
  40. import com.goafanti.order.bo.OutNewOrderDunBo;
  41. import com.goafanti.order.bo.OutNewOrderRefund;
  42. import com.goafanti.order.bo.TChangeDunOut;
  43. import com.goafanti.order.bo.TChangeTaskOut;
  44. import com.goafanti.order.bo.TOrderLogBo;
  45. import com.goafanti.order.bo.TOrderNewBo;
  46. import com.goafanti.order.bo.TOrderTaskBo;
  47. import com.goafanti.order.enums.OrderChangeType;
  48. import com.goafanti.order.enums.OrderNewState;
  49. import com.goafanti.order.enums.OrderType;
  50. import com.goafanti.order.enums.ProcessStatus;
  51. import com.goafanti.techproject.enums.TaskState;
  52. @Service
  53. public class OrderChangeServiceImpl extends BaseMybatisDao<NewOrderChangeMapper> implements OrderChangeService {
  54. @Autowired
  55. private NewOrderChangeMapper newOrderChangeMapper;
  56. @Autowired
  57. private OrderChangeLogMapper orderChangeLogMapper;
  58. @Autowired
  59. private TOrderNewMapper tOrderNewMapper;
  60. @Autowired
  61. private TOrderLogMapper tOrderLogMapper;
  62. @Autowired
  63. private TOrderTaskMapper tOrderTaskMapper;
  64. @Autowired
  65. private TOrderInvoiceMapper tOrderInvoiceMapper;
  66. @Autowired
  67. private OrderRefundInvoiceMapper orderRefundInvoiceMapper;
  68. @Autowired
  69. private TTaskMemberMapper tTaskMemberMapper;
  70. @Autowired
  71. private NewOrderRefundMapper newOrderRefundMapper;
  72. @Autowired
  73. private OrderExamineMapper orderExamineMapper;
  74. @Autowired
  75. private OrderService orderService;
  76. @Autowired
  77. private NewOrderDunMapper newOrderDunMapper;
  78. @Autowired
  79. private JDBCIdGenerator idGenerator;
  80. @Autowired
  81. private AdminMapper adminMapper;
  82. @Autowired
  83. private OrderNewService orderNewService;
  84. @Autowired
  85. private NewOrderDunService newOrderDunService;
  86. @Autowired
  87. private TChangeTaskMapper tChangeTaskMapper;
  88. @Autowired
  89. private TChangeDunMapper tChangeDunMapper;
  90. @Autowired
  91. private TOrderBillNewMapper tOrderBillNewMapper;
  92. @Autowired
  93. private TTaskMidMapper tTaskMidMapper;
  94. @Autowired
  95. private UserLockReleaseMapper userLockReleaseMapper;
  96. @Autowired
  97. private PushOrderService pushOrderService;
  98. @Autowired
  99. private TOrderMidMapper tOrderMidMapper;
  100. @Autowired
  101. private UserMidMapper userMidMapper;
  102. @Autowired
  103. private DepartmentService departmentService;
  104. @Autowired
  105. private OrderProjectService orderProjectService;
  106. Logger logger = LoggerFactory.getLogger(OrderChangeServiceImpl.class);
  107. @Override
  108. public int addOrderChange(NewOrderChangeBo t,String startRemarks) {
  109. TOrderNew ton=new TOrderNew();
  110. ton.setOrderNo(t.getOrderNo());
  111. ton.setDeleteSign(2);//将订单置为锁定
  112. tOrderNewMapper.updateByPrimaryKeySelective(ton);
  113. BigDecimal invoiceAmount=tOrderInvoiceMapper.conutAmountByOrderNo(t.getOrderNo());
  114. t.setInvoiceAmount(invoiceAmount);//开票金额
  115. BigDecimal paymentAmount=tOrderBillNewMapper.conutAmountByOrderNo(t.getOrderNo());
  116. t.setPaymentAmount(paymentAmount);//收款金额
  117. //预计成本与预计退款:预计成本=项目价格*数量 预计退款=收款-预计成本
  118. BigDecimal estimateCost=new BigDecimal(tOrderTaskMapper.selectEstimateCost(t.getOrderNo()));
  119. t.setEstimateCost(estimateCost);
  120. t.setEstimateRefundable(paymentAmount.subtract(estimateCost));
  121. t.setZxsRemarks(startRemarks);
  122. newOrderChangeMapper.insertSelective(t);
  123. NewOrderChangeBo ncb=newOrderChangeMapper.selectByorderNoAndStatus(t.getOrderNo());
  124. List<OutNewOrderDunBo> listDun=newOrderDunMapper.selectListNewOrderDun(t.getOrderNo(),null);
  125. List<TChangeDun> listcd=new ArrayList<>();
  126. if (listDun!=null&&!listDun.isEmpty()) {
  127. for (OutNewOrderDunBo d : listDun) {
  128. TChangeDun cd=new TChangeDun();
  129. cd.setOrderNo(d.getOrderNo());
  130. cd.setAid(d.getAid());
  131. cd.setAppropriationRatio(d.getAppropriationRatio());
  132. cd.setCid(ncb.getId());
  133. cd.setDid(d.getId());
  134. cd.setTid(d.getTid());
  135. cd.setProjectType(d.getProjectType());
  136. cd.setDunType(d.getDunType());
  137. cd.setMoney(d.getMoney());
  138. cd.setWaitDay(d.getWaitDay());
  139. cd.setStartTime(d.getStartTime());
  140. cd.setEffectiveCount(d.getEffectiveCount());
  141. cd.setCustomizeTime(d.getCustomizeTime());
  142. cd.setCustomizeName(d.getCustomizeName());
  143. listcd.add(cd);
  144. }
  145. tChangeDunMapper.insertSelectiveList(listcd);
  146. }
  147. List<TChangeTask> listck=new ArrayList<>();
  148. List<TOrderTaskBo> listTask=tOrderTaskMapper.selectOrderTaskAll(t.getOrderNo(),null);
  149. if (listTask!=null&&!listTask.isEmpty()) {
  150. for (TOrderTaskBo tt : listTask) {
  151. TChangeTask ck=new TChangeTask();
  152. ck.setOrderNo(tt.getOrderNo());
  153. ck.setCid(ncb.getId());
  154. ck.setCommodityId(tt.getCommodityId());
  155. ck.setOrderNo(tt.getOrderNo());
  156. ck.setCommodityName(tt.getCommodityName());
  157. ck.setCommodityPrice(tt.getCommodityPrice());
  158. ck.setCommodityQuantity(tt.getCommodityQuantity());
  159. ck.setTaskComment(tt.getTaskComment());
  160. ck.setSplitStatus(tt.getSplitStatus());
  161. ck.setSplitSuper(tt.getSplitSuper());
  162. ck.setReceiverName(tt.getReceiverName());
  163. ck.setMain(tt.getMain());
  164. ck.setTid(tt.getId());
  165. if(tt.getServiceLife()!=null) ck.setServiceLife(tt.getServiceLife());
  166. if(tt.getServiceYear()!=null) ck.setServiceYear(tt.getServiceYear());
  167. if(tt.getYearSum()!=null) ck.setYearSum(tt.getYearSum());
  168. if(tt.getContractTerm()!=null) ck.setContractTerm(tt.getContractTerm());
  169. listck.add(ck);
  170. }
  171. tChangeTaskMapper.insertSelectiveList(listck);
  172. }
  173. if (t.getType()==OrderChangeType.TDTK.getCode()) {
  174. OrderChangeLog ocl=new OrderChangeLog();
  175. ocl.setAuditor(TokenManager.getAdminId());
  176. ocl.setOrderNo(t.getOrderNo());
  177. ocl.setRemarks(startRemarks);
  178. ocl.setChangeId(ncb.getId());
  179. ocl.setStatus(0);
  180. sendNotice(0, t);//设置与通过一样发送信息
  181. orderChangeLogMapper.insertSelective(ocl);
  182. }
  183. return 1;
  184. }
  185. /*
  186. * 新增审核流程中的
  187. */
  188. private void insertOrderExamine(String orderNo) {
  189. List<TOrderTaskBo> list=tOrderTaskMapper.selectOrderTaskAll(orderNo,null);
  190. for (TOrderTaskBo t : list) {
  191. if (t.getConsultantId()!=null) {
  192. OrderExamine o=new OrderExamine();
  193. o.setAid(t.getConsultantId());
  194. o.setOrderNo(orderNo);
  195. o.setCreateTime(new Date());
  196. o.setType(0);//咨询师
  197. o.setStatus(0);//正常
  198. orderExamineMapper.insertSelective(o);
  199. }
  200. if (t.getManagerId()!=null) {
  201. OrderExamine o=new OrderExamine();
  202. o.setAid(t.getManagerId());
  203. o.setOrderNo(orderNo);
  204. o.setCreateTime(new Date());
  205. o.setType(1);//咨询师经理
  206. o.setStatus(0);//正常
  207. orderExamineMapper.insertSelective(o);
  208. }
  209. }
  210. }
  211. @Override
  212. public List<NewOrderChangeBo> orderChangeDetails(String orderNo) {
  213. List<NewOrderChangeBo> list=newOrderChangeMapper.selectByorderNo(orderNo);
  214. for (NewOrderChangeBo noc : list) {
  215. List<OrderExamineBo> consultantExamine =orderExamineMapper.selectByOrderNo(noc.getOrderNo(),0);
  216. List<OrderExamineBo> managerExamine=orderExamineMapper.selectByOrderNo(noc.getOrderNo(),1);
  217. int isExamine=orderExamineMapper.selectByOrderNoAndAid(noc.getOrderNo(),TokenManager.getAdminId());
  218. noc.setConsultantExamine(consultantExamine);
  219. noc.setManagerExamine(managerExamine);
  220. if (noc.getVoucherUrl()!=null) {
  221. TOrderNew t=tOrderNewMapper.selectByPrimaryKey(noc.getOrderNo());
  222. noc.setVoucherUrl(pushOrderService.changeProcessStatusConstant(noc.getVoucherUrl(),t.getSalesmanId(),noc.getProcessState(),noc.getStatus()));
  223. }
  224. noc.setIsExamine(isExamine);
  225. }
  226. return list;
  227. }
  228. @Override
  229. public NewOrderChangeBo orderChangeDetailsById(Integer id) {
  230. NewOrderChangeBo nb=newOrderChangeMapper.selectById(id);
  231. List<OrderExamineBo> consultantExamine =orderExamineMapper.selectByOrderNo(nb.getOrderNo(),0);
  232. List<OrderExamineBo> managerExamine=orderExamineMapper.selectByOrderNo(nb.getOrderNo(),1);
  233. int isExamine=orderExamineMapper.selectByOrderNoAndAid(nb.getOrderNo(),TokenManager.getAdminId());
  234. nb.setConsultantExamine(consultantExamine);
  235. nb.setManagerExamine(managerExamine);
  236. nb.setIsExamine(isExamine);
  237. if(nb.getProcessState()!=null){
  238. TOrderNew t=tOrderNewMapper.selectByPrimaryKey(nb.getOrderNo());
  239. nb.setVoucherUrl(pushOrderService.changeProcessStatusConstant(nb.getVoucherUrl(),t.getSalesmanId(),nb.getProcessState(),nb.getStatus()));
  240. }
  241. return nb;
  242. }
  243. @Override
  244. public int pushOrderChangeAudit(String changeId, String remarks, Integer status,Integer processState,Integer rejectState) {
  245. NewOrderChangeBo nb=newOrderChangeMapper.selectByChangeId(changeId);
  246. String orderNo=nb.getOrderNo();
  247. if (processState==null||(nb.getProcessState()!=9&&processState !=nb.getProcessState()) ) {
  248. throw new BusinessException(new Error( "变更流程与您所操作流程不匹配","变更流程与您所操作流程不匹配"));
  249. }
  250. if (nb.getStatus()==4) {
  251. throw new BusinessException(new Error( "变更流程已通过审核","变更流程已通过审核"));
  252. }
  253. //2通过 3驳回
  254. if (status==2) {
  255. //变更类型 0退单退款 1项目及金额变更 2仅项目变更 3仅金额变更 4重报 5赠送
  256. if(nb.getType() !=null){
  257. if (nb.getChangeAmount().compareTo(new BigDecimal("0.2"))<0) {//小于则总裁通过,大于则董事长
  258. if(nb.getProcessState()==7) {//总裁项目变更通过
  259. nb.setStatus(2);
  260. }
  261. }else {
  262. if(nb.getProcessState()==7) {
  263. nb.setProcessState(nb.getProcessState()+1);
  264. }else if(nb.getProcessState()==8) {//董事长项目变更通过
  265. nb.setStatus(2);
  266. }
  267. }
  268. //营销管理通过则设置技术管理员通过表
  269. if(nb.getProcessState()==1){
  270. if (orderExamineMapper.checkCountStatus(orderNo,null,null)<1) {
  271. insertOrderExamine(orderNo);
  272. } else {
  273. orderExamineMapper.updateByOrderNo(orderNo,null);
  274. }
  275. nb.setProcessState(nb.getProcessState()+1);
  276. }
  277. //必须放置在咨询师与咨询师经理前,否则会直接通过不走咨询师管理员
  278. if(nb.getProcessState()==4||nb.getProcessState()==5||nb.getProcessState()==6) {
  279. nb.setProcessState(nb.getProcessState()+1);
  280. }
  281. if(nb.getProcessState()==2){//咨询师
  282. //找出当时人的审核改为通过
  283. orderExamineMapper.updateByOrderNoAndAid(orderNo,TokenManager.getAdminId(),0);
  284. //全部通过了则跳下个流程
  285. if (orderExamineMapper.checkCountStatus(orderNo,0,0)<1) {
  286. nb.setProcessState(nb.getProcessState()+1);
  287. }
  288. }
  289. if(nb.getProcessState()==3){//咨询师经理
  290. //找出当时人的审核改为通过
  291. orderExamineMapper.updateByOrderNoAndAid(orderNo,TokenManager.getAdminId(),1);
  292. //全部通过了则跳下个流程
  293. if (orderExamineMapper.checkCountStatus(orderNo,1,0)<1) {
  294. nb.setProcessState(nb.getProcessState()+1);
  295. }
  296. }
  297. }
  298. if(nb.getStatus()==3) {
  299. nb.setStatus(1);//如果驳回数据则改为正常数据
  300. }
  301. //通过订单取消记录的驳回位置
  302. if (processState==nb.getBackStatus()) {
  303. nb.setBackStatus(0);
  304. }
  305. }else {
  306. nb.setProcessState(rejectState);
  307. nb.setStatus(3);//订单变更设置为驳回
  308. //驳回订单记录驳回位置
  309. if (processState>nb.getBackStatus()) {
  310. nb.setBackStatus(processState);
  311. }
  312. //驳回位置查看有无审核人,没有则直接跳下一个
  313. if (rejectState==2) {
  314. if (orderExamineMapper.checkCountStatus(orderNo,0,null)<1) nb.setProcessState(nb.getProcessState()+1);
  315. }
  316. if (rejectState==3) {
  317. if (orderExamineMapper.checkCountStatus(orderNo,1,null)<1) nb.setProcessState(nb.getProcessState()+1);
  318. }
  319. //如果驳回到技术经理之前则将审核表中状态跳回
  320. if(nb.getProcessState()==3) {
  321. orderExamineMapper.updateByOrderNo(orderNo,1);
  322. }else if (nb.getProcessState()<3) {
  323. orderExamineMapper.updateByOrderNo(orderNo,null);
  324. }
  325. }
  326. OrderChangeLog ocl=new OrderChangeLog();
  327. ocl.setAuditor(TokenManager.getAdminId());
  328. ocl.setOrderNo(orderNo);
  329. ocl.setRemarks(remarks);
  330. ocl.setChangeId(nb.getId());
  331. ocl.setStatus(status);
  332. orderChangeLogMapper.insertSelective(ocl);
  333. sendNotice(status,nb);
  334. newOrderChangeMapper.updateByPrimaryKeySelective(nb);
  335. return 1;
  336. }
  337. private void sendNotice(Integer status,NewOrderChangeBo nb) {
  338. //0发起2通过 3驳回
  339. Integer type=0;
  340. if(status==0)type=NoticeStatus.ORDER_CHANGE_START.getCode();
  341. if(status==2)type=NoticeStatus.ORDER_CHANGE_YES.getCode();
  342. if(status==3)type=NoticeStatus.ORDER_CHANGE_NO.getCode();
  343. //获取发起人与发起人部门
  344. AdminListBo a = adminMapper.getDeptNameByAid(TokenManager.getAdminId());
  345. //获取客户信息
  346. TOrderNewBo o=tOrderNewMapper.getSaleIdByOno(nb.getOrderNo());
  347. //获取接收者
  348. //流程状态 0营销员 1营销管理员 2技术员 3技术经理 4技术总监 5财务专员(退单) 6财务总监 7总裁 8董事长
  349. List<String> alist = new ArrayList<>();
  350. //获取部门负责财务人员
  351. switch (nb.getProcessState()) {
  352. case 0:
  353. alist.add(o.getSalesmanId());
  354. break;
  355. case 1:
  356. alist.addAll(adminMapper.listNameByDepAndName(a.getDepartmentId(), "营销管理员"));
  357. break;
  358. case 2:
  359. alist.addAll(tOrderTaskMapper.listNameByDepAndName(o.getOrderNo(),0));
  360. break;
  361. case 3:
  362. alist.addAll(tOrderTaskMapper.listNameByDepAndName(o.getOrderNo(),1));
  363. break;
  364. case 4:
  365. for (Admin admin : adminMapper.getAdminRoleList("咨询师管理员")) {
  366. alist.add(admin.getId());
  367. }
  368. break;
  369. case 5:
  370. alist.add(o.getFinanceId());
  371. break;
  372. case 6:
  373. for (Admin admin : adminMapper.getAdminRoleList("财务管理员")) {
  374. alist.add(admin.getId());
  375. }
  376. break;
  377. case 7:
  378. if(nb.getStatus()==2) {
  379. alist.add(o.getFinanceId());
  380. }else {
  381. for (Admin admin : adminMapper.getAdminRoleList("总裁")) {
  382. alist.add(admin.getId());
  383. }
  384. }
  385. break;
  386. case 8:
  387. if(nb.getStatus()==2) {
  388. alist.add(o.getFinanceId());
  389. }else {
  390. for (Admin admin : adminMapper.getAdminRoleList("运营决策者")) {
  391. alist.add(admin.getId());
  392. }
  393. }
  394. break;
  395. }
  396. //发送站内信息与邮件
  397. orderNewService.pushGeneralSendNoticeAndEmail(alist, type, o, TokenManager.getAdminId(),0);
  398. }
  399. /**
  400. * 变更完成复制出原订单镜像
  401. */
  402. private void changeAdopt(NewOrderChangeBo nb) {
  403. TOrderNew t1=tOrderNewMapper.selectByPrimaryKey(nb.getOrderNo());
  404. List<OutNewOrderDunBo> td2=newOrderDunMapper.selectListNewOrderDun(nb.getOrderNo(), null);
  405. List<TOrderTaskBo> tt1=tOrderTaskMapper.selectOrderTaskAll(nb.getOrderNo(),null);
  406. List<TOrderLogBo> tl1=tOrderLogMapper.selectOrderByNo(nb.getOrderNo());
  407. String newOrderNo=idGenerator.generateId().toString();
  408. t1.setOrderNo(newOrderNo);
  409. nb.setUsedOrder(newOrderNo);
  410. t1.setDeleteSign(1);//将原订单作废,只能查看
  411. tOrderNewMapper.insertSelective(t1);
  412. Map<Integer, Integer> map=new HashMap<>();
  413. for (TOrderTaskBo tOrderTaskBo : tt1) {
  414. //处理父子项目关系 将员父项目存储
  415. int x=tOrderTaskBo.getId();
  416. tOrderTaskBo.setId(null);
  417. tOrderTaskBo.setOrderNo(newOrderNo);
  418. if(tOrderTaskBo.getSplitStatus()==2) {
  419. tOrderTaskBo.setSplitSuper(map.get(tOrderTaskBo.getSplitSuper()));
  420. }
  421. tOrderTaskBo.setProcessStatus(3);
  422. tOrderTaskMapper.insertSelective(tOrderTaskBo);
  423. TTaskMember tTaskMember = tTaskMemberMapper.selectByTid(x);
  424. if (tTaskMember!=null){
  425. tTaskMember.setId(null);
  426. tTaskMember.setTid(tOrderTaskBo.getId());
  427. tTaskMemberMapper.insertSelective(tTaskMember);
  428. }
  429. int y=tOrderTaskBo.getId();
  430. TTaskMid dtails = tTaskMidMapper.getDtails(tOrderTaskBo.getId());
  431. TTaskMid tTaskMid = new TTaskMid(y, new BigDecimal(0));
  432. tTaskMid.setDispatchProvince(dtails.getDispatchProvince());
  433. tTaskMid.setDutyDep(dtails.getDutyDep());
  434. tTaskMidMapper.insertSelective(tTaskMid);
  435. if(tOrderTaskBo.getSplitStatus()==1) {
  436. map.put(x, y);
  437. }
  438. }
  439. if (!td2.isEmpty()) {
  440. List<OutNewOrderDunBo> newtd2=new ArrayList<>();
  441. for (OutNewOrderDunBo outNewOrderDunBo : td2) {
  442. outNewOrderDunBo.setId(null);
  443. outNewOrderDunBo.setOrderNo(newOrderNo);
  444. newtd2.add(outNewOrderDunBo);
  445. }
  446. newOrderDunMapper.insertBatch(newtd2);
  447. }
  448. if (!tl1.isEmpty()) {
  449. List<TOrderLogBo> newtl1=new ArrayList<>();
  450. for (TOrderLogBo tOrderLogBo : tl1) {
  451. tOrderLogBo.setId(null);
  452. tOrderLogBo.setOrderNo(newOrderNo);
  453. newtl1.add(tOrderLogBo);
  454. }
  455. tOrderLogMapper.insertBatch(newtl1);
  456. }
  457. nb.setStatus(4);
  458. //将订单恢复正常
  459. TOrderNew orderNew =new TOrderNew();
  460. orderNew.setOrderNo(nb.getOrderNo());
  461. orderNew.setDeleteSign(0);
  462. orderNew.setPrimaryOrder(newOrderNo);
  463. int i =tOrderMidMapper.judgeProjectType(nb.getOrderNo());
  464. if (i>0){
  465. TOrderMid tm=new TOrderMid();
  466. tm.setOrderNo(nb.getOrderNo());
  467. tm.setProjectType(1);
  468. tOrderMidMapper.updateByOrderNo(tm);
  469. }
  470. tOrderNewMapper.updateByPrimaryKeySelective(orderNew);
  471. }
  472. @Override
  473. public boolean checkOderNo(String orderNo) {
  474. int i=newOrderChangeMapper.checkOderNo(orderNo);
  475. if (i>0) {
  476. return true;
  477. }
  478. return false;
  479. }
  480. @Override
  481. public List<OrderChangeLogBo> selectOrderChangeLogList(String changeId) {
  482. return orderChangeLogMapper.selectOrderChangeLogList(changeId);
  483. }
  484. @SuppressWarnings("unchecked")
  485. @Override
  486. public Pagination<NewOderCahngeListBo> selectOrderChangeList(String userName,Integer processState,Integer timeType,String startTime,String endTime,
  487. String deps,String salesmanName,Integer complete,String orderNo, String contractNo,Integer type,Integer pageSize, Integer pageNo) {
  488. Map<String, Object> parameter=new HashMap<String, Object>();
  489. if(pageSize==null||pageSize<0)pageSize=10;
  490. if(pageNo==null||pageNo<0)pageNo=1;
  491. parameter.put("processState", processState==null?0:processState);
  492. parameter.put("complete", complete==null?0:complete);
  493. if (StringUtils.isNotBlank(userName)) parameter.put("userName", userName);
  494. if (null!=processState) parameter.put("processState", processState);
  495. if (StringUtils.isNotBlank(orderNo)) parameter.put("orderNo", orderNo);
  496. if (StringUtils.isNotBlank(contractNo)) parameter.put("contractNo", contractNo);
  497. if (null!=type) parameter.put("type", type);
  498. if (null!=timeType) parameter.put("timeType", timeType);
  499. if (StringUtils.isNotBlank(startTime)) parameter.put("startTime", startTime);
  500. if (StringUtils.isNotBlank(endTime)) parameter.put("endTime", endTime+" 23:59:59");
  501. if (processState==1){
  502. List<String > myDep;
  503. if (deps!=null) {
  504. myDep=departmentService.selectSubDeps(deps);
  505. if (myDep.isEmpty()){
  506. return new Pagination(1,10,0);
  507. }
  508. }else {
  509. myDep=departmentService.selectMyDeps();
  510. }
  511. parameter.put("deps",myDep);
  512. }else {
  513. if (deps!=null) {
  514. parameter.put("deps",departmentService.parseArray(deps));
  515. }
  516. }
  517. if (StringUtils.isNotBlank(salesmanName)) parameter.put("salesmanName", salesmanName);
  518. if(processState==5&&TokenManager.hasRole(AFTConstants.FINANCE_MANAGER)) {
  519. parameter.put("aids", adminMapper.selectBySuperId(TokenManager.getAdminId()));
  520. }else {
  521. parameter.put("aid", TokenManager.getAdminId());
  522. }
  523. Pagination<NewOderCahngeListBo> data = (Pagination<NewOderCahngeListBo>)findPage("selectOrderChangeList", "selectOrderChangeCount", parameter, pageNo, pageSize);
  524. return data;
  525. }
  526. @Override
  527. public int updateOrderChange(NewOrderChangeBo t,Integer changeType,String startRemarks) {
  528. NewOrderChange noc=new NewOrderChange();
  529. t.setProcessState(1);
  530. noc.setId(t.getId());
  531. if (changeType==0) {
  532. // chekeChangeTaskNumber(noc);
  533. noc.setRemarks(t.getRemarks());
  534. noc.setType(t.getType());
  535. noc.setVoucherUrl(t.getVoucherUrl());
  536. noc.setTotalAmount(t.getTotalAmount());
  537. noc.setSettlementAmount(t.getSettlementAmount());
  538. noc.setChangeAmount(t.getChangeAmount());
  539. noc.setApplicant(t.getApplicant());
  540. noc.setStatus(1);//订单置为正常
  541. noc.setProcessState(1);//流程置为营销管理员
  542. noc.setDepName(t.getDepName());
  543. OrderChangeLog ocl=new OrderChangeLog();
  544. ocl.setAuditor(TokenManager.getAdminId());
  545. ocl.setOrderNo(t.getOrderNo());
  546. ocl.setRemarks(startRemarks==null?"":startRemarks);
  547. ocl.setChangeId(noc.getId());
  548. ocl.setStatus(0);
  549. if(t.getType()!=0)chekeAmout(t);
  550. orderChangeLogMapper.insertSelective(ocl);
  551. TOrderNew ton=new TOrderNew();
  552. ton.setOrderNo(noc.getOrderNo());
  553. ton.setDeleteSign(3);
  554. tOrderNewMapper.updateByPrimaryKeySelective(ton);
  555. sendNotice(0, t);
  556. }else if (changeType==2) {
  557. noc.setCwCost(t.getCwCost());
  558. noc.setRefundableAmount(t.getRefundableAmount());
  559. }
  560. if(changeType!=1)newOrderChangeMapper.updateByPrimaryKeySelective(noc);
  561. return 1;
  562. }
  563. private void chekeAmout(NewOrderChangeBo t) {
  564. BigDecimal amout=t.getTotalAmount();
  565. List<TChangeTaskOut> list = selectChangeTask(t.getId());
  566. BigDecimal count=new BigDecimal(0);
  567. for (TChangeTaskOut tt : list) {
  568. if(tt.getType()!=3)count=count.add(tt.getCommodityPrice());
  569. }
  570. if (amout.compareTo(count)!=0) {
  571. throw new BusinessException("项目金额总和不等于合同总金额。");
  572. }
  573. List<TChangeDunOut> list2 = selectChangeDun(t.getId());
  574. count=new BigDecimal(0);
  575. for (TChangeDunOut td : list2) {
  576. if(td.getMoney()==null)td.setMoney(new BigDecimal(0));
  577. if(td.getType()!=3)count=count.add(td.getMoney());
  578. }
  579. if (amout.compareTo(count)!=0) {
  580. throw new BusinessException("收款节点金额总和不等于合同总金额。");
  581. }
  582. }
  583. /**
  584. * 判断变更项目是否拆分父子数量是否一直
  585. * @param noc
  586. */
  587. private void chekeChangeTaskNumber(NewOrderChange noc) {
  588. List<TChangeTaskOut> list=tChangeTaskMapper.selectByCid(noc.getId(),null);
  589. //x记录父值y记录子值
  590. int x=0;
  591. int y=0;
  592. for (TChangeTaskOut tcto : list) {
  593. if (tcto.getSplitStatus()==1&&tcto.getType()!=3) {
  594. x+=tcto.getCommodityQuantity();
  595. }else if (tcto.getSplitStatus()==2&&tcto.getType()!=3) {
  596. y+=tcto.getCommodityQuantity();
  597. }
  598. }
  599. if (x!=y) {
  600. throw new BusinessException("变更子项目与父项目数量不符");
  601. }
  602. }
  603. @Override
  604. public int addOrderRefundInvoice(OrderRefundInvoice o) {
  605. o.setCreateTime(new Date());
  606. newOrderChangeMapper.addRefundInvoice(o.getOrderNo(),o.getAmount());
  607. return orderRefundInvoiceMapper.insertSelective(o);
  608. }
  609. @Override
  610. public int deleteOrderRefundInvoice(Integer id) {
  611. OrderRefundInvoice or=orderRefundInvoiceMapper.selectByPrimaryKey(id);
  612. newOrderChangeMapper.subtractRefundInvoice(or.getOrderNo(),or.getAmount());
  613. return orderRefundInvoiceMapper.deleteByPrimaryKey(id);
  614. }
  615. @Override
  616. public List<OrderRefundInvoice> listOrderRefundInvoice(String orderNo) {
  617. return orderRefundInvoiceMapper.selectByorderNo(orderNo);
  618. }
  619. @Override
  620. public int pushCompleteOrderChange(NewOrderChangeBo nb) {
  621. //变更完成
  622. changeAdopt(nb);
  623. TOrderNew o=pushChange(nb);
  624. newOrderChangeMapper.updateByPrimaryKeySelective(nb);
  625. TOrderNewBo order=tOrderNewMapper.getSaleIdByOno(nb.getOrderNo());
  626. List<String> alist = getAllAid(nb.getId());
  627. OrderChangeLog ocl=new OrderChangeLog();
  628. ocl.setAuditor(TokenManager.getAdminId());
  629. ocl.setOrderNo(nb.getOrderNo());
  630. ocl.setRemarks("变更完成。");
  631. ocl.setChangeId(nb.getId());
  632. ocl.setStatus(4);
  633. orderChangeLogMapper.insertSelective(ocl);
  634. orderNewService.pushGeneralSendNoticeAndEmail(alist,NoticeStatus.ORDER_CHANGE_END.getCode(), order, TokenManager.getAdminId(),0);
  635. return 1;
  636. }
  637. /**
  638. * 获取除发起者意外所有审核者
  639. * @param id
  640. * @return
  641. */
  642. private List<String> getAllAid(Integer id) {
  643. List<String> alist = new ArrayList<>();
  644. List<String>newl=new ArrayList<>();
  645. List<OrderChangeLogBo> list=orderChangeLogMapper.selectOrderChangeLogList(id.toString());
  646. for (OrderChangeLogBo log : list) {
  647. if (!log.getStatus().equals(0)){
  648. if (!newl.contains(log.getAuditor())){
  649. newl.add(log.getAuditor());
  650. }
  651. }
  652. }
  653. alist.addAll(newl);
  654. return alist;
  655. }
  656. @Override
  657. public int pushCompleteRefund(NewOrderChangeBo nb) {
  658. nb.setStatus(6);
  659. NewOrderChangeBo nob=newOrderChangeMapper.selectById(nb.getId());
  660. TOrderNewBo o=tOrderNewMapper.getSaleIdByOno(nob.getOrderNo());
  661. List<String> alist = new ArrayList<>();
  662. alist.add(o.getSalesmanId());
  663. newOrderChangeMapper.updateByPrimaryKeySelective(nb);
  664. orderNewService.pushGeneralSendNoticeAndEmail(alist,NoticeStatus.ORDER_CHANGE_YES.getCode(), o, TokenManager.getAdminId(),0);
  665. return 1;
  666. }
  667. @Override
  668. public boolean checkChangeId(Integer id) {
  669. NewOrderChangeBo nob=newOrderChangeMapper.selectById(id);
  670. if (nob.getStatus()==4){
  671. return true;
  672. }
  673. return false;
  674. }
  675. /**
  676. * 修改订单数据
  677. * @param nb
  678. */
  679. private TOrderNew pushChange(NewOrderChangeBo nb) {
  680. TOrderNew o=tOrderNewMapper.selectByPrimaryKey(nb.getOrderNo());
  681. NewOrderChangeBo nob=newOrderChangeMapper.selectById(nb.getId());
  682. // 变更类型 0退单退款 1项目及金额变更 2仅项目变更 3仅金额变更 4重报 5赠送
  683. //退单退款不需改变内容
  684. if (nob.getType()==OrderChangeType.XMJJEBG.getCode()) {
  685. o.setTotalAmount(nob.getTotalAmount());
  686. //处理项目及催款
  687. pushTaskAndDun(nob.getId(),o);
  688. }else if (nob.getType()==OrderChangeType.JXMBG.getCode()) {
  689. pushTaskAndDun(nob.getId(),o);
  690. }else if (nob.getType()==OrderChangeType.JJEBG.getCode()) {
  691. o.setTotalAmount(nob.getTotalAmount());
  692. pushTaskAndDun(nob.getId(),o);
  693. }else if (nob.getType()==OrderChangeType.CB.getCode()){
  694. o.setTotalAmount(nob.getTotalAmount());
  695. pushTaskAndDun(nob.getId(),o);
  696. }else if (nob.getType()==OrderChangeType.ZS.getCode()) {
  697. pushTaskAndDun(nob.getId(),o);
  698. }else if(nob.getType()==OrderChangeType.TDTK.getCode()) {
  699. //先将业务锁关闭 退单退款不做任何处理
  700. // List<String> list=tOrderTaskMapper.getLockId(nb.getOrderNo(),o.getSalesmanId(),o.getBuyerId());
  701. // if(!list.isEmpty())userLockReleaseMapper.updateReleaseList(list);
  702. // int i=userLockReleaseMapper.selectByUidGetCount(o.getSalesmanId(),o.getBuyerId());
  703. // if (i<1) userLockReleaseMapper.updateReleaseUser(o.getOrderNo());
  704. }
  705. //
  706. o.setProcessStatus(orderProjectService.getOrderProcessStatus(nb.getOrderNo()));
  707. o.setDeleteSign(0);
  708. //处理客户中间表退单标识
  709. //处理客户已派项目
  710. UserMid um=new UserMid();
  711. String taskNames=userMidMapper.getUserTaskNames(o.getBuyerId());
  712. um.setUid(o.getBuyerId());
  713. um.setTaskNames(taskNames);
  714. if (nb.getType()==0)um.setChargeback(1);
  715. userMidMapper.updateByUid(um);
  716. tOrderNewMapper.updateByPrimaryKeySelective(o);
  717. return o;
  718. }
  719. private void pushTaskAndDun(Integer id,TOrderNew o) {
  720. List<TChangeTaskOut> listct=tChangeTaskMapper.selectByCid(id,3);
  721. HashMap<Integer, Integer> map=changeAddOrderTask(listct,0,null);
  722. List<TChangeTaskOut> listct2=tChangeTaskMapper.selectByCid(id,2);
  723. changeAddOrderTask(listct2,1 ,map);
  724. List<TChangeDunOut> listcd=tChangeDunMapper.selectByCid(id);
  725. for (TChangeDunOut cd : listcd) {
  726. NewOrderDun nd=new NewOrderDun();
  727. if (cd.getType()==1) {
  728. nd.setOrderNo(cd.getOrderNo());
  729. nd.setAid(cd.getAid());
  730. nd.setAppropriationRatio(cd.getAppropriationRatio());
  731. nd.setTid(cd.getTid());
  732. nd.setProjectType(cd.getProjectType());
  733. nd.setDunType(cd.getDunType());
  734. nd.setMoney(cd.getMoney());
  735. nd.setWaitDay(cd.getWaitDay());
  736. nd.setStartTime(cd.getStartTime());
  737. nd.setEffectiveCount(cd.getEffectiveCount());
  738. nd.setCustomizeTime(cd.getCustomizeTime());
  739. nd.setCustomizeName(cd.getCustomizeName());
  740. if (cd.getDunType()==1) {
  741. nd.setStatus(1);
  742. nd.setStartTime(new Date());
  743. }
  744. newOrderDunMapper.insertSelective(nd);
  745. }else if (cd.getType()==2) {
  746. nd.setId(cd.getDid());
  747. nd.setMoney(cd.getMoney());
  748. newOrderDunMapper.updateByPrimaryKeySelective(nd);
  749. }else if(cd.getType()==3) {
  750. newOrderDunMapper.deleteByPrimaryKey(cd.getDid());
  751. }
  752. }
  753. }
  754. /**
  755. *
  756. * @param listct 数据
  757. * @param type 0普通数据处理 1子集数据处理
  758. */
  759. private HashMap<Integer, Integer> changeAddOrderTask(List<TChangeTaskOut> listct, Integer type,HashMap<Integer, Integer> input) {
  760. HashMap<Integer, Integer> map = new HashMap<>();
  761. for (TChangeTaskOut cd : listct) {
  762. TOrderTask ot=new TOrderTask();
  763. if (cd.getType()==1) {
  764. ot.setOrderNo(cd.getOrderNo());
  765. ot.setCommodityId(cd.getCommodityId());
  766. ot.setOrderNo(cd.getOrderNo());
  767. ot.setCommodityName(cd.getCommodityName());
  768. ot.setCommodityPrice(cd.getCommodityPrice());
  769. ot.setCommodityQuantity(cd.getCommodityQuantity());
  770. ot.setTaskComment(cd.getTaskComment());
  771. ot.setMain(cd.getMain());
  772. ot.setTaskStatus(0);
  773. ot.setSplitStatus(cd.getSplitStatus());
  774. if (cd.getSplitStatus()==2){
  775. Integer tid;
  776. if (cd.getTid()!=null){
  777. tid=cd.getTid();
  778. }else{
  779. tid=input.get(cd.getChangeSplitSuper());
  780. }
  781. if (tid==null)tid=tChangeTaskMapper.selectByPrimaryKey(cd.getChangeSplitSuper()).getTid();
  782. ot.setSplitSuper(tid);
  783. }
  784. if (cd.getDeclarationBatch()!=null)ot.setDeclarationBatch(cd.getDeclarationBatch());
  785. if (cd.getPatentType()!=null)ot.setPatentType(cd.getPatentType());
  786. tOrderTaskMapper.insertSelective(ot);
  787. if (cd.getSplitStatus()==1){
  788. map.put(cd.getId(),ot.getId());
  789. }
  790. if (cd.getServiceLife()!=null){
  791. addTaskMember(ot.getId(),cd.getServiceLife(),cd.getServiceYear(),cd.getYearSum(),cd.getContractTerm());
  792. }
  793. cd.setTid(ot.getId());
  794. tChangeTaskMapper.updateByPrimaryKeySelective(cd);
  795. tChangeDunMapper.updateByCTid(cd.getId(), ot.getId());
  796. }else if (cd.getType()==2) {
  797. ot.setId(cd.getTid());
  798. ot.setCommodityPrice(cd.getCommodityPrice());
  799. ot.setCommodityQuantity(cd.getCommodityQuantity());
  800. if (cd.getDeclarationBatch()!=null)ot.setDeclarationBatch(cd.getDeclarationBatch());
  801. if (cd.getPatentType()!=null)ot.setPatentType(cd.getPatentType());
  802. tOrderTaskMapper.updateByPrimaryKeySelective(ot);
  803. if (cd.getServiceLife()!=null){
  804. updateTaskMember(ot.getId(),cd.getServiceLife(),cd.getServiceYear(),cd.getYearSum(),cd.getContractTerm());
  805. }
  806. }else if(cd.getType()==3) {
  807. tOrderTaskMapper.deleteByPrimaryKey(cd.getTid());
  808. }
  809. }
  810. return map;
  811. }
  812. private void updateTaskMember(Integer id, String serviceLife, String serviceYear, Integer yearSum,String contractTerm) {
  813. TTaskMember ttm=new TTaskMember();
  814. ttm.setTid(id);
  815. ttm.setServiceLife(serviceLife);
  816. ttm.setServiceYear(serviceYear);
  817. ttm.setYearSum(yearSum);
  818. ttm.setContractTerm(contractTerm);
  819. tTaskMemberMapper.updateByTid(ttm);
  820. }
  821. private void addTaskMember(Integer id, String serviceLife, String serviceYear, Integer yearSum,String contractTerm) {
  822. TTaskMember ttm=new TTaskMember();
  823. ttm.setTid(id);
  824. ttm.setServiceLife(serviceLife);
  825. ttm.setServiceYear(serviceYear);
  826. ttm.setYearSum(yearSum);
  827. ttm.setContractTerm(contractTerm);
  828. tTaskMemberMapper.insertSelective(ttm);
  829. }
  830. @Override
  831. public Map<String, Object> listOrderInvoiceAndBill(String orderNo) {
  832. Map<String, Object> map=new HashMap<>();
  833. List<BillBo>list=tOrderBillNewMapper.selectByOrderNo(orderNo);
  834. List<InvoiceBo>list2=tOrderInvoiceMapper.selectByOrderNo(orderNo);
  835. map.put("bill", list);
  836. map.put("invoice", list2);
  837. return map;
  838. }
  839. @SuppressWarnings("unchecked")
  840. @Override
  841. public void exportMyChange(HttpServletResponse response, String userName, Integer processState, Integer timeType,
  842. String startTime, String endTime, String deps, String salesmanName, Integer complete,String orderNo, String contractNo,
  843. Integer type,Integer pageSize,Integer pageNo) throws IOException {
  844. OutputStream out = response.getOutputStream();
  845. List<NewOderCahngeListBo>list=(List<NewOderCahngeListBo>) selectOrderChangeList( userName, processState, timeType, startTime, endTime,
  846. deps, salesmanName, complete, orderNo, contractNo, type, pageSize, pageNo).getList();
  847. try {
  848. //设计表头 String[] comment = {"合同编号","订单编号","客户名称","订单部门","订单类型","下单时间","订单状态","合同额(万元)","已付额(万元)","欠款(万元)","订单负责人","变更类型","变更审核状态","变更提交时间"}
  849. String[] comment = {"合同编号","订单编号","客户名称","订单部门","订单类型","下单时间","订单状态","合同额(万元)","已付额(万元)","欠款(万元)","订单负责人","变更类型","变更审核状态","变更提交时间"};
  850. String fileName ="开票变更记录表" + new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date()) + ".xls";
  851. //type 0 变更
  852. XSSFWorkbook wb =ExportExcelUtil.exportTemplateInfoS(comment,"开票变更记录");
  853. //根据列表编写文档
  854. XSSFSheet sheet =wb.getSheetAt(0);
  855. for (NewOderCahngeListBo ob : (List<NewOderCahngeListBo>)list) {
  856. //新增一行
  857. XSSFRow r = sheet.createRow(sheet.getLastRowNum()+1);
  858. for (int i = 0; i < comment.length; i++) {
  859. //当前列的只
  860. String o = "";
  861. switch (comment[i]) {
  862. // String[] comment = {"合同编号","订单编号","客户名称","订单部门","订单类型","下单时间",
  863. // "订单状态","合同额(万元)","已付额(万元)","欠款(万元)","订单负责人","变更类型","变更审核状态","变更提交时间"};
  864. case "合同编号": o = ob.getContractNo(); break;
  865. case "订单编号": o = ob.getOrderNo().toString(); break;
  866. case "客户名称": o = ob.getNickname(); break;
  867. case "订单部门": o = ob.getDepName(); break;
  868. case "订单类型": o = OrderType.getValueByCode(ob.getOrderType()); break;
  869. case "下单时间": o = ob.getEstablishTimes(); break;
  870. case "订单状态": o = OrderNewState.getValueByCode(ob.getOrderStatus()); break;
  871. case "合同额(万元)": o = ob.getTotalAmount().toString(); break;
  872. case "已付额(万元)": o = ob.getSettlementAmount().toString(); break;
  873. case "欠款(万元)": o = ob.getArrears().toString(); break;
  874. case "订单负责人": o = ob.getSalesmanName(); break;
  875. case "变更类型": o = OrderChangeType.getValueByCode(ob.getType()); break;
  876. case "变更审核状态": o = getProcessState(ob.getProcessState(),ob.getStatus()); break;
  877. case "变更提交时间": o = ob.getCreateTimes(); break;
  878. default: o = ""; break;
  879. }
  880. XSSFCell c = r.createCell(i);
  881. c.setCellValue(o);
  882. }
  883. }
  884. //返回名称及参数
  885. response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes(),"iso-8859-1"));
  886. response.setContentType("application/octet-stream;charset=utf-8");
  887. // 返回数据流
  888. wb.write(out);
  889. out.flush();
  890. out.close();
  891. } catch (Exception e) {
  892. throw new BusinessException(new Error("表格生成错误。"));
  893. }finally {
  894. out.flush();
  895. out.close();
  896. }
  897. }
  898. public static String getProcessState(Integer processState,Integer status) {
  899. String str="";
  900. if (processState == 0) {
  901. str = "营销员";
  902. } else if (processState == 1) {
  903. str = "营销管理员";
  904. } else if (processState == 2) {
  905. str = "咨询师";
  906. } else if (processState == 3) {
  907. str = "咨询师经理";
  908. } else if (processState == 4) {
  909. str = "咨询师总监";
  910. } else if (processState == 5) {
  911. str = "财务专员";
  912. } else if (processState == 6) {
  913. str = "财务总监";
  914. } else if (processState == 7) {
  915. str = "总裁";
  916. } else if (processState == 8) {
  917. str = "董事长";
  918. }
  919. String num = "";
  920. if (status == 0) {
  921. num = "发起";
  922. } else if (status == 1) {
  923. num = "审核中";
  924. } else if (status == 2) {
  925. num = "通过";
  926. } else if (status == 3) {
  927. num = "驳回";
  928. return num + "到" + str;
  929. } else if (status == 4) {
  930. num = "完成";
  931. }
  932. if (processState == 7 && status == 2) {
  933. return "订单变更退票中";
  934. } else if (processState == 8 && status == 2) {
  935. return "订单变更退票中";
  936. } else if (processState >= 7 && status == 4) {
  937. return "订单变更已完成";
  938. } else {
  939. return str + num;
  940. }
  941. }
  942. @Override
  943. public Object addChangeTask(TChangeTask t) {
  944. t.setType(1);
  945. tChangeTaskMapper.insertSelective(t);
  946. return t;
  947. }
  948. @Override
  949. public int addChangeDun(TChangeDun d) {
  950. d.setAid(TokenManager.getAdminId());
  951. d.setType(1);
  952. if(d.getCustomizeTimes()!=null)d.setCustomizeTime(DateUtils.StringToDate(d.getCustomizeTimes(), AFTConstants.YYYYMMDD));
  953. return tChangeDunMapper.insertSelective(d);
  954. }
  955. @Override
  956. public int deleteChangeTask(Integer id) {
  957. return tChangeTaskMapper.deleteByPrimaryKey(id);
  958. }
  959. @Override
  960. public int deleteChangeDun(Integer id) {
  961. return tChangeDunMapper.deleteByPrimaryKey(id);
  962. }
  963. @Override
  964. public List<TChangeTaskOut> selectChangeTask(Integer cid) {
  965. List<TChangeTaskOut> list=tChangeTaskMapper.selectByCid(cid,3);//3设置不等于2
  966. for (TChangeTaskOut tChangeTaskOut : list) {
  967. if(tChangeTaskOut.getSplitStatus()==1){
  968. //变更会员子项目有2中,一种是复制过来的,根据上级项目编号关联,还一种是新增的根据变更项目编号关联
  969. TChangeTask input= new TChangeTask();
  970. input.setCid(cid);
  971. input.setSplitSuper(tChangeTaskOut.getTid());
  972. input.setChangeSplitSuper(tChangeTaskOut.getId());
  973. tChangeTaskOut.setList(getChangeSonTasks(input));
  974. }
  975. }
  976. return list;
  977. }
  978. @Override
  979. public List<TChangeDunOut> selectChangeDun(Integer cid) {
  980. return tChangeDunMapper.selectByCid(cid);
  981. }
  982. @Override
  983. public int updateChangeTask(InputTChangeTask t) {
  984. //有tid是订单复制项目
  985. if(t.getTid()!=null) {
  986. //type 0正常 1新增 2修改 3删除
  987. TChangeTask tt=tChangeTaskMapper.selectByPrimaryKey(t.getId());
  988. if (t.getType()==3) {
  989. //删除首先将项目删除,然后将所属催款做删除
  990. tChangeTaskMapper.updateByTid(t.getTid(),null,tt.getCid(),3);
  991. if (tt.getSplitStatus()==0) {
  992. tChangeDunMapper.updateByTid(tt.getTid(),tt.getCid(),3);
  993. }else if (tt.getSplitStatus()==1) {
  994. //删除父类下所有的子类
  995. tChangeTaskMapper.updateByTid(null,tt.getTid(),tt.getCid(),3);
  996. tChangeDunMapper.updateByTid(tt.getTid(),tt.getCid(),3);
  997. }else if(tt.getSplitStatus()==2) {
  998. List<TChangeTask> list=tChangeTaskMapper.selectBySuper(tt.getSplitSuper(),null,tt.getCid());
  999. boolean flag=true;
  1000. for (TChangeTask tc : list) {
  1001. if (tc.getType()!=3) {
  1002. flag=false;
  1003. break;
  1004. }
  1005. }
  1006. if (flag) {
  1007. //如果所有子类删除判断删除父类
  1008. tChangeTaskMapper.updateByTid(tt.getSplitSuper(),null,tt.getCid(),3);
  1009. tChangeDunMapper.updateByTid(tt.getSplitSuper(),tt.getCid(),3);
  1010. }
  1011. }
  1012. }else if(t.getType()==2){
  1013. tChangeTaskMapper.updateByTid(t.getTid(),null,tt.getCid(),2);
  1014. if (tt.getSplitStatus()==1) {
  1015. if (t.getServiceLife()!=null||t.getServiceYear()!=null||t.getYearSum()!=null||t.getContractTerm()!=null){
  1016. tChangeTaskMapper.updateMemberByTid(tt.getTid(),t.getCid(),null,t.getServiceLife(),t.getServiceYear(),t.getYearSum(),t.getContractTerm());
  1017. }
  1018. updateChangeType(tt);
  1019. }else if(tt.getSplitStatus()==2) {
  1020. tChangeTaskMapper.updateByTid(tt.getSplitSuper(),null,tt.getCid(),2);
  1021. }
  1022. }
  1023. //如果没有tid是新增项目则直接删除
  1024. }else {
  1025. if (t.getType()==3) {
  1026. tChangeTaskMapper.deleteByPrimaryKey(t.getId());
  1027. tChangeDunMapper.deleteByCtid(t.getId());
  1028. }
  1029. }
  1030. return tChangeTaskMapper.updateByPrimaryKeySelective(t);
  1031. }
  1032. private void updateChangeType(TChangeTask t) {
  1033. List<TChangeTask> changeSonTasks = getChangeSonTasks(t);
  1034. List<Integer> list=new ArrayList<>();
  1035. for (TChangeTask changeSonTask : changeSonTasks) {
  1036. if (changeSonTask.getType()==0||changeSonTask.getType()==2){
  1037. list.add(changeSonTask.getId());
  1038. }
  1039. }
  1040. if(!list.isEmpty())tChangeTaskMapper.updateTypeBatch(2,list);
  1041. }
  1042. @Override
  1043. public int updateChangeDun(TChangeDun t) {
  1044. if(t.getCustomizeTimes()!=null)t.setCustomizeTime(DateUtils.StringToDate(t.getCustomizeTimes(), AFTConstants.YYYYMMDD));
  1045. if (t.getType()==1||t.getType()==2) {
  1046. return tChangeDunMapper.updateByPrimaryKeySelective(t);
  1047. }else if(t.getType()==3){
  1048. if (t.getDid()!=null) {
  1049. return tChangeDunMapper.updateByPrimaryKeySelective(t);
  1050. }else {
  1051. return tChangeDunMapper.deleteByPrimaryKey(t.getId());
  1052. }
  1053. }else {
  1054. return 0;
  1055. }
  1056. }
  1057. @Override
  1058. public List<TOrderNewBo> orderChangeUsed(String orderNo) {
  1059. List<TOrderNewBo> list=tOrderNewMapper.selectUsedOrderByOrder(orderNo);
  1060. for (TOrderNewBo t : list) {
  1061. t.setDunList(newOrderDunService.selectListNewOrderDun(orderNo));
  1062. t.setTaskList(orderNewService.selectOrderTask(orderNo,0));
  1063. }
  1064. return list;
  1065. }
  1066. @Override
  1067. public List<Map<String, String>> getOrderChange(String orderNo) {
  1068. List<Map<String, String>> list=new ArrayList<>();
  1069. list =newOrderChangeMapper.getOrderChange(orderNo);
  1070. return list;
  1071. }
  1072. @Override
  1073. public int addOrderRefund(InputNewOrderRefund or) {
  1074. or.setRefundTime(DateUtils.StringToDate(or.getRefundDate(), AFTConstants.YYYYMMDD));
  1075. return newOrderRefundMapper.insertSelective(or);
  1076. }
  1077. @Override
  1078. public int deleteRefund(Integer id) {
  1079. return newOrderRefundMapper.deleteByPrimaryKey(id);
  1080. }
  1081. @Override
  1082. public List<OutNewOrderRefund> listRefund(Integer id) {
  1083. return newOrderRefundMapper.listRefund(id);
  1084. }
  1085. @Override
  1086. public int pushRefund(Integer id,String refundUrl) {
  1087. NewOrderChange noc=newOrderChangeMapper.selectByPrimaryKey(id);
  1088. if (noc.getRefundStatus()!=1) {
  1089. List<OutNewOrderRefund> list=listRefund(id);
  1090. BigDecimal bd=new BigDecimal(0);
  1091. TOrderNew order=tOrderNewMapper.selectByPrimaryKey(noc.getOrderNo());
  1092. for (OutNewOrderRefund o : list) {
  1093. TOrderBillNew tbn =new TOrderBillNew();
  1094. tbn.setOrderNo(o.getOrderNo());
  1095. tbn.setTransactionAmount(o.getRefundAmount().negate());// 取负数
  1096. tbn.setBillNo(UUID.randomUUID().toString().replaceAll("-", ""));
  1097. tbn.setCreater(TokenManager.getAdminId());
  1098. tbn.setPayeeId(order.getBuyerId());
  1099. tbn.setPayerId("0");
  1100. tbn.setRemarks(o.getRemarks());
  1101. tbn.setTransactionSubject(2);
  1102. tbn.setTransactionChannel(2);
  1103. tbn.setConfirmSign(1);
  1104. tbn.setRefundTime(o.getRefundTime());
  1105. bd=bd.add(o.getRefundAmount());
  1106. tOrderBillNewMapper.insertSelective(tbn);
  1107. }
  1108. TOrderNew o=new TOrderNew();
  1109. o.setOrderNo(noc.getOrderNo());
  1110. o.setRefundAmount(bd);
  1111. tOrderNewMapper.updaterefund(o);
  1112. NewOrderChange n=new NewOrderChange();
  1113. n.setId(id);
  1114. n.setRefundStatus(1);
  1115. n.setRefundUrl(refundUrl);
  1116. newOrderChangeMapper.updateByPrimaryKeySelective(n);
  1117. }
  1118. return 1;
  1119. }
  1120. @Override
  1121. public boolean checkrefund(InputNewOrderRefund or) {
  1122. if (or.getOrderNo()!=null) {
  1123. TOrderNew o=tOrderNewMapper.selectByPrimaryKey(or.getOrderNo());
  1124. BigDecimal refund=new BigDecimal(0);
  1125. List<OutNewOrderRefund> list=listRefund(or.getCid());
  1126. refund=refund.add(or.getRefundAmount());
  1127. for (OutNewOrderRefund oor : list) {
  1128. refund=refund.add(oor.getRefundAmount());
  1129. }
  1130. if (o.getSettlementAmount().compareTo(refund)!=-1) {
  1131. return false;
  1132. }else {
  1133. return true;
  1134. }
  1135. }
  1136. return true;
  1137. }
  1138. @Override
  1139. public int updateCancelOrderChange(NewOrderChangeBo nb) {
  1140. NewOrderChange noc=new NewOrderChange();
  1141. noc.setId(nb.getId());
  1142. noc.setStatus(5);
  1143. newOrderChangeMapper.updateByPrimaryKeySelective(noc);
  1144. TOrderNew t=new TOrderNew();
  1145. t.setOrderNo(nb.getOrderNo());
  1146. t.setDeleteSign(0);
  1147. OrderChangeLog ocl=new OrderChangeLog();
  1148. ocl.setAuditor(TokenManager.getAdminId());
  1149. ocl.setOrderNo(nb.getOrderNo());
  1150. ocl.setRemarks("变更撤销成功");
  1151. ocl.setChangeId(nb.getId());
  1152. ocl.setStatus(5);
  1153. orderChangeLogMapper.insertSelective(ocl);
  1154. tOrderNewMapper.updateByPrimaryKeySelective(t);
  1155. return 1;
  1156. }
  1157. @Override
  1158. public Object addMemberSonProject(Integer id, String serviceYear, String taskComment) {
  1159. //先修改父项目
  1160. TChangeTask tChangeTask = tChangeTaskMapper.selectByPrimaryKey(id);
  1161. Integer tid=tChangeTask.getTid();
  1162. tChangeTask.setSplitStatus(1);
  1163. tChangeTaskMapper.updateByPrimaryKey(tChangeTask);
  1164. //在判断是否有删除的年份没有就新增
  1165. tChangeTask.setId(null);
  1166. tChangeTask.setTid(null);
  1167. tChangeTask.setSplitStatus(2);
  1168. if(tid!=null){
  1169. tChangeTask.setSplitSuper(tid);
  1170. }else {
  1171. tChangeTask.setChangeSplitSuper(id);
  1172. }
  1173. tChangeTask.setType(1);
  1174. tChangeTask.setCommodityQuantity(1);
  1175. tChangeTask.setTaskComment(taskComment);
  1176. tChangeTask.setServiceYear(serviceYear);
  1177. tChangeTaskMapper.insertSelective(tChangeTask);
  1178. return tChangeTask;
  1179. }
  1180. @Override
  1181. public int deleteMemberSonProject(Integer id) {
  1182. TChangeTask tChangeTask = tChangeTaskMapper.selectByPrimaryKey(id);
  1183. if (tChangeTask.getType()==1){
  1184. tChangeTaskMapper.deleteByPrimaryKey(id);
  1185. }else {
  1186. TChangeTask newtChangeTask = new TChangeTask();
  1187. newtChangeTask.setId(id);
  1188. newtChangeTask.setType(3);
  1189. tChangeTaskMapper.updateByPrimaryKeySelective(newtChangeTask);
  1190. }
  1191. List<TChangeTask> tChangeTasks = getChangeSonTasks(tChangeTask);
  1192. //如果没有子项目则修改上级
  1193. if (tChangeTasks == null || tChangeTasks.isEmpty()) {
  1194. TChangeTask changeTask = new TChangeTask();
  1195. changeTask.setId(tChangeTask.getSplitSuper());
  1196. changeTask.setSplitStatus(0);
  1197. tChangeTaskMapper.updateByPrimaryKeySelective(changeTask);
  1198. }
  1199. return 1;
  1200. }
  1201. @Override
  1202. public Object updateMemberSonProject(Integer id) {
  1203. TChangeTask tChangeTask = tChangeTaskMapper.selectByPrimaryKey(id);
  1204. tChangeTask.setType(2);
  1205. tChangeTaskMapper.updateByPrimaryKeySelective(tChangeTask);
  1206. return tChangeTask;
  1207. }
  1208. /**
  1209. * 如果是有splitSuper 是父有项目的tid,变更父项目有订单项目,则需要看订单项目变更后的子集,反正则不需要
  1210. * changeSplitSuper 是当前变更项目的子集
  1211. * @param tChangeTask
  1212. * @return
  1213. */
  1214. private List<TChangeTask> getChangeSonTasks(TChangeTask tChangeTask) {
  1215. List<TChangeTask> tChangeTasks = new ArrayList<>();
  1216. if (tChangeTask.getSplitSuper()!=null)tChangeTasks.addAll(tChangeTaskMapper.selectBySuper(tChangeTask.getSplitSuper(),null, tChangeTask.getCid()));
  1217. tChangeTasks.addAll(tChangeTaskMapper.selectBySuper(null, tChangeTask.getChangeSplitSuper(), tChangeTask.getCid()));
  1218. return tChangeTasks;
  1219. }
  1220. }