运营管理App
Android模拟器
本项目的App客户端部分已经由前端团队进行开发完成,并且以apk的方式提供出来,供我们测试使用,如果要运行apk,需要先安装安卓的模拟器。
可以选择国内的安卓模拟器产品,比如:网易mumu、雷电、夜神等。课程中使用网易mumu模拟器,官网地址:http://mumu.172.com/。百度网盘中提供了mumu安装包,大家安装到非中文路径即可。
资料中提供了运营管理App端安装包
需要让模拟器中的App能够连接我们自己本地代码,需要修改下URL地址:本地环境就是搭建的后端dkd-app
,运行端口就是9007。需要通过安卓访问windows环境,所以不能写localhost
,访问这个环境mumu模拟器
有固定的ip10.0.0.2
。
Java后端
本项目运营管理App的java后端已开发完成,在资料中已提供源码,导入idea中即可
本项目连接的也是dkd数据库,如果密码不是root可以进行修改
app端和后端的联调测试
选择一个运营或运维人员手机号进行登录,验证码默认为12345。
功能测试
投放工单
帝可得管理端,创建新设备
帝可得管理端,创建投放工单
运营管理App端登录负责此工单员工,即可查看待办工单,可以选择拒绝、接受
如果点击接受,帝可得管理端工单状态改为进行
在进行工单界面,可以点击查看详情,选择取消、完成
如果点击完成工单,帝可得管理端工单状态改为完成
帝可得管理端设备状态改为运营,表示设备投放成功
补货工单
帝可得管理端,货道关联商品。
帝可得管理端,创建补货工单
运营管理App端登录负责此工单员工,即可查看待办工单,可以选择拒绝、接受
如果点击接受,帝可得管理端工单状态改为进行
在进行工单界面,可以点击查看详情,选择取消、完成
如果点击完成工单,帝可得管理端工单状态改为完成
数据库货道表的库存已同步更新
源码介绍
运营管理App的java后端技术栈:SpringBoot+MybatisPlus+阿里云短信
SpringBoot
做为后端得框架,MybatisPlus
做为数据访问层的工具简化Mybatis的编写,阿里云短信服务用于发送短信通知。
项目分为三个核心模板:员工管理、工单管理和工单详情管理。
员工管理
发送短信验证码
接收app端传送的手机号。当用户在app输入手机号点击获取验证码的按钮,它就会向后台发送请求来执行此方法。通过路径参数拿到手机号,调用service实现发送短信的功能。
在service方法中使用RandomUtil生成5位随机的验证码,由于是开发环境,这里暂时将验证码写死位12345。但是在产品上线之前,需要将代码打开。生成完毕之后需要调用阿里云短信的工具类,实现发送短信的功能。短信发送完之后需要往redis中存储生成的验证码,设置有效时间位5分钟,在5分钟内做登录的话,就可以从redis中获取正确的验证码,与app端输入的验证码进行比对。
短信工具类的模板:commom/util/SmsTemplate.java
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
//短信发送工具类
@Data
@Component
@ConfigurationProperties(prefix = "dkd.sms")
public class SmsTemplate {
// 拿到配置文件读取的参数
private String key;
private String secret;
private String signName;
private String templateCode;
// 调用阿里云平台发送短信
public void sendSms(String phoneNumbers, String code) {
//设置超时时间
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
try {
//初始化acsClient,暂不支持region化
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", key, secret);
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", "Dysmsapi", "dysmsapi.aliyuncs.com");
IAcsClient acsClient = new DefaultAcsClient(profile);
//组装请求对象-具体描述见控制台-文档部分内容
SendSmsRequest request = new SendSmsRequest();
request.setPhoneNumbers(phoneNumbers);//手机号
request.setSignName(signName);//短信前面
request.setTemplateCode(templateCode);//短信模板
request.setTemplateParam("{\"code\":\"" + code + "\"}");//验证码
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
} catch (Exception e) {
e.printStackTrace();
}
}
}
配置文件中指定短信的配置信息
有key和secret密钥对,sign-name短信签名和template-code短信模板编码,可以自行注册阿里云短信,输入自己的密钥对。
员工登录:
员工登录会设计一个接收参数,调用service。
在service中比对验证码、手机号,再返回一个登录的LoginVo
结果,设置登录的员工参数,然后制定token
令牌。最后判断维修员还是运营人员。
查询员工基本信息
上面显示的员工基本信息,对应的后端接口如下。前端会根据当前登录的员工id,查询员工的基本信息。调用的是MybatisPlus
通用service功能getById(id)
。拿到员工对象之后需要封装返回结果,需要把实体类转换成前端需要的Vo对象。
工单管理
工单查询
搜索工单对应app端的三个界面:
全部工单有时间范围,也支持条件搜索,所以该方法的接收参数非常多。支持分页查询、设备编号、用户id、工单编号、工单状态、是否为运维工单以及时间范围。
在service方法中首先封装了MybatisPlus
的分页查询对象,再通过LambdaQueryWrapper
来构件动态sql
,支持各种条件查询。最终进行分页,再根据工单类型和工单状态文字说明,返回分页结果即可。也就是一个方法支持了各种分页查询。
接受工单
前端会传递一个工单id
,但是需要获取当前登录人的id
,以这两个条件调用service完成接受。
service实现,首先根据工单id判断工单是否存在。判断工单的状态是否为待处理,工单状态已经为进行中、已完成、已取消就不能接受了。登录人是否有权接受工单就是登录人必须与工单的分配人保持一致。以上条件都满足的话就可以修改工单状态为进行中,调用MybatisPlus
中通用service的updateById
方法实现数据库的更新操作,Mapper层就可以省略不写了。
取消/拒绝工单
可以拿到前端的工单Id
和拒绝/取消的理由
,再获取当前登录人的id
,这三个参数调用service完成取消。
完成工单
工单状态更新成功以后,还需要更新设备的状态。如果是投放工单,就需要把设备状态改为运营状态。如果工单类型为撤机工单,就需要把设备状态改为撤机。如果是补货工单,就需要查询工单的明细,也就是补货工单,将明细中的数据更新到数据库的库存中。
工单详情管理
根据工单id查询补货列表
拿到工单id调用service。
通过MybatisPLus
实现条件封装,执行条件查询,直接将结果返回,不需要编写mapper层。