WashOrderServiceImpl.java 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. package com.kym.service.miniapp.impl;
  2. import cn.dev33.satoken.stp.StpUtil;
  3. import com.github.pagehelper.PageHelper;
  4. import com.kym.common.exception.BusinessException;
  5. import com.kym.common.utils.CommUtil;
  6. import com.kym.common.utils.OrderUtils;
  7. import com.kym.entity.common.PageBean;
  8. import com.kym.entity.common.PageParams;
  9. import com.kym.entity.miniapp.Account;
  10. import com.kym.entity.miniapp.User;
  11. import com.kym.entity.miniapp.WashOrder;
  12. import com.kym.entity.miniapp.queryParams.DeviceQueryParams;
  13. import com.kym.entity.miniapp.queryParams.WashOrderQueryParams;
  14. import com.kym.entity.miniapp.vo.WashOrderVo;
  15. import com.kym.mapper.miniapp.WashOrderMapper;
  16. import com.kym.service.awoara.AwoaraService;
  17. import com.kym.service.miniapp.AccountService;
  18. import com.kym.service.miniapp.WashOrderService;
  19. import com.kym.service.mybatisplus.MyBaseServiceImpl;
  20. import org.springframework.beans.BeanUtils;
  21. import org.springframework.stereotype.Service;
  22. import java.time.LocalDateTime;
  23. /**
  24. * <p>
  25. * 洗车订单表 服务实现类
  26. * </p>
  27. *
  28. * @author skyline
  29. * @since 2024-09-11
  30. */
  31. @Service
  32. public class WashOrderServiceImpl extends MyBaseServiceImpl<WashOrderMapper, WashOrder> implements WashOrderService {
  33. private final AwoaraService awoaraService;
  34. private final AccountService accountService;
  35. public WashOrderServiceImpl(AwoaraService awoaraService, AccountService accountService) {
  36. this.awoaraService = awoaraService;
  37. this.accountService = accountService;
  38. }
  39. /**
  40. * 创建订单(启动洗车机)
  41. *
  42. * @param params
  43. * @return
  44. */
  45. @Override
  46. public String createOrder(DeviceQueryParams params) {
  47. // 校验余额
  48. var account = accountService.getAccountByUserId(StpUtil.getLoginIdAsLong());
  49. if (account.getBalance() < Account.MIN_BALANCE) {
  50. throw new BusinessException("余额不足,请保持余额不低于2元!");
  51. }
  52. // 校验用户是否有未完结的订单
  53. var unfinishedOrder = lambdaQuery()
  54. .eq(WashOrder::getUserId, StpUtil.getLoginIdAsLong())
  55. .eq(WashOrder::getOrderStatus, WashOrder.ORDER_STATUS_开机)
  56. .or()
  57. .eq(WashOrder::getPayStatus, WashOrder.PAY_STATUS_未支付)
  58. .list();
  59. if (!unfinishedOrder.isEmpty()) {
  60. throw new BusinessException("您有未完结的订单!");
  61. }
  62. var memberName = StpUtil.getSession().getString(User.ST_SESSION_KEY_MOBILE);
  63. var orderId = OrderUtils.getOrderNo();
  64. // 请求阿里云lot
  65. var createOrder = awoaraService.createOrder(params.getProductKey(), params.getDeviceName(),
  66. orderId,
  67. memberName,
  68. account.getBalance(),
  69. Account.NO_DISCOUNT,
  70. // 本次开机最大消费金额,减去0.5元,防止延时导致超消费
  71. account.getBalance() - 50);
  72. var washOrder = new WashOrder()
  73. .setUserId(StpUtil.getLoginIdAsLong())
  74. .setStationId(params.getStationId())
  75. .setProductKey(params.getProductKey())
  76. .setDeviceName(params.getDeviceName())
  77. .setOpenType(WashOrder.START_CLOSE_TYPE_网络)
  78. .setOrderId(orderId)
  79. .setOrderIdLocal(createOrder.getOrder_id_local())
  80. .setMemberDiscount(Account.NO_DISCOUNT)
  81. .setPrepayMoney(account.getBalance() - 50)
  82. .setStartTime(LocalDateTime.now())
  83. .setOrderStatus(WashOrder.ORDER_STATUS_开机)
  84. .setPayStatus(WashOrder.PAY_STATUS_未支付);
  85. save(washOrder);
  86. return orderId;
  87. }
  88. @Override
  89. public void closeOrder(DeviceQueryParams params) {
  90. var order = lambdaQuery()
  91. .eq(WashOrder::getProductKey, params.getProductKey())
  92. .eq(WashOrder::getDeviceName, params.getDeviceName())
  93. .eq(WashOrder::getOrderStatus, WashOrder.ORDER_STATUS_开机)
  94. .eq(WashOrder::getPayStatus, WashOrder.PAY_STATUS_未支付)
  95. .one();
  96. if (order != null) {
  97. awoaraService.closeOrder(params.getProductKey(), params.getDeviceName(), order.getOrderId());
  98. }
  99. }
  100. /**
  101. * 查询订单详情
  102. *
  103. * @param params
  104. * @return
  105. */
  106. @Override
  107. public WashOrder queryOrder(WashOrderQueryParams params) {
  108. // 非实时数据
  109. return lambdaQuery()
  110. .eq(WashOrder::getOrderId, params.getOrderId())
  111. .one();
  112. }
  113. /**
  114. * 当前用户订单列表
  115. *
  116. * @param params
  117. * @return
  118. */
  119. @Override
  120. public PageBean<WashOrderVo> listMyWashOrder(PageParams params) {
  121. PageHelper.startPage(params.getPageNum(), params.getPageSize());
  122. var res = lambdaQuery()
  123. .eq(WashOrder::getUserId, StpUtil.getLoginIdAsLong())
  124. .orderByDesc(WashOrder::getId)
  125. .list();
  126. var voList = res.stream().map(order -> {
  127. var vo = new WashOrderVo();
  128. BeanUtils.copyProperties(order, vo);
  129. return vo;
  130. }).toList();
  131. return new PageBean<>(voList);
  132. }
  133. //region 管理后台
  134. @Override
  135. public PageBean<WashOrderVo> list(WashOrderQueryParams query) {
  136. PageHelper.startPage(query.getPageNum(), query.getPageSize());
  137. var res = lambdaQuery()
  138. .eq(CommUtil.isNotEmptyAndNull(query.getStationId()), WashOrder::getStationId, query.getStationId())
  139. .like(CommUtil.isNotEmptyAndNull(query.getOrderId()), WashOrder::getOrderId, query.getOrderId())
  140. .orderByDesc(WashOrder::getId)
  141. .list();
  142. var voList = res.stream().map(order -> {
  143. var vo = new WashOrderVo();
  144. BeanUtils.copyProperties(order, vo);
  145. return vo;
  146. }).toList();
  147. return new PageBean<>(voList);
  148. }
  149. @Override
  150. public WashOrder detail(long id) {
  151. return getById(id);
  152. }
  153. //endregion
  154. }