1. 程式人生 > 實用技巧 >尚籌網13收集回報資訊

尚籌網13收集回報資訊

收集回報資訊

注意:上傳圖片和提交表單分開

思路

操作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-providerFeign介面

@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-providerservice方法中執行儲存

@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>