企业项目管理系统服务端
注册
1.1用户名-密码注册
1.11注册界面接收以下信息:
用户名、密码、手机号、邮箱
1.12用户名-密码注册逻辑:
接收前端用户注册填写的个人信息:用户名、手机号、邮箱,服务器请求数据库,查看以上三个字段是否有记录,来判断是否为新用户。
(1)如果是新用户,则继续填写公司相关信息:
- gender;icon;number;isAdmin;postId;postName;departmentId;departmentName。
- controller层:接收这些字段,放入UserEntity。
- service层:再UserMapping.insert(UserEntity)插入一个用户。
(2)如果第三方微信注册过,则提示用户名?手机号?邮箱?“已经注册过,正在进行相关绑定”。
- controller层接口:接收上述字段,放入UserEntity。
- service层接口:同时先通过UUID生成OpenID,通过当前手机号查询到数据库的users表的id,调用UserMapping.updateFromUser进行数据库的更新
1.13用户名-密码注册流程:
1.14controller层接口:
1.15service层接口:
1.2第三方登录注册
1.21注册界面接收以下信息:
Nick_name、性别、头像地址url、地点、手机号、邮件、openid
1.22微信扫码注册逻辑:
扫码后,授权Nick_name、性别、头像地址url、 地点,返回的信息放入WxUsersEntity。弹框提示绑定手机号、邮件,再放入UsersEntity。通过获得授权接收的手机号,服务器请求数据库,查看手机号、邮箱字段是否有记录,来判断是否为新用户。
(1)如果是新用户,继续填写公司相关信息:
- gender;icon;number;isAdmin;postId;postName;departmentId;departmentName,放入UsersEntity。
- controller层:接收WxUsersEntity,icon字段用微信头像,gender、phone,都放入UsersEntity中。
- service层:先去微信网关拿到wxOpenId放入WxUsersEntity,插入UserMapping.insert(UserEntity),UsersMapping.getUserId()通过phone查询users表,返回users_id放入WxUsersEntity,进行插入再WxUsersMapping.insert()插入一个用户。
(2)如果用户名-密码注册过,则绑定用户名密码注册的表单:
- controller层接口:接收WxUsersEntity字段 。
- service层:先去微信网关拿到wxOpenId放入WxUsersEntity。WxUsersMapping.getUserId()通过phone查询users表,返回users_id存入WxUsersEntity,再插入WxUsersMapping.insert()。
再次扫码获取授权后可直接登录。
1.23第三方登录注册流程:
同1.13模式,可根据以上逻辑进行判断,不再叙述
1.24controller层接口:
1.25service层接口:
登录
2.1用户名-密码登录
2.11登录界面发送以下信息:
用户名、密码、手机号、邮箱
2.12用户名密码登录逻辑:
接收前端用户登录填写的个人信息:用户名或手机号、密码,服务器请求数据库,查看用户名或手机号字段是否有记录,来判断是否为新用户。
(1)如果用户名为空,继续判断手机号,如果手机号也为空,则是新用户,log“账号不存在,请先注册”
(2)如果用户名或手机号有一项不为空,则继续判断密码。将接收到的phone和UserName输入MD5方法加密,与数据库请求之前存过的密码是否一致,若相同,则进入主页,log“登录成功”,写Redis。否则log“登录失败,用户名或密码错误”
2.13controller层接口:
2.14service层接口:
Redis后面再设置
2.2第三方登录
2.21登录界面发送以下信息:
Nick_name、性别、头像地址url、地点、openid
2.22第三方登录逻辑:
接收前端第三方登录授权的个人信息:openid,服务器请求数据库,查看openid字段是否有记录,来判断是否为新用户。
(1)如果数据库openid与接收到的openid一致,则进入主页,log“登录成功”,写Redis。
(2)否则是新用户,log“账号不存在,请先注册”
2.23 controller层接口:
2.24 service层接口:
本地测试(注册、登录)
3.1 修改注册逻辑:
通过“用户名、手机号、邮箱”查用户名-密码注册表单为空时,进行微信注册表单绑定,如果表单绑定成功,可直接登录。如果不成功,则进行添加新用户。
3.2 本地测试
第一次 注册
第二次 重复注册
第三次 只更改用户名注册
第四次 只更改用户名和手机号注册
第五次 只更改用户名、手机号和邮箱注册
第六次 只更改用户名、手机号、邮箱工号和注册
3.3 微信·开放平台——网站应用开发
3.31网址
https://open.weixin.qq.com/cgi-bin/frame?t=home/web_tmpl&lang=zh_CN
3.32功能
用户可使用微信帐号快速登录你的网站,并可在用户授权后,获取用户基本信息,包括头像、昵称、性别、地区。
3.33 账号
密码:首字母大写
3.34 申请流程
在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,并获得相应的AppID和AppSecret
3.35时序流程图
- 用户点击网站微信登陆图标。
- 网站带上AppID和AppSecret和回调域名参数请求微信OAuth2.0授权登陆。
- 第二步通过后,微信返回二维码供用户扫码。
- 用户扫码确定授权。
- 微信带上code参数回调java后端相关接口。
- java后端获取到code后,在带上带上AppID和AppSecret和code再去调微信接口。
- 获取access_token后就可以解析用户的一些基本信息,比如:微信用户头像、用户名、性别、城市等一些基本参数。
具体接口参数说明看官方文档。
3.36 接口
相关资料已备齐,等平台申请通过再测试
3.4 注册信息下拉选项(动态)
3.41 功能
“岗位、权限、部门”下拉选项,动态更新,使高级管理员更改三类选项时,注册界面的下拉选项可直接更新。
3.42 controller层接口:
3.43 service层接口:
前后端测试(注册)
4.1 页面整合
4.11文件存储规则
在resource/static/html下面放html文件
#应用名称
spring.application.name=test
#使用的端口,默认就是8080
server.port=8080#视图解析
spring.mvc.view.prefix=/html/spring.mvc.view.suffix=.html
前缀是/html/,不是什么/static/html/,也不是什么classpath:/static/html。
注释必须要独占一行。
springboot中默认resources中static文件夹存放静态资源,如js文件、css文件、图片等等。templates文件夹中存放html页面。
4.12 返回页面(注释)
在controller中可直接返回html文件名,示例:return “index”;不能在service层里返回页面
注意Controller上要用@Controller,不能用@RestController或@ResponseBody,这2个注解是把return返回的字符串作为json直接返回给浏览器。
@RestController = @ResponseBody + @Controller
在浏览器地址栏输入 ip:port/html/xxx.html 可直接访问对应的页面。
使用普通的html有一个很大的问题:不好取controller传递的数据。
使用jsp作为视图时,jsp中可以写java代码,可以用EL表达式或request.getXxx()获取数据,普通html文件中不能写java代码,不好取数据。
前端页面显示后端参数中的数据:${xxx}
4.13 配置YAML
在YAML文件的顶级映射不允许使用重复键,出现了两个spring,因为它们必须是unique according to the specification。
在显式YAML文档开头出现的指令指示符”—”
也可以保留一个spring,datasource和thymeleaf对齐
4.2 前后端测试
4.21数据转换
测试时,发现前后端定义的数据格式不一致,导致存储失败。
解决:设置实体层UserEntityVo,且均以string格式传过来,在接收时先进行数据格式转换处理,再放到方法体里。格式转换按照数据库设置的格式来,对应UserEntity.
一、自行编码
如string格式传来文字,而数据库储存int格式,则进行
if(userEntityVo.getGender().equals("男")) {
userEntity.setGender(2);
}
把“男”赋值“2”进行存储。
二、直接转格式(注意静态动态,不可在controller直接把参数传进去)
Controller层:
Service层:
4.22 测试
测试成功,未来得及截图,因为还想优化一下,等师弟那边相对文件路径改好再测一遍。
项目请求、签订、状态
5.1项目请求
5.11项目请求逻辑:
项目请求界面,填好信息,点击“提交”,插入一个项目请求,并且提供两种查询项目方法:
- 通过名称查询
- 通过公司名称查询
5.12controller层接口:
项目请求界面,填好信息,点击“提交”,插入一个项目请求
根据项目名称查询项目信息
根据客户公司名称查询项目信息
5.13service层接口:
5.2项目签订
5.21项目签订逻辑:
项目签订界面,填好信息,点击“提交”,插入一个签订记录。根据po查询签订记录,根据合同号查询签订记录,根据公司项目编号查询签订记录,根据客户公司代码查询签订记录,根据交货日期查询签订记录
5.22controller层接口:
项目签订界面,填好信息,点击“提交”,插入一个签订记录
根据po查询签订记录
根据合同号查询签订记录
根据公司项目编号查询签订记录
根据客户公司代码查询签订记录
根据交货日期查询签订记录
5.23service层接口:
5.3项目状态
5.31项目状态逻辑:
插入一条状态记录,根据状态描述查询id,修改状态描述。
修改状态分两种:
pass,状态递进一位;
noPass,状态递减一位。
5.32controller层接口:
插入一条状态记录
根据状态描述查询id
修改状态,通过
修改状态,不通过
5.33service层接口:
项目设计
6.1项目设计
6.11项目设计逻辑:
插入一条设计记录
6.12controller层接口:
6.13service层接口:
6.2项目-软件设计
6.21项目软件设计:
插入一条软件设计记录
6.22controller层接口:
插入一条软件设计记录
6.23service层接口:
6.24文件上传测试:
在本地文件夹和数据库中均储存成功
(1)本地文件夹:
(2)数据库:
6.25文件上传注意:
参数保持一致
(1)controller
前端html:
(2)controller创建多个value = “”与html中name一一对应
6.3项目-电气设计
6.31项目电气设计逻辑:
插入一条电气设计记录
6.32controller层接口:
6.33service层接口:
6.34文件上传测试:
在本地文件夹和数据库中均储存成功
(1)本地文件夹:
(2)数据库:
6.4项目-机械设计师
6.41项目机械设计师逻辑:
插入一条机械设计师记录
6.42controller层接口:
6.43service层接口:
6.44文件上传测试:
在本地文件夹和数据库中均储存成功
(1)本地文件夹:
(2)数据库:
6.5项目-设计关系表
6.51项目设计关系表逻辑:
插入一条设计关系表记录,根据项目公司内部项目表好pro_id查询项目机械设计信息
6.52controller层接口:
插入一条设计关系表记录
根据项目公司内部项目表好pro_id查询项目机械设计信息
6.53service层接口:
项目生产
7.1项目生产
7.11项目生产逻辑:
插入一条生产记录
7.12controller层接口:
7.13service层接口:
7.2项目-外协
7.21项目生产外协逻辑:
插入一条外协记录
7.22controller层接口:
7.23service层接口:
7.24文件上传测试
7.3项目-零件加工
7.31项目生产零件加工逻辑:
插入一条零件加工记录
7.32controller层接口:
7.33service层接口:
7.4项目-采购
7.41项目生产采购逻辑:
插入一条采购记录
7.42controller层接口:
7.43service层接口:
项目-用户关联、项目装配表
8.1项目-用户关联
8.11项目-用户关联逻辑:
插入一条项目-用户关系记录,根据userId,查询相关的proId,根据proId, 查询相关的userId
8.12controller层接口:
插入一条项目-用户关系记录
根据userId,查询相关的proId
根据proId, 查询相关的userId
8.13service层接口:
8.2项目装配表
8.21项目装配表逻辑:
插入一条装配记录
8.22controller层接口:
8.23service层接口: