package com.taoke.autopay; import com.taoke.autopay.dao.KeyOrderMapper; import com.taoke.autopay.entity.KeyOrder; import com.taoke.autopay.utils.Constant; import com.taoke.autopay.utils.TimeUtil; import net.sf.json.JSONObject; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import org.yeshi.utils.StringUtil; import javax.annotation.Resource; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.math.BigDecimal; import java.util.*; /** * @author hxh * @title: LogTest * @description: TODO * @date 2024/7/19 12:15 */ @SpringBootTest public class LogTest { @Resource private KeyOrderMapper keyOrderMapper; @Test public void parseLog() throws FileNotFoundException { String[] days = new String[]{"2024-07-15","2024-07-16","2024-07-17","2024-07-18"}; for(String day:days) { Scanner scanner = new Scanner(new FileInputStream("D:\\文件传输\\交易\\日志文件\\xcp\\pay.log.gz."+day)); while (scanner.hasNextLine()) { String line = scanner.nextLine(); if (!line.contains("setOrderNo:")) { continue; } String[] sts = line.split("setOrderNo:")[1].split("-"); String id = sts[0].trim(); String money = sts[sts.length - 1].replace("¥", ""); System.out.println(id + ":" + money); KeyOrder order = keyOrderMapper.selectById(id); if(order!=null){ KeyOrder update=new KeyOrder(); update.setId(id); update.setOrderMoney(new BigDecimal(money)); keyOrderMapper.updateByPrimaryKeySelective(update); } } scanner.close(); } } @Test public void parseLogForChannel() throws FileNotFoundException { String[] days = new String[]{"2024-07-15","2024-07-16","2024-07-17","2024-07-18"}; for(String day:days) { Set bps=new HashSet<>(); Set cyx=new HashSet<>(); Scanner scanner = new Scanner(new FileInputStream("D:\\文件传输\\交易\\日志文件\\xcp\\info.log.gz."+day)); while (scanner.hasNextLine()) { String line = scanner.nextLine(); if (!line.contains("抖音订单查询")) { continue; } line = line.split("dyorderApiLogger -")[1]; int startIndex = line.indexOf(":"); String tag = line.substring(0,startIndex).trim(); String id = line.substring(startIndex + 1,line.indexOf("-")).trim(); String data = line.substring(line.indexOf("-")+1); if(tag.contains("(1)")){ cyx.add(id); }else if(tag.contains("(2)")){ bps.add(id); } } Set totalOrderNos=new HashSet<>(); totalOrderNos.addAll(bps); totalOrderNos.addAll(cyx); Map orderChannelMap = new HashMap<>(); // 交集里面的订单不属于任何一个渠道 Set intersection = new HashSet<>(bps); intersection.retainAll(cyx); for(String r:intersection){ orderChannelMap.put(r,null); } // 差集属于bps Set difference = new HashSet<>(cyx); difference.removeAll(bps); for(String r:difference){ orderChannelMap.put(r,Constant.ORDER_CHANNEL_BPS); } // 当天订单与totalOrderNos的所有差集属于cyx Date minCreateTime =new Date(TimeUtil.convertToTimeTemp(day,"yyyy-MM-dd")); Date maxCreateTime =TimeUtil.getNextDay(1,new Date(TimeUtil.convertToTimeTemp(day,"yyyy-MM-dd")).getTime()); KeyOrderMapper.DaoQuery query=new KeyOrderMapper.DaoQuery(); query.minCreateTime =minCreateTime; query.maxCreateTime =maxCreateTime; query.start = 0; query.count =10000; query.state = KeyOrder.STATE_PAY; List orders = keyOrderMapper.list(query); Set dayOrderNos=new HashSet<>(); for(KeyOrder o:orders){ if(!StringUtil.isNullOrEmpty(o.getOrderNo())) { dayOrderNos.add(o.getOrderNo()); } } dayOrderNos.removeAll(totalOrderNos); for(String r:dayOrderNos){ orderChannelMap.put(r,Constant.ORDER_CHANNEL_CYX); } for(Iterator its= orderChannelMap.keySet().iterator();its.hasNext();){ String orderNo = its.next(); query=new KeyOrderMapper.DaoQuery(); query.orderNo = orderNo; query.start=0; query.count =100; orders = keyOrderMapper.list(query); for(KeyOrder order:orders){ if(order.getState()== KeyOrder.STATE_PAY){ String channel = orderChannelMap.get(orderNo); if(channel!=null){ KeyOrder update=new KeyOrder(); update.setId(order.getId()); update.setOrderChannel(channel); update.setUpdateTime(new Date()); keyOrderMapper.updateByPrimaryKeySelective(update); } } } } scanner.close(); } } }