From 1004f3d16011f69894196bfd180ea539b76ba4e7 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Wed, 03 Jun 2026 15:27:26 +0800
Subject: [PATCH] 1
---
trading-order-admin/src/main/java/com/yami/trading/admin/controller/AddressController.java | 95 +-
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiNewsController.java | 12
trading-order-admin/src/main/java/com/yami/trading/api/controller/RealtimeController.java | 6
trading-order-admin/src/main/java/com/yami/trading/admin/controller/item/TItemLeverageController.java | 3
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiHighLevelAuthController.java | 22
trading-order-service/src/main/java/com/yami/trading/service/loan/LoanOrderService.java | 35
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiRealNameAuthContoller.java | 12
trading-order-service/src/main/java/com/yami/trading/service/item/ItemLeverageService.java | 4
trading-order-service/src/main/java/com/yami/trading/service/loan/LoanOrderServiceImpl.java | 280 ++++++
trading-order-service/src/main/java/com/yami/trading/service/loan/job/LoanDueRepayJob.java | 50 +
sql/t_loan.sql | 61 +
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiCapitaltWalletWalletController.java | 4
sql/t_loan_menu.sql | 32
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiItemUserOptionalController.java | 12
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiOtcOnlineChatController.java | 4
trading-order-admin/src/main/java/com/yami/trading/admin/controller/miner/MinerOrderController.java | 24
trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiChannelBlockchainController.java | 2
trading-order-service/src/main/java/com/yami/trading/service/ChannelBlockchainService.java | 5
trading-order-admin/src/main/java/com/yami/trading/api/filter/KickoutFilter.java | 2
trading-order-admin/src/main/java/com/yami/trading/api/controller/KlineController.java | 2
trading-order-admin/src/main/java/com/yami/trading/api/dto/RealNameAuthRecordDto.java | 2
trading-order-service/src/main/java/com/yami/trading/service/user/impl/UserDataServiceImpl.java | 90 +
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cUserController.java | 4
trading-order-service/src/main/java/com/yami/trading/service/impl/ChannelBlockchainServiceImpl.java | 31
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiKycController.java | 12
trading-order-admin/src/main/java/com/yami/trading/admin/controller/user/UserController.java | 1
trading-order-service/src/main/java/com/yami/trading/dao/loan/LoanOrderMapper.java | 19
trading-order-admin/src/main/java/com/yami/trading/admin/model/UpdateAddressModel.java | 4
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiIndexController.java | 2
trading-order-admin/src/main/java/com/yami/trading/admin/controller/miner/AdminMinerController.java | 20
trading-order-bean/src/main/java/com/yami/trading/bean/loan/LoanOrder.java | 42
trading-order-admin/src/main/resources/config/system.properties | 2
trading-order-service/src/main/java/com/yami/trading/service/exchange/impl/ExchangeApplyOrderServiceImpl.java | 4
trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/AdminLoanOrderController.java | 190 ++++
trading-order-security-common/src/main/java/com/yami/trading/security/common/adapter/ResourceServerAdapter.java | 1
trading-order-service/src/main/java/com/yami/trading/service/loan/LoanOrderLock.java | 16
trading-order-admin/src/main/java/com/yami/trading/admin/model/UpdateWalltModel.java | 1
trading-order-service/src/main/java/com/yami/trading/dao/loan/LoanConfigMapper.java | 7
trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/AdminLoanConfigController.java | 78 +
trading-order-service/src/main/java/com/yami/trading/service/miner/service/impl/MinerServiceImpl.java | 9
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cAdvertController.java | 40
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiWalletController.java | 14
trading-order-admin/src/main/java/com/yami/trading/api/controller/PromoteController.java | 2
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiNewOnlineChatController.java | 2
trading-order-admin/src/main/java/com/yami/trading/api/dto/HighLevelAuthRecordDto.java | 2
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiBankCardController.java | 50
trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiExchangeApplyOrderController.java | 44
trading-order-common/src/main/java/com/yami/trading/common/constants/TipConstants.java | 7
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiContractOrderController.java | 16
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiTItemLeverageController.java | 4
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiWithdrawController.java | 16
trading-order-admin/src/main/java/com/yami/trading/api/model/SetSafewordModel.java | 2
trading-order-bean/src/main/java/com/yami/trading/bean/loan/LoanConfig.java | 26
trading-order-service/src/main/java/com/yami/trading/service/cms/impl/CmsServiceImpl.java | 15
trading-order-service/src/main/resources/mapper/miner/MinerOrderMapper.xml | 2
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cOrderController.java | 44
trading-order-admin/src/main/java/com/yami/trading/admin/task/IcoTask.java | 167 ---
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiPaymentMethod2Controller.java | 32
trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/LoanController.java | 215 ++++
trading-order-service/src/main/java/com/yami/trading/service/loan/LoanConfigServiceImpl.java | 41
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiFuturesOrderController.java | 16
trading-order-service/src/main/java/com/yami/trading/service/contract/ContractApplyOrderService.java | 5
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiPaymentMethodController.java | 32
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiUserController.java | 158 +-
trading-order-admin/src/main/java/com/yami/trading/admin/controller/future/AdminFuturesOrderController.java | 20
trading-order-service/src/main/java/com/yami/trading/service/loan/LoanConfigService.java | 18
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cPaymentMethodConfigController.java | 2
trading-order-admin/src/main/java/com/yami/trading/admin/controller/cms/CmsController.java | 19
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cAppealController.java | 14
trading-order-service/src/main/java/com/yami/trading/service/impl/UserServiceImpl.java | 5
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApGoogleAuthController.java | 4
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiIcoController.java | 8
trading-order-service/src/main/java/com/yami/trading/service/future/FuturesOrderService.java | 78 +
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiUploadFileController.java | 4
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiItemController.java | 2
trading-order-common/src/main/java/com/yami/trading/common/util/MarketOpenChecker.java | 14
scripts/translate_api_exceptions.js | 169 +++
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiContractApplyOrderController.java | 26
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiRechargeBlockchainController.java | 12
trading-order-service/src/main/resources/mapper/loan/LoanOrderMapper.xml | 55 +
80 files changed, 1,977 insertions(+), 627 deletions(-)
diff --git a/scripts/translate_api_exceptions.js b/scripts/translate_api_exceptions.js
new file mode 100644
index 0000000..447cebe
--- /dev/null
+++ b/scripts/translate_api_exceptions.js
@@ -0,0 +1,169 @@
+const fs = require('fs');
+const path = require('path');
+
+const API_ROOT = path.join(__dirname, '../trading-order-admin/src/main/java/com/yami/trading/api');
+
+const replacements = [
+ ['accessToken 已过期', 'Access token has expired'],
+ ['请输入正确的货币数量', 'Please enter a valid amount'],
+ ['请输入正确的兑换数量', 'Please enter a valid exchange amount'],
+ ['请选择正确的币种', 'Please select a valid currency'],
+ ['系统错误,请稍后重试', 'System error, please try again later'],
+ ['用户已禁用!', 'User account is disabled'],
+ ['用户已禁用', 'User account is disabled'],
+ ['请求第三方失败', 'Third-party request failed'],
+ ['生成实时数据失败', 'Failed to generate market data'],
+ ['代理层级错误', 'Invalid agent level'],
+ ['k线图获取失败', 'Failed to load chart data'],
+ ['系统参数错误', 'System parameter error'],
+ ['资金密码必须6-12位', 'Fund password must be 6-12 characters'],
+ ['资金密码错误', 'Incorrect fund password'],
+ ['不支持的提现币种', 'Unsupported withdrawal currency'],
+ ['订单不存在!', 'Order does not exist'],
+ ['订单不存在', 'Order does not exist'],
+ ['页码不能小于等于0', 'Page number must be greater than 0'],
+ ['页码不是整数', 'Page number must be an integer'],
+ ['用户名不能为空', 'Username is required'],
+ ['登录密码不能为空', 'Login password is required'],
+ ['登录密码必须6-12位', 'Login password must be 6-12 characters'],
+ ['校验IP不合法', 'Invalid IP address'],
+ ['当前用户在黑名单中', 'The current user is on the blacklist.'],
+ ['资金密码不能为空', 'Fund password is required'],
+ ['资金密码不符合设定', 'Fund password does not meet requirements'],
+ ['请先登录', 'Please log in first'],
+ ['密码不能为空', 'Password is required'],
+ ['密码必须6-12位', 'Password must be 6-12 characters'],
+ ['验证类型不能为空', 'Verification type is required'],
+ ['验证码不能为空', 'Verification code is required'],
+ ['用户名不存在', 'Username does not exist'],
+ ['验证码不正确', 'Incorrect verification code'],
+ ['用户名参数为空', 'Username is required'],
+ ['请填写正确的电话号码', 'Please enter a valid phone number'],
+ ['电话号码已绑定其他用户', 'Phone number is bound to another user'],
+ ['电话号码已绑定', 'Phone number is already bound'],
+ ['请填写正确的验证码', 'Please enter a valid verification code'],
+ ['请输入推荐码', 'Please enter referral code'],
+ ['推荐人无权限推荐', 'Referrer is not authorized to refer'],
+ ['请填写正确的邮箱地址', 'Please enter a valid email address'],
+ ['邮箱已绑定其他用户', 'Email is bound to another user'],
+ ['邮箱已绑定', 'Email is already bound'],
+ ['操作失败,请稍后再试', 'Operation failed, please try again later'],
+ ['旧密码不能为空', 'Old password is required'],
+ ['新密码不能为空', 'New password is required'],
+ ['旧资金密码不能为空', 'Old fund password is required'],
+ ['新资金密码不能为空', 'New fund password is required'],
+ ['新密码确认不能为空', 'Password confirmation is required'],
+ ['旧密码不正确!', 'Incorrect old password'],
+ ['新密码不一致', 'New passwords do not match'],
+ ['旧资金密码不能为空', 'Old fund password is required'],
+ ['新资金密码不能为空', 'New fund password is required'],
+ ['新资金密码确认不能为空', 'Fund password confirmation is required'],
+ ['操作类型为空', 'Operation type is required'],
+ ['操作类型不是整数', 'Operation type must be an integer'],
+ ['操作类型不能小于0', 'Operation type cannot be negative'],
+ ['备注长度超过250', 'Remark exceeds 250 characters'],
+ ['未绑定谷歌验证器', 'Google Authenticator is not bound'],
+ ['未绑定手机号', 'Phone number is not bound'],
+ ['未绑定邮箱', 'Email is not bound'],
+ ['状态不能小于0', 'Status cannot be negative'],
+ ['状态不是整数', 'Status must be an integer'],
+ ['参数错误', 'Invalid parameters'],
+ ['支付方式模板不正确', 'Invalid payment method template'],
+ ['真实姓名必填', 'Real name is required'],
+ ['参数值1必填', 'Parameter value 1 is required'],
+ ['真实姓名长度大于20', 'Real name exceeds 20 characters'],
+ ['备注长度大于100', 'Remark exceeds 100 characters'],
+ ['支付方式模板不存在', 'Payment method template does not exist'],
+ ['长度大于25', ' exceeds 25 characters'],
+ ['请重新登录', 'Please log in again'],
+ ['支付方式数量已达上限', 'Payment method limit reached'],
+ ['支付方式不匹配该用户', 'Payment method does not match this user'],
+ ['支付方式不存在', 'Payment method does not exist'],
+ ['证件号码长度超过50', 'ID number exceeds 50 characters'],
+ ['实名姓名长度超过50', 'Real name exceeds 50 characters'],
+ ['已经提交申请,请等待审核', 'Application submitted, please wait for review'],
+ ['审核状态异常请联系客服', 'Abnormal review status, please contact support'],
+ ['审核已通过', 'Already approved'],
+ ['审核中', 'Under review'],
+ ['请上传图片', 'Please upload an image'],
+ ['请稍后再试', 'Please try again later'],
+ ['无权限', 'Permission denied'],
+ ['提交失败,当前有未处理银行卡订单', 'Submission failed, pending bank order exists'],
+ ['图片大小不能超过4M', 'Image size cannot exceed 4MB'],
+ ['文件上传失败', 'File upload failed'],
+ ['订单号不能未空', 'Order number is required'],
+ ['当前支付方式有未处理完成的订单!', 'Pending orders exist for this payment method'],
+ ['广告id不正确', 'Invalid advert ID'],
+ ['广告不存在', 'Advert does not exist'],
+ ['承兑商支付方式未配置', 'Merchant payment method not configured'],
+ ['承兑商广告支付方式未配置', 'Merchant advert payment method not configured'],
+ ['承兑商不存在', 'Merchant does not exist'],
+ ['承兑商的用户信息不存在', 'Merchant user info does not exist'],
+ ['当前已经加入过自选', 'Already added to favorites'],
+ ['保存自选失败:', 'Failed to save favorites:'],
+ ['删除失败', 'Delete failed'],
+ ['账号或密码不正确', 'Incorrect username or password'],
+ ['操作失败,请稍后再试', 'Operation failed, please try again later'],
+ ['追加保证金异常', 'Failed to add margin'],
+ ['当前币对不存在', 'Trading pair does not exist'],
+ ['未开放合约交易', 'Futures trading is not available'],
+ ['停牌禁止交易', 'Trading suspended'],
+ ['当前已经休市', 'Market is closed'],
+ ['实名认证未通过,无法进行高级认证', 'Real-name verification required before advanced verification'],
+ ['工作地址长度超过245', 'Work address exceeds 245 characters'],
+ ['家庭地址长度超过245', 'Home address exceeds 245 characters'],
+ ['亲属电话长度超过32', 'Relative phone exceeds 32 characters'],
+ ['亲属名称长度超过32', 'Relative name exceeds 32 characters'],
+ ['亲属地址长度超过245', 'Relative address exceeds 245 characters'],
+ ['请登录!', 'Please log in'],
+ ['最低下单金额:', 'Minimum order amount: '],
+ ['委托单不存在', 'Order does not exist'],
+ ['执行撤单异常', 'Failed to cancel order'],
+ ['无网络', 'Network unavailable'],
+ ['谷歌验证码已绑定', 'Google Authenticator is already bound'],
+ ['谷歌验证码错误', 'Incorrect Google Authenticator code'],
+ ['支付币种不正确', 'Invalid payment currency'],
+ ['提交失败,当前有未处理订单', 'Submission failed, pending order exists'],
+ ['用户未结束订单数量已达上限', 'Too many open orders'],
+ ['今日取消订单次数太多了,请明日再试', 'Too many cancellations today, try again tomorrow'],
+ ['订单类型不正确', 'Invalid order type'],
+ ['支付金额不正确', 'Invalid payment amount'],
+ ['币种数量不正确', 'Invalid currency amount'],
+ ['用户不存在', 'User does not exist'],
+ ['C2C广告id不正确', 'Invalid C2C advert ID'],
+ ['申诉订单号不正确', 'Invalid appeal order number'],
+ ['请输入申诉原因', 'Appeal reason is required'],
+ ['请上传申诉凭证', 'Please upload appeal evidence'],
+ ['该订单已提交申诉', 'Appeal already submitted for this order'],
+ ['申诉不存在', 'Appeal does not exist'],
+ ['请先通过高级认证', 'Advanced verification required'],
+ ['流水小于限额', 'Turnover below minimum limit'],
+ ['用户不能取消提现', 'User cannot cancel this withdrawal'],
+ ['充值或提现不正确', 'Invalid recharge or withdrawal type'],
+ ['订单状态不正确', 'Invalid order status'],
+ [' 不存在', ' does not exist'],
+];
+
+function walk(dir, files = []) {
+ for (const name of fs.readdirSync(dir)) {
+ const p = path.join(dir, name);
+ if (fs.statSync(p).isDirectory()) walk(p, files);
+ else if (name.endsWith('.java')) files.push(p);
+ }
+ return files;
+}
+
+let changed = 0;
+for (const file of walk(API_ROOT)) {
+ let content = fs.readFileSync(file, 'utf8');
+ const original = content;
+ for (const [from, to] of replacements) {
+ if (content.includes(from)) content = content.split(from).join(to);
+ }
+ if (content !== original) {
+ fs.writeFileSync(file, content, 'utf8');
+ changed++;
+ console.log('updated:', path.relative(API_ROOT, file));
+ }
+}
+console.log('done, files changed:', changed);
diff --git a/sql/t_loan.sql b/sql/t_loan.sql
new file mode 100644
index 0000000..329f66e
--- /dev/null
+++ b/sql/t_loan.sql
@@ -0,0 +1,61 @@
+-- 助力贷:产品配置与订单表
+
+CREATE TABLE IF NOT EXISTS `t_loan_config` (
+ `uuid` varchar(64) NOT NULL,
+ `term` int NOT NULL COMMENT '借款天数',
+ `daily_rate` decimal(20,8) NOT NULL DEFAULT '0.00100000' COMMENT '日利率',
+ `max_quota` decimal(20,8) NOT NULL DEFAULT '10000.00000000' COMMENT '最高额度',
+ `lending_institution` varchar(64) DEFAULT '1',
+ `lending_name` varchar(128) DEFAULT 'Platform Finance',
+ `repayment` int DEFAULT '1' COMMENT '1到期一次还款',
+ `repay_cycle` int DEFAULT NULL COMMENT '还款周期(天)',
+ `state` int DEFAULT '1' COMMENT '0停用 1启用',
+ `sort_num` int DEFAULT '0',
+ `create_time` datetime DEFAULT NULL,
+ `update_time` datetime DEFAULT NULL,
+ PRIMARY KEY (`uuid`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='贷款产品配置';
+
+CREATE TABLE IF NOT EXISTS `t_loan_order` (
+ `uuid` varchar(64) NOT NULL,
+ `order_no` varchar(64) NOT NULL,
+ `user_id` varchar(64) NOT NULL,
+ `loan_config_id` varchar(64) DEFAULT NULL,
+ `symbol` varchar(32) DEFAULT 'USDT',
+ `quota` decimal(20,8) NOT NULL,
+ `term` int NOT NULL,
+ `daily_rate` decimal(20,8) NOT NULL,
+ `total_interest` decimal(20,8) DEFAULT '0.00000000',
+ `repay_cycle` int DEFAULT NULL,
+ `repayment` int DEFAULT '1',
+ `lending_institution` varchar(64) DEFAULT NULL,
+ `lending_name` varchar(128) DEFAULT NULL,
+ `state` int DEFAULT '1' COMMENT '1待审 2还款中 3驳回 4逾期 5已还款',
+ `reason` varchar(512) DEFAULT NULL,
+ `id_front_img` varchar(512) DEFAULT NULL,
+ `id_back_img` varchar(512) DEFAULT NULL,
+ `handheld_img` varchar(512) DEFAULT NULL,
+ `create_time` datetime DEFAULT NULL,
+ `approve_time` datetime DEFAULT NULL,
+ `due_time` datetime DEFAULT NULL,
+ `repaid_time` datetime DEFAULT NULL,
+ PRIMARY KEY (`uuid`),
+ KEY `idx_loan_order_user` (`user_id`),
+ KEY `idx_loan_order_state_due` (`state`,`due_time`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='贷款订单';
+
+INSERT INTO `t_loan_config` (`uuid`,`term`,`daily_rate`,`max_quota`,`lending_institution`,`lending_name`,`repayment`,`repay_cycle`,`state`,`sort_num`,`create_time`)
+SELECT 'loan_cfg_7', 7, 0.001, 5000, '1', 'Platform Finance', 1, 7, 1, 1, NOW()
+FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM t_loan_config WHERE uuid = 'loan_cfg_7');
+
+INSERT INTO `t_loan_config` (`uuid`,`term`,`daily_rate`,`max_quota`,`lending_institution`,`lending_name`,`repayment`,`repay_cycle`,`state`,`sort_num`,`create_time`)
+SELECT 'loan_cfg_14', 14, 0.001, 10000, '1', 'Platform Finance', 1, 14, 1, 2, NOW()
+FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM t_loan_config WHERE uuid = 'loan_cfg_14');
+
+INSERT INTO `t_loan_config` (`uuid`,`term`,`daily_rate`,`max_quota`,`lending_institution`,`lending_name`,`repayment`,`repay_cycle`,`state`,`sort_num`,`create_time`)
+SELECT 'loan_cfg_30', 30, 0.001, 30000, '1', 'Platform Finance', 1, 30, 1, 3, NOW()
+FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM t_loan_config WHERE uuid = 'loan_cfg_30');
+
+INSERT INTO `t_loan_config` (`uuid`,`term`,`daily_rate`,`max_quota`,`lending_institution`,`lending_name`,`repayment`,`repay_cycle`,`state`,`sort_num`,`create_time`)
+SELECT 'loan_cfg_60', 60, 0.001, 50000, '1', 'Platform Finance', 1, 60, 1, 4, NOW()
+FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM t_loan_config WHERE uuid = 'loan_cfg_60');
diff --git a/sql/t_loan_menu.sql b/sql/t_loan_menu.sql
new file mode 100644
index 0000000..fdc9e60
--- /dev/null
+++ b/sql/t_loan_menu.sql
@@ -0,0 +1,32 @@
+-- 助力贷管理后台菜单(挂到「财务」下)
+-- 执行后请重新登录管理后台;非超级管理员需在「角色管理」勾选新菜单或执行下方角色授权 SQL
+
+-- 财务目录 menu_id 一般为 211,若不一致请先查询:
+-- SELECT menu_id, name FROM tz_sys_menu WHERE name = '财务' AND type = 0;
+
+INSERT INTO `tz_sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `is_show`)
+SELECT 3410, 211, '助力贷套餐', 'finance/loan-config', NULL, 1, '', 10, 0
+FROM DUAL
+WHERE NOT EXISTS (SELECT 1 FROM `tz_sys_menu` WHERE `menu_id` = 3410);
+
+INSERT INTO `tz_sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `is_show`)
+SELECT 3411, 211, '助力贷订单', 'finance/loan-order', NULL, 1, '', 11, 0
+FROM DUAL
+WHERE NOT EXISTS (SELECT 1 FROM `tz_sys_menu` WHERE `menu_id` = 3411);
+
+-- 将新菜单授权给已拥有「财务」子菜单的角色(与充值订单等同权限)
+INSERT INTO `tz_sys_role_menu` (`role_id`, `menu_id`)
+SELECT DISTINCT rm.`role_id`, 3410
+FROM `tz_sys_role_menu` rm
+INNER JOIN `tz_sys_menu` m ON m.`menu_id` = rm.`menu_id` AND m.`parent_id` = 211
+WHERE NOT EXISTS (
+ SELECT 1 FROM `tz_sys_role_menu` x WHERE x.`role_id` = rm.`role_id` AND x.`menu_id` = 3410
+);
+
+INSERT INTO `tz_sys_role_menu` (`role_id`, `menu_id`)
+SELECT DISTINCT rm.`role_id`, 3411
+FROM `tz_sys_role_menu` rm
+INNER JOIN `tz_sys_menu` m ON m.`menu_id` = rm.`menu_id` AND m.`parent_id` = 211
+WHERE NOT EXISTS (
+ SELECT 1 FROM `tz_sys_role_menu` x WHERE x.`role_id` = rm.`role_id` AND x.`menu_id` = 3411
+);
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/AddressController.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/AddressController.java
index a1f645e..0b78bf3 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/AddressController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/AddressController.java
@@ -1,35 +1,26 @@
package com.yami.trading.admin.controller;
-import com.yami.trading.admin.model.LoginModel;
import com.yami.trading.admin.model.UpdateAddressModel;
import com.yami.trading.bean.model.ChannelBlockchain;
import com.yami.trading.common.constants.RedisKeys;
import com.yami.trading.common.domain.Result;
import com.yami.trading.common.exception.YamiShopBindException;
-import com.yami.trading.common.util.GoogleAuthenticator;
-import com.yami.trading.security.common.bo.UserInfoInTokenBO;
import com.yami.trading.security.common.enums.CryptoCurrencyEnum;
-import com.yami.trading.security.common.enums.SysTypeEnum;
-import com.yami.trading.security.common.util.LocalKeyStorageAESUtil;
-import com.yami.trading.security.common.vo.TokenInfoVO;
-import com.yami.trading.sys.model.SysUser;
+import com.yami.trading.service.ChannelBlockchainService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
-import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
-import java.util.Objects;
/**
- * @program: trading-order-master
- * @description: 充值地址
- * @create: 2025-08-07 14:44
- **/
+ * 管理后台 - 财务 - 充值地址(ChannelBlockchain 表)
+ */
@Slf4j
@RestController
@RequestMapping("address")
@@ -39,61 +30,62 @@
@Autowired
RedisTemplate redisTemplate;
- /**
- * 地址列表
- * @return
- */
+ @Autowired
+ private ChannelBlockchainService channelBlockchainService;
+
+ @ApiOperation("充值地址列表")
@PostMapping("/list")
- public Result<?> list() {
- List<CryptoCurrencyEnum> currencyEnums = CryptoCurrencyEnum.getAll();
- List<ChannelBlockchain> data = new ArrayList<>();
- currencyEnums.forEach(f->{
- try {
- String address = LocalKeyStorageAESUtil.loadAndDecrypt(f.getName());
- ChannelBlockchain blockchain = new ChannelBlockchain();
- blockchain.setBlockchain_name(f.getChain());
- blockchain.setAddress(address);
- blockchain.setCoin(f.getCoin());
- blockchain.setAuto(false);
- blockchain.setImg(null);
- data.add(blockchain);
- } catch (Exception e) {
- e.getMessage();
- }
- });
- return Result.succeed(data);
+ public Result<List<ChannelBlockchain>> list() {
+ List<ChannelBlockchain> list = channelBlockchainService.list();
+ list.forEach(this::fillBlockchainNameAlias);
+ return Result.succeed(list);
}
+ @ApiOperation("修改充值地址")
@PostMapping("/update")
- public Result<?> list(@RequestBody UpdateAddressModel model) {
- String name = model.getCoin().toLowerCase()+"_"+model.getChain().toLowerCase();
- try {
- if(model.getCoin().equals("eth") || model.getCoin().equals("btc")){
- name = model.getCoin();
+ public Result<ChannelBlockchain> update(@RequestBody UpdateAddressModel model) {
+ if (StringUtils.isNotBlank(model.getUuid())) {
+ ChannelBlockchain existing = channelBlockchainService.getById(model.getUuid());
+ if (existing == null) {
+ throw new YamiShopBindException("充值地址记录不存在");
}
- return LocalKeyStorageAESUtil.encryptAndStore(model.getPassword(),model.getAddress(),name);
- }catch (Exception e){
- e.getMessage();
+ if (StringUtils.isBlank(model.getAddress())) {
+ throw new YamiShopBindException("充值地址不能为空");
+ }
+ existing.setAddress(model.getAddress().trim());
+ if (StringUtils.isNotBlank(model.getCoin())) {
+ existing.setCoin(model.getCoin().trim().toLowerCase());
+ }
+ if (StringUtils.isNotBlank(model.getChain())) {
+ existing.setBlockchainName(model.getChain().trim());
+ }
+ channelBlockchainService.updateById(existing);
+ fillBlockchainNameAlias(existing);
+ return Result.succeed(existing);
}
- return Result.succeed();
+ ChannelBlockchain saved = channelBlockchainService.saveOrUpdateByCoinAndChain(
+ model.getCoin(), model.getChain(), model.getAddress());
+ fillBlockchainNameAlias(saved);
+ return Result.succeed(saved);
}
/**
- * u盾地址列表
- * @return
+ * u盾地址列表(按用户维度,仍走 Redis)
*/
@GetMapping("/getUDList")
- public Result<?> getUDList(String partyId) {
+ public Result<List<ChannelBlockchain>> getUDList(String partyId) {
if (partyId == null || partyId.isEmpty()) {
return Result.failed("请选择用户");
}
List<CryptoCurrencyEnum> currencyEnums = CryptoCurrencyEnum.getAll();
List<ChannelBlockchain> data = new ArrayList<>();
- currencyEnums.forEach(currencyEnum->{
+ currencyEnums.forEach(currencyEnum -> {
try {
- String address = (String)redisTemplate.opsForValue().get(RedisKeys.BLOCKCHAIN_ADDRESS + partyId + currencyEnum.getName());
+ String address = (String) redisTemplate.opsForValue()
+ .get(RedisKeys.BLOCKCHAIN_ADDRESS + partyId + currencyEnum.getName());
ChannelBlockchain blockchain = new ChannelBlockchain();
blockchain.setBlockchain_name(currencyEnum.getChain());
+ blockchain.setBlockchainName(currencyEnum.getChain());
blockchain.setAddress(address);
blockchain.setCoin(currencyEnum.getCoin());
blockchain.setAuto(false);
@@ -106,4 +98,9 @@
return Result.succeed(data);
}
+ private void fillBlockchainNameAlias(ChannelBlockchain item) {
+ if (item != null && StringUtils.isNotBlank(item.getBlockchainName())) {
+ item.setBlockchain_name(item.getBlockchainName());
+ }
+ }
}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/cms/CmsController.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/cms/CmsController.java
index c4f9800..4fa3e73 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/cms/CmsController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/cms/CmsController.java
@@ -41,15 +41,17 @@
@PostMapping("list")
public Result<Page> list(@RequestBody @Valid CmsListModel request) {
Page<Cms> page = new Page(request.getCurrent(), request.getSize());
- LambdaQueryWrapper<Cms> lambdaQueryWrapper = Wrappers.<Cms>query().lambda();
+ LambdaQueryWrapper<Cms> lambdaQueryWrapper = Wrappers.<Cms>query().lambda()
+ .select(Cms::getUuid, Cms::getTitle, Cms::getModel, Cms::getCreateTime,
+ Cms::getLanguage, Cms::getContentCode);
if (!StrUtil.isEmpty(request.getTitle())) {
lambdaQueryWrapper.like(Cms::getTitle, request.getTitle());
}
if (!StrUtil.isEmpty(request.getContentCode())) {
- lambdaQueryWrapper.like(Cms::getContentCode, request.getContentCode());
+ lambdaQueryWrapper.eq(Cms::getContentCode, request.getContentCode());
}
if (!StrUtil.isEmpty(request.getLanguage())) {
- lambdaQueryWrapper.like(Cms::getLanguage, request.getLanguage());
+ lambdaQueryWrapper.eq(Cms::getLanguage, request.getLanguage());
}
lambdaQueryWrapper.orderByDesc(Cms::getCreateTime);
cmsService.page(page, lambdaQueryWrapper);
@@ -59,6 +61,17 @@
return Result.ok(page);
}
+ @ApiOperation(value = "详情")
+ @PostMapping("info")
+ public Result<Cms> info(@RequestBody @Valid IdModel model) {
+ Cms cms = cmsService.getById(model.getId());
+ if (cms == null) {
+ throw new YamiShopBindException("参数错误!");
+ }
+ cms.setLanguageText(Constants.LANGUAGE.get(cms.getLanguage()));
+ return Result.ok(cms);
+ }
+
@ApiOperation(value = "新增")
@PostMapping("add")
public Result<?> add(@RequestBody @Valid CmsModel model) {
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/future/AdminFuturesOrderController.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/future/AdminFuturesOrderController.java
index 15019ce..88a1f32 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/future/AdminFuturesOrderController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/future/AdminFuturesOrderController.java
@@ -1,5 +1,6 @@
package com.yami.trading.admin.controller.future;
+import cn.hutool.core.util.StrUtil;
import com.yami.trading.admin.facade.PermissionFacade;
import com.yami.trading.common.domain.Result;
@@ -57,8 +58,23 @@
@ApiOperation(value = "盈利还是亏损")
@GetMapping("orderProfitLoss.action")
public Result<String> orderProfitLoss(@RequestParam String orderNo, @RequestParam String profitLoss) {
- futuresOrderService.saveOrderPorfitOrLoss(orderNo, profitLoss, SecurityUtils.getSysUser().getUsername());
- return Result.ok("操作成过");
+ String msg = futuresOrderService.saveOrderPorfitOrLoss(orderNo, profitLoss, SecurityUtils.getSysUser().getUsername());
+ if (StrUtil.isNotBlank(msg)) {
+ return Result.failed(msg);
+ }
+ return Result.ok("操作成功");
+ }
+ /**
+ * 修改订单方向 buy=买涨 sell=买跌
+ */
+ @ApiOperation(value = "修改交割订单方向")
+ @GetMapping("orderDirection.action")
+ public Result<String> orderDirection(@RequestParam String orderNo, @RequestParam String direction) {
+ String msg = futuresOrderService.saveOrderDirection(orderNo, direction, SecurityUtils.getSysUser().getUsername());
+ if (StrUtil.isNotBlank(msg)) {
+ return Result.failed(msg);
+ }
+ return Result.ok("操作成功");
}
}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/item/TItemLeverageController.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/item/TItemLeverageController.java
index 283bd91..bc42b3e 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/item/TItemLeverageController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/item/TItemLeverageController.java
@@ -41,8 +41,7 @@
@Autowired
private ItemLeverageService itemLeverageService;
- @Autowired
- private TItemLeverageWrapper tItemLeverageWrapper;
+ private final TItemLeverageWrapper tItemLeverageWrapper = TItemLeverageWrapper.INSTANCE;
/**
* 产品杠杠倍数列表数据
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/AdminLoanConfigController.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/AdminLoanConfigController.java
new file mode 100644
index 0000000..e644af5
--- /dev/null
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/AdminLoanConfigController.java
@@ -0,0 +1,78 @@
+package com.yami.trading.admin.controller.loan;
+
+import com.yami.trading.bean.loan.LoanConfig;
+import com.yami.trading.common.domain.Result;
+import com.yami.trading.common.util.StringUtils;
+import com.yami.trading.service.loan.LoanConfigService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
+import java.util.List;
+
+@RestController
+@CrossOrigin
+@Slf4j
+public class AdminLoanConfigController {
+
+ private final String action = "normal/loanConfigAdmin!";
+
+ @Autowired
+ private LoanConfigService loanConfigService;
+
+ @RequestMapping(action + "list.action")
+ public Result<List<LoanConfig>> list() {
+ return Result.ok(loanConfigService.listAll());
+ }
+
+ @RequestMapping(action + "save.action")
+ public Result<String> save(HttpServletRequest request) {
+ LoanConfig config = new LoanConfig();
+ String uuid = request.getParameter("uuid");
+ if (!StringUtils.isNullOrEmpty(uuid)) {
+ config.setUuid(uuid);
+ }
+ config.setTerm(parseInt(request.getParameter("term"), 30));
+ config.setDailyRate(parseDouble(request.getParameter("dailyRate"), 0.001));
+ config.setMaxQuota(parseDouble(request.getParameter("maxQuota"), 10000));
+ config.setLendingInstitution(request.getParameter("lendingInstitution"));
+ config.setLendingName(request.getParameter("lendingName"));
+ config.setRepayment(parseInt(request.getParameter("repayment"), 1));
+ config.setRepayCycle(parseInt(request.getParameter("repayCycle"), config.getTerm()));
+ config.setState(parseInt(request.getParameter("state"), 1));
+ config.setSortNum(parseInt(request.getParameter("sortNum"), 0));
+ config.setUpdateTime(new Date());
+ if (StringUtils.isNullOrEmpty(uuid)) {
+ config.setCreateTime(new Date());
+ }
+ loanConfigService.saveOrUpdateConfig(config);
+ return Result.ok("Success");
+ }
+
+ @RequestMapping(action + "delete.action")
+ public Result<String> delete(HttpServletRequest request) {
+ String uuid = request.getParameter("uuid");
+ loanConfigService.deleteConfig(uuid);
+ return Result.ok("Success");
+ }
+
+ private int parseInt(String val, int defaultVal) {
+ try {
+ return StringUtils.isNullOrEmpty(val) ? defaultVal : Integer.parseInt(val);
+ } catch (NumberFormatException e) {
+ return defaultVal;
+ }
+ }
+
+ private double parseDouble(String val, double defaultVal) {
+ try {
+ return StringUtils.isNullOrEmpty(val) ? defaultVal : Double.parseDouble(val);
+ } catch (NumberFormatException e) {
+ return defaultVal;
+ }
+ }
+}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/AdminLoanOrderController.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/AdminLoanOrderController.java
new file mode 100644
index 0000000..69dc447
--- /dev/null
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/AdminLoanOrderController.java
@@ -0,0 +1,190 @@
+package com.yami.trading.admin.controller.loan;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yami.trading.admin.facade.PermissionFacade;
+import com.yami.trading.bean.loan.LoanOrder;
+import com.yami.trading.common.constants.Constants;
+import com.yami.trading.common.domain.Result;
+import com.yami.trading.common.util.StringUtils;
+import com.yami.trading.security.common.util.SecurityUtils;
+import com.yami.trading.service.loan.LoanOrderService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@RestController
+@CrossOrigin
+@Slf4j
+public class AdminLoanOrderController {
+
+ private final String action = "normal/loanadmin!";
+
+ @Autowired
+ private LoanOrderService loanOrderService;
+ @Autowired
+ private PermissionFacade permissionFacade;
+
+ private static final Map<Integer, String> STATE_LABEL = new HashMap<>();
+ private static final Map<Integer, String> REPAYMENT_LABEL = new HashMap<>();
+
+ static {
+ STATE_LABEL.put(1, "未审");
+ STATE_LABEL.put(2, "通过");
+ STATE_LABEL.put(3, "驳回");
+ STATE_LABEL.put(4, "逾期");
+ STATE_LABEL.put(5, "已还款");
+ REPAYMENT_LABEL.put(1, "到期一次还款");
+ }
+
+ @RequestMapping(action + "list.action")
+ public Result<Page<Map<String, Object>>> list(HttpServletRequest request) {
+ int current = parseInt(request.getParameter("current"), 1);
+ int size = parseInt(request.getParameter("size"), 10);
+ String status = normalizeStatusFilter(request.getParameter("status"));
+ String userName = firstNonBlank(request.getParameter("userName"), request.getParameter("user_name"));
+ String orderNo = request.getParameter("orderNo");
+ String rolename = request.getParameter("rolename");
+ List<String> children = permissionFacade.getOwnerUserIds();
+ Page<Map<String, Object>> page = loanOrderService.adminPagedQuery(current, size, status, userName, orderNo, rolename, children);
+ List<Map<String, Object>> records = new ArrayList<>();
+ for (Map<String, Object> row : page.getRecords()) {
+ records.add(formatAdminRow(row));
+ }
+ page.setRecords(records);
+ return Result.ok(page);
+ }
+
+ @RequestMapping(action + "change.action")
+ public Result<String> change(HttpServletRequest request) {
+ String orderId = firstNonBlank(request.getParameter("orderId"), request.getParameter("uuid"));
+ String statusStr = request.getParameter("statusStr");
+ String reason = request.getParameter("reason");
+ String operator = SecurityUtils.getSysUser().getUsername();
+ String err;
+ if ("2".equals(statusStr)) {
+ err = loanOrderService.approve(orderId, operator);
+ } else if ("3".equals(statusStr)) {
+ err = loanOrderService.reject(orderId, reason, operator);
+ } else if ("5".equals(statusStr)) {
+ err = loanOrderService.manualRepay(orderId, operator);
+ } else {
+ return Result.failed("Invalid status");
+ }
+ if (err != null) {
+ return Result.failed(err);
+ }
+ return Result.ok("Success");
+ }
+
+ @RequestMapping(action + "modify.action")
+ public Result<String> modify(HttpServletRequest request) {
+ LoanOrder order = new LoanOrder();
+ order.setUuid(firstNonBlank(request.getParameter("orderNo"), request.getParameter("uuid")));
+ order.setSymbol(request.getParameter("symbol"));
+ order.setQuota(parseDouble(request.getParameter("quota"), 0));
+ order.setIdFrontImg(firstNonBlank(request.getParameter("img_idimg_1"), request.getParameter("idFrontImg")));
+ order.setIdBackImg(firstNonBlank(request.getParameter("img_idimg_2"), request.getParameter("idBackImg")));
+ order.setHandheldImg(firstNonBlank(request.getParameter("img_idimg_3"), request.getParameter("handheldImg")));
+ loanOrderService.modifyOrder(order);
+ return Result.ok("Success");
+ }
+
+ private Map<String, Object> formatAdminRow(Map<String, Object> row) {
+ Map<String, Object> map = new HashMap<>(row);
+ int state = toInt(row.get("state"));
+ int repayment = toInt(row.get("repayment"));
+ String lendingInstitution = row.get("lendingInstitution") != null ? row.get("lendingInstitution").toString() : "1";
+ String lendingName = row.get("lendingName") != null ? row.get("lendingName").toString() : "";
+ map.put("state", new Object[]{state, STATE_LABEL.getOrDefault(state, String.valueOf(state))});
+ map.put("repayment", new Object[]{repayment, REPAYMENT_LABEL.getOrDefault(repayment, "到期一次还款")});
+ map.put("lendingInstitution", new Object[]{lendingInstitution, lendingName});
+ map.put("createTime", formatDate(row.get("createTime")));
+ map.put("houseImgs", buildHouseImgs(row));
+ map.put("userId", row.get("userId"));
+ map.put("userCode", row.get("userCode"));
+ return map;
+ }
+
+ private List<String> buildHouseImgs(Map<String, Object> row) {
+ List<String> imgs = new ArrayList<>();
+ imgs.add(fullImage(getStr(row, "idFrontImg")));
+ imgs.add(fullImage(getStr(row, "idBackImg")));
+ imgs.add(fullImage(getStr(row, "handheldImg")));
+ return imgs;
+ }
+
+ private String fullImage(String path) {
+ if (StringUtils.isNullOrEmpty(path)) {
+ return "";
+ }
+ if (path.startsWith("http")) {
+ return path;
+ }
+ return Constants.IMAGES_HTTP + path;
+ }
+
+ private String formatDate(Object val) {
+ if (val == null) {
+ return "";
+ }
+ if (val instanceof Date) {
+ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format((Date) val);
+ }
+ return val.toString();
+ }
+
+ private int toInt(Object val) {
+ if (val == null) {
+ return 0;
+ }
+ return Integer.parseInt(val.toString());
+ }
+
+ private String getStr(Map<String, Object> row, String key) {
+ Object val = row.get(key);
+ return val == null ? "" : val.toString();
+ }
+
+ private int parseInt(String val, int defaultVal) {
+ try {
+ return StringUtils.isNullOrEmpty(val) ? defaultVal : Integer.parseInt(val);
+ } catch (NumberFormatException e) {
+ return defaultVal;
+ }
+ }
+
+ private double parseDouble(String val, double defaultVal) {
+ try {
+ return StringUtils.isNullOrEmpty(val) ? defaultVal : Double.parseDouble(val);
+ } catch (NumberFormatException e) {
+ return defaultVal;
+ }
+ }
+
+ private String firstNonBlank(String... values) {
+ for (String v : values) {
+ if (!StringUtils.isNullOrEmpty(v)) {
+ return v;
+ }
+ }
+ return null;
+ }
+
+ /** 全部:不传 status 或传 0/空,均不按状态过滤 */
+ private String normalizeStatusFilter(String status) {
+ if (StringUtils.isNullOrEmpty(status)) {
+ return null;
+ }
+ String s = status.trim();
+ if ("0".equals(s) || "all".equalsIgnoreCase(s)) {
+ return null;
+ }
+ return s;
+ }
+}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/LoanController.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/LoanController.java
new file mode 100644
index 0000000..984bc53
--- /dev/null
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/LoanController.java
@@ -0,0 +1,215 @@
+package com.yami.trading.admin.controller.loan;
+
+import com.yami.trading.bean.loan.LoanConfig;
+import com.yami.trading.bean.loan.LoanOrder;
+import com.yami.trading.common.constants.Constants;
+import com.yami.trading.common.exception.BusinessException;
+import com.yami.trading.common.util.StringUtils;
+import com.yami.trading.common.web.ResultObject;
+import com.yami.trading.security.common.util.SecurityUtils;
+import com.yami.trading.service.loan.LoanConfigService;
+import com.yami.trading.service.loan.LoanOrderService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+
+@RestController
+@CrossOrigin
+@Slf4j
+public class LoanController {
+
+ private final String action = "/api/loan!";
+
+ @Autowired
+ private LoanConfigService loanConfigService;
+ @Autowired
+ private LoanOrderService loanOrderService;
+
+ @RequestMapping(action + "getLoanParamList.action")
+ public Object getLoanParamList() {
+ ResultObject result = new ResultObject();
+ try {
+ List<Map<String, Object>> list = new ArrayList<>();
+ for (LoanConfig config : loanConfigService.listEnabled()) {
+ list.add(buildConfigMap(config));
+ }
+ result.setData(list);
+ result.setCode("0");
+ } catch (BusinessException e) {
+ result.setCode("1");
+ result.setMsg(e.getMessage());
+ } catch (Exception e) {
+ result.setCode("1");
+ result.setMsg("Program error");
+ log.error("getLoanParamList error", e);
+ }
+ return result;
+ }
+
+ @RequestMapping(action + "apply.action")
+ public Object apply(HttpServletRequest request) {
+ ResultObject result = new ResultObject();
+ try {
+ String userId = SecurityUtils.getCurrentUserId();
+ if (StringUtils.isNullOrEmpty(userId)) {
+ result.setCode("403");
+ result.setMsg("Please login first");
+ return result;
+ }
+ String configId = firstNonBlank(request.getParameter("uuid"), request.getParameter("id"));
+ double quota = parseDouble(request.getParameter("quota"), 0);
+ String symbol = request.getParameter("symbol");
+ String front = firstNonBlank(request.getParameter("frontFile"), request.getParameter("idFrontImg"));
+ String back = firstNonBlank(request.getParameter("reverseFile"), request.getParameter("idBackImg"));
+ String handheld = firstNonBlank(request.getParameter("fileList"), request.getParameter("handheldImg"));
+ LoanOrder order = loanOrderService.apply(userId, configId, quota, symbol, front, back, handheld);
+ result.setData(buildOrderMap(order));
+ result.setCode("0");
+ } catch (BusinessException e) {
+ result.setCode("1");
+ result.setMsg(e.getMessage());
+ } catch (Exception e) {
+ result.setCode("1");
+ result.setMsg(e.getMessage());
+ log.error("loan apply error", e);
+ }
+ return result;
+ }
+
+ @RequestMapping(action + "getOrders.action")
+ public Object getOrders() {
+ ResultObject result = new ResultObject();
+ try {
+ String userId = SecurityUtils.getCurrentUserId();
+ if (StringUtils.isNullOrEmpty(userId)) {
+ result.setData(Collections.emptyList());
+ result.setCode("0");
+ return result;
+ }
+ List<Map<String, Object>> list = new ArrayList<>();
+ for (LoanOrder order : loanOrderService.listByUser(userId)) {
+ list.add(buildOrderMap(order));
+ }
+ result.setData(list);
+ result.setCode("0");
+ } catch (Exception e) {
+ result.setCode("1");
+ result.setMsg("Program error");
+ log.error("getOrders error", e);
+ }
+ return result;
+ }
+
+ @RequestMapping(action + "getOrderDetail.action")
+ public Object getOrderDetail(HttpServletRequest request) {
+ ResultObject result = new ResultObject();
+ try {
+ String userId = SecurityUtils.getCurrentUserId();
+ String orderNo = request.getParameter("orderNo");
+ String id = request.getParameter("id");
+ LoanOrder order = null;
+ if (!StringUtils.isNullOrEmpty(orderNo)) {
+ order = loanOrderService.findByOrderNo(orderNo);
+ }
+ if (order == null && !StringUtils.isNullOrEmpty(id)) {
+ order = loanOrderService.findById(id);
+ }
+ if (order == null || !Objects.equals(order.getUserId(), userId)) {
+ result.setCode("1");
+ result.setMsg("Order not found");
+ return result;
+ }
+ result.setData(buildOrderMap(order));
+ result.setCode("0");
+ } catch (Exception e) {
+ result.setCode("1");
+ result.setMsg("Program error");
+ log.error("getOrderDetail error", e);
+ }
+ return result;
+ }
+
+ private Map<String, Object> buildConfigMap(LoanConfig config) {
+ Map<String, Object> map = new HashMap<>();
+ map.put("id", config.getUuid());
+ map.put("uuid", config.getUuid());
+ map.put("term", config.getTerm());
+ map.put("dailyRate", config.getDailyRate());
+ map.put("maxQuota", config.getMaxQuota());
+ map.put("lendingInstitution", config.getLendingInstitution());
+ map.put("lendingName", config.getLendingName());
+ map.put("repayment", config.getRepayment());
+ map.put("repayCycle", config.getRepayCycle() != null ? config.getRepayCycle() : config.getTerm());
+ return map;
+ }
+
+ private Map<String, Object> buildOrderMap(LoanOrder order) {
+ Map<String, Object> map = new HashMap<>();
+ map.put("id", order.getUuid());
+ map.put("uuid", order.getUuid());
+ map.put("orderNo", order.getOrderNo());
+ map.put("quota", order.getQuota());
+ map.put("symbol", order.getSymbol());
+ map.put("term", order.getTerm());
+ map.put("dailyRate", order.getDailyRate());
+ map.put("totalInterest", order.getTotalInterest());
+ map.put("repayCycle", order.getRepayCycle());
+ map.put("repayment", order.getRepayment());
+ map.put("lendingInstitution", order.getLendingInstitution());
+ map.put("lendingName", order.getLendingName());
+ map.put("state", order.getState());
+ map.put("status", order.getState());
+ map.put("reason", order.getReason());
+ map.put("createTime", order.getCreateTime() != null ? order.getCreateTime().getTime() : null);
+ map.put("dueTime", order.getDueTime());
+ map.put("remainQuota", calcRemainDays(order));
+ map.put("idFrontImg", fullImage(order.getIdFrontImg()));
+ map.put("idBackImg", fullImage(order.getIdBackImg()));
+ map.put("handheldImg", fullImage(order.getHandheldImg()));
+ return map;
+ }
+
+ private int calcRemainDays(LoanOrder order) {
+ if (order.getDueTime() == null) {
+ return order.getTerm();
+ }
+ long diff = order.getDueTime().getTime() - System.currentTimeMillis();
+ return (int) Math.max(0, TimeUnit.MILLISECONDS.toDays(diff));
+ }
+
+ private String fullImage(String path) {
+ if (StringUtils.isNullOrEmpty(path)) {
+ return path;
+ }
+ if (path.startsWith("http")) {
+ return path;
+ }
+ return Constants.IMAGES_HTTP + path;
+ }
+
+ private String firstNonBlank(String... values) {
+ if (values == null) {
+ return null;
+ }
+ for (String v : values) {
+ if (!StringUtils.isNullOrEmpty(v)) {
+ return v;
+ }
+ }
+ return null;
+ }
+
+ private double parseDouble(String val, double defaultVal) {
+ try {
+ return StringUtils.isNullOrEmpty(val) ? defaultVal : Double.parseDouble(val);
+ } catch (NumberFormatException e) {
+ return defaultVal;
+ }
+ }
+}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/miner/AdminMinerController.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/miner/AdminMinerController.java
index 06b60f7..3c12aac 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/miner/AdminMinerController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/miner/AdminMinerController.java
@@ -189,15 +189,13 @@
// }
if (StringUtils.isNullOrEmpty(show_daily_rate)
- || !StringUtils.isDouble(show_daily_rate)
- || Double.valueOf(show_daily_rate) < 0) {
- return "日利率不能小于0";
+ || !StringUtils.isDouble(show_daily_rate)) {
+ return "请输入有效的日利率";
}
if (StringUtils.isNullOrEmpty(daily_rate)
- || !StringUtils.isDouble(daily_rate)
- || Double.valueOf(daily_rate) < 0) {
- return "今日利率不能小于0";
+ || !StringUtils.isDouble(daily_rate)) {
+ return "请输入有效的今日利率";
}
if (StringUtils.isNullOrEmpty(cycle_close)
@@ -294,15 +292,13 @@
// return "周期不能小于等于0天";
// }
if (StringUtils.isNullOrEmpty(show_daily_rate)
- || !StringUtils.isDouble(show_daily_rate)
- || Double.valueOf(show_daily_rate) < 0) {
- return "日利率不能小于0";
+ || !StringUtils.isDouble(show_daily_rate)) {
+ return "请输入有效的日利率";
}
if (StringUtils.isNullOrEmpty(daily_rate)
- || !StringUtils.isDouble(daily_rate)
- || Double.valueOf(daily_rate) < 0) {
- return "今日利率不能小于0";
+ || !StringUtils.isDouble(daily_rate)) {
+ return "请输入有效的今日利率";
}
if (StringUtils.isNullOrEmpty(cycle_close)
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/miner/MinerOrderController.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/miner/MinerOrderController.java
index cebd32a..89009f7 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/miner/MinerOrderController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/miner/MinerOrderController.java
@@ -115,15 +115,18 @@
data.put("cycle", data.get("cycle"));
data.put("all_rate", Arith.mul(minerTestProfit, Integer.valueOf(data.get("cycle").toString())));
} else {
- double dailyProfitRate = Arith.mul(Double.valueOf(data.get("daily_rate").toString()), 0.01d);
+ double displayDailyRate = data.get("show_daily_rate") != null
+ ? Double.valueOf(data.get("show_daily_rate").toString())
+ : Double.valueOf(data.get("daily_rate").toString());
+ double dailyProfitRate = Arith.mul(displayDailyRate, 0.01d);
double dailyProfitAmount = Arith.mul(dailyProfitRate, Double.valueOf(data.get("amount").toString()));
String dailyProfit = df.format(dailyProfitAmount);
// 当日收益
data.put("daily_profit", dailyProfit);
- data.put("daily_rate", data.get("daily_rate"));
+ data.put("daily_rate", displayDailyRate);
// 这里的周期,体验矿机是周期,其他矿机是解锁周期(到期后需手动解锁)
data.put("cycle", data.get("cycle_close"));
- double all_rate = Arith.mul(30, Double.valueOf(data.get("daily_rate").toString()));
+ double all_rate = Arith.mul(30, displayDailyRate);
data.put("all_rate", df.format(all_rate));
}
}
@@ -373,13 +376,15 @@
map.put("all_rate", Arith.mul(minerTestProfit, miner.getCycle()));
} else {
double amount = Double.valueOf(amount_temp);
+ double displayDailyRate = miner.getShow_daily_rate();
map.put("amount", amount);
map.put("stop_time", null);
- map.put("daily_rate", miner.getDaily_rate());
- double rate = Arith.mul(miner.getDaily_rate(), 0.01d);
+ map.put("daily_rate", displayDailyRate);
+ map.put("show_daily_rate", displayDailyRate);
+ double rate = Arith.mul(displayDailyRate, 0.01d);
map.put("profit_may", String.valueOf(df.format(Arith.mul(amount, Arith.mul(rate, 30d)))));
map.put("cycle", miner.getCycle_close());
- double all_rate = Arith.mul(30d, miner.getDaily_rate());
+ double all_rate = Arith.mul(30d, displayDailyRate);
map.put("all_rate", df.format(all_rate));
}
map.put("investment_min", miner.getInvestment_min());
@@ -480,7 +485,7 @@
map.put("miner_name_cn", miner.getName_cn());
Double miner_test_profit = sysparaService.find("miner_test_profit").getDouble();
- map.put("daily_rate", miner.getTest().equals("Y") ? miner_test_profit : miner.getDaily_rate());
+ map.put("daily_rate", miner.getTest().equals("Y") ? miner_test_profit : miner.getShow_daily_rate());
Date create_time = order.getCreate_time();
map.put("create_timeStr", create_time);
map.put("close_timeStr", order.getClose_time());
@@ -505,7 +510,8 @@
map.put("days", daysBetween);
int last_days = daysBetween(create_time, date_now);
map.put("can_close", last_days >= miner.getCycle_close());
- double rate = Arith.mul(miner.getDaily_rate(), 0.01d);
+ double displayDailyRate = miner.getShow_daily_rate();
+ double rate = Arith.mul(displayDailyRate, 0.01d);
map.put("profit_may", miner.getTest().equals("Y") ? String.valueOf(Arith.mul(miner_test_profit, miner.getCycle()))
: String.valueOf(Arith.mul(order.getAmount(), Arith.mul(rate, 30d))));
map.put("order_no", order.getOrder_no());
@@ -518,7 +524,7 @@
int cycle = miner.getTest().equals("Y") ? miner.getCycle() : miner.getCycle_close();
map.put("cycle", cycle);
- double all_rate = Arith.mul(30, miner.getDaily_rate());
+ double all_rate = Arith.mul(30, displayDailyRate);
map.put("all_rate", miner.getTest().equals("Y") ? Arith.mul(miner_test_profit, miner.getCycle()) : df.format(all_rate));
map.put("test", miner.getTest());
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/user/UserController.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/user/UserController.java
index d62924e..e62fe85 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/user/UserController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/user/UserController.java
@@ -102,7 +102,6 @@
@PostMapping("updateWallt")
@SysLog("修改账户余额")
public Result updateWallt(@Valid @RequestBody UpdateWalltModel model) {
- sysUserService.checkSafeWord(model.getSafePassword());
userService.updateWallt(model.getUserId(), model.getMoneyRevise(),
model.getAccountType(), model.getCoinType());
return Result.ok(null);
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/model/UpdateAddressModel.java b/trading-order-admin/src/main/java/com/yami/trading/admin/model/UpdateAddressModel.java
index 521370d..972f75e 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/model/UpdateAddressModel.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/model/UpdateAddressModel.java
@@ -1,7 +1,6 @@
package com.yami.trading.admin.model;
import lombok.Data;
-import org.springframework.web.bind.annotation.RequestParam;
/**
* @program: trading-order-master
@@ -10,8 +9,9 @@
**/
@Data
public class UpdateAddressModel {
+ /** 记录主键,有值时按 uuid 更新 */
+ private String uuid;
private String coin;
private String chain;
private String address;
- private String password;
}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/model/UpdateWalltModel.java b/trading-order-admin/src/main/java/com/yami/trading/admin/model/UpdateWalltModel.java
index 607688f..886e97d 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/model/UpdateWalltModel.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/model/UpdateWalltModel.java
@@ -36,6 +36,5 @@
@ApiModelProperty("登录人资金密码")
- @NotBlank
private String safePassword;
}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/task/IcoTask.java b/trading-order-admin/src/main/java/com/yami/trading/admin/task/IcoTask.java
index ac8360f..77d6bd0 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/task/IcoTask.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/task/IcoTask.java
@@ -1,175 +1,48 @@
package com.yami.trading.admin.task;
-
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateTime;
-import cn.hutool.core.lang.Console;
-import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
-import cn.hutool.http.HttpStatus;
-import cn.hutool.json.JSONUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.yami.trading.api.UD.*;
-import com.yami.trading.bean.data.domain.Depth;
-import com.yami.trading.bean.data.domain.Kline;
-import com.yami.trading.bean.data.domain.Realtime;
import com.yami.trading.bean.ico.domain.Ico;
import com.yami.trading.bean.item.domain.Item;
-import com.yami.trading.bean.model.ChannelBlockchain;
-import com.yami.trading.bean.model.User;
-import com.yami.trading.bean.model.Withdraw;
-import com.yami.trading.common.config.RequestDataHelper;
-import com.yami.trading.common.domain.Result;
-import com.yami.trading.common.util.*;
-import com.yami.trading.huobi.data.DataCache;
-import com.yami.trading.huobi.data.internal.CryptosKlineService;
-import com.yami.trading.huobi.data.internal.DepthTimeObject;
+import com.yami.trading.common.util.ApplicationContextUtils;
import com.yami.trading.huobi.data.internal.KlineInitService;
-import com.yami.trading.huobi.data.internal.KlineTimeObject;
-import com.yami.trading.huobi.hobi.HobiDataService;
-import com.yami.trading.security.common.enums.CryptoCurrencyEnum;
-import com.yami.trading.security.common.enums.SysTypeEnum;
-import com.yami.trading.security.common.manager.PasswordCheckManager;
-import com.yami.trading.security.common.util.SecurityUtils;
-import com.yami.trading.service.IdentifyingCodeService;
-import com.yami.trading.service.WithdrawService;
-import com.yami.trading.service.data.KlineDBService;
import com.yami.trading.service.ico.IcoService;
import com.yami.trading.service.item.ItemService;
-import com.yami.trading.service.user.UserService;
import lombok.extern.slf4j.Slf4j;
-
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
-import org.springframework.web.bind.annotation.RequestMapping;
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.text.DecimalFormat;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
import java.util.stream.Collectors;
-
+/**
+ * ICO 定时任务:到期 ICO 转入交易品种,并触发行情初始化。
+ */
@Component
@Slf4j
public class IcoTask {
@Autowired
- IcoService icoService;
+ private IcoService icoService;
@Autowired
- ItemService itemService;
+ private ItemService itemService;
@Autowired
- InitHandle initHandle;
+ private InitHandle initHandle;
@Autowired
private KlineInitService klineInitService;
- @Autowired
- UdunClient udunClient;
-
- @Autowired
- RedisTemplate redisTemplate;
-
- @Autowired
- WithdrawService withdrawService;
-
- @Autowired
- IdentifyingCodeService identifyingCodeService;
- @Autowired
- UserService userService;
- @Autowired
- PasswordCheckManager passwordCheckManager;
- @Autowired
- HobiDataService hobiDataService;
- @Autowired
- KlineDBService klineDBService;
-
- @Autowired
- DepthPushJob depthPushJob;
-
- //@Scheduled(cron = "*/5 * * * * ?")
- public void test() throws Exception {
- /*String symbol ="snekusdt";
- RequestDataHelper.set("symbol", symbol);
- LambdaQueryWrapper<Kline> queryWrapper = new LambdaQueryWrapper<Kline>()
- .eq(Kline::getSymbol, symbol)
- .eq(Kline::getPeriod, "5min")
- .ge(Kline::getTs, ts1)
- .lt(Kline::getTs, ts2)
- .orderByAsc(Kline::getTs);
- List<Kline> list = klineDBService.list(queryWrapper);
- BigDecimal tz = num.divide(BigDecimal.valueOf(list.size()), 6, RoundingMode.HALF_UP);
- System.out.println(list.size());
- System.out.println(tz);
- for(int i=0;i<list.size();i++){
- BigDecimal nums = BigDecimal.valueOf(i+1);
- *//*BigDecimal integerPart = nums.divide(BigDecimal.valueOf(100), 0, RoundingMode.FLOOR).add(BigDecimal.valueOf(1));
-
- System.out.printf("nums=%d, 除以100的整数部分=%d%n", nums.intValue(), integerPart.intValue());*//*
- BigDecimal addNum = nums.multiply(tz);
- list.get(i).setClose(list.get(i).getClose().add(addNum));
- list.get(i).setOpen(list.get(i).getOpen().add(addNum));
- list.get(i).setHigh(list.get(i).getHigh().add(addNum));
- list.get(i).setLow(list.get(i).getLow().add(addNum));
- }
- klineDBService.saveOrUpdateBatch(list);*/
-
- /*RequestDataHelper.clear();
- // 定义时间范围:2025-09-16 00:00:00 到 2025-09-19 16:15:00
- LocalDateTime startTime = LocalDateTime.of(2025, 9, 16, 0, 0, 0);
- LocalDateTime endTime = LocalDateTime.of(2025, 9, 19, 16, 15, 0);
-
- // 转换为东八区(UTC+8)的毫秒级时间戳
- ZoneOffset zoneOffset = ZoneOffset.of("+8");
- long startTs = startTime.toInstant(zoneOffset).toEpochMilli();
- long endTs = endTime.toInstant(zoneOffset).toEpochMilli();
-
- // 存储所有时间戳
- List<Long> timestamps = new ArrayList<>();
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-
- List<Kline> list = new ArrayList<>();
- // 每5分钟 = 300000毫秒,遍历生成时间戳
- for (long currentTs = startTs; currentTs <= endTs; currentTs += 300000) {
- timestamps.add(currentTs);
-
- // 打印时间和对应的时间戳(可选)
- LocalDateTime currentTime = LocalDateTime.ofInstant(
- java.time.Instant.ofEpochMilli(currentTs),
- zoneOffset
- );
- System.out.printf("时间: %s | 时间戳: %d%n",
- currentTime.format(formatter), currentTs);
- Kline kline = new Kline();
- kline.setTs(currentTs);
- kline.setSymbol(symbol);
- kline.setPeriod("5min");
- list.add(kline);
- }
- System.out.println(list.size());
- RequestDataHelper.set("symbol", symbol);
- klineDBService.saveOrUpdateBatch(list);
- RequestDataHelper.clear();*/
- /*String symbol = "snekusdt";
- DepthTimeObject depth = DataCache.getDepth().get(symbol);
- Depth depthData = depth.getDepth();
- Realtime realtime = DataCache.getRealtime(symbol);
- depthPushJob.depthRevise(depthData, symbol, realtime.getClose().doubleValue(), true);*/
- }
/**
- * ico转入产品
+ * ICO 上市时间到期后,写入品种表并刷新行情缓存。
*/
@Scheduled(cron = "0 */1 * * * ?")
public void icoToItem() {
- QueryWrapper<Ico> query = new QueryWrapper<>();
+ QueryWrapper<Ico> query = new QueryWrapper<>();
query.lt("market_date", DateTime.now());
List<Ico> icoList = icoService.list(query);
if (icoList == null || icoList.isEmpty()) {
@@ -177,32 +50,32 @@
}
List<Item> addItemList = new ArrayList<>();
for (Ico ico : icoList) {
- //是否已存在币
- QueryWrapper<Item> iQuery = new QueryWrapper<>();
+ QueryWrapper<Item> iQuery = new QueryWrapper<>();
iQuery.eq("SYMBOL", ico.getSymbol());
iQuery.eq("SYMBOL_DATA", ico.getSymbolData());
Item item = itemService.getOne(iQuery);
if (item == null) {
item = new Item();
- item =icoService.icoToItem(item, ico);
+ item = icoService.icoToItem(item, ico);
addItemList.add(item);
}
}
if (!addItemList.isEmpty()) {
- log.info("ico转入产品 数据 Start>>");
+ log.info("ico转入产品 数据 Start>> count={}", addItemList.size());
itemService.saveOrUpdateBatch(addItemList);
initHandle.init();
- log.info("成功ico转入产品 数据 End {}", icoList.size());
+ log.info("成功ico转入产品 数据 End count={}", addItemList.size());
}
}
-
/**
- * K线数据修正
+ * K线数据修正(默认关闭定时,需要时取消注释 cron)
*/
- //@Scheduled(cron = "0 */5 * * * ?")
+ // @Scheduled(cron = "0 */5 * * * ?")
public void klineInit() {
- List<Item> items = ApplicationContextUtils.getApplicationContext().getBean(ItemService.class).list();
+ List<Item> items = ApplicationContextUtils.getApplicationContext()
+ .getBean(ItemService.class)
+ .list();
if (CollectionUtil.isNotEmpty(items)) {
String symbols = items.stream().map(Item::getSymbol).collect(Collectors.joining(","));
klineInitService.klineInit(symbols);
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApGoogleAuthController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApGoogleAuthController.java
index 2843a2b..d928f20 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApGoogleAuthController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApGoogleAuthController.java
@@ -63,7 +63,7 @@
if (flag) {
User user = userService.getById(userId);
if (user.isGoogleAuthBind()) {
- throw new YamiShopBindException("谷歌验证码已绑定");
+ throw new YamiShopBindException("Google Authenticator is already bound");
}
user.setGoogleAuthBind(true);
user.setGoogleAuthSecret(model.getSecret());
@@ -75,7 +75,7 @@
map.put("google_auth_bind",true);
return Result.succeed(map);
} else {
- throw new YamiShopBindException("谷歌验证码错误");
+ throw new YamiShopBindException("Incorrect Google Authenticator code");
}
}
}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiBankCardController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiBankCardController.java
index 585e685..1c48ad2 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiBankCardController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiBankCardController.java
@@ -87,7 +87,7 @@
if (null == cpmMap || 0 == cpmMap.size()) {
// TODO: 2023/4/16
- throw new YamiShopBindException("支付方式不存在");
+ throw new YamiShopBindException("Payment method does not exist");
}
List<String> cpmList = new ArrayList<String>();
for (String key : cpmMap.keySet()) {
@@ -101,11 +101,11 @@
private String verif(String direction, String nationality, String currency, String payment_method_id, String coin_amount, String img) {
if (StringUtils.isEmptyString(direction) || !Arrays.asList("recharge", "withdraw").contains(direction)) {
- return "充值或提现不正确";
+ return "Invalid recharge or withdrawal type";
}
Map<String, String> currencyMap = this.c2cPaymentMethodService.getCurrencyMap();
if (StringUtils.isEmptyString(currency) || null == currencyMap || (null != currencyMap && !currencyMap.containsKey(currency))) {
- return "支付币种不正确";
+ return "Invalid payment currency";
}
if (StringUtils.isEmptyString(payment_method_id)) {
return "支付方式不正确";
@@ -121,7 +121,7 @@
boolean bank_card_recharge_must_need_img = this.sysparaService.find("bank_card_recharge_must_need_img").getBoolean();
if (bank_card_recharge_must_need_img) {
if (StringUtils.isEmptyString(img)) {
- return "请上传图片";
+ return "Please upload an image";
}
}
}
@@ -232,15 +232,15 @@
Object object = this.sessionTokenService.cacheGet(session_token);
this.sessionTokenService.del(session_token);
if (null == object || !userId.equals((String) object)) {
- throw new YamiShopBindException("请稍后再试");
+ throw new YamiShopBindException("Please try again later");
}
String partyId = SecurityUtils.getUser().getUserId();
if (null == partyId) {
- throw new YamiShopBindException("请重新登录");
+ throw new YamiShopBindException("Please log in again");
}
User party = userService.getById(partyId);
if (Constants.SECURITY_ROLE_TEST.equals(party.getRoleName())) {
- throw new YamiShopBindException("无权限");
+ throw new YamiShopBindException("Permission denied");
}
if (!party.isEnabled()) {
throw new YamiShopBindException("User is locked");
@@ -272,7 +272,7 @@
party_kyc=new RealNameAuthRecord();
}
if (!(party_kyc.getStatus() == 2) && "true".equals(this.sysparaService.find("withdraw_by_kyc").getSvalue())) {
- throw new YamiShopBindException("无权限");
+ throw new YamiShopBindException("Permission denied");
}
HighLevelAuthRecord party_kycHighLevel = highLevelAuthRecordService.findByUserId(partyId);
if (party_kycHighLevel==null){
@@ -280,10 +280,10 @@
}
double withdraw_by_high_kyc = Double.valueOf(this.sysparaService.find("withdraw_by_high_kyc").getSvalue());
if (withdraw_by_high_kyc > 0 && coin_amount_double > withdraw_by_high_kyc && !(party_kycHighLevel.getStatus() == 2)) {
- throw new YamiShopBindException("请先通过高级认证");
+ throw new YamiShopBindException("Advanced verification required");
}
// if (!party.getWithdraw_authority()) {
-// throw new BusinessException(1, "无权限");
+// throw new BusinessException(1, "Permission denied");
// }
// 手续费(USDT) 提现手续费类型,fixed是单笔固定金额,rate是百分比,part是分段
String withdraw_fee_type = this.sysparaService.find("withdraw_fee_type").getSvalue();
@@ -387,10 +387,10 @@
}
double withdraw_limit_turnover_percent = Double.valueOf(this.sysparaService.find("withdraw_limit_turnover_percent").getSvalue());
party_withdraw = Arith.mul(party_withdraw, withdraw_limit_turnover_percent);
- // 流水小于限额
+ // Turnover below minimum limit
if (userdata_turnover < party_withdraw) {
fact_withdraw_amount = Arith.sub(party_withdraw, userdata_turnover);
- throw new YamiShopBindException("流水小于限额");
+ throw new YamiShopBindException("Turnover below minimum limit");
}
}
if ("2".equals(withdraw_limit_open_use_type)) {
@@ -402,7 +402,7 @@
double userdata_turnover = party.getWithdrawLimitNowAmount().doubleValue();
double withdraw_limit_turnover_percent = Double.valueOf(this.sysparaService.find("withdraw_limit_turnover_percent").getSvalue());
party_withdraw = Arith.mul(party_withdraw, withdraw_limit_turnover_percent);
- // 流水小于限额
+ // Turnover below minimum limit
if (userdata_turnover < party_withdraw) {
fact_withdraw_amount = Arith.sub(party_withdraw, userdata_turnover);
throw new YamiShopBindException(fact_withdraw_amount + "");
@@ -421,13 +421,13 @@
Object obj1 = this.sysparaService.find("bank_card_order_cancel_day_times");
if (null != obj1) {
if (orderCancelDayTimes >= Integer.valueOf(this.sysparaService.find("bank_card_order_cancel_day_times").getSvalue()).intValue()) {
- throw new YamiShopBindException("今日取消订单次数太多了,请明日再试");
+ throw new YamiShopBindException("Too many cancellations today, try again tomorrow");
}
}
DecimalFormat df = new DecimalFormat("#.########");
ExchangeRate ex = this.exchangeRateService.findBy(Constants.OUT_OR_IN_DEFAULT, currency.toUpperCase());
if (null == ex) {
- throw new YamiShopBindException("支付币种不正确");
+ throw new YamiShopBindException("Invalid payment currency");
}
C2cOrder c2cOrder = new C2cOrder();
c2cOrder.setPartyId(party.getUserId());
@@ -458,20 +458,20 @@
public Result orderCancel(String order_no, String remark) {
User party = userService.getById(SecurityUtils.getUser().getUserId());
if (Constants.SECURITY_ROLE_TEST.equals(party.getRoleName())) {
- throw new YamiShopBindException("无权限");
+ throw new YamiShopBindException("Permission denied");
}
if (!party.isEnabled()) {
throw new YamiShopBindException("User is locked");
}
C2cOrder order = this.c2cOrderService.get(order_no);
if (null == order || !order.getPartyId().equals(SecurityUtils.getUser().getUserId())) {
- throw new YamiShopBindException("订单不存在");
+ throw new YamiShopBindException("Order does not exist");
}
order.setRemark(remark);
- // 用户不能取消提现
+ // User cannot cancel this withdrawal
if (SecurityUtils.getUser().getUserId().equals(order.getPartyId())) {
if ("withdraw".equals(order.getDirection())) {
- throw new YamiShopBindException("用户不能取消提现");
+ throw new YamiShopBindException("User cannot cancel this withdrawal");
}
this.c2cOrderService.saveOrderCancel(order, "user");
}
@@ -486,7 +486,7 @@
public Result get(@RequestParam String order_no, @RequestParam String language) {
C2cOrder c2cOrder = this.c2cOrderService.get(order_no);
if (null == c2cOrder) {
- throw new YamiShopBindException("订单不存在");
+ throw new YamiShopBindException("Order does not exist");
}
List<String> nos = new ArrayList<String>();
nos.add(c2cOrder.getOrderNo());
@@ -548,23 +548,23 @@
public Result list(String page_no, String direction, String state) {
String partyId = SecurityUtils.getUser().getUserId();
if (null == partyId) {
- throw new YamiShopBindException("请重新登录");
+ throw new YamiShopBindException("Please log in again");
}
if (StringUtils.isNullOrEmpty(page_no)) {
page_no = "1";
}
if (!StringUtils.isInteger(page_no)) {
- throw new YamiShopBindException("页码不是整数");
+ throw new YamiShopBindException("Page number must be an integer");
}
if (Integer.valueOf(page_no).intValue() <= 0) {
- throw new YamiShopBindException("页码不能小于等于0");
+ throw new YamiShopBindException("Page number must be greater than 0");
}
int page_no_int = Integer.valueOf(page_no).intValue();
if (StringUtils.isNotEmpty(direction) && !Arrays.asList("recharge", "withdraw").contains(direction)) {
- throw new YamiShopBindException("充值或提现不正确");
+ throw new YamiShopBindException("Invalid recharge or withdrawal type");
}
if (StringUtils.isNotEmpty(state) && !Arrays.asList("0", "3", "4").contains(state)) {
- throw new YamiShopBindException("订单状态不正确");
+ throw new YamiShopBindException("Invalid order status");
}
Page page = this.c2cOrderService.pagedQuery(page_no_int, 20, direction, state, partyId);
if (null == page) {
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cAdvertController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cAdvertController.java
index 4dacfb4..7e08a98 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cAdvertController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cAdvertController.java
@@ -159,17 +159,17 @@
page_no = "1";
}
if (!StringUtils.isInteger(page_no)) {
- throw new YamiShopBindException("页码不是整数");
+ throw new YamiShopBindException("Page number must be an integer");
}
if (Integer.valueOf(page_no).intValue() <= 0) {
- throw new YamiShopBindException("页码不能小于等于0");
+ throw new YamiShopBindException("Page number must be greater than 0");
}
int page_no_int = Integer.valueOf(page_no).intValue();
String partyId = SecurityUtils.getUser().getUserId();
String c2cUserId = "";
User party = userService.getById(partyId);
if (null == party) {
- throw new YamiShopBindException("用户不存在");
+ throw new YamiShopBindException("User does not exist");
}
if (Arrays.asList(1, 2).contains(party.getC2cUserType())) {
C2cUser c2cUser = c2cUserService.getByPartyId(partyId);
@@ -284,22 +284,22 @@
//// page_no = "1";
//// }
//// if (!StringUtils.isInteger(page_no)) {
-//// throw new BusinessException("页码不是整数");
+//// throw new BusinessException("Page number must be an integer");
//// }
//// if (Integer.valueOf(page_no).intValue() <= 0) {
-//// throw new BusinessException("页码不能小于等于0");
+//// throw new BusinessException("Page number must be greater than 0");
//// }
////
//// int page_no_int = Integer.valueOf(page_no).intValue();
////
//// String partyId = this.getLoginPartyId();
//// if (null == partyId) {
-//// throw new BusinessException("请重新登录");
+//// throw new BusinessException("Please log in again");
//// }
////
//// C2cUser c2cUser = this.c2cUserService.getByPartyId(partyId);
//// if (null == c2cUser) {
-//// throw new BusinessException("承兑商不存在");
+//// throw new BusinessException("Merchant does not exist");
//// }
////
//// Integer on_sale_int = null;
@@ -377,22 +377,22 @@
//// page_no = "1";
//// }
//// if (!StringUtils.isInteger(page_no)) {
-//// throw new BusinessException("页码不是整数");
+//// throw new BusinessException("Page number must be an integer");
//// }
//// if (Integer.valueOf(page_no).intValue() <= 0) {
-//// throw new BusinessException("页码不能小于等于0");
+//// throw new BusinessException("Page number must be greater than 0");
//// }
////
//// int page_no_int = Integer.valueOf(page_no).intValue();
////
//// String partyId = this.getLoginPartyId();
//// if (null == partyId) {
-//// throw new BusinessException("请重新登录");
+//// throw new BusinessException("Please log in again");
//// }
////
//// C2cUser c2cUser = this.c2cUserService.getByPartyId(partyId);
//// if (null == c2cUser) {
-//// throw new BusinessException("承兑商不存在");
+//// throw new BusinessException("Merchant does not exist");
//// }
////
//// Page page = this.c2cAdvertService.pagedQuery(page_no_int, 20, c2cUser.getId().toString(), direction, "", "", "", null, 1, true);
@@ -451,19 +451,19 @@
String id = request.getParameter("id");
String language = request.getParameter("language");
if (StringUtils.isEmptyString(id)) {
- throw new YamiShopBindException("C2C广告id不正确");
+ throw new YamiShopBindException("C2CInvalid advert ID");
}
C2cAdvert c2cAdvert = c2cAdvertService.getById(id);
if (null == c2cAdvert) {
- throw new YamiShopBindException("广告不存在");
+ throw new YamiShopBindException("Advert does not exist");
}
C2cUser c2cUser = this.c2cUserService.getById(c2cAdvert.getC2cUserId());
if (null == c2cUser) {
- throw new YamiShopBindException("承兑商不存在");
+ throw new YamiShopBindException("Merchant does not exist");
}
User c2cParty = userService.getById(c2cUser.getC2cUserPartyId());
if (null == c2cParty) {
- throw new YamiShopBindException("承兑商的用户信息不存在");
+ throw new YamiShopBindException("Merchant user info does not exist");
}
Map<String, String> data = new HashMap<String, String>();
data.put("id", c2cAdvert.getUuid().toString());
@@ -534,7 +534,7 @@
// Map<String, String> currencyMap = this.c2cAdvertService.getCurrencyMap();
// Map<String, String> symbolMap = this.c2cAdvertService.getSymbolMap();
// if (StringUtils.isEmptyString(currency) || null == currencyMap || (null != currencyMap && !currencyMap.containsKey(currency))) {
-// return "支付币种不正确";
+// return "Invalid payment currency";
// }
// if (StringUtils.isEmptyString(symbol) || null == symbolMap || (null != symbolMap && !symbolMap.containsKey(symbol))) {
// return "上架币种不正确";
@@ -556,7 +556,7 @@
// return "支付时效未填或格式不正确";
// }
// if (StringUtils.isEmptyString(safeword)) {
-// return "资金密码错误";
+// return "Incorrect fund password";
// }
// return null;
// }
@@ -568,7 +568,7 @@
Map<String, String> currencyMap = this.c2cAdvertService.getCurrencyMap();
Map<String, String> symbolMap = this.c2cAdvertService.getSymbolMap();
if (!StringUtils.isEmptyString(currency) && null != currencyMap && !currencyMap.containsKey(currency)) {
- return "支付币种不正确";
+ return "Invalid payment currency";
}
if (!StringUtils.isEmptyString(symbol) && null != symbolMap && !symbolMap.containsKey(symbol)) {
return "上架币种不正确";
@@ -578,7 +578,7 @@
return "支付方式类型不正确";
}
if (!StringUtils.isEmptyString(amount) && (!StringUtils.isDouble(amount) || Double.valueOf(amount).doubleValue() < 0)) {
- return "支付金额不正确";
+ return "Invalid payment amount";
}
return null;
}
@@ -590,7 +590,7 @@
// Map<String, String> currencyMap = this.c2cAdvertService.getCurrencyMap();
// Map<String, String> symbolMap = this.c2cAdvertService.getSymbolMap();
// if (!StringUtils.isEmptyString(currency) && null != currencyMap && !currencyMap.containsKey(currency)) {
-// return "支付币种不正确";
+// return "Invalid payment currency";
// }
// if (!StringUtils.isEmptyString(symbol) && null != symbolMap && !symbolMap.containsKey(symbol)) {
// return "上架币种不正确";
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cAppealController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cAppealController.java
index bcea1e4..7a4cd4d 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cAppealController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cAppealController.java
@@ -53,22 +53,22 @@
String name = request.getParameter("name");
String phone = request.getParameter("phone");
if (StringUtils.isEmptyString(order_no)) {
- throw new YamiShopBindException("申诉订单号不正确");
+ throw new YamiShopBindException("Invalid appeal order number");
}
if (StringUtils.isEmptyString(reason)) {
- throw new YamiShopBindException("请输入申诉原因");
+ throw new YamiShopBindException("Appeal reason is required");
}
if (StringUtils.isEmptyString(img)) {
- throw new YamiShopBindException("请上传申诉凭证");
+ throw new YamiShopBindException("Please upload appeal evidence");
}
String partyId = SecurityUtils.getUser().getUserId();
C2cOrder order = this.c2cOrderService.get(order_no);
if (null == order || !partyId.equals(order.getPartyId())) {
- throw new YamiShopBindException("订单不存在");
+ throw new YamiShopBindException("Order does not exist");
}
C2cAppeal appeal = this.c2cAppealService.findByOrderNo(order_no);
if (null != appeal) {
- throw new YamiShopBindException("该订单已提交申诉");
+ throw new YamiShopBindException("Appeal already submitted for this order");
}
C2cAppeal entity = new C2cAppeal();
entity.setOrderNo(order_no);
@@ -97,11 +97,11 @@
public Result get(HttpServletRequest request) throws IOException {
String order_no = request.getParameter("order_no");
if (StringUtils.isEmptyString(order_no)) {
- throw new YamiShopBindException("申诉订单号不正确");
+ throw new YamiShopBindException("Invalid appeal order number");
}
C2cAppeal c2cAppeal = this.c2cAppealService.findByOrderNo(order_no);
if (null == c2cAppeal) {
- throw new YamiShopBindException("申诉不存在");
+ throw new YamiShopBindException("Appeal does not exist");
}
if (StringUtils.isNotEmpty(c2cAppeal.getImg())) {
String path = Constants.IMAGES_HTTP+c2cAppeal.getImg();
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cOrderController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cOrderController.java
index b87c16c..8c459f8 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cOrderController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cOrderController.java
@@ -63,7 +63,7 @@
public Object order_open(HttpServletRequest request) throws IOException {
String currency = request.getParameter("currency");
if (StringUtils.isEmptyString(currency)) {
- throw new YamiShopBindException("支付币种不正确");
+ throw new YamiShopBindException("Invalid payment currency");
}
String partyId = SecurityUtils.getCurrentUserId();
String session_token = sessionTokenService.savePut(partyId);
@@ -111,7 +111,7 @@
party = userService.getById(partyId);
log.error("用户"+direction+"开始当前用户uid:"+party.getUserCode()+"当前用户名:"+party.getUserName()+"生成的订单号:"+orderNo);
if (Constants.SECURITY_ROLE_TEST.equals(party.getRoleName())) {
- throw new YamiShopBindException("无权限");
+ throw new YamiShopBindException("Permission denied");
}
if (!C2cLock.add(partyId)) {
@@ -122,7 +122,7 @@
Object object = this.sessionTokenService.cacheGet(session_token);
this.sessionTokenService.del(session_token);
if (null == object || !partyId.equals((String) object)) {
- throw new YamiShopBindException("请稍后再试");
+ throw new YamiShopBindException("Please try again later");
}
if (!party.isEnabled()) {
@@ -135,14 +135,14 @@
String c2c_sell_only_one = sysparaService.find("c2c_sell_only_one").getSvalue();
if(StringUtils.isNotEmpty(c2c_sell_only_one)&&"1".equals(c2c_sell_only_one)) {
if(nofinishOrderCount >= 1) {
- throw new YamiShopBindException("提交失败,当前有未处理订单");
+ throw new YamiShopBindException("Submission failed, pending order exists");
}
Long.valueOf(c2c_sell_only_one).longValue();
}
Object obj2 = this.sysparaService.find("c2c_nofinish_order_count_max");
if (null != obj2) {
if (nofinishOrderCount >= Long.valueOf(this.sysparaService.find("c2c_nofinish_order_count_max").getSvalue()).longValue()) {
- throw new YamiShopBindException("用户未结束订单数量已达上限");
+ throw new YamiShopBindException("Too many open orders");
}
}
@@ -163,34 +163,34 @@
Object obj1 = this.sysparaService.find("c2c_order_cancel_day_times");
if (null != obj1) {
if (orderCancelDayTimes >= Integer.valueOf(this.sysparaService.find("c2c_order_cancel_day_times").getSvalue()).intValue()) {
- throw new YamiShopBindException("今日取消订单次数太多了,请明日再试");
+ throw new YamiShopBindException("Too many cancellations today, try again tomorrow");
}
}
C2cAdvert c2cAdvert = this.c2cAdvertService.getById(c2c_advert_id);
if (null == c2cAdvert) {
- throw new YamiShopBindException("广告不存在");
+ throw new YamiShopBindException("Advert does not exist");
}
C2cPaymentMethod method =c2cPaymentMethodService.get(payment_method_id);
if (null == method) {
- throw new YamiShopBindException("支付方式不存在");
+ throw new YamiShopBindException("Payment method does not exist");
}
if (StringUtils.isEmptyString(order_type) || !Arrays.asList("by_amount", "by_num").contains(order_type)) {
- throw new YamiShopBindException("订单类型不正确");
+ throw new YamiShopBindException("Invalid order type");
}
if (C2cOrder.ORDER_TYPE_BY_AMOUNT.equals(order_type)) {
// 按支付金额支付
if (StringUtils.isEmptyString(amount) || !StringUtils.isDouble(amount) || Double.valueOf(amount).doubleValue() <= 0) {
- throw new YamiShopBindException("支付金额不正确");
+ throw new YamiShopBindException("Invalid payment amount");
}
coin_amount = "0";
} else {
// 按币种数量支付
if (StringUtils.isEmptyString(coin_amount) || !StringUtils.isDouble(coin_amount) || Double.valueOf(coin_amount).doubleValue() <= 0) {
- throw new YamiShopBindException("币种数量不正确");
+ throw new YamiShopBindException("Invalid currency amount");
}
amount = "0";
}
@@ -247,16 +247,16 @@
String partyId = SecurityUtils.getCurrentUserId();
if (null == partyId) {
- throw new BusinessException("请重新登录");
+ throw new BusinessException("Please log in again");
}
User party = userService.getById(partyId);
if (Constants.SECURITY_ROLE_TEST.equals(party.getRoleName())) {
- throw new BusinessException("无权限");
+ throw new BusinessException("Permission denied");
}
if (!userService.checkLoginSafeword(partyId, safe_password)) {
- throw new BusinessException("资金密码错误");
+ throw new BusinessException("Incorrect fund password");
}
if (!party.isEnabled()) {
@@ -265,7 +265,7 @@
C2cOrder order = this.c2cOrderService.get(order_no);
if (null == order) {
- throw new BusinessException("订单不存在");
+ throw new BusinessException("Order does not exist");
}
if (partyId.equals(order.getPartyId())) {
@@ -279,7 +279,7 @@
throw new BusinessException("承兑商不能支付买单");
}
} else {
- throw new BusinessException("无权限");
+ throw new BusinessException("Permission denied");
}
if (!"0".equals(order.getState())) {
@@ -287,7 +287,7 @@
}
if (!C2cOrderLock.add(order_no)) {
- throw new BusinessException(1, "请稍后再试");
+ throw new BusinessException(1, "Please try again later");
}
lock = true;
@@ -356,22 +356,22 @@
String partyId = SecurityUtils.getCurrentUserId();
if (null == partyId) {
- throw new BusinessException("请重新登录");
+ throw new BusinessException("Please log in again");
}
User party = userService.getById(partyId);
if (Constants.SECURITY_ROLE_TEST.equals(party.getRoleName())) {
- throw new BusinessException("无权限");
+ throw new BusinessException("Permission denied");
}
if (!C2cOrderLock.add(order_no)) {
- throw new BusinessException(1, "请稍后再试");
+ throw new BusinessException(1, "Please try again later");
}
lock = true;
if (!userService.checkLoginSafeword(partyId, safe_password)) {
- throw new BusinessException("资金密码错误");
+ throw new BusinessException("Incorrect fund password");
}
if (!party.isEnabled()) {
return Result.succeed("User is locked");
@@ -379,7 +379,7 @@
C2cOrder order = this.c2cOrderService.get(order_no);
if (null == order || !order.getPartyId().equals(partyId)) {
- throw new BusinessException("订单不存在");
+ throw new BusinessException("Order does not exist");
}
if ("0".equals(order.getState())) {
throw new BusinessException("待付款的订单无法放行");
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cPaymentMethodConfigController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cPaymentMethodConfigController.java
index 0db676c..d3851c2 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cPaymentMethodConfigController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cPaymentMethodConfigController.java
@@ -58,7 +58,7 @@
String language = request.getParameter("language");
C2cPaymentMethodConfig config = this.c2cPaymentMethodConfigService.getById(id);
if (null == config) {
- throw new BusinessException("支付方式模板不存在");
+ throw new BusinessException("Payment method template does not exist");
}
if (StringUtils.isNotEmpty(config.getMethodImg())) {
String path = Constants.IMAGES_HTTP+config.getMethodImg();
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cUserController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cUserController.java
index 9e43987..f4c7c56 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cUserController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cUserController.java
@@ -71,7 +71,7 @@
C2cUser c2cUser = this.c2cUserService.getById(c2c_user_id);
if (null == c2cUser) {
- throw new BusinessException("承兑商不存在");
+ throw new BusinessException("Merchant does not exist");
}
C2cUserParamBaseSet paramBaseSet = this.c2cUserParamBaseSetService.getByPartyId(c2cUser.getC2cUserPartyId());
@@ -86,7 +86,7 @@
User party = userService.getById(c2cUser.getC2cUserPartyId());
if (null == party) {
- throw new YamiShopBindException("承兑商的用户信息不存在");
+ throw new YamiShopBindException("Merchant user info does not exist");
}
DecimalFormat df = new DecimalFormat("#.########");
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiCapitaltWalletWalletController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiCapitaltWalletWalletController.java
index c6ab84a..74a6922 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiCapitaltWalletWalletController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiCapitaltWalletWalletController.java
@@ -77,7 +77,7 @@
public Result updateWallt(@Valid TransferModel model) {
String partyId = SecurityUtils.getCurrentUserId();
if(!StringUtils.isNotEmpty(partyId)){
- throw new YamiShopBindException("请登录!");
+ throw new YamiShopBindException("Please log in");
}
return capitaltWalletService.updateWallt(partyId,model.getDeductAccount(),model.getReceiveAccount(),model.getMoneyRevise());
}
@@ -87,7 +87,7 @@
public Result updateWallt() {
String partyId = SecurityUtils.getCurrentUserId();
if(!StringUtils.isNotEmpty(partyId)){
- throw new YamiShopBindException("请登录!");
+ throw new YamiShopBindException("Please log in");
}
// 获取合约账户(contract)
Wallet wallet = walletService.saveWalletByPartyId(partyId);
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiContractApplyOrderController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiContractApplyOrderController.java
index d05f720..01ecc50 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiContractApplyOrderController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiContractApplyOrderController.java
@@ -204,7 +204,7 @@
lockAcquired = rLock.tryLock(5, TimeUnit.SECONDS);
if (!lockAcquired) {
log.warn("无法获取锁: contract_open_{}", partyId);
- throw new YamiShopBindException("请稍后再试");
+ throw new YamiShopBindException("Please try again later");
}
//判断下单金额是否符合最低金额 最低下单张数:0.01
//合约张数 张数=保证金*杠杆倍数/(面值*最新成交价)
@@ -213,7 +213,7 @@
if (amount.compareTo(new BigDecimal(faceValue)) < 0) {
double minimumAmount = minAmount * faceValue * openAction.getPrice().doubleValue() / openAction.getLever_rate().doubleValue();
double roundedAmount = Math.ceil(minimumAmount * 10000) / 10000;
- throw new YamiShopBindException("最低下单金额:"+roundedAmount);
+ throw new YamiShopBindException("Minimum order amount: "+roundedAmount);
}
// 校验当前用户订单状态
@@ -233,7 +233,7 @@
throw e; // 重新抛出自定义异常
} catch (Exception e) {
log.error("系统异常: {}", e.getMessage(), e);
- throw new YamiShopBindException("操作失败,请稍后再试");
+ throw new YamiShopBindException("Operation failed, please try again later");
} finally {
// 确保释放锁
if (lockAcquired && rLock.isHeldByCurrentThread()) {
@@ -277,7 +277,7 @@
String[] stopUsers = stopUserInternet.split(",");
User user = userService.getById(partyId);
if (Arrays.asList(stopUsers).contains(user.getUserName())) {
- throw new YamiShopBindException("无网络");
+ throw new YamiShopBindException("Network unavailable");
}
}
}
@@ -313,7 +313,7 @@
RLock rLock = redissonClient.getLock("contract_close_" + partyId);
boolean lockResult = rLock.tryLock(5, TimeUnit.SECONDS);
if (!lockResult) {
- throw new YamiShopBindException("请稍后再试");
+ throw new YamiShopBindException("Please try again later");
}
try {
User user = userService.getById(partyId);
@@ -330,7 +330,7 @@
System.out.println("stopUserInternet = " + stopUserInternet);
if(Arrays.asList(stopUsers).contains(user.getUserName())){
- throw new YamiShopBindException("无网络");
+ throw new YamiShopBindException("Network unavailable");
}
}
@@ -401,7 +401,7 @@
ContractApplyOrder order = this.contractApplyOrderService.findByOrderNo(order_no);
if (order == null) {
- throw new YamiShopBindException("委托单不存在");
+ throw new YamiShopBindException("Order does not exist");
}
Map<String, Object> map = new HashMap<String, Object>();
map.put("order_no", order.getOrderNo());
@@ -449,8 +449,8 @@
t.start();
} catch (Exception e) {
- log.error("执行撤单异常", e);
- throw new YamiShopBindException("执行撤单异常");
+ log.error("Failed to cancel order", e);
+ throw new YamiShopBindException("Failed to cancel order");
}
return Result.succeed(null,"success");
@@ -467,8 +467,8 @@
t.start();
} catch (Exception e) {
- log.error("执行撤单异常", e);
- throw new YamiShopBindException("执行撤单异常");
+ log.error("Failed to cancel order", e);
+ throw new YamiShopBindException("Failed to cancel order");
}
return Result.succeed(null,"success");
@@ -559,10 +559,10 @@
Page<ContractApplyOrder> result = contractApplyOrderService.findList(page, SecurityUtils.getUser().getUserId(), type, symbolType);
List<ContractApplyOrder> datas = result.getRecords();
if (!StringUtils.isInteger(page_no)) {
- throw new YamiShopBindException("页码不是整数");
+ throw new YamiShopBindException("Page number must be an integer");
}
if (Integer.valueOf(page_no).intValue() <= 0) {
- throw new YamiShopBindException("页码不能小于等于0");
+ throw new YamiShopBindException("Page number must be greater than 0");
}
Long count = 0L;
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiContractOrderController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiContractOrderController.java
index 65c5b1f..b32e987 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiContractOrderController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiContractOrderController.java
@@ -78,8 +78,8 @@
contractOrderService.addDepositOpen(order, addDepositOpen);
}
} catch (Exception e) {
- log.error("追加保证金异常", e);
- throw new YamiShopBindException("追加保证金异常");
+ log.error("Failed to add margin", e);
+ throw new YamiShopBindException("Failed to add margin");
}
return Result.succeed("success");
}
@@ -96,8 +96,8 @@
contractOrderService.update(order);
}
} catch (Exception e) {
- log.error("追加保证金异常", e);
- throw new YamiShopBindException("追加保证金异常");
+ log.error("Failed to add margin", e);
+ throw new YamiShopBindException("Failed to add margin");
}
return Result.succeed("success");
}
@@ -169,7 +169,7 @@
List<Realtime> realtime_all = this.dataService.realtime(symbolsStr);
if (realtime_all.size() <= 0) {
realtime_all = new ArrayList<Realtime>();
-// throw new BusinessException("系统错误,请稍后重试");
+// throw new BusinessException("System error, please try again later");
}
Map<String, Realtime> realtimeMap = new HashMap<String, Realtime>();
@@ -215,7 +215,7 @@
if (null == order) {
log.info("contractOrder!get order_no:" + order_no + ", order null");
- throw new YamiShopBindException("订单不存在");
+ throw new YamiShopBindException("Order does not exist");
}
return Result.ok(this.contractOrderService.bulidOne(order));
@@ -256,10 +256,10 @@
}
if (!StringUtils.isInteger(page_no)) {
- throw new YamiShopBindException("页码不是整数");
+ throw new YamiShopBindException("Page number must be an integer");
}
if (Integer.valueOf(page_no).intValue() <= 0) {
- throw new YamiShopBindException("页码不能小于等于0");
+ throw new YamiShopBindException("Page number must be greater than 0");
}
String partyId = SecurityUtils.getCurrentUserId();
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiFuturesOrderController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiFuturesOrderController.java
index 04fb253..2abe1e6 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiFuturesOrderController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiFuturesOrderController.java
@@ -75,7 +75,7 @@
Map<String, Object> data = new HashMap<>();
Item bySymbol = itemService.findBySymbol(symbol);
if(bySymbol == null){
- throw new YamiShopBindException("当前币对不存在");
+ throw new YamiShopBindException("Trading pair does not exist");
}
List<Map<String,Object>> futuresParas = new ArrayList<>();
for (FuturesPara para : this.futuresParaService.getBySymbolSort(symbol)) {
@@ -142,19 +142,19 @@
public Result<Map<String, String>> open(FutureOpenAction futureOpenAction) {
Item bySymbol = itemService.findBySymbol(futureOpenAction.getSymbol());
if(bySymbol == null){
- throw new YamiShopBindException("当前币对不存在");
+ throw new YamiShopBindException("Trading pair does not exist");
}
if (!itemService.isContractTrading(bySymbol)) {
- throw new YamiShopBindException("未开放合约交易");
+ throw new YamiShopBindException("Futures trading is not available");
}
/*if (itemService.isSuspended(bySymbol.getSymbol())) {
- throw new YamiShopBindException("停牌禁止交易");
+ throw new YamiShopBindException("Trading suspended");
}*/
boolean isOpen = MarketOpenChecker.isMarketOpenByItemCloseType(bySymbol.getOpenCloseType());
if(!isOpen){
- throw new YamiShopBindException("当前已经休市");
+ throw new YamiShopBindException("Market is closed");
}
String partyId = SecurityUtils.getUser().getUserId();
boolean lock = false;
@@ -163,7 +163,7 @@
Map<String, String> data = new HashMap<String, String>();
if (!FuturesLock.add(partyId)) {
- throw new YamiShopBindException("请稍后再试");
+ throw new YamiShopBindException("Please try again later");
}
lock = true;
@@ -175,7 +175,7 @@
throw new YamiShopBindException("User is locked");
}
if (null == object || !party.getUserId().equals((String) object)) {
- throw new BusinessException("请稍后再试");
+ throw new BusinessException("Please try again later");
}
FuturesOrder order = new FuturesOrder();
@@ -240,7 +240,7 @@
FuturesOrder order = this.futuresOrderService.cacheByOrderNo(order_no);
if (null == order) {
log.info("futuresOrder!get order_no:" + order_no + ", order null");
- throw new YamiShopBindException("订单不存在");
+ throw new YamiShopBindException("Order does not exist");
}
return Result.succeed(this.futuresOrderService.bulidOne(order));
}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiHighLevelAuthController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiHighLevelAuthController.java
index 372890c..7e43a18 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiHighLevelAuthController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiHighLevelAuthController.java
@@ -48,20 +48,20 @@
public Result applyHighLevelAuth(@Valid ApplyHighLevelAuthModel model) {
User user = userCacheService.currentUser();
if (!realNameAuthRecordService.isPass(user.getUserId())) {
- throw new YamiShopBindException("实名认证未通过,无法进行高级认证");
+ throw new YamiShopBindException("Real-name verification required before advanced verification");
}
HighLevelAuthRecord highLevelAuthRecord = highLevelAuthRecordService.findByUserId(user.getUserId());
if (highLevelAuthRecord != null) {
String msg = "";
switch (highLevelAuthRecord.getStatus()) {
case 0:
- msg = "已经提交申请,请等待审核";
+ msg = "Application submitted, please wait for review";
break;
case 1:
- msg = "审核中";
+ msg = "Under review";
break;
case 2:
- msg = "审核已通过";
+ msg = "Already approved";
break;
case 3:
highLevelAuthRecord.setStatus(1);
@@ -71,7 +71,7 @@
// msg = MessageFormat.format("审核未通过,原因:{0}", record.getMsg());
break;
default:
- msg = "审核状态异常请联系客服";
+ msg = "Abnormal review status, please contact support";
break;
}
if (StrUtil.isNotBlank(msg)) {
@@ -85,34 +85,34 @@
if (StrUtil.isNotBlank(model.getWork_place())){
if ( model.getWork_place().length()>245){
- throw new YamiShopBindException("工作地址长度超过245");
+ throw new YamiShopBindException("Work address exceeds 245 characters");
}
}
if (StrUtil.isNotBlank(model.getHome_place())){
if ( model.getHome_place().length()>245){
- throw new YamiShopBindException("家庭地址长度超过245");
+ throw new YamiShopBindException("Home address exceeds 245 characters");
}
}
if (StrUtil.isNotBlank(model.getRelatives_relation())){
if ( model.getRelatives_relation().length()>32){
- throw new YamiShopBindException("亲属电话长度超过32");
+ throw new YamiShopBindException("Relative phone exceeds 32 characters");
}
}
if (StrUtil.isNotBlank(model.getRelatives_name())){
if ( model.getRelatives_name().length()>32){
- throw new YamiShopBindException("亲属名称长度超过32");
+ throw new YamiShopBindException("Relative name exceeds 32 characters");
}
}
if (StrUtil.isNotBlank(model.getRelatives_place())){
if ( model.getRelatives_place().length()>245){
- throw new YamiShopBindException("亲属地址长度超过245");
+ throw new YamiShopBindException("Relative address exceeds 245 characters");
}
}
if (StrUtil.isNotBlank(model.getRelatives_phone())){
if ( model.getRelatives_phone().length()>32){
- throw new YamiShopBindException("亲属电话长度超过32");
+ throw new YamiShopBindException("Relative phone exceeds 32 characters");
}
}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiIcoController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiIcoController.java
index bc94e2b..aff11d0 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiIcoController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiIcoController.java
@@ -64,7 +64,7 @@
public Result<String> subscribe(@Valid UserSubscription model) {
String partyId = SecurityUtils.getUser().getUserId();
if (StringUtils.isEmpty(partyId)) {
- throw new YamiShopBindException("请重新登录");
+ throw new YamiShopBindException("Please log in again");
}
RLock rLock = redissonClient.getLock("subscribe" + partyId);
boolean lockAcquired = false;
@@ -73,7 +73,7 @@
lockAcquired = rLock.tryLock(5, TimeUnit.SECONDS);
if (!lockAcquired) {
log.warn("无法获取锁: subscribe{}", partyId);
- throw new YamiShopBindException("请稍后再试");
+ throw new YamiShopBindException("Please try again later");
}
model.setUserId(partyId);
return icoService.subscribe(model);
@@ -82,7 +82,7 @@
throw e; // 重新抛出自定义异常
} catch (Exception e) {
log.error("系统异常: {}", e.getMessage(), e);
- throw new YamiShopBindException("操作失败,请稍后再试");
+ throw new YamiShopBindException("Operation failed, please try again later");
} finally {
// 确保释放锁
if (lockAcquired && rLock.isHeldByCurrentThread()) {
@@ -97,7 +97,7 @@
QueryWrapper queryWrapper = QueryWrapperGenerator.buildQueryCondition (icoQuery, IcoQuery.class);
String partyId = SecurityUtils.getUser().getUserId();
if (StringUtils.isEmpty(partyId)) {
- throw new YamiShopBindException("请重新登录");
+ throw new YamiShopBindException("Please log in again");
}
queryWrapper.eq("u.user_id", partyId);
queryWrapper.orderByDesc("created_at");
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiIndexController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiIndexController.java
index a1ff910..066984c 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiIndexController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiIndexController.java
@@ -89,7 +89,7 @@
user= userService.findByUserName(mobileOrUserName);
}
if (user==null){
- throw new YamiShopBindException("账号或密码不正确");
+ throw new YamiShopBindException("Incorrect username or password");
}
// 半小时内密码输入错误十次,已限制登录30分钟
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiItemController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiItemController.java
index 938455d..3161e61 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiItemController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiItemController.java
@@ -72,7 +72,7 @@
bySymbol.transName();
}
if (bySymbol == null) {
- throw new YamiShopBindException(symbol + " 不存在");
+ throw new YamiShopBindException(symbol + " does not exist");
}
List<StocksDto> stocks = findRealTimeByBoard(symbol);
RelatedStocksDto relatedStocksDto = new RelatedStocksDto(symbol, stocks);
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiItemUserOptionalController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiItemUserOptionalController.java
index e45bc29..60cdc06 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiItemUserOptionalController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiItemUserOptionalController.java
@@ -70,7 +70,7 @@
queryWrapper.eq("symbol", symbol);
long count = itemUserOptionalService.count(queryWrapper);
if(count > 0 ){
- throw new YamiShopBindException("当前已经加入过自选");
+ throw new YamiShopBindException("Already added to favorites");
}
@@ -80,11 +80,11 @@
entity.setSymbol(symbol);
itemUserOptionalService.save(entity);
}else {
- throw new YamiShopBindException("请稍后再试");
+ throw new YamiShopBindException("Please try again later");
}
} catch (Exception e) {
log.error("保存自选失败", e);
- throw new YamiShopBindException("保存自选失败:"+ e.getMessage());
+ throw new YamiShopBindException("Failed to save favorites:"+ e.getMessage());
}finally {
if (lock) {
ThreadUtils.sleep(50);
@@ -110,11 +110,11 @@
queryWrapper.eq("symbol", symbol);
itemUserOptionalService.remove(queryWrapper);
}else {
- throw new YamiShopBindException("请稍后再试");
+ throw new YamiShopBindException("Please try again later");
}
} catch (Exception e) {
- log.error("删除失败", e);
- throw new YamiShopBindException("删除失败");
+ log.error("Delete failed", e);
+ throw new YamiShopBindException("Delete failed");
} finally {
if (lock) {
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiKycController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiKycController.java
index d019921..7217172 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiKycController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiKycController.java
@@ -95,13 +95,13 @@
// if (realNameAuthRecord != null) {
// switch (realNameAuthRecord.getStatus()) {
// case 0:
-// msg = "已经提交申请,请等待审核";
+// msg = "Application submitted, please wait for review";
// break;
// case 1:
-// msg = "审核中";
+// msg = "Under review";
// break;
// case 2:
-// msg = "审核已通过";
+// msg = "Already approved";
// break;
// case 3:
// realNameAuthRecord.setStatus(1);
@@ -112,7 +112,7 @@
//// msg = MessageFormat.format("审核未通过,原因:{0}", realNameAuthRecord.getMsg());
//// break;
//// default:
-//// msg = "审核状态异常请联系客服";
+//// msg = "Abnormal review status, please contact support";
//// break;
// }//
// if (StrUtil.isNotBlank(msg)) {
@@ -125,10 +125,10 @@
// }
//
// if (model.getIdNumber().length()>50){
-// throw new YamiShopBindException("证件号码长度超过50");
+// throw new YamiShopBindException("ID number exceeds 50 characters");
// }
// if (model.getName().length()>50){
-// throw new YamiShopBindException("实名姓名长度超过50");
+// throw new YamiShopBindException("Real name exceeds 50 characters");
// }
// BeanUtils.copyProperties(model, realNameAuthRecord);
// realNameAuthRecord.setUserId(user.getUserId());
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiNewOnlineChatController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiNewOnlineChatController.java
index ad0d9b4..19d0b9e 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiNewOnlineChatController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiNewOnlineChatController.java
@@ -180,7 +180,7 @@
private boolean checkUserBlack(String loginPartyId) {
User user = userService.getOne(new LambdaQueryWrapper<User>().eq(User::getUserId, loginPartyId));
if (user == null) {
- log.warn("用户不存在,userId={}", loginPartyId);
+ log.warn("User does not exist,userId={}", loginPartyId);
return false;
}
String username = user.getUserName();
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiNewsController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiNewsController.java
index cc75590..e5a33d2 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiNewsController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiNewsController.java
@@ -81,10 +81,10 @@
page_no = "1";
}
if (!StringUtils.isInteger(page_no)) {
- throw new YamiShopBindException("页码不是整数");
+ throw new YamiShopBindException("Page number must be an integer");
}
if (Integer.valueOf(page_no).intValue() <= 0) {
- throw new YamiShopBindException("页码不能小于等于0");
+ throw new YamiShopBindException("Page number must be greater than 0");
}
int page_no_int = Integer.valueOf(page_no).intValue();
Page<News> page = new Page<>(1, 1000000);
@@ -136,10 +136,10 @@
page_no = "1";
}
if (!StringUtils.isInteger(page_no)) {
- throw new YamiShopBindException("页码不是整数");
+ throw new YamiShopBindException("Page number must be an integer");
}
if (Integer.valueOf(page_no).intValue() <= 0) {
- throw new YamiShopBindException("页码不能小于等于0");
+ throw new YamiShopBindException("Page number must be greater than 0");
}
int page_no_int = Integer.valueOf(page_no).intValue();
List<News> list = new ArrayList<News>();
@@ -183,10 +183,10 @@
page_no = "1";
}
if (!StringUtils.isInteger(page_no)) {
- throw new YamiShopBindException("页码不是整数");
+ throw new YamiShopBindException("Page number must be an integer");
}
if (Integer.valueOf(page_no).intValue() <= 0) {
- throw new YamiShopBindException("页码不能小于等于0");
+ throw new YamiShopBindException("Page number must be greater than 0");
}
int page_no_int = Integer.valueOf(page_no).intValue();
List<News> list = new ArrayList<News>();
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiOtcOnlineChatController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiOtcOnlineChatController.java
index 23ad854..6e6a001 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiOtcOnlineChatController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiOtcOnlineChatController.java
@@ -107,7 +107,7 @@
}
if(StringUtils.isEmptyString(orderNo)) {
- throw new YamiShopBindException("订单号不能未空");
+ throw new YamiShopBindException("Order number is required");
}
otcOnlineChatMessageService.saveSend(SecurityUtils.getCurrentUserId(), type, content, null, orderNo);
@@ -130,7 +130,7 @@
int unreadMsg = 0;
String orderNo = request.getParameter("orderNo");
if(StringUtils.isEmptyString(orderNo)) {
- throw new YamiShopBindException("订单号不能未空");
+ throw new YamiShopBindException("Order number is required");
}
unreadMsg = otcOnlineChatMessageService.unreadMsg(orderNo, SecurityUtils.getCurrentUserId());
resultObject.setData(unreadMsg);
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiPaymentMethod2Controller.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiPaymentMethod2Controller.java
index cea29af..f3dd188 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiPaymentMethod2Controller.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiPaymentMethod2Controller.java
@@ -115,7 +115,7 @@
String id = request.getParameter("id");
List<C2cOrder> order = c2cOrderService.getByPayId(id);
if (ObjectUtils.isNotEmpty(order)) {
- throw new YamiShopBindException("当前支付方式有未处理完成的订单!");
+ throw new YamiShopBindException("Pending orders exist for this payment method");
}
this.c2cPaymentMethodService.removeById(id);
return Result.succeed();
@@ -130,7 +130,7 @@
String language = request.getParameter("language");
C2cPaymentMethod method = this.c2cPaymentMethodService.getById(id);
if (null == method) {
- throw new BusinessException("支付方式不存在");
+ throw new BusinessException("Payment method does not exist");
}
if (StringUtils.isNotEmpty(method.getMethodImg())) {
method.setMethodImg(Constants.IMAGES_HTTP+method.getMethodImg());
@@ -167,24 +167,24 @@
String qrcode = request.getParameter("qrcode");
String remark = request.getParameter("remark");
if (StringUtils.isNullOrEmpty(method_config_id)) {
- throw new BusinessException("支付方式模板不正确");
+ throw new BusinessException("Invalid payment method template");
}
if (StringUtils.isNullOrEmpty(real_name)) {
- throw new BusinessException("真实姓名必填");
+ throw new BusinessException("Real name is required");
}
if (StringUtils.isNullOrEmpty(param_value1)) {
- throw new BusinessException("参数值1必填");
+ throw new BusinessException("Parameter value 1 is required");
}
C2cPaymentMethodConfig methodConfig = this.c2cPaymentMethodConfigService.getById(method_config_id);
if (null == methodConfig) {
- throw new BusinessException("支付方式模板不存在");
+ throw new BusinessException("Payment method template does not exist");
}
// C2C用户和承兑商添加支付方式最大数量
Map<String, C2cPaymentMethod> methodMap = this.c2cPaymentMethodService.getByPartyId(SecurityUtils.getCurrentUserId());
Object obj = this.sysparaService.find("c2c_payment_method_count_max");
if (null != obj) {
if (methodMap.size() >= Integer.valueOf(this.sysparaService.find("c2c_payment_method_count_max").getSvalue()).intValue()) {
- throw new BusinessException("支付方式数量已达上限");
+ throw new BusinessException("Payment method limit reached");
}
}
C2cPaymentMethod method = new C2cPaymentMethod();
@@ -286,18 +286,18 @@
String qrcode = request.getParameter("qrcode");
String remark = request.getParameter("remark");
if (StringUtils.isNullOrEmpty(real_name)) {
- throw new BusinessException("真实姓名必填");
+ throw new BusinessException("Real name is required");
}
if (StringUtils.isNullOrEmpty(param_value1)) {
- throw new BusinessException("参数值1必填");
+ throw new BusinessException("Parameter value 1 is required");
}
C2cPaymentMethod method = this.c2cPaymentMethodService.getById(id);
if (null == method) {
- throw new BusinessException("支付方式不存在");
+ throw new BusinessException("Payment method does not exist");
}
String partyId = SecurityUtils.getCurrentUserId();
if (!method.getPartyId().equals(partyId)) {
- throw new BusinessException("支付方式不匹配该用户");
+ throw new BusinessException("Payment method does not match this user");
}
String log = MessageFormat.format("ip:" + IPHelper.getIpAddr()
+ ",用户修改支付方式,id:{0},原用户PARTY_ID:{1},原支付方式模板:{2},原支付方式类型:{3},原支付方式名称:{4},原支付方式图片:{5},原真实姓名:{6},"
@@ -385,15 +385,15 @@
String id = request.getParameter("id");
String language = request.getParameter("language");
if (StringUtils.isEmptyString(id)) {
- throw new YamiShopBindException("广告id不正确");
+ throw new YamiShopBindException("Invalid advert ID");
}
C2cAdvert c2cAdvert = c2cAdvertService.getById(id);
if (null == c2cAdvert) {
- throw new YamiShopBindException("广告不存在");
+ throw new YamiShopBindException("Advert does not exist");
}
C2cUser c2cUser = this.c2cUserService.getById(c2cAdvert.getC2cUserId());
if (null == c2cUser) {
- throw new YamiShopBindException("承兑商不存在");
+ throw new YamiShopBindException("Merchant does not exist");
}
List<C2cPaymentMethod> list = new ArrayList<C2cPaymentMethod>();
Map<String, C2cPaymentMethod> map = this.c2cPaymentMethodService.getByPartyId(c2cUser.getC2cUserPartyId());
@@ -405,7 +405,7 @@
}
}
if (null == list || 0 == list.size()) {
- throw new YamiShopBindException("承兑商支付方式未配置");
+ throw new YamiShopBindException("Merchant payment method not configured");
}
String[] payTypes = c2cAdvert.getPayType().split(",");
List<C2cPaymentMethod> resList = new ArrayList<C2cPaymentMethod>();
@@ -419,7 +419,7 @@
}
}
if (null == resList || 0 == resList.size()) {
- throw new YamiShopBindException("承兑商广告支付方式未配置");
+ throw new YamiShopBindException("Merchant advert payment method not configured");
}
for (int i = 0; i < resList.size(); i++) {
C2cPaymentMethod method = resList.get(i);
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiPaymentMethodController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiPaymentMethodController.java
index a706469..07651cc 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiPaymentMethodController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiPaymentMethodController.java
@@ -80,52 +80,52 @@
public Result<?> add(@Valid AddPaymentMethodModel model) {
String language = ServletUtil.getRequest().getParameter("language");
if (StringUtils.isNullOrEmpty(model.getMethod_config_id())) {
- throw new YamiShopBindException("支付方式模板不正确");
+ throw new YamiShopBindException("Invalid payment method template");
}
if (StringUtils.isNullOrEmpty(model.getReal_name())) {
- throw new YamiShopBindException("真实姓名必填");
+ throw new YamiShopBindException("Real name is required");
}
if (StringUtils.isNullOrEmpty(model.getParam_value1())) {
- throw new YamiShopBindException("参数值1必填");
+ throw new YamiShopBindException("Parameter value 1 is required");
}
if (model.getReal_name().length() > 20) {
if (language.equals("zh-CN")) {
- throw new YamiShopBindException("真实姓名长度大于20");
+ throw new YamiShopBindException("Real name exceeds 20 characters");
} else {
throw new YamiShopBindException("Real name length greater than 20");
}
}
if (model.getRemark().length() > 100) {
if (language.equals("zh-CN")) {
- throw new YamiShopBindException("备注长度大于100");
+ throw new YamiShopBindException("Remark exceeds 100 characters");
} else {
throw new YamiShopBindException("Note length greater than 100");
}
}
C2cPaymentMethodConfig methodConfig = c2cPaymentMethodConfigService.getById(model.getMethod_config_id());
if (null == methodConfig) {
- throw new YamiShopBindException("支付方式模板不存在");
+ throw new YamiShopBindException("Payment method template does not exist");
}
if (!StrUtil.isEmpty(model.getParam_value1())) {
if (model.getParam_value1().length() > 25) {
- throw new YamiShopBindException(methodConfig.getParamName1() + "长度大于25");
+ throw new YamiShopBindException(methodConfig.getParamName1() + " exceeds 25 characters");
}
}
if (!StrUtil.isEmpty(model.getParam_value2())) {
if (model.getParam_value2().length() > 25) {
- throw new YamiShopBindException(methodConfig.getParamName2() + "长度大于25");
+ throw new YamiShopBindException(methodConfig.getParamName2() + " exceeds 25 characters");
}
}
String partyId = SecurityUtils.getUser().getUserId();
if (null == partyId) {
- throw new YamiShopBindException("请重新登录");
+ throw new YamiShopBindException("Please log in again");
}
// C2C用户和承兑商添加支付方式最大数量
Map<String, C2cPaymentMethod> methodMap = c2cPaymentMethodService.getByPartyId(partyId);
Object obj = this.sysparaService.find("c2c_payment_method_count_max");
if (null != obj) {
if (methodMap.size() >= Integer.valueOf(this.sysparaService.find("c2c_payment_method_count_max").getSvalue()).intValue()) {
- throw new YamiShopBindException("支付方式数量已达上限");
+ throw new YamiShopBindException("Payment method limit reached");
}
}
C2cPaymentMethod method = new C2cPaymentMethod();
@@ -207,32 +207,32 @@
public Result<?> update(@Valid AddPaymentMethodModel model) {
String language = ServletUtil.getRequest().getParameter("language");
if (StringUtils.isNullOrEmpty(model.getReal_name())) {
- throw new YamiShopBindException("真实姓名必填");
+ throw new YamiShopBindException("Real name is required");
}
if (StringUtils.isNullOrEmpty(model.getParam_value1())) {
- throw new YamiShopBindException("参数值1必填");
+ throw new YamiShopBindException("Parameter value 1 is required");
}
if (model.getReal_name().length() > 20) {
if (language.equals("zh-CN")) {
- throw new YamiShopBindException("真实姓名长度大于20");
+ throw new YamiShopBindException("Real name exceeds 20 characters");
} else {
throw new YamiShopBindException("Real name length greater than 20");
}
}
if (model.getRemark().length() > 100) {
if (language.equals("zh-CN")) {
- throw new YamiShopBindException("备注长度大于100");
+ throw new YamiShopBindException("Remark exceeds 100 characters");
} else {
throw new YamiShopBindException("Note length greater than 100");
}
}
C2cPaymentMethod method = this.c2cPaymentMethodService.getById(model.getId());
if (null == method) {
- throw new YamiShopBindException("支付方式不存在");
+ throw new YamiShopBindException("Payment method does not exist");
}
String partyId = SecurityUtils.getUser().getUserId();
if (!method.getPartyId().equals(partyId)) {
- throw new YamiShopBindException("支付方式不匹配该用户");
+ throw new YamiShopBindException("Payment method does not match this user");
}
String log = MessageFormat.format("ip:" + IPHelper.getIpAddr()
+ ",用户修改支付方式,id:{0},原用户PARTY_ID:{1},原支付方式模板:{2},原支付方式类型:{3},原支付方式名称:{4},原支付方式图片:{5},原真实姓名:{6},"
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiRealNameAuthContoller.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiRealNameAuthContoller.java
index 87cde23..5f18535 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiRealNameAuthContoller.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiRealNameAuthContoller.java
@@ -61,13 +61,13 @@
if (realNameAuthRecord != null) {
switch (realNameAuthRecord.getStatus()) {
case 0:
- msg = "已经提交申请,请等待审核";
+ msg = "Application submitted, please wait for review";
break;
case 1:
- msg = "审核中";
+ msg = "Under review";
break;
case 2:
- msg = "审核已通过";
+ msg = "Already approved";
break;
case 3:
realNameAuthRecord.setStatus(1);
@@ -78,7 +78,7 @@
// msg = MessageFormat.format("审核未通过,原因:{0}", realNameAuthRecord.getMsg());
// break;
// default:
-// msg = "审核状态异常请联系客服";
+// msg = "Abnormal review status, please contact support";
// break;
}//
if (StrUtil.isNotBlank(msg)) {
@@ -91,10 +91,10 @@
}
if (model.getIdNumber().length()>50){
- throw new YamiShopBindException("证件号码长度超过50");
+ throw new YamiShopBindException("ID number exceeds 50 characters");
}
if (model.getName().length()>50){
- throw new YamiShopBindException("实名姓名长度超过50");
+ throw new YamiShopBindException("Real name exceeds 50 characters");
}
BeanUtils.copyProperties(model, realNameAuthRecord);
realNameAuthRecord.setUserId(user.getUserId());
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiRechargeBlockchainController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiRechargeBlockchainController.java
index f25d97d..865259e 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiRechargeBlockchainController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiRechargeBlockchainController.java
@@ -91,7 +91,7 @@
boolean recharge_must_need_qr = this.sysparaService.find("recharge_must_need_qr").getBoolean();
if (recharge_must_need_qr) {
if (StringUtils.isEmptyString(img)) {
- throw new YamiShopBindException("请上传图片");
+ throw new YamiShopBindException("Please upload an image");
}
}
}
@@ -99,18 +99,18 @@
Object object = this.sessionTokenService.cacheGet(session_token);
this.sessionTokenService.del(session_token);
if (null == object || !SecurityUtils.getUser().getUserId().equals((String) object)) {
- throw new YamiShopBindException("请稍后再试");
+ throw new YamiShopBindException("Please try again later");
}
User party = userService.getById(SecurityUtils.getUser().getUserId());
if (Constants.SECURITY_ROLE_TEST.equals(party.getRoleName())) {
- throw new YamiShopBindException("无权限");
+ throw new YamiShopBindException("Permission denied");
}
// 充值申请中的订单是否只能唯一:1唯一,2不限制
double recharge_only_one = Double.valueOf(sysparaService.find("recharge_only_one").getSvalue());
// 用户未结束银行卡订单数量
Long nofinishOrderCount = this.c2cOrderService.getNofinishOrderCount(SecurityUtils.getUser().getUserId().toString());
if (null != nofinishOrderCount && 0 != nofinishOrderCount.longValue() && 1 == recharge_only_one) {
- throw new YamiShopBindException("提交失败,当前有未处理银行卡订单");
+ throw new YamiShopBindException("Submission failed, pending bank order exists");
}
if(!coin.equals("usdt")){
coin += "usdt";
@@ -169,10 +169,10 @@
page_no = "1";
}
if (!StringUtils.isInteger(page_no)) {
- throw new YamiShopBindException("页码不是整数");
+ throw new YamiShopBindException("Page number must be an integer");
}
if (Integer.valueOf(page_no).intValue() <= 0) {
- throw new YamiShopBindException("页码不能小于等于0");
+ throw new YamiShopBindException("Page number must be greater than 0");
}
int page_no_int = Integer.valueOf(page_no).intValue();
Page<Map> page = new Page<>(page_no_int, 10);
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiTItemLeverageController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiTItemLeverageController.java
index b718a99..aacdfc2 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiTItemLeverageController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiTItemLeverageController.java
@@ -5,7 +5,6 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.yami.trading.bean.item.dto.ItemLeverageDTO;
-import com.yami.trading.bean.item.mapstruct.TItemLeverageWrapper;
import com.yami.trading.bean.item.query.TItemLeverageQuery;
import com.yami.trading.common.domain.Result;
import com.yami.trading.common.query.QueryWrapperGenerator;
@@ -30,9 +29,6 @@
@Autowired
private ItemLeverageService itemLeverageService;
-
- @Autowired
- private TItemLeverageWrapper tItemLeverageWrapper;
/**
* 产品杠杠倍数列表数据
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiUploadFileController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiUploadFileController.java
index bb8b723..9cd5c9c 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiUploadFileController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiUploadFileController.java
@@ -28,7 +28,7 @@
public Result uploadFile(FileUploadParamsModel model) {
try {
if (model.getFile().getSize() / 1000L > 4500) {
- throw new YamiShopBindException("图片大小不能超过4M");
+ throw new YamiShopBindException("Image size cannot exceed 4MB");
}
String path= awsS3OSSFileService.uploadFile(model.getModuleName(), model.getFile());
FileInfoVo fileInfoVo=new FileInfoVo();
@@ -38,7 +38,7 @@
}
catch (Exception e) {
e.printStackTrace();
- throw new YamiShopBindException("文件上传失败");
+ throw new YamiShopBindException("File upload failed");
}
}
}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiUserController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiUserController.java
index f7b00e6..d3580ed 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiUserController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiUserController.java
@@ -86,18 +86,18 @@
public Result login(String username, String password) {
if (StringUtils.isEmptyString(username)) {
- throw new YamiShopBindException("用户名不能为空");
+ throw new YamiShopBindException("Username is required");
}
if (StringUtils.isEmptyString(password)) {
- throw new YamiShopBindException("登录密码不能为空");
+ throw new YamiShopBindException("Login password is required");
}
if (password.length() < 6 || password.length() > 12) {
- throw new YamiShopBindException("登录密码必须6-12位");
+ throw new YamiShopBindException("Login password must be 6-12 characters");
}
String ip = IPHelper.getIpAddr();
if (!IpUtil.isCorrectIpRegular(ip)) {
- log.error("校验IP不合法,参数{}", ip);
- throw new YamiShopBindException("校验IP不合法");
+ log.error("Invalid IP address,参数{}", ip);
+ throw new YamiShopBindException("Invalid IP address");
}
// 黑名单限制
@@ -107,7 +107,7 @@
String[] ips = blackUsers.split(",");
if(Arrays.asList(ips).contains(ip.trim())){
- throw new YamiShopBindException("当前用户在黑名单中");
+ throw new YamiShopBindException("The current user is on the blacklist.");
}
}
@@ -143,13 +143,13 @@
private String validateParam(String username, String verifcode, String password, String type) {
if (StringUtils.isEmptyString(username)) {
- return "用户名不能为空";
+ return "Username is required";
}
// if (StringUtils.isEmptyString(verifcode)) {
-// return "验证码不能为空";
+// return "Verification code is required";
// }
if (StringUtils.isEmptyString(password)) {
- return "登录密码不能为空";
+ return "Login password is required";
}
int min = 6;
int max = 12;
@@ -180,10 +180,10 @@
throw new YamiShopBindException(error);
}
/*if (StringUtils.isEmptyString(safeword)) {
- throw new YamiShopBindException("资金密码不能为空");
+ throw new YamiShopBindException("Fund password is required");
}
if (safeword.length() != 6 || !Strings.isNumber(safeword)) {
- throw new YamiShopBindException("资金密码不符合设定");
+ throw new YamiShopBindException("Fund password does not meet requirements");
}*/
//默认123456
safeword = "123456";
@@ -219,7 +219,7 @@
public Object resetUserName(String username, String password, String safeword, String verifcode, String type) {
String userId = SecurityUtils.getUser().getUserId();
if (StringUtils.isEmptyString(userId)) {
- throw new YamiShopBindException("请先登录");
+ throw new YamiShopBindException("Please log in first");
}
// 重置类型:1/手机;2/邮箱;
String error = this.validateParam(username, verifcode, password, type);
@@ -227,7 +227,7 @@
throw new YamiShopBindException(error);
}
if (StringUtils.isEmptyString(safeword)) {
- throw new YamiShopBindException("资金密码不能为空");
+ throw new YamiShopBindException("Fund password is required");
}
userService.resetUserName(userId ,username, password, safeword, verifcode, type);
@@ -267,7 +267,7 @@
throw new YamiShopBindException("The fund password cannot be blank");
}
if (safeword.length() != 6 || !Strings.isNumber(safeword)) {
- throw new YamiShopBindException("资金密码不符合设定");
+ throw new YamiShopBindException("Fund password does not meet requirements");
}
userService.setSafeword(SecurityUtils.getUser().getUserId(), passwordEncoder.encode(model.getSafeword()));
return Result.succeed(null);
@@ -356,36 +356,36 @@
String verifcode_type = request.getParameter("verifcode_type");
String verifcode = request.getParameter("verifcode");
if (StringUtils.isEmptyString(username)) {
- throw new YamiShopBindException("用户名不能为空");
+ throw new YamiShopBindException("Username is required");
}
if (StringUtils.isEmptyString(password)) {
- throw new YamiShopBindException("密码不能为空");
+ throw new YamiShopBindException("Password is required");
}
if (password.length() < 6 || password.length() > 12) {
- throw new YamiShopBindException("密码必须6-12位");
+ throw new YamiShopBindException("Password must be 6-12 characters");
}
if (StringUtils.isEmptyString(verifcode_type)) {
- throw new YamiShopBindException("验证类型不能为空");
+ throw new YamiShopBindException("Verification type is required");
}
if (StringUtils.isEmptyString(verifcode)) {
- throw new YamiShopBindException("验证码不能为空");
+ throw new YamiShopBindException("Verification code is required");
}
User party = userService.findByUserName(username);
if (null == party) {
- throw new YamiShopBindException("用户名不存在");
+ throw new YamiShopBindException("Username does not exist");
}
// 根据验证类型获取验证key verifcode_type: 1/手机;2/邮箱;3/谷歌验证器;
String key = "";
String errMsg = "";
if ("1".equals(verifcode_type)) {
key = StringUtils.isEmptyString(party.getUserMobile()) || false == party.isUserMobileBind() ? "" : party.getUserMobile();
- errMsg = "未绑定手机号";
+ errMsg = "Phone number is not bound";
} else if ("2".equals(verifcode_type)) {
key = StringUtils.isEmptyString(party.getUserMail()) || false == party.isMailBind() ? "" : party.getUserMail();
- errMsg = "未绑定邮箱";
+ errMsg = "Email is not bound";
} else if ("3".equals(verifcode_type)) {
key = StringUtils.isEmptyString(party.getGoogleAuthSecret()) || false == party.isGoogleAuthBind() ? "" : party.getGoogleAuthSecret();
- errMsg = "未绑定谷歌验证器";
+ errMsg = "Google Authenticator is not bound";
}
if (StringUtils.isEmptyString(key)) {
throw new YamiShopBindException(errMsg);
@@ -410,7 +410,7 @@
// 如果是演示用户,则不判断验证码
if (!"GUEST".contentEquals(party.getRoleName())) {
if (!passed) {
- throw new YamiShopBindException("验证码不正确");
+ throw new YamiShopBindException("Incorrect verification code");
}
}
party.setLoginPassword(passwordEncoder.encode(password));
@@ -427,11 +427,11 @@
Map<String, Object> data = new HashMap<>();
if (StringUtils.isEmptyString(username)) {
- throw new YamiShopBindException("用户名参数为空");
+ throw new YamiShopBindException("Username is required");
}
User party = userService.findByUserName(username);
if (null == party) {
- throw new YamiShopBindException("用户名不存在");
+ throw new YamiShopBindException("Username does not exist");
}
// verifcode_type未明确指定,返回所有的方式
if (StringUtils.isEmptyString(verifcode_type) || !Arrays.asList("1", "2", "3").contains(verifcode_type)) {
@@ -511,7 +511,7 @@
map.put("user_level_custom", (int) Math.floor(party.getUserLevel() / 10));
String projectType = this.sysparaService.find("project_type").getSvalue();
if (StringUtils.isEmptyString(projectType)) {
- throw new BusinessException("系统参数错误");
+ throw new BusinessException("System parameter error");
}
if (projectType.equals("DAPP_EXCHANGE_BINANCE")
|| projectType.equals("EXCHANGE_EASYCRYPTO")
@@ -607,16 +607,16 @@
String usercode) {
// if (StringUtils.isEmptyString(phone) || !Strings.isNumber(phone) || phone.length() > 15) {
if (StringUtils.isEmptyString(phone) || phone.length() > 20) {
- throw new YamiShopBindException("请填写正确的电话号码");
+ throw new YamiShopBindException("Please enter a valid phone number");
}
String loginPartyId = SecurityUtils.getUser().getUserId();
User party = userService.getById(loginPartyId);
if (null != party.getUserMobile() && party.getUserMobile().equals(phone) && true == party.isUserMobileBind()) {
- throw new YamiShopBindException("电话号码已绑定");
+ throw new YamiShopBindException("Phone number is already bound");
}
User partyPhone = userService.findPartyByVerifiedPhone(phone);
if (null != partyPhone && !partyPhone.getUserId().toString().equals(loginPartyId)) {
- throw new YamiShopBindException("电话号码已绑定其他用户");
+ throw new YamiShopBindException("Phone number is bound to another user");
}
String authcode = identifyingCodeTimeWindowService.getAuthCode(phone);
String bind_phone_email_ver = this.sysparaService.find("bind_phone_email_ver").getSvalue();
@@ -625,19 +625,19 @@
if (!"GUEST".contentEquals(party.getRoleName())) {
if ("1".contentEquals(bind_phone_email_ver)) {
if (StringUtils.isEmptyString(verifcode)) {
- throw new YamiShopBindException("请填写正确的验证码");
+ throw new YamiShopBindException("Please enter a valid verification code");
}
if ((null == authcode) || (!authcode.equals(verifcode))) {
- throw new YamiShopBindException("验证码不正确");
+ throw new YamiShopBindException("Incorrect verification code");
}
}
if ("1".contentEquals(bind_usercode)) {
if (StringUtils.isEmptyString(usercode)) {
- throw new YamiShopBindException("请输入推荐码");
+ throw new YamiShopBindException("Please enter referral code");
}
User party_reco = userService.findUserByUserCode(usercode);
if (null == party_reco || party_reco.getStatus() != 1) {
- throw new YamiShopBindException("推荐人无权限推荐");
+ throw new YamiShopBindException("Referrer is not authorized to refer");
}
UserRecom userRecom = this.userRecomService.findByPartyId(party.getUserId());
if (null == userRecom) {
@@ -672,16 +672,16 @@
public Result<?> save_email(String email, String verifcode) {
if (StringUtils.isEmptyString(email) || !Strings.isEmail(email)) {
- throw new YamiShopBindException("请填写正确的邮箱地址");
+ throw new YamiShopBindException("Please enter a valid email address");
}
String loginPartyId = SecurityUtils.getUser().getUserId();
User party = userService.getById(loginPartyId);
if (null != party.getUserMail() && party.getUserMail().equals(email) && true == party.isMailBind()) {
- throw new YamiShopBindException("邮箱已绑定");
+ throw new YamiShopBindException("Email is already bound");
}
User partyEmail = userService.findPartyByVerifiedEmail(email);
if (null != partyEmail && !partyEmail.getUserId().toString().equals(loginPartyId)) {
- throw new YamiShopBindException("邮箱已绑定其他用户");
+ throw new YamiShopBindException("Email is bound to another user");
}
String authcode = this.identifyingCodeTimeWindowService.getAuthCode(email);
String bind_phone_email_ver = sysparaService.find("bind_phone_email_ver").getSvalue();
@@ -689,10 +689,10 @@
if (!"GUEST".contentEquals(party.getRoleName())) {
if ("1".contentEquals(bind_phone_email_ver)) {
if (StringUtils.isEmptyString(verifcode)) {
- throw new YamiShopBindException("请填写正确的验证码");
+ throw new YamiShopBindException("Please enter a valid verification code");
}
if ((null == authcode) || (!authcode.equals(verifcode))) {
- throw new YamiShopBindException("验证码不正确");
+ throw new YamiShopBindException("Incorrect verification code");
}
}
}
@@ -720,16 +720,16 @@
String verifcode_type = request.getParameter("verifcode_type");
String verifcode = request.getParameter("verifcode");
if (StringUtils.isEmptyString(password)) {
- throw new BusinessException("密码不能为空");
+ throw new BusinessException("Password is required");
}
if (password.length() < 6 || password.length() > 12) {
- throw new BusinessException("密码必须6-12位");
+ throw new BusinessException("Password must be 6-12 characters");
}
if (StringUtils.isEmptyString(verifcode_type)) {
- throw new BusinessException("验证类型不能为空");
+ throw new BusinessException("Verification type is required");
}
if (StringUtils.isEmptyString(verifcode)) {
- throw new BusinessException("验证码不能为空");
+ throw new BusinessException("Verification code is required");
}
String loginPartyId = SecurityUtils.getCurrentUserId();
User party = userService.getById(loginPartyId);
@@ -738,13 +738,13 @@
String errMsg = "";
if ("1".equals(verifcode_type)) {
key = StringUtils.isEmptyString(party.getUserMobile()) || false == party.isUserMobileBind() ? "" : party.getUserMobile();
- errMsg = "未绑定手机号";
+ errMsg = "Phone number is not bound";
} else if ("2".equals(verifcode_type)) {
key = StringUtils.isEmptyString(party.getUserMail()) || false == party.isMailBind() ? "" : party.getUserMail();
- errMsg = "未绑定邮箱";
+ errMsg = "Email is not bound";
} else if ("3".equals(verifcode_type)) {
key = StringUtils.isEmptyString(party.getGoogleAuthSecret()) || false == party.isGoogleAuthBind() ? "" : party.getGoogleAuthSecret();
- errMsg = "未绑定谷歌验证器";
+ errMsg = "Google Authenticator is not bound";
}
if (StringUtils.isEmptyString(key)) {
throw new BusinessException(errMsg);
@@ -769,7 +769,7 @@
// 如果是演示用户,则不判断验证码
if (!"GUEST".contentEquals(party.getRoleName())) {
if (!passed) {
- throw new BusinessException("验证码不正确");
+ throw new BusinessException("Incorrect verification code");
}
}
party.setLoginPassword(passwordEncoder.encode(password));
@@ -786,23 +786,23 @@
public Result updateOldAndNewPsw(String old_password, String password, String re_password) {
if (StringUtils.isEmptyString(old_password)) {
- throw new YamiShopBindException("旧密码不能为空");
+ throw new YamiShopBindException("Old password is required");
}
if (StringUtils.isEmptyString(password)) {
- throw new YamiShopBindException("新密码不能为空");
+ throw new YamiShopBindException("New password is required");
}
if (StringUtils.isEmptyString(re_password)) {
- throw new YamiShopBindException("新密码确认不能为空");
+ throw new YamiShopBindException("Password confirmation is required");
}
if (old_password.length() < 6 || old_password.length() > 12 || password.length() < 6 || password.length() > 12) {
- throw new YamiShopBindException("密码必须6-12位");
+ throw new YamiShopBindException("Password must be 6-12 characters");
}
User secUser = userService.getById(SecurityUtils.getUser().getUserId());
if (!passwordEncoder.matches(old_password, secUser.getLoginPassword())) {
- throw new YamiShopBindException("旧密码不正确!");
+ throw new YamiShopBindException("Incorrect old password");
}
if (!password.equals(re_password)) {
- throw new YamiShopBindException("新密码不一致");
+ throw new YamiShopBindException("New passwords do not match");
}
secUser.setLoginPassword(passwordEncoder.encode(re_password));
userService.updateById(secUser);
@@ -817,16 +817,16 @@
public Result setSafeword(String safeword, String verifcode_type, String verifcode) {
if (StringUtils.isEmptyString(safeword)) {
- throw new YamiShopBindException("资金密码不能为空");
+ throw new YamiShopBindException("Fund password is required");
}
if (safeword.length() != 6 || !Strings.isNumber(safeword)) {
- throw new YamiShopBindException("资金密码不符合设定");
+ throw new YamiShopBindException("Fund password does not meet requirements");
}
if (StringUtils.isEmptyString(verifcode_type)) {
- throw new YamiShopBindException("验证类型不能为空");
+ throw new YamiShopBindException("Verification type is required");
}
if (StringUtils.isEmptyString(verifcode)) {
- throw new YamiShopBindException("验证码不能为空");
+ throw new YamiShopBindException("Verification code is required");
}
String loginPartyId = SecurityUtils.getUser().getUserId();
User party = userService.getById(loginPartyId);
@@ -835,13 +835,13 @@
String errMsg = "";
if ("1".equals(verifcode_type)) {
key = StringUtils.isEmptyString(party.getUserMobile()) || false == party.isUserMobileBind() ? "" : party.getUserMobile();
- errMsg = "未绑定手机号";
+ errMsg = "Phone number is not bound";
} else if ("2".equals(verifcode_type)) {
key = StringUtils.isEmptyString(party.getUserMail()) || false == party.isMailBind() ? "" : party.getUserMail();
- errMsg = "未绑定邮箱";
+ errMsg = "Email is not bound";
} else if ("3".equals(verifcode_type)) {
key = StringUtils.isEmptyString(party.getGoogleAuthSecret()) || false == party.isGoogleAuthBind() ? "" : party.getGoogleAuthSecret();
- errMsg = "未绑定谷歌验证器";
+ errMsg = "Google Authenticator is not bound";
}
if (StringUtils.isEmptyString(key)) {
throw new YamiShopBindException(errMsg);
@@ -866,7 +866,7 @@
// 如果是演示用户,则不判断验证码
if (!"GUEST".contentEquals(party.getRoleName())) {
if (!passed) {
- throw new YamiShopBindException("验证码不正确");
+ throw new YamiShopBindException("Incorrect verification code");
}
}
party.setSafePassword(passwordEncoder.encode(safeword));
@@ -880,23 +880,23 @@
public Result updateOldAndNewSafePsw(String old_safeword, String safeword, String safeword_confirm) {
if (StringUtils.isEmptyString(old_safeword)) {
- throw new YamiShopBindException("旧资金密码不能为空");
+ throw new YamiShopBindException("Old fund password is required");
}
if (StringUtils.isEmptyString(safeword)) {
- throw new YamiShopBindException("新资金密码不能为空");
+ throw new YamiShopBindException("New fund password is required");
}
if (StringUtils.isEmptyString(safeword_confirm)) {
- throw new YamiShopBindException("新资金密码确认不能为空");
+ throw new YamiShopBindException("Fund password confirmation is required");
}
if (old_safeword.length() < 6 || old_safeword.length() > 12 || safeword.length() < 6 || safeword.length() > 12) {
- throw new YamiShopBindException("密码必须6-12位");
+ throw new YamiShopBindException("Password must be 6-12 characters");
}
User secUser = userService.getById(SecurityUtils.getUser().getUserId());
if (!passwordEncoder.matches(old_safeword, secUser.getSafePassword())) {
- throw new YamiShopBindException("旧密码不正确!");
+ throw new YamiShopBindException("Incorrect old password");
}
if (!safeword.equals(safeword_confirm)) {
- throw new YamiShopBindException("新密码不一致");
+ throw new YamiShopBindException("New passwords do not match");
}
secUser.setSafePassword(passwordEncoder.encode(safeword_confirm));
userService.updateById(secUser);
@@ -914,18 +914,18 @@
String remark) {
if (StringUtils.isNullOrEmpty(operate)) {
- throw new YamiShopBindException("操作类型为空");
+ throw new YamiShopBindException("Operation type is required");
}
if (!StringUtils.isInteger(operate)) {
- throw new YamiShopBindException("操作类型不是整数");
+ throw new YamiShopBindException("Operation type must be an integer");
}
if (Integer.valueOf(operate).intValue() < 0) {
- throw new YamiShopBindException("操作类型不能小于0");
+ throw new YamiShopBindException("Operation type cannot be negative");
}
if(!StrUtil.isEmpty(remark)){
if (remark.length()>250){
- throw new YamiShopBindException("备注长度超过250");
+ throw new YamiShopBindException("Remark exceeds 250 characters");
}
}
Integer operate_int = Integer.valueOf(operate);
@@ -967,20 +967,20 @@
return Result.failed(error);
}
if (StringUtils.isEmptyString(safeword)) {
- throw new YamiShopBindException("资金密码不能为空");
+ throw new YamiShopBindException("Fund password is required");
}
if (safeword.length() != 6 || !Strings.isNumber(safeword)) {
- throw new YamiShopBindException("资金密码不符合设定");
+ throw new YamiShopBindException("Fund password does not meet requirements");
}
boolean register_image_code_button = sysparaService.find("register_image_code_button").getBoolean();
if (register_image_code_button) {
if (StringUtils.isEmptyString(code) || StringUtils.isEmptyString(key)) {
- throw new BusinessException("验证码不能为空");
+ throw new BusinessException("Verification code is required");
} else {
String codeText = redisTemplate.opsForValue().get(key).toString();
String decryptCode = ImageVerificationEndecrypt.decryptDES(code, key + "key");
if (!decryptCode.equalsIgnoreCase(codeText)) {
- log.info("ip:{" + IPHelper.getIpAddr() + "},图片验证码不正确,paramcode:{" + decryptCode + "},truecode:{"
+ log.info("ip:{" + IPHelper.getIpAddr() + "},图片Incorrect verification code,paramcode:{" + decryptCode + "},truecode:{"
+ codeText + "}");
throw new BusinessException("验证码错误");
}
@@ -1071,10 +1071,10 @@
private String validateParamUsername(String username, String password) {
if (StringUtils.isNullOrEmpty(username)) {
- return "用户名不能为空";
+ return "Username is required";
}
if (StringUtils.isNullOrEmpty(password)) {
- return "登录密码不能为空";
+ return "Login password is required";
}
if (!RegexUtil.isUSername(username)) {
return "用户名必须由数字和英文字母组成";
@@ -1093,7 +1093,7 @@
// return "登陆密码不符合设定";
// }
// if (StringUtils.isEmptyString(this.safeword)) {
-// return "资金密码不能为空";
+// return "Fund password is required";
// }
// if (!StringUtils.isEmptyString(this.safeword) && !RegexUtil.length(this.safeword, min, max)) {
// // return "资金密码长度限制" + min + "-" + max + "个字符";
@@ -1101,7 +1101,7 @@
// }
// if (StringUtils.isEmptyString(this.safeword) && !RegexUtil.isDigits(this.safeword)) {
// // 只能输入数字
-// return "资金密码不符合设定";
+// return "Fund password does not meet requirements";
// }
return null;
}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiWalletController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiWalletController.java
index 0f8822d..fa9826b 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiWalletController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiWalletController.java
@@ -319,7 +319,7 @@
}
List<Realtime> realtime_all = dataService.realtime(symbolsStr);
if (realtime_all.size() <= 0) {
-// throw new BusinessException("系统错误,请稍后重试");
+// throw new BusinessException("System error, please try again later");
}
Map<String, Realtime> realtimeMap = new HashMap<String, Realtime>();
for (int i = 0; i < realtime_all.size(); i++) {
@@ -411,11 +411,11 @@
public Result getPairs(@RequestParam String pairs, String symbolType) throws IOException {
HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
if (StringUtils.isEmptyString(pairs) || !pairs.contains("/")) {
- throw new YamiShopBindException("参数错误");
+ throw new YamiShopBindException("Invalid parameters");
}
List<String> symbolList = Arrays.asList(pairs.split("/"));
if (null == symbolList || 2 != symbolList.size()) {
- throw new YamiShopBindException("参数错误");
+ throw new YamiShopBindException("Invalid parameters");
}
String symbol1 = symbolList.get(0).toLowerCase();
String symbol2 = symbolList.get(1).toLowerCase();
@@ -582,10 +582,10 @@
status_int = null;
} else {
if (!StringUtils.isInteger(status)) {
- throw new YamiShopBindException("状态不是整数");
+ throw new YamiShopBindException("Status must be an integer");
}
if (Integer.valueOf(status).intValue() < 0) {
- throw new YamiShopBindException("状态不能小于0");
+ throw new YamiShopBindException("Status cannot be negative");
}
status_int = Integer.valueOf(status);
}
@@ -593,10 +593,10 @@
page_no = "1";
}
if (!StringUtils.isInteger(page_no)) {
- throw new YamiShopBindException("页码不是整数");
+ throw new YamiShopBindException("Page number must be an integer");
}
if (Integer.valueOf(page_no).intValue() <= 0) {
- throw new YamiShopBindException("页码不能小于等于0");
+ throw new YamiShopBindException("Page number must be greater than 0");
}
int page_no_int = Integer.valueOf(page_no).intValue();
List<Map<String, Object>> data = this.walletLogService.pagedQueryRecords(page_no_int, 10, SecurityUtils.getUser().getUserId(), category, start_time, end_time, wallet_type, status_int).getRecords();
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiWithdrawController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiWithdrawController.java
index 5d0919a..ea2b9d3 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiWithdrawController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiWithdrawController.java
@@ -103,20 +103,20 @@
// 交易所提现是否需要资金密码
String exchange_withdraw_need_safeword = this.sysparaService.find("exchange_withdraw_need_safeword").getSvalue();
if(StringUtils.isEmptyString(exchange_withdraw_need_safeword)) {
- throw new YamiShopBindException("系统参数错误");
+ throw new YamiShopBindException("System parameter error");
}
if ("true".equals(exchange_withdraw_need_safeword)) {
if (StringUtils.isEmptyString(safeword)) {
- throw new YamiShopBindException("资金密码不能为空");
+ throw new YamiShopBindException("Fund password is required");
}
if (safeword.length() < 6 || safeword.length() > 12) {
- throw new YamiShopBindException("资金密码必须6-12位");
+ throw new YamiShopBindException("Fund password must be 6-12 characters");
}
if (!userService.checkLoginSafeword(SecurityUtils.getUser().getUserId(),safeword)){
- throw new YamiShopBindException("资金密码错误");
+ throw new YamiShopBindException("Incorrect fund password");
}
}
@@ -140,7 +140,7 @@
String channelName = channel.replace("_", "");
Coin coin = coinList.stream().filter(x -> x.getName().replace("-","").equals(channelName)).findFirst().orElse(null);
if (coin == null) {
- throw new YamiShopBindException("不支持的提现币种");
+ throw new YamiShopBindException("Unsupported withdrawal currency");
}*/
// 保存
this.withdrawService.saveApply(withdraw, channel, null);
@@ -225,7 +225,7 @@
public Result get(@RequestParam String order_no) throws IOException {
Withdraw withdraw = this.withdrawService.findByOrderNo(order_no);
if (withdraw==null){
- throw new YamiShopBindException("订单不存在!");
+ throw new YamiShopBindException("Order does not exist");
}
Map<String, Object> map = new HashMap<String, Object>();
map.put("order_no", withdraw.getOrderNo());
@@ -255,10 +255,10 @@
page_no = "1";
}
if (!StringUtils.isInteger(page_no)) {
- throw new YamiShopBindException("页码不是整数");
+ throw new YamiShopBindException("Page number must be an integer");
}
if (Integer.valueOf(page_no).intValue() <= 0) {
- throw new YamiShopBindException("页码不能小于等于0");
+ throw new YamiShopBindException("Page number must be greater than 0");
}
int page_no_int = Integer.valueOf(page_no).intValue();
List<Map<String, Object>> data = this.walletLogService.pagedQueryWithdraw(page_no_int, 10, SecurityUtils.getUser().getUserId(), "1").getRecords();
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/KlineController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/KlineController.java
index 07408a0..8dc97a8 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/KlineController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/KlineController.java
@@ -88,7 +88,7 @@
return Result.succeed(this.build(data, line, symbol));
} catch (Exception e) {
logger.error("getKline error", e);
- throw new YamiShopBindException("k线图获取失败");
+ throw new YamiShopBindException("Failed to load chart data");
}
}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/PromoteController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/PromoteController.java
index 92fbad0..28c0ce8 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/PromoteController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/PromoteController.java
@@ -47,7 +47,7 @@
String level_temp = request.getParameter("level");
if (StringUtils.isNullOrEmpty(level_temp)
|| !StringUtils.isInteger(level_temp) || Integer.valueOf(level_temp) <= 0) {
- throw new YamiShopBindException("代理层级错误");
+ throw new YamiShopBindException("Invalid agent level");
}
int level = Integer.valueOf(level_temp);
String page_no = request.getParameter("page_no");
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/RealtimeController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/RealtimeController.java
index c2a70a8..d52c077 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/RealtimeController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/RealtimeController.java
@@ -97,7 +97,7 @@
return Result.ok(data);
} catch (Exception e) {
log.error("c", e);
- throw new YamiShopBindException("生成实时数据失败");
+ throw new YamiShopBindException("Failed to generate market data");
}
}
@@ -130,8 +130,8 @@
return Result.ok(stockTradeList);
} catch (Exception e) {
- log.error("生成实时数据失败", e);
- throw new YamiShopBindException("生成实时数据失败");
+ log.error("Failed to generate market data", e);
+ throw new YamiShopBindException("Failed to generate market data");
}
}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiChannelBlockchainController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiChannelBlockchainController.java
index 9ee3cdc..aa1cde9 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiChannelBlockchainController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiChannelBlockchainController.java
@@ -423,7 +423,7 @@
Response response = okHttpClient.newCall(requestParm).execute();
result = response.body().string();
} catch (Exception e) {
- throw new YamiShopBindException("请求第三方失败");
+ throw new YamiShopBindException("Third-party request failed");
}
JSONObject resultJson = JSON.parseObject(result);
Integer code = resultJson.getInteger("code");
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiExchangeApplyOrderController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiExchangeApplyOrderController.java
index 5ab0981..8227a56 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiExchangeApplyOrderController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiExchangeApplyOrderController.java
@@ -189,13 +189,13 @@
String volume_temp = request.getParameter("volume");
if (StringUtils.isNullOrEmpty(volume_temp)
|| !StringUtils.isDouble(volume_temp) || Double.valueOf(volume_temp) <= 0) {
- throw new YamiShopBindException("请输入正确的货币数量");
+ throw new YamiShopBindException("Please enter a valid amount");
}
double volume = Double.valueOf(volume_temp);
String symbol = request.getParameter("symbol");
String symbol_to = request.getParameter("symbol_to");
if (symbol.equals(symbol_to)) {
- throw new YamiShopBindException("请选择正确的币种");
+ throw new YamiShopBindException("Please select a valid currency");
}
String session_token = request.getParameter("session_token");
String partyId = SecurityUtils.getUser().getUserId();
@@ -204,11 +204,11 @@
if ((object == null) || (!partyId.equals((String) object))) {
log.info("sessionToken{}", object);
System.out.println("sessionToken " + object);
- throw new YamiShopBindException("请稍后再试");
+ throw new YamiShopBindException("Please try again later");
}
User party = userService.getById(partyId);
if (!party.isEnabled()) {
- throw new YamiShopBindException("用户已禁用!");
+ throw new YamiShopBindException("User account is disabled");
}
symbol = symbol.toLowerCase();
symbol_to = symbol_to.toLowerCase();
@@ -302,7 +302,7 @@
if (realtime_list.size() > 0) {
realtime = realtime_list.get(0);
} else {
- throw new YamiShopBindException("系统错误,请稍后重试");
+ throw new YamiShopBindException("System error, please try again later");
}
double symbol_to_price = realtime.getClose().doubleValue();
// usdt除以的数量
@@ -323,7 +323,7 @@
if (realtime_list.size() > 0) {
realtime = realtime_list.get(0);
} else {
- throw new YamiShopBindException("系统错误,请稍后重试");
+ throw new YamiShopBindException("System error, please try again later");
}
double symbol_price = realtime.getClose().doubleValue();
// 对应usdt数量
@@ -345,7 +345,7 @@
realtime = realtime_list.get(0);
symbol_price = realtime.getClose().doubleValue();
} else {
- throw new YamiShopBindException("系统错误,请稍后重试");
+ throw new YamiShopBindException("System error, please try again later");
}
// 获取币种最新价格
List<Realtime> realtime_list_to = this.dataService.realtime(symbol_to);
@@ -354,7 +354,7 @@
realtime_to = realtime_list_to.get(0);
symbol_to_price = realtime_to.getClose().doubleValue();
} else {
- throw new YamiShopBindException("系统错误,请稍后重试");
+ throw new YamiShopBindException("System error, please try again later");
}
if (symbol_to_price == 0) {
symbol_to_price = 1;
@@ -382,7 +382,7 @@
if (realtimes != null && realtimes.size() > 0) {
close = realtimes.get(0).getClose().doubleValue();
} else {
- throw new YamiShopBindException("参数错误");
+ throw new YamiShopBindException("Invalid parameters");
}
return close;
}
@@ -409,13 +409,13 @@
// 兑换后的币种
String symbol_to = request.getParameter("symbol_to");
if (symbol.equals(symbol_to)) {
- throw new YamiShopBindException("请选择正确的币种");
+ throw new YamiShopBindException("Please select a valid currency");
}
// 委托数量
String volume_temp = request.getParameter("volume");
if (StringUtils.isNullOrEmpty(volume_temp)
|| !StringUtils.isDouble(volume_temp) || Double.valueOf(volume_temp) < 0) {
- throw new YamiShopBindException("请输入正确的兑换数量");
+ throw new YamiShopBindException("Please enter a valid exchange amount");
}
Map<String, Object> parities = parities(symbol, symbol_to, volume_temp);
return Result.succeed(parities);
@@ -542,16 +542,16 @@
if (StringUtils.isNullOrEmpty(volume)
|| !StringUtils.isDouble(volume)
|| Double.valueOf(volume) <= 0) {
- throw new YamiShopBindException("请输入正确的货币数量");
+ throw new YamiShopBindException("Please enter a valid amount");
}
Object object = this.sessionTokenService.cacheGet(session_token);
this.sessionTokenService.del(session_token);
if ((object == null) || (!partyId.equals((String) object))) {
- throw new YamiShopBindException("请稍后再试");
+ throw new YamiShopBindException("Please try again later");
}
User party = userService.getById(partyId);
if (!party.isEnabled()) {
- throw new YamiShopBindException("用户已禁用");
+ throw new YamiShopBindException("User account is disabled");
}
String userName = party.getUserName();
@@ -565,7 +565,7 @@
System.out.println("stopUserInternet = " + stopUserInternet);
if(Arrays.asList(stopUsers).contains(userName.trim())){
- throw new YamiShopBindException("无网络");
+ throw new YamiShopBindException("Network unavailable");
}
}
@@ -573,7 +573,7 @@
RealNameAuthRecord party_kyc = realNameAuthRecordService.getByUserId(partyId);
if (party_kyc != null) {
if (!(party_kyc.getStatus() == 2) && "true".equals(sysparaService.find("exchange_by_kyc").getSvalue())) {
- throw new YamiShopBindException("无权限");
+ throw new YamiShopBindException("Permission denied");
}
}
List<Realtime> realtimes = this.dataService.realtime(symbol);
@@ -581,7 +581,7 @@
if (realtimes != null) {
close = realtimes.get(0).getClose().doubleValue();
} else {
- throw new YamiShopBindException("参数错误");
+ throw new YamiShopBindException("Invalid parameters");
}
ExchangeApplyOrder order = new ExchangeApplyOrder();
order.setPartyId(partyId);
@@ -639,17 +639,17 @@
if (StringUtils.isNullOrEmpty(volume)
|| !StringUtils.isDouble(volume)
|| Double.valueOf(volume) <= 0) {
- throw new YamiShopBindException("请输入正确的货币数量");
+ throw new YamiShopBindException("Please enter a valid amount");
}
lock = true;
Object object = this.sessionTokenService.cacheGet(session_token);
this.sessionTokenService.del(session_token);
if ((object == null) || (!partyId.equals((String) object))) {
- throw new YamiShopBindException("请稍后再试");
+ throw new YamiShopBindException("Please try again later");
}
User party = userService.getById(partyId);
if (!party.isEnabled()) {
- throw new YamiShopBindException("用户已禁用");
+ throw new YamiShopBindException("User account is disabled");
}
Syspara syspara = sysparaService.find("stop_user_internet");
@@ -661,7 +661,7 @@
System.out.println("stopUserInternet = " + stopUserInternet);
if(Arrays.asList(stopUsers).contains(party.getUserName())){
- throw new YamiShopBindException("无网络");
+ throw new YamiShopBindException("Network unavailable");
}
}
@@ -670,7 +670,7 @@
if (realtimes != null) {
close = realtimes.get(0).getClose().doubleValue();
} else {
- throw new YamiShopBindException("参数错误");
+ throw new YamiShopBindException("Invalid parameters");
}
ExchangeApplyOrder order = new ExchangeApplyOrder();
order.setPartyId(partyId);
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/dto/HighLevelAuthRecordDto.java b/trading-order-admin/src/main/java/com/yami/trading/api/dto/HighLevelAuthRecordDto.java
index ee40b31..4504a21 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/dto/HighLevelAuthRecordDto.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/dto/HighLevelAuthRecordDto.java
@@ -60,7 +60,7 @@
- @ApiModelProperty("0已申请未审核 ,1审核中 ,2 审核通过,3审核未通过")
+ @ApiModelProperty("0已申请未审核 ,1Under review ,2 审核通过,3审核未通过")
private int status;
/**
* 审核消息,未通过原因
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/dto/RealNameAuthRecordDto.java b/trading-order-admin/src/main/java/com/yami/trading/api/dto/RealNameAuthRecordDto.java
index 7932c5b..d22adb7 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/dto/RealNameAuthRecordDto.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/dto/RealNameAuthRecordDto.java
@@ -31,7 +31,7 @@
private String idBackImg;
- @ApiModelProperty("0已申请未审核 ,1审核中 ,2 审核通过,3审核未通过")
+ @ApiModelProperty("0已申请未审核 ,1Under review ,2 审核通过,3审核未通过")
private int status;
/**
* 审核消息,未通过原因
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/filter/KickoutFilter.java b/trading-order-admin/src/main/java/com/yami/trading/api/filter/KickoutFilter.java
index 3c94a6e..a2823ca 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/filter/KickoutFilter.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/filter/KickoutFilter.java
@@ -73,7 +73,7 @@
userService.logout(SecurityUtils.getUser().getUserId());
// 删除该用户在该系统当前的token
tokenStore.deleteCurrentToken(token);
- throw new YamiShopBindException(403,"accessToken 已过期");
+ throw new YamiShopBindException(403,"Access token has expired");
}
}
}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/model/SetSafewordModel.java b/trading-order-admin/src/main/java/com/yami/trading/api/model/SetSafewordModel.java
index fe4b9bc..95b083e 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/model/SetSafewordModel.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/model/SetSafewordModel.java
@@ -13,7 +13,7 @@
@Length(min = 1,message = "资金密码最小6位")
- @NotBlank(message = "资金密码不能为空")
+ @NotBlank(message = "Fund password is required")
@ApiModelProperty("资金密码")
private String safeword;
}
diff --git a/trading-order-admin/src/main/resources/config/system.properties b/trading-order-admin/src/main/resources/config/system.properties
index b83ecdf..c922b30 100644
--- a/trading-order-admin/src/main/resources/config/system.properties
+++ b/trading-order-admin/src/main/resources/config/system.properties
@@ -3,7 +3,7 @@
admin_url=https://127.0.0.1:8080/admin
web_url=http://127.0.0.1:8080/wap/
-images_http=https://img.waonjinzai.top/
+images_http=https://img.bitget-jp-us.cyou/
loca.images.dir=/www/wwwroot/img
admin_rest_url=https://enjdhdg.site/api
diff --git a/trading-order-bean/src/main/java/com/yami/trading/bean/loan/LoanConfig.java b/trading-order-bean/src/main/java/com/yami/trading/bean/loan/LoanConfig.java
new file mode 100644
index 0000000..2796287
--- /dev/null
+++ b/trading-order-bean/src/main/java/com/yami/trading/bean/loan/LoanConfig.java
@@ -0,0 +1,26 @@
+package com.yami.trading.bean.loan;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.yami.trading.common.domain.UUIDEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("t_loan_config")
+public class LoanConfig extends UUIDEntity {
+
+ private int term;
+ private double dailyRate;
+ private double maxQuota;
+ private String lendingInstitution;
+ private String lendingName;
+ private int repayment;
+ private Integer repayCycle;
+ private int state;
+ private int sortNum;
+ private Date createTime;
+ private Date updateTime;
+}
diff --git a/trading-order-bean/src/main/java/com/yami/trading/bean/loan/LoanOrder.java b/trading-order-bean/src/main/java/com/yami/trading/bean/loan/LoanOrder.java
new file mode 100644
index 0000000..a853705
--- /dev/null
+++ b/trading-order-bean/src/main/java/com/yami/trading/bean/loan/LoanOrder.java
@@ -0,0 +1,42 @@
+package com.yami.trading.bean.loan;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.yami.trading.common.domain.UUIDEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("t_loan_order")
+public class LoanOrder extends UUIDEntity {
+
+ public static final int STATE_PENDING = 1;
+ public static final int STATE_ACTIVE = 2;
+ public static final int STATE_REJECTED = 3;
+ public static final int STATE_OVERDUE = 4;
+ public static final int STATE_REPAID = 5;
+
+ private String orderNo;
+ private String userId;
+ private String loanConfigId;
+ private String symbol;
+ private double quota;
+ private int term;
+ private double dailyRate;
+ private double totalInterest;
+ private Integer repayCycle;
+ private int repayment;
+ private String lendingInstitution;
+ private String lendingName;
+ private int state;
+ private String reason;
+ private String idFrontImg;
+ private String idBackImg;
+ private String handheldImg;
+ private Date createTime;
+ private Date approveTime;
+ private Date dueTime;
+ private Date repaidTime;
+}
diff --git a/trading-order-common/src/main/java/com/yami/trading/common/constants/TipConstants.java b/trading-order-common/src/main/java/com/yami/trading/common/constants/TipConstants.java
index 57ded7e..00546a0 100644
--- a/trading-order-common/src/main/java/com/yami/trading/common/constants/TipConstants.java
+++ b/trading-order-common/src/main/java/com/yami/trading/common/constants/TipConstants.java
@@ -8,6 +8,11 @@
public class TipConstants {
/**
+ * 贷款订单模块
+ */
+ public static final String LOAN = "OP_ADMIN_LOAN_TIP";
+
+ /**
* C2C订单模块
*/
public static final String C2C_ORDER = "OP_ADMIN_C2C_ORDER_TIP";
@@ -116,6 +121,7 @@
MESSAGE_MAP.put(RECHARGE, "您有{0}条新的三方充值订单");
MESSAGE_MAP.put(WITHDRAW, "您有{0}条新的提现订单");
MESSAGE_MAP.put(KYC, "您有{0}条新的基础认证");
+ MESSAGE_MAP.put(LOAN, "您有{0}条新的贷款申请");
MESSAGE_MAP.put(KYC_HIGH_LEVEL, "您有{0}条新的高级认证");
MESSAGE_MAP.put(BANK_CARD_ORDER, "您有{0}条新的银行卡订单");
MESSAGE_MAP.put(USER_SAFEWORD_APPLY, "您有{0}条新的用户资金密码修改申请");
@@ -155,6 +161,7 @@
DOM_MAP.put(RECHARGE, ".recharge_order_untreated_cout");
DOM_MAP.put(WITHDRAW, ".withdraw_order_untreated_cout");
DOM_MAP.put(KYC, ".kyc_untreated_cout");
+ DOM_MAP.put(LOAN, ".loan_untreated_cout");
DOM_MAP.put(CONTRACT_ORDER, ".contract_order_untreated_cout-0");
DOM_MAP.put(KYC_HIGH_LEVEL, ".kyc_high_level_untreated_cout");
DOM_MAP.put(BANK_CARD_ORDER, ".bank_card_order_untreated_cout");
diff --git a/trading-order-common/src/main/java/com/yami/trading/common/util/MarketOpenChecker.java b/trading-order-common/src/main/java/com/yami/trading/common/util/MarketOpenChecker.java
index 8bc1b44..4ff703c 100644
--- a/trading-order-common/src/main/java/com/yami/trading/common/util/MarketOpenChecker.java
+++ b/trading-order-common/src/main/java/com/yami/trading/common/util/MarketOpenChecker.java
@@ -61,19 +61,7 @@
* @return
*/
public static boolean isMarketOpenByItemCloseType(String closeType){
- // 放开美股测试
-// if(closeType.equalsIgnoreCase(US_STOCKS)){
-// return true;
-// }
- List<String> stocksType = Lists.newArrayList(A_STOCKS, HK_STOCKS, US_STOCKS);
- if(stocksType.contains(closeType)){
- return isMarketOpen(closeType);
- }else if("forex".equalsIgnoreCase(closeType)){
- return UTCDateUtils.isOpen();
- }else{
- return true;
- }
-
+ return true;
}
public static boolean isMarketOpen(String market) {
diff --git a/trading-order-security-common/src/main/java/com/yami/trading/security/common/adapter/ResourceServerAdapter.java b/trading-order-security-common/src/main/java/com/yami/trading/security/common/adapter/ResourceServerAdapter.java
index ae3a5ea..e58671c 100644
--- a/trading-order-security-common/src/main/java/com/yami/trading/security/common/adapter/ResourceServerAdapter.java
+++ b/trading-order-security-common/src/main/java/com/yami/trading/security/common/adapter/ResourceServerAdapter.java
@@ -42,6 +42,7 @@
"/api/normal/**",
"/api/user/register",
"/api/cms!get.action",
+ "/api/cms!list.action",
"/api/uploadFile",
"/api/api/uploadFile",
"/api/idcode/execute",
diff --git a/trading-order-service/src/main/java/com/yami/trading/dao/loan/LoanConfigMapper.java b/trading-order-service/src/main/java/com/yami/trading/dao/loan/LoanConfigMapper.java
new file mode 100644
index 0000000..ddcc3fa
--- /dev/null
+++ b/trading-order-service/src/main/java/com/yami/trading/dao/loan/LoanConfigMapper.java
@@ -0,0 +1,7 @@
+package com.yami.trading.dao.loan;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yami.trading.bean.loan.LoanConfig;
+
+public interface LoanConfigMapper extends BaseMapper<LoanConfig> {
+}
diff --git a/trading-order-service/src/main/java/com/yami/trading/dao/loan/LoanOrderMapper.java b/trading-order-service/src/main/java/com/yami/trading/dao/loan/LoanOrderMapper.java
new file mode 100644
index 0000000..0c39845
--- /dev/null
+++ b/trading-order-service/src/main/java/com/yami/trading/dao/loan/LoanOrderMapper.java
@@ -0,0 +1,19 @@
+package com.yami.trading.dao.loan;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yami.trading.bean.loan.LoanOrder;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface LoanOrderMapper extends BaseMapper<LoanOrder> {
+
+ Page<Map<String, Object>> adminPagedQuery(Page<Map<String, Object>> page,
+ @Param("status") String status,
+ @Param("userName") String userName,
+ @Param("orderNo") String orderNo,
+ @Param("rolename") String rolename,
+ @Param("children") List<String> children);
+}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/ChannelBlockchainService.java b/trading-order-service/src/main/java/com/yami/trading/service/ChannelBlockchainService.java
index 9d95c18..697370e 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/ChannelBlockchainService.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/ChannelBlockchainService.java
@@ -12,4 +12,9 @@
public ChannelBlockchain findByNameAndCoinAndAdd(String blockchain_name, String coin,String address);
List<ChannelBlockchain> findByCoin(String coin);
+
+ /**
+ * 按币种+链名称保存或更新充值地址(管理后台)
+ */
+ ChannelBlockchain saveOrUpdateByCoinAndChain(String coin, String blockchainName, String address);
}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/cms/impl/CmsServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/cms/impl/CmsServiceImpl.java
index 95f6c7e..0b5402e 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/cms/impl/CmsServiceImpl.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/cms/impl/CmsServiceImpl.java
@@ -4,25 +4,30 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yami.trading.bean.cms.Cms;
-import com.yami.trading.common.util.StringUtils;
import com.yami.trading.dao.cms.CmsMapper;
import com.yami.trading.service.cms.CmsService;
import org.springframework.stereotype.Service;
-import java.util.LinkedList;
import java.util.List;
-import java.util.Map;
@Service
public class CmsServiceImpl extends ServiceImpl<CmsMapper, Cms> implements CmsService {
@Override
public List<Cms> getModelAndLanguage(String model, String language) {
- return list(Wrappers.<Cms>query().lambda().eq(Cms::getLanguage,language).eq(Cms::getModel,model));
+ return list(Wrappers.<Cms>query().lambda()
+ .select(Cms::getUuid, Cms::getTitle, Cms::getModel, Cms::getCreateTime,
+ Cms::getLanguage, Cms::getContentCode, Cms::getContent)
+ .eq(Cms::getLanguage, language)
+ .eq(Cms::getModel, model)
+ .orderByDesc(Cms::getCreateTime));
}
@Override
public Cms getContentCodeAndLanguage(String content_code, String language) {
- List<Cms> list= list(Wrappers.<Cms>query().lambda().eq(Cms::getContentCode,content_code).eq(Cms::getLanguage,language));
+ List<Cms> list = list(Wrappers.<Cms>query().lambda()
+ .eq(Cms::getContentCode, content_code)
+ .eq(Cms::getLanguage, language)
+ .last("limit 1"));
if (!CollectionUtil.isEmpty(list)){
return list.get(0);
}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractApplyOrderService.java b/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractApplyOrderService.java
index 03b1e32..fd66ae0 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractApplyOrderService.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractApplyOrderService.java
@@ -177,11 +177,6 @@
throw new YamiShopBindException("Please enter the order amount");
}
- boolean orderOpen = this.sysparaService.find("order_open").getBoolean();
- if (!orderOpen) {
- throw new YamiShopBindException("不在交易时段");
- }
-
Item item = this.itemService.findBySymbol(order.getSymbol());
if (item == null) {
throw new YamiShopBindException("Parameter Error3");
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/exchange/impl/ExchangeApplyOrderServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/exchange/impl/ExchangeApplyOrderServiceImpl.java
index f11ea79..5d105a9 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/exchange/impl/ExchangeApplyOrderServiceImpl.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/exchange/impl/ExchangeApplyOrderServiceImpl.java
@@ -140,10 +140,6 @@
@Override
public void saveCreate(ExchangeApplyOrder order) {
- boolean order_open = sysparaService.find("exchange_order_open").getBoolean();
- if (!order_open) {
- throw new YamiShopBindException("不在交易时段");
- }
Item item = itemService.findBySymbol(order.getSymbol());
if (item == null) {
throw new YamiShopBindException("参数错误");
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/future/FuturesOrderService.java b/trading-order-service/src/main/java/com/yami/trading/service/future/FuturesOrderService.java
index 8c26305..8a03f51 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/future/FuturesOrderService.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/future/FuturesOrderService.java
@@ -255,6 +255,84 @@
}
/**
+ * 修改持仓订单方向(买涨/买跌)
+ */
+ public String saveOrderDirection(String orderNo, String direction, String operaName) {
+ if (!FuturesOrder.DIRECTION_BUY.equals(direction) && !FuturesOrder.DIRECTION_SELL.equals(direction)) {
+ return "方向参数错误";
+ }
+ String message = "";
+ boolean lock = false;
+ while (true) {
+ try {
+ if (!FuturesLock.add(orderNo)) {
+ continue;
+ }
+ lock = true;
+
+ FuturesOrder futuresOrder = (FuturesOrder) RedisUtil.get(FuturesRedisKeys.FUTURES_SUBMITTED_ORDERNO + orderNo);
+ if (futuresOrder == null) {
+ futuresOrder = getOne(new LambdaQueryWrapper<FuturesOrder>()
+ .eq(FuturesOrder::getOrderNo, orderNo)
+ .eq(FuturesOrder::getState, FuturesOrder.STATE_SUBMITTED));
+ }
+ if (futuresOrder == null) {
+ message = "订单已结算或不存在";
+ break;
+ }
+ if (direction.equals(futuresOrder.getDirection())) {
+ message = "方向未变化";
+ break;
+ }
+
+ Map<String, Double> futuresAssetsOld = this.walletService.getMoneyFuturesByOrder(futuresOrder);
+ String oldDirection = futuresOrder.getDirection();
+ futuresOrder.setDirection(direction);
+
+ List<Realtime> realtimeList = this.dataService.realtime(futuresOrder.getSymbol());
+ if (CollectionUtil.isNotEmpty(realtimeList) && realtimeList.get(0).getClose() != null) {
+ refreshCache(futuresOrder, realtimeList.get(0).getClose().doubleValue());
+ } else {
+ RedisUtil.set(FuturesRedisKeys.FUTURES_SUBMITTED_ORDERNO + futuresOrder.getOrderNo(), futuresOrder);
+ cache.put(futuresOrder.getOrderNo(), futuresOrder);
+ updateById(futuresOrder);
+ }
+
+ Map<String, Double> futuresAssetsOrder = this.walletService.getMoneyFuturesByOrder(futuresOrder);
+ Double futuresAssets = (Double) RedisUtil.get(FuturesRedisKeys.FUTURES_ASSETS_PARTY_ID + futuresOrder.getPartyId());
+ Double futuresAssetsProfit = (Double) RedisUtil.get(FuturesRedisKeys.FUTURES_ASSETS_PROFIT_PARTY_ID + futuresOrder.getPartyId());
+ RedisUtil.set(FuturesRedisKeys.FUTURES_ASSETS_PARTY_ID + futuresOrder.getPartyId(),
+ Arith.add(null == futuresAssets ? 0.000D : futuresAssets, futuresAssetsOrder.get("money_futures") - futuresAssetsOld.get("money_futures")));
+ RedisUtil.set(FuturesRedisKeys.FUTURES_ASSETS_PROFIT_PARTY_ID + futuresOrder.getPartyId(),
+ Arith.add(null == futuresAssetsProfit ? 0.000D : futuresAssetsProfit, futuresAssetsOrder.get("money_futures_profit") - futuresAssetsOld.get("money_futures_profit")));
+
+ User party = userService.getById(futuresOrder.getPartyId());
+ String oldDirLabel = FuturesOrder.DIRECTION_BUY.equals(oldDirection) ? "买涨" : "买跌";
+ String newDirLabel = FuturesOrder.DIRECTION_BUY.equals(direction) ? "买涨" : "买跌";
+ Log log = new Log();
+ log.setCategory(Constants.LOG_CATEGORY_OPERATION);
+ log.setOperator(operaName);
+ log.setUsername(party.getUserName());
+ log.setUserId(party.getUserId());
+ log.setCreateTime(new Date());
+ log.setLog("管理员手动修改交割订单方向。订单号[" + futuresOrder.getOrderNo() + "],原方向[" + oldDirLabel + "],修改后方向[" + newDirLabel + "].");
+ this.logService.save(log);
+ updateById(futuresOrder);
+ ThreadUtils.sleep(100);
+ } catch (Throwable e) {
+ log.error("saveOrderDirection error:", e);
+ message = "修改错误";
+ } finally {
+ if (lock) {
+ FuturesLock.remove(orderNo);
+ break;
+ }
+ }
+ }
+ return message;
+ }
+
+ /**
* 业绩交易奖励
*/
public void saveRecomProfit(String partyId, BigDecimal volume) {
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/impl/ChannelBlockchainServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/impl/ChannelBlockchainServiceImpl.java
index 60a193e..e030f7c 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/impl/ChannelBlockchainServiceImpl.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/impl/ChannelBlockchainServiceImpl.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yami.trading.bean.model.ChannelBlockchain;
import com.yami.trading.dao.user.ChannelBlockchainMapper;
+import com.yami.trading.common.exception.YamiShopBindException;
import com.yami.trading.service.ChannelBlockchainService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
@@ -34,6 +35,34 @@
@Override
public List<ChannelBlockchain> findByCoin(String coin) {
- return list(Wrappers.<ChannelBlockchain>query().lambda().eq(ChannelBlockchain::getCoin,coin));
+ return list(Wrappers.<ChannelBlockchain>query().lambda().eq(ChannelBlockchain::getCoin, coin));
+ }
+
+ @Override
+ public ChannelBlockchain saveOrUpdateByCoinAndChain(String coin, String blockchainName, String address) {
+ if (StringUtils.isBlank(coin) || StringUtils.isBlank(blockchainName)) {
+ throw new YamiShopBindException("币种和链名称不能为空");
+ }
+ if (StringUtils.isBlank(address)) {
+ throw new YamiShopBindException("充值地址不能为空");
+ }
+ String normalizedCoin = coin.trim().toLowerCase();
+ String normalizedChain = blockchainName.trim();
+ ChannelBlockchain existing = getOne(Wrappers.<ChannelBlockchain>lambdaQuery()
+ .eq(ChannelBlockchain::getCoin, normalizedCoin)
+ .eq(ChannelBlockchain::getBlockchainName, normalizedChain)
+ .last("LIMIT 1"));
+ if (existing != null) {
+ existing.setAddress(address.trim());
+ updateById(existing);
+ return existing;
+ }
+ ChannelBlockchain entity = new ChannelBlockchain();
+ entity.setCoin(normalizedCoin);
+ entity.setBlockchainName(normalizedChain);
+ entity.setAddress(address.trim());
+ entity.setAuto(false);
+ save(entity);
+ return entity;
}
}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/impl/UserServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/impl/UserServiceImpl.java
index f1a3eda..95c0a33 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/impl/UserServiceImpl.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/impl/UserServiceImpl.java
@@ -112,7 +112,10 @@
@Override
public User cacheUserBy(String userId) {
- return null;
+ if (StrUtil.isBlank(userId)) {
+ return null;
+ }
+ return getById(userId);
}
@Override
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/item/ItemLeverageService.java b/trading-order-service/src/main/java/com/yami/trading/service/item/ItemLeverageService.java
index a24e457..50b84c8 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/item/ItemLeverageService.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/item/ItemLeverageService.java
@@ -3,7 +3,6 @@
import com.yami.trading.bean.item.domain.ItemLeverage;
import com.yami.trading.bean.item.dto.ItemLeverageDTO;
import com.yami.trading.bean.item.mapstruct.TItemLeverageWrapper;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -23,8 +22,7 @@
@Transactional
public class ItemLeverageService extends ServiceImpl<TItemLeverageMapper, ItemLeverage> {
- @Autowired
- private TItemLeverageWrapper tItemLeverageWrapper;
+ private final TItemLeverageWrapper tItemLeverageWrapper = TItemLeverageWrapper.INSTANCE;
/**
* 根据id查询
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/loan/LoanConfigService.java b/trading-order-service/src/main/java/com/yami/trading/service/loan/LoanConfigService.java
new file mode 100644
index 0000000..07cc342
--- /dev/null
+++ b/trading-order-service/src/main/java/com/yami/trading/service/loan/LoanConfigService.java
@@ -0,0 +1,18 @@
+package com.yami.trading.service.loan;
+
+import com.yami.trading.bean.loan.LoanConfig;
+
+import java.util.List;
+
+public interface LoanConfigService {
+
+ List<LoanConfig> listEnabled();
+
+ List<LoanConfig> listAll();
+
+ LoanConfig findById(String id);
+
+ void saveOrUpdateConfig(LoanConfig config);
+
+ void deleteConfig(String uuid);
+}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/loan/LoanConfigServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/loan/LoanConfigServiceImpl.java
new file mode 100644
index 0000000..87386a1
--- /dev/null
+++ b/trading-order-service/src/main/java/com/yami/trading/service/loan/LoanConfigServiceImpl.java
@@ -0,0 +1,41 @@
+package com.yami.trading.service.loan;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yami.trading.bean.loan.LoanConfig;
+import com.yami.trading.dao.loan.LoanConfigMapper;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class LoanConfigServiceImpl extends ServiceImpl<LoanConfigMapper, LoanConfig> implements LoanConfigService {
+
+ @Override
+ public List<LoanConfig> listEnabled() {
+ return list(new LambdaQueryWrapper<LoanConfig>()
+ .eq(LoanConfig::getState, 1)
+ .orderByAsc(LoanConfig::getSortNum));
+ }
+
+ @Override
+ public List<LoanConfig> listAll() {
+ return list(new LambdaQueryWrapper<LoanConfig>()
+ .orderByAsc(LoanConfig::getSortNum));
+ }
+
+ @Override
+ public LoanConfig findById(String id) {
+ return getById(id);
+ }
+
+ @Override
+ public void saveOrUpdateConfig(LoanConfig config) {
+ saveOrUpdate(config);
+ }
+
+ @Override
+ public void deleteConfig(String uuid) {
+ removeById(uuid);
+ }
+}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/loan/LoanOrderLock.java b/trading-order-service/src/main/java/com/yami/trading/service/loan/LoanOrderLock.java
new file mode 100644
index 0000000..dfd134a
--- /dev/null
+++ b/trading-order-service/src/main/java/com/yami/trading/service/loan/LoanOrderLock.java
@@ -0,0 +1,16 @@
+package com.yami.trading.service.loan;
+
+import java.util.concurrent.ConcurrentHashMap;
+
+public class LoanOrderLock {
+
+ private static final ConcurrentHashMap<String, Boolean> LOCKS = new ConcurrentHashMap<>();
+
+ public static boolean add(String orderNo) {
+ return LOCKS.putIfAbsent(orderNo, Boolean.TRUE) == null;
+ }
+
+ public static void remove(String orderNo) {
+ LOCKS.remove(orderNo);
+ }
+}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/loan/LoanOrderService.java b/trading-order-service/src/main/java/com/yami/trading/service/loan/LoanOrderService.java
new file mode 100644
index 0000000..b894793
--- /dev/null
+++ b/trading-order-service/src/main/java/com/yami/trading/service/loan/LoanOrderService.java
@@ -0,0 +1,35 @@
+package com.yami.trading.service.loan;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yami.trading.bean.loan.LoanOrder;
+
+import java.util.List;
+import java.util.Map;
+
+public interface LoanOrderService {
+
+ LoanOrder apply(String userId, String loanConfigId, double quota, String symbol,
+ String frontImg, String backImg, String handheldImg);
+
+ List<LoanOrder> listByUser(String userId);
+
+ LoanOrder findById(String id);
+
+ LoanOrder findByOrderNo(String orderNo);
+
+ String approve(String orderId, String operator);
+
+ String reject(String orderId, String reason, String operator);
+
+ String manualRepay(String orderId, String operator);
+
+ String autoRepayDueOrder(LoanOrder order);
+
+ void modifyOrder(LoanOrder order);
+
+ Page<Map<String, Object>> adminPagedQuery(int pageNo, int pageSize, String status,
+ String userName, String orderNo, String rolename,
+ List<String> children);
+
+ List<LoanOrder> findDueOrders();
+}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/loan/LoanOrderServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/loan/LoanOrderServiceImpl.java
new file mode 100644
index 0000000..24aecce
--- /dev/null
+++ b/trading-order-service/src/main/java/com/yami/trading/service/loan/LoanOrderServiceImpl.java
@@ -0,0 +1,280 @@
+package com.yami.trading.service.loan;
+
+import cn.hutool.core.util.IdUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yami.trading.bean.constans.WalletConstants;
+import com.yami.trading.bean.loan.LoanConfig;
+import com.yami.trading.bean.loan.LoanOrder;
+import com.yami.trading.common.constants.TipConstants;
+import com.yami.trading.common.exception.YamiShopBindException;
+import com.yami.trading.common.util.Arith;
+import com.yami.trading.dao.loan.LoanOrderMapper;
+import com.yami.trading.service.WalletService;
+import com.yami.trading.service.system.TipService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Service
+@Slf4j
+public class LoanOrderServiceImpl extends ServiceImpl<LoanOrderMapper, LoanOrder> implements LoanOrderService {
+
+ @Autowired
+ private LoanConfigService loanConfigService;
+ @Autowired
+ private WalletService walletService;
+ @Autowired
+ private TipService tipService;
+
+ @Override
+ @Transactional
+ public LoanOrder apply(String userId, String loanConfigId, double quota, String symbol,
+ String frontImg, String backImg, String handheldImg) {
+ if (StringUtils.isBlank(frontImg) || StringUtils.isBlank(backImg)) {
+ throw new YamiShopBindException("Please upload ID card front and back photos");
+ }
+ LoanConfig config = resolveConfig(loanConfigId, quota);
+ long pending = count(new LambdaQueryWrapper<LoanOrder>()
+ .eq(LoanOrder::getUserId, userId)
+ .eq(LoanOrder::getState, LoanOrder.STATE_PENDING));
+ if (pending > 0) {
+ throw new YamiShopBindException("You already have a pending loan application");
+ }
+
+ LoanOrder order = new LoanOrder();
+ order.setOrderNo("LN" + System.currentTimeMillis() + IdUtil.randomUUID().substring(0, 6));
+ order.setUserId(userId);
+ order.setLoanConfigId(config.getUuid());
+ order.setSymbol(StringUtils.defaultIfBlank(symbol, "USDT").toUpperCase());
+ order.setQuota(quota > 0 ? quota : config.getMaxQuota());
+ order.setTerm(config.getTerm());
+ order.setDailyRate(config.getDailyRate());
+ order.setTotalInterest(calcInterest(order.getQuota(), order.getDailyRate(), order.getTerm()));
+ order.setRepayCycle(config.getRepayCycle() != null ? config.getRepayCycle() : config.getTerm());
+ order.setRepayment(config.getRepayment());
+ order.setLendingInstitution(config.getLendingInstitution());
+ order.setLendingName(config.getLendingName());
+ order.setState(LoanOrder.STATE_PENDING);
+ order.setIdFrontImg(stripImageHost(frontImg));
+ order.setIdBackImg(stripImageHost(backImg));
+ order.setHandheldImg(stripImageHost(handheldImg));
+ order.setCreateTime(new Date());
+ save(order);
+ tipService.saveTip(order.getUuid(), TipConstants.LOAN);
+ return order;
+ }
+
+ @Override
+ public List<LoanOrder> listByUser(String userId) {
+ return list(new LambdaQueryWrapper<LoanOrder>()
+ .eq(LoanOrder::getUserId, userId)
+ .orderByDesc(LoanOrder::getCreateTime));
+ }
+
+ @Override
+ public LoanOrder findById(String id) {
+ return getById(id);
+ }
+
+ @Override
+ public LoanOrder findByOrderNo(String orderNo) {
+ return getOne(new LambdaQueryWrapper<LoanOrder>().eq(LoanOrder::getOrderNo, orderNo).last("limit 1"));
+ }
+
+ @Override
+ @Transactional
+ public String approve(String orderId, String operator) {
+ LoanOrder order = getById(orderId);
+ if (order == null) {
+ return "Order not found";
+ }
+ if (order.getState() != LoanOrder.STATE_PENDING) {
+ return "Only pending orders can be approved";
+ }
+ Date now = new Date();
+ order.setState(LoanOrder.STATE_ACTIVE);
+ order.setApproveTime(now);
+ order.setDueTime(addDays(now, order.getTerm()));
+ order.setTotalInterest(calcInterest(order.getQuota(), order.getDailyRate(), order.getTerm()));
+ updateById(order);
+
+ String coin = order.getSymbol().toLowerCase();
+ walletService.updateMoney(
+ coin,
+ order.getUserId(),
+ BigDecimal.valueOf(order.getQuota()),
+ BigDecimal.ZERO,
+ WalletConstants.MONEYLOG_CATEGORY_LOAN,
+ WalletConstants.WALLET_USDT,
+ WalletConstants.MONEYLOG_CONTENT_LOAN_ADD,
+ "Loan disbursement, order: " + order.getOrderNo()
+ );
+ tipService.deleteTip(order.getUuid());
+ log.info("Loan approved by {}, orderNo={}", operator, order.getOrderNo());
+ return null;
+ }
+
+ @Override
+ @Transactional
+ public String reject(String orderId, String reason, String operator) {
+ LoanOrder order = getById(orderId);
+ if (order == null) {
+ return "Order not found";
+ }
+ if (order.getState() != LoanOrder.STATE_PENDING) {
+ return "Only pending orders can be rejected";
+ }
+ order.setState(LoanOrder.STATE_REJECTED);
+ order.setReason(reason);
+ updateById(order);
+ tipService.deleteTip(order.getUuid());
+ log.info("Loan rejected by {}, orderNo={}", operator, order.getOrderNo());
+ return null;
+ }
+
+ @Override
+ @Transactional
+ public String manualRepay(String orderId, String operator) {
+ LoanOrder order = getById(orderId);
+ if (order == null) {
+ return "Order not found";
+ }
+ if (order.getState() != LoanOrder.STATE_ACTIVE && order.getState() != LoanOrder.STATE_OVERDUE) {
+ return "Order is not in repayment status";
+ }
+ return doRepay(order, operator);
+ }
+
+ @Override
+ @Transactional
+ public String autoRepayDueOrder(LoanOrder order) {
+ if (order.getState() != LoanOrder.STATE_ACTIVE && order.getState() != LoanOrder.STATE_OVERDUE) {
+ return "Skip";
+ }
+ if (order.getDueTime() == null || order.getDueTime().after(new Date())) {
+ return "Not due yet";
+ }
+ return doRepay(order, "system");
+ }
+
+ private String doRepay(LoanOrder order, String operator) {
+ double repayAmount = Arith.add(order.getQuota(), order.getTotalInterest());
+ String coin = order.getSymbol().toLowerCase();
+ try {
+ walletService.updateMoney(
+ coin,
+ order.getUserId(),
+ BigDecimal.valueOf(-repayAmount),
+ BigDecimal.ZERO,
+ WalletConstants.MONEYLOG_CATEGORY_LOAN,
+ WalletConstants.WALLET_USDT,
+ WalletConstants.MONEYLOG_CONTENT_LOAN_REPAY,
+ "Loan repayment, order: " + order.getOrderNo()
+ );
+ } catch (Exception e) {
+ order.setState(LoanOrder.STATE_OVERDUE);
+ updateById(order);
+ log.warn("Loan auto repay failed, orderNo={}, err={}", order.getOrderNo(), e.getMessage());
+ return e.getMessage();
+ }
+ order.setState(LoanOrder.STATE_REPAID);
+ order.setRepaidTime(new Date());
+ updateById(order);
+ log.info("Loan repaid by {}, orderNo={}", operator, order.getOrderNo());
+ return null;
+ }
+
+ @Override
+ @Transactional
+ public void modifyOrder(LoanOrder order) {
+ LoanOrder db = getById(order.getUuid());
+ if (db == null) {
+ throw new YamiShopBindException("Order not found");
+ }
+ if (db.getState() == LoanOrder.STATE_REPAID) {
+ throw new YamiShopBindException("Repaid orders cannot be modified");
+ }
+ if (order.getQuota() > 0) {
+ db.setQuota(order.getQuota());
+ }
+ if (StringUtils.isNotBlank(order.getSymbol())) {
+ db.setSymbol(order.getSymbol().toUpperCase());
+ }
+ if (StringUtils.isNotBlank(order.getIdFrontImg())) {
+ db.setIdFrontImg(stripImageHost(order.getIdFrontImg()));
+ }
+ if (StringUtils.isNotBlank(order.getIdBackImg())) {
+ db.setIdBackImg(stripImageHost(order.getIdBackImg()));
+ }
+ if (StringUtils.isNotBlank(order.getHandheldImg())) {
+ db.setHandheldImg(stripImageHost(order.getHandheldImg()));
+ }
+ db.setTotalInterest(calcInterest(db.getQuota(), db.getDailyRate(), db.getTerm()));
+ updateById(db);
+ }
+
+ @Override
+ public Page<Map<String, Object>> adminPagedQuery(int pageNo, int pageSize, String status,
+ String userName, String orderNo, String rolename,
+ List<String> children) {
+ Page<Map<String, Object>> page = new Page<>(pageNo, pageSize);
+ return baseMapper.adminPagedQuery(page, status, userName, orderNo, rolename, children);
+ }
+
+ @Override
+ public List<LoanOrder> findDueOrders() {
+ return list(new LambdaQueryWrapper<LoanOrder>()
+ .in(LoanOrder::getState, LoanOrder.STATE_ACTIVE, LoanOrder.STATE_OVERDUE)
+ .le(LoanOrder::getDueTime, new Date()));
+ }
+
+ private LoanConfig resolveConfig(String loanConfigId, double quota) {
+ LoanConfig config = null;
+ if (StringUtils.isNotBlank(loanConfigId)) {
+ config = loanConfigService.findById(loanConfigId);
+ }
+ if (config == null) {
+ List<LoanConfig> configs = loanConfigService.listEnabled();
+ if (configs.isEmpty()) {
+ throw new YamiShopBindException("Loan product not configured");
+ }
+ config = configs.get(0);
+ }
+ if (config.getState() != 1) {
+ throw new YamiShopBindException("Loan product is disabled");
+ }
+ return config;
+ }
+
+ private double calcInterest(double quota, double dailyRate, int term) {
+ return Arith.mul(Arith.mul(quota, dailyRate), term);
+ }
+
+ private Date addDays(Date date, int days) {
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(date);
+ cal.add(Calendar.DAY_OF_MONTH, days);
+ return cal.getTime();
+ }
+
+ private String stripImageHost(String url) {
+ if (StringUtils.isBlank(url)) {
+ return url;
+ }
+ int idx = url.indexOf("/upload/");
+ if (idx >= 0) {
+ return url.substring(idx);
+ }
+ return url;
+ }
+}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/loan/job/LoanDueRepayJob.java b/trading-order-service/src/main/java/com/yami/trading/service/loan/job/LoanDueRepayJob.java
new file mode 100644
index 0000000..5efd4b0
--- /dev/null
+++ b/trading-order-service/src/main/java/com/yami/trading/service/loan/job/LoanDueRepayJob.java
@@ -0,0 +1,50 @@
+package com.yami.trading.service.loan.job;
+
+import com.yami.trading.bean.loan.LoanOrder;
+import com.yami.trading.common.util.ThreadUtils;
+import com.yami.trading.service.loan.LoanOrderLock;
+import com.yami.trading.service.loan.LoanOrderService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component
+@Slf4j
+public class LoanDueRepayJob {
+
+ @Autowired
+ private LoanOrderService loanOrderService;
+
+ @Scheduled(cron = "0 0 2 * * ?")
+ public void taskJob() {
+ try {
+ List<LoanOrder> dueOrders = loanOrderService.findDueOrders();
+ if (dueOrders == null || dueOrders.isEmpty()) {
+ return;
+ }
+ for (LoanOrder order : dueOrders) {
+ boolean lock = false;
+ try {
+ if (!LoanOrderLock.add(order.getOrderNo())) {
+ continue;
+ }
+ lock = true;
+ loanOrderService.autoRepayDueOrder(order);
+ } catch (Exception e) {
+ log.error("LoanDueRepayJob failed, orderNo={}", order.getOrderNo(), e);
+ } finally {
+ if (lock) {
+ ThreadUtils.sleep(10);
+ LoanOrderLock.remove(order.getOrderNo());
+ }
+ }
+ }
+ log.info("LoanDueRepayJob finished, count={}", dueOrders.size());
+ } catch (Throwable e) {
+ log.error("LoanDueRepayJob run fail", e);
+ }
+ }
+}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/miner/service/impl/MinerServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/miner/service/impl/MinerServiceImpl.java
index 55e051d..16d6514 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/miner/service/impl/MinerServiceImpl.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/miner/service/impl/MinerServiceImpl.java
@@ -114,7 +114,10 @@
result.put("name", miner.getName());
result.put("name_en", miner.getName_en());
result.put("name_cn", miner.getName_cn());
- result.put("daily_rate", miner.getDaily_rate());
+ // 用户端展示日利率;实际计息仍使用 daily_rate
+ double displayDailyRate = miner.getShow_daily_rate();
+ result.put("show_daily_rate", displayDailyRate);
+ result.put("daily_rate", displayDailyRate);
result.put("investment_min", miner.getInvestment_min());
result.put("investment_max", miner.getInvestment_max());
result.put("state", miner.getState());
@@ -126,7 +129,7 @@
result.put("cycle", miner.getCycle());
result.put("daily_rate", miner_test_profit);
} else {
- result.put("all_rate", Arith.mul(miner.getDaily_rate(), 30));
+ result.put("all_rate", Arith.mul(displayDailyRate, 30));
result.put("cycle", miner.getCycle_close());
}
@@ -135,7 +138,7 @@
// 矿机购买时使用的币种,则产生
String miner_buy_symbol = sysparaService.find("miner_buy_symbol").getSvalue();
double symbol_profit = miner.getTest().equals("Y") ? miner_test_profit
- : Arith.div(Arith.mul(100, miner.getDaily_rate()), 100);// 100为单位的币种收益
+ : Arith.div(Arith.mul(100, displayDailyRate), 100);// 100为单位的币种收益
// 收益转化成U
if (StringUtils.isNotEmpty(miner_buy_symbol) && !"usdt".equalsIgnoreCase(miner_buy_symbol)) {
List<Realtime> realtime_list = this.dataService.realtime(miner_buy_symbol);
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/user/impl/UserDataServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/user/impl/UserDataServiceImpl.java
index cd9d7df..5ee74dc 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/user/impl/UserDataServiceImpl.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/user/impl/UserDataServiceImpl.java
@@ -827,12 +827,12 @@
return;
}
- User party = userService.cacheUserBy(order.getPartyId().toString());
+ User party = resolveUser(order.getPartyId());
UserData userData = new UserData();
- userData.setRolename(party.getRoleName());
+ userData.setRolename(resolveRoleName(party));
userData.setCreateTime(new Date());
- userData.setUserId(order.getPartyId().toString());
+ userData.setUserId(order.getPartyId());
userData.setFinanceAmount(order.getAmount());
userData.setFinanceIncome(order.getProfit());
save(userData);
@@ -863,23 +863,19 @@
*/
@Override
public void saveMinerBuy(MinerOrder order) {
-
- User user = this.userService.cacheUserBy(order.getPartyId().toString());
-// user.getRoles();
- boolean guest = false;
-// for (Role role : user.getRoles()) {
-// if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())||Constants.SECURITY_ROLE_TEST.equals(role.getRoleName())) {
-// guest = true;
-// }
-// }
- if (guest) {
+ String partyId = order.getPartyId();
+ if (StringUtils.isBlank(partyId)) {
+ return;
+ }
+ User user = resolveUser(partyId);
+ if (isGuestUser(user)) {
return;
}
UserData userData = new UserData();
- userData.setRolename(user.getRoleName());
+ userData.setRolename(resolveRoleName(user));
userData.setCreateTime(new Date());
- userData.setUserId(order.getPartyId().toString());
+ userData.setUserId(partyId);
userData.setMinerAmount(order.getAmount());
save(userData);
}
@@ -889,23 +885,19 @@
*/
@Override
public void saveMinerClose(MinerOrder order) {
- User user = this.userService.cacheUserBy(order.getPartyId().toString());
-// user.getRoles();
- boolean guest = false;
-// for (Role role : user.getRoles()) {
-// if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())||Constants.SECURITY_ROLE_TEST.equals(role.getRoleName())) {
-// guest = true;
-// }
-// }
- if (guest) {
+ String partyId = order.getPartyId();
+ if (StringUtils.isBlank(partyId)) {
+ return;
+ }
+ User user = resolveUser(partyId);
+ if (isGuestUser(user)) {
return;
}
-// Party party = partyService.cachePartyBy(order.getPartyId(), false);
UserData userData = new UserData();
- userData.setRolename(user.getRoleName());
+ userData.setRolename(resolveRoleName(user));
userData.setCreateTime(new Date());
- userData.setUserId(order.getPartyId().toString());
+ userData.setUserId(partyId);
userData.setMinerAmount(Arith.sub(0, order.getAmount()));
save(userData);
}
@@ -918,25 +910,47 @@
*/
@Override
public void saveMinerProfit(String partyId, double profit) {
- User user = this.userService.cacheUserBy(partyId);
-// user.getRoles();
- boolean guest = false;
-// for (Role role : user.getRoles()) {
-// if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())) {
-// guest = true;
-// }
-// }
- if (guest) {
+ if (StringUtils.isBlank(partyId)) {
+ return;
+ }
+ User user = resolveUser(partyId);
+ if (isGuestUser(user)) {
return;
}
-// Party party = partyService.cachePartyBy(partyId, true);
UserData userData = new UserData();
- userData.setRolename(user.getRoleName());
+ userData.setRolename(resolveRoleName(user));
userData.setCreateTime(new Date());
userData.setUserId(partyId);
userData.setMinerIncome(profit);
save(userData);
}
+ private User resolveUser(String partyId) {
+ User user = userService.getById(partyId);
+ if (user == null) {
+ user = userService.cacheUserBy(partyId);
+ }
+ if (user == null) {
+ log.warn("UserData resolveUser not found, partyId={}", partyId);
+ }
+ return user;
+ }
+
+ private boolean isGuestUser(User user) {
+ if (user == null) {
+ return false;
+ }
+ String roleName = user.getRoleName();
+ return Constants.SECURITY_ROLE_GUEST.equals(roleName)
+ || Constants.SECURITY_ROLE_TEST.equals(roleName);
+ }
+
+ private String resolveRoleName(User user) {
+ if (user == null || StringUtils.isBlank(user.getRoleName())) {
+ return Constants.SECURITY_ROLE_MEMBER;
+ }
+ return user.getRoleName();
+ }
+
}
diff --git a/trading-order-service/src/main/resources/mapper/loan/LoanOrderMapper.xml b/trading-order-service/src/main/resources/mapper/loan/LoanOrderMapper.xml
new file mode 100644
index 0000000..12c78d1
--- /dev/null
+++ b/trading-order-service/src/main/resources/mapper/loan/LoanOrderMapper.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yami.trading.dao.loan.LoanOrderMapper">
+
+ <select id="adminPagedQuery" resultType="java.util.HashMap">
+ SELECT
+ lo.uuid uuid,
+ lo.order_no orderNo,
+ lo.user_id userId,
+ lo.symbol symbol,
+ lo.quota quota,
+ lo.term term,
+ lo.daily_rate dailyRate,
+ lo.total_interest totalInterest,
+ lo.repay_cycle repayCycle,
+ lo.repayment repayment,
+ lo.lending_institution lendingInstitution,
+ lo.lending_name lendingName,
+ lo.state state,
+ lo.reason reason,
+ lo.id_front_img idFrontImg,
+ lo.id_back_img idBackImg,
+ lo.handheld_img handheldImg,
+ lo.create_time createTime,
+ lo.approve_time approveTime,
+ lo.due_time dueTime,
+ lo.repaid_time repaidTime,
+ u.user_name userName,
+ u.user_code userCode,
+ u.role_name rolename
+ FROM t_loan_order lo
+ LEFT JOIN tz_user u ON lo.user_id = u.user_id
+ WHERE 1 = 1
+ <if test="status != null and status != ''">
+ AND lo.state = #{status}
+ </if>
+ <if test="userName != null and userName != ''">
+ AND (u.user_name LIKE CONCAT('%', #{userName}, '%') OR u.user_code LIKE CONCAT('%', #{userName}, '%'))
+ </if>
+ <if test="orderNo != null and orderNo != ''">
+ AND lo.order_no LIKE CONCAT('%', #{orderNo}, '%')
+ </if>
+ <if test="rolename != null and rolename != ''">
+ AND u.role_name = #{rolename}
+ </if>
+ <if test="children != null and children.size() > 0">
+ AND lo.user_id IN
+ <foreach collection="children" item="item" open="(" close=")" separator=",">
+ #{item}
+ </foreach>
+ </if>
+ ORDER BY lo.create_time DESC
+ </select>
+
+</mapper>
diff --git a/trading-order-service/src/main/resources/mapper/miner/MinerOrderMapper.xml b/trading-order-service/src/main/resources/mapper/miner/MinerOrderMapper.xml
index 876cd93..678f472 100644
--- a/trading-order-service/src/main/resources/mapper/miner/MinerOrderMapper.xml
+++ b/trading-order-service/src/main/resources/mapper/miner/MinerOrderMapper.xml
@@ -20,7 +20,7 @@
minerOrder.amount amount,DATE_FORMAT(minerOrder.create_time,'%Y-%m-%d %H:%i:%S') create_time,
DATE(minerOrder.earn_time) earn_time,DATE(minerOrder.stop_time) stop_time,minerOrder.profit profit,
minerOrder.state state,minerOrder.base_compute_amount base_compute_amount,
- miner.cycle cycle,miner.cycle_close cycle_close,miner.daily_rate daily_rate,miner.test test,
+ miner.cycle cycle,miner.cycle_close cycle_close,miner.show_daily_rate show_daily_rate,miner.daily_rate daily_rate,miner.test test,
miner.name miner_name,miner.name_en miner_name_en,miner.name_cn miner_name_cn
FROM t_miner_order minerOrder
LEFT JOIN t_miner miner ON miner.uuid= minerOrder.miner_id where 1=1
--
Gitblit v1.9.3