OrderServiceImpl.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  1. package com.fdkankan.ucenter.service.impl;
  2. import com.amazonaws.services.codecommit.model.OrderEnum;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.fdkankan.common.constant.TbStatus;
  7. import com.fdkankan.common.exception.BusinessException;
  8. import com.fdkankan.ucenter.common.PageInfo;
  9. import com.fdkankan.common.util.FileUtils;
  10. import com.fdkankan.common.util.NumberUtils;
  11. import com.fdkankan.redis.util.RedisUtil;
  12. import com.fdkankan.ucenter.common.RedisKeyUtil;
  13. import com.fdkankan.ucenter.constant.*;
  14. import com.fdkankan.ucenter.entity.*;
  15. import com.fdkankan.ucenter.httpClient.param.PayGoods;
  16. import com.fdkankan.ucenter.httpClient.service.PayService;
  17. import com.fdkankan.ucenter.httpClient.vo.PayOrderVo;
  18. import com.fdkankan.ucenter.mapper.IOrderMapper;
  19. import com.fdkankan.ucenter.pay.alipay.sdk.AlipayService;
  20. import com.fdkankan.ucenter.pay.wx.WXPay;
  21. import com.fdkankan.ucenter.pay.wx.WXPayConstants;
  22. import com.fdkankan.ucenter.pay.wx.WXPayDefaultConfig;
  23. import com.fdkankan.ucenter.service.*;
  24. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  25. import com.fdkankan.ucenter.util.DateUserUtil;
  26. import com.fdkankan.ucenter.vo.request.CartParam;
  27. import com.fdkankan.ucenter.vo.request.DownNumParam;
  28. import com.fdkankan.ucenter.vo.request.OrderParam;
  29. import com.fdkankan.ucenter.vo.request.PlaceOrderParam;
  30. import com.fdkankan.ucenter.vo.response.GoodsSkuVo;
  31. import com.fdkankan.ucenter.vo.response.OrderVo;
  32. import com.google.common.collect.Ordering;
  33. import org.apache.commons.lang3.StringUtils;
  34. import org.springframework.beans.BeanUtils;
  35. import org.springframework.beans.factory.annotation.Autowired;
  36. import org.springframework.beans.factory.annotation.Value;
  37. import org.springframework.stereotype.Service;
  38. import java.math.BigDecimal;
  39. import java.util.*;
  40. import java.util.stream.Collectors;
  41. /**
  42. * <p>
  43. * 订单表 服务实现类
  44. * </p>
  45. *
  46. * @author
  47. * @since 2022-07-13
  48. */
  49. @Service
  50. public class OrderServiceImpl extends ServiceImpl<IOrderMapper, Order> implements IOrderService {
  51. @Autowired
  52. IUserService userService;
  53. @Autowired
  54. IOrderItemService orderItemService;
  55. @Autowired
  56. IInvoiceService invoiceService;
  57. @Autowired
  58. IIncrementOrderService incrementOrderService;
  59. @Autowired
  60. ICartService cartService;
  61. @Autowired
  62. IGoodsService goodsService;
  63. @Autowired
  64. IGoodsSkuService goodsSkuService;
  65. @Autowired
  66. RedisUtil redisUtil;
  67. @Autowired
  68. AlipayService alipayService;
  69. @Autowired
  70. IDownloadOrderService downloadOrderService;
  71. @Autowired
  72. IIncrementTypeService incrementTypeService;
  73. @Autowired
  74. IOrderService orderService;
  75. @Override
  76. public PageInfo pageList(OrderParam param) {
  77. User user = userService.getByUserName(param.getUserName());
  78. LambdaQueryWrapper<Order> wrapper = new LambdaQueryWrapper<>();
  79. wrapper.eq(Order::getUserId,user.getId());
  80. wrapper.eq(Order::getPaymentStatus,"paid");
  81. wrapper.orderByDesc(Order::getOrderTime);
  82. Page<Order> page = this.page(new Page<>(param.getPageNum(), param.getPageSize()), wrapper);
  83. List<OrderVo> orderVos = new ArrayList<>();
  84. for (Order record : page.getRecords()) {
  85. OrderVo orderVo = new OrderVo();
  86. BeanUtils.copyProperties(record,orderVo);
  87. Invoice invoice = invoiceService.getByOrderId(record.getId());
  88. orderVo.setInvoice(invoice);
  89. List<OrderItem> itemList = orderItemService.getByOrderId(record.getId());
  90. orderVo.setOrderItems(itemList);
  91. orderVos.add(orderVo);
  92. }
  93. Page<OrderVo> pageVo = new Page<>(param.getPageNum(),param.getPageSize());
  94. pageVo.setRecords(orderVos);
  95. pageVo.setTotal(page.getTotal());
  96. return PageInfo.PageInfo(pageVo);
  97. }
  98. @Override
  99. public GoodsSkuVo getIncrementOrDownloadPrice(OrderParam param) {
  100. return incrementOrderService.getDownloadPrice(param);
  101. }
  102. @Override
  103. public void cancel(Long orderId) {
  104. LambdaUpdateWrapper<Order> wrapper = new LambdaUpdateWrapper<>();
  105. wrapper.set(Order::getOrderStatus, OrderStatus.invalid)
  106. .eq(Order::getId,orderId);
  107. this.update(wrapper);
  108. }
  109. @Override
  110. public void receipt(Long orderId) {
  111. LambdaUpdateWrapper<Order> wrapper = new LambdaUpdateWrapper<>();
  112. wrapper.set(Order::getOrderStatus, OrderStatus.completed)
  113. .set(Order::getShippingStatus, ShippingStatus.received)
  114. .eq(Order::getId,orderId);
  115. this.update(wrapper);
  116. }
  117. @Autowired
  118. PayService payService;
  119. @Override
  120. public Order placeOrder(PlaceOrderParam param) {
  121. List<Long> id = param.getGoods().parallelStream().map(CartParam::getId).collect(Collectors.toList());
  122. List<String> ids = new ArrayList<>();
  123. for (Long aLong : id) {
  124. ids.add(String.valueOf(aLong));
  125. }
  126. User user = userService.getByUserName(param.getUserName());
  127. cartService.deleteIds(ids);
  128. // 下单
  129. List<OrderItem> orderItemEntities = new ArrayList<>();
  130. OrderItem orderItemEntity = null;
  131. int goodsTotalCount = 0;
  132. BigDecimal goodsAmount = new BigDecimal(0);
  133. List<PayGoods> goodsInfoList = new ArrayList<>();
  134. for(CartParam requestCart : param.getGoods()){
  135. goodsTotalCount += requestCart.getGoodsCount();
  136. Goods responseGoods = goodsService.getById(requestCart.getGoodsId());
  137. if (responseGoods == null){
  138. continue;
  139. }
  140. GoodsSku sku = goodsSkuService.getBySku(requestCart.getSkuSn());
  141. if (sku == null){
  142. throw new BusinessException(500,LoginConstant.ERROR_MSG);
  143. }
  144. orderItemEntity = new OrderItem();
  145. orderItemEntity.setExpressNum(null);
  146. orderItemEntity.setGoodsPrice(param.getAbroad().intValue() == 0 ? sku.getPrice() : sku.getDollarPrice());
  147. orderItemEntity.setGoodsId(requestCart.getGoodsId());
  148. orderItemEntity.setShippingStatus(ShippingStatus.unshipped.name());
  149. orderItemEntity.setExpressName("顺丰速运");
  150. orderItemEntity.setGoodsCount(requestCart.getGoodsCount());
  151. if("en".equals(param.getLang())){
  152. orderItemEntity.setGoodsName(responseGoods.getNameEn());
  153. }else {
  154. orderItemEntity.setGoodsName(responseGoods.getName());
  155. }
  156. orderItemEntity.setGoodsSn(responseGoods.getGoodsSn());
  157. orderItemEntity.setRecStatus("A");
  158. orderItemEntity.setCreateTime(DateUserUtil.getDate(new Date()));
  159. orderItemEntity.setUpdateTime(DateUserUtil.getDate(new Date()));
  160. if (StringUtils.isNotEmpty(requestCart.getSkuSn())){
  161. orderItemEntity.setSkuSn(requestCart.getSkuSn());
  162. }
  163. orderItemEntities.add(orderItemEntity);
  164. goodsAmount = goodsAmount.add(orderItemEntity.getGoodsPrice().multiply(new BigDecimal(orderItemEntity.getGoodsCount())));
  165. PayGoods payGoods = new PayGoods(orderItemEntity.getGoodsName(),orderItemEntity.getGoodsCount(),3);
  166. goodsInfoList.add(payGoods);
  167. }
  168. PayOrderVo payOrderVo = payService.downOrder(goodsAmount, "partOrder",user.getUserName(),user.getNickName(),goodsInfoList);
  169. if(payOrderVo == null){
  170. throw new BusinessException(OrderConstant.FAILURE_CODE_8005,OrderConstant.FAILURE_MSG_8005);
  171. }
  172. Order orderEntity = new Order();
  173. orderEntity.setOrderSn(payOrderVo.getOrderSn());
  174. orderEntity.setOrderTime(DateUserUtil.getDate(new Date()));
  175. orderEntity.setOrderStatus(OrderStatus.unprocessed.name());
  176. orderEntity.setPaymentStatus(PaymentStatus.unpaid.name());
  177. orderEntity.setShippingStatus(ShippingStatus.unshipped.name());
  178. orderEntity.setPaymentTypeName(param.getPayType());
  179. orderEntity.setUserId(user.getId());
  180. orderEntity.setGoodsTotalCount(goodsTotalCount);
  181. orderEntity.setGoodsAmount(goodsAmount);
  182. orderEntity.setTotalAmount(goodsAmount);
  183. orderEntity.setPaidAmount(BigDecimal.ZERO);
  184. orderEntity.setExpressAmount(BigDecimal.ZERO);
  185. orderEntity.setDeliveryTypeName("快递运输");
  186. orderEntity.setRecStatus("A");
  187. orderEntity.setCreateTime(DateUserUtil.getDate(new Date()));
  188. orderEntity.setUpdateTime(DateUserUtil.getDate(new Date()));
  189. if (param.getReceiver() != null){
  190. orderEntity.setShipAddress(param.getReceiver().getShipAddress());
  191. orderEntity.setShipAreaPath(param.getReceiver().getShipAreaPath());
  192. orderEntity.setShipMobile(param.getReceiver().getShipMobile());
  193. orderEntity.setShipName(param.getReceiver().getShipName());
  194. }
  195. orderEntity.setAbroad(param.getAbroad());
  196. this.save(orderEntity);
  197. for (OrderItem entity : orderItemEntities){
  198. entity.setOrderId(orderEntity.getId());
  199. }
  200. orderItemService.saveBatch(orderItemEntities);
  201. if(param.getInvoice()!=null && StringUtils.isNotBlank(param.getInvoice().getInvoiceType())){
  202. param.setOrderId(orderEntity.getId());
  203. param.getInvoice().setAmount(orderEntity.getTotalAmount().toString());
  204. invoiceService.saveByOrder(user.getId(),param);
  205. }
  206. return orderEntity;
  207. }
  208. @Override
  209. public boolean queryOrderStatus(OrderParam param) throws Exception {
  210. String orderSn = param.getOrderSn();
  211. if(StringUtils.isBlank(orderSn)){
  212. return false;
  213. }
  214. Order order = orderService.getByOrderSn(orderSn);
  215. //付款状态(未付款unpaid、已付款paid、已取消cancel, 部分支付partPayment, 部分退款partRefund, 全额退款refunded)
  216. if(order != null && order.getPaymentStatus().equals("paid")){
  217. return true;
  218. }
  219. DownloadOrder downloadOrder = downloadOrderService.getByOrderSn(orderSn);
  220. if(downloadOrder != null && downloadOrder.getPayStatus() == 1){
  221. return true;
  222. }
  223. IncrementOrder incrementOrder = incrementOrderService.getByOrderSn(orderSn);
  224. if(incrementOrder != null && incrementOrder.getPayStatus() == 1){
  225. return true;
  226. }
  227. return false;
  228. }
  229. @Override
  230. public Order getByOrderSn(String orderSn) {
  231. LambdaQueryWrapper<Order> wrapper = new LambdaQueryWrapper<>();
  232. wrapper.eq(Order::getOrderSn,orderSn);
  233. return this.getOne(wrapper);
  234. }
  235. @Override
  236. public Order getByOrderSnNoPay(String orderSn) {
  237. LambdaQueryWrapper<Order> wrapper = new LambdaQueryWrapper<>();
  238. wrapper.eq(Order::getOrderSn,orderSn);
  239. wrapper.ne(Order::getPaymentStatus, PaymentStatus.paid.name());
  240. return this.getOne(wrapper); }
  241. @Override
  242. public DownloadOrder downloadOrder(DownNumParam param) {
  243. //支付美金,只能paypal支付
  244. if(param.getAbroad() == 1 && param.getPayType() != 2){
  245. throw new BusinessException(OrderConstant.FAILURE_CODE_8004, OrderConstant.FAILURE_MSG_8004);
  246. }
  247. IncrementType incrementType = incrementTypeService.getById(param.getIncrementType());
  248. if(incrementType == null){
  249. throw new BusinessException(OrderConstant.FAILURE_CODE_8004, OrderConstant.FAILURE_MSG_8004);
  250. }
  251. // GoodsSku goodsSku = goodsSkuService.getBySku(param.getSkuSn());
  252. // if(goodsSku == null){
  253. // throw new BusinessException(OrderConstant.FAILURE_CODE_8004, OrderConstant.FAILURE_MSG_8004);
  254. // }
  255. User user = userService.getByUserName(param.getUserName());
  256. if(user == null){
  257. throw new BusinessException(OrderConstant.FAILURE_CODE_8004, OrderConstant.FAILURE_MSG_8004);
  258. }
  259. return downloadOrderService.insertDownloadOrder(user,param,incrementType.getDownloadPrice());
  260. }
  261. @Override
  262. public IncrementOrder incrementOrder(DownNumParam param) {
  263. //支付美金,只能paypal支付
  264. if(param.getAbroad() == 1 && param.getPayType() != 2){
  265. throw new BusinessException(OrderConstant.FAILURE_CODE_8004, OrderConstant.FAILURE_MSG_8004);
  266. }
  267. User user = userService.getByUserName(param.getUserName());
  268. if(user == null){
  269. throw new BusinessException(OrderConstant.FAILURE_CODE_8004, OrderConstant.FAILURE_MSG_8004);
  270. }
  271. IncrementType incrementType = incrementTypeService.getById(param.getIncrementType());
  272. if(incrementType == null){
  273. throw new BusinessException(OrderConstant.FAILURE_CODE_8004, OrderConstant.FAILURE_MSG_8004);
  274. }
  275. return incrementOrderService.insertIncrementOrder(user, param,incrementType);
  276. }
  277. @Override
  278. public boolean paySuccessEntityOrder(String orderSn, String tradeNo, int paymentTypeName) {
  279. LambdaUpdateWrapper<Order> updateWrapper = new LambdaUpdateWrapper<>();
  280. updateWrapper.set(Order::getPaymentTypeName,paymentTypeName)
  281. .set(Order::getTradeNum,tradeNo)
  282. .set(Order::getPaymentStatus, PaymentStatus.paid.name())
  283. .eq(Order::getOrderSn,orderSn);
  284. return this.update(updateWrapper);
  285. }
  286. @Override
  287. public OrderVo getOrderDetail(Long orderId) {
  288. Order order = this.getById(orderId);
  289. OrderVo responseOrder = new OrderVo();
  290. if(order == null ){
  291. return responseOrder;
  292. }
  293. BeanUtils.copyProperties(order,responseOrder);
  294. List<OrderItem> responseOrderItems =orderItemService.getByOrderId(orderId);
  295. responseOrder.setOrderItems(responseOrderItems);
  296. Invoice invoice = invoiceService.getByOrderId(orderId);
  297. if(invoice != null){
  298. responseOrder.setInvoice(invoice);
  299. }
  300. return responseOrder;
  301. }
  302. @Override
  303. public void autoUpdateOrderStatus() {
  304. this.getBaseMapper().autoUpdateOrderStatus();
  305. }
  306. }