ApiCartController.java 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841
  1. package com.kmall.api.api;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.google.common.collect.Maps;
  4. import com.kmall.api.annotation.LoginUser;
  5. import com.kmall.api.dto.CheckOutDto;
  6. import com.kmall.api.entity.mk.MkStorePromOrderRealVo;
  7. import com.kmall.api.entity.mk.MkStorePromVo;
  8. import com.kmall.api.service.mk.ApiMkStorePromOrderRealService;
  9. import com.kmall.api.service.mk.ApiMkStorePromService;
  10. import com.kmall.api.service.mk.ApiMkStoreTicketDiscountService;
  11. import com.kmall.api.util.StockUtil;
  12. import com.kmall.common.constant.Dict;
  13. import com.kmall.api.entity.*;
  14. import com.kmall.api.service.*;
  15. import com.kmall.api.util.ApiBaseAction;
  16. import com.kmall.common.utils.MapUtils;
  17. import com.qiniu.util.StringUtils;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.web.bind.annotation.GetMapping;
  20. import org.springframework.web.bind.annotation.PostMapping;
  21. import org.springframework.web.bind.annotation.RequestMapping;
  22. import org.springframework.web.bind.annotation.RestController;
  23. import java.math.BigDecimal;
  24. import java.util.*;
  25. /**
  26. * 作者: @author Scott <br>
  27. * 时间: 2017-08-11 08:32<br>
  28. * 描述: ApiIndexController <br>
  29. */
  30. @RestController
  31. @RequestMapping("/api/cart")
  32. public class ApiCartController extends ApiBaseAction {
  33. @Autowired
  34. private ApiCartService cartService;
  35. @Autowired
  36. private ApiGoodsService goodsService;
  37. @Autowired
  38. private ApiProductService productService;
  39. @Autowired
  40. private ApiAddressService addressService;
  41. @Autowired
  42. private ApiCouponService apiCouponService;
  43. @Autowired
  44. private ApiUserCouponService apiUserCouponService;
  45. @Autowired
  46. private ApiOrderGoodsService apiOrderGoodsService;
  47. @Autowired
  48. private ApiUserService apiUserService;
  49. @Autowired
  50. private ApiThirdMerchantBizService apiThirdMerchantBizService;
  51. @Autowired
  52. private ApiStoreService apiStoreService;
  53. @Autowired
  54. private ApiMkStorePromService apiMkStorePromService;
  55. @Autowired
  56. private ApiMkStorePromOrderRealService apiMkStorePromOrderRealService;
  57. @Autowired
  58. private ApiMkStoreTicketDiscountService apiMkStoreTicketDiscountService;
  59. /**
  60. * 获取购物车中的数据
  61. */
  62. @GetMapping("getCartMoney")
  63. public Object getCartMoney(@LoginUser UserVo loginUser, String checkCart) {
  64. Long storeId = getStoreId();
  65. Map<String, Object> resultObj = cartService.getCartMoney(loginUser,checkCart,storeId);
  66. return resultObj;
  67. }
  68. /**
  69. * 获取购物车中的数据
  70. */
  71. @GetMapping("getCart")
  72. public Object getCart(String checkCart,Long storeId) {
  73. UserVo loginUser = new UserVo();
  74. loginUser.setId(getUserId());
  75. Map<String, Object> resultObj = Maps.newHashMap();
  76. //查询列表数据
  77. Map param = Maps.newHashMap();
  78. param.put("user_id", loginUser.getId());
  79. param.put("store_id", storeId);
  80. param.put("merchSn", getMerchSn());
  81. param.put("checkCart", checkCart);
  82. // param.putAll(setIsStockShare(storeId));
  83. param.put("isStockShare", StockUtil.getIsStockShareByStore(storeId,apiStoreService,apiThirdMerchantBizService));
  84. List<CartVo> cartList = cartService.queryList(param);
  85. List<CartVo> validCartList = cartService.queryValidCartList(param);
  86. List<CartVo> validCartDataList = new ArrayList<>();
  87. List<CartVo> cartDataList = new ArrayList<>();
  88. if(checkCart !=null){
  89. for(CartVo vo : validCartList){
  90. String isStockShare = StockUtil.getIsStockShareByCartVo(vo);
  91. if(checkCart.equalsIgnoreCase("00")){
  92. if(vo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem()) && isStockShare.equalsIgnoreCase(Dict.isStockShare.item_1.getItem())){
  93. if(vo.getGoodsNumber() != null && vo.getGoodsNumber() == 0) {
  94. validCartDataList.add(vo);
  95. }
  96. }
  97. if(vo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem())&& isStockShare.equalsIgnoreCase(Dict.isStockShare.item_0.getItem())){
  98. if(vo.getStockNum() == 0) {
  99. validCartDataList.add(vo);
  100. }
  101. }
  102. if(vo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_02.getItem())&& vo.getStockNum() == 0){
  103. validCartDataList.add(vo);
  104. }
  105. if(vo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_10.getItem())&& vo.getStockNum() == 0){
  106. validCartDataList.add(vo);
  107. }
  108. }
  109. }
  110. for(CartVo vo : cartList){
  111. String isStockShare = StockUtil.getIsStockShareByCartVo(vo);
  112. vo.setIsStockShare(isStockShare);
  113. if(checkCart.equalsIgnoreCase("00")){
  114. if(vo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem()) && isStockShare.equalsIgnoreCase(Dict.isStockShare.item_1.getItem())){
  115. if(vo.getGoodsNumber() > 0 ){
  116. cartDataList.add(vo);
  117. }
  118. }
  119. if(vo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem()) && isStockShare.equalsIgnoreCase(Dict.isStockShare.item_0.getItem())){
  120. if(vo.getStockNum() > 0 ){
  121. cartDataList.add(vo);
  122. }
  123. }
  124. if(vo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_02.getItem())&& vo.getStockNum() > 0){
  125. cartDataList.add(vo);
  126. }
  127. if(vo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_10.getItem())&& vo.getStockNum() > 0){
  128. cartDataList.add(vo);
  129. }
  130. }
  131. }
  132. }
  133. //获取购物车统计信息
  134. Integer goodsCount = 0;
  135. BigDecimal goodsAmount = new BigDecimal(0.00);
  136. Integer checkedGoodsCount = 0;
  137. BigDecimal checkedGoodsAmount = new BigDecimal(0.00);
  138. List<CartVo> cart00List = new ArrayList<>();
  139. List<CartVo> cart02List = new ArrayList<>();
  140. List<CartVo> cart10List = new ArrayList<>();
  141. List<CartVo> cart11List = new ArrayList<>();
  142. for (CartVo cartItem : cartList) {
  143. goodsCount += cartItem.getNumber();
  144. goodsAmount = goodsAmount.add(cartItem.getRetail_price().multiply(new BigDecimal(cartItem.getNumber())));
  145. if (null != cartItem.getChecked() && 1 == cartItem.getChecked()) {
  146. checkedGoodsCount += cartItem.getNumber();
  147. checkedGoodsAmount = checkedGoodsAmount.add(cartItem.getRetail_price().multiply(new BigDecimal(cartItem.getNumber())));
  148. }
  149. if(org.apache.commons.lang.StringUtils.isNotEmpty(cartItem.getGoodsBizType())){
  150. cartItem.setGoodsBizTypeName(Dict.orderBizType.valueOf("item_"+ cartItem.getGoodsBizType()).getItemName());
  151. }else{
  152. cartItem.setGoodsBizTypeName("");
  153. }
  154. if(Dict.orderBizType.item_00.getItem().equalsIgnoreCase(cartItem.getGoodsBizType())){
  155. CartVo cartVo00= cartItem;
  156. cart00List.add(cartVo00);
  157. }
  158. if(Dict.orderBizType.item_02.getItem().equalsIgnoreCase(cartItem.getGoodsBizType())){
  159. CartVo cartVo02= cartItem;
  160. cart02List.add(cartVo02);
  161. }
  162. if(Dict.orderBizType.item_10.getItem().equalsIgnoreCase(cartItem.getGoodsBizType())){
  163. CartVo cartVo10= cartItem;
  164. cart10List.add(cartVo10);
  165. }
  166. if(Dict.orderBizType.item_11.getItem().equalsIgnoreCase(cartItem.getGoodsBizType())){
  167. CartVo cartVo11= cartItem;
  168. cart11List.add(cartVo11);
  169. }
  170. }
  171. List<CouponVo> couponInfoList = new ArrayList();
  172. // // 获取优惠信息提示 邮费,还差多少包邮,暂时无用
  173. // CouponVo shippingCoupon = apiCouponService.matchShippingSign(loginUser.getId(), checkedGoodsAmount);
  174. //
  175. //// 获取优惠信息提示 满减,还差多少可参与满减
  176. // CouponVo fullSubCoupon = apiCouponService.matchFullSubSign(loginUser.getId(), checkedGoodsAmount, storeId);
  177. //
  178. // if (null != shippingCoupon) {
  179. // couponInfoList.add(shippingCoupon);
  180. // }
  181. // if (null != fullSubCoupon) {
  182. // couponInfoList.add(fullSubCoupon);
  183. // }
  184. Map<String, Object> params = new HashMap<>();
  185. params.put("storeId", storeId);
  186. params.put("userId", getUserId());
  187. Integer ticketDiscountTotal = apiMkStoreTicketDiscountService.getTotalByDiscountByStoreId(params);
  188. resultObj.put("couponInfoList", couponInfoList);
  189. resultObj.put("ticketDiscountTotal", ticketDiscountTotal);
  190. resultObj.put("cart00List", cart00List);//{'cartList':{'type': '保税备货','data':{}}}
  191. resultObj.put("cart02List", cart02List);
  192. resultObj.put("cart10List", cart10List);
  193. resultObj.put("cart11List", cart11List);
  194. resultObj.put("cartList", cartList);
  195. resultObj.put("validCartList", validCartDataList);
  196. //
  197. Map<String, Object> cartTotal = Maps.newHashMap();
  198. cartTotal.put("goodsCount", goodsCount);
  199. cartTotal.put("goodsAmount", goodsAmount);
  200. cartTotal.put("checkedGoodsCount", checkedGoodsCount);
  201. cartTotal.put("checkedGoodsAmount", checkedGoodsAmount);
  202. resultObj.put("cartTotal", cartTotal);
  203. param.put("checkCart","00");
  204. int total00 = cartService.queryTotal(param);
  205. param.put("checkCart","11");
  206. int total11 = cartService.queryTotal(param);
  207. resultObj.put("total00", total00);
  208. resultObj.put("total11", total11);
  209. return resultObj;
  210. }
  211. /**
  212. * 获取购物车中的数据,底部显示
  213. */
  214. @GetMapping("getFootCart")
  215. public Object getFootCart(@LoginUser UserVo loginUser) {
  216. Map<String, Object> resultObj = Maps.newHashMap();
  217. //查询列表数据
  218. Map param = Maps.newHashMap();
  219. param.put("user_id", loginUser.getId());
  220. Long storeId = getStoreId();
  221. param.put("store_id", storeId);
  222. // param.putAll(setIsStockShare(storeId));
  223. param.put("isStockShare", StockUtil.getIsStockShareByStore(storeId,apiStoreService,apiThirdMerchantBizService));
  224. param.put("checked", "1");
  225. List<CartVo> cartList = cartService.queryList(param);
  226. //获取购物车统计信息
  227. Integer goodsCount = cartService.queryCartNumByStoreId(param);
  228. // BigDecimal goodsAmount = new BigDecimal(0.00);
  229. Integer checkedGoodsCount = 0;
  230. BigDecimal checkedGoodsAmount = new BigDecimal(0.00);
  231. for (CartVo cartItem : cartList) {
  232. // goodsAmount = goodsAmount.add(cartItem.getRetail_price().multiply(new BigDecimal(cartItem.getNumber())));
  233. if (null != cartItem.getChecked() && 1 == cartItem.getChecked()) {
  234. checkedGoodsCount += cartItem.getNumber();
  235. checkedGoodsAmount = checkedGoodsAmount.add(cartItem.getRetail_price().multiply(new BigDecimal(cartItem.getNumber())));
  236. }
  237. }
  238. //
  239. resultObj.put("goodsCount", goodsCount);
  240. // resultObj.put("goodsAmount", goodsAmount);
  241. resultObj.put("checkedGoodsCount", checkedGoodsCount);
  242. resultObj.put("checkedGoodsAmount", checkedGoodsAmount);
  243. //
  244. return toResponsSuccess(resultObj);
  245. }
  246. /**
  247. * 获取购物车信息,所有对购物车的增删改操作,都要重新返回购物车的信息
  248. */
  249. @GetMapping("indexs")
  250. public Object indexs(String checkCart,Long storeId) {
  251. return toResponsSuccess(getCart(checkCart,storeId));
  252. }
  253. /**
  254. * 添加商品到购物车
  255. */
  256. @PostMapping("add")
  257. public Object add(@LoginUser UserVo loginUser) {
  258. JSONObject jsonParam = getJsonRequest();
  259. Long goodsId = jsonParam.getLong("goodsId");
  260. Long productId = jsonParam.getLong("productId");
  261. Integer number = jsonParam.getInteger("number");
  262. String checkCart = jsonParam.getString("checkCart");
  263. Integer promId = jsonParam.getInteger("promId");
  264. //判断商品是否可以购买
  265. GoodsVo goodsInfo = goodsService.queryObjectByStoreId(goodsId, getStoreId());
  266. if (null == goodsInfo || goodsInfo.getIs_delete() == 1 || goodsInfo.getIs_on_sale() == 0) {
  267. return toResponsFail("商品已下架");
  268. }
  269. Long storeId = getStoreId();
  270. //取得规格的信息,判断规格库存
  271. /*ProductVo productInfo = productService.queryObjectByStoreId(productId, storeId);
  272. if (null == productInfo) {
  273. return toResponsFail("商品已下架");
  274. }
  275. if(productInfo.getStock_num() <= 0){
  276. return toResponsFail("库存不足");
  277. }*/
  278. ProductVo productInfo = productService.queryByStoreId(productId, storeId);
  279. if (null == productInfo) {
  280. return toResponsFail("商品已下架");
  281. }
  282. //// TODO: 2019/3/5 普通商品不受共享库存影响,直接取门店配置库存
  283. Integer stockNum = StockUtil.setStockNumByGoodsVo(goodsInfo);
  284. /*if(goodsInfo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_11.getItem())
  285. || goodsInfo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_02.getItem())
  286. || goodsInfo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_10.getItem())){
  287. stockNum = productInfo.getStock_num();
  288. }
  289. if(goodsInfo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem())){
  290. if (thirdMerchantBizVo.getIsStockShare().equalsIgnoreCase(Dict.isStockShare.item_1.getItem())){
  291. stockNum = goodsInfo.getGoods_number();
  292. }
  293. if (thirdMerchantBizVo.getIsStockShare().equalsIgnoreCase(Dict.isStockShare.item_0.getItem())){
  294. stockNum = productInfo.getStock_num();
  295. }
  296. }*/
  297. if(stockNum == null || number > stockNum || stockNum <= 0){
  298. return toResponsFail("该商品库存不足");
  299. }
  300. if (null == productInfo.getRetail_price()) {
  301. productInfo.setRetail_price(goodsInfo.getRetail_price());
  302. productInfo.setMarket_price(goodsInfo.getMarket_price());
  303. }
  304. String isStockShare = StockUtil.getIsStockShareByGoodsVo(goodsInfo);
  305. //判断购物车中是否存在此规格商品
  306. Map cartParam = Maps.newHashMap();
  307. cartParam.put("goods_id", goodsId);
  308. cartParam.put("product_id", productId);
  309. cartParam.put("user_id", loginUser.getId());
  310. cartParam.put("store_id", storeId);
  311. cartParam.put("goodsBizType", goodsInfo.getGoodsBizType());
  312. cartParam.put("isStockShare", isStockShare);
  313. List<CartVo> cartInfoList = cartService.queryList(cartParam);
  314. CartVo cartInfo = null != cartInfoList && cartInfoList.size() > 0 ? cartInfoList.get(0) : null;
  315. if (null == cartInfo) {//添加规格名和值
  316. cartInfo = new CartVo();
  317. cartInfo.setGoods_id(goodsId);
  318. cartInfo.setProduct_id(productId);
  319. cartInfo.setGoods_sn(productInfo.getGoods_sn());
  320. cartInfo.setGoods_name(goodsInfo.getName());
  321. cartInfo.setList_pic_url(goodsInfo.getList_pic_url());
  322. cartInfo.setNumber(number);
  323. cartInfo.setStore_id(storeId);
  324. cartInfo.setUser_id(loginUser.getId());
  325. cartInfo.setRetail_price(productInfo.getRetail_price());
  326. cartInfo.setMarket_price(productInfo.getMarket_price());
  327. cartInfo.setGoods_specification_name_value(productInfo.getGoods_specification_name_value());
  328. cartInfo.setGoods_specification_ids(productInfo.getGoods_specification_ids());
  329. cartInfo.setChecked(1);
  330. cartInfo.setGoodsBizType(goodsInfo.getGoodsBizType());//业务类型
  331. cartInfo.setStockNum(stockNum);
  332. cartInfo.setMerchSn(goodsInfo.getMerchSn());
  333. cartInfo.setSku(goodsInfo.getSku());
  334. cartService.save(cartInfo);
  335. } else {
  336. if(number + cartInfo.getNumber() > stockNum){
  337. return toResponsFail("商品选购数量(含购物车已加购数量)已超过库存");
  338. }
  339. cartInfo.setNumber(cartInfo.getNumber() + number);
  340. cartInfo.setGoodsBizType(goodsInfo.getGoodsBizType());//业务类型
  341. cartInfo.setStockNum(stockNum);
  342. cartInfo.setSku(goodsInfo.getSku());
  343. cartService.update(cartInfo);
  344. }
  345. if(com.kmall.common.utils.StringUtils.isNotEmpty(String.valueOf(promId))) {
  346. MkStorePromVo storePromVo = apiMkStorePromService.queryObject(promId);
  347. if(storePromVo != null){
  348. if(apiMkStorePromOrderRealService.queryPromObjectByCartId(Integer.parseInt(String.valueOf(cartInfo.getId()))) == null) {
  349. MkStorePromOrderRealVo orderRealVo = new MkStorePromOrderRealVo();
  350. orderRealVo.setCartId(Integer.parseInt(String.valueOf(cartInfo.getId())));
  351. orderRealVo.setPromId(promId);
  352. orderRealVo.setIsValid("0");
  353. orderRealVo.setCreateTime(new Date());
  354. orderRealVo.setModTime(new Date());
  355. orderRealVo.setIsPromStatScan(Dict.isDistSellScan.item_0.getItem());
  356. apiMkStorePromOrderRealService.save(orderRealVo);
  357. }
  358. }
  359. }
  360. return toResponsSuccess(getCart(checkCart,storeId));
  361. }
  362. /**
  363. * 添加商品到购物车
  364. */
  365. @PostMapping("addByGoodsId")
  366. public Object addByGoodsId(@LoginUser UserVo loginUser) {
  367. JSONObject jsonParam = getJsonRequest();
  368. Long goodsId = jsonParam.getLong("goodsId");
  369. String checkCart = jsonParam.getString("checkCart");
  370. //判断商品是否可以购买
  371. GoodsVo goodsInfo = goodsService.queryObjectByStoreId(goodsId, getStoreId());
  372. if (null == goodsInfo || goodsInfo.getIs_delete() == 1 || goodsInfo.getIs_on_sale() == 0) {
  373. return toResponsFail("商品已下架");
  374. }
  375. Long storeId = getStoreId();
  376. Map resultObj = cartService.addByGoodsId(getUserId(), goodsId, storeId);
  377. if (0 != MapUtils.getInteger("errno", resultObj)) {
  378. return toResponsObject(MapUtils.getInteger("errno", resultObj), MapUtils.getString("errmsg", resultObj), "");
  379. }
  380. return toResponsSuccess(getCart(checkCart,storeId));
  381. }
  382. /**
  383. * 根据订单号添加商品到购物车
  384. */
  385. @GetMapping("addByOrder")
  386. public Object addByOrder(@LoginUser UserVo loginUser, Long orderId) {
  387. JSONObject jsonParam = getJsonRequest();
  388. //
  389. Map params = Maps.newHashMap();
  390. params.put("order_id", orderId);
  391. List<OrderGoodsVo> orderGoodsVos = apiOrderGoodsService.queryList(params);
  392. Integer stockNum = 0;
  393. Long storeId = getStoreId();
  394. for (OrderGoodsVo goodsVo : orderGoodsVos) {
  395. //判断商品是否可以购买
  396. ProductVo productInfo = productService.queryByStoreId(goodsVo.getProduct_id(), storeId);
  397. if (null == productInfo) {
  398. return toResponsFail("商品已下架");
  399. }
  400. GoodsVo goodsInfo = goodsService.queryObjectByStoreId(goodsVo.getGoods_id(), getStoreId());
  401. if (null == goodsInfo || goodsInfo.getIs_delete() == 1 || goodsInfo.getIs_on_sale() == 0) {
  402. return toResponsFail("商品已下架");
  403. }
  404. // TODO: 2019/3/5 普通商品不受共享库存影响,直接取门店配置库存
  405. stockNum = StockUtil.setStockNumByGoodsVo(goodsInfo);
  406. /*if(goodsInfo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_11.getItem())
  407. || goodsInfo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_02.getItem())
  408. || goodsInfo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_10.getItem())){
  409. stockNum = productInfo.getStock_num();
  410. }
  411. if(goodsInfo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem())) {
  412. if (goodsInfo.getIsStockShare().equalsIgnoreCase(Dict.isStockShare.item_1.getItem())) {
  413. stockNum = goodsInfo.getGoods_number();
  414. }
  415. if (goodsInfo.getIsStockShare().equalsIgnoreCase(Dict.isStockShare.item_0.getItem())) {
  416. stockNum = productInfo.getStock_num();
  417. }
  418. }*/
  419. if(stockNum == null || goodsVo.getNumber() > stockNum || stockNum <= 0){
  420. return toResponsFail("该商品库存不足");
  421. }
  422. CartVo cartInfo = new CartVo();
  423. cartInfo.setGoods_id(goodsVo.getGoods_id());
  424. cartInfo.setProduct_id(goodsVo.getProduct_id());
  425. cartInfo.setGoods_sn(goodsVo.getGoods_sn());
  426. cartInfo.setGoods_name(goodsVo.getGoods_name());
  427. cartInfo.setList_pic_url(goodsVo.getList_pic_url());
  428. cartInfo.setNumber(goodsVo.getNumber());
  429. cartInfo.setStore_id(storeId);
  430. cartInfo.setUser_id(getUserId());
  431. cartInfo.setRetail_price(goodsVo.getRetail_price());
  432. cartInfo.setMarket_price(goodsVo.getMarket_price());
  433. cartInfo.setGoods_specification_name_value(goodsVo.getGoods_specification_name_value());
  434. cartInfo.setGoods_specification_ids(goodsVo.getGoods_specification_ids());
  435. cartInfo.setChecked(1);
  436. cartInfo.setGoodsBizType(goodsVo.getOrderBizType());
  437. cartInfo.setStockNum(stockNum);
  438. cartInfo.setMerchSn(goodsVo.getMerchSn());
  439. cartInfo.setSku(goodsVo.getSku());
  440. String isStockShare = StockUtil.getIsStockShareByGoodsVo(goodsInfo);
  441. Map map = Maps.newHashMap();
  442. map.put("user_id", getUserId());
  443. map.put("store_id", getStoreId());
  444. map.put("goods_id",goodsVo.getGoods_id());
  445. map.put("product_id",goodsVo.getProduct_id());
  446. map.put("number",goodsVo.getNumber());
  447. map.put("goodsBizType", goodsInfo.getGoodsBizType());
  448. map.put("isStockShare", isStockShare);
  449. List<CartVo> list= cartService.queryList(map);
  450. if(list != null && list.size() > 0){
  451. for (CartVo vo:list) {
  452. cartInfo.setId(vo.getId());
  453. cartService.update(cartInfo);
  454. }
  455. }else{
  456. cartService.save(cartInfo);
  457. }
  458. }
  459. return toResponsSuccess("添加成功");
  460. }
  461. /**
  462. * 减少商品到购物车
  463. */
  464. @PostMapping("minus")
  465. public Object minus(@LoginUser UserVo loginUser) {
  466. JSONObject jsonParam = getJsonRequest();
  467. Integer goodsId = jsonParam.getInteger("goodsId");
  468. Integer productId = jsonParam.getInteger("productId");
  469. Integer number = jsonParam.getInteger("number");
  470. GoodsVo goodsInfo = goodsService.queryObjectByStoreId(Long.valueOf(goodsId), getStoreId());
  471. if (null == goodsInfo || goodsInfo.getIs_delete() == 1 || goodsInfo.getIs_on_sale() == 0) {
  472. return toResponsFail("商品已下架");
  473. }
  474. ThirdMerchantBizVo thirdMerchantBiz = apiThirdMerchantBizService.getThirdMerchangByCode(goodsInfo.getThirdPartyMerchCode());
  475. if(null == thirdMerchantBiz){
  476. return toResponsFail("商品已下架");
  477. }
  478. /*if (thirdMerchantBiz.getIsStockShare().equalsIgnoreCase(Dict.isStockShare.item_1.getItem())){
  479. stockNum = goodsInfo.getGoods_number();
  480. }
  481. if (thirdMerchantBiz.getIsStockShare().equalsIgnoreCase(Dict.isStockShare.item_0.getItem())){
  482. stockNum = productInfo.getStock_num();
  483. }*/
  484. String isStockShare = StockUtil.getIsStockShareByGoodsVo(goodsInfo);
  485. //判断购物车中是否存在此规格商品
  486. Map cartParam = Maps.newHashMap();
  487. cartParam.put("goods_id", goodsId);
  488. cartParam.put("product_id", productId);
  489. Long storeId = getStoreId();
  490. cartParam.put("store_id", storeId);
  491. cartParam.put("user_id", loginUser.getId());
  492. cartParam.put("goodsBizType", goodsInfo.getGoodsBizType());
  493. cartParam.put("isStockShare", isStockShare);
  494. List<CartVo> cartInfoList = cartService.queryList(cartParam);
  495. CartVo cartInfo = null != cartInfoList && cartInfoList.size() > 0 ? cartInfoList.get(0) : null;
  496. int cart_num = 0;
  497. if (null != cartInfo) {
  498. if (cartInfo.getNumber() > number) {
  499. cartInfo.setNumber(cartInfo.getNumber() - number);
  500. cartService.update(cartInfo);
  501. cart_num = cartInfo.getNumber();
  502. } else if (cartInfo.getNumber() == 1) {
  503. cartService.delete(cartInfo.getId());
  504. cart_num = 0;
  505. }
  506. }
  507. return toResponsSuccess(cart_num);
  508. }
  509. /**
  510. * 更新指定的购物车信息
  511. */
  512. @PostMapping("update")
  513. public Object update(@LoginUser UserVo loginUser) {
  514. JSONObject jsonParam = getJsonRequest();
  515. Long goodsId = jsonParam.getLong("goodsId");
  516. Long storeId = getStoreId();
  517. Long productId = jsonParam.getLong("productId");
  518. Integer number = jsonParam.getInteger("number");
  519. Integer id = jsonParam.getInteger("id");
  520. String checkCart = jsonParam.getString("checkCart");
  521. boolean isAdd = true;
  522. GoodsVo goodsInfo = goodsService.queryObjectByStoreId(Long.valueOf(goodsId), storeId);
  523. if (null == goodsInfo || goodsInfo.getIs_delete() == 1 || goodsInfo.getIs_on_sale() == 0) {
  524. return toResponsFail("商品已下架");
  525. }
  526. //取得规格的信息,判断规格库存
  527. ProductVo productInfo = productService.queryByStoreId(productId, storeId);
  528. if (null == productInfo) {
  529. return this.toResponsObject(400, "商品已下架", getCart(checkCart, storeId));
  530. }
  531. ThirdMerchantBizVo thirdMerchantBiz = apiThirdMerchantBizService.getThirdMerchangByCode(goodsInfo.getThirdPartyMerchCode());
  532. if(null == thirdMerchantBiz){
  533. return toResponsFail("商品已下架");
  534. }
  535. // TODO: 2019/3/5 普通商品不受共享库存影响,直接取门店配置库存
  536. Integer stockNum = StockUtil.setStockNumByGoodsVo(goodsInfo);
  537. /*if(goodsInfo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_11.getItem())
  538. || goodsInfo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_02.getItem())
  539. || goodsInfo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_10.getItem())){
  540. stockNum = productInfo.getStock_num();//门店库存
  541. }
  542. if(goodsInfo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem())){
  543. if (thirdMerchantBiz.getIsStockShare().equalsIgnoreCase(Dict.isStockShare.item_1.getItem())){
  544. stockNum = goodsInfo.getGoods_number();
  545. }
  546. if (thirdMerchantBiz.getIsStockShare().equalsIgnoreCase(Dict.isStockShare.item_0.getItem())){
  547. stockNum = productInfo.getStock_num();
  548. }
  549. }*/
  550. if(stockNum == null || number > stockNum || stockNum <= 0){
  551. return this.toResponsObject(400, "该商品库存不足", getCart(checkCart,storeId));
  552. }
  553. String msg = "";
  554. // if (productInfo.getStock_num() < number) {
  555. // msg = "库存不足,仅剩余" + productInfo.getStock_num();
  556. // number = productInfo.getStock_num();
  557. //// return this.toResponsObject(400, "库存不足,仅剩余" + productInfo.getStock_num(), "");
  558. // }
  559. //判断是否已经存在product_id购物车商品
  560. CartVo cartInfo = cartService.queryObject(id);
  561. //只是更新number
  562. if (cartInfo.getProduct_id().equals(productId)) {
  563. cartInfo.setNumber(number);
  564. cartInfo.setStockNum(stockNum);
  565. cartService.update(cartInfo);
  566. return toResponsObject(0, msg, getCart(checkCart,storeId));
  567. }
  568. String isStockShare = StockUtil.getIsStockShareByGoodsVo(goodsInfo);
  569. Map cartParam = Maps.newHashMap();
  570. cartParam.put("goodsId", goodsId);
  571. cartParam.put("productId", productId);
  572. cartParam.put("store_id", storeId);
  573. cartParam.put("goodsBizType", goodsInfo.getGoodsBizType());
  574. cartParam.put("isStockShare", isStockShare);
  575. List<CartVo> cartInfoList = cartService.queryList(cartParam);
  576. CartVo newcartInfo = null != cartInfoList && cartInfoList.size() > 0 ? cartInfoList.get(0) : null;
  577. if (null == newcartInfo) {
  578. cartInfo.setProduct_id(productId);
  579. cartInfo.setGoods_sn(productInfo.getGoods_sn());
  580. cartInfo.setNumber(number);
  581. cartInfo.setRetail_price(productInfo.getRetail_price());
  582. cartInfo.setMarket_price(productInfo.getRetail_price());
  583. cartInfo.setGoods_specification_name_value(productInfo.getGoods_specification_name_value());
  584. cartInfo.setGoods_specification_ids(productInfo.getGoods_specification_ids());
  585. // cartInfo.setSku(goodsVo.getSku());
  586. cartService.update(cartInfo);
  587. } else {
  588. //添加规格名和值
  589. cartInfo.setProduct_id(productId);
  590. cartInfo.setGoods_sn(productInfo.getGoods_sn());
  591. cartInfo.setNumber(number);
  592. cartInfo.setRetail_price(productInfo.getRetail_price());
  593. cartInfo.setMarket_price(productInfo.getRetail_price());
  594. cartInfo.setGoods_specification_name_value(productInfo.getGoods_specification_name_value());
  595. cartInfo.setSku(newcartInfo.getSku());
  596. cartInfo.setGoods_specification_ids(productInfo.getGoods_specification_ids());
  597. cartService.update(cartInfo);
  598. }
  599. return toResponsObject(0, msg, getCart(checkCart,storeId));
  600. }
  601. /**
  602. * 是否选择商品,如果已经选择,则取消选择,批量操作
  603. */
  604. @PostMapping("checked")
  605. public Object checked(@LoginUser UserVo loginUser) {
  606. JSONObject jsonParam = getJsonRequest();
  607. String goodsIds = jsonParam.getString("goodsIds");
  608. Integer isChecked = jsonParam.getInteger("isChecked");
  609. String goodsBizType = jsonParam.getString("goodsBizType");
  610. String checkCart = jsonParam.getString("checkCart");
  611. String[] goodsIdArray = null;
  612. if(StringUtils.isNullOrEmpty(goodsBizType)) {
  613. if (StringUtils.isNullOrEmpty(goodsIds)) {//点击全选时
  614. return this.toResponsFail("删除出错");
  615. }
  616. goodsIdArray = goodsIds.split(",");
  617. }else{
  618. //根据业务类型查询购物车
  619. List<CartVo> cartVoList = cartService.queryCartByGoodsBizType(goodsBizType);
  620. goodsIdArray = new String[cartVoList.size()];
  621. for (int i = 0;i< cartVoList.size();i++){
  622. goodsIdArray[i] =cartVoList.get(i).getGoods_id()+"";
  623. }
  624. }
  625. cartService.updateCheck(goodsIdArray, isChecked, loginUser.getId(), getStoreId());
  626. return toResponsSuccess(getCart(checkCart,getStoreId()));
  627. }
  628. //删除选中的购物车商品,批量删除
  629. @PostMapping("delete")
  630. public Object delete(@LoginUser UserVo loginUser) {
  631. JSONObject jsonObject = getJsonRequest();
  632. Long cartId = jsonObject.getLong("cartId");
  633. String checkCart = jsonObject.getString("checkCart");
  634. if (null == cartId) {
  635. return toResponsFail("删除出错");
  636. }
  637. cartService.delete(cartId);
  638. return toResponsSuccess(getCart(checkCart,getStoreId()));
  639. }
  640. // 获取购物车商品的总件件数
  641. @GetMapping("goodscounts")
  642. public Object goodscounts(@LoginUser UserVo loginUser, Long storeId) {
  643. if (null == loginUser || null == loginUser.getId()) {
  644. return toResponsFail("未登录");
  645. }
  646. Map<String, Object> resultObj = Maps.newHashMap();
  647. //查询列表数据
  648. Map param = Maps.newHashMap();
  649. param.put("user_id", loginUser.getId());
  650. param.put("store_id", storeId);
  651. //获取购物车统计信息
  652. Integer goodsCount = cartService.queryCartNumByStoreId(param);
  653. //
  654. Map<String, Object> cartTotal = Maps.newHashMap();
  655. cartTotal.put("goodsCount", goodsCount==null?0:goodsCount);
  656. //
  657. resultObj.put("cartTotal", cartTotal);
  658. return toResponsSuccess(resultObj);
  659. }
  660. /**
  661. * 订单提交前的检验和填写相关订单信息,微信审核后删除
  662. */
  663. @GetMapping("checkout")
  664. public Object checkout(@LoginUser UserVo loginUser, String merchSn, String checkCart, Long tickDiscId00, Long tickDiscId02, Long tickDiscId10, Long tickDiscId11,
  665. Integer campId00, Integer campId02, Integer campId10, Integer campId11, Integer isLoadStatus) {
  666. //获取要购买的商品
  667. Map<String, Object> cartData = (Map<String, Object>)this.getCartMoney(loginUser,checkCart);
  668. CheckOutDto checkOutDto = new CheckOutDto();
  669. checkOutDto.setCheckCart(checkCart);
  670. checkOutDto.setLoginUser(loginUser);
  671. checkOutDto.setTickDiscId00(tickDiscId00);
  672. checkOutDto.setTickDiscId02(tickDiscId02);
  673. checkOutDto.setTickDiscId10(tickDiscId10);
  674. checkOutDto.setTickDiscId11(tickDiscId11);
  675. checkOutDto.setCampId00(campId00);
  676. checkOutDto.setCampId02(campId02);
  677. checkOutDto.setCampId10(campId10);
  678. checkOutDto.setCampId11(campId11);
  679. checkOutDto.setStoreId(getStoreId());
  680. checkOutDto.setCartData(cartData);
  681. checkOutDto.setIsLoadStatus(isLoadStatus);
  682. Map<String, Object> resultObj = cartService.getCheckOut(checkOutDto);
  683. //选择的收货地址
  684. Map param = Maps.newHashMap();
  685. param.put("is_default", 1);
  686. param.put("user_id", loginUser.getId());
  687. List<AddressVo> addressEntityList = addressService.queryList(param);
  688. if (null != addressEntityList && addressEntityList.size() > 0) {
  689. resultObj.put("addressVo", addressEntityList.get(0));
  690. } else { // 没有默认地址,选择一个
  691. param = Maps.newHashMap();
  692. param.put("user_id", loginUser.getId());
  693. addressEntityList = addressService.queryList(param);
  694. if (null != addressEntityList && addressEntityList.size() > 0) {
  695. resultObj.put("addressVo", addressEntityList.get(0));
  696. }
  697. }
  698. UserVo userVo = apiUserService.queryObject(loginUser.getId());
  699. if(userVo != null){
  700. resultObj.put("idNo", userVo.getIdNo());
  701. resultObj.put("userName", userVo.getUsername());
  702. }
  703. return toResponsSuccess(resultObj);
  704. }
  705. /**
  706. * 订单提交前的检验和填写相关订单信息
  707. */
  708. @PostMapping("checkouts")
  709. public Object checkout(@LoginUser UserVo loginUser) {
  710. JSONObject jsonParam = getJsonRequest();
  711. CheckOutDto checkOutDto = JSONObject.parseObject(jsonParam.toString(), CheckOutDto.class);
  712. //获取要购买的商品
  713. Map<String, Object> cartData = (Map<String, Object>)this.getCartMoney(loginUser,checkOutDto.getCheckCart());
  714. checkOutDto.setLoginUser(loginUser);
  715. checkOutDto.setStoreId(getStoreId());
  716. checkOutDto.setCartData(cartData);
  717. Map<String, Object> resultObj = cartService.getCheckOut(checkOutDto);
  718. //选择的收货地址
  719. Map param = Maps.newHashMap();
  720. param.put("is_default", 1);
  721. param.put("user_id", loginUser.getId());
  722. List<AddressVo> addressEntityList = addressService.queryList(param);
  723. if (null != addressEntityList && addressEntityList.size() > 0) {
  724. resultObj.put("addressVo", addressEntityList.get(0));
  725. } else { // 没有默认地址,选择一个
  726. param = Maps.newHashMap();
  727. param.put("user_id", loginUser.getId());
  728. addressEntityList = addressService.queryList(param);
  729. if (null != addressEntityList && addressEntityList.size() > 0) {
  730. resultObj.put("addressVo", addressEntityList.get(0));
  731. }
  732. }
  733. UserVo userVo = apiUserService.queryObject(loginUser.getId());
  734. if(userVo != null){
  735. resultObj.put("idNo", userVo.getIdNo());
  736. resultObj.put("userName", userVo.getUsername());
  737. }
  738. return toResponsSuccess(resultObj);
  739. }
  740. /**
  741. * 选择优惠券列表,暂时无用
  742. */
  743. @GetMapping("checkedCouponList")
  744. public Object checkedCouponList(@LoginUser UserVo loginUser) {
  745. //查询列表数据
  746. Map param = Maps.newHashMap();
  747. param.put("user_id", loginUser.getId());
  748. Long storeId = getStoreId();
  749. param.put("store_id", storeId);
  750. // param.putAll(setIsStockShare(storeId));
  751. param.put("isStockShare",StockUtil.getIsStockShareByStore(storeId,apiStoreService,apiThirdMerchantBizService));
  752. List<CartVo> cartList = cartService.queryList(param);
  753. //获取购物车统计信息
  754. BigDecimal checkedGoodsAmount = new BigDecimal(0.00);
  755. for (CartVo cartItem : cartList) {
  756. if (null != cartItem.getChecked() && 1 == cartItem.getChecked()) {
  757. checkedGoodsAmount = checkedGoodsAmount.add(cartItem.getRetail_price().multiply(new BigDecimal(cartItem.getNumber())));
  758. }
  759. }
  760. // 匹配优惠券
  761. List<UserCouponVo> couponVos = apiUserCouponService.signUserCouponList(loginUser.getId(),getMerchSn(),checkedGoodsAmount);
  762. return toResponsSuccess(couponVos);
  763. }
  764. // select checked from mall_cart where goods_biz_type ='00'
  765. @PostMapping("getCheckedDataByType")
  766. public Object getCheckedDataByType() {
  767. JSONObject jsonParam = getJsonRequest();
  768. String goodsBizType = jsonParam.getString("goodsBizType");
  769. List<CartVo> cartVoList = cartService.queryCartByGoodsBizType(goodsBizType);
  770. for (int i=0;i<cartVoList.size();i++){
  771. if(cartVoList.get(i).getChecked()==0){//未选中
  772. Map map=new HashMap();
  773. map.put("isChecked",false);
  774. return toResponsSuccess(map);
  775. }
  776. }
  777. Map map=new HashMap();
  778. map.put("isChecked",true);
  779. return toResponsSuccess(map);
  780. }
  781. /**
  782. * 清空购物车失效商品
  783. * @return
  784. */
  785. @GetMapping("deleteValidCart")
  786. public Object deleteValidCart(String checkCart) {
  787. try{
  788. Map param = Maps.newHashMap();
  789. param.put("user_id", getUserId());
  790. Long storeId = getStoreId();
  791. param.put("store_id", storeId);
  792. List<CartVo> list = cartService.queryValidCartList(param);
  793. for (CartVo cart: list) {
  794. cartService.delete(cart.getId());
  795. }
  796. return toResponsSuccess(getCart(checkCart,storeId));
  797. }catch (Exception e){
  798. return toResponsFail("清空失败");
  799. }
  800. }
  801. }