CartServiceImpl.java 15 KB

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