From 3be53feb11376a242e6a801c8e92b913c145188b Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Tue, 9 Dec 2025 14:06:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=A7=E5=93=81=E5=BB=B6=E6=9C=9F=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../framework/test/core/util/RandomUtils.java | 10 +- .../system/enums/ErrorCodeConstants.java | 1 + .../funds/delay/ProductDelayServiceImpl.java | 39 +- .../resources/message_errorcode.properties | 2 +- .../message_errorcode_cht.properties | 2 +- .../resources/message_errorcode_en.properties | 2 +- .../delay/ProductDelayServiceImplTest.java | 492 ++++++++++++++++++ .../src/test/resources/sql/clean.sql | 4 +- .../src/test/resources/sql/create_tables.sql | 56 ++ 9 files changed, 579 insertions(+), 29 deletions(-) create mode 100644 cf-module-system/cf-module-system-biz/src/test/java/com/cf/imes/module/system/service/funds/delay/ProductDelayServiceImplTest.java diff --git a/cf-framework/cf-spring-boot-starter-test/src/main/java/com/cf/imes/framework/test/core/util/RandomUtils.java b/cf-framework/cf-spring-boot-starter-test/src/main/java/com/cf/imes/framework/test/core/util/RandomUtils.java index f4e7d206e..a8ba8883a 100644 --- a/cf-framework/cf-spring-boot-starter-test/src/main/java/com/cf/imes/framework/test/core/util/RandomUtils.java +++ b/cf-framework/cf-spring-boot-starter-test/src/main/java/com/cf/imes/framework/test/core/util/RandomUtils.java @@ -12,6 +12,7 @@ import uk.co.jemos.podam.api.PodamFactoryImpl; import uk.co.jemos.podam.api.RandomDataProviderStrategy; import java.lang.reflect.Type; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Arrays; import java.util.Date; @@ -50,7 +51,7 @@ public class RandomUtils { } // 如果是 type、status 结尾的字段,返回 tinyint 范围 if (CharSequenceUtil.endWithAnyIgnoreCase(attributeMetadata.getAttributeName(), - "type", "status", "category", "scope", "result", "sort")) { + "type", "status", "category", "scope", "result", "sort", "unit")) { return RandomUtil.randomInt(0, TINYINT_MAX + 1); } return RandomUtil.randomInt(); @@ -66,6 +67,9 @@ public class RandomUtils { } return RandomUtil.randomBoolean(); }); + // BigDecimal + PODAM_FACTORY.getStrategy().addOrReplaceTypeManufacturer(BigDecimal.class, + (dataProviderStrategy, attributeMetadata, map) -> randomBigDecimal()); ((RandomDataProviderStrategy) PODAM_FACTORY.getStrategy()).addOrReplaceAttributeStrategy(NumberValid.class, new NumberValidStrategy()); } @@ -81,6 +85,10 @@ public class RandomUtils { return RandomUtil.randomInt(0, Integer.MAX_VALUE); } + public static BigDecimal randomBigDecimal() { + return RandomUtil.randomBigDecimal(BigDecimal.ZERO, BigDecimal.TEN); + } + public static Date randomDate() { return RandomUtil.randomDay(0, RANDOM_DATE_MAX); } diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java index a92f546f7..2e03cd836 100644 --- a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java @@ -364,4 +364,5 @@ public class ErrorCodeConstants { //=========== 产品延期管理 1-002-049-000 ============ public static final ErrorCode PRODUCT_PURCHASE_NO_EXIST = new ErrorCode(1_002_049_001, "product_purchase.no_exist"); public static final ErrorCode PRODUCT_PURCHASE_ENDTIME_BEFORE_DELAYTIME_ERROR = new ErrorCode(1_002_049_002, "product_purchase.endtime_before_delaytime_error"); + public static final ErrorCode PRODUCT_DELAY_UNIT_NOT_SUPPORT = new ErrorCode(1_002_049_003, "product.delay_duration_unit_not_support"); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/delay/ProductDelayServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/delay/ProductDelayServiceImpl.java index 01689ceb0..5a65672fd 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/delay/ProductDelayServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/delay/ProductDelayServiceImpl.java @@ -1,10 +1,10 @@ package com.cf.imes.module.system.service.funds.delay; import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.cf.imes.framework.common.exception.ServiceException; import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.framework.common.util.Assert.AssertUtils; import com.cf.imes.framework.common.util.object.BeanUtils; @@ -29,7 +29,9 @@ import org.springframework.stereotype.Service; import java.time.LocalDate; import java.util.List; +import java.util.Objects; +import static com.cf.imes.module.system.enums.ErrorCodeConstants.PRODUCT_DELAY_UNIT_NOT_SUPPORT; import static com.cf.imes.module.system.enums.ErrorCodeConstants.PRODUCT_PURCHASE_NO_EXIST; /** @@ -120,11 +122,7 @@ public class ProductDelayServiceImpl implements ProductDelayService { * @return */ private static LocalDate calculateEndTime(LocalDate startTime, Integer duration, Integer durationUnit) { - if (ObjectUtil.isNotNull(duration) && ObjectUtil.isNotNull(durationUnit)) { - startTime = addTime(startTime, duration, durationUnit); - } - - return startTime; + return addTime(startTime, duration, durationUnit); } /** @@ -136,15 +134,15 @@ public class ProductDelayServiceImpl implements ProductDelayService { * @return */ private static LocalDate addTime(LocalDate time, int duration, int unit) { - switch (DurationUnitEnum.fromStatus(unit)) { - case YEAR: - return time.plusYears(duration); - case MONTH: - return time.plusMonths(duration); - case DAY: - return time.plusDays(duration); - default: - return time; + DurationUnitEnum e = DurationUnitEnum.fromStatus(unit); + if (Objects.equals(e, DurationUnitEnum.YEAR)) { + return time.plusYears(duration); + } else if (Objects.equals(e, DurationUnitEnum.MONTH)) { + return time.plusMonths(duration); + } else if (Objects.equals(e, DurationUnitEnum.DAY)) { + return time.plusDays(duration); + } else { + throw new ServiceException(PRODUCT_DELAY_UNIT_NOT_SUPPORT); } } @@ -172,8 +170,7 @@ public class ProductDelayServiceImpl implements ProductDelayService { .eq(PurchaseRecordDO::getStatus, PurchaseRecordStatusEnum.ACTIVE.getStatus()) .eq(PurchaseRecordDO::getDeleted, false) ); - List resultList; - if(ObjectUtil.isNotNull(purchaseRecordDO)) { + if (ObjectUtil.isNotNull(purchaseRecordDO)) { previouProductDelayRespVO.setPreviouPurchaseRecord(purchaseRecordDO); List recordDOS = productDelayRecordMapper.selectList(new LambdaQueryWrapper() .eq(ProductDelayRecordDO::getProductId, productId) @@ -182,19 +179,13 @@ public class ProductDelayServiceImpl implements ProductDelayService { .eq(ProductDelayRecordDO::getDeleted, false) .select(ProductDelayRecordDO::getDelayDuration, ProductDelayRecordDO::getDelayDurationUnit, ProductDelayRecordDO::getDelayTime, ProductDelayRecordDO::getEndTime, ProductDelayRecordDO::getId) ); - if(CollUtil.isNotEmpty(recordDOS)) { - resultList = BeanUtil.copyToList(recordDOS, ProductDelayRespVO.class); - previouProductDelayRespVO.setDelayRespVOList(resultList); - } + previouProductDelayRespVO.setDelayRespVOList(BeanUtil.copyToList(recordDOS, ProductDelayRespVO.class)); } return previouProductDelayRespVO; } @Override public void updatePurchaseDelayRecordsPaidAndRemark(List list, Long organId, Boolean paid) { - if (CollUtil.isEmpty(list)) { - return; - } for (ProductDelayRecordDO recordDO : list) { productDelayRecordMapper.update(new LambdaUpdateWrapperX() .eq(ProductDelayRecordDO::getId, recordDO.getId()) diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/message_errorcode.properties b/cf-module-system/cf-module-system-biz/src/main/resources/message_errorcode.properties index 84a416dd0..236b83109 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/message_errorcode.properties +++ b/cf-module-system/cf-module-system-biz/src/main/resources/message_errorcode.properties @@ -1 +1 @@ -auth.login.bad_credentials=登录失败,账号密码不正确 auth.login.user_disabled=登录失败,账号被禁用 auth.login.captcha_code_error=验证码不正确,原因:{0} auth.login.third_not_bind=未绑定账号,需要进行绑定 auth.mobile.not_exists=手机号不存在 auth.mobile.no_change=手机号未发生改变,无需修改 auth.manage_endpoint.login_permission_error=登录失败,管理端账号不存在 menu.name.duplicate=已经存在该名字的菜单 menu.parent.not_exists=父菜单不存在 menu.parent.error=不能设置自己为父菜单 menu.not_exists=菜单不存在 menu.exists_children=存在子菜单,无法删除 menu.parent.not_dir_or_menu=父菜单的类型必须是目录或者菜单 menu.operation_permission_error=管理端菜单操作权限不足 menu.trans_error=菜单翻译异常,error_code :{0} role.not_exists=角色不存在 role.name.duplicate=已经存在名为[{0}]的角色 role.code.duplicate=已经存在编码为[{0}]的角色 role.can_not_update_system_type=不能操作类型为系统内置的角色 role.is_disable=名字为[{0}]的角色已被禁用 role.admin_code_error=编码[{0}]不能使用 role.me_error=不可为自身分配角色 role.not_superadmin_no_organ_id_oper_error=非超管分配权限 role.buildin.modify_permission_error=修改内置角色下菜单权限的权限不足 role.self.modify_permission_error=无法修改自身的角色菜单权限 role.self.modify_error=无法修改自身的角色 user.username.exists=手机号已经存在 user.mobile.exists=手机号已经存在 user.email.exists=邮箱已经存在 user.not_exists=用户不存在 user.import.empty=导入用户数据不能为空! user.password.failed=用户密码校验失败 user.is_disable=名字为[{0}]的用户已被禁用 user.count.max=超过组织用户配额({0}),创建用户失败! user.me.error=不允许操作用户自身 user.password.length_at_least_8=密码长度不少于8位,且包含大小写字母、数字和特殊字符 user.username.multiple_error=存在[{0}]重复用户,请联系系统管理员 user.operate_self_status_error=不允许操作用户自身状态 user.mobile_update_not_allow=该用户已通过手机号认证,如需修改手机号请前往个人中心 dept.name.duplicate=已经存在该名字的部门 dept.parent.not_exists=父级部门不存在 dept.not_found=当前部门不存在 dept.exists_children=存在子部门,无法删除 dept.parent.error=不能设置自己为父部门 dept.exists_user=部门中存在员工,无法删除 dept.parent_is_child=不能设置自己的子部门为父部门 dept.user_oper_not_allow=不允许操作用户自身部门 dept.parent_user_oper_not_allow=不允许操作用户自身部门及其上级部门 dept.disable=部门({0})已被禁用 dept.not_allowed_login=部门({0})已被禁用,无法登录 dept.parent_disable=上级部门({0})已被禁用,请开启后操作或选择其他上级部门 dict_type.not_exists=当前字典类型不存在 dict_type.not_enable=字典类型处于关闭状态,不允许新增或编辑 dict_type.name.duplicate=已经存在该名字的字典类型 dict_type.type.duplicate=已经存在该类型的字典类型 dict_type.has_children=无法删除,该字典类型还有字典数据 dict_data.not_exists=当前字典数据不存在 dict_data.not_enable=字典数据({0})不处于开启状态,不允许选择 dict_data.value.duplicate=已经存在该值的字典数据 dict_data.trans_error=字典数据标签翻译异常,error_code :{0} notice.not_found=当前通知公告不存在 notice.name_unique_error=公告标题已存在,请编辑后重试 notice.buildin.modify_permission_error=内置通知公告编辑权限不足 sms.channel.not_exists=短信渠道不存在 sms.template.not_exists=短信模板不存在 sms.template.code.duplicate=已经存在编码为[{0}]的短信模板 sms.template.api_error=短信 API 模板调用失败,原因是:{0} sms.template.api.audit_checking=短信 API 模版无法使用,原因:审批中 sms.template.api.audit_fail=短信 API 模版无法使用,原因:审批不通过,{0} sms.template.api.not_found=短信 API 模版无法使用,原因:模版不存在 sms.send.mobile.not_exists=手机号不存在 sms.send.mobile.template_param_miss=短信模板参数({0})缺失 sms.send.template.not_exists=短信模板不存在 sms.code.not_found=验证码不存在,请点击获取 sms.code.not_correct=验证码不正确 sms.code.send_too_fast=短信发送过于频率 sms.code.is_valid=验证码在有效期内,5分钟内请勿重复发送! organ.not_exists=组织不存在 organ.disable=[{0}]组织已被禁用 organ.expire=[{0}]组织已过期 organ.can_not_update_system=系统组织不能进行修改、删除等操作! organ.name.duplicate=名字为[{0}]的组织已存在 organ.website.duplicate=域名为[{0}]的组织已存在 organ.data_code.not_exists=组织未配置数据源标识 organ.already_exists=该新增组织已授权机台数量无需重复新增! organ.user_oper.not_allow=不允许操作用户自身组织 organ.contact_mobile.duplicate=手机号为[{0}]的组织已存在 organ.expiretime.product_id_lack=请选择要购买的产品 notify.template.not.exists=站内信模版不存在 notify.template.code.duplicate=已经存在编码为[{}]的站内信模板 notify.send.template.param.miss=站内信模板参数({})缺失 machine.not.exists=机台不存在 machine.template.not.exists=机台模板不存在 default.template.count=默认模板数量异常 the.current.machine.is.already.in.use=当前机台已使用,禁止删除 machine.error=当前机台错误,请重新选择机台 the.current.brand.of.the.machine.exists=当前机台配置的模板中,该品牌已存在,请重新输入品牌名称 the.model.of.the.machine.does.not.exist=该型号的机台模板不存在,请进行配置 the.current.brand=品牌ID错误,或品牌不存在 machine.num.error=当前组织该类型的机台创建已达到最大值,无法继续创建 machine.name.error=当前机台名称已存在,请重新输入机台名称 machinetemplate.name.error=当前机台模板的名称已存在,请重新输入机台模板名称 labelingmachine.related.data.error=当前机台关联的贴标机数据有误,请在高级配置中重新配置贴标机或选择其他模板 drillmachine.related.data.error=当前机台关联的钻孔机数据有误,请在钻孔模块中重新配置钻孔机或选择其他模板 machine.data.error=当前组织还未进行机台授权,请联系组织管理员在基础管理里对当前组织进行机台授权,或联系客服进行授权 machine.num.data.error=组织授权的机台数量不能超过127台 machine.used.already=当前机台在加工方案组中已使用,无法删除 label.template.not.exists=标签模板不存在 label.not.exists=标签不存在 default.label.not.exists=该类型标签默认模板不存在 machine.use.label=当前标签已有机台使用,无法删除 default.not.deleted=默认标签模板无法删除 label.is.use.error=当前标签打包设置中已有用户使用,无法删除 data.source.not.exists=系统数据源不存在 order.parts.import.list.is.empty=生产配件导入数据不可以为空 remain.plate.status.used=余料板正在使用中,禁止修改 remain.plate.status.no.used=余料板未使用 remain.plate.usr.type=余料板使用类型为不可核销类型 remain.plate.id.not.exists=未选中余料板,请选择余料板 remain.plate.count.max=每次新增余料板数量,最大为999 currently.no.configuration.available=当前没有{0}配置信息,请前往设置配置 system.config.not_exists=系统配置不存在 system.config.type_not_support=不支持的系统配置类型 system.config.custom_plate_no.rule_save_format_error=自定义板编号配置:自定义板编号保存格式错误,请检查配置规则 system.config.custom_plate_no.rule_reset_not_support=自定义板编号配置:该规则不支持手动复位/清零 system.config.custom_plate_no.rule_item_not_found=自定义板编号配置:找不到对应的规则项进行手动复位/清零 system.config.custom_plate_no.rule_order_reset_failed=自定义板编号配置:手动复位/清零生产单下序号失败,请联系客服 custom.plate_no.rule.code_empty=规则编码不能为空 custom.plate_no.rule.code_not_match=规则编码[{0}]不合法,请检查配置规则 custom.plate_no.rule.date_format_error=时间格式[{0}]不合法,请检查配置规则 custom.plate_no.rule.custom_value_empty=自定义字符值不能为空,请检查配置规则 custom.plate_no.rule.reset_mode_error=规则[{0}]复位/清零模式不合法,请检查配置规则 custom.plate_no.rule.int_type_empty={0} 下的 {1} 不能为空,请检查配置规则 custom.plate_no.rule.int_type_convert_error={0} 下的数值类型参数 {1}:{2} 转换异常,请检查配置规则 custom.plate_no.rule.bool_type_convert_error={0} 下的布尔类型参数 {1}:{2} 转换异常,请检查配置规则 process.scheme.data_empty=加工方案组的:{0} 为空,无法保存,请进行配置 process.scheme.config.data_empty=加工方案组的:{0} 为空,请检查配置信息 process.scheme.config.field_error=当前方案组的配置异常,请重新配置 process.scheme.config.in_use=当前方案组已在排单中使用,无法删除 process.scheme.config.machine_label_empty=当前方案组对应的解析器的机台的标签数据为空,请检查机台的标签配置信息 config.data_error=当前系统配置的数据有误,请重新尝试排序 process.config.used_already=当前加工分线配置在加工方案组中已使用,无法删除 optimization.config.used_already=当前数据处理配置在加工方案组中已使用,无法删除 sealedge.config.item_empty=第 {0} 条配置中,有字段值为空,请添加数据 sealedge.config.max_value_error=第 {0} 条配置中,{1} 要大于等于 {2},请修改数据 sealedge.config.data_error=当前封边条配置有误,请重新检查后新增 sealedge.config.name_exists=当前配置的名称已存在,请重新命名 sealedge.config.decimal_places_max_three=第 {0} 条配置中,小数位数最大为 3 位,请进行修改 sealedge.config.min_value_gt_zero=第 {0} 条配置中,宽最小值:{1} 要大于 0,请修改数据 sealedge.config.max_value_gt_zero=第 {0} 条配置中,宽最大值:{1} 要大于 0,请修改数据 sealedge.config.value_range_error=第 {0} 条配置中,宽最大值 要大于 宽最小值,请修改数据 token.app_type.exist=当前应用以存在token配置,无法继续新增 token.config.not_exists=当前应用的token配置不存在 token.time.is_expires=当前token已过期,请重新配置或延长时间 token.app_type.no_update=应用名称不允许更改 token.data.is_null=当前token的配置为空,无需删除 token.expires_time.is_null=当前未选择有效时间,请选择再进行新增 token.expires_time.data_error=当前选择的有效时间已过期,请增加有效时间 token.insert.data_error=token新增失败,请重新尝试 invoice.no_exist=当前发票记录有误,请重新查看 invoicing.reject_reason=请填写拒绝开票原因 purchase_record.no_exist=当前发票对应的购买记录有误,请退回组织后重新申请开票 invoice.is_fail=当前发票已开票,无法再次进行开票 products.is_exist=产品[{0}]已存在,请修改产品名称后再次操作 products.no_delete=当前产品已上架,无法删除,请下架后再删除 products.no_update=当前产品已上架,无法进行修改 products.detail.no_update=定价规则对应的产品已上架,无法进行修改 advertisement.time_error=投放时间错误,结束时间应大于开始时间 advertisement.name.is_exist=当前广告名称已存在,请重新命名 advertisement.no_delete=当前广告已经发布,无法删除,请结束发布后再删除 product_promotion.active.name.is_exist=当前优惠活动名称已存在,请修改 product_promotion.purchaseduration.is_exist=当前所选产品下{0}{1}购买时长的优惠活动已存在,请修改 invoice_title.not_exists=发票抬头不存在,请先创建发票抬头 org_invoice.purchase_record.update_num.not_match=当前勾选的购买记录中部分可能已开票,请查询后重新勾选提交开票 org_invoice.agree_file.null=确认开票发票附件不能为空,请上传后再提交 invoice_title.org.exists=组织下已存在发票抬头,请刷新后编辑抬头内容 invoice_title.taxpayerid.exists=统一社会信用代码已存在,请检查 products.not_nolist=当前产品未上架 org_product.purchase.lock=组织下存在购买中的产品操作,请稍后再试 invoice_title.enterprise.taxnumber.empty=企业统一信用代码不能为空 invoice.amount.zero=可开票金额为0,请检查购买记录 invoice.apply.uninvoiceable.exist=当前提交记录中存在不可开票记录,请刷新列表后重新选择提交 pay.channel_not_support=暂不支持的支付渠道,请使用其他支付渠道 pay.order_not_exist=支付订单不存在,支付编号[{0}],请重新发起支付 pay.order_channel_query_not_exist=如果您已确认扫码支付,请稍后刷新页面,支付平台可能存在延迟到账 pay.order_notify_data_parse_error=解析支付回调数据异常 pay.order_status_is_not_waiting=支付订单不处于待支付 pay.order_submit_channel_error=发起渠道支付异常,请联系客服 pay.notify_passback_tradetype_not_support_error=不支持的支付回调tradeType:[{0}],请检查支付渠道 product.no_exist=当前产品不存在 product.detail_no_exist=当前产品的规则不存在 product.detail_duration_exist=当前产品下已存在产品时长[{0}/{1}]的定价规则,请修改后重新操作 product.promotion_no_exist=当前优惠活动不存在 product.detail_duration_unit_not_support=不支持的时长单位,请检查该定价规则的时长单位 org.product_purchase_wait_pay_error=组织下存在当前产品的待支付记录,请确认或取消支付后再次发起软件购买 product.price_null_error=产品建议价格为空,请联系客服 org.product_purchase_not_exist_error=组织订购记录不存在,请检查数据 org.product_purchase_exist_error=组织[{0}]订购记录已存在,请勿重复定义订购机构 advertisement.no_exist=广告不存在 advertisement.status_endtime_expired=当前广告投放结束时间已超期,请重新发布选择投放时间或重新编辑投放时间 advertisement.image_empty_error=广告图片文件为空,请重新上传 advertisement.image_upload_fail=广告图片上传失败,请稍后再试 advertisement.update_status_error=当前广告已经发布,若要编辑请先结束发布 parser.no_exist=当前解析器不存在,请重新选择 parser.template_no_exist=当前解析器模板不存在,请重新选择 product_purchase.no_exist=当前购买记录不存在,请检查 product_purchase.endtime_before_delaytime_error=当前产品订购有效期{0}未超过当前日期,请调整订购时长 \ No newline at end of file +auth.login.bad_credentials=登录失败,账号密码不正确 auth.login.user_disabled=登录失败,账号被禁用 auth.login.captcha_code_error=验证码不正确,原因:{0} auth.login.third_not_bind=未绑定账号,需要进行绑定 auth.mobile.not_exists=手机号不存在 auth.mobile.no_change=手机号未发生改变,无需修改 auth.manage_endpoint.login_permission_error=登录失败,管理端账号不存在 menu.name.duplicate=已经存在该名字的菜单 menu.parent.not_exists=父菜单不存在 menu.parent.error=不能设置自己为父菜单 menu.not_exists=菜单不存在 menu.exists_children=存在子菜单,无法删除 menu.parent.not_dir_or_menu=父菜单的类型必须是目录或者菜单 menu.operation_permission_error=管理端菜单操作权限不足 menu.trans_error=菜单翻译异常,error_code :{0} role.not_exists=角色不存在 role.name.duplicate=已经存在名为[{0}]的角色 role.code.duplicate=已经存在编码为[{0}]的角色 role.can_not_update_system_type=不能操作类型为系统内置的角色 role.is_disable=名字为[{0}]的角色已被禁用 role.admin_code_error=编码[{0}]不能使用 role.me_error=不可为自身分配角色 role.not_superadmin_no_organ_id_oper_error=非超管分配权限 role.buildin.modify_permission_error=修改内置角色下菜单权限的权限不足 role.self.modify_permission_error=无法修改自身的角色菜单权限 role.self.modify_error=无法修改自身的角色 user.username.exists=手机号已经存在 user.mobile.exists=手机号已经存在 user.email.exists=邮箱已经存在 user.not_exists=用户不存在 user.import.empty=导入用户数据不能为空! user.password.failed=用户密码校验失败 user.is_disable=名字为[{0}]的用户已被禁用 user.count.max=超过组织用户配额({0}),创建用户失败! user.me.error=不允许操作用户自身 user.password.length_at_least_8=密码长度不少于8位,且包含大小写字母、数字和特殊字符 user.username.multiple_error=存在[{0}]重复用户,请联系系统管理员 user.operate_self_status_error=不允许操作用户自身状态 user.mobile_update_not_allow=该用户已通过手机号认证,如需修改手机号请前往个人中心 dept.name.duplicate=已经存在该名字的部门 dept.parent.not_exists=父级部门不存在 dept.not_found=当前部门不存在 dept.exists_children=存在子部门,无法删除 dept.parent.error=不能设置自己为父部门 dept.exists_user=部门中存在员工,无法删除 dept.parent_is_child=不能设置自己的子部门为父部门 dept.user_oper_not_allow=不允许操作用户自身部门 dept.parent_user_oper_not_allow=不允许操作用户自身部门及其上级部门 dept.disable=部门({0})已被禁用 dept.not_allowed_login=部门({0})已被禁用,无法登录 dept.parent_disable=上级部门({0})已被禁用,请开启后操作或选择其他上级部门 dict_type.not_exists=当前字典类型不存在 dict_type.not_enable=字典类型处于关闭状态,不允许新增或编辑 dict_type.name.duplicate=已经存在该名字的字典类型 dict_type.type.duplicate=已经存在该类型的字典类型 dict_type.has_children=无法删除,该字典类型还有字典数据 dict_data.not_exists=当前字典数据不存在 dict_data.not_enable=字典数据({0})不处于开启状态,不允许选择 dict_data.value.duplicate=已经存在该值的字典数据 dict_data.trans_error=字典数据标签翻译异常,error_code :{0} notice.not_found=当前通知公告不存在 notice.name_unique_error=公告标题已存在,请编辑后重试 notice.buildin.modify_permission_error=内置通知公告编辑权限不足 sms.channel.not_exists=短信渠道不存在 sms.template.not_exists=短信模板不存在 sms.template.code.duplicate=已经存在编码为[{0}]的短信模板 sms.template.api_error=短信 API 模板调用失败,原因是:{0} sms.template.api.audit_checking=短信 API 模版无法使用,原因:审批中 sms.template.api.audit_fail=短信 API 模版无法使用,原因:审批不通过,{0} sms.template.api.not_found=短信 API 模版无法使用,原因:模版不存在 sms.send.mobile.not_exists=手机号不存在 sms.send.mobile.template_param_miss=短信模板参数({0})缺失 sms.send.template.not_exists=短信模板不存在 sms.code.not_found=验证码不存在,请点击获取 sms.code.not_correct=验证码不正确 sms.code.send_too_fast=短信发送过于频率 sms.code.is_valid=验证码在有效期内,5分钟内请勿重复发送! organ.not_exists=组织不存在 organ.disable=[{0}]组织已被禁用 organ.expire=[{0}]组织已过期 organ.can_not_update_system=系统组织不能进行修改、删除等操作! organ.name.duplicate=名字为[{0}]的组织已存在 organ.website.duplicate=域名为[{0}]的组织已存在 organ.data_code.not_exists=组织未配置数据源标识 organ.already_exists=该新增组织已授权机台数量无需重复新增! organ.user_oper.not_allow=不允许操作用户自身组织 organ.contact_mobile.duplicate=手机号为[{0}]的组织已存在 organ.expiretime.product_id_lack=请选择要购买的产品 notify.template.not.exists=站内信模版不存在 notify.template.code.duplicate=已经存在编码为[{}]的站内信模板 notify.send.template.param.miss=站内信模板参数({})缺失 machine.not.exists=机台不存在 machine.template.not.exists=机台模板不存在 default.template.count=默认模板数量异常 the.current.machine.is.already.in.use=当前机台已使用,禁止删除 machine.error=当前机台错误,请重新选择机台 the.current.brand.of.the.machine.exists=当前机台配置的模板中,该品牌已存在,请重新输入品牌名称 the.model.of.the.machine.does.not.exist=该型号的机台模板不存在,请进行配置 the.current.brand=品牌ID错误,或品牌不存在 machine.num.error=当前组织该类型的机台创建已达到最大值,无法继续创建 machine.name.error=当前机台名称已存在,请重新输入机台名称 machinetemplate.name.error=当前机台模板的名称已存在,请重新输入机台模板名称 labelingmachine.related.data.error=当前机台关联的贴标机数据有误,请在高级配置中重新配置贴标机或选择其他模板 drillmachine.related.data.error=当前机台关联的钻孔机数据有误,请在钻孔模块中重新配置钻孔机或选择其他模板 machine.data.error=当前组织还未进行机台授权,请联系组织管理员在基础管理里对当前组织进行机台授权,或联系客服进行授权 machine.num.data.error=组织授权的机台数量不能超过127台 machine.used.already=当前机台在加工方案组中已使用,无法删除 label.template.not.exists=标签模板不存在 label.not.exists=标签不存在 default.label.not.exists=该类型标签默认模板不存在 machine.use.label=当前标签已有机台使用,无法删除 default.not.deleted=默认标签模板无法删除 label.is.use.error=当前标签打包设置中已有用户使用,无法删除 data.source.not.exists=系统数据源不存在 order.parts.import.list.is.empty=生产配件导入数据不可以为空 remain.plate.status.used=余料板正在使用中,禁止修改 remain.plate.status.no.used=余料板未使用 remain.plate.usr.type=余料板使用类型为不可核销类型 remain.plate.id.not.exists=未选中余料板,请选择余料板 remain.plate.count.max=每次新增余料板数量,最大为999 currently.no.configuration.available=当前没有{0}配置信息,请前往设置配置 system.config.not_exists=系统配置不存在 system.config.type_not_support=不支持的系统配置类型 system.config.custom_plate_no.rule_save_format_error=自定义板编号配置:自定义板编号保存格式错误,请检查配置规则 system.config.custom_plate_no.rule_reset_not_support=自定义板编号配置:该规则不支持手动复位/清零 system.config.custom_plate_no.rule_item_not_found=自定义板编号配置:找不到对应的规则项进行手动复位/清零 system.config.custom_plate_no.rule_order_reset_failed=自定义板编号配置:手动复位/清零生产单下序号失败,请联系客服 custom.plate_no.rule.code_empty=规则编码不能为空 custom.plate_no.rule.code_not_match=规则编码[{0}]不合法,请检查配置规则 custom.plate_no.rule.date_format_error=时间格式[{0}]不合法,请检查配置规则 custom.plate_no.rule.custom_value_empty=自定义字符值不能为空,请检查配置规则 custom.plate_no.rule.reset_mode_error=规则[{0}]复位/清零模式不合法,请检查配置规则 custom.plate_no.rule.int_type_empty={0} 下的 {1} 不能为空,请检查配置规则 custom.plate_no.rule.int_type_convert_error={0} 下的数值类型参数 {1}:{2} 转换异常,请检查配置规则 custom.plate_no.rule.bool_type_convert_error={0} 下的布尔类型参数 {1}:{2} 转换异常,请检查配置规则 process.scheme.data_empty=加工方案组的:{0} 为空,无法保存,请进行配置 process.scheme.config.data_empty=加工方案组的:{0} 为空,请检查配置信息 process.scheme.config.field_error=当前方案组的配置异常,请重新配置 process.scheme.config.in_use=当前方案组已在排单中使用,无法删除 process.scheme.config.machine_label_empty=当前方案组对应的解析器的机台的标签数据为空,请检查机台的标签配置信息 config.data_error=当前系统配置的数据有误,请重新尝试排序 process.config.used_already=当前加工分线配置在加工方案组中已使用,无法删除 optimization.config.used_already=当前数据处理配置在加工方案组中已使用,无法删除 sealedge.config.item_empty=第 {0} 条配置中,有字段值为空,请添加数据 sealedge.config.max_value_error=第 {0} 条配置中,{1} 要大于等于 {2},请修改数据 sealedge.config.data_error=当前封边条配置有误,请重新检查后新增 sealedge.config.name_exists=当前配置的名称已存在,请重新命名 sealedge.config.decimal_places_max_three=第 {0} 条配置中,小数位数最大为 3 位,请进行修改 sealedge.config.min_value_gt_zero=第 {0} 条配置中,宽最小值:{1} 要大于 0,请修改数据 sealedge.config.max_value_gt_zero=第 {0} 条配置中,宽最大值:{1} 要大于 0,请修改数据 sealedge.config.value_range_error=第 {0} 条配置中,宽最大值 要大于 宽最小值,请修改数据 token.app_type.exist=当前应用以存在token配置,无法继续新增 token.config.not_exists=当前应用的token配置不存在 token.time.is_expires=当前token已过期,请重新配置或延长时间 token.app_type.no_update=应用名称不允许更改 token.data.is_null=当前token的配置为空,无需删除 token.expires_time.is_null=当前未选择有效时间,请选择再进行新增 token.expires_time.data_error=当前选择的有效时间已过期,请增加有效时间 token.insert.data_error=token新增失败,请重新尝试 invoice.no_exist=当前发票记录有误,请重新查看 invoicing.reject_reason=请填写拒绝开票原因 purchase_record.no_exist=当前发票对应的购买记录有误,请退回组织后重新申请开票 invoice.is_fail=当前发票已开票,无法再次进行开票 products.is_exist=产品[{0}]已存在,请修改产品名称后再次操作 products.no_delete=当前产品已上架,无法删除,请下架后再删除 products.no_update=当前产品已上架,无法进行修改 products.detail.no_update=定价规则对应的产品已上架,无法进行修改 advertisement.time_error=投放时间错误,结束时间应大于开始时间 advertisement.name.is_exist=当前广告名称已存在,请重新命名 advertisement.no_delete=当前广告已经发布,无法删除,请结束发布后再删除 product_promotion.active.name.is_exist=当前优惠活动名称已存在,请修改 product_promotion.purchaseduration.is_exist=当前所选产品下{0}{1}购买时长的优惠活动已存在,请修改 invoice_title.not_exists=发票抬头不存在,请先创建发票抬头 org_invoice.purchase_record.update_num.not_match=当前勾选的购买记录中部分可能已开票,请查询后重新勾选提交开票 org_invoice.agree_file.null=确认开票发票附件不能为空,请上传后再提交 invoice_title.org.exists=组织下已存在发票抬头,请刷新后编辑抬头内容 invoice_title.taxpayerid.exists=统一社会信用代码已存在,请检查 products.not_nolist=当前产品未上架 org_product.purchase.lock=组织下存在购买中的产品操作,请稍后再试 invoice_title.enterprise.taxnumber.empty=企业统一信用代码不能为空 invoice.amount.zero=可开票金额为0,请检查购买记录 invoice.apply.uninvoiceable.exist=当前提交记录中存在不可开票记录,请刷新列表后重新选择提交 pay.channel_not_support=暂不支持的支付渠道,请使用其他支付渠道 pay.order_not_exist=支付订单不存在,支付编号[{0}],请重新发起支付 pay.order_channel_query_not_exist=如果您已确认扫码支付,请稍后刷新页面,支付平台可能存在延迟到账 pay.order_notify_data_parse_error=解析支付回调数据异常 pay.order_status_is_not_waiting=支付订单不处于待支付 pay.order_submit_channel_error=发起渠道支付异常,请联系客服 pay.notify_passback_tradetype_not_support_error=不支持的支付回调tradeType:[{0}],请检查支付渠道 product.no_exist=当前产品不存在 product.detail_no_exist=当前产品的规则不存在 product.detail_duration_exist=当前产品下已存在产品时长[{0}/{1}]的定价规则,请修改后重新操作 product.promotion_no_exist=当前优惠活动不存在 product.detail_duration_unit_not_support=不支持的时长单位,请检查该定价规则的时长单位 org.product_purchase_wait_pay_error=组织下存在当前产品的待支付记录,请确认或取消支付后再次发起软件购买 product.price_null_error=产品建议价格为空,请联系客服 org.product_purchase_not_exist_error=组织订购记录不存在,请检查数据 org.product_purchase_exist_error=组织[{0}]订购记录已存在,请勿重复定义订购机构 advertisement.no_exist=广告不存在 advertisement.status_endtime_expired=当前广告投放结束时间已超期,请重新发布选择投放时间或重新编辑投放时间 advertisement.image_empty_error=广告图片文件为空,请重新上传 advertisement.image_upload_fail=广告图片上传失败,请稍后再试 advertisement.update_status_error=当前广告已经发布,若要编辑请先结束发布 parser.no_exist=当前解析器不存在,请重新选择 parser.template_no_exist=当前解析器模板不存在,请重新选择 product_purchase.no_exist=当前购买记录不存在,请检查 product_purchase.endtime_before_delaytime_error=当前产品订购有效期{0}未超过当前日期,请调整订购时长 product.delay_duration_unit_not_support=不支持的产品延期时长单位 \ No newline at end of file diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/message_errorcode_cht.properties b/cf-module-system/cf-module-system-biz/src/main/resources/message_errorcode_cht.properties index 72cbe711f..2f9a611ab 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/message_errorcode_cht.properties +++ b/cf-module-system/cf-module-system-biz/src/main/resources/message_errorcode_cht.properties @@ -1 +1 @@ -auth.login.bad_credentials=登入失敗,帳號或密碼不正確 auth.login.user_disabled=登入失敗,帳號已被停用 auth.login.captcha_code_error=驗證碼不正確,原因:{0} auth.login.third_not_bind=尚未綁定帳號,需要進行綁定 auth.mobile.not_exists=手機號碼不存在 auth.mobile.no_change=手機號碼未發生變更,無需修改 auth.manage_endpoint.login_permission_error=登入失敗,管理端帳號不存在 menu.name.duplicate=已存在相同名稱的選單 menu.parent.not_exists=父選單不存在 menu.parent.error=不能將自身設定為父選單 menu.not_exists=選單不存在 menu.exists_children=存在子選單,無法刪除 menu.parent.not_dir_or_menu=父選單的類型必須是目錄或選單 menu.operation_permission_error=管理端選單操作權限不足 menu.trans_error=選單翻譯異常,error_code:{0} role.not_exists=角色不存在 role.name.duplicate=已存在名稱為[{0}]的角色 role.code.duplicate=已存在編碼為[{0}]的角色 role.can_not_update_system_type=不能操作系統內建的角色 role.is_disable=名稱為[{0}]的角色已被停用 role.admin_code_error=編碼[{0}]不能使用 role.me_error=不可為自身分配角色 role.not_superadmin_no_organ_id_oper_error=非超級管理員不可分配權限 role.buildin.modify_permission_error=修改內建角色下選單權限的權限不足 role.self.modify_permission_error=無法修改自身角色的選單權限 role.self.modify_error=無法修改自身的角色 user.username.exists=手機號已經存在 user.mobile.exists=手機號已經存在 user.email.exists=郵箱已經存在 user.not_exists=用戶不存在 user.import.empty=導入用戶數據不能為空! user.password.failed=用戶密碼校驗失敗 user.is_disable=名字為[{0}]的用戶已被禁用 user.count.max=超過組織用戶配額({0}),創建用戶失敗! user.me.error=不允許操作用戶自身 user.password.length_at_least_8=密碼長度不少於8位,且包含大小寫字母、數字和特殊字符 user.username.multiple_error=存在[{0}]重複用戶,請聯繫系統管理員 user.operate_self_status_error=不允許操作用戶自身狀態 user.mobile_update_not_allow=該用戶已通過手機號認證,如需修改手機號請前往個人中心 dept.name.duplicate=已經存在該名字的部門 dept.parent.not_exists=父級部門不存在 dept.not_found=當前部門不存在 dept.exists_children=存在子部門,無法刪除 dept.parent.error=不能設置自己為父部門 dept.exists_user=部門中存在員工,無法刪除 dept.parent_is_child=不能設置自己的子部門為父部門 dept.user_oper_not_allow=不允許操作用戶自身部門 dept.parent_user_oper_not_allow=不允許操作用戶自身部門及其上級部門 dept.disable=部門({0})已被禁用 dept.not_allowed_login=部門({0})已被禁用,無法登入 dept.parent_disable=上級部門({0})已被禁用,請開啟後操作或選擇其他上級部門 dict_type.not_exists=當前字典類型不存在 dict_type.not_enable=字典類型處於關閉狀態,不允許新增或編輯 dict_type.name.duplicate=已經存在該名字的字典類型 dict_type.type.duplicate=已經存在該類型的字典類型 dict_type.has_children=無法刪除,該字典類型還有字典數據 dict_data.not_exists=當前字典數據不存在 dict_data.not_enable=字典數據({0})不處於開啟狀態,不允許選擇 dict_data.value.duplicate=已經存在該值的字典數據 dict_data.trans_error=字典數據標籤翻譯異常,error_code :{0} notice.not_found=當前通知公告不存在 notice.name_unique_error=公告標題已存在,請編輯後重試 notice.buildin.modify_permission_error=內置通知公告編輯權限不足 sms.channel.not_exists=短信渠道不存在 sms.template.not_exists=短信模板不存在 sms.template.code.duplicate=已經存在編碼為[{0}]的短信模板 sms.template.api_error=短信 API 模板調用失敗,原因是:{0} sms.template.api.audit_checking=短信 API 模版無法使用,原因:審批中 sms.template.api.audit_fail=短信 API 模版無法使用,原因:審批不通過,{0} sms.template.api.not_found=短信 API 模版無法使用,原因:模版不存在 sms.send.mobile.not_exists=手機號碼不存在 sms.send.mobile.template_param_miss=短信模板參數({0})缺失 sms.send.template.not_exists=短信模板不存在 sms.code.not_found=驗證碼不存在,請點擊獲取 sms.code.not_correct=驗證碼不正確 sms.code.send_too_fast=短信發送過於頻繁 sms.code.is_valid=驗證碼在有效期內,5 分鐘內請勿重複發送! organ.not_exists=組織不存在 organ.disable=[{0}]組織已被禁用 organ.expire=[{0}]組織已過期 organ.can_not_update_system=系統組織不能進行修改、刪除等操作! organ.name.duplicate=名字為[{0}]的組織已存在 organ.website.duplicate=域名為[{0}]的組織已存在 organ.data_code.not_exists=組織未配置資料源標識 organ.already_exists=該新增組織已授權機台數量無需重複新增! organ.user_oper.not_allow=不允許操作用戶自身組織 organ.contact_mobile.duplicate=手機號為[{0}]的組織已存在 organ.expiretime.product_id_lack=請選擇要購買的產品 notify.template.not.exists=站內信模版不存在 notify.template.code.duplicate=已經存在編碼為[{}]的站內信模板 notify.send.template.param.miss=站內信模板參數({})缺失 machine.not.exists=機台不存在 machine.template.not.exists=機台模板不存在 default.template.count=預設模板數量異常 the.current.machine.is.already.in.use=當前機台已使用,禁止刪除 machine.error=當前機台錯誤,請重新選擇機台 the.current.brand.of.the.machine.exists=當前機台配置的模板中,該品牌已存在,請重新輸入品牌名稱 the.model.of.the.machine.does.not.exist=該型號的機台模板不存在,請進行配置 the.current.brand=品牌ID錯誤,或品牌不存在 machine.num.error=當前組織該類型的機台創建已達到最大值,無法繼續創建 machine.name.error=當前機台名稱已存在,請重新輸入機台名稱 machinetemplate.name.error=當前機台模板的名稱已存在,請重新輸入機台模板名稱 labelingmachine.related.data.error=當前機台關聯的貼標機數據有誤,請在高級配置中重新配置貼標機或選擇其他模板 drillmachine.related.data.error=當前機台關聯的鑽孔機數據有誤,請在鑽孔模塊中重新配置鑽孔機或選擇其他模板 machine.data.error=當前組織尚未進行機台授權,請聯繫組織管理員或客服進行授權 machine.num.data.error=組織授權的機台數量不能超過127台 machine.used.already=當前機台在加工方案組中已使用,無法刪除 label.template.not.exists=標籤模板不存在 label.not.exists=標籤不存在 default.label.not.exists=該類型標籤的預設模板不存在 machine.use.label=當前標籤已有機台使用,無法刪除 default.not.deleted=預設標籤模板無法刪除 label.is.use.error=當前標籤在打包設定中已有使用者使用,無法刪除 data.source.not.exists=系統資料來源不存在 order.parts.import.list.is.empty=生產配件匯入資料不可為空 remain.plate.status.used=餘料板正在使用中,禁止修改 remain.plate.status.no.used=餘料板未使用 remain.plate.usr.type=餘料板使用類型為不可核銷類型 remain.plate.id.not.exists=未選中餘料板,請選擇餘料板 remain.plate.count.max=每次新增餘料板數量最大為 999 currently.no.configuration.available=當前沒有{0}配置信息,請前往設定配置 system.config.not_exists=系統配置不存在 system.config.type_not_support=不支援的系統配置類型 system.config.custom_plate_no.rule_save_format_error=自訂板編號配置:自訂板編號保存格式錯誤,請檢查配置規則 system.config.custom_plate_no.rule_reset_not_support=自訂板編號配置:該規則不支援手動復位/清零 system.config.custom_plate_no.rule_item_not_found=自訂板編號配置:找不到對應的規則項進行手動復位/清零 system.config.custom_plate_no.rule_order_reset_failed=自訂板編號配置:手動復位/清零生產單下序號失敗,請聯繫客服 custom.plate_no.rule.code_empty=規則編碼不能為空 custom.plate_no.rule.code_not_match=規則編碼[{0}]不合法,請檢查配置規則 custom.plate_no.rule.date_format_error=時間格式[{0}]不合法,請檢查配置規則 custom.plate_no.rule.custom_value_empty=自訂字元值不能為空,請檢查配置規則 custom.plate_no.rule.reset_mode_error=規則[{0}]復位/清零模式不合法,請檢查配置規則 custom.plate_no.rule.int_type_empty={0} 下的 {1} 不能為空,請檢查配置規則 custom.plate_no.rule.int_type_convert_error={0} 下的數值類型參數 {1}:{2} 轉換異常,請檢查配置規則 custom.plate_no.rule.bool_type_convert_error={0} 下的布林類型參數 {1}:{2} 轉換異常,請檢查配置規則 process.scheme.data_empty=加工方案組的:{0} 為空,無法保存,請進行配置 process.scheme.config.data_empty=加工方案組的:{0} 為空,請檢查配置信息 process.scheme.config.field_error=當前方案組的配置異常,請重新配置 process.scheme.config.in_use=當前方案組已在排單中使用,無法刪除 process.scheme.config.machine_label_empty=當前方案組對應解析器的機台標籤數據為空,請檢查機台標籤配置信息 config.data_error=當前系統配置的數據有誤,請重新嘗試排序 process.config.used_already=當前加工分線配置已在加工方案組中使用,無法刪除 optimization.config.used_already=當前數據處理配置已在加工方案組中使用,無法刪除 sealedge.config.item_empty=第 {0} 條配置中,有欄位值為空,請新增數據 sealedge.config.max_value_error=第 {0} 條配置中,{1} 要大於等於 {2},請修改數據 sealedge.config.data_error=當前封邊條配置有誤,請重新檢查後新增 sealedge.config.name_exists=當前配置的名稱已存在,請重新命名 sealedge.config.decimal_places_max_three=第 {0} 條配置中,小數位數最多為 3 位,請修改 sealedge.config.min_value_gt_zero=第 {0} 條配置中,寬最小值:{1} 要大於 0,請修改 sealedge.config.max_value_gt_zero=第 {0} 條配置中,寬最大值:{1} 要大於 0,請修改 sealedge.config.value_range_error=第 {0} 條配置中,寬最大值 要大於 寬最小值,請修改 token.app_type.exist=當前應用已存在token配置,無法繼續新增 token.config.not_exists=當前應用的token配置不存在 token.time.is_expires=當前token已過期,請重新配置或延長時間 token.app_type.no_update=應用名稱不允許更改 token.data.is_null=當前token的配置為空,無需刪除 token.expires_time.is_null=當前未選擇有效時間,請選擇後再新增 token.expires_time.data_error=當前選擇的有效時間已過期,請增加有效時間 token.insert.data_error=token新增失敗,請重新嘗試 invoice.no_exist=當前發票記錄有誤,請重新查看 invoicing.reject_reason=請填寫拒絕開票原因 purchase_record.no_exist=當前發票對應的購買記錄有誤,請退回組織後重新申請開票 invoice.is_fail=當前發票已開票,無法再次進行開票 products.is_exist=產品[{0}]已存在,請修改產品名稱後再次操作 products.no_delete=當前產品已上架,無法刪除,請下架後再刪除 products.no_update=當前產品已上架,無法進行修改 products.detail.no_update=定價規則對應的產品已上架,無法進行修改 advertisement.time_error=投放時間錯誤,結束時間應大於開始時間 advertisement.name.is_exist=當前廣告名稱已存在,請重新命名 advertisement.no_delete=當前廣告已經發布,無法刪除,請結束發布後再刪除 product_promotion.active.name.is_exist=當前優惠活動名稱已存在,請修改 product_promotion.purchaseduration.is_exist=當前所選產品下{0}{1}購買時長的優惠活動已存在,請修改 invoice_title.not_exists=發票抬頭不存在,請先創建發票抬頭 org_invoice.purchase_record.update_num.not_match=當前勾選的購買記錄中部分可能已開票,請查詢後重新勾選提交開票 org_invoice.agree_file.null=確認開票發票附件不能為空,請上傳後再提交 invoice_title.org.exists=組織下已存在發票抬頭,請刷新後編輯抬頭內容 invoice_title.taxpayerid.exists=統一社會信用代碼已存在,請檢查 products.not_nolist=當前產品未上架 org_product.purchase.lock=組織下存在購買中的產品操作,請稍後再試 invoice_title.enterprise.taxnumber.empty=企業統一信用代碼不能為空 invoice.amount.zero=可開票金額為0,請檢查購買記錄 invoice.apply.uninvoiceable.exist=當前提交記錄中存在不可開票記錄,請刷新列表後重新選擇提交 pay.channel_not_support=暫不支援的支付渠道,請使用其他支付渠道 pay.order_not_exist=支付訂單不存在,支付編號[{0}],請重新發起支付 pay.order_channel_query_not_exist=若您已確認掃碼支付,請稍後重新整理頁面,支付平台可能存在延遲入帳 pay.order_notify_data_parse_error=解析支付回調資料異常 pay.order_status_is_not_waiting=支付訂單不處於待支付狀態 pay.order_submit_channel_error=發起渠道支付異常,請聯繫客服 pay.notify_passback_tradetype_not_support_error=不支援的支付回調tradeType:[{0}],請檢查支付渠道 product.no_exist=當前產品不存在 product.detail_no_exist=當前產品的規則不存在 product.detail_duration_exist=當前產品下已存在產品時長[{0}/{1}]的定價規則,請修改後重新操作 product.promotion_no_exist=當前優惠活動不存在 product.detail_duration_unit_not_support=不支援的時長單位,請檢查該定價規則的時長單位 org.product_purchase_wait_pay_error=組織下存在當前產品的待支付紀錄,請確認或取消支付後再次發起軟體購買 product.price_null_error=產品建議價格為空,請聯繫客服 org.product_purchase_not_exist_error=組織訂購紀錄不存在,請檢查資料 org.product_purchase_exist_error=組織[{0}]訂購紀錄已存在,請勿重複定義訂購機構 advertisement.no_exist=廣告不存在 advertisement.status_endtime_expired=當前廣告投放結束時間已逾期,請重新發布選擇投放時間或重新編輯投放時間 advertisement.image_empty_error=廣告圖片檔案為空,請重新上傳 advertisement.image_upload_fail=廣告圖片上傳失敗,請稍後再試 advertisement.update_status_error=當前廣告已經發布,若要編輯請先結束發布 parser.no_exist=當前解析器不存在,請重新選擇 parser.template_no_exist=當前解析器模板不存在,請重新選擇 product_purchase.no_exist=當前購買記錄不存在,請檢查 product_purchase.endtime_before_delaytime_error=當前產品訂購有效期{0}未超過當前日期,請調整訂購時長 \ No newline at end of file +auth.login.bad_credentials=登入失敗,帳號或密碼不正確 auth.login.user_disabled=登入失敗,帳號已被停用 auth.login.captcha_code_error=驗證碼不正確,原因:{0} auth.login.third_not_bind=尚未綁定帳號,需要進行綁定 auth.mobile.not_exists=手機號碼不存在 auth.mobile.no_change=手機號碼未發生變更,無需修改 auth.manage_endpoint.login_permission_error=登入失敗,管理端帳號不存在 menu.name.duplicate=已存在相同名稱的選單 menu.parent.not_exists=父選單不存在 menu.parent.error=不能將自身設定為父選單 menu.not_exists=選單不存在 menu.exists_children=存在子選單,無法刪除 menu.parent.not_dir_or_menu=父選單的類型必須是目錄或選單 menu.operation_permission_error=管理端選單操作權限不足 menu.trans_error=選單翻譯異常,error_code:{0} role.not_exists=角色不存在 role.name.duplicate=已存在名稱為[{0}]的角色 role.code.duplicate=已存在編碼為[{0}]的角色 role.can_not_update_system_type=不能操作系統內建的角色 role.is_disable=名稱為[{0}]的角色已被停用 role.admin_code_error=編碼[{0}]不能使用 role.me_error=不可為自身分配角色 role.not_superadmin_no_organ_id_oper_error=非超級管理員不可分配權限 role.buildin.modify_permission_error=修改內建角色下選單權限的權限不足 role.self.modify_permission_error=無法修改自身角色的選單權限 role.self.modify_error=無法修改自身的角色 user.username.exists=手機號已經存在 user.mobile.exists=手機號已經存在 user.email.exists=郵箱已經存在 user.not_exists=用戶不存在 user.import.empty=導入用戶數據不能為空! user.password.failed=用戶密碼校驗失敗 user.is_disable=名字為[{0}]的用戶已被禁用 user.count.max=超過組織用戶配額({0}),創建用戶失敗! user.me.error=不允許操作用戶自身 user.password.length_at_least_8=密碼長度不少於8位,且包含大小寫字母、數字和特殊字符 user.username.multiple_error=存在[{0}]重複用戶,請聯繫系統管理員 user.operate_self_status_error=不允許操作用戶自身狀態 user.mobile_update_not_allow=該用戶已通過手機號認證,如需修改手機號請前往個人中心 dept.name.duplicate=已經存在該名字的部門 dept.parent.not_exists=父級部門不存在 dept.not_found=當前部門不存在 dept.exists_children=存在子部門,無法刪除 dept.parent.error=不能設置自己為父部門 dept.exists_user=部門中存在員工,無法刪除 dept.parent_is_child=不能設置自己的子部門為父部門 dept.user_oper_not_allow=不允許操作用戶自身部門 dept.parent_user_oper_not_allow=不允許操作用戶自身部門及其上級部門 dept.disable=部門({0})已被禁用 dept.not_allowed_login=部門({0})已被禁用,無法登入 dept.parent_disable=上級部門({0})已被禁用,請開啟後操作或選擇其他上級部門 dict_type.not_exists=當前字典類型不存在 dict_type.not_enable=字典類型處於關閉狀態,不允許新增或編輯 dict_type.name.duplicate=已經存在該名字的字典類型 dict_type.type.duplicate=已經存在該類型的字典類型 dict_type.has_children=無法刪除,該字典類型還有字典數據 dict_data.not_exists=當前字典數據不存在 dict_data.not_enable=字典數據({0})不處於開啟狀態,不允許選擇 dict_data.value.duplicate=已經存在該值的字典數據 dict_data.trans_error=字典數據標籤翻譯異常,error_code :{0} notice.not_found=當前通知公告不存在 notice.name_unique_error=公告標題已存在,請編輯後重試 notice.buildin.modify_permission_error=內置通知公告編輯權限不足 sms.channel.not_exists=短信渠道不存在 sms.template.not_exists=短信模板不存在 sms.template.code.duplicate=已經存在編碼為[{0}]的短信模板 sms.template.api_error=短信 API 模板調用失敗,原因是:{0} sms.template.api.audit_checking=短信 API 模版無法使用,原因:審批中 sms.template.api.audit_fail=短信 API 模版無法使用,原因:審批不通過,{0} sms.template.api.not_found=短信 API 模版無法使用,原因:模版不存在 sms.send.mobile.not_exists=手機號碼不存在 sms.send.mobile.template_param_miss=短信模板參數({0})缺失 sms.send.template.not_exists=短信模板不存在 sms.code.not_found=驗證碼不存在,請點擊獲取 sms.code.not_correct=驗證碼不正確 sms.code.send_too_fast=短信發送過於頻繁 sms.code.is_valid=驗證碼在有效期內,5 分鐘內請勿重複發送! organ.not_exists=組織不存在 organ.disable=[{0}]組織已被禁用 organ.expire=[{0}]組織已過期 organ.can_not_update_system=系統組織不能進行修改、刪除等操作! organ.name.duplicate=名字為[{0}]的組織已存在 organ.website.duplicate=域名為[{0}]的組織已存在 organ.data_code.not_exists=組織未配置資料源標識 organ.already_exists=該新增組織已授權機台數量無需重複新增! organ.user_oper.not_allow=不允許操作用戶自身組織 organ.contact_mobile.duplicate=手機號為[{0}]的組織已存在 organ.expiretime.product_id_lack=請選擇要購買的產品 notify.template.not.exists=站內信模版不存在 notify.template.code.duplicate=已經存在編碼為[{}]的站內信模板 notify.send.template.param.miss=站內信模板參數({})缺失 machine.not.exists=機台不存在 machine.template.not.exists=機台模板不存在 default.template.count=預設模板數量異常 the.current.machine.is.already.in.use=當前機台已使用,禁止刪除 machine.error=當前機台錯誤,請重新選擇機台 the.current.brand.of.the.machine.exists=當前機台配置的模板中,該品牌已存在,請重新輸入品牌名稱 the.model.of.the.machine.does.not.exist=該型號的機台模板不存在,請進行配置 the.current.brand=品牌ID錯誤,或品牌不存在 machine.num.error=當前組織該類型的機台創建已達到最大值,無法繼續創建 machine.name.error=當前機台名稱已存在,請重新輸入機台名稱 machinetemplate.name.error=當前機台模板的名稱已存在,請重新輸入機台模板名稱 labelingmachine.related.data.error=當前機台關聯的貼標機數據有誤,請在高級配置中重新配置貼標機或選擇其他模板 drillmachine.related.data.error=當前機台關聯的鑽孔機數據有誤,請在鑽孔模塊中重新配置鑽孔機或選擇其他模板 machine.data.error=當前組織尚未進行機台授權,請聯繫組織管理員或客服進行授權 machine.num.data.error=組織授權的機台數量不能超過127台 machine.used.already=當前機台在加工方案組中已使用,無法刪除 label.template.not.exists=標籤模板不存在 label.not.exists=標籤不存在 default.label.not.exists=該類型標籤的預設模板不存在 machine.use.label=當前標籤已有機台使用,無法刪除 default.not.deleted=預設標籤模板無法刪除 label.is.use.error=當前標籤在打包設定中已有使用者使用,無法刪除 data.source.not.exists=系統資料來源不存在 order.parts.import.list.is.empty=生產配件匯入資料不可為空 remain.plate.status.used=餘料板正在使用中,禁止修改 remain.plate.status.no.used=餘料板未使用 remain.plate.usr.type=餘料板使用類型為不可核銷類型 remain.plate.id.not.exists=未選中餘料板,請選擇餘料板 remain.plate.count.max=每次新增餘料板數量最大為 999 currently.no.configuration.available=當前沒有{0}配置信息,請前往設定配置 system.config.not_exists=系統配置不存在 system.config.type_not_support=不支援的系統配置類型 system.config.custom_plate_no.rule_save_format_error=自訂板編號配置:自訂板編號保存格式錯誤,請檢查配置規則 system.config.custom_plate_no.rule_reset_not_support=自訂板編號配置:該規則不支援手動復位/清零 system.config.custom_plate_no.rule_item_not_found=自訂板編號配置:找不到對應的規則項進行手動復位/清零 system.config.custom_plate_no.rule_order_reset_failed=自訂板編號配置:手動復位/清零生產單下序號失敗,請聯繫客服 custom.plate_no.rule.code_empty=規則編碼不能為空 custom.plate_no.rule.code_not_match=規則編碼[{0}]不合法,請檢查配置規則 custom.plate_no.rule.date_format_error=時間格式[{0}]不合法,請檢查配置規則 custom.plate_no.rule.custom_value_empty=自訂字元值不能為空,請檢查配置規則 custom.plate_no.rule.reset_mode_error=規則[{0}]復位/清零模式不合法,請檢查配置規則 custom.plate_no.rule.int_type_empty={0} 下的 {1} 不能為空,請檢查配置規則 custom.plate_no.rule.int_type_convert_error={0} 下的數值類型參數 {1}:{2} 轉換異常,請檢查配置規則 custom.plate_no.rule.bool_type_convert_error={0} 下的布林類型參數 {1}:{2} 轉換異常,請檢查配置規則 process.scheme.data_empty=加工方案組的:{0} 為空,無法保存,請進行配置 process.scheme.config.data_empty=加工方案組的:{0} 為空,請檢查配置信息 process.scheme.config.field_error=當前方案組的配置異常,請重新配置 process.scheme.config.in_use=當前方案組已在排單中使用,無法刪除 process.scheme.config.machine_label_empty=當前方案組對應解析器的機台標籤數據為空,請檢查機台標籤配置信息 config.data_error=當前系統配置的數據有誤,請重新嘗試排序 process.config.used_already=當前加工分線配置已在加工方案組中使用,無法刪除 optimization.config.used_already=當前數據處理配置已在加工方案組中使用,無法刪除 sealedge.config.item_empty=第 {0} 條配置中,有欄位值為空,請新增數據 sealedge.config.max_value_error=第 {0} 條配置中,{1} 要大於等於 {2},請修改數據 sealedge.config.data_error=當前封邊條配置有誤,請重新檢查後新增 sealedge.config.name_exists=當前配置的名稱已存在,請重新命名 sealedge.config.decimal_places_max_three=第 {0} 條配置中,小數位數最多為 3 位,請修改 sealedge.config.min_value_gt_zero=第 {0} 條配置中,寬最小值:{1} 要大於 0,請修改 sealedge.config.max_value_gt_zero=第 {0} 條配置中,寬最大值:{1} 要大於 0,請修改 sealedge.config.value_range_error=第 {0} 條配置中,寬最大值 要大於 寬最小值,請修改 token.app_type.exist=當前應用已存在token配置,無法繼續新增 token.config.not_exists=當前應用的token配置不存在 token.time.is_expires=當前token已過期,請重新配置或延長時間 token.app_type.no_update=應用名稱不允許更改 token.data.is_null=當前token的配置為空,無需刪除 token.expires_time.is_null=當前未選擇有效時間,請選擇後再新增 token.expires_time.data_error=當前選擇的有效時間已過期,請增加有效時間 token.insert.data_error=token新增失敗,請重新嘗試 invoice.no_exist=當前發票記錄有誤,請重新查看 invoicing.reject_reason=請填寫拒絕開票原因 purchase_record.no_exist=當前發票對應的購買記錄有誤,請退回組織後重新申請開票 invoice.is_fail=當前發票已開票,無法再次進行開票 products.is_exist=產品[{0}]已存在,請修改產品名稱後再次操作 products.no_delete=當前產品已上架,無法刪除,請下架後再刪除 products.no_update=當前產品已上架,無法進行修改 products.detail.no_update=定價規則對應的產品已上架,無法進行修改 advertisement.time_error=投放時間錯誤,結束時間應大於開始時間 advertisement.name.is_exist=當前廣告名稱已存在,請重新命名 advertisement.no_delete=當前廣告已經發布,無法刪除,請結束發布後再刪除 product_promotion.active.name.is_exist=當前優惠活動名稱已存在,請修改 product_promotion.purchaseduration.is_exist=當前所選產品下{0}{1}購買時長的優惠活動已存在,請修改 invoice_title.not_exists=發票抬頭不存在,請先創建發票抬頭 org_invoice.purchase_record.update_num.not_match=當前勾選的購買記錄中部分可能已開票,請查詢後重新勾選提交開票 org_invoice.agree_file.null=確認開票發票附件不能為空,請上傳後再提交 invoice_title.org.exists=組織下已存在發票抬頭,請刷新後編輯抬頭內容 invoice_title.taxpayerid.exists=統一社會信用代碼已存在,請檢查 products.not_nolist=當前產品未上架 org_product.purchase.lock=組織下存在購買中的產品操作,請稍後再試 invoice_title.enterprise.taxnumber.empty=企業統一信用代碼不能為空 invoice.amount.zero=可開票金額為0,請檢查購買記錄 invoice.apply.uninvoiceable.exist=當前提交記錄中存在不可開票記錄,請刷新列表後重新選擇提交 pay.channel_not_support=暫不支援的支付渠道,請使用其他支付渠道 pay.order_not_exist=支付訂單不存在,支付編號[{0}],請重新發起支付 pay.order_channel_query_not_exist=若您已確認掃碼支付,請稍後重新整理頁面,支付平台可能存在延遲入帳 pay.order_notify_data_parse_error=解析支付回調資料異常 pay.order_status_is_not_waiting=支付訂單不處於待支付狀態 pay.order_submit_channel_error=發起渠道支付異常,請聯繫客服 pay.notify_passback_tradetype_not_support_error=不支援的支付回調tradeType:[{0}],請檢查支付渠道 product.no_exist=當前產品不存在 product.detail_no_exist=當前產品的規則不存在 product.detail_duration_exist=當前產品下已存在產品時長[{0}/{1}]的定價規則,請修改後重新操作 product.promotion_no_exist=當前優惠活動不存在 product.detail_duration_unit_not_support=不支援的時長單位,請檢查該定價規則的時長單位 org.product_purchase_wait_pay_error=組織下存在當前產品的待支付紀錄,請確認或取消支付後再次發起軟體購買 product.price_null_error=產品建議價格為空,請聯繫客服 org.product_purchase_not_exist_error=組織訂購紀錄不存在,請檢查資料 org.product_purchase_exist_error=組織[{0}]訂購紀錄已存在,請勿重複定義訂購機構 advertisement.no_exist=廣告不存在 advertisement.status_endtime_expired=當前廣告投放結束時間已逾期,請重新發布選擇投放時間或重新編輯投放時間 advertisement.image_empty_error=廣告圖片檔案為空,請重新上傳 advertisement.image_upload_fail=廣告圖片上傳失敗,請稍後再試 advertisement.update_status_error=當前廣告已經發布,若要編輯請先結束發布 parser.no_exist=當前解析器不存在,請重新選擇 parser.template_no_exist=當前解析器模板不存在,請重新選擇 product_purchase.no_exist=當前購買記錄不存在,請檢查 product_purchase.endtime_before_delaytime_error=當前產品訂購有效期{0}未超過當前日期,請調整訂購時長 product.delay_duration_unit_not_support=不支持的產品延期時長單位 \ No newline at end of file diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/message_errorcode_en.properties b/cf-module-system/cf-module-system-biz/src/main/resources/message_errorcode_en.properties index 72096b4f6..e4df59d96 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/message_errorcode_en.properties +++ b/cf-module-system/cf-module-system-biz/src/main/resources/message_errorcode_en.properties @@ -1 +1 @@ -auth.login.bad_credentials=Login failed, incorrect account or password auth.login.user_disabled=Login failed, the account has been disabled auth.login.captcha_code_error=Incorrect verification code, reason: {0} auth.login.third_not_bind=No account is bound, binding is required auth.mobile.not_exists=Mobile number does not exist auth.mobile.no_change=Mobile number has not changed, no update needed auth.manage_endpoint.login_permission_error=Login failed, management account does not exist menu.name.duplicate=A menu with the same name already exists menu.parent.not_exists=Parent menu does not exist menu.parent.error=Cannot set the menu itself as its parent menu.not_exists=Menu does not exist menu.exists_children=Cannot delete because child menus exist menu.parent.not_dir_or_menu=The parent menu type must be directory or menu menu.operation_permission_error=Insufficient permissions for management menu operations menu.trans_error=Menu translation error, error_code: {0} role.not_exists=Role does not exist role.name.duplicate=A role named [{0}] already exists role.code.duplicate=A role with code [{0}] already exists role.can_not_update_system_type=Cannot operate on system-built-in roles role.is_disable=The role named [{0}] has been disabled role.admin_code_error=Code [{0}] cannot be used role.me_error=Cannot assign a role to yourself role.not_superadmin_no_organ_id_oper_error=Non-super admin is not allowed to assign permissions role.buildin.modify_permission_error=Insufficient permissions to modify built-in role menu permissions role.self.modify_permission_error=Cannot modify your own role menu permissions role.self.modify_error=Cannot modify your own role user.username.exists=The mobile number already exists user.mobile.exists=The mobile number already exists user.email.exists=The email address already exists user.not_exists=User does not exist user.import.empty=Imported user data cannot be empty! user.password.failed=User password verification failed user.is_disable=The user named [{0}] has been disabled user.count.max=Exceeded the organization user quota ({0}), failed to create user! user.me.error=Operation on the user itself is not allowed user.password.length_at_least_8=Password must be at least 8 characters long and contain uppercase letters, lowercase letters, numbers, and special characters user.username.multiple_error=Duplicate users named [{0}] exist, please contact the system administrator user.operate_self_status_error=Operation on the user's own status is not allowed user.mobile_update_not_allow=This user has been verified by mobile number. To change the mobile number, please go to the personal center dept.name.duplicate=The department name already exists dept.parent.not_exists=The parent department does not exist dept.not_found=The department does not exist dept.exists_children=There are sub-departments, deletion is not allowed dept.parent.error=Cannot set the department itself as its parent dept.exists_user=There are employees in the department, deletion is not allowed dept.parent_is_child=Cannot set a sub-department as the parent dept.user_oper_not_allow=Operation on the user's own department is not allowed dept.parent_user_oper_not_allow=Operation on the user's own department and its parent departments is not allowed dept.disable=The department ({0}) has been disabled dept.not_allowed_login=The department ({0}) has been disabled, login is not allowed dept.parent_disable=The parent department ({0}) has been disabled, please enable it first or choose another parent department dict_type.not_exists=The dictionary type does not exist dict_type.not_enable=The dictionary type is disabled, adding or editing is not allowed dict_type.name.duplicate=The dictionary type name already exists dict_type.type.duplicate=The dictionary type already exists dict_type.has_children=Cannot delete, the dictionary type still has dictionary data dict_data.not_exists=The dictionary data does not exist dict_data.not_enable=The dictionary data ({0}) is not enabled and cannot be selected dict_data.value.duplicate=The dictionary data value already exists dict_data.trans_error=Dictionary data label translation error, error_code :{0} notice.not_found=The notification announcement does not exist notice.name_unique_error=The announcement title already exists, please edit and try again notice.buildin.modify_permission_error=Insufficient permissions to modify built-in announcement sms.channel.not_exists=The SMS channel does not exist sms.template.not_exists=SMS template does not exist sms.template.code.duplicate=An SMS template with code [{0}] already exists sms.template.api_error=SMS API template call failed, reason: {0} sms.template.api.audit_checking=SMS API template cannot be used, reason: under review sms.template.api.audit_fail=SMS API template cannot be used, reason: review failed, {0} sms.template.api.not_found=SMS API template cannot be used, reason: template not found sms.send.mobile.not_exists=Mobile number does not exist sms.send.mobile.template_param_miss=SMS template parameter ({0}) is missing sms.send.template.not_exists=SMS template does not exist sms.code.not_found=Verification code does not exist, please click to obtain sms.code.not_correct=Incorrect verification code sms.code.send_too_fast=SMS sending is too frequent sms.code.is_valid=The verification code is still valid, please do not resend within 5 minutes organ.not_exists=Organization does not exist organ.disable=Organization [{0}] has been disabled organ.expire=Organization [{0}] has expired organ.can_not_update_system=System organization cannot be modified or deleted organ.name.duplicate=Organization with name [{0}] already exists organ.website.duplicate=Organization with domain [{0}] already exists organ.data_code.not_exists=Organization has not configured a data source identifier organ.already_exists=The newly added organization has already been authorized device quota, cannot add again organ.user_oper.not_allow=Not allowed to operate on the user's own organization organ.contact_mobile.duplicate=Organization with mobile number [{0}] already exists organ.expiretime.product_id_lack=Please select the product to purchase notify.template.not.exists=Notification template does not exist notify.template.code.duplicate=A notification template with code [{}] already exists notify.send.template.param.miss=Notification template parameter ({}) is missing machine.not.exists=Machine does not exist machine.template.not.exists=Machine template does not exist default.template.count=Default template count error the.current.machine.is.already.in.use=The current machine is in use and cannot be deleted machine.error=The current machine is incorrect, please select a machine again the.current.brand.of.the.machine.exists=The brand already exists in the templates configured for the current machine, please enter a different brand name the.model.of.the.machine.does.not.exist=The template for this machine model does not exist, please configure it the.current.brand=Brand ID error, or brand does not exist machine.num.error=The number of machines of this type in the organization has reached the maximum limit and cannot be created machine.name.error=The machine name already exists, please enter another machine name machinetemplate.name.error=The machine template name already exists, please enter another machine template name labelingmachine.related.data.error=The labeling machine data associated with the current machine is incorrect, please reconfigure it or select another template drillmachine.related.data.error=The drilling machine data associated with the current machine is incorrect, please reconfigure it or select another template machine.data.error=The organization has not authorized machines yet, please contact the organization administrator or customer service for authorization machine.num.data.error=The authorized number of machines cannot exceed 127 machine.used.already=The current machine is used in a processing solution group and cannot be deleted label.template.not.exists=Label template does not exist label.not.exists=Label does not exist default.label.not.exists=The default label template for this type does not exist machine.use.label=The current label is used by machines and cannot be deleted default.not.deleted=The default label template cannot be deleted label.is.use.error=The label is used in packaging settings by users and cannot be deleted data.source.not.exists=System data source does not exist order.parts.import.list.is.empty=The imported production part list cannot be empty remain.plate.status.used=The remaining plate is in use and cannot be modified remain.plate.status.no.used=The remaining plate is not in use remain.plate.usr.type=The remaining plate usage type is non-verifiable remain.plate.id.not.exists=No remaining plate selected, please select a remaining plate remain.plate.count.max=The maximum number of remaining plates that can be added at one time is 999 currently.no.configuration.available=There is no configuration information for {0}, please go to settings to configure system.config.not_exists=System configuration does not exist system.config.type_not_support=Unsupported system configuration type system.config.custom_plate_no.rule_save_format_error=Custom plate number configuration: invalid save format, please check the rule system.config.custom_plate_no.rule_reset_not_support=Custom plate number configuration: this rule does not support manual reset/clear system.config.custom_plate_no.rule_item_not_found=Custom plate number configuration: rule item not found for manual reset/clear system.config.custom_plate_no.rule_order_reset_failed=Custom plate number configuration: failed to reset/clear order sequence, please contact support custom.plate_no.rule.code_empty=Rule code cannot be empty custom.plate_no.rule.code_not_match=Rule code [{0}] is invalid, please check the configuration rule custom.plate_no.rule.date_format_error=Date format [{0}] is invalid, please check the configuration rule custom.plate_no.rule.custom_value_empty=Custom character value cannot be empty, please check the configuration rule custom.plate_no.rule.reset_mode_error=Reset/Clear mode for rule [{0}] is invalid, please check the configuration rule custom.plate_no.rule.int_type_empty=The field \"{1}\" under \"{0}\" cannot be empty, please check the configuration rule custom.plate_no.rule.int_type_convert_error=Value conversion error for numeric parameter {1}:{2} under \"{0}\", please check the configuration rule custom.plate_no.rule.bool_type_convert_error=Value conversion error for boolean parameter {1}:{2} under \"{0}\", please check the configuration rule process.scheme.data_empty=Field \"{0}\" in the process scheme group is empty and cannot be saved, please configure it process.scheme.config.data_empty=Field \"{0}\" in the process scheme group is empty, please check the configuration process.scheme.config.field_error=The current scheme group configuration is invalid, please reconfigure process.scheme.config.in_use=The current scheme group is in use in scheduling and cannot be deleted process.scheme.config.machine_label_empty=Machine label data for the scheme group's parser is empty, please check the machine label configuration config.data_error=Current system configuration data is incorrect, please try sorting again process.config.used_already=The current line configuration is already used in a process scheme group and cannot be deleted optimization.config.used_already=The current optimization configuration is already used in a process scheme group and cannot be deleted sealedge.config.item_empty=There are empty fields in configuration #{0}, please fill in the data sealedge.config.max_value_error=In configuration #{0}, the value of {1} must be greater than or equal to {2}, please modify sealedge.config.data_error=The current edge band configuration is incorrect, please re-check before adding sealedge.config.name_exists=Configuration name already exists, please rename sealedge.config.decimal_places_max_three=In configuration #{0}, decimal places must not exceed 3, please modify sealedge.config.min_value_gt_zero=In configuration #{0}, minimum width {1} must be greater than 0, please modify sealedge.config.max_value_gt_zero=In configuration #{0}, maximum width {1} must be greater than 0, please modify sealedge.config.value_range_error=In configuration #{0}, maximum width must be greater than minimum width, please modify token.app_type.exist=The current application already has a token configuration and cannot add a new one token.config.not_exists=The token configuration for the current application does not exist token.time.is_expires=The current token has expired. Please reconfigure or extend the validity period token.app_type.no_update=The application name cannot be modified token.data.is_null=The token configuration is empty and does not need to be deleted token.expires_time.is_null=No valid time was selected. Please select one before adding token.expires_time.data_error=The selected validity time has expired. Please extend the validity time token.insert.data_error=Failed to add token. Please try again invoice.no_exist=The invoice record is incorrect. Please check again. invoicing.reject_reason=Please provide the reason for rejecting the invoice. purchase_record.no_exist=The purchase record corresponding to the invoice is invalid. Please return it to the organization and reapply. invoice.is_fail=The invoice has already been issued and cannot be issued again. products.is_exist=Product [{0}] already exists. Please modify the product name and try again. products.no_delete=The product is currently listed and cannot be deleted. Please delist it first. products.no_update=The product is currently listed and cannot be modified. products.detail.no_update=The product corresponding to the pricing rule is listed and cannot be modified. advertisement.time_error=Invalid delivery time. The end time must be later than the start time. advertisement.name.is_exist=The advertisement name already exists. Please rename it. advertisement.no_delete=The advertisement has been published and cannot be deleted. End publication first. product_promotion.active.name.is_exist=The promotion name already exists. Please modify it. product_promotion.purchaseduration.is_exist=A promotion with purchase duration {0}{1} already exists under the selected product. Please modify. invoice_title.not_exists=The invoice title does not exist. Please create it first. org_invoice.purchase_record.update_num.not_match=Some selected purchase records may have already been invoiced. Please reselect and submit. org_invoice.agree_file.null=The invoice confirmation file cannot be empty. Please upload it. invoice_title.org.exists=The organization already has an invoice title. Please refresh and edit it. invoice_title.taxpayerid.exists=The taxpayer identification number already exists. Please check. products.not_nolist=The product is not listed. org_product.purchase.lock=There are ongoing product purchase operations under the organization. Please try again later. invoice_title.enterprise.taxnumber.empty=The enterprise tax number cannot be empty. invoice.amount.zero=The invoiceable amount is 0. Please check the purchase record. invoice.apply.uninvoiceable.exist=There are records that cannot be invoiced. Please refresh and select again. pay.channel_not_support=Unsupported payment channel, please use another one pay.order_not_exist=Payment order does not exist, order number [{0}], please initiate payment again pay.order_channel_query_not_exist=If you have confirmed the QR code payment, please refresh the page later. The payment platform may experience delays pay.order_notify_data_parse_error=Failed to parse payment notification data pay.order_status_is_not_waiting=The payment order is not in a waiting state pay.order_submit_channel_error=Failed to initiate channel payment, please contact customer service pay.notify_passback_tradetype_not_support_error=Unsupported payment callback tradeType:[{0}], please check the payment channel product.no_exist=The product does not exist product.detail_no_exist=The product's pricing rule does not exist product.detail_duration_exist=A pricing rule for product duration [{0}/{1}] already exists, please modify and try again product.promotion_no_exist=The promotion does not exist product.detail_duration_unit_not_support=Unsupported duration unit, please check the pricing rule's duration unit org.product_purchase_wait_pay_error=There are pending payment records for this product under the organization. Please confirm or cancel payment before purchasing again product.price_null_error=Suggested product price is empty, please contact customer service org.product_purchase_not_exist_error=The organization's purchase record does not exist, please check the data org.product_purchase_exist_error=Purchase record for organization [{0}] already exists, please do not duplicate the definition advertisement.no_exist=The advertisement does not exist advertisement.status_endtime_expired=The advertisement's end time has expired. Please republish or edit the delivery time advertisement.image_empty_error=The advertisement image file is empty, please upload again advertisement.image_upload_fail=Failed to upload the advertisement image, please try again later advertisement.update_status_error=The advertisement has already been published. Please end the publication before editing parser.no_exist=The parser does not exist, please reselect parser.template_no_exist=The parser template does not exist, please reselect product_purchase.no_exist=The purchase record does not exist, please check product_purchase.endtime_before_delaytime_error=The product subscription validity period {0} has not exceeded the current date, please adjust the subscription duration \ No newline at end of file +auth.login.bad_credentials=Login failed, incorrect account or password auth.login.user_disabled=Login failed, the account has been disabled auth.login.captcha_code_error=Incorrect verification code, reason: {0} auth.login.third_not_bind=No account is bound, binding is required auth.mobile.not_exists=Mobile number does not exist auth.mobile.no_change=Mobile number has not changed, no update needed auth.manage_endpoint.login_permission_error=Login failed, management account does not exist menu.name.duplicate=A menu with the same name already exists menu.parent.not_exists=Parent menu does not exist menu.parent.error=Cannot set the menu itself as its parent menu.not_exists=Menu does not exist menu.exists_children=Cannot delete because child menus exist menu.parent.not_dir_or_menu=The parent menu type must be directory or menu menu.operation_permission_error=Insufficient permissions for management menu operations menu.trans_error=Menu translation error, error_code: {0} role.not_exists=Role does not exist role.name.duplicate=A role named [{0}] already exists role.code.duplicate=A role with code [{0}] already exists role.can_not_update_system_type=Cannot operate on system-built-in roles role.is_disable=The role named [{0}] has been disabled role.admin_code_error=Code [{0}] cannot be used role.me_error=Cannot assign a role to yourself role.not_superadmin_no_organ_id_oper_error=Non-super admin is not allowed to assign permissions role.buildin.modify_permission_error=Insufficient permissions to modify built-in role menu permissions role.self.modify_permission_error=Cannot modify your own role menu permissions role.self.modify_error=Cannot modify your own role user.username.exists=The mobile number already exists user.mobile.exists=The mobile number already exists user.email.exists=The email address already exists user.not_exists=User does not exist user.import.empty=Imported user data cannot be empty! user.password.failed=User password verification failed user.is_disable=The user named [{0}] has been disabled user.count.max=Exceeded the organization user quota ({0}), failed to create user! user.me.error=Operation on the user itself is not allowed user.password.length_at_least_8=Password must be at least 8 characters long and contain uppercase letters, lowercase letters, numbers, and special characters user.username.multiple_error=Duplicate users named [{0}] exist, please contact the system administrator user.operate_self_status_error=Operation on the user's own status is not allowed user.mobile_update_not_allow=This user has been verified by mobile number. To change the mobile number, please go to the personal center dept.name.duplicate=The department name already exists dept.parent.not_exists=The parent department does not exist dept.not_found=The department does not exist dept.exists_children=There are sub-departments, deletion is not allowed dept.parent.error=Cannot set the department itself as its parent dept.exists_user=There are employees in the department, deletion is not allowed dept.parent_is_child=Cannot set a sub-department as the parent dept.user_oper_not_allow=Operation on the user's own department is not allowed dept.parent_user_oper_not_allow=Operation on the user's own department and its parent departments is not allowed dept.disable=The department ({0}) has been disabled dept.not_allowed_login=The department ({0}) has been disabled, login is not allowed dept.parent_disable=The parent department ({0}) has been disabled, please enable it first or choose another parent department dict_type.not_exists=The dictionary type does not exist dict_type.not_enable=The dictionary type is disabled, adding or editing is not allowed dict_type.name.duplicate=The dictionary type name already exists dict_type.type.duplicate=The dictionary type already exists dict_type.has_children=Cannot delete, the dictionary type still has dictionary data dict_data.not_exists=The dictionary data does not exist dict_data.not_enable=The dictionary data ({0}) is not enabled and cannot be selected dict_data.value.duplicate=The dictionary data value already exists dict_data.trans_error=Dictionary data label translation error, error_code :{0} notice.not_found=The notification announcement does not exist notice.name_unique_error=The announcement title already exists, please edit and try again notice.buildin.modify_permission_error=Insufficient permissions to modify built-in announcement sms.channel.not_exists=The SMS channel does not exist sms.template.not_exists=SMS template does not exist sms.template.code.duplicate=An SMS template with code [{0}] already exists sms.template.api_error=SMS API template call failed, reason: {0} sms.template.api.audit_checking=SMS API template cannot be used, reason: under review sms.template.api.audit_fail=SMS API template cannot be used, reason: review failed, {0} sms.template.api.not_found=SMS API template cannot be used, reason: template not found sms.send.mobile.not_exists=Mobile number does not exist sms.send.mobile.template_param_miss=SMS template parameter ({0}) is missing sms.send.template.not_exists=SMS template does not exist sms.code.not_found=Verification code does not exist, please click to obtain sms.code.not_correct=Incorrect verification code sms.code.send_too_fast=SMS sending is too frequent sms.code.is_valid=The verification code is still valid, please do not resend within 5 minutes organ.not_exists=Organization does not exist organ.disable=Organization [{0}] has been disabled organ.expire=Organization [{0}] has expired organ.can_not_update_system=System organization cannot be modified or deleted organ.name.duplicate=Organization with name [{0}] already exists organ.website.duplicate=Organization with domain [{0}] already exists organ.data_code.not_exists=Organization has not configured a data source identifier organ.already_exists=The newly added organization has already been authorized device quota, cannot add again organ.user_oper.not_allow=Not allowed to operate on the user's own organization organ.contact_mobile.duplicate=Organization with mobile number [{0}] already exists organ.expiretime.product_id_lack=Please select the product to purchase notify.template.not.exists=Notification template does not exist notify.template.code.duplicate=A notification template with code [{}] already exists notify.send.template.param.miss=Notification template parameter ({}) is missing machine.not.exists=Machine does not exist machine.template.not.exists=Machine template does not exist default.template.count=Default template count error the.current.machine.is.already.in.use=The current machine is in use and cannot be deleted machine.error=The current machine is incorrect, please select a machine again the.current.brand.of.the.machine.exists=The brand already exists in the templates configured for the current machine, please enter a different brand name the.model.of.the.machine.does.not.exist=The template for this machine model does not exist, please configure it the.current.brand=Brand ID error, or brand does not exist machine.num.error=The number of machines of this type in the organization has reached the maximum limit and cannot be created machine.name.error=The machine name already exists, please enter another machine name machinetemplate.name.error=The machine template name already exists, please enter another machine template name labelingmachine.related.data.error=The labeling machine data associated with the current machine is incorrect, please reconfigure it or select another template drillmachine.related.data.error=The drilling machine data associated with the current machine is incorrect, please reconfigure it or select another template machine.data.error=The organization has not authorized machines yet, please contact the organization administrator or customer service for authorization machine.num.data.error=The authorized number of machines cannot exceed 127 machine.used.already=The current machine is used in a processing solution group and cannot be deleted label.template.not.exists=Label template does not exist label.not.exists=Label does not exist default.label.not.exists=The default label template for this type does not exist machine.use.label=The current label is used by machines and cannot be deleted default.not.deleted=The default label template cannot be deleted label.is.use.error=The label is used in packaging settings by users and cannot be deleted data.source.not.exists=System data source does not exist order.parts.import.list.is.empty=The imported production part list cannot be empty remain.plate.status.used=The remaining plate is in use and cannot be modified remain.plate.status.no.used=The remaining plate is not in use remain.plate.usr.type=The remaining plate usage type is non-verifiable remain.plate.id.not.exists=No remaining plate selected, please select a remaining plate remain.plate.count.max=The maximum number of remaining plates that can be added at one time is 999 currently.no.configuration.available=There is no configuration information for {0}, please go to settings to configure system.config.not_exists=System configuration does not exist system.config.type_not_support=Unsupported system configuration type system.config.custom_plate_no.rule_save_format_error=Custom plate number configuration: invalid save format, please check the rule system.config.custom_plate_no.rule_reset_not_support=Custom plate number configuration: this rule does not support manual reset/clear system.config.custom_plate_no.rule_item_not_found=Custom plate number configuration: rule item not found for manual reset/clear system.config.custom_plate_no.rule_order_reset_failed=Custom plate number configuration: failed to reset/clear order sequence, please contact support custom.plate_no.rule.code_empty=Rule code cannot be empty custom.plate_no.rule.code_not_match=Rule code [{0}] is invalid, please check the configuration rule custom.plate_no.rule.date_format_error=Date format [{0}] is invalid, please check the configuration rule custom.plate_no.rule.custom_value_empty=Custom character value cannot be empty, please check the configuration rule custom.plate_no.rule.reset_mode_error=Reset/Clear mode for rule [{0}] is invalid, please check the configuration rule custom.plate_no.rule.int_type_empty=The field \"{1}\" under \"{0}\" cannot be empty, please check the configuration rule custom.plate_no.rule.int_type_convert_error=Value conversion error for numeric parameter {1}:{2} under \"{0}\", please check the configuration rule custom.plate_no.rule.bool_type_convert_error=Value conversion error for boolean parameter {1}:{2} under \"{0}\", please check the configuration rule process.scheme.data_empty=Field \"{0}\" in the process scheme group is empty and cannot be saved, please configure it process.scheme.config.data_empty=Field \"{0}\" in the process scheme group is empty, please check the configuration process.scheme.config.field_error=The current scheme group configuration is invalid, please reconfigure process.scheme.config.in_use=The current scheme group is in use in scheduling and cannot be deleted process.scheme.config.machine_label_empty=Machine label data for the scheme group's parser is empty, please check the machine label configuration config.data_error=Current system configuration data is incorrect, please try sorting again process.config.used_already=The current line configuration is already used in a process scheme group and cannot be deleted optimization.config.used_already=The current optimization configuration is already used in a process scheme group and cannot be deleted sealedge.config.item_empty=There are empty fields in configuration #{0}, please fill in the data sealedge.config.max_value_error=In configuration #{0}, the value of {1} must be greater than or equal to {2}, please modify sealedge.config.data_error=The current edge band configuration is incorrect, please re-check before adding sealedge.config.name_exists=Configuration name already exists, please rename sealedge.config.decimal_places_max_three=In configuration #{0}, decimal places must not exceed 3, please modify sealedge.config.min_value_gt_zero=In configuration #{0}, minimum width {1} must be greater than 0, please modify sealedge.config.max_value_gt_zero=In configuration #{0}, maximum width {1} must be greater than 0, please modify sealedge.config.value_range_error=In configuration #{0}, maximum width must be greater than minimum width, please modify token.app_type.exist=The current application already has a token configuration and cannot add a new one token.config.not_exists=The token configuration for the current application does not exist token.time.is_expires=The current token has expired. Please reconfigure or extend the validity period token.app_type.no_update=The application name cannot be modified token.data.is_null=The token configuration is empty and does not need to be deleted token.expires_time.is_null=No valid time was selected. Please select one before adding token.expires_time.data_error=The selected validity time has expired. Please extend the validity time token.insert.data_error=Failed to add token. Please try again invoice.no_exist=The invoice record is incorrect. Please check again. invoicing.reject_reason=Please provide the reason for rejecting the invoice. purchase_record.no_exist=The purchase record corresponding to the invoice is invalid. Please return it to the organization and reapply. invoice.is_fail=The invoice has already been issued and cannot be issued again. products.is_exist=Product [{0}] already exists. Please modify the product name and try again. products.no_delete=The product is currently listed and cannot be deleted. Please delist it first. products.no_update=The product is currently listed and cannot be modified. products.detail.no_update=The product corresponding to the pricing rule is listed and cannot be modified. advertisement.time_error=Invalid delivery time. The end time must be later than the start time. advertisement.name.is_exist=The advertisement name already exists. Please rename it. advertisement.no_delete=The advertisement has been published and cannot be deleted. End publication first. product_promotion.active.name.is_exist=The promotion name already exists. Please modify it. product_promotion.purchaseduration.is_exist=A promotion with purchase duration {0}{1} already exists under the selected product. Please modify. invoice_title.not_exists=The invoice title does not exist. Please create it first. org_invoice.purchase_record.update_num.not_match=Some selected purchase records may have already been invoiced. Please reselect and submit. org_invoice.agree_file.null=The invoice confirmation file cannot be empty. Please upload it. invoice_title.org.exists=The organization already has an invoice title. Please refresh and edit it. invoice_title.taxpayerid.exists=The taxpayer identification number already exists. Please check. products.not_nolist=The product is not listed. org_product.purchase.lock=There are ongoing product purchase operations under the organization. Please try again later. invoice_title.enterprise.taxnumber.empty=The enterprise tax number cannot be empty. invoice.amount.zero=The invoiceable amount is 0. Please check the purchase record. invoice.apply.uninvoiceable.exist=There are records that cannot be invoiced. Please refresh and select again. pay.channel_not_support=Unsupported payment channel, please use another one pay.order_not_exist=Payment order does not exist, order number [{0}], please initiate payment again pay.order_channel_query_not_exist=If you have confirmed the QR code payment, please refresh the page later. The payment platform may experience delays pay.order_notify_data_parse_error=Failed to parse payment notification data pay.order_status_is_not_waiting=The payment order is not in a waiting state pay.order_submit_channel_error=Failed to initiate channel payment, please contact customer service pay.notify_passback_tradetype_not_support_error=Unsupported payment callback tradeType:[{0}], please check the payment channel product.no_exist=The product does not exist product.detail_no_exist=The product's pricing rule does not exist product.detail_duration_exist=A pricing rule for product duration [{0}/{1}] already exists, please modify and try again product.promotion_no_exist=The promotion does not exist product.detail_duration_unit_not_support=Unsupported duration unit, please check the pricing rule's duration unit org.product_purchase_wait_pay_error=There are pending payment records for this product under the organization. Please confirm or cancel payment before purchasing again product.price_null_error=Suggested product price is empty, please contact customer service org.product_purchase_not_exist_error=The organization's purchase record does not exist, please check the data org.product_purchase_exist_error=Purchase record for organization [{0}] already exists, please do not duplicate the definition advertisement.no_exist=The advertisement does not exist advertisement.status_endtime_expired=The advertisement's end time has expired. Please republish or edit the delivery time advertisement.image_empty_error=The advertisement image file is empty, please upload again advertisement.image_upload_fail=Failed to upload the advertisement image, please try again later advertisement.update_status_error=The advertisement has already been published. Please end the publication before editing parser.no_exist=The parser does not exist, please reselect parser.template_no_exist=The parser template does not exist, please reselect product_purchase.no_exist=The purchase record does not exist, please check product_purchase.endtime_before_delaytime_error=The product subscription validity period {0} has not exceeded the current date, please adjust the subscription duration product.delay_duration_unit_not_support=Units of extension duration for unsupported products \ No newline at end of file diff --git a/cf-module-system/cf-module-system-biz/src/test/java/com/cf/imes/module/system/service/funds/delay/ProductDelayServiceImplTest.java b/cf-module-system/cf-module-system-biz/src/test/java/com/cf/imes/module/system/service/funds/delay/ProductDelayServiceImplTest.java new file mode 100644 index 000000000..2e0bb48aa --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/test/java/com/cf/imes/module/system/service/funds/delay/ProductDelayServiceImplTest.java @@ -0,0 +1,492 @@ +package com.cf.imes.module.system.service.funds.delay; + +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.test.core.ut.BaseDbAndRedisUnitTest; +import com.cf.imes.module.system.controller.admin.funds.delay.vo.PreviouProductDelayRespVO; +import com.cf.imes.module.system.controller.admin.funds.delay.vo.ProductDelayPageReqVO; +import com.cf.imes.module.system.controller.admin.funds.delay.vo.ProductDelayRespVO; +import com.cf.imes.module.system.controller.admin.funds.delay.vo.ProductDelaySaveReqVO; +import com.cf.imes.module.system.dal.dataobject.funds.delay.ProductDelayRecordDO; +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.mysql.funds.delay.ProductDelayRecordMapper; +import com.cf.imes.module.system.dal.mysql.funds.purchase.PurchaseRecordMapper; +import com.cf.imes.module.system.enums.pay.DurationUnitEnum; +import com.cf.imes.module.system.enums.pay.PayChannelCodeEnum; +import com.cf.imes.module.system.enums.pay.PurchaseRecordStatusEnum; +import com.cf.imes.module.system.service.funds.products.ProductsDetailService; +import com.cf.imes.module.system.service.funds.purchase.PurchaseService; +import com.cf.imes.module.system.service.organ.OrganService; +import jakarta.annotation.Resource; +import org.junit.jupiter.api.Test; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.bean.override.mockito.MockitoBean; + +import java.time.LocalDate; +import java.util.Arrays; +import java.util.List; + +import static com.cf.imes.framework.test.core.util.AssertUtils.assertServiceException; +import static com.cf.imes.framework.test.core.util.RandomUtils.randomLongId; +import static com.cf.imes.framework.test.core.util.RandomUtils.randomPojo; +import static com.cf.imes.module.system.enums.ErrorCodeConstants.PRODUCT_DELAY_UNIT_NOT_SUPPORT; +import static com.cf.imes.module.system.enums.ErrorCodeConstants.PRODUCT_PURCHASE_NO_EXIST; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.when; + +/** + * {@link ProductDelayServiceImpl} 的单元测试类 + * + * @author Gqr + * @since 2025/12/8 14:30 + */ +@Import(ProductDelayServiceImpl.class) +public class ProductDelayServiceImplTest extends BaseDbAndRedisUnitTest { + + @Resource + private ProductDelayServiceImpl productDelayService; + + @Resource + private ProductDelayRecordMapper recordMapper; + + @Resource + private PurchaseRecordMapper purchaseRecordMapper; + + @MockitoBean + private OrganService organService; + + @MockitoBean + private PurchaseService purchaseService; + + @MockitoBean + private ProductsDetailService productsDetailService; + + @Test + public void testCreateProductDelay_noPreDelayRecord_success() { + // 准备参数 + Long organId = randomLongId(); + Long purchaseId = randomLongId(); + Long productId = randomLongId(); + + // Mock 组织 + OrganizationDO organization = new OrganizationDO(); + organization.setId(organId); + organization.setName("测试组织"); + when(organService.validOrgan(organId)).thenReturn(organization); + + // Mock 购买记录 + PurchaseRecordDO purchaseRecord = PurchaseRecordDO.builder() + .id(purchaseId) + .productId(productId) + .productName("测试产品") + .startTime(LocalDate.now().minusMonths(6)) + .endTime(LocalDate.now().plusMonths(6)) + .build(); + when(purchaseService.getRecord(purchaseId)).thenReturn(purchaseRecord); + + // 构造请求 + ProductDelaySaveReqVO reqVO = new ProductDelaySaveReqVO(); + reqVO.setOrganId(organId); + reqVO.setPurchaseId(purchaseId); + reqVO.setDelayDuration(3); + reqVO.setDelayDurationUnit(DurationUnitEnum.MONTH.getCode()); + + // 调用 + Long delayId = productDelayService.createProductDelay(reqVO); + + // 断言 + assertNotNull(delayId); + ProductDelayRecordDO dbRecord = recordMapper.selectById(delayId); + assertNotNull(dbRecord); + assertEquals(organId, dbRecord.getOrganId()); + assertEquals("测试组织", dbRecord.getOrganName()); + assertEquals(productId, dbRecord.getProductId()); + assertEquals("测试产品", dbRecord.getProductName()); + assertEquals(3, dbRecord.getDelayDuration()); + assertEquals(DurationUnitEnum.MONTH.getCode(), dbRecord.getDelayDurationUnit()); + assertEquals(purchaseRecord.getEndTime(), dbRecord.getEndTime()); + assertEquals(purchaseRecord.getEndTime().plusMonths(3), dbRecord.getDelayTime()); + assertEquals(purchaseId, dbRecord.getPurchaseId()); + assertFalse(dbRecord.getPaid()); + } + + @Test + public void testCreateProductDelay_withPreDelayRecord_success() { + // 准备参数 + Long organId = randomLongId(); + Long purchaseId = randomLongId(); + Long productId = randomLongId(); + + // Mock 组织 + OrganizationDO organization = new OrganizationDO(); + organization.setId(organId); + organization.setName("测试组织"); + when(organService.validOrgan(organId)).thenReturn(organization); + + // Mock 购买记录 + PurchaseRecordDO purchaseRecord = PurchaseRecordDO.builder() + .id(purchaseId) + .productId(productId) + .productName("测试产品") + .startTime(LocalDate.now().minusMonths(6)) + .endTime(LocalDate.now().plusMonths(6)) + .build(); + when(purchaseService.getRecord(purchaseId)).thenReturn(purchaseRecord); + + // 插入前序延期记录 + ProductDelayRecordDO preDelayRecord = ProductDelayRecordDO.builder() + .organId(organId) + .organName("测试组织") + .productId(productId) + .productName("测试产品") + .delayDuration(1) + .delayDurationUnit(DurationUnitEnum.YEAR.getCode()) + .endTime(purchaseRecord.getEndTime()) + .delayTime(purchaseRecord.getEndTime().plusYears(1)) + .purchaseId(purchaseId) + .paid(true) + .build(); + recordMapper.insert(preDelayRecord); + + // 构造请求 + ProductDelaySaveReqVO reqVO = new ProductDelaySaveReqVO(); + reqVO.setOrganId(organId); + reqVO.setPurchaseId(purchaseId); + reqVO.setDelayDuration(6); + reqVO.setDelayDurationUnit(DurationUnitEnum.YEAR.getCode()); + + // 调用 + Long delayId = productDelayService.createProductDelay(reqVO); + + // 断言 + assertNotNull(delayId); + ProductDelayRecordDO dbRecord = recordMapper.selectById(delayId); + assertNotNull(dbRecord); + // 应该基于前序记录的延期时间计算 + assertEquals(preDelayRecord.getDelayTime(), dbRecord.getEndTime()); + assertEquals(preDelayRecord.getDelayTime().plusYears(6), dbRecord.getDelayTime()); + } + + @Test + public void testCreateProductDelay_expiredEndTime_success() { + // 准备参数 + Long organId = randomLongId(); + Long purchaseId = randomLongId(); + Long productId = randomLongId(); + + // Mock 组织 + OrganizationDO organization = new OrganizationDO(); + organization.setId(organId); + organization.setName("测试组织"); + when(organService.validOrgan(organId)).thenReturn(organization); + + // Mock 购买记录(已过期) + PurchaseRecordDO purchaseRecord = PurchaseRecordDO.builder() + .id(purchaseId) + .productId(productId) + .productName("测试产品") + .startTime(LocalDate.now().minusMonths(12)) + .endTime(LocalDate.now().minusMonths(1)) // 已过期 + .build(); + when(purchaseService.getRecord(purchaseId)).thenReturn(purchaseRecord); + + // 构造请求 + ProductDelaySaveReqVO reqVO = new ProductDelaySaveReqVO(); + reqVO.setOrganId(organId); + reqVO.setPurchaseId(purchaseId); + reqVO.setDelayDuration(3); + reqVO.setDelayDurationUnit(DurationUnitEnum.DAY.getCode()); + + // 调用 + Long delayId = productDelayService.createProductDelay(reqVO); + + // 断言 + assertNotNull(delayId); + ProductDelayRecordDO dbRecord = recordMapper.selectById(delayId); + assertNotNull(dbRecord); + // 已过期的情况,应该从今天开始计算 + assertEquals(LocalDate.now(), dbRecord.getEndTime()); + assertEquals(LocalDate.now().plusDays(3), dbRecord.getDelayTime()); + } + + @Test + public void testCreateProductDelay_withExpiredPreDelayRecord_success() { + // 准备参数 + Long organId = randomLongId(); + Long purchaseId = randomLongId(); + Long productId = randomLongId(); + + // Mock 组织 + OrganizationDO organization = new OrganizationDO(); + organization.setId(organId); + organization.setName("测试组织"); + when(organService.validOrgan(organId)).thenReturn(organization); + + // Mock 购买记录(未过期) + PurchaseRecordDO purchaseRecord = PurchaseRecordDO.builder() + .id(purchaseId) + .productId(productId) + .productName("测试产品") + .startTime(LocalDate.now().minusMonths(6)) + .endTime(LocalDate.now().plusMonths(6)) + .build(); + when(purchaseService.getRecord(purchaseId)).thenReturn(purchaseRecord); + + // 插入前序延期记录(延期时间未过期) + ProductDelayRecordDO preDelayRecord = ProductDelayRecordDO.builder() + .organId(organId) + .organName("测试组织") + .productId(productId) + .productName("测试产品") + .delayDuration(3) + .delayDurationUnit(DurationUnitEnum.MONTH.getCode()) + .endTime(purchaseRecord.getEndTime()) + .delayTime(LocalDate.now().plusMonths(9)) // 未过期的延期时间 + .purchaseId(purchaseId) + .paid(true) + .build(); + recordMapper.insert(preDelayRecord); + + // 构造请求 + ProductDelaySaveReqVO reqVO = new ProductDelaySaveReqVO(); + reqVO.setOrganId(organId); + reqVO.setPurchaseId(purchaseId); + reqVO.setDelayDuration(6); + reqVO.setDelayDurationUnit(4); + + // 调用并断言异常 + assertServiceException(() -> productDelayService.createProductDelay(reqVO), + PRODUCT_DELAY_UNIT_NOT_SUPPORT); + } + + @Test + public void testCreateProductDelay_purchaseNotExist() { + // 准备参数 + Long organId = randomLongId(); + Long purchaseId = randomLongId(); + + // Mock 组织 + OrganizationDO organization = new OrganizationDO(); + organization.setId(organId); + organization.setName("测试组织"); + when(organService.validOrgan(organId)).thenReturn(organization); + + // Mock 购买记录不存在 + when(purchaseService.getRecord(purchaseId)).thenReturn(null); + + // 构造请求 + ProductDelaySaveReqVO reqVO = new ProductDelaySaveReqVO(); + reqVO.setOrganId(organId); + reqVO.setPurchaseId(purchaseId); + reqVO.setDelayDuration(3); + reqVO.setDelayDurationUnit(DurationUnitEnum.MONTH.getCode()); + + // 调用并断言异常 + assertServiceException(() -> productDelayService.createProductDelay(reqVO), + PRODUCT_PURCHASE_NO_EXIST); + } + + @Test + public void testGetPage() { + // mock 数据 + ProductDelayRecordDO record1 = randomPojo(ProductDelayRecordDO.class, o -> { + o.setOrganName("晨丰科技"); + o.setProductName("ERP产品"); + o.setDelayDuration(3); + o.setDelayDurationUnit(DurationUnitEnum.MONTH.getCode()); + }); + recordMapper.insert(record1); + + // 不匹配的数据 + recordMapper.insert(randomPojo(ProductDelayRecordDO.class, o -> { + o.setOrganName("其他组织"); + o.setProductName("ERP产品"); + o.setDelayDuration(4); + o.setDelayDurationUnit(DurationUnitEnum.MONTH.getCode()); + })); + + // 准备参数 + ProductDelayPageReqVO reqVO = new ProductDelayPageReqVO(); + reqVO.setOrganName("晨丰科技"); + reqVO.setProductName("ERP产品"); + reqVO.setDelayDuration(3); + reqVO.setPageNo(1); + reqVO.setPageSize(10); + + // 调用 + PageResult pageResult = productDelayService.getPage(reqVO); + + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + ProductDelayRespVO respVO = pageResult.getList().get(0); + assertEquals("晨丰科技", respVO.getOrganName()); + assertEquals("ERP产品", respVO.getProductName()); + assertEquals(3, respVO.getDelayDuration()); + } + + @Test + public void testGetRecordsByPurchaseId() { + // 准备数据 + Long purchaseId = randomLongId(); + Long organId = randomLongId(); + + // mock 数据 + ProductDelayRecordDO record1 = randomPojo(ProductDelayRecordDO.class, o -> { + o.setOrganName("晨丰科技"); + o.setProductName("ERP产品"); + o.setDelayDuration(3); + o.setDelayDurationUnit(DurationUnitEnum.MONTH.getCode()); + o.setPurchaseId(purchaseId); + o.setOrganId(organId); + }); + recordMapper.insert(record1); + + // 不匹配的数据 + recordMapper.insert(randomPojo(ProductDelayRecordDO.class, o -> { + o.setOrganName("其他组织"); + o.setProductName("ERP产品"); + o.setDelayDurationUnit(DurationUnitEnum.MONTH.getCode()); + })); + + // 调用 + List records = productDelayService.getRecordsByPurchaseId(purchaseId, organId); + + // 断言 + assertEquals(1, records.size()); + // 验证按 ID 倒序 + assertEquals(3, records.get(0).getDelayDuration()); + } + + @Test + public void testGetActiveRecordsByProductId_withRecords() { + // 准备数据 + Long productId = randomLongId(); + Long organId = randomLongId(); + Long purchaseId = randomLongId(); + + // 插入活跃的购买记录 + PurchaseRecordDO purchaseRecord = randomPojo(PurchaseRecordDO.class, o -> { + o.setId(purchaseId); + o.setOrganId(organId); + o.setProductId(productId); + o.setStatus(PurchaseRecordStatusEnum.ACTIVE.getStatus()); + o.setCurrency(null); + o.setIsInvocing(null); + o.setPaymentMethod(PayChannelCodeEnum.ALIPAY_PC.getCode()); + }); + purchaseRecordMapper.insert(purchaseRecord); + + // 插入延期记录 + ProductDelayRecordDO delayRecord = randomPojo(ProductDelayRecordDO.class, o -> { + o.setOrganId(organId); + o.setProductId(productId); + o.setPurchaseId(purchaseId); + o.setDelayDuration(3); + o.setDelayDurationUnit(DurationUnitEnum.MONTH.getCode()); + o.setDelayTime(LocalDate.now().plusMonths(3)); + o.setEndTime(LocalDate.now()); + }); + recordMapper.insert(delayRecord); + + // 调用 + PreviouProductDelayRespVO result = productDelayService.getActiveRecordsByProductId(productId, organId); + + // 断言 + assertNotNull(result); + assertNotNull(result.getPreviouPurchaseRecord()); + assertEquals(purchaseId, result.getPreviouPurchaseRecord().getId()); + assertNotNull(result.getDelayRespVOList()); + assertEquals(1, result.getDelayRespVOList().size()); + assertEquals(3, result.getDelayRespVOList().get(0).getDelayDuration()); + } + + @Test + public void testGetActiveRecordsByProductId_noPurchaseRecord() { + // 准备数据 + Long productId = randomLongId(); + Long organId = randomLongId(); + + // 调用(没有购买记录) + PreviouProductDelayRespVO result = productDelayService.getActiveRecordsByProductId(productId, organId); + + // 断言 + assertNotNull(result); + assertNull(result.getPreviouPurchaseRecord()); + assertNull(result.getDelayRespVOList()); + } + + @Test + public void testUpdatePurchaseDelayRecordsPaidAndRemark() { + // 准备数据 + Long organId = randomLongId(); + + ProductDelayRecordDO record1 = randomPojo(ProductDelayRecordDO.class, o -> { + o.setPaid(false); + o.setRemark(null); + o.setDelayDuration(3); + o.setDelayDurationUnit(DurationUnitEnum.MONTH.getCode()); + o.setOrganId(organId); + }); + + recordMapper.insert(record1); + + // 准备更新数据 + record1.setRemark("备注1"); + List updateList = Arrays.asList(record1); + + // 调用 + productDelayService.updatePurchaseDelayRecordsPaidAndRemark(updateList, organId, true); + + // 断言 + ProductDelayRecordDO dbRecord1 = recordMapper.selectById(record1.getId()); + assertTrue(dbRecord1.getPaid()); + assertEquals("备注1", dbRecord1.getRemark()); + } + + @Test + public void testUpdatePurchaseDelayRecordsPaid() { + // 准备数据 + Long purchaseId = randomLongId(); + Long organId = randomLongId(); + + ProductDelayRecordDO record1 = randomPojo(ProductDelayRecordDO.class, o -> { + o.setDelayDurationUnit(DurationUnitEnum.MONTH.getCode()); + o.setOrganId(organId); + o.setPurchaseId(purchaseId); + o.setPaid(false); + }); + recordMapper.insert(record1); + + // 调用 + productDelayService.updatePurchaseDelayRecordsPaid(purchaseId, organId); + + // 断言 + ProductDelayRecordDO dbRecord1 = recordMapper.selectById(record1.getId()); + assertTrue(dbRecord1.getPaid()); + } + + @Test + public void testResetPurchaseDelayRecordsRemark() { + // 准备数据 + Long purchaseId = randomLongId(); + Long organId = randomLongId(); + + ProductDelayRecordDO record1 = randomPojo(ProductDelayRecordDO.class, o -> { + o.setRemark("测试备注"); + o.setDelayDuration(3); + o.setDelayDurationUnit(DurationUnitEnum.MONTH.getCode()); + o.setOrganId(organId); + o.setPurchaseId(purchaseId); + }); + recordMapper.insert(record1); + + + // 调用 + productDelayService.resetPurchaseDelayRecordsRemark(purchaseId, organId); + + // 断言 + ProductDelayRecordDO dbRecord1 = recordMapper.selectById(record1.getId()); + assertNull(dbRecord1.getRemark()); + } +} diff --git a/cf-module-system/cf-module-system-biz/src/test/resources/sql/clean.sql b/cf-module-system/cf-module-system-biz/src/test/resources/sql/clean.sql index 3e06d2a9d..b95c437fb 100644 --- a/cf-module-system/cf-module-system-biz/src/test/resources/sql/clean.sql +++ b/cf-module-system/cf-module-system-biz/src/test/resources/sql/clean.sql @@ -38,4 +38,6 @@ DELETE FROM "process_group"; DELETE FROM "products"; DELETE FROM "products_details"; DELETE FROM "product_promotion"; -DELETE FROM "advertisement"; \ No newline at end of file +DELETE FROM "advertisement"; +DELETE FROM "product_delay_record"; +DELETE FROM "purchase_record" \ No newline at end of file diff --git a/cf-module-system/cf-module-system-biz/src/test/resources/sql/create_tables.sql b/cf-module-system/cf-module-system-biz/src/test/resources/sql/create_tables.sql index 2e97bfa1f..00bde23c0 100644 --- a/cf-module-system/cf-module-system-biz/src/test/resources/sql/create_tables.sql +++ b/cf-module-system/cf-module-system-biz/src/test/resources/sql/create_tables.sql @@ -752,3 +752,59 @@ CREATE TABLE IF NOT EXISTS "advertisement" ( "deleted" BIT DEFAULT FALSE NOT NULL COMMENT '是否删除,0否1是', PRIMARY KEY ("id") ) COMMENT '广告表 advertisement'; + +CREATE TABLE IF NOT EXISTS "product_delay_record" +( + "id" BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY COMMENT '主键,自增', + "organ_id" BIGINT NOT NULL DEFAULT '0' COMMENT '组织ID', + "organ_name" VARCHAR(30) NOT NULL COMMENT '组织名称', + "product_id" BIGINT NOT NULL COMMENT '产品编号', + "product_name" VARCHAR(64) NOT NULL COMMENT '产品名称', + "delay_duration" INT NOT NULL COMMENT '延期时长', + "delay_duration_unit" TINYINT NOT NULL COMMENT '延期时长单位', + "end_time" DATE NOT NULL COMMENT '产品结束时间', + "delay_time" DATE NOT NULL COMMENT '延期后有效时长', + "purchase_id" VARCHAR(2048) DEFAULT NULL COMMENT '购买记录单号', + "remark" VARCHAR(1024) DEFAULT NULL COMMENT '备注', + "creator" VARCHAR(64) DEFAULT NULL COMMENT '创建者', + "create_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + "updater" VARCHAR(64) DEFAULT NULL COMMENT '更新者', + "update_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + "paid" BIT DEFAULT FALSE COMMENT '是否支付', + "deleted" BIT NOT NULL DEFAULT FALSE COMMENT '是否删除,0否1是', + PRIMARY KEY ("id") +) COMMENT '产品延期记录表'; + +CREATE TABLE IF NOT EXISTS "purchase_record" +( + "id" BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY COMMENT '主键,根据ID号规则生成', + "organ_id" BIGINT NOT NULL DEFAULT '0' COMMENT '组织ID', + "previous_id" BIGINT DEFAULT NULL COMMENT '前序订购记录id', + "product_id" BIGINT NOT NULL COMMENT '产品ID', + "product_details_id" BIGINT NOT NULL COMMENT '产品明细ID', + "product_promotion_id" BIGINT DEFAULT NULL COMMENT '优惠活动id', + "product_name" VARCHAR(64) NOT NULL COMMENT '产品名称', + "order_no" VARCHAR(64) DEFAULT NULL COMMENT '订单号', + "purchase_duration" INT NOT NULL DEFAULT '0' COMMENT '购买时长', + "purchase_duration_unit" TINYINT NOT NULL COMMENT '购买时长单位:0年、1月、2日', + "gift_duration" INT DEFAULT NULL COMMENT '赠送时长', + "gift_duration_unit" TINYINT DEFAULT NULL COMMENT '赠送时长单位:0年、1月、2日', + "start_time" DATE NOT NULL COMMENT '产品开始时间', + "end_time" DATE NOT NULL COMMENT '产品结束时间', + "payment_method" TINYINT NOT NULL DEFAULT '0' COMMENT '支付方式:0现金余额;1赠送金;2支付宝;3微信;4现金+赠送金;5现金+支付宝;6现金+微信;7赠送金+支付宝;8赠送金+微信;9现金+赠送金+支付宝;10现金+赠送金+微信', + "total_amount" DECIMAL(10, 2) NOT NULL DEFAULT 0.00 COMMENT '订单总额', + "original_amount" DECIMAL(10, 2) NOT NULL DEFAULT 0.00 COMMENT '原始价格', + "month_average_amount" DECIMAL(10, 2) NOT NULL DEFAULT 0.00 COMMENT '月均单价', + "external_spent" DECIMAL(10, 2) NOT NULL DEFAULT 0.00 COMMENT '外部支付金额', + "currency" TINYINT DEFAULT NULL COMMENT '货币类型', + "currency_unit" VARCHAR(10) DEFAULT NULL COMMENT '货币单位', + "is_invocing" TINYINT DEFAULT NULL COMMENT '是否开票:0可开票 1待开票 2已开票', + "initial" BIT NOT NULL DEFAULT FALSE COMMENT '是否首次订购', + "status" INT DEFAULT '1' COMMENT '购买记录状态,1有效、2等待支付、3作废', + "creator" VARCHAR(64) DEFAULT NULL COMMENT '创建者', + "create_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + "updater" VARCHAR(64) DEFAULT NULL COMMENT '更新者', + "update_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + "deleted" BIT NOT NULL DEFAULT FALSE COMMENT '是否删除:0否 1是', + PRIMARY KEY ("id") +) COMMENT '购买记录表';