From 15b7f77fb5bfe20aa085847b4bc8d9dcacfe0883 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A2=A8=E5=A4=A7=E5=8F=94?= <494979559@qq.com> Date: Fri, 6 Sep 2024 16:16:42 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=93=E6=9D=9F=E8=AE=A2=E5=8D=95=E3=80=81?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E7=94=B5=E9=87=8F=E5=BD=92=E9=9B=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/iot/constants/ReceiveConstants.java | 2 +- .../com/ruoyi/ss/device/domain/Device.java | 5 + .../ss/device/service/DeviceService.java | 5 + .../service/impl/DeviceServiceImpl.java | 59 +++++++- .../ss/suit/domain/enums/SuitFeeType.java | 14 ++ .../domain/TransactionBillQuery.java | 3 + .../domain/bo/EndSmartUseBO.java | 27 ---- .../bo/{EndTimingUseBO.java => EndUseBO.java} | 14 +- .../domain/dto/EndTimingUseDTO.java | 26 ---- .../{EndSmartUseDTO.java => EndUseDTO.java} | 8 +- .../domain/enums/TransactionBillStatus.java | 7 + .../domain/vo/TransactionBillVO.java | 4 + .../mapper/TransactionBillMapper.xml | 23 +++ .../service/TransactionBillConverter.java | 4 +- .../service/TransactionBillService.java | 20 ++- .../service/TransactionBillValidator.java | 1 - .../impl/TransactionBillConverterImpl.java | 24 +--- .../impl/TransactionBillServiceImpl.java | 134 +++++++++++++++--- .../impl/TransactionBillValidatorImpl.java | 26 ++-- .../app/AppResetRecordController.java | 2 +- .../controller/app/AppStoreController.java | 12 +- .../app/AppTransactionBillController.java | 32 +++-- .../web/controller/ss/SmDeviceController.java | 2 +- .../ss/SmTransactionBillController.java | 14 ++ 24 files changed, 302 insertions(+), 166 deletions(-) delete mode 100644 smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/bo/EndSmartUseBO.java rename smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/bo/{EndTimingUseBO.java => EndUseBO.java} (63%) delete mode 100644 smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/dto/EndTimingUseDTO.java rename smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/dto/{EndSmartUseDTO.java => EndUseDTO.java} (56%) diff --git a/smart-switch-service/src/main/java/com/ruoyi/iot/constants/ReceiveConstants.java b/smart-switch-service/src/main/java/com/ruoyi/iot/constants/ReceiveConstants.java index 1acc0ebd..a5102513 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/iot/constants/ReceiveConstants.java +++ b/smart-switch-service/src/main/java/com/ruoyi/iot/constants/ReceiveConstants.java @@ -18,7 +18,7 @@ public class ReceiveConstants { public static final String DS_W = "W"; // 数据点ID:开关状态 public static final String DS_S = "S"; - // 数据点ID:剩余金额 + // 数据点ID:剩余电量 public static final String DS_M = "M"; // 数据点ID:断电方式 public static final String DS_SET = "SET"; diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/device/domain/Device.java b/smart-switch-service/src/main/java/com/ruoyi/ss/device/domain/Device.java index cbe50a21..ed2c4889 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/device/domain/Device.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/device/domain/Device.java @@ -76,6 +76,7 @@ public class Device extends BaseEntity @Excel(name = "总用电量") @ApiModelProperty("总用电量(KWH)") + @JsonView(JsonViewProfile.App.class) private BigDecimal totalElectriQuantity; /** 在线状态 */ @@ -93,18 +94,21 @@ public class Device extends BaseEntity /** 实时功率(千瓦) */ @Excel(name = "实时功率", readConverterExp = "千=瓦") @ApiModelProperty("实时功率") + @JsonView(JsonViewProfile.App.class) private BigDecimal realTimePower; /** 电流(A) */ @Excel(name = "电流", readConverterExp = "A=") @ApiModelProperty("电流(A)") @Min(value = 0, message = "电流不允许小于0", groups = {ValidGroup.Create.class, ValidGroup.Update.class, ValidGroup.FrontUpdate.class}) + @JsonView(JsonViewProfile.App.class) private BigDecimal electricity; /** 电压(V) */ @Excel(name = "电压", readConverterExp = "V=") @ApiModelProperty("电压(V)") @Min(value = 0, message = "电压不允许小于0", groups = {ValidGroup.Create.class, ValidGroup.Update.class, ValidGroup.FrontUpdate.class}) + @JsonView(JsonViewProfile.App.class) private BigDecimal voltage; /** 用户昵称 */ @@ -193,5 +197,6 @@ public class Device extends BaseEntity private Long lockUserId; @ApiModelProperty("剩余电量(度)") + @JsonView(JsonViewProfile.App.class) private BigDecimal surplusEle; } diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/DeviceService.java b/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/DeviceService.java index 6888c0f8..b5c2aae5 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/DeviceService.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/DeviceService.java @@ -301,4 +301,9 @@ public interface DeviceService * 归零电量 */ int resetEle(Long deviceId, boolean required); + + /** + * 电量归零,并关闭订单 + */ + int resetEleWithBill(Long deviceId); } diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/impl/DeviceServiceImpl.java b/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/impl/DeviceServiceImpl.java index 91e95331..eda80a07 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/impl/DeviceServiceImpl.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/impl/DeviceServiceImpl.java @@ -35,10 +35,12 @@ import com.ruoyi.ss.record.time.service.IRecordTimeService; import com.ruoyi.ss.record.time.service.RecordTimeConverter; import com.ruoyi.ss.store.domain.StoreVo; import com.ruoyi.ss.store.service.StoreService; +import com.ruoyi.ss.suit.domain.enums.SuitFeeType; import com.ruoyi.ss.timeBill.domain.TimeBillQuery; import com.ruoyi.ss.timeBill.domain.TimeBillVO; import com.ruoyi.ss.timeBill.service.TimeBillService; import com.ruoyi.ss.transactionBill.domain.TransactionBillQuery; +import com.ruoyi.ss.transactionBill.domain.enums.TransactionBillStatus; import com.ruoyi.ss.transactionBill.domain.vo.TransactionBillVO; import com.ruoyi.ss.transactionBill.service.TransactionBillService; import com.ruoyi.ss.user.domain.SmUserVo; @@ -437,8 +439,11 @@ public class DeviceServiceImpl implements DeviceService // 物联网设备归零 try { - CommandResponse res = iotService.setTime(device.getMac(), 1L, device.getModelProductId()); + CommandResponse res = iotService.setTime(device.getMac(), 0L, device.getModelProductId()); ServiceUtil.assertion( !res.isSuccess(), "设备归零失败,请检查设备是否在线或联系管理员"); + + boolean close = iotService.close(device.getMac(), device.getModelProductId()); + ServiceUtil.assertion( !close, "设备关闭失败,请检查设备是否在线或联系管理员"); } catch (Exception e) { if (required) { throw e; @@ -465,10 +470,6 @@ public class DeviceServiceImpl implements DeviceService if (device == null) { return 0; } - // 剩余电量小于等于0,不需要处理 - if (device.getSurplusEle() == null || device.getSurplusEle().compareTo(BigDecimal.ZERO) <= 0) { - return 1; - } Integer result = transactionTemplate.execute(status -> { // 更新剩余电量 @@ -502,10 +503,43 @@ public class DeviceServiceImpl implements DeviceService @Override public int resetEle(Long deviceId, boolean required) { + // 获取设备信息 DeviceVO device = selectSmDeviceByDeviceId(deviceId); return resetEle(device, required); } + @Override + public int resetEleWithBill(Long deviceId) { + if (deviceId == null) { + return 0; + } + // 拉取设备信息 + pullDeviceInfo(deviceId); + + DeviceVO device = selectSmDeviceByDeviceId(deviceId); + ServiceUtil.assertion(device == null, "设备不存在"); + + Integer result = transactionTemplate.execute(status -> { + // 关闭该设备未结束的所有订单 + TransactionBillQuery query = new TransactionBillQuery(); + query.setStatusList(TransactionBillStatus.canClose()); + query.setDeviceId(device.getDeviceId()); + query.setIsFinished(false); // 未结束的订单都会被关闭 + query.setSuitFeeTypes(SuitFeeType.rechargeCountList()); + List billList = transactionBillService.selectSmTransactionBillList(query); + int closeCount = transactionBillService.batchCloseBillByDevice(billList, false, device); + ServiceUtil.assertion(closeCount != billList.size(), "关闭订单失败"); + + // 发送命令 + int reset = this.resetEle(device, true); + ServiceUtil.assertion(reset != 1, "设备电量归零失败"); + + return reset; + }); + + return result == null ? 0 : result; + } + @Override public boolean addTime(Long deviceId, long seconds, boolean withIot) { @@ -799,15 +833,26 @@ public class DeviceServiceImpl implements DeviceService public boolean resetTimeWithBill(Long deviceId) { ServiceUtil.assertion(deviceId == null, "设备id不能为空"); - LocalDateTime now = LocalDateTime.now(); + // 拉取最新设备信息 + pullDeviceInfo(deviceId); + + // 获取设备信息 DeviceVO device = deviceMapper.selectSmDeviceByDeviceId(deviceId); ServiceUtil.assertion(device == null || device.getDeleted(), "设备不存在"); ServiceUtil.assertion(!UserUtil.hasFrontUser(device.getUserId()), "您不是该设备的商户,无法进行该操作"); transactionTemplate.execute(status -> { // 关闭该设备未结束的所有订单 - transactionBillService.batchEndBillByDevice(deviceId); + TransactionBillQuery query = new TransactionBillQuery(); + query.setStatusList(TransactionBillStatus.canClose()); + query.setDeviceId(device.getDeviceId()); + query.setIsFinished(false); // 未结束的订单都会被关闭 + query.setSuitFeeTypes(SuitFeeType.rechargeTimeList()); + List billList = transactionBillService.selectSmTransactionBillList(query); + int closeCount = transactionBillService.batchCloseBillByDevice(billList, false, device); + ServiceUtil.assertion(closeCount != billList.size(), "关闭订单失败"); + // 发送命令 int reset = this.resetTime(device, true); ServiceUtil.assertion(reset != 1, "归零失败"); diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/suit/domain/enums/SuitFeeType.java b/smart-switch-service/src/main/java/com/ruoyi/ss/suit/domain/enums/SuitFeeType.java index b9250e1b..203803c8 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/suit/domain/enums/SuitFeeType.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/suit/domain/enums/SuitFeeType.java @@ -54,4 +54,18 @@ public enum SuitFeeType { public static List needConfigTimeUnit() { return asList(TIME); } + + /** + * 充值时长的类型 + */ + public static List rechargeTimeList() { + return asList(TIME, TIMING_TIME); + } + + /** + * 充值电量的类型 + */ + public static List rechargeCountList() { + return asList(COUNT, TIMING_COUNT); + } } diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/TransactionBillQuery.java b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/TransactionBillQuery.java index 64c912fa..5b4334a4 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/TransactionBillQuery.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/TransactionBillQuery.java @@ -111,4 +111,7 @@ public class TransactionBillQuery extends TransactionBill { @ApiModelProperty("结束使用电量(结束)") private BigDecimal endSuitEndEle; + + @ApiModelProperty("是否已结束") + private Boolean isFinished; } diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/bo/EndSmartUseBO.java b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/bo/EndSmartUseBO.java deleted file mode 100644 index fa9e1fc1..00000000 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/bo/EndSmartUseBO.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.ruoyi.ss.transactionBill.domain.bo; - -import com.ruoyi.common.core.domain.model.LoginUser; -import com.ruoyi.ss.device.domain.vo.DeviceVO; -import com.ruoyi.ss.transactionBill.domain.dto.EndSmartUseDTO; -import com.ruoyi.ss.transactionBill.domain.vo.TransactionBillVO; -import com.ruoyi.ss.user.domain.SmUserVo; -import lombok.Data; - -/** - * @author wjh - * 2024/8/15 - */ -@Data -public class EndSmartUseBO { - // 原参数 - private EndSmartUseDTO dto; - - // 订单 - private TransactionBillVO order; - - // 设备 - private DeviceVO device; - - // 操作人 - private LoginUser loginUser; -} diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/bo/EndTimingUseBO.java b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/bo/EndUseBO.java similarity index 63% rename from smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/bo/EndTimingUseBO.java rename to smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/bo/EndUseBO.java index 54a71a9f..3de3e05a 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/bo/EndTimingUseBO.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/bo/EndUseBO.java @@ -1,25 +1,23 @@ package com.ruoyi.ss.transactionBill.domain.bo; import com.ruoyi.ss.device.domain.vo.DeviceVO; -import com.ruoyi.ss.transactionBill.domain.dto.EndTimingUseDTO; import com.ruoyi.ss.transactionBill.domain.vo.TransactionBillVO; import lombok.Data; +import java.math.BigDecimal; + /** - * 结束分时订单BO * @author wjh - * 2024/8/14 + * 2024/9/6 */ @Data -public class EndTimingUseBO { +public class EndUseBO { + // 总用电量(蓝牙) + private BigDecimal totalEle; // 订单 private TransactionBillVO order; - // 原参数 - private EndTimingUseDTO dto; - // 设备 private DeviceVO device; - } diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/dto/EndTimingUseDTO.java b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/dto/EndTimingUseDTO.java deleted file mode 100644 index 0283c900..00000000 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/dto/EndTimingUseDTO.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.ruoyi.ss.transactionBill.domain.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.Min; -import javax.validation.constraints.NotNull; -import java.math.BigDecimal; - -/** - * 结束使用分时订单 - * @author wjh - * 2024/8/14 - */ -@Data -public class EndTimingUseDTO { - - @ApiModelProperty("订单ID") - @NotNull(message = "订单不允许为空") - private Long billId; - - @ApiModelProperty("总用电量(仅蓝牙关闭计量订单时需要传入)") - @Min(value = 0, message = "总用电量不允许小于0") - private BigDecimal totalEle; - -} diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/dto/EndSmartUseDTO.java b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/dto/EndUseDTO.java similarity index 56% rename from smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/dto/EndSmartUseDTO.java rename to smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/dto/EndUseDTO.java index 4336ebc3..355ae320 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/dto/EndSmartUseDTO.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/dto/EndUseDTO.java @@ -3,23 +3,19 @@ package com.ruoyi.ss.transactionBill.domain.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import javax.validation.constraints.Min; -import javax.validation.constraints.NotNull; import java.math.BigDecimal; /** * @author wjh - * 2024/8/15 + * 2024/9/6 */ @Data -public class EndSmartUseDTO { +public class EndUseDTO { @ApiModelProperty("订单ID") - @NotNull(message = "订单不允许为空") private Long billId; @ApiModelProperty("总用电量") - @Min(value = 0, message = "总用电量不允许小于0") private BigDecimal totalEle; } diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/enums/TransactionBillStatus.java b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/enums/TransactionBillStatus.java index 9a6cc5b0..086736b0 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/enums/TransactionBillStatus.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/enums/TransactionBillStatus.java @@ -64,4 +64,11 @@ public enum TransactionBillStatus { public static List countOfLimit() { return asList(WITHDRAW_SUCCESS, WITHDRAW_APPROVING, WITHDRAW_FAIL, WITHDRAW_PASSED, WITHDRAW_PAYING); } + + /** + * 可以结束的状态 + */ + public static List canClose() { + return asList(SUCCESS, SUCCESS_DEPOSIT); + } } diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/vo/TransactionBillVO.java b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/vo/TransactionBillVO.java index 09bb0640..1178a1d8 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/vo/TransactionBillVO.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/vo/TransactionBillVO.java @@ -45,6 +45,10 @@ public class TransactionBillVO extends TransactionBill { @JsonView(JsonViewProfile.App.class) private Boolean isUsing; + @ApiModelProperty("是否已经结束使用") + @JsonView(JsonViewProfile.App.class) + private Boolean isFinished; + /** * 获取套餐时长(秒) */ diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/mapper/TransactionBillMapper.xml b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/mapper/TransactionBillMapper.xml index 9bc95296..570a781b 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/mapper/TransactionBillMapper.xml +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/mapper/TransactionBillMapper.xml @@ -67,6 +67,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select if(, true, false) as is_using, + if(, true, false) as is_finished, su.user_name as user_name, su1.user_name as mch_name, su1.phonenumber as mch_mobile, @@ -116,6 +117,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ) + + + ( + ( + stb.suit_end_time is not null and stb.suit_end_time <= now() + ) + or + ( + stb.suit_fee_type in ('2', '3') + and (stb.suit_end_ele is not null and stb.suit_end_ele <= sd.total_electri_quantity) + ) + ) + + and stb.user_id = #{query.userId} and stb.bill_no like concat('%', #{query.billNo}, '%') @@ -156,6 +171,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and ! + + + and + + + and ! + + and ( sd.device_no like concat('%', #{query.keyword}, '%') diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/TransactionBillConverter.java b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/TransactionBillConverter.java index 58c353e0..7a99e9a4 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/TransactionBillConverter.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/TransactionBillConverter.java @@ -27,7 +27,5 @@ public interface TransactionBillConverter { RechargePayDepositBO toRechargePayDepositBO(PayDepositDTO dto); - EndTimingUseBO toEndTimingUseBO(EndTimingUseDTO dto); - - EndSmartUseBO toEndSmartUseBO(EndSmartUseDTO dto); + EndUseBO toEndUseBO(EndUseDTO dto); } diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/TransactionBillService.java b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/TransactionBillService.java index 53e9895c..12e1aa81 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/TransactionBillService.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/TransactionBillService.java @@ -1,6 +1,7 @@ package com.ruoyi.ss.transactionBill.service; import com.ruoyi.ss.dashboard.BillCountVo; +import com.ruoyi.ss.device.domain.vo.DeviceVO; import com.ruoyi.ss.payBill.domain.vo.DoPayVO; import com.ruoyi.ss.transactionBill.domain.TransactionBill; import com.ruoyi.ss.transactionBill.domain.TransactionBillQuery; @@ -220,7 +221,7 @@ public interface TransactionBillService /** * 根据设备ID批量结束订单 */ - int batchEndBillByDevice(Long deviceId); + int batchCloseBillByDevice(List billList, boolean withDevice, DeviceVO device); /** * 获取用户提现手续费信息 @@ -257,16 +258,6 @@ public interface TransactionBillService */ DoPayVO payDeposit(RechargePayDepositBO bo); - /** - * 结束分时段订单 - */ - int endTimingUse(EndTimingUseBO endTimingBO); - - /** - * 提前结束智能订单 - */ - int endSmartUse(EndSmartUseBO bo); - /** * 查询未支付的分时段订单 */ @@ -283,4 +274,11 @@ public interface TransactionBillService * @return */ BigDecimal selectSumOfMoney(TransactionBillQuery query); + + + /** + * 结束使用订单 + */ + int endUse(EndUseBO bo, boolean withDevice); + } diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/TransactionBillValidator.java b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/TransactionBillValidator.java index dcc2ad81..ad699ecb 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/TransactionBillValidator.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/TransactionBillValidator.java @@ -1,7 +1,6 @@ package com.ruoyi.ss.transactionBill.service; import com.ruoyi.common.core.domain.ValidateResult; -import com.ruoyi.ss.transactionBill.domain.bo.EndTimingUseBO; import com.ruoyi.ss.transactionBill.domain.bo.RechargeBO; import com.ruoyi.ss.transactionBill.domain.bo.RechargePayDepositBO; import com.ruoyi.ss.transactionBill.domain.dto.RechargePayBO; diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillConverterImpl.java b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillConverterImpl.java index 5d8af6aa..a06ec61b 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillConverterImpl.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillConverterImpl.java @@ -166,32 +166,16 @@ public class TransactionBillConverterImpl implements TransactionBillConverter { } @Override - public EndTimingUseBO toEndTimingUseBO(EndTimingUseDTO dto) { + public EndUseBO toEndUseBO(EndUseDTO dto) { + if (dto == null) { return null; } TransactionBillVO order = transactionBillService.selectSmTransactionBillByBillId(dto.getBillId()); - EndTimingUseBO bo = new EndTimingUseBO(); + EndUseBO bo = new EndUseBO(); bo.setOrder(order); - bo.setDto(dto); - if (order != null) { - deviceService.pullDeviceInfo(order.getDeviceId()); - bo.setDevice(deviceService.selectSmDeviceByDeviceId(order.getDeviceId())); - } - return bo; - } - - @Override - public EndSmartUseBO toEndSmartUseBO(EndSmartUseDTO dto) { - if (dto == null) { - return null; - } - TransactionBillVO order = transactionBillService.selectSmTransactionBillByBillId(dto.getBillId()); - - EndSmartUseBO bo = new EndSmartUseBO(); - bo.setOrder(order); - bo.setDto(dto); + bo.setTotalEle(dto.getTotalEle()); if (order != null) { deviceService.pullDeviceInfo(order.getDeviceId()); bo.setDevice(deviceService.selectSmDeviceByDeviceId(order.getDeviceId())); diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillServiceImpl.java b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillServiceImpl.java index 8c45fd0d..4c4bfe6d 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillServiceImpl.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillServiceImpl.java @@ -44,6 +44,7 @@ import com.ruoyi.ss.transactionBill.domain.vo.UserRechargeServiceVO; import com.ruoyi.ss.transactionBill.domain.vo.UserWithdrawServiceVO; import com.ruoyi.ss.transactionBill.domain.enums.*; import com.ruoyi.ss.transactionBill.mapper.TransactionBillMapper; +import com.ruoyi.ss.transactionBill.service.TransactionBillConverter; import com.ruoyi.ss.transactionBill.service.TransactionBillService; import com.ruoyi.ss.transactionBill.service.TransactionBillValidator; import com.ruoyi.ss.transfer.domain.TransferVO; @@ -147,6 +148,9 @@ public class TransactionBillServiceImpl implements TransactionBillService, After @Autowired private ISysConfigService sysConfigService; + @Autowired + private TransactionBillConverter transactionBillConverter; + /** * 查询充值记录 * @@ -846,12 +850,10 @@ public class TransactionBillServiceImpl implements TransactionBillService, After } } - @Override - public int endTimingUse(EndTimingUseBO bo) { + public int endTimingUse(EndUseBO bo, boolean closeDevice) { if (bo == null) { return 0; } - EndTimingUseDTO dto = bo.getDto(); TransactionBillVO order = bo.getOrder(); DeviceVO device = bo.getDevice(); ServiceUtil.assertion(order == null, "订单不存在"); @@ -861,7 +863,7 @@ public class TransactionBillServiceImpl implements TransactionBillService, After LocalDateTime endTime = LocalDateTime.now(); // 结束使用的时间 // 结束使用的电量:若蓝牙传过来的值为空或者小于当前电量,则使用当前电量,否则使用蓝牙传输的电量 - BigDecimal totalEle = this.calcTotalEle(device, dto.getTotalEle()); + BigDecimal totalEle = this.calcTotalEle(device, bo.getTotalEle()); // 计算金额 BigDecimal money = this.calcTimingAmount(order, endTime, totalEle); @@ -883,7 +885,7 @@ public class TransactionBillServiceImpl implements TransactionBillService, After }); // 尝试关闭设备 - if (result != null && result == 1) { + if (result != null && result == 1 && closeDevice) { try { if (SuitFeeType.TIMING_COUNT.getType().equals(order.getSuitFeeType())) { deviceService.resetEle(device, true); @@ -924,32 +926,29 @@ public class TransactionBillServiceImpl implements TransactionBillService, After return totalAmount; } - @Override - public int endSmartUse(EndSmartUseBO bo) { + public int endSmartUse(EndUseBO bo, boolean resetDevice) { if (bo == null) { return 0; } - EndSmartUseDTO dto = bo.getDto(); TransactionBillVO order = bo.getOrder(); DeviceVO device = bo.getDevice(); ServiceUtil.assertion(order == null, "订单不存在"); ServiceUtil.assertion(!TransactionBillStatus.SUCCESS.getStatus().equals(order.getStatus()), "当前订单状态不允许结束"); ServiceUtil.assertion(!SuitFeeMode.SMART.getMode().equals(order.getSuitFeeMode()), "当前订单非智能收费订单,无法提前结束"); + ServiceUtil.assertion(order.getIsFinished() != null && order.getIsFinished(), "当前订单已结束,无法操作"); ServiceUtil.assertion(device == null, "设备不存在"); LocalDateTime endTime = LocalDateTime.now(); // 结束使用的时间 // 结束使用的电量:若蓝牙传过来的值为空或者小于当前电量,则使用当前电量,否则使用蓝牙传输的电量(谁大用谁) - BigDecimal totalEle = this.calcTotalEle(device, dto.getTotalEle()); + BigDecimal totalEle = this.calcTotalEle(device, bo.getTotalEle()); // 若结束时间 > 订单结束时间 或者 结束电量 > 订单结束电量,则表示已经结束使用 - ServiceUtil.assertion(order.getSuitEndTime() != null && endTime.isAfter(order.getSuitEndTime()), "当前订单已结束,无法操作"); - ServiceUtil.assertion(order.getSuitEndEle() != null && totalEle.compareTo(order.getSuitEndEle()) > 0, "当前订单已结束,无法操作"); + ServiceUtil.assertion(order.getIsFinished() != null && order.getIsFinished(), "当前订单已结束,无法操作"); // 计算需要退款的金额 BigDecimal refundAmount = this.calcRefundAmount(order, endTime, totalEle); - Integer result = transactionTemplate.execute(status -> { // 修改结束使用的时间 TransactionBill data = new TransactionBill(); @@ -957,6 +956,7 @@ public class TransactionBillServiceImpl implements TransactionBillService, After data.setSuitEndEle(totalEle); TransactionBillQuery query = new TransactionBillQuery(); query.setBillId(order.getBillId()); + if (SuitFeeType.TIME.getType().equals(order.getSuitFeeType())) { query.setStartSuitEndTime(endTime); // 计时的话,需要结束时间在这之后的订单 } else if (SuitFeeType.COUNT.getType().equals(order.getSuitFeeType())) { @@ -979,8 +979,8 @@ public class TransactionBillServiceImpl implements TransactionBillService, After return update; }); - // 若金额 > 0.01 ,清零设备 - if (BigDecimal.valueOf(0.01).compareTo(refundAmount) < 0) { + // 清零设备 + if (resetDevice) { try { // 尝试设备清零时长、电量 int clear = deviceService.clearTimeAndEle(device, false); @@ -1029,6 +1029,56 @@ public class TransactionBillServiceImpl implements TransactionBillService, After return transactionBillMapper.selectSumOfMoney(query); } + public int endUseSingle(EndUseBO bo, boolean resetDevice) { + if (bo == null) { + return 0; + } + TransactionBillVO order = bo.getOrder(); + DeviceVO device = bo.getDevice(); + ServiceUtil.assertion(order == null, "订单不存在"); + ServiceUtil.assertion(order.getIsFinished() != null && order.getIsFinished(), "当前订单已结束,无法操作"); + ServiceUtil.assertion(!TransactionBillStatus.SUCCESS.getStatus().equals(order.getStatus()), "当前订单状态不允许结束"); + ServiceUtil.assertion(device == null, "设备不存在"); + + LocalDateTime endTime = LocalDateTime.now(); // 结束使用的时间 + + // 结束使用的电量:若蓝牙传过来的值为空或者小于当前电量,则使用当前电量,否则使用蓝牙传输的电量(谁大用谁) + BigDecimal totalEle = this.calcTotalEle(device, bo.getTotalEle()); + + Integer result = transactionTemplate.execute(status -> { + // 修改结束使用的时间 + TransactionBill data = new TransactionBill(); + data.setSuitEndTime(endTime); + data.setSuitEndEle(totalEle); + TransactionBillQuery query = new TransactionBillQuery(); + query.setBillId(order.getBillId()); + if (SuitFeeType.TIME.getType().equals(order.getSuitFeeType())) { + query.setStartSuitEndTime(endTime); // 计时的话,需要结束时间在这之后的订单 + } else if (SuitFeeType.COUNT.getType().equals(order.getSuitFeeType())) { + query.setStartSuitEndEle(totalEle); // 计量的话,需要结束电量比这个大的订单 + } + int update = this.updateByQuery(data, query); + ServiceUtil.assertion(update != 1, "修改订单信息失败"); + + return update; + }); + + // 尝试清零设备 + if (result != null && result == 1 && resetDevice) { + try { + if (SuitFeeType.COUNT.getType().equals(order.getSuitFeeType())) { + deviceService.resetEle(device, true); + } else if(SuitFeeType.TIME.getType().equals(order.getSuitFeeType())){ + deviceService.resetTime(device, true); + } + } catch (Exception e) { + log.error("尝试清零设备失败"); + } + } + + return result == null ? 0 : result; + } + private BigDecimal calcRefundAmount(TransactionBillVO order, LocalDateTime endTime, BigDecimal totalEle) { // 智能收费时长计费 if (SuitFeeType.TIME.getType().equals(order.getSuitFeeType())) { @@ -1453,18 +1503,58 @@ public class TransactionBillServiceImpl implements TransactionBillService, After } @Override - public int batchEndBillByDevice(Long deviceId) { - if (deviceId == null) { + public int batchCloseBillByDevice(List billList, boolean withDevice, DeviceVO device) { + if (CollectionUtils.isEmptyElement(billList)) { return 0; } - LocalDateTime now = LocalDateTime.now(); - TransactionBillQuery query = new TransactionBillQuery(); - query.setDeviceId(deviceId); - query.setStartSuitEndTime(now); // 套餐结束时间在这之后的,都会被关闭 - List billList = this.selectSmTransactionBillList(query); + EndUseBO bo = new EndUseBO(); + bo.setDevice(device); + if (CollectionUtils.isNotEmptyElement(billList)) { - return transactionBillMapper.batchUpdateSuitEndTime(billList.stream().map(TransactionBill::getBillId).collect(Collectors.toList()), now); + Integer result = transactionTemplate.execute(status -> { + int sum = 0; + + // 关闭订单,智能订单需要退款 + for (TransactionBillVO bill : billList) { + bo.setOrder(bill); + int end = this.endUse(bo, withDevice); + ServiceUtil.assertion(end != 1, "关闭订单失败"); + sum += end; + } + + return sum; + }); + + return result == null ? 0 : result; } + + return 0; + } + + // 结束使用订单 + @Override + public int endUse(EndUseBO bo, boolean withDevice) { + if (bo == null) { + return 0; + } + TransactionBillVO bill = bo.getOrder(); + + // 智能订单 + if (SuitFeeMode.SMART.getMode().equals(bill.getSuitFeeMode())) { + // 单次智能 + if (SuitFeeType.singleList().contains(bill.getSuitFeeType())) { + return this.endSmartUse(bo, withDevice); + } + // 分时段智能 + else if (SuitFeeType.timingList().contains(bill.getSuitFeeType())){ + return this.endTimingUse(bo, withDevice); + } + } + // 单次订单 + else if (SuitFeeMode.SINGLE.getMode().equals(bill.getSuitFeeMode())) { + return this.endUseSingle(bo, withDevice); + } + return 0; } diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillValidatorImpl.java b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillValidatorImpl.java index 76b4c70a..2c8dcaf6 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillValidatorImpl.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillValidatorImpl.java @@ -70,12 +70,12 @@ public class TransactionBillValidatorImpl extends BaseValidator implements Trans // 检查用户是否有未支付的智能分时段订单 if (this.hasUnpaidSmartTimingOrder(user.getUserId())) { - return error("用户有未支付的订单,请先支付后继续"); + return error("您有未支付的订单,请先支付后继续"); } // 检查用户是否有正在使用中的智能订单 if (this.hasUsingSmartOrder(user.getUserId())) { - return error("用户有正在使用中的智能订单,请结束后继续"); + return error("您有正在使用中的智能订单,请结束后继续"); } // 检查设备是否符合条件 @@ -92,7 +92,7 @@ public class TransactionBillValidatorImpl extends BaseValidator implements Trans query.setDeviceId(device.getDeviceId()); List usingBill = transactionBillService.selectUsingBill(query); if (CollectionUtils.isNotEmptyElement(usingBill)) { - return error("设备有正在使用中的订单,暂时无法下单"); + return error("该设备有正在使用中的订单,暂时无法下单"); } // 店铺 @@ -148,16 +148,16 @@ public class TransactionBillValidatorImpl extends BaseValidator implements Trans return error("套餐收费方式已发生变化,请重新下单"); } - if (SuitFeeMode.SMART.getMode().equals(suit.getFeeMode())) { - if (device.getExpireTime() != null && device.getExpireTime().isAfter(LocalDateTime.now())) { - return error("当前设备还有剩余时长,无法选择智能收费方式下单"); - } - if (DeviceOnlineStatus.ONLINE.getStatus().equals(device.getOnlineStatus()) - && device.getSurplusEle() != null - && device.getSurplusEle().compareTo(BigDecimal.ZERO) > 0) { - return error("当前设备还有剩余电量,无法选择智能收费方式下单"); - } - } +// if (SuitFeeMode.SMART.getMode().equals(suit.getFeeMode())) { +// if (device.getExpireTime() != null && device.getExpireTime().isAfter(LocalDateTime.now())) { +// return error("当前设备还有剩余时长,无法选择智能收费方式下单"); +// } +// if (DeviceOnlineStatus.ONLINE.getStatus().equals(device.getOnlineStatus()) +// && device.getSurplusEle() != null +// && device.getSurplusEle().compareTo(BigDecimal.ZERO) > 0) { +// return error("当前设备还有剩余电量,无法选择智能收费方式下单"); +// } +// } return success(); } diff --git a/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppResetRecordController.java b/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppResetRecordController.java index 68c67e8c..7b3eded1 100644 --- a/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppResetRecordController.java +++ b/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppResetRecordController.java @@ -23,7 +23,7 @@ public class AppResetRecordController extends BaseController { @Autowired private ISmResetRecordService smResetRecordService; - @MchRequired +// @MchRequired @ApiOperation("查询本人归零记录") @GetMapping("/list") public TableDataInfo list(SmResetRecordQuery dto) { diff --git a/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppStoreController.java b/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppStoreController.java index ff1052db..68f14f62 100644 --- a/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppStoreController.java +++ b/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppStoreController.java @@ -12,10 +12,6 @@ import com.ruoyi.ss.store.domain.*; import com.ruoyi.ss.store.service.StoreService; import com.ruoyi.ss.store.service.StoreAssembler; import com.ruoyi.ss.store.service.StoreValidator; -import com.ruoyi.ss.storeApply.domain.enums.StoreApplyType; -import com.ruoyi.ss.storeApply.service.StoreApplyConverter; -import com.ruoyi.ss.storeApply.service.StoreApplyService; -import com.ruoyi.web.core.annotation.MchRequired; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; @@ -80,7 +76,7 @@ public class AppStoreController extends BaseController { * @param storeId * @return */ - @MchRequired +// @MchRequired @ApiOperation("删除店铺信息") @DeleteMapping("/{storeId}") public AjaxResult delete(@PathVariable Long storeId) { @@ -100,7 +96,7 @@ public class AppStoreController extends BaseController { } - @MchRequired +// @MchRequired @ApiOperation("调整店铺排序") @PutMapping("/changeSort") public AjaxResult changeSort(@RequestBody List list) { @@ -141,7 +137,7 @@ public class AppStoreController extends BaseController { return success(store); } - @MchRequired +// @MchRequired @ApiOperation("商户获取店铺信息") @GetMapping("/mch/{storeId}") public AjaxResult getMchDetail(@PathVariable @ApiParam("店铺ID") Long storeId) { @@ -153,7 +149,7 @@ public class AppStoreController extends BaseController { return success(store); } - @MchRequired +// @MchRequired @ApiOperation("切换默认店铺") @PutMapping("/{storeId}/setDefault") public AjaxResult setDefaultStore(@PathVariable Long storeId) { diff --git a/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppTransactionBillController.java b/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppTransactionBillController.java index 963eec70..7ee7708f 100644 --- a/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppTransactionBillController.java +++ b/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppTransactionBillController.java @@ -12,8 +12,7 @@ import com.ruoyi.common.utils.ServiceUtil; import com.ruoyi.ss.dashboard.BillCountVo; import com.ruoyi.ss.device.service.DeviceValidator; import com.ruoyi.ss.transactionBill.domain.TransactionBillQuery; -import com.ruoyi.ss.transactionBill.domain.bo.EndSmartUseBO; -import com.ruoyi.ss.transactionBill.domain.bo.EndTimingUseBO; +import com.ruoyi.ss.transactionBill.domain.bo.EndUseBO; import com.ruoyi.ss.transactionBill.domain.dto.*; import com.ruoyi.ss.transactionBill.domain.vo.TransactionBillVO; import com.ruoyi.ss.transactionBill.domain.enums.TransactionBillGroupBy; @@ -23,7 +22,6 @@ import com.ruoyi.ss.transactionBill.service.TransactionAssembler; import com.ruoyi.ss.transactionBill.service.TransactionBillConverter; import com.ruoyi.ss.transactionBill.service.TransactionBillService; import com.ruoyi.ss.transactionBill.service.TransactionBillValidator; -import com.ruoyi.ss.transactionBill.service.impl.TransactionBillServiceImpl; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; @@ -266,24 +264,35 @@ public class AppTransactionBillController extends BaseController return success(transactionBillService.payDeposit(transactionBillConverter.toRechargePayDepositBO(dto))); } - @ApiOperation("结束使用分时段订单") - @PutMapping("/endTimingUse") - public AjaxResult endTimingUse(@RequestBody @Validated EndTimingUseDTO dto) { - EndTimingUseBO bo = transactionBillConverter.toEndTimingUseBO(dto); + @ApiOperation("提前结束使用订单") + @PutMapping("/endUse") + public AjaxResult endUse(@RequestBody @Validated EndUseDTO dto) { + EndUseBO bo = transactionBillConverter.toEndUseBO(dto); if (!transactionBillValidator.isUser(bo.getOrder(), getUserId()) && !transactionBillValidator.isMch(bo.getOrder(), getUserId())) { return error("您不是该订单的用户或商户,无法结束订单"); } - return toAjax(transactionBillService.endTimingUse(bo)); + return toAjax(transactionBillService.endUse(bo, true )); } @ApiOperation("提前结束使用智能订单") @PutMapping("/endSmartUse") - public AjaxResult endSmartUse(@RequestBody @Validated EndSmartUseDTO dto) { - EndSmartUseBO bo = transactionBillConverter.toEndSmartUseBO(dto); + public AjaxResult endSmartUse(@RequestBody @Validated EndUseDTO dto) { + EndUseBO bo = transactionBillConverter.toEndUseBO(dto); if (!transactionBillValidator.isUser(bo.getOrder(), getUserId()) && !transactionBillValidator.isMch(bo.getOrder(), getUserId())) { return error("您不是该订单的用户或商户,无法结束订单"); } - return toAjax(transactionBillService.endSmartUse(bo)); + return toAjax(transactionBillService.endUse(bo, true )); + } + + + @ApiOperation("提前结束使用分时段订单") + @PutMapping("/endTimingUse") + public AjaxResult endTimingUse(@RequestBody @Validated EndUseDTO dto) { + EndUseBO bo = transactionBillConverter.toEndUseBO(dto); + if (!transactionBillValidator.isUser(bo.getOrder(), getUserId()) && !transactionBillValidator.isMch(bo.getOrder(), getUserId())) { + return error("您不是该订单的用户或商户,无法结束订单"); + } + return toAjax(transactionBillService.endUse(bo, true )); } @ApiOperation("获取订单预估金额") @@ -307,4 +316,5 @@ public class AppTransactionBillController extends BaseController query.setUserId(getUserId()); return success(transactionBillService.selectUnpaidTimingBill(query)); } + } diff --git a/smart-switch-web/src/main/java/com/ruoyi/web/controller/ss/SmDeviceController.java b/smart-switch-web/src/main/java/com/ruoyi/web/controller/ss/SmDeviceController.java index ed7c8881..158f1c7d 100644 --- a/smart-switch-web/src/main/java/com/ruoyi/web/controller/ss/SmDeviceController.java +++ b/smart-switch-web/src/main/java/com/ruoyi/web/controller/ss/SmDeviceController.java @@ -162,7 +162,7 @@ public class SmDeviceController extends BaseController @Log(title = "设备清空电量", businessType = BusinessType.OTHER) @PutMapping("/{deviceId}/resetEle") public AjaxResult resetEle(@PathVariable @ApiParam("设备id") Long deviceId) { - return toAjax(deviceService.resetEle(deviceId, true)); + return toAjax(deviceService.resetEleWithBill(deviceId)); } @ApiOperation("设备开关") diff --git a/smart-switch-web/src/main/java/com/ruoyi/web/controller/ss/SmTransactionBillController.java b/smart-switch-web/src/main/java/com/ruoyi/web/controller/ss/SmTransactionBillController.java index d55f93ab..dd0e4d98 100644 --- a/smart-switch-web/src/main/java/com/ruoyi/web/controller/ss/SmTransactionBillController.java +++ b/smart-switch-web/src/main/java/com/ruoyi/web/controller/ss/SmTransactionBillController.java @@ -5,9 +5,11 @@ import javax.servlet.http.HttpServletResponse; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.ss.transactionBill.domain.TransactionBillQuery; +import com.ruoyi.ss.transactionBill.domain.dto.EndUseDTO; import com.ruoyi.ss.transactionBill.domain.vo.TransactionBillVO; import com.ruoyi.ss.transactionBill.domain.dto.BillRefundDTO; import com.ruoyi.ss.transactionBill.domain.dto.WithdrawApprovalDTO; +import com.ruoyi.ss.transactionBill.service.TransactionBillConverter; import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; @@ -43,6 +45,9 @@ public class SmTransactionBillController extends BaseController @Autowired private TransactionBillService transactionBillService; + @Autowired + private TransactionBillConverter transactionBillConverter; + /** * 查询充值记录列表 */ @@ -164,6 +169,7 @@ public class SmTransactionBillController extends BaseController // 订单退款 @PutMapping("/refund") + @Log(title = "订单退款", businessType = BusinessType.OTHER) @PreAuthorize("@ss.hasPermi('system:bill:refund')") public AjaxResult refund(@RequestBody @Validated BillRefundDTO dto) { TransactionBillVO bill = transactionBillService.selectSmTransactionBillByBillId(dto.getBillId()); @@ -177,4 +183,12 @@ public class SmTransactionBillController extends BaseController dto.setRefundReason(String.format("充值订单%s退款", bill.getBillNo())); return toAjax(transactionBillService.refund(dto)); } + + // 结束订单 + @PutMapping("/close") + @Log(title = "结束订单", businessType = BusinessType.OTHER) + @PreAuthorize("@ss.hasPermi('system:bill:close')") + public AjaxResult close(@RequestBody @Validated EndUseDTO dto) { + return success(transactionBillService.endUse(transactionBillConverter.toEndUseBO(dto), true)); + } }