一、发起项目

1. 创建表

  1. # 创建分类表
  2. CREATE TABLE t_type
  3. (
  4. id INT(11) NOT NULL AUTO_INCREMENT,
  5. NAME VARCHAR(255) COMMENT '分类名称',
  6. remark VARCHAR(255) COMMENT '分类介绍',
  7. PRIMARY KEY (id)
  8. );
  9. # 创建项目分类中间表
  10. CREATE TABLE t_project_type
  11. (
  12. id INT NOT NULL AUTO_INCREMENT,
  13. projectid INT(11),
  14. typeid INT(11),
  15. PRIMARY KEY (id)
  16. );
  17. # 创建标签表
  18. CREATE TABLE t_tag
  19. (
  20. id INT(11) NOT NULL AUTO_INCREMENT,
  21. pid INT(11), NAME VARCHAR(255),
  22. PRIMARY KEY (id)
  23. );
  24. # 创建标签中间表
  25. CREATE TABLE t_project_tag
  26. (
  27. id INT(11) NOT NULL AUTO_INCREMENT,
  28. projectid INT(11),
  29. tagid INT(11),
  30. PRIMARY KEY (id)
  31. );
  32. # 创建项目表
  33. CREATE TABLE t_project
  34. (
  35. id INT(11) NOT NULL AUTO_INCREMENT,
  36. project_name VARCHAR(255) COMMENT '项目名称',
  37. project_description VARCHAR(255) COMMENT '项目描述',
  38. money BIGINT (11) COMMENT '筹集金额',
  39. DAY INT(11) COMMENT '筹集天数',
  40. STATUS INT(4) COMMENT '0-即将开始,1-众筹中,2-众筹成功,3-众筹失败',
  41. deploydate VARCHAR(10) COMMENT '项目发起时间',
  42. supportmoney BIGINT(11) COMMENT '已筹集到的金额',
  43. supporter INT(11) COMMENT '支持人数',
  44. COMPLETION INT(3) COMMENT '百分比完成度',
  45. memberid INT(11) COMMENT '发起人的会员 id',
  46. createdate VARCHAR(19) COMMENT '项目创建时间',
  47. follower INT(11) COMMENT '关注人数',
  48. header_picture_path VARCHAR(255) COMMENT '头图路径',
  49. PRIMARY KEY (id)
  50. )
  51. # 创建项目表 项目详情图片表
  52. CREATE TABLE t_project_item_pic
  53. (
  54. id INT(11) NOT NULL AUTO_INCREMENT,
  55. projectid INT(11),
  56. item_pic_path VARCHAR(255),
  57. PRIMARY KEY (id)
  58. );
  59. # 创建项目发起人信息表
  60. CREATE TABLE t_member_launch_info
  61. (
  62. id INT(11) NOT NULL AUTO_INCREMENT,
  63. memberid INT(11) COMMENT '会员 id',
  64. description_simple VARCHAR(255) COMMENT '简单介绍',
  65. description_detail VARCHAR(255) COMMENT '详细介绍',
  66. phone_num VARCHAR(255) COMMENT '联系电话',
  67. service_num VARCHAR(255) COMMENT '客服电话',
  68. PRIMARY KEY (id)
  69. );
  70. # 创建回报信息表
  71. CREATE TABLE t_return
  72. (
  73. id INT(11) NOT NULL AUTO_INCREMENT,
  74. projectid INT(11),
  75. TYPE INT(4) COMMENT '0 - 实物回报, 1 虚拟物品回报',
  76. supportmoney INT(11) COMMENT '支持金额',
  77. content VARCHAR(255) COMMENT '回报内容',
  78. COUNT INT(11) COMMENT '回报产品限额,“0”为不限回报数量',
  79. signalpurchase INT(11) COMMENT '是否设置单笔限购',
  80. purchase INT(11) COMMENT '具体限购数量',
  81. freight INT(11) COMMENT '运费,“0”为包邮',
  82. invoice INT(4) COMMENT '0 - 不开发票, 1 - 开发票',
  83. returndate INT(11) COMMENT '项目结束后多少天向支持者发送回报',
  84. describ_pic_path VARCHAR(255) COMMENT '说明图片路径',
  85. PRIMARY KEY (id)
  86. );
  87. # 创建发起人确认信息表
  88. CREATE TABLE t_member_confirm_info
  89. (
  90. id INT(11) NOT NULL AUTO_INCREMENT,
  91. memberid INT(11) COMMENT '会员 id',
  92. paynum VARCHAR(200) COMMENT '易付宝企业账号',
  93. cardnum VARCHAR(200) COMMENT '法人身份证号',
  94. PRIMARY KEY (id)
  95. );

2. 创建VO对象

package com.yixuexi.crowd.entity.vo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.List;

/**
 * @date: 2021/3/20   13:45
 * @author: 易学习
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ProjectVO implements Serializable {
    private static final long serialVersionUID = 1L;
    private List<Integer> typeIdList;
    // 标签 id 集合
    private List<Integer> tagIdList;
    // 项目名称
    private String projectName;
    // 项目描述
    private String projectDescription;
    // 计划筹集的金额
    private Integer money;
    // 筹集资金的天数
    private Integer day;
    // 创建项目的日期
    private String createdate;
    // 头图的路径
    private String headerPicturePath;
    // 详情图片的路径
    private List<String> detailPicturePathList;
    // 发起人信息
    private MemberLauchInfoVO memberLauchInfoVO;
    // 回报信息集合
    private List<ReturnVO> returnVOList;
    // 发起人确认信息
    private MemberConfirmInfoVO memberConfirmInfoVO;
}

3. PO对象使用逆向工程创建

二、 发起项目-代码

1. 总目标:

将各个表单页面提交的数据汇总到一起保存到数据库。

2. 思路

image.png

3.代码

1. 添加zuul 访问project工程 【配置】

application.yaml 【第9-11行】

zuul:
  routes:
    crowd-portal:                         # 自定义路由规则的名称,在底层是一个Map的key
      serviceId: yixuexi-crowd-auth # 目标微服务名称,ZuulRoute类型的一个属性
      path: /**         # 用来代替目标微服务名称的路径,ZuulRoute类型的一个属性
      # /**表示比配多层路径, 如果没有/**则不能匹配后续的多层路径了
    #ignored-services:     # 忽略指定微服务名称,让用户不能通过微服务名称访问
    # - consumer-service
    crowd-project:  # 配置一下project项目 zuul访问  这就是key
      serviceId: yixuexi-crowd-project  # 微服务名称
      path: /project/**   # 代替目标微服务名称的路径

  ignored-services: '*'  # 忽略所有微服务名称
  sensitive-headers: "*" # 在zuul向其他微服务重定向是保持原本头信息(请求头,响应头)

image.png
注意: 如果一个地址不经过zuul的情况下访问 那么就不要带 /project 部分
例如:project工程内部的view-controller 不会经过zuul

2. 在project工程配置view-controller

@Configuration
public class CrowdWebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {

        // view-controller 是在project工程内部定义的,这里是不经过zuul访问的地址
        // 所以这个路径不加路由规则定义的 /project
        // 跳转到  同意协议 页面
        registry.addViewController("/agree/protocol/page").setViewName("project-agree");

        registry.addViewController("/launch/project/page").setViewName("project-launch");

    }
}

坑:project工程的html页面 【退出系统】】的链接 需要这样写:
需要写清楚 是要从zuul去访问auth/member/logout 接口,这样才能保持session一致

<a href="http://www.localhost:80/auth/member/logout">退出系统</a>