尚籌網12發起專案
阿新 • • 發佈:2020-07-31
發起專案建模
建立資料庫表
分類表
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) DEFAULTNULL, 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;
專案表
CREATETABLE `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"; }