diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/controller/ProductController.java b/src/main/java/com/chaozhanggui/system/cashierservice/controller/ProductController.java index 3602a64..8392851 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/controller/ProductController.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/controller/ProductController.java @@ -3,11 +3,11 @@ package com.chaozhanggui.system.cashierservice.controller; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; +import com.chaozhanggui.system.cashierservice.service.CartService; import com.chaozhanggui.system.cashierservice.service.ProductService; +import com.chaozhanggui.system.cashierservice.sign.CodeEnum; import com.chaozhanggui.system.cashierservice.sign.Result; -import com.chaozhanggui.system.cashierservice.util.TokenUtil; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -22,6 +22,8 @@ public class ProductController { @Autowired private ProductService productService; + @Autowired + private CartService cartService; /** * 通过桌码获取shopId @@ -29,12 +31,15 @@ public class ProductController { * @param code * @return shopid */ - @RequestMapping("queryShopIdByTableCode") + @RequestMapping("queryShop") public Result queryShopIdByTableCode( @RequestHeader("openId") String openId, @RequestHeader("id") String userId, - @RequestParam("code") String code) { - return productService.queryShopIdByTableCode(userId, openId, code); + @RequestParam String lat, + @RequestParam String lng, + @RequestParam("code") String code + ) { + return productService.queryShopIdByTableCode(userId, openId, code,lat,lng); } /** @@ -46,24 +51,39 @@ public class ProductController { @RequestMapping("queryProduct") public Result queryProduct(@RequestBody Map map) { - if (ObjectUtil.isEmpty(map) || map.size() <= 0 || !map.containsKey("code")) { + if (ObjectUtil.isEmpty(map) || map.size() <= 0 || !map.containsKey("shopId")) { return Result.fail("参数错误"); } return productService.queryProduct( - map.get("code").toString(), + map.get("shopId").toString(), (map.containsKey("productGroupId") && ObjectUtil.isNotEmpty(map.get("productGroupId"))) ? map.get("productGroupId").toString() : ""); } @GetMapping("queryProductSku") public Result queryProductSku( + @RequestParam(value = "code", required = false) String code, @RequestParam("shopId") String shopId, @RequestParam("productId") String productId, @RequestParam("spec_tag") String spec_tag ) { - return productService.queryProductSku(shopId, productId, spec_tag); + return productService.queryProductSku(code,shopId, productId, spec_tag); } + @PostMapping("addCart") + public Result addCart(@RequestBody JSONObject jsonObject) { + log.info("添加购物车数据:{}", jsonObject); + return cartService.createCart(jsonObject); + } + + @PostMapping("cleanCart") + public Result cleanCart(@RequestBody JSONObject jsonObject) { + log.info("清空购物车数据:{}", jsonObject); + cartService.clearCart(jsonObject); + return Result.success(CodeEnum.SUCCESS); + } + + /** * 团购商品详情/商品类型为 套餐商品 */ diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbProductMapper.java b/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbProductMapper.java index 491fdce..3968f0d 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbProductMapper.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbProductMapper.java @@ -20,9 +20,13 @@ public interface TbProductMapper { List selectByIdIn(@Param("ids") String ids); List selectByIdInAndCheck(@Param("ids") String ids); + List selectHot(@Param("shopId") String shopId); + + List selectIsSpecialty(@Param("shopId") Integer shopId); List selectByIds(@Param("list") List ids); Integer selectByQcode(@Param("code") String code,@Param("productId") Integer productId,@Param("shopId") String shopId); + Integer selectByCodeAndSkuId(@Param("code") String code,@Param("skuId") Integer skuId,@Param("shopId") String shopId); Integer selectByNewQcode(@Param("code") String code,@Param("productId") Integer productId,@Param("shopId") String shopId,@Param("list") List list); List selGroups(@Param("proName") String proName,@Param("type") String type, diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbProductSkuWithBLOBs.java b/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbProductSkuWithBLOBs.java index f2af49c..ee7e414 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbProductSkuWithBLOBs.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbProductSkuWithBLOBs.java @@ -7,8 +7,18 @@ public class TbProductSkuWithBLOBs extends TbProductSku implements Serializable private String specSnap; + private Integer number; + private static final long serialVersionUID = 1L; + public Integer getNumber() { + return number; + } + + public void setNumber(Integer number) { + this.number = number; + } + public String getSpecInfo() { return specInfo; } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/rabbit/CartConsumer.java b/src/main/java/com/chaozhanggui/system/cashierservice/rabbit/CartConsumer.java index fc41fcd..c3c1d16 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/rabbit/CartConsumer.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/rabbit/CartConsumer.java @@ -36,12 +36,14 @@ public class CartConsumer { String shopId = jsonObject.getString("shopId"); if (jsonObject.getString("type").equals("initCart") ) { cartService.initCart(jsonObject); - }else if (jsonObject.getString("type").equals("addcart") ) { - if (!jsonObject.containsKey("num")) { - throw new MsgException("商品数量错误"); - } - cartService.createCart(jsonObject); - }else if (jsonObject.getString("type").equals("queryCart") ) { + } +// else if (jsonObject.getString("type").equals("addcart") ) { +// if (!jsonObject.containsKey("num")) { +// throw new MsgException("商品数量错误"); +// } +// cartService.createCart(jsonObject); +// } + else if (jsonObject.getString("type").equals("queryCart") ) { cartService.queryCart(jsonObject); } else if(jsonObject.getString("type").equals("createOrder")){ String cartDetail = redisUtil.getMessage(RedisCst.TABLE_CART.concat(tableId).concat("-").concat(shopId)); @@ -54,9 +56,9 @@ public class CartConsumer { cartService.createOrder(jsonObject); } } - else if(jsonObject.getString("type").equals("clearCart")){ - cartService.clearCart(jsonObject); - } +// else if(jsonObject.getString("type").equals("clearCart")){ +// cartService.clearCart(jsonObject); +// } } catch (Exception e) { log.info("数据处理失败:{}",e.getMessage()); e.printStackTrace(); diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/CartService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/CartService.java index 54f1cea..a967298 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/CartService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/CartService.java @@ -11,6 +11,8 @@ import com.chaozhanggui.system.cashierservice.netty.PushToAppChannelHandlerAdapt import com.chaozhanggui.system.cashierservice.rabbit.RabbitProducer; import com.chaozhanggui.system.cashierservice.redis.RedisCst; import com.chaozhanggui.system.cashierservice.redis.RedisUtil; +import com.chaozhanggui.system.cashierservice.sign.CodeEnum; +import com.chaozhanggui.system.cashierservice.sign.Result; import com.chaozhanggui.system.cashierservice.util.DateUtils; import com.chaozhanggui.system.cashierservice.util.JSONUtil; import com.chaozhanggui.system.cashierservice.util.LockUtils; @@ -130,300 +132,150 @@ public class CartService { * 加入购物车 * @param jsonObject 商品信息 */ - // @Transactional(rollbackFor = Exception.class) -// public void createCart(JSONObject jsonObject) { -// try { -// String tableId = jsonObject.getString("tableId"); -// String shopId = jsonObject.getString("shopId"); -// String productId = jsonObject.getString("productId"); -// -// String key = tableId + "-" + shopId; -// TbProduct tbProduct = productMapper.selectById(Integer.valueOf(productId)); -// if (tbProduct == null) { -// JSONObject jsonObject1 = new JSONObject(); -// jsonObject1.put("status", "fail"); -// jsonObject1.put("msg", "该商品不存在"); -// jsonObject1.put("data", new ArrayList<>()); -// PushToAppChannelHandlerAdapter.getInstance().AppSendInfo(jsonObject1.toString(), key, jsonObject.getString("userId"), true); -// log.error("该商品不存在 productId:{}", productId); -// throw new MsgException("该商品不存在"); -// } -// -// String skuId = jsonObject.getString("skuId"); -// JSONArray jsonArray = new JSONArray(); -// BigDecimal amount = BigDecimal.ZERO; -// TbProductSkuWithBLOBs tbProductSkuWithBLOBs = productSkuMapper.selectByPrimaryKey(Integer.valueOf(skuId)); -// -// -// -// -// JSONObject objectMsg=new JSONObject(); -// objectMsg.put("skuId",tbProductSkuWithBLOBs.getId()); -// objectMsg.put("shopId",Integer.valueOf(shopId)); -// -// -// producer.con_msg(objectMsg.toString()); -// -// -// if (Integer.valueOf(tbProduct.getIsPauseSale()).equals(1)) { -// JSONObject jsonObject1 = new JSONObject(); -// jsonObject1.put("status", "fail"); -// jsonObject1.put("msg", "该商品已售罄"); -// jsonObject1.put("data", new ArrayList<>()); -// PushToAppChannelHandlerAdapter.getInstance().AppSendInfo(jsonObject1.toString(), key, jsonObject.getString("userId"), true); -// log.error("该商品已售罄 productId:{}", productId); -// throw new MsgException("该商品已售罄"); -// } -// -// String skuNum; -// -// // 1:共享库存 0:独立库存 -// if (Integer.valueOf(tbProduct.getIsDistribute()).equals(1)) { -// boolean exist = redisUtil.exists(RedisCst.PRODUCT + shopId + ":product" + productId); -// if (!exist) { -// redisUtil.saveMessage(RedisCst.PRODUCT + shopId + ":product" + productId, tbProduct.getStockNumber() + ""); -// } -// skuNum = redisUtil.getMessage(RedisCst.PRODUCT + shopId + ":product" + productId); -// -// if (!skuNum.equals(tbProduct.getStockNumber() + "")) { -// skuNum = tbProduct.getStockNumber() + ""; -// redisUtil.saveMessage(RedisCst.PRODUCT + shopId + ":product" + productId, skuNum); -// } -// } else { -// boolean exist = redisUtil.exists(RedisCst.PRODUCT + shopId + ":" + skuId); -// if (!exist) { -// Double stock = tbProductSkuWithBLOBs.getStockNumber(); -// redisUtil.saveMessage(RedisCst.PRODUCT + shopId + ":" + skuId, Math.round(stock) + ""); -// } -// skuNum = redisUtil.getMessage(RedisCst.PRODUCT + shopId + ":" + skuId); -// -// if (!skuNum.equals(Math.round(tbProductSkuWithBLOBs.getStockNumber()) + "")) { -// skuNum = Math.round(tbProductSkuWithBLOBs.getStockNumber()) + ""; -// redisUtil.saveMessage(RedisCst.PRODUCT + shopId + ":product" + productId, skuNum); -// } -// } -// -// Integer buyNum = jsonObject.getInteger("num"); -// if (tbProduct.getIsStock() == 1) { -// boolean flag = false; -// -// String id = skuId; -// if (Integer.valueOf(tbProduct.getIsDistribute()).equals(1)) { -// if (tbProduct.getStockNumber() < 1 && buyNum > 0) { -// flag = true; -// id = productId; -// } -// } else { -// if (tbProductSkuWithBLOBs.getIsPauseSale().equals(1)) { -// flag = true; -// } else if (Integer.valueOf(skuNum) < 1 && buyNum > 0) { -// flag = true; -// } -// } -// -// if (flag) { -// JSONObject jsonObject1 = new JSONObject(); -// jsonObject1.put("status", "fail"); -// jsonObject1.put("msg", "该商品库存已售罄"); -// jsonObject1.put("data", new ArrayList<>()); -// PushToAppChannelHandlerAdapter.getInstance().AppSendInfo(jsonObject1.toString(), key, jsonObject.getString("userId"), true); -// log.error("该商品库存已售罄 skuId:{}", id); -// throw new MsgException("该商品库存已售罄"); -// } -// } -// -// if (redisUtil.exists(RedisCst.TABLE_CART.concat(jsonObject.getString("tableId").concat("-").concat(shopId)))) { -// JSONArray array = JSON.parseArray(redisUtil.getMessage(RedisCst.TABLE_CART.concat(jsonObject.getString("tableId").concat("-").concat(shopId)))); -// if (Objects.isNull(array) || array.isEmpty()) { -// if (buyNum > 0) { -// TbCashierCart cashierCart = addCart(jsonObject.getString("productId"), skuId, -// jsonObject.getInteger("userId"), buyNum, tableId, shopId); -// jsonArray.add(cashierCart); -// amount = amount.add(new BigDecimal(cashierCart.getNumber()).multiply(cashierCart.getSalePrice().add(cashierCart.getPackFee()))); -// -// updateProductStock(tbProduct, tbProductSkuWithBLOBs, buyNum); -// } -// } else { -// boolean flag = true; -// for (int i = 0; i < array.size(); i++) { -// JSONObject object = array.getJSONObject(i); -// TbCashierCart cashierCart = JSONUtil.parseJSONStr2T(object.toJSONString(), TbCashierCart.class); -// if (cashierCart.getSkuId().equals(skuId)) { -// cashierCart.setTotalNumber(cashierCart.getTotalNumber() + buyNum); -// cashierCart.setNumber(cashierCart.getNumber() + buyNum); -// updateProductStock(tbProduct, tbProductSkuWithBLOBs, buyNum); -// if (cashierCart.getNumber() > 0) { -// cashierCart.setTotalAmount(new BigDecimal(cashierCart.getTotalNumber()).multiply(cashierCart.getSalePrice().add(cashierCart.getPackFee()))); -// cashierCart.setUpdatedAt(Instant.now().toEpochMilli()); -// cashierCartMapper.updateByPrimaryKeySelective(cashierCart); -// } else { -// cashierCartMapper.deleteByPrimaryKey(cashierCart.getId()); -// continue; -// } -// flag = false; -// } -// jsonArray.add(cashierCart); -// amount = amount.add(new BigDecimal(cashierCart.getTotalNumber()).multiply(cashierCart.getSalePrice().add(cashierCart.getPackFee()))); -// } -// if (flag && buyNum > 0) { -// TbCashierCart cashierCart = addCart(jsonObject.getString("productId"), skuId, -// jsonObject.getInteger("userId"), buyNum, tableId, jsonObject.getString("shopId")); -// jsonArray.add(cashierCart); -// amount = amount.add(new BigDecimal(cashierCart.getTotalNumber()).multiply(cashierCart.getSalePrice().add(cashierCart.getPackFee()))); -// updateProductStock(tbProduct, tbProductSkuWithBLOBs, buyNum); -// } -// } -// } else { -// if (buyNum > 0) { -// TbCashierCart cashierCart = addCart(jsonObject.getString("productId"), skuId, -// jsonObject.getInteger("userId"), buyNum, tableId, jsonObject.getString("shopId")); -// jsonArray.add(cashierCart); -// amount = amount.add(new BigDecimal(cashierCart.getTotalNumber()).multiply(cashierCart.getSalePrice().add(cashierCart.getPackFee()))); -// updateProductStock(tbProduct, tbProductSkuWithBLOBs, buyNum); -// } -// } -// redisUtil.saveMessage(RedisCst.TABLE_CART.concat(tableId).concat("-").concat(shopId), jsonArray.toJSONString()); -// JSONObject jsonObject1 = new JSONObject(); -// jsonObject1.put("status", "success"); -// jsonObject1.put("msg", "成功"); -// jsonObject1.put("type", jsonObject.getString("type")); -// jsonObject1.put("data", jsonArray); -// jsonObject1.put("amount", amount); -// PushToAppChannelHandlerAdapter.getInstance().AppSendInfo(jsonObject1.toString(), jsonObject.getString("tableId").concat("-").concat(shopId), "", false); -// } catch (Exception e) { -// log.error("长链接错误 createCart{}", e.getMessage()); -// } -// } - public void createCart(JSONObject jsonObject) { + public Result createCart(JSONObject jsonObject) { try { String tableId = jsonObject.getString("tableId"); String shopId = jsonObject.getString("shopId"); String productId = jsonObject.getString("productId"); + String skuId = jsonObject.getString("skuId"); + Integer type = jsonObject.getInteger("type"); + Integer buyNum = jsonObject.getInteger("num"); + if (StringUtils.isBlank(tableId) || StringUtils.isBlank(shopId) || StringUtils.isBlank(productId) + || StringUtils.isBlank(skuId) || type==null || buyNum == null) { + return Result.fail("参数缺失"); + } String key = tableId + "-" + shopId; TbProduct tbProduct = productMapper.selectById(Integer.valueOf(productId)); if (tbProduct == null) { - JSONObject jsonObject1 = new JSONObject(); - jsonObject1.put("status", "fail"); - jsonObject1.put("msg", "该商品不存在"); - jsonObject1.put("data", new ArrayList<>()); - jsonObject1.put("reqData", jsonObject); - - PushToAppChannelHandlerAdapter.getInstance().AppSendInfo(jsonObject1.toString(), key, jsonObject.getString("userId"), true); log.error("该商品不存在 productId:{}", productId); - throw new MsgException("该商品不存在"); + return Result.fail("该商品不存在"); } - - Integer buyNum = jsonObject.getInteger("num"); - - String skuId = jsonObject.getString("skuId"); // 判断商品是否已下架 TbProductSkuWithBLOBs tbProductSkuWithBLOBs = productSkuMapper.selectByPrimaryKey(Integer.valueOf(skuId)); if (tbProductSkuWithBLOBs ==null || tbProductSkuWithBLOBs.getIsGrounding().equals(0)) { - JSONObject jsonObject1 = new JSONObject(); - jsonObject1.put("status", "fail"); - jsonObject1.put("msg", "此商品已下架"); - jsonObject1.put("data", new ArrayList<>()); - jsonObject1.put("reqData", jsonObject); - - PushToAppChannelHandlerAdapter.getInstance().AppSendInfo(jsonObject1.toString(), key, jsonObject.getString("userId"), true); - log.error("商品已下架 skuId:{}", skuId); - return; + rmCart(jsonObject,skuId,key); + return Result.fail("商品已下架"); } - if (tbProduct.getIsStock() == 1) { // 1:共享库存 0:独立库存 if (Integer.valueOf(tbProduct.getIsDistribute()).equals(1)) { - if (tbProduct.getIsPauseSale() == 1 || tbProduct.getStockNumber() < buyNum ) {//是否售罄 - JSONObject jsonObject1 = new JSONObject(); - jsonObject1.put("status", "fail"); - jsonObject1.put("msg", "该商品已售罄"); - jsonObject1.put("data", new ArrayList<>()); - jsonObject1.put("reqData", jsonObject); - - PushToAppChannelHandlerAdapter.getInstance().AppSendInfo(jsonObject1.toString(), key, jsonObject.getString("userId"), true); - log.error("该商品已售罄 productId:{}", productId); - throw new MsgException("该商品已售罄"); + if (tbProduct.getIsPauseSale() == 1) {//是否售罄 + rmCart(jsonObject,skuId,key); + return Result.fail("该商品已售罄"); } } else { - if (tbProductSkuWithBLOBs.getIsPauseSale() == 1 || tbProductSkuWithBLOBs.getStockNumber() < buyNum ) {//是否售罄 - JSONObject jsonObject1 = new JSONObject(); - jsonObject1.put("status", "fail"); - jsonObject1.put("msg", "该商品已售罄"); - jsonObject1.put("data", new ArrayList<>()); - jsonObject1.put("reqData", jsonObject); - - PushToAppChannelHandlerAdapter.getInstance().AppSendInfo(jsonObject1.toString(), key, jsonObject.getString("userId"), true); - log.error("该商品已售罄 productId:{}", productId); - throw new MsgException("该商品已售罄"); + if (tbProductSkuWithBLOBs.getIsPauseSale() == 1) {//是否售罄 + rmCart(jsonObject,skuId,key); + return Result.fail("该商品已售罄"); } } } JSONArray jsonArray = new JSONArray(); BigDecimal amount = BigDecimal.ZERO; - - if (redisUtil.exists(RedisCst.TABLE_CART.concat(jsonObject.getString("tableId").concat("-").concat(shopId)))) { - JSONArray array = JSON.parseArray(redisUtil.getMessage(RedisCst.TABLE_CART.concat(jsonObject.getString("tableId").concat("-").concat(shopId)))); - if (Objects.isNull(array) || array.isEmpty()) { - if (buyNum > 0) { - TbCashierCart cashierCart = addCart(jsonObject.getString("productId"), skuId, - jsonObject.getInteger("userId"), buyNum, tableId, shopId); - jsonArray.add(cashierCart); - amount = amount.add(new BigDecimal(cashierCart.getNumber()).multiply(cashierCart.getSalePrice().add(cashierCart.getPackFee()))); + try{ + if (redisUtil.exists(RedisCst.TABLE_CART.concat(key))) { + JSONArray array = JSON.parseArray(redisUtil.getMessage(RedisCst.TABLE_CART.concat(key))); + if (Objects.isNull(array) || array.isEmpty()) { + if (type == 1) { + TbCashierCart cashierCart = addCart(productId, skuId, + jsonObject.getInteger("userId"), buyNum, tableId, shopId); + jsonArray.add(cashierCart); + amount = amount.add(new BigDecimal(cashierCart.getNumber()).multiply(cashierCart.getSalePrice().add(cashierCart.getPackFee()))); + } + } else { + boolean flag = true; + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + TbCashierCart cashierCart = JSONUtil.parseJSONStr2T(object.toJSONString(), TbCashierCart.class); + if (cashierCart.getSkuId().equals(skuId)) { + cashierCart.setTotalNumber(buyNum); + cashierCart.setNumber(buyNum); + if (type == 0 && tbProductSkuWithBLOBs.getSuit() != null && tbProductSkuWithBLOBs.getSuit() > 1 && cashierCart.getNumber() < tbProductSkuWithBLOBs.getSuit()) { + cashierCartMapper.deleteByPrimaryKey(cashierCart.getId()); + continue; + } + if (cashierCart.getNumber() > 0) { + cashierCart.setTotalAmount(new BigDecimal(cashierCart.getTotalNumber()).multiply(cashierCart.getSalePrice().add(cashierCart.getPackFee()))); + cashierCart.setUpdatedAt(Instant.now().toEpochMilli()); + cashierCartMapper.updateByPrimaryKeySelective(cashierCart); + } else { + cashierCartMapper.deleteByPrimaryKey(cashierCart.getId()); + continue; + } + flag = false; + } + jsonArray.add(cashierCart); + amount = amount.add(new BigDecimal(cashierCart.getTotalNumber()).multiply(cashierCart.getSalePrice().add(cashierCart.getPackFee()))); + } + if (flag && type == 1) { + TbCashierCart cashierCart = addCart(productId, skuId, + jsonObject.getInteger("userId"), buyNum, tableId, shopId); + jsonArray.add(cashierCart); + amount = amount.add(new BigDecimal(cashierCart.getTotalNumber()).multiply(cashierCart.getSalePrice().add(cashierCart.getPackFee()))); + } } } else { - boolean flag = true; - for (int i = 0; i < array.size(); i++) { - JSONObject object = array.getJSONObject(i); - TbCashierCart cashierCart = JSONUtil.parseJSONStr2T(object.toJSONString(), TbCashierCart.class); - if (cashierCart.getSkuId().equals(skuId)) { - cashierCart.setTotalNumber(cashierCart.getTotalNumber() + buyNum); - cashierCart.setNumber(cashierCart.getNumber() + buyNum); - if (buyNum < 0 && tbProductSkuWithBLOBs.getSuit() != null && tbProductSkuWithBLOBs.getSuit() > 1 && cashierCart.getNumber() < tbProductSkuWithBLOBs.getSuit()) { - cashierCartMapper.deleteByPrimaryKey(cashierCart.getId()); - continue; - } - if (cashierCart.getNumber() > 0) { - cashierCart.setTotalAmount(new BigDecimal(cashierCart.getTotalNumber()).multiply(cashierCart.getSalePrice().add(cashierCart.getPackFee()))); - cashierCart.setUpdatedAt(Instant.now().toEpochMilli()); - cashierCartMapper.updateByPrimaryKeySelective(cashierCart); - } else { - cashierCartMapper.deleteByPrimaryKey(cashierCart.getId()); - continue; - } - flag = false; - } - jsonArray.add(cashierCart); - amount = amount.add(new BigDecimal(cashierCart.getTotalNumber()).multiply(cashierCart.getSalePrice().add(cashierCart.getPackFee()))); - } - if (flag && buyNum > 0) { - TbCashierCart cashierCart = addCart(jsonObject.getString("productId"), skuId, - jsonObject.getInteger("userId"), buyNum, tableId, jsonObject.getString("shopId")); + if (type == 1) { + TbCashierCart cashierCart = addCart(productId, skuId, + jsonObject.getInteger("userId"), buyNum, tableId, shopId); jsonArray.add(cashierCart); amount = amount.add(new BigDecimal(cashierCart.getTotalNumber()).multiply(cashierCart.getSalePrice().add(cashierCart.getPackFee()))); } } - } else { - if (buyNum > 0) { - TbCashierCart cashierCart = addCart(jsonObject.getString("productId"), skuId, - jsonObject.getInteger("userId"), buyNum, tableId, jsonObject.getString("shopId")); - jsonArray.add(cashierCart); - amount = amount.add(new BigDecimal(cashierCart.getTotalNumber()).multiply(cashierCart.getSalePrice().add(cashierCart.getPackFee()))); + }catch (MsgException e){ + if(e.getMessage().equals("商品起售库存不足")){ + return Result.fail("商品起售库存不足"); } } - redisUtil.saveMessage(RedisCst.TABLE_CART.concat(tableId).concat("-").concat(shopId), jsonArray.toJSONString()); + redisUtil.saveMessage(RedisCst.TABLE_CART.concat(key), jsonArray.toJSONString()); JSONObject jsonObject1 = new JSONObject(); jsonObject1.put("status", "success"); jsonObject1.put("msg", "成功"); - jsonObject1.put("type", jsonObject.getString("type")); + jsonObject1.put("type", "addcart"); jsonObject1.put("data", jsonArray); jsonObject1.put("amount", amount); jsonObject1.put("reqData", jsonObject); - - PushToAppChannelHandlerAdapter.getInstance().AppSendInfo(jsonObject1.toString(), jsonObject.getString("tableId").concat("-").concat(shopId), "", false); + PushToAppChannelHandlerAdapter.getInstance().AppSendInfo(jsonObject1.toString(), key, "", false); } catch (Exception e) { log.error("长链接错误 createCart{}", e.getMessage()); } + return Result.success(CodeEnum.SUCCESS); } + + private void rmCart(JSONObject jsonObject,String skuId, String key) { + JSONArray jsonArray = new JSONArray(); + BigDecimal amount = BigDecimal.ZERO; + if (redisUtil.exists(RedisCst.TABLE_CART.concat(key))) { + JSONArray array = JSON.parseArray(redisUtil.getMessage(RedisCst.TABLE_CART.concat(key))); + if (!Objects.isNull(array) && !array.isEmpty()) { + boolean flag = false; + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + TbCashierCart cashierCart = JSONUtil.parseJSONStr2T(object.toJSONString(), TbCashierCart.class); + if (cashierCart.getSkuId().equals(skuId)) { + cashierCartMapper.deleteByPrimaryKey(cashierCart.getId()); + flag = true; + continue; + } + jsonArray.add(cashierCart); + amount = amount.add(new BigDecimal(cashierCart.getTotalNumber()).multiply(cashierCart.getSalePrice().add(cashierCart.getPackFee()))); + } + redisUtil.saveMessage(RedisCst.TABLE_CART.concat(key), jsonArray.toJSONString()); + JSONObject jsonObject1 = new JSONObject(); + jsonObject1.put("status", "success"); + jsonObject1.put("msg", "成功"); + jsonObject1.put("type", "addcart"); + jsonObject1.put("data", jsonArray); + jsonObject1.put("amount", amount); + jsonObject1.put("reqData", jsonObject); + if(flag){ + PushToAppChannelHandlerAdapter.getInstance().AppSendInfo(jsonObject1.toString(), key, "", false); + } + } + } + } + + /** * 修改库存并根据警告线发送消息 * @@ -500,51 +352,40 @@ public class CartService { } } - private TbCashierCart addCart(String productId, String skuId, Integer userId, Integer num, String tableId, String shopId) throws RuntimeException { + private TbCashierCart addCart(String productId, String skuId, Integer userId, Integer num, String tableId, String shopId) throws Exception{ try { TbProduct product = productMapper.selectById(Integer.valueOf(productId)); String key = tableId + "-" + shopId; - if (Objects.isNull(product)) { - JSONObject jsonObject1 = new JSONObject(); - jsonObject1.put("status", "fail"); - jsonObject1.put("msg", "该商品不存在"); - jsonObject1.put("data", new ArrayList<>()); - PushToAppChannelHandlerAdapter.getInstance().AppSendInfo(jsonObject1.toString(), key, userId.toString(), true); - log.error("购物车添加商品异常,该商品不存在:{}", productId); - throw new MsgException("该商品不存在"); - } TbProductSkuWithBLOBs productSku = productSkuMapper.selectByPrimaryKey(Integer.valueOf(skuId)); - if (Objects.isNull(productSku)) { - JSONObject jsonObject1 = new JSONObject(); - jsonObject1.put("status", "fail"); - jsonObject1.put("msg", "该商品规格不存在"); - jsonObject1.put("data", new ArrayList<>()); - PushToAppChannelHandlerAdapter.getInstance().AppSendInfo(jsonObject1.toString(), key, userId.toString(), true); - log.error("购物车添加商品异常,该商品sku不存在:{}", productId); - throw new MsgException("该商品规格不存在"); - } TbCashierCart cashierCart = new TbCashierCart(); if (productSku.getSuit() != null && productSku.getSuit() > 1) { if (product.getIsStock() == 1) { boolean isSale = false; // 1:共享库存 0:独立库存 if (Integer.valueOf(product.getIsDistribute()).equals(1)) { - if (productSku.getSuit() > product.getStockNumber()) isSale = true; + if (num > productSku.getSuit()) { + if (num > product.getStockNumber()) isSale = true; + }else { + if (productSku.getSuit() > product.getStockNumber()) isSale = true; + } } else { - if (productSku.getSuit() > productSku.getStockNumber()) isSale = true; + if (num > productSku.getSuit()) { + if (num > productSku.getStockNumber()) isSale = true; + }else { + if (productSku.getSuit() > productSku.getStockNumber()) isSale = true; + } } if (isSale) { - JSONObject jsonObject1 = new JSONObject(); - jsonObject1.put("status", "fail"); - jsonObject1.put("msg", "该商品库存不足"); - jsonObject1.put("data", new ArrayList<>()); - PushToAppChannelHandlerAdapter.getInstance().AppSendInfo(jsonObject1.toString(), key, userId.toString(), true); - log.error("购物车添加商品异常,该商品起售库存不足:{}", productId); - throw new MsgException("该商品起售库存不足"); + throw new MsgException("商品起售库存不足"); } } - cashierCart.setNumber(productSku.getSuit()); - cashierCart.setTotalNumber(productSku.getSuit()); + if(num > productSku.getSuit()){ + cashierCart.setNumber(num); + cashierCart.setTotalNumber(num); + }else { + cashierCart.setNumber(productSku.getSuit()); + cashierCart.setTotalNumber(productSku.getSuit()); + } } else { cashierCart.setNumber(num); cashierCart.setTotalNumber(num); @@ -592,8 +433,7 @@ public class CartService { String tableId = jsonObject.getString("tableId"); String remark = StringUtils.isBlank(jsonObject.getString("remark"))?"":jsonObject.getString("remark"); String key = tableId + "-" + shopId; - JSONArray array = JSON.parseArray(redisUtil.getMessage(RedisCst.TABLE_CART.concat(jsonObject.getString("tableId").concat("-").concat(shopId)))); - List ids = new ArrayList<>(); + JSONArray array = JSON.parseArray(redisUtil.getMessage(RedisCst.TABLE_CART.concat(key))); BigDecimal totalAmount = BigDecimal.ZERO; BigDecimal packAMount = BigDecimal.ZERO; BigDecimal originAmount = BigDecimal.ZERO; @@ -602,7 +442,7 @@ public class CartService { BigDecimal couponAmount = BigDecimal.ZERO; List orderDetails = new ArrayList<>(); Integer orderId = 0; - TbMerchantAccount tbMerchantAccount = merchantAccountMapper.selectByShopId(jsonObject.getString("shopId")); + TbMerchantAccount tbMerchantAccount = merchantAccountMapper.selectByShopId(shopId); if (tbMerchantAccount == null) { MsgException.throwException("生成订单错误"); } @@ -643,7 +483,7 @@ public class CartService { } catch (Exception e) { JSONObject jsonObject1 = new JSONObject(); jsonObject1.put("status", "fail"); - jsonObject1.put("msg", "商品库存不足" + tbProduct1.getName()); + jsonObject1.put("msg", tbProduct1.getName() + "库存不足"); jsonObject1.put("data", new ArrayList<>()); PushToAppChannelHandlerAdapter.getInstance().AppSendInfo(jsonObject1.toString(), key, jsonObject.getString("userId"), true); return; @@ -949,7 +789,7 @@ public class CartService { JSONObject jsonObject1 = new JSONObject(); jsonObject1.put("status", "success"); jsonObject1.put("msg", "成功"); - jsonObject1.put("type", "clearCart"); + jsonObject1.put("type", "addcart"); jsonObject1.put("amount", BigDecimal.ZERO); jsonObject1.put("data", new ArrayList<>()); // //修改耗材数据 diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/ProductService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/ProductService.java index fb14ee6..0b08f50 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/ProductService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/ProductService.java @@ -16,6 +16,7 @@ import com.chaozhanggui.system.cashierservice.sign.Result; import com.chaozhanggui.system.cashierservice.util.*; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import com.google.common.util.concurrent.AtomicDouble; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -68,13 +69,25 @@ public class ProductService { @Autowired private TbUserInfoMapper tbUserInfoMapper; - public Result queryShopIdByTableCode(String userId,String openId,String code) { - String shopId = tbShopTableMapper.queryShopIdByTableCode(code); - if (StringUtils.isBlank(shopId)) { + public Result queryShopIdByTableCode(String userId,String openId,String code,String lat,String lng) { + if(StringUtils.isBlank(code)) return Result.fail("桌码信息为空"); + if (StringUtils.isBlank(lat) || lat.equals("undefined")) { + lat = "34.343207"; + lng = "108.939645"; + } + TbShopTable tbShopTable = tbShopTableMapper.selectQRcode(code); + if (tbShopTable == null) { return Result.fail("台桌信息不存在"); } - - TbShopUser shopUser = tbShopUserMapper.selectByUserIdAndShopId(userId, shopId); + TbShopInfo shopInfo = tbShopInfoMapper.selectByPrimaryKey(tbShopTable.getShopId()); + String distance = LocationUtils.getDistanceString( + Double.parseDouble(lng), Double.parseDouble(lat), + Double.parseDouble(shopInfo.getLng()), Double.parseDouble(shopInfo.getLat())); + ConcurrentMap concurrentMap = new ConcurrentHashMap<>(); + concurrentMap.put("shopTableInfo", tbShopTable); + concurrentMap.put("storeInfo", shopInfo); + concurrentMap.put("distance", distance); + TbShopUser shopUser = tbShopUserMapper.selectByUserIdAndShopId(userId, tbShopTable.getShopId().toString()); try{ if (ObjectUtil.isEmpty(shopUser)) { TbUserInfo tbUserInfo = tbUserInfoMapper.selectByPrimaryKey(Integer.valueOf(userId)); @@ -95,7 +108,7 @@ public class ProductService { shopUser.setConsumeNumber(0); shopUser.setLevelConsume(BigDecimal.ZERO); shopUser.setStatus(Byte.parseByte("1")); - shopUser.setShopId(shopId); + shopUser.setShopId(tbShopTable.getShopId().toString()); shopUser.setUserId(userId); shopUser.setMiniOpenId(openId); shopUser.setCreatedAt(System.currentTimeMillis()); @@ -114,27 +127,141 @@ public class ProductService { log.info("通过桌码获取shopId 进行用户绑定错误:{}",e.getMessage()); e.printStackTrace(); } - return Result.success(CodeEnum.SUCCESS, shopId); + return Result.success(CodeEnum.SUCCESS, concurrentMap); } - public Result queryProduct(String code, String productGroupId) { - + public Result queryProduct(String shopId, String productGroupId) { ConcurrentMap concurrentMap = new ConcurrentHashMap<>(); - - TbShopTable tbShopTable = tbShopTableMapper.selectQRcode(code); - if (ObjectUtil.isEmpty(tbShopTable) || ObjectUtil.isNull(tbShopTable)) { - return Result.fail("台桌信息不存在"); - } - - Integer id = ObjectUtil.isNotEmpty(productGroupId) ? Integer.valueOf(productGroupId) : null; - List groupList = tbProductGroupMapper.selectByQrcode(code, id); - if (ObjectUtil.isNotEmpty(groupList) && groupList.size() > 0) { + //招牌菜 + List tbProducts = tbProductMapper.selectIsSpecialty(Integer.valueOf(shopId)); + if (ObjectUtil.isNotEmpty(tbProducts) && tbProducts.size() > 0) { + tbProducts.parallelStream().forEach(it -> { + TbShopUnit tbShopUnit = unitMapper.selectByPrimaryKey(Integer.valueOf(it.getUnitId())); + it.setUnitSnap(tbShopUnit!=null?tbShopUnit.getName():""); + it.setCartNumber("0"); + List tbProductSkus = tbProductSkuMapper.selectGroundingByProId(it.getId()); + TbProductSkuResult skuResult = tbProductSkuResultMapper.selectByPrimaryKey(it.getId()); - TbProductGroup group = groupList.get(0); - TbShopInfo shopInfo = tbShopInfoMapper.selectByPrimaryKey(group.getShopId()); - concurrentMap.put("shopTableInfo", tbShopTable); - concurrentMap.put("storeInfo", shopInfo); + // 上下架对应的sku + HashSet specSet = new HashSet<>(); + AtomicDouble sum = new AtomicDouble(0.0); + BigDecimal lowerPrice = null; + for (TbProductSku item : tbProductSkus) { + sum.addAndGet(item.getStockNumber()); + if (lowerPrice == null || lowerPrice.compareTo(item.getSalePrice()) > 0) { + lowerPrice = item.getSalePrice(); + } + + String specSnap = item.getSpecSnap(); + if (specSnap != null) { + specSet.addAll(Arrays.asList(specSnap.split(","))); + } + } + it.setStockNumber(sum.intValue()); + if (lowerPrice == null) { + lowerPrice = BigDecimal.ZERO; + } + it.setLowPrice(lowerPrice); + String tagSnap = skuResult != null ? skuResult.getTagSnap() : null; + if (tagSnap != null) { + JSONArray tagSnaps = JSONObject.parseArray(tagSnap); + JSONObject snapJSON; + JSONArray finalSnap = new JSONArray(); + for (Object snap : tagSnaps) { + snapJSON = (JSONObject) snap; + String values = snapJSON.getString("value"); + String finalValues = ""; + if (StrUtil.isNotBlank(values)) { + String[] valueList = values.split(","); + for (String value : valueList) { + if (specSet.contains(value)) { + finalValues = finalValues + (value) + ","; + } + } + if (StrUtil.isNotBlank(finalValues)) { + finalValues = StrUtil.removeSuffix(finalValues, ","); + snapJSON.put("value", finalValues); + finalSnap.add(snapJSON); + } + } + } + skuResult.setTagSnap(finalSnap.toJSONString()); + } + it.setProductSkuResult(skuResult); + }); + } + concurrentMap.put("hots", tbProducts); + List groupList = tbProductGroupMapper.selectByShopId(shopId, id); + if (ObjectUtil.isNotEmpty(groupList) && groupList.size() > 0) { + //热销 + TbProductGroup hot =new TbProductGroup(); + hot.setName("热销"); + List hots = tbProductMapper.selectHot(shopId); + hots.parallelStream().forEach(it -> { + TbShopUnit tbShopUnit = unitMapper.selectByPrimaryKey(Integer.valueOf(it.getUnitId())); + it.setUnitSnap(tbShopUnit!=null?tbShopUnit.getName():""); + it.setCartNumber("0"); + List tbProductSkus = tbProductSkuMapper.selectGroundingByProId(it.getId()); + TbProductSkuResult skuResult = tbProductSkuResultMapper.selectByPrimaryKey(it.getId()); + + // 上下架对应的sku + HashSet specSet = new HashSet<>(); + AtomicDouble sum = new AtomicDouble(0.0); + BigDecimal lowerPrice = null; + for (TbProductSku item : tbProductSkus) { + sum.addAndGet(item.getStockNumber()); + if (lowerPrice == null || lowerPrice.compareTo(item.getSalePrice()) > 0) { + lowerPrice = item.getSalePrice(); + } + + String specSnap = item.getSpecSnap(); + if (specSnap != null) { + specSet.addAll(Arrays.asList(specSnap.split(","))); + } + } + it.setStockNumber(sum.intValue()); + if (lowerPrice == null) { + lowerPrice = BigDecimal.ZERO; + } + it.setLowPrice(lowerPrice); + String tagSnap = skuResult != null ? skuResult.getTagSnap() : null; + if (tagSnap != null) { + JSONArray tagSnaps = JSONObject.parseArray(tagSnap); + JSONObject snapJSON; + + JSONArray finalSnap = new JSONArray(); + + for (Object snap : tagSnaps) { + snapJSON = (JSONObject) snap; + String values = snapJSON.getString("value"); + String finalValues = ""; + + if (StrUtil.isNotBlank(values)) { + String[] valueList = values.split(","); + for (String value : valueList) { + if (specSet.contains(value)) { + finalValues = finalValues + (value) + ","; + } + } + + if (StrUtil.isNotBlank(finalValues)) { + finalValues = StrUtil.removeSuffix(finalValues, ","); + snapJSON.put("value", finalValues); + finalSnap.add(snapJSON); + } + + } + } + + skuResult.setTagSnap(finalSnap.toJSONString()); + } + + it.setProductSkuResult(skuResult); + }); + hot.setProducts(hots); + + //商品 groupList.parallelStream().forEach(g -> { String in = g.getProductIds().substring(1, g.getProductIds().length() - 1); @@ -144,16 +271,18 @@ public class ProductService { List products = tbProductMapper.selectByIdInAndCheck(in); if (ObjectUtil.isNotEmpty(products) && products.size() > 0) { products.parallelStream().forEach(it -> { - Integer sum = tbProductMapper.selectByQcode(code, it.getId(), it.getShopId()); - it.setCartNumber(sum == null ? "0" : String.valueOf(sum)); + TbShopUnit tbShopUnit = unitMapper.selectByPrimaryKey(Integer.valueOf(it.getUnitId())); + it.setUnitSnap(tbShopUnit!=null?tbShopUnit.getName():""); + it.setCartNumber("0"); List tbProductSkus = tbProductSkuMapper.selectGroundingByProId(it.getId()); TbProductSkuResult skuResult = tbProductSkuResultMapper.selectByPrimaryKey(it.getId()); // 上下架对应的sku HashSet specSet = new HashSet<>(); - + AtomicDouble sum = new AtomicDouble(0.0); BigDecimal lowerPrice = null; for (TbProductSku item : tbProductSkus) { + sum.addAndGet(item.getStockNumber()); if (lowerPrice == null || lowerPrice.compareTo(item.getSalePrice()) > 0) { lowerPrice = item.getSalePrice(); } @@ -163,13 +292,11 @@ public class ProductService { specSet.addAll(Arrays.asList(specSnap.split(","))); } } - + it.setStockNumber(sum.intValue()); if (lowerPrice == null) { lowerPrice = BigDecimal.ZERO; } - it.setLowPrice(lowerPrice); - String tagSnap = skuResult != null ? skuResult.getTagSnap() : null; if (tagSnap != null) { JSONArray tagSnaps = JSONObject.parseArray(tagSnap); @@ -221,12 +348,16 @@ public class ProductService { } - public Result queryProductSku(String shopId, String productId, String spec_tag) { + public Result queryProductSku(String code,String shopId, String productId, String spec_tag) { if (ObjectUtil.isEmpty(shopId) || ObjectUtil.isEmpty(productId)) { return Result.fail("参数错误"); } TbProductSkuWithBLOBs tbProductSkuWithBLOBs = tbProductSkuMapper.selectByShopIdAndProductIdAndSpec(shopId, productId, spec_tag); + if(StringUtils.isNotBlank(code)) { + Integer sum = tbProductMapper.selectByCodeAndSkuId(code, tbProductSkuWithBLOBs.getId(), shopId); + tbProductSkuWithBLOBs.setNumber(sum); + } return Result.success(CodeEnum.SUCCESS, tbProductSkuWithBLOBs); } diff --git a/src/main/resources/mapper/TbProductGroupMapper.xml b/src/main/resources/mapper/TbProductGroupMapper.xml index a9bb7b2..5082065 100644 --- a/src/main/resources/mapper/TbProductGroupMapper.xml +++ b/src/main/resources/mapper/TbProductGroupMapper.xml @@ -229,9 +229,9 @@ FROM tb_product_group where shop_id=#{shopId} and is_show=1 - + and id = #{groupId} - order by g.sort asc + order by sort asc \ No newline at end of file diff --git a/src/main/resources/mapper/TbProductMapper.xml b/src/main/resources/mapper/TbProductMapper.xml index f37e11e..ae3ff8f 100644 --- a/src/main/resources/mapper/TbProductMapper.xml +++ b/src/main/resources/mapper/TbProductMapper.xml @@ -932,11 +932,45 @@ select min( sku.suit ) as suit,tb.* from tb_product tb LEFT JOIN tb_product_sku sku ON tb.id = sku.product_id - where tb.id in (${ids}) and is_show_mall =1 and sku.is_del = 0 and sku.is_grounding=1 + where tb.id in (${ids}) and is_show_mall =1 and sku.is_del = 0 and sku.is_grounding=1 and tb.status = 1 group by tb.id order by tb.sort asc + + + + + + + @@ -963,6 +997,17 @@ t.shop_id, t.product_id +