CartServiceImpl.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473
  1. package com.iamberry.wechat.service.cart;
  2. import java.text.DecimalFormat;
  3. import java.util.Date;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import com.iamberry.app.tool.log.RatFWLogger;
  8. import com.iamberry.wechat.face.order.AdminOrderService;
  9. import com.iamberry.wechat.tools.ResultInfo;
  10. import com.iamberry.wechat.tools.SendMessageUtil;
  11. import org.apache.commons.lang.StringUtils;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.stereotype.Service;
  14. import com.iamberry.wechat.core.entity.PaperBean;
  15. import com.iamberry.wechat.core.entity.admin.ShopSystemRule;
  16. import com.iamberry.wechat.core.entity.cart.CartDto;
  17. import com.iamberry.wechat.core.entity.cart.ShopOrderAndItemDto;
  18. import com.iamberry.wechat.core.entity.cart.ShopOrderItemDto;
  19. import com.iamberry.wechat.core.entity.cart.ShopSalesOrderDto;
  20. import com.iamberry.wechat.core.entity.coupon.CouponItem;
  21. import com.iamberry.wechat.core.entity.coupon.CouponType;
  22. import com.iamberry.wechat.core.entity.mq.MQMessage;
  23. import com.iamberry.wechat.core.entity.order.Order;
  24. import com.iamberry.wechat.core.entity.order.OrderItem;
  25. import com.iamberry.wechat.face.cart.CartService;
  26. import com.iamberry.wechat.face.cart.ProductInfoService;
  27. import com.iamberry.wechat.face.coupon.CouponItemService;
  28. import com.iamberry.wechat.face.coupon.CouponTypeService;
  29. import com.iamberry.wechat.face.member.CashLogService;
  30. import com.iamberry.wechat.face.reback.RebackServices;
  31. import com.iamberry.wechat.service.cart.dao.CartDao;
  32. import com.iamberry.wechat.service.order.dao.AdminOrderDao;
  33. @Service
  34. public class CartServiceImpl implements CartService {
  35. @Autowired
  36. private CartDao cartDao;
  37. @Autowired
  38. private AdminOrderDao adminOrderDao;
  39. @Autowired
  40. CouponItemService couponItemService;
  41. @Autowired
  42. CouponTypeService couponTypeService;
  43. @Autowired
  44. CashLogService cashLogService;
  45. @Autowired
  46. private RebackServices rebackServices;
  47. @Autowired
  48. ProductInfoService productInfoService;
  49. @Autowired
  50. private SendMessageUtil sendMessageUtil;
  51. @Autowired
  52. private AdminOrderService adminOrderService;
  53. @Autowired
  54. private RatFWLogger logger;
  55. @Override
  56. public List<CartDto> selectCartByOpenId(String openId) {
  57. // TODO Auto-generated method stub
  58. return cartDao.selectCartByOpenId(openId);
  59. }
  60. @Override
  61. public Integer getCartNumByCartOpenId(String openId) {
  62. // TODO Auto-generated method stub
  63. return cartDao.getCartNumByCartOpenId(openId);
  64. }
  65. @Override
  66. public Integer updateCartByOpenId(CartDto cartDto) {
  67. // TODO Auto-generated method stub
  68. return cartDao.updateCartByOpenId(cartDto);
  69. }
  70. @Override
  71. public Integer getCartNumByOpenId(CartDto cartDto) {
  72. // TODO Auto-generated method stub
  73. return cartDao.getCartNumByOpenId(cartDto);
  74. }
  75. @Override
  76. public CartDto getCartByCartProductId(CartDto cartDto) {
  77. // TODO Auto-generated method stub
  78. return cartDao.getCartByCartProductId(cartDto);
  79. }
  80. @Override
  81. public CartDto getCartDto(CartDto cartDto) {
  82. // TODO Auto-generated method stub
  83. return cartDao.getCartDto(cartDto);
  84. }
  85. @Override
  86. public Integer addProductToCart(CartDto cartDto) {
  87. // TODO Auto-generated method stub
  88. Integer num = cartDao.addProductToCart(cartDto);
  89. if (num > 0) {
  90. return cartDto.getCartId();
  91. } else {
  92. return num;
  93. }
  94. }
  95. @Override
  96. public Integer deleteCartByCartId(CartDto cartDto) {
  97. // TODO Auto-generated method stub
  98. return cartDao.deleteCartByCartId(cartDto);
  99. }
  100. @Override
  101. public List<ShopOrderAndItemDto> selectShopOrder(PaperBean paperBean) {
  102. // TODO Auto-generated method stub
  103. return cartDao.selectShopOrder(paperBean);
  104. }
  105. @Override
  106. public List<ShopOrderItemDto> selectShopOrderItem(String itemSalesOrderid) {
  107. // TODO Auto-generated method stub
  108. return cartDao.selectShopOrderItem(itemSalesOrderid);
  109. }
  110. @Override
  111. public ShopSalesOrderDto getShopOrderByOrderId(String salesOrderId,
  112. String salesOpenId) {
  113. // TODO Auto-generated method stub
  114. return cartDao.getShopOrderByOrderId(salesOrderId, salesOpenId);
  115. }
  116. @Override
  117. public List<CartDto> selectCartItemByListId(Integer[] carts) {
  118. // TODO Auto-generated method stub
  119. return cartDao.selectCartItemByListId(carts);
  120. }
  121. @Override
  122. public boolean addOrderAndSaveOrderItem(Order order, List<OrderItem> items, List<Integer> cartIds) throws Exception {
  123. // TODO Auto-generated method stub
  124. int count = cartDao.insertOrderInfo(order);
  125. if (count < 1) {
  126. throw new Exception();
  127. }
  128. count = cartDao.insertOrderItemList(items);
  129. if (count < 1) {
  130. throw new Exception();
  131. }
  132. // 删除购物车项目
  133. cartDao.deleteBatchCartListById(cartIds);
  134. return true;
  135. }
  136. @Override
  137. public Integer updateOrderStatus(Order order) {
  138. // TODO Auto-generated method stub
  139. return cartDao.updateOrderStatus(order);
  140. }
  141. @Override
  142. public Integer selectOrderStatusByOrderId(String orderId) {
  143. // TODO Auto-generated method stub
  144. return cartDao.selectOrderStatusByOrderId(orderId);
  145. }
  146. @Override
  147. public ShopSalesOrderDto getOpenIdAndStatus(String salesOrderid) {
  148. // TODO Auto-generated method stub
  149. return cartDao.getOpenIdAndStatus(salesOrderid);
  150. }
  151. @Override
  152. public Integer updateOrderByOrderId(Order order) {
  153. // TODO Auto-generated method stub
  154. return cartDao.updateOrderByOrderId(order);
  155. }
  156. @Override
  157. public Order selectOrderInfoById(Order order) {
  158. // TODO Auto-generated method stub
  159. return cartDao.selectOrderInfoById(order);
  160. }
  161. @Override
  162. public Integer getOrderNumByOpenId(PaperBean paperBean) {
  163. // TODO Auto-generated method stub
  164. return cartDao.getOrderNumByOpenId(paperBean);
  165. }
  166. @Override
  167. public ShopSystemRule getReluByRid(Integer rId) {
  168. // TODO Auto-generated method stub
  169. return adminOrderDao.getReluByRid(rId);
  170. }
  171. /**
  172. * 根据单号查询该订单的产品总数
  173. * 2016年5月18日
  174. * @param orderid
  175. * @return
  176. */
  177. public Integer getItemNumByOrderId(String orderid){
  178. return cartDao.getItemNumByOrderId(orderid);
  179. }
  180. /**
  181. * 用于支付后的修改优惠券状态 及其订单状态状态的回调函数
  182. * @author 欧阳明
  183. * @return
  184. *
  185. */
  186. public Boolean supdateStateByOrderId(MQMessage QMessage){
  187. Order order=new Order();
  188. order.setSalesOrderid(QMessage.getServiceToMessage());
  189. //System.out.println("order is for search============");
  190. order=cartDao.selectOrderInfoById(order);
  191. /*order.setSalesTransactionId(QMessage.getServiceOtherMessage());
  192. updateOrderByOrderId(order);*/
  193. int i=0;
  194. /*//修改优惠券状态
  195. String couponId=order.getCouponId();
  196. if(couponId!=null && !couponId.endsWith("")){
  197. CouponItem couponItem=new CouponItem();
  198. couponItem.setCouponItemId(couponId);
  199. couponItem.setCouponUseStatus(2);
  200. couponItem.setCouponUseDate(nowDate);
  201. couponItemService.insertCouponItem(couponItem);
  202. }
  203. //更新账户余额
  204. int balancePayAmount=order.getBalancePayAmount();
  205. if(balancePayAmount>0){
  206. Member member=new Member();
  207. member.setUserOpenid(order.getSalesOpenid());
  208. member.setUserIncome(-balancePayAmount);
  209. memberService.updateUserIncomeByOpenId(member);
  210. //现金使用记录
  211. CashLog log=new CashLog();
  212. log.setCashLogsIntroduction("订单支出");
  213. log.setCashLogsNum(balancePayAmount);
  214. log.setCashLogsOpenid(member.getUserOpenid());
  215. log.setCashLogsType(2);
  216. log.setCashLogsResType(3);
  217. log.setCashLogsOrderid(order.getSalesOrderid());
  218. log.setCashLogsCreateDate(nowDate);
  219. i=cashLogService.addCashLog(log);
  220. }*/
  221. productInfoService.updateProductNumList(QMessage.getServiceToMessage());
  222. //添加到返利表
  223. i=rebackServices.loadSingleOrderReward(order);
  224. return i>0;
  225. }
  226. @Override
  227. public CouponType getCouponReduceByItemId(CouponItem couponItem) {
  228. // TODO Auto-generated method stub
  229. return cartDao.getCouponReduceByItemId(couponItem);
  230. }
  231. @Override
  232. public List<ShopSalesOrderDto> getOrderList(
  233. ShopSalesOrderDto shopSalesOrderDto) {
  234. // TODO Auto-generated method stub
  235. return cartDao.getOrderList(shopSalesOrderDto);
  236. }
  237. public Order getOrderRecentAddress(String openid){
  238. return cartDao.getRecentOrderAddress(openid);
  239. }
  240. @Override
  241. public Integer selectOrderCount(ShopSalesOrderDto shopSalesOrderDto) {
  242. // TODO Auto-generated method stub
  243. return cartDao.selectOrderCount(shopSalesOrderDto);
  244. }
  245. @Override
  246. public Map<String, Object> updateOrderStatus(String orderId, Integer status, String remark, int operation) {
  247. Map<String, Object> map = new HashMap<String, Object>();
  248. String txtOpera = getOrderOperation(operation);//获取操作信息
  249. boolean flag = false;
  250. StringBuilder msg = new StringBuilder();
  251. Order order = new Order();
  252. order.setSalesOrderid(orderId);
  253. order.setOldStatus(status);
  254. if (StringUtils.isNotEmpty(remark)) {
  255. order.setSalesReturnDes(remark);
  256. }
  257. switch (status) { //通过原始订单状态分配可执行的操作
  258. case 1: //待支付
  259. if (operation == 1) { //取消订单
  260. order.setSalesStatus(0); //订单取消
  261. //修改订单状态
  262. int num = cartDao.updateOrderByOrder(order);
  263. if (num > 0) {
  264. flag = true;
  265. }
  266. } else {
  267. msg.append("该订单不支持");
  268. msg.append(txtOpera);
  269. msg.append("操作,请重新确认!");
  270. }
  271. break;
  272. case 2: //已支付待发货
  273. if (operation == 2) { //申请退款
  274. order.setSalesStatus(3); //退款申请中
  275. order.setSalesReturnDate(new Date());
  276. //修改订单状态
  277. int num = cartDao.updateOrderByOrder(order);
  278. if (num > 0) {
  279. //推送微信发货消息
  280. //给用户发送消息-已发货的通知
  281. DecimalFormat df=new DecimalFormat("0.00");
  282. Order order2 = adminOrderService.selectOrderStatusByOrderId(order.getSalesOrderid());
  283. String payMoney = df.format((float)order2.getSalesYetAmount()/100) + "元";
  284. //获取当前订单订单项
  285. List<OrderItem> itemList = adminOrderService.getShopOrderItemByOrderId(order.getSalesOrderid());
  286. try {
  287. sendMessageUtil.refundApplicationNotice("尊敬的朵粉,我们已收到您的退款申请,我们正在积极处理:",payMoney,itemList.get(0).getItemProductName(),order.getSalesOrderid(),
  288. "如有问题请致电400-678-1860或直接在微信留言,soodo上朵将第一时间为您服务!(点击查看订单详情)",order2.getSalesOpenid(),ResultInfo.ORDER_DETAIL+order.getSalesOrderid());
  289. } catch (Exception e) {
  290. logger.info("订单号:"+ orderId +"的订单驳回退款,发送微信消息失败!");
  291. }
  292. flag = true;
  293. }
  294. } else {
  295. msg.append("该订单不支持");
  296. msg.append(txtOpera);
  297. msg.append("操作,请重新确认!");
  298. }
  299. break;
  300. case 3: //退款申请中
  301. if (operation == 3) { //取消退款
  302. order.setSalesStatus(2); //已支付,待发货
  303. //修改订单状态
  304. int num = cartDao.updateOrderByOrder(order);
  305. if (num > 0) {
  306. flag = true;
  307. }
  308. } else {
  309. msg.append("该订单不支持");
  310. msg.append(txtOpera);
  311. msg.append("操作,请重新确认!");
  312. }
  313. break;
  314. case 5: //已发货
  315. if (operation == 4) { //申请退货
  316. order.setSalesStatus(6); //申请退货中
  317. order.setSalesReturnDate(new Date());
  318. //修改订单状态
  319. int num = cartDao.updateOrderByOrder(order);
  320. if (num > 0) {
  321. DecimalFormat df=new DecimalFormat("0.00");
  322. Order order2 = adminOrderService.selectOrderStatusByOrderId(order.getSalesOrderid());
  323. //获取当前订单订单项
  324. List<OrderItem> itemList = adminOrderService.getShopOrderItemByOrderId(orderId);
  325. String payMoney = df.format((float)order2.getSalesYetAmount()/100) + "元";
  326. int productNum = 0;
  327. for (OrderItem item : itemList) {
  328. productNum += item.getItemNum();
  329. }
  330. try {
  331. sendMessageUtil.orderApplyReturn("尊敬的朵粉,已收到您的【退货申请】",orderId,payMoney,productNum+"件",order2.getSalesReturnDes(),
  332. "点击查看退款退货详情。如有问题请致电400-678-1860或直接在微信留言,soodo上朵将第一时间为您服务!",order2.getSalesOpenid(),ResultInfo.ORDER_DETAIL+orderId);
  333. } catch (Exception e) {
  334. logger.info("订单号:"+ orderId +"的订单申请退货,发送微信消息失败!");
  335. }
  336. flag = true;
  337. }
  338. } else if (operation == 7) { //申请换货
  339. order.setSalesStatus(11); //申请换货中
  340. order.setSalesReturnDate(new Date());
  341. //修改订单状态
  342. int num = cartDao.updateOrderByOrder(order);
  343. if (num > 0) {
  344. Order order2 = adminOrderService.selectOrderStatusByOrderId(orderId);
  345. //获取当前订单订单项
  346. List<OrderItem> itemList = adminOrderService.getShopOrderItemByOrderId(orderId);
  347. try {
  348. sendMessageUtil.orderApplyBarter("尊敬的朵粉,已收到您的【换货申请】,我们正在确认换货信息。",orderId,itemList.get(0).getItemProductName(),
  349. "请确认您的换货申请信息填写无误!如有问题请致电400-678-1860或直接在微信留言,soodo上朵将第一时间为您服务!",order2.getSalesOpenid(),ResultInfo.ORDER_DETAIL+orderId);
  350. } catch (Exception e) {
  351. logger.info("订单号:"+ orderId +"的订单申请换货,发送微信消息失败!");
  352. }
  353. flag = true;
  354. }
  355. } else {
  356. msg.append("该订单不支持");
  357. msg.append(txtOpera);
  358. msg.append("操作,请重新确认!");
  359. }
  360. break;
  361. case 6: //申请退货中
  362. if (operation == 5) { //取消申请退货
  363. order.setSalesStatus(5); //已发货
  364. //修改订单状态
  365. int num = cartDao.updateOrderByOrder(order);
  366. if (num > 0) {
  367. flag = true;
  368. }
  369. } else {
  370. msg.append("该订单不支持");
  371. msg.append(txtOpera);
  372. msg.append("操作,请重新确认!");
  373. }
  374. break;
  375. case 7: //退货中
  376. if (operation == 6) { //取消退货
  377. order.setSalesStatus(5); //已发货
  378. //修改订单状态
  379. int num = cartDao.updateOrderByOrder(order);
  380. if (num > 0) {
  381. flag = true;
  382. }
  383. } else {
  384. msg.append("该订单不支持");
  385. msg.append(txtOpera);
  386. msg.append("操作,请重新确认!");
  387. }
  388. break;
  389. case 11: //申请换货中
  390. if (operation == 8) { //取消换货
  391. order.setSalesStatus(5); //已发货
  392. //修改订单状态
  393. int num = cartDao.updateOrderByOrder(order);
  394. if (num > 0) {
  395. flag = true;
  396. }
  397. } else {
  398. msg.append("该订单不支持");
  399. msg.append(txtOpera);
  400. msg.append("操作,请重新确认!");
  401. }
  402. break;
  403. default:
  404. msg.append("该订单不支持");
  405. msg.append(txtOpera);
  406. msg.append("操作,请重新确认!");
  407. break;
  408. }
  409. map.put("flag",flag);
  410. map.put("msg",msg);
  411. return map;
  412. }
  413. /**
  414. * 获取用户对订单的操作
  415. * @param operation
  416. * @return
  417. */
  418. public String getOrderOperation(int operation) {
  419. String txtOpera = "";
  420. switch (operation) {
  421. case 1:txtOpera = "取消订单";break;
  422. case 2:txtOpera = "申请退款";break;
  423. case 3:txtOpera = "取消退款";break;
  424. case 4:txtOpera = "申请退货";break;
  425. case 5:txtOpera = "取消申请退货";break;
  426. case 6:txtOpera = "取消退货";break;
  427. case 7:txtOpera = "申请换货";break;
  428. case 8:txtOpera = "取消换货";break;
  429. default:txtOpera = "取消订单";break;
  430. }
  431. return txtOpera;
  432. }
  433. }