diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/controller/NotifyController.java b/src/main/java/com/chaozhanggui/system/cashierservice/controller/NotifyController.java index 03422d7..151bcbd 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/controller/NotifyController.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/controller/NotifyController.java @@ -57,7 +57,8 @@ public class NotifyController { if("TRADE_SUCCESS".equals(object.get("state").toString())){ String orderNo=object.get("mchOrderNo").toString(); String tradeNo=object.get("payOrderId").toString(); - return payService.fstMemberInSuccess(orderNo,tradeNo); + String payType=object.getStr("payType"); + return payService.fstMemberInSuccess(orderNo,tradeNo, payType); } } } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java index 7cdbf0a..2aefc11 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java @@ -1078,7 +1078,7 @@ public class PayService { String orderNo = DateUtils.getsdfTimesSS(); PublicResp publicResp = thirdPayService .scanpay(thirdUrl, thirdApply.getAppId(), - "会员充值", "会员充值", new BigDecimal(amount).setScale(2, BigDecimal.ROUND_DOWN) + "会员充值", "会员充值", payAmount .multiply(new BigDecimal(100)).longValue(), "WECHAT", thirdApply.getSmallAppid(), memberInDTO.getOpenId(), ip, orderNo, thirdApply.getStoreId(), callInBack, null, thirdApply.getAppToken()); @@ -1168,6 +1168,86 @@ public class PayService { } + /** + * 订单支付成功修改订单和子单状态 + * @param orderInfo 订单信息 + * @param payType 支付平台 + * @param payOrderNO 三方支付订单号 + */ + private void orderSuccessPay(TbOrderInfo orderInfo, String payType, String payOrderNO) { + int cartCount = mpCashierCartMapper.update(null, new LambdaUpdateWrapper() + .eq(TbCashierCart::getOrderId, orderInfo.getId()) + .eq(TbCashierCart::getUseType, orderInfo.getUseType()) + .in(TbCashierCart::getStatus, "create", "closed") + .set(TbCashierCart::getStatus, "final")); + log.info("更新购物车:{}", cartCount); + + //更新子单状态 + mpOrderDetailMapper.update(null, new LambdaUpdateWrapper().eq(TbOrderDetail::getOrderId, orderInfo.getId()) + .eq(TbOrderDetail::getUseType, orderInfo.getUseType()) + .in(TbOrderDetail::getStatus, "unpaid") + .set(TbOrderDetail::getStatus, "closed")); + + //修改主单状态 + orderInfo.setStatus("closed"); + if("alipay".equalsIgnoreCase(payType)){ + orderInfo.setPayType("ali_lite"); + }else if("wechat".equalsIgnoreCase(payType)){ + orderInfo.setPayType("wx_lite"); + } + orderInfo.setPayOrderNo(payOrderNO); + orderInfo.setPayAmount(orderInfo.getOrderAmount()); + orderInfo.setPaidTime(System.currentTimeMillis()); + tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); + + JSONObject jsonObject = new JSONObject(); + jsonObject.put("token", 0); + jsonObject.put("type", "wxcreate"); + jsonObject.put("orderId", orderInfo.getId().toString()); + producer.putOrderCollect(jsonObject.toJSONString()); + + log.info("发送订单打印数据"); + ShopEatTypeInfoDTO shopEatTypeInfoDTO = shopUtils.checkEatModel(orderInfo.getTableId(), orderInfo.getShopId()); + List detailList = mpOrderDetailMapper.selectList(new LambdaQueryWrapper() + .eq(TbOrderDetail::getOrderId, orderInfo.getId()) + .eq(TbOrderDetail::getStatus, "closed")); + // 打印消息 + if (!shopEatTypeInfoDTO.isDineInAfter()) { + mQUtils.printDishesTicket(orderInfo.getId(), false, detailList.toArray(new TbOrderDetail[0])); + } + mQUtils.printPlaceTicket(orderInfo.getId(), false); +// producer.printMechine(orderInfo.getId() + ""); + JSONObject coupons = new JSONObject(); + coupons.put("type", "buy"); + coupons.put("orderId", orderInfo.getId().toString()); + producer.printCoupons(coupons.toJSONString()); + sendOrderToClient(orderInfo); + redisUtil.deleteByKey(RedisCst.ORDER_EXPIRED.concat(orderInfo.getId().toString())); + + // 为代客下单清楚当前台桌最新订单 + String currentOrderKey = RedisCst.getCurrentOrderKey(orderInfo.getTableId(), orderInfo.getShopId()); + String currentOrderId = stringRedisTemplate.opsForValue().get(currentOrderKey); + if (currentOrderId != null && currentOrderId.equals(orderInfo.getId().toString())) { + stringRedisTemplate.delete(currentOrderKey); + } + + // 发送mq消息并保存库存记录 + JSONObject data = new JSONObject(); + data.put("orderId", orderInfo.getId()); + data.put("plat", "miniApp"); + mQUtils.sendStockSaleMsg(data); + + // 重置台桌状态 + if (StrUtil.isNotBlank(orderInfo.getTableId())) { + TbShopTable shopTable = mpShopTableService.selectByQrcode(orderInfo.getTableId()); + if (shopTable.getAutoClear() != null && shopTable.getAutoClear() == 1) { + mpShopTableService.updateStateByQrcode(orderInfo.getTableId(), TableConstant.ShopTable.State.IDLE); + }else { + mpShopTableService.updateStateByQrcode(orderInfo.getTableId(), TableConstant.ShopTable.State.CLEANING); + } + } + } + @Transactional(rollbackFor = Exception.class) public String callBackPayFST(String payOrderNO,String payType) { TbOrderInfo orderInfo = tbOrderInfoMapper.selectByPayOrderNo(payOrderNO); @@ -1176,81 +1256,8 @@ public class PayService { } if ("paying".equals(orderInfo.getStatus())) { + orderSuccessPay(orderInfo, payType, payOrderNO); - - int cartCount = mpCashierCartMapper.update(null, new LambdaUpdateWrapper() - .eq(TbCashierCart::getOrderId, orderInfo.getId()) - .eq(TbCashierCart::getUseType, orderInfo.getUseType()) - .in(TbCashierCart::getStatus, "create", "closed") - .set(TbCashierCart::getStatus, "final")); - log.info("更新购物车:{}", cartCount); - - //更新子单状态 - - mpOrderDetailMapper.update(null, new LambdaUpdateWrapper().eq(TbOrderDetail::getOrderId, orderInfo.getId()) - .eq(TbOrderDetail::getUseType, orderInfo.getUseType()) - .in(TbOrderDetail::getStatus, "unpaid") - .set(TbOrderDetail::getStatus, "closed")); - - //修改主单状态 - orderInfo.setStatus("closed"); - if("alipay".equalsIgnoreCase(payType)){ - orderInfo.setPayType("ali_lite"); - }else if("wechat".equalsIgnoreCase(payType)){ - orderInfo.setPayType("wx_lite"); - } - orderInfo.setPayOrderNo(payOrderNO); - orderInfo.setPayAmount(orderInfo.getOrderAmount()); - orderInfo.setPaidTime(System.currentTimeMillis()); - tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); - - JSONObject jsonObject = new JSONObject(); - jsonObject.put("token", 0); - jsonObject.put("type", "wxcreate"); - jsonObject.put("orderId", orderInfo.getId().toString()); - - producer.putOrderCollect(jsonObject.toJSONString()); - - log.info("发送打印数据"); - ShopEatTypeInfoDTO shopEatTypeInfoDTO = shopUtils.checkEatModel(orderInfo.getTableId(), orderInfo.getShopId()); - List detailList = mpOrderDetailMapper.selectList(new LambdaQueryWrapper() - .eq(TbOrderDetail::getOrderId, orderInfo.getId()) - .eq(TbOrderDetail::getStatus, "closed")); - // 打印消息 - if (!shopEatTypeInfoDTO.isDineInAfter()) { - mQUtils.printDishesTicket(orderInfo.getId(), false, detailList.toArray(new TbOrderDetail[0])); - } - mQUtils.printPlaceTicket(orderInfo.getId(), false); -// producer.printMechine(orderInfo.getId() + ""); - JSONObject coupons = new JSONObject(); - coupons.put("type", "buy"); - coupons.put("orderId", orderInfo.getId().toString()); - producer.printCoupons(coupons.toJSONString()); - sendOrderToClient(orderInfo); - redisUtil.deleteByKey(RedisCst.ORDER_EXPIRED.concat(orderInfo.getId().toString())); - - // 为代客下单清楚当前台桌最新订单 - String currentOrderKey = RedisCst.getCurrentOrderKey(orderInfo.getTableId(), orderInfo.getShopId()); - String currentOrderId = stringRedisTemplate.opsForValue().get(currentOrderKey); - if (currentOrderId != null && currentOrderId.equals(orderInfo.getId().toString())) { - stringRedisTemplate.delete(currentOrderKey); - } - - // 发送mq消息并保存库存记录 - JSONObject data = new JSONObject(); - data.put("orderId", orderInfo.getId()); - data.put("plat", "miniApp"); - mQUtils.sendStockSaleMsg(data); - - // 重置台桌状态 - if (StrUtil.isNotBlank(orderInfo.getTableId())) { - TbShopTable shopTable = mpShopTableService.selectByQrcode(orderInfo.getTableId()); - if (shopTable.getAutoClear() != null && shopTable.getAutoClear() == 1) { - mpShopTableService.updateStateByQrcode(orderInfo.getTableId(), TableConstant.ShopTable.State.IDLE); - }else { - mpShopTableService.updateStateByQrcode(orderInfo.getTableId(), TableConstant.ShopTable.State.CLEANING); - } - } return "SUCCESS"; } @@ -1499,7 +1506,29 @@ public class PayService { } - public String fstMemberInSuccess(String payOrderNO, String tradeNo) { + /** + * 检查充值回调是否是霸王餐活动 + * @param memberIn 充值记录 + * @param payType 支付平台 + * @param payOrderNo 三方交易订单号 + */ + private void checkFreeDineForMemberInCallBack(TbMemberIn memberIn, String payType, String payOrderNo) { + // 判断是否是霸王餐充值活动 + if (memberIn.getOrderId() != null) { + TbOrderInfo orderInfo = mpOrderInfoMapper.selectById(memberIn.getOrderId()); + if (orderInfo == null) { + log.error("订单信息不存在: orderId: {}", memberIn.getOrderId()); + return; + } + if (TableConstant.OrderInfo.Status.CLOSED.getValue().equals(orderInfo.getStatus())) { + log.error("订单状态异常: {}", orderInfo); + } + // 更改订单状态 + orderSuccessPay(orderInfo, payType, payOrderNo); + } + } + + public String fstMemberInSuccess(String payOrderNO, String tradeNo, String payType) { TbMemberIn memberIn = tbMemberInMapper.selectByOrderNo(payOrderNO); if (ObjectUtil.isEmpty(memberIn)) { return "充值记录不存在"; @@ -1545,6 +1574,10 @@ public class PayService { flow.setRemark(payOrderNO); flow.setIsReturn("0"); tbShopUserFlowMapper.insert(flow); + + // 校验霸王餐 + checkFreeDineForMemberInCallBack(memberIn, payType, payOrderNO); + //会员活动 BigDecimal awardAmount = giveActivate(tbShopUser, memberIn.getAmount(), flow.getId()); JSONObject jsonObject = new JSONObject();