1. 软件开发和项目介绍 🍐
1.1 软件开发整体介绍 🍐
软件开发整体介绍
作为一名软件开发工程师,我们需要了解在软件开发过程中的开发流程, 以及软件开发过程中涉及到的岗位角色,角色的分工、职责, 并了解软件开发中涉及到的三种软件环境。那么这一小节,我们将从 三个方面,来整体上介绍一下软件开发。
软件开发流程 🍐

岗位/角色 | 职责/分工 |
---|---|
项目经理 | 对整个项目负责,任务分配、把控进度 |
产品经理 | 进行需求调研,输出需求调研文档、产品原型等 |
UI 设计师 | 根据产品原型输出界面效果图 |
架构师 | 项目整体架构设计、技术选型等 |
开发工程师 | 功能代码实现 |
测试工程师 | 编写测试用例,输出测试报告 |
运维工程师 | 软件环境搭建、项目上线 |
角色分工是在一个项目组中比较标准的角色分工, 但是在实际的项目中, 有一些项目组由于人员配置紧张, 可能并没有专门的架构师或测试人员, 这个时候可能需要有项目经理或者程序员兼任
软件环境 🍐

1). 开发环境(development)
我们作为软件开发人员,在开发阶段使用的环境,就是开发环境,一般外部用户无法访问 。
比如,我们在开发中使用的 MySQL 数据库和其他的一些常用软件,我们可以安装在本地, 也可以安装在一台专门的服务器中, 这些应用软件仅仅在软件开发过程中使用, 项目测试、上线时,我们不会使用这套环境了,这个环境就是开发环境。
2). 测试环境(testing)
当软件开发工程师,将项目的功能模块开发完毕,并且单元测试通过后,就需要将项目部署到测试服务器上,让测试人员对项目进行测试。那这台测试服务器就是专门给测试人员使用的环境, 也就是测试环境,用于项目测试,一般外部用户无法访问 。
3). 生产环境(production)
当项目开发完毕,并且由测试人员测试通过之后,就可以上线项目,将项目部署到线上环境,并正式对外提供服务, 这个线上环境也称之为生产环境。
总结
课堂作业
- 请回答软件的开发流程是什么?🎤
- 请回答软件开发过程中,有哪些角色,以及实际工作中这些角色都需要招聘吗?
- 测试环境和生产环境有什么区别?
1.2 整体业务流程 🍐
整体业务流程
中国老龄化程度加深,我国老龄事业和养老服务体系的发展得到了国家的高度重视,在国家政策的支持下,我国智慧养老产业主体持续增多,产业链不断整合,发展前景较好。我国正在形成一个多元化“互联网+养老”的智慧老年护理服务系统,智慧养老是我国的必然趋势
中州养老系统为养老院量身定制开发专业的养老管理软件产品;涵盖来访管理、入退管理、在住管理、服务管理、财务管理等功能模块,涉及从来访参观到退住办理的完整流程。

项目原型地址:https://rp-java.itheima.net/zhyl/
项目后端运行地址:https://zhyl-admin.itheima.net/#/login
中州养老项目分为两端,一个是管理后台,另外一个是家属端
- 管理后台:养老院员工使用,入住、退住,给老人服务记录等等
- 家属端:养老院的老人家属使用,查看老人信息,缴费,下订单等等
数据访问流程: 👇
总结
课堂作业
- 微信小程序有什么优势!!🎤
- 如果要你设计一个养老院管理系统,你能想到什么功能?
- 点击阅读在线原型文档,了解中州养老的业务
1.3 实训说明和任务 🍐
实训说明和任务

- 整个中州养老的前后端代码要全部实现,需要三个月以上的时间
- 由于本次实训时间所限,没有办法将整个中州养老的所有代码实现,所以咱们会从项目中挑选部分功能进行实现,把我们本次实训所学习的技术应用起来。
- 本次实训选取中州养老项目家属端 的部分功能进行实现
- 其中前端微信小程序部分已经实现好 了,我们只需要把提供好的代码运行起来,配合后端完成测试及效果展示即可。


将来要实现的家属端的功能包含如下:👇
登录模块:✏️ 🎯
- 登录
- 退出
家人模块:✏️ 🎯
- 家人列表分页查询
- 绑定家人
- 解绑家人
健康模块:✏️ 🎯
- 查看健康数据
- 按天查看健康数据
- 按周查看健康数据
预约模块: ✏️ 🎯
- 预约列表分页查询
- 新增预约(新增预约和新增探访2个不同的接口)
- 取消预约
房型模块: 🎯
- 查询所有房型
护理服务模块: 🎯
- 护理服务列表分页查询
- 护理服务详情查询
AI模块: 🎯
- AI客服机器人(含智能体)
实训任务
1 边讲边练
参照接口文档,完成对应的功能
2 自己完成
参照接口文档,完成对应的功能
2. 项目构建 ✏️ ❤️
2.1 项目环境搭建 ✏️ ❤️
项目环境搭建
前端的代码将来在公司中会由前端工程师专门开发。咱们本次实训最终要完成的中州养老项目中也有前端代码,但是这些代码我们不写,因为咱们本次是java的实训,并不是前端的实训,所以这些前端的代码已经提供好了,目的是为了有更好的展示效果。咱们提供好的是一个微信小程序的代码,其本质就是用html、css、javascript开发的。在这一块我们主要讲解一下如何运行提供好的代码即可。如果将来大家想学习如何实现小程序的开发,来黑马,一定安排的明明白白
微信小程序大家都用过,只需要在微信中搜索对应的小程序名字,使用即可,无需安装。咱们本次实训中的项目并没有发布, 所以需要大家每个人拷贝一份提供好的小程序代码,并且安装小程序的开发软件,在软件中运行提供好的代码即可。

操作:👇 前提:在资料文件夹中找到”微信开发者工具安装包”安装到本地,也可以直接到官网下载 在当天资料文件夹中找到”mp-weixin.zip”的压缩包,解压到一个没有中文和空格的目录 打开微信开发者工具,需要使用微信扫描登录

登录成功后,点击“+”号,找到刚才解压的小程序代码的目录,然后打开


打开之后,需要信任该项目,加载完毕之后的效果如下:

在小程序登录的时候,需要获取微信用户的手机号,目前在开发测试阶段,如果想要获取手机号需要把开发者加入小程序的开发者团队中,一个小程序的开发者团队最多50人。所以不能让每位同学都加入开发者团队中,不过,在微信小程序中可以由个人开通测试号来进行调试,这样就可以获取更多的微信信息了,就包含了手机号。 现在大家需要每人注册一个微信小程序的测试号:小程序AppId申请
设置不校验合法域名

注: 开发阶段,小程序发出请求到后端的Tomcat服务器,若不勾选,请求发送失败必须勾选 ,且调试库选择老一点的版本
0-1项目是从0开始搭建的项目,常见于一些新项目。0-2项目是从已有项目基础上进行开发的,常见于一些老项目。市面上绝大部分的项目都是0-2项目。
本次实训的基础夯实阶段是0-1项目,而zzylai项目是0-2项目,和实际企业开发接轨。
接下来我们来导入zzylai项目,并完成项目的初始化。
1. 在微信群中下载zzylai.zip包,解压到本地的非中文路径下

2. 打开IDea,进入welcome界面,进行全局Maven设置,并选择Maven的中央仓库


3. 打开IDEA,选择File->Open,找到刚才解压的zzylai项目,点击OK

接下来准备数据库环境了...
整个项目说明

1. 在项目中的doc文件夹中,获取数据库脚本文件

2. 在idea项目中链接数据库或者你用Navicat等工具导入数据库脚本文件也可以

3. 将数据库脚本双击打开,将数据导入到数据库中

- 修改application.yml中的数据库连接信息


总结
课堂作业
- 参考上述步骤完成项目环境搭建,不会多看几遍🎤
2.2 查看所有房型 🎯
查看所有房型
代码操作
开发流程:
- 编写Controller代码
- 编写Mapper接口和Mapper映射配置文件
- 微信小程序测试
1.在Controller中添加方法

注意: 可以通过@Autowired注解,从IOC容器中获取指定类型的对象并赋值给成员变量
2.小程序测试:👇

2.3 介绍和准备工作
小程序的概要和入门案例
1️⃣ 介绍和准备工作
小程序 是一种新的开放能力,开发者可以快速地开发一个小程序。可以在微信内被便捷地获取和传播,同时具有出色的使用体验。

官方网址: https://mp.weixin.qq.com/cgi-bin/wx?token=&lang=zh_CN

小程序主要运行微信内部,可通过上述网站来整体了解微信小程序的开发。前端负责
首先, 在进行小程序开发时,需要先去注册一个小程序,在注册的时候,它实际上又分成了不同的注册的主体。我们可以以个人的身份来注册一个小程序,当然,也可以以企业政府、媒体或者其他组织的方式来注册小程序。那么,不同的主体注册小程序,最终开放的权限也是不一样的。比如以个人身份来注册小程序,是无法开通支付权限个人无法开通支付的。若要提供支付功能,必须是企业、政府或者其它组织等 。所以,不同的主体注册小程序后,可开发的功能是不一样的。

然后, 微信小程序我们提供的一些开发的支持,实际上微信的官方是提供了一系列的工具来帮助开发者快速的接入 并且完成小程序的开发,提供了完善的开发文档,并且专门提供了一个开发者工具 ,还提供了相应的设计指南,同时也提供了一些小程序体验DEMO,可以快速的体验小程序实现的功能 。依葫芦画瓢写个demo,体验一下

最后, 开发完一个小程序要上线个人的小程序可以上线,也给我们提供了详细地接入流程。

总结
- 小程序 是一种新的开放能力,开发者可以快速地开发一个小程序。可以在微信内被便捷地获取和传播,同时具有出色的使用体验。
- 小程序有多种,如微信小程序,抖音小程序,支付宝小程序等都是依附在App内的,今天主要讲解微信小程序
- 注意: 本次的可以申请测试号进行开发,正式上线需要申请正式号
测试号地址:https://developers.weixin.qq.com/miniprogram/dev/devtools/sandbox.html
课堂作业
- 小程序的 AppID是什么?怎么获得?有什么用?🎤

2.4 微信登录流程 🍐 ❤️
微信登录流程
在任意需要登录才能显示信息的页面点击时,都会判断当前用户是否登录,如未登录,则进入登录页面,点击微信账号登录,弹出弹窗,需要获取用户手机号进行登录

结合下面的授权码,去官网查看微信登录流程图微信登录流程 官网介绍 重要!! 阅读时序图 👈 👈
微信登录业务逻辑规则:👇
总结
课堂作业
- 授权码是什么,有什么作用?
- OpenID是什么?有什么特点和作用? 授权码和OpenID的区别是什么?🎤
- 请参考官网的微信登录流程,自行绘制一下流程图。
2.5 微信登录代码集成
微信登录集成
1. 阅读接口文档和效果图
接口文档:

2. 根据接口文档描述,在FamilyMemberController中定义login方法,接收前端请求。同时要使用UserLoginRequestDto来接收前端请求参数。
/**
* 微信端的用户相关接口
*/
@RestController
@RequestMapping("/customer/user")
@Api(tags = "老人家属的接口")
public class FamilyMemberController
{
@Autowired
private FamilyMemberService familyMemberService;
@PostMapping("/login")
@ApiOperation("小程序登录")
public AjaxResult login(@RequestBody UserLoginRequestDto dto){
LoginVo loginVo = familyMemberService.login(dto);
return AjaxResult.success(loginVo);
}
}
3. 打开WechatService设置好appid和appsecret,这部分可以申请测试号
具体步骤上面的笔记有,自己找找
4. 考虑代码较多,将这部分登录的代码放到service中,方便后续的调用。注意,不要直接复制哦,参考过程写,
写代码的时候,一定要参考流程图来写哦,
/**
* 老人家属Service业务层处理
*/
@Service
public class FamilyMemberService {
@Autowired
private FamilyMemberMapper familyMemberMapper;
@Autowired
private WechatService wechatService;//微信服务
//随机昵称
static List<String> DEFAULT_NICK_NAME = ListUtil.of(
"生活更美好",
"大桔大利",
"日富一日",
"好柿开花",
"柿柿如意",
"一椰暴富",
"大柚所为",
"杨梅吐气",
"天生荔枝");

图中的inserOrUpdateFamilyMember方法,是新增或修改用户,代码在下面哦!!👇
/**
* 新增或修改用户
* @param familyMember
* @param phone
*/
private void inserOrUpdateFamilyMember(FamilyMember familyMember, String phone) {
//1. 判断新的手机跟数据库中保存的手机号是否一致
if(ObjectUtil.notEqual(familyMember.getPhone(),phone)){
familyMember.setPhone(phone);
}
//2. id是否存在,如存在,就修改
if(ObjectUtil.isNotEmpty(familyMember.getId())){
//todo 这里代码删了,需要你补充哦,ε=(´ο`*)))唉 也是为了防止大家直接copy
}
//3. 不存在,就新增 (拼装用户的昵称:随机字符串+手机号后4位)
int index = (int)(Math.random() * DEFAULT_NICK_NAME.size());
String nickName = DEFAULT_NICK_NAME.get(index)+ phone.substring(phone.length()-4);
familyMember.setName(nickName);
familyMemberMapper.insert(familyMember);
}
}
测试结果:
总结
课堂作业
- 参考流程图,完成代码的编写,注意,不要直接复制哦,参考过程写,🎤
- 代码中用到了jwt令牌,可以自己百度一下,了解一下,后续我们在讲解🎤