From cc628ffc94cfcb572e7f07f37b9e8aa4d7f4a5fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A3=B7=E5=8F=B6?= <14103883+leaf-phos@user.noreply.gitee.com> Date: Wed, 16 Apr 2025 15:00:52 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9F=AD=E4=BF=A1=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/common/sms/SmsAliService.java | 47 +++++----- .../com/ruoyi/bst/area/domain/AreaVO.java | 5 +- .../com/ruoyi/bst/area/mapper/AreaMapper.xml | 2 + .../domain/enums/BalanceLogBstType.java | 3 +- .../com/ruoyi/bst/order/domain/OrderVO.java | 4 - .../bst/order/domain/dto/OrderEndDTO.java | 6 +- .../order/domain/enums/OrderReturnType.java | 15 +++- .../ruoyi/bst/order/mapper/OrderMapper.xml | 2 - .../ruoyi/bst/order/service/OrderService.java | 2 +- .../order/service/impl/OrderServiceImpl.java | 28 ++++-- .../bst/sms/constants/SmsTemplateCode.java | 16 ++++ .../com/ruoyi/bst/sms/service/SmsService.java | 12 +++ .../bst/sms/service/impl/SmsServiceImpl.java | 87 +++++++++++++++++++ .../java/com/ruoyi/task/order/OrderTask.java | 3 +- .../com/ruoyi/web/app/AppOrderController.java | 9 +- .../com/ruoyi/web/bst/OrderController.java | 3 +- 16 files changed, 195 insertions(+), 49 deletions(-) create mode 100644 ruoyi-service/src/main/java/com/ruoyi/bst/sms/constants/SmsTemplateCode.java create mode 100644 ruoyi-service/src/main/java/com/ruoyi/bst/sms/service/SmsService.java create mode 100644 ruoyi-service/src/main/java/com/ruoyi/bst/sms/service/impl/SmsServiceImpl.java diff --git a/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/sms/SmsAliService.java b/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/sms/SmsAliService.java index d959cee..db01700 100644 --- a/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/sms/SmsAliService.java +++ b/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/sms/SmsAliService.java @@ -10,6 +10,7 @@ import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; +import com.ruoyi.common.exception.ServiceException; @Service public class SmsAliService { @@ -34,28 +35,30 @@ public class SmsAliService { /** * 发送短信验证码 */ - public SendSmsResponse send(SmsSendDTO dto) - throws ClientException { - // 可自助调整超时时间 - System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); - System.setProperty("sun.net.client.defaultReadTimeout", "10000"); - // 初始化acsClient,暂不支持region化 - IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret); - DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain); - IAcsClient acsClient = new DefaultAcsClient(profile); - // 组装请求对象-具体描述见控制台-文档部分内容 - SendSmsRequest request = new SendSmsRequest(); - // 必填:待发送手机号 - request.setPhoneNumbers(dto.getMobile()); - // 必填:短信签名-可在短信控制台中找到 - request.setSignName(signName); - // 必填:短信模板-可在短信控制台中找到 - request.setTemplateCode(dto.getTemplateCode()); - // 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为 - request.setTemplateParam(dto.getParam().toJSONString()); - // hint 此处可能会抛出异常,注意catch - return acsClient.getAcsResponse(request); + public SendSmsResponse send(SmsSendDTO dto) { + try { + // 可自助调整超时时间 + System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); + System.setProperty("sun.net.client.defaultReadTimeout", "10000"); + // 初始化acsClient,暂不支持region化 + IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret); + DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain); + IAcsClient acsClient = new DefaultAcsClient(profile); + // 组装请求对象-具体描述见控制台-文档部分内容 + SendSmsRequest request = new SendSmsRequest(); + // 必填:待发送手机号 + request.setPhoneNumbers(dto.getMobile()); + // 必填:短信签名-可在短信控制台中找到 + request.setSignName(signName); + // 必填:短信模板-可在短信控制台中找到 + request.setTemplateCode(dto.getTemplateCode()); + // 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为 + request.setTemplateParam(dto.getParam().toJSONString()); + // hint 此处可能会抛出异常,注意catch + return acsClient.getAcsResponse(request); + } catch (ClientException e) { + throw new ServiceException("短信发送失败,错误信息:" + e.getMessage()); + } } - } diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/area/domain/AreaVO.java b/ruoyi-service/src/main/java/com/ruoyi/bst/area/domain/AreaVO.java index 083384b..d4fa266 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/area/domain/AreaVO.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/area/domain/AreaVO.java @@ -8,15 +8,18 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) public class AreaVO extends Area { + // 所属用户 @ApiModelProperty("用户名称") private String userName; + @ApiModelProperty("用户手机号") + private String userPhone; @ApiModelProperty("创建人名称") private String createName; @ApiModelProperty("停车区数量") private Integer parkingAreaCount; - + @ApiModelProperty("禁停区数量") private Integer noParkingAreaCount; diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/area/mapper/AreaMapper.xml b/ruoyi-service/src/main/java/com/ruoyi/bst/area/mapper/AreaMapper.xml index 8f2fa49..b64baca 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/area/mapper/AreaMapper.xml +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/area/mapper/AreaMapper.xml @@ -48,6 +48,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ba.outage_distance, su.nick_name as user_name, su.agent_id as agent_id, + su.user_name as user_phone, suc.nick_name as create_name from @@ -80,6 +81,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and ba.deleted = false and su.nick_name like concat('%', #{query.userName}, '%') and suc.nick_name like concat('%', #{query.createName}, '%') + and su.user_name like concat('%', #{query.userPhone}, '%') and ba.id in diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/balanceLog/domain/enums/BalanceLogBstType.java b/ruoyi-service/src/main/java/com/ruoyi/bst/balanceLog/domain/enums/BalanceLogBstType.java index 83a6960..3a94233 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/balanceLog/domain/enums/BalanceLogBstType.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/balanceLog/domain/enums/BalanceLogBstType.java @@ -10,7 +10,8 @@ import lombok.Getter; public enum BalanceLogBstType { ORDER("ORDER", "订单"), - WITHDRAW("WITHDRAW", "提现"); + WITHDRAW("WITHDRAW", "提现"), + SMS("SMS", "短信"); private final String code; private final String name; diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/OrderVO.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/OrderVO.java index 3bcd1a6..e4c888d 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/OrderVO.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/OrderVO.java @@ -39,10 +39,6 @@ public class OrderVO extends Order { // 运营区 @ApiModelProperty("运营区名称") private String areaName; - @ApiModelProperty("运营区联系人") - private String areaContact; - @ApiModelProperty("运营区联系电话") - private String areaPhone; // 用户 @ApiModelProperty("用户名称") diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/dto/OrderEndDTO.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/dto/OrderEndDTO.java index 3264cc2..3730e89 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/dto/OrderEndDTO.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/dto/OrderEndDTO.java @@ -14,9 +14,6 @@ public class OrderEndDTO { @NotNull(message = "订单ID不能为空") private Long orderId; - @ApiModelProperty("是否辅助还车(管理员还车)") - private Boolean isAdmin; - @ApiModelProperty("手机定位(经度)") private BigDecimal lon; @@ -28,4 +25,7 @@ public class OrderEndDTO { @ApiModelProperty("车辆图片") private String picture; + + @ApiModelProperty("还车类型") + private String returnType; } diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/enums/OrderReturnType.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/enums/OrderReturnType.java index 490a56d..ea0dbcf 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/enums/OrderReturnType.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/enums/OrderReturnType.java @@ -1,5 +1,8 @@ package com.ruoyi.bst.order.domain.enums; +import java.util.Arrays; +import java.util.List; + import lombok.AllArgsConstructor; import lombok.Getter; @@ -8,10 +11,20 @@ import lombok.Getter; public enum OrderReturnType { NORMAL("1", "正常还车"), - AUXILIARY("2", "辅助还车"); + AUXILIARY("2", "辅助还车"), + SYSTEM("3", "系统还车"); private String code; private String name; + // 是否是管理员还车 + public static boolean isAdmin(String returnType) { + return AUXILIARY.getCode().equals(returnType) || SYSTEM.getCode().equals(returnType); + } + + // 需要审核的还车类型 + public static List needVerify() { + return Arrays.asList(NORMAL.getCode(), SYSTEM.getCode()); + } } diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/mapper/OrderMapper.xml b/ruoyi-service/src/main/java/com/ruoyi/bst/order/mapper/OrderMapper.xml index 8230e43..47c7689 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/mapper/OrderMapper.xml +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/mapper/OrderMapper.xml @@ -52,8 +52,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" bo.area_user_id, bo.area_agent_id, ba.name as area_name, - ba.contact as area_contact, - ba.phone as area_phone, su.nick_name as user_name, su.user_name as user_phone, bp.no as pay_no, diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/OrderService.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/OrderService.java index ca1a2a4..2b4886d 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/OrderService.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/OrderService.java @@ -133,7 +133,7 @@ public interface OrderService * @param dto 参数 * @return 结果 */ - public OrderFeeVO preEndCheck(OrderEndDTO dto); + public OrderFeeVO calcFee(OrderEndDTO dto); /** * 退款 diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/impl/OrderServiceImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/impl/OrderServiceImpl.java index 767588a..cefd780 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/impl/OrderServiceImpl.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/impl/OrderServiceImpl.java @@ -65,6 +65,7 @@ import com.ruoyi.bst.pay.domain.enums.PayBstType; import com.ruoyi.bst.pay.domain.vo.DoPayVO; import com.ruoyi.bst.pay.service.PayConverter; import com.ruoyi.bst.pay.service.PayService; +import com.ruoyi.bst.sms.service.SmsService; import com.ruoyi.common.core.domain.vo.UserVO; import com.ruoyi.common.core.redis.RedisLock; import com.ruoyi.common.core.redis.enums.RedisLockKey; @@ -142,6 +143,9 @@ public class OrderServiceImpl implements OrderService @Autowired private UserService userService; + @Autowired + private SmsService smsService; + /** * 查询订单 * @@ -235,7 +239,7 @@ public class OrderServiceImpl implements OrderService ServiceUtil.assertion(dto == null || dto.getDeviceId() == null, "参数错误"); // 加锁,防止设备重复下单 - // TODO可以考虑加锁60秒,存储车辆、用户ID,60秒内只允许同一个用户下单。 + // TODO 可以考虑加锁60秒,存储车辆、用户ID,60秒内只允许同一个用户下单。 Long lockKey = dto.getDeviceId(); boolean lock = redisLock.lock(RedisLockKey.ORDER_CREATE, lockKey); ServiceUtil.assertion(!lock, "当前车辆使用的人太多了,请稍后再试"); @@ -398,10 +402,13 @@ public class OrderServiceImpl implements OrderService // 转为BO对象 OrderEndBO bo = orderConverter.toEndBO(dto); + // 校验参数 - boolean isAdmin = dto.getIsAdmin() != null && dto.getIsAdmin(); + String returnType = dto.getReturnType(); + boolean isAdmin = OrderReturnType.isAdmin(returnType); orderValidator.validate(bo, isAdmin); + // 提取数据 OrderVO order = bo.getOrder(); OrderInParkingVO inParkingVO = bo.getInParkingVO(); AreaVO area = bo.getArea(); @@ -413,13 +420,13 @@ public class OrderServiceImpl implements OrderService order.setDistance(LocationLogUtil.calcDistance(bo.getPositionList())); order.setEndReason(dto.getEndReason()); // 还车类型 - order.setReturnType(isAdmin ? OrderReturnType.AUXILIARY.getCode() : OrderReturnType.NORMAL.getCode()); + order.setReturnType(returnType); // 订单状态 - this.setOrderStatus(order, isAdmin); + this.setOrderStatus(order, returnType); // 订单费用 this.setOrderFee(order, area, inParkingVO); - Integer result = transactionTemplate.execute(status -> { + transactionTemplate.execute(status -> { // 更新订单数据 Order data = orderConverter.toPOByEnd(order); OrderQuery query = new OrderQuery(); @@ -437,6 +444,9 @@ public class OrderServiceImpl implements OrderService // 预分成 boolean bonus = bonusService.prepayByBst(BonusBstType.ORDER, order.getId()); ServiceUtil.assertion(!bonus, "ID为%s的订单预分成失败", order.getId()); + } else if (OrderStatus.WAIT_VERIFY.getCode().equals(order.getStatus())) { + // 发送还车审核通知 + smsService.sendOrderWaitVerifyMsg(order); } // 结束订单设备 @@ -444,7 +454,7 @@ public class OrderServiceImpl implements OrderService ServiceUtil.assertion(finish != 1, "结束ID为%s的订单设备失败", orderDevice.getId()); // 设备上锁(必须放最后,因为会操作设备) - DeviceIotVO lock = deviceIotService.lock(orderDevice.getDeviceId(), dto.getIsAdmin(), "订单结束上锁:" + orderDevice.getOrderNo(), false); + DeviceIotVO lock = deviceIotService.lock(orderDevice.getDeviceId(), isAdmin, "订单结束上锁:" + orderDevice.getOrderNo(), false); ServiceUtil.assertion(lock.getDb() != 1, "ID为%s的设备上锁失败", orderDevice.getDeviceId()); vo.setIot(lock.getIot()); @@ -455,9 +465,9 @@ public class OrderServiceImpl implements OrderService } // 设置订单状态 - private void setOrderStatus(OrderVO order, boolean isAdmin) { + private void setOrderStatus(OrderVO order, String returnType) { // 根据是否需要审核,设置订单状态 - if (order.getAreaReturnVerify() != null && order.getAreaReturnVerify() && !isAdmin) { + if (order.getAreaReturnVerify() != null && order.getAreaReturnVerify() && OrderReturnType.needVerify().contains(returnType)) { // 更新订单状态为待审核 order.setStatus(OrderStatus.WAIT_VERIFY.getCode()); } else { @@ -530,7 +540,7 @@ public class OrderServiceImpl implements OrderService } @Override - public OrderFeeVO preEndCheck(OrderEndDTO dto) { + public OrderFeeVO calcFee(OrderEndDTO dto) { // 查询订单 OrderVO order = this.selectOrderById(dto.getOrderId()); if (order == null) { diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/sms/constants/SmsTemplateCode.java b/ruoyi-service/src/main/java/com/ruoyi/bst/sms/constants/SmsTemplateCode.java new file mode 100644 index 0000000..138896a --- /dev/null +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/sms/constants/SmsTemplateCode.java @@ -0,0 +1,16 @@ +package com.ruoyi.bst.sms.constants; + +public class SmsTemplateCode { + + // 还车待审核模板:您名下有一笔租车订单已归还,订单金额:${name}元。 + public static final String ORDER_WAIT_VERIFY = "SMS_470225045"; + + // 订单支付成功通知模板:您有一笔订单:${orderNo},用户已付款,可在小程序管理端查看。 + public static final String ORDER_PAY_SUCCESS = "SMS_470585077"; + + // 押金提现申请通知模板:用户${name},发起押金提现申请,请尽快审核! + public static final String DEPOSIT_WITHDRAW_APPLY = "SMS_470400077"; + + // 验证码模板:您的验证码为:${code},请勿泄露于他人! + public static final String VERIFICATION_CODE = "SMS_470385109"; +} diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/sms/service/SmsService.java b/ruoyi-service/src/main/java/com/ruoyi/bst/sms/service/SmsService.java new file mode 100644 index 0000000..5ce49a3 --- /dev/null +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/sms/service/SmsService.java @@ -0,0 +1,12 @@ +package com.ruoyi.bst.sms.service; + +import com.ruoyi.bst.order.domain.OrderVO; + +public interface SmsService { + + /** + * 还车待审核通知 + */ + void sendOrderWaitVerifyMsg(OrderVO order); + +} diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/sms/service/impl/SmsServiceImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/sms/service/impl/SmsServiceImpl.java new file mode 100644 index 0000000..863fab7 --- /dev/null +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/sms/service/impl/SmsServiceImpl.java @@ -0,0 +1,87 @@ +package com.ruoyi.bst.sms.service.impl; + +import java.math.BigDecimal; +import java.util.concurrent.ScheduledExecutorService; + +import com.ruoyi.common.utils.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.support.TransactionTemplate; + +import com.alibaba.fastjson2.JSONObject; +import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; +import com.ruoyi.bst.area.domain.AreaVO; +import com.ruoyi.bst.area.service.AreaService; +import com.ruoyi.bst.balanceLog.domain.enums.BalanceLogBstType; +import com.ruoyi.bst.order.domain.OrderVO; +import com.ruoyi.bst.sms.constants.SmsTemplateCode; +import com.ruoyi.bst.sms.service.SmsService; +import com.ruoyi.common.sms.SmsAliService; +import com.ruoyi.common.sms.SmsSendDTO; +import com.ruoyi.common.utils.ServiceUtil; +import com.ruoyi.system.user.service.UserService; + +import lombok.extern.slf4j.Slf4j; + + + +@Service +@Slf4j +public class SmsServiceImpl implements SmsService { + + @Autowired + private SmsAliService smsAliService; + + @Autowired + private AreaService areaService; + + @Autowired + private ScheduledExecutorService scheduledExecutorService; + + @Autowired + private TransactionTemplate transactionTemplate; + + @Autowired + private UserService userService; + + @Override + public void sendOrderWaitVerifyMsg(OrderVO order) { + AreaVO area = areaService.selectAreaById(order.getAreaId()); + if (area == null || area.getMsgSwitch() == null || !area.getMsgSwitch()) { + return; + } + String mobile = area.getUserPhone(); + if (StringUtils.isBlank(mobile)) { + return; + } + + String reason = "订单" + order.getNo() + "还车待审核短信通知,接收手机:" + mobile; + + SmsSendDTO dto = new SmsSendDTO(); + dto.setMobile(mobile); + dto.setTemplateCode(SmsTemplateCode.ORDER_WAIT_VERIFY); + JSONObject param = new JSONObject(); + param.put("name", order.getTotalFee()); + dto.setParam(param); + this.sendAsync(area.getUserId(), reason, dto); + } + + // 异步发送短信 + private void sendAsync(Long userId, String reason, SmsSendDTO dto) { + scheduledExecutorService.execute(() -> { + transactionTemplate.execute(status -> { + // 扣费 + int rows = userService.subtractBalance(userId, BigDecimal.valueOf(0.1), BalanceLogBstType.SMS, userId, reason, true); + ServiceUtil.assertion(rows != 1, "短信扣费失败,用户%s余额不足", userId); + + // 发送短信 + SendSmsResponse res = smsAliService.send(dto); + ServiceUtil.assertion(res == null, "给用户%s发送短信失败,未知原因", userId); + ServiceUtil.assertion(!"OK".equals(res.getCode()), "给用户%s短信发送失败:%s", userId, res.getMessage()); + + return rows; + }); + }); + } + +} diff --git a/ruoyi-web/src/main/java/com/ruoyi/task/order/OrderTask.java b/ruoyi-web/src/main/java/com/ruoyi/task/order/OrderTask.java index d05db9f..899aeab 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/task/order/OrderTask.java +++ b/ruoyi-web/src/main/java/com/ruoyi/task/order/OrderTask.java @@ -11,6 +11,7 @@ import org.springframework.stereotype.Component; import com.ruoyi.bst.order.domain.OrderQuery; import com.ruoyi.bst.order.domain.OrderVO; import com.ruoyi.bst.order.domain.dto.OrderEndDTO; +import com.ruoyi.bst.order.domain.enums.OrderReturnType; import com.ruoyi.bst.order.domain.enums.OrderStatus; import com.ruoyi.bst.order.mapper.OrderMapper; import com.ruoyi.bst.order.service.OrderService; @@ -63,7 +64,7 @@ public class OrderTask implements ApplicationRunner { for (OrderVO order : orderList) { try { OrderEndDTO dto = new OrderEndDTO(); - dto.setIsAdmin(true); + dto.setReturnType(OrderReturnType.SYSTEM.getCode()); dto.setOrderId(order.getId()); dto.setEndReason("超时系统自动结束"); orderService.endOrder(dto); diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/app/AppOrderController.java b/ruoyi-web/src/main/java/com/ruoyi/web/app/AppOrderController.java index 0221cdb..422b154 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/app/AppOrderController.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/app/AppOrderController.java @@ -2,6 +2,7 @@ package com.ruoyi.web.app; import java.util.List; +import com.ruoyi.common.annotation.Anonymous; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; @@ -19,6 +20,7 @@ import com.ruoyi.bst.order.domain.dto.OrderCloseDeviceDTO; import com.ruoyi.bst.order.domain.dto.OrderCreateDTO; import com.ruoyi.bst.order.domain.dto.OrderEndDTO; import com.ruoyi.bst.order.domain.dto.OrderPayDTO; +import com.ruoyi.bst.order.domain.enums.OrderReturnType; import com.ruoyi.bst.order.domain.enums.OrderStatus; import com.ruoyi.bst.order.domain.vo.OrderEndVO; import com.ruoyi.bst.order.domain.vo.OrderFeeVO; @@ -75,6 +77,7 @@ public class AppOrderController extends BaseController { @ApiOperation("支付前计算订单价格") @PostMapping("/calculatePrice") + @Anonymous public AjaxResult calculatePrice(@RequestBody @Validated OrderCalcPrePriceDTO dto) { OrderPrePriceVO vo = orderConverter.toOrderPrePriceVO(dto); if (vo == null) { @@ -107,7 +110,7 @@ public class AppOrderController extends BaseController { public AjaxResult endOrder(@RequestBody @Validated OrderEndDTO dto) { OrderVO order = orderService.selectOrderById(dto.getOrderId()); ServiceUtil.assertion(!orderValidator.canEnd(order, getUserId()), "您无权结束ID为%s的订单", order.getId()); - dto.setIsAdmin(false); + dto.setReturnType(OrderReturnType.NORMAL.getCode()); dto.setEndReason("用户【" + getNickName() + "】手动还车"); OrderEndVO vo = orderService.endOrder(dto); if (vo.getDb() > 0) { @@ -119,8 +122,8 @@ public class AppOrderController extends BaseController { @ApiOperation("计算订单费用") @PostMapping("/calcFee") public AjaxResult calcFee(@RequestBody @Validated OrderEndDTO dto) { - dto.setIsAdmin(false); - OrderFeeVO fee = orderService.preEndCheck(dto); + dto.setReturnType(OrderReturnType.NORMAL.getCode()); + OrderFeeVO fee = orderService.calcFee(dto); ServiceUtil.assertion(fee == null, "价格计算失败"); return success(fee); } diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/bst/OrderController.java b/ruoyi-web/src/main/java/com/ruoyi/web/bst/OrderController.java index 3a871c2..9f2a14f 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/bst/OrderController.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/bst/OrderController.java @@ -23,6 +23,7 @@ import com.ruoyi.bst.order.domain.OrderVO; import com.ruoyi.bst.order.domain.dto.OrderEndDTO; import com.ruoyi.bst.order.domain.dto.OrderRefundDTO; import com.ruoyi.bst.order.domain.dto.OrderVerifyDTO; +import com.ruoyi.bst.order.domain.enums.OrderReturnType; import com.ruoyi.bst.order.domain.vo.OrderEndVO; import com.ruoyi.bst.order.service.OrderAssembler; import com.ruoyi.bst.order.service.OrderService; @@ -109,7 +110,7 @@ public class OrderController extends BaseController if (!orderValidator.canOperate(dto.getOrderId())) { return error("您无权结束ID为" + dto.getOrderId() + "的订单"); } - dto.setIsAdmin(true); + dto.setReturnType(OrderReturnType.AUXILIARY.getCode()); dto.setEndReason("管理员【" + getNickName() + "】手动还车"); OrderEndVO vo = orderService.endOrder(dto); if (vo.getDb() > 0) {