From 31c54266412e4cb43be6bb436aa5ff4450475212 Mon Sep 17 00:00:00 2001 From: apple Date: Thu, 12 Mar 2026 15:40:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=9A=E5=91=98=E7=AE=A1=E7=90=86-=E7=A7=AF?= =?UTF-8?q?=E5=88=86=E4=BD=99=E9=A2=9D=EF=BC=9A=E6=94=AF=E6=8C=81=E5=B0=8F?= =?UTF-8?q?=E6=95=B0=E7=82=B9=E5=90=8E3=E4=BD=8D=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E7=94=A8=E6=88=B7=E5=88=97=E8=A1=A8=E7=A7=AF=E5=88=86?= =?UTF-8?q?=E4=B8=8D=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 后台:UserOperateIntegralMoneyRequest.integralValue 改为 BigDecimal,支持3位小数 - 后台:UserServiceImpl 积分操作逻辑改为 BigDecimal,支持小数 - 后台:UserResponse.integral 改为 BigDecimal,修复 BeanUtils 复制导致列表积分不显示 - 前端:积分输入框增加 precision=3、step=0.001,支持3位小数输入 Made-with: Cursor --- .../UserOperateIntegralMoneyRequest.java | 9 +++-- .../zbkj/common/response/UserResponse.java | 4 +- .../service/service/impl/UserServiceImpl.java | 38 ++++++++++--------- frontend/src/views/user/list/index.vue | 4 +- 4 files changed, 30 insertions(+), 25 deletions(-) diff --git a/backend/crmeb-common/src/main/java/com/zbkj/common/request/UserOperateIntegralMoneyRequest.java b/backend/crmeb-common/src/main/java/com/zbkj/common/request/UserOperateIntegralMoneyRequest.java index 4c9005b..86403c2 100644 --- a/backend/crmeb-common/src/main/java/com/zbkj/common/request/UserOperateIntegralMoneyRequest.java +++ b/backend/crmeb-common/src/main/java/com/zbkj/common/request/UserOperateIntegralMoneyRequest.java @@ -41,10 +41,11 @@ public class UserOperateIntegralMoneyRequest implements Serializable { @Range(min = 1, max = 2, message = "请选择正确的类型, 【1 = 增加, 2 = 减少】") private Integer integralType; - @ApiModelProperty(value = "积分") - @Min(value = 0) - @Max(value = 999999) - private Integer integralValue; + @ApiModelProperty(value = "积分(支持小数点后3位)") + @DecimalMin(value = "0", message = "积分不能小于0") + @DecimalMax(value = "999999.999", message = "积分不能大于999999.999") + @Digits(integer = 6, fraction = 3, message = "积分最多保留小数点后3位") + private BigDecimal integralValue; @ApiModelProperty(value = "余额类型, 1 = 增加, 2 = 减少") @NotNull diff --git a/backend/crmeb-common/src/main/java/com/zbkj/common/response/UserResponse.java b/backend/crmeb-common/src/main/java/com/zbkj/common/response/UserResponse.java index 9bd3d8d..4faab34 100644 --- a/backend/crmeb-common/src/main/java/com/zbkj/common/response/UserResponse.java +++ b/backend/crmeb-common/src/main/java/com/zbkj/common/response/UserResponse.java @@ -89,8 +89,8 @@ public class UserResponse { @ApiModelProperty(value = "佣金金额") private BigDecimal brokeragePrice; - @ApiModelProperty(value = "用户剩余积分") - private Integer integral; + @ApiModelProperty(value = "用户剩余积分(支持小数点后3位)") + private BigDecimal integral; @ApiModelProperty(value = "用户剩余经验") private Integer experience; diff --git a/backend/crmeb-service/src/main/java/com/zbkj/service/service/impl/UserServiceImpl.java b/backend/crmeb-service/src/main/java/com/zbkj/service/service/impl/UserServiceImpl.java index 10b9ce3..1d4f748 100644 --- a/backend/crmeb-service/src/main/java/com/zbkj/service/service/impl/UserServiceImpl.java +++ b/backend/crmeb-service/src/main/java/com/zbkj/service/service/impl/UserServiceImpl.java @@ -40,6 +40,7 @@ import org.springframework.transaction.support.TransactionTemplate; import javax.annotation.Resource; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.*; import java.util.stream.Collectors; @@ -227,11 +228,13 @@ public class UserServiceImpl extends ServiceImpl implements UserS */ @Override public Boolean updateIntegralMoney(UserOperateIntegralMoneyRequest request) { - if (ObjectUtil.isNull(request.getMoneyValue()) || ObjectUtil.isNull(request.getIntegralValue())) { + if (ObjectUtil.isNull(request.getMoneyValue()) && ObjectUtil.isNull(request.getIntegralValue())) { throw new CrmebException("至少输入一个金额"); } - if (request.getMoneyValue().compareTo(BigDecimal.ZERO) < 1 && request.getIntegralValue() <= 0) { - throw new CrmebException("修改值不能等小于等于0"); + boolean moneyValid = request.getMoneyValue() != null && request.getMoneyValue().compareTo(BigDecimal.ZERO) > 0; + boolean integralValid = request.getIntegralValue() != null && request.getIntegralValue().compareTo(BigDecimal.ZERO) > 0; + if (!moneyValid && !integralValid) { + throw new CrmebException("修改值不能小于等于0"); } User user = getById(request.getUid()); @@ -250,16 +253,16 @@ public class UserServiceImpl extends ServiceImpl implements UserS } } - if (request.getIntegralType().equals(2) && request.getIntegralValue() != 0) { + if (request.getIntegralType().equals(2) && request.getIntegralValue() != null && request.getIntegralValue().compareTo(BigDecimal.ZERO) > 0) { BigDecimal integral = user.getIntegral() != null ? user.getIntegral() : BigDecimal.ZERO; - if (integral.subtract(BigDecimal.valueOf(request.getIntegralValue())).compareTo(BigDecimal.ZERO) < 0) { + if (integral.subtract(request.getIntegralValue()).compareTo(BigDecimal.ZERO) < 0) { throw new CrmebException("积分扣减后不能小于0"); } } - if (request.getIntegralType().equals(1) && request.getIntegralValue() != 0) { + if (request.getIntegralType().equals(1) && request.getIntegralValue() != null && request.getIntegralValue().compareTo(BigDecimal.ZERO) > 0) { BigDecimal integral = user.getIntegral() != null ? user.getIntegral() : BigDecimal.ZERO; - if (integral.add(BigDecimal.valueOf(request.getIntegralValue())).compareTo(BigDecimal.valueOf(99999999)) > 0) { - throw new CrmebException("积分添加后不能大于99999999"); + if (integral.add(request.getIntegralValue()).compareTo(new BigDecimal("99999999.999")) > 0) { + throw new CrmebException("积分添加后不能大于99999999.999"); } } @@ -295,28 +298,29 @@ public class UserServiceImpl extends ServiceImpl implements UserS } } - // 处理积分 - if (request.getIntegralValue() > 0) { + // 处理积分(支持小数点后3位) + if (request.getIntegralValue() != null && request.getIntegralValue().compareTo(BigDecimal.ZERO) > 0) { + BigDecimal integralValue = request.getIntegralValue().setScale(3, RoundingMode.HALF_UP); // 生成记录 UserIntegralRecord integralRecord = new UserIntegralRecord(); integralRecord.setUid(user.getUid()); integralRecord.setLinkType(IntegralRecordConstants.INTEGRAL_RECORD_LINK_TYPE_SYSTEM); integralRecord.setTitle(IntegralRecordConstants.BROKERAGE_RECORD_TITLE_SYSTEM); - integralRecord.setIntegral(BigDecimal.valueOf(request.getIntegralValue())); + integralRecord.setIntegral(integralValue); integralRecord.setStatus(IntegralRecordConstants.INTEGRAL_RECORD_STATUS_COMPLETE); if (request.getIntegralType() == 1) {// 增加 integralRecord.setType(IntegralRecordConstants.INTEGRAL_RECORD_TYPE_ADD); BigDecimal userIntegral = user.getIntegral() != null ? user.getIntegral() : BigDecimal.ZERO; - integralRecord.setBalance(userIntegral.add(BigDecimal.valueOf(request.getIntegralValue())).intValue()); - integralRecord.setMark(StrUtil.format("后台操作增加了{}积分", request.getIntegralValue())); + integralRecord.setBalance(userIntegral.add(integralValue).setScale(0, RoundingMode.HALF_UP).intValue()); + integralRecord.setMark(StrUtil.format("后台操作增加了{}积分", integralValue)); - operationIntegral(user.getUid(), BigDecimal.valueOf(request.getIntegralValue()), user.getIntegral(), "add"); + operationIntegral(user.getUid(), integralValue, user.getIntegral(), "add"); } else { integralRecord.setType(IntegralRecordConstants.INTEGRAL_RECORD_TYPE_SUB); BigDecimal userIntegral = user.getIntegral() != null ? user.getIntegral() : BigDecimal.ZERO; - integralRecord.setBalance(userIntegral.subtract(BigDecimal.valueOf(request.getIntegralValue())).intValue()); - integralRecord.setMark(StrUtil.format("后台操作减少了{}积分", request.getIntegralValue())); - operationIntegral(user.getUid(), BigDecimal.valueOf(request.getIntegralValue()), user.getIntegral(), "sub"); + integralRecord.setBalance(userIntegral.subtract(integralValue).setScale(0, RoundingMode.HALF_UP).intValue()); + integralRecord.setMark(StrUtil.format("后台操作减少了{}积分", integralValue)); + operationIntegral(user.getUid(), integralValue, user.getIntegral(), "sub"); } userIntegralRecordService.save(integralRecord); } diff --git a/frontend/src/views/user/list/index.vue b/frontend/src/views/user/list/index.vue index 117a6cd..a3baaf4 100644 --- a/frontend/src/views/user/list/index.vue +++ b/frontend/src/views/user/list/index.vue @@ -345,8 +345,8 @@ - +