| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- package com.kym.service.miniapp.impl;
- import cn.dev33.satoken.stp.StpUtil;
- import com.github.pagehelper.PageHelper;
- import com.github.yulichang.toolkit.JoinWrappers;
- import com.github.yulichang.wrapper.MPJLambdaWrapper;
- import com.kym.common.exception.BusinessException;
- import com.kym.common.utils.CommUtil;
- import com.kym.common.utils.OrderUtils;
- import com.kym.entity.common.PageBean;
- import com.kym.entity.common.PageParams;
- import com.kym.entity.miniapp.Account;
- import com.kym.entity.miniapp.User;
- import com.kym.entity.miniapp.WashOrder;
- import com.kym.entity.miniapp.queryParams.DeviceQueryParams;
- import com.kym.entity.miniapp.queryParams.WashOrderQueryParams;
- import com.kym.entity.miniapp.vo.WashOrderVo;
- import com.kym.mapper.miniapp.WashOrderMapper;
- import com.kym.service.awoara.AwoaraService;
- import com.kym.service.cache.KymCache;
- import com.kym.service.miniapp.AccountService;
- import com.kym.service.miniapp.WashOrderService;
- import com.kym.service.mybatisplus.MyBaseServiceImpl;
- import org.springframework.beans.BeanUtils;
- import org.springframework.stereotype.Service;
- import java.time.LocalDateTime;
- import java.util.List;
- /**
- * <p>
- * 洗车订单表 服务实现类
- * </p>
- *
- * @author skyline
- * @since 2024-09-11
- */
- @Service
- public class WashOrderServiceImpl extends MyBaseServiceImpl<WashOrderMapper, WashOrder> implements WashOrderService {
- private final AwoaraService awoaraService;
- private final AccountService accountService;
- public WashOrderServiceImpl(AwoaraService awoaraService, AccountService accountService) {
- this.awoaraService = awoaraService;
- this.accountService = accountService;
- }
- /**
- * 创建订单(启动洗车机)
- *
- * @param params
- * @return
- */
- @Override
- public String createOrder(DeviceQueryParams params) {
- // 校验余额
- var account = accountService.getAccountByUserId(StpUtil.getLoginIdAsLong());
- if (account.getBalance() < Account.MIN_BALANCE) {
- throw new BusinessException("余额不足,请保持余额不低于2元!");
- }
- // 校验用户是否有未完结的订单
- var unfinishedOrder = lambdaQuery()
- .eq(WashOrder::getUserId, StpUtil.getLoginIdAsLong())
- .eq(WashOrder::getOrderStatus, WashOrder.ORDER_STATUS_开机)
- .or()
- .eq(WashOrder::getPayStatus, WashOrder.PAY_STATUS_未支付)
- .list();
- if (!unfinishedOrder.isEmpty()) {
- throw new BusinessException("您有未完结的订单!");
- }
- var memberName = StpUtil.getSession().getString(User.ST_SESSION_KEY_MOBILE);
- var orderId = OrderUtils.getOrderNo();
- // 请求阿里云lot
- var createOrder = awoaraService.createOrder(params.getProductKey(), params.getDeviceName(),
- orderId,
- memberName,
- account.getBalance(),
- Account.NO_DISCOUNT,
- // 本次开机最大消费金额,减去0.5元,防止延时导致超消费
- account.getBalance() - 50);
- var washOrder = new WashOrder()
- .setUserId(StpUtil.getLoginIdAsLong())
- .setStationId(params.getStationId())
- .setProductKey(params.getProductKey())
- .setDeviceName(params.getDeviceName())
- .setShortId(KymCache.INSTANCE.getShortIdByProductKeyAndDeviceName(params.getProductKey(), params.getDeviceName()))
- .setOpenType(WashOrder.START_CLOSE_TYPE_网络)
- .setOrderId(orderId)
- .setOrderIdLocal(createOrder.getOrder_id_local())
- .setMemberDiscount(Account.NO_DISCOUNT)
- .setPrepayMoney(account.getBalance() - 50)
- .setStartTime(LocalDateTime.now())
- .setOrderStatus(WashOrder.ORDER_STATUS_开机)
- .setPayStatus(WashOrder.PAY_STATUS_未支付);
- save(washOrder);
- return orderId;
- }
- @Override
- public void closeOrder(DeviceQueryParams params) {
- var order = lambdaQuery()
- .eq(WashOrder::getProductKey, params.getProductKey())
- .eq(WashOrder::getDeviceName, params.getDeviceName())
- .eq(WashOrder::getOrderStatus, WashOrder.ORDER_STATUS_开机)
- .eq(WashOrder::getPayStatus, WashOrder.PAY_STATUS_未支付)
- .one();
- if (order != null) {
- if (order.getUserId() == StpUtil.getLoginIdAsLong()) {
- awoaraService.closeOrder(params.getProductKey(), params.getDeviceName(), order.getOrderId());
- } else {
- throw new BusinessException("您没有权限关闭该订单!");
- }
- }
- }
- /**
- * 查询订单详情
- *
- * @param params
- * @return
- */
- @Override
- public WashOrder queryOrder(WashOrderQueryParams params) {
- // 非实时数据
- WashOrder order = lambdaQuery()
- .eq(WashOrder::getOrderId, params.getOrderId())
- .one();
- if(null!=params.getUserId()){
- CommUtil.asserts(null!=order && order.getUserId().equals(StpUtil.getLoginIdAsLong()),
- "订单不存在或您没有权限查看该订单!");
- }
- return order;
- }
- /**
- * 当前用户订单列表
- *
- * @param params
- * @return
- */
- @Override
- public PageBean<WashOrderVo> listMyWashOrder(PageParams params) {
- PageHelper.startPage(params.getPageNum(), params.getPageSize());
- var res = lambdaQuery()
- .eq(WashOrder::getUserId, StpUtil.getLoginIdAsLong())
- .orderByDesc(WashOrder::getId)
- .list();
- var voList = res.stream().map(order -> {
- var vo = new WashOrderVo();
- BeanUtils.copyProperties(order, vo);
- return vo;
- }).toList();
- return new PageBean<>(voList);
- }
- //region 管理后台
- @Override
- public PageBean<WashOrderVo> list(WashOrderQueryParams params) {
- PageHelper.startPage(params.getPageNum(), params.getPageSize());
- MPJLambdaWrapper<WashOrder> wrapper = JoinWrappers.lambda(WashOrder.class)
- .selectAsClass(WashOrder.class, WashOrderVo.class)
- .selectAs(User::getMobilePhone, WashOrderVo::getMobilePhone)
- .leftJoin(User.class, User::getId,WashOrder::getUserId)
- .eq(CommUtil.isNotEmptyAndNull(params.getUserId()), WashOrder::getUserId, params.getUserId())
- .eq(CommUtil.isNotEmptyAndNull(params.getMobilePhone()), User::getMobilePhone, params.getMobilePhone())
- .eq(CommUtil.isNotEmptyAndNull(params.getOrderStatus()), WashOrder::getOrderStatus, params.getOrderStatus())
- .eq(CommUtil.isNotEmptyAndNull(params.getPayStatus()), WashOrder::getPayStatus, params.getPayStatus())
- .orderByDesc(WashOrder::getId);
- //连表查询 返回自定义ResultType
- List<WashOrderVo> list = selectJoinList(WashOrderVo.class, wrapper);
- list.forEach(item -> {
- item.setStationName(KymCache.INSTANCE.getStationNameById(item.getStationId()));
- });
- return new PageBean<>(list);
- }
- @Override
- public WashOrder detail(long id) {
- return getById(id);
- }
- //endregion
- }
|