OrderChangeServiceImpl.java 41 KB

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