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;
}
}
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";
}
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 + "¤tIp=" + 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;
}
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";
}
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";
}
Aggregations