打印改为事务提交后

This commit is contained in:
2024-10-16 18:01:48 +08:00
parent e371816998
commit fdc3c1c729
2 changed files with 297 additions and 306 deletions

View File

@@ -34,6 +34,7 @@ import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.atomic.AtomicReference;
@Service @Service
public class MemberService { public class MemberService {
@@ -84,6 +85,8 @@ public class MemberService {
@Autowired @Autowired
private TbOrderInfoMapper tbOrderInfoMapper; private TbOrderInfoMapper tbOrderInfoMapper;
private MpShopTableMapper mpShopTableMapper; private MpShopTableMapper mpShopTableMapper;
@Autowired
private Utils utils;
public Result queryMember(String shopId, String phone,String isFlag, int page, int pageSize) { public Result queryMember(String shopId, String phone,String isFlag, int page, int pageSize) {
@@ -93,7 +96,7 @@ public class MemberService {
isFlag=null; isFlag=null;
} }
List<TbShopUser> tbShopUsers = tbShopUserMapper.selectByShopId(shopId, phone,isFlag); List<TbShopUser> tbShopUsers = tbShopUserMapper.selectByShopId(shopId, phone,isFlag);
PageInfo pageInfo = new PageInfo(tbShopUsers); PageInfo pageInfo = new PageInfo(tbShopUsers);
return Result.success(CodeEnum.SUCCESS, pageInfo); return Result.success(CodeEnum.SUCCESS, pageInfo);
@@ -579,7 +582,6 @@ public class MemberService {
return Result.success(CodeEnum.SUCCESS, memberIn); return Result.success(CodeEnum.SUCCESS, memberIn);
} }
@Transactional(rollbackFor = Exception.class)
public Result memberAccountPay(Map<String, Object> map, String token) throws Exception { public Result memberAccountPay(Map<String, Object> map, String token) throws Exception {
if (ObjectUtil.isEmpty(map) || map.isEmpty() if (ObjectUtil.isEmpty(map) || map.isEmpty()
|| !map.containsKey("shopId") || ObjectUtil.isEmpty(map.get("shopId")) || !map.containsKey("shopId") || ObjectUtil.isEmpty(map.get("shopId"))
@@ -633,73 +635,76 @@ public class MemberService {
if (count < 1) { if (count < 1) {
return Result.fail(CodeEnum.PAYTYPENOEXIST); return Result.fail(CodeEnum.PAYTYPENOEXIST);
} }
BigDecimal amount = new BigDecimal(String.valueOf(map.get("amount"))).setScale(2, RoundingMode.DOWN); BigDecimal amount = new BigDecimal(String.valueOf(map.get("amount"))).setScale(2, RoundingMode.DOWN);
TbMemberIn memberIn = new TbMemberIn(); TbMemberIn memberIn = new TbMemberIn();
memberIn.setMerchantId(Integer.valueOf(shopInfo.getMerchantId())); AtomicReference<BigDecimal> fl = new AtomicReference<>();
memberIn.setAmount(amount); AtomicReference<TbShopUserFlow> flow = new AtomicReference<>(new TbShopUserFlow());
memberIn.setUserId(shopUser.getId()); utils.runFunAndTransactional(() -> {
memberIn.setCode(shopUser.getCode());
memberIn.setStatus("0");
memberIn.setCreateTime(new Date());
memberIn.setTradeNo("cash".concat(SnowFlakeUtil.generateOrderNo()));
memberIn.setShopId(shopId);
tbMemberInMapper.insert(memberIn);
shopUser.setAmount(shopUser.getAmount().add(amount)); memberIn.setMerchantId(Integer.valueOf(shopInfo.getMerchantId()));
shopUser.setUpdatedAt(System.currentTimeMillis()); memberIn.setAmount(amount);
if (StringUtils.isBlank(shopUser.getUserId())) { memberIn.setUserId(shopUser.getId());
TbUserInfo tbUserInfo = tbUserInfoMapper.selectByPhone(shopUser.getTelephone()); memberIn.setCode(shopUser.getCode());
if (tbUserInfo != null) { memberIn.setStatus("0");
shopUser.setUserId(tbUserInfo.getId().toString()); memberIn.setCreateTime(new Date());
} memberIn.setTradeNo("cash".concat(SnowFlakeUtil.generateOrderNo()));
} memberIn.setShopId(shopId);
tbShopUserMapper.updateByPrimaryKeySelective(shopUser); tbMemberInMapper.insert(memberIn);
TbShopUserFlow flow = new TbShopUserFlow(); shopUser.setAmount(shopUser.getAmount().add(amount));
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.setUpdatedAt(System.currentTimeMillis()); 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); tbShopUserMapper.updateByPrimaryKeySelective(shopUser);
flow = new TbShopUserFlow(); flow.get().setShopUserId(shopUser.getId());
flow.setShopUserId(shopUser.getId()); flow.get().setBizCode("cashMemberIn");
flow.setBizCode("scanMemberAwardIn"); flow.get().setType("+");
flow.setType("+"); flow.get().setBizName("线下充值");
flow.setBizName("充值活动奖励"); flow.get().setAmount(amount);
flow.setAmount(awardAmount); flow.get().setBalance(shopUser.getAmount());
flow.setBalance(shopUser.getAmount()); flow.get().setCreateTime(new Date());
flow.setCreateTime(new Date()); flow.get().setIsReturn("0");
flow.setIsReturn("0"); tbShopUserFlowMapper.insert(flow.get());
tbShopUserFlowMapper.insert(flow);
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 jsonObject = new JSONObject();
jsonObject.put("token", token); jsonObject.put("token", token);
@@ -712,10 +717,10 @@ public class MemberService {
JSONObject baObj = new JSONObject(); JSONObject baObj = new JSONObject();
baObj.put("userId", shopUser.getUserId()); baObj.put("userId", shopUser.getUserId());
baObj.put("shopId", shopInfo.getId()); 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("balance", shopUser.getAmount());
baObj.put("type", "充值"); baObj.put("type", "充值");
baObj.put("time", flow.getCreateTime()); baObj.put("time", flow.get().getCreateTime());
producer.balance(baObj.toString()); producer.balance(baObj.toString());

View File

@@ -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) { 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)) { if (ObjectUtil.isEmpty(orderId) || ObjectUtil.isEmpty(authCode) || ObjectUtil.isEmpty(ip)) {
return Result.fail(CodeEnum.PARAM); return Result.fail(CodeEnum.PARAM);
@@ -230,9 +229,9 @@ public class PayService {
return Result.fail(CodeEnum.NOCUSTOMER); return Result.fail(CodeEnum.NOCUSTOMER);
} }
String payType = null; String payType;
String payName = null; String payName;
String qpay = null; String qpay;
String payTypeCode = authCode.substring(0, 2);// 判断收款码 String payTypeCode = authCode.substring(0, 2);// 判断收款码
@@ -245,12 +244,17 @@ public class PayService {
payType = "wechatPay"; payType = "wechatPay";
payName = "微信支付"; payName = "微信支付";
qpay = "scanCode"; qpay = "scanCode";
} else if ("62".equals(payTypeCode)) {
return Result.fail(CodeEnum.ERRORQR);
} else if ("01".equals(payTypeCode)) {
return Result.fail(CodeEnum.ERRORQR);
} else { } 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); int count = tbShopPayTypeMapper.countSelectByShopIdAndPayType(orderInfo.getShopId(), qpay);
@@ -258,164 +262,71 @@ public class PayService {
return Result.fail(CodeEnum.PAYTYPENOEXIST); return Result.fail(CodeEnum.PAYTYPENOEXIST);
} }
TbOrderPayment payment = tbOrderPaymentMapper.selectByOrderId(orderId); utils.runFunAndTransactional(() -> {
if (ObjectUtil.isEmpty(payment) || payment == null) { TbOrderPayment payment = tbOrderPaymentMapper.selectByOrderId(orderId);
payment = new TbOrderPayment(); if (ObjectUtil.isEmpty(payment) || payment == null) {
payment.setPayTypeId("ysk"); payment = new TbOrderPayment();
payment.setAmount(ObjectUtil.isEmpty(payAmount) ? orderInfo.getOrderAmount() : payAmount); payment.setPayTypeId("ysk");
payment.setPaidAmount(orderInfo.getPayAmount()); payment.setAmount(ObjectUtil.isEmpty(payAmount) ? orderInfo.getOrderAmount() : payAmount);
payment.setHasRefundAmount(BigDecimal.ZERO); payment.setPaidAmount(orderInfo.getPayAmount());
payment.setPayName(payName); payment.setHasRefundAmount(BigDecimal.ZERO);
payment.setPayType(payType); payment.setPayName(payName);
payment.setReceived(payment.getAmount()); payment.setPayType(payType);
payment.setChangeFee(BigDecimal.ZERO); payment.setReceived(payment.getAmount());
payment.setMemberId(orderInfo.getMemberId()); payment.setChangeFee(BigDecimal.ZERO);
payment.setShopId(orderInfo.getShopId()); payment.setMemberId(orderInfo.getMemberId());
payment.setOrderId(orderInfo.getId().toString()); payment.setShopId(orderInfo.getShopId());
payment.setCreatedAt(System.currentTimeMillis()); payment.setOrderId(orderInfo.getId().toString());
payment.setAuthCode(authCode); payment.setCreatedAt(System.currentTimeMillis());
tbOrderPaymentMapper.insert(payment); payment.setAuthCode(authCode);
} else { tbOrderPaymentMapper.insert(payment);
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<String, Object> map = BeanUtil.transBean2Map(scanPayReq);
scanPayReq.setSign(MD5Util.encrypt(map, thirdApply.getAppToken(), true));
ResponseEntity<String> 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<TbOrderDetail> detailList = mPOrderDetailMapper.selectList(new LambdaQueryWrapper<TbOrderDetail>()
.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<TbOrderDetail> detailList = mPOrderDetailMapper.selectList(new LambdaQueryWrapper<TbOrderDetail>()
.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()));
} else { } else {
reqbody = body.toString(); payment.setAuthCode(authCode);
payment.setUpdatedAt(System.currentTimeMillis());
tbOrderPaymentMapper.updateByPrimaryKey(payment);
} }
PublicResp<MainScanResp> 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)) { orderInfo.setPayAmount(ObjectUtil.isEmpty(payAmount) ? orderInfo.getOrderAmount() : payAmount);
if ("000000".equals(publicResp.getCode())) { orderInfo.setDiscountAmount(ObjectUtil.isEmpty(discountAmount) ? null : discountAmount);
MainScanResp mainScanResp = publicResp.getObjData(); orderInfo.setDiscountRatio(ObjectUtil.isNotEmpty(payAmount) ? payAmount.divide(orderInfo.getOrderAmount(), 2, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_DOWN) : null);
if ("TRADE_SUCCESS".equals(mainScanResp.getState())) { orderInfo.setPayType(qpay);
payment.setTradeNumber(mainScanResp.getPayOrderId()); 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<String, Object> map = BeanUtil.transBean2Map(scanPayReq);
scanPayReq.setSign(MD5Util.encrypt(map, thirdApply.getAppToken(), true));
ResponseEntity<String> 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()); payment.setUpdatedAt(System.currentTimeMillis());
tbOrderPaymentMapper.updateByPrimaryKeySelective(payment); tbOrderPaymentMapper.updateByPrimaryKeySelective(payment);
//处理支付成功的订单 //处理支付成功的订单
orderInfo.setStatus("closed"); orderInfo.setStatus("closed");
orderInfo.setPayOrderNo(mainScanResp.getPayOrderId()); orderInfo.setPayOrderNo(object.getJSONObject("data").get("orderNumber").toString());
tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo);
//更新购物车状态 //更新购物车状态
int cartCount = tbCashierCartMapper.updateByOrderId(orderId, "final"); int cartCount = tbCashierCartMapper.updateByOrderId(orderId, "final");
log.info("更新购物车:{}", cartCount); log.info("更新购物车:{}", cartCount);
if (ObjectUtil.isNotNull(orderInfo.getDiscountRatio()) && ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())) { //更新子单状态
tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed", orderInfo.getDiscountRatio()); tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed", orderInfo.getDiscountRatio());
} else {
tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed", null);
}
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("token", token); jsonObject.put("token", token);
@@ -433,48 +344,124 @@ public class PayService {
} }
rabbitMsgUtils.printPlaceTicket(orderInfo.getId(), false); rabbitMsgUtils.printPlaceTicket(orderInfo.getId(), false);
// 打印结算单
String tableCartKey = RedisCst.getCurrentOrderKey(orderInfo.getTableId(), String tableCartKey = RedisCst.getCurrentOrderKey(orderInfo.getTableId(),
orderInfo.getShopId()); orderInfo.getShopId());
redisUtil.del(tableCartKey); redisUtil.del(tableCartKey);
clearTableInfoCache(orderInfo); 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); payment.setUpdatedAt(System.currentTimeMillis());
} else if ("TRADE_AWAIT".equals(mainScanResp.getState())) { tbOrderPaymentMapper.updateByPrimaryKeySelective(payment);
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);
// 打印结算单 // 打印结算单
// 打印消息 // 打印消息
if (!OrderUseTypeEnum.DINE_IN_AFTER.getValue().equals(orderInfo.getUseType())) { if (!OrderUseTypeEnum.DINE_IN_AFTER.getValue().equals(orderInfo.getUseType())) {
List<TbOrderDetail> detailList = mPOrderDetailMapper.selectList(new LambdaQueryWrapper<TbOrderDetail>() List<TbOrderDetail> detailList = mPOrderDetailMapper.selectList(new LambdaQueryWrapper<TbOrderDetail>()
.eq(TbOrderDetail::getOrderId, orderInfo.getId()) .eq(TbOrderDetail::getOrderId, orderInfo.getId())
.eq(TbOrderDetail::getStatus, "closed")); .eq(TbOrderDetail::getStatus, "closed"));
rabbitMsgUtils.printDishesTicket(orderInfo.getId(), false, detailList.toArray(new TbOrderDetail[0])); 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); // orderInfo.setStatus("fail");
String tableCartKey = RedisCst.getCurrentOrderKey(orderInfo.getTableId(), // orderInfo.setPayOrderNo(payment.getTradeNumber());
orderInfo.getShopId()); // tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo);
redisUtil.del(tableCartKey);
clearTableInfoCache(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<MainScanResp> 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<TbOrderDetail> detailList = mPOrderDetailMapper.selectList(new LambdaQueryWrapper<TbOrderDetail>()
.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) { 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) { public Result accountPay(String orderId, String memberId, String token, String memberAccount, BigDecimal payAmount, BigDecimal discountAmount) {
if (ObjectUtil.isEmpty(orderId)) { if (ObjectUtil.isEmpty(orderId)) {
if (ObjectUtil.isEmpty(memberAccount)) { if (ObjectUtil.isEmpty(memberAccount)) {
@@ -628,7 +614,6 @@ public class PayService {
if (ObjectUtil.isNotEmpty(memberAccount)) { if (ObjectUtil.isNotEmpty(memberAccount)) {
if (!memberAccount.startsWith("46")) { if (!memberAccount.startsWith("46")) {
return Result.fail(CodeEnum.ERRORQR); return Result.fail(CodeEnum.ERRORQR);
} }
@@ -645,7 +630,6 @@ public class PayService {
if (N.gt(orderInfo.getOrderAmount(), user.getAmount())) { if (N.gt(orderInfo.getOrderAmount(), user.getAmount())) {
return Result.fail(CodeEnum.MEMBERINSUFFICIENTFUNDS); return Result.fail(CodeEnum.MEMBERINSUFFICIENTFUNDS);
} }
if (ObjectUtil.isEmpty(payAmount) || ObjectUtil.isNull(payAmount)) { if (ObjectUtil.isEmpty(payAmount) || ObjectUtil.isNull(payAmount)) {
payAmount = orderInfo.getOrderAmount(); payAmount = orderInfo.getOrderAmount();
} }
@@ -653,43 +637,44 @@ public class PayService {
user.setConsumeAmount(user.getConsumeAmount().add(payAmount)); user.setConsumeAmount(user.getConsumeAmount().add(payAmount));
user.setConsumeNumber(user.getConsumeNumber() + 1); user.setConsumeNumber(user.getConsumeNumber() + 1);
user.setUpdatedAt(System.currentTimeMillis()); user.setUpdatedAt(System.currentTimeMillis());
tbShopUserMapper.updateByPrimaryKeySelective(user); TbShopUser finalUser = user;
BigDecimal finalPayAmount = payAmount;
TbShopUserFlow flow = new TbShopUserFlow(); TbShopUserFlow flow = new TbShopUserFlow();
flow.setShopUserId(user.getId()); utils.runFunAndTransactional(() -> {
flow.setBizCode("accountPay"); tbShopUserMapper.updateByPrimaryKeySelective(finalUser);
flow.setBizName("余额支付"); flow.setShopUserId(finalUser.getId());
flow.setType("-"); flow.setBizCode("accountPay");
flow.setAmount(payAmount); flow.setBizName("余额支付");
flow.setBalance(user.getAmount()); flow.setType("-");
flow.setCreateTime(new Date()); flow.setAmount(finalPayAmount);
flow.setIsReturn("0"); flow.setBalance(finalUser.getAmount());
tbShopUserFlowMapper.insert(flow); flow.setCreateTime(new Date());
flow.setIsReturn("0");
tbShopUserFlowMapper.insert(flow);
orderInfo.setPayAmount(ObjectUtil.isEmpty(payAmount) ? orderInfo.getOrderAmount() : payAmount); orderInfo.setPayAmount(ObjectUtil.isEmpty(finalPayAmount) ? orderInfo.getOrderAmount() : finalPayAmount);
orderInfo.setDiscountAmount(ObjectUtil.isEmpty(discountAmount) ? null : discountAmount); 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.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.setStaffId(ObjectUtil.isEmpty(staff) ? null : staff.getId());
orderInfo.setUserId(user.getUserId()); orderInfo.setUserId(finalUser.getUserId());
orderInfo.setMemberId(user.getId().toString()); orderInfo.setMemberId(finalUser.getId().toString());
orderInfo.setPayType("deposit"); orderInfo.setPayType("deposit");
orderInfo.setStatus("closed"); orderInfo.setStatus("closed");
orderInfo.setPayOrderNo("deposit".concat(SnowFlakeUtil.generateOrderNo())); orderInfo.setPayOrderNo("deposit".concat(SnowFlakeUtil.generateOrderNo()));
tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo);
//更新购物车状态 //更新购物车状态
int cartCount = tbCashierCartMapper.updateByOrderId(orderId, "final"); int cartCount = tbCashierCartMapper.updateByOrderId(orderId, "final");
if (ObjectUtil.isNotNull(orderInfo.getDiscountRatio()) && ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())) { if (ObjectUtil.isNotNull(orderInfo.getDiscountRatio()) && ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())) {
tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed", orderInfo.getDiscountRatio()); tbOrderDetailMapper.updateStatusByOrderId(Integer.parseInt(orderId), "closed", orderInfo.getDiscountRatio());
} else { } else {
tbOrderDetailMapper.updateStatusByOrderId(Integer.valueOf(orderId), "closed", null); tbOrderDetailMapper.updateStatusByOrderId(Integer.parseInt(orderId), "closed", null);
} }
log.info("更新购物车:{}", cartCount);
return null;
});
log.info("更新购物车:{}", cartCount);
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("token", token); jsonObject.put("token", token);
@@ -905,42 +890,46 @@ public class PayService {
} }
TbShopUserFlow userFlow = new TbShopUserFlow(); utils.runFunAndTransactional(() -> {
userFlow.setAmount((payAmount != null && discountAmount != null) ? payAmount : orderInfo.getOrderAmount()); TbShopUserFlow userFlow = new TbShopUserFlow();
userFlow.setBalance(shopUser.getAmount().subtract((payAmount != null && discountAmount != null) ? payAmount : orderInfo.getOrderAmount())); userFlow.setAmount((payAmount != null && discountAmount != null) ? payAmount : orderInfo.getOrderAmount());
userFlow.setShopUserId(shopUser.getId()); userFlow.setBalance(shopUser.getAmount().subtract((payAmount != null && discountAmount != null) ? payAmount : orderInfo.getOrderAmount()));
userFlow.setBizCode("vipCardCash"); userFlow.setShopUserId(shopUser.getId());
userFlow.setBizName("余额支付"); userFlow.setBizCode("vipCardCash");
userFlow.setCreateTime(DateUtil.date()); userFlow.setBizName("余额支付");
userFlow.setType("-"); userFlow.setCreateTime(DateUtil.date());
userFlow.setIsReturn("0"); userFlow.setType("-");
mpShopUserFlowMapper.insert(userFlow); userFlow.setIsReturn("0");
mpShopUserFlowMapper.insert(userFlow);
if (payAmount != null && discountAmount != null) { if (payAmount != null && discountAmount != null) {
orderInfo.setPayAmount(payAmount); orderInfo.setPayAmount(payAmount);
orderInfo.setDiscountAmount(discountAmount); orderInfo.setDiscountAmount(discountAmount);
orderInfo.setDiscountRatio(ObjectUtil.isNotEmpty(payAmount) ? payAmount.divide(orderInfo.getOrderAmount(), 2, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_DOWN) : null); orderInfo.setDiscountRatio(ObjectUtil.isNotEmpty(payAmount) ? payAmount.divide(orderInfo.getOrderAmount(), 2, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_DOWN) : null);
} else { } else {
orderInfo.setPayAmount(orderInfo.getOrderAmount()); orderInfo.setPayAmount(orderInfo.getOrderAmount());
} }
orderInfo.setPayType("deposit"); orderInfo.setPayType("deposit");
orderInfo.setStatus("closed"); orderInfo.setStatus("closed");
orderInfo.setPayOrderNo("deposit".concat(SnowFlakeUtil.generateOrderNo())); orderInfo.setPayOrderNo("deposit".concat(SnowFlakeUtil.generateOrderNo()));
orderInfo.setMemberId(vipUserId.toString()); orderInfo.setMemberId(vipUserId.toString());
tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo);
//更新购物车状态 //更新购物车状态
int cartCount = tbCashierCartMapper.updateByOrderId(String.valueOf(orderId), "final"); int cartCount = tbCashierCartMapper.updateByOrderId(String.valueOf(orderId), "final");
if (ObjectUtil.isNotNull(orderInfo.getDiscountRatio()) && ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())) { if (ObjectUtil.isNotNull(orderInfo.getDiscountRatio()) && ObjectUtil.isNotEmpty(orderInfo.getDiscountRatio())) {
tbOrderDetailMapper.updateStatusByOrderId(orderId, "closed", orderInfo.getDiscountRatio()); tbOrderDetailMapper.updateStatusByOrderId(orderId, "closed", orderInfo.getDiscountRatio());
} else { } else {
tbOrderDetailMapper.updateStatusByOrderId(orderId, "closed", null); tbOrderDetailMapper.updateStatusByOrderId(orderId, "closed", null);
} }
log.info("更新购物车:{}", cartCount);
return null;
});
log.info("更新购物车:{}", cartCount);
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("token", token); jsonObject.put("token", token);
@@ -1036,9 +1025,6 @@ public class PayService {
return orderInfo; return orderInfo;
}); });
log.info("事务已提交");
ThreadUtil.sleep(10, TimeUnit.SECONDS);
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("token", token); jsonObject.put("token", token);
jsonObject.put("type", "create"); jsonObject.put("type", "create");