Search in sources :

Example 6 with LoginRequired

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

the class CartController method addToCart.

@LoginRequired(loginSuccess = false)
@RequestMapping("/addToCart")
public String addToCart(String skuId, int quantity, HttpServletRequest request, HttpServletResponse response) {
    // 调用商品服务查询商品信息
    PmsSkuInfo pmsSkuInfo = skuService.getSkuById(skuId);
    // 将商品信息封装成购物车信息
    OmsCartItem omsCartItem = new OmsCartItem();
    omsCartItem.setCreateDate(new Date());
    omsCartItem.setDeleteStatus(0);
    omsCartItem.setModifyDate(new Date());
    omsCartItem.setPrice(BigDecimal.valueOf(pmsSkuInfo.getPrice()));
    omsCartItem.setProductAttr("");
    omsCartItem.setProductBrand("");
    omsCartItem.setProductCategoryId(pmsSkuInfo.getCatalog3Id());
    omsCartItem.setProductId(Long.valueOf(pmsSkuInfo.getSpuId()));
    omsCartItem.setProductName(pmsSkuInfo.getSkuName());
    omsCartItem.setProductPic(pmsSkuInfo.getSkuDefaultImg());
    omsCartItem.setProductSkuCode("1111111111");
    omsCartItem.setProductSkuId(Long.valueOf(skuId));
    omsCartItem.setQuantity(quantity);
    // 判断用户是否登录
    String memberId = (String) request.getAttribute("memberId");
    String nickname = (String) request.getAttribute("nickname");
    if (StringUtils.isBlank(memberId)) {
        // 用户未登录
        List<OmsCartItem> omsCartItems = new ArrayList<>();
        // 判断用户本地是由有cookie信息
        String cartListCookie = CookieUtil.getCookieValue(request, "cartListCookie", true);
        if (cartListCookie != null) {
            // cookie不为空
            omsCartItems = JSON.parseArray(cartListCookie, OmsCartItem.class);
            boolean exist = if_cart_exist(omsCartItems, omsCartItem);
            // 判断当点添加的商品在我们的购物车是否存在
            if (exist) {
                // 之前添加过,更新操作
                for (OmsCartItem cartItem : omsCartItems) {
                    String productSkuId = cartItem.getProductSkuId().toString();
                    if (productSkuId.equals(omsCartItem.getProductSkuId())) {
                        cartItem.setQuantity(cartItem.getQuantity() + omsCartItem.getQuantity());
                        cartItem.setPrice(cartItem.getPrice().add(omsCartItem.getPrice()));
                    }
                }
            } else {
                // 之前没有添加过
                omsCartItems.add(omsCartItem);
            }
        } else {
            // cookie为空
            omsCartItems.add(omsCartItem);
        }
        CookieUtil.setCookie(request, response, "cartListCookie", JSON.toJSONString(omsCartItems), 60 * 60 * 72, true);
    } else {
        // 用户已登录
        // 在db中查询购物车数据
        OmsCartItem omsCartItemFromDB = cartService.getCartExistByUser(memberId, skuId);
        if (omsCartItemFromDB == null) {
            // 购物车中没有该商品
            omsCartItem.setMemberId(Long.valueOf(memberId));
            cartService.addCartIterm(omsCartItem);
        } else {
            // 购物车中有该商品 直接更新数据库
            omsCartItemFromDB.setQuantity(omsCartItem.getQuantity());
            cartService.updateCarItem(omsCartItemFromDB);
        }
        // 同步缓存
        cartService.flushCache(memberId);
    }
    return "redirect:/success.html";
}
Also used : OmsCartItem(com.xatu.gmall.entity.OmsCartItem) PmsSkuInfo(com.xatu.gmall.entity.PmsSkuInfo) ArrayList(java.util.ArrayList) Date(java.util.Date) LoginRequired(com.xatu.gmall.annotations.LoginRequired) RequestMapping(org.springframework.web.bind.annotation.RequestMapping)

Example 7 with LoginRequired

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

the class OrderController method toTrade.

@LoginRequired(loginSuccess = true)
@RequestMapping("/toTrade")
public String toTrade(HttpServletRequest request, HttpServletResponse response, HttpSession session, ModelMap modelMap) {
    String memberId = (String) request.getAttribute("memberId");
    String nickname = (String) request.getAttribute("nickname");
    // 收件人地址列表
    List<MemberReceiveAddress> receiveAddressesByMemberId = userService.getReceiveAddressByMemberId(memberId);
    modelMap.put("userAddressList", receiveAddressesByMemberId);
    // 将购物车集合转换为页面计算 清单集合
    List<OmsCartItem> omsCartItems = cartService.carList(memberId);
    List<OmsOrderItem> omsOrderItems = new ArrayList<>();
    for (OmsCartItem omsCartItem : omsCartItems) {
        if (omsCartItem.getIsChecked().equals("1")) {
            // 每循环一个购物车对象,封装一个商品的详情到OmsOrderItem
            OmsOrderItem omsOrderItem = new OmsOrderItem();
            omsOrderItem.setProductName(omsCartItem.getProductName());
            omsOrderItem.setProductPrice(omsCartItem.getPrice());
            omsOrderItem.setProductQuantity(omsCartItem.getQuantity());
            omsOrderItem.setProductPic(omsCartItem.getProductPic());
            omsOrderItems.add(omsOrderItem);
        }
    }
    modelMap.put("omsOrderItems", omsOrderItems);
    BigDecimal totalAmount = getTotalAmount(omsOrderItems);
    modelMap.put("totalAmount", totalAmount.toString());
    // 生成交易码,为了在提交订单时做交易码的校验
    String tradeCode = orderService.genTradeCode(memberId);
    modelMap.put("tradeCode", tradeCode);
    return "trade";
}
Also used : OmsCartItem(com.xatu.gmall.entity.OmsCartItem) ArrayList(java.util.ArrayList) OmsOrderItem(com.xatu.gmall.entity.OmsOrderItem) MemberReceiveAddress(com.xatu.gmall.entity.MemberReceiveAddress) BigDecimal(java.math.BigDecimal) LoginRequired(com.xatu.gmall.annotations.LoginRequired) RequestMapping(org.springframework.web.bind.annotation.RequestMapping)

Example 8 with LoginRequired

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

the class SeckillController method kill2.

/**
 * 使用Redission
 * @return
 */
@RequestMapping("/kill2")
@ResponseBody
@LoginRequired(loginSuccess = true)
public String kill2() {
    String memberId = "1";
    Jedis jedis = redisUtil.getJedis();
    // 开启商品监控
    RSemaphore semaphore = redissonClient.getSemaphore("106");
    boolean b = semaphore.tryAcquire();
    if (b) {
        System.out.println("成功");
    // 用消息队列发送订单消息
    } else {
        System.out.println("失败");
    }
    jedis.close();
    return "success";
}
Also used : Jedis(redis.clients.jedis.Jedis) RSemaphore(org.redisson.api.RSemaphore) LoginRequired(com.xatu.gmall.annotations.LoginRequired) RequestMapping(org.springframework.web.bind.annotation.RequestMapping) ResponseBody(org.springframework.web.bind.annotation.ResponseBody)

Example 9 with LoginRequired

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

the class SeckillController method kill.

@RequestMapping("/kill")
@ResponseBody
@LoginRequired(loginSuccess = true)
public String kill() {
    String memberId = "1";
    Jedis jedis = redisUtil.getJedis();
    // 开启商品监控
    jedis.watch("106");
    if (Integer.parseInt(jedis.get("106")) > 0) {
        Transaction multi = jedis.multi();
        jedis.incrBy("106", -1);
        List<Object> exec = multi.exec();
        if (exec != null && exec.size() > 0) {
            System.out.println("成功");
        // 用消息队列发送订单消息
        } else {
            System.out.println("失败");
        }
    }
    jedis.close();
    return "success";
}
Also used : Jedis(redis.clients.jedis.Jedis) Transaction(redis.clients.jedis.Transaction) LoginRequired(com.xatu.gmall.annotations.LoginRequired) RequestMapping(org.springframework.web.bind.annotation.RequestMapping) ResponseBody(org.springframework.web.bind.annotation.ResponseBody)

Example 10 with LoginRequired

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

the class PaymentController method alipay.

@RequestMapping("/alipay/submit")
@LoginRequired(loginSuccess = true)
@ResponseBody
public String alipay(String outTradeNo, BigDecimal totalAmount, HttpServletRequest request, ModelMap modelMap) {
    String form = null;
    AlipayTradePayRequest alipayTradePayRequest = new AlipayTradePayRequest();
    // 回调函数地址
    alipayTradePayRequest.setReturnUrl(AlipayConfig.return_payment_url);
    alipayTradePayRequest.setNotifyUrl(AlipayConfig.notify_payment_url);
    Map<String, Object> map = new HashMap<>();
    map.put("out_trade_no", outTradeNo);
    map.put("product_code", "FAST_INSTANT_TRADB_PAY");
    map.put("total_amount", totalAmount);
    map.put("subject", "华为p40徕卡八摄影");
    String mapJSONStr = JSON.toJSONString(map);
    alipayTradePayRequest.setBizContent(mapJSONStr);
    // 获得一个支付宝请求客户端(它并不是一个连接,而是一个封装号的http的表单请求)
    try {
        form = alipayClient.pageExecute(alipayTradePayRequest).getBody();
    } catch (AlipayApiException e) {
        e.printStackTrace();
    }
    // 生成并保存用户的支付信息
    OmsOrder omsOrder = orderService.getOrderByOutTradeNo(outTradeNo);
    PaymentInfo paymentInfo = new PaymentInfo();
    paymentInfo.setCreateTime(new Date());
    paymentInfo.setOrderId(omsOrder.getId().toString());
    paymentInfo.setPaymentStatus("未付款");
    paymentInfo.setSubject("GMALL商城商品一件");
    paymentInfo.setTotalAmount(totalAmount);
    paymentService.savePaymentInfo(paymentInfo);
    // 向消息中间件发送一个检查支付状态(支付服务消费)的延迟消息队列
    paymentService.sendDelayPaymentCheckQueue(outTradeNo, 5);
    return form;
}
Also used : PaymentInfo(com.xatu.gmall.entity.PaymentInfo) HashMap(java.util.HashMap) OmsOrder(com.xatu.gmall.entity.OmsOrder) AlipayApiException(com.alipay.api.AlipayApiException) AlipayTradePayRequest(com.alipay.api.request.AlipayTradePayRequest) Date(java.util.Date) LoginRequired(com.xatu.gmall.annotations.LoginRequired) RequestMapping(org.springframework.web.bind.annotation.RequestMapping) ResponseBody(org.springframework.web.bind.annotation.ResponseBody)

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