OrderChangeServiceImpl.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. package com.goafanti.order.service.impl;
  2. import java.math.BigDecimal;
  3. import java.text.ParseException;
  4. import java.util.Date;
  5. import java.util.HashMap;
  6. import java.util.List;
  7. import java.util.Map;
  8. import java.util.UUID;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.stereotype.Service;
  11. import com.goafanti.common.bo.Error;
  12. import com.goafanti.common.constant.AFTConstants;
  13. import com.goafanti.common.dao.NewOrderChangeMapper;
  14. import com.goafanti.common.dao.OrderChangeLogMapper;
  15. import com.goafanti.common.dao.OrderExamineMapper;
  16. import com.goafanti.common.dao.OrderRefundInvoiceMapper;
  17. import com.goafanti.common.dao.TOrderBillNewMapper;
  18. import com.goafanti.common.dao.TOrderDunMapper;
  19. import com.goafanti.common.dao.TOrderInvoiceMapper;
  20. import com.goafanti.common.dao.TOrderLogMapper;
  21. import com.goafanti.common.dao.TOrderNewMapper;
  22. import com.goafanti.common.dao.TOrderTaskMapper;
  23. import com.goafanti.common.error.BusinessException;
  24. import com.goafanti.common.model.OrderChangeLog;
  25. import com.goafanti.common.model.OrderExamine;
  26. import com.goafanti.common.model.OrderRefundInvoice;
  27. import com.goafanti.common.model.TOrderDun;
  28. import com.goafanti.common.model.TOrderNew;
  29. import com.goafanti.common.model.NewOrderChange;
  30. import com.goafanti.common.utils.DateUtils;
  31. import com.goafanti.common.utils.StringUtils;
  32. import com.goafanti.core.mybatis.BaseMybatisDao;
  33. import com.goafanti.core.mybatis.JDBCIdGenerator;
  34. import com.goafanti.core.mybatis.page.Pagination;
  35. import com.goafanti.core.shiro.token.TokenManager;
  36. import com.goafanti.order.bo.BillBo;
  37. import com.goafanti.order.bo.InvoiceBo;
  38. import com.goafanti.order.bo.NewOrderChangeBo;
  39. import com.goafanti.order.bo.OrderChangeLogBo;
  40. import com.goafanti.order.bo.TOrderLogBo;
  41. import com.goafanti.order.bo.TOrderTaskBo;
  42. import com.goafanti.order.service.OrderChangeService;
  43. import com.goafanti.order.service.OrderService;
  44. @Service
  45. public class OrderChangeServiceImpl extends BaseMybatisDao<NewOrderChangeMapper> implements OrderChangeService {
  46. @Autowired
  47. private NewOrderChangeMapper newOrderChangeMapper;
  48. @Autowired
  49. private OrderChangeLogMapper orderChangeLogMapper;
  50. @Autowired
  51. private TOrderNewMapper tOrderNewMapper;
  52. @Autowired
  53. private TOrderDunMapper tOrderDunMapper;
  54. @Autowired
  55. private TOrderLogMapper tOrderLogMapper;
  56. @Autowired
  57. private TOrderTaskMapper tOrderTaskMapper;
  58. @Autowired
  59. private TOrderBillNewMapper tOrderBillNewMapper;
  60. @Autowired
  61. private TOrderInvoiceMapper tOrderInvoiceMapper;
  62. @Autowired
  63. private OrderRefundInvoiceMapper orderRefundInvoiceMapper;
  64. @Autowired
  65. private OrderExamineMapper orderExamineMapper;
  66. @Autowired
  67. private OrderService orderService;
  68. @Autowired
  69. private JDBCIdGenerator idGenerator;
  70. @Override
  71. public int addOrderChange(NewOrderChangeBo t,String startRemarks) {
  72. TOrderNew ton=new TOrderNew();
  73. ton.setOrderNo(t.getOrderNo());
  74. ton.setDeleteSign(2);//将订单置为锁定
  75. t.setProcessState(1);//设置营销管理员来审核
  76. tOrderNewMapper.updateByPrimaryKeySelective(ton);
  77. BigDecimal invoiceAmount=tOrderInvoiceMapper.conutAmountByOrderNo(t.getOrderNo());
  78. t.setInvoiceAmount(invoiceAmount);//开票金额
  79. BigDecimal paymentAmount=tOrderBillNewMapper.conutAmountByOrderNo(t.getOrderNo());
  80. t.setPaymentAmount(paymentAmount);//收款金额
  81. //预计成本与预计退款:预计成本=项目价格*数量 预计退款=收款-预计成本
  82. BigDecimal estimateCost=new BigDecimal(tOrderTaskMapper.selectEstimateCost(t.getOrderNo()));
  83. t.setEstimateCost(estimateCost);
  84. t.setEstimateRefundable(paymentAmount.subtract(estimateCost));
  85. newOrderChangeMapper.insertSelective(t);
  86. NewOrderChangeBo ncb=newOrderChangeMapper.selectByorderNo(t.getOrderNo());
  87. OrderChangeLog ocl=new OrderChangeLog();
  88. ocl.setAuditor(TokenManager.getAdminId());
  89. ocl.setOrderNo(t.getOrderNo());
  90. ocl.setRemarks(startRemarks);
  91. ocl.setChangeId(ncb.getId());
  92. ocl.setStatus(0);
  93. orderChangeLogMapper.insertSelective(ocl);
  94. return 1;
  95. }
  96. /*
  97. * 新增审核流程中的
  98. */
  99. private void insertOrderExamine(String orderNo) {
  100. List<TOrderTaskBo> list=tOrderTaskMapper.selectOrderTask(orderNo);
  101. for (TOrderTaskBo t : list) {
  102. if (t.getConsultantId()!=null) {
  103. OrderExamine o=new OrderExamine();
  104. o.setAid(t.getConsultantId());
  105. o.setOrderNo(orderNo);
  106. o.setCreateTime(new Date());
  107. o.setType(0);//咨询师
  108. o.setStatus(0);//正常
  109. orderExamineMapper.insertSelective(o);
  110. }
  111. if (t.getConsultantId()!=null) {
  112. OrderExamine o=new OrderExamine();
  113. o.setAid(t.getConsultantId());
  114. o.setOrderNo(orderNo);
  115. o.setCreateTime(new Date());
  116. o.setType(1);//咨询师经理
  117. o.setStatus(0);//正常
  118. orderExamineMapper.insertSelective(o);
  119. }
  120. }
  121. }
  122. @Override
  123. public NewOrderChangeBo orderChangeDetails(String orderNo) {
  124. NewOrderChangeBo nb=newOrderChangeMapper.selectByorderNo(orderNo);
  125. return nb;
  126. }
  127. @Override
  128. public NewOrderChangeBo orderChangeDetailsById(Integer id) {
  129. NewOrderChangeBo nb=newOrderChangeMapper.selectById(id);
  130. return nb;
  131. }
  132. @Override
  133. public int pushOrderChangeAudit(String orderNo, String remarks, Integer status,Integer processState,Integer rejectState) {
  134. NewOrderChangeBo nb=newOrderChangeMapper.selectByorderNo(orderNo);
  135. if (processState==null||(nb.getProcessState()!=9&&processState !=nb.getProcessState()) ) {
  136. throw new BusinessException(new Error( "变更流程与您所操作流程不匹配","变更流程与您所操作流程不匹配"));
  137. }
  138. if (nb.getStatus()==4) {
  139. throw new BusinessException(new Error( "变更流程已通过审核","变更流程已通过审核"));
  140. }
  141. //2通过 3驳回
  142. if (status==2) {
  143. //变更类型 0退单退款 1项目及金额变更 2仅项目变更 3仅金额变更 4重报 5赠送
  144. if(nb.getType() !=null){
  145. if (nb.getChangeAmount().compareTo(new BigDecimal("0.2"))<0) {//小于则总裁通过,大于则董事长
  146. if(nb.getProcessState()==7) {//总裁项目变更通过
  147. nb.setStatus(2);
  148. }
  149. }else {
  150. if(nb.getProcessState()==8) {//董事长项目变更通过
  151. nb.setStatus(2);
  152. }
  153. }
  154. if(nb.getProcessState()==1){//营销管理通过则设置技术管理员通过表
  155. nb.setProcessState(nb.getProcessState()+1);
  156. insertOrderExamine(orderNo);
  157. }else if(nb.getProcessState()==2){//咨询师
  158. //找出当时人的审核改为通过
  159. orderExamineMapper.updateByOrderNoAndAid(orderNo,TokenManager.getAdminId(),0);
  160. //全部通过了则跳下个流程
  161. if (orderExamineMapper.checkCountStatus(orderNo,0)<1) {
  162. nb.setProcessState(nb.getProcessState()+1);
  163. }
  164. }else if(nb.getProcessState()==3){//咨询师经理
  165. //找出当时人的审核改为通过
  166. orderExamineMapper.updateByOrderNoAndAid(orderNo,TokenManager.getAdminId(),1);
  167. //全部通过了则跳下个流程
  168. if (orderExamineMapper.checkCountStatus(orderNo,1)<1) {
  169. nb.setProcessState(nb.getProcessState()+1);
  170. }
  171. }else if(nb.getProcessState()!=7&&nb.getProcessState()!=8) {
  172. nb.setProcessState(nb.getProcessState()+1);
  173. }
  174. }
  175. /*else {
  176. if(nb.getProcessState()==9) {
  177. //changgeAdopt(nb); 取消订单变更完成
  178. }
  179. //流程状态 0营销员 1营销管理员 2技术员 3技术经理 4技术总监 5财务专员(退单) 6财务总监 7总裁 8董事长 9 财务专员(非退单)
  180. if (nb.getProcessState()==1) nb.setProcessState(7);
  181. else if (nb.getProcessState()==7)nb.setProcessState(9);
  182. }*/ //去掉第二条线
  183. if(nb.getStatus()==3) {
  184. nb.setStatus(1);//如果驳回数据则改为正常数据
  185. }
  186. }else {
  187. nb.setProcessState(rejectState);
  188. nb.setStatus(3);//订单变更设置为驳回
  189. }
  190. OrderChangeLog ocl=new OrderChangeLog();
  191. ocl.setAuditor(TokenManager.getAdminId());
  192. ocl.setOrderNo(orderNo);
  193. ocl.setRemarks(remarks);
  194. ocl.setChangeId(nb.getId());
  195. ocl.setStatus(status);
  196. orderChangeLogMapper.insertSelective(ocl);
  197. newOrderChangeMapper.updateByPrimaryKeySelective(nb);
  198. return 1;
  199. }
  200. private void changgeAdopt(NewOrderChangeBo nb) {
  201. TOrderNew t1=tOrderNewMapper.selectByPrimaryKey(nb.getOrderNo());
  202. List<TOrderDun> td1=tOrderDunMapper.selectByOrderNo(nb.getOrderNo());
  203. List<TOrderTaskBo> tt1=tOrderTaskMapper.selectOrderTask(nb.getOrderNo());
  204. List<TOrderLogBo> tl1=tOrderLogMapper.selectOrderByNo(nb.getOrderNo());
  205. String newOrderNo=idGenerator.generateId().toString();
  206. t1.setOrderNo(newOrderNo);
  207. t1.setDeleteSign(1);//将原订单作废,只能查看
  208. tOrderNewMapper.insertSelective(t1);
  209. for (TOrderTaskBo tOrderTaskBo : tt1) {
  210. tOrderTaskBo.setId(null);
  211. tOrderTaskBo.setOrderNo(newOrderNo);
  212. tOrderTaskMapper.insertSelective(tOrderTaskBo);
  213. }
  214. for (TOrderDun tOrderDun : td1) {
  215. tOrderDun.setId(UUID.randomUUID().toString());
  216. tOrderDun.setOrderNo(newOrderNo);
  217. tOrderDunMapper.insertSelective(tOrderDun);
  218. }
  219. for (TOrderLogBo tOrderLogBo : tl1) {
  220. tOrderLogBo.setId(null);
  221. tOrderLogBo.setOrderNo(newOrderNo);
  222. tOrderLogMapper.insertSelective(tOrderLogBo);
  223. }
  224. nb.setStatus(4);
  225. //将订单恢复正常
  226. TOrderNew orderNew =new TOrderNew();
  227. TOrderNew additionalOrder =new TOrderNew();
  228. String additionalOrderNo;
  229. orderNew.setOrderNo(nb.getOrderNo());
  230. orderNew.setDeleteSign(3);//设置为变更中
  231. orderNew.setPrimaryOrder(newOrderNo);
  232. if (nb.getType()==4||nb.getType()==5) {//重报或者赠送
  233. additionalOrderNo=idGenerator.generateId().toString();
  234. orderNew.setAdditionalOrder(additionalOrderNo);
  235. additionalOrder.setOrderNo(additionalOrderNo);
  236. additionalOrder.setCreater(TokenManager.getAdminId());
  237. additionalOrder.setContractNo(t1.getContractNo());
  238. additionalOrder.setSalesmanId(t1.getSalesmanId());
  239. additionalOrder.setOrderType(t1.getOrderType());
  240. additionalOrder.setBuyerId(t1.getBuyerId());
  241. tOrderNewMapper.insertSelective(additionalOrder);
  242. }
  243. tOrderNewMapper.updateByPrimaryKeySelective(orderNew);
  244. }
  245. @Override
  246. public boolean checkOderNo(String orderNo) {
  247. int i=newOrderChangeMapper.checkOderNo(orderNo);
  248. if (i>0) {
  249. return true;
  250. }
  251. return false;
  252. }
  253. @Override
  254. public List<OrderChangeLogBo> selectOrderChangeLogList(String changeId) {
  255. return orderChangeLogMapper.selectOrderChangeLogList(changeId);
  256. }
  257. @SuppressWarnings("unchecked")
  258. @Override
  259. public Pagination<NewOrderChangeBo> selectOrderChangeList(String userName,Integer processState,Integer timeType,String startTime,String endTime,
  260. String depId,String salesmanName,Integer complete,Integer pageSize, Integer pageNo) {
  261. Map<String, Object> parameter=new HashMap<String, Object>();
  262. if(pageSize==null||pageSize<0)pageSize=10;
  263. if(pageNo==null||pageNo<0)pageNo=1;
  264. parameter.put("processState", processState==null?0:processState);
  265. parameter.put("complete", complete==null?0:complete);
  266. if (StringUtils.isNotBlank(userName)) parameter.put("userName", userName);
  267. if (null!=processState) parameter.put("processState", processState);
  268. if (null!=timeType) parameter.put("timeType", timeType);
  269. if (StringUtils.isNotBlank(startTime)) parameter.put("startTime", startTime);
  270. if (StringUtils.isNotBlank(endTime)) parameter.put("endTime", endTime+" 23:59:59");
  271. if (StringUtils.isNotBlank(depId)) parameter.put("depId", depId);
  272. if (StringUtils.isNotBlank(salesmanName)) parameter.put("salesmanName", salesmanName);
  273. parameter.put("aid", TokenManager.getAdminId());
  274. parameter.put("deps", orderService.selectMyDeps());
  275. Pagination<NewOrderChangeBo> data = (Pagination<NewOrderChangeBo>)findPage("selectOrderChangeList", "selectOrderChangeCount", parameter, pageNo, pageSize);
  276. return data;
  277. }
  278. @Override
  279. public int updateOrderChange(NewOrderChangeBo t,Integer changeType,String startRemarks) {
  280. NewOrderChange noc=new NewOrderChange();
  281. noc.setId(t.getId());
  282. if (changeType==0) {
  283. noc.setRemarks(t.getRemarks());
  284. noc.setType(t.getType());
  285. noc.setVoucherUrl(t.getVoucherUrl());
  286. noc.setTotalAmount(t.getTotalAmount());
  287. noc.setSettlementAmount(t.getSettlementAmount());
  288. noc.setChangeAmount(t.getChangeAmount());
  289. noc.setApplicant(t.getApplicant());
  290. noc.setStatus(1);//订单置为正常
  291. noc.setProcessState(1);//流程置为营销管理员
  292. noc.setDepName(t.getDepName());
  293. OrderChangeLog ocl=new OrderChangeLog();
  294. ocl.setAuditor(TokenManager.getAdminId());
  295. ocl.setOrderNo(t.getOrderNo());
  296. ocl.setRemarks(startRemarks);
  297. ocl.setChangeId(noc.getId());
  298. ocl.setStatus(0);
  299. orderChangeLogMapper.insertSelective(ocl);
  300. }else if (changeType==2) {
  301. try {
  302. noc.setPaymentTime(DateUtils.StringToDate(t.getPaymentTimes(), AFTConstants.YYYYMMDD));
  303. noc.setInvoiceTime(DateUtils.StringToDate(t.getInvoiceTimes(), AFTConstants.YYYYMMDD));
  304. } catch (ParseException e) {
  305. e.printStackTrace();
  306. }
  307. noc.setCwCost(t.getCwCost());
  308. noc.setRefundableAmount(t.getRefundableAmount());
  309. }
  310. return newOrderChangeMapper.updateByPrimaryKeySelective(noc);
  311. }
  312. @Override
  313. public int addOrderRefundInvoice(OrderRefundInvoice o) {
  314. o.setCreateTime(new Date());
  315. newOrderChangeMapper.addRefundInvoice(o.getOrderNo(),o.getAmount());
  316. return orderRefundInvoiceMapper.insertSelective(o);
  317. }
  318. @Override
  319. public int deleteOrderRefundInvoice(Integer id) {
  320. OrderRefundInvoice or=orderRefundInvoiceMapper.selectByPrimaryKey(id);
  321. newOrderChangeMapper.subtractRefundInvoice(or.getOrderNo(),or.getAmount());
  322. return orderRefundInvoiceMapper.deleteByPrimaryKey(id);
  323. }
  324. @Override
  325. public List<OrderRefundInvoice> listOrderRefundInvoice(String orderNo) {
  326. return orderRefundInvoiceMapper.selectByorderNo(orderNo);
  327. }
  328. @Override
  329. public int pushCompleteOrderChange(NewOrderChangeBo nb) {
  330. changgeAdopt(nb);
  331. newOrderChangeMapper.updateByPrimaryKeySelective(nb);
  332. return 1;
  333. }
  334. @Override
  335. public Map<String, Object> listOrderInvoiceAndBill(String orderNo) {
  336. Map<String, Object> map=new HashMap<>();
  337. List<BillBo>list=tOrderBillNewMapper.selectByOrderNo(orderNo);
  338. List<InvoiceBo>list2=tOrderInvoiceMapper.selectByOrderNo(orderNo);
  339. map.put("bill", list);
  340. map.put("invoice", list2);
  341. return map;
  342. }
  343. }