OrderChangeServiceImpl.java 13 KB

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