Search in sources :

Example 1 with LoginRequired

use of com.xatu.gmall.annotations.LoginRequired in project GMall by 18391713434.

the class OrderController method submitOrder.

@RequestMapping("/submitOrder")
@LoginRequired(loginSuccess = true)
public ModelAndView submitOrder(String tradeCode, String receiveAddressId, BigDecimal totalAmount, HttpServletRequest request, HttpServletResponse response, HttpSession session, ModelMap modelMap) {
    String memberId = (String) request.getAttribute("memberId");
    String nickname = (String) request.getAttribute("nickname");
    // 检查交易码
    String success = orderService.checkTradeCode(memberId, tradeCode);
    if (success.equals("success")) {
        // 订单项对象
        List<OmsOrderItem> omsOrderItems = new ArrayList<>();
        // 订单对象
        OmsOrder omsOrder = new OmsOrder();
        omsOrder.setAutoConfirmDay(7);
        String outTradeNo = "gmall";
        // 将毫秒时间戳拼接到外部订单号
        outTradeNo = outTradeNo + System.currentTimeMillis();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYYMMDDHHmmss");
        // 将时间字符串拼接到外部订单号
        outTradeNo = outTradeNo + simpleDateFormat.format(new Date());
        // 设置外部订单号
        omsOrder.setOrderSn(outTradeNo);
        omsOrder.setPayAmount(totalAmount);
        omsOrder.setOrderType(1);
        MemberReceiveAddress receiveAddressByReceiveAddressId = userService.getReceiveAddressByReceiveAddressId(receiveAddressId);
        omsOrder.setReceiverDetailAddress(receiveAddressByReceiveAddressId.getDetailAddress());
        omsOrder.setReceiverPhone(receiveAddressByReceiveAddressId.getPhoneNumber());
        omsOrder.setReceiverPostCode(receiveAddressByReceiveAddressId.getPostCode());
        omsOrder.setReceiverProvince(receiveAddressByReceiveAddressId.getProvince());
        omsOrder.setReceiverRegion(receiveAddressByReceiveAddressId.getRegion());
        // 当前日期加一天
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DATE, 1);
        Date date = calendar.getTime();
        omsOrder.setReceiveTime(date);
        omsOrder.setSourceType(0);
        omsOrder.setStatus(0);
        omsOrder.setTotalAmount(totalAmount);
        // 根据用户id获得要购买的商品列表(购物车),和总价格
        List<OmsCartItem> omsCartItems = cartService.carList(memberId);
        for (OmsCartItem omsCartItem : omsCartItems) {
            if (omsCartItem.getIsChecked().equals("1")) {
                // 获得订单详情列表
                OmsOrderItem omsOrderItem = new OmsOrderItem();
                // 验价
                BigDecimal price = omsCartItem.getPrice();
                boolean b = skuService.checkPrice(omsCartItem.getProductSkuId(), price);
                if (b == false) {
                    return new ModelAndView("tradeFail");
                }
                // 验库存
                omsOrderItem.setProductPic(omsCartItem.getProductPic());
                omsOrderItem.setProductName(omsCartItem.getProductName());
                // 外部订单号,用来和其他系统进行交互
                omsOrderItem.setOrderSn(outTradeNo);
                omsOrderItem.setProductCategoryId(omsCartItem.getProductCategoryId());
                omsOrderItem.setProductPrice(omsCartItem.getPrice());
                omsOrderItem.setRealAmount(new BigDecimal(omsCartItem.getTotalPrice()));
                omsOrderItem.setProductQuantity(omsCartItem.getQuantity());
                omsOrderItem.setProductSkuCode("11111111111");
                omsOrderItem.setProductSkuId(omsCartItem.getProductSkuId());
                omsOrderItem.setProductId(omsCartItem.getProductId());
                // 在仓库中对应的skuId
                omsOrderItem.setProductSn("仓库对应的商品编号");
                omsOrderItems.add(omsOrderItem);
            }
        }
        omsOrder.setOmsOrderItems(omsOrderItems);
        // 将订单和订单详情写入数据库
        // 删除购物车的对应商品
        orderService.saveOrder(omsOrder);
        // 重定向到支付系统
        ModelAndView modelAndView = new ModelAndView("redirect:http://localhost:8087");
        modelAndView.addObject("outTradeNo", outTradeNo);
        modelAndView.addObject("totalAmount", totalAmount);
        return modelAndView;
    } else {
        ModelAndView modelAndView = new ModelAndView("tradeFail");
        return modelAndView;
    }
}
Also used : Calendar(java.util.Calendar) OmsCartItem(com.xatu.gmall.entity.OmsCartItem) ArrayList(java.util.ArrayList) ModelAndView(org.springframework.web.servlet.ModelAndView) OmsOrderItem(com.xatu.gmall.entity.OmsOrderItem) MemberReceiveAddress(com.xatu.gmall.entity.MemberReceiveAddress) Date(java.util.Date) BigDecimal(java.math.BigDecimal) OmsOrder(com.xatu.gmall.entity.OmsOrder) SimpleDateFormat(java.text.SimpleDateFormat) LoginRequired(com.xatu.gmall.annotations.LoginRequired) RequestMapping(org.springframework.web.bind.annotation.RequestMapping)

Example 2 with LoginRequired

use of com.xatu.gmall.annotations.LoginRequired in project GMall by 18391713434.

the class PaymentController method aliPayCallBackReturn.

@RequestMapping("alipay/callback/return")
@LoginRequired(loginSuccess = true)
public String aliPayCallBackReturn(HttpServletRequest request, ModelMap modelMap) {
    // 回到请求中获取支付宝的参数
    String sign = request.getParameter("sign");
    // 支付宝交易号
    String trade_no = request.getParameter("trade_no");
    String out_trade_no = request.getParameter("out_trade_no");
    String trade_status = request.getParameter("trade_status");
    String totalAmount = request.getParameter("totalAmount");
    String subject = request.getParameter("subject");
    // 回跳内容
    String call_back_content = request.getQueryString();
    // 通过支付宝的paramMap进行签名验证,(2.0版本的接口将paramMap参数去掉了,导致同步请求没法验签)
    if (StringUtils.isNotBlank(sign)) {
        // 验签成功
        PaymentInfo paymentInfo = new PaymentInfo();
        // 支付宝交易凭证号
        paymentInfo.setOrderSn(out_trade_no);
        paymentInfo.setPaymentStatus("已支付");
        // 回调请求字符串
        paymentInfo.setCallbackContent(call_back_content);
        paymentInfo.setCallbackTime(new Date());
        paymentService.updatePaymentInfo(paymentInfo);
    // 支付成功后,引起的系统服务,订单服务的更新   --》库存服务  --》物流服务
    // 更新用户的支付数据
    }
    return "finish";
}
Also used : PaymentInfo(com.xatu.gmall.entity.PaymentInfo) Date(java.util.Date) LoginRequired(com.xatu.gmall.annotations.LoginRequired) RequestMapping(org.springframework.web.bind.annotation.RequestMapping)

Example 3 with LoginRequired

use of com.xatu.gmall.annotations.LoginRequired in project GMall by 18391713434.

the class AuthInterceptor method preHandle.

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    // 拦截代码
    // 判断被拦截的请求的访问的方法的注解(是否是需要拦截的)
    HandlerMethod hm = (HandlerMethod) handler;
    LoginRequired methodAnnotation = hm.getMethodAnnotation(LoginRequired.class);
    // 是否拦截
    if (methodAnnotation == null) {
        return true;
    }
    /**
     * 如果oldToken为null newToken为null 说明从未登lu过
     * newToken为null oldToken不为null之前登录过
     * newToken不为null oldToken为null刚刚登录过
     * newToken不为空   oldToken不为空  oldToken过期
     */
    String token = "";
    String oldToken = CookieUtil.getCookieValue(request, "oldToken", true);
    if (StringUtils.isNotBlank(oldToken)) {
        token = oldToken;
    }
    String newToken = request.getParameter("token");
    if (StringUtils.isNotBlank(newToken)) {
        token = newToken;
    }
    // 是否必须登录
    boolean loginSuccess = methodAnnotation.loginSuccess();
    // 调用认证中心进行验证
    String success = "fail";
    // 通过nginx转发的获得的客户端ip
    String ip = request.getHeader("x-forwarded-for");
    if (StringUtils.isBlank(ip)) {
        // 从request中会的ip
        ip = request.getRemoteAddr();
        if (StringUtils.isBlank(ip)) {
            ip = "192.168.157.1";
        }
    }
    String successJSON = HttpclientUtil.doGet("http://localhost:8085/verify?token=" + token + "&currentIp=" + ip);
    Map successMap = JSON.parseObject(successJSON, Map.class);
    if (successMap.get("status") != null) {
        success = successMap.get("status").toString();
    }
    if (loginSuccess == true) {
        if (!success.equals("success")) {
            // 重定向到passport登录
            response.sendRedirect("http://localhost:8085/index?ReturnUrl=" + request.getRequestURL());
            return false;
        } else {
            // 验证通过,覆盖cookie中的tocken
            // 需要将tockn携带的用户信息写入
            request.setAttribute("memberId", successMap.get("memberId"));
            request.setAttribute("nickname", successMap.get("nickname"));
            // 验证通过,覆盖cookie中的token
            if (StringUtils.isNotBlank(token)) {
                CookieUtil.setCookie(request, response, "oldToken", token, 60 * 60 * 2, true);
            }
            return true;
        }
    } else {
        // 没有登良成功也能够使用功能,但是必须验证
        if (success.equals("success")) {
            // 需要将tockn携带的用户信息写入
            request.setAttribute("memberId", successMap.get("memberId"));
            request.setAttribute("nickname", successMap.get("nickname"));
            // 验证通过,覆盖cookie中的token
            if (StringUtils.isNotBlank(token)) {
                CookieUtil.setCookie(request, response, "oldToken", token, 60 * 60 * 2, true);
            }
        }
    }
    return true;
}
Also used : LoginRequired(com.xatu.gmall.annotations.LoginRequired) Map(java.util.Map) HandlerMethod(org.springframework.web.method.HandlerMethod)

Example 4 with LoginRequired

use of com.xatu.gmall.annotations.LoginRequired in project GMall by 18391713434.

the class CartController method checkCart.

@LoginRequired(loginSuccess = false)
@RequestMapping("/checkCart")
public String checkCart(String isChecked, String skuId, HttpServletRequest request, HttpServletResponse response, HttpSession session, ModelMap modelMap) {
    String memberId = (String) request.getAttribute("memberId");
    String nickname = (String) request.getAttribute("nickname");
    // 调用服务,修改状态
    cartService.checkCart(skuId, memberId, isChecked);
    // 将最新的数据从缓存总查出来,渲染给内嵌页
    List<OmsCartItem> omsCartItems = cartService.carList(memberId);
    modelMap.put("cartList", omsCartItems);
    BigDecimal totalAmount = getTotalAmount(omsCartItems);
    modelMap.put("totalAmount", totalAmount.toString());
    return "cartListInner";
}
Also used : OmsCartItem(com.xatu.gmall.entity.OmsCartItem) BigDecimal(java.math.BigDecimal) LoginRequired(com.xatu.gmall.annotations.LoginRequired) RequestMapping(org.springframework.web.bind.annotation.RequestMapping)

Example 5 with LoginRequired

use of com.xatu.gmall.annotations.LoginRequired in project GMall by 18391713434.

the class CartController method cartList.

@LoginRequired(loginSuccess = false)
@RequestMapping("/cartList")
public String cartList(String skuId, Integer quantity, HttpServletRequest request, HttpServletResponse response, HttpSession session, ModelMap modelMap) {
    List<OmsCartItem> omsCartItems = new ArrayList<>();
    String userId = (String) request.getAttribute("memberId");
    String nickname = (String) request.getAttribute("nickname");
    if (StringUtils.isNotBlank(userId)) {
        // 已经登录  查询db
        omsCartItems = cartService.carList(userId);
    } else {
        // 没有登陆 查询cookie
        String cartListCookie = CookieUtil.getCookieValue(request, "cartListCookie", true);
        omsCartItems = JSON.parseArray(cartListCookie, OmsCartItem.class);
        for (OmsCartItem omsCartItem : omsCartItems) {
            omsCartItem.setTotalPrice(omsCartItem.getPrice().multiply(BigDecimal.valueOf(omsCartItem.getQuantity())).toString());
        }
    }
    modelMap.put("cartList", omsCartItems);
    BigDecimal totalAmount = getTotalAmount(omsCartItems);
    modelMap.put("totalAmount", totalAmount.toString());
    return "cartList";
}
Also used : OmsCartItem(com.xatu.gmall.entity.OmsCartItem) ArrayList(java.util.ArrayList) BigDecimal(java.math.BigDecimal) LoginRequired(com.xatu.gmall.annotations.LoginRequired) RequestMapping(org.springframework.web.bind.annotation.RequestMapping)

Aggregations

LoginRequired (com.xatu.gmall.annotations.LoginRequired)10 RequestMapping (org.springframework.web.bind.annotation.RequestMapping)9 OmsCartItem (com.xatu.gmall.entity.OmsCartItem)5 BigDecimal (java.math.BigDecimal)4 ArrayList (java.util.ArrayList)4 Date (java.util.Date)4 ResponseBody (org.springframework.web.bind.annotation.ResponseBody)3 MemberReceiveAddress (com.xatu.gmall.entity.MemberReceiveAddress)2 OmsOrder (com.xatu.gmall.entity.OmsOrder)2 OmsOrderItem (com.xatu.gmall.entity.OmsOrderItem)2 PaymentInfo (com.xatu.gmall.entity.PaymentInfo)2 Jedis (redis.clients.jedis.Jedis)2 AlipayApiException (com.alipay.api.AlipayApiException)1 AlipayTradePayRequest (com.alipay.api.request.AlipayTradePayRequest)1 PmsSkuInfo (com.xatu.gmall.entity.PmsSkuInfo)1 SimpleDateFormat (java.text.SimpleDateFormat)1 Calendar (java.util.Calendar)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1 RSemaphore (org.redisson.api.RSemaphore)1