1. 程式人生 > 實用技巧 >尚籌網12發起專案

尚籌網12發起專案

發起專案建模

建立資料庫表

分類表

CREATE TABLE `t_type` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL COMMENT '分類名稱',
  `remark` varchar(255) DEFAULT NULL COMMENT '分類介紹',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

專案分類中間表

CREATE TABLE `t_project_type` (
  `id` 
int(11) NOT NULL AUTO_INCREMENT, `projectid` int(11) DEFAULT NULL, `typeid` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=64 DEFAULT CHARSET=utf8;

標籤表

CREATE TABLE `t_tag` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `pid` int(11) DEFAULT NULL,
  `name` varchar(255) DEFAULT
NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

專案標籤中間表

CREATE TABLE `t_project_tag` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `projectid` int(11) DEFAULT NULL,
  `tagid` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=82 DEFAULT CHARSET=utf8;

專案表

CREATE
TABLE `t_project` ( `id` int(11) NOT NULL AUTO_INCREMENT, `project_name` varchar(255) DEFAULT NULL COMMENT '專案名稱', `project_description` varchar(255) DEFAULT NULL COMMENT '專案描述', `money` bigint(11) DEFAULT NULL COMMENT '籌集金額', `day` int(11) DEFAULT NULL COMMENT '籌集天數', `status` int(4) DEFAULT NULL COMMENT '0-即將開始,1-眾籌中,2-眾籌成功,3-眾籌失敗 ', `deploydate` varchar(10) DEFAULT NULL COMMENT '專案發起時間', `supportmoney` bigint(11) DEFAULT NULL COMMENT '已籌集到的金額', `supporter` int(11) DEFAULT NULL COMMENT '支援人數', `completion` int(3) DEFAULT NULL COMMENT '百分比完成度', `memberid` int(11) DEFAULT NULL COMMENT '發起人的會員 id', `createdate` varchar(19) DEFAULT NULL COMMENT '專案建立時間', `follower` int(11) DEFAULT NULL COMMENT '關注人數', `header_picture_path` varchar(255) DEFAULT NULL COMMENT '頭圖路徑', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=52 DEFAULT CHARSET=utf8;

專案詳情圖片表

CREATE TABLE `t_project_item_pic` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `projectid` int(11) DEFAULT NULL,
  `item_pic_path` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=52 DEFAULT CHARSET=utf8;

專案發起人資訊表

CREATE TABLE `t_member_launch_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `memberid` int(11) DEFAULT NULL COMMENT '會員 id',
  `description_simple` varchar(255) DEFAULT NULL COMMENT '簡單介紹',
  `description_detail` varchar(255) DEFAULT NULL COMMENT '詳細介紹',
  `phone_num` varchar(255) DEFAULT NULL COMMENT '聯絡電話',
  `service_num` varchar(255) DEFAULT NULL COMMENT '客服電話',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=52 DEFAULT CHARSET=utf8;

回報資訊表

CREATE TABLE `t_return` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `projectid` int(11) DEFAULT NULL,
  `type` int(4) DEFAULT NULL COMMENT '0 - 實物回報, 1 虛擬物品回報',
  `supportmoney` int(11) DEFAULT NULL COMMENT '支援金額',
  `content` varchar(255) DEFAULT NULL COMMENT '回報內容',
  `count` int(11) DEFAULT NULL COMMENT '回報產品限額,“0”為不限回報數量',
  `signalpurchase` int(11) DEFAULT NULL COMMENT '是否設定單筆限購',
  `purchase` int(11) DEFAULT NULL COMMENT '具體限購數量',
  `freight` int(11) DEFAULT NULL COMMENT '運費,“0”為包郵',
  `invoice` int(4) DEFAULT NULL COMMENT '0 - 不開發票, 1 - 開發票',
  `returndate` int(11) DEFAULT NULL COMMENT '專案結束後多少天向支持者傳送回報',
  `describ_pic_path` varchar(255) DEFAULT NULL COMMENT '說明圖片路徑',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=52 DEFAULT CHARSET=utf8;

發起人確認資訊表

CREATE TABLE `t_member_confirm_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `memberid` int(11) DEFAULT NULL COMMENT '會員 id',
  `paynum` varchar(200) DEFAULT NULL COMMENT '易付寶企業賬號',
  `cardnum` varchar(200) DEFAULT NULL COMMENT '法人身份證號',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

逆向工程設定

<!-- 資料庫表名字和我們的 entity 類對應的對映指定 -->
<table tableName="t_type" domainObjectName="TypePO" />
<table tableName="t_tag" domainObjectName="TagPO" />
<table tableName="t_project" domainObjectName="ProjectPO" />
<table tableName="t_project_item_pic" domainObjectName="ProjectItemPicPO" />
<table tableName="t_member_launch_info" domainObjectName="MemberLaunchInfoPO" /> 
<table tableName="t_return" domainObjectName="ReturnPO" /> 
<table tableName="t_member_confirm_info" domainObjectName="MemberConfirmInfoPO" /> 

建立VO物件

projectVO

package com.example.entity.vo;
import java.io.Serializable;
import java.util.List;

public class ProjectVO implements Serializable {
    private static final long serialVersionUID = 1L;
    // 分類 id 集合
    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;
    public ProjectVO() {
    }

    public ProjectVO(List<Integer> typeIdList, List<Integer> tagIdList, String projectName, String projectDescription, Integer money, Integer day, String createdate, String headerPicturePath, List<String> detailPicturePathList, MemberLauchInfoVO memberLauchInfoVO, List<ReturnVO> returnVOList, MemberConfirmInfoVO memberConfirmInfoVO) {
        this.typeIdList = typeIdList;
        this.tagIdList = tagIdList;
        this.projectName = projectName;
        this.projectDescription = projectDescription;
        this.money = money;
        this.day = day;
        this.createdate = createdate;
        this.headerPicturePath = headerPicturePath;
        this.detailPicturePathList = detailPicturePathList;
        this.memberLauchInfoVO = memberLauchInfoVO;
        this.returnVOList = returnVOList;
        this.memberConfirmInfoVO = memberConfirmInfoVO;
    }
    }

MemberLaunchInfoVO

public class MemberLauchInfoVO implements Serializable {
    private static final long serialVersionUID = 1L;
    // 簡單介紹
    private String descriptionSimple;
    // 詳細介紹
    private String descriptionDetail;
    // 聯絡電話
    private String phoneNum;
    // 客服電話
    private String serviceNum;

    public MemberLauchInfoVO() {
    }

    public MemberLauchInfoVO(String descriptionSimple, String descriptionDetail, String phoneNum, String serviceNum) {
        this.descriptionSimple = descriptionSimple;
        this.descriptionDetail = descriptionDetail;
        this.phoneNum = phoneNum;
        this.serviceNum = serviceNum;
    }
}

ReturnVO

public class ReturnVO implements Serializable {
    private static final long serialVersionUID = 1L;
    // 回報型別:0 - 實物回報, 1 虛擬物品回報
    private Integer type;
    // 支援金額
    private Integer supportmoney;
    // 回報內容介紹
    private String content;
    // 總回報數量,0 為不限制
    private Integer count;
    // 是否限制單筆購買數量,0 表示不限購,1 表示限購
    private Integer signalpurchase;
    // 如果單筆限購,那麼具體的限購數量
    private Integer purchase;
    // 運費,“0”為包郵
    private Integer freight;
    // 是否開發票,0 - 不開發票, 1 - 開發票
    private Integer invoice;
    // 眾籌結束後返還回報物品天數
    private Integer returndate;
    // 說明圖片路徑
    private String describPicPath;

    public ReturnVO() {
    }

    public ReturnVO(Integer type, Integer supportmoney, String content, Integer count, Integer signalpurchase, Integer purchase, Integer freight, Integer invoice, Integer returndate, String describPicPath) {
        this.type = type;
        this.supportmoney = supportmoney;
        this.content = content;
        this.count = count;
        this.signalpurchase = signalpurchase;
        this.purchase = purchase;
        this.freight = freight;
        this.invoice = invoice;
        this.returndate = returndate;
        this.describPicPath = describPicPath;
    }
}

MemberConfirmInfoVO

public class MemberConfirmInfoVO implements Serializable {
    private static final long serialVersionUID = 1L;
    // 易付寶賬號
     private String paynum;
    // 法人身份證號
     private String cardnum;

    public MemberConfirmInfoVO() {
    }

    public MemberConfirmInfoVO(String paynum, String cardnum) {
        this.paynum = paynum;
        this.cardnum = cardnum;
    }
}

發起專案

總目標

將各個表單頁面提交的資料彙總到一起儲存到資料庫.

思路

程式碼:跳轉頁面

配置訪問project-consumer工程的路由規則

project-consumer工程配置view-controller

public class CrowdWebMvcConfig implements WebMvcConfigurer {

    public void addViewControllers(ViewControllerRegistry registry) {
        //view-controller是在project-consumer內部定義的
        //所以這是一個不經過zuul訪問的地址,所以這個路徑不加路由規則中定義的字首
        registry.addViewController("/agree/protocol/page").setViewName("project-agree");
        registry.addViewController("/launch/project/page").setViewName("project-launch");

    }
}

頁面上寫地址需要注意

需要注意:前面要寫上域名(如果沒有配置域名寫localhost一樣),確保通過Zuul訪問具體功能.

因為必須通過zuul訪問具體功能才能保持cookie,進而保持session一致.

程式碼:接收表單資料

/**
 * @param projectVO         接收除了上傳圖片之外的其他普通資料
 * @param headerPicture     //接收上傳的頭圖
 * @param detailPictureList //接收上傳的詳情圖片
 * @param session           //用來將收集了一部分資料的ProjectVO物件存入Session域
 * @param modelMap          //用來在當前操作失敗後返回上一個表單頁面時攜帶提示資訊
 * @return
 */
@RequestMapping("/create/project/information")
public String saveProjectBasicInfo(
        ProjectVO projectVO,
        MultipartFile headerPicture,
        List<MultipartFile> detailPictureList,
        HttpSession session,
        ModelMap modelMap
) throws IOException {
    //一、完成頭圖上傳
    //1、獲取當前headerPicture物件是否為空
    boolean headerPictureEmpty = headerPicture.isEmpty();
    if (headerPictureEmpty) {
        //2、如果沒有上傳頭圖則返回到表單頁面並顯示錯誤訊息
        modelMap.addAttribute(ConstantUtil.ATTR_NANE_MESSAGE, ConstantUtil.MESSAGE_HEADER_PIC_EMPTY);
        return "project-launch";
    }
    //3、如果使用者確實上傳了有內容的檔案,則執行上傳
    ResultEntity<String> uploadHeaderPicResultEntity = CrowdUtil.uploadFileToOss(ossProperties.getEndPoint(),
            ossProperties.getAccessKeyId(),
            ossProperties.getAccessKeySecret(),
            headerPicture.getInputStream(),
            ossProperties.getBucketName(),
            ossProperties.getBucketDomain(),
            headerPicture.getOriginalFilename());

    String result = uploadHeaderPicResultEntity.getResult();
    
    //判斷頭圖是否上傳成功
    if (ResultEntity.SUCCESS.equals(result)){
        //5、如果成功則從返回的資料中獲取圖片訪問路徑
        String headerPicturePath = uploadHeaderPicResultEntity.getData();
        //6、存入ProjectVO物件中
        projectVO.setHeaderPicturePath(headerPicturePath);

    }else {
        //7、如果上傳失敗則返回到表單頁面並顯示錯誤訊息
        modelMap.addAttribute(ConstantUtil.ATTR_NANE_MESSAGE,
                ConstantUtil.MESSAGE_DETAL_PIC_UPLOAD_FAILD);
        return "project-launch";
    }

    //二、上傳詳情圖片
    //1、建立一個用來存放詳情圖片路徑的集合
    List<String> detailPicturePathList = new ArrayList<String>();
    //2、檢查detailPicture是否有效
    if (detailPictureList == null|| detailPictureList.size() ==0){
        modelMap.addAttribute(ConstantUtil.ATTR_NANE_MESSAGE,
                ConstantUtil.MESSAGE_HEADER_PIC_EMPTY);
        return "project-launch";
    }
    //3、遍歷detailPictureList是否有效
    for (MultipartFile detailPicture : detailPictureList) {
        //4、當前detailPicture是否為空
        if (detailPicture.isEmpty()){
            //5、檢測到詳情圖片中單個檔案為空也是回去顯示錯誤訊息
            modelMap.addAttribute(ConstantUtil.ATTR_NANE_MESSAGE,
                    ConstantUtil.MESSAGE_HEADER_PIC_EMPTY);
            return "project-launch";
        }
        //6、執行上傳
        ResultEntity<String> detailUploadResultEntity = CrowdUtil.uploadFileToOss(ossProperties.getEndPoint(),
                ossProperties.getAccessKeyId(),
                ossProperties.getAccessKeySecret(),
                detailPicture.getInputStream(),
                ossProperties.getBucketName(),
                ossProperties.getBucketDomain(),
                detailPicture.getOriginalFilename());
        //7、檢查上傳結果
        String detailUploadResultEntityResult = detailUploadResultEntity.getResult();
        if (ResultEntity.SUCCESS.equals(detailUploadResultEntityResult)){
            String detailPicturePath = detailUploadResultEntity.getData();
            //8、收集剛剛上傳的圖片的訪問路徑
            detailPicturePathList.add(detailPicturePath);
        }else {
            //9、如果上傳失敗則返回到表單頁面並顯示錯誤訊息
            modelMap.addAttribute(ConstantUtil.ATTR_NANE_MESSAGE,
                    ConstantUtil.MESSAGE_DETAL_PIC_UPLOAD_FAILD);
            return "project-launch";
        }
    }
    //10、將存放了詳情圖片訪問路徑的集合存入ProjectVO中
    projectVO.setDetailPicturePathList(detailPicturePathList);
    //三、後續操作
    //1、將projectVO物件存入Session域
    session.setAttribute(ConstantUtil.ATTR_MANE_TEMPLE_PROJECT, projectVO);
    //2、以完整的訪問路徑前往下一個收集回報資訊的頁面

    return "redirect:http://www.crowd.com/project/return/info/page";
}