diff --git a/smart-switch-ruoyi/smart-switch-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/smart-switch-ruoyi/smart-switch-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
index 5731eb35..8d4e3c02 100644
--- a/smart-switch-ruoyi/smart-switch-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
+++ b/smart-switch-ruoyi/smart-switch-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
@@ -17,6 +17,8 @@ import com.ruoyi.ss.store.service.StoreService;
import com.ruoyi.ss.user.service.ISmUserService;
import com.ruoyi.ss.account.service.AccountService;
import com.ruoyi.ss.account.domain.enums.AccountType;
+import com.ruoyi.system.domain.SysConfig;
+import com.ruoyi.system.domain.enums.config.ConfigKey;
import com.ruoyi.system.service.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
@@ -85,6 +87,9 @@ public class SysLoginService
@Autowired
private WxAuthService wxAuthService;
+ @Autowired
+ private ISysConfigService sysConfigService;
+
/**
* 登录验证
*
@@ -255,20 +260,32 @@ public class SysLoginService
* 微信登录
*/
@Transactional
- public String wxLogin(String openId) {
+ public String wxLogin(WxLoginBody body) {
- // 通过openId查询用户,判断是否微信用户
+ // 通过登录授权码获取到用户信息
+ WxMaJscode2SessionResult wxMaJscode2SessionResult = wxAuthService.wxJsCode2Session(body.getLoginCode());
+ ServiceUtil.assertion(wxMaJscode2SessionResult == null, "获取微信openId失败");
+
+ // 通过openId查询用户
+ String openId = wxMaJscode2SessionResult.getOpenid();
SmUser user = smUserService.selectSmUserByWxOpenId(openId);
- // 不是微信用户,则使用openId进行注册
+ // 若用户不存在,则使用openId进行注册
if (user == null || Objects.equals(user.getDelFlag(), UserStatus.DELETED.getCode())) {
- user = registerWx(openId);
+ // 获取手机号
+ boolean loginWithPhone = sysConfigService.getBoolean(ConfigKey.ARRIVAL_DELAY);
+ String mobile = null;
+ if (loginWithPhone && StringUtils.hasText(body.getMobileCode())) {
+ mobile = this.getWxPhoneNumber(body.getMobileCode());
+ }
+ // 用户注册
+ user = registerWx(openId, mobile);
}
ServiceUtil.assertion(user == null, "用户不存在");
Authentication authentication = null;
try {
- UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(openId, Constants.CUSTOM_LOGIN_WX);
+ UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(user.getUserId(), Constants.CUSTOM_LOGIN_WX);
// 用户名和密码等信息保存在一个上下文中,只要是同一线程等会就能拿到用户名和密码,也就是能在loadUserByUsername(String username)方法中进行密码验证等
AuthenticationContextHolder.setContext(authenticationToken);
// 把用户登录类型放在上下文中的details属性中,在UserDetailsServiceImpl.loadUserByUsername中获取
@@ -293,7 +310,7 @@ public class SysLoginService
* 注册微信用户
* @param openId 微信OpenId
*/
- private SmUser registerWx(String openId) {
+ private SmUser registerWx(String openId, String mobile) {
if (StringUtils.isBlank(openId)) {
return null;
}
@@ -304,6 +321,7 @@ public class SysLoginService
SmUser newUser = new SmUser();
newUser.setUserName(name);
newUser.setWxOpenId(openId);
+ newUser.setPhonenumber(mobile);
smUserService.insertSmUser(newUser);
// 添加微信账户
diff --git a/smart-switch-ruoyi/smart-switch-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java b/smart-switch-ruoyi/smart-switch-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java
index 8bd467c6..ee621ba3 100644
--- a/smart-switch-ruoyi/smart-switch-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java
+++ b/smart-switch-ruoyi/smart-switch-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java
@@ -60,7 +60,7 @@ public class UserDetailsServiceImpl implements UserDetailsService
return createLoginUser(user);
} else if(Constants.USER_TYPE_WX.equals(userType)) {
// app 用户微信登录
- SmUser user = smUserService.selectSmUserByWxOpenId(username);
+ SmUser user = smUserService.selectSmUserByUserId(Long.parseLong(username));
this.checkUser(user, username);
return createLoginUser(user);
} else if(Constants.USER_TYPE_APP.equals(userType)) {
diff --git a/smart-switch-ruoyi/smart-switch-system/src/main/java/com/ruoyi/system/domain/enums/config/ConfigKey.java b/smart-switch-ruoyi/smart-switch-system/src/main/java/com/ruoyi/system/domain/enums/config/ConfigKey.java
index 94073267..99f27b9e 100644
--- a/smart-switch-ruoyi/smart-switch-system/src/main/java/com/ruoyi/system/domain/enums/config/ConfigKey.java
+++ b/smart-switch-ruoyi/smart-switch-system/src/main/java/com/ruoyi/system/domain/enums/config/ConfigKey.java
@@ -25,7 +25,8 @@ public enum ConfigKey {
ORDER_AUTO_CLOSE_CD("order.auto.close.cd", "订单自动关闭冷却时间(分)"),
RISK_WITHDRAW_TIME("risk.withdraw.time", "风控订单和提现相隔时长(分钟)"),
RISK_WITHDRAW_COUNT("risk.withdraw.count", "累计风险次数"),
- RISK_WITHDRAW_ENABLED("risk.withdraw.enabled", "是否开启提现风控");
+ RISK_WITHDRAW_ENABLED("risk.withdraw.enabled", "是否开启提现风控"),
+ LOGIN_WITH_PHONE("login.with.phone", "登录是否需要手机号");
private final String key;
private final String msg;
diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/impl/DeviceValidatorImpl.java b/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/impl/DeviceValidatorImpl.java
index d3b166c5..0ccdf0d2 100644
--- a/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/impl/DeviceValidatorImpl.java
+++ b/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/impl/DeviceValidatorImpl.java
@@ -12,6 +12,7 @@ import com.ruoyi.ss.device.domain.enums.DeviceServiceMode;
import com.ruoyi.ss.device.domain.vo.DeviceVO;
import com.ruoyi.ss.device.service.DeviceService;
import com.ruoyi.ss.device.service.DeviceValidator;
+import com.ruoyi.ss.model.domain.enums.ModelTag;
import com.ruoyi.ss.store.service.StoreValidator;
import com.ruoyi.ss.suit.service.SuitValidator;
import org.eclipse.jetty.util.StringUtil;
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 3f8483a7..152ad28f 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
@@ -311,6 +311,10 @@ public class TransactionBill extends BaseEntity implements Payable
@JsonView(JsonViewProfile.App.class)
private BigDecimal suitDeposit;
+ @Excel(name = "设备开启状态描述")
+ @ApiModelProperty("设备开启状态描述")
+ private String openMsg;
+
/**
* 获取价格(分)
*/
diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/mapper/TransactionBillMapper.java b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/mapper/TransactionBillMapper.java
index a01bc3c7..0582d9cb 100644
--- a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/mapper/TransactionBillMapper.java
+++ b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/mapper/TransactionBillMapper.java
@@ -134,7 +134,7 @@ public interface TransactionBillMapper
*/
int paying(Long billId);
- int updateDeviceRechargeStatus(@Param("billId") Long billId, @Param("status") String status);
+ int updateDeviceRechargeStatus(@Param("billId") Long billId, @Param("status") String status, @Param("openMsg") String openMsg);
/**
* 修改设备充值状态
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 5dac583c..87aad417 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
@@ -77,6 +77,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
stb.suit_void_result,
stb.suit_void_msg,
stb.suit_deposit,
+ stb.open_msg,
@@ -199,6 +200,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and stb.agent_mobile like concat('%', #{query.agentMobile}, '%')
and stb.suit_enabled_void = #{query.suitEnabledVoid}
and stb.suit_void_result = #{query.suitVoidResult}
+ and stb.open_msg like concat('%', #{query.openMsg}, '%')
and
@@ -482,6 +484,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
suit_void_result,
suit_void_msg,
suit_deposit,
+ open_msg,
#{billNo},
@@ -547,6 +550,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{suitVoidResult},
#{suitVoidMsg},
#{suitDeposit},
+ #{openMsg},
@@ -629,7 +633,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
stb.suit_void_minute = #{data.suitVoidMinute},
stb.suit_void_result = #{data.suitVoidResult},
stb.suit_void_msg = #{data.suitVoidMsg},
- suit_deposit = #{data.suitDeposit},
+ stb.suit_deposit = #{data.suitDeposit},
+ stb.open_msg = #{data.openMsg},
@@ -724,8 +729,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
update sm_transaction_bill
- set device_recharge_status = #{status}
- where bill_id = #{billId} and `type` = '1' and device_recharge_status not in('1', '3')
+ set device_recharge_status = #{status},
+ open_msg = #{openMsg}
+ where bill_id = #{billId}
+ and `type` = '1'
+ and device_recharge_status not in('1', '3')
diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/RechargeDepositAfterPay.java b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/RechargeDepositAfterPay.java
index 6f4c712e..5e678c4d 100644
--- a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/RechargeDepositAfterPay.java
+++ b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/RechargeDepositAfterPay.java
@@ -9,6 +9,7 @@ import com.ruoyi.ss.payBill.domain.PayBillVO;
import com.ruoyi.ss.payBill.interfaces.AfterPay;
import com.ruoyi.ss.transactionBill.domain.TransactionBill;
import com.ruoyi.ss.transactionBill.domain.TransactionBillQuery;
+import com.ruoyi.ss.transactionBill.domain.enums.TransactionBillDeviceRechargeStatus;
import com.ruoyi.ss.transactionBill.domain.enums.TransactionBillStatus;
import com.ruoyi.ss.transactionBill.domain.vo.TransactionBillVO;
import com.ruoyi.ss.transactionBill.service.TransactionBillService;
@@ -58,21 +59,36 @@ public class RechargeDepositAfterPay implements AfterPay {
data.setStatus(TransactionBillStatus.SUCCESS_DEPOSIT.getStatus());
data.setDepositPayId(payBill.getPayId());
data.setPayTime(DateUtils.toDate(payBill.getPayTime()));
+ data.setDeviceRechargeStatus(TransactionBillDeviceRechargeStatus.SUCCESS.getStatus());
+ data.setOpenMsg("成功");
TransactionBillQuery query = new TransactionBillQuery();
query.setBillId(bill.getBillId());
query.setStatus(TransactionBillStatus.UNPAID_DEPOSIT.getStatus());
int update = transactionBillService.updateByQuery(data, query);
ServiceUtil.assertion(update != 1, "修改订单信息失败,状态已经发生改变:%s", bill.getBillNo());
- try {
- iotService.open(device);
- } catch (Exception e) {
- log.error(e.getMessage());
- }
+ this.openDevice(bill.getBillId(), device);
return update;
});
return result == null ? 0 : result;
}
+
+ /**
+ * 开启设备
+ */
+ private int openDevice(Long billId, DeviceVO device) {
+ try {
+ iotService.open(device);
+ return 1;
+ } catch (Exception e) {
+ log.error(e.getMessage());
+ TransactionBill data = new TransactionBill();
+ data.setDeviceRechargeStatus(TransactionBillDeviceRechargeStatus.FAIL.getStatus());
+ data.setOpenMsg(e.getMessage());
+ data.setBillId(billId);
+ return transactionBillService.updateSmTransactionBill(data);
+ }
+ }
}
diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/RechargePayHandler.java b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/RechargePayHandler.java
index 8c668432..1f1d77e7 100644
--- a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/RechargePayHandler.java
+++ b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/RechargePayHandler.java
@@ -15,6 +15,7 @@ import com.ruoyi.ss.suit.domain.enums.SuitFeeType;
import com.ruoyi.ss.transactionBill.domain.TransactionBill;
import com.ruoyi.ss.transactionBill.domain.TransactionBillQuery;
import com.ruoyi.ss.transactionBill.domain.bo.PaySuccessBO;
+import com.ruoyi.ss.transactionBill.domain.enums.TransactionBillDeviceRechargeStatus;
import com.ruoyi.ss.transactionBill.domain.enums.TransactionBillStatus;
import com.ruoyi.ss.transactionBill.domain.enums.TransactionBillType;
import com.ruoyi.ss.transactionBill.domain.vo.TransactionBillVO;
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 4066c5ed..1d6cf19a 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
@@ -74,6 +74,7 @@ import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -846,23 +847,25 @@ public class TransactionBillServiceImpl implements TransactionBillService, After
ServiceUtil.assertion(TransactionBillDeviceRechargeStatus.BLUETOOTH.getStatus().equals(bill.getDeviceRechargeStatus()), "设备已选择蓝牙充值,请使用蓝牙进行充值");
+ // 设备开启状态描述
+ AtomicReference openMsg = new AtomicReference<>("成功");
+
Boolean result = transactionTemplate.execute(status -> {
// 刷新设备数据
deviceService.pullDeviceInfo(bill.getDeviceId());
DeviceVO device = deviceService.selectById(bill.getDeviceId());
- // 如果设备离线,则直接返回失败
- if (DeviceOnlineStatus.OFFLINE.getStatus().equals(device.getOnlineStatus())) {
- return false;
- }
-
// 更新套餐使用信息
int updateInfo = this.updateSuitInfoBeforeDevice(bill, device);
ServiceUtil.assertion(updateInfo != 1, "更新套餐使用信息失败");
// 修改设备充值状态:成功
- int updateRecharge = transactionBillMapper.updateDeviceRechargeStatus(bill.getBillId(), TransactionBillDeviceRechargeStatus.SUCCESS.getStatus());
+ int updateRecharge = transactionBillMapper.updateDeviceRechargeStatus(
+ bill.getBillId(),
+ TransactionBillDeviceRechargeStatus.SUCCESS.getStatus(),
+ openMsg.get()
+ );
ServiceUtil.assertion(updateRecharge != 1, "设备充值状态发生变化,请稍后重试");
try {
@@ -886,6 +889,7 @@ public class TransactionBillServiceImpl implements TransactionBillService, After
} catch (Exception e) {
// 失败,回滚
status.setRollbackOnly();
+ openMsg.set(e.getMessage());
return false;
}
});
@@ -898,7 +902,11 @@ public class TransactionBillServiceImpl implements TransactionBillService, After
this.recordTime(bill, "用户充值订单:" + bill.getBillNo());
} else {
// 修改设备充值状态为失败
- transactionBillMapper.updateDeviceRechargeStatus(billId, TransactionBillDeviceRechargeStatus.FAIL.getStatus());
+ transactionBillMapper.updateDeviceRechargeStatus(
+ billId,
+ TransactionBillDeviceRechargeStatus.FAIL.getStatus(),
+ openMsg.get()
+ );
}
return success;
@@ -1356,6 +1364,9 @@ public class TransactionBillServiceImpl implements TransactionBillService, After
// 计算智能时长的使用金额
private BigDecimal calcSmartTimeAmount(TransactionBillVO order, LocalDateTime endTime) {
LocalDateTime startTime = order.getSuitStartTime();
+ if (startTime == null) {
+ startTime = LocalDateTime.now();
+ }
Duration between = Duration.between(startTime, endTime);
SuitTimeUnit unit = SuitTimeUnit.getByValue(order.getSuitTimeUnit());
@@ -1614,6 +1625,7 @@ public class TransactionBillServiceImpl implements TransactionBillService, After
// 更新设备充值状态
TransactionBill data = new TransactionBill();
data.setDeviceRechargeStatus(TransactionBillDeviceRechargeStatus.SUCCESS.getStatus());
+ data.setOpenMsg("蓝牙充值成功");
TransactionBillQuery query = new TransactionBillQuery();
query.setBillId(bill.getBillId());
query.setType(TransactionBillType.RECHARGE.getType());
@@ -1627,7 +1639,7 @@ public class TransactionBillServiceImpl implements TransactionBillService, After
int updateInfo = this.updateSuitInfoBeforeDevice(bill, device);
ServiceUtil.assertion(updateInfo != 1, "更新套餐使用信息失败");
- // 修改剩余时间失败
+ // 修改剩余时间
boolean addTime = deviceService.addTime(bill.getDeviceId(), transactionBillConverter.toRechargeSeconds(bill), false);
ServiceUtil.assertion(!addTime, "修改剩余时间失败");