diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/MemberService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/MemberService.java index 7e4dc58..78cd912 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/MemberService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/MemberService.java @@ -34,6 +34,7 @@ import java.util.Date; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.concurrent.atomic.AtomicReference; @Service public class MemberService { @@ -84,6 +85,8 @@ public class MemberService { @Autowired private TbOrderInfoMapper tbOrderInfoMapper; private MpShopTableMapper mpShopTableMapper; + @Autowired + private Utils utils; public Result queryMember(String shopId, String phone,String isFlag, int page, int pageSize) { @@ -93,7 +96,7 @@ public class MemberService { isFlag=null; } - + List tbShopUsers = tbShopUserMapper.selectByShopId(shopId, phone,isFlag); PageInfo pageInfo = new PageInfo(tbShopUsers); return Result.success(CodeEnum.SUCCESS, pageInfo); @@ -579,7 +582,6 @@ public class MemberService { return Result.success(CodeEnum.SUCCESS, memberIn); } - @Transactional(rollbackFor = Exception.class) public Result memberAccountPay(Map map, String token) throws Exception { if (ObjectUtil.isEmpty(map) || map.isEmpty() || !map.containsKey("shopId") || ObjectUtil.isEmpty(map.get("shopId")) @@ -633,73 +635,76 @@ public class MemberService { if (count < 1) { return Result.fail(CodeEnum.PAYTYPENOEXIST); } - BigDecimal amount = new BigDecimal(String.valueOf(map.get("amount"))).setScale(2, RoundingMode.DOWN); TbMemberIn memberIn = new TbMemberIn(); - memberIn.setMerchantId(Integer.valueOf(shopInfo.getMerchantId())); - memberIn.setAmount(amount); - memberIn.setUserId(shopUser.getId()); - memberIn.setCode(shopUser.getCode()); - memberIn.setStatus("0"); - memberIn.setCreateTime(new Date()); - memberIn.setTradeNo("cash".concat(SnowFlakeUtil.generateOrderNo())); - memberIn.setShopId(shopId); - tbMemberInMapper.insert(memberIn); + AtomicReference fl = new AtomicReference<>(); + AtomicReference flow = new AtomicReference<>(new TbShopUserFlow()); + utils.runFunAndTransactional(() -> { - shopUser.setAmount(shopUser.getAmount().add(amount)); - shopUser.setUpdatedAt(System.currentTimeMillis()); - if (StringUtils.isBlank(shopUser.getUserId())) { - TbUserInfo tbUserInfo = tbUserInfoMapper.selectByPhone(shopUser.getTelephone()); - if (tbUserInfo != null) { - shopUser.setUserId(tbUserInfo.getId().toString()); - } - } - tbShopUserMapper.updateByPrimaryKeySelective(shopUser); + memberIn.setMerchantId(Integer.valueOf(shopInfo.getMerchantId())); + memberIn.setAmount(amount); + memberIn.setUserId(shopUser.getId()); + memberIn.setCode(shopUser.getCode()); + memberIn.setStatus("0"); + memberIn.setCreateTime(new Date()); + memberIn.setTradeNo("cash".concat(SnowFlakeUtil.generateOrderNo())); + memberIn.setShopId(shopId); + tbMemberInMapper.insert(memberIn); - TbShopUserFlow flow = new TbShopUserFlow(); - flow.setShopUserId(shopUser.getId()); - flow.setBizCode("cashMemberIn"); - flow.setType("+"); - flow.setBizName("线下充值"); - flow.setAmount(amount); - flow.setBalance(shopUser.getAmount()); - flow.setCreateTime(new Date()); - flow.setIsReturn("0"); - tbShopUserFlowMapper.insert(flow); - BigDecimal fl = null; - - TbActivate activate = tbActivateMapper.selectByAmount(shopInfo.getId().toString(), memberIn.getAmount()); - if (ObjectUtil.isNotEmpty(activate) && ObjectUtil.isNotNull(activate)) { - BigDecimal awardAmount = BigDecimal.ZERO; - switch (activate.getHandselType()) { - case "GD": - awardAmount = activate.getHandselNum(); - break; - case "RATIO": - awardAmount = memberIn.getAmount().multiply(activate.getHandselNum()); - break; - } - - shopUser.setAmount(shopUser.getAmount().add(awardAmount)); + shopUser.setAmount(shopUser.getAmount().add(amount)); shopUser.setUpdatedAt(System.currentTimeMillis()); + if (StringUtils.isBlank(shopUser.getUserId())) { + TbUserInfo tbUserInfo = tbUserInfoMapper.selectByPhone(shopUser.getTelephone()); + if (tbUserInfo != null) { + shopUser.setUserId(tbUserInfo.getId().toString()); + } + } tbShopUserMapper.updateByPrimaryKeySelective(shopUser); - flow = new TbShopUserFlow(); - flow.setShopUserId(shopUser.getId()); - flow.setBizCode("scanMemberAwardIn"); - flow.setType("+"); - flow.setBizName("充值活动奖励"); - flow.setAmount(awardAmount); - flow.setBalance(shopUser.getAmount()); - flow.setCreateTime(new Date()); - flow.setIsReturn("0"); - tbShopUserFlowMapper.insert(flow); + flow.get().setShopUserId(shopUser.getId()); + flow.get().setBizCode("cashMemberIn"); + flow.get().setType("+"); + flow.get().setBizName("线下充值"); + flow.get().setAmount(amount); + flow.get().setBalance(shopUser.getAmount()); + flow.get().setCreateTime(new Date()); + flow.get().setIsReturn("0"); + tbShopUserFlowMapper.insert(flow.get()); - fl = awardAmount; + TbActivate activate = tbActivateMapper.selectByAmount(shopInfo.getId().toString(), memberIn.getAmount()); + if (ObjectUtil.isNotEmpty(activate) && ObjectUtil.isNotNull(activate)) { + BigDecimal awardAmount = BigDecimal.ZERO; + switch (activate.getHandselType()) { + case "GD": + awardAmount = activate.getHandselNum(); + break; + case "RATIO": + awardAmount = memberIn.getAmount().multiply(activate.getHandselNum()); + break; + } + shopUser.setAmount(shopUser.getAmount().add(awardAmount)); + shopUser.setUpdatedAt(System.currentTimeMillis()); + tbShopUserMapper.updateByPrimaryKeySelective(shopUser); - } + flow.set(new TbShopUserFlow()); + flow.get().setShopUserId(shopUser.getId()); + flow.get().setBizCode("scanMemberAwardIn"); + flow.get().setType("+"); + flow.get().setBizName("充值活动奖励"); + flow.get().setAmount(awardAmount); + flow.get().setBalance(shopUser.getAmount()); + flow.get().setCreateTime(new Date()); + flow.get().setIsReturn("0"); + tbShopUserFlowMapper.insert(flow.get()); + + fl.set(awardAmount); + + } + + return null; + }); JSONObject jsonObject = new JSONObject(); jsonObject.put("token", token); @@ -712,10 +717,10 @@ public class MemberService { JSONObject baObj = new JSONObject(); baObj.put("userId", shopUser.getUserId()); baObj.put("shopId", shopInfo.getId()); - baObj.put("amount", ObjectUtil.isNull(fl) ? amount : amount.add(fl)); + baObj.put("amount", ObjectUtil.isNull(fl) ? amount : amount.add(fl.get())); baObj.put("balance", shopUser.getAmount()); baObj.put("type", "充值"); - baObj.put("time", flow.getCreateTime()); + baObj.put("time", flow.get().getCreateTime()); producer.balance(baObj.toString()); 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 14725e7..e46b837 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java @@ -174,7 +174,6 @@ public class PayService { } } - @Transactional(rollbackFor = Exception.class) public Result scanPay(String orderId, String authCode, String ip, String token, BigDecimal payAmount, BigDecimal discountAmount) { if (ObjectUtil.isEmpty(orderId) || ObjectUtil.isEmpty(authCode) || ObjectUtil.isEmpty(ip)) { return Result.fail(CodeEnum.PARAM); @@ -230,9 +229,9 @@ public class PayService { return Result.fail(CodeEnum.NOCUSTOMER); } - String payType = null; - String payName = null; - String qpay = null; + String payType; + String payName; + String qpay; String payTypeCode = authCode.substring(0, 2);// 判断收款码 @@ -245,12 +244,17 @@ public class PayService { payType = "wechatPay"; payName = "微信支付"; qpay = "scanCode"; - } else if ("62".equals(payTypeCode)) { - return Result.fail(CodeEnum.ERRORQR); - } else if ("01".equals(payTypeCode)) { - return Result.fail(CodeEnum.ERRORQR); } else { - return Result.fail(CodeEnum.ERRORQR); + qpay = null; + payType = null; + payName = null; + if ("62".equals(payTypeCode)) { + return Result.fail(CodeEnum.ERRORQR); + } else if ("01".equals(payTypeCode)) { + return Result.fail(CodeEnum.ERRORQR); + } else { + return Result.fail(CodeEnum.ERRORQR); + } } int count = tbShopPayTypeMapper.countSelectByShopIdAndPayType(orderInfo.getShopId(), qpay); @@ -258,164 +262,71 @@ public class PayService { return Result.fail(CodeEnum.PAYTYPENOEXIST); } - TbOrderPayment payment = tbOrderPaymentMapper.selectByOrderId(orderId); - if (ObjectUtil.isEmpty(payment) || payment == null) { - payment = new TbOrderPayment(); - payment.setPayTypeId("ysk"); - payment.setAmount(ObjectUtil.isEmpty(payAmount) ? orderInfo.getOrderAmount() : payAmount); - payment.setPaidAmount(orderInfo.getPayAmount()); - payment.setHasRefundAmount(BigDecimal.ZERO); - payment.setPayName(payName); - payment.setPayType(payType); - payment.setReceived(payment.getAmount()); - payment.setChangeFee(BigDecimal.ZERO); - payment.setMemberId(orderInfo.getMemberId()); - payment.setShopId(orderInfo.getShopId()); - payment.setOrderId(orderInfo.getId().toString()); - payment.setCreatedAt(System.currentTimeMillis()); - payment.setAuthCode(authCode); - tbOrderPaymentMapper.insert(payment); - } else { - payment.setAuthCode(authCode); - payment.setUpdatedAt(System.currentTimeMillis()); - tbOrderPaymentMapper.updateByPrimaryKey(payment); - } - - - orderInfo.setPayAmount(ObjectUtil.isEmpty(payAmount) ? orderInfo.getOrderAmount() : payAmount); - orderInfo.setDiscountAmount(ObjectUtil.isEmpty(discountAmount) ? null : discountAmount); - orderInfo.setDiscountRatio(ObjectUtil.isNotEmpty(payAmount) ? payAmount.divide(orderInfo.getOrderAmount(), 2, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_DOWN) : null); - orderInfo.setPayType(qpay); - orderInfo.setUpdatedAt(System.currentTimeMillis()); - orderInfo.setStaffId(ObjectUtil.isNotNull(staff) ? staff.getId() : null); - tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); - - if ("ysk".equals(thirdPayType)) { - - ScanPayReq scanPayReq = new ScanPayReq(); - scanPayReq.setAppId(thirdApply.getAppId()); - scanPayReq.setTimestamp(System.currentTimeMillis()); - scanPayReq.setAuthCode(authCode); - scanPayReq.setNotifyUrl(backUrl); - scanPayReq.setConsumeFee(payment.getAmount().setScale(2, RoundingMode.DOWN).toPlainString()); - - Map map = BeanUtil.transBean2Map(scanPayReq); - scanPayReq.setSign(MD5Util.encrypt(map, thirdApply.getAppToken(), true)); - - - ResponseEntity response = restTemplate.postForEntity(gateWayUrl.concat("merchantOrder/scanPay"), scanPayReq, String.class); - if (response.getStatusCodeValue() == 200 && ObjectUtil.isNotEmpty(response.getBody())) { - JSONObject object = JSONObject.parseObject(response.getBody()); - if (object.get("code").equals("0")) { - payment.setTradeNumber(object.getJSONObject("data").get("orderNumber").toString()); - payment.setUpdatedAt(System.currentTimeMillis()); - tbOrderPaymentMapper.updateByPrimaryKeySelective(payment); - - //处理支付成功的订单 - orderInfo.setStatus("closed"); - orderInfo.setPayOrderNo(object.getJSONObject("data").get("orderNumber").toString()); - tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); - - //更新购物车状态 - int cartCount = tbCashierCartMapper.updateByOrderId(orderId, "final"); - log.info("更新购物车:{}", cartCount); - - //更新子单状态 - tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed", orderInfo.getDiscountRatio()); - - JSONObject jsonObject = new JSONObject(); - jsonObject.put("token", token); - jsonObject.put("type", "create"); - jsonObject.put("orderId", orderId); - - producer.putOrderCollect(jsonObject.toJSONString()); - - // 打印消息 - if (!OrderUseTypeEnum.DINE_IN_AFTER.getValue().equals(orderInfo.getUseType())) { - List detailList = mPOrderDetailMapper.selectList(new LambdaQueryWrapper() - .eq(TbOrderDetail::getOrderId, orderInfo.getId()) - .eq(TbOrderDetail::getStatus, "closed")); - rabbitMsgUtils.printDishesTicket(orderInfo.getId(), false, detailList.toArray(new TbOrderDetail[0])); - } - rabbitMsgUtils.printPlaceTicket(orderInfo.getId(), false); - - - String tableCartKey = RedisCst.getCurrentOrderKey(orderInfo.getTableId(), - orderInfo.getShopId()); - redisUtil.del(tableCartKey); - - clearTableInfoCache(orderInfo); - return Result.success(CodeEnum.SUCCESS, object.getJSONObject("data")); - } else { - String status = ObjectUtil.isNotEmpty(object.getJSONObject("data")) ? object.getJSONObject("data").getString("status") : null; - if (ObjectUtil.isNotNull(status) && "7".equals(status)) { - payment.setTradeNumber(object.getJSONObject("data").get("orderNumber").toString()); - log.info("支付中4:{}", JSON.toJSONString(payment)); - orderInfo.setStatus("paying"); - orderInfo.setPayOrderNo(payment.getTradeNumber()); - tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); - int cartCount = tbCashierCartMapper.updateByOrderId(orderId, "final"); - - payment.setUpdatedAt(System.currentTimeMillis()); - tbOrderPaymentMapper.updateByPrimaryKeySelective(payment); - - -// 打印结算单 - // 打印消息 - if (!OrderUseTypeEnum.DINE_IN_AFTER.getValue().equals(orderInfo.getUseType())) { - List detailList = mPOrderDetailMapper.selectList(new LambdaQueryWrapper() - .eq(TbOrderDetail::getOrderId, orderInfo.getId()) - .eq(TbOrderDetail::getStatus, "closed")); - rabbitMsgUtils.printDishesTicket(orderInfo.getId(), false, detailList.toArray(new TbOrderDetail[0])); - } - rabbitMsgUtils.printPlaceTicket(orderInfo.getId(), false); - String tableCartKey = RedisCst.getCurrentOrderKey(orderInfo.getTableId(), - orderInfo.getShopId()); - redisUtil.del(tableCartKey); - clearTableInfoCache(orderInfo); - - return Result.success(CodeEnum.PAYING); - } -// orderInfo.setStatus("fail"); -// orderInfo.setPayOrderNo(payment.getTradeNumber()); -// tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); - - return Result.fail(object.getString("msg")); - } - } - } else { - - String reqbody = ""; - - if (body.length() > 15) { - reqbody = body.substring(0, 6).concat("....").concat(body.substring(body.length() - 6, body.length())); + utils.runFunAndTransactional(() -> { + TbOrderPayment payment = tbOrderPaymentMapper.selectByOrderId(orderId); + if (ObjectUtil.isEmpty(payment) || payment == null) { + payment = new TbOrderPayment(); + payment.setPayTypeId("ysk"); + payment.setAmount(ObjectUtil.isEmpty(payAmount) ? orderInfo.getOrderAmount() : payAmount); + payment.setPaidAmount(orderInfo.getPayAmount()); + payment.setHasRefundAmount(BigDecimal.ZERO); + payment.setPayName(payName); + payment.setPayType(payType); + payment.setReceived(payment.getAmount()); + payment.setChangeFee(BigDecimal.ZERO); + payment.setMemberId(orderInfo.getMemberId()); + payment.setShopId(orderInfo.getShopId()); + payment.setOrderId(orderInfo.getId().toString()); + payment.setCreatedAt(System.currentTimeMillis()); + payment.setAuthCode(authCode); + tbOrderPaymentMapper.insert(payment); } else { - reqbody = body.toString(); + payment.setAuthCode(authCode); + payment.setUpdatedAt(System.currentTimeMillis()); + tbOrderPaymentMapper.updateByPrimaryKey(payment); } - PublicResp publicResp = thirdPayService.mainScan(url, thirdApply.getAppId(), reqbody, reqbody, payment.getAmount().setScale(2, RoundingMode.DOWN).multiply(new BigDecimal(100)).longValue(), payType.equals("wechatPay") ? thirdApply.getSmallAppid() : null, authCode, DateUtils.getSsdfTimes(), thirdApply.getStoreId(), callBack, thirdApply.getAppToken()); - if (ObjectUtil.isNotNull(publicResp) && ObjectUtil.isNotEmpty(publicResp)) { - if ("000000".equals(publicResp.getCode())) { - MainScanResp mainScanResp = publicResp.getObjData(); - if ("TRADE_SUCCESS".equals(mainScanResp.getState())) { - payment.setTradeNumber(mainScanResp.getPayOrderId()); + + orderInfo.setPayAmount(ObjectUtil.isEmpty(payAmount) ? orderInfo.getOrderAmount() : payAmount); + orderInfo.setDiscountAmount(ObjectUtil.isEmpty(discountAmount) ? null : discountAmount); + orderInfo.setDiscountRatio(ObjectUtil.isNotEmpty(payAmount) ? payAmount.divide(orderInfo.getOrderAmount(), 2, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_DOWN) : null); + orderInfo.setPayType(qpay); + orderInfo.setUpdatedAt(System.currentTimeMillis()); + orderInfo.setStaffId(ObjectUtil.isNotNull(staff) ? staff.getId() : null); + tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); + + if ("ysk".equals(thirdPayType)) { + + ScanPayReq scanPayReq = new ScanPayReq(); + scanPayReq.setAppId(thirdApply.getAppId()); + scanPayReq.setTimestamp(System.currentTimeMillis()); + scanPayReq.setAuthCode(authCode); + scanPayReq.setNotifyUrl(backUrl); + scanPayReq.setConsumeFee(payment.getAmount().setScale(2, RoundingMode.DOWN).toPlainString()); + + Map map = BeanUtil.transBean2Map(scanPayReq); + scanPayReq.setSign(MD5Util.encrypt(map, thirdApply.getAppToken(), true)); + + + ResponseEntity response = restTemplate.postForEntity(gateWayUrl.concat("merchantOrder/scanPay"), scanPayReq, String.class); + if (response.getStatusCodeValue() == 200 && ObjectUtil.isNotEmpty(response.getBody())) { + JSONObject object = JSONObject.parseObject(response.getBody()); + if (object.get("code").equals("0")) { + payment.setTradeNumber(object.getJSONObject("data").get("orderNumber").toString()); payment.setUpdatedAt(System.currentTimeMillis()); tbOrderPaymentMapper.updateByPrimaryKeySelective(payment); //处理支付成功的订单 orderInfo.setStatus("closed"); - orderInfo.setPayOrderNo(mainScanResp.getPayOrderId()); + orderInfo.setPayOrderNo(object.getJSONObject("data").get("orderNumber").toString()); tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); //更新购物车状态 int cartCount = tbCashierCartMapper.updateByOrderId(orderId, "final"); log.info("更新购物车:{}", cartCount); - if (ObjectUtil.isNotNull(orderInfo.getDiscountRatio()) && ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())) { - tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed", orderInfo.getDiscountRatio()); - } else { - tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed", null); - } + //更新子单状态 + tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed", orderInfo.getDiscountRatio()); JSONObject jsonObject = new JSONObject(); jsonObject.put("token", token); @@ -433,48 +344,124 @@ public class PayService { } rabbitMsgUtils.printPlaceTicket(orderInfo.getId(), false); -// 打印结算单 + String tableCartKey = RedisCst.getCurrentOrderKey(orderInfo.getTableId(), orderInfo.getShopId()); redisUtil.del(tableCartKey); + clearTableInfoCache(orderInfo); + return Result.success(CodeEnum.SUCCESS, object.getJSONObject("data")); + } else { + String status = ObjectUtil.isNotEmpty(object.getJSONObject("data")) ? object.getJSONObject("data").getString("status") : null; + if (ObjectUtil.isNotNull(status) && "7".equals(status)) { + payment.setTradeNumber(object.getJSONObject("data").get("orderNumber").toString()); + log.info("支付中4:{}", JSON.toJSONString(payment)); + orderInfo.setStatus("paying"); + orderInfo.setPayOrderNo(payment.getTradeNumber()); + tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); + int cartCount = tbCashierCartMapper.updateByOrderId(orderId, "final"); - return Result.success(CodeEnum.SUCCESS, mainScanResp); - } else if ("TRADE_AWAIT".equals(mainScanResp.getState())) { - payment.setTradeNumber(mainScanResp.getPayOrderId()); - log.info("支付中2:{}", JSON.toJSONString(payment)); - orderInfo.setStatus("paying"); - orderInfo.setPayOrderNo(payment.getTradeNumber()); - tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); - int cartCount = tbCashierCartMapper.updateByOrderId(orderId, "final"); + payment.setUpdatedAt(System.currentTimeMillis()); + tbOrderPaymentMapper.updateByPrimaryKeySelective(payment); - payment.setUpdatedAt(System.currentTimeMillis()); - tbOrderPaymentMapper.updateByPrimaryKeySelective(payment); - // 打印结算单 - // 打印消息 - if (!OrderUseTypeEnum.DINE_IN_AFTER.getValue().equals(orderInfo.getUseType())) { - List detailList = mPOrderDetailMapper.selectList(new LambdaQueryWrapper() - .eq(TbOrderDetail::getOrderId, orderInfo.getId()) - .eq(TbOrderDetail::getStatus, "closed")); - rabbitMsgUtils.printDishesTicket(orderInfo.getId(), false, detailList.toArray(new TbOrderDetail[0])); + // 打印消息 + if (!OrderUseTypeEnum.DINE_IN_AFTER.getValue().equals(orderInfo.getUseType())) { + List detailList = mPOrderDetailMapper.selectList(new LambdaQueryWrapper() + .eq(TbOrderDetail::getOrderId, orderInfo.getId()) + .eq(TbOrderDetail::getStatus, "closed")); + rabbitMsgUtils.printDishesTicket(orderInfo.getId(), false, detailList.toArray(new TbOrderDetail[0])); + } + rabbitMsgUtils.printPlaceTicket(orderInfo.getId(), false); + String tableCartKey = RedisCst.getCurrentOrderKey(orderInfo.getTableId(), + orderInfo.getShopId()); + redisUtil.del(tableCartKey); + clearTableInfoCache(orderInfo); + + return Result.success(CodeEnum.PAYING); } - rabbitMsgUtils.printPlaceTicket(orderInfo.getId(), false); - String tableCartKey = RedisCst.getCurrentOrderKey(orderInfo.getTableId(), - orderInfo.getShopId()); - redisUtil.del(tableCartKey); - clearTableInfoCache(orderInfo); +// orderInfo.setStatus("fail"); +// orderInfo.setPayOrderNo(payment.getTradeNumber()); +// tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); - return Result.success(CodeEnum.PAYING); + return Result.fail(object.getString("msg")); } } + } else { + + String reqbody = ""; + + if (body.length() > 15) { + reqbody = body.substring(0, 6).concat("....").concat(body.substring(body.length() - 6, body.length())); + } else { + reqbody = body.toString(); + } + + PublicResp publicResp = thirdPayService.mainScan(url, thirdApply.getAppId(), reqbody, reqbody, payment.getAmount().setScale(2, RoundingMode.DOWN).multiply(new BigDecimal(100)).longValue(), payType.equals("wechatPay") ? thirdApply.getSmallAppid() : null, authCode, DateUtils.getSsdfTimes(), thirdApply.getStoreId(), callBack, thirdApply.getAppToken()); + if (ObjectUtil.isNotNull(publicResp) && ObjectUtil.isNotEmpty(publicResp)) { + if ("000000".equals(publicResp.getCode())) { + MainScanResp mainScanResp = publicResp.getObjData(); + if ("TRADE_SUCCESS".equals(mainScanResp.getState())) { + payment.setTradeNumber(mainScanResp.getPayOrderId()); + payment.setUpdatedAt(System.currentTimeMillis()); + tbOrderPaymentMapper.updateByPrimaryKeySelective(payment); + + //处理支付成功的订单 + orderInfo.setStatus("closed"); + orderInfo.setPayOrderNo(mainScanResp.getPayOrderId()); + tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); + + //更新购物车状态 + int cartCount = tbCashierCartMapper.updateByOrderId(orderId, "final"); + log.info("更新购物车:{}", cartCount); + + if (ObjectUtil.isNotNull(orderInfo.getDiscountRatio()) && ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())) { + tbOrderDetailMapper.updateStatusByOrderId(Integer.parseInt(orderId), "closed", orderInfo.getDiscountRatio()); + } else { + tbOrderDetailMapper.updateStatusByOrderId(Integer.parseInt(orderId), "closed", null); + } + } else if ("TRADE_AWAIT".equals(mainScanResp.getState())) { + payment.setTradeNumber(mainScanResp.getPayOrderId()); + log.info("支付中2:{}", JSON.toJSONString(payment)); + orderInfo.setStatus("paying"); + orderInfo.setPayOrderNo(payment.getTradeNumber()); + tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); + int cartCount = tbCashierCartMapper.updateByOrderId(orderId, "final"); + + payment.setUpdatedAt(System.currentTimeMillis()); + tbOrderPaymentMapper.updateByPrimaryKeySelective(payment); + + } + } + } + } + return null; + }); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("token", token); + jsonObject.put("type", "create"); + jsonObject.put("orderId", orderId); + producer.putOrderCollect(jsonObject.toJSONString()); + + // 打印消息 + if (!OrderUseTypeEnum.DINE_IN_AFTER.getValue().equals(orderInfo.getUseType())) { + List detailList = mPOrderDetailMapper.selectList(new LambdaQueryWrapper() + .eq(TbOrderDetail::getOrderId, orderInfo.getId()) + .eq(TbOrderDetail::getStatus, "closed")); + rabbitMsgUtils.printDishesTicket(orderInfo.getId(), false, detailList.toArray(new TbOrderDetail[0])); } + rabbitMsgUtils.printPlaceTicket(orderInfo.getId(), false); + // 打印结算单 + String tableCartKey = RedisCst.getCurrentOrderKey(orderInfo.getTableId(), + orderInfo.getShopId()); + redisUtil.del(tableCartKey); + clearTableInfoCache(orderInfo); - return Result.fail("失败"); + return Result.success(SUCCESS); } public Result queryOrder(String orderId, String token) { @@ -567,7 +554,6 @@ public class PayService { } - @Transactional(rollbackFor = Exception.class) public Result accountPay(String orderId, String memberId, String token, String memberAccount, BigDecimal payAmount, BigDecimal discountAmount) { if (ObjectUtil.isEmpty(orderId)) { if (ObjectUtil.isEmpty(memberAccount)) { @@ -628,7 +614,6 @@ public class PayService { if (ObjectUtil.isNotEmpty(memberAccount)) { - if (!memberAccount.startsWith("46")) { return Result.fail(CodeEnum.ERRORQR); } @@ -645,7 +630,6 @@ public class PayService { if (N.gt(orderInfo.getOrderAmount(), user.getAmount())) { return Result.fail(CodeEnum.MEMBERINSUFFICIENTFUNDS); } - if (ObjectUtil.isEmpty(payAmount) || ObjectUtil.isNull(payAmount)) { payAmount = orderInfo.getOrderAmount(); } @@ -653,43 +637,44 @@ public class PayService { user.setConsumeAmount(user.getConsumeAmount().add(payAmount)); user.setConsumeNumber(user.getConsumeNumber() + 1); user.setUpdatedAt(System.currentTimeMillis()); - tbShopUserMapper.updateByPrimaryKeySelective(user); - - + TbShopUser finalUser = user; + BigDecimal finalPayAmount = payAmount; TbShopUserFlow flow = new TbShopUserFlow(); - flow.setShopUserId(user.getId()); - flow.setBizCode("accountPay"); - flow.setBizName("余额支付"); - flow.setType("-"); - flow.setAmount(payAmount); - flow.setBalance(user.getAmount()); - flow.setCreateTime(new Date()); - flow.setIsReturn("0"); - tbShopUserFlowMapper.insert(flow); + utils.runFunAndTransactional(() -> { + tbShopUserMapper.updateByPrimaryKeySelective(finalUser); + flow.setShopUserId(finalUser.getId()); + flow.setBizCode("accountPay"); + flow.setBizName("余额支付"); + flow.setType("-"); + flow.setAmount(finalPayAmount); + flow.setBalance(finalUser.getAmount()); + flow.setCreateTime(new Date()); + flow.setIsReturn("0"); + tbShopUserFlowMapper.insert(flow); - orderInfo.setPayAmount(ObjectUtil.isEmpty(payAmount) ? orderInfo.getOrderAmount() : payAmount); - orderInfo.setDiscountAmount(ObjectUtil.isEmpty(discountAmount) ? null : discountAmount); - orderInfo.setDiscountRatio(ObjectUtil.isNotEmpty(payAmount) ? payAmount.divide(orderInfo.getOrderAmount(), 2, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_DOWN) : null); - orderInfo.setStaffId(ObjectUtil.isEmpty(staff) ? null : staff.getId()); - orderInfo.setUserId(user.getUserId()); - orderInfo.setMemberId(user.getId().toString()); - orderInfo.setPayType("deposit"); - orderInfo.setStatus("closed"); - orderInfo.setPayOrderNo("deposit".concat(SnowFlakeUtil.generateOrderNo())); - tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); - //更新购物车状态 - int cartCount = tbCashierCartMapper.updateByOrderId(orderId, "final"); + orderInfo.setPayAmount(ObjectUtil.isEmpty(finalPayAmount) ? orderInfo.getOrderAmount() : finalPayAmount); + orderInfo.setDiscountAmount(ObjectUtil.isEmpty(discountAmount) ? null : discountAmount); + orderInfo.setDiscountRatio(ObjectUtil.isNotEmpty(finalPayAmount) ? finalPayAmount.divide(orderInfo.getOrderAmount(), 2, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_DOWN) : null); + orderInfo.setStaffId(ObjectUtil.isEmpty(staff) ? null : staff.getId()); + orderInfo.setUserId(finalUser.getUserId()); + orderInfo.setMemberId(finalUser.getId().toString()); + orderInfo.setPayType("deposit"); + orderInfo.setStatus("closed"); + orderInfo.setPayOrderNo("deposit".concat(SnowFlakeUtil.generateOrderNo())); + tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); + //更新购物车状态 + int cartCount = tbCashierCartMapper.updateByOrderId(orderId, "final"); - if (ObjectUtil.isNotNull(orderInfo.getDiscountRatio()) && ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())) { - tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed", orderInfo.getDiscountRatio()); - } else { - tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed", null); - } + if (ObjectUtil.isNotNull(orderInfo.getDiscountRatio()) && ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())) { + tbOrderDetailMapper.updateStatusByOrderId(Integer.parseInt(orderId), "closed", orderInfo.getDiscountRatio()); + } else { + tbOrderDetailMapper.updateStatusByOrderId(Integer.parseInt(orderId), "closed", null); + } + log.info("更新购物车:{}", cartCount); - - - log.info("更新购物车:{}", cartCount); + return null; + }); JSONObject jsonObject = new JSONObject(); jsonObject.put("token", token); @@ -905,42 +890,46 @@ public class PayService { } - TbShopUserFlow userFlow = new TbShopUserFlow(); - userFlow.setAmount((payAmount != null && discountAmount != null) ? payAmount : orderInfo.getOrderAmount()); - userFlow.setBalance(shopUser.getAmount().subtract((payAmount != null && discountAmount != null) ? payAmount : orderInfo.getOrderAmount())); - userFlow.setShopUserId(shopUser.getId()); - userFlow.setBizCode("vipCardCash"); - userFlow.setBizName("余额支付"); - userFlow.setCreateTime(DateUtil.date()); - userFlow.setType("-"); - userFlow.setIsReturn("0"); - mpShopUserFlowMapper.insert(userFlow); + utils.runFunAndTransactional(() -> { + TbShopUserFlow userFlow = new TbShopUserFlow(); + userFlow.setAmount((payAmount != null && discountAmount != null) ? payAmount : orderInfo.getOrderAmount()); + userFlow.setBalance(shopUser.getAmount().subtract((payAmount != null && discountAmount != null) ? payAmount : orderInfo.getOrderAmount())); + userFlow.setShopUserId(shopUser.getId()); + userFlow.setBizCode("vipCardCash"); + userFlow.setBizName("余额支付"); + userFlow.setCreateTime(DateUtil.date()); + userFlow.setType("-"); + userFlow.setIsReturn("0"); + mpShopUserFlowMapper.insert(userFlow); - if (payAmount != null && discountAmount != null) { - orderInfo.setPayAmount(payAmount); - orderInfo.setDiscountAmount(discountAmount); - orderInfo.setDiscountRatio(ObjectUtil.isNotEmpty(payAmount) ? payAmount.divide(orderInfo.getOrderAmount(), 2, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_DOWN) : null); - } else { - orderInfo.setPayAmount(orderInfo.getOrderAmount()); - } + if (payAmount != null && discountAmount != null) { + orderInfo.setPayAmount(payAmount); + orderInfo.setDiscountAmount(discountAmount); + orderInfo.setDiscountRatio(ObjectUtil.isNotEmpty(payAmount) ? payAmount.divide(orderInfo.getOrderAmount(), 2, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_DOWN) : null); + } else { + orderInfo.setPayAmount(orderInfo.getOrderAmount()); + } - orderInfo.setPayType("deposit"); - orderInfo.setStatus("closed"); - orderInfo.setPayOrderNo("deposit".concat(SnowFlakeUtil.generateOrderNo())); - orderInfo.setMemberId(vipUserId.toString()); - tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); - //更新购物车状态 - int cartCount = tbCashierCartMapper.updateByOrderId(String.valueOf(orderId), "final"); + orderInfo.setPayType("deposit"); + orderInfo.setStatus("closed"); + orderInfo.setPayOrderNo("deposit".concat(SnowFlakeUtil.generateOrderNo())); + orderInfo.setMemberId(vipUserId.toString()); + tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); + //更新购物车状态 + int cartCount = tbCashierCartMapper.updateByOrderId(String.valueOf(orderId), "final"); - if (ObjectUtil.isNotNull(orderInfo.getDiscountRatio()) && ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())) { - tbOrderDetailMapper.updateStatusByOrderId(orderId, "closed", orderInfo.getDiscountRatio()); - } else { - tbOrderDetailMapper.updateStatusByOrderId(orderId, "closed", null); - } + if (ObjectUtil.isNotNull(orderInfo.getDiscountRatio()) && ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())) { + tbOrderDetailMapper.updateStatusByOrderId(orderId, "closed", orderInfo.getDiscountRatio()); + } else { + tbOrderDetailMapper.updateStatusByOrderId(orderId, "closed", null); + } + + log.info("更新购物车:{}", cartCount); + return null; + }); - log.info("更新购物车:{}", cartCount); JSONObject jsonObject = new JSONObject(); jsonObject.put("token", token); @@ -1036,9 +1025,6 @@ public class PayService { return orderInfo; }); - log.info("事务已提交"); - ThreadUtil.sleep(10, TimeUnit.SECONDS); - JSONObject jsonObject = new JSONObject(); jsonObject.put("token", token); jsonObject.put("type", "create");