用户扣减余额功能、分时段电量订单优化,超出押金直接关闭
This commit is contained in:
parent
c868fec07d
commit
9ef5a10782
smart-switch-ruoyi
smart-switch-common/src/main/java/com/ruoyi/common/utils
smart-switch-framework/src/main/java/com/ruoyi/framework/web/service
smart-switch-service/src/main/java/com/ruoyi
dashboard/index/domain/dto
ss
recordBalance/domain/enums
transactionBill/service
user/domain/dto
task/billEleRecord
smart-switch-web/src/main/java/com/ruoyi/web/controller/ss
|
@ -46,4 +46,15 @@ public class MathUtils {
|
|||
public static Long IntegerToLong(Integer num) {
|
||||
return num == null ? null : Long.valueOf(num);
|
||||
}
|
||||
|
||||
// 判断a是否大于b
|
||||
public static boolean biggerThan(BigDecimal a, BigDecimal b) {
|
||||
if (a == null) {
|
||||
a = BigDecimal.ZERO;
|
||||
}
|
||||
if (b == null) {
|
||||
b = BigDecimal.ZERO;
|
||||
}
|
||||
return a.compareTo(b) > 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ import com.ruoyi.common.config.WxConfig;
|
|||
import com.ruoyi.common.constant.CacheConstants;
|
||||
import com.ruoyi.common.constant.Constants;
|
||||
import com.ruoyi.common.constant.UserConstants;
|
||||
import com.ruoyi.common.core.domain.entity.SmUser;
|
||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||
import com.ruoyi.common.core.domain.model.AliLoginBody;
|
||||
import com.ruoyi.common.core.domain.model.LoginUser;
|
||||
|
@ -222,6 +223,18 @@ public class SysLoginService
|
|||
userService.updateUserProfile(sysUser);
|
||||
}
|
||||
|
||||
/**
|
||||
* 记录APP用户登录信息
|
||||
* @param userId
|
||||
*/
|
||||
public void recordLoginInfoApp(Long userId) {
|
||||
SmUser data = new SmUser();
|
||||
data.setUserId(userId);
|
||||
data.setLoginIp(IpUtils.getIpAddr());
|
||||
data.setLoginDate(DateUtils.getNowDate());
|
||||
smUserService.updateSmUser(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 前台账号密码登录
|
||||
* @param username
|
||||
|
@ -255,6 +268,7 @@ public class SysLoginService
|
|||
AuthenticationContextHolder.clearContext();
|
||||
}
|
||||
LoginUser loginUser = (LoginUser) authentication.getPrincipal();
|
||||
recordLoginInfoApp(loginUser.getUserId());
|
||||
// 生成token
|
||||
return tokenService.createToken(loginUser);
|
||||
}
|
||||
|
@ -310,6 +324,7 @@ public class SysLoginService
|
|||
AuthenticationContextHolder.clearContext();
|
||||
}
|
||||
LoginUser loginUser = (LoginUser) authentication.getPrincipal();
|
||||
recordLoginInfoApp(loginUser.getUserId());
|
||||
return tokenService.createToken(loginUser);
|
||||
}
|
||||
|
||||
|
@ -369,6 +384,7 @@ public class SysLoginService
|
|||
AuthenticationContextHolder.clearContext();
|
||||
}
|
||||
LoginUser loginUser = (LoginUser) authentication.getPrincipal();
|
||||
recordLoginInfoApp(loginUser.getUserId());
|
||||
return tokenService.createToken(loginUser);
|
||||
|
||||
}
|
||||
|
|
|
@ -3,7 +3,6 @@ package com.ruoyi.dashboard.index.domain.dto;
|
|||
import java.time.LocalDate;
|
||||
import java.util.Arrays;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
@ -23,7 +22,7 @@ import lombok.Data;
|
|||
public class StoreDailyIncomeQuery {
|
||||
|
||||
@ApiModelProperty("店铺ID")
|
||||
@NotBlank(message = "店铺ID不能为空")
|
||||
@NotNull(message = "店铺ID不能为空")
|
||||
private Long storeId;
|
||||
|
||||
@ApiModelProperty("开始时间")
|
||||
|
|
|
@ -15,7 +15,8 @@ public enum RecordBalanceBstType {
|
|||
REFUND("2", "退款订单"),
|
||||
WITHDRAW("3", "提现申请"),
|
||||
RECEIVABLE("4", "应收账"),
|
||||
VIP("5", "会员订单");
|
||||
VIP("5", "会员订单"),
|
||||
ADMIN("6", "管理员操作");
|
||||
|
||||
private final String type;
|
||||
private final String msg;
|
||||
|
|
|
@ -386,4 +386,9 @@ public interface TransactionBillService {
|
|||
*/
|
||||
List<LocalDateTimeIntegerVO> selectDailyCount(TransactionBillQuery query);
|
||||
|
||||
/**
|
||||
* 计算分时段计量金额
|
||||
*/
|
||||
BigDecimal calcTimingCountAmount(Long billId);
|
||||
|
||||
}
|
||||
|
|
|
@ -1233,8 +1233,16 @@ public class TransactionBillServiceImpl implements TransactionBillService, After
|
|||
|
||||
// 计算分时段计量金额
|
||||
private BigDecimal calcTimingCountAmount(TransactionBillVO order) {
|
||||
return calcTimingCountAmount(order.getBillId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public BigDecimal calcTimingCountAmount(Long billId) {
|
||||
if (billId == null) {
|
||||
return null;
|
||||
}
|
||||
BillEleRecordQuery query = new BillEleRecordQuery();
|
||||
query.setBillId(order.getBillId());
|
||||
query.setBillId(billId);
|
||||
BigDecimal amount = billEleRecordService.selectSumOfTotalPrice(query);
|
||||
if (amount == null) {
|
||||
return BigDecimal.ZERO;
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
package com.ruoyi.ss.user.domain.dto;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Size;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class UserChangeBalanceDTO {
|
||||
|
||||
@ApiModelProperty("用户ID")
|
||||
@NotNull(message = "用户ID不能为空")
|
||||
private Long userId;
|
||||
|
||||
@ApiModelProperty("增加或减少的金额")
|
||||
@NotNull(message = "金额不能为空")
|
||||
private BigDecimal amount;
|
||||
|
||||
@ApiModelProperty("原因")
|
||||
@NotNull(message = "原因不能为空")
|
||||
@Size(max = 200, message = "原因不能超过200个字符")
|
||||
private String reason;
|
||||
|
||||
}
|
|
@ -1,5 +1,16 @@
|
|||
package com.ruoyi.task.billEleRecord;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.support.TransactionTemplate;
|
||||
|
||||
import com.ruoyi.common.utils.MathUtils;
|
||||
import com.ruoyi.common.utils.collection.CollectionUtils;
|
||||
import com.ruoyi.ss.billEleRecord.domain.BillEleRecord;
|
||||
import com.ruoyi.ss.billEleRecord.service.BillEleRecordConverter;
|
||||
|
@ -12,14 +23,8 @@ import com.ruoyi.ss.transactionBill.domain.TransactionBillQuery;
|
|||
import com.ruoyi.ss.transactionBill.domain.enums.TransactionBillType;
|
||||
import com.ruoyi.ss.transactionBill.domain.vo.TransactionBillVO;
|
||||
import com.ruoyi.ss.transactionBill.service.TransactionBillService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* @author wjh
|
||||
|
@ -41,6 +46,9 @@ public class BillEleRecordTask {
|
|||
@Autowired
|
||||
private DeviceService deviceService;
|
||||
|
||||
@Autowired
|
||||
private TransactionTemplate transactionTemplate;
|
||||
|
||||
// 记录分时段订单电量
|
||||
public void record() {
|
||||
|
||||
|
@ -84,7 +92,25 @@ public class BillEleRecordTask {
|
|||
}
|
||||
}
|
||||
|
||||
// 记录电量
|
||||
int insert = billEleRecordService.batchInsert(recordList);
|
||||
log.info("记录分时段订单电量:共{}条记录", insert);
|
||||
|
||||
// 查询所有超出订单押金的分时段电量订单,直接关闭
|
||||
for (TransactionBillVO bill : billList) {
|
||||
try {
|
||||
DeviceVO device = deviceList.stream().filter(item -> Objects.equals(bill.getDeviceId(), item.getDeviceId())).findFirst().orElse(null);
|
||||
if (device == null) {
|
||||
continue;
|
||||
}
|
||||
BigDecimal amount = transactionBillService.calcTimingCountAmount(bill.getBillId());
|
||||
if (amount != null && bill.getSuitDeposit() != null && amount.compareTo(bill.getSuitDeposit()) >= 0) {
|
||||
deviceService.resetWithBill(bill.getDeviceId(), false, device.getTotalElectriQuantity(), "分时段电量订单超出押金,直接关闭", false, true);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("查询所有超出订单押金的分时段电量订单,直接关闭失败,billNo:{}, {}", bill.getBillNo(), e.getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
@ -26,8 +27,10 @@ import com.ruoyi.common.core.domain.entity.SmUser;
|
|||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.common.utils.poi.ExcelUtil;
|
||||
import com.ruoyi.ss.recordBalance.domain.enums.RecordBalanceBstType;
|
||||
import com.ruoyi.ss.user.domain.SmUserQuery;
|
||||
import com.ruoyi.ss.user.domain.SmUserVO;
|
||||
import com.ruoyi.ss.user.domain.dto.UserChangeBalanceDTO;
|
||||
import com.ruoyi.ss.user.service.UserAssembler;
|
||||
import com.ruoyi.ss.user.service.UserConverter;
|
||||
import com.ruoyi.ss.user.service.UserService;
|
||||
|
@ -174,4 +177,20 @@ public class SmUserController extends BaseController
|
|||
return success(userService.selectStatistics(userId));
|
||||
}
|
||||
|
||||
// 增加、减少余额
|
||||
@PutMapping("/balance")
|
||||
public AjaxResult changeBalance(@RequestBody @Validated UserChangeBalanceDTO dto) {
|
||||
if (dto.getAmount().compareTo(BigDecimal.ZERO) == 0) {
|
||||
return error("金额不能为0");
|
||||
}
|
||||
String reason = "管理员" + getUsername() + "操作:" + dto.getReason();
|
||||
if (dto.getAmount().compareTo(BigDecimal.ZERO) < 0) {
|
||||
// 减少余额
|
||||
return toAjax(userService.subtractBalance(dto.getUserId(), dto.getAmount().negate(), false, reason, RecordBalanceBstType.ADMIN, null));
|
||||
} else {
|
||||
// 增加余额
|
||||
return toAjax(userService.addBalance(dto.getUserId(), dto.getAmount(), reason, RecordBalanceBstType.ADMIN, null));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user