From 261cbe38d24da55ec24ffb74e7d254581c3d0a1d Mon Sep 17 00:00:00 2001 From: yyb <1416014977@qq.com> Date: Mon, 5 Jan 2026 15:47:11 +0800 Subject: [PATCH] =?UTF-8?q?update=20m2pool=20=E6=B3=A8=E9=94=80=E8=B4=A6?= =?UTF-8?q?=E5=8F=B7=E5=88=A0=E9=99=A4api=EF=BC=8C=E5=8F=AA=E8=AF=BB?= =?UTF-8?q?=E9=A1=B5=EF=BC=8C=E6=8C=96=E7=9F=BF=E8=B4=A6=E5=8F=B7=E7=AD=89?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../m2pool/system/api/RemotePoolService.java | 25 +++++++ .../factory/RemotePoolFallbackFactory.java | 36 ++++++++++ .../m2pool/auth/service/SysLoginService.java | 2 +- .../pool/controller/UserController.java | 11 +++ .../com/m2pool/pool/mapper/TicketMapper.java | 28 ++++++++ .../m2pool/pool/mapper/UserAccountMapper.java | 44 ++++++++++++ .../pool/service/UserMinserService.java | 7 ++ .../service/impl/UserMinerServiceImpl.java | 42 +++++++++++- .../resources/mapper/pool/TicketMapper.xml | 46 +++++++++++++ .../mapper/pool/UserAccountMapper.xml | 68 +++++++++++++++++++ .../system/controller/SysUserController.java | 1 + .../service/impl/SysUserServiceImpl.java | 14 ++++ m2pool_update.sql | 56 +++++++++++++++ 13 files changed, 378 insertions(+), 2 deletions(-) create mode 100644 m2pool-api/api-system/src/main/java/com/m2pool/system/api/RemotePoolService.java create mode 100644 m2pool-api/api-system/src/main/java/com/m2pool/system/api/factory/RemotePoolFallbackFactory.java create mode 100644 m2pool_update.sql diff --git a/m2pool-api/api-system/src/main/java/com/m2pool/system/api/RemotePoolService.java b/m2pool-api/api-system/src/main/java/com/m2pool/system/api/RemotePoolService.java new file mode 100644 index 0000000..e5298a2 --- /dev/null +++ b/m2pool-api/api-system/src/main/java/com/m2pool/system/api/RemotePoolService.java @@ -0,0 +1,25 @@ +package com.m2pool.system.api; + + +import com.m2pool.common.core.Result.R; +import com.m2pool.common.core.constant.ServiceNameConstants; +import com.m2pool.system.api.entity.SysUser; +import com.m2pool.system.api.factory.RemotePoolFallbackFactory; +import com.m2pool.system.api.factory.RemoteUserFallbackFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +/** +* @Description 矿池服务 +* @Date 2026/1/5 10:15 +* @Author yyb +*/ +@FeignClient(contextId = "remotePoolService",value = ServiceNameConstants.POOL_SERVICE,fallbackFactory = RemotePoolFallbackFactory.class) +public interface RemotePoolService { + + @PostMapping("/user/deleteUserDataAndPutTemporaryTable") + R deleteUserDataAndPutTemporaryTable(); + + +} diff --git a/m2pool-api/api-system/src/main/java/com/m2pool/system/api/factory/RemotePoolFallbackFactory.java b/m2pool-api/api-system/src/main/java/com/m2pool/system/api/factory/RemotePoolFallbackFactory.java new file mode 100644 index 0000000..b77ef8f --- /dev/null +++ b/m2pool-api/api-system/src/main/java/com/m2pool/system/api/factory/RemotePoolFallbackFactory.java @@ -0,0 +1,36 @@ +package com.m2pool.system.api.factory; + +import com.m2pool.common.core.Result.R; +import com.m2pool.system.api.RemotePoolService; +import com.m2pool.system.api.RemoteUserService; +import com.m2pool.system.api.entity.CloseAccountVo; +import com.m2pool.system.api.entity.SysUser; +import com.m2pool.system.api.entity.SysUserLeveDate; +import com.m2pool.system.api.model.LoginUser; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @Description 矿池服务 + * @Date 2026/1/5 10:17 + * @Author yyb + */ +@Component +public class RemotePoolFallbackFactory implements FallbackFactory { + private static final Logger log = LoggerFactory.getLogger(RemotePoolFallbackFactory.class); + + @Override + public RemotePoolService create(Throwable cause) { + log.error("矿池服务调用失败:{}",cause.getMessage()); + return new RemotePoolService(){ + @Override + public R deleteUserDataAndPutTemporaryTable() { + return R.fail("注销账户失败," + cause.getMessage()); + } + }; + } +} diff --git a/m2pool-auth/src/main/java/com/m2pool/auth/service/SysLoginService.java b/m2pool-auth/src/main/java/com/m2pool/auth/service/SysLoginService.java index 4f33d19..c7f1640 100644 --- a/m2pool-auth/src/main/java/com/m2pool/auth/service/SysLoginService.java +++ b/m2pool-auth/src/main/java/com/m2pool/auth/service/SysLoginService.java @@ -29,6 +29,7 @@ import com.m2pool.system.api.model.LoginUser; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import java.util.Map; import java.util.Set; @@ -560,7 +561,6 @@ public class SysLoginService { remoteLogService.saveLogininfor(logininfor, SecurityConstants.INNER); } - public R closeAccount(CloseAccountVo closeAccountVo){ String email = closeAccountVo.getUserEmail(); String emailCode = closeAccountVo.getECode(); diff --git a/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/controller/UserController.java b/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/controller/UserController.java index f8e22fb..a981cda 100644 --- a/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/controller/UserController.java +++ b/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/controller/UserController.java @@ -1,10 +1,12 @@ package com.m2pool.pool.controller; import com.github.pagehelper.PageHelper; +import com.m2pool.common.core.Result.R; import com.m2pool.common.core.utils.StringUtils; import com.m2pool.common.core.web.Result.AjaxResult; import com.m2pool.common.core.web.controller.BaseController; import com.m2pool.common.core.web.page.TableDataInfo; +import com.m2pool.common.security.annotation.InnerAuth; import com.m2pool.common.security.annotation.RequiresLogin; import com.m2pool.pool.dto.UserApiDto; import com.m2pool.pool.service.GoogleAuthService; @@ -12,6 +14,7 @@ import com.m2pool.pool.service.MinerAccountService; import com.m2pool.pool.service.UserMinserService; import com.m2pool.pool.vo.*; import com.m2pool.system.api.RemoteUserService; +import com.m2pool.system.api.entity.CloseAccountVo; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -243,4 +246,12 @@ public class UserController extends BaseController { return umService.deleteApi(vo); } + + @InnerAuth + @PostMapping("/deleteUserDataAndPutTemporaryTable") + @ApiOperation(value = "用户注销--删除用户(邮箱)对应相关信息并存入临时表") + public R deleteUserDataAndPutTemporaryTable(){ + return umService.deleteUserDataAndPutTemporaryTable(); + } + } diff --git a/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/mapper/TicketMapper.java b/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/mapper/TicketMapper.java index c9cef7f..258a5d1 100644 --- a/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/mapper/TicketMapper.java +++ b/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/mapper/TicketMapper.java @@ -4,6 +4,7 @@ import com.m2pool.pool.dto.*; import com.m2pool.pool.entity.M2File; import com.m2pool.pool.entity.Ticket; import com.m2pool.pool.vo.*; +import io.swagger.models.auth.In; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -154,5 +155,32 @@ public interface TicketMapper { */ public boolean insertRespon(@Param("vo") ResponTicketVo vo, @Param("name") String name); + /** + * 将ticket表数据写入ticket_temporary临时表 + * @param list + * @return + */ + public boolean insertTicketToTemporary(@Param("list") List list); + + /** + * 将ticket_supplement表数据写入ticket_supplement_temporary临时表 + * @param list + * @return + */ + public boolean insertTicketSupplementToTemporary(@Param("list") List list); + + /** + * 删除ticket表数据 + * @param email + * @return + */ + public boolean deleteTicket(@Param("email") String email); + + /** + * 删除ticket_supplement表数据 + * @param email + * @return + */ + public boolean deleteTicketSupplement(@Param("email") String email); } diff --git a/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/mapper/UserAccountMapper.java b/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/mapper/UserAccountMapper.java index 672a432..d242728 100644 --- a/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/mapper/UserAccountMapper.java +++ b/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/mapper/UserAccountMapper.java @@ -111,4 +111,48 @@ public interface UserAccountMapper { List getUserMinerByUserEmail(@Param("email") String email); + + /** + * 逻辑删除用户挖矿账户,将status改为11 + * @param username + * @return + */ + boolean deleteUserAccount(@Param("username") String username); + + /** + * 删除用户账户余额,先根据username查询user_miner_account的id,然后根据这些id匹配ma_id删除 + * @param username + * @return + */ + boolean deleteUserBalance(@Param("username") String username); + + + /** + * 删除用户只读页面 + * @param ids + * @return + */ + boolean deleteReadOnlyPage(@Param("ids") List ids); + + /** + * 将用户只读页面数据写入临时表 + * @param ids + * @return + */ + boolean insertReadOnlyPageToTemporary(@Param("ids") List ids); + + /** + * 将用户API数据写入临时表 + * @param ids + * @return + */ + boolean insertApiToTemporary(@Param("ids") List ids); + + /** + * 删除用户API + * @param ids + * @return + */ + boolean deleteApi(@Param("ids") List ids); + } diff --git a/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/service/UserMinserService.java b/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/service/UserMinserService.java index 26349b5..78e2f58 100644 --- a/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/service/UserMinserService.java +++ b/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/service/UserMinserService.java @@ -1,6 +1,7 @@ package com.m2pool.pool.service; +import com.m2pool.common.core.Result.R; import com.m2pool.common.core.web.Result.AjaxResult; import com.m2pool.pool.dto.UserApiDto; import com.m2pool.pool.vo.*; @@ -57,4 +58,10 @@ public interface UserMinserService { //public AjaxResult getMinerPower(MinerVo com.m2pool.chat.vo); // //public AjaxResult getMinerPowerDistribution(MinerVo com.m2pool.chat.vo); + + /** + * 用户注销--删除用户(邮箱)对应相关信息并存入临时表 + * return + */ + R deleteUserDataAndPutTemporaryTable(); } diff --git a/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/service/impl/UserMinerServiceImpl.java b/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/service/impl/UserMinerServiceImpl.java index 288f598..afbf064 100644 --- a/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/service/impl/UserMinerServiceImpl.java +++ b/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/service/impl/UserMinerServiceImpl.java @@ -2,6 +2,7 @@ package com.m2pool.pool.service.impl; import com.baomidou.dynamic.datasource.annotation.DSTransactional; import com.github.pagehelper.PageHelper; +import com.m2pool.common.core.Result.R; import com.m2pool.common.core.constant.CacheConstants; import com.m2pool.common.core.text.Convert; import com.m2pool.common.core.utils.ServletUtils; @@ -18,6 +19,7 @@ import com.m2pool.pool.entity.*; import com.m2pool.pool.enums.PoolAmount; import com.m2pool.pool.enums.Pools; import com.m2pool.pool.mapper.GoogleAuthMapper; +import com.m2pool.pool.mapper.TicketMapper; import com.m2pool.pool.mapper.UserAccountMapper; import com.m2pool.pool.service.UserMinserService; import com.m2pool.pool.utils.EnumUtils; @@ -29,6 +31,7 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.request.RequestContextHolder; import sun.net.util.IPAddressUtil; @@ -56,7 +59,8 @@ public class UserMinerServiceImpl implements UserMinserService { @Autowired private GoogleAuthMapper googleAuthMapper; - + @Autowired + private TicketMapper ticketMapper; @Value("${myenv.domain}") private String domain; @@ -760,4 +764,40 @@ public class UserMinerServiceImpl implements UserMinserService { } + @Override + @Transactional + public R deleteUserDataAndPutTemporaryTable() { + String username = SecurityUtils.getUsername(); + //删除挖矿账户 + uaMapper.deleteUserAccount(username); + uaMapper.deleteUserBalance(username); + //删除只读页面 + List readOnlyPagelist = uaMapper.getPageListByUser(username); + List readOnlyPageIds = readOnlyPagelist.stream().map(UserReadOnlyPageInfo::getId).collect(Collectors.toList()); + if (!readOnlyPageIds.isEmpty()){ + uaMapper.insertReadOnlyPageToTemporary(readOnlyPageIds); + uaMapper.deleteReadOnlyPage(readOnlyPageIds); + } + + //删除API + List apiList = uaMapper.getAPIListByUser(username); + List apiIds = apiList.stream().map(UserApi::getId).collect(Collectors.toList()); + if (!apiIds.isEmpty()){ + uaMapper.insertApiToTemporary(apiIds); + uaMapper.deleteApi(apiIds); + } + + //删除工单 + 工单补充内容 + List ticketList = ticketMapper.getPrivateTicketList(new PrivateTicketListVo(), username); + List ticketIds = ticketList.stream().map(PrivateTicketListDto::getId).collect(Collectors.toList()); + if (!ticketIds.isEmpty()) { + ticketMapper.insertTicketToTemporary(ticketIds); + ticketMapper.insertTicketSupplementToTemporary(ticketIds); + + ticketMapper.deleteTicketSupplement(username); + ticketMapper.deleteTicket(username); + } + return R.success(true); + } + } diff --git a/m2pool-modules/m2pool-pool/src/main/resources/mapper/pool/TicketMapper.xml b/m2pool-modules/m2pool-pool/src/main/resources/mapper/pool/TicketMapper.xml index e648643..eec2b04 100644 --- a/m2pool-modules/m2pool-pool/src/main/resources/mapper/pool/TicketMapper.xml +++ b/m2pool-modules/m2pool-pool/src/main/resources/mapper/pool/TicketMapper.xml @@ -289,4 +289,50 @@ #{vo.url},#{vo.fileName},#{vo.userName},#{vo.fileType},sysdate() ) + + + + INSERT INTO ticket_temporary ( + id, email, `desc`, create_time, status, update_time + ) + SELECT + id, email, `desc`, create_time, status, update_time + FROM + ticket + WHERE + id IN + + #{id} + + + + + + INSERT INTO ticket_supplement_temporary ( + id, ticket_id, content, files, video_file, image_file, audio_file, create_time + ) + SELECT + id, ticket_id, content, files, video_file, image_file, audio_file, create_time + FROM + ticket_supplement + WHERE + ticket_id IN + + #{id} + + + + + + DELETE FROM ticket_supplement + WHERE + ticket_id IN (SELECT id FROM ticket WHERE email = #{email}) + + + + + DELETE FROM ticket + WHERE + email = #{email} + diff --git a/m2pool-modules/m2pool-pool/src/main/resources/mapper/pool/UserAccountMapper.xml b/m2pool-modules/m2pool-pool/src/main/resources/mapper/pool/UserAccountMapper.xml index d7e5f2c..1ee693a 100644 --- a/m2pool-modules/m2pool-pool/src/main/resources/mapper/pool/UserAccountMapper.xml +++ b/m2pool-modules/m2pool-pool/src/main/resources/mapper/pool/UserAccountMapper.xml @@ -143,6 +143,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + UPDATE user_miner_account + SET status = 11 + WHERE `user` = #{username} + + + + + UPDATE user_account_balance + SET status = 99 + WHERE ma_id IN ( + SELECT id FROM user_miner_account WHERE `user` = #{username} + ) + + + + DELETE FROM user_page_info + WHERE id IN + + #{id} + + + + + + INSERT INTO user_page_info_temporary ( + id, `user`, account, coin, url_key, config, remark, create_time, update_time, lang + ) + SELECT + id, `user`, account, coin, url_key, config, remark, create_time, update_time, lang + FROM + user_page_info + WHERE + id IN + + #{id} + + + + + + INSERT INTO user_api_temporary ( + id, `user`, api_key, api_ip, perms + ) + SELECT + id, `user`, api_key, api_ip, perms + FROM + user_api + WHERE + id IN + + #{id} + + + + + + DELETE FROM user_api + WHERE id IN + + #{id} + + + + + diff --git a/m2pool-modules/m2pool-system/src/main/java/com/m2pool/system/controller/SysUserController.java b/m2pool-modules/m2pool-system/src/main/java/com/m2pool/system/controller/SysUserController.java index 54f98f2..ad6f61a 100644 --- a/m2pool-modules/m2pool-system/src/main/java/com/m2pool/system/controller/SysUserController.java +++ b/m2pool-modules/m2pool-system/src/main/java/com/m2pool/system/controller/SysUserController.java @@ -240,6 +240,7 @@ public class SysUserController extends BaseController { return R.success(list); } + @InnerAuth @PostMapping("/closeAccount") @ApiOperation(value = "用户注销") public AjaxResult closeAccount(@RequestBody SysUser sysUser){ diff --git a/m2pool-modules/m2pool-system/src/main/java/com/m2pool/system/service/impl/SysUserServiceImpl.java b/m2pool-modules/m2pool-system/src/main/java/com/m2pool/system/service/impl/SysUserServiceImpl.java index 87e3bc3..9afe32c 100644 --- a/m2pool-modules/m2pool-system/src/main/java/com/m2pool/system/service/impl/SysUserServiceImpl.java +++ b/m2pool-modules/m2pool-system/src/main/java/com/m2pool/system/service/impl/SysUserServiceImpl.java @@ -1,5 +1,6 @@ package com.m2pool.system.service.impl; +import com.m2pool.common.core.Result.R; import com.m2pool.common.core.constant.UserConstants; import com.m2pool.common.core.exception.ServiceException; import com.m2pool.common.core.utils.GoogleAuthenticator; @@ -8,6 +9,8 @@ import com.m2pool.common.core.utils.StringUtils; import com.m2pool.common.core.web.Result.AjaxResult; import com.m2pool.common.datascope.annotation.DataScope; import com.m2pool.common.security.utils.SecurityUtils; +import com.m2pool.system.api.RemotePoolService; +import com.m2pool.system.api.RemoteUserService; import com.m2pool.system.api.entity.*; import com.m2pool.system.entity.GoogleInfo; import com.m2pool.system.entity.SysUserRole; @@ -23,6 +26,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import javax.annotation.Resource; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; @@ -53,6 +57,9 @@ public class SysUserServiceImpl implements SysUserService { @Autowired private SysUserLevelMapper userLevelMapper; + @Resource + private RemotePoolService remotePoolService; + /** * 根据条件分页查询用户列表 @@ -442,8 +449,15 @@ public class SysUserServiceImpl implements SysUserService { } } + @Override + @Transactional public boolean closeAccount(SysUser sysUser) { + //删除用户相关信息 + R booleanR = remotePoolService.deleteUserDataAndPutTemporaryTable(); + if (R.FAIL == booleanR.getCode()){ + throw new ServiceException("服务器请求失败请稍后再试"); + } return userMapper.closeUser(sysUser); } } diff --git a/m2pool_update.sql b/m2pool_update.sql new file mode 100644 index 0000000..fd0151c --- /dev/null +++ b/m2pool_update.sql @@ -0,0 +1,56 @@ +USE `pool` + +-- 挖矿用户表及对应的收款信息表 新增修改时间 +ALTER TABLE user_miner_account ADD COLUMN `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'; +ALTER TABLE user_account_balance ADD COLUMN `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'; + + +CREATE TABLE `ticket_temporary` ( + `id` bigint NOT NULL AUTO_INCREMENT, + `email` varchar(320) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '联系邮箱', + `desc` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '问题描述', + `create_time` datetime NOT NULL COMMENT '创建时间', + `status` int NOT NULL DEFAULT '0' COMMENT '工单状态', + `update_time` datetime DEFAULT NULL COMMENT '更新日期', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ROW_FORMAT=COMPACT COMMENT='工单---删除临时存储表'; + + +CREATE TABLE `ticket_supplement_temporary` ( + `id` bigint NOT NULL AUTO_INCREMENT, + `ticket_id` bigint NOT NULL, + `content` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '', + `files` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL, + `video_file` varchar(360) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL, + `image_file` varchar(360) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL, + `audio_file` varchar(360) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL, + `create_time` datetime DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ROW_FORMAT=COMPACT COMMENT='工单补充内容---删除临时存储表'; + + +CREATE TABLE `user_page_info_temporary` ( + `id` int NOT NULL AUTO_INCREMENT, + `user` varchar(200) NOT NULL, + `account` varchar(30) NOT NULL, + `coin` varchar(30) NOT NULL, + `url_key` varchar(80) NOT NULL, + `config` varchar(50) NOT NULL, + `remark` varchar(200) DEFAULT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime DEFAULT NULL, + `lang` varchar(2) DEFAULT 'zh', + PRIMARY KEY (`id`), + UNIQUE KEY `url_key` (`url_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='用户只读页面---删除临时存储表'; + + +CREATE TABLE `user_api_temporary` ( + `id` bigint NOT NULL AUTO_INCREMENT, + `user` varchar(280) NOT NULL COMMENT '网站用户名,即邮箱', + `api_key` varchar(350) NOT NULL COMMENT 'api_key', + `api_ip` varchar(150) NOT NULL COMMENT '绑定ip', + `perms` varchar(50) NOT NULL COMMENT '权限', + PRIMARY KEY (`id`), + UNIQUE KEY `api_key` (`api_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='用户API---删除临时存储表';