编程开发 --- 安卓全自动接单
需求:
客户需要做一个纯手机接单的app,电脑接单也可以实现只是政策要求手机接单。因为晚上时常会遗忘订单,导致客户绩效考核。
解决思路:
既然是手机接单就有两种方法。root法和免root的无障碍法,root法有工具task app,免root有工具 一触即发app和自动精灵等等,我个人认为一触即发简单上手快推荐。
一触即发的条件判断有,截图法和控件查找法,开始我用控件法,但是app是uniapp开发的混合app,不能存在安卓控件的说法。因此只能使用截图法。
难点:
如果只是判断后点击那还简单,但是除了正常接单流程外还有一些异常要处理,下面一一列举
接单app和客户app需要持久化保活,在我之前的文章有处理办法。
网络不稳定导致的白色屏幕,这算是一种异常。可以通过铃声提醒的方式解决。
token会6小时后过期,过期后要么重新登录,要么自动续期。如果自动续期,需要重新编写app太复杂。这里采用重新登陆的方法,但是重新登陆需要短信验证码,因此引入新的问题,一触即发如何读取短信验证码。我的处理思路是,在检测到登陆超时,自动点击发送验证码,在接收验证码的手机上安装监听指定短信的app并转发给中间服务器,中间服务器临时保存验证码并提供获取验证码接口, 一触即发app发送请求获取验证码并填入app登陆。
细节:
我们先说一触即发脚本,在使用前需要在app里开启权限,开启无障碍、忽略电池优化,悬浮窗,所有的权限管理,在设置里显示 识图显示矩形,上键停止脚本
//在一触即发导入脚本即可使用,这里在一个脚本处理了两个app,思路就是截图判断是否在某一页或者是订单,是的话点击即可,包含异常处理 //打开 铁塔aiot app并处理接单 //定义两个变量 变量 永真变量 = 真; 变量 验证码 = ""; //开始循环接单 判断循环首 永真变量 = true 打开应用("com.chinatower.powerservice"); 随机延时(5000,5000); 弹出提示("开始查找aiot订单"); //这里判断是否是接单的页面,依据是特征图片 如果 屏幕中是否包含图片(/storage/emulated/0/YiChuJiFaProject/workSpaceImage/img_ADBA2F4708FDE61B5248F2B5A19A239E.dddbbb,精确度:80 ,null) 则 弹出提示("找到工单模块,管理工单"); //点击接单模块 点击(222,855,1); 点击(222,855,1); 随机延时(10000,10000); //检查有没有订单; 如果 屏幕中是否包含文字("暂无内容" ,'node' ,null) 则 弹出提示("暂无内容"); 返回键(); //登录异常判断; 如果 屏幕中是否包含文字("登录超时" ,'node' ,null) 或 屏幕中是否包含文字("账号验证" ,'node' ,null) 则 弹出提示("登录异常处理"); 判断循环首 永真变量 = true 震动(长)(); 铃声提示(); 弹出提示("请重新登录"); 关闭应用("com.chinatower.powerservice"); //因为关闭方法不起作用只能三个返回表示关闭app 返回键(); 返回键(); 返回键(); // 任务键(); 打开应用("com.chinatower.powerservice"); 弹出提示("正在输入密码"); //删除登录; 点击(960,726,1); 输入文字(280,754,"guokai1"); //删除密码; 点击(889,873,1); 输入文字(304,879,"82212991@Lbb520"); //同意协议; 点击(89,2307,1); //点击登录; 点击(549,1393,1); 随机延时(3000,3000); //发送验证码; 点击(882,916,1); 随机延时(5000,5000); 验证码 = 网页访问("http://125.75.111.54:9002/api/sms/latest" ,'GET' ,header:{} ,data:{}); 验证码 = 取文本中间("{验证码}","验证码",","); 弹出提示("成功获取验证码{验证码}"); 弹出提示("成功获取验证码{验证码}"); 弹出提示("成功获取验证码{验证码}"); 弹出提示("成功获取验证码{验证码}"); 输入文字(361,926,"{验证码}"); //登录; 点击(515,1413,1); 如果 屏幕中是否包含文字("设备汇总" ,'node' ,null) 或 屏幕中是否包含文字("常用功能" ,'node' ,null) 或 屏幕中是否包含文字("修改密码" ,'node' ,null) 或 屏幕中是否包含文字("待办工单" ,'node' ,null) 则 弹出提示("登录成功进入接单"); 退出循环; 否则 // //; 弹出提示("登录失败重新登录"); 结束 如果 判断循环尾 否则 弹出提示("未检测到登录异常,尝试接单"); 结束 如果 否则 弹出提示("发现工单"); //登录异常判断; 如果 屏幕中是否包含文字("登录超时" ,'node' ,null) 或 屏幕中是否包含文字("账号验证" ,'node' ,null) 则 弹出提示("登录异常处理"); 判断循环首 永真变量 = true 震动(长)(); 铃声提示(); 弹出提示("请重新登录"); 关闭应用("com.chinatower.powerservice"); 返回键(); 返回键(); 返回键(); // 任务键(); 打开应用("com.chinatower.powerservice"); 弹出提示("正在输入密码"); //删除登录; 点击(960,726,1); 输入文字(280,754,"guokai1"); //删除密码; 点击(889,873,1); 输入文字(304,879,"82212991@Lbb520"); //同意协议; 点击(89,2307,1); //点击登录; 点击(549,1393,1); 随机延时(3000,3000); //发送验证码; 点击(882,916,1); 随机延时(5000,5000); 验证码 = 网页访问("http://125.75.111.54:9002/api/sms/latest" ,'GET' ,header:{} ,data:{}); 验证码 = 取文本中间("{验证码}","验证码",","); 弹出提示("成功获取验证码{验证码}"); 弹出提示("成功获取验证码{验证码}"); 弹出提示("成功获取验证码{验证码}"); 弹出提示("成功获取验证码{验证码}"); 输入文字(361,926,"{验证码}"); //登录; 点击(515,1413,1); 如果 屏幕中是否包含文字("设备汇总" ,'node' ,null) 或 屏幕中是否包含文字("常用功能" ,'node' ,null) 或 屏幕中是否包含文字("修改密码" ,'node' ,null) 或 屏幕中是否包含文字("待办工单" ,'node' ,null) 则 弹出提示("登录成功进入接单"); 退出循环; 否则 // //; 弹出提示("登录失败重新登录"); 结束 如果 判断循环尾 否则 弹出提示("未检测到登录异常,尝试接单"); 结束 如果 随机延时(5000,5000); //进入订单; 点击图片("/storage/emulated/0/YiChuJiFaProject/workSpaceImage/img_5561A0D3E52614D9F9D6371B196D921B_copy_copy_copy.dddbbb",精确度: 80,null,false); 点击(508,530,1); 点击(467,512,1); // 点击(375,256,1); 随机延时(3000,3000); //接单; 点击图片("/storage/emulated/0/YiChuJiFaProject/workSpaceImage/img_D354F18F6107B973B80B39984C35A4E0.dddbbb",精确度: 55,null,false); 点击(547,2307,1); //接单; // 点击(368,1244,1); //确定; 点击图片("/storage/emulated/0/YiChuJiFaProject/workSpaceImage/img_1B6BF0D4DD8304905281333C863850C3.dddbbb",精确度: 80,null,false); 点击(684,1424,1); //确定; // 点击(455,754,1); 返回键(); // 点击图片("/storage/emulated/0/YiChuJiFaProject/workSpaceImage/img_E22206D6CB4ECE772D26A7CE5E21A5FF.dddbbb",精确度: 80,null,false); 点击(255,840,1); 点击(502,560,1); 结束 如果 否则 弹出提示("未找到"); 点击(138,2268,1); 返回键(); //登录异常判断; 如果 屏幕中是否包含文字("登录超时" ,'node' ,null) 或 屏幕中是否包含文字("账号验证" ,'node' ,null) 则 弹出提示("登录异常处理"); 判断循环首 永真变量 = true 震动(长)(); 铃声提示(); 弹出提示("请重新登录"); 关闭应用("com.chinatower.powerservice"); 返回键(); 返回键(); 返回键(); // 任务键(); 打开应用("com.chinatower.powerservice"); 弹出提示("正在输入密码"); //删除登录; 点击(960,726,1); 输入文字(280,754,"guokai1"); //删除密码; 点击(889,873,1); 输入文字(304,879,"82212991@Lbb520"); //同意协议; 点击(89,2307,1); //点击登录; 点击(549,1393,1); 随机延时(3000,3000); //发送验证码; 点击(882,916,1); 随机延时(5000,5000); 验证码 = 网页访问("http://125.75.111.54:9002/api/sms/latest" ,'GET' ,header:{} ,data:{}); 验证码 = 取文本中间("{验证码}","验证码",","); 弹出提示("成功获取验证码{验证码}"); 弹出提示("成功获取验证码{验证码}"); 弹出提示("成功获取验证码{验证码}"); 弹出提示("成功获取验证码{验证码}"); 输入文字(361,926,"{验证码}"); //登录; 点击(515,1413,1); 如果 屏幕中是否包含文字("设备汇总" ,'node' ,null) 或 屏幕中是否包含文字("常用功能" ,'node' ,null) 或 屏幕中是否包含文字("修改密码" ,'node' ,null) 或 屏幕中是否包含文字("待办工单" ,'node' ,null) 则 弹出提示("登录成功进入接单"); 退出循环; 否则 // //; 弹出提示("登录失败重新登录"); 结束 如果 判断循环尾 否则 弹出提示("未检测到登录异常,尝试接单"); 结束 如果 结束 如果 随机延时(5000,5000); //处理铁塔新网管app 打开应用("com.chinatower.energymonitor"); 随机延时(5000,5000); 弹出提示("开始查找网管订单"); 如果 屏幕中是否包含图片(/storage/emulated/0/YiChuJiFaProject/workSpaceImage/img_2C97C45A842E917408B9666466501638.dddbbb,精确度:91 ,null) 则 弹出提示("找到工单模块,管理工单"); 弹出提示("找到工单模块,管理工单"); 随机延时(6000,6000); // 点击图片("/storage/emulated/0/YiChuJiFaProject/workSpaceImage/img_86BA010D78C5584204EDB769C5C22F38.dddbbb",精确度: 80,null,false); 点击(279,827,1); // 点击图片("/storage/emulated/0/YiChuJiFaProject/workSpaceImage/img_9D13BC164F494F7A9CF33E51C67877B7.dddbbb",精确度: 50,null,false); //检查有没有订单; 如果 屏幕中是否包含图片(/storage/emulated/0/YiChuJiFaProject/workSpaceImage/img_E597066365DD74373F2834FCF8BD242D.dddbbb,精确度:100 ,null) 或 屏幕中是否包含文字("暂无内容" ,'node' ,null) 则 弹出提示("暂无内容"); //暂无; 返回键(); //登录异常判断; 如果 屏幕中是否包含文字("登录超时" ,'node' ,null) 或 屏幕中是否包含文字("记住密码" ,'node' ,null) 或 屏幕中是否包含文字("您的登录状态已过期" ,'node' ,null) 或 屏幕中是否包含文字("获取验证码" ,'node' ,null) 则 弹出提示("登录异常处理"); 判断循环首 永真变量 = true 震动(长)(); 铃声提示(); 弹出提示("请重新登录"); 关闭应用("com.chinatower.energymonitor"); 返回键(); 返回键(); 返回键(); // 任务键(); 打开应用("com.chinatower.energymonitor"); 弹出提示("正在输入密码"); //进入账号; 点击(230,714,1); //删除账号; 点击(937,703,1); 输入文字(237,727,"guokai1"); //进入密码; 点击(318,929,1); //删除密码; 点击(877,898,1); 输入文字(328,928,"82212991@Lbb520"); //同意协议; 点击(86,2307,1); //点击登录; 点击(556,1379,1); 点击(792,903,1); 点击文字("获取验证码",'node',null,false); 随机延时(5000,5000); 验证码 = 网页访问("http://125.75.111.54:9002/api/sms/latest" ,'GET' ,header:{} ,data:{}); 验证码 = 取文本中间("{验证码}","验证码:",","); 弹出提示("成功获取验证码{验证码}"); 弹出提示("成功获取验证码{验证码}"); 弹出提示("成功获取验证码{验证码}"); 弹出提示("成功获取验证码{验证码}"); 输入文字(303,921,"{验证码}"); //正式登录; 点击(507,1248,1); 如果 屏幕中是否包含文字("设备汇总" ,'node' ,null) 或 屏幕中是否包含文字("常用功能" ,'node' ,null) 或 屏幕中是否包含文字("修改密码" ,'node' ,null) 或 屏幕中是否包含文字("待办工单" ,'node' ,null) 则 弹出提示("登录成功进入接单"); 退出循环; 否则 // //; 弹出提示("登录失败重新登录"); 结束 如果 判断循环尾 否则 弹出提示("未检测到登录异常,尝试接单"); 结束 如果 否则 随机延时(5000,5000); //判断是否有单; 如果 屏幕中是否包含图片(/storage/emulated/0/YiChuJiFaProject/workSpaceImage/img_695B9FA0C04A43180E293D54E4C6B9F7.dddbbb,精确度:80 ,null) 则 //如果没有代办,则进行语音提示,用户重新登录; 随机延时(5000,5000); // 如果 屏幕中是否包含文字("登录超时" ,'node' ,null) 或 屏幕中是否包含文字("您的登录状态已过期" ,'node' ,null) 或 屏幕中是否包含图片(/storage/emulated/0/YiChuJiFaProject/workSpaceImage/img_E59F283A11FDE68C8F860D293DA1464B.dddbbb,精确度:80 ,null) 则 弹出提示("异常处理"); 判断循环首 永真变量 = true 震动(长)(); 铃声提示(); 弹出提示("请重新登录"); 如果 屏幕中是否包含图片(/storage/emulated/0/YiChuJiFaProject/workSpaceImage/img_7D02EA11322C5FFF2151EB4269873D33.dddbbb,精确度:80 ,null) 且 屏幕中是否包含图片(/storage/emulated/0/YiChuJiFaProject/workSpaceImage/img_92139E94017B0A1680B46CDAA6B52671.dddbbb,精确度:80 ,null) 且 屏幕中是否包含文字("设备汇总" ,'node' ,null) 则 退出循环; 否则 结束 如果 判断循环尾 否则 结束 如果 //登录异常判断; 如果 屏幕中是否包含文字("登录超时" ,'node' ,null) 或 屏幕中是否包含文字("记住密码" ,'node' ,null) 或 屏幕中是否包含文字("您的登录状态已过期" ,'node' ,null) 或 屏幕中是否包含文字("获取验证码" ,'node' ,null) 则 弹出提示("登录异常处理"); 判断循环首 永真变量 = true 震动(长)(); 铃声提示(); 弹出提示("请重新登录"); 关闭应用("com.chinatower.energymonitor"); 返回键(); 返回键(); 返回键(); // 任务键(); 打开应用("com.chinatower.energymonitor"); 弹出提示("正在输入密码"); //进入账号; 点击(230,714,1); //删除账号; 点击(937,703,1); 输入文字(237,727,"guokai1"); //进入密码; 点击(318,929,1); //删除密码; 点击(877,898,1); 输入文字(328,928,"82212991@Lbb520"); //同意协议; 点击(86,2307,1); //点击登录; 点击(556,1379,1); 点击(792,903,1); 点击文字("获取验证码",'node',null,false); 随机延时(5000,5000); 验证码 = 网页访问("http://125.75.111.54:9002/api/sms/latest" ,'GET' ,header:{} ,data:{}); 验证码 = 取文本中间("{验证码}","验证码:",","); 弹出提示("成功获取验证码{验证码}"); 弹出提示("成功获取验证码{验证码}"); 弹出提示("成功获取验证码{验证码}"); 弹出提示("成功获取验证码{验证码}"); 输入文字(303,921,"{验证码}"); //正式登录; 点击(507,1248,1); 如果 屏幕中是否包含文字("设备汇总" ,'node' ,null) 或 屏幕中是否包含文字("常用功能" ,'node' ,null) 或 屏幕中是否包含文字("修改密码" ,'node' ,null) 或 屏幕中是否包含文字("待办工单" ,'node' ,null) 则 弹出提示("登录成功进入接单"); 退出循环; 否则 // //; 弹出提示("登录失败重新登录"); 结束 如果 判断循环尾 否则 弹出提示("未检测到登录异常,尝试接单"); 结束 如果 弹出提示("发现工单"); //进入订单; 点击图片("/storage/emulated/0/YiChuJiFaProject/workSpaceImage/img_5561A0D3E52614D9F9D6371B196D921B_copy_copy_copy.dddbbb",精确度: 84,null,false); 点击(484,483,1); 滑动([{手势: &手势1,time: 789}],false); 滑动([{手势: &手势1,time: 1326}],false); //接单; 点击图片("/storage/emulated/0/YiChuJiFaProject/workSpaceImage/img_EDF06D95AE95876317FB3C557B35399C_copy_copy_copy_copy.dddbbb",精确度: 80,null,false); 点击(518,2281,1); //确定; 点击图片("/storage/emulated/0/YiChuJiFaProject/workSpaceImage/img_9920D481D731BDCF0293B1FFE2BD528F_copy_copy.dddbbb",精确度: 80,null,false); 返回键(); 否则 //登录异常处理; // 打开应用("com.chinatower.energymonitor"); // 判断循环首 永真变量 = true 铃声提示(); 震动(长)(); 弹出提示("请重新登录"); 如果 屏幕中是否包含图片(/storage/emulated/0/YiChuJiFaProject/workSpaceImage/img_BEFCAB3735BC5271347D245290F22261.dddbbb,精确度:80 ,null) 则 退出循环; 结束 如果 如果 屏幕中是否包含图片(/storage/emulated/0/YiChuJiFaProject/workSpaceImage/img_BC254EAC6CA641960C1E3D004394ED30.dddbbb,精确度:80 ,null) 则 退出循环; 否则 结束 如果 如果 屏幕中是否包含图片(/storage/emulated/0/YiChuJiFaProject/workSpaceImage/img_F403337EC41FD824B66F859F342663D7.dddbbb,精确度:80 ,null) 则 退出循环; 结束 如果 如果 屏幕中是否包含图片(/storage/emulated/0/YiChuJiFaProject/workSpaceImage/img_E0332EC3573B2E895156835F0A6AB702.dddbbb,精确度:80 ,null) 则 退出循环; 结束 如果 判断循环尾 //白屏检测; 判断循环首 永真变量 = true 震动(长)(); 铃声提示(); 弹出提示("请重新登录"); 关闭应用("com.chinatower.energymonitor"); 返回键(); 返回键(); 返回键(); // 任务键(); 打开应用("com.chinatower.energymonitor"); 弹出提示("正在输入密码"); //进入账号; 点击(230,714,1); //删除账号; 点击(937,703,1); 输入文字(237,727,"guokai1"); //进入密码; 点击(318,929,1); //删除密码; 点击(877,898,1); 输入文字(328,928,"82212991@Lbb520"); //同意协议; 点击(86,2307,1); //点击登录; 点击(556,1379,1); 点击(792,903,1); 点击文字("获取验证码",'node',null,false); 随机延时(5000,5000); 验证码 = 网页访问("http://125.75.111.54:9002/api/sms/latest" ,'GET' ,header:{} ,data:{}); 验证码 = 取文本中间("{验证码}","验证码:",","); 弹出提示("成功获取验证码{验证码}"); 弹出提示("成功获取验证码{验证码}"); 弹出提示("成功获取验证码{验证码}"); 弹出提示("成功获取验证码{验证码}"); 输入文字(303,921,"{验证码}"); //正式登录; 点击(507,1248,1); 如果 屏幕中是否包含文字("设备汇总" ,'node' ,null) 或 屏幕中是否包含文字("常用功能" ,'node' ,null) 或 屏幕中是否包含文字("修改密码" ,'node' ,null) 或 屏幕中是否包含文字("待办工单" ,'node' ,null) 则 弹出提示("登录成功进入接单"); 退出循环; 否则 // //; 弹出提示("登录失败重新登录,下一次循环"); 结束 如果 判断循环尾 结束 如果 结束 如果 否则 弹出提示("未找到模块"); 铃声提示(); 点击(159,2249,1); 点击(138,2268,1); //防止接单界面出现白屏,后卡住; 返回键(); //登录异常判断; 如果 屏幕中是否包含文字("登录超时" ,'node' ,null) 或 屏幕中是否包含文字("记住密码" ,'node' ,null) 或 屏幕中是否包含文字("您的登录状态已过期" ,'node' ,null) 或 屏幕中是否包含文字("获取验证码" ,'node' ,null) 则 弹出提示("登录异常处理"); 判断循环首 永真变量 = true 震动(长)(); 铃声提示(); 弹出提示("请重新登录"); 关闭应用("com.chinatower.energymonitor"); 返回键(); 返回键(); 返回键(); // 任务键(); 打开应用("com.chinatower.energymonitor"); 弹出提示("正在输入密码"); //进入账号; 点击(230,714,1); //删除账号; 点击(937,703,1); 输入文字(237,727,"guokai1"); //进入密码; 点击(318,929,1); //删除密码; 点击(877,898,1); 输入文字(328,928,"82212991@Lbb520"); //同意协议; 点击(86,2307,1); //点击登录; 点击(556,1379,1); 点击(792,903,1); 点击文字("获取验证码",'node',null,false); 随机延时(5000,5000); 验证码 = 网页访问("http://125.75.111.54:9002/api/sms/latest" ,'GET' ,header:{} ,data:{}); 验证码 = 取文本中间("{验证码}","验证码:",","); 弹出提示("成功获取验证码{验证码}"); 弹出提示("成功获取验证码{验证码}"); 弹出提示("成功获取验证码{验证码}"); 弹出提示("成功获取验证码{验证码}"); 输入文字(303,921,"{验证码}"); //正式登录; 点击(507,1248,1); 如果 屏幕中是否包含文字("设备汇总" ,'node' ,null) 或 屏幕中是否包含文字("常用功能" ,'node' ,null) 或 屏幕中是否包含文字("修改密码" ,'node' ,null) 或 屏幕中是否包含文字("待办工单" ,'node' ,null) 则 弹出提示("登录成功进入接单"); 退出循环; 否则 // //; 弹出提示("登录失败重新登录"); 结束 如果 判断循环尾 否则 弹出提示("未检测到登录异常,尝试接单"); 结束 如果 结束 如果 随机延时(5000,5000); 判断循环尾
服务器端使用springboot,代码如下、
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.0</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>demo</description> <properties> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- Spring Boot Starter Web 包含了 Spring MVC 和内嵌的 Tomcat --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Spring Boot Starter Data JPA 提供了对 Spring Data 和 JPA 的支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/javax.persistence/persistence-api --> <dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1.0</version> </dependency> <!-- H2 Database,一个内存数据库,用于快速开发和测试 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
application.properties
# H2 ?????
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
# ????? H2 ???
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
server.port=9002
package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.domain.EntityScan; @SpringBootApplication @EntityScan(basePackages = "com.example.demo") // 指定实体类的扫描路径 public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
package com.example.demo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @RequestMapping("/api/sms") public class SmsController { @Autowired private SmsRepository smsRepository; @PostMapping public void receiveSms( SmsRequest smsRequest) { SmsEntity smsEntity = new SmsEntity(); smsEntity.setPhoneNumber(smsRequest.getPhoneNumber()); smsEntity.setMessage(smsRequest.getMessage()); smsRepository.save(smsEntity); } @GetMapping("/latest") public SmsEntity getLatestSms() { // 从数据库中获取最新的一条短信 return smsRepository.findFirstByOrderByIdDesc().orElse(null); } @GetMapping("/all") public List<SmsEntity> getAllSms() { // 从数据库中获取所有短信 return smsRepository.findAll(); } }
package com.example.demo; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; @Entity public class SmsEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } private String phoneNumber; private String message; // getters and setters }
package com.example.demo; import org.springframework.data.jpa.repository.JpaRepository; import java.util.Optional; public interface SmsRepository extends JpaRepository<SmsEntity, Long> { Optional<SmsEntity> findFirstByOrderByIdDesc(); // 更新这里 }
package com.example.demo; public class SmsRequest { public String getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } public String getMessage() { } public void setMessage(String message) { this.message = message; } private String phoneNumber; private String message; // getters and setters }
安卓转发短信的实现
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <!-- 宣告应用使用的硬件特性,这里声明了对电话功能的需求,但设置为非必需 --> <uses-feature android:name="android.hardware.telephony" android:required="false" /> <!-- 宣告应用所需的权限 --> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.INTERNET" /> <!-- 注意:上面的 INTERNET 权限只需要声明一次 --> <application <!-- 定义应用的网络安全配置 --> android:networkSecurityConfig="@xml/network_security_config" <!-- 允许应用进行备份 --> android:allowBackup="true" <!-- 定义数据提取规则 --> android:dataExtractionRules="@xml/data_extraction_rules" <!-- 定义完整备份内容规则 --> android:fullBackupContent="@xml/backup_rules" <!-- 设置应用图标 --> android:icon="@mipmap/ic_launcher" <!-- 设置应用标签 --> android:label="@string/app_name" <!-- 设置圆形应用图标 --> android:roundIcon="@mipmap/ic_launcher_round" <!-- 设置应用支持从右到左的布局 --> android:supportsRtl="true" <!-- 设置应用主题 --> android:theme="@style/Theme.MyApplication" <!-- 定义目标 API 版本,这里设置为 31 --> tools:targetApi="31"> <!-- 定义应用的主 Activity,会在启动时被调用 --> <activity android:name=".MainActivity" <!-- 定义 Activity 是否可以被其他应用组件访问 --> android:exported="true"> <intent-filter> <!-- 定义 Activity 接收的主要动作 --> <action android:name="android.intent.action.MAIN" /> <!-- 定义 Activity 接收的主要类别 --> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- 定义短信接收器,用于接收短信 --> <receiver android:name=".SmsReceiver" <!-- 定义接收器是否可以被其他应用组件访问 --> android:exported="true"> <intent-filter> <!-- 定义接收器接收的主要动作 --> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> <!-- 定义后台服务,用于处理短信 --> <service android:name=".SmsService" /> </application> </manifest>
// 包名,这里表示该文件属于com.example.myapplication包 package com.example.myapplication; // 导入必要的 Android 类 import android.content.Intent; import android.os.Bundle; import android.widget.CompoundButton; import android.widget.Switch; import androidx.appcompat.app.AppCompatActivity; // MainActivity 类,继承自 AppCompatActivity 类 public class MainActivity extends AppCompatActivity { // 声明 Switch 类型的成员变量 smsSwitch private Switch smsSwitch; // 在 Activity 创建时调用的方法 @Override protected void onCreate(Bundle savedInstanceState) { // 调用父类的 onCreate 方法 super.onCreate(savedInstanceState); // 设置当前 Activity 使用的布局文件 setContentView(R.layout.activity_main); // 通过布局文件中定义的 ID 获取 Switch 控件的实例 smsSwitch = findViewById(R.id.smsSwitch); // 为 Switch 控件设置状态变更监听器 smsSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { // 在 Switch 状态发生变化时调用的方法 @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // 判断 Switch 的状态是否为选中 if (isChecked) { // 如果选中,启动 SmsService 服务 startService(new Intent(MainActivity.this, SmsService.class)); } else { // 如果未选中,停止 SmsService 服务 stopService(new Intent(MainActivity.this, SmsService.class)); } } }); } }
package com.example.myapplication; // SmsService.java import android.app.Service; import android.content.Intent; import android.content.IntentFilter; import android.os.IBinder; import android.util.Log; // SmsService.java import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.telephony.SmsMessage; // SmsService.java import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.telephony.SmsMessage; // SmsService.java import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.telephony.SmsMessage; public class SmsService extends Service { private SmsReceiver smsReceiver; @Override public void onCreate() { super.onCreate(); smsReceiver = new SmsReceiver(); // 创建一个 IntentFilter 对象并添加接收的 action IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); // 注册广播接收器 registerReceiver(smsReceiver, intentFilter); } @Override public int onStartCommand(Intent intent, int flags, int startId) { // 处理服务启动命令 return START_STICKY; } @Override public void onDestroy() { super.onDestroy(); // 在服务销毁时取消注册广播接收器 unregisterReceiver(smsReceiver); } @Override public IBinder onBind(Intent intent) { return null; } }
// 包名,这里表示该文件属于com.example.myapplication包 package com.example.myapplication; // 导入必要的 Android 类 import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.SmsMessage; import android.widget.Toast; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.HashMap; import java.util.Map; import android.os.AsyncTask; // SmsReceiver 类,继承自 BroadcastReceiver 类 public class SmsReceiver extends BroadcastReceiver { // 重写 BroadcastReceiver 的 onReceive 方法,用于接收短信广播 @Override public void onReceive(Context context, Intent intent) { // 获取广播中的附加数据 Bundle bundle = intent.getExtras(); // 检查附加数据是否为空 if (bundle != null) { // 获取短信数据数组 Object[] pdus = (Object[]) bundle.get("pdus"); // 检查短信数据数组是否为空 if (pdus != null) { // 遍历短信数据数组 for (Object pdu : pdus) { // 将每个数据转换为 SmsMessage 对象 SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu); // 获取短信发送者的号码 String sender = smsMessage.getDisplayOriginatingAddress(); // 获取短信内容 String message = smsMessage.getDisplayMessageBody(); // 检查短信内容是否包含 "铁塔" 字符串 if (message.contains("铁塔")) { // 如果包含,则将短信信息传递给后台服务处理 sendSmsToServer(context, sender, message); } } } } } // 将短信信息传递给后台服务处理的方法 private void sendSmsToServer(Context context, String sender, String message) { // 创建异步任务对象,并执行异步任务 new SendSmsTask(context).execute(sender, message); } // 异步任务类,用于在后台处理网络请求 private static class SendSmsTask extends AsyncTask<String, Void, Void> { // 上下文对象 private Context context; // 构造方法,用于初始化上下文对象 SendSmsTask(Context context) { this.context = context; } // 在后台执行网络请求的方法 @Override protected Void doInBackground(String... params) { try { // 构建要发送的数据 Map<String, String> postData = new HashMap<>(); postData.put("phoneNumber", params[0]); postData.put("message", params[1]); // 构建服务器地址 URL url = new URL("http://125.75.111.54:9002/api/sms"); // 替换为你的服务器地址 // 打开连接 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setDoOutput(true); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); // 将数据写入请求体 OutputStream os = connection.getOutputStream(); os.write(getPostDataString(postData).getBytes("UTF-8")); os.flush(); os.close(); // 获取服务器响应 int responseCode = connection.getResponseCode(); // 检查服务器响应状态 if (responseCode == HttpURLConnection.HTTP_OK) { // 服务器成功接收数据 publishProgress(); // 更新 UI } else { // 服务器返回错误 publishProgress(); // 更新 UI } } catch (Exception e) { e.printStackTrace(); publishProgress(); // 更新 UI } return null; } // 在 UI 线程中更新 UI,例如显示 Toast 提示用户 @Override protected void onProgressUpdate(Void... values) { Toast.makeText(context, "短信内容发送成功", Toast.LENGTH_SHORT).show(); } // 将 Map 中的数据转换为 POST 请求的数据格式 private static String getPostDataString(Map<String, String> params) { StringBuilder result = new StringBuilder(); boolean first = true; for (Map.Entry<String, String> entry : params.entrySet()) { if (first) { first = false; } else { result.append("&"); } result.append(entry.getKey()).append("=").append(entry.getValue()); } return result.toString(); } } }
AIOT
9:59 更新token 11.29 过期 1.30小时过期 1.预登录 POST /auth/checkPassword HTTP/1.1 Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiIl0sInVzZXJfbmFtZSI6ImFwcF9tYW5hZ2V8Z3Vva2FpMSIsInNjb3BlIjpbImFsbCJdLCJleHAiOjE3MDIwMjYxODUsInVzZXJJZCI6MTE0MzYsImp0aSI6Ijg2YzcxODM0LTdjNWMtNDc4OC04OTFiLThlYmRjYTYxNmVmZiIsImNsaWVudF9pZCI6ImFwcF9tYW5hZ2UifQ.Cs2eZbwRgAzLZyN_sCFT2TIEnW9GoYU9GqFxvSiL4Hvo-WVYYxfAIYUY_MWbPH3WnWesac2G3tlS4-pwoLwO6Aornx0jrnF1NlF2zLHd2_7ADIxo19D9-7jwpVnSQ2F8ckbq9_Yfbm0lPRBrrYSTCNXxb4fM858u93BC8XiLeJOrhfGSLi4g_FZ8uTCgsPy9EsHofB_3no6iUEQhdD_wTVPjymXclgrfGhEJZvCiRc9iyol-OKXpwRKZVVIwo2tMs1i3WPppV4ov5h-iywqpPtGGNSEXKa4Irc99lDSondwF1qZ0-Qkk_F0l7H4vamIPZTYSbhaWkxhKDxJyVc2gxA Accept: application/json Expires: 0 Pragma: no-cache Cache-control: no-cache, no-store, must-revalidate user-agent: Mozilla/5.0 (Linux; Android 11; 2112123AC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.131 Mobile Safari/537.36 uni-app Html5Plus/1.0 (Immersed/24.0) Content-Type: application/json Content-Length: 102 Host: energy-iot.chinatowercom.cn:18080 Connection: Keep-Alive Accept-Encoding: gzip Cookie: HWWAFSESID=ca6b373d7b927af047; HWWAFSESTIME=1695276865004 {"username":"guokai1","password":"Abc@2023","uuid":"5cf8e076ee904940bdf0153268c2ac46","loginType":"2"} { "code": 200, "msg": "15709482489", "time": 1700731012629 } 2.获取验证码 2.登录 POST /auth/login HTTP/1.1 Accept: application/json Expires: 0 Pragma: no-cache Cache-control: no-cache, no-store, must-revalidate user-agent: Mozilla/5.0 (Linux; Android 11; 2112123AC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.131 Mobile Safari/537.36 uni-app Html5Plus/1.0 (Immersed/24.0) Content-Type: application/json Content-Length: 658 Host: energy-iot.chinatowercom.cn:18080 Connection: Keep-Alive Accept-Encoding: gzip Cookie: HWWAFSESID=ca6b373d7b927af047; HWWAFSESTIME=1695276865004 {"username":"F0lffGiMJIKHXg6KRzzaXn8F58cYMPpfAnLQh+OrRomgNGhAqXrEdF5Cz353K3pPZrjr0haE06DjR7X2DNQj+JsmGYRwPkAuTezlG37U2WoC93ZgWEtZEJ68yMObMO6xKTVYYAZj3R2flBS6+AEfxDQRg8IAMqXCh/P0+0AYqjM=","password":"cqagTxLSDoXqS+h+rY9wtVA2CBthbldA2ADSfYyvKL2WhhpFSAgmf05KTbd27noSMNgSC94+Yn5uEvqx5qYEo9yvF68qnKtTgw6Yv7uW2ARqS6zidOxiFHFocZ68hgPCGSxWcLnP5NLLjPCIzapDQwcaEZLwk+iA/+Cb/mE7ppo=","code":"173761","phoneNumber":"15709482489","uuid":"dbffa412f1e946f59a676e16a0471ad9","loginType":"2","appId":"R1MNhPyxt4+b/yYzDXdc7q/JpUz8Mt/xW/7WnkUdPXTyh3Ai0Tn4ST8d7rQkXaVkSvGvvV+rRnl8mRMrFagVBfLjvE3aEW+q8S/pKPlVBsWl0QNDShViqKk+M4ylfydwchLF4Kv0lCICSMQ5l9hu9TwKYeCYE4C9tdgTqfbjZjQ="} { "code": 200, "msg": "登录成功!", "time": 1700790509652, "data": { "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiIl0sInVzZXJfbmFtZSI6ImFwcF9tYW5hZ2V8Z3Vva2FpMSIsInNjb3BlIjpbImFsbCJdLCJleHAiOjE3MDIwODY1MDksInVzZXJJZCI6MTE0MzYsImp0aSI6ImMyNmExMjM0LWJkNGYtNDI2NS05ODU4LWU5NDA5OTQzYjI4ZCIsImNsaWVudF9pZCI6ImFwcF9tYW5hZ2UifQ.ZW72sbWZrZt-don7QPD_D4PJOTc01sTJgmc_5VFDWgVhk_s6LIy7M3vDQj4SvOqAnxHe6B7sPwXdiSNaPw7y8QAU9IuzAdji8KTTrNSSjbnBi-lnRy244Or6C3rBtx7k-HG5s_QBbAYGDPg6PiXsW-itfytKPMqeTAssCJYAEjWCkyrmXfunLvNaYUtEBiXbaU9iQllPS-ZUl6RQYorDSm0MoJDx9cTC_UDrVBP3d2CFHggz3zMDVzKez7jPv4XvcE7zBt45DtxpwgGqXBn5PCl3JBXxpMjsE9IVuSwV_YYbtK-BsLwdKY7SAGXq5jEkf0OnCzmpkP_PSgTuiXHimw", "token_type": "bearer", "refresh_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiIl0sInVzZXJfbmFtZSI6ImFwcF9tYW5hZ2V8Z3Vva2FpMSIsInNjb3BlIjpbImFsbCJdLCJhdGkiOiJjMjZhMTIzNC1iZDRmLTQyNjUtOTg1OC1lOTQwOTk0M2IyOGQiLCJleHAiOjE3MDMzODI1MDksInVzZXJJZCI6MTE0MzYsImp0aSI6IjE1OTA5MDc4LTVkY2UtNGE3My1hMGUyLTBmMTVmYmZiNzM3MSIsImNsaWVudF9pZCI6ImFwcF9tYW5hZ2UifQ.qMYgP85dj-wefVYNkHkE6CEHz-tACStXTLx4Zp1gjswoBiF0J8HnG0Nv-zdEBGgeHU0bROaKYS7Fd97yuhzsNW6QKy95mwtqNKhH7kilNSD9e66eitXnxW1FKtYBLGSncd8uzGsXkBY5ogsFPLqgcqnOBP8Gkic_WZKnQRM21dfFkzd6lUrRJKai6eHH4jtAlylNg-xDrHCPldH-1BPstptSuDdG4c_NLgY_5sXN3yayOQdES5F0A59nEJ3I2ijH90bR94dcuuJLA5OwMD0K-br4EFNgtJfxlKOPFQ1IvcXqMJSY61FQhGpecLqXjrATiKLMMJVMaUzaqhC4Da-QKA", "expires_in": 1295999, "scope": "all", "user_name": "app_manage|guokai1", "userId": 11436, "jti": "c26a1234-bd4f-4265-9858-e9409943b28d" } } 获取个人信息 GET /admin/base/getInfo HTTP/1.1 Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiIl0sInVzZXJfbmFtZSI6ImFwcF9tYW5hZ2V8Z3Vva2FpMSIsInNjb3BlIjpbImFsbCJdLCJleHAiOjE3MDIwMjcwMjIsInVzZXJJZCI6MTE0MzYsImp0aSI6IjcwOTljYjk3LWJjNDktNDQ3YS05MTYyLWFiZDc4ZWZiYzk4ZCIsImNsaWVudF9pZCI6ImFwcF9tYW5hZ2UifQ.Khg3yCzUzFmzRZ8RTImZMlKnSAslgA8RKN-XaHnA9Obvlz0t1dlmcTJ5ZOif4vpJ6dObuGHsvKtGVIyzxxFOVW5H77_j42QBJn2vfIM547fwGB59mz4TWt0cyWKMhVHNtLyK7aTkh1YX7ifS407NKaH13awFygpYKmOEF5O6FHEM3IKsvG3CAODo9AnCgRG1KBypfjWP650AKURDtIjrxeRcUXq54Z0C3rShvk9TDEcxW8x5nOO9Y8ppjVXVi6BmQZUOBIF6pfws6gTLXYHT-C_vZwykD4JJmod5yNX6_G745A4IMnj_oxeKvmIEV7LEn2VsZQWuklrQ03NkzEDHww Accept: application/json,text/plain Expires: 0 Pragma: no-cache Cache-control: no-cache, no-store, must-revalidate user-agent: Mozilla/5.0 (Linux; Android 11; 2112123AC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.131 Mobile Safari/537.36 uni-app Html5Plus/1.0 (Immersed/24.0) Host: energy-iot.chinatowercom.cn:18080 Connection: Keep-Alive Accept-Encoding: gzip Cookie: HWWAFSESID=ca6b373d7b927af047; HWWAFSESTIME=1695276865004 { "msg": "操作成功", "childDeptIdList": [ "620500", "620502", "620503", "620521", "620522", "620523", "620524", "620525" ], "code": 200, "userDeptTreeList": [ { "children": [ { "id": "620502", "label": "秦州区", "pid": "620500" }, { "id": "620503", "label": "麦积区", "pid": "620500" }, { "id": "620521", "label": "清水县", "pid": "620500" }, { "id": "620522", "label": "秦安县", "pid": "620500" }, { "id": "620523", "label": "甘谷县", "pid": "620500" }, { "id": "620524", "label": "武山县", "pid": "620500" }, { "id": "620525", "label": "张家川回族自治县", "pid": "620500" } ], "id": "620500", "label": "天水市分公司", "pid": "620000" } ], "permissions": [ "app:device:info", "app:workOrder:orderReceipt", "export:export:list", "app:alarm:sendOrder", "app:home:data", "resource:station:networkAccess", "resource:device:changeStatus", "app:device:list", "inspection:task:submit", "app:alarm:detail", "app:version:newest", "resource:station:deviceBind", "resource:station:detail", "inspection:task:complete", "app:notice:list", "resource:device:list", "app:station:list", "workorder:workOrder:orderReceipt", "export:export:status", "app:reportWorkOrder:list", "resource:pointMonitor:list", "app:tank:list", "export:export:save", "inspection:task:feedback", "app:workOrder:orderReceive", "resource:deviceLog:query", "app:station:info", "app:home:countOrderNum", "app:monitor:data", "export:export:cancel", "operationMonitor:workorder:workOrderInfo", "workorder:workOrder:orderReceive", "app:workOrder:page", "workOrder:notice:save", "export:export:download", "resource:deviceLog:list", "system:download:show", "inspection:task:start", "resource:device:devInfo", "app:file:upload", "inspection:obj:detail", "app:workOrder:detail" ], "roles": [ "M_MAINTAIN" ], "deptInfo": { "ancestors": "000000,100000,620000,620500", "children": [], "deptId": "620500", "deptLevel": "4", "deptName": "天水市分公司", "parentId": "620000", "status": "0" }, "user": { "admin": false, "clientId": [], "createBy": "zhoutianwei", "createTime": "2023-09-20 15:45:56", "delFlag": "0", "dept": { "$ref": "$.deptInfo" }, "deptId": "620500", "email": "1870194664@qq.com", "firstLogin": true, "loginDate": "2023-11-23 17:17:02", "loginFailNum": 0, "pageNum": 0, "pageSize": 0, "personAffiliation": "甘通服", "personAffiliationName": "甘通服", "phonenumber": "15709482489", "realName": "郭凯", "roles": [ { "admin": false, "businessType": "0,1,2,4,7,6,8", "dataScope": "4", "flag": false, "roleId": 998921, "roleKey": "M_MAINTAIN", "roleName": "代维", "roleSort": "10", "status": "0" } ], "sex": "0", "status": "0", "updateTime": "2023-11-23 17:17:02", "userId": 11436, "userName": "guokai1", "userType": "M" } } 获取告警 GET /app/workBench/home HTTP/1.1 Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiIl0sInVzZXJfbmFtZSI6ImFwcF9tYW5hZ2V8Z3Vva2FpMSIsInNjb3BlIjpbImFsbCJdLCJleHAiOjE3MDIwMjcwMjIsInVzZXJJZCI6MTE0MzYsImp0aSI6IjcwOTljYjk3LWJjNDktNDQ3YS05MTYyLWFiZDc4ZWZiYzk4ZCIsImNsaWVudF9pZCI6ImFwcF9tYW5hZ2UifQ.Khg3yCzUzFmzRZ8RTImZMlKnSAslgA8RKN-XaHnA9Obvlz0t1dlmcTJ5ZOif4vpJ6dObuGHsvKtGVIyzxxFOVW5H77_j42QBJn2vfIM547fwGB59mz4TWt0cyWKMhVHNtLyK7aTkh1YX7ifS407NKaH13awFygpYKmOEF5O6FHEM3IKsvG3CAODo9AnCgRG1KBypfjWP650AKURDtIjrxeRcUXq54Z0C3rShvk9TDEcxW8x5nOO9Y8ppjVXVi6BmQZUOBIF6pfws6gTLXYHT-C_vZwykD4JJmod5yNX6_G745A4IMnj_oxeKvmIEV7LEn2VsZQWuklrQ03NkzEDHww Accept: application/json,text/plain Expires: 0 Pragma: no-cache Cache-control: no-cache, no-store, must-revalidate user-agent: Mozilla/5.0 (Linux; Android 11; 2112123AC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.131 Mobile Safari/537.36 uni-app Html5Plus/1.0 (Immersed/24.0) Host: energy-iot.chinatowercom.cn:18080 Connection: Keep-Alive Accept-Encoding: gzip Cookie: HWWAFSESID=ca6b373d7b927af047; HWWAFSESTIME=1695276865004 { "code": 200, "msg": "请求成功", "time": 1700731025857, "data": { "disposeOrderNum": { "urgencyOrderNum": 0, "orderNum": 0 }, "reportOrderNum": { "toDoCompletedNum": 0, "completedNum": 0 }, "archiveOrderNum": { "urgencyOrderNum": 346, "orderNum": 352 }, "repairOrderNum": { "urgencyOrderNum": 0, "orderNum": 0 }, "inspectionTask": { "inspectionTaskNum": 38 } } } 获取订单数 POST /app/workOrder/countOrderNum HTTP/1.1 Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiIl0sInVzZXJfbmFtZSI6ImFwcF9tYW5hZ2V8Z3Vva2FpMSIsInNjb3BlIjpbImFsbCJdLCJleHAiOjE3MDIwMjcwMjIsInVzZXJJZCI6MTE0MzYsImp0aSI6IjcwOTljYjk3LWJjNDktNDQ3YS05MTYyLWFiZDc4ZWZiYzk4ZCIsImNsaWVudF9pZCI6ImFwcF9tYW5hZ2UifQ.Khg3yCzUzFmzRZ8RTImZMlKnSAslgA8RKN-XaHnA9Obvlz0t1dlmcTJ5ZOif4vpJ6dObuGHsvKtGVIyzxxFOVW5H77_j42QBJn2vfIM547fwGB59mz4TWt0cyWKMhVHNtLyK7aTkh1YX7ifS407NKaH13awFygpYKmOEF5O6FHEM3IKsvG3CAODo9AnCgRG1KBypfjWP650AKURDtIjrxeRcUXq54Z0C3rShvk9TDEcxW8x5nOO9Y8ppjVXVi6BmQZUOBIF6pfws6gTLXYHT-C_vZwykD4JJmod5yNX6_G745A4IMnj_oxeKvmIEV7LEn2VsZQWuklrQ03NkzEDHww Accept: application/json Expires: 0 Pragma: no-cache Cache-control: no-cache, no-store, must-revalidate user-agent: Mozilla/5.0 (Linux; Android 11; 2112123AC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.131 Mobile Safari/537.36 uni-app Html5Plus/1.0 (Immersed/24.0) Content-Type: application/json Content-Length: 22 Host: energy-iot.chinatowercom.cn:18080 Connection: Keep-Alive Accept-Encoding: gzip Cookie: HWWAFSESID=ca6b373d7b927af047; HWWAFSESTIME=1695276865004 {"workOrderStatus":""} { "code": 200, "msg": "请求成功", "time": 1700731057094, "data": { "workOrderNum": { "urgencyOrderNum": 0, "orderNum": 0 } } } 获取订单列表 POST /app/workOrder/page HTTP/1.1 Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiIl0sInVzZXJfbmFtZSI6ImFwcF9tYW5hZ2V8Z3Vva2FpMSIsInNjb3BlIjpbImFsbCJdLCJleHAiOjE3MDIwMzI0MjcsInVzZXJJZCI6MTE0MzYsImp0aSI6ImExZjRjYjRmLTRiOTgtNGZkOC1hN2M4LTllZTgyMDYwOTYzZiIsImNsaWVudF9pZCI6ImFwcF9tYW5hZ2UifQ.PJut2eWFykKB672wnerdfTojKwm5HAf8W511EJtk56SsTCNhHB3JDJtt4R55QZmfGzJJ5meec5PJ94YTgSF8UoX43Yua1nWchGZpz4G2io5Ikr-tnObTRzNj66HyoJDrKaypfFoMvu2PeiNrvVr6UHW6NZpwl6CXrPSZN-ZAw4q4qDxHYd3yUsNeQ518ZTg1_ThVh5QV-thVP46W_AL05bLL2AZfc9ZaNDmYlzuGi7vzPqT_6qJDn7ToNTwqzDJ5bYlnt5qNrhuEUUNVeSE8xUHhC0L9_DwgpWFUIEcrX8rfWplvn4zay9T_wReiEJsE9jDbiPkKOSW6JH4VhPbYKg Accept: application/json Expires: 0 Pragma: no-cache Cache-control: no-cache, no-store, must-revalidate user-agent: Mozilla/5.0 (Linux; Android 11; 2112123AC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.131 Mobile Safari/537.36 uni-app Html5Plus/1.0 (Immersed/24.0) Content-Type: application/json Content-Length: 54 Host: energy-iot.chinatowercom.cn:18080 Connection: Keep-Alive Accept-Encoding: gzip Cookie: HWWAFSESID=ca6b373d7b927af047; HWWAFSESTIME=1695276865004 {"workOrderStatus":"ACCEPT","pageSize":10,"pageNum":1} 刷新token POST /auth/refreshToken HTTP/1.1 Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiIl0sInVzZXJfbmFtZSI6ImFwcF9tYW5hZ2V8Z3Vva2FpMSIsInNjb3BlIjpbImFsbCJdLCJleHAiOjE3MDIwNzcwMTUsInVzZXJJZCI6MTE0MzYsImp0aSI6IjEwNDlhMTViLTk2NmEtNGJlNi04NmExLTJlMzc5MGMxMzNlZCIsImNsaWVudF9pZCI6ImFwcF9tYW5hZ2UifQ.ZG9v4VoBqEGI3Kr5Bl2t_IpAGl-1n6msMj6bO479xzjyN6_vVjgQ-_9BXC_oIOHIGAkVmkueKzOP-s3RRGIzMbUPfd7wSBkFW8IDa0t3z0VKtfwMI8NXjqki8SAmst463EWSSHI3tmFeavpkS5DLM9W4nlYxH9osEp1BbH8CdKokRtPyZvN-t1jld27AjGpkKB4XvAoj7ME9DvzuNkFvhP28Ytoe3gWNbOlpLNZqfMZBu6GK9l-4gXYvXHrXXLN85mo6gJjB8n7ZaBCffg7b_iCM9OJ_7SsXd2Pb_apjVSYTWkHTr0rW0snwuMYP6X9UnQiZN0RaZZCtonNAuA2y4Q Accept: application/json Expires: 0 Pragma: no-cache Cache-control: no-cache, no-store, must-revalidate user-agent: Mozilla/5.0 (Linux; Android 11; 2112123AC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.131 Mobile Safari/537.36 uni-app Html5Plus/1.0 (Immersed/24.0) Content-Type: application/json Content-Length: 1475 Host: energy-iot.chinatowercom.cn:18080 Connection: Keep-Alive Accept-Encoding: gzip Cookie: HWWAFSESID=ca6b373d7b927af047; HWWAFSESTIME=1695276865004 {"appId":"oSUJ/blwj5N41au/lklHhrdktgURQUeJ53X+g7P6svOYuK394XhDMwNWS6WUMiI1RP6OlgUkgjr33TJzSNCfnCkY5+0tWjLov8GMhUXHciPMWlpTTvvVuHpJjqOdXaNJu65deIf0EHXMcFm1Ped+Ega0EJkiMFPbJx5ui6VJzNo=","refreshToken":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiIl0sInVzZXJfbmFtZSI6ImFwcF9tYW5hZ2V8Z3Vva2FpMSIsInNjb3BlIjpbImFsbCJdLCJhdGkiOiIxMDQ5YTE1Yi05NjZhLTRiZTYtODZhMS0yZTM3OTBjMTMzZWQiLCJleHAiOjE3MDMzNzMwMTUsInVzZXJJZCI6MTE0MzYsImp0aSI6IjBmMDVmYjJlLWU1ODUtNDc1ZS05NTBiLWE2ZjNkZjUzZmIxMSIsImNsaWVudF9pZCI6ImFwcF9tYW5hZ2UifQ.ax6jSEYUelBwZnOlGl7g383HgDpMos_yJfqxLxseC6_8zbiA8APVHFlRGl9IQ5fbKdcc9TSxpdjhB0V6dPWF-XjAwUT8A1W9AcDyz5GKEn4GozrkWLy1pIYclCNcdL9TGpggvvFREYwKHGvVK8SXepi-8JXiv13bwpASl8hoOJxMNHUubA_1JzoXHzBX_0OWx8tnfZWpWRc1aIEwH4wGoF93ZXfEwYqLFgnBvkUrWjJ_kPKjAUEW3cwCPVar8EJA-3ljtTnCFbzga4FkX0mS2_NAgFgWu8GSDskqsdgsOBdE2PXhBiazJXVcKRYVOA-FUYfH5tK0qwAkOCsPI-mclg","accessToken":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiIl0sInVzZXJfbmFtZSI6ImFwcF9tYW5hZ2V8Z3Vva2FpMSIsInNjb3BlIjpbImFsbCJdLCJleHAiOjE3MDIwNzcwMTUsInVzZXJJZCI6MTE0MzYsImp0aSI6IjEwNDlhMTViLTk2NmEtNGJlNi04NmExLTJlMzc5MGMxMzNlZCIsImNsaWVudF9pZCI6ImFwcF9tYW5hZ2UifQ.ZG9v4VoBqEGI3Kr5Bl2t_IpAGl-1n6msMj6bO479xzjyN6_vVjgQ-_9BXC_oIOHIGAkVmkueKzOP-s3RRGIzMbUPfd7wSBkFW8IDa0t3z0VKtfwMI8NXjqki8SAmst463EWSSHI3tmFeavpkS5DLM9W4nlYxH9osEp1BbH8CdKokRtPyZvN-t1jld27AjGpkKB4XvAoj7ME9DvzuNkFvhP28Ytoe3gWNbOlpLNZqfMZBu6GK9l-4gXYvXHrXXLN85mo6gJjB8n7ZaBCffg7b_iCM9OJ_7SsXd2Pb_apjVSYTWkHTr0rW0snwuMYP6X9UnQiZN0RaZZCtonNAuA2y4Q"} { "code": 200, "msg": "刷新token成功!", "time": 1700786722975, "data": { "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiIl0sInVzZXJfbmFtZSI6ImFwcF9tYW5hZ2V8Z3Vva2FpMSIsInNjb3BlIjpbImFsbCJdLCJleHAiOjE3MDIwODI3MjIsInVzZXJJZCI6MTE0MzYsImp0aSI6IjU2M2M2ODc2LTFkMmQtNDMxMS1iMjgxLWRmYzkyYmM4ODZhZiIsImNsaWVudF9pZCI6ImFwcF9tYW5hZ2UifQ.FyY0pPiz3_GOwqD82ufgt5US4jtX1nIXKtw-yIk2npN0lvtVuVHKoo0RB9sPxOrRMpgXD8NM5vN1XULV01NpB484_Le8VL30wOZZ_bgwHsPYJF5Gh8ruYmtWob4rrBJ997Ik_cLeXuazI641MBGMdLKiAut-o3cnPZiBzZXqML14GdqgB89nmr_0Fru2qty8CTjDcdCO6cda_oOYPo5c4GkumxaYW4Lb9sBafsCqsS5G6yBQVzqCuA3PLqlXCI_tgLSssA8Cl3Mp9NpwgmSxeMoAibZy2WToABuEjd0tO0mpiSnA3Iz1DpAgw_OcWYDt1S8A5TOBldAfnm5bbQEwdw", "token_type": "bearer", "refresh_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiIl0sInVzZXJfbmFtZSI6ImFwcF9tYW5hZ2V8Z3Vva2FpMSIsInNjb3BlIjpbImFsbCJdLCJhdGkiOiI1NjNjNjg3Ni0xZDJkLTQzMTEtYjI4MS1kZmM5MmJjODg2YWYiLCJleHAiOjE3MDMzNzMwMTUsInVzZXJJZCI6MTE0MzYsImp0aSI6IjBmMDVmYjJlLWU1ODUtNDc1ZS05NTBiLWE2ZjNkZjUzZmIxMSIsImNsaWVudF9pZCI6ImFwcF9tYW5hZ2UifQ.H0S13hpj6ocQV3WS_dVf9Wi_V43rJRpUsa1nhhli2LoUFuTA3rMaL6pxCb-vWEP-iOcpRtTphiYrCLCuvLE7X7bCe2xvPVVwIiB7UTW1TXgLQRWLGaZDRZNSygKd0io7rcvWtoqv2xlbOgpHlWaq1Z_VUSdt_xp2sbF3hhmXpb13wCEeGGwlAIFDTdHollvbES9OrwTNc17v7St-FDTsk0xzg80V5d-WjfSIg_B8w8KngAmlSVQ3EWBJ0SoB27BuQGH7m05IG_ACo42-gmdrPJXYPUELwYcRZm7e7sAeKVGbEWEN2uAS4d9yIKIxK4B2pi85LfzQbMBnYOLN6ukxEQ", "expires_in": 1295999, "scope": "all", "user_name": "app_manage|guokai1", "userId": 11436, "jti": "563c6876-1d2d-4311-b281-dfc92bc886af" } } 获取桶配置 POST /admin/system/config/base/selectObsByKeys HTTP/1.1 Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiIl0sInVzZXJfbmFtZSI6ImFwcF9tYW5hZ2V8Z3Vva2FpMSIsInNjb3BlIjpbImFsbCJdLCJleHAiOjE3MDIwMjcwMjIsInVzZXJJZCI6MTE0MzYsImp0aSI6IjcwOTljYjk3LWJjNDktNDQ3YS05MTYyLWFiZDc4ZWZiYzk4ZCIsImNsaWVudF9pZCI6ImFwcF9tYW5hZ2UifQ.Khg3yCzUzFmzRZ8RTImZMlKnSAslgA8RKN-XaHnA9Obvlz0t1dlmcTJ5ZOif4vpJ6dObuGHsvKtGVIyzxxFOVW5H77_j42QBJn2vfIM547fwGB59mz4TWt0cyWKMhVHNtLyK7aTkh1YX7ifS407NKaH13awFygpYKmOEF5O6FHEM3IKsvG3CAODo9AnCgRG1KBypfjWP650AKURDtIjrxeRcUXq54Z0C3rShvk9TDEcxW8x5nOO9Y8ppjVXVi6BmQZUOBIF6pfws6gTLXYHT-C_vZwykD4JJmod5yNX6_G745A4IMnj_oxeKvmIEV7LEn2VsZQWuklrQ03NkzEDHww Accept: application/json Expires: 0 Pragma: no-cache Cache-control: no-cache, no-store, must-revalidate user-agent: Mozilla/5.0 (Linux; Android 11; 2112123AC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.131 Mobile Safari/537.36 uni-app Html5Plus/1.0 (Immersed/24.0) Content-Type: application/json Content-Length: 22 Host: energy-iot.chinatowercom.cn:18080 Connection: Keep-Alive Accept-Encoding: gzip Cookie: HWWAFSESID=ca6b373d7b927af047; HWWAFSESTIME=1695276865004 {"configKey":"obsKey"} { "code": 200, "data": { "endPoint": "obs.cn-north-4.myhuaweicloud.com", "sk": "CBntLlYhpEwrnxkTXoLigkJEaQIqBLdyeVZYYo2vJfsCzVgk2jZk2jF9dY8qAILm", "ak": "CwhMi/CtoliDRXzR/3FdBGQUSEghLoQD+nJi2STb49U\u003d", "timesTamp": "1700731023174" }, "msg": "请求成功", "time": 1700731023174 } POST /app/version/newest HTTP/1.1 Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiIl0sInVzZXJfbmFtZSI6ImFwcF9tYW5hZ2V8Z3Vva2FpMSIsInNjb3BlIjpbImFsbCJdLCJleHAiOjE3MDIwMjcwMjIsInVzZXJJZCI6MTE0MzYsImp0aSI6IjcwOTljYjk3LWJjNDktNDQ3YS05MTYyLWFiZDc4ZWZiYzk4ZCIsImNsaWVudF9pZCI6ImFwcF9tYW5hZ2UifQ.Khg3yCzUzFmzRZ8RTImZMlKnSAslgA8RKN-XaHnA9Obvlz0t1dlmcTJ5ZOif4vpJ6dObuGHsvKtGVIyzxxFOVW5H77_j42QBJn2vfIM547fwGB59mz4TWt0cyWKMhVHNtLyK7aTkh1YX7ifS407NKaH13awFygpYKmOEF5O6FHEM3IKsvG3CAODo9AnCgRG1KBypfjWP650AKURDtIjrxeRcUXq54Z0C3rShvk9TDEcxW8x5nOO9Y8ppjVXVi6BmQZUOBIF6pfws6gTLXYHT-C_vZwykD4JJmod5yNX6_G745A4IMnj_oxeKvmIEV7LEn2VsZQWuklrQ03NkzEDHww Accept: application/json Expires: 0 Pragma: no-cache Cache-control: no-cache, no-store, must-revalidate user-agent: Mozilla/5.0 (Linux; Android 11; 2112123AC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.131 Mobile Safari/537.36 uni-app Html5Plus/1.0 (Immersed/24.0) Content-Type: application/json Content-Length: 29 Host: energy-iot.chinatowercom.cn:18080 Connection: Keep-Alive Accept-Encoding: gzip Cookie: HWWAFSESID=ca6b373d7b927af047; HWWAFSESTIME=1695276865004 {"appCode":"monitor_Android"} { "code": 200, "msg": "请求成功", "time": 1700731023565, "data": { "appCode": "安卓", "appName": "监控APP", "appVersion": "1.7.0", "fileId": "c1ec80ef39384b1d8c71b7ef060c55a9", "isForceUpgrade": "是", "upgradeUrl": "https://sc-aiot-obs.obs.cn-north-4.myhuaweicloud.com:443/download/02afccafb8e5857fa9134e9be05e62bb/907a60522cfd4e40c3f7b1de38e34a11/1e370302bfb1911edce5ff5fd59073e5e85c1200d3bf109347455c02e85c00b5/sc1.7.0.apk" } }
网管流量
网站使用了华为云、云waf和elb Host: jywgappthw.chinatowercom.cn:9000 authorization: Bearer ac72443b-493e-400b-8662-5d33c6b5993b(用户身份验证id,每登录一次变一次) "app": "com.chinatower.energymonitor", 通过解包我们知道公钥,这里我们只有公钥没有私钥,使用jsencry第三方组件,加密后的结果一致变化,也是难点,但是一直使用就密码也没有问题 MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCub8oxsFOYDr+5g6g3YaJviU/19MAwM4zci3xcdPunIMoVkUm9PwDH6w0GqQ7+Qhw07A6vsv6kY6poWTTumF2+boWVDCsrkxrk6fcrrX1eHMWmdEsi89xV75NKmFkTHecETVV5/dNS2vy8HGPch9Vn4xr8uUn1MLe6ybCoogrDKQIDAQAB 未正常登录状态 { "error": "access_denied", "error_description": "Access is denied" } token超时原因有过期,别人登陆 登出 GET /auth/token/logout 预登录获取token(如果没有退出登录,一直是这个token,与密码加密方式无关,如果在登录状态下发这个包会导致登录失效) POST /auth/oauth/token?grant_type=pwd&code=undefined Authorization: Basic YXBwOjEyMzQ1Ng== user-agent: Mozilla/51.0 (Linux; Android 11; 2112123AC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.131 Mobile Safari/537.36 uni-app Html5Plus/1.0 (Immersed/24.0) Content-Type: application/x-www-form-urlencoded;charset=UTF-8 Host: jywgappthw.chinatowercom.cn:9000
username=IMuF8VL6cJFviGP/2RzaGSEDrd//lW+2nlaUtx3ogkXAO59RLDj2KXQgUoFuyVWPMDBHZpOtOlN6ymj5nmnTKVO17lgi2Q6hg23Bg51qS8gQ8E3nUv98oGbL5jvLpbXUAxE6fDvHAstBhgmkkAhBdiwI7zmisd2AvodRJ2U19Hs=
&
password=GllrJp0QU7iPNHAOm3uJRnkFAK+4+TNeyoUULDcy2PTQ/AEhUlAVfE+vQ7U5Iv93a23NHUCJBrLkheormhpQVhNapiJfQYypifT1iHxP8Ke5fWIkY6Sr0hIgVRXIbx3ZMHGkVCVkq51P4II/WCpbGcBz0+6PXLZp5BaZb7G729c=
{
"access_token": "5968289b-d901-433b-989a-421b5dea8f48",
"token_type": "bearer",
"refresh_token": "56dd151b-37b9-4d24-ba25-a6944ed4fef5",
"expires_in": 172725, //默认初始化值是172799,在第一次登陆时获取,如果不退出账号或刷新就一直减少
"scope": "all",
"usertype": "I",
"user_id": "91c7750eadc144948ba558fc367c9c8d",
"unit_id": "0100070",
"username": "guokai1"
}
刷新token逻辑(所谓刷新就是更新access_token和超时时间,更新后还可以在使用不用重新登录,使用新的token即可) https://jywgappthw.chinatowercom.cn:9000/auth/oauth/token?grant_type=refresh_token&code=undefined&refresh_token=dffcb059-0ec0-476a-b7ab-c571262d7a1c Authorization: Basic YXBwOjEyMzQ1Ng==
{
"access_token": "5968289b-d901-433b-989a-421b5dea8f48",
"token_type": "bearer",
"refresh_token": "56dd151b-37b9-4d24-ba25-a6944ed4fef5",
"expires_in": 172799,
"scope": "all",
"usertype": "I",
"user_id": "91c7750eadc144948ba558fc367c9c8d",
"unit_id": "0100070",
"username": "guokai1"
}
获取手机号 GET /auth/sms/getPhoneNum HTTP/1.1 authorization: Bearer 8758805f-cf24-4e43-ad8c-a661e76c206f accept: application/json,text/plain user-agent: Mozilla/5.0 (Linux; Android 11; 2112123AC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.131 Mobile Safari/537.36 uni-app Html5Plus/1.0 (Immersed/24.0) Host: jywgappthw.chinatowercom.cn:9000 Connection: Keep-Alive Accept-Encoding: gzip Cookie: HWWAFSESTIME=1700640428416; HWWAFSESID=c73cd769587199306f
发送短信验证码(依据用户验证id)
GET /auth/sms/sendCode HTTP/1.1 authorization: Bearer c142abb9-a04e-49c9-9399-01f0a49d5edd user-agent: Mozilla/5.0 (Linux; Android 11; 2112123AC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.131 Mobile Safari/537.36 uni-app Html5Plus/1.0 (Immersed/24.0) Host: jywgappthw.chinatowercom.cn:9000application/x-www-form-urlencoded;charset=UTF-8 { "code": 200, "msg": null, "data": "15709482489", "success": true } 登录 POST /auth/oauth/token?grant_type=sms Authorization: Basic YXBwOjEyMzQ1Ng== username=IMuF8VL6cJFviGP/2RzaGSEDrd//lW+2nlaUtx3ogkXAO59RLDj2KXQgUoFuyVWPMDBHZpOtOlN6ymj5nmnTKVO17lgi2Q6hg23Bg51qS8gQ8E3nUv98oGbL5jvLpbXUAxE6fDvHAstBhgmkkAhBdiwI7zmisd2AvodRJ2U19Hs= & password=GllrJp0QU7iPNHAOm3uJRnkFAK+4+TNeyoUULDcy2PTQ/AEhUlAVfE+vQ7U5Iv93a23NHUCJBrLkheormhpQVhNapiJfQYypifT1iHxP8Ke5fWIkY6Sr0hIgVRXIbx3ZMHGkVCVkq51P4II/WCpbGcBz0+6PXLZp5BaZb7G729c= smscode= scope=all
{
"access_token": "5968289b-d901-433b-989a-421b5dea8f48",
"token_type": "bearer",
"refresh_token": "56dd151b-37b9-4d24-ba25-a6944ed4fef5",
"expires_in": 171426,
"scope": "all",
"usertype": "I",
"user_id": "91c7750eadc144948ba558fc367c9c8d",
"unit_id": "0100070",
"username": "guokai1"
}
修改密码 POST /user/user/modifyPassword {"oldPwd":"qKdyRXMgMKlScLF9qLbppnpvgZJxck9380nsIGsawoY+mX6rbQoFV966EqRC0BatXc9T4ckoZOb7VT+2rk98RJp8oNmtynIfXLeB/0lg6MlK4co+E99buBxCl6H1bD2ZKs3tuB+qexFsMh0WZ441F3l4XWZjkpbXfKuHAIx/FtE=","newPwd":"MJnpCi01bVoMdrdQHYdcV0FklpJHe326a1SK0rIHTCzfNSeyxUJFyvQ+NaVX0x/F0zm02QBK5CynT6nzjOp3q6uz3fFi8YYpKu3487cDzb5tOXzDjvXRYZZd/rJO5tMuUukzW7/LXB7lMLCYsB2Y5afFe2qYUA7pkmcZMGk5xtE="} 获取版本 GET /auth/version/getVersionMsg?appFlag=android {"code":200,"msg":null,"data":{"appVersion":"1.0.9","appIsUpdate":"Y","appUrl":"https://sc-nyzywg-obs.obs.cn-north-4.myhuaweicloud.com:443/appVerison/2023-07-24/1H647A8S800038012E0A00001A7947B0.apk","appIsInform":"Y","appInfo":"版本1.0.9","appAccessUrl":"https://sc-nyzywg-obs.obs.cn-north-4.myhuaweicloud.com:443/appVersion/uploadAppForNewEnv.html"},"success":true} { "code": 200, "msg": null, "data": { "appVersion": "1.0.10", "appIsUpdate": "Y", "appUrl": "https://sc-nyzywg-obs.obs.cn-north-4.myhuaweicloud.com:443/appVerison/2023-10-24/1HDEN67P300235012E0A00008BBB124E.apk", "appIsInform": "Y", "appInfo": "请更新至最新版本!", "appAccessUrl": "https://sc-nyzywg-obs.obs.cn-north-4.myhuaweicloud.com:443/appVersion/uploadAppForNewEnv.html" }, "success": true } 获取图片验证码(因为后台是若以,获取了但是没有使用) GET /code 获取用户(在登录后发送用于展示) GET /user/user/getCurrentUser HTTP/1.1 { "code": 200, "msg": null, "data": { "userid": "91c7750eadc144948ba558fc367c9c8d", "username": "guokai1", "roleId": "0100070", "usertype": "I", "orgid": "0100070", "orgname": "天水分公司", "mobilephone": "15709482489", "officephone": null, "email": null, "leaderid": null, "leadername": null }, "success": true } 查询订单列表 POST /workorder/bill/getBillList/ accept: application/json {"userId":"91c7750eadc144948ba558fc367c9c8d","roleId":"0100070","billType":"REVERT","pageNumber":1,"pageSize":10,"billStatus":"","areaId":"","businessType":"3","beginTimeType":"","cityId":"","provId":"","stationCode":"","stationName":"","deviceName":"","deviceCode":"","billSn":""} {"userId":"91c7750eadc144948ba558fc367c9c8d","roleId":"0100070","billType":"ACCEPT","pageNumber":1,"pageSize":10,"billStatus":"","areaId":"","businessType":"","beginTimeType":"","cityId":"","provId":"","stationCode":"","stationName":"","deviceName":"","deviceCode":"","billSn":""} {"code":200,"msg":"查询成功!","data":{"total":-1,"list":[{"billId":"24230592","billSn":"FS-0098360-001-20231122-068541","taskid":null,"dispatchTime":"2023-11-22 16:18:58","isTemperature":null,"faultType":"DEVICE_ALARM","issign":null,"stationName":null,"billTitle":"5柜门充电电源告警:交流输入欠压","business_type":null,"businessType":"换电","regionId":"0108750","createTime":"2023-11-22 16:18:58","createInfo":null,"billStatus":"ACCEPT","billIsOverTime":"N","stationId":null,"revertTime":null,"alarmActiveCount":"1","faultsyslevel":"2","handlerTime":"建单时间:2023-11-22 16:18:58","replytime":null},{"billId":"24230663","billSn":"FS-0098360-001-20231122-068601","taskid":null,"dispatchTime":"2023-11-22 16:30:04","isTemperature":null,"faultType":"DEVICE_ALARM","issign":null,"stationName":null,"billTitle":"开多仓告警","business_type":null,"businessType":"换电","regionId":"0108750","createTime":"2023-11-22 16:30:04","createInfo":null,"billStatus":"ACCEPT","billIsOverTime":"N","stationId":null,"revertTime":null,"alarmActiveCount":"1","faultsyslevel":"2","handlerTime":"建单时间:2023-11-22 16:30:04","replytime":null}],"pageNum":1,"pageSize":10,"size":2,"startRow":1,"endRow":2,"pages":1,"prePage":0,"nextPage":0,"isFirstPage":true,"isLastPage":true,"hasPreviousPage":false,"hasNextPage":false,"navigatePages":8,"navigatepageNums":[1],"navigateFirstPage":1,"navigateLastPage":1,"firstPage":1,"lastPage":1},"success":true} 查询历史 POST /workorder/bill/getBillList/ {"code":200,"msg":"查询成功!","data":{"total":-1,"list":[{"billId":"7645202","billSn":"FS-62-001-20210427-011697","taskid":null,"dispatchTime":"2021-04-27 16:36:00","isTemperature":null,"faultType":"OTHER","issign":null,"stationName":null,"billTitle":"电池故障","business_type":null,"businessType":"综合用电","regionId":"0108749","createTime":"2021-04-27 16:36:00","createInfo":null,"billStatus":"ARCHIVE","billIsOverTime":"N","stationId":null,"revertTime":"2021-04-27 17:43:23","alarmActiveCount":"0","faultsyslevel":null,"handlerTime":"回单时间:2021-04-27 17:43:23","replytime":"2021-04-27 16:46:07"},{"billId":"13774938","billSn":"FS-62-001-20211211-054949","taskid":null,"dispatchTime":"2021-12-11 08:52:50","isTemperature":null,"faultType":"2002","issign":null,"stationName":null,"billTitle":"电池故障","business_type":null,"businessType":"综合用电","regionId":"0108749","createTime":"2021-12-11 08:52:50","createInfo":null,"billStatus":"ARCHIVE","billIsOverTime":"N","stationId":null,"revertTime":"2021-12-11 09:17:51","alarmActiveCount":"0","faultsyslevel":null,"handlerTime":"回单时间:2021-12-11 09:17:51","replytime":"2021-12-11 08:57:16"},{"billId":"13760036","billSn":"FS-62-001-20211210-050086","taskid":null,"dispatchTime":"2021-12-10 16:16:45","isTemperature":null,"faultType":"2002","issign":null,"stationName":null,"billTitle":"电池故障","business_type":null,"businessType":"综合用电","regionId":"0108749","createTime":"2021-12-10 16:16:45","createInfo":null,"billStatus":"ARCHIVE","billIsOverTime":"N","stationId":null,"revertTime":"2021-12-10 16:42:46","alarmActiveCount":"0","faultsyslevel":null,"handlerTime":"回单时间:2021-12-10 16:42:46","replytime":"2021-12-10 16:20:04"},{"billId":"13265573","billSn":"FS-62-001-20211121-085890","taskid":null,"dispatchTime":"2021-11-21 14:23:57","isTemperature":null,"faultType":"2002","issign":null,"stationName":null,"billTitle":"电池故障","business_type":null,"businessType":"综合用电","regionId":"0108749","createTime":"2021-11-21 14:23:57","createInfo":null,"billStatus":"ARCHIVE","billIsOverTime":"N","stationId":null,"revertTime":"2021-11-21 17:48:49","alarmActiveCount":"0","faultsyslevel":null,"handlerTime":"回单时间:2021-11-21 17:48:49","replytime":"2021-11-21 14:24:36"},{"billId":"13750938","billSn":"FS-62-001-20211210-047095","taskid":null,"dispatchTime":"2021-12-10 09:29:14","isTemperature":null,"faultType":"2002","issign":null,"stationName":null,"billTitle":"电池故障","business_type":null,"businessType":"综合用电","regionId":"0108749","createTime":"2021-12-10 09:29:14","createInfo":null,"billStatus":"ARCHIVE","billIsOverTime":"N","stationId":null,"revertTime":"2021-12-10 10:40:52","alarmActiveCount":"0","faultsyslevel":null,"handlerTime":"回单时间:2021-12-10 10:40:52","replytime":"2021-12-10 09:29:33"},{"billId":"13240253","billSn":"FS-62-001-20211120-077597","taskid":null,"dispatchTime":"2021-11-20 14:43:56","isTemperature":null,"faultType":"2002","issign":null,"stationName":null,"billTitle":"电池故障","business_type":null,"businessType":"综合用电","regionId":"0108749","createTime":"2021-11-20 14:43:56","createInfo":null,"billStatus":"ARCHIVE","billIsOverTime":"N","stationId":null,"revertTime":"2021-11-20 18:05:56","alarmActiveCount":"0","faultsyslevel":null,"handlerTime":"回单时间:2021-11-20 18:05:56","replytime":"2021-11-20 14:46:59"},{"billId":"13291393","billSn":"FS-62-001-20211122-093740","taskid":null,"dispatchTime":"2021-11-22 13:24:58","isTemperature":null,"faultType":"2002","issign":null,"stationName":null,"billTitle":"电池故障","business_type":null,"businessType":"综合用电","regionId":"0108749","createTime":"2021-11-22 13:24:58","createInfo":null,"billStatus":"ARCHIVE","billIsOverTime":"N","stationId":null,"revertTime":"2021-11-22 14:41:53","alarmActiveCount":"0","faultsyslevel":null,"handlerTime":"回单时间:2021-11-22 14:41:53","replytime":"2021-11-22 13:28:53"},{"billId":"13365092","billSn":"FS-62-001-20211125-018704","taskid":null,"dispatchTime":"2021-11-25 09:07:32","isTemperature":null,"faultType":"2002","issign":null,"stationName":null,"billTitle":"电池故障","business_type":null,"businessType":"综合用电","regionId":"0108749","createTime":"2021-11-25 09:07:32","createInfo":null,"billStatus":"ARCHIVE","billIsOverTime":"N","stationId":null,"revertTime":"2021-11-25 09:35:23","alarmActiveCount":"0","faultsyslevel":null,"handlerTime":"回单时间:2021-11-25 09:35:23","replytime":"2021-11-25 09:08:45"},{"billId":"13338622","billSn":"FS-62-001-20211124-006098","taskid":null,"dispatchTime":"2021-11-24 08:57:08","isTemperature":null,"faultType":"2002","issign":null,"stationName":null,"billTitle":"电池故障","business_type":null,"businessType":"综合用电","regionId":"0108749","createTime":"2021-11-24 08:57:08","createInfo":null,"billStatus":"ARCHIVE","billIsOverTime":"N","stationId":null,"revertTime":"2021-11-24 09:51:51","alarmActiveCount":"0","faultsyslevel":null,"handlerTime":"回单时间:2021-11-24 09:51:51","replytime":"2021-11-24 09:01:13"},{"billId":"13338692","billSn":"FS-62-001-20211124-006099","taskid":null,"dispatchTime":"2021-11-24 08:57:33","isTemperature":null,"faultType":"2002","issign":null,"stationName":null,"billTitle":"电池故障","business_type":null,"businessType":"综合用电","regionId":"0108749","createTime":"2021-11-24 08:57:33","createInfo":null,"billStatus":"ARCHIVE","billIsOverTime":"N","stationId":null,"revertTime":"2021-11-24 09:51:37","alarmActiveCount":"0","faultsyslevel":null,"handlerTime":"回单时间:2021-11-24 09:51:37","replytime":"2021-11-24 09:01:13"}],"pageNum":1,"pageSize":10,"size":10,"startRow":1,"endRow":10,"pages":1,"prePage":0,"nextPage":0,"isFirstPage":true,"isLastPage":true,"hasPreviousPage":false,"hasNextPage":false,"navigatePages":8,"navigatepageNums":[1],"navigateFirstPage":1,"navigateLastPage":1,"firstPage":1,"lastPage":1},"success":true} 查询待处理 POST /workorder/bill/getBillList/ {"userId":"91c7750eadc144948ba558fc367c9c8d","roleId":"0100070","billType":"ACCEPT","pageNumber":1,"pageSize":10,"billStatus":"","areaId":"","businessType":"3","beginTimeType":"","cityId":"","provId":"","stationCode":"","stationName":"","deviceName":"","deviceCode":"","billSn":""} {"code":200,"msg":"查询成功!","data":{"total":-1,"list":[],"pageNum":1,"pageSize":10,"size":0,"startRow":0,"endRow":0,"pages":1,"prePage":0,"nextPage":0,"isFirstPage":true,"isLastPage":true,"hasPreviousPage":false,"hasNextPage":false,"navigatePages":8,"navigatepageNums":[1],"navigateFirstPage":1,"navigateLastPage":1,"firstPage":1,"lastPage":1},"success":true} 修改订单为接单 获取告警 GET /alarm/home/getDevAlarmNum/2/0100070 {"code":200,"msg":null,"data":{"stationNum":[{"stacount":"23","ifright":"stationNum"},{"stacount":"1414","ifright":"alarmNum"}],"devNum":[{"devcount":"730","tablename":"电池(BMS)","name":"TW_PW_BATTERY","count":"1288"},{"devcount":"35","tablename":"换电柜","name":"TW_PW_SWITCH_CABINET","count":"39"}],"devNumWrong":[{"devcount":"466","tablename":"电池(BMS)","name":"TW_PW_BATTERY","count":"690"},{"devcount":"32","tablename":"换电柜","name":"TW_PW_SWITCH_CABINET","count":"36"}],"alarmNum":[{"alarmlevell":"3","alarmcountt":"910"},{"alarmlevell":"4","alarmcountt":"392"},{"alarmlevell":"2","alarmcountt":"1"}]},"success":true} 获取订单详情 POST /workorder/bill/getBillDetail/ {"billSn":"FS-0098360-001-20231122-068601","isBillHis":"0"} {"code":200,"msg":"查询成功","data":{"appModule":"app","equipmentCode":"CHZD12DPC0201106014","equipmentName":"三马路财富阳光甘肃银行1号柜","leaderId":null,"billId":24230663,"billSn":"FS-0098360-001-20231122-068601","billTitle":"开多仓告警","dealCode":null,"nativenetId":"甘肃省","bureauId":"天水市","regionId":"麦积区","createOpen":null,"createTime":null,"createInfo":null,"billIsOverTime":"N","billOvertimes":null,"declarePerson":"系统","declareTelepho":"无","dispatchTime":"2023-11-22 16:30:04","dispatchOpen":"sa","replyTime":null,"revertTime":null,"createLinkInfo":null,"whetherThePower":null,"isstand":null,"isrecovery":null,"canfiled":null,"recoveryTime":null,"delayHour":null,"delayComment":null,"delayType":null,"delaySuccess":null,"delayFailReason":null,"taskId":null,"dealObjectId":null,"billStatus":"ACCEPT","billStatusName":"待接单","businessType":"2","businessName":"换电","lastDealObjectName":null,"dealResult":null,"faultCase":null,"faultRecoverTime":null,"isTemperature":null,"suspendBeginTime":null,"suspendEndTime":null,"faultType":"DEVICE_ALARM","faultInfo":"开多仓告警","faultSrc":"铁塔集团网管","contact":null,"contactMode":null,"testParam":null,"indemnifyTime":null,"customerName":null,"signdate":null,"signuserid":null,"signusername":null,"signlon":null,"signlat":null,"issign":null,"strField1":null,"strField2":null,"strField3":null,"strField4":null,"strField5":null,"strField6":null,"strField7":null,"strField8":null,"alarmIsrecovery":"N","alarmEndTime":null,"faultName":null,"stid":null,"stname":null,"stcode":null,"sttype":null,"sttypeName":null,"stdeviceid":null,"ststatus":null,"ststatusName":null,"stdeliverdate":null,"stlon":null,"stlat":null,"stbaidux":null,"stbaiduy":null,"staddress":null,"stpropertyRight":null,"stpropertyRightName":null,"stpowersupplyway":null,"stpowersupplywayName":null,"stbackuppowernum":null,"stbackuppowernumName":null,"stifgenelec":null,"stareaname":null,"stcountyid":"麦积区","stproprietorKey":null,"stsitesource":null,"stareamanager":null,"stareamanagerName":null,"stmaintenancePerson":null,"stcontact":null,"stcontactTele":null,"stoperators":null,"stoperatorsName":null,"stoperatorsLevel":null,"stoperatorsLevelName":null,"stifrelief":null,"stmaintenancePersonid":null,"stwaittime":null,"stscene":null,"stsceneName":null,"ststandbyPower":null,"ststandbyPowerName":null,"stconfigoilmachine":null,"stconfigoilmachineName":null,"stcellSecurity":null,"stcellSecurityName":null,"stnightShift":null,"stmaintenanceRoompersonid":null,"stmaintenanceRoomperson":null,"stifnightMz":null,"stnightMzRange":null,"stallMzElement":null,"stallMzElementName":null,"stifbuyeletric":null,"deviceId":null,"fsuid":null,"semaphoreId":"0406111001","defineDealResult":null,"defineConfirmTime":null,"defineFaultDuty":null,"defineFaultDutyName":null,"defineFaultLevel":null,"defineFaultLevelName":null,"defineItowerConfirmPeople":null,"defineCarrierConfirmPeople":null,"payorder":null,"gradetype":null,"msid":null,"mssitelevel":null,"msstarttime":null,"msremark":null,"isAreaManager":false,"stprovinceid":"甘肃分公司","stcityid":"天水分公司","billAlarmActive":{"id":"6614A1644C2ED0EB44C8678E1B742903","name":"三马路财富阳光甘肃银行1号柜","code":"CHZD12DPC0201106014","deviceid":"CHZD12DPC0201106014","devicecode":"CHZD12DPC0201106014","devcount":null,"areaid":null,"itowerid":null,"roomid":null,"model":"DPCHDL-ZD[12]Z","type":null,"factory":"DLY","factoryName":"动力源","status":"2","uygur":null,"startusetime":null,"nature":null,"remark":null,"createtime":"2021-05-10 10:28:14","createuserid":"cda34b38298746ff81b1fefdb9ee3349","createuser":null,"updatetime":"2022-05-18 15:38:58","updateuserid":null,"updateuser":null,"tablename":"TW_PW_SWITCH_CABINET","provinceid":"0098360","cityid":"0100070","countyid":"0108750","crewprovinceid":"620000","crewcityid":"620500","crewareaid":"620503","version":null,"servicestimes":0,"servicedate":null,"servicestatus":"1","mainid":null,"rssource":"1","businesstype":"2","clientid":null,"orgid":null,"treeid":null,"roleid":null,"provincename":"甘肃省","cityname":"天水市","countyname":"麦积区","mainname":null,"stacode":null,"netstatus":"4"},"billDevOb":{"id":"6614A1644C2ED0EB44C8678E1B742903","name":"三马路财富阳光甘肃银行1号柜","code":"CHZD12DPC0201106014","deviceid":"CHZD12DPC0201106014","devicecode":"CHZD12DPC0201106014","devcount":null,"areaid":null,"itowerid":null,"roomid":null,"model":"DPCHDL-ZD[12]Z","type":null,"factory":"DLY","factoryName":"动力源","status":"2","uygur":null,"startusetime":null,"nature":null,"remark":null,"createtime":"2021-05-10 10:28:14","createuserid":"cda34b38298746ff81b1fefdb9ee3349","createuser":null,"updatetime":"2022-05-18 15:38:58","updateuserid":null,"updateuser":null,"tablename":"TW_PW_SWITCH_CABINET","provinceid":"0098360","cityid":"0100070","countyid":"0108750","crewprovinceid":"620000","crewcityid":"620500","crewareaid":"620503","version":null,"servicestimes":0,"servicedate":null,"servicestatus":"1","mainid":null,"rssource":"1","businesstype":"2","clientid":null,"orgid":null,"treeid":null,"roleid":null,"provincename":"甘肃省","cityname":"天水市","countyname":"麦积区","mainname":null,"stacode":null,"netstatus":"4"},"stconpersonid":"","lpercent":null,"dpercent":null,"action":[],"revertUser":null,"revertPhone":null,"faultCause":null,"arriveOperDate":null,"dealDesc":null,"pictureAddress":null,"pictures":null,"rdeviceType":"","tmonRevert":null},"success":true} 获取告警详情 POST /workorder/tMonMainbill/getAlarmList/ {"faultid":"24230663"} {"code":200,"msg":null,"data":{"total":1,"rows":[{"id":"19cdf08127444c3d904ffcd1eeb6f4cd","category":null,"objtype":null,"objid":"CHZD12DPC0201106014","objname":"三马路财富阳光甘肃银行1号柜","subobjtype":null,"subobjid":"CHZD12DPC0201106014","subobjname":"三马路财富阳光甘肃银行1号柜","origlevel":null,"alarmlevel":"2","cause":null,"code":null,"detailinfo":"开多仓告警","extrainfo":null,"inserttime":null,"firstalarmtime":null,"lastalarmtime":null,"times":null,"ifconfirm":null,"confirmtime":null,"areaid":null,"confirmperson":null,"alarmtype":null,"userRemark":null,"ifrecover":null,"ifconvertfault":null,"faultid":null,"ifattention":null,"source":"1","alarmname":"开多仓告警","serialno":null,"stationid":null,"mid":null,"firstsystemtime":"2023-11-22 16:28:53","lastsystemtime":"2023-11-22 16:28:53","parentAlarmid":null,"stationstatus":null,"stationservicestatus":null,"confirminfo":null,"dtime":null,"dispachDelaySecond":null,"twResBaseStation":null,"provincename":null,"stationids":null,"fromfirsttime":null,"tofirsttime":null,"areaids":null,"searchAllParam":null,"businesstype":null,"tablename":null,"factory":null,"clientid":null,"clearsystemtime":null,"flgy":null,"cityname":null,"countyname":null,"netstatus":null,"status":null,"devname":null,"devtablename":null,"subdevtablename":null,"iscrossdocking":null,"twstationid":null,"stationname":null,"stationcode":null,"alarmFlag":null,"cleartype":null,"clearperson":null}]},"success":true} 接单 POST /workorder/bill/receiveBill/ {"billsn":"FS-0098360-001-20231122-068601","billId":"24230663","operate":"ACCEPT","remark":"","userId":"3210a67604c443b79f34dc0f77d17d44"} {"code":200,"msg":"接单成功!","data":null,"success":true}
浙公网安备 33010602011771号