# admin_app_api **Repository Path**: yyks2021/admin_app_api ## Basic Information - **Project Name**: admin_app_api - **Description**: admin_app_api - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-10-24 - **Last Updated**: 2024-07-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # admin-app-server ### 后端app ### 接口约定 response(响应) { "code": 0, "data": {}, "msg": "string" } code(状态说明) /** * 成功 */ public static final int SUCCESS = 200; /** * 常用失败 */ public static final int FAILED = 400; /** * token失效 */ public static final int TOKEN_ENABLE = 401; /** * 没有权限 */ public static final int NO_PERMISSION = 403; /** * 数据库中已存在该记录 */ public static final int DATA_IS_EXIST = 405; /** * 不好意思, 服务开小差了, 即刻为你修复 */ public static final int ERROR = 500; request(请求说明) 详情见swagger网址: [https://kuaisutest.chengguokj.com/adminapp/swagger-ui.html] ### sql 密码更新步骤 1. DELETE from account_info WHERE `type` = 6 //删除用户 2. 只调用一次接口 : (注意,只调用一次) http://localhost:8889/adminapp/admin/account/for/update/pwd ### 发版的相关步骤 ### 1.1.0版本 1. 添加相关的版本数据信息 --》 admin_app_info 2. 执行相关的sql --》 INSERT INTO `admin_app_info`(`id`, `type`, `version`, `path`, `status`, `create_time`, `server_type`, `version_code`, `reason`, `forced_update`) VALUES (4, 'iOS', '1.1.0', 'https://apps.apple.com/cn/app/id1461728306', b'1', now(), 'admin', '123123', '后端上线', 2); ### 1.2.0版本 执行sql: INSERT INTO `admin_app_info`(`type`, `version`, `path`, `status`, `create_time`, `server_type`, `version_code`, `reason`, `forced_update`) VALUES ('Android', '1.2.0', 'https://fir.im/yvh3', b'1', now(), 'admin', '123123', '发现新版本', 1); INSERT INTO `admin_app_info`(`type`, `version`, `path`, `status`, `create_time`, `server_type`, `version_code`, `reason`, `forced_update`) VALUES ('iOS', '1.2.0', 'https://apps.apple.com/cn/app/id1461728306', b'1', now(), 'admin', '123123', '发现新版本', 1); ### 1.3.0版本 (1) 地址表的新增, 管理员账户表的 省 市 区/县 的code字段的 新增 创建表执行的sql CREATE TABLE `address_division` ( `div_id` varchar(45) NOT NULL, `div_code` varchar(80) DEFAULT NULL COMMENT '行政区划代码', `div_name` varchar(50) DEFAULT NULL COMMENT '行政区划名称', `pinyin` varchar(500) DEFAULT NULL COMMENT '拼音名称', `div_code_parent` varchar(80) DEFAULT NULL COMMENT '上级行政区划代码', `div_level` varchar(100) DEFAULT NULL COMMENT '行政区划等级', `div_full_name` varchar(100) DEFAULT NULL COMMENT '行政区划完整名称', `div_distance` int(11) DEFAULT NULL COMMENT '离馆距离', `div_is_local` decimal(1,0) DEFAULT NULL COMMENT '是否本地', `enable` decimal(1,0) DEFAULT NULL COMMENT '记录是否启用生效,1表示生效,0表示无效', PRIMARY KEY (`div_id`) USING BTREE, KEY `IDX_T_DIV_U` (`div_code`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='地址信息表'; (2) 第一种:因为地址表数据来自于 http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2018/50.html 国家统计局的数据 所以建议 在本地数据完全导入后, 直接将数据导入到线上。 第二种:如果你的服务器很强大,也不卡,那么可以试试这个方式 执行接口 --> POST /admin/address/update/address/data 第一个执行 【注意】, 执行前需要先将地址表的数据清空掉 POST /admin/address/add/other/address 第二个执行 POST /admin/address/update/account/code 第三个执行 (3) 执行sql: INSERT INTO `admin_app_info`(`type`, `version`, `path`, `status`, `create_time`, `server_type`, `version_code`, `reason`, `forced_update`) VALUES ('Android', '1.3.0', 'https://fir.im/yvh3', b'1', now(), 'admin', '130130', '发现新版本', 0); INSERT INTO `admin_app_info`(`type`, `version`, `path`, `status`, `create_time`, `server_type`, `version_code`, `reason`, `forced_update`) VALUES ('iOS', '1.3.0', 'https://apps.apple.com/cn/app/id1461728306', b'1', now(), 'admin', '130130', '发现新版本', 0); ### 1.4.0版本 执行SQL信息 INSERT INTO `admin_app_info`(`type`, `version`, `path`, `status`, `create_time`, `server_type`, `version_code`, `reason`, `forced_update`) VALUES ('Android', '1.4.0', 'https://fir.im/yvh3', b'1', now(), 'admin', '140140', '发现新版本', 0); INSERT INTO `admin_app_info`(`type`, `version`, `path`, `status`, `create_time`, `server_type`, `version_code`, `reason`, `forced_update`) VALUES ('iOS', '1.4.0', 'https://apps.apple.com/cn/app/id1461728306', b'1', now(), 'admin', '140140', '发现新版本', 0); ### 1.4.1版本 ### 权限执行sql 菜单表 INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (99, 1, 'APP菜单管理', 'modules/sys/app_menu.html', NULL, 1, 'fa fa-th-list', 4); INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (100, 99, '查看', NULL, 'sys:appmenu:page,sys:appmenu:list,sys:appmenu:select,sys:appmenu:info', 2, NULL, 0); INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (101, 99, '新增', NULL, 'sys:appmenu:save', 2, NULL, 0); INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (102, 99, '修改', NULL, 'sys:appmenu:update', 2, NULL, 0); INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (103, 99, '删除', NULL, 'sys:appmenu:delete', 2, NULL, 0); 新APP菜单表执行 INSERT INTO `sys_app_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (89, 0, '订单管理', '/admin/order', NULL, 1, 'https://yeyu-kuaisu.oss-cn-hangzhou.aliyuncs.com//20190613/6637843921b64e3d8e14d4ef2e49bf43.png', 0); INSERT INTO `sys_app_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (90, 0, '用户管理', '/admin/account', NULL, 1, 'https://yeyu-kuaisu.oss-cn-hangzhou.aliyuncs.com//20190613/0597aec90c5f424aaf148992f3d9b329.png', 0); INSERT INTO `sys_app_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (91, 0, '统计分析', '/admin/statistics', NULL, 1, 'https://yeyu-kuaisu.oss-cn-hangzhou.aliyuncs.com//20190613/bd9cf125d7b1418c9d6f9a9baafe628f.png', 0); INSERT INTO `sys_app_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (92, 90, '省代理', '/admin/province', NULL, 1, 'https://yeyu-kuaisu.oss-cn-hangzhou.aliyuncs.com//20190613/48a6403457774e8fb2b4348091e2ef31.png', 0); INSERT INTO `sys_app_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (93, 90, '市代理', '/admin/city', NULL, 1, 'https://yeyu-kuaisu.oss-cn-hangzhou.aliyuncs.com//20190613/83c6b50034e044118088d0988ddaa866.png', 0); INSERT INTO `sys_app_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (94, 90, '区县运营', '/admin/county', NULL, 1, 'https://yeyu-kuaisu.oss-cn-hangzhou.aliyuncs.com//20190613/fbcfd118cec2483f8cc5acad1f62d1bb.png', 0); INSERT INTO `sys_app_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (96, 90, '酒店管理', '/admin/hotel/list', NULL, 1, 'https://yeyu-kuaisu.oss-cn-hangzhou.aliyuncs.com//20190613/638ace4f75a54699b4810bd3b213d1f4.png', 0); INSERT INTO `sys_app_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (97, 0, '平台管理', '/admin/platform', NULL, 1, 'https://yeyu-kuaisu.oss-cn-hangzhou.aliyuncs.com//20190613/1e7934d5a5ba40cfa03b548d6293f823.png', 0); INSERT INTO `sys_app_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (98, 97, '活动管理', '/admin/platform/activity', NULL, 1, 'https://yeyu-kuaisu.oss-cn-hangzhou.aliyuncs.com//20190613/224cfc625aff44058d3f4abd4ea56e2a.png', 0); INSERT INTO `sys_app_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (99, 97, '意见反馈', '/admin/platform/feedback', NULL, 1, 'https://yeyu-kuaisu.oss-cn-hangzhou.aliyuncs.com//20190613/3ab2fc0251b64b26a5404ba70cc05458.png', 0); INSERT INTO `sys_app_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (100, 97, '帮助中心', '/admin/platform/help', NULL, 1, 'https://yeyu-kuaisu.oss-cn-hangzhou.aliyuncs.com//20190613/5bf1144bf29a498bb8b47ae26446f90e.png', 0); INSERT INTO `sys_app_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (101, 0, '酒店信息', '/admin/hotel/info', NULL, 1, 'https://yeyu-kuaisu.oss-cn-hangzhou.aliyuncs.com//20190613/c7c8d01c94464647b7e99a72cd15d581.png', 0); INSERT INTO `sys_app_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (102, 0, '入住须知', '/admin/hotel/note', NULL, 1, 'https://yeyu-kuaisu.oss-cn-hangzhou.aliyuncs.com//20190613/ac10418fc72d4e879a15c3d80a7ebb0a.png', 1); INSERT INTO `sys_app_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (103, 0, '客房管理', '/admin/room', NULL, 1, 'https://yeyu-kuaisu.oss-cn-hangzhou.aliyuncs.com//20190613/62a5a36e8ac343998748ce18350f8604.png', 0); INSERT INTO `admin_app_info`(`type`, `version`, `path`, `status`, `create_time`, `server_type`, `version_code`, `reason`, `forced_update`) VALUES ('Android', '1.4.1', 'https://fir.im/yvh3', b'1', now(), 'admin', '141141', '发现新版本', 0); INSERT INTO `admin_app_info`(`type`, `version`, `path`, `status`, `create_time`, `server_type`, `version_code`, `reason`, `forced_update`) VALUES ('iOS', '1.4.1', 'https://apps.apple.com/cn/app/id1461728306', b'1', now(), 'admin', '141141', '发现新版本', 0); ### 查询优化sql 1.如果是有函数的查询比如 FIND_IN_SET(id, 函数) , 最好先查询出函数的值, 然后在 进行Find_in_set的筛选 select * FROM account_info, (select getChildren(1403) aids) ai where FIND_IN_SET(id, aids); ### 常用的测试账号 总公司 123456 浙江省运营中心 123456 杭州市代理 123456 杭州下城区运营中心 123456 夜鱼体验酒店 123456 1.3.0-tag_buf版(子账号的相关说明): 账号表: manager_id --> 如果这个字段不为空,说明是子账号; 所以,如果有子账号登陆,那么用到子账号查询的话,需要转换成manager_id 进行搜索之类的操作 【代码需要全局扫描一下】 ### 权限的关联性 --》 事物 + token的try catch的 (回滚失效) 一套完整的权限系统,解决token的存放,路由的控制等等。 解决, 只要在抛出异常时 有返回值也可以解决 ### 添加的地址表的 解决方案 1.地址表的数据只包含 省、市、区/县, 更新时 通过接口界面更新 2.账户中的原始数据需要重新更新。 将地址的code进行记录(建议新增 账户地址关联表) 3.对一些找不到数据的信息需要特殊处理,(方案有: (1)手动修改, (2)给web界面进行特殊更新, 当然要 给用户提醒,不然用户也会不知道) ### 程序员的宗旨 1.做好每一件小事, 优化好每一个步骤, 一定会有一个不一样的人生。 2.明明有问题,却会推迟说。靠运气永远是不行的。 3.愿你天黑有灯,下雨有伞, 愿你善其身 ### 分页的相关说明 1.使用的为Mybatis中的分页插件page 2.如果service层直接返回分页的 DTO ==》 定义需要 1步 .CommonPage commonPage = null; 2步 .MyBeanUtils.convertCommonPageList(commonPage,DTO.class) end .return 2步 如果分页返回需要对DTO进行 相关的补充 ==》 定义需要 1步 .CommonPage DTOCommonPage = new CommonPage<>(); 2步 .DTOCommonPage = MyBeanUtils.convertCommonPageList(commonPage,DTO.class) end .retrun DTOCommonPage; 3.【注意】, 可能这种方法并不是最雅观、简洁的写法, 但是一定可以针对NULL的小概率出现 ### 构造函数注入Bean--> @Autowired 1.接口Service、Mapper相关的注入采用 构造函数的形式将其 创建。 ### app权限 1.最早的源码(可以弃用) AccountRouteEnum[] enumList = AccountRouteEnum.values(); switch (accountDTO.getType()) { case 1: for (AccountRouteEnum accountRouteEnum : enumList) { if (!accountRouteEnum.getSort().equals(AccountRouteEnum.HOTEL.getSort()) && !accountRouteEnum.getSort().equals(AccountRouteEnum.ROOM.getSort()) && !accountRouteEnum.getSort().equals(AccountRouteEnum.DESCRIPTION.getSort())) { AppRouteDTO routeDTO = new AppRouteDTO(); routeDTO.setRouteUrl(accountRouteEnum.getUrl()); routeDTO.setRouteName(accountRouteEnum.getName()); routeDTO.setRouteSort(accountRouteEnum.getSort()); routeDTOList.add(routeDTO); } } break; case 2: for (AccountRouteEnum accountRouteEnum : enumList) { if (!accountRouteEnum.getSort().equals(AccountRouteEnum.HOTEL.getSort()) && !accountRouteEnum.getSort().equals(AccountRouteEnum.ROOM.getSort()) && !accountRouteEnum.getSort().equals(AccountRouteEnum.DESCRIPTION.getSort()) && !accountRouteEnum.getSort().equals(AccountRouteEnum.PROVINCE.getSort())) { AppRouteDTO routeDTO = new AppRouteDTO(); routeDTO.setRouteUrl(accountRouteEnum.getUrl()); routeDTO.setRouteName(accountRouteEnum.getName()); routeDTO.setRouteSort(accountRouteEnum.getSort()); routeDTOList.add(routeDTO); } } break; default: break; }