1、禅道bug#1512、#1511、#1506修复;2、全局异常HttpMessageNotReadableException提示优化;3、部分入参i18配置补充;

This commit is contained in:
gaoqr
2026-05-09 14:54:41 +08:00
parent 6bc9298294
commit 9a98f8e55c
12 changed files with 32 additions and 26 deletions
@@ -11,6 +11,7 @@ import com.cf.imes.framework.common.util.json.JsonUtils;
import com.cf.imes.framework.common.util.servlet.ServletUtils;
import com.cf.imes.module.infra.api.logger.ApiErrorLogApi;
import com.cf.imes.module.infra.api.logger.dto.ApiErrorLogCreateReqDTO;
import com.fasterxml.jackson.databind.exc.InvalidFormatException;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -220,8 +221,13 @@ public class GlobalExceptionHandler {
@ExceptionHandler(value = HttpMessageNotReadableException.class)
public CommonResult httpMessageNotReadableExceptionHandler(HttpServletRequest req, HttpMessageNotReadableException ex) {
log.warn(String.format("==========[httpMessageNotReadableExceptionHandler]==========%s", ex.getMessage()));
return CommonResult.error(BAD_REQUEST);
String errMsg = ex.getMessage();
log.warn(String.format("==========[httpMessageNotReadableExceptionHandler]==========%s", errMsg));
Throwable cause = ex.getCause();
if (cause instanceof InvalidFormatException) {
errMsg = ((InvalidFormatException) cause).getValue().toString();
}
return CommonResult.error(BAD_REQUEST, errMsg);
}
/**
@@ -1,5 +1,6 @@
package com.cf.imes.module.system.controller.admin.funds.delay.vo;
import com.cf.imes.framework.common.validation.NumberValid;
import com.cf.imes.module.system.validation.products.DurationUnitValid;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
@@ -23,6 +24,7 @@ public class ProductDelaySaveReqVO {
@Schema(description = "延期时长", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "{product.delay.save.duration.notNull}")
@NumberValid(name = "product.delay.duration.field")
private Integer delayDuration;
@Schema(description = "延期时长单位,0:年、1:月、2:日", example = "1")
@@ -33,7 +33,7 @@ public class InvoiceTitleSaveReqVO {
@Schema(description = "发票类型,0增值税普通发票 1增值税专用发票")
@NotNull(message = "发票类型不能为空")
@NotNull(message = "{invoice.title.save.invoiceType.notNull}")
@InvoiceTypeValid
private Integer invoiceType;
@@ -19,8 +19,6 @@ import com.cf.imes.module.system.controller.admin.funds.organamount.vo.OrganProd
import com.cf.imes.module.system.controller.admin.organ.vo.organ.*;
import com.cf.imes.module.system.dal.dataobject.funds.purchase.PurchaseRecordDO;
import com.cf.imes.module.system.dal.dataobject.organ.OrganizationDO;
import com.cf.imes.module.system.dal.dataobject.organ.TenantPackageDO;
import com.cf.imes.module.system.dal.mysql.organ.TenantPackageMapper;
import com.cf.imes.module.system.enums.pay.DurationUnitEnum;
import com.cf.imes.module.system.enums.pay.PurchaseRecordStatusEnum;
import com.cf.imes.module.system.service.funds.delay.ProductDelayService;
@@ -31,6 +29,7 @@ import com.cf.imes.module.system.service.user.AdminUserService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.groups.Default;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -57,9 +56,6 @@ public class OrganController {
@Resource
private OrganService organService;
@Resource
private TenantPackageMapper tenantPackageMapper;
@Resource
private AdminUserService adminUserService;
@@ -96,14 +92,14 @@ public class OrganController {
@PostMapping("/create")
@Operation(summary = "创建组织")
@PreAuthorize("@ss.hasPermission('organizationLIst:create')")
public CommonResult<Long> createOrgan(@Validated(OrganSaveCreateGroup.class) @RequestBody OrganSaveReqVO createReqVO) {
public CommonResult<Long> createOrgan(@Validated({OrganSaveCreateGroup.class, Default.class}) @RequestBody OrganSaveReqVO createReqVO) {
return success(organService.createOrgan(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新组织")
@PreAuthorize("@ss.hasPermission('organizationLIst:update')")
public CommonResult<Boolean> updateOrgan(@Validated(OrganSaveUpdateGroup.class) @RequestBody OrganSaveReqVO updateReqVO) {
public CommonResult<Boolean> updateOrgan(@Validated({OrganSaveUpdateGroup.class, Default.class}) @RequestBody OrganSaveReqVO updateReqVO) {
organService.updateOrgan(updateReqVO);
return success(true);
}
@@ -20,10 +20,6 @@ public class OrganPageReqVO extends PageParam {
@Size(max = 30, message = "组织名长度不能超过30个字符")
private String name;
@Schema(description = "组织名", example = "晨丰")
@Size(max = 30, message = "组织名长度不能超过30个字符")
private String exactName;
@Schema(description = "联系人", example = "晨丰")
@Size(max = 30, message = "联系人长度不能超过30个字符")
private String contactName;
@@ -75,10 +75,6 @@ public class OrganSaveReqVO {
@Schema(description = "是否大型组织")
private Boolean large;
@Schema(description = "组织编号")
@Size(max = 50, message = "组织编号长度不能超过50个字符")
private String code;
@Schema(description = "地址")
@Size(max = 255, message = "地址长度不能超过255个字符")
private String address;
@@ -87,7 +83,6 @@ public class OrganSaveReqVO {
@Size(max = 200, message = "备注长度不能超过200个字符")
private String remark;
@Schema(description = "")
@Size(max = 64, message = "省名称长度不能超过64个字符")
private String province;
@@ -42,7 +42,6 @@ public interface OrganMapper extends BaseMapperX<OrganizationDO> {
.likeIfPresent(OrganizationDO::getContactName, reqVO.getContactName())
.likeIfPresent(OrganizationDO::getContactMobile, reqVO.getContactMobile())
.eqIfPresent(OrganizationDO::getStatus, reqVO.getStatus())
.eqIfPresent(OrganizationDO::getName, reqVO.getExactName())
.eqIfPresent(OrganizationDO::getProvince, reqVO.getProvince())
.eqIfPresent(OrganizationDO::getCity, reqVO.getCity())
.eqIfPresent(OrganizationDO::getCounty, reqVO.getCounty())
@@ -72,12 +72,13 @@ public class ProductDelayServiceImpl implements ProductDelayService {
productsDetailService.validateProductExist(purchaseRecordDO.getProductId());
/**
* 查询是否有前序的延期记录:
* 查询是否有前序的对应产品延期记录:
* 1、如果有记录,延期有效期在其记录上叠加
* 2、如果没有记录,取购买记录的结束时间作为延期的开始时间,如果结束时间已经过期了,那么从今天开始算
*/
ProductDelayRecordDO lastDelayRecordDO = productDelayRecordMapper.selectOne(new LambdaQueryWrapper<ProductDelayRecordDO>()
.eq(ProductDelayRecordDO::getOrganId, organId)
.eq(ProductDelayRecordDO::getProductId, purchaseRecordDO.getProductId())
.orderByDesc(ProductDelayRecordDO::getCreateTime)
.last("limit 1"));
@@ -23,7 +23,7 @@ import java.lang.annotation.Target;
validatedBy = {CommonStatusValidator.class}
)
public @interface CommonStatus {
String message() default "状态不合法,0:开启、1:关闭";
String message() default "{common.status.invalid}";
Class<?>[] groups() default {};
@@ -26,6 +26,7 @@ invoice.title.save.email.notNull=邮箱不能为空
invoice.title.save.email.size=邮箱长度不能超过64个字符
invoice.title.save.fixedPhone.size=注册固定电话长度不能超过20个字符
invoice.title.save.issueType.notNull=开具类型不能为空
invoice.title.save.invoiceType.notNull=发票类型不能为空
invoice.title.save.registeredAddress.size=注册场所地址长度不能超过64个字符
invoice.title.save.taxNumber.size=统一社会信用代码长度不能超过18个字符
invoice.title.save.title.notBlank=发票抬头不能为空
@@ -38,6 +39,7 @@ page.pageNo.notNull=页码不能为空
page.pageSize.max=每页条数最大值为 100
page.pageSize.min=每页条数最小值为 -1
page.pageSize.notNull=每页条数不能为空
product.delay.duration.field=延期时长
product.delay.page.operator.size=操作人长度不能超过64个字符
product.delay.page.productName.size=产品名称长度不能超过64个字符
product.delay.save.duration.notNull=延期时长不能为空
@@ -104,4 +106,6 @@ aj.captcha.6205=verify请求次数超限。
assembly.config.import.orderIds.notEmpty=订单号列表不能为空
assembly.config.import.orderIds.size=订单号列表长度不能超过100
assembly.config.save.id.notNull=装备设置编号不能为空
assembly.config.save.structure.config.notNull=装备设置结构配置不能为空
assembly.config.save.structure.config.notNull=装备设置结构配置不能为空
common.status.invalid=状态不合法
@@ -26,6 +26,7 @@ invoice.title.save.email.notNull=郵箱不能為空
invoice.title.save.email.size=郵箱長度不能超過 64 個字元
invoice.title.save.fixedPhone.size=註冊固定電話長度不能超過 20 個字元
invoice.title.save.issueType.notNull=開具類型不能為空
invoice.title.save.invoiceType.notNull=發票類型不能爲空
invoice.title.save.registeredAddress.size=註冊場所地址長度不能超過 64 個字元
invoice.title.save.taxNumber.size=統一社會信用代碼長度不能超過 18 個字元
invoice.title.save.title.notBlank=發票抬頭不能為空
@@ -38,6 +39,7 @@ page.pageNo.notNull=頁碼不能為空
page.pageSize.max=每頁條數最大值為 100
page.pageSize.min=每頁條數最小值為 -1
page.pageSize.notNull=每頁條數不能為空
product.delay.duration.field=延期時長
product.delay.page.operator.size=操作人長度不能超過 64 個字元
product.delay.page.productName.size=產品名稱長度不能超過 64 個字元
product.delay.save.duration.notNull=延期時長不能為空
@@ -91,7 +93,6 @@ pay.product.productChannelCode.notNull=產品支付渠道編碼不能為空
pay.product.productDetailsId.notNull=產品定價規則編號不能為空
pay.product.productId.notNull=產品 ID 不能為空
aj.captcha.6110=驗證碼已失效,請重新獲取。
aj.captcha.6111=驗證失敗。
aj.captcha.6112=獲取驗證碼失敗,請聯繫管理員。
@@ -105,4 +106,6 @@ aj.captcha.6205=verify 請求次數超限。
assembly.config.import.orderIds.notEmpty=訂單號清單不能為空
assembly.config.import.orderIds.size=訂單號清單長度不能超過100
assembly.config.save.id.notNull=裝備設定編號不能為空
assembly.config.save.structure.config.notNull=裝備設定結構配寘不能為空
assembly.config.save.structure.config.notNull=裝備設定結構配寘不能為空
common.status.invalid=狀態不合法
@@ -26,6 +26,7 @@ invoice.title.save.email.notNull=Email cannot be empty
invoice.title.save.email.size=Email length cannot exceed 64 characters
invoice.title.save.fixedPhone.size=Fixed phone number length cannot exceed 20 characters
invoice.title.save.issueType.notNull=Issue type cannot be empty
invoice.title.save.invoiceType.notNull=Invoice type cannot be empty
invoice.title.save.registeredAddress.size=Registered address length cannot exceed 64 characters
invoice.title.save.taxNumber.size=Tax identification number length cannot exceed 18 characters
invoice.title.save.title.notBlank=Invoice title cannot be empty
@@ -38,6 +39,7 @@ page.pageNo.notNull=Page number cannot be empty
page.pageSize.max=Page size cannot exceed 100
page.pageSize.min=Page size must be at least -1
page.pageSize.notNull=Page size cannot be empty
product.delay.duration.field=Delay duration
product.delay.page.operator.size=Operator length cannot exceed 64 characters
product.delay.page.productName.size=Product name length cannot exceed 64 characters
product.delay.save.duration.notNull=Delay duration cannot be empty
@@ -104,4 +106,6 @@ aj.captcha.6205=VERIFY request limit exceeded!
assembly.config.import.orderIds.notEmpty=The production order number list cannot be empty
assembly.config.import.orderIds.size=The length of the production order number list cannot exceed 100
assembly.config.save.id.notNull=Assembly setting number cannot be empty
assembly.config.save.structure.config.notNull=Assembly setting structure configuration cannot be empty
assembly.config.save.structure.config.notNull=Assembly setting structure configuration cannot be empty
common.status.invalid=The status is illegal