CartServiceImpl.java 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. package com.fuint.common.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  4. import com.fuint.common.enums.StatusEnum;
  5. import com.fuint.common.service.CartService;
  6. import com.fuint.framework.annoation.OperationServiceLog;
  7. import com.fuint.framework.exception.BusinessCheckException;
  8. import com.fuint.repository.mapper.MtCartMapper;
  9. import com.fuint.repository.mapper.MtGoodsMapper;
  10. import com.fuint.repository.mapper.MtGoodsSkuMapper;
  11. import com.fuint.repository.model.MtCart;
  12. import com.fuint.repository.model.MtGoods;
  13. import com.fuint.repository.model.MtGoodsSku;
  14. import com.fuint.utils.StringUtil;
  15. import org.springframework.stereotype.Service;
  16. import javax.annotation.Resource;
  17. import java.util.*;
  18. /**
  19. * 购物车业务实现类
  20. *
  21. * Created by FSQ
  22. * CopyRight https://www.fuint.cn
  23. */
  24. @Service
  25. public class CartServiceImpl extends ServiceImpl<MtCartMapper, MtCart> implements CartService {
  26. @Resource
  27. private MtCartMapper mtCartMapper;
  28. @Resource
  29. private MtGoodsMapper mtGoodsMapper;
  30. @Resource
  31. private MtGoodsSkuMapper mtGoodsSkuMapper;
  32. /**
  33. * 保存购物车
  34. *
  35. * @param reqDto
  36. * @throws BusinessCheckException
  37. */
  38. @Override
  39. public Integer saveCart(MtCart reqDto, String action) throws BusinessCheckException {
  40. MtCart mtCart = new MtCart();
  41. Integer cartId = 1;
  42. // 检查库存是否充足
  43. if (action.equals("+") || action.equals("=") && reqDto.getNum() > 0) {
  44. MtGoods mtGoods = mtGoodsMapper.selectById(reqDto.getGoodsId());
  45. Map<String, Object> param = new HashMap<>();
  46. param.put("status", StatusEnum.ENABLED.getKey());
  47. param.put("USER_ID", reqDto.getUserId());
  48. param.put("GOODS_ID", reqDto.getGoodsId());
  49. if (reqDto.getSkuId() != null && reqDto.getSkuId() > 0) {
  50. param.put("SKU_ID", reqDto.getSkuId());
  51. }
  52. List<MtCart> cartList = mtCartMapper.selectByMap(param);
  53. Integer cartNum = 0;
  54. if (cartList != null && cartList.size() > 0) {
  55. cartNum = cartList.get(0).getNum();
  56. }
  57. // 剩余库存数量
  58. Integer totalStock = 0;
  59. if (reqDto.getSkuId() != null && reqDto.getSkuId() > 0) {
  60. MtGoodsSku mtGoodsSku = mtGoodsSkuMapper.selectById(reqDto.getSkuId());
  61. if (mtGoodsSku != null && mtGoodsSku.getStock() != null) {
  62. totalStock = mtGoodsSku.getStock();
  63. }
  64. } else {
  65. totalStock = mtGoods.getStock();
  66. }
  67. // 判断库存,库存小于要添加的购物车数量、已添加的购物车数量大于库存
  68. if (totalStock < reqDto.getNum() || totalStock <= cartNum) {
  69. if (action.equals("=") && reqDto.getNum() < cartNum) {
  70. // empty
  71. } else {
  72. throw new BusinessCheckException(mtGoods.getName() + "库存不足了");
  73. }
  74. }
  75. }
  76. if (reqDto.getGoodsId() > 0) {
  77. mtCart.setGoodsId(reqDto.getGoodsId());
  78. }
  79. if (reqDto.getUserId() > 0) {
  80. mtCart.setUserId(reqDto.getUserId());
  81. }
  82. // 数量为0,删除购物车
  83. if (reqDto.getNum() == 0 && reqDto.getId() > 0) {
  84. this.removeCart(reqDto.getId()+"");
  85. } else if (reqDto.getNum() == 0 && action.equals("-")) {
  86. mtCartMapper.deleteCartItem(reqDto.getUserId(), reqDto.getGoodsId(), reqDto.getSkuId());
  87. }
  88. // 校验skuId是否正确
  89. if (reqDto.getSkuId() != null) {
  90. if (reqDto.getSkuId() > 0) {
  91. Map<String, Object> param = new HashMap<>();
  92. param.put("goods_id", reqDto.getGoodsId().toString());
  93. param.put("id", reqDto.getSkuId().toString());
  94. List<MtGoodsSku> skuList = mtGoodsSkuMapper.selectByMap(param);
  95. // 该skuId不正常
  96. if (skuList.size() < 1) {
  97. reqDto.setSkuId(0);
  98. }
  99. }
  100. }
  101. mtCart.setMerchantId(reqDto.getMerchantId());
  102. mtCart.setStoreId(reqDto.getStoreId() == null ? 0 : reqDto.getStoreId());
  103. mtCart.setStatus(StatusEnum.ENABLED.getKey());
  104. mtCart.setUpdateTime(new Date());
  105. mtCart.setSkuId(reqDto.getSkuId());
  106. mtCart.setNum(reqDto.getNum());
  107. mtCart.setHangNo(reqDto.getHangNo());
  108. mtCart.setIsVisitor(reqDto.getIsVisitor());
  109. Map<String, Object> params = new HashMap<>();
  110. params.put("userId", mtCart.getUserId());
  111. params.put("storeId", mtCart.getStoreId());
  112. params.put("goodsId", mtCart.getGoodsId());
  113. params.put("skuId", mtCart.getSkuId());
  114. params.put("hangNo", reqDto.getHangNo() == null ? "" : reqDto.getHangNo());
  115. List<MtCart> cartList = queryCartListByParams(params);
  116. if (action.equals("-") && cartList.size() == 0) {
  117. return cartId;
  118. }
  119. // 已存在,仅操作数量增加或减少
  120. if (cartList.size() > 0 && (mtCart.getId() == null || mtCart.getId() < 1)) {
  121. mtCart = cartList.get(0);
  122. if (action.equals("+")) {
  123. mtCart.setNum(mtCart.getNum() + reqDto.getNum());
  124. } else if (action.equals("=")) {
  125. mtCart.setNum(reqDto.getNum());
  126. } else {
  127. Integer num = mtCart.getNum() - 1;
  128. if (num <= 0) {
  129. this.removeCart(mtCart.getId()+"");
  130. return mtCart.getId();
  131. } else {
  132. mtCart.setNum(mtCart.getNum() - 1);
  133. }
  134. }
  135. this.updateById(mtCart);
  136. } else {
  137. mtCart.setCreateTime(new Date());
  138. this.save(mtCart);
  139. }
  140. return mtCart.getId();
  141. }
  142. /**
  143. * 删除购物车
  144. *
  145. * @param cartIds
  146. * @throws BusinessCheckException
  147. */
  148. @Override
  149. public void removeCart(String cartIds) {
  150. String[] ids = cartIds.split(",");
  151. if (ids.length < 1) {
  152. return;
  153. }
  154. for (int i = 0; i < ids.length; i++) {
  155. MtCart mtCart = mtCartMapper.selectById(Integer.parseInt(ids[i].trim()));
  156. if (mtCart != null) {
  157. mtCartMapper.deleteById(mtCart.getId());
  158. }
  159. }
  160. }
  161. /**
  162. * 删除挂单购物车
  163. *
  164. * @param hangNo 挂单序号
  165. * @throws BusinessCheckException
  166. */
  167. @Override
  168. @OperationServiceLog(description = "删除挂单")
  169. public void removeCartByHangNo(String hangNo) {
  170. if (hangNo != null && StringUtil.isNotEmpty(hangNo)) {
  171. mtCartMapper.deleteCartByHangNo(hangNo);
  172. }
  173. }
  174. /**
  175. * 清空会员购物车
  176. *
  177. * @param userId
  178. * @throws BusinessCheckException
  179. */
  180. @Override
  181. public void clearCart(Integer userId) {
  182. mtCartMapper.clearCart(userId);
  183. }
  184. @Override
  185. public List<MtCart> queryCartListByParams(Map<String, Object> params) {
  186. String status = params.get("status") == null ? StatusEnum.ENABLED.getKey() : params.get("status").toString();
  187. String userId = params.get("userId") == null ? "" : params.get("userId").toString();
  188. String ids = params.get("ids") == null ? "" : params.get("ids").toString();
  189. String hangNo = params.get("hangNo") == null ? "" : params.get("hangNo").toString();
  190. String goodsId = params.get("goodsId") == null ? "" : params.get("goodsId").toString();
  191. String skuId = params.get("skuId") == null ? "" : params.get("skuId").toString();
  192. String storeId = params.get("storeId") == null ? "" : params.get("storeId").toString();
  193. String merchantId = params.get("merchantId") == null ? "" : params.get("merchantId").toString();
  194. LambdaQueryWrapper<MtCart> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  195. lambdaQueryWrapper.eq(MtCart::getStatus, status);
  196. if (StringUtil.isNotEmpty(userId)) {
  197. lambdaQueryWrapper.eq(MtCart::getUserId, userId);
  198. }
  199. if (StringUtil.isNotEmpty(ids)) {
  200. List<String> idList = Arrays.asList(ids.split(","));
  201. lambdaQueryWrapper.in(MtCart::getId, idList);
  202. if (StringUtil.isNotEmpty(hangNo)) {
  203. lambdaQueryWrapper.eq(MtCart::getHangNo, hangNo);
  204. }
  205. } else {
  206. lambdaQueryWrapper.eq(MtCart::getHangNo, hangNo);
  207. }
  208. if (StringUtil.isNotEmpty(goodsId)) {
  209. lambdaQueryWrapper.eq(MtCart::getGoodsId, goodsId);
  210. }
  211. if (StringUtil.isNotEmpty(merchantId) && Integer.parseInt(merchantId) > 0) {
  212. lambdaQueryWrapper.eq(MtCart::getMerchantId, merchantId);
  213. }
  214. if (StringUtil.isNotEmpty(storeId) && Integer.parseInt(storeId) > 0) {
  215. lambdaQueryWrapper.eq(MtCart::getStoreId, storeId);
  216. }
  217. if (StringUtil.isNotEmpty(skuId)) {
  218. lambdaQueryWrapper.eq(MtCart::getSkuId, skuId);
  219. }
  220. List<MtCart> result = mtCartMapper.selectList(lambdaQueryWrapper);
  221. return result;
  222. }
  223. /**
  224. * 更新购物车
  225. *
  226. * @param cartId ID
  227. * @param hangNo 挂单序号
  228. * @param isVisitor 是否游客
  229. * @return
  230. */
  231. @Override
  232. @OperationServiceLog(description = "执行挂单")
  233. public MtCart setHangNo(Integer cartId, String hangNo, String isVisitor) {
  234. MtCart mtCart = mtCartMapper.selectById(cartId);
  235. if (mtCart != null) {
  236. mtCart.setHangNo(hangNo);
  237. mtCart.setUpdateTime(new Date());
  238. mtCart.setIsVisitor(isVisitor);
  239. this.updateById(mtCart);
  240. }
  241. return mtCart;
  242. }
  243. }