소스 검색

Merge branch 'master' into dev_sharding

# Conflicts:
#	cif-service/src/main/java/com/txz/cif/web/ro/TFPayNotifyRO.java
#	cif-service/src/main/java/com/txz/cif/web/ro/TFWithdrawCallbackRO.java
#	cif-service/src/main/resources/bootstrap.properties
Mr.qian 1 개월 전
부모
커밋
def4bc8b69
26개의 변경된 파일637개의 추가작업 그리고 100개의 파일을 삭제
  1. 35 0
      cif-service/src/main/java/com/txz/cif/configurer/CSHuaGuConf.java
  2. 2 2
      cif-service/src/main/java/com/txz/cif/configurer/MyWebMvcConfigurer.java
  3. 103 0
      cif-service/src/main/java/com/txz/cif/configurer/OpenApiConfig.java
  4. 46 57
      cif-service/src/main/java/com/txz/cif/configurer/SwaggerConfig.java
  5. 2 0
      cif-service/src/main/java/com/txz/cif/constants/RedisConstants.java
  6. 8 0
      cif-service/src/main/java/com/txz/cif/core/Result.java
  7. 11 0
      cif-service/src/main/java/com/txz/cif/service/CSHuaGuService.java
  8. 2 0
      cif-service/src/main/java/com/txz/cif/service/UserService.java
  9. 51 0
      cif-service/src/main/java/com/txz/cif/service/impl/CSHuaGuServiceImpl.java
  10. 45 27
      cif-service/src/main/java/com/txz/cif/service/impl/UserServiceImpl.java
  11. 32 0
      cif-service/src/main/java/com/txz/cif/web/CSHuaGuController.java
  12. 2 2
      cif-service/src/main/java/com/txz/cif/web/RechargeRecordApiController.java
  13. 5 5
      cif-service/src/main/java/com/txz/cif/web/UserApiController.java
  14. 2 2
      cif-service/src/main/java/com/txz/cif/web/WithdrawRecordApiController.java
  15. 8 0
      cif-service/src/main/java/com/txz/cif/web/mng/MidChannelMethodController.java
  16. 1 1
      cif-service/src/main/java/com/txz/cif/web/para/updateparam/MidChannelMethodUpdateParam.java
  17. 36 0
      cif-service/src/main/java/com/txz/cif/web/ro/SmsRecordRO.java
  18. 0 0
      cif-service/src/main/java/com/txz/cif/web/ro/TFPayNotifyDTO.java
  19. 52 0
      cif-service/src/main/java/com/txz/cif/web/ro/TFPayNotifyRO.java
  20. 0 0
      cif-service/src/main/java/com/txz/cif/web/ro/TFWithdrawCallbackDTO.java
  21. 71 0
      cif-service/src/main/java/com/txz/cif/web/ro/TFWithdrawCallbackRO.java
  22. 10 3
      cif-service/src/main/resources/bootstrap.properties
  23. 89 0
      cif-service/src/main/resources/static/i18n/messages_bn_BD.properties
  24. 9 0
      cif-service/src/main/resources/static/i18n/messages_en.properties
  25. 6 1
      cif-service/src/main/resources/static/i18n/messages_en_US.properties
  26. 9 0
      cif-service/src/main/resources/static/i18n/messages_zh_CN.properties

+ 35 - 0
cif-service/src/main/java/com/txz/cif/configurer/CSHuaGuConf.java

@@ -0,0 +1,35 @@
+package com.txz.cif.configurer;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.stereotype.Component;
+
+/**
+ * 短信服务配置类
+ *
+ * @author lingma
+ * @date 2025-09-28
+ */
+@Data
+@Component
+@RefreshScope
+@ConfigurationProperties(prefix = "cshg")
+public class CSHuaGuConf {
+    
+    /**
+     * 短信服务API地址
+     */
+    private String apiurl;
+    
+    /**
+     * API密钥
+     */
+    private String apikey;
+    
+    /**
+     * API密钥
+     */
+    private String apisecret;
+    
+}

+ 2 - 2
cif-service/src/main/java/com/txz/cif/configurer/MyWebMvcConfigurer.java

@@ -134,12 +134,12 @@ public class MyWebMvcConfigurer implements WebMvcConfigurer {
                     logger.info(e.getMessage());
                 } else if (e instanceof NoHandlerFoundException) {
                     result.setCode(ResultCode.NOT_FOUND.getCode()).setMessage(
-                            "接口 [" + request.getRequestURI() + "] 不存在");
+                            LocalUtil.get("interface")+" [" + request.getRequestURI() + "] "+LocalUtil.get("does.not.exist"));
                 } else if (e instanceof ServletException) {
                     result.setCode(ResultCode.FAIL.getCode()).setMessage(e.getMessage());
                 } else {
                     result.setCode(ResultCode.INTERNAL_SERVER_ERROR.getCode()).setMessage(
-                            "接口 [" + request.getRequestURI() + "] 内部错误,请联系管理员");
+                            LocalUtil.get("interface")+" [" + request.getRequestURI() + "] "+LocalUtil.get("internal.error.please.contact.the.administrator"));
                     String args = "";
                     String requestAccept = request.getHeader("Content-Type");
                     String contentType = "text/html";

+ 103 - 0
cif-service/src/main/java/com/txz/cif/configurer/OpenApiConfig.java

@@ -0,0 +1,103 @@
+package com.txz.cif.configurer;
+
+import io.swagger.v3.oas.models.Components;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.security.SecurityRequirement;
+import io.swagger.v3.oas.models.security.SecurityScheme;
+import io.swagger.v3.oas.models.servers.Server;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.client.ServiceInstance;
+import org.springframework.cloud.client.discovery.DiscoveryClient;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+@Configuration
+public class OpenApiConfig {
+
+
+    //    @Value("${server.port}")
+//    private String mallPort;
+    @Value("${server.host}")
+    private String host;
+
+    @Resource
+    private DiscoveryClient discoveryClient;
+
+    @Bean
+    public OpenAPI serviceOpenAPI(@Value("${spring.application.name}") String serviceName) {
+
+//        String localIp;
+//
+//        {
+//            try {
+//                localIp = InetAddress.getLocalHost().getHostAddress();
+//            } catch (UnknownHostException e) {
+//                throw new RuntimeException(e);
+//            }
+//        }
+//
+//        // 拼接 `mall` 服务的访问地址(格式:http://IP:端口)
+//        String mallServiceUrl = "http://" + localIp + ":" + mallPort;
+
+
+        // 1. 定义第一个请求头:Custom-Header-1
+        SecurityScheme header1 = new SecurityScheme()
+                .type(SecurityScheme.Type.APIKEY)
+                .name("accesstoken") // 第一个请求头名称
+                .in(SecurityScheme.In.HEADER);
+
+        // 2. 定义第二个请求头:Custom-Header-2
+        SecurityScheme header2 = new SecurityScheme()
+                .type(SecurityScheme.Type.APIKEY)
+                .name("token") // 第二个请求头名称
+                .in(SecurityScheme.In.HEADER);
+
+        SecurityScheme header3 = new SecurityScheme()
+                .type(SecurityScheme.Type.APIKEY)
+                .name("Accept-Language") // 第二个请求头名称
+                .in(SecurityScheme.In.HEADER);
+
+        // 3. 注册两个安全方案到组件
+        Components components = new Components()
+                .addSecuritySchemes("Header1Security", header1)  // 第一个方案标识
+                .addSecuritySchemes("Header2Security", header2) // 第二个方案标识
+                .addSecuritySchemes("Header3Security", header3); // 第二个方案标识
+
+        // 4. 定义安全要求,同时应用两个请求头
+        List<SecurityRequirement> securityRequirements = new ArrayList<>();
+        securityRequirements.add(new SecurityRequirement().addList("Header1Security"));
+        securityRequirements.add(new SecurityRequirement().addList("Header2Security"));
+        securityRequirements.add(new SecurityRequirement().addList("Header3Security"));
+
+        List<ServiceInstance> gateway = discoveryClient.getInstances("backstage");
+
+        String gatewayUrl = "http://192.168.0.112:8401/cif";
+        if (!CollectionUtils.isEmpty(gateway)) {
+            ServiceInstance serviceInstance = gateway.get(0);
+
+            String serviceId = serviceInstance.getServiceId();
+          //  String host = serviceInstance.getHost();
+            int port = serviceInstance.getPort();
+            gatewayUrl = "http://" + host + ":" + port + "/cif";
+        }
+
+
+        return new OpenAPI()
+                .openapi("3.0.1")
+                .info(new io.swagger.v3.oas.models.info.Info()
+                        .title(serviceName + " API")
+                        .version("1.0")
+                        .description("Documentation for " + serviceName))
+                .servers(Collections.singletonList(
+                        new Server().url(gatewayUrl)
+                )).components(components) // 注册组件
+                .security(securityRequirements); // 全局应用安全要求
+
+    }
+}

+ 46 - 57
cif-service/src/main/java/com/txz/cif/configurer/SwaggerConfig.java

@@ -1,57 +1,46 @@
-package com.txz.cif.configurer;
-
-// import com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.v3.oas.models.Components;
-import io.swagger.v3.oas.models.OpenAPI;
-import io.swagger.v3.oas.models.info.Contact;
-import io.swagger.v3.oas.models.info.Info;
-import io.swagger.v3.oas.models.info.License;
-import io.swagger.v3.oas.models.parameters.Parameter;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Profile;
-import springfox.documentation.builders.ApiInfoBuilder;
-import springfox.documentation.builders.ParameterBuilder;
-import springfox.documentation.builders.PathSelectors;
-import springfox.documentation.builders.RequestHandlerSelectors;
-import springfox.documentation.schema.ModelRef;
-import springfox.documentation.service.ApiInfo;
-import springfox.documentation.spi.DocumentationType;
-import springfox.documentation.spring.web.plugins.Docket;
-import springfox.documentation.swagger2.annotations.EnableSwagger2;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@Configuration
-@Profile({"dev", "test"})
-public class SwaggerConfig {
-    
-    @Bean
-    public OpenAPI customOpenAPI() {
-        return new OpenAPI()
-                .components(new Components()
-                        .addParameters("token", new io.swagger.v3.oas.models.parameters.Parameter()
-                                .name("token")
-                                .description("user token")
-                                .required(false)
-                                .in("header"))
-                        .addParameters("appCode", new Parameter()
-                                .name("appCode")
-                                .description("appCode")
-                                .required(false)
-                                .in("header")))
-                .info(new Info()
-                        .title("API接口文档")
-                        .description("swagger2 demo api")
-                        .version("1.0")
-                        .contact(new Contact()
-                                .name("admin")
-                                .url("http://localhost/swagger-ui.html")
-                                .email("xxx@qq.com"))
-                        .license(new License()
-                                .name("Apache 2.0")
-                                .url("http://localhost/swagger-ui.html")));
-    }
-}
+//package com.txz.cif.configurer;
+//
+//// import com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI;
+//import io.swagger.annotations.ApiOperation;
+//import io.swagger.v3.oas.models.Components;
+//import io.swagger.v3.oas.models.OpenAPI;
+//import io.swagger.v3.oas.models.info.Contact;
+//import io.swagger.v3.oas.models.info.Info;
+//import io.swagger.v3.oas.models.info.License;
+//import io.swagger.v3.oas.models.parameters.Parameter;
+//import org.springframework.context.annotation.Bean;
+//import org.springframework.context.annotation.Configuration;
+//import org.springframework.context.annotation.Profile;
+//
+//
+//@Configuration
+//@Profile({"dev", "test"})
+//public class SwaggerConfig {
+//
+//    @Bean
+//    public OpenAPI customOpenAPI() {
+//        return new OpenAPI()
+//                .components(new Components()
+//                        .addParameters("token", new io.swagger.v3.oas.models.parameters.Parameter()
+//                                .name("token")
+//                                .description("user token")
+//                                .required(false)
+//                                .in("header"))
+//                        .addParameters("appCode", new Parameter()
+//                                .name("appCode")
+//                                .description("appCode")
+//                                .required(false)
+//                                .in("header")))
+//                .info(new Info()
+//                        .title("API接口文档")
+//                        .description("swagger2 demo api")
+//                        .version("1.0")
+//                        .contact(new Contact()
+//                                .name("admin")
+//                                .url("http://localhost/swagger-ui.html")
+//                                .email("xxx@qq.com"))
+//                        .license(new License()
+//                                .name("Apache 2.0")
+//                                .url("http://localhost/swagger-ui.html")));
+//    }
+//}

+ 2 - 0
cif-service/src/main/java/com/txz/cif/constants/RedisConstants.java

@@ -7,5 +7,7 @@ package com.txz.cif.constants;
 public class RedisConstants {
 
   public static final String USER_SMS_CODE = "user:sms:code:%s";
+  
+  public static final String USER_SMS_LOGIN_CODE = "user:sms:login:code:%s";
 
 }

+ 8 - 0
cif-service/src/main/java/com/txz/cif/core/Result.java

@@ -58,6 +58,14 @@ public class Result<T> implements Serializable {
                 .data(data)
                 .build();
     }
+    
+    public static Result fail() {
+        return Result.builder()
+                .code("400")
+                .message("")
+                .data("")
+                .build();
+    }
 
     public static Result fail(String code, String message) {
         return Result.builder()

+ 11 - 0
cif-service/src/main/java/com/txz/cif/service/CSHuaGuService.java

@@ -0,0 +1,11 @@
+package com.txz.cif.service;
+
+/**
+ * @author: MTD®️
+ * @date: 2025/9/28
+ */
+
+public interface CSHuaGuService {
+    
+    boolean sendValidCode(String mobile, String message);
+}

+ 2 - 0
cif-service/src/main/java/com/txz/cif/service/UserService.java

@@ -45,4 +45,6 @@ public interface UserService extends Service<User> {
     //    boolean sendMsg(MessageParam param);
     
     List<UserDTO> getUsersByIds(List<Long> userIds);
+    
+    void delCode(String phoneNo);
 }

+ 51 - 0
cif-service/src/main/java/com/txz/cif/service/impl/CSHuaGuServiceImpl.java

@@ -0,0 +1,51 @@
+package com.txz.cif.service.impl;
+
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.txz.cif.configurer.CSHuaGuConf;
+import com.txz.cif.service.CSHuaGuService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author: MTD®️
+ * @date: 2025/9/28
+ */
+@Service
+@Slf4j
+@AllArgsConstructor
+public class CSHuaGuServiceImpl implements CSHuaGuService {
+    
+    private final CSHuaGuConf csHuaGuConf;
+    
+    @Override
+    public boolean sendValidCode(String mobile, String message) {
+        log.info("开始发送短信--->" + mobile + ",内容--->" + message);
+        JSONObject body = new JSONObject();
+        body.put("phone", mobile);
+        body.put("context", message);
+        body.put("apikey", csHuaGuConf.getApikey());
+        body.put("secret", csHuaGuConf.getApisecret());
+        String result = "";
+        try {
+            result = HttpUtil.createPost(csHuaGuConf.getApiurl())
+                    .body(body.toJSONString())
+                    .contentType("application/json")
+                    .execute()
+                    .body();
+            // {"code":200,"res":"892352879716536320","error":null,"seqid":null}
+            JSONObject resultJson = JSON.parseObject(result);
+            if (resultJson.getInteger("code") == 200) {
+                log.info("发送短信成功--->" + result);
+                return true;
+            }
+            log.info("发送短信失败--->" + result);
+            return false;
+        } catch (Exception e) {
+            log.error("发送短信异常--->" + result);
+            return false;
+        }
+    }
+}

+ 45 - 27
cif-service/src/main/java/com/txz/cif/service/impl/UserServiceImpl.java

@@ -2,6 +2,7 @@ package com.txz.cif.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.SecureUtil;
@@ -14,6 +15,7 @@ import com.txz.cif.dubbo.client.OperatingConfigDubboServiceClient;
 import com.txz.cif.model.Account;
 import com.txz.cif.model.User;
 import com.txz.cif.service.AccountService;
+import com.txz.cif.service.CSHuaGuService;
 import com.txz.cif.service.UserService;
 import com.txz.cif.web.para.UserAddParam;
 import org.slf4j.Logger;
@@ -53,6 +55,11 @@ public class UserServiceImpl extends AbstractService<User> implements UserServic
     @Resource
     private OperatingConfigDubboServiceClient messageDubboServiceClient;
     
+    private static final String SMS_MESSAGE = "Your verification code is %s .It will expire in 5 minutes.Do not share it with anyone";
+    
+    @Resource
+    private CSHuaGuService csHuaGuService;
+    
     @Override
     public Boolean checkMail(String email) {
         User user = findBy("email", email);
@@ -66,34 +73,38 @@ public class UserServiceImpl extends AbstractService<User> implements UserServic
         return String.format(RedisConstants.USER_SMS_CODE, email);
     }
     
+    private String getSmsKey(String phoneNo) {
+        return String.format(RedisConstants.USER_SMS_LOGIN_CODE, phoneNo);
+    }
+    
     @Override
     public Result<Object> sendCode(String phoneNo) {
-        String key = getKey(phoneNo);
+        String key = this.getSmsKey(phoneNo);
+        Object o = redisClient.get(key);
+        if (ObjectUtil.isNotEmpty(o)) {
+            return Result.success();
+        }
         String code = RandomUtil.randomNumbers(6);
-        String subject = "来自Free City的CODE码";
-        String content = "您的CODE为: " + code;
-        // TODO 发短信
-        //        Result<Object> result = MailClient.send(email, subject, content, null);
-        //        if (result.isSuccess()) {
-        //            redisClient.set(key, code, 60);
-        //        }
-        redisClient.set(key, code, 60);
-        return Result.success(code);
+        if (csHuaGuService.sendValidCode(phoneNo, String.format(SMS_MESSAGE, code))) {
+            redisClient.set(key, code, 60 * 5);
+            return Result.fail();
+        }
+        return Result.success();
     }
     
     @Override
     public Boolean checkCode(String phoneNo, String code) {
-        if (StrUtil.equals("888888", code)) {
-            return true;
-        }
-        log.error("checkCode  phoneNo:" + phoneNo);
-        log.error("checkCode  code:" + code);
-        String key = getKey(phoneNo);
+        // if (StrUtil.equals("888888", code)) {
+        //     return true;
+        // }
+        // log.error("checkCode  phoneNo:" + phoneNo);
+        // log.error("checkCode  code:" + code);
+        String key = this.getSmsKey(phoneNo);
         Object o = redisClient.get(key);
-        if (o != null) {
-            log.error("checkCode  o:" + o.toString());
+        if (ObjectUtil.isEmpty(o)) {
+            return false;
         }
-        if (o != null && StrUtil.equals(o.toString(), code)) {
+        if (StrUtil.equals(o.toString(), code)) {
             return true;
         }
         return false;
@@ -209,16 +220,18 @@ public class UserServiceImpl extends AbstractService<User> implements UserServic
         if (user == null) {
             return ResultGenerator.genFailResult(ResultCode.USER_IS_NULL);
         }
-        //fixme 暂时跳过短验
-        if (!verifyCode.equals("888888")) {
-            String key = getKey(user.getPhoneNo());
-            Object o = redisClient.get(key);
-            if (!StrUtil.equals(o.toString(), verifyCode)) {
-                return ResultGenerator.genFailResult(ResultCode.CODE_CHECK_FAIL);
-            }
+        // if (!verifyCode.equals("888888")) {
+        String key = getSmsKey(user.getAreaCode() + user.getPhoneNo());
+        Object o = redisClient.get(key);
+        if (ObjectUtil.isNull(o)) {
+            return Result.fail();
+        }
+        if (!StrUtil.equals(o.toString(), verifyCode)) {
+            return ResultGenerator.genFailResult(ResultCode.CODE_CHECK_FAIL);
         }
+        // }
         update(User.builder().id(user.getId()).pwd(SecureUtil.md5(newPwd + user.getSalt())).build());
-        
+        redisClient.del(key);
         return Result.success();
     }
     
@@ -227,6 +240,11 @@ public class UserServiceImpl extends AbstractService<User> implements UserServic
         return userMapper.getUsersByIds(Joiner.on(",").join(userIds));
     }
     
+    @Override
+    public void delCode(String phoneNo) {
+        redisClient.del(getSmsKey(phoneNo));
+    }
+    
     //    @Override
     //    public boolean sendMsg(MessageParam param) {
     //        if (param == null){

+ 32 - 0
cif-service/src/main/java/com/txz/cif/web/CSHuaGuController.java

@@ -0,0 +1,32 @@
+package com.txz.cif.web;
+
+import com.txz.cif.web.ro.SmsRecordRO;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 短信通知
+ *
+ * @author: MTD®️
+ * @date: 2025/9/28
+ */
+@Slf4j
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("sms")
+public class CSHuaGuController {
+    
+    /**
+     * cshg短信回调
+     */
+    @PostMapping("notice")
+    // {"date":"202509","index":0,"phone":"8801865055177","smsId":"892352879716536320","status":0}
+    public String notice(@RequestBody SmsRecordRO ro) {
+        // fixme ps:短信回调???接不接业务上有啥区别?
+        return "OK";
+    }
+}

+ 2 - 2
cif-service/src/main/java/com/txz/cif/web/RechargeRecordApiController.java

@@ -26,7 +26,7 @@ import com.txz.cif.service.impl.BizLogServiceImpl;
 import com.txz.cif.util.IpUtils;
 import com.txz.cif.util.TFPayUtil;
 import com.txz.cif.web.para.RecordParam;
-import com.txz.cif.web.ro.TFPayNotifyDTO;
+import com.txz.cif.web.ro.TFPayNotifyRO;
 import com.txz.cif.web.vo.CreatePayVO;
 import com.txz.cif.web.vo.PaymentPriceVO;
 import com.txz.mall.enums.NoticeEnum;
@@ -280,7 +280,7 @@ public class RechargeRecordApiController {
      * 回调通知
      */
     @PostMapping("/callback/tfpay")
-    public Object callback(@ModelAttribute TFPayNotifyDTO dto) {
+    public Object callback(@ModelAttribute TFPayNotifyRO dto) {
         LockInfo lockInfo = lockTemplate.lock(String.format(MyConstants.TF_PAY_NOTIFY_LOCK, dto.getOrderid()), Long.valueOf(1000 * 60 * 2), Long.valueOf(1000 * 1), RedisTemplateLockExecutor.class);
         if (null == lockInfo) {
             return "WAIT";

+ 5 - 5
cif-service/src/main/java/com/txz/cif/web/UserApiController.java

@@ -200,10 +200,8 @@ public class UserApiController extends AbstractApiController {
     @ApiOperation(value = "获取验证码", notes = "", httpMethod = "GET")
     @GetMapping("/getCode")
     public Result<UserInfoBO> getCode(@RequestParam String phoneNo) {
-        //        Long userId = authService.getTokenUserId(request);
-        // TODO 发送短信
-        Result<Object> result = userService.sendCode(phoneNo);
-        return ResultGenerator.genSuccessResult(result.getData().toString());
+        userService.sendCode(phoneNo);
+        return ResultGenerator.genSuccessResult();
     }
     
     @ApiOperation(value = "获取会员等级配置", notes = "", httpMethod = "GET")
@@ -320,7 +318,7 @@ public class UserApiController extends AbstractApiController {
             if (CollUtil.isNotEmpty(users)) {
                 return ResultGenerator.genFailResult(ResultCode.USER_IS_EXIST);
             }
-            if (!userService.checkCode(params.getPhone(), params.getVerifyCode())) {
+            if (!userService.checkCode(params.getAreaCode() + params.getPhone(), params.getVerifyCode())) {
                 return ResultGenerator.genFailResult(ResultCode.CODE_CHECK_FAIL);
             }
             String salt = RandomUtil.randomString(4);
@@ -389,6 +387,8 @@ public class UserApiController extends AbstractApiController {
             userService.update(user);
             user.setPwd("***");
             user.setSalt("***");
+            // 删除验证码
+            userService.delCode(params.getAreaCode() + params.getPhone());
             return ResultGenerator.genSuccessResult(user);
         } catch (Exception e) {
             log.error("注册异常", e);

+ 2 - 2
cif-service/src/main/java/com/txz/cif/web/WithdrawRecordApiController.java

@@ -23,7 +23,7 @@ import com.txz.cif.service.*;
 import com.txz.cif.util.TFPayUtil;
 import com.txz.cif.web.para.RecordParam;
 import com.txz.cif.web.para.WithdrawParam;
-import com.txz.cif.web.ro.TFWithdrawCallbackDTO;
+import com.txz.cif.web.ro.TFWithdrawCallbackRO;
 import com.txz.mall.enums.NoticeEnum;
 import com.txz.operating.dto.ConfigDTO;
 import io.jsonwebtoken.Claims;
@@ -227,7 +227,7 @@ public class WithdrawRecordApiController {
      * tfpay提现通知
      */
     @PostMapping("/callback/tfpay")
-    public String callback(@ModelAttribute TFWithdrawCallbackDTO dto) {
+    public String callback(@ModelAttribute TFWithdrawCallbackRO dto) {
         LockInfo lockInfo = lockTemplate.lock(String.format(MyConstants.TF_PAY_WITHDRAW_NOTIFY_LOCK, dto.getOrderid()), Long.valueOf(1000 * 60 * 2), Long.valueOf(1000 * 1), RedisTemplateLockExecutor.class);
         if (null == lockInfo) {
             return "WAIT";

+ 8 - 0
cif-service/src/main/java/com/txz/cif/web/mng/MidChannelMethodController.java

@@ -1,5 +1,6 @@
 package com.txz.cif.web.mng;
 import cn.hutool.core.bean.BeanUtil;
+import com.txz.cif.configurer.LocalUtil;
 import com.txz.cif.core.Result;
 import com.txz.cif.core.ResultGenerator;
 import com.txz.cif.model.MidChannelMethod;
@@ -10,6 +11,7 @@ import com.txz.cif.core.ResultCode;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.txz.cif.web.para.updateparam.MidChannelMethodUpdateParam;
+import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -79,7 +81,13 @@ public class MidChannelMethodController {
     	if(midChannelMethodUpdateParam.getId() == null){
     		return ResultGenerator.genFailResult(ResultCode.ID_IS_NULL);
     	}
+        if(!ObjectUtils.isEmpty(midChannelMethodUpdateParam.getWeight())){
+			Byte weight = 10;
+			if(midChannelMethodUpdateParam.getWeight()>weight){
+				return ResultGenerator.genFailResult(LocalUtil.get("the.weight.cannot.exceed.10"));
+			}
 
+		}
 		MidChannelMethod bean = BeanUtil.toBean(midChannelMethodUpdateParam, MidChannelMethod.class);
 		try {
     //		midChannelMethod.setUpdateTime(new Date());

+ 1 - 1
cif-service/src/main/java/com/txz/cif/web/para/updateparam/MidChannelMethodUpdateParam.java

@@ -23,7 +23,7 @@ public class MidChannelMethodUpdateParam {
     private Byte status;
 
     @ApiModelProperty(value="weight权重")
-    private Byte weight;
+    private Integer weight;
 
     @ApiModelProperty(value="isValid删除标识 1是0否")
     private Byte isValid;

+ 36 - 0
cif-service/src/main/java/com/txz/cif/web/ro/SmsRecordRO.java

@@ -0,0 +1,36 @@
+package com.txz.cif.web.ro;
+
+import lombok.Data;
+
+/**
+ * 短信记录
+ */
+@Data
+public class SmsRecordRO {
+    
+    /**
+     * 日期(年月)
+     */
+    private String date;
+    
+    /**
+     * 推送次数
+     */
+    private Integer index;
+    
+    /**
+     * 手机号
+     */
+    private String phone;
+    
+    /**
+     * 短信ID
+     */
+    private String smsId;
+    
+    /**
+     * 状态 0:成功   1:失败
+     */
+    private Integer status;
+    
+}

+ 0 - 0
cif-service/src/main/java/com/txz/cif/web/ro/TFPayNotifyDTO.java


+ 52 - 0
cif-service/src/main/java/com/txz/cif/web/ro/TFPayNotifyRO.java

@@ -0,0 +1,52 @@
+package com.txz.cif.web.ro;
+
+import lombok.Data;
+
+/**
+ * @author: MTD®️
+ * @date: 2025/9/1
+ */
+
+@Data
+public class TFPayNotifyRO {
+    
+    /**
+     * 商户编号 - 平台分配商户号
+     */
+    private String memberid;
+    
+    /**
+     * 商户订单号 - 订单号唯一, 字符长度20
+     */
+    private String orderid;
+    
+    /**
+     * 订单最终金额 - 订单金额 单位:元
+     */
+    private String amount;
+    
+    /**
+     * 平台订单号
+     */
+    private String transaction_id;
+    
+    /**
+     * 交易成功时间 - 时间格式:Y-m-d H:i:s
+     */
+    private String datetime;
+    
+    /**
+     * 交易状态 - "00" 为成功
+     */
+    private String returncode;
+    
+    /**
+     * 扩展返回 - 商户附加数据返回
+     */
+    private String attach;
+    
+    /**
+     * 签名
+     */
+    private String sign;
+}

+ 0 - 0
cif-service/src/main/java/com/txz/cif/web/ro/TFWithdrawCallbackDTO.java


+ 71 - 0
cif-service/src/main/java/com/txz/cif/web/ro/TFWithdrawCallbackRO.java

@@ -0,0 +1,71 @@
+package com.txz.cif.web.ro;
+
+import lombok.Data;
+
+/**
+ * @author: MTD®️
+ * @date: 2025/9/3
+ */
+@Data
+public class TFWithdrawCallbackRO {
+    
+    /**
+     * 商户编号 - 平台分配商户号
+     */
+    private String memberid;
+    
+    /**
+     * 商户订单号 - 订单号唯一, 字符长度20
+     */
+    private String orderid;
+    
+    /**
+     * 订单金额 - 订单金额 单位:元
+     */
+    private String amount;
+    
+    /**
+     * 平台订单号
+     */
+    private String transaction_id;
+    
+    /**
+     * 用户姓名 - 如:张三
+     */
+    private String pay_username;
+    
+    /**
+     * 银行账号 - 如:银行卡号码
+     */
+    private String pay_banknumber;
+    
+    /**
+     * 银行名称 - 如:工商银行
+     */
+    private String pay_bankname;
+    
+    /**
+     * 交易成功时间 - 时间格式:Y-m-d H:i:s
+     */
+    private String datetime;
+    
+    /**
+     * 交易状态 - 1为成功,-1失败,0处理中
+     */
+    private String returncode;
+    
+    /**
+     * 订单描述 - 如:失败原因
+     */
+    private String remark;
+    
+    /**
+     * 扩展返回 - 商户附加数据返回
+     */
+    private String attach;
+    
+    /**
+     * 签名
+     */
+    private String sign;
+}

+ 10 - 3
cif-service/src/main/resources/bootstrap.properties

@@ -8,7 +8,7 @@ spring.profiles.active=dev
 local.nacos=172.17.0.3:8848
 dev.nacos=172.17.0.3:8848
 test.nacos=172.10.100.40:30848
-pro.nacos=172.10.100.10:30308
+pro.nacos=172.31.181.53:8848
 spring.cloud.nacos.discovery.server-addr=${${spring.profiles.active}.nacos}
 spring.cloud.nacos.config.server-addr=${${spring.profiles.active}.nacos}
 dev.file.home=./temp
@@ -74,8 +74,9 @@ server.undertow.worker-threads=256
 local.job=http://8.219.117.74/xxl-job-admin
 dev.job=http://124.220.229.80:9096/xxl-job-admin
 test.job=http://172.10.100.40:8080/xxl-job-admin
-pro.job=http://172.10.100.40:8080/xxl-job-admin
+pro.job=http://172.31.181.53:8080/xxl-job-admin
 dev.accessToken=
+pro.accessToken=
 #test.accessToken=default_token
 xxl.job.admin.addresses=${${spring.profiles.active}.job}
 xxl.job.executor.appname=${spring.application.name}executor
@@ -196,4 +197,10 @@ sharding.datasource.ds1.password=hy123456
 sharding.datasource.dsdefault.driver-class-name=com.mysql.jdbc.Driver
 sharding.datasource.dsdefault.jdbc-url=jdbc:mysql://124.222.152.234:3306/cif?serverTimezone=GMT%2b8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false
 sharding.datasource.dsdefault.username=root
-sharding.datasource.dsdefault.password=hy123456
+sharding.datasource.dsdefault.password=hy123456
+#cshg
+cshg.apiurl=http://smsapi.cshuagu.com/api/msg/key/send
+cshg.apikey=e3543dc9
+cshg.apisecret=7bf5efdb
+
+server.host=124.222.152.234

+ 89 - 0
cif-service/src/main/resources/static/i18n/messages_bn_BD.properties

@@ -31,3 +31,92 @@ WithdrawStatusEnum.CANCEL=Closed
 RedEnvelopeStatusEnum.PROCESSED=Processing
 RedEnvelopeStatusEnum.SUCCESS=Completed
 
+SUCCESS=\u09B8\u09AB\u09B2\u09A4\u09BE
+FAIL=\u09AC\u09CD\u09AF\u09B0\u09CD\u09A5\u09A4\u09BE
+UNAUTHORIZED=\u0985\u09A8\u09A8\u09C1\u09AE\u09CB\u09A6\u09BF\u09A4 (\u09B8\u09CD\u09AC\u09BE\u0995\u09CD\u09B7\u09B0 \u09A4\u09CD\u09B0\u09C1\u099F\u09BF)
+NOT_FOUND=API \u09AC\u09BF\u09A6\u09CD\u09AF\u09AE\u09BE\u09A8 \u09A8\u09C7\u0987
+INTERNAL_SERVER_ERROR=\u0985\u09AD\u09CD\u09AF\u09A8\u09CD\u09A4\u09B0\u09C0\u09A3 \u09B8\u09BE\u09B0\u09CD\u09AD\u09BE\u09B0 \u09A4\u09CD\u09B0\u09C1\u099F\u09BF
+PERMISSION_NOT_HAS=\u0985\u09AA\u09BE\u09B0\u09C7\u09B6\u09A8\u09C7\u09B0 \u0985\u09A8\u09C1\u09AE\u09A4\u09BF \u09A8\u09C7\u0987
+BACKSTAGE_IS_ERROR=\u0997\u09C7\u099F\u0993\u09AF\u09BC\u09C7 \u09AC\u09CD\u09AF\u09A4\u09BF\u0995\u09CD\u09B0\u09AE
+OAUTH_INVALID_ACCESS_TOKEN=\u09B2\u0997\u0987\u09A8 \u09AE\u09C7\u09AF\u09BC\u09BE\u09A6 \u09B6\u09C7\u09B7
+REDIS_KEY_IS_NOT_NULL=\u09A4\u09C1\u09AE\u09BF \u0996\u09C1\u09AC \u09A6\u09CD\u09B0\u09C1\u09A4 \u0995\u09BE\u099C \u0995\u09B0\u099B\u09CB, \u09A6\u09DF\u09BE \u0995\u09B0\u09C7 \u0986\u09AC\u09BE\u09B0 \u099A\u09C7\u09B7\u09CD\u099F\u09BE \u0995\u09B0\u09CB\u0964
+OBJECT_IS_NULL=\u09AC\u09B8\u09CD\u09A4\u09C1 \u0996\u09BE\u09B2\u09BF \u09B9\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7 \u09A8\u09BE
+ID_IS_NULL=\u0985\u09AC\u099C\u09C7\u0995\u09CD\u099F \u0986\u0987\u09A1\u09BF \u0996\u09BE\u09B2\u09BF \u09B0\u09BE\u0996\u09BE \u09AF\u09BE\u09AC\u09C7 \u09A8\u09BE
+CODE_IS_NULL=\u0995\u09CB\u09A1 \u0996\u09BE\u09B2\u09BF \u09B9\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7 \u09A8\u09BE
+NAME_IS_NULL=\u09A8\u09BE\u09AE \u0996\u09BE\u09B2\u09BF \u09B0\u09BE\u0996\u09BE \u09AF\u09BE\u09AC\u09C7 \u09A8\u09BE
+SEQ_IS_NULL=\u09B8\u09BE\u099C\u09BE\u09A8\u09CB\u09B0 \u0995\u09CD\u09B0\u09AE \u0996\u09BE\u09B2\u09BF \u09B0\u09BE\u0996\u09BE \u09AF\u09BE\u09AC\u09C7 \u09A8\u09BE
+USERID_IS_NULL=\u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0\u0995\u09BE\u09B0\u09C0\u09B0 \u0986\u0987\u09A1\u09BF \u0996\u09BE\u09B2\u09BF \u09B0\u09BE\u0996\u09BE \u09AF\u09BE\u09AC\u09C7 \u09A8\u09BE\u0964
+RESULT_IS_NULL=\u0995\u09CB\u09AF\u09BC\u09C7\u09B0\u09BF\u09B0 \u09AB\u09B2\u09BE\u09AB\u09B2 \u0996\u09BE\u09B2\u09BF\u0964
+TYPE_IS_NULL=\u099F\u09BE\u0987\u09AA \u0996\u09BE\u09B2\u09BF
+SQL_ERROR=\u09A1\u09BE\u099F\u09BE\u09AC\u09C7\u09B8 \u09AC\u09CD\u09AF\u09A4\u09BF\u0995\u09CD\u09B0\u09AE
+OPERATOR_IS_NULL=\u098F\u0987 \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0\u0995\u09BE\u09B0\u09C0\u09B0 \u0985\u09AA\u09BE\u09B0\u09C7\u099F\u09B0\u09C7\u09B0 \u09A4\u09A5\u09CD\u09AF \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF\u0964
+OPERATOR_IS_ERROR=\u098F\u0987 \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0\u0995\u09BE\u09B0\u09C0\u09B0 \u0985\u09AA\u09BE\u09B0\u09C7\u099F\u09B0\u09C7\u09B0 \u09A4\u09A5\u09CD\u09AF \u09AD\u09C1\u09B2\u0964
+USER_IS_NULL=\u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0\u0995\u09BE\u09B0\u09C0 \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF
+UNLOGIN_PWD_ERROR=\u09AD\u09C1\u09B2 \u09AA\u09BE\u09B8\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u09A1
+APPCODE_IS_NULL=\u0986\u09AC\u09C7\u09A6\u09A8 \u0986\u0987\u09A1\u09BF \u0996\u09BE\u09B2\u09BF \u09B0\u09BE\u0996\u09BE \u09AF\u09BE\u09AC\u09C7 \u09A8\u09BE
+STATUS_IS_NULL=\u0985\u09AC\u09B8\u09CD\u09A5\u09BE \u0985\u09B8\u09CD\u09AC\u09BE\u09AD\u09BE\u09AC\u09BF\u0995
+ACCOUNT_IS_NULL=\u0985\u09CD\u09AF\u09BE\u0995\u09BE\u0989\u09A8\u09CD\u099F \u0996\u09BE\u09B2\u09BF \u0995\u09B0\u09BE \u09AF\u09BE\u09AC\u09C7 \u09A8\u09BE
+HOSPITAL_IS_NULL=\u0985\u09A8\u09C1\u0997\u09CD\u09B0\u09B9 \u0995\u09B0\u09C7 \u098F\u0995\u099F\u09BF \u09A8\u09BF\u09B7\u09CD\u09AA\u09A4\u09CD\u09A4\u09BF \u09AA\u09B0\u09BF\u0995\u09B2\u09CD\u09AA\u09A8\u09BE \u09A8\u09BF\u09B0\u09CD\u09AC\u09BE\u099A\u09A8 \u0995\u09B0\u09C1\u09A8\u0964
+
+ALIASES_IS_HAVE=\u09AC\u09BF\u09B7\u09AF\u09BC \u0989\u09AA\u09A8\u09BE\u09AE \u0987\u09A4\u09BF\u09AE\u09A7\u09CD\u09AF\u09C7\u0987 \u09AC\u09BF\u09A6\u09CD\u09AF\u09AE\u09BE\u09A8
+SUBJECTTYPE_IS_ERROR=\u09AC\u09BF\u09B7\u09AF\u09BC\u09C7\u09B0 \u09A7\u09B0\u09A8 \u0985\u09B8\u09CD\u09AC\u09BE\u09AD\u09BE\u09AC\u09BF\u0995
+SETTLE_HAVE_DATA=\u09B8\u09C7\u099F\u09C7\u09B2\u09AE\u09C7\u09A8\u09CD\u099F \u09A1\u09C7\u099F\u09BE \u0987\u09A4\u09BF\u09AE\u09A7\u09CD\u09AF\u09C7\u0987 \u09AC\u09BF\u09A6\u09CD\u09AF\u09AE\u09BE\u09A8, \u0985\u09A8\u09C1\u0997\u09CD\u09B0\u09B9 \u0995\u09B0\u09C7 \u09AA\u09CD\u09B0\u09B6\u09BE\u09B8\u0995\u09C7\u09B0 \u09B8\u09BE\u09A5\u09C7 \u09AF\u09CB\u0997\u09BE\u09AF\u09CB\u0997 \u0995\u09B0\u09C1\u09A8\u0964
+AMOUNT_IS_INSUFFICIENT=\u0985\u09CD\u09AF\u09BE\u0995\u09BE\u0989\u09A8\u09CD\u099F\u09C7 \u09AA\u09B0\u09CD\u09AF\u09BE\u09AA\u09CD\u09A4 \u09AC\u09CD\u09AF\u09BE\u09B2\u09C7\u09A8\u09CD\u09B8 \u09A8\u09C7\u0987, \u0985\u09A8\u09C1\u0997\u09CD\u09B0\u09B9 \u0995\u09B0\u09C7 \u09AA\u09CD\u09B0\u09B6\u09BE\u09B8\u0995\u09C7\u09B0 \u09B8\u09BE\u09A5\u09C7 \u09AF\u09CB\u0997\u09BE\u09AF\u09CB\u0997 \u0995\u09B0\u09C1\u09A8\u0964
+ALIASES_IS_ERROR=\u0986\u09AA\u09A8\u09BE\u09B0 \u09B2\u09C7\u0996\u09BE \u09B8\u09BE\u09AC\u099C\u09C7\u0995\u09CD\u099F\u09C7\u09B0 \u0989\u09AA\u09A8\u09BE\u09AE\u099F\u09BF \u09AD\u09C1\u09B2, \u0985\u09A8\u09C1\u0997\u09CD\u09B0\u09B9 \u0995\u09B0\u09C7 \u098F\u0995\u099F\u09BF \u09A8\u09A8-\u09A1\u09C1\u09AA\u09CD\u09B2\u09BF\u0995\u09C7\u099F \u0989\u09AA\u09A8\u09BE\u09AE \u09B2\u09BF\u0996\u09C1\u09A8 (\u09AF\u09C7\u09AE\u09A8: \u09E7\u09E6\u09EF)
+ENDTIME_ERROR=\u0986\u09AA\u09A8\u09BE\u09B0 \u09AA\u09CD\u09B0\u09AC\u09C7\u09B6 \u0995\u09B0\u09BE\u09A8\u09CB \u09B6\u09C7\u09B7 \u09B8\u09AE\u09AF\u09BC \u0997\u09A4\u0995\u09BE\u09B2\u09C7\u09B0 \u099A\u09C7\u09AF\u09BC\u09C7 \u09AC\u09C7\u09B6\u09BF \u09B9\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7 \u09A8\u09BE\u0964
+STARTTIME_ERROR=\u0986\u09AA\u09A8\u09BE\u09B0 \u09AA\u09CD\u09B0\u09AC\u09C7\u09B6 \u0995\u09B0\u09BE\u09A8\u09CB \u09B6\u09C1\u09B0\u09C1\u09B0 \u09B8\u09AE\u09AF\u09BC\u099F\u09BF \u09B8\u09BF\u09B8\u09CD\u099F\u09C7\u09AE \u09AA\u09CD\u09B0\u09A4\u09BF\u09B7\u09CD\u09A0\u09BE\u09B0 \u09B8\u09AE\u09AF\u09BC\u09C7\u09B0 \u099A\u09C7\u09AF\u09BC\u09C7 \u0986\u0997\u09C7\u0964
+UNBINDING_NOT_SLEF=\u0997\u09CD\u09B0\u09C1\u09AA\u09C7\u09B0 \u09AE\u09BE\u09B2\u09BF\u0995\u0995\u09C7 \u09AE\u09C1\u0995\u09CD\u09A4 \u0995\u09B0\u09A4\u09C7 \u0985\u0995\u09CD\u09B7\u09AE
+USER_STATUS_IS_ERROR=\u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0\u0995\u09BE\u09B0\u09C0\u09B0 \u0985\u09AC\u09B8\u09CD\u09A5\u09BE \u0985\u09B8\u09CD\u09AC\u09BE\u09AD\u09BE\u09AC\u09BF\u0995, \u0985\u09A8\u09C1\u0997\u09CD\u09B0\u09B9 \u0995\u09B0\u09C7 \u09AA\u09CD\u09B0\u09B6\u09BE\u09B8\u0995\u09C7\u09B0 \u09B8\u09BE\u09A5\u09C7 \u09AF\u09CB\u0997\u09BE\u09AF\u09CB\u0997 \u0995\u09B0\u09C1\u09A8\u0964
+PAY_TYPE_IS_ERROR=\u09B8\u09CD\u09AC\u09BE\u0995\u09CD\u09B7\u09B0 \u09A4\u09CD\u09B0\u09C1\u099F\u09BF, \u0985\u09A8\u09C1\u0997\u09CD\u09B0\u09B9 \u0995\u09B0\u09C7 \u09AA\u09CD\u09B0\u09B6\u09BE\u09B8\u0995\u09C7\u09B0 \u09B8\u09BE\u09A5\u09C7 \u09AF\u09CB\u0997\u09BE\u09AF\u09CB\u0997 \u0995\u09B0\u09C1\u09A8\u0964
+SIGN_ERROR=\u0987\u0989\u099C\u09BE\u09B0 \u0986\u0987\u09A1\u09BF \u0985\u09B8\u09CD\u09AC\u09BE\u09AD\u09BE\u09AC\u09BF\u0995
+
+USERID_IS_ERROR=\u0987\u0989\u099C\u09BE\u09B0 \u0986\u0987\u09A1\u09BF \u0985\u09B8\u09CD\u09AC\u09BE\u09AD\u09BE\u09AC\u09BF\u0995
+LOGINACCOUNT_IS_NULL=\u09B2\u0997\u0987\u09A8 \u0985\u09CD\u09AF\u09BE\u0995\u09BE\u0989\u09A8\u09CD\u099F \u0996\u09BE\u09B2\u09BF \u09B0\u09BE\u0996\u09BE \u09AF\u09BE\u09AC\u09C7 \u09A8\u09BE\u0964
+ORG_IS_NULL=\u09B8\u0982\u0997\u09A0\u09A8 \u0996\u09C1\u0981\u099C\u09C7 \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF
+USER_IS_EXIST=\u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0\u0995\u09BE\u09B0\u09C0 \u0987\u09A4\u09BF\u09AE\u09A7\u09CD\u09AF\u09C7 \u09A8\u09BF\u09AC\u09A8\u09CD\u09A7\u09BF\u09A4
+CODE_CHECK_FAIL=\u09AF\u09BE\u099A\u09BE\u0987\u0995\u09B0\u09A3 \u0995\u09CB\u09A1 \u09AF\u09BE\u099A\u09BE\u0987\u0995\u09B0\u09A3 \u09AC\u09CD\u09AF\u09B0\u09CD\u09A5 \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u09F7
+BANK_IS_NULL=\u0989\u09A4\u09CD\u09A4\u09CB\u09B2\u09A8 \u09AC\u09CD\u09AF\u09BE\u0999\u09CD\u0995 \u0996\u09BE\u09B2\u09BF \u09B0\u09BE\u0996\u09BE \u09AF\u09BE\u09AC\u09C7 \u09A8\u09BE
+REVIEW_IS_NULL=\u09AA\u09B0\u09CD\u09AF\u09BE\u09B2\u09CB\u099A\u09A8\u09BE \u09AC\u09BF\u09B7\u09AF\u09BC\u09AC\u09B8\u09CD\u09A4\u09C1 \u0996\u09BE\u09B2\u09BF
+EFFECTIVE_BALANCE_IS_INSUFFICIENT=\u0985\u09AA\u09B0\u09CD\u09AF\u09BE\u09AA\u09CD\u09A4 \u0989\u09AA\u09B2\u09AC\u09CD\u09A7 \u09AC\u09CD\u09AF\u09BE\u09B2\u09C7\u09A8\u09CD\u09B8
+
+withdrawal.review.failed=\u09AA\u09CD\u09B0\u09A4\u09CD\u09AF\u09BE\u09B9\u09BE\u09B0 \u09AA\u09B0\u09CD\u09AF\u09BE\u09B2\u09CB\u099A\u09A8\u09BE \u09AC\u09CD\u09AF\u09B0\u09CD\u09A5 \u09B9\u09AF\u09BC\u09C7\u099B\u09C7
+withdrawal.channel.does.not.exist=\u09AA\u09CD\u09B0\u09A4\u09CD\u09AF\u09BE\u09B9\u09BE\u09B0\u09C7\u09B0 \u099A\u09CD\u09AF\u09BE\u09A8\u09C7\u09B2 \u09AC\u09BF\u09A6\u09CD\u09AF\u09AE\u09BE\u09A8 \u09A8\u09C7\u0987
+withdrawal.failed=\u09AA\u09CD\u09B0\u09A4\u09CD\u09AF\u09BE\u09B9\u09BE\u09B0 \u09AC\u09CD\u09AF\u09B0\u09CD\u09A5 \u09B9\u09AF\u09BC\u09C7\u099B\u09C7
+this.channel.is.not.supported.temporarily=\u098F\u0987 \u099A\u09CD\u09AF\u09BE\u09A8\u09C7\u09B2\u099F\u09BF \u0985\u09B8\u09CD\u09A5\u09BE\u09AF\u09BC\u09C0\u09AD\u09BE\u09AC\u09C7 \u09B8\u09AE\u09B0\u09CD\u09A5\u09BF\u09A4 \u09A8\u09AF\u09BC\u0964
+configuration.missing=\u0995\u09A8\u09AB\u09BF\u0997\u09BE\u09B0\u09C7\u09B6\u09A8 \u0985\u09A8\u09C1\u09AA\u09B8\u09CD\u09A5\u09BF\u09A4:
+income.account.not.found=\u0986\u09AF\u09BC\u09C7\u09B0 \u09B9\u09BF\u09B8\u09BE\u09AC \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF
+account.not.found=\u0985\u09CD\u09AF\u09BE\u0995\u09BE\u0989\u09A8\u09CD\u099F \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF
+no.suitable.channel.for.this.payment.method.please.change.to.another.payment.method=\u098F\u0987 \u09AA\u09C7\u09AE\u09C7\u09A8\u09CD\u099F \u09AA\u09A6\u09CD\u09A7\u09A4\u09BF\u09B0 \u099C\u09A8\u09CD\u09AF \u0995\u09CB\u09A8\u0993 \u0989\u09AA\u09AF\u09C1\u0995\u09CD\u09A4 \u099A\u09CD\u09AF\u09BE\u09A8\u09C7\u09B2 \u09A8\u09C7\u0987, \u0985\u09A8\u09C1\u0997\u09CD\u09B0\u09B9 \u0995\u09B0\u09C7 \u0985\u09A8\u09CD\u09AF \u09AA\u09C7\u09AE\u09C7\u09A8\u09CD\u099F \u09AA\u09A6\u09CD\u09A7\u09A4\u09BF\u09A4\u09C7 \u09AA\u09B0\u09BF\u09AC\u09B0\u09CD\u09A4\u09A8 \u0995\u09B0\u09C1\u09A8\u0964
+channel.unavailable.please.change.to.another.payment.method=\u099A\u09CD\u09AF\u09BE\u09A8\u09C7\u09B2\u099F\u09BF \u0985\u09A8\u09C1\u09AA\u09B2\u09AC\u09CD\u09A7, \u0985\u09A8\u09C1\u0997\u09CD\u09B0\u09B9 \u0995\u09B0\u09C7 \u0985\u09A8\u09CD\u09AF \u09AA\u09C7\u09AE\u09C7\u09A8\u09CD\u099F \u09AA\u09A6\u09CD\u09A7\u09A4\u09BF\u09A4\u09C7 \u09AA\u09B0\u09BF\u09AC\u09B0\u09CD\u09A4\u09A8 \u0995\u09B0\u09C1\u09A8\u0964
+#this.channel.is.not.supported.temporarily=\u098F\u0987 \u099A\u09CD\u09AF\u09BE\u09A8\u09C7\u09B2\u099F\u09BF \u0985\u09B8\u09CD\u09A5\u09BE\u09AF\u09BC\u09C0\u09AD\u09BE\u09AC\u09C7 \u09B8\u09AE\u09B0\u09CD\u09A5\u09BF\u09A4 \u09A8\u09AF\u09BC\u0964
+failed.to.create.payment.order=\u09AA\u09C7\u09AE\u09C7\u09A8\u09CD\u099F \u0985\u09B0\u09CD\u09A1\u09BE\u09B0 \u09A4\u09C8\u09B0\u09BF \u0995\u09B0\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF
+not.found=\u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF
+object.is.empty=\u0985\u09AC\u099C\u09C7\u0995\u09CD\u099F \u0996\u09BE\u09B2\u09BF
+userid.is.empty=\u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0\u0995\u09BE\u09B0\u09C0\u09B0 \u0986\u0987\u09A1\u09BF \u0996\u09BE\u09B2\u09BF \u0986\u099B\u09C7\u0964
+amount.is.empty=\u09AA\u09B0\u09BF\u09AE\u09BE\u09A3 \u0996\u09BE\u09B2\u09BF
+#object.is.empty=\u0985\u09AC\u099C\u09C7\u0995\u09CD\u099F \u0996\u09BE\u09B2\u09BF
+unsupported.type=\u0985\u09B8\u09AE\u09B0\u09CD\u09A5\u09BF\u09A4 \u09AA\u09CD\u09B0\u0995\u09BE\u09B0
+parameter.is.empty=\u09AA\u09B0\u09BE\u09AE\u09BF\u09A4\u09BF \u0996\u09BE\u09B2\u09BF
+parameter.account.id.is.empty=\u09AA\u09CD\u09AF\u09BE\u09B0\u09BE\u09AE\u09BF\u099F\u09BE\u09B0 \u0985\u09CD\u09AF\u09BE\u0995\u09BE\u0989\u09A8\u09CD\u099F \u0986\u0987\u09A1\u09BF \u0996\u09BE\u09B2\u09BF \u0986\u099B\u09C7
+parameter.amount.is.empty=\u09AA\u09CD\u09AF\u09BE\u09B0\u09BE\u09AE\u09BF\u099F\u09BE\u09B0 \u09AA\u09B0\u09BF\u09AE\u09BE\u09A3 \u0996\u09BE\u09B2\u09BF
+user.not.found=\u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0\u0995\u09BE\u09B0\u09C0 \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF
+user.not.logged.in=\u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0\u0995\u09BE\u09B0\u09C0 \u09B2\u0997 \u0987\u09A8 \u0995\u09B0\u09C7\u09A8\u09A8\u09BF
+#account.not.found=\u0985\u09CD\u09AF\u09BE\u0995\u09BE\u0989\u09A8\u09CD\u099F \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF
+insufficient.frozen.amount=\u0985\u09AA\u09B0\u09CD\u09AF\u09BE\u09AA\u09CD\u09A4 \u09B9\u09BF\u09AE\u09BE\u09AF\u09BC\u09BF\u09A4 \u09AA\u09B0\u09BF\u09AE\u09BE\u09A3
+freezing.exception=\u09B9\u09BF\u09AE\u09BE\u09AF\u09BC\u09BF\u09A4 \u09AC\u09CD\u09AF\u09A4\u09BF\u0995\u09CD\u09B0\u09AE
+frozen.record.not.found=\u09B9\u09BF\u09AE\u09BE\u09AF\u09BC\u09BF\u09A4 \u09B0\u09C7\u0995\u09B0\u09CD\u09A1 \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF
+frozen.status.is.abnormal=\u09B9\u09BF\u09AE\u09BE\u09AF\u09BC\u09BF\u09A4 \u0985\u09AC\u09B8\u09CD\u09A5\u09BE \u0985\u09B8\u09CD\u09AC\u09BE\u09AD\u09BE\u09AC\u09BF\u0995
+#frozen.record.not.found=\u09B9\u09BF\u09AE\u09BE\u09AF\u09BC\u09BF\u09A4 \u09B0\u09C7\u0995\u09B0\u09CD\u09A1 \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF
+frozen.account.not.found=\u0985\u09CD\u09AF\u09BE\u0995\u09BE\u0989\u09A8\u09CD\u099F \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF
+#account.not.found=\u0985\u09CD\u09AF\u09BE\u0995\u09BE\u0989\u09A8\u09CD\u099F \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF
+#account.not.found=\u0986\u09AA\u09A8\u09BF \u09AA\u09C7\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7\u09A8
+increment.factor.must.be.greater.than.0=\u09AC\u09C3\u09A6\u09CD\u09A7\u09BF\u09B0 \u0997\u09C1\u09A3\u09A8\u09C0\u09AF\u09BC\u0995 \u0985\u09AC\u09B6\u09CD\u09AF\u0987 \u09E6 \u098F\u09B0 \u09AC\u09C7\u09B6\u09BF \u09B9\u09A4\u09C7 \u09B9\u09AC\u09C7
+
+interface=interface
+does.not.exist=does not exist
+internal.error.please.contact.the.administrator=internal error please contact the administrator
+exception.occurred=exception occurred
+method=method
+exception.summary=exception summary:
+
+

+ 9 - 0
cif-service/src/main/resources/static/i18n/messages_en.properties

@@ -125,5 +125,14 @@ account.not.found=account not found
 account.not.found=account not found
 increment.factor.must.be.greater.than.0=increment factor must be greater than 0
 
+the.weight.cannot.exceed.10=the weight cannot exceed 10
+
+interface=interface
+does.not.exist=does not exist
+internal.error.please.contact.the.administrator=internal error please contact the administrator
+exception.occurred=exception occurred
+method=method
+exception.summary=exception summary:
+
 
 

+ 6 - 1
cif-service/src/main/resources/static/i18n/messages_en_US.properties

@@ -122,5 +122,10 @@ account.not.found=account not found
 account.not.found=account not found
 increment.factor.must.be.greater.than.0=increment factor must be greater than 0
 
-
+interface=interface
+does.not.exist=does not exist
+internal.error.please.contact.the.administrator=internal error please contact the administrator
+exception.occurred=exception occurred
+method=method
+exception.summary=exception summary:
 

+ 9 - 0
cif-service/src/main/resources/static/i18n/messages_zh_CN.properties

@@ -125,6 +125,15 @@ frozen.account.not.found=\u51BB\u7ED3\u8D26\u53F7\u672A\u627E\u5230
 account.not.found=\u8D26\u53F7\u672A\u627E\u5230
 account.not.found=\u8D26\u53F7\u672A\u627E\u5230
 increment.factor.must.be.greater.than.0=\u9012\u589E\u56E0\u5B50\u5FC5\u987B\u5927\u4E8E0
+the.weight.cannot.exceed.10=\u6743\u91CD\u4E0D\u80FD\u5927\u4E8E10
+
+
+interface=\u63A5\u53E3
+does.not.exist=\u4E0D\u5B58\u5728
+internal.error.please.contact.the.administrator=\u5185\u90E8\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
+exception.occurred=\u53D1\u751F\u5F02\u5E38
+method=\u65B9\u6CD5
+exception.summary=\u5F02\u5E38\u6982\u8981: