package cn.binux.cart.controller;
import cn.binux.cart.service.CartService;
import cn.binux.constant.Const;
import cn.binux.pojo.CartInfo;
import cn.binux.pojo.TbUser;
import cn.binux.pojo.XbinResult;
import cn.binux.redis.service.JedisClient;
import cn.binux.utils.CookieUtils;
import cn.binux.utils.FastJsonConvert;
import com.alibaba.dubbo.config.annotation.Reference;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
* 购物车 Controller
*
* @author xubin.
* @create 2017-02-22 上午10:48
*/
@Controller
public class CartController {
private static final Logger logger = LoggerFactory.getLogger(CartController.class);
@Reference(version = Const.XBIN_STORE_CART_VERSION)
private CartService cartService;
@Reference(version = Const.XBIN_STORE_REDIS_VERSION)
private JedisClient jedisClient;
@Value("${redisKey.prefix.user_session}")
private String USER_SESSION;
@RequestMapping("/cart")
public String showCart( HttpServletRequest request, HttpServletResponse response,Model model) {
String cookieUUID = CookieUtils.getCookieValue(request, Const.CART_KEY);
String tokenLogin = CookieUtils.getCookieValue(request, Const.TOKEN_LOGIN);
TbUser user = null;
String userJson = null;
if (StringUtils.isNoneEmpty(tokenLogin)) {
try {
userJson = jedisClient.get(USER_SESSION + tokenLogin);
} catch (Exception e) {
logger.error("Redis 错误", e);
}
if (StringUtils.isNoneEmpty(userJson)) {
user = FastJsonConvert.convertJSONToObject(userJson, TbUser.class);
}
model.addAttribute("user", user);
} else {
model.addAttribute("user", user);
}
List<CartInfo> cartInfos = new ArrayList<>();
if (StringUtils.isNoneEmpty(cookieUUID)) {
cartInfos= cartService.getCartInfoListByCookiesId(cookieUUID);
}
if (cartInfos.size() == 0) {
model.addAttribute("cartInfos", null);
return "cart";
}
int totalPrice = 0;
for (int i = 0; i < cartInfos.size(); i++) {
CartInfo cartInfo = cartInfos.get(i);
totalPrice += cartInfo.getSum();
}
model.addAttribute("cartInfos", cartInfos);
model.addAttribute("totalPrice", totalPrice);
return "cart";
}
@RequestMapping("/showError")
public String showError() {
return "error";
}
@RequestMapping("/cart/miniCartServiceNew")
@ResponseBody
public String miniCartServiceNew(String callback) {
String s = "{\"Cart\":{\"TheSkus\":[],\"TheGifts\":[],\"TheSuit\":[],\"ManJian\":[],\"ManZeng\":[{\"Id\":196031044\n" +
",\"ManFlag\":true,\"ManNum\":0,\"ManPrice\":45.00,\"Num\":1,\"AddMoney\":45.00,\"SuitType\":11,\"PromotionPrice\":16297\n" +
".00,\"ManGifts\":[],\"Skus\":[{\"Id\":3133817,\"Name\":\"Apple\\ iPhone\\ 7\\ (A1660)\\ 32G\\ \\u9ED1\\u8272\\ \\u79FB\n" +
"\\u52A8\\u8054\\u901A\\u7535\\u4FE14G\\u624B\\u673A\",\"Num\":2,\"ImgUrl\":\"jfs/t3298/58/1622979569/120892/64989235\n" +
"/57d0d400Nfd249af4.jpg\",\"PromotionPrice\":5199.00,\"Gifts\":[],\"CouponAD\":[],\"Score\":0,\"FanPrice\":\"0.00\"\n" +
",\"CheckType\":\"1\",\"Cid\":\"655\",\"VenderId\":\"\"},{\"Id\":3133827,\"Name\":\"Apple\\ iPhone\\ 7\\ (A1660)\\ 128G\\ \\u9ED1\n" +
"\\u8272\\ \\u79FB\\u52A8\\u8054\\u901A\\u7535\\u4FE14G\\u624B\\u673A\",\"Num\":1,\"ImgUrl\":\"jfs/t3298/58/1622979569\n" +
"/120892/64989235/57d0d400Nfd249af4.jpg\",\"PromotionPrice\":5899.00,\"Gifts\":[],\"CouponAD\":[],\"Score\":0,\"FanPrice\"\n" +
":\"0.00\",\"CheckType\":\"1\",\"Cid\":\"655\",\"VenderId\":\"\"}]}],\"TotalPromotionPrice\":16297.00,\"Num\":3}}";
return callback+"("+s+")";
}
@RequestMapping("/add")
public String addCart(Long pid, Integer pcount, HttpServletRequest request, HttpServletResponse response, Model model) {
String cookieUUID = CookieUtils.getCookieValue(request, Const.CART_KEY);
if (StringUtils.isBlank(cookieUUID)) {
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
CookieUtils.setCookie(request, response, Const.CART_KEY, uuid);
XbinResult result = cartService.addCart(pid, pcount, uuid);
model.addAttribute("cartInfo", (CartInfo) result.getData());
return "success";
} else {
XbinResult result = cartService.addCart(pid, pcount, cookieUUID);
model.addAttribute("cartInfo", (CartInfo)result.getData());
return "success";
}
}
/**
* 根据商品id和数量对购物车增加商品或减少商品
*
* @param pid 商品id
* @param pcount 增加数量
* @param type 1 增加 2 减少
* @param index 商品位置 ps:用于直接定位商品 不用遍历整个购物车
* @param request
* @param response
* @param model
* @return
*/
@RequestMapping("/decreOrIncre")
@ResponseBody
public XbinResult decreOrIncre(Long pid, Integer pcount,Integer type,Integer index, HttpServletRequest request, HttpServletResponse response, Model model) {
String cookieUUID = CookieUtils.getCookieValue(request, Const.CART_KEY);
if (StringUtils.isBlank(cookieUUID)) {
model.addAttribute("msg","没有此Cookie!");
return XbinResult.build(400,"请先去购物!");
} else {
return cartService.decreOrIncre(pid, pcount,type,index, cookieUUID);
}
}
}