• 尚筹网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>
  • 相关阅读:
    企业微信自建应用使用审批流程引擎
    unicode和utf8互转【转】
    禅道迅捷版,人人都可用的项目管理工具!
    《2021年IT行业项目管理调查报告》重磅发布!
    wxpython窗体之间传递参数
    go Print 和 反射
    go 接口学习笔记
    设计模式学习笔记
    go 变量逃逸分析
    Go ASM 学习笔记之 ppt 版
  • 原文地址:https://www.cnblogs.com/Adam-Ye/p/13412065.html
Copyright © 2020-2023  润新知