记得上下班打卡 | git大法好,push需谨慎

Commit 4363a2c8 authored by anjiabin's avatar anjiabin

支付处理openid为error问题-暂时前端处理

parent a2cfdafa
drop table if exists bi_ticket_access_records;
create table dev_ln_scene.bi_ticket_access_records
(
mid bigint unsigned auto_increment
primary key,
user_id varchar(64) not null comment '用户id',
access_type varchar(30) null comment '访问类型: 详情页now_tk_detail,票种页now_tk_ticket,下单页now_tk_order,支付操作now_tk_pay',
performance_id varchar(100) null comment '演出id',
order_id varchar(100) null comment '订单id',
order_code varchar(64) null comment '订单编号',
ip_address varchar(100) null comment '操作ip',
area varchar(200) null comment 'ip全名称',
area_province varchar(100) null comment 'ip名称省',
area_city varchar(100) null comment 'ip名称市',
area_county varchar(100) null comment 'ip名称县',
created_at timestamp default CURRENT_TIMESTAMP not null
);
package com.liquidnet.service.kylin.dto.vo.mongo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: TODO
* @class: KylinIpArea
* @Package com.liquidnet.service.kylin.dto.vo.mongo
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/11/24 11:57
*/
@Data
@ApiModel
public class KylinIpAreaVo implements Serializable,Cloneable{
@ApiModelProperty(value = "mid")
private String mid;
@ApiModelProperty(value = "ipBegin")
private String ipBegin;
@ApiModelProperty(value = "ipBegin")
private long ipBeginLong;
@ApiModelProperty(value = "ipEnd")
private String ipEnd;
@ApiModelProperty(value = "ipEnd")
private long ipEndLong;
@ApiModelProperty(value = "area")
private String area;
@ApiModelProperty(value = "province")
private String province;
@ApiModelProperty(value = "city")
private String city;
@ApiModelProperty(value = "county")
private String county;
@ApiModelProperty(value = "address")
private String address;
@ApiModelProperty(value = "createdAt")
private String createdAt;
private static final KylinIpAreaVo obj = new KylinIpAreaVo();
public static KylinIpAreaVo getNew() {
try {
return (KylinIpAreaVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new KylinIpAreaVo();
}
}
}
package com.liquidnet.commons.lang.util;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: TODO
* @class: IPUtil
* @Package com.liquidnet.commons.lang.util
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/11/24 13:29
*/
public class IPUtil {
/**
* ip地址转成long型数字
* 将IP地址转化成整数的方法如下:
* 1、通过String的split方法按.分隔得到4个长度的数组
* 2、通过左移位操作(<<)给每一段的数字加权,第一段的权为2的24次方,第二段的权为2的16次方,第三段的权为2的8次方,最后一段的权为1
* @param strIp
* @return
*/
public static long ipToLong(String strIp) {
String[]ip = strIp.split("\\.");
return (Long.parseLong(ip[0]) << 24) + (Long.parseLong(ip[1]) << 16) + (Long.parseLong(ip[2]) << 8) + Long.parseLong(ip[3]);
}
/**
* 将十进制整数形式转换成127.0.0.1形式的ip地址
* 将整数形式的IP地址转化成字符串的方法如下:
* 1、将整数值进行右移位操作(>>>),右移24位,右移时高位补0,得到的数字即为第一段IP。
* 2、通过与操作符(&)将整数值的高8位设为0,再右移16位,得到的数字即为第二段IP。
* 3、通过与操作符吧整数值的高16位设为0,再右移8位,得到的数字即为第三段IP。
* 4、通过与操作符吧整数值的高24位设为0,得到的数字即为第四段IP。
* @param longIp
* @return
*/
public static String longToIP(long longIp) {
StringBuffer sb = new StringBuffer("");
// 直接右移24位
sb.append(String.valueOf((longIp >>> 24)));
sb.append(".");
// 将高8位置0,然后右移16位
sb.append(String.valueOf((longIp & 0x00FFFFFF) >>> 16));
sb.append(".");
// 将高16位置0,然后右移8位
sb.append(String.valueOf((longIp & 0x0000FFFF) >>> 8));
sb.append(".");
// 将高24位置0
sb.append(String.valueOf((longIp & 0x000000FF)));
return sb.toString();
}
public static void main(String[] args) {
System.out.println(ipToLong("219.239.110.138"));
System.out.println(longToIP(3689901706l));
}
}
package com.liquidnet.service.kylin;
import com.liquidnet.commons.lang.util.IPUtil;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinIpAreaVo;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: TODO
* @class: TestMysqlToMongo
* @Package com.liquidnet.service.kylin
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/11/24 13:33
*/
@Slf4j
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class TestMysqlToMongo {
@Autowired
private MongoTemplate mongoTemplate;
// public void mysqlIpDataToMongo(){
// String driverClassName = "com.mysql.cj.jdbc.Driver"; //启动驱动
//// String url = "jdbc:mysql://pc-2ze6z2hxkug559q79.mysql.polardb.rds.aliyuncs.com:3306/mall"; //设置连接路径
//// String url = "jdbc:mysql://zhengzai.mysql.polardb.rds.aliyuncs.com:3306/mall";
//// String username = "readonly"; //数据库用户名
//// String password = "ZWDsf8Fy"; //数据库连接密码
//
// String url = "jdbc:mysql://localhost:3306/dev_ln_scene"; //设置连接路径
// String username = "root"; //数据库用户名
// String password = "root123456"; //数据库连接密码
//
//
// Connection conn = null; //连接
// PreparedStatement pstmt = null; //使用预编译语句
// ResultSet rs = null; //获取的结果集
// String sqlStr = "insert into bi_ip_area (ip_begin, ip_end, area, province, city, county, address) values(?,?,?,?,?,?,?)";
//
// int totalNum = recordArrayList.size();
// int pageSize = 1000;
// int pageNum = 0;
// int totalPage = totalNum % pageSize == 0 ? totalNum / pageSize : (totalNum / pageSize) + 1;;
// try {
// try {
// Class.forName(driverClassName); //执行驱动
// } catch (ClassNotFoundException e) {
// e.printStackTrace();
// }
// conn = DriverManager.getConnection(url, username, password); //获取连接
// pstmt = conn.prepareStatement(sqlStr);
//
// conn.setAutoCommit(false);//自动提交记得关了....
//
// int count = 0;
//
// long timeStart = System.currentTimeMillis();
// for(String[] recordArray: recordArrayList){
// pstmt.setString(1,recordArray[0]);
// pstmt.setString(2,recordArray[1]);
// pstmt.setString(3,recordArray[2]);
// pstmt.setString(4,recordArray[4]);
// pstmt.setString(5,recordArray[5]);
// pstmt.setString(6,recordArray[6]);
// pstmt.setString(7,recordArray[3]);
//
// pstmt.addBatch();
//
// count ++;
//
// if(count % pageSize == 0){
// pageNum++;
// pstmt.executeBatch();
//
// conn.commit();
//
// pstmt.clearBatch();
// System.out.println("执行第"+pageNum+"页提交--->>>"+"执行第"+((pageNum-1)*pageSize+1)+"行-第"+pageNum*pageSize+"行 耗时"+(System.currentTimeMillis()-timeStart)/1000+"秒");
// timeStart = System.currentTimeMillis();
// }
// }
// if(totalNum % pageSize > 0){
// pageNum++;
// System.out.println("执行第"+pageNum+"页提交--->>>"+"执行第"+((pageNum-1)*pageSize+1)+"行-第"+((pageNum-1)*pageSize+totalNum % pageSize)+"行 耗时"+(System.currentTimeMillis()-timeStart)/1000+"秒");
// pstmt.executeBatch();
//
// conn.commit();
// }
//
// pstmt.close();
//
// System.out.println("共执行插入"+count);
//
// } catch (SQLException e) {
// e.printStackTrace();
// } finally {
// //关闭资源,倒关
// try {
// if (rs != null) rs.close();
// if (pstmt != null) pstmt.close();
// if (conn != null) conn.close(); //必须要关
// } catch (Exception e) {
// e.printStackTrace();
// System.out.println("关闭连接异常");
// }
// }
//
// }
@Test
public void excuteBatchMysqlToMongo(){
String driverClassName = "com.mysql.cj.jdbc.Driver"; //启动驱动
// String url = "jdbc:mysql://localhost:3306/dev_ln_scene"; //设置连接路径
// String username = "root"; //数据库用户名
// String password = "root123456"; //数据库连接密码
String url = "jdbc:mysql://39.107.71.112:3308/dev_ln_scene"; //设置连接路径
String username = "root"; //数据库用户名
String password = "Zhengzai@rd2U#"; //数据库连接密码
Connection con = null; //连接
PreparedStatement pstmt = null; //使用预编译语句
ResultSet rs = null; //获取的结果集
long timeStart = System.currentTimeMillis();
try {
Class.forName(driverClassName); //执行驱动
con = DriverManager.getConnection(url, username, password); //获取连接
String sqlAllCount = "select count(0) as 'allCount' from bi_ip_area t"; //设置的预编译语句格式
pstmt = con.prepareStatement(sqlAllCount);
ResultSet allCount = pstmt.executeQuery();
int allCountResult = 0;//共多少条
int rowCount = 0;//当前多少条
boolean isBreak = false;//是否终端循环
while (allCount.next()) {
allCountResult = allCount.getInt("allCount");
}
allCount.close();
pstmt.close();
int count = 5000;
int page = 0;
do {
long timeStart1 = System.currentTimeMillis();
ArrayList<KylinIpAreaVo> kylinIpAreaVoArrayList = new ArrayList();
KylinIpAreaVo kylinIpAreaVo = null;
//获取ip
String sql = "select * from bi_ip_area t limit " + count * page + " ," + count; //设置的预编译语句格式
pstmt = con.prepareStatement(sql);
ResultSet ipData = pstmt.executeQuery();
while (ipData.next()) {
kylinIpAreaVo = KylinIpAreaVo.getNew();
kylinIpAreaVo.setMid(ipData.getObject("mid").toString());
kylinIpAreaVo.setIpBegin(ipData.getObject("ip_begin").toString());
kylinIpAreaVo.setIpBeginLong(IPUtil.ipToLong(ipData.getObject("ip_begin").toString()));
kylinIpAreaVo.setIpEnd(ipData.getObject("ip_end").toString());
kylinIpAreaVo.setIpEndLong(IPUtil.ipToLong(ipData.getObject("ip_end").toString()));
kylinIpAreaVo.setArea(ipData.getObject("area").toString());
kylinIpAreaVo.setProvince(ipData.getObject("province").toString());
kylinIpAreaVo.setCity(ipData.getObject("city").toString());
kylinIpAreaVo.setCounty(ipData.getObject("county").toString());
kylinIpAreaVo.setAddress(ipData.getObject("address").toString());
kylinIpAreaVo.setCreatedAt(ipData.getObject("created_at").toString());
kylinIpAreaVoArrayList.add(kylinIpAreaVo);
}
mongoTemplate.insert(kylinIpAreaVoArrayList, KylinIpAreaVo.class.getSimpleName());
System.out.println("执行insert 第 "+(page+1)+"页 总耗时==="+(System.currentTimeMillis()-timeStart1)/1000+"秒");
ipData.last();
rowCount += ipData.getRow();
if (allCountResult > rowCount) {
isBreak = true;
page += 1;
} else {
isBreak = false;
}
} while (isBreak);
System.out.println("执行insert总耗时==="+(System.currentTimeMillis()-timeStart)/1000+"秒");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
//关闭资源,倒关
try {
if (rs != null) rs.close();
if (pstmt != null) pstmt.close();
if (con != null) con.close(); //必须要关
} catch (Exception e) {
}
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment