Merge remote-tracking branch 'origin/master' into dev
# Conflicts: # smart-switch-ruoyi/smart-switch-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
This commit is contained in:
commit
32ed751e3d
|
@ -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);
|
||||
|
||||
// 添加微信账户
|
||||
|
|
|
@ -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)) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -311,6 +311,10 @@ public class TransactionBill extends BaseEntity implements Payable
|
|||
@JsonView(JsonViewProfile.App.class)
|
||||
private BigDecimal suitDeposit;
|
||||
|
||||
@Excel(name = "设备开启状态描述")
|
||||
@ApiModelProperty("设备开启状态描述")
|
||||
private String openMsg;
|
||||
|
||||
/**
|
||||
* 获取价格(分)
|
||||
*/
|
||||
|
|
|
@ -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);
|
||||
|
||||
/**
|
||||
* 修改设备充值状态
|
||||
|
|
|
@ -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,
|
||||
</sql>
|
||||
|
||||
<sql id="selectSmTransactionBillVo">
|
||||
|
@ -199,6 +200,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="query.agentMobile != null and query.agentMobile != ''"> and stb.agent_mobile like concat('%', #{query.agentMobile}, '%')</if>
|
||||
<if test="query.suitEnabledVoid != null "> and stb.suit_enabled_void = #{query.suitEnabledVoid}</if>
|
||||
<if test="query.suitVoidResult != null and query.suitVoidResult != ''"> and stb.suit_void_result = #{query.suitVoidResult}</if>
|
||||
<if test="query.openMsg != null and query.openMsg != ''"> and stb.open_msg like concat('%', #{query.openMsg}, '%')</if>
|
||||
<if test="query.isUsing != null">
|
||||
<if test="query.isUsing">
|
||||
and <include refid="isUsing"/>
|
||||
|
@ -482,6 +484,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="suitVoidResult != null">suit_void_result,</if>
|
||||
<if test="suitVoidMsg != null">suit_void_msg,</if>
|
||||
<if test="suitDeposit != null">suit_deposit,</if>
|
||||
<if test="openMsg != null">open_msg,</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="billNo != null">#{billNo},</if>
|
||||
|
@ -547,6 +550,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="suitVoidResult != null">#{suitVoidResult},</if>
|
||||
<if test="suitVoidMsg != null">#{suitVoidMsg},</if>
|
||||
<if test="suitDeposit != null">#{suitDeposit},</if>
|
||||
<if test="openMsg != null">#{openMsg},</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
|
@ -629,7 +633,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="data.suitVoidMinute != null">stb.suit_void_minute = #{data.suitVoidMinute},</if>
|
||||
<if test="data.suitVoidResult != null">stb.suit_void_result = #{data.suitVoidResult},</if>
|
||||
<if test="data.suitVoidMsg != null">stb.suit_void_msg = #{data.suitVoidMsg},</if>
|
||||
<if test="data.suitDeposit != null">suit_deposit = #{data.suitDeposit},</if>
|
||||
<if test="data.suitDeposit != null">stb.suit_deposit = #{data.suitDeposit},</if>
|
||||
<if test="data.openMsg != null">stb.open_msg = #{data.openMsg},</if>
|
||||
</sql>
|
||||
|
||||
<update id="updateByQuery">
|
||||
|
@ -724,8 +729,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
|
||||
<update id="updateDeviceRechargeStatus">
|
||||
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')
|
||||
</update>
|
||||
|
||||
<update id="updateDeviceRechargeStatusByIds">
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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<String> 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, "修改剩余时间失败");
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user