WashOrderServiceImpl.java 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  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. if (order.getUserId() == StpUtil.getLoginIdAsLong()) {
  98. awoaraService.closeOrder(params.getProductKey(), params.getDeviceName(), order.getOrderId());
  99. } else {
  100. throw new BusinessException("您没有权限关闭该订单!");
  101. }
  102. }
  103. }
  104. /**
  105. * 查询订单详情
  106. *
  107. * @param params
  108. * @return
  109. */
  110. @Override
  111. public WashOrder queryOrder(WashOrderQueryParams params) {
  112. // 非实时数据
  113. WashOrder order = lambdaQuery()
  114. .eq(WashOrder::getOrderId, params.getOrderId())
  115. .one();
  116. if(null!=params.getUserId()){
  117. CommUtil.asserts(null!=order && order.getUserId().equals(StpUtil.getLoginIdAsLong()),
  118. "订单不存在或您没有权限查看该订单!");
  119. }
  120. return order;
  121. }
  122. /**
  123. * 当前用户订单列表
  124. *
  125. * @param params
  126. * @return
  127. */
  128. @Override
  129. public PageBean<WashOrderVo> listMyWashOrder(PageParams params) {
  130. PageHelper.startPage(params.getPageNum(), params.getPageSize());
  131. var res = lambdaQuery()
  132. .eq(WashOrder::getUserId, StpUtil.getLoginIdAsLong())
  133. .orderByDesc(WashOrder::getId)
  134. .list();
  135. var voList = res.stream().map(order -> {
  136. var vo = new WashOrderVo();
  137. BeanUtils.copyProperties(order, vo);
  138. return vo;
  139. }).toList();
  140. return new PageBean<>(voList);
  141. }
  142. //region 管理后台
  143. @Override
  144. public PageBean<WashOrderVo> list(WashOrderQueryParams query) {
  145. PageHelper.startPage(query.getPageNum(), query.getPageSize());
  146. var res = lambdaQuery()
  147. .eq(CommUtil.isNotEmptyAndNull(query.getStationId()), WashOrder::getStationId, query.getStationId())
  148. .like(CommUtil.isNotEmptyAndNull(query.getOrderId()), WashOrder::getOrderId, query.getOrderId())
  149. .orderByDesc(WashOrder::getId)
  150. .list();
  151. var voList = res.stream().map(order -> {
  152. var vo = new WashOrderVo();
  153. BeanUtils.copyProperties(order, vo);
  154. return vo;
  155. }).toList();
  156. return new PageBean<>(voList);
  157. }
  158. @Override
  159. public WashOrder detail(long id) {
  160. return getById(id);
  161. }
  162. //endregion
  163. }