diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/controller/OrderController.java b/src/main/java/com/chaozhanggui/system/cashierservice/controller/OrderController.java index 5ba73f7..b43ec8a 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/controller/OrderController.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/controller/OrderController.java @@ -50,10 +50,7 @@ public class OrderController { @RequestParam Integer size, @RequestParam String status){ return orderService.orderList(userId,page,size,status); } - @GetMapping("/testMessage") - private void testMessage(@RequestParam("tableId") String tableId, @RequestParam("message") String message) throws IOException { - orderService.testMessage(tableId,message); - } + @GetMapping("/tradeIntegral") private Result tradeIntegral(@RequestParam("userId") String userId, @RequestParam("id") String id) throws IOException, ParseException { return orderService.tradeIntegral(userId,id); diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbProductSkuMapper.java b/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbProductSkuMapper.java index 61d7b13..32d18e4 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbProductSkuMapper.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbProductSkuMapper.java @@ -15,19 +15,11 @@ import java.util.List; public interface TbProductSkuMapper { int deleteByPrimaryKey(Integer id); - int insert(TbProductSkuWithBLOBs record); - - int insertSelective(TbProductSkuWithBLOBs record); - TbProductSkuWithBLOBs selectByPrimaryKey(Integer id); Integer selectBySpecSnap(@Param("shopId")String shopId,@Param("tableId") Integer tableId,@Param("specSnap") String specSnap); - int updateByPrimaryKeySelective(TbProductSkuWithBLOBs record); List selectSale(); List selectDay(); - int updateByPrimaryKeyWithBLOBs(TbProductSkuWithBLOBs record); - - int updateByPrimaryKey(TbProductSku record); TbProductSkuWithBLOBs selectByShopIdAndProductIdAndSpec(@Param("shopId") String shopId, @Param("productId") String productId, @Param("spec") String spec); diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbProductSku.java b/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbProductSku.java index 791f335..f034ae1 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbProductSku.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbProductSku.java @@ -24,6 +24,8 @@ public class TbProductSku implements Serializable { private BigDecimal guidePrice; + private Integer suit; + private BigDecimal strategyPrice; private Double stockNumber; @@ -47,6 +49,7 @@ public class TbProductSku implements Serializable { private Long updatedAt; private Integer isPauseSale = 0; + private Integer isDel; private static final long serialVersionUID = 1L; @@ -186,6 +189,14 @@ public class TbProductSku implements Serializable { this.realSalesNumber = realSalesNumber; } + public Integer getSuit() { + return suit; + } + + public void setSuit(Integer suit) { + this.suit = suit; + } + public BigDecimal getFirstShared() { return firstShared; } @@ -225,4 +236,12 @@ public class TbProductSku implements Serializable { public void setIsPauseSale(Integer isPauseSale) { this.isPauseSale = isPauseSale; } + + public Integer getIsDel() { + return isDel; + } + + public void setIsDel(Integer isDel) { + this.isDel = isDel; + } } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/netty/PushToClientChannelHandlerAdapter.java b/src/main/java/com/chaozhanggui/system/cashierservice/netty/PushToClientChannelHandlerAdapter.java index f8a7825..cedc930 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/netty/PushToClientChannelHandlerAdapter.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/netty/PushToClientChannelHandlerAdapter.java @@ -160,54 +160,6 @@ public class PushToClientChannelHandlerAdapter extends NettyChannelHandlerAdapte }); } - /** - * @param message 发送的消息内容 - * @param shopId 店铺Id - // * @param clientId 客户端Id - // * @param userFlag 为true 单发给clientId - * 为false 群发 shopId为空 发给所有人 - */ -// @Async -// public void AppSendInfo(String message, String shopId,String clientId, boolean userFlag) { -// log.info("netty连接client 发送消息 shopId:{} clientId:{} userFlag:{} message:{}",shopId,clientId,userFlag, JSONUtil.toJSONString(message)); -// if (userFlag) { -// if (webSocketMap.containsKey(shopId)) { -// ConcurrentHashMap webSockets = webSocketMap.get(shopId); -// if(!webSockets.isEmpty()){ -// if (StringUtils.isNotBlank(clientId)) { -// ChannelHandlerContext ctx = webSockets.get(clientId); -// if (ctx != null) { -// sendMesToApp(message,ctx); -// } -// } -// } -// } -// } else { -// if (StringUtils.isEmpty(shopId)) { -// // 向所有用户发送信息 -// for (ConcurrentHashMap value : webSocketMap.values()) { -// for (ChannelHandlerContext ctx : value.values()) { -// sendMesToApp(message,ctx); -// } -// } -// } else if (webSocketMap.containsKey(shopId)) { -// ConcurrentHashMap webSockets = webSocketMap.get(shopId); -// if((!webSockets.isEmpty() && !webSockets.keySet().isEmpty())) { -// for (String user : webSockets.keySet()) { -// ChannelHandlerContext ctx = webSockets.get(user); -// if (ctx != null) { -// log.info("netty连接client 发送消息 桌码群发 clientId:{}",user); -// sendMesToApp(message,ctx); -// }else { -// log.info("netty连接client 发送消息 桌码群发 clientId:{} 失败",user); -// } -// } -// }else { -// log.info("netty连接client 发送消息 桌码群发 clientId:{} 失败",clientId); -// } -// } -// } -// } public void AppSendInfoV1(String shopId, String orderNo, JSONObject message) { log.info("netty连接client 发送消息 shopId:{} clientId:{} userFlag:{} message:{}", shopId, message.get("orderInfo")); retryQueue.computeIfAbsent(shopId, k -> new ConcurrentLinkedQueue<>()).offer(message); 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 eaea7c0..98b06ae 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/CartService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/CartService.java @@ -288,7 +288,6 @@ public class CartService { // log.error("长链接错误 createCart{}", e.getMessage()); // } // } - public void createCart(JSONObject jsonObject) { try { String tableId = jsonObject.getString("tableId"); @@ -311,10 +310,11 @@ public class CartService { Integer buyNum = jsonObject.getInteger("num"); String skuId = jsonObject.getString("skuId"); + TbProductSkuWithBLOBs tbProductSkuWithBLOBs = productSkuMapper.selectByPrimaryKey(Integer.valueOf(skuId)); if (tbProduct.getIsStock() == 1) { // 1:共享库存 0:独立库存 if (Integer.valueOf(tbProduct.getIsDistribute()).equals(1)) { - if (tbProduct.getIsPauseSale() == 1 || tbProduct.getStockNumber() - buyNum < 0) {//是否售罄 + if (tbProduct.getIsPauseSale() == 1 || tbProduct.getStockNumber() < buyNum ) {//是否售罄 JSONObject jsonObject1 = new JSONObject(); jsonObject1.put("status", "fail"); jsonObject1.put("msg", "该商品已售罄"); @@ -326,8 +326,7 @@ public class CartService { throw new MsgException("该商品已售罄"); } } else { - TbProductSkuWithBLOBs tbProductSkuWithBLOBs = productSkuMapper.selectByPrimaryKey(Integer.valueOf(skuId)); - if(tbProductSkuWithBLOBs.getIsPauseSale() == 1 || tbProductSkuWithBLOBs.getStockNumber() - buyNum < 0){//是否售罄 + if (tbProductSkuWithBLOBs.getIsPauseSale() == 1 || tbProductSkuWithBLOBs.getStockNumber() < buyNum ) {//是否售罄 JSONObject jsonObject1 = new JSONObject(); jsonObject1.put("status", "fail"); jsonObject1.put("msg", "该商品已售罄"); @@ -360,6 +359,10 @@ public class CartService { 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()); @@ -498,9 +501,24 @@ public class CartService { throw new MsgException("该商品规格不存在"); } TbCashierCart cashierCart = new TbCashierCart(); + if (productSku.getSuit() != null && productSku.getSuit() > 1) { + if (productSku.getSuit() > productSku.getStockNumber()) { + JSONObject jsonObject1 = new JSONObject(); + jsonObject1.put("status", "fail"); + jsonObject1.put("msg", "该商品" + productSku.getSuit() + "起售,现库存不足"); + jsonObject1.put("data", new ArrayList<>()); + PushToAppChannelHandlerAdapter.getInstance().AppSendInfo(jsonObject1.toString(), key, userId.toString(), true); + log.error("购物车添加商品异常,该商品起售库存不足:{}", productId); + throw new MsgException("该商品起售库存不足"); + } + cashierCart.setNumber(productSku.getSuit()); + cashierCart.setTotalNumber(productSku.getSuit()); + }else { + cashierCart.setNumber(num); + cashierCart.setTotalNumber(num); + } cashierCart.setProductId(productId); cashierCart.setSkuId(skuId); - cashierCart.setNumber(num); cashierCart.setCoverImg(product.getCoverImg()); cashierCart.setName(product.getName()); cashierCart.setCategoryId(product.getCategoryId()); @@ -515,7 +533,6 @@ public class CartService { cashierCart.setSalePrice(productSku.getSalePrice()); cashierCart.setCreatedAt(Instant.now().toEpochMilli()); cashierCart.setUpdatedAt(Instant.now().toEpochMilli()); - cashierCart.setTotalNumber(num); cashierCart.setPackFee(BigDecimal.ZERO); cashierCart.setRefundNumber(0); cashierCart.setTotalAmount(new BigDecimal(cashierCart.getTotalNumber()).multiply(productSku.getSalePrice().add(cashierCart.getPackFee()))); @@ -577,10 +594,10 @@ public class CartService { try { if (tbProduct1.getIsStock() == 1) { productService.updateStock(tbProduct.getProductId(), tbProduct.getId(), cashierCart.getNumber(), tbProduct1.getIsDistribute() == 1); - }else { + } else { productService.updateStockAndNoCheck(tbProduct.getProductId(), tbProduct.getId(), cashierCart.getNumber(), tbProduct1.getIsDistribute() == 1); } - }catch (Exception e) { + } catch (Exception e) { JSONObject jsonObject1 = new JSONObject(); jsonObject1.put("status", "fail"); jsonObject1.put("msg", "商品库存不足" + tbProduct1.getName()); @@ -590,9 +607,9 @@ public class CartService { } // 发送判断耗材是否耗尽消息 - JSONObject objectMsg=new JSONObject(); - objectMsg.put("skuId",Integer.valueOf(cashierCart.getSkuId())); - objectMsg.put("shopId",Integer.valueOf(cashierCart.getShopId())); + JSONObject objectMsg = new JSONObject(); + objectMsg.put("skuId", Integer.valueOf(cashierCart.getSkuId())); + objectMsg.put("shopId", Integer.valueOf(cashierCart.getShopId())); producer.con_msg(objectMsg.toString()); totalAmount = totalAmount.add(cashierCart.getTotalAmount()); diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/OrderService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/OrderService.java index 50015b5..3455262 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/OrderService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/OrderService.java @@ -248,18 +248,6 @@ public class OrderService { } - public void testMessage(String tableId, String message) throws IOException { -// AppWebSocketServer.AppSendInfo(message,tableId); -// redisUtil.seckill(tableId,message); -// AppWebSocketServer.onClosed(tableId); - List list = productSkuMapper.selectAll(); - for (TbProductSku productSku : list) { -// productSku.setStockNumber(200.00); - redisUtil.saveMessage("PRODUCT:" + productSku.getShopId() + ":" + productSku.getId(), "10000"); - } - - } - @Transactional(rollbackFor = Exception.class) public Result tradeIntegral(String userId, String id) throws ParseException { updateIntegral(userId, id); diff --git a/src/main/resources/mapper/TbProductSkuMapper.xml b/src/main/resources/mapper/TbProductSkuMapper.xml index 62bd462..973a81a 100644 --- a/src/main/resources/mapper/TbProductSkuMapper.xml +++ b/src/main/resources/mapper/TbProductSkuMapper.xml @@ -12,6 +12,7 @@ + @@ -24,6 +25,7 @@ + @@ -31,8 +33,8 @@ id, shop_id, bar_code, product_id, origin_price, cost_price, member_price, meal_price, - sale_price, guide_price, strategy_price, stock_number, cover_img, warn_line, weight, - volume, real_sales_number, first_shared, second_shared, created_at, updated_at, is_pause_sale + sale_price, guide_price,suit, strategy_price, stock_number, cover_img, warn_line, weight, + volume, real_sales_number, first_shared, second_shared, created_at, updated_at, is_pause_sale ,is_del spec_info, spec_snap @@ -359,7 +361,7 @@