尚籌網13收集回報資訊
阿新 • • 發佈:2020-07-31
收集回報資訊
注意:上傳圖片和提交表單分開
思路
操作1:接收頁面上非同步上傳的圖片
@RequestMapping("/create/upload/return/picture.json") public ResultEntity<String> uploadReturnPicture( //接收使用者上傳圖片 @RequestParam("returnPicture") MultipartFile returnPicture ) throws IOException { //1、執行檔案上傳 ResultEntity<String> uploadReturnPicResultEntity = CrowdUtil.uploadFileToOss( ossProperties.getEndPoint(), ossProperties.getAccessKeyId(), ossProperties.getAccessKeySecret(), returnPicture.getInputStream(), ossProperties.getBucketName(), ossProperties.getBucketDomain(), returnPicture.getOriginalFilename());//2、返回上傳的結果 return uploadReturnPicResultEntity; }
操作2:接收整個回報資訊資料
@ResponseBody @RequestMapping("/create/save/return.json") public ResultEntity<String> saveReturn(ReturnVO returnVO, HttpSession session) { try { //1、從 session域中讀取之前快取的ProjectVO物件 ProjectVO projectVO = (ProjectVO) session.getAttribute(ConstantUtil.ATTR_MANE_TEMPLE_PROJECT);//2、判斷projectVO是否為null if (projectVO == null) { return ResultEntity.failed(ConstantUtil.MESSAGE_TEMPLE_PROJECT_MISSING); } //3、從projectVO物件中獲取儲存回報資訊的集合 List<ReturnVO> returnVOList = projectVO.getReturnVOList(); //4、判斷returnVO集合是否有效 if (returnVOList == null|| returnVOList.size() == 0) { //5、建立集合物件對returnVOList進行初始化 returnVOList = new ArrayList<ReturnVO>(); //6、為了讓以後能夠正常使用這個集合,設定到peojectVO物件中 projectVO.setReturnVOList(returnVOList); } //7、將收集了表單資料的returnVO物件存入集合 returnVOList.add(returnVO); //8、把資料有變化的ProjectVO物件重新存入Session域,以確保新的資料最終能夠存入redis session.setAttribute(ConstantUtil.ATTR_MANE_TEMPLE_PROJECT, projectVO); //9、所有操作成功完成返回成功 return ResultEntity.successWithoutData(); } catch (Exception e) { e.printStackTrace(); return ResultEntity.failed(e.getMessage()); } }
跳轉頁面
從收集回報資訊頁面跳轉到確認資訊頁面
頁面上修改”下一步“按鈕
<a th:href="@{/project/create/confirm/page}" class="btn btn-warning btn-lg">下一步</a>
新增view-controller
registry.addViewController("/create/confirm/page.html").setViewName("project-confirm");
調整project-comsumer.html頁
收集確認資訊
點選提交按鈕提交表單
修改提交按鈕的html標籤
<button type="button" id="submitBtn" class="btn btn-warning btn-lg">提交</button>
調整表單程式碼
<form id="confirmFomr" th:action="@{/project/create/confirm}" method="post" role="form"> <div class="form-group"> <label for="exampleInputEmail1">易付寶企業賬號:</label><input type="email" name="paynum" class="form-control" id="exampleInputEmail1" /> </div> <div class="form-group"> <label for="exampleInputPassword1">法人身份證號:</label><input type="password" name="cardnum" class="form-control" id="exampleInputPassword1" /> </div> </form>
給提交按鈕繫結單級響應函式
<script type="text/javascript"> $(function(){ $("#submitBtn").click(function(){ $("#confirmFomr").submit(); }); }); </script>
收集表單資料執行儲存
Project-consumer
@RequestMapping("/create/confirm") public String saveConfirm(ModelMap modelMap, HttpSession session, MemberConfirmInfoVO memberConfirmInfoVO) { //1、從session域讀取之前臨時儲存的projectVO物件 ProjectVO projectVO = (ProjectVO) session.getAttribute(ConstantUtil.ATTR_MANE_TEMPLE_PROJECT); //2、如果projectVO為null if (projectVO == null) { throw new RuntimeException(ConstantUtil.MESSAGE_TEMPLE_PROJECT_MISSING); } //3、將確認資訊資料設定到projectVO物件中 projectVO.setMemberConfirmInfoVO(memberConfirmInfoVO); //4、從session域讀取當前登陸的使用者 MemberLoginVO memberLoginVO = (MemberLoginVO) session.getAttribute(ConstantUtil.ATTR_NAME_LOGIN_MEMBER); Integer memberId = memberLoginVO.getId(); //5、呼叫遠端方法儲存projectVO物件 ResultEntity<String> saveResultEntity = mySQLRemoteService.saveProjectVORemote(projectVO, memberId); //6、判斷遠端的儲存操作是否成功 String result = saveResultEntity.getResult(); if (ResultEntity.FAILED.equals(result)){ modelMap.addAttribute(ConstantUtil.ATTR_NANE_MESSAGE, saveResultEntity.getMessage()); return "project-confirm"; } //7、將臨時的ProjectVO物件從Session域移除 session.removeAttribute(ConstantUtil.MESSAGE_TEMPLE_PROJECT_MISSING); //8、如果遠端儲存成功則跳轉到最終完成頁面 return "redirect:http://www.crowd.com/project/create/success"; }
宣告mysql-provider的Feign介面
@RequestMapping("/get/memberpo/by/login/acct/remote") ResultEntity<MemberPO> getMemberPOByLoginAcctRemote(@RequestParam("loginAcct") String loginAcct); @RequestMapping("/save/member/remote") ResultEntity<String> saveMember(@RequestBody MemberPO memberPO); @RequestMapping("save/project/vo/remote") ResultEntity<String> saveProjectVORemote(@RequestBody ProjectVO projectVO, @RequestParam("memberId") Integer memberId);
執行資料庫儲存
需要在儲存projectPO之後獲取自增主鍵值
在mysql=provider中執行具體操作
@RequestMapping("save/project/vo/remote") ResultEntity<String> saveProjectVORemote( @RequestBody ProjectVO projectVO, @RequestParam("memberId") Integer memberId) { try { projectService.saveProject(projectVO, memberId); return ResultEntity.successWithoutData(); } catch (Exception e) { e.printStackTrace(); return ResultEntity.failed(e.getMessage()); } }
在mysql-provider的service方法中執行儲存
@Override @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class) public void saveProject(ProjectVO projectVO, Integer memberId) { // 一、儲存ProjectPO物件 ProjectPO projectPO = new ProjectPO(); BeanUtils.copyProperties(projectVO, projectPO); // 儲存ProjectPO projectPOMapper.insertSelective(projectPO); // 獲取自增主鍵 Integer projectId = projectPO.getId(); // 儲存專案、分類的關聯資訊 List<Integer> typeIdList = projectVO.getTypeIdList(); projectPOMapper.insertTypeRelationship(typeIdList, projectId); // 儲存專案、標籤的關聯資訊 List<Integer> tagIdList = projectVO.getTagIdList(); projectPOMapper.insertTagRelationship(tagIdList, projectId); // 儲存專案的詳情圖片路徑資訊 List<String> detailPicturePathList = projectVO.getDetailPicturePathList(); projectItemPicPOMapper.insertPathList(projectId, detailPicturePathList); // 專案發起人資訊 MemberLauchInfoVO memberLauchInfoVO = projectVO.getMemberLauchInfoVO(); MemberLaunchInfoPO memberLaunchInfoPO = new MemberLaunchInfoPO(); BeanUtils.copyProperties(memberLauchInfoVO, memberLaunchInfoPO); memberLaunchInfoPO.setMemberid(memberId); memberLaunchInfoPOMapper.insert(memberLaunchInfoPO); // 回報的資訊 List<ReturnVO> returnVOList = projectVO.getReturnVOList(); List<ReturnPO> returnPOList = new ArrayList<ReturnPO>(); for (ReturnVO returnVO : returnVOList) { ReturnPO returnPO = new ReturnPO(); BeanUtils.copyProperties(returnVO, returnPO); returnPOList.add(returnPO); } returnPOMapper.insertReturnPOBatch(returnPOList, projectId); // 儲存專案的確認資訊 MemberConfirmInfoVO memberConfirmInfoVO = projectVO.getMemberConfirmInfoVO(); MemberConfirmInfoPO memberConfirmInfoPO = new MemberConfirmInfoPO(); BeanUtils.copyProperties(memberConfirmInfoVO, memberConfirmInfoPO); memberConfirmInfoPO.setId(memberId); memberConfirmInfoPOMapper.insert(memberConfirmInfoPO); }
SQL
<!--新加兩個--> <insert id="insertTypeRelationship"> insert into t_project_type(`projectid`,`typeid`)values <foreach collection="typeIdList" item="typeId" separator=",">(#{projectId},#{typeId})</foreach> </insert> <insert id="insertTagRelationship"> insert into t_project_tag(`projectid`,`tagid`)values <foreach collection="tagIdList" item="tagId" separator=",">(#{projectId},#{tagId})</foreach> </insert>
<insert id="insertPathList">
insert into t_project_item_pic( projectid, item_pic_path)values
<foreach collection="detailPicturePathList" item="detailPath" separator="," >(#{projectId},#{detailPath})</foreach>
</insert>
<insert id="insertReturnPOBatch"> insert into t_return ( projectid, type, supportmoney, content, count, signalpurchase, purchase, freight, invoice, returndate, describ_pic_path ) values <foreach collection="returnPOList" item="returnPO" separator=","> ( #{projectId}, #{returnPO.type}, #{returnPO.supportmoney}, #{returnPO.content}, #{returnPO.count}, #{returnPO.signalpurchase}, #{returnPO.purchase}, #{returnPO.freight}, #{returnPO.invoice}, #{returnPO.returndate}, #{returnPO.describPicPath} ) </foreach> </insert>