zoukankan      html  css  js  c++  java
  • 第五篇 Scrum冲刺博客

    第五篇 Scrum冲刺博客

    Part one 作业地址

    这个作业属于哪个课程 软件工程
    作业要求 第五篇 Scrum冲刺博客
    作业目标 团队集体协作完成项目开发,促进彼此间的交流

    Part two 站立式会议

    1.1 微信会议照片

    注:这次开会主要还是讨论昨天个人的进度问题以及做任务时候遇到的困难,然后大家一起解决。

    1.2成员工作情况

    成员 昨天已完成的工作 今天计划完成的工作 工作中遇到的困难
    张天 做好接下来二天的计划 基本完成项目,对项目当中存在的问题进行总结归纳 商城的运行依旧出了问题
    黄炜恒 商家入驻环境基本搭建好 实现上架入驻模式的规则 商家入驻有些规则仍然在考虑
    黄浩捷 完成商城按钮轮转界面 继续优化商品的显示界面 跳转按钮设计不美观
    陈伟升 商城跳转支付界面 优化支付模块 支付模块跳转卡顿
    曾广宁 整理商城架构 完成设计购物车的整体架构 购物车排列不美观
    曾春华 整理商城架构并查阅了相关资料 构思商品的整体架构 商品名命名不成功

    Part three 项目燃尽图

    注:接下来的任务主要是对模块当中的一些细节进行优化。

    Part four 代码/文档签入记录

    3.1 代码签入

    说明:第五天git操作明显进步了不少

    3.2 Issue链接

    成员 Issue链接
    张天 实现一些工具组件类1
    黄炜恒 商家入驻模块
    黄浩捷 商城主界面
    陈伟升 支付模块
    曾广宁 商品的整体架构
    曾春华 商品的整体架构

    Part five 最新程序/模块

    4.1 程序代码

    package com.nanrailgun.mall_gateway.controller; //商城管理界面
    
    import com.alipay.api.AlipayClient;
    import com.alipay.api.DefaultAlipayClient;
    import com.alipay.api.domain.AlipayTradeWapPayModel;
    import com.alipay.api.internal.util.AlipaySignature;
    import com.alipay.api.request.AlipayTradeWapPayRequest;
    import com.nanrailgun.config.common.Constants;
    import com.nanrailgun.config.common.ServiceResultEnum;
    import com.nanrailgun.config.config.annotation.MallToken;
    import com.nanrailgun.config.utils.PageQueryUtil;
    import com.nanrailgun.config.utils.Result;
    import com.nanrailgun.config.utils.ResultGenerator;
    import com.nanrailgun.mall_gateway.config.AlipayConfig;
    import com.nanrailgun.mall_gateway.controller.param.MallOrderSaveParam;
    import com.nanrailgun.order_api.api.MallOrderService;
    import com.nanrailgun.order_api.api.dto.MallOrderDetailDTO;
    import com.nanrailgun.user_api.api.MallUserAddressService;
    import com.nanrailgun.user_api.entity.MallUser;
    import com.nanrailgun.user_api.entity.MallUserAddress;
    import org.apache.dubbo.config.annotation.Reference;
    import org.springframework.web.bind.annotation.*;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.util.*;
    
    @RestController
    public class MallOrderController {
    
        @Reference
        private MallOrderService mallOrderService;
    
        @Reference
        private MallUserAddressService mallUserAddressService;
    
        @GetMapping("/order")
        public Result getOrderList(@RequestParam(required = false) Integer pageNumber,
                                   @RequestParam(required = false) Integer status,
                                   @MallToken MallUser loginMallUser) {
            Map params = new HashMap();
            if (pageNumber == null || pageNumber < 1) {
                pageNumber = 1;
            }
            params.put("userId", loginMallUser.getUserId());
            params.put("orderStatus", status);
            params.put("page", pageNumber);
            params.put("limit", Constants.ORDER_SEARCH_PAGE_LIMIT);
            PageQueryUtil util = new PageQueryUtil(params);
            return ResultGenerator.genSuccessResult(mallOrderService.getMyOrders(util, util.getPage(), util.getLimit()));
        }
    
        @GetMapping("/order/{orderNo}")
        public Result getOrderDetail(@PathVariable("orderNo") String orderNo, @MallToken MallUser user) {
            return ResultGenerator.genSuccessResult(mallOrderService.getOrderDetailByOrderNo(orderNo, user.getUserId()));
        }
    
        @PutMapping("/order/{orderNo}/cancel")
        public Result cancelOrder(@PathVariable("orderNo") String orderNo, @MallToken MallUser user) {
            String result = mallOrderService.cancelOrder(orderNo, user.getUserId());
            if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
                return ResultGenerator.genSuccessResult();
            }
            return ResultGenerator.genFailResult(result);
        }
    
        @PutMapping("/order/{orderNo}/finish")
        public Result finishOrder(@PathVariable("orderNo") String orderNo, @MallToken MallUser user) {
            String result = mallOrderService.finishOrder(orderNo, user.getUserId());
            if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
                return ResultGenerator.genSuccessResult();
            }
            return ResultGenerator.genFailResult(result);
        }
    
        @PostMapping("/saveOrder")
        public Result saveOrder(@RequestBody MallOrderSaveParam param, @MallToken MallUser user) {
            if (param == null || param.getAddressId() == null || param.getCartItemIds() == null || param.getCartItemIds().length < 1) {
                return ResultGenerator.genFailResult(ServiceResultEnum.PARAM_ERROR.getResult());
            }
            MallUserAddress address = mallUserAddressService.getAddressByAddressId(param.getAddressId());
            if (!address.getUserId().equals(user.getUserId())) {
                return ResultGenerator.genFailResult(ServiceResultEnum.REQUEST_FORBIDEN_ERROR.getResult());
            }
            List<Long> cartItemIds = Arrays.asList(param.getCartItemIds());
            String orderNo = mallOrderService.saveOrder(user, cartItemIds, address);
            return ResultGenerator.genSuccessResult((Object) orderNo);
        }
    
        @GetMapping("/pay")
        public void mockPaySuccess(@RequestParam("orderNo") String orderNo,
                                   @RequestParam("payType") int payType,
                                   @MallToken MallUser user,
                                   HttpServletResponse response) {
            if (payType == 2) payType = 1;
            String result = mallOrderService.pay(orderNo, payType);
            MallOrderDetailDTO mallOrder = mallOrderService.getOrderDetailByOrderNo(orderNo, user.getUserId());
            if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
                //返回支付宝表单
                AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, AlipayConfig.APPID, AlipayConfig.RSA_PRIVATE_KEY, AlipayConfig.FORMAT, AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGNTYPE);
                AlipayTradeWapPayRequest alipay_request = new AlipayTradeWapPayRequest();
    
                // 封装请求支付信息
                AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
                model.setOutTradeNo(orderNo);
                model.setSubject(mallOrder.getOrderNo());
                model.setTotalAmount(String.valueOf(mallOrder.getTotalPrice()));
                model.setBody("订单");
                model.setProductCode("QUICK_WAP_WAY");
                alipay_request.setBizModel(model);
                // 设置异步通知地址
                //alipay_request.setNotifyUrl(AlipayConfig.notify_url);
                // 设置同步地址
                alipay_request.setReturnUrl(AlipayConfig.return_url);
    
                // form表单生产
                String form;
                try {
                    // 调用SDK生成表单
                    form = client.pageExecute(alipay_request).getBody();
                    response.setContentType("text/html;charset=" + AlipayConfig.CHARSET);
                    response.getWriter().write(form);//直接将完整的表单html输出到页面
                    response.getWriter().flush();
                    response.getWriter().close();
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    
        @GetMapping("/payValidation")
        public void payValidation(HttpServletRequest request, HttpServletResponse response) throws Exception {
            //获取支付宝GET过来反馈信息
            Map<String, String> params = new HashMap<>();
            Map requestParams = request.getParameterMap();
            for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext(); ) {
                String name = (String) iter.next();
                String[] values = (String[]) requestParams.get(name);
                String valueStr = "";
                for (int i = 0; i < values.length; i++) {
                    valueStr = (i == values.length - 1) ? valueStr + values[i]
                            : valueStr + values[i] + ",";
                }
                //乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化
                valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
                params.put(name, valueStr);
            }
    
            //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)//
            //商户订单号
    
            String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "UTF-8");
    
            //支付宝交易号
    
            String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"), "UTF-8");
    
            //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以上仅供参考)//
            //计算得出通知验证结果
            //boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
            boolean verify_result = AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.CHARSET, "RSA2");
    
            if (verify_result) {//验证成功
                //////////////////////////////////////////////////////////////////////////////////////////
                //请在这里加上商户的业务逻辑程序代码
                //该页面可做页面美工编辑
                mallOrderService.paySuccess(out_trade_no);
                //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
    
                //////////////////////////////////////////////////////////////////////////////////////////
            }
            response.sendRedirect("http://10.203.109.200:8080/#/order");
        }
    }
    
    
    
    

    4.2 运行截图

    商城支付订单:
    图片名称

    Part six 每人每日总结

    成员 小结
    张天 项目开发到这里,感觉越来越吃力
    黄炜恒 任务越来越难,剩下的路还很长
    黄浩捷 经过努力学习,编程的能力已经有了明显的提升
    陈伟升 java的支付模块已经基本实现
    曾广宁 需要继续努力,多学习
    曾春华 继续与同学保持良好的沟通
  • 相关阅读:
    python多线程学习一
    https学习笔记三----OpenSSL生成root CA及签发证书
    https学习笔记二----基础密码学知识和python pycrypto库的介绍使用
    HTTPS学习笔记一----HTTPS的基础理论知识
    一只小鹅的2017
    python 全局变量的import机制
    一起来学设计模式-----工厂模式的实践
    一起来学设计模式-----创建型模式之抽象工厂
    一起来学设计模式-----创建型模式之工厂方法
    一起来学设计模式-----创建型模式之简单工厂
  • 原文地址:https://www.cnblogs.com/happyzhangtian/p/13960642.html
Copyright © 2011-2022 走看看