diff --git a/src/main/java/com/example/demo/service/cash/CashCollectionService.java b/src/main/java/com/example/demo/service/cash/CashCollectionService.java index 9667928..36c1f1a 100644 --- a/src/main/java/com/example/demo/service/cash/CashCollectionService.java +++ b/src/main/java/com/example/demo/service/cash/CashCollectionService.java @@ -1,6 +1,7 @@ package com.example.demo.service.cash; import com.example.demo.domain.entity.CashRecord; +import com.example.demo.domain.entity.GOrder; import com.example.demo.domain.entity.RechargeActivity; import com.example.demo.domain.entity.User; import com.example.demo.domain.vo.cash.CashCollection; @@ -39,4 +40,6 @@ public interface CashCollectionService { CashCollection selectById(CashCollection cashCollection); //根据goldcoin订单号查询收款订单 CashCollection selectByGoldCoinOrderCode(String orderNo); + //同步事务方法 + void processBatch(List gOrders); } diff --git a/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java index 4b0ba19..1541a4b 100644 --- a/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java @@ -30,6 +30,7 @@ import java.time.ZoneOffset; import java.util.Arrays; import java.util.List; import java.util.UUID; +import java.util.stream.Collectors; /** * @program: gold-java @@ -332,91 +333,108 @@ public User getNameAndMarket(Integer jwcode) { //同步g_order订单到cash_record表 @Override - @Transactional(rollbackFor = Exception.class) public Object syncToCashRecord() { + int total = 0; while (true) { - List gOrders = cashCollectionMapper.getUnSync(100); + List gOrders = cashCollectionMapper.getUnSync(50); if (CollectionUtils.isEmpty(gOrders)) { break; } - for (GOrder gOrder : gOrders) { - CashRecord cashRecord = new CashRecord(); - //构建基础信息 - cashRecord.setOrderType(1); - cashRecord.setJwcode(gOrder.getJwcode()); - String name=cashCollectionMapper.getNameByJwcode(gOrder.getJwcode()); - if (name!=null){ - cashRecord.setName(name); - }else cashRecord.setName("未知"); + try { + // 每批独立事务 + processBatch(gOrders); + total += gOrders.size(); + log.info("✅ 同步完成一批,数量: {}, 累计: {}", gOrders.size(), total); + } catch (Exception e) { + + List failedIds = gOrders.stream().map(GOrder::getId).collect(Collectors.toList()); + log.error("失败订单ID: {}", failedIds); + // 可存入 error_log 表,供人工处理 + + // 这里选择继续下一批(容忍部分失败) + } + + if (gOrders.size() < 50) { + break; // 最后一批 + } + } + return "同步完毕,成功处理 " + total + " 条"; + } + @Override + @Transactional(rollbackFor = Exception.class) + public void processBatch(List gOrders) { + for (GOrder gOrder : gOrders) { + CashRecord cashRecord = new CashRecord(); + //构建基础信息 + cashRecord.setOrderType(1); + cashRecord.setJwcode(gOrder.getJwcode()); + String name=cashCollectionMapper.getNameByJwcode(gOrder.getJwcode()); + if (name!=null){ + cashRecord.setName(name); + }else cashRecord.setName("未知"); - cashRecord.setMarket(cashCollectionMapper.getMarketByJwcode(gOrder.getJwcode())); - if (gOrder.getType().equals("gold")){ //充金豆 + cashRecord.setMarket(cashCollectionMapper.getMarketByJwcode(gOrder.getJwcode())); + if (gOrder.getType().equals("gold")){ //充金豆 cashRecord.setActivity("Link日常充值"); cashRecord.setGoodsName("Link充值金豆"); - cashRecord.setRemark("Link充值金豆"); - cashRecord.setNumUnit("个"); - cashRecord.setPermanentGold(0); - cashRecord.setGoodNum(gOrder.getCount()); + cashRecord.setRemark("Link充值金豆"); + cashRecord.setNumUnit("个"); + cashRecord.setPermanentGold(0); + cashRecord.setGoodNum(gOrder.getCount()); - } - if (gOrder.getType().equals("gold_coin")){//充金币 - cashRecord.setActivity("Link日常充值"); - cashRecord.setGoodsName("Link充值金币"); - cashRecord.setRemark("Link充值金币"); - cashRecord.setPermanentGold(gOrder.getCount()); - cashRecord.setGoodNum(0); + } + if (gOrder.getType().equals("gold_coin")){//充金币 + cashRecord.setActivity("Link日常充值"); + cashRecord.setGoodsName("Link充值金币"); + cashRecord.setRemark("Link充值金币"); + cashRecord.setPermanentGold(gOrder.getCount()*100); + cashRecord.setGoodNum(0); - } - cashRecord.setOrderCode(gOrder.getOrderNo()); - if (gOrder != null) { - switch (gOrder.getPayStyle()) { - case 3: - cashRecord.setPayType("IOS内购"); - cashRecord.setBankCode(gOrder.getIosTransactionId()); - cashRecord.setReceivedMarket("4"); - cashRecord.setPayload("IOS"); - break; - case 5: - cashRecord.setPayType("Stripe-链接收款"); - cashRecord.setReceivedMarket("13"); - cashRecord.setPayload("Stripe"); - break; - case 6: - cashRecord.setPayType("PaymentAsia-链接收款"); - cashRecord.setReceivedMarket("13"); - cashRecord.setPayload("PaymentAsia"); - break; - case 7: - cashRecord.setPayType("Ipay88-链接收款"); - cashRecord.setReceivedMarket("5"); - cashRecord.setPayload("Ipay88"); - break; - case 9: - cashRecord.setPayType("FistData"); - cashRecord.setReceivedMarket("4"); - cashRecord.setBankCode(gOrder.getFirstdataIpgTransactionId()); - cashRecord.setPayload("FistData"); - break; - default: - break; - } - } - cashRecord.setFreeGold(0); - cashRecord.setPaymentCurrency(""); - cashRecord.setPaymentAmount(BigDecimal.valueOf(0)); - cashRecord.setPayTime(LocalDateTime.ofEpochSecond(gOrder.getSuccessTime(), 0, ZoneOffset.UTC)); - cashRecord.setStatus(3); - cashRecord.setSubmitterId(99999); - //存入现金库 - cashCollectionMapper.add(cashRecord); - cashCollectionMapper.markSynced(gOrder.getId()); } - log.info("同步完成一批,数量 {}", gOrders.size()); - if (gOrders.size() < 100) { - break; // 最后一批 + cashRecord.setOrderCode(gOrder.getOrderNo()); + if (gOrder != null) { + switch (gOrder.getPayStyle()) { + case 3: + cashRecord.setPayType("IOS内购"); + cashRecord.setBankCode(gOrder.getIosTransactionId()); + cashRecord.setReceivedMarket("4"); + cashRecord.setPayload("IOS"); + break; + case 5: + cashRecord.setPayType("Stripe-链接收款"); + cashRecord.setReceivedMarket("13"); + cashRecord.setPayload("Stripe"); + break; + case 6: + cashRecord.setPayType("PaymentAsia-链接收款"); + cashRecord.setReceivedMarket("13"); + cashRecord.setPayload("PaymentAsia"); + break; + case 7: + cashRecord.setPayType("Ipay88-链接收款"); + cashRecord.setReceivedMarket("5"); + cashRecord.setPayload("Ipay88"); + break; + case 9: + cashRecord.setPayType("FistData"); + cashRecord.setReceivedMarket("4"); + cashRecord.setBankCode(gOrder.getFirstdataIpgTransactionId()); + cashRecord.setPayload("FistData"); + break; + default: + break; + } } + cashRecord.setFreeGold(0); + cashRecord.setPaymentCurrency(""); + cashRecord.setPaymentAmount(BigDecimal.valueOf(0)); + cashRecord.setPayTime(LocalDateTime.ofEpochSecond(gOrder.getSuccessTime(), 0, ZoneOffset.UTC)); + cashRecord.setStatus(3); + cashRecord.setSubmitterId(99999); + //存入现金库 + cashCollectionMapper.add(cashRecord); + cashCollectionMapper.markSynced(gOrder.getId()); } - return "同步完毕"; } @Override diff --git a/src/main/java/com/example/demo/serviceImpl/coin/ConsumeServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/ConsumeServiceImpl.java index e7f5cb5..5c0ad1c 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/ConsumeServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/ConsumeServiceImpl.java @@ -170,7 +170,7 @@ public class ConsumeServiceImpl implements ConsumeService { result = result.replaceAll("[\r\n]", ""); //返回状态1加成功2减成功其他失败 -5 金币不足 -6 类型错误 -7签名错误 - if(!result.equals("2")){ + if(!result.equals("2")){ result= GoldTistV2.addCoinNew(userGoldRecord.getJwcode().toString(), 65, (double) (userGoldRecord.getPermanentGold() + userGoldRecord.getFreeDecember() + userGoldRecord.getFreeJune() + userGoldRecord.getTaskGold()) / 100, userGoldRecord.getRemark(), 0, consumeUser.getAdminName(), userGoldRecord.getGoodsName());