From 8ebe4897615da1038921c3f1f530ae18ec4e49e0 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, 14 Jun 2024 17:12:03 +0800 Subject: [PATCH] =?UTF-8?q?debug=20+=20=E7=BB=91=E5=AE=9A=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/iot/domain/CurrentDeviceData.java | 5 + .../com/ruoyi/iot/domain/IotDeviceInfo.java | 2 + .../iot/domain/response/CommandResponse.java | 8 + .../com/ruoyi/iot/service/IotService.java | 2 +- .../com/ruoyi/iot/service/IotServiceImpl.java | 13 +- .../com/ruoyi/ss/device/domain/SmDevice.java | 5 + .../ruoyi/ss/device/domain/vo/SmDeviceVo.java | 20 ++- .../ss/device/mapper/SmDeviceMapper.java | 2 +- .../ruoyi/ss/device/mapper/SmDeviceMapper.xml | 20 ++- .../ss/device/service/ISmDeviceService.java | 16 +- .../service/impl/SmDeviceServiceImpl.java | 144 ++++++++++++++---- .../ss/model/service/ISmModelService.java | 12 ++ .../service/impl/SmModelServiceImpl.java | 28 ++++ .../ss/record/time/domain/RecordTime.java | 55 +++++++ .../record/time/domain/RecordTimeQuery.java | 14 ++ .../ss/record/time/domain/RecordTimeVO.java | 12 ++ .../time/domain/enums/OperatorType.java | 31 ++++ .../record/time/mapper/RecordTimeMapper.java | 63 ++++++++ .../record/time/mapper/RecordTimeMapper.xml | 79 ++++++++++ .../time/service/IRecordTimeService.java | 63 ++++++++ .../time/service/RecordTimeConverter.java | 17 +++ .../service/impl/RecordTimeConverterImpl.java | 38 +++++ .../service/impl/RecordTimeServiceImpl.java | 96 ++++++++++++ .../domain/TransactionBill.java | 2 +- .../service/TransactionBillService.java | 4 +- .../impl/TransactionBillServiceImpl.java | 29 ++-- .../controller/app/AppDeviceController.java | 13 +- .../web/controller/app/AppSuitController.java | 5 - .../controller/ss/RecordTimeController.java | 107 +++++++++++++ .../web/controller/ss/SmDeviceController.java | 13 +- .../ss/SmTransactionBillController.java | 2 +- .../web/core/aspectj/MchRequiredAspect.java | 9 +- .../src/main/resources/application-dev.yml | 2 +- .../src/main/resources/application-test.yml | 2 +- .../src/main/resources/application.yml | 4 +- 35 files changed, 840 insertions(+), 97 deletions(-) create mode 100644 smart-switch-service/src/main/java/com/ruoyi/ss/record/time/domain/RecordTime.java create mode 100644 smart-switch-service/src/main/java/com/ruoyi/ss/record/time/domain/RecordTimeQuery.java create mode 100644 smart-switch-service/src/main/java/com/ruoyi/ss/record/time/domain/RecordTimeVO.java create mode 100644 smart-switch-service/src/main/java/com/ruoyi/ss/record/time/domain/enums/OperatorType.java create mode 100644 smart-switch-service/src/main/java/com/ruoyi/ss/record/time/mapper/RecordTimeMapper.java create mode 100644 smart-switch-service/src/main/java/com/ruoyi/ss/record/time/mapper/RecordTimeMapper.xml create mode 100644 smart-switch-service/src/main/java/com/ruoyi/ss/record/time/service/IRecordTimeService.java create mode 100644 smart-switch-service/src/main/java/com/ruoyi/ss/record/time/service/RecordTimeConverter.java create mode 100644 smart-switch-service/src/main/java/com/ruoyi/ss/record/time/service/impl/RecordTimeConverterImpl.java create mode 100644 smart-switch-service/src/main/java/com/ruoyi/ss/record/time/service/impl/RecordTimeServiceImpl.java create mode 100644 smart-switch-web/src/main/java/com/ruoyi/web/controller/ss/RecordTimeController.java diff --git a/smart-switch-service/src/main/java/com/ruoyi/iot/domain/CurrentDeviceData.java b/smart-switch-service/src/main/java/com/ruoyi/iot/domain/CurrentDeviceData.java index c259ca5a..322548eb 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/iot/domain/CurrentDeviceData.java +++ b/smart-switch-service/src/main/java/com/ruoyi/iot/domain/CurrentDeviceData.java @@ -36,6 +36,8 @@ public class CurrentDeviceData { for (CurrentDatastream stream : datastreams) { String value = stream.getValue().toString(); + device.setAt(stream.getAt()); + switch (stream.getId()) { case "V": device.setV(NumberUtils.nonNullDecimal(value)); @@ -62,6 +64,9 @@ public class CurrentDeviceData { case "TIME": device.setTime(NumberUtils.nonNullDecimal(value)); break; + case "FW": + device.setModel(value); + break; default: break; } diff --git a/smart-switch-service/src/main/java/com/ruoyi/iot/domain/IotDeviceInfo.java b/smart-switch-service/src/main/java/com/ruoyi/iot/domain/IotDeviceInfo.java index ca3636b2..857afe6b 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/iot/domain/IotDeviceInfo.java +++ b/smart-switch-service/src/main/java/com/ruoyi/iot/domain/IotDeviceInfo.java @@ -31,6 +31,7 @@ public class IotDeviceInfo { private BigDecimal m; // 剩余电量(度) private String set; // 欠费断电方式 private BigDecimal time; // 剩余时间(秒) + private String model; public static IotDeviceInfo newDefaultInstance() { return IotDeviceInfo.builder() @@ -42,6 +43,7 @@ public class IotDeviceInfo { .m(BigDecimal.ZERO) .set(DeviceOutageWay.IMMEDIATE.getValue()) .time(BigDecimal.ZERO) + .model(null) .build(); } diff --git a/smart-switch-service/src/main/java/com/ruoyi/iot/domain/response/CommandResponse.java b/smart-switch-service/src/main/java/com/ruoyi/iot/domain/response/CommandResponse.java index cc203448..c8b6fb7d 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/iot/domain/response/CommandResponse.java +++ b/smart-switch-service/src/main/java/com/ruoyi/iot/domain/response/CommandResponse.java @@ -1,7 +1,10 @@ package com.ruoyi.iot.domain.response; +import com.ruoyi.common.constant.HttpStatus; import lombok.Data; +import java.util.Objects; + /** * 命令下发响应 * @author wjh @@ -12,4 +15,9 @@ public class CommandResponse extends BaseResponse { private Object data; private String cmdUuid; private String cmdResp; + + public boolean isSuccess() { + return Objects.equals(HttpStatus.IOT_SUCCESS, this.getCode()); + } + } diff --git a/smart-switch-service/src/main/java/com/ruoyi/iot/service/IotService.java b/smart-switch-service/src/main/java/com/ruoyi/iot/service/IotService.java index 6150f43d..945fade8 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/iot/service/IotService.java +++ b/smart-switch-service/src/main/java/com/ruoyi/iot/service/IotService.java @@ -76,7 +76,7 @@ public interface IotService { * @param deviceName 设备名称 * @param seconds 时长(秒) */ - boolean setTime(String deviceName, BigDecimal seconds); + CommandResponse setTime(String deviceName, BigDecimal seconds); /** * 更新设备信息 diff --git a/smart-switch-service/src/main/java/com/ruoyi/iot/service/IotServiceImpl.java b/smart-switch-service/src/main/java/com/ruoyi/iot/service/IotServiceImpl.java index 79a294bd..0578b25f 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/iot/service/IotServiceImpl.java +++ b/smart-switch-service/src/main/java/com/ruoyi/iot/service/IotServiceImpl.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.common.constant.HttpStatus; import com.ruoyi.common.constant.IotConstants; +import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.ServiceUtil; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.http.HttpUtils; @@ -182,17 +183,11 @@ public class IotServiceImpl implements IotService { */ @Override @Transactional - public boolean setTime(String deviceName, BigDecimal seconds) { + public CommandResponse setTime(String deviceName, BigDecimal seconds) { if (seconds == null || BigDecimal.ZERO.compareTo(seconds) > 0) { - log.error("设置剩余时长参数错误:读数不允许为空或者小于0"); - return false; + throw new ServiceException("设置剩余时长参数错误:读数不允许为空或者小于0"); } - CommandResponse response = sendCommand(deviceName, IotConstants.COMMAND_RECHARGE + seconds + IotConstants.COMMAND_SEPARATOR); - if (!Objects.equals(HttpStatus.IOT_SUCCESS, response.getCode())) { - log.error("设置剩余时长发生异常:" + response.getMsg()); - return false; - } - return true; + return sendCommand(deviceName, IotConstants.COMMAND_RECHARGE + seconds + IotConstants.COMMAND_SEPARATOR); } /** diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/device/domain/SmDevice.java b/smart-switch-service/src/main/java/com/ruoyi/ss/device/domain/SmDevice.java index b8f974ff..0e78ee2e 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/device/domain/SmDevice.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/device/domain/SmDevice.java @@ -128,6 +128,7 @@ public class SmDevice extends BaseEntity @ApiModelProperty("上次拉取设备信息的时间") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date lastPullTime; @ApiModelProperty("总电量初始读数") @@ -141,6 +142,7 @@ public class SmDevice extends BaseEntity private LocalDateTime expireTime; @ApiModelProperty("用户自定义图片") + @JsonView(JsonViewProfile.App.class) private String customPicture; @ApiModelProperty("服务费费率") @@ -149,4 +151,7 @@ public class SmDevice extends BaseEntity @ApiModelProperty("剩余时长(秒)") private BigDecimal remainTime; + + @ApiModelProperty("所属用户ID") + private Long userId; } diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/device/domain/vo/SmDeviceVo.java b/smart-switch-service/src/main/java/com/ruoyi/ss/device/domain/vo/SmDeviceVo.java index d361076b..e7a3bd86 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/device/domain/vo/SmDeviceVo.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/device/domain/vo/SmDeviceVo.java @@ -24,10 +24,6 @@ public class SmDeviceVo extends SmDevice { @ApiModelProperty("是否默认") private Boolean isDefault; // 是否默认 - @ApiModelProperty("所属用户ID") - @NotNull(message = "用户不允许为空", groups = {ValidGroup.Create.class}) - private Long userId; - @ApiModelProperty("租户id列表") private List tenantIds; // 租户id列表 @@ -37,9 +33,14 @@ public class SmDeviceVo extends SmDevice { @ApiModelProperty("型号") private String model; - @ApiModelProperty("商户名称") + @ApiModelProperty("所属用户名称") + @JsonView(DeviceView.SuitList.class) private String userName; + @ApiModelProperty("用户电话") + @JsonView(DeviceView.SuitList.class) + private String userMobile; + @ApiModelProperty("图片") @JsonView(JsonViewProfile.App.class) private String picture; @@ -66,4 +67,13 @@ public class SmDeviceVo extends SmDevice { @ApiModelProperty("订单总金额") private BigDecimal orderAmount; + + @ApiModelProperty("店铺联系人名称") + @JsonView(DeviceView.SuitList.class) + private String storeContactName; + + @ApiModelProperty("店铺联系人电话") + @JsonView(DeviceView.SuitList.class) + private String storeContactMobile; + } diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/SmDeviceMapper.java b/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/SmDeviceMapper.java index 90848c7c..8041eb7a 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/SmDeviceMapper.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/SmDeviceMapper.java @@ -95,7 +95,7 @@ public interface SmDeviceMapper * @param deviceId 设备id * @param storeId 店铺id */ - int bindStore(@Param("deviceId") Long deviceId, @Param("storeId") Long storeId); + int bindStore(@Param("deviceId") Long deviceId, @Param("storeId") Long storeId, @Param("userId") Long userId); /** * 解绑商户 diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/SmDeviceMapper.xml b/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/SmDeviceMapper.xml index 61201c35..1dd90666 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/SmDeviceMapper.xml +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/SmDeviceMapper.xml @@ -90,16 +90,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" sd.custom_picture, sd.service_rate, sd.remain_time, + sd.user_id, sm.model_name as model, sm.picture as picture, sm.tags as model_tags, - ss.user_id as user_id, ss.name as store_name, + ss.contact_name as store_contact_name, + ss.contact_mobile as store_contact_mobile, + su.phonenumber as user_mobile, su.user_name as user_name from sm_device sd left join sm_model sm on sm.model_id = sd.model_id left join sm_store ss on ss.store_id = sd.store_id - left join sm_user su on su.user_id = ss.user_id + left join sm_user su on su.user_id = sd.user_id + + + and device_id = #{deviceId} + and amount = #{amount} + and reason = #{reason} + and operator_id = #{operatorId} + and operator_name like concat('%', #{operatorName}, '%') + and operator_type = #{operatorType} + and operator_time = #{operatorTime} + + + + + + + insert into ss_record_time + + id, + device_id, + amount, + reason, + operator_id, + operator_name, + operator_type, + operator_time, + + + #{id}, + #{deviceId}, + #{amount}, + #{reason}, + #{operatorId}, + #{operatorName}, + #{operatorType}, + #{operatorTime}, + + + + + update ss_record_time + + device_id = #{deviceId}, + amount = #{amount}, + reason = #{reason}, + operator_id = #{operatorId}, + operator_name = #{operatorName}, + operator_type = #{operatorType}, + operator_time = #{operatorTime}, + + where id = #{id} + + + + delete from ss_record_time where id = #{id} + + + + delete from ss_record_time where id in + + #{id} + + + diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/record/time/service/IRecordTimeService.java b/smart-switch-service/src/main/java/com/ruoyi/ss/record/time/service/IRecordTimeService.java new file mode 100644 index 00000000..24e5c089 --- /dev/null +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/record/time/service/IRecordTimeService.java @@ -0,0 +1,63 @@ +package com.ruoyi.ss.record.time.service; + +import java.util.List; +import com.ruoyi.ss.record.time.domain.RecordTime; +import com.ruoyi.ss.record.time.domain.RecordTimeQuery; +import com.ruoyi.ss.record.time.domain.RecordTimeVO; + +/** + * 设备时长变化记录Service接口 + * + * @author ruoyi + * @date 2024-06-06 + */ +public interface IRecordTimeService +{ + /** + * 查询设备时长变化记录 + * + * @param id 设备时长变化记录主键 + * @return 设备时长变化记录 + */ + public RecordTimeVO selectRecordTimeById(Long id); + + /** + * 查询设备时长变化记录列表 + * + * @param recordTime 设备时长变化记录 + * @return 设备时长变化记录集合 + */ + public List selectRecordTimeList(RecordTimeQuery recordTime); + + /** + * 新增设备时长变化记录 + * + * @param recordTime 设备时长变化记录 + * @return 结果 + */ + public int insertRecordTime(RecordTime recordTime); + + /** + * 修改设备时长变化记录 + * + * @param recordTime 设备时长变化记录 + * @return 结果 + */ + public int updateRecordTime(RecordTime recordTime); + + /** + * 批量删除设备时长变化记录 + * + * @param ids 需要删除的设备时长变化记录主键集合 + * @return 结果 + */ + public int deleteRecordTimeByIds(Long[] ids); + + /** + * 删除设备时长变化记录信息 + * + * @param id 设备时长变化记录主键 + * @return 结果 + */ + public int deleteRecordTimeById(Long id); +} diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/record/time/service/RecordTimeConverter.java b/smart-switch-service/src/main/java/com/ruoyi/ss/record/time/service/RecordTimeConverter.java new file mode 100644 index 00000000..b42bfa9b --- /dev/null +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/record/time/service/RecordTimeConverter.java @@ -0,0 +1,17 @@ +package com.ruoyi.ss.record.time.service; + +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.ss.device.domain.SmDevice; +import com.ruoyi.ss.record.time.domain.RecordTime; + +import java.math.BigDecimal; + +/** + * @author wjh + * 2024/6/6 + */ +public interface RecordTimeConverter { + + RecordTime toRecordTime(SmDevice device, BigDecimal time, String reason, LoginUser loginUser); + +} diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/record/time/service/impl/RecordTimeConverterImpl.java b/smart-switch-service/src/main/java/com/ruoyi/ss/record/time/service/impl/RecordTimeConverterImpl.java new file mode 100644 index 00000000..a7d1ed40 --- /dev/null +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/record/time/service/impl/RecordTimeConverterImpl.java @@ -0,0 +1,38 @@ +package com.ruoyi.ss.record.time.service.impl; + +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.enums.LoginType; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.ss.device.domain.SmDevice; +import com.ruoyi.ss.record.time.domain.RecordTime; +import com.ruoyi.ss.record.time.domain.enums.OperatorType; +import com.ruoyi.ss.record.time.service.RecordTimeConverter; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author wjh + * 2024/6/6 + */ +@Service +public class RecordTimeConverterImpl implements RecordTimeConverter { + @Override + public RecordTime toRecordTime(SmDevice device, BigDecimal time, String reason, LoginUser loginUser) { + RecordTime record = new RecordTime(); + record.setDeviceId(device == null ? null : device.getDeviceId()); + record.setAmount(time); + record.setReason(reason); + record.setOperatorId(loginUser.getUserId()); + record.setOperatorName(loginUser.getUsername()); + record.setOperatorType(toOperatorType(loginUser.getLoginType())); + record.setOperatorTime(LocalDateTime.now()); + + return record; + } + + private String toOperatorType(LoginType loginType) { + return OperatorType.parse(loginType).getType(); + } +} diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/record/time/service/impl/RecordTimeServiceImpl.java b/smart-switch-service/src/main/java/com/ruoyi/ss/record/time/service/impl/RecordTimeServiceImpl.java new file mode 100644 index 00000000..5ed753e4 --- /dev/null +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/record/time/service/impl/RecordTimeServiceImpl.java @@ -0,0 +1,96 @@ +package com.ruoyi.ss.record.time.service.impl; + +import java.util.List; + +import com.ruoyi.ss.record.time.domain.RecordTimeQuery; +import com.ruoyi.ss.record.time.domain.RecordTimeVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.ss.record.time.mapper.RecordTimeMapper; +import com.ruoyi.ss.record.time.domain.RecordTime; +import com.ruoyi.ss.record.time.service.IRecordTimeService; + +/** + * 设备时长变化记录Service业务层处理 + * + * @author ruoyi + * @date 2024-06-06 + */ +@Service +public class RecordTimeServiceImpl implements IRecordTimeService +{ + @Autowired + private RecordTimeMapper recordTimeMapper; + + /** + * 查询设备时长变化记录 + * + * @param id 设备时长变化记录主键 + * @return 设备时长变化记录 + */ + @Override + public RecordTimeVO selectRecordTimeById(Long id) + { + return recordTimeMapper.selectRecordTimeById(id); + } + + /** + * 查询设备时长变化记录列表 + * + * @param recordTime 设备时长变化记录 + * @return 设备时长变化记录 + */ + @Override + public List selectRecordTimeList(RecordTimeQuery recordTime) + { + return recordTimeMapper.selectRecordTimeList(recordTime); + } + + /** + * 新增设备时长变化记录 + * + * @param recordTime 设备时长变化记录 + * @return 结果 + */ + @Override + public int insertRecordTime(RecordTime recordTime) + { + return recordTimeMapper.insertRecordTime(recordTime); + } + + /** + * 修改设备时长变化记录 + * + * @param recordTime 设备时长变化记录 + * @return 结果 + */ + @Override + public int updateRecordTime(RecordTime recordTime) + { + return recordTimeMapper.updateRecordTime(recordTime); + } + + /** + * 批量删除设备时长变化记录 + * + * @param ids 需要删除的设备时长变化记录主键 + * @return 结果 + */ + @Override + public int deleteRecordTimeByIds(Long[] ids) + { + return recordTimeMapper.deleteRecordTimeByIds(ids); + } + + /** + * 删除设备时长变化记录信息 + * + * @param id 设备时长变化记录主键 + * @return 结果 + */ + @Override + public int deleteRecordTimeById(Long id) + { + return recordTimeMapper.deleteRecordTimeById(id); + } +} diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/TransactionBill.java b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/TransactionBill.java index f93c7d04..ed105b8e 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/TransactionBill.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/domain/TransactionBill.java @@ -43,7 +43,7 @@ public class TransactionBill extends BaseEntity /** 类型 */ @ApiModelProperty("类型:1充值,2提现") - @JsonView(JsonViewProfile.AppMch.class) + @JsonView(JsonViewProfile.App.class) private String type; /** 设备 */ 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 4d59fa5f..4bd33243 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 @@ -181,10 +181,10 @@ public interface TransactionBillService /** * 手动设备充值 + * * @param billId - * @param validate 是否需要校验 */ - boolean rechargeDevice(Long billId, boolean validate); + boolean rechargeDevice(Long billId); /** * 查询设备充值失败列表 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 196266dc..ce1eead6 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 @@ -533,27 +533,26 @@ public class TransactionBillServiceImpl implements TransactionBillService { } /** - * 手动设备充值 + * 设备充值 * * @param billId */ @Override @Transactional - public boolean rechargeDevice(Long billId, boolean validate) { + public boolean rechargeDevice(Long billId) { ServiceUtil.assertion(billId == null, "参数错误,billId不允许为空"); TransactionBill bill = transactionBillMapper.selectSmTransactionBillByBillId(billId); - if (validate) { - ServiceUtil.assertion(bill == null || !TransactionBillType.RECHARGE.getType().equals(bill.getType()), "不存在的充值订单"); - ServiceUtil.assertion(!TransactionBillStatus.SUCCESS.getStatus().equals(bill.getStatus()), "订单未支付"); - ServiceUtil.assertion(TransactionBillDeviceRechargeStatus.SUCCESS.getStatus().equals(bill.getDeviceRechargeStatus()), "设备已充值成功,不允许再次充值"); - } + ServiceUtil.assertion(bill == null || !TransactionBillType.RECHARGE.getType().equals(bill.getType()), "不存在的充值订单"); + ServiceUtil.assertion(!TransactionBillStatus.SUCCESS.getStatus().equals(bill.getStatus()), "订单未支付"); + ServiceUtil.assertion(TransactionBillDeviceRechargeStatus.SUCCESS.getStatus().equals(bill.getDeviceRechargeStatus()), "设备已充值成功,不允许再次充值"); + ServiceUtil.assertion(TransactionBillDeviceRechargeStatus.BLUETOOTH.getStatus().equals(bill.getDeviceRechargeStatus()), "设备已选择蓝牙充值,请使用蓝牙进行充值"); // 电表时长增加,四舍五入,保留1位小数 boolean success = false; try { - success = deviceService.addTime(bill.getDeviceId(), bill.getSuitTime()); + success = deviceService.addTime(bill.getDeviceId(), bill.getSuitTime(), true); } catch (Exception e) { this.handleDeviceRechargeFail(billId); } @@ -614,13 +613,13 @@ public class TransactionBillServiceImpl implements TransactionBillService { // 商户余额增加 userService.addBalance(bill.getMchId(), bill.getArrivalAmount()); - // 设备充值 - rechargeDevice(bill.getBillId(), false); - // 记录下充值后的余额 SmUserVo user = userService.selectSmUserByUserId(bill.getMchId()); updateAfterBalance(bill.getBillId(), user.getBalance()); + // 设备充值 + rechargeDevice(bill.getBillId()); + } /** @@ -806,7 +805,13 @@ public class TransactionBillServiceImpl implements TransactionBillService { ServiceUtil.assertion(!TransactionBillType.RECHARGE.getType().equals(bill.getType()), "该订单不是充值订单", 10002); ServiceUtil.assertion(TransactionBillDeviceRechargeStatus.SUCCESS.getStatus().equals(bill.getDeviceRechargeStatus()), "设备已充值成功,请勿重复充值", 10003); ServiceUtil.assertion(!TransactionBillStatus.SUCCESS.getStatus().equals(bill.getStatus()), "订单尚未充值成功", 10004); - return transactionBillMapper.bluetoothRechargeSuccess(billNo) == 1; + boolean result = transactionBillMapper.bluetoothRechargeSuccess(billNo) == 1; + ServiceUtil.assertion(!result, "蓝牙充值回调失败"); + + boolean addTime = deviceService.addTime(bill.getDeviceId(), bill.getSuitTime(), false); + ServiceUtil.assertion(!addTime, "修改剩余时间失败"); + + return result; }); return execute != null && execute; diff --git a/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppDeviceController.java b/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppDeviceController.java index 5c1a4890..a7d6fa6f 100644 --- a/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppDeviceController.java +++ b/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppDeviceController.java @@ -94,7 +94,6 @@ public class AppDeviceController extends BaseController { return success(device); } - @MchRequired @ApiOperation("设备通断电") @PutMapping("/{deviceId}/changePower") public AjaxResult close(@PathVariable @ApiParam("设备id") Long deviceId, String status) { @@ -102,7 +101,6 @@ public class AppDeviceController extends BaseController { return success(smDeviceService.changePowerStatus(deviceId, powerStatus )); } - @MchRequired @ApiOperation("绑定设备") @PutMapping("/bind") public AjaxResult bind(@RequestBody SmDevice device) { @@ -110,13 +108,12 @@ public class AppDeviceController extends BaseController { return error("设备编号和mac不能同时为空"); } if (StringUtils.hasText(device.getDeviceNo())) { - return AjaxResult.success("操作成功", smDeviceService.bindBySn(device.getStoreId(), device.getDeviceNo())); + return AjaxResult.success("操作成功", smDeviceService.bindBySn(device.getStoreId(), getUserId(), device.getDeviceNo())); } else { - return AjaxResult.success("操作成功", smDeviceService.bindByMac(device.getStoreId(), device.getMac())); + return AjaxResult.success("操作成功", smDeviceService.bindByMac(device.getStoreId(), getUserId(), device.getMac())); } } - @MchRequired @ApiOperation("商户解除设备绑定") @DeleteMapping("/mch/unbind/{deviceId}") public AjaxResult mchUnbind(@PathVariable @ApiParam("设备id") Long deviceId) { @@ -124,14 +121,12 @@ public class AppDeviceController extends BaseController { return success(smDeviceService.unbindStore(deviceId)); } - @MchRequired @ApiOperation("设备电量归零") @PutMapping("{deviceId}/reset") public AjaxResult reset(@PathVariable @ApiParam("设备id") Long deviceId) { return success(smDeviceService.reset(deviceId)); } - @MchRequired @ApiOperation("获取设备用电量分析") @GetMapping("/electric/count") public AjaxResult count(@Validated({ValidGroup.Query.class}) SmMeterReadingRecordQuery dto) @@ -139,7 +134,6 @@ public class AppDeviceController extends BaseController { return success(smMeterReadingRecordService.selectCount(dto)); } - @MchRequired @ApiOperation("设备充值时长") @PutMapping("/addTime/{deviceId}") public AjaxResult addTime(@PathVariable @ApiParam("设备id") Long deviceId, @ApiParam("电量(度)") BigDecimal amount) @@ -147,11 +141,10 @@ public class AppDeviceController extends BaseController { ServiceUtil.assertion(!deviceValidator.isBelong(deviceId, getUserId()), "这不是您的设备"); SmDeviceVo device = smDeviceService.selectSmDeviceByDeviceId(deviceId); ServiceUtil.assertion(device == null || !getUserId().equals(device.getUserId()), "设备不存在或您无权充值"); - smDeviceService.addTime(deviceId, amount); + smDeviceService.addTimeByUser(deviceId, amount, true, "商户手动充值"); return success(true); } - @MchRequired @ApiOperation("刷新设备信息") @GetMapping("/{deviceId}/refreshIot") public AjaxResult syncIot(@PathVariable @ApiParam("设备id") Long deviceId) { diff --git a/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppSuitController.java b/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppSuitController.java index 564bc5b2..27ccc950 100644 --- a/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppSuitController.java +++ b/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppSuitController.java @@ -40,7 +40,6 @@ public class AppSuitController extends BaseController { private DeviceValidator deviceValidator; @ApiOperation("查询设备套餐列表") - @MchRequired @JsonView(JsonViewProfile.AppMch.class) @GetMapping("/listByDeviceId/{deviceId}") public AjaxResult list(@PathVariable Long deviceId) @@ -52,7 +51,6 @@ public class AppSuitController extends BaseController { @ApiOperation("获取套餐详细信息") @JsonView(JsonViewProfile.AppMch.class) - @MchRequired @GetMapping("/{suitId}") public AjaxResult getInfo(@PathVariable("suitId") Long suitId) { return success(suitService.selectSuitBySuitId(suitId)); @@ -60,7 +58,6 @@ public class AppSuitController extends BaseController { @ApiOperation("新增套餐") @PostMapping - @MchRequired public AjaxResult add(@RequestBody @Validated({ValidGroup.FrontCreate.class}) SuitBO suit) { suit = suit.filterCreateByApp(); ServiceUtil.assertion(suitValidator.preCreateByApp(suit)); @@ -68,7 +65,6 @@ public class AppSuitController extends BaseController { } @ApiOperation("修改套餐") - @MchRequired @PutMapping public AjaxResult edit(@RequestBody @Validated({ValidGroup.FrontUpdate.class}) SuitBO suit) { @@ -77,7 +73,6 @@ public class AppSuitController extends BaseController { return success(suitService.updateSuit(suit)); } - @MchRequired @ApiOperation("删除套餐") @DeleteMapping("/{suitIds}") public AjaxResult remove(@PathVariable @ApiParam("套餐id列表") Long[] suitIds) diff --git a/smart-switch-web/src/main/java/com/ruoyi/web/controller/ss/RecordTimeController.java b/smart-switch-web/src/main/java/com/ruoyi/web/controller/ss/RecordTimeController.java new file mode 100644 index 00000000..aed68283 --- /dev/null +++ b/smart-switch-web/src/main/java/com/ruoyi/web/controller/ss/RecordTimeController.java @@ -0,0 +1,107 @@ +package com.ruoyi.web.controller.ss; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; + +import com.ruoyi.ss.record.time.domain.RecordTimeQuery; +import com.ruoyi.ss.record.time.domain.RecordTimeVO; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.ss.record.time.domain.RecordTime; +import com.ruoyi.ss.record.time.service.IRecordTimeService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 设备时长变化记录Controller + * + * @author ruoyi + * @date 2024-06-06 + */ +@RestController +@RequestMapping("/ss/time") +public class RecordTimeController extends BaseController +{ + @Autowired + private IRecordTimeService recordTimeService; + + /** + * 查询设备时长变化记录列表 + */ + @PreAuthorize("@ss.hasPermi('ss:time:list')") + @GetMapping("/list") + public TableDataInfo list(RecordTimeQuery recordTime) + { + startPage(); + List list = recordTimeService.selectRecordTimeList(recordTime); + return getDataTable(list); + } + + /** + * 导出设备时长变化记录列表 + */ + @PreAuthorize("@ss.hasPermi('ss:time:export')") + @Log(title = "设备时长变化记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, RecordTimeQuery recordTime) + { + List list = recordTimeService.selectRecordTimeList(recordTime); + ExcelUtil util = new ExcelUtil(RecordTimeVO.class); + util.exportExcel(response, list, "设备时长变化记录数据"); + } + + /** + * 获取设备时长变化记录详细信息 + */ + @PreAuthorize("@ss.hasPermi('ss:time:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(recordTimeService.selectRecordTimeById(id)); + } + + /** + * 新增设备时长变化记录 + */ + @PreAuthorize("@ss.hasPermi('ss:time:add')") + @Log(title = "设备时长变化记录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody RecordTime recordTime) + { + return toAjax(recordTimeService.insertRecordTime(recordTime)); + } + + /** + * 修改设备时长变化记录 + */ + @PreAuthorize("@ss.hasPermi('ss:time:edit')") + @Log(title = "设备时长变化记录", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody RecordTime recordTime) + { + return toAjax(recordTimeService.updateRecordTime(recordTime)); + } + + /** + * 删除设备时长变化记录 + */ + @PreAuthorize("@ss.hasPermi('ss:time:remove')") + @Log(title = "设备时长变化记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(recordTimeService.deleteRecordTimeByIds(ids)); + } +} 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 fee3fed4..62ebcc61 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 @@ -1,5 +1,6 @@ package com.ruoyi.web.controller.ss; +import java.math.BigDecimal; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -29,7 +30,6 @@ import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.enums.BusinessType; -import com.ruoyi.ss.device.domain.SmDevice; import com.ruoyi.ss.device.service.ISmDeviceService; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.core.page.TableDataInfo; @@ -163,4 +163,15 @@ public class SmDeviceController extends BaseController return success(smDeviceService.bindSn(deviceId, sn)); } + @ApiOperation("设备充值时长") + @PutMapping("/addTime/{deviceId}") + public AjaxResult addTime(@PathVariable @ApiParam("设备id") Long deviceId, @ApiParam("电量(度)") BigDecimal amount) { + return toAjax(smDeviceService.addTimeByUser(deviceId, amount, true, "管理员手动充值")); + } + + @ApiOperation("设备时长归零") + @PutMapping("/{deviceId}/reset") + public AjaxResult reset(@PathVariable @ApiParam("设备id") Long deviceId) { + return success(smDeviceService.reset(deviceId)); + } } 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 74a529ee..2e82a620 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 @@ -158,7 +158,7 @@ public class SmTransactionBillController extends BaseController @Log(title = "手动设备充值", businessType = BusinessType.UPDATE) public AjaxResult rechargeDevice(@PathVariable Long billId) { - smTransactionBillService.rechargeDevice(billId, true); + smTransactionBillService.rechargeDevice(billId); return success(); } diff --git a/smart-switch-web/src/main/java/com/ruoyi/web/core/aspectj/MchRequiredAspect.java b/smart-switch-web/src/main/java/com/ruoyi/web/core/aspectj/MchRequiredAspect.java index baeb8245..20d752d4 100644 --- a/smart-switch-web/src/main/java/com/ruoyi/web/core/aspectj/MchRequiredAspect.java +++ b/smart-switch-web/src/main/java/com/ruoyi/web/core/aspectj/MchRequiredAspect.java @@ -7,6 +7,7 @@ import com.ruoyi.common.enums.UserType; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.ServiceUtil; +import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.ss.user.domain.SmUserVo; import com.ruoyi.ss.user.service.ISmUserService; import com.ruoyi.web.core.annotation.MchRequired; @@ -35,15 +36,12 @@ public class MchRequiredAspect { @Autowired private ISmUserService smUserService; - @Value("${debug}") - private Boolean debug; + @Autowired + private TokenService tokenService; // 判断当前用户是否有权限访问 @Before("@annotation(mchRequired)") public void doBefore(JoinPoint point, MchRequired mchRequired) { - if (debug) { - return; - } LoginUser loginUser = SecurityUtils.getLoginUser(); SmUser user = loginUser.getSmUser(); ServiceUtil.assertion(user == null || user.getIsMch() == null, "获取用户信息异常"); @@ -52,6 +50,7 @@ public class MchRequiredAspect { if (!user.getIsMch()) { SmUserVo dbUser = smUserService.selectSmUserByUserId(user.getUserId()); if (dbUser.getIsMch()) { + tokenService.delLoginUser(loginUser.getToken()); throw new ServiceException("用户信息已变更,请重新登录", HttpStatus.UNAUTHORIZED); } else { throw new ServiceException("仅商家可进行该操作,若您已成为商家,请重新登录后重试"); diff --git a/smart-switch-web/src/main/resources/application-dev.yml b/smart-switch-web/src/main/resources/application-dev.yml index 0c76289a..7664458b 100644 --- a/smart-switch-web/src/main/resources/application-dev.yml +++ b/smart-switch-web/src/main/resources/application-dev.yml @@ -20,7 +20,7 @@ wx: # apiV3密钥 apiV3Key: 49819e0f0abdb2df3246f7b27f264d75 # 通知回调地址 - notifyUrl: http://124.221.246.124:2288/dev-api/app/pay/notify/wx # 内网穿透 + notifyUrl: http://124.221.246.124:2290/dev-api/app/pay/notify/wx # 内网穿透 # 密钥所在位置 privateKeyPath: D:/project/证书/wxpay/apiclient_key.pem # 证书序列号 diff --git a/smart-switch-web/src/main/resources/application-test.yml b/smart-switch-web/src/main/resources/application-test.yml index 98911bb0..74eb34ac 100644 --- a/smart-switch-web/src/main/resources/application-test.yml +++ b/smart-switch-web/src/main/resources/application-test.yml @@ -20,7 +20,7 @@ wx: # apiV3密钥 apiV3Key: 49819e0f0abdb2df3246f7b27f264d75 # 通知回调地址 - notifyUrl: https://kaiguan.chuantewulian.cn/prod-api/app/pay/notify/wx # 测试环境 + notifyUrl: https://kg.chuantewulian.cn/prod-api/app/pay/notify/wx # 测试环境 # 密钥所在位置 privateKeyPath: /www/wwwroot/smart-switch/wxpay/apiclient_key.pem # 证书序列号 diff --git a/smart-switch-web/src/main/resources/application.yml b/smart-switch-web/src/main/resources/application.yml index 8be85975..1533dab6 100644 --- a/smart-switch-web/src/main/resources/application.yml +++ b/smart-switch-web/src/main/resources/application.yml @@ -158,7 +158,9 @@ sm: # 物联网平台地址 iotHost: https://iot-api.heclouds.com # 产品id 智能电表 - productId: SnDlte5gPh +# productId: SnDlte5gPh + # 新的id + productId: 6EX6t0UH7g # 版本号 签名算法版本 version: 2020-05-29 # 用户资源信息 用户id