企业项目管理系统服务端


企业项目管理系统服务端

注册

1.1用户名-密码注册

1.11注册界面接收以下信息:

用户名、密码、手机号、邮箱

1.12用户名-密码注册逻辑:

接收前端用户注册填写的个人信息:用户名、手机号、邮箱,服务器请求数据库,查看以上三个字段是否有记录,来判断是否为新用户。

(1)如果是新用户,则继续填写公司相关信息:

  1. gender;icon;number;isAdmin;postId;postName;departmentId;departmentName。
  2. controller层:接收这些字段,放入UserEntity。
  3. service层:再UserMapping.insert(UserEntity)插入一个用户。

(2)如果第三方微信注册过,则提示用户名?手机号?邮箱?“已经注册过,正在进行相关绑定”。

  1. controller层接口:接收上述字段,放入UserEntity。
  2. 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)如果是新用户,继续填写公司相关信息:

  1. gender;icon;number;isAdmin;postId;postName;departmentId;departmentName,放入UsersEntity。
  2. controller层:接收WxUsersEntity,icon字段用微信头像,gender、phone,都放入UsersEntity中。
  3. service层:先去微信网关拿到wxOpenId放入WxUsersEntity,插入UserMapping.insert(UserEntity),UsersMapping.getUserId()通过phone查询users表,返回users_id放入WxUsersEntity,进行插入再WxUsersMapping.insert()插入一个用户。

(2)如果用户名-密码注册过,则绑定用户名密码注册的表单:

  1. controller层接口:接收WxUsersEntity字段 。
  2. 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 本地测试

http://localhost/Register?userName=test01&password=123456&phone=123456789&email=123@qq.com&gender=0&number=123456&is_admin=1&post_id=123&department_id=123

第一次 注册

第二次 重复注册

第三次 只更改用户名注册

第四次 只更改用户名和手机号注册

第五次 只更改用户名、手机号和邮箱注册

第六次 只更改用户名、手机号、邮箱工号和注册

3.3 微信·开放平台——网站应用开发

3.31网址

https://open.weixin.qq.com/cgi-bin/frame?t=home/web_tmpl&lang=zh_CN

3.32功能

用户可使用微信帐号快速登录你的网站,并可在用户授权后,获取用户基本信息,包括头像、昵称、性别、地区。

3.33 账号

账号:luanbaixiang@163.com

密码:首字母大写

3.34 申请流程

在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,并获得相应的AppID和AppSecret

3.35时序流程图

  1. 用户点击网站微信登陆图标。
  2. 网站带上AppID和AppSecret和回调域名参数请求微信OAuth2.0授权登陆。
  3. 第二步通过后,微信返回二维码供用户扫码。
  4. 用户扫码确定授权。
  5. 微信带上code参数回调java后端相关接口。
  6. java后端获取到code后,在带上带上AppID和AppSecret和code再去调微信接口。
  7. 获取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项目请求逻辑:

项目请求界面,填好信息,点击“提交”,插入一个项目请求,并且提供两种查询项目方法:

  1. 通过名称查询
  2. 通过公司名称查询

5.12controller层接口:

项目请求界面,填好信息,点击“提交”,插入一个项目请求

根据项目名称查询项目信息

根据客户公司名称查询项目信息

5.13service层接口:

5.2项目签订

5.21项目签订逻辑:

项目签订界面,填好信息,点击“提交”,插入一个签订记录。根据po查询签订记录,根据合同号查询签订记录,根据公司项目编号查询签订记录,根据客户公司代码查询签订记录,根据交货日期查询签订记录

5.22controller层接口:

项目签订界面,填好信息,点击“提交”,插入一个签订记录

根据po查询签订记录

根据合同号查询签订记录

根据公司项目编号查询签订记录

根据客户公司代码查询签订记录

根据交货日期查询签订记录

5.23service层接口:

5.3项目状态

5.31项目状态逻辑:

插入一条状态记录,根据状态描述查询id,修改状态描述。

修改状态分两种:

  1. pass,状态递进一位;

  2. 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层接口:


文章作者: Luan-bx
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Luan-bx !
  目录