diff --git a/Test/TestChain/pom.xml b/Test/TestChain/pom.xml new file mode 100644 index 00000000..f49830d5 --- /dev/null +++ b/Test/TestChain/pom.xml @@ -0,0 +1,36 @@ + + + 4.0.0 + + org.example + TestChain + 1.0-SNAPSHOT + + + 8 + 8 + + + + + + cn.dreamdt + audit-sdk + system + 1.0 + ${project.basedir}/src/main/resources/lib/audit-sdk-1.5.2-jar-with-dependencies.jar + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + \ No newline at end of file diff --git a/Test/TestChain/src/main/java/com/renchao/Demo01.java b/Test/TestChain/src/main/java/com/renchao/Demo01.java new file mode 100644 index 00000000..37769141 --- /dev/null +++ b/Test/TestChain/src/main/java/com/renchao/Demo01.java @@ -0,0 +1,64 @@ +package com.renchao; + +import cn.dreamdt.audit.domain.AuditConfig; +import cn.dreamdt.audit.domain.MessageBean; +import cn.dreamdt.audit.main.DataAudit; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +import java.util.ArrayList; + +/** + * @author ren_chao + */ +public class Demo01 { + public static void main(String[] args) { + DataAudit dataAudit = DataAudit.create(AuditConfig.builder() + .appCode("zxzj").appKey("xxxxxxx").serverUrl("http://10.91.4.114:8090/DreamWeb") + .logFilePath("C:\\Users\\RENCHAO\\Desktop\\temp-sss\\log").chainConsumer(null).build()); + + // 数据上链 测试数据 + JSONObject bizData = new JSONObject(); + bizData.put("project_year", "2024"); + bizData.put("code", "1"); + bizData.put("name", "符合法规和数据测试数据"); + bizData.put("start_date", "2022-01-01 11:00:00"); + bizData.put("construction_content", "建立企业业务运营的基础数据平台测试数据"); + bizData.put("uuid", "230423162136mEefCn9OLj6A7DvR8St"); + //调用合约 + MessageBean messageBean = dataAudit.invoke("fact", "save", bizData,"11111"); + + + + // 数据批量上链 测试数据 + JSONArray bizDataArray = new JSONArray(); + + JSONObject bizData1 = new JSONObject(); + bizData1.put("project_year", "2024"); + bizData1.put("code", "1"); + bizData1.put("name", "符合法规和数据测试数据"); + bizData1.put("start_date", "2022-01-01 11:00:00"); + bizData1.put("construction_content", "建立企业业务运营的基础数据平台测试数据"); + bizData1.put("uuid", "230423162136mEefCn9OLj6A7DvR8St"); + bizDataArray.add(bizData1); + + JSONObject bizData2 = new JSONObject(); + bizData2.put("project_year", "2025"); + bizData2.put("code", "2"); + bizData2.put("name", "符合法规和数据测试数据111"); + bizData2.put("start_date", "2022-01-01 11:00:00"); + bizData2.put("construction_content", "建立企业业务运营的基础数据平台测试数据111"); + bizData2.put("uuid", "330423162136mEefCn9OLj6A7DvR8St"); + bizDataArray.add(bizData2); + + //调用合约 + ArrayList bizIndexList = new ArrayList<>(); + // ........ + + MessageBean messageBean2 = dataAudit.batchInvoke("EAPContract", "saveProject", bizDataArray, bizIndexList); + + + MessageBean query = dataAudit.query("supervision", "queryProject", "123456"); + + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-api/pom.xml b/carbon-dataprocess/carbon-dataprocess-api/pom.xml index 66b39501..577abf3f 100644 --- a/carbon-dataprocess/carbon-dataprocess-api/pom.xml +++ b/carbon-dataprocess/carbon-dataprocess-api/pom.xml @@ -3,7 +3,7 @@ com.jiuyv.sptcc carbon-dataprocess - 0.2.1-SNAPSHOT + 0.2.2-SNAPSHOT carbon-dataprocess-api diff --git a/carbon-dataprocess/carbon-dataprocess-service/pom.xml b/carbon-dataprocess/carbon-dataprocess-service/pom.xml index 21f1530c..4431fe65 100644 --- a/carbon-dataprocess/carbon-dataprocess-service/pom.xml +++ b/carbon-dataprocess/carbon-dataprocess-service/pom.xml @@ -4,7 +4,7 @@ com.jiuyv.sptcc carbon-dataprocess - 0.2.1-SNAPSHOT + 0.2.2-SNAPSHOT carbon-dataprocess-service diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/controller/TestController.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/controller/TestController.java index 25859dd3..e47240da 100644 --- a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/controller/TestController.java +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/controller/TestController.java @@ -4,6 +4,20 @@ import com.jiuyv.sptcc.carbon.dataprocess.service.ICalculateReductionService; import com.jiuyv.sptcc.carbon.dataprocess.service.IPushReductionService; import com.jiuyv.sptcc.carbon.dataprocess.service.IReadFileService; import com.jiuyv.sptcc.carbon.dataprocess.service.ISignResultService; +import io.netty.bootstrap.Bootstrap; +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelOption; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.SimpleChannelInboundHandler; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.pool.ChannelPoolHandler; +import io.netty.channel.pool.FixedChannelPool; +import io.netty.channel.socket.nio.NioSocketChannel; +import io.netty.handler.codec.string.StringDecoder; +import io.netty.handler.codec.string.StringEncoder; +import io.netty.util.concurrent.Future; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,11 +35,14 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; +import java.net.InetSocketAddress; import java.nio.charset.StandardCharsets; import java.util.Enumeration; import java.util.Map; import java.util.StringJoiner; import java.util.TreeMap; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; @@ -80,141 +97,81 @@ public class TestController { } - @PostMapping("/test44") - public String test44(HttpServletRequest request) { - Enumeration headerNames = request.getHeaderNames(); - while (headerNames.hasMoreElements()) { - String x = headerNames.nextElement(); - System.out.println(x + "::: " + request.getHeader(x)); - } + @GetMapping("/test44") + public String test44() { + return "OK!!!"; } - // "CARD_NO" VARCHAR2(32 CHAR), 卡号 - // "IN_TRANSACTION_SERIAL_NO" VARCHAR2(64 CHAR), 进站交易流水号 - // "IN_STATION_NAME" VARCHAR2(200 CHAR), 进站名称 - // "IN_DEVICE_NO" VARCHAR2(64 CHAR), 进站设备号 - // "IN_DEVICE_SERIAL_NO" VARCHAR2(64 CHAR), 进站设备流水号 - // "LINE_NO" VARCHAR2(10 CHAR), 公交线路编码 - // "LINE_NAME" VARCHAR2(200 CHAR), 公交线路名称 - // "OUT_TRANSACTION_SERIAL_NO" VARCHAR2(64 CHAR), 出站交易流水号 - // "OUT_STATION_NAME" VARCHAR2(200 CHAR), 出站名称 - // "OUT_DEVICE_NO" VARCHAR2(64 CHAR), 出站设备号 - // "OUT_DEVICE_SERIAL_NO" VARCHAR2(64 CHAR), 出站设备流水号 - - // COMMENT ON COLUMN "TANPHDEV"."TBL_BC_TRAVEL_NOTICE"."CARD_NO" IS '卡号 交易卡号,明文'; - // COMMENT ON COLUMN "TANPHDEV"."TBL_BC_TRAVEL_NOTICE"."IN_TRANSACTION_SERIAL_NO" IS '进站交易流水号'; - // COMMENT ON COLUMN "TANPHDEV"."TBL_BC_TRAVEL_NOTICE"."IN_STATION_NAME" IS '进站名称'; - // COMMENT ON COLUMN "TANPHDEV"."TBL_BC_TRAVEL_NOTICE"."IN_DEVICE_NO" IS '进站设备号'; - // COMMENT ON COLUMN "TANPHDEV"."TBL_BC_TRAVEL_NOTICE"."IN_DEVICE_SERIAL_NO" IS '进站设备流水号'; - // COMMENT ON COLUMN "TANPHDEV"."TBL_BC_TRAVEL_NOTICE"."LINE_NO" IS '公交线路编码 例如:01000'; - // COMMENT ON COLUMN "TANPHDEV"."TBL_BC_TRAVEL_NOTICE"."LINE_NAME" IS '公交线路名称 例如:浦东32路'; - // COMMENT ON COLUMN "TANPHDEV"."TBL_BC_TRAVEL_NOTICE"."OUT_TRANSACTION_SERIAL_NO" IS '出站交易流水号'; - // COMMENT ON COLUMN "TANPHDEV"."TBL_BC_TRAVEL_NOTICE"."OUT_STATION_NAME" IS '出站名称'; - // COMMENT ON COLUMN "TANPHDEV"."TBL_BC_TRAVEL_NOTICE"."OUT_DEVICE_NO" IS '出站设备号'; - // COMMENT ON COLUMN "TANPHDEV"."TBL_BC_TRAVEL_NOTICE"."OUT_DEVICE_SERIAL_NO" IS '出站设备流水号'; - - - -// "IN_STATION_ID" VARCHAR2(32 CHAR), - -// travelNo 00400000000000000000208, -// industry_code 77, -// userId 0024000599, -// ccid cc_id_test_861, -// inStationId \N, -// outStationId \N, -// open_channel 4, -// intoTransTime 2024-05-05 08:37:53, -// outTransTime 2024-05-05 08:37:53, -// cardNo 3104770000030645909F, -// inTransactionSerialNo 124, -// inStatioName \N, -// indeviceNo \N, -// inDeviceSeriNo \N, -// lineNo 14244, -// LineName 浦东88路, -// outTransactionSerialNo 124, -// outStatioName \N, -// outdeviceNo 11903503, -// outDeviceSeriNo 101375 - -// travelNo -// industry_code -// userId -// ccid -// inStationId -// outStationId -// open_channel -// intoTransTime -// outTransTime -// cardNo -// inTransactionSerialNo -// inStatioName -// indeviceNo -// inDeviceSeriNo -// lineNo -// LineName -// outTransactionSerialNo -// outStatioName -// outdeviceNo -// outDeviceSeriNo - -// travelNo 00500000000000000000255, -// industry_code 21, -// userId 0062622980, -// ccid cc_id_test_881, -// inStationId \N, -// outStationId 0252, -// open_channel 5, -// intoTransTime \N, -// outTransTime 2024-05-05 00:45:42, -// cardNo 3104770055125106136F, -// inTransactionSerialNo \N, -// inStatioName \N, -// indeviceNo \N, -// inDeviceSeriNo \N, -// lineNo \N, -// LineName \N, -// outTransactionSerialNo 614409604, -// outStatioName 龙阳路, -// outdeviceNo 202523009, -// outDeviceSeriNo 511 - + private static final String HOST = "localhost"; + private static final int PORT = 22588; + private static final int MAX_CONNECTIONS = 5; public static void main(String[] args) throws IOException { - // try (FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\RENCHAO\\Desktop\\temp-sss\\ttaa.csv"); - // OutputStreamWriter writer = new OutputStreamWriter(fileOutputStream, StandardCharsets.UTF_8)) { - // - // for (int i = 0; i < 1000000; i++) { - // //11111121,77,10001,1,09280000,01110000,支付宝,2024-04-27 09:30:15,2024-04-27 09:30:15 - // StringJoiner sj = new StringJoiner(","); - // sj.add(Integer.toString(i)); - // sj.add("77"); - // sj.add("11"); - // sj.add("1"); - // sj.add("09280000"); - // sj.add("01110000"); - // sj.add("支付宝"); - // sj.add("2024-04-27 09:30:15"); - // sj.add("2024-04-27 09:30:15"); - // writer.write(sj + "\n"); - // } - // - // } - - try (InputStream inputStream = new FileInputStream("C:\\Users\\RENCHAO\\Desktop\\temp-sss\\temp-sss.zip"); - ZipInputStream zipInputStream = new ZipInputStream(inputStream)) { - ZipEntry nextEntry; - while ((nextEntry = zipInputStream.getNextEntry()) != null && !nextEntry.isDirectory()) { - - FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\RENCHAO\\Desktop\\temp-sss\\aa\\" + nextEntry.getName()); - - IOUtils.copy(zipInputStream, fileOutputStream); + EventLoopGroup group = new NioEventLoopGroup(); + + try { + Bootstrap bootstrap = new Bootstrap() + .group(group) + .channel(NioSocketChannel.class) + .option(ChannelOption.SO_KEEPALIVE, true) + .option(ChannelOption.TCP_NODELAY, true); + + ChannelPoolHandler handler = new ChannelPoolHandler() { + @Override + public void channelReleased(Channel ch) { + System.out.println("Channel 归还: " + ch.id().asLongText()); + } + + @Override + public void channelAcquired(Channel ch) { + System.out.println("Channel 申请: " + ch.id().asLongText()); + } + + @Override + public void channelCreated(Channel ch) { + ChannelPipeline pipeline = ch.pipeline(); + pipeline.addLast(new StringEncoder()); + pipeline.addLast(new StringDecoder()); + pipeline.addLast(new SimpleChannelInboundHandler() { + @Override + protected void channelRead0(ChannelHandlerContext ctx, String msg) { + System.out.println("Received: " + msg); + } + }); + System.out.println("Channel 创建成功: " + ch.id().asLongText()); + } + }; + + FixedChannelPool pool = new FixedChannelPool( + bootstrap.remoteAddress(new InetSocketAddress(HOST, PORT)), + handler, + MAX_CONNECTIONS + ); + + // 获取并使用连接 + for (int i = 0; i < 10; i++) { + Future future = pool.acquire(); + + Channel channel = future.get(); + + System.out.println(channel.isActive()); + + System.out.println(i + " 获取到" + channel.id().asLongText()); + + Thread.sleep(1000); // 每秒发送一条消息 + pool.release(channel); + channel.close(); } + // 关闭连接池 + pool.close(); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } finally { + group.shutdownGracefully(); } } diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/domain/BcCalcFactor.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/domain/BcCalcFactor.java index fe0ddc37..c230fc52 100644 --- a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/domain/BcCalcFactor.java +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/domain/BcCalcFactor.java @@ -29,17 +29,17 @@ public class BcCalcFactor implements Serializable { /** * 平均里程,存的是M,计算时转换为KM */ - private Integer averageMileage; + private Double averageMileage; /** * 存的是gCO2/PKM,计算时直接使用 */ - private Double baseFactor; + private String baseFactor; /** * 存的是gCO2/PKM,计算时直接使用 */ - private Double factor; + private String factor; /** * @@ -83,27 +83,27 @@ public class BcCalcFactor implements Serializable { this.sceneCode = sceneCode; } - public Integer getAverageMileage() { + public Double getAverageMileage() { return averageMileage; } - public void setAverageMileage(Integer averageMileage) { + public void setAverageMileage(Double averageMileage) { this.averageMileage = averageMileage; } - public Double getBaseFactor() { + public String getBaseFactor() { return baseFactor; } - public void setBaseFactor(Double baseFactor) { + public void setBaseFactor(String baseFactor) { this.baseFactor = baseFactor; } - public Double getFactor() { + public String getFactor() { return factor; } - public void setFactor(Double factor) { + public void setFactor(String factor) { this.factor = factor; } diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/domain/BcTravelNotice.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/domain/BcTravelNotice.java index 993fa7dc..3d3cdb5d 100644 --- a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/domain/BcTravelNotice.java +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/domain/BcTravelNotice.java @@ -135,9 +135,9 @@ public class BcTravelNotice implements Serializable { private String batchNo; /** - * 里程数,【-1表示异常】 + * 里程数 */ - private Integer mileage; + private String mileage; /** * 数据确认时间 @@ -180,7 +180,9 @@ public class BcTravelNotice implements Serializable { private String dataDeliveryTime; /** - * 状态。INIT:初始化 + * 状态。 + * INIT:初始化 + * MILEAGE_ERROR:里程计算错误 * PROCESSING:处理中 * WAIT_FOR_SEND:待发送 * SUCCESS:成功 @@ -438,11 +440,11 @@ public class BcTravelNotice implements Serializable { this.batchNo = batchNo; } - public Integer getMileage() { + public String getMileage() { return mileage; } - public void setMileage(Integer mileage) { + public void setMileage(String mileage) { this.mileage = mileage; } diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/domain/BusSpotCheck.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/domain/BusSpotCheck.java index 240770e6..1628277e 100644 --- a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/domain/BusSpotCheck.java +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/domain/BusSpotCheck.java @@ -1,5 +1,7 @@ package com.jiuyv.sptcc.carbon.dataprocess.domain; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + import java.io.Serializable; /** @@ -7,9 +9,15 @@ import java.io.Serializable; * * @author ren_chao */ +@JsonPropertyOrder(alphabetic = true) public class BusSpotCheck implements Serializable { private static final long serialVersionUID = 41L; + /** + * 业务流水号 + */ + private String travelNo; + /** * 进站时间 */ @@ -21,9 +29,17 @@ public class BusSpotCheck implements Serializable { private String lineNo; /** - * 里程数,【-1表示异常】 + * 里程数 */ - private Integer mileage; + private String mileage; + + public String getTravelNo() { + return travelNo; + } + + public void setTravelNo(String travelNo) { + this.travelNo = travelNo; + } public String getIntoTransTime() { return intoTransTime; @@ -41,11 +57,11 @@ public class BusSpotCheck implements Serializable { this.lineNo = lineNo; } - public Integer getMileage() { + public String getMileage() { return mileage; } - public void setMileage(Integer mileage) { + public void setMileage(String mileage) { this.mileage = mileage; } } diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/domain/SubwaySpotCheck.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/domain/SubwaySpotCheck.java index bf1b9c38..f0b68709 100644 --- a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/domain/SubwaySpotCheck.java +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/domain/SubwaySpotCheck.java @@ -1,5 +1,7 @@ package com.jiuyv.sptcc.carbon.dataprocess.domain; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + import java.io.Serializable; /** @@ -7,8 +9,15 @@ import java.io.Serializable; * * @author ren_chao */ +@JsonPropertyOrder(alphabetic = true) public class SubwaySpotCheck implements Serializable { private static final long serialVersionUID = 42L; + + /** + * 业务流水号 + */ + private String travelNo; + /** * 进站时间 */ @@ -30,9 +39,9 @@ public class SubwaySpotCheck implements Serializable { private String outTransTime; /** - * 出站设备流水号 + * 出站设备号 */ - private String outDeviceSerialNo; + private String outDeviceNo; /** * 出站名称 @@ -40,9 +49,17 @@ public class SubwaySpotCheck implements Serializable { private String outStationName; /** - * 里程数,【-1表示异常】 + * 里程数 */ - private Integer mileage; + private String mileage; + + public String getTravelNo() { + return travelNo; + } + + public void setTravelNo(String travelNo) { + this.travelNo = travelNo; + } public String getIntoTransTime() { return intoTransTime; @@ -76,12 +93,12 @@ public class SubwaySpotCheck implements Serializable { this.outTransTime = outTransTime; } - public String getOutDeviceSerialNo() { - return outDeviceSerialNo; + public String getOutDeviceNo() { + return outDeviceNo; } - public void setOutDeviceSerialNo(String outDeviceSerialNo) { - this.outDeviceSerialNo = outDeviceSerialNo; + public void setOutDeviceNo(String outDeviceNo) { + this.outDeviceNo = outDeviceNo; } public String getOutStationName() { @@ -92,11 +109,11 @@ public class SubwaySpotCheck implements Serializable { this.outStationName = outStationName; } - public Integer getMileage() { + public String getMileage() { return mileage; } - public void setMileage(Integer mileage) { + public void setMileage(String mileage) { this.mileage = mileage; } } diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/enums/CarbonDataEnum.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/enums/CarbonDataEnum.java index c88f50f4..2bd93c76 100644 --- a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/enums/CarbonDataEnum.java +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/enums/CarbonDataEnum.java @@ -7,6 +7,7 @@ package com.jiuyv.sptcc.carbon.dataprocess.enums; */ public enum CarbonDataEnum { INIT("INIT", "初始化"), + MILEAGE_ERROR("MILEAGE_ERROR", "里程计算错误"), UNAUTHORIZED("UNAUTHORIZED", "未授权"), PROCESSING("PROCESSING", "处理中"), WAIT_FOR_SEND("WAIT_FOR_SEND", "待发送"), diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/enums/SceneCodeEnum.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/enums/SceneCodeEnum.java index 204c1d51..4e0b1942 100644 --- a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/enums/SceneCodeEnum.java +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/enums/SceneCodeEnum.java @@ -6,8 +6,8 @@ package com.jiuyv.sptcc.carbon.dataprocess.enums; * @author ren_chao */ public enum SceneCodeEnum { - SUBWAY("SUBWAY", "轨道交通"), - BUS("BUS", "地面公交"); + SUBWAY("subway", "轨道交通"), + BUS("bus", "地面公交"); private final String code; private final String info; diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/exception/GlobalExceptionHandler.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/exception/GlobalExceptionHandler.java index 5bcf330f..fca6c270 100644 --- a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/exception/GlobalExceptionHandler.java +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/exception/GlobalExceptionHandler.java @@ -57,20 +57,6 @@ public class GlobalExceptionHandler { return new ResultDTO<>(code != null ? code : 500, e.getMessage(), null); } - /** - * feign调用异常 - */ - @ExceptionHandler({RetryableException.class}) - public ResultDTO handleRetryableException(RetryableException e) { - LOGGER.error(e.getMessage(), e); - - if (e.getCause() instanceof SocketTimeoutException) { - return new ResultDTO<>(500, "ResultCode.REQUEST_TIMEOUT.getMessage()", null); - } - - return new ResultDTO<>(500, e.getMessage(), null); - } - /** * 系统异常 */ diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/feign/CarbonAuthFeign.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/feign/CarbonAuthFeign.java index c270a7e0..c2c36b1b 100644 --- a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/feign/CarbonAuthFeign.java +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/feign/CarbonAuthFeign.java @@ -8,6 +8,6 @@ import org.springframework.cloud.openfeign.FeignClient; * * @author ren_chao */ -@FeignClient("${carbon-data-process.auth-serve}") +@FeignClient(value = "${carbon-data-process.auth-serve}", contextId = "carbonAuthFeign") public interface CarbonAuthFeign extends IAccountApi { } diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/feign/CarbonDataProcessFeign.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/feign/CarbonDataProcessFeign.java index bc2b23ec..3180ebcc 100644 --- a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/feign/CarbonDataProcessFeign.java +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/feign/CarbonDataProcessFeign.java @@ -8,6 +8,6 @@ import org.springframework.cloud.openfeign.FeignClient; * * @author ren_chao */ -@FeignClient("${carbon-data-process.gateway-serve}") +@FeignClient(value = "${carbon-data-process.gateway-serve}", contextId = "carbonDataProcessFeign") public interface CarbonDataProcessFeign extends CarbonReductionApi { } diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/feign/DataAuditFeign.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/feign/DataAuditFeign.java new file mode 100644 index 00000000..9a68b6c5 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/feign/DataAuditFeign.java @@ -0,0 +1,13 @@ +package com.jiuyv.sptcc.carbon.dataprocess.feign; + +import com.jiuyv.sptcc.carbon.pushgate.api.DataAuditApi; +import org.springframework.cloud.openfeign.FeignClient; + +/** + * 上链接口 + * + * @author ren_chao + */ +@FeignClient(value = "${carbon-data-process.gateway-serve}", contextId = "dataAuditFeign") +public interface DataAuditFeign extends DataAuditApi { +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/mapper/BcSubwayMileageMapper.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/mapper/BcSubwayMileageMapper.java index a711f584..1f8cd376 100644 --- a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/mapper/BcSubwayMileageMapper.java +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/mapper/BcSubwayMileageMapper.java @@ -15,5 +15,5 @@ public interface BcSubwayMileageMapper { /** * 查询里程 */ - Integer selectMileage(@Param("inStationId") String inStationId, @Param("outStationId") String outStationId); + Double selectMileage(@Param("inStationId") String inStationId, @Param("outStationId") String outStationId); } diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IDataAuditService.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IDataAuditService.java new file mode 100644 index 00000000..d92aaac7 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IDataAuditService.java @@ -0,0 +1,22 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service; + +/** + * @author ren_chao + */ +public interface IDataAuditService { + + /** + * 上链 + */ + void upChain(); + + /** + * 接收区块链系统回调 更新上链结果 + */ + void callback(); + + /** + * 主动查询一直没有回调的数据 + */ + void queryUpChainResult(); +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/CalculateReductionServiceImpl.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/CalculateReductionServiceImpl.java index 89801ee8..588b3305 100644 --- a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/CalculateReductionServiceImpl.java +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/CalculateReductionServiceImpl.java @@ -53,7 +53,7 @@ public class CalculateReductionServiceImpl implements ICalculateReductionService * 计算碳减排量 */ @Override - public void calculate() { + public synchronized void calculate() { Integer count = travelNoticeMapper.selectCountByStatus(CarbonDataEnum.PROCESSING.getCode()); LOGGER.info(">>>> 开始计算碳减排量,总记录数:{}", count); long startTime = System.currentTimeMillis(); @@ -66,7 +66,7 @@ public class CalculateReductionServiceImpl implements ICalculateReductionService rawData.setBaseFactor(bcTravelNotice.getBaseFactor()); rawData.setFactor(bcTravelNotice.getFactor()); rawData.setDataId(bcTravelNotice.getSeqNo()); - rawData.setTripDistance(bcTravelNotice.getMileage().toString()); + rawData.setTripDistance(bcTravelNotice.getMileage()); return rawData; }).collect(Collectors.toList()); BatchComputationReqVo batchComputationReqVo = new BatchComputationReqVo(); diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/DataAuditServiceImpl.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/DataAuditServiceImpl.java new file mode 100644 index 00000000..4b049c14 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/DataAuditServiceImpl.java @@ -0,0 +1,49 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service.impl; + +import com.jiuyv.sptcc.carbon.dataprocess.feign.DataAuditFeign; +import com.jiuyv.sptcc.carbon.dataprocess.service.IDataAuditService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +/** + * 上链服务 + * + * @author ren_chao + */ +@Service +public class DataAuditServiceImpl implements IDataAuditService { + private static final Logger LOGGER = LoggerFactory.getLogger(DataAuditServiceImpl.class); + + private final DataAuditFeign dataAuditFeign; + + public DataAuditServiceImpl(DataAuditFeign dataAuditFeign) { + this.dataAuditFeign = dataAuditFeign; + } + + /** + * 上链 + */ + @Override + public void upChain() { + + } + + /** + * 接收区块链系统回调 更新上链结果 + */ + @Override + public void callback() { + + } + + /** + * 主动查询一直没有回调的数据 + */ + @Override + public void queryUpChainResult() { + + } + + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/PushReductionServiceImpl.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/PushReductionServiceImpl.java index 3cc9fe27..66942bc9 100644 --- a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/PushReductionServiceImpl.java +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/PushReductionServiceImpl.java @@ -5,6 +5,7 @@ import com.jiuyv.sptcc.carbon.dataprocess.enums.CarbonDataEnum; import com.jiuyv.sptcc.carbon.dataprocess.enums.IndustryCodeEnum; import com.jiuyv.sptcc.carbon.dataprocess.enums.SceneCodeEnum; import com.jiuyv.sptcc.carbon.dataprocess.enums.SignStatusEnum; +import com.jiuyv.sptcc.carbon.dataprocess.exception.ServiceException; import com.jiuyv.sptcc.carbon.dataprocess.feign.CarbonDataProcessFeign; import com.jiuyv.sptcc.carbon.dataprocess.mapper.BcTravelNoticeMapper; import com.jiuyv.sptcc.carbon.dataprocess.mapper.SysDateMapper; @@ -57,7 +58,7 @@ public class PushReductionServiceImpl implements IPushReductionService { * 上报数据 */ @Override - public void escalation() { + public synchronized void escalation() { Integer count = travelNoticeMapper.selectCountByStatus(CarbonDataEnum.WAIT_FOR_SEND.getCode()); LOGGER.info(">>>> 开始上报数据,总记录数:{}", count); long startTime = System.currentTimeMillis(); @@ -74,9 +75,9 @@ public class PushReductionServiceImpl implements IPushReductionService { String industryCode = bcTravelNotice.getIndustryCode(); if (IndustryCodeEnum.SUBWAY.getCode().equals(industryCode)) { - info.setSceneCode(SceneCodeEnum.SUBWAY.getCode().toLowerCase()); + info.setSceneCode(SceneCodeEnum.SUBWAY.getCode()); } else if (IndustryCodeEnum.BUS.getCode().equals(industryCode)) { - info.setSceneCode(SceneCodeEnum.BUS.getCode().toLowerCase()); + info.setSceneCode(SceneCodeEnum.BUS.getCode()); } else { LOGGER.error("非地铁和公交:{}", industryCode); info.setSceneCode(industryCode); @@ -89,13 +90,15 @@ public class PushReductionServiceImpl implements IPushReductionService { info.setDataConfirmationTime(LocalDateTime.parse(bcTravelNotice.getDataConfirmationTime(),SDF_14).format(SDF)); info.setReductionCalculateTime(LocalDateTime.parse(bcTravelNotice.getReductionCalculateTime(), SDF_14).format(SDF)); info.setDataDeliveryTime(LocalDateTime.parse(currentTime, SDF_14).format(SDF)); - info.setBusinessCompletionTime(LocalDateTime.parse(currentTime, SDF_14).format(SDF)); + + // 地铁用出站时间,公交用进站时间 + info.setBusinessCompletionTime(LocalDateTime.parse(getBusinessCompletionTime(bcTravelNotice), SDF_14).format(SDF)); info.setMethodId(bcTravelNotice.getMethodId()); DeliveryReqVo.Info.RawData rawData = new DeliveryReqVo.Info.RawData(); rawData.setBaseFactor(bcTravelNotice.getBaseFactor()); rawData.setFactor(bcTravelNotice.getFactor()); - rawData.setTripDistance(bcTravelNotice.getMileage().toString()); + rawData.setTripDistance(bcTravelNotice.getMileage()); rawData.setHashData(bcTravelNotice.getHashData()); info.setRawData(rawData); return info; @@ -132,7 +135,7 @@ public class PushReductionServiceImpl implements IPushReductionService { bcTravelNotice.setDataDeliveryTime(currentTime); bcTravelNotice.setSendCount(travelNotice.getSendCount() + 1); if (CarbonDataEnum.SUCCESS.getCode().equals(status)) { - bcTravelNotice.setBusinessCompletionTime(currentTime); + bcTravelNotice.setBusinessCompletionTime(travelNotice.getBusinessCompletionTime()); bcTravelNotice.setBatchNo(batchNo); bcTravelNotice.setSignStatus(SignStatusEnum.ISSUING.getCode()); } @@ -140,4 +143,16 @@ public class PushReductionServiceImpl implements IPushReductionService { }); } + private String getBusinessCompletionTime(BcTravelNotice travelNotice) { + String industryCode = travelNotice.getIndustryCode(); + if (IndustryCodeEnum.SUBWAY.getCode().equals(industryCode)) { + return travelNotice.getOutTransTime(); + } else if (IndustryCodeEnum.BUS.getCode().equals(industryCode)) { + return travelNotice.getIntoTransTime(); + } else { + LOGGER.error("非地铁和公交:{}", industryCode); + throw new ServiceException("非地铁和公交:" + industryCode); + } + } + } diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/ReadFileServiceImpl.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/ReadFileServiceImpl.java index 5013af4b..0a34c883 100644 --- a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/ReadFileServiceImpl.java +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/ReadFileServiceImpl.java @@ -1,7 +1,5 @@ package com.jiuyv.sptcc.carbon.dataprocess.service.impl; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import com.jcraft.jsch.ChannelSftp; import com.jcraft.jsch.SftpException; import com.jiuyv.sptcc.carbon.auth.common.enums.OrgCodeEnum; @@ -26,6 +24,7 @@ import com.jiuyv.sptcc.carbon.dataprocess.mapper.BcSubwayMileageMapper; import com.jiuyv.sptcc.carbon.dataprocess.mapper.BcTravelNoticeMapper; import com.jiuyv.sptcc.carbon.dataprocess.mapper.SysDateMapper; import com.jiuyv.sptcc.carbon.dataprocess.service.IReadFileService; +import com.jiuyv.sptcc.carbon.dataprocess.util.JsonUtil; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.bouncycastle.crypto.digests.SM3Digest; @@ -69,7 +68,6 @@ public class ReadFileServiceImpl implements IReadFileService { private final CarbonAuthFeign carbonAuthFeign; private final SftpChannelPool sftpChannelPool; - private final ObjectMapper objectMapper; private final String remoteDir; private final String fileSuffix; @@ -81,7 +79,6 @@ public class ReadFileServiceImpl implements IReadFileService { SysDateMapper sysDateMapper, CarbonAuthFeign carbonAuthFeign, SftpChannelPool sftpChannelPool, - ObjectMapper objectMapper, SftpProperties sftpProperties) { this.bcTravelNoticeMapper = bcTravelNoticeMapper; this.subwayMileageMapper = subwayMileageMapper; @@ -89,7 +86,6 @@ public class ReadFileServiceImpl implements IReadFileService { this.sysDateMapper = sysDateMapper; this.carbonAuthFeign = carbonAuthFeign; this.sftpChannelPool = sftpChannelPool; - this.objectMapper = objectMapper; this.remoteDir = sftpProperties.getRemoteDir(); this.fileSuffix = sftpProperties.getFileSuffix(); this.tempDir = sftpProperties.getTempDir(); @@ -99,7 +95,7 @@ public class ReadFileServiceImpl implements IReadFileService { * 读取文件并插入数据库 */ @Override - public void readFileAndInsertDatabase(String dateStr) { + public synchronized void readFileAndInsertDatabase(String dateStr) { String currentTime = sysDateMapper.currentTime(); if (StringUtils.isBlank(dateStr)) { dateStr = LocalDate.parse(currentTime.substring(0, 8), SDF).minusDays(1).format(SDF); @@ -195,30 +191,32 @@ public class ReadFileServiceImpl implements IReadFileService { travelNotice.setOutDeviceNo(handleValue(split[18])); travelNotice.setOutDeviceSerialNo(handleValue(split[19])); - String intoTransTime = travelNotice.getIntoTransTime(); - String industryCode = travelNotice.getIndustryCode(); + // 检查异常数据 + if (isAbnormalData(travelNotice)) { + return; + } + BcCalcFactor bcCalcFactor; - if (intoTransTime != null && IndustryCodeEnum.SUBWAY.getCode().equals(industryCode)) { - bcCalcFactor = getCalcFactor(intoTransTime, SceneCodeEnum.SUBWAY.getCode()); - // 计算里程 - calculateMileage(travelNotice); - } else if (intoTransTime != null && IndustryCodeEnum.BUS.getCode().equals(industryCode)) { - bcCalcFactor = getCalcFactor(intoTransTime, SceneCodeEnum.BUS.getCode()); - // 计算里程 - travelNotice.setMileage(bcCalcFactor.getAverageMileage()); + if (IndustryCodeEnum.SUBWAY.getCode().equals(travelNotice.getIndustryCode())) { + bcCalcFactor = getCalcFactor(travelNotice.getOutTransTime(), SceneCodeEnum.SUBWAY.getCode()); + // 计算里程 查不到里程,设置 里程计算错误 + if (!calculateMileage(travelNotice)) { + travelNotice.setStatus(CarbonDataEnum.MILEAGE_ERROR.getCode()); + bcTravelNoticeMapper.insert(travelNotice); + return; + } } else { - // 非SUBWAY、BUS 或者没有进站时间 只入库 - travelNotice.setStatus(CarbonDataEnum.INIT.getCode()); - bcTravelNoticeMapper.insert(travelNotice); - return; + bcCalcFactor = getCalcFactor(travelNotice.getIntoTransTime(), SceneCodeEnum.BUS.getCode()); + // 计算里程 + travelNotice.setMileage(String.format("%.3f", bcCalcFactor.getAverageMileage())); } // 是否授权 没有进站时间的暂定为未授权 if (authVerify(travelNotice, dataConfirmationTime)) { travelNotice.setStatus(CarbonDataEnum.PROCESSING.getCode()); travelNotice.setMethodId(bcCalcFactor.getMethodId()); - travelNotice.setBaseFactor(bcCalcFactor.getBaseFactor().toString()); - travelNotice.setFactor(bcCalcFactor.getFactor().toString()); + travelNotice.setBaseFactor(bcCalcFactor.getBaseFactor()); + travelNotice.setFactor(bcCalcFactor.getFactor()); // 计算hash spotCheckHash(travelNotice); } else { @@ -228,6 +226,39 @@ public class ReadFileServiceImpl implements IReadFileService { bcTravelNoticeMapper.insert(travelNotice); } + /** + * 检查异常数据 + */ + private boolean isAbnormalData(BcTravelNotice travelNotice) { + String industryCode = travelNotice.getIndustryCode(); + if (!IndustryCodeEnum.SUBWAY.getCode().equals(industryCode) + && !IndustryCodeEnum.BUS.getCode().equals(industryCode)) { + insertAbnormalData(travelNotice, "既不是公交也不是地铁"); + return true; + } + if (IndustryCodeEnum.SUBWAY.getCode().equals(industryCode)) { + if (travelNotice.getInStationId() == null) { + insertAbnormalData(travelNotice, "地铁没有进站编码"); + return true; + } + if (travelNotice.getOutTransTime() == null) { + insertAbnormalData(travelNotice, "地铁没有出站时间"); + return true; + } + } + if (IndustryCodeEnum.BUS.getCode().equals(industryCode) && travelNotice.getIntoTransTime() == null) { + insertAbnormalData(travelNotice, "公交没有进站时间"); + return true; + } + return false; + } + + private void insertAbnormalData(BcTravelNotice travelNotice, String remark) { + travelNotice.setStatus(CarbonDataEnum.INIT.getCode()); + travelNotice.setRemark(remark); + bcTravelNoticeMapper.insert(travelNotice); + } + /** * 授权校验 * @@ -239,12 +270,13 @@ public class ReadFileServiceImpl implements IReadFileService { String industryCode = travelNotice.getIndustryCode(); if (IndustryCodeEnum.BUS.getCode().equals(industryCode)) { request.setScenCode(ScenCodeEnum.BUS.getCode()); + request.setTransTime(LocalDateTime.parse(travelNotice.getIntoTransTime(), REQ_SDF)); } else if (IndustryCodeEnum.SUBWAY.getCode().equals(industryCode)) { request.setScenCode(ScenCodeEnum.SUBLINE.getCode()); + request.setTransTime(LocalDateTime.parse(travelNotice.getOutTransTime(), REQ_SDF)); } else { return false; } - request.setTransTime(LocalDateTime.parse(travelNotice.getIntoTransTime(), REQ_SDF)); request.setRequestId(travelNotice.getTravelNo()); request.setReqTime(currentTime); request.setOrgCode(OrgCodeEnum.DATAPROCESS.getCode()); @@ -258,18 +290,19 @@ public class ReadFileServiceImpl implements IReadFileService { } /** - * 计算里程 + * 计算里程 查询不到返回false * */ - private void calculateMileage(BcTravelNotice travelNotice) { - // 只有地铁计算里程 查不到里程,记异常 -1 + private boolean calculateMileage(BcTravelNotice travelNotice) { + // 只有地铁计算里程 查不到里程,记里程异常状态 LOGGER.debug(">>>> 计算里程"); - Integer mileage = subwayMileageMapper + Double mileage = subwayMileageMapper .selectMileage(travelNotice.getInStationId(), travelNotice.getOutStationId()); if (mileage == null) { - travelNotice.setMileage(-1); + return false; } else { - travelNotice.setMileage(mileage); + travelNotice.setMileage(String.format("%.3f", mileage)); + return true; } } @@ -300,16 +333,18 @@ public class ReadFileServiceImpl implements IReadFileService { private void spotCheckHash(BcTravelNotice travelNotice) { if (IndustryCodeEnum.SUBWAY.getCode().equals(travelNotice.getIndustryCode())) { SubwaySpotCheck spotCheck = new SubwaySpotCheck(); + spotCheck.setTravelNo(travelNotice.getTravelNo()); spotCheck.setIntoTransTime(travelNotice.getIntoTransTime()); spotCheck.setInDeviceNo(travelNotice.getInDeviceNo()); spotCheck.setInStationName(travelNotice.getInStationName()); spotCheck.setOutTransTime(travelNotice.getOutTransTime()); - spotCheck.setOutDeviceSerialNo(travelNotice.getOutDeviceSerialNo()); + spotCheck.setOutDeviceNo(travelNotice.getOutDeviceNo()); spotCheck.setOutStationName(travelNotice.getOutStationName()); spotCheck.setMileage(travelNotice.getMileage()); travelNotice.setHashData(sm3Hash(spotCheck)); } else { BusSpotCheck spotCheck = new BusSpotCheck(); + spotCheck.setTravelNo(travelNotice.getTravelNo()); spotCheck.setIntoTransTime(travelNotice.getIntoTransTime()); spotCheck.setLineNo(travelNotice.getLineNo()); spotCheck.setMileage(travelNotice.getMileage()); @@ -318,13 +353,7 @@ public class ReadFileServiceImpl implements IReadFileService { } private String sm3Hash(Object data) { - String jsonStr; - try { - jsonStr = objectMapper.writeValueAsString(data); - } catch (JsonProcessingException e) { - LOGGER.error("RawData序列化错误。。。", e); - return ""; - } + String jsonStr = JsonUtil.convertToJson(data); byte[] bytes = jsonStr.getBytes(StandardCharsets.UTF_8); SM3Digest digest = new SM3Digest(); digest.update(bytes, 0, bytes.length); diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/SignResultServiceImpl.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/SignResultServiceImpl.java index 7e74501f..755d8c4a 100644 --- a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/SignResultServiceImpl.java +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/SignResultServiceImpl.java @@ -49,6 +49,7 @@ public class SignResultServiceImpl implements ISignResultService { @Transactional @Override public void signResult(ReqSignResultDTO signResultDTO) { + LOGGER.info(">>>> 开始接收减排量签发结果推送"); String batchNo = signResultDTO.getBatchNo(); List list = travelNoticeMapper.selectListByBatchNo(batchNo); if (CollectionUtils.isEmpty(list)) { @@ -70,14 +71,14 @@ public class SignResultServiceImpl implements ISignResultService { travelNotice.setSignStatus(data.getSignStatus()); travelNoticeMapper.updateBySeqNo(travelNotice); } - + LOGGER.info(">>>> 减排量签发结果更新成功"); } /** * 减排量签发结果查询 */ @Override - public void resultQuery() { + public synchronized void resultQuery() { Integer count = travelNoticeMapper.selectCountBySignStatus(SignStatusEnum.ISSUING.getCode()); LOGGER.info(">>>> 开始减排量签发结果查询,总记录数:{}", count); long startTime = System.currentTimeMillis(); diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/util/JsonUtil.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/util/JsonUtil.java index 64cf2939..dbd7b8cc 100644 --- a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/util/JsonUtil.java +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/util/JsonUtil.java @@ -2,16 +2,10 @@ package com.jiuyv.sptcc.carbon.dataprocess.util; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.ObjectMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; -import java.util.List; - -// import org.json.JSONObject; - /** * The Class JsonUtil. * @@ -51,46 +45,4 @@ public abstract class JsonUtil { } } - public static T json2Bean(String json, Class T) { - try { - return objectMapper.readValue(json, T); - } catch (Exception e) { - LOGGER.error("convert failed", e); - return null; - } - } - - public static T json2Bean(String json, JavaType type) { - try { - return objectMapper.readValue(json, type); - } catch (Exception e) { - LOGGER.error("convert failed", e); - return null; - } - } - - public static List json2List(String json, Class T) { - JavaType javaType = getCollectionType(ArrayList.class, T); - List lst; - try { - lst = objectMapper.readValue(json, javaType); - } catch (Exception e) { - LOGGER.error("convert failed", e); - return null; - } - return lst; - } - - /** - * 获取泛型的Collection Type - * - * @param collectionClass 泛型的Collection - * @param elementClasses 元素类 - * @return JavaType Java类型 - * @since 1.0 - */ - public static JavaType getCollectionType(Class collectionClass, Class... elementClasses) { - return objectMapper.getTypeFactory().constructParametricType(collectionClass, elementClasses); - } - } diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/application.yml b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/application.yml index 9db67cda..e578542b 100644 --- a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/application.yml +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/application.yml @@ -25,7 +25,10 @@ spring: maximum-pool-size: 10 # 连接池最大连接数,默认是10 connection-timeout: 30000 # 数据库连接超时时间,默认30秒,即30000 max-lifetime: 1800000 # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟 - + security: + user: + password: markettest + name: markettest cache: type: caffeine cache-names: diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mapper/BcCalcFactorMapper.xml b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mapper/BcCalcFactorMapper.xml index 1dcb8d4d..04ddc97c 100644 --- a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mapper/BcCalcFactorMapper.xml +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mapper/BcCalcFactorMapper.xml @@ -10,8 +10,8 @@ - - + + diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mapper/BcSubwayMileageMapper.xml b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mapper/BcSubwayMileageMapper.xml index d51b8401..03116779 100644 --- a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mapper/BcSubwayMileageMapper.xml +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mapper/BcSubwayMileageMapper.xml @@ -4,7 +4,7 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - select MILEAGE from TBL_BC_SUBWAY_MILEAGE where IN_STATION_ID = #{inStationId} AND OUT_STATION_ID = #{outStationId} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mapper/BcTravelNoticeMapper.xml b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mapper/BcTravelNoticeMapper.xml index 038eee08..5c1845d8 100644 --- a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mapper/BcTravelNoticeMapper.xml +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mapper/BcTravelNoticeMapper.xml @@ -30,7 +30,7 @@ - + @@ -197,7 +197,7 @@ #{outDeviceNo,jdbcType=VARCHAR}, #{outDeviceSerialNo,jdbcType=VARCHAR}, #{batchNo,jdbcType=VARCHAR}, - #{mileage,jdbcType=DECIMAL}, + #{mileage,jdbcType=VARCHAR}, #{dataConfirmationTime,jdbcType=CHAR}, #{carbonFootprint,jdbcType=VARCHAR}, #{calcFactorVersion,jdbcType=VARCHAR}, @@ -294,7 +294,7 @@ BATCH_NO = #{batchNo,jdbcType=VARCHAR}, - MILEAGE = #{mileage,jdbcType=DECIMAL}, + MILEAGE = #{mileage,jdbcType=VARCHAR}, DATA_CONFIRMATION_TIME = #{dataConfirmationTime,jdbcType=CHAR}, diff --git a/carbon-dataprocess/pom.xml b/carbon-dataprocess/pom.xml index f26d4079..972cf838 100644 --- a/carbon-dataprocess/pom.xml +++ b/carbon-dataprocess/pom.xml @@ -3,7 +3,7 @@ com.jiuyv.sptcc carbon-dataprocess - 0.2.1-SNAPSHOT + 0.2.2-SNAPSHOT pom carbon-dataprocess @@ -27,7 +27,7 @@ 2021.0.2 1.2.11 2.6.7 - 0.6.0 + 0.8.2-SNAPSHOT 0.3.0 diff --git a/carbon-usergate/carbon-usergate-api/pom.xml b/carbon-usergate/carbon-usergate-api/pom.xml index a797978f..24969afb 100644 --- a/carbon-usergate/carbon-usergate-api/pom.xml +++ b/carbon-usergate/carbon-usergate-api/pom.xml @@ -3,7 +3,7 @@ carbon-usergate com.jiuyv.sptcc - 0.3.1-SNAPSHOT + 0.3.2-SNAPSHOT 4.0.0 diff --git a/carbon-usergate/carbon-usergate-api/src/main/java/com/jiuyv/sptcc/carbon/gate/dto/BaseRespVo.java b/carbon-usergate/carbon-usergate-api/src/main/java/com/jiuyv/sptcc/carbon/gate/dto/BaseRespVo.java index 7183ffb4..246edc79 100644 --- a/carbon-usergate/carbon-usergate-api/src/main/java/com/jiuyv/sptcc/carbon/gate/dto/BaseRespVo.java +++ b/carbon-usergate/carbon-usergate-api/src/main/java/com/jiuyv/sptcc/carbon/gate/dto/BaseRespVo.java @@ -27,6 +27,14 @@ public class BaseRespVo implements java.io.Serializable { */ private String respDesc; + public BaseRespVo() { + } + + public BaseRespVo(String reqId, String respCode, String respDesc) { + this.reqId = reqId; + this.respCode = respCode; + this.respDesc = respDesc; + } /** * @return the respCode diff --git a/carbon-usergate/carbon-usergate-api/src/main/java/com/jiuyv/sptcc/carbon/gate/dto/QryThreeInOneInfo.java b/carbon-usergate/carbon-usergate-api/src/main/java/com/jiuyv/sptcc/carbon/gate/dto/QryThreeInOneInfo.java index 4bcc1e2b..e1f20be0 100644 --- a/carbon-usergate/carbon-usergate-api/src/main/java/com/jiuyv/sptcc/carbon/gate/dto/QryThreeInOneInfo.java +++ b/carbon-usergate/carbon-usergate-api/src/main/java/com/jiuyv/sptcc/carbon/gate/dto/QryThreeInOneInfo.java @@ -85,8 +85,6 @@ public class QryThreeInOneInfo implements Serializable { } public static class RespDTO extends BaseRespVo { - // 应答码 Response Code H2 - private String respCode; // 应答信息 Desc H40 private String respMsg; // 中心受理日期 Centdate N8 @@ -96,15 +94,13 @@ public class QryThreeInOneInfo implements Serializable { // 记录 private List records; + public RespDTO() {} - @Override - public String getRespCode() { - return respCode; - } - - @Override - public void setRespCode(String respCode) { - this.respCode = respCode; + public RespDTO(String reqId, String respCode, String respDesc, String respMsg, String centerDate, String centerSequence) { + super(reqId, respCode, respDesc); + this.respMsg = respMsg; + this.centerDate = centerDate; + this.centerSequence = centerSequence; } public String getRespMsg() { diff --git a/carbon-usergate/carbon-usergate-service/pom.xml b/carbon-usergate/carbon-usergate-service/pom.xml index 19e91670..638d0cd4 100644 --- a/carbon-usergate/carbon-usergate-service/pom.xml +++ b/carbon-usergate/carbon-usergate-service/pom.xml @@ -3,7 +3,7 @@ carbon-usergate com.jiuyv.sptcc - 0.3.1-SNAPSHOT + 0.3.2-SNAPSHOT 4.0.0 @@ -58,11 +58,6 @@ spring-boot-starter-security - - org.springframework.cloud - spring-cloud-starter-openfeign - - org.springframework.cloud spring-cloud-starter-loadbalancer @@ -71,49 +66,7 @@ org.springframework.cloud spring-cloud-starter-bootstrap - - org.springframework.boot - spring-boot-starter-test - test - - - com.vaadin.external.google - android-json - - - - - - io.github.openfeign - feign-okhttp - - - - - net.sf.json-lib - json-lib - 2.4 - jdk15 - - - - com.mashape.unirest - unirest-java - 1.4.9 - - - - com.fasterxml.uuid - java-uuid-generator - 3.2.0 - - - log4j - log4j - - - org.springframework.cloud spring-cloud-starter-config @@ -124,26 +77,6 @@ commons-lang3 - - commons-beanutils - commons-beanutils - 1.9.4 - - - - - commons-httpclient - commons-httpclient - 3.1 - - - - - org.codehaus.jackson - jackson-mapper-asl - 1.9.13 - - io.micrometer @@ -153,13 +86,6 @@ io.micrometer micrometer-registry-prometheus - - - - - org.springframework.cloud - spring-cloud-starter-sleuth - net.logstash.logback @@ -172,35 +98,10 @@ netty-all 4.1.51.Final - - - com.jiuyv - bomap - ${bomap.version} - - - org.slf4j - slf4j-log4j12 - - - - com.jiuyv.spring - monitor-starter-v2 - 1.9.17 - - - org.springframework.cloud - spring-cloud-sleuth-zipkin - - - io.zipkin.brave - brave-instrumentation-okhttp3 - - - io.zipkin.reporter2 - zipkin-sender-okhttp3 + org.springframework + spring-aspects @@ -214,7 +115,6 @@ - org.jacoco jacoco-maven-plugin @@ -246,33 +146,9 @@ - - true - com.jiuyv.sptcc.carbon.userGate.userGate.Application - - - maven-compiler-plugin - - 1.8 - 1.8 - UTF-8 - - - - - src/lib - BOOT-INF/lib/ - - **/*.jar - - - - src/main/resources - - \ No newline at end of file diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/UserGateApplication.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/UserGateApplication.java new file mode 100644 index 00000000..953f1e36 --- /dev/null +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/UserGateApplication.java @@ -0,0 +1,15 @@ +package com.jiuyv.sptcc.carbon.userGate; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; + +@SpringBootApplication +@EnableDiscoveryClient +public class UserGateApplication { + + public static void main(String[] args) { + SpringApplication.run(UserGateApplication.class, args); + } + +} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/aspectj/GlobalLogAspect.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/aspectj/GlobalLogAspect.java similarity index 92% rename from carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/aspectj/GlobalLogAspect.java rename to carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/aspectj/GlobalLogAspect.java index d83f1d80..8ded4ef5 100644 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/aspectj/GlobalLogAspect.java +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/aspectj/GlobalLogAspect.java @@ -1,6 +1,6 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.aspectj; +package com.jiuyv.sptcc.carbon.userGate.aspectj; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.JsonUtil; +import com.jiuyv.sptcc.carbon.userGate.common.util.JsonUtil; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterThrowing; @@ -25,7 +25,7 @@ public class GlobalLogAspect { private static final double THOUSAND = 1000.0; // Controller日志 - @Pointcut("execution(* com.jiuyv.sptcc.carbon.userGate.userGate.controller.*Controller.*(..))") + @Pointcut("execution(* com.jiuyv.sptcc.carbon.userGate.controller.*Controller.*(..))") public void controllerAspect() { } diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/Constant.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/common/Constant.java similarity index 98% rename from carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/Constant.java rename to carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/common/Constant.java index dbae292f..949f08f1 100644 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/Constant.java +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/common/Constant.java @@ -1,4 +1,4 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common; +package com.jiuyv.sptcc.carbon.userGate.common; /** * The Interface WebDict. diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/ByteUtil.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/common/util/ByteUtil.java similarity index 99% rename from carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/ByteUtil.java rename to carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/common/util/ByteUtil.java index 0c296f38..1a6b399b 100644 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/ByteUtil.java +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/common/util/ByteUtil.java @@ -1,4 +1,4 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.util; +package com.jiuyv.sptcc.carbon.userGate.common.util; public class ByteUtil { diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/CrcUtil.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/common/util/CrcUtil.java similarity index 93% rename from carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/CrcUtil.java rename to carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/common/util/CrcUtil.java index dc83a831..9f181b91 100644 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/CrcUtil.java +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/common/util/CrcUtil.java @@ -1,4 +1,4 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.util; +package com.jiuyv.sptcc.carbon.userGate.common.util; import java.util.zip.CRC32; diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/DateUtil.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/common/util/DateUtil.java similarity index 98% rename from carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/DateUtil.java rename to carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/common/util/DateUtil.java index b1ede310..073f114e 100644 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/DateUtil.java +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/common/util/DateUtil.java @@ -1,4 +1,4 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.util; +package com.jiuyv.sptcc.carbon.userGate.common.util; import org.apache.commons.lang.StringUtils; diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/JsonUtil.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/common/util/JsonUtil.java similarity index 71% rename from carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/JsonUtil.java rename to carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/common/util/JsonUtil.java index bac89f3d..9912e4ca 100644 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/JsonUtil.java +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/common/util/JsonUtil.java @@ -1,10 +1,9 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.util; +package com.jiuyv.sptcc.carbon.userGate.common.util; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.ObjectMapper; -import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -85,36 +84,5 @@ public abstract class JsonUtil { return objectMapper.getTypeFactory().constructParametricType(collectionClass, elementClasses); } - /** - * 输出打印日志对象json - * 屏蔽指定域 - * - * @param object the object - * @return the string - */ - public static String convertToLogJson(Object obj, String[] hiddenField) { - try { - JSONObject json = new JSONObject(convertToJson(obj)); - for (String hd : hiddenField) { - if (!json.isNull(hd)) {// 如果不为空才隐藏 - json.put(hd, "************"); - } - } - return json.toString(); - } catch (Exception e) { - LOGGER.error("convert failed", e); - return null; - } - } - /** - * 输出打印日志对象json - * 屏蔽默认域 - * - * @param object the object - * @return the string - */ - public static String convertToLogJson(Object obj) { - return convertToLogJson(obj, hiddenField); - } } diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/Sm3Util.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/common/util/Sm3Util.java similarity index 97% rename from carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/Sm3Util.java rename to carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/common/util/Sm3Util.java index 0f72196f..878c1679 100644 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/Sm3Util.java +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/common/util/Sm3Util.java @@ -1,4 +1,4 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.util; +package com.jiuyv.sptcc.carbon.userGate.common.util; import org.bouncycastle.crypto.digests.SM3Digest; import org.bouncycastle.crypto.macs.HMac; diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/Sm4Util.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/common/util/Sm4Util.java similarity index 98% rename from carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/Sm4Util.java rename to carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/common/util/Sm4Util.java index fcce41e3..6eafd658 100644 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/Sm4Util.java +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/common/util/Sm4Util.java @@ -1,4 +1,4 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.util; +package com.jiuyv.sptcc.carbon.userGate.common.util; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.pqc.math.linearalgebra.ByteUtils; diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/Util.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/common/util/Util.java similarity index 98% rename from carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/Util.java rename to carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/common/util/Util.java index 1ba48ca4..d8658d15 100644 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/Util.java +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/common/util/Util.java @@ -13,7 +13,7 @@ along with Wget. If not, see . Additional permission under GNU GPL version 3 section 7 */ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.util; +package com.jiuyv.sptcc.carbon.userGate.common.util; import java.math.BigInteger; import java.text.SimpleDateFormat; diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/ActuatorSecurityConfig.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/config/ActuatorSecurityConfig.java similarity index 95% rename from carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/ActuatorSecurityConfig.java rename to carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/config/ActuatorSecurityConfig.java index 4ea73552..a18634ee 100644 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/ActuatorSecurityConfig.java +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/config/ActuatorSecurityConfig.java @@ -1,4 +1,4 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common; +package com.jiuyv.sptcc.carbon.userGate.config; import org.apache.commons.lang.StringUtils; diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/config/NettyBusinessTaskExecutorConfig.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/config/NettyBusinessTaskExecutorConfig.java deleted file mode 100644 index cc9c4590..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/config/NettyBusinessTaskExecutorConfig.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.config; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.task.TaskExecutor; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; - -import javax.annotation.PostConstruct; -import java.util.concurrent.ThreadPoolExecutor; - -@EnableAsync -@Configuration -public class NettyBusinessTaskExecutorConfig { - private static final Logger LOGGER = LoggerFactory.getLogger(NettyBusinessTaskExecutorConfig.class); - - @Value("${netty.maxBusinessThread}") - private int maxBusinessThreads; - - @PostConstruct - public void init() { - LOGGER.info("netty server 最大业务线程数 {}", maxBusinessThreads); - } - - @Bean("asyncBusinessExecutor") - public TaskExecutor getAsyncExecutor() { - ThreadPoolTaskExecutor taskExecutor = - new ThreadPoolTaskExecutor(); - taskExecutor.setThreadNamePrefix("netty-business-ayncTask-"); - taskExecutor.setCorePoolSize(maxBusinessThreads / 2); - taskExecutor.setMaxPoolSize(maxBusinessThreads); - taskExecutor.setQueueCapacity(maxBusinessThreads * 5); - taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy()); - return taskExecutor; - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/config/NettyProperties.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/config/NettyProperties.java new file mode 100644 index 00000000..feb4d1c4 --- /dev/null +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/config/NettyProperties.java @@ -0,0 +1,42 @@ +package com.jiuyv.sptcc.carbon.userGate.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @author ren_chao + */ +@Component +@ConfigurationProperties(prefix = "netty") +public class NettyProperties { + private String host; + private Integer port; + /** + * 最大连接数,默认5 + */ + private int maxConnections = 5; + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public Integer getPort() { + return port; + } + + public void setPort(Integer port) { + this.port = port; + } + + public int getMaxConnections() { + return maxConnections; + } + + public void setMaxConnections(int maxConnections) { + this.maxConnections = maxConnections; + } +} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/controller/UserCenterController.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/controller/UserCenterController.java new file mode 100644 index 00000000..750724c3 --- /dev/null +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/controller/UserCenterController.java @@ -0,0 +1,180 @@ +package com.jiuyv.sptcc.carbon.userGate.controller; + +import com.jiuyv.sptcc.carbon.gate.api.IUserGateApi; +import com.jiuyv.sptcc.carbon.gate.dto.QryThreeInOneInfo; +import com.jiuyv.sptcc.carbon.gate.dto.QryUserRealnameInfo; +import com.jiuyv.sptcc.carbon.gate.dto.QryUserUID; +import com.jiuyv.sptcc.carbon.userGate.common.Constant; +import com.jiuyv.sptcc.carbon.userGate.common.util.Sm3Util; +import com.jiuyv.sptcc.carbon.userGate.common.util.Sm4Util; +import com.jiuyv.sptcc.carbon.userGate.config.BaseConfig; +import com.jiuyv.sptcc.carbon.userGate.exception.ServiceException; +import com.jiuyv.sptcc.carbon.userGate.message.RealNameRecordMsg; +import com.jiuyv.sptcc.carbon.userGate.message.ReqQryUserMsg; +import com.jiuyv.sptcc.carbon.userGate.message.ReqThreeRealInfoMsg; +import com.jiuyv.sptcc.carbon.userGate.message.ReqUserRealNameInfoMsg; +import com.jiuyv.sptcc.carbon.userGate.message.ResQryUserMsg; +import com.jiuyv.sptcc.carbon.userGate.message.ResThreeRealInfoMsg; +import com.jiuyv.sptcc.carbon.userGate.message.ResUserRealNameInfoMsg; +import com.jiuyv.sptcc.carbon.userGate.service.INettyClientService; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import org.apache.commons.lang.StringUtils; +import org.apache.tomcat.util.buf.HexUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.List; + +/** + * 用户中心接口 + * + * @author ren_chao + */ +@RestController +public class UserCenterController implements IUserGateApi { + private static final Logger LOGGER = LoggerFactory.getLogger(UserCenterController.class); + + private final INettyClientService nettyClientService; + + private final String sm4key; + + public UserCenterController(INettyClientService nettyClientService, BaseConfig baseConfig) { + this.nettyClientService = nettyClientService; + this.sm4key = HexUtils.toHexString(baseConfig.getSm4key().getBytes()); + } + + /** + * 2.1. 根据手机号查询三合一实名信息 + */ + @Override + public QryThreeInOneInfo.RespDTO queryRealNameInfoByPhone(QryThreeInOneInfo.ReqDTO reqDTO) { + ReqThreeRealInfoMsg reqMessage = new ReqThreeRealInfoMsg(); + reqMessage.setPhoneNo(reqDTO.getPhoneNo()); + ResThreeRealInfoMsg rsp = nettyClientService.sendRequest(reqMessage, "2997", ResThreeRealInfoMsg.class); + + QryThreeInOneInfo.RespDTO resp = new QryThreeInOneInfo.RespDTO(reqDTO.getReqId(), Constant.RespCode.SUCCESS, + Constant.RespMsg.SUCCESS, rsp.getDesc(), rsp.getCentDate(), rsp.getCentralSeq()); + + // 解析交易记录 + ByteBuf buffer = ByteBufAllocator.DEFAULT.buffer(); + buffer.writeBytes(rsp.getRecordBody()); + + List list = new ArrayList<>(); + String reqName = reqDTO.getName(); + String reqCertNo = reqDTO.getCertNo(); + + handleRecord(reqName, reqCertNo, buffer, list); + resp.setRecords(list); + + // 查询剩余部分 + int snum = Integer.parseInt(rsp.getSnum()); + int startNo = 1; + + while (snum > 0) { + startNo = startNo + Integer.parseInt(rsp.getCnum()); + reqMessage.setStartNo(Integer.toString(startNo)); + rsp = nettyClientService.sendRequest(reqMessage, "2997", ResThreeRealInfoMsg.class); + buffer.clear().writeBytes(rsp.getRecordBody()); + handleRecord(reqName, reqCertNo, buffer, list); + buffer.readBytes(rsp.getMessage()); + snum = Integer.parseInt(rsp.getSnum()); + } + return resp; + } + + /** + * 用户实名查询/渠道用户查询 + */ + @Override + public QryUserRealnameInfo.RespDTO qryUserRealnameInfo(@RequestBody QryUserRealnameInfo.ReqDTO reqDTO) { + ReqUserRealNameInfoMsg reqMessage = new ReqUserRealNameInfoMsg(); + reqMessage.setCenterSequence(reqDTO.getCenterSequence()); + reqMessage.setTransactionType(reqDTO.getTransactionType()); + reqMessage.setPhoneNo(reqDTO.getPhoneNo()); + reqMessage.setUserId(reqDTO.getUserId()); + reqMessage.setNote(reqDTO.getNote()); + ResUserRealNameInfoMsg rsp = nettyClientService.sendRequest(reqMessage, "2993", ResUserRealNameInfoMsg.class); + + QryUserRealnameInfo.RespDTO resp = new QryUserRealnameInfo.RespDTO(); + resp.setReqId(reqDTO.getReqId()); + resp.setRespCode(Constant.RespCode.SUCCESS); + resp.setRespDesc(Constant.RespMsg.SUCCESS); + resp.setRespMsg(rsp.getDesc()); + resp.setCenterDate(rsp.getCentDate()); + resp.setCenterSequence(rsp.getCentralSeq()); + try { + resp.setCertNo(Sm4Util.decryptEcb(sm4key, rsp.getCertNo()).trim()); + resp.setCertType(Sm4Util.decryptEcb(sm4key, rsp.getCertType()).trim()); + resp.setName(Sm4Util.decryptEcb(sm4key, rsp.getName()).trim()); + resp.setPhoneNo(Sm4Util.decryptEcb(sm4key, rsp.getPhoneNo()).trim()); + } catch (Exception e) { + LOGGER.error("解密失败", e); + throw new ServiceException("解密失败"); + } + // 没有证件类型默认身份证 + if (StringUtils.isBlank(resp.getCertType())) { + LOGGER.info("无证件类型,默认身份证"); + resp.setCertType("0"); + } + return resp; + } + + + /** + * 交通卡用户UID查询 + */ + @Override + public QryUserUID.RespDTO qryUserUID(@RequestBody QryUserUID.ReqDTO reqDTO) { + ReqQryUserMsg reqMessage = new ReqQryUserMsg(); + reqMessage.setChannleNo(reqDTO.getChannelNo()); + reqMessage.setChannleUID(reqDTO.getChannelUID()); + reqMessage.setNote(reqDTO.getNote()); + + ResQryUserMsg rsp = nettyClientService.sendRequest(reqMessage, "2994", ResQryUserMsg.class); + QryUserUID.RespDTO resp = new QryUserUID.RespDTO(); + resp.setReqId(reqDTO.getReqId()); + resp.setRespCode(Constant.RespCode.SUCCESS); + resp.setRespDesc(Constant.RespMsg.SUCCESS); + resp.setRespMsg(rsp.getDesc()); + resp.setCenterDate(rsp.getCentDate()); + resp.setCenterSequence(rsp.getCentralSeq()); + resp.setUserId(rsp.getUserId()); + return resp; + } + + + + + private void handleRecord(String reqName, String reqCertNo, ByteBuf buffer, List list) { + RealNameRecordMsg recordMessage = new RealNameRecordMsg(); + while (buffer.isReadable()) { + buffer.readBytes(recordMessage.getMessage()); + String name; + String certNo; + String certNoCiphertext; + try { + name = Sm4Util.decryptEcb(sm4key, recordMessage.getName()).trim(); + certNo = Sm4Util.decryptEcb(sm4key, recordMessage.getCertNo()).trim(); + certNoCiphertext = Sm3Util.encrypt(certNo); + } catch (Exception e) { + LOGGER.error("解密失败或hash失败", e); + throw new ServiceException("解密失败或hash失败"); + } + LOGGER.debug("姓名:{},证件号:{}", name, certNoCiphertext); + if (certNoCiphertext.equals(reqCertNo) && name.equals(reqName)) { + QryThreeInOneInfo.Record record = new QryThreeInOneInfo.Record(); + record.setChannelNo(recordMessage.getChannelNo()); + record.setChannelId(recordMessage.getChannelId()); + record.setName(name); + record.setCertNo(certNo); + record.setNote(recordMessage.getNote()); + list.add(record); + } + } + } + +} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/exception/GlobalExceptionHandler.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/exception/GlobalExceptionHandler.java new file mode 100644 index 00000000..9902a64e --- /dev/null +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/exception/GlobalExceptionHandler.java @@ -0,0 +1,41 @@ +package com.jiuyv.sptcc.carbon.userGate.exception; + +import com.jiuyv.sptcc.carbon.gate.dto.BaseRespVo; +import com.jiuyv.sptcc.carbon.userGate.common.Constant; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import javax.servlet.http.HttpServletRequest; + +/** + * 全局异常处理器 + * + * @author admin + */ +@RestControllerAdvice +public class GlobalExceptionHandler { + private static final Logger LOGGER = LoggerFactory.getLogger(GlobalExceptionHandler.class); + + /** + * 业务异常 + */ + @ExceptionHandler({ServiceException.class}) + public BaseRespVo handleServiceException(ServiceException e) { + LOGGER.error(e.getMessage(), e); + String code = e.getCode(); + return new BaseRespVo(null, code == null ? Constant.RespCode.SYS_UNKNOWN_ERROR : code, e.getMessage()); + } + + /** + * 系统异常 + */ + @ExceptionHandler(Exception.class) + public BaseRespVo handleException(Exception e, HttpServletRequest request) { + String requestURI = request.getRequestURI(); + LOGGER.error("请求地址'{}',发生系统异常.", requestURI, e); + return new BaseRespVo(null, Constant.RespCode.SYS_UNKNOWN_ERROR, e.getMessage()); + } + +} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/exception/ServiceException.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/exception/ServiceException.java new file mode 100644 index 00000000..85b7cda0 --- /dev/null +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/exception/ServiceException.java @@ -0,0 +1,27 @@ +package com.jiuyv.sptcc.carbon.userGate.exception; + +/** + * 业务异常 + * + */ +public final class ServiceException extends RuntimeException { + private static final long serialVersionUID = 1L; + + /** + * 返回码 + */ + private String code; + + public ServiceException(String message) { + super(message); + } + + public ServiceException(String code, String message) { + super(message); + this.code = code; + } + + public String getCode() { + return code; + } +} \ No newline at end of file diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/handler/ClientMessageHandler.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/handler/ClientMessageHandler.java new file mode 100644 index 00000000..312bec24 --- /dev/null +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/handler/ClientMessageHandler.java @@ -0,0 +1,29 @@ +package com.jiuyv.sptcc.carbon.userGate.handler; + +import com.jiuyv.sptcc.carbon.userGate.message.Message; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; + +import java.util.concurrent.CompletableFuture; + +/** + * 报文接收处理器 + * + * @author ren_chao + */ +public class ClientMessageHandler extends ChannelInboundHandlerAdapter { + + private CompletableFuture responseFuture; + + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) { + if (responseFuture != null && msg instanceof Message) { + responseFuture.complete((Message) msg); + responseFuture = null; + } + } + + public void setConnectionPromise(CompletableFuture responseFuture) { + this.responseFuture = responseFuture; + } +} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/handler/MessageDecoder.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/handler/MessageDecoder.java similarity index 61% rename from carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/handler/MessageDecoder.java rename to carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/handler/MessageDecoder.java index 2b8de5dd..9ec3c16f 100644 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/handler/MessageDecoder.java +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/handler/MessageDecoder.java @@ -1,33 +1,35 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.handler; +package com.jiuyv.sptcc.carbon.userGate.handler; -import com.jiuyv.sptcc.carbon.userGate.userGate.message.ReqHeaderMessage; +import com.jiuyv.sptcc.carbon.userGate.message.Message; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageDecoder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.nio.charset.Charset; import java.util.List; /** * 4字节通讯长度 非标准,需要自定义解码器 + * * @author ren_chao */ public class MessageDecoder extends ByteToMessageDecoder { private static final Logger LOGGER = LoggerFactory.getLogger(MessageDecoder.class); + private static final Charset CHARSET_GBK = Charset.forName("GBK"); + @Override - protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { + protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) { if (in.readableBytes() < 4) { - LOGGER.info("----package len not enought"); return; } - byte[] packageLenByte = new byte[4]; in.readBytes(packageLenByte); - int packageLen = Integer.parseInt(new String(packageLenByte)); - - ReqHeaderMessage headerMessage = new ReqHeaderMessage(); + String lenStr = new String(packageLenByte, CHARSET_GBK); + int packageLen = Integer.parseInt(lenStr); + Message headerMessage = new Message(); if (0 == packageLen) { out.add(headerMessage); return; @@ -36,12 +38,14 @@ public class MessageDecoder extends ByteToMessageDecoder { in.resetReaderIndex(); return; } - in.readBytes(headerMessage.getMessage()); - byte[] bytes = new byte[in.readableBytes()]; in.readBytes(bytes); - headerMessage.setRecordContent(bytes); + headerMessage.setBody(bytes); + + LOGGER.info("响应报文长度:{}", lenStr); + LOGGER.info("响应报文头:{}", new String(headerMessage.getMessage(), CHARSET_GBK)); + LOGGER.info("响应报文体:{}", new String(bytes, CHARSET_GBK)); out.add(headerMessage); } } diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/handler/MessageEncoder.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/handler/MessageEncoder.java new file mode 100644 index 00000000..9b2d9ccd --- /dev/null +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/handler/MessageEncoder.java @@ -0,0 +1,47 @@ +package com.jiuyv.sptcc.carbon.userGate.handler; + +import com.jiuyv.sptcc.carbon.userGate.common.util.ByteUtil; +import com.jiuyv.sptcc.carbon.userGate.common.util.CrcUtil; +import com.jiuyv.sptcc.carbon.userGate.common.util.Util; +import com.jiuyv.sptcc.carbon.userGate.message.Message; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToByteEncoder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.nio.charset.Charset; + +/** + * 请求报文编码器 + * + * @author ren_chao + */ +public class MessageEncoder extends MessageToByteEncoder { + private static final Logger LOGGER = LoggerFactory.getLogger(MessageEncoder.class); + + private static final Charset CHARSET_GBK = Charset.forName("GBK"); + + @Override + protected void encode(ChannelHandlerContext ctx, Message msg, ByteBuf out) throws Exception { + byte[] content = msg.getBody(); + int len = content.length + msg.size(); + String length = String.format("%04d", len); + msg.setRecordLen(length); + + byte[] macCode = ByteUtil.bytestoasciibytes(Util.toBytes((int) CrcUtil.mkCrc32(content))); + msg.setRacCode(new String(macCode)); + + ByteBuf buffer = ByteBufAllocator.DEFAULT.buffer(); + buffer.writeBytes(length.getBytes()); + buffer.writeBytes(msg.getMessage()); + buffer.writeBytes(content); + + byte[] bytes = new byte[len + 4]; + buffer.readBytes(bytes); + LOGGER.info("请求报文:{}", new String(bytes, CHARSET_GBK)); + buffer.resetReaderIndex(); + out.writeBytes(buffer); + } +} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/message/AbstractMessage.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/AbstractMessage.java similarity index 83% rename from carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/message/AbstractMessage.java rename to carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/AbstractMessage.java index b24aa0f1..0af83c67 100644 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/message/AbstractMessage.java +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/AbstractMessage.java @@ -1,11 +1,8 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.message; +package com.jiuyv.sptcc.carbon.userGate.message; -import com.jiuyv.sptcc.carbon.userGate.userGate.exception.ServiceException; import org.apache.commons.lang3.StringUtils; import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; -import java.util.Arrays; /** * 报文基类 @@ -42,7 +39,7 @@ public abstract class AbstractMessage { protected String arraycopy(int destPos, int length) { byte[] dest = new byte[length]; System.arraycopy(message, destPos, dest, 0, length); - return new String(dest, CHARSET_GBK); + return new String(dest, CHARSET_GBK).trim(); } /** diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/AbstractReqBodyMessage.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/AbstractReqBodyMessage.java new file mode 100644 index 00000000..82425ae7 --- /dev/null +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/AbstractReqBodyMessage.java @@ -0,0 +1,41 @@ +package com.jiuyv.sptcc.carbon.userGate.message; + +import com.jiuyv.sptcc.carbon.userGate.common.util.DateUtil; +import org.apache.commons.lang3.StringUtils; + +/** + * @author ren_chao + */ +public abstract class AbstractReqBodyMessage extends AbstractMessage { + /** + * 公共部分:中心流水号、交易类型 + */ + private static final int COMMON_LENGTH = 18; + + public AbstractReqBodyMessage(int length) { + super(COMMON_LENGTH + length); + } + + /** + * 中心流水号 8位日期+6位0 + * N14 + */ + public void setCenterSequence(String centerSequence) { + if (StringUtils.isBlank(centerSequence)) { + centerSequence = DateUtil.getDate() + "000000"; + } + setArray(centerSequence, 0, 14); + } + + /** + * 交易类型 全0 + * N4 + */ + public void setTransactionType(String transactionType) { + if (StringUtils.isBlank(transactionType)) { + transactionType = "0000"; + } + setArray(transactionType, 14, 4); + } + +} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/AbstractResBodyMessage.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/AbstractResBodyMessage.java new file mode 100644 index 00000000..30b3c478 --- /dev/null +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/AbstractResBodyMessage.java @@ -0,0 +1,62 @@ +package com.jiuyv.sptcc.carbon.userGate.message; + +/** + * @author ren_chao + */ +public abstract class AbstractResBodyMessage extends AbstractMessage { + + /** + * 公共部分:应答代码、代码含义描述、中心受理日期、中心受理流水 + */ + private static final int COMMON_LENGTH = 62; + + /** + * 交易记录体【可变】 依次排列 + */ + private byte[] recordBody; + + public AbstractResBodyMessage(int length) { + super(COMMON_LENGTH + length); + } + + public byte[] getRecordBody() { + return recordBody; + } + + public void setRecordBody(byte[] recordBody) { + this.recordBody = recordBody; + } + + /** + * 应答代码 + * H2 + */ + public String getResponseCode() { + return arraycopy(0, 2); + } + + /** + * 代码含义描述 + * H40 + */ + public String getDesc() { + return arraycopy(2, 40); + } + + /** + * 中心受理日期 + * N8 + */ + public String getCentDate() { + return arraycopy(42, 8); + } + + /** + * 中心受理流水 + * N12 + */ + public String getCentralSeq() { + return arraycopy(50, 12); + } + +} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/message/ReqHeaderMessage.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/Message.java similarity index 70% rename from carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/message/ReqHeaderMessage.java rename to carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/Message.java index 7d0184f2..f19cf7db 100644 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/message/ReqHeaderMessage.java +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/Message.java @@ -1,4 +1,4 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.message; +package com.jiuyv.sptcc.carbon.userGate.message; import java.util.Arrays; @@ -7,22 +7,43 @@ import java.util.Arrays; * * @author ren_chao */ -public class ReqHeaderMessage extends AbstractMessage { +public class Message extends AbstractMessage { + + /** + * 请求码 + */ + private static final String REQ_RECORD_CODE = "0"; + /** + * 安全模块号 模块:取模块编号(同一个节点做交易时模块号可能不同,充资移入对应一个,售卡退卡对应一个) + * POS_NO = "200095070001"; // 200095070002 备用 + * N12 + */ + private static final String SAM_ID = "200095070001"; + /** + * 随机数 通讯密钥的分散因子Random A H16 + */ + private static final String RANDOM = "0000000000000000"; + /** + * 营运公司代码 地铁行业填线路站点信息 + * N11 + */ + private static final String COMPANY_CODE = "00095000012"; - private byte[] recordContent; - public byte[] getRecordContent() { - return recordContent; + private byte[] body; + + public byte[] getBody() { + return body; } - public void setRecordContent(byte[] recordContent) { - this.recordContent = recordContent; + public void setBody(byte[] body) { + this.body = body; } /** * 业务报文头 总长度固定 112 */ - public ReqHeaderMessage() { + public Message() { super(112); // 全部置为 ASCII 0 Arrays.fill(getMessage(), (byte) 48); @@ -182,4 +203,21 @@ public class ReqHeaderMessage extends AbstractMessage { setArray(racCode, 104, 8); } + /** + * 构建请求头 + */ + public static Message buildRequestHeader(AbstractReqBodyMessage contentMessage, String recordCode) { + Message header = new Message(); + header.setBody(contentMessage.getMessage()); + header.setRecordCode(recordCode); + header.setRecordLen(String.format("%04d", contentMessage.size() + header.size())); + header.setRequestFlag(REQ_RECORD_CODE); + header.setSamId(SAM_ID); + header.setRandom(RANDOM); + header.setCompanyCode(COMPANY_CODE); + header.setTerminalCode(SAM_ID.substring(4)); + header.setOprCode(SAM_ID.substring(4)); + return header; + } + } diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/RealNameRecordMsg.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/RealNameRecordMsg.java new file mode 100644 index 00000000..55a1c1e9 --- /dev/null +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/RealNameRecordMsg.java @@ -0,0 +1,57 @@ +package com.jiuyv.sptcc.carbon.userGate.message; + +/** + * 2.1. 根据手机号查询三合一实名信息 交易记录体 + * + * @author ren_chao + */ +public class RealNameRecordMsg extends AbstractMessage { + + /** + * 每个交易记录体 408 + */ + public RealNameRecordMsg() { + super(408); + } + + /** + * 渠道号 + * N4 + */ + public String getChannelNo() { + return arraycopy(0, 4); + } + + /** + * 渠道ID + * N128 + */ + public String getChannelId() { + return arraycopy(4, 128); + } + + /** + * 姓名 + * H128 + */ + public String getName() { + return arraycopy(132, 128); + } + + /** + * 证件号 + * H128 + */ + public String getCertNo() { + return arraycopy(260, 128); + } + + /** + * 备注 + * ANS20 + */ + public String getNote() { + return arraycopy(388, 20); + } + +} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/ReqQryUserMsg.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/ReqQryUserMsg.java new file mode 100644 index 00000000..d7588070 --- /dev/null +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/ReqQryUserMsg.java @@ -0,0 +1,67 @@ +package com.jiuyv.sptcc.carbon.userGate.message; + +import org.apache.commons.lang3.StringUtils; + +/** + * @author ren_chao + */ +public class ReqQryUserMsg extends AbstractReqBodyMessage { + /** + * 本消息体长度 【不包含公共部分18】 + */ + private static final int LENGTH = 194 - 18; + + public ReqQryUserMsg() { + super(LENGTH); + setCenterSequence(null); + setTransactionType(null); + setPhoneNO(null); + setQueryType("0001"); + setNote(null); + } + + /** + * 渠道号 4 + */ + public void setChannleNo(String channleNo) { + if (channleNo.equals("SPTCC_APP")) { + setArray("0004", 18, 4); + } else if (channleNo.equals("ALIPAY")) { + setArray("0009", 18, 4); + } else { + // 支付渠道未知 + setArray(null, 18, 4); + } + } + + /** + * 渠道用户uid 128 + */ + public void setChannleUID(String channleUID) { + setArray(channleUID, 22, 128); + } + + /** + * 渠道手机号 20 + */ + public void setPhoneNO(String phoneNO) { + setArray(phoneNO, 150, 20); + } + + /** + * 查询类型 4 + */ + public void setQueryType(String queryType) { + if (StringUtils.isBlank(queryType)) { + queryType = "0001"; + } + setArray(queryType, 170, 4); + } + + /** + * 备注 20 + */ + public void setNote(String note) { + setArray(note, 174, 20); + } +} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/ReqThreeRealInfoMsg.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/ReqThreeRealInfoMsg.java new file mode 100644 index 00000000..fa529a95 --- /dev/null +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/ReqThreeRealInfoMsg.java @@ -0,0 +1,53 @@ +package com.jiuyv.sptcc.carbon.userGate.message; + +import org.apache.commons.lang3.StringUtils; + +/** + * 2.1. 根据手机号查询三合一实名信息 请求报文体 + * + * @author ren_chao + */ +public class ReqThreeRealInfoMsg extends AbstractReqBodyMessage { + /** + * 本消息体长度 【不包含公共部分18】 + */ + private static final int LENGTH = 86 - 18; + + public ReqThreeRealInfoMsg() { + super(LENGTH); + setCenterSequence(null); + setTransactionType(null); + setPhoneNo(null); + setStartNo("1"); + setNote(null); + } + + /** + * 手机号 选填 + * N20 + */ + public void setPhoneNo(String phoneNo) { + setArray(phoneNo, 18, 20); + } + + /** + * 起始记录号 + * 从1开始查,每次后台最多返回10条,超过10条的需要前端分次查询,第二次查询从11开始查,以此类推 + * N8 + */ + public void setStartNo(String startNo) { + if (StringUtils.isBlank(startNo)) { + startNo = "1"; + } + setArray(startNo, 38, 8); + } + + /** + * 查询备注 + * H40 + */ + public void setNote(String note) { + setArray(note, 46, 40); + } + +} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/ReqUserRealNameInfoMsg.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/ReqUserRealNameInfoMsg.java new file mode 100644 index 00000000..b282d7e5 --- /dev/null +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/ReqUserRealNameInfoMsg.java @@ -0,0 +1,34 @@ +package com.jiuyv.sptcc.carbon.userGate.message; + +/** + * 用户实名信息 TCP请求体 + * + * @author ren_chao + */ +public class ReqUserRealNameInfoMsg extends AbstractReqBodyMessage { + /** + * 本消息体长度 【不包含公共部分18】 + */ + private static final int LENGTH = 68 - 18; + + public ReqUserRealNameInfoMsg() { + super(LENGTH); + setCenterSequence(null); + setTransactionType(null); + setPhoneNo(null); + setUserId(null); + setNote(null); + } + + public void setPhoneNo(String phoneNo) { + setArray(phoneNo, 18, 20); + } + + public void setUserId(String userId) { + setArray(userId, 38, 10); + } + + public void setNote(String note) { + setArray(note, 48, 20); + } +} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/ResQryUserMsg.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/ResQryUserMsg.java new file mode 100644 index 00000000..1bf98622 --- /dev/null +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/ResQryUserMsg.java @@ -0,0 +1,30 @@ +package com.jiuyv.sptcc.carbon.userGate.message; + +/** + * @author ren_chao + */ +public class ResQryUserMsg extends AbstractResBodyMessage { + /** + * 本消息体长度 【不包含公共部分62】 + */ + private static final int LENGTH = 84 - 62; + + public ResQryUserMsg() { + super(LENGTH); + } + + /** + * 交通卡用户uid + */ + public String getUserId() { + return arraycopy(62, 10); + } + + /** + * 交通卡用户sptccId + */ + public String getSptccId() { + return arraycopy(72, 12); + } + +} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/ResThreeRealInfoMsg.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/ResThreeRealInfoMsg.java new file mode 100644 index 00000000..7509d119 --- /dev/null +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/ResThreeRealInfoMsg.java @@ -0,0 +1,50 @@ +package com.jiuyv.sptcc.carbon.userGate.message; + +/** + * 2.1. 根据手机号查询三合一实名信息 应答报文体 + * + * @author ren_chao + */ +public class ResThreeRealInfoMsg extends AbstractResBodyMessage { + /** + * 本消息体长度 【不包含公共部分62】 + */ + private static final int LENGTH = 110 - 62; + + public ResThreeRealInfoMsg() { + super(LENGTH); + } + + /** + * 总记录数 + * N12 + */ + public String getTotNum() { + return arraycopy(62, 12); + } + + /** + * 剩余记录数 + * N12 + */ + public String getSnum() { + return arraycopy(74, 12); + } + + /** + * 本页记录数 + * N12 + */ + public String getCnum() { + return arraycopy(86, 12); + } + + /** + * 起始记录号 + * N12 + */ + public String getQnum() { + return arraycopy(98, 12); + } + +} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/ResUserRealNameInfoMsg.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/ResUserRealNameInfoMsg.java new file mode 100644 index 00000000..2e6b3a48 --- /dev/null +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/message/ResUserRealNameInfoMsg.java @@ -0,0 +1,46 @@ +package com.jiuyv.sptcc.carbon.userGate.message; + +/** + * 用户实名信息 TCP响应体 + * + * @author ren_chao + */ +public class ResUserRealNameInfoMsg extends AbstractResBodyMessage { + /** + * 本消息体长度 【不包含公共部分62】 + */ + private static final int LENGTH = 414 - 62; + + public ResUserRealNameInfoMsg() { + super(LENGTH); + } + + /** + * 姓名 + */ + public String getName() { + return arraycopy(62, 128); + } + + /** + * 证件号 + */ + public String getCertNo() { + return arraycopy(190, 128); + } + + /** + * 证件类型 + */ + public String getCertType() { + return arraycopy(318, 32); + } + + /** + * 手机号 + */ + public String getPhoneNo() { + return arraycopy(350, 64); + } + +} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/service/INettyClientService.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/service/INettyClientService.java new file mode 100644 index 00000000..b1706db5 --- /dev/null +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/service/INettyClientService.java @@ -0,0 +1,18 @@ +package com.jiuyv.sptcc.carbon.userGate.service; + +import com.jiuyv.sptcc.carbon.userGate.message.AbstractReqBodyMessage; +import com.jiuyv.sptcc.carbon.userGate.message.AbstractResBodyMessage; + +/** + * Netty 请求服务, + * 暂时使用短连接 + * + * @author ren_chao + */ +public interface INettyClientService { + + /** + * 发送请求 + */ + T sendRequest(AbstractReqBodyMessage contentMessage, String recordCode, Class clazz); +} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/service/impl/NettyClientServiceImpl.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/service/impl/NettyClientServiceImpl.java new file mode 100644 index 00000000..a6895a03 --- /dev/null +++ b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/service/impl/NettyClientServiceImpl.java @@ -0,0 +1,135 @@ +package com.jiuyv.sptcc.carbon.userGate.service.impl; + +import com.jiuyv.sptcc.carbon.userGate.common.Constant; +import com.jiuyv.sptcc.carbon.userGate.config.NettyProperties; +import com.jiuyv.sptcc.carbon.userGate.exception.ServiceException; +import com.jiuyv.sptcc.carbon.userGate.handler.ClientMessageHandler; +import com.jiuyv.sptcc.carbon.userGate.handler.MessageDecoder; +import com.jiuyv.sptcc.carbon.userGate.handler.MessageEncoder; +import com.jiuyv.sptcc.carbon.userGate.message.AbstractReqBodyMessage; +import com.jiuyv.sptcc.carbon.userGate.message.AbstractResBodyMessage; +import com.jiuyv.sptcc.carbon.userGate.message.Message; +import com.jiuyv.sptcc.carbon.userGate.service.INettyClientService; +import io.netty.bootstrap.Bootstrap; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import io.netty.channel.Channel; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.pool.ChannelHealthChecker; +import io.netty.channel.pool.ChannelPoolHandler; +import io.netty.channel.pool.FixedChannelPool; +import io.netty.channel.socket.nio.NioSocketChannel; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.net.InetSocketAddress; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +/** + * Netty客户端 请求服务 + * + * @author ren_chao + */ +@Service +public class NettyClientServiceImpl implements INettyClientService { + private static final Logger LOGGER = LoggerFactory.getLogger(NettyClientServiceImpl.class); + + /** + * 申请Channel超时时间 + */ + private static final int ACQUIRE_TIMEOUT_MILLIS = 100; + + /** + * 待处理获取的最大数量 + */ + private static final int MAX_PENDING_ACQUIRES = 500; + + private final FixedChannelPool pool; + + public NettyClientServiceImpl(NettyProperties nettyProperties) { + Bootstrap bootstrap = new Bootstrap() + .group(new NioEventLoopGroup()) + .channel(NioSocketChannel.class) + .remoteAddress(new InetSocketAddress(nettyProperties.getHost(), nettyProperties.getPort())); + this.pool = new FixedChannelPool(bootstrap, new UserChannelPoolHandler(), ChannelHealthChecker.ACTIVE, + FixedChannelPool.AcquireTimeoutAction.NEW, ACQUIRE_TIMEOUT_MILLIS, + nettyProperties.getMaxConnections(), MAX_PENDING_ACQUIRES); + } + + + /** + * 发送请求 + */ + @Override + public R sendRequest(AbstractReqBodyMessage contentMessage, String recordCode, Class clazz) { + CompletableFuture responseFuture = new CompletableFuture<>(); + Channel channel = getChannel(responseFuture); + Message message; + try { + channel.writeAndFlush(Message.buildRequestHeader(contentMessage, recordCode)); + // 等待返回结果,超时时间20s + message = responseFuture.get(20, TimeUnit.SECONDS); + } catch (InterruptedException | ExecutionException | TimeoutException e) { + LOGGER.error("请求用户中心服务异常", e); + throw new ServiceException("请求用户中心服务异常"); + } finally { + pool.release(channel); + } + + ByteBuf buffer = ByteBufAllocator.DEFAULT.buffer(); + buffer.writeBytes(message.getBody()); + + R rsp = BeanUtils.instantiateClass(clazz); + buffer.readBytes(rsp.getMessage()); + if (!Constant.ResponseCode.SUCCESS.equals(rsp.getResponseCode())) { + LOGGER.info("网关业务异常,{}", rsp.getResponseCode()); + throw new ServiceException(Constant.RespCode.SYS_BUSINESS_ERROR, Constant.RespMsg.SYS_BUSINESS_ERROR); + } + + // 如果有记录体,处理记录体 + int readableLen = buffer.readableBytes(); + if (readableLen > 0) { + byte[] bytes = new byte[readableLen]; + buffer.readBytes(bytes); + rsp.setRecordBody(bytes); + } + return rsp; + } + + + private Channel getChannel(CompletableFuture responseFuture) { + try { + Channel channel = this.pool.acquire().get(); + channel.pipeline().get(ClientMessageHandler.class).setConnectionPromise(responseFuture); + return channel; + } catch (InterruptedException | ExecutionException e) { + LOGGER.error("请求用户中心服务异常", e); + throw new ServiceException("请求用户中心服务异常"); + } + } + + private static class UserChannelPoolHandler implements ChannelPoolHandler { + @Override + public void channelReleased(Channel ch) { + LOGGER.debug("归还Channel,id:{}", ch.id()); + } + + @Override + public void channelAcquired(Channel ch) { + LOGGER.debug("获取Channel,id:{}。当前健康状态:{}", ch.id(), ch.isActive()); + } + + @Override + public void channelCreated(Channel ch) { + ch.pipeline().addLast(new MessageDecoder()); + ch.pipeline().addLast(new MessageEncoder()); + ch.pipeline().addLast(new ClientMessageHandler()); + LOGGER.debug("Channel创建,id:{}。", ch.id()); + } + } +} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/Application.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/Application.java deleted file mode 100644 index 81671888..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/Application.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cloud.client.discovery.EnableDiscoveryClient; -import org.springframework.cloud.openfeign.EnableFeignClients; -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.ImportResource; - -@SpringBootApplication -@EnableFeignClients -@EnableDiscoveryClient -public class Application { - - public static ApplicationContext context; - - public static void main(String[] args) { - -// SpringApplication.run(Application.class, args); - - context = SpringApplication.run(Application.class, args); - - } - -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/FeignOkHttpConfig.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/FeignOkHttpConfig.java deleted file mode 100644 index 8d5961f3..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/FeignOkHttpConfig.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common; - -import feign.Feign; -import okhttp3.Dispatcher; -import org.springframework.boot.autoconfigure.AutoConfigureBefore; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.cloud.openfeign.FeignAutoConfiguration; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * 替换spring boot原有的http发送类 - * - * @author it_Zhongpeng - */ -@Configuration -@ConditionalOnClass(Feign.class) -@AutoConfigureBefore(FeignAutoConfiguration.class) -public class FeignOkHttpConfig { - - @Bean - public okhttp3.OkHttpClient okHttpClient() { - Dispatcher pooledispatcher = new Dispatcher(); - pooledispatcher.setMaxRequestsPerHost(10000); - pooledispatcher.setMaxRequests(10000); - return new okhttp3.OkHttpClient.Builder().dispatcher(pooledispatcher).build(); - } - -} \ No newline at end of file diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/SectionHistogram.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/SectionHistogram.java deleted file mode 100644 index f68c746e..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/SectionHistogram.java +++ /dev/null @@ -1,209 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common; - -import io.prometheus.client.Collector.MetricFamilySamples; -import io.prometheus.client.Counter; -import io.prometheus.client.Histogram; -import io.prometheus.client.Histogram.Timer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.List; - -/** - * 断面摘要 - * - * @author chen_yang - * @create 2018-09-05-16:24 - */ -public class SectionHistogram { - - private static final Logger LOGGER = LoggerFactory.getLogger(SectionHistogram.class); - - /*交易合计(总数 总耗时 平均耗时)*/ - private static Histogram histogram; - /*交易失败总数 交易成功总数*/ - private static Counter counter; - - /*交易断面合计*/ - private static Histogram timingCleanHistogram; - /*定时计数器 每日0点清空*/ - private static Counter timingCleanCounter; - /*定时错误计数器 每日0点清空*/ - private static Counter errorTimingCleanCounter; - - /** - * @param subsystem 子系统名称 - * @param bucketParameters 桶基准值 - */ - public SectionHistogram(String subsystem, double... bucketParameters) { - Histogram.Builder totalHBuilder = Histogram.build() - .subsystem(subsystem) - .name("summary_histogram") - .labelNames(LabelName.ORG_CODE, LabelName.TRANS_CODE) - .help("总请求统计,根据orgCode和transCode划分"); - - Histogram.Builder timingCleanHBuilder = Histogram.build() - .subsystem(subsystem) - .name("timing_clean_histogram") - .labelNames(LabelName.ORG_CODE, LabelName.TRANS_CODE) - .help("断面请求数统计,根据orgCode和transCode划分"); - - if (null != bucketParameters && 0 != bucketParameters.length) { - totalHBuilder = totalHBuilder.buckets(bucketParameters); - timingCleanHBuilder = timingCleanHBuilder.buckets(bucketParameters); - } - - histogram = totalHBuilder.register(); - timingCleanHistogram = timingCleanHBuilder.register(); - - // 统计 成功/失败 总次数/总耗时 - counter = Counter.build() - .subsystem(subsystem) - .name("summary_counter") - .labelNames(LabelName.ORG_CODE, LabelName.TRANS_CODE, LabelName.SUMMARY_TYPE) - .help("总请求数统计,根据orgCode,transCode,成功/失败划分") - .register(); - - timingCleanCounter = Counter.build() - .subsystem(subsystem) - .name("timing_clean_counter") - .labelNames(LabelName.ORG_CODE, LabelName.TRANS_CODE, LabelName.SUMMARY_TYPE) - .help("每日计数器,根据orgCode,transCode,成功/失败 划分") - .register(); - - errorTimingCleanCounter = Counter.build() - .subsystem(subsystem) - .name("error_timing_clean_counter") - .labelNames(LabelName.ORG_CODE, LabelName.TRANS_CODE, LabelName.ERROR_CODE, LabelName.ERROR_MSG) - .help("每次错误计数器,根据orgCode,transCode,errorCode划分") - .register(); - } - - /** - * 请求累加 - * - * @param transCode 交易代码 - * @return timer计时器 - */ - public TimerTuple inc(String orgCode, String transCode) { - return TimerTuple.build( - histogram.labels(orgCode, transCode).startTimer(), - timingCleanHistogram.labels(orgCode, transCode).startTimer() - ); - } - - /** - * 应答累加 - * - * @param orgCode 请求机构代码 - * @param transCode 交易代码 - * @param timerTuple 请求累加时返回的计时器 - * @param isSuccess 应答返回是否成功 - */ - public void incResp(String orgCode, String transCode, - TimerTuple timerTuple, boolean isSuccess) { - // 请求数统计累加 & 获取 处理耗时数 - timerTuple.getTotalTimer().observeDuration(); - // 成功/失败 应答总数/应答总耗时 累加 - ResponseType responseType = - isSuccess ? ResponseType.SUCCESS : ResponseType.FAIL; - // - counter.labels(orgCode, transCode, responseType.value).inc(); - timingCleanCounter.labels(orgCode, transCode, responseType.value).inc(); - timerTuple.getTimingCleanTimer().observeDuration(); - } - - /** - * 应答累加 如果 isSuccess 值为 false 则记录 respCode到 每日累加器,每日0点清空 - * - * @param orgCode 请求机构代码 - * @param transCode 交易代码 - * @param timerTuple 请求累加时返回的计时器 - * @param respCode 应答码 - * @param isSuccess 应答返回是否成功 - */ - public void incResp(String orgCode, String transCode, - TimerTuple timerTuple, String respCode, String respDesc, boolean isSuccess) { - if (!isSuccess) { - errorTimingCleanCounter.labels(orgCode, transCode, respCode, respDesc).inc(); - } - - incResp(orgCode, transCode, timerTuple, isSuccess); - } - - /** - * 定时重置接口 重置所有定时计数器 - */ - public void resetTiming() { - LOGGER.info("计数器重置触发"); - timingCleanCounter.clear(); - timingCleanHistogram.clear(); - errorTimingCleanCounter.clear(); - } - - public List getMonitoringData() { - List familySamples = histogram.collect(); - familySamples.addAll(counter.collect()); - familySamples.addAll(timingCleanHistogram.collect()); - familySamples.addAll(timingCleanCounter.collect()); - return familySamples; - } - - /** - * 应答类型 - */ - public enum ResponseType { - SUCCESS("SUCCESS", "SUCCESS_TIME"), - FAIL("FAIL", "FAIL_TIME"), - TOTAL("TOTAL", "TOTAL_TIME"); - public final String value; - public final String timeValue; - - ResponseType(String value, String timeValue) { - this.value = value; - this.timeValue = timeValue; - } - } - - /** - * {@link Histogram}用数据标签 - */ - public static class LabelName { - - public static final String ORG_CODE = "orgCode"; - public static final String TRANS_CODE = "transCode"; - public static final String SUMMARY_TYPE = "type"; - public static final String ERROR_CODE = "errorCode"; - public static final String ERROR_MSG = "errorMsg"; - } - - /** - * 时间元组(存储计时器{@link Timer}) - */ - public static final class TimerTuple { - - public final Timer totalTimer; - public final Timer timingCleanTimer; - - private TimerTuple(Timer totalTimer, Timer timingCleanTimer) { - this.totalTimer = totalTimer; - this.timingCleanTimer = timingCleanTimer; - } - - /** - * @param totalTimer 总计时器 - * @param sectionTimer 断面计时器 - */ - public static TimerTuple build(Timer totalTimer, Timer sectionTimer) { - return new TimerTuple(totalTimer, sectionTimer); - } - - public Timer getTotalTimer() { - return totalTimer; - } - - public Timer getTimingCleanTimer() { - return timingCleanTimer; - } - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/database/exception/BaseException.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/database/exception/BaseException.java deleted file mode 100644 index 3091cfe9..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/database/exception/BaseException.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Created on 2008-11-4 - * - * 基础异常类 - */ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.database.exception; - -/** - * 基础异常. - * - * @author - * @version 1.0.0 - * @since 2013-12-19 15:36:26 - */ -public class BaseException extends Exception { - - /** - * The Constant serialVersionUID. - */ - private static final long serialVersionUID = -2856575469726587413L; - - /** - * 错误结果代码. - */ - private String errorCode; - - /** - * 错误信息. - */ - private String errorMessage; - - /** - * 构造函数. - * - * @param errorCode 错误代码 - * @param throwable Throwable - */ - public BaseException(String errorCode, Throwable throwable) { - super(throwable.getMessage()); - this.errorCode = errorCode; - this.errorMessage = throwable.getMessage(); - } - - /** - * 构造函数. - * - * @param errorCode 错误代码 - * @param errorMessage 错误信息 - */ - public BaseException(String errorCode, String errorMessage) { - super(errorMessage); - this.errorCode = errorCode; - this.errorMessage = errorMessage; - } - - /** - * 构造函数. - * - * @param errorCode 错误代码 - * @param errorMessage 错误信息 - * @param throwable the throwable - */ - public BaseException(String errorCode, String errorMessage, - Throwable throwable) { - super(errorMessage, throwable); - this.errorCode = errorCode; - this.errorMessage = errorMessage; - } - - /** - * @return the errorCode - * Get 错误结果代码. - */ - public String getErrorCode() { - return errorCode; - } - - /** - * @param errorCode the errorCode to set - * Set 错误结果代码. - */ - public void setErrorCode(String errorCode) { - this.errorCode = errorCode; - } - - /** - * @return the errorMessage - * Get 错误信息. - */ - public String getErrorMessage() { - return errorMessage; - } - - /** - * @param errorMessage the errorMessage to set - * Set 错误信息. - */ - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } - - -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/database/exception/GateException.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/database/exception/GateException.java deleted file mode 100644 index c9ec6725..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/database/exception/GateException.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.database.exception; - -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.RespCode; - -public class GateException extends Exception { - - private String errorCode; - - - public GateException() { - } - - public GateException(String message) { - super(message); - } - - public GateException(String respCode, String message) { - super(message); - this.errorCode = respCode; - } - - - public static GateException build68() { - return GateException.build(RespCode.TIME_OUT, RespCode.TIME_OUT_MSG); - } - - public static GateException build(String message) { - return new GateException(message); - } - - public static GateException build(String respCode, String message) { - return new GateException(respCode, message); - } - - public String getErrorCode() { - return errorCode; - } - - @Override - public int hashCode() { - return null != errorCode ? errorCode.hashCode() : 0; - } - - @Override - public boolean equals(Object obj) { - // 错误码不为空&& obj 是 gateException - if (null != obj && null != errorCode && obj.getClass() == this.getClass()) { - String code = ((GateException) obj).getErrorCode(); - return errorCode.equals(code) ? true : false; - } - return false; - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/database/exception/PaymentException.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/database/exception/PaymentException.java deleted file mode 100644 index 883f6552..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/database/exception/PaymentException.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Created on 2008-11-4 - * - * 基础异常类 - */ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.database.exception; - -/** - * 支付异常码 - * - * @author - * @version 1.0.0 - * @since 2013-12-19 15:36:26 - */ -public class PaymentException extends Exception { - - /** - * The Constant serialVersionUID. - */ - private static final long serialVersionUID = -2856575469726587413L; - - /** - * 支付结果代码. - */ - private String respCode; - - private String errorMessage; - - /** - * 返回秘钥编号 - */ - private String keySeq; - - /** - * 构造函数. - * - * @param respCode 错误代码 - * @param throwable Throwable - */ - public PaymentException(String respCode, String keySeq, Throwable throwable) { - super(throwable.getMessage()); - this.respCode = respCode; - this.keySeq = keySeq; - this.errorMessage = throwable.getMessage(); - } - - /** - * 构造函数. - * - * @param respCode 错误代码 - * @param errorMessage 错误信息 - */ - public PaymentException(String respCode, String errorMessage, String keySeq) { - super(errorMessage); - this.respCode = respCode; - this.keySeq = keySeq; - this.errorMessage = errorMessage; - } - - /** - * 构造函数. - * - * @param respCode 错误代码 - * @param errorMessage 错误信息 - * @param throwable the throwable - */ - public PaymentException(String respCode, String errorMessage, String keySeq, - Throwable throwable) { - super(errorMessage, throwable); - this.respCode = respCode; - this.keySeq = keySeq; - this.errorMessage = errorMessage; - } - - /** - * @return the respCode - * Get 错误结果代码. - */ - public String getRespCode() { - return respCode; - } - - /** - * @param respCode the respCode to set - * Set 错误结果代码. - */ - public void setRespCode(String respCode) { - this.respCode = respCode; - } - - /** - * @return the errorMessage - * Get 错误信息. - */ - public String getErrorMessage() { - return errorMessage; - } - - /** - * @param errorMessage the errorMessage to set - * Set 错误信息. - */ - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } - - public String getKeySeq() { - return keySeq; - } - - public void setKeySeq(String keySeq) { - this.keySeq = keySeq; - } - - -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/feign/FeignBuliderUtil.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/feign/FeignBuliderUtil.java deleted file mode 100644 index 17180f73..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/feign/FeignBuliderUtil.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.feign; - -import feign.Client; -import feign.Contract; -import feign.Feign; -import feign.codec.Decoder; -import feign.codec.Encoder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.slf4j.MDC; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; - -import java.util.HashMap; -import java.util.Map; - -/** - * 获取feign生产工厂 - * - * @author it_Zhongpeng - */ -@Configuration -@Import(MyFeignClientsConfiguration.class) -public class FeignBuliderUtil { - - private static final Logger LOGGER = LoggerFactory.getLogger(FeignBuliderUtil.class); - - // Feign 原生构造器 - private static Feign.Builder builder; - /** - * 动态创建feign客户端的缓存map - */ - private static Map feignMap = new HashMap(); - /** - * 锁对象 - */ - private static Object lock = new Object(); - - public FeignBuliderUtil(Decoder decoder, Encoder encoder, Client client, Contract contract) { - this.builder = Feign.builder().client(client).encoder(encoder).decoder(decoder).contract(contract); - } - - /** - * 根据服务ID获取feign客户端 - * - * @param - * @param T - * @param serviceName - * @return - */ - public static T createFeign(Class T, String serviceName) { - - Object t = feignMap.get(serviceName); - if (t == null) { - - synchronized (lock) { - - t = feignMap.get(serviceName); - if (null == t) { - - LOGGER.info("feign开始构建客户端:{},class类名:{}", serviceName, T.getCanonicalName()); - // 注意 构建的url 必须添加 http:// -// Object object = builder.target(T, "http://" + serviceName+"//"+serviceName); - Object object = builder - .requestInterceptor(p -> { - p.header("level", MDC.get("level")); - p.header("X-B3-TraceId", MDC.get("X-B3-TraceId")); - p.header("X-B3-SpanId", MDC.get("X-B3-SpanId")); - p.header("X-B3-ParentSpanId", MDC.get("X-B3-ParentSpanId")); - p.header("X-Span-Export", MDC.get("X-Span-Export")); - p.header("PID", MDC.get("PID")); - p.header("thread", MDC.get("thread")); -// log.info("ChannelPayService.cancel TraceId: {}, SpanId: {}", TraceHelper.getTraceIdString(), TraceHelper.getSpanIdString()); - }).target(T, "http://" + serviceName + "//" + serviceName); - - t = object; - feignMap.put(serviceName, t); - } - } - } - return (T) t; - } - -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/feign/MyFeignClientsConfiguration.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/feign/MyFeignClientsConfiguration.java deleted file mode 100644 index 1a45a9b9..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/feign/MyFeignClientsConfiguration.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.feign; - -import feign.Retryer; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.cloud.openfeign.FeignClientsConfiguration; -import org.springframework.context.annotation.Bean; - -public class MyFeignClientsConfiguration extends FeignClientsConfiguration { - - @Override - @Bean - @ConditionalOnMissingBean - public Retryer feignRetryer() { - return Retryer.NEVER_RETRY; - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/SocketHelper.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/SocketHelper.java deleted file mode 100644 index 42039cd6..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/SocketHelper.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.netty; - -import com.jiuyv.bomap.common.mapper.BOMAP; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.client.ISocketClient; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.client.SyncISocketAbstractSocketClient; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.SocketCode; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.SocketMsg; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.TradeEnum; -import com.jiuyv.sptcc.carbon.userGate.userGate.model.gate.vo.MsgBodyVo; -import io.netty.channel.ChannelFuture; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.springframework.util.Assert; - -import javax.annotation.PostConstruct; -import java.util.HashMap; -import java.util.Map; - -// @Component -public class SocketHelper { - private static final Logger LOGGER = LoggerFactory.getLogger(SocketHelper.class); - public ChannelFuture server; - public ISocketClient userClient; - @Autowired - private BOMAP bomap; - @Autowired - private SocketCode socketCode; - private Map clientRouteMap; - - @PostConstruct - public void start() throws InterruptedException { - LOGGER.info("----socket server createChannelPool"); - userClient = new SyncISocketAbstractSocketClient(socketCode.userHost, socketCode.userPort, true); - LOGGER.info("----socket userClient client createChannelPool"); - clientRouteMap = new HashMap<>(); - clientRouteMap.put(TradeEnum.QUERY_USER_REALNAME_INFO, userClient); - clientRouteMap.put(TradeEnum.QUERY_USER_UID, userClient); - - clientRouteMap.forEach((s, client) -> { - LOGGER.info("clientRouteMap transCode[{}] getSocketClientId[{}]", s, client); - }); - } - - /** - * @param transCode - * @param msgBodyVo - * @return - */ - public MsgBodyVo syncSendMsg(String transCode, MsgBodyVo msgBodyVo) throws Exception { - TradeEnum tradeEnum = TradeEnum.reverseFind(transCode); - ISocketClient client = clientRouteMap.get(tradeEnum); - Assert.notNull(client, transCode + " 未配置socket client"); - byte[] data = bomap.object2bytes(SocketMsg.SPTCC_MSG, msgBodyVo); - - SocketMsg respMsg = client.sendMsg(SocketMsg.buildRespMsg(data)); - MsgBodyVo bodyVo = null; - if (null != respMsg) { - bodyVo = (MsgBodyVo) bomap.bytes2object(SocketMsg.SPTCC_MSG, respMsg.getMessageBody()); - } - return bodyVo; - } -} \ No newline at end of file diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/client/AbstractSocketClient.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/client/AbstractSocketClient.java deleted file mode 100644 index 4832cb40..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/client/AbstractSocketClient.java +++ /dev/null @@ -1,234 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.client; - -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.CallBackResult; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.SocketCode; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.SocketMsg; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.handler.ClientHandler; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.handler.Decoder; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.handler.Encoder; -import io.netty.bootstrap.Bootstrap; -import io.netty.channel.Channel; -import io.netty.channel.EventLoop; -import io.netty.channel.EventLoopGroup; -import io.netty.channel.nio.NioEventLoopGroup; -import io.netty.channel.pool.AbstractChannelPoolHandler; -import io.netty.channel.pool.ChannelHealthChecker; -import io.netty.channel.pool.ChannelPoolHandler; -import io.netty.channel.pool.FixedChannelPool; -import io.netty.channel.socket.SocketChannel; -import io.netty.channel.socket.nio.NioSocketChannel; -import io.netty.handler.timeout.IdleStateHandler; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.net.InetSocketAddress; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; - - -/** - * @describe - * @auther beck5293 - * @create 2018-03-27-13:52 - */ -public abstract class AbstractSocketClient implements ISocketClient { - private static final Logger LOGGER = LoggerFactory.getLogger(AbstractSocketClient.class); - public final String host; - public final int port; - protected final boolean isAsync; - protected final boolean isKeepAlive; - private final AbstractSocketClient client; - public Map callBackResults = new ConcurrentHashMap<>(); - /** - * channel 归还channelPool 时进行健康检查 - */ - ChannelHealthChecker channelHealthChecker = channel -> { - EventLoop loop = channel.eventLoop(); - return channel.isActive() ? loop.newSucceededFuture(Boolean.TRUE) : loop.newSucceededFuture(Boolean.FALSE); - }; - private int idletimeout = 30; - private FixedChannelPool channelPool; - private Bootstrap bootstrap = new Bootstrap(); - private EventLoopGroup group = new NioEventLoopGroup(); - - protected AbstractSocketClient(String host, int port, - boolean isAsync, - boolean isKeepAlive) { - this.host = host; - this.port = port; - this.isAsync = isAsync; - this.isKeepAlive = isKeepAlive; - this.client = this; - - bootstrap.group(group) - .channel(NioSocketChannel.class) - .remoteAddress(new InetSocketAddress(host, port)); - - createChannelPool(); - } - - /** - * 创建连接池 - */ - public void createChannelPool() { - // 连接池处理 - ChannelPoolHandler poolHandler = new AbstractChannelPoolHandler() { - @Override - public void channelCreated(Channel ch) { - SocketChannel channel = (SocketChannel) ch; - channel.config() - .setKeepAlive(true) - .setTcpNoDelay(true) - .setConnectTimeoutMillis(500); - - channel.pipeline() - .addLast(new IdleStateHandler(0, 0, idletimeout, TimeUnit.SECONDS)) - .addLast(new Decoder()) - .addLast(new Encoder()) - .addLast(new ClientHandler(client)); - } - }; - - /** - * 连接池配置 - **/ - channelPool = new FixedChannelPool(bootstrap, - poolHandler, - channelHealthChecker, - FixedChannelPool.AcquireTimeoutAction.NEW, - SocketCode.ACQUIRE_TIMEOUT, - SocketCode.MAX_CHANNEL, - SocketCode.MAX_PEND_ACQUIRE, - true, - true); - } - - /** - * 发送数据 - * - * @param socketMsg - * @return - */ - @Override - public SocketMsg sendMsg(SocketMsg socketMsg) { - Channel channel = null; - try { - // 申请channel - channel = channelPool.acquire().get(SocketCode.ACQUIRE_TIMEOUT, TimeUnit.SECONDS); - if (null == channel) { - LOGGER.error("----socket client acquire channel timeout"); - return null; - } - - // 检查异步/同步 - if (isAsync) { - // 异步获取channel引用,直接归还;否则退化成同步连接 - channelPool.release(channel); - } - - } catch (TimeoutException | InterruptedException | ExecutionException e) { - LOGGER.error("----socket client,channel acquire fail", e); - releaseChannel(channel, isAsync); - return null; - } catch (Exception e) { - LOGGER.error("----socket client prepare sendMsg fail", e); - releaseChannel(channel, isAsync); - return null; - } - - // 记录sendKey - String sendKey = genSendKey(channel, socketMsg); - LOGGER.info("=====channelId [{}] sendKey [{}]", channel.id().asShortText(), sendKey); - - // 应答存储结构保存在channel中 - CallBackResult backResult = new CallBackResult(sendKey); - if (null != callBackResults.putIfAbsent(sendKey, backResult)) { - LOGGER.error("----exist repeat sendKey,sendKey [{}]", sendKey); - releaseChannel(channel, isAsync); - return null; - } - - try { - // 发送数据 - channel.writeAndFlush(socketMsg); - - // 同步,挂在该资源上,等待回文 - backResult.getRecvsemap().tryAcquire(SocketCode.TIME_OUT, TimeUnit.SECONDS); - - if (!isAsync) {// 应答回复后,同步连接释放 - channelPool.release(channel); - } - } catch (InterruptedException e) { - // 同步请求终端异常 - LOGGER.error("----socket client InterruptedException", e); - this.callBackResults.remove(sendKey); - releaseChannel(channel, isAsync); - return null; - } - - // 同步应答处理 - backResult = this.callBackResults.remove(sendKey); - if (null != backResult && backResult.isSuccess()) { - releaseChannel(channel, isAsync); - return backResult.getRespSocketMsg(); - } - releaseChannel(channel, isAsync); - return null; - } - - - private void releaseChannel(Channel channel, boolean isAsync) { - if (null != channel) { - if (isAsync) { - channelPool.release(channel); - } else { - channel.close(); - channelPool.release(channel); - } - - } - - } - - /** - * @param channel - * @param socketMsg - * @return - */ - @Override - public SocketMsg receiveFromServer(Channel channel, SocketMsg socketMsg) { - String receiveKey = getReceiveKey(channel, socketMsg); - if (StringUtils.isEmpty(receiveKey)) { - LOGGER.error("----receiveKey is empty"); - return null; - } - - // 记录应答数据 - CallBackResult callBackResult = callBackResults.getOrDefault(receiveKey, null);// 根据packageNum 获取 map中记录应答的数据结构 - if (null == callBackResult) {// 如果超时,packageNum对应 callBackResult被移除 - LOGGER.error("----response store in callBackResult fail,callBackResult is Null,packageNum [{}]", receiveKey); - return null; - } - - // 记录应答数据 - callBackResult.setRespSocketMsg(socketMsg); - callBackResult.setSuccess(true); - // 释放信号量 - callBackResult.getRecvsemap().release(); - - // 短链接关闭 - if (!this.isKeepAlive) { - channel.close(); - } - - return socketMsg; - } - - public abstract String genSendKey(Channel channel, SocketMsg socketMsg); - - public abstract String getReceiveKey(Channel channel, SocketMsg socketMsg); -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/client/AsyncISocketAbstractSocketClient.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/client/AsyncISocketAbstractSocketClient.java deleted file mode 100644 index eef24191..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/client/AsyncISocketAbstractSocketClient.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.client; - -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.SocketCode; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.SocketMsg; -import io.netty.channel.Channel; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.nio.charset.StandardCharsets; - -public class AsyncISocketAbstractSocketClient extends AbstractSocketClient { - private static final Logger LOGGER = LoggerFactory.getLogger(AsyncISocketAbstractSocketClient.class); - - public AsyncISocketAbstractSocketClient(String host, int port) { - super(host, port, true, true); - } - - @Override - public final String genSendKey(Channel channel, SocketMsg socketMsg) { - return this.genSendKey(socketMsg); - } - - public String genSendKey(SocketMsg socketMsg) { - byte[] packageLenByte = new byte[SocketCode.PACKAGE_LEN]; - System.arraycopy(socketMsg.getMessageBody(), 2, packageLenByte, 0, 5); - - return new String(packageLenByte, StandardCharsets.UTF_8); - } - - @Override - public String getReceiveKey(Channel channel, SocketMsg socketMsg) { - byte[] packageLenByte = new byte[SocketCode.PACKAGE_LEN]; - System.arraycopy(socketMsg.getMessageBody(), 2, packageLenByte, 0, 5); - - return new String(packageLenByte, StandardCharsets.UTF_8); - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/client/ISocketClient.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/client/ISocketClient.java deleted file mode 100644 index 0b8d7c0e..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/client/ISocketClient.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.client; - -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.SocketMsg; -import io.netty.channel.Channel; - -public interface ISocketClient { - /** - * 发送数据 - * - * @param socketMsg@return - */ - SocketMsg sendMsg(SocketMsg socketMsg); - - SocketMsg receiveFromServer(Channel channel, SocketMsg socketMsg); -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/client/SocketClientRoute.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/client/SocketClientRoute.java deleted file mode 100644 index 8b69f2a4..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/client/SocketClientRoute.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.client; - -import com.jiuyv.bomap.common.mapper.BOMAP; -import com.jiuyv.bomap.common.util.MessageDigestSHA256; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.database.exception.GateException; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.SocketHelper; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.RespCode; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.SocketMsg; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.JsonUtil; -import com.jiuyv.sptcc.carbon.userGate.userGate.model.gate.vo.MsgBodyVo; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -/** - * socket client 客户端路由 - */ -// @Component -public class SocketClientRoute { - private static final Logger LOGGER = LoggerFactory.getLogger(SocketClientRoute.class); - @Autowired - private BOMAP bomap; - @Autowired - private SocketHelper socketHelper; - - /** - * @param transCode 交易代码 - * @param reqVo dto数据 - * @param tClass 响应dto数据类型 - * @return - */ - public T sendMsg(String transCode, V reqVo, Class tClass) throws Exception { - try { - String jsonData = JsonUtil.convertToJson(reqVo); - LOGGER.info("transCode [{}] jsonData[{}]", transCode, jsonData); - MsgBodyVo sendVo = null; - // 字段重置,不需传输字段置为null - MsgBodyVo req = MsgBodyVo.build(transCode, jsonData); - MsgBodyVo receiveVo = socketHelper.syncSendMsg(transCode, req); - - if (null == receiveVo) { - LOGGER.error("transCode [{}] socket client no receive resp msg", transCode); - throw GateException.build(RespCode.TIME_OUT, RespCode.TIME_OUT_MSG); - } - - LOGGER.info("socket client receive msg [{}]", JsonUtil.convertToJson(receiveVo)); - - // 准备摘要验证 - String receiveJsonData = receiveVo.getJsonData(); - // 使用bomap,填入json数据,自动生成附带json数据长度的字节数组用作签名 - byte[] socketMsgBody = bomap.object2bytes(SocketMsg.SPTCC_MSG_BODY, new MsgBodyVo(receiveJsonData)); - - String digest = receiveVo.getDigest(); - // check digest - if (!MessageDigestSHA256.digest(socketMsgBody).equals(digest)) { - LOGGER.error("socket msg check digest fail"); - throw GateException.build("socket client receive respMsg check digest fail"); - } - - Object o = JsonUtil.json2Bean(receiveJsonData, tClass); - LOGGER.info("socket client route respVo [{}]", JsonUtil.convertToJson(o)); - return (T) o; - } catch (Exception e) { - LOGGER.error("socketClient路由 数据准备处理异常", e); - throw e; - } - } - -} \ No newline at end of file diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/client/SyncISocketAbstractSocketClient.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/client/SyncISocketAbstractSocketClient.java deleted file mode 100644 index 1538f1a1..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/client/SyncISocketAbstractSocketClient.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.client; - -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.SocketCode; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.SocketMsg; -import io.netty.channel.Channel; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.concurrent.atomic.AtomicLong; - -/** - * @describe - * @auther beck5293 - * @create 2018-03-27-13:52 - */ -public final class SyncISocketAbstractSocketClient extends AbstractSocketClient { - private static final Logger LOGGER = LoggerFactory.getLogger(SyncISocketAbstractSocketClient.class); - - private AtomicLong atomicLong = new AtomicLong(); - - public SyncISocketAbstractSocketClient(String host, int port, - boolean isKeepAlive) { - super(host, port, false, isKeepAlive); - } - - /** - * @param channel - * @param socketMsg - * @return - */ - @Override - public String genSendKey(Channel channel, SocketMsg socketMsg) { - String sendKey = String.valueOf(atomicLong.getAndIncrement()); - channel.attr(SocketCode.SEND_KEY).set(sendKey); - - return sendKey; - } - - /** - * @param channel - * @param socketMsg - * @return - */ - @Override - public String getReceiveKey(Channel channel, SocketMsg socketMsg) { - String sendKey = channel.attr(SocketCode.SEND_KEY).get(); - if (!this.isKeepAlive) { - channel.close(); - } - return sendKey; - } -} \ No newline at end of file diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/entity/AppCode.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/entity/AppCode.java deleted file mode 100644 index c5506eac..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/entity/AppCode.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity; - -/** - * 应用常量配置 - */ -public final class AppCode { - - public static final String SYSTEMTRACEID = "QrCodeGateServer"; - public static final String SYSTEMMODULENAME = "QrCodeGateMina"; - public static final String UTF8 = "UTF-8"; - public static final String DEFALUT_FLAG_0 = "0"; - - public static final String QUERY_USER_REALNAME_INFO = "2993"; // TODO: 用户实名信息查询 - public static final String QUERY_USER_UID = "2994"; // TODO: 用户实名状态查询 - - public static final int SOCKET_MSG_BODY_LEN = 5; - public static final String MSG_VERSION = "00"; - public static final String PACKAGE_NUM = "00001"; - public static final String FAIL = "01"; - public static final String SUCCESS = "00"; - public static final String ERROR_INVOKE_FAIL = "调用上游服务异常"; - - public static final String SPTCC_RESP_ORG_CODE = "sptccRespOrgCode";// 应答机构号 -} - -//~ Formatted by Jindent --- http://www.jindent.com diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/entity/CallBackResult.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/entity/CallBackResult.java deleted file mode 100644 index 7cff0ab9..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/entity/CallBackResult.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity; - -import java.util.concurrent.Semaphore; - -/** - * @describe - * @auther beck5293 - * @create 2018-03-29-13:16 - */ -public class CallBackResult { - private boolean isSuccess = false; - private SocketMsg respSocketMsg; - private String reqSeq; - private Semaphore recvsemap = new Semaphore(0); - - public CallBackResult(String sendKey) { - this.reqSeq = sendKey; - } - - public boolean isSuccess() { - return isSuccess; - } - - public void setSuccess(boolean success) { - isSuccess = success; - } - - public SocketMsg getRespSocketMsg() { - return respSocketMsg; - } - - public CallBackResult setRespSocketMsg(SocketMsg respSocketMsg) { - this.respSocketMsg = respSocketMsg; - return this; - } - - public String getReqSeq() { - return reqSeq; - } - - public void setReqSeq(String reqSeq) { - this.reqSeq = reqSeq; - } - - public Semaphore getRecvsemap() { - return recvsemap; - } - - public CallBackResult setRecvsemap(Semaphore recvsemap) { - this.recvsemap = recvsemap; - return this; - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/entity/RespCode.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/entity/RespCode.java deleted file mode 100644 index cfbd1a09..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/entity/RespCode.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity; - - -/** - * 应用常量配置 - */ -public final class RespCode { - public static final String ACCOUNT_STATE_NORMAL = "1"; - public static final String SUCCESS = "00"; - public static final String FAIL = "01"; - public static final String ERROR_INVOKE_FAIL = "调用上游服务异常"; - public static final String ACCOUNT_SIGN_C = "C"; - public static final String TIME_OUT = "68"; - public static final String TIME_OUT_MSG = "交易超时"; - - public static boolean isSuccess(String code) { - return SUCCESS.equals(code); - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/entity/RespEnum.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/entity/RespEnum.java deleted file mode 100644 index 70868934..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/entity/RespEnum.java +++ /dev/null @@ -1,184 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity; - -import java.util.HashMap; -import java.util.Map; - -/** - * @author chen_yang - * @describe 应答码枚举类 - * @create 2018-02-26-15:27 - */ -public enum RespEnum { - - /** - * 成功 - */ - SUCCESS("00", "SUCCESS"), - - /** - * 失败 - */ - FAIL("01", "FAIL"), - - /** - * 无此订单 - */ - NO_EXIST_ORDER("25", "无此订单"), - - /** - * 回调地址错误 - */ - T_RSP_60("60", "回调地址错误"), - - /** - * 验证角色错误 - */ - T_RSP_61("61", "验证角色错误"), - - /** - * auth_code验证失败 - */ - T_RSP_62("62", "auth_code验证失败"), - - /** - * access_token生成失败 - */ - T_RSP_63("63", "access_token生成失败"), - - /** - * 用户验证失败 - */ - T_RSP_64("64", "用户验证失败"), - - /** - * 刷新令牌验证失败 - */ - REFRESH_FAIL("65", "刷新令牌验证失败"), - - /** - * access_token验证失败 - */ - ACCESS_FAIL("66", "access_token验证失败"), - - /** - * 验签失败 - */ - T_RSP_67("67", "验签或解密失败"), - - /** - * 缺少签名数据 - */ - T_RSP_68("68", "缺少签名数据"), - - /** - * 风控拒绝 - */ - T_RSP_89("89", "风控拒绝"), - - /** - * 输入验证失败 - */ - FIELD_ERROR("88", "输入验证失败"), - - /** - * 未查询到用户信息 - */ - T_RSP_87("87", "未查询到用户信息"), - - /** - * 未查询到设备信息 - */ - T_RSP_86("86", "未查询到设备信息"), - - /** - * 未查询到支付渠道信息 - */ - ILLEGAL_CHANNEL("85", "未查询到支付渠道信息"), - - /** - * 未查询到用户虚拟卡号 - */ - T_RSP_84("84", "未查询到用户虚拟卡号"), - - /** - * 用户未进行实名认证 - */ - T_RSP_83("83", "用户未进行实名认证"), - - /** - * 支付账户储值额不足 - */ - T_RSP_82("82", "支付账户储值额不足"), - - /** - * 该用户未开通二维码乘车服务 - */ - T_RSP_81("81", "该用户未开通二维码乘车服务"), - - /** - * 该设备未非有效设备 - */ - T_RSP_80("80", "该设备未非有效设备"), - - /** - * 支付账户不可用 - */ - T_RSP_79("79", "支付账户不可用"), - - /** - * 风控系统异常 - */ - T_RSP_78("78", "风控系统异常"), - - /*系统熔断*/ - SYSTEM_REJECT("F9", "系统拒绝更多交易"), - - /** - * 上游服务应答超时 - */ - B2BGATE_RSP_01("01", "上游服务应答超时"), - - B2BGATE_RSP_02("02", "未配置第三方服务地址"); - - private static final Map lookup = new HashMap(); - public static String RESP_CODE_PRE = "RespCode="; - public static String RESP_MSG_PRE = ",RespMsg="; - - static { - for (RespEnum anEnum : RespEnum.values()) { - lookup.put(anEnum.errorCode, anEnum); - } - } - - public final String errorCode; - public final String errorMsg; - - RespEnum(String errorCode, String errorMsg) { - this.errorCode = errorCode; - this.errorMsg = errorMsg; - } - - public static RespEnum reverseFind(String code) { - return lookup.getOrDefault(code, null); - } - - public static boolean isSuccess(String errorCode) { - return SUCCESS.errorCode.equals(errorCode); - } - - public boolean isSuccessEnum() { - return SUCCESS.errorCode.equals(this.errorCode); - } - - /** - * Returns the name of this enum constant, as contained in the declaration. This method may be - * overridden, though it typically isn't necessary or desirable. An enum type should override - * this method when a more "programmer-friendly" string form exists. - * - * @return the name of this enum constant - */ - @Override - public String toString() { - return RESP_CODE_PRE + this.errorCode + RESP_MSG_PRE + this.errorMsg; - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/entity/SocketCode.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/entity/SocketCode.java deleted file mode 100644 index a9225ee0..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/entity/SocketCode.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity; - -import io.netty.util.AttributeKey; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; -import java.nio.charset.StandardCharsets; -import java.util.concurrent.atomic.AtomicLong; - -/** - * @describe - * @auther beck5293 - * @create 2018-03-26-10:28 - */ -@Component -public final class SocketCode { - public static final int PACKAGE_LEN = 5; - public static final String HEART_BEAT = "00000"; - public static final byte[] HEART_BEAT_BYTE = HEART_BEAT.getBytes(StandardCharsets.UTF_8); - /** - * Async - */ - public static final AtomicLong sendSeqLong = new AtomicLong(); - public static final AttributeKey SEND_KEY = AttributeKey.valueOf("sendKey"); - private static final Logger LOGGER = LoggerFactory.getLogger(SocketCode.class); - public static int MAX_CHANNEL = 2; - // public static final int MIN_CHANNEL = 2; - public static long ACQUIRE_TIMEOUT = 3;// sec - public static int MAX_PEND_ACQUIRE = 10;// max pend acquire channel - public static long TIME_OUT = 30L;// sec - @Value("${netty.port}") - public int serverPort; - @Value("${netty.user.host}") - public String userHost; - @Value("${netty.user.port}") - public int userPort; - - @Value("${netty.client.max_channel}") - public int max_channel; - @Value("${netty.client.acquire_timeout}") - public long acquire_timeout;// sec - @Value("${netty.client.max_pend_acquire}") - public int max_pend_acquire;// max pend acquire channel - @Value("${netty.client.wait_for_resp_timeout}") - public long wait_for_resp_timeout;// sec - - @Value("${netty.sptccMarketing.host}") - public String shqrcodeHost; - @Value("${netty.sptccMarketing.port}") - public int shqrcodePort; - - @PostConstruct - public void init() { - - LOGGER.info("----server [{}]", serverPort); - LOGGER.info("----userClient host [{}]", userHost); - LOGGER.info("----userClient port [{}]", userPort); - - MAX_CHANNEL = max_channel; - ACQUIRE_TIMEOUT = acquire_timeout; - MAX_PEND_ACQUIRE = max_pend_acquire; - TIME_OUT = wait_for_resp_timeout; - - LOGGER.info("----netty client maxChannel [{}]", MAX_CHANNEL); - LOGGER.info("----netty client acquire channel timeout [{}]", ACQUIRE_TIMEOUT); - LOGGER.info("----netty client max pend acquire channel [{}]", MAX_PEND_ACQUIRE); - LOGGER.info("----netty client max wait for response timeout [{}]", TIME_OUT); - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/entity/SocketMsg.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/entity/SocketMsg.java deleted file mode 100644 index 96eff787..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/entity/SocketMsg.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity; - -/** - * mina数据包 - */ -public class SocketMsg { - public static final String SPTCC_MSG = "sptcc.msg"; - public static final String SPTCC_MSG_BODY = "sptcc.body"; - - public static final int PACKAGE_LENGTH = 5; - /* 消息包的长度 */ - private int length; - /* 消息包的内容,不含头部的长度 */ - private byte[] messageBody; - /* 消息包的对端ip */ - private String remoteip; - /* 消息包的对端port */ - private int remoteport; - - public SocketMsg() { - } - - public SocketMsg(Builder builder) { - this.length = builder.length; - this.messageBody = builder.messageBody; - this.remoteip = builder.remoteip; - this.remoteport = builder.remoteport; - } - - /** - * @param body - * @return - */ - public static SocketMsg buildRespMsg(byte[] body) { - SocketMsg respMsg = new SocketMsg(); - respMsg.setLength(body.length); - respMsg.setMessageBody(body); - return respMsg; - } - - public String getRemoteip() { - return remoteip; - } - - public void setRemoteip(String remoteip) { - this.remoteip = remoteip; - } - - public int getLength() { - return length; - } - - public void setLength(int length) { - this.length = length; - } - - public byte[] getMessageBody() { - if (this.messageBody != null) { - return this.messageBody.clone(); - } - return new byte[]{}; - } - - public void setMessageBody(byte[] messageBody) { - if (messageBody != null) { - this.messageBody = messageBody.clone(); - } - } - - public int getRemoteport() { - return remoteport; - } - - public void setRemoteport(int remoteport) { - this.remoteport = remoteport; - } - - public static class Builder { - /* 消息包的长度 */ - private int length; - /* 消息包的内容,不含头部的长度 */ - private byte[] messageBody; - /* 消息包的对端ip */ - private String remoteip; - /* 消息包的对端port */ - private int remoteport; - - public Builder setLength(int length) { - this.length = length; - return this; - } - - public Builder setMessageBody(byte[] messageBody) { - this.messageBody = messageBody; - return this; - } - - public Builder setRemoteip(String remoteip) { - this.remoteip = remoteip; - return this; - } - - public Builder setRemoteport(int remoteport) { - this.remoteport = remoteport; - return this; - } - - public SocketMsg build() { - return new SocketMsg(this); - } - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/entity/TradeEnum.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/entity/TradeEnum.java deleted file mode 100644 index d40e5526..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/entity/TradeEnum.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity; - -import java.util.HashMap; -import java.util.Map; - -/** - * 和交通卡系统socket交互交易代码 - * - * @author chen_yang - */ -public enum TradeEnum { - - QUERY_USER_REALNAME_INFO("2993", "用户实名信息查询接口", "socket"), - QUERY_USER_UID("2994", "用户UID查询接口", "socket"); - - private static final Map lookup = new HashMap(); - - static { - for (TradeEnum anEnum : TradeEnum.values()) { - lookup.put(anEnum.code, anEnum); - } - } - - public final String code; - public final String msg; - public final String module; - public String orgCode; - public Class rpcReq; - public Class rpcResp; - - TradeEnum(String code, String msg, String module) { - this.code = code; - this.msg = msg; - this.module = module; - } - - TradeEnum(String code, String msg, String module, String orgCode) { - this.code = code; - this.msg = msg; - this.module = module; - this.orgCode = orgCode; - } - - TradeEnum(String code, String msg, String module, Class rpcReq, - Class rpcResp) { - this.code = code; - this.msg = msg; - this.module = module; - this.rpcReq = rpcReq; - this.rpcResp = rpcResp; - } - - TradeEnum(String code, String msg, String module, String orgCode, - Class rpcReq, Class rpcResp) { - this.code = code; - this.msg = msg; - this.module = module; - this.orgCode = orgCode; - this.rpcReq = rpcReq; - this.rpcResp = rpcResp; - } - - /** - * 反向查找 - */ - public static TradeEnum reverseFind(String code) { - return lookup.getOrDefault(code, null); - } - - /** - * 根据原始交易代码查询对应信息进行装饰 - * - * @param oriTransCode 原始交易代码 - * @return 中文信息装饰后的交易代码 - */ - public static final String decorationTransCode(String oriTransCode) { - TradeEnum anEnum = reverseFind(oriTransCode); - return (null == anEnum) ? oriTransCode : anEnum.toString(); - } - - @Override - public String toString() { - return "TradeEnum{" + - "code='" + code + '\'' + - ", msg='" + msg + '\'' + - '}'; - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/handler/ClientHandler.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/handler/ClientHandler.java deleted file mode 100644 index 59c7a0c0..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/handler/ClientHandler.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.handler; - -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.client.ISocketClient; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.SocketMsg; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInboundHandlerAdapter; -import io.netty.handler.timeout.IdleState; -import io.netty.handler.timeout.IdleStateEvent; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * @describe - * @auther beck5293 - * @create 2018-03-26-15:32 - */ - -public class ClientHandler extends ChannelInboundHandlerAdapter { - private static final Logger LOGGER = LoggerFactory.getLogger(ClientHandler.class); - - private ISocketClient client; - - public ClientHandler(ISocketClient client) { - this.client = client; - } - - @Override - public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { - SocketMsg respMsg = (SocketMsg) msg; - if (0 == respMsg.getLength()) {// 接收到心跳应答,修改标志位 - return; - } - client.receiveFromServer(ctx.channel(), respMsg); - } - - @Override - public void userEventTriggered(ChannelHandlerContext ctx, Object evt) - throws Exception { - if (evt instanceof IdleStateEvent) { - IdleStateEvent event = (IdleStateEvent) evt; - if (event.state().equals(IdleState.READER_IDLE)) { - // 超时关闭channel - LOGGER.info("READER_IDLE channel {} close it ", ctx.channel().id().asShortText()); - ctx.close(); - } else if (event.state().equals(IdleState.WRITER_IDLE)) { - - // 超时关闭channel - LOGGER.info("WRITE_IDLE channel {} close it ", ctx.channel().id().asShortText()); - ctx.close(); - - } else if (event.state().equals(IdleState.ALL_IDLE)) { - // 超时关闭channel - LOGGER.info("ALL_IDLE channel {} close it ", ctx.channel().id().asShortText()); - ctx.close(); - } - } - super.userEventTriggered(ctx, evt); - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/handler/Decoder.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/handler/Decoder.java deleted file mode 100644 index 79216f69..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/handler/Decoder.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.handler; - -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.SocketCode; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.SocketMsg; -import io.netty.buffer.ByteBuf; -import io.netty.channel.Channel; -import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.ByteToMessageDecoder; -import org.apache.commons.codec.binary.Hex; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.net.InetSocketAddress; -import java.nio.charset.StandardCharsets; -import java.util.List; - -/** - * 解码器 - */ -public class Decoder extends ByteToMessageDecoder { - private static final Logger LOGGER = LoggerFactory.getLogger(Decoder.class); - - @Override - protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { - // check package len - if (in.readableBytes() < SocketCode.PACKAGE_LEN) { - LOGGER.info("----package len not enought"); - return; - } - - // remote ip:port - InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel().remoteAddress(); - - in.markReaderIndex(); - // get package len value - byte[] packageLenByte = new byte[SocketCode.PACKAGE_LEN]; - in.readBytes(packageLenByte); - String respString = new String(packageLenByte, StandardCharsets.UTF_8); - int packageLen = Integer.parseInt(respString.substring(0, 5)); - - SocketMsg socketMsg; - if (0 == packageLen) { - socketMsg = new SocketMsg.Builder().setLength(0).build(); - out.add(socketMsg); - return; - } - - if (in.readableBytes() < packageLen) { - in.resetReaderIndex(); - return; - } - - byte[] packageByte = new byte[packageLen]; - in.readBytes(packageByte); - - try { - LOGGER.info("=====channelId {} netty recieve data UTF-8[{}]", ctx.channel().id(), - new String(packageByte, "UTF-8")); - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("=====netty recieve data Hex{}", Hex.encodeHexString(packageByte)); - } - } catch (Exception e) { - - } - - socketMsg = new SocketMsg.Builder() - .setLength(packageLen) - .setRemoteip(socketAddress.getAddress().getHostAddress()) - .setRemoteport(socketAddress.getPort()) - .setMessageBody(packageByte) - .build(); - out.add(socketMsg); - } - - @Override - public void channelActive(final ChannelHandlerContext ctx) { // (1) - Channel in = ctx.channel(); - LOGGER.debug("----server channelActive,syncClient ip=[{}]", in.remoteAddress()); - } - - - @Override - public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { - // Close the connection when an exception is raised. - LOGGER.warn("Unexpected exception from downstream.", cause); - ctx.close(); - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/handler/Encoder.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/handler/Encoder.java deleted file mode 100644 index 2bf8325e..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/handler/Encoder.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.handler; - -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.SocketCode; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.SocketMsg; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.ByteTools; -import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.MessageToByteEncoder; -import org.apache.commons.codec.binary.Hex; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.nio.charset.StandardCharsets; - -/** - * 编码器 - */ -public class Encoder extends MessageToByteEncoder { - private static final Logger LOGGER = LoggerFactory.getLogger(Encoder.class); - - @Override - protected void encode(ChannelHandlerContext ctx, SocketMsg msg, ByteBuf out) throws Exception { - byte[] respByte; - if (0 == msg.getLength()) { - respByte = SocketCode.HEART_BEAT_BYTE; - } else { - byte[] packageLenByte = String.format("%05d", msg.getLength()).getBytes(StandardCharsets.UTF_8); - respByte = ByteTools.combinByteArray(packageLenByte, msg.getMessageBody()); - } - try { - LOGGER.info("=====channelId {} netty sendMsg UTF-8[{}]", ctx.channel().id(), - new String(respByte, "UTF-8")); - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("=====netty sendMsg HEX[{}]", Hex.encodeHexString(respByte)); - } - } catch (Exception e) { - } - out.writeBytes(respByte); - } - - @Override - public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { - LOGGER.warn("Unexpected exception from downstream.", cause); - ctx.close(); - } - - -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/server/ISocketServer.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/server/ISocketServer.java deleted file mode 100644 index 76a8ad49..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/server/ISocketServer.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.server; - - -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.SocketMsg; -import io.netty.channel.ChannelHandlerContext; - -/** - * @author charely - */ -public interface ISocketServer { - void processmessage(ChannelHandlerContext ctx, SocketMsg inmessage) throws Exception; -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/server/Server.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/server/Server.java deleted file mode 100644 index dc08836b..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/server/Server.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.server; - -import com.jiuyv.bomap.common.mapper.BOMAP; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.handler.Decoder; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.handler.Encoder; -import io.netty.bootstrap.ServerBootstrap; -import io.netty.channel.ChannelFuture; -import io.netty.channel.ChannelInitializer; -import io.netty.channel.ChannelOption; -import io.netty.channel.EventLoopGroup; -import io.netty.channel.nio.NioEventLoopGroup; -import io.netty.channel.socket.SocketChannel; -import io.netty.channel.socket.nio.NioServerSocketChannel; -import io.netty.handler.timeout.IdleStateHandler; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.concurrent.TimeUnit; - -/** - * Discards any incoming data. - */ -public class Server { - private static final Logger LOGGER = LoggerFactory.getLogger(Server.class); - EventLoopGroup bossGroup = new NioEventLoopGroup(); - EventLoopGroup workerGroup = new NioEventLoopGroup(); - private BOMAP bomap; - private ISocketServer socketRoute; - private int port; - private int idletimeout = 30; - public Server(int port, ISocketServer socketRoute, BOMAP bomap) { - this.port = port; - this.socketRoute = socketRoute; - this.bomap = bomap; - } - - public ChannelFuture start() throws InterruptedException { - // server - ServerBootstrap serverBootstrap = new ServerBootstrap(); - serverBootstrap.group(bossGroup, workerGroup) - .channel(NioServerSocketChannel.class) // (3) - .childHandler(new ChannelInitializer() { // (4) - @Override - public void initChannel(SocketChannel ch) throws Exception { - ch.pipeline() - .addLast(new IdleStateHandler(0, 0, idletimeout, TimeUnit.SECONDS)) - .addLast(new Decoder()) - .addLast(new Encoder()) - .addLast(new ServerHandler(socketRoute)); - } - }) - .option(ChannelOption.SO_BACKLOG, 128) // (5) - .childOption(ChannelOption.SO_KEEPALIVE, true); // (6) - - - // connect - ChannelFuture future = serverBootstrap.bind(port).sync(); // (7) - return future; - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/server/ServerHandler.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/server/ServerHandler.java deleted file mode 100644 index a0accf38..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/server/ServerHandler.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.server; - -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.SocketMsg; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInboundHandlerAdapter; -import io.netty.handler.timeout.IdleState; -import io.netty.handler.timeout.IdleStateEvent; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.concurrent.RejectedExecutionException; - -public class ServerHandler extends ChannelInboundHandlerAdapter { - private static final Logger LOGGER = LoggerFactory.getLogger(ServerHandler.class); - - private ISocketServer socketRoute; - - public ServerHandler(ISocketServer socketRoute) { - this.socketRoute = socketRoute; - } - - @Override - public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { - LOGGER.info("channel {} ----serverHandler readmessage", ctx.channel().id().asShortText()); - SocketMsg reqMsg = (SocketMsg) msg; - - try { - socketRoute.processmessage(ctx, reqMsg); - } catch (RejectedExecutionException e) { - LOGGER.error("", e); - } - LOGGER.debug("----serverHandler channelRead end"); - LOGGER.info("channel {} ----serverHandler read end", ctx.channel().id().asShortText()); - } - - - @Override - public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { - // Close the connection when an exception is raised. - LOGGER.warn("Unexpected exception from downstream.", cause); - ctx.close(); - } - - @Override - public void userEventTriggered(ChannelHandlerContext ctx, Object evt) - throws Exception { - if (evt instanceof IdleStateEvent) { - IdleStateEvent event = (IdleStateEvent) evt; - if (event.state().equals(IdleState.READER_IDLE)) { - // 超时关闭channel - LOGGER.info("READER_IDLE channel {} close it ", ctx.channel().id().asShortText()); - ctx.close(); - } else if (event.state().equals(IdleState.WRITER_IDLE)) { - - // 超时关闭channel - LOGGER.info("WRITE_IDLE channel {} close it ", ctx.channel().id().asShortText()); - ctx.close(); - - } else if (event.state().equals(IdleState.ALL_IDLE)) { - // 超时关闭channel - LOGGER.info("ALL_IDLE channel {} close it ", ctx.channel().id().asShortText()); - ctx.close(); - } - } - super.userEventTriggered(ctx, evt); - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/server/SocketServerRoute.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/server/SocketServerRoute.java deleted file mode 100644 index c0246033..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/netty/server/SocketServerRoute.java +++ /dev/null @@ -1,148 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.server; - -import com.jiuyv.bomap.common.mapper.BOMAP; -import com.jiuyv.bomap.common.util.MessageDigestSHA256; -import com.jiuyv.sptcc.carbon.gate.dto.SocketErrorMsgVo; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.database.exception.GateException; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.AppCode; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.SocketMsg; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.TradeEnum; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.JsonUtil; -import com.jiuyv.sptcc.carbon.userGate.userGate.model.gate.vo.MsgBodyVo; -import com.jiuyv.sptcc.carbon.userGate.userGate.route.IBusinessService; -import io.netty.channel.ChannelHandlerContext; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Async; -import org.springframework.util.Assert; - -import javax.annotation.PostConstruct; -import java.io.UnsupportedEncodingException; -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -/** - * socket server business route - */ -public class SocketServerRoute implements ISocketServer { - private static final Logger LOGGER = LoggerFactory.getLogger(SocketServerRoute.class); - - @Autowired - private BOMAP bomap; - - @Autowired - private Map socketServiceRouteMap; - - @PostConstruct - public void init() { - if (null == bomap) { - Assert.notNull(bomap, "socketServer bomap 注入异常"); - } - - socketServiceRouteMap.forEach((s, service) -> - LOGGER.info("socket服务端路由配置 交易代码 {} 路由对象 {}", s, service.toString())); - } - -// @RequestMapping("/test") -// public void test() { -// String str = "000000000026547CC7EC0913EDF04B2A7FF26239D1D80F4CC028DDAC69E256FB65E5F37E11DFDE00103{\"transCode\":\"02654\",\"reqOrgCode\":\"123\",\"appId\":\"\",\"appUserId\":\"0000000001\",\"appTime\":\"20191128112529\"}"; -// SocketMsg socketMsg = new SocketMsg(); -// socketMsg.setMessageBody(str.getBytes(Charsets.UTF_8)); -//// processmessage(socketMsg); -// } - - /** - * @param reqMsg 请求数据包 - * @return respMsg 正常返回 reqMsg错误情况原样返回 - */ - @Async("asyncBusinessExecutor") - @Override - public void processmessage(ChannelHandlerContext ctx, SocketMsg reqMsg) { - MsgBodyVo reqBody = null; - SocketErrorMsgVo socketErrorMsgVo = new SocketErrorMsgVo(); - if (0 == reqMsg.getLength()) {// 心跳回包 - ctx.writeAndFlush(reqMsg); - return; - } - String packageNum = null; - String tranCode = null; - try { - try { - reqBody = MsgBodyVo.build("", ""); - byte[] messageByte = reqMsg.getMessageBody(); - String msg = new String(messageByte, "utf-8"); - LOGGER.info("socket receive msg [{}]", msg); - - // convert - reqBody = (MsgBodyVo) bomap.bytes2object(SocketMsg.SPTCC_MSG, messageByte); - - byte[] data = bomap.object2bytes(SocketMsg.SPTCC_MSG_BODY, reqBody); - // 处理业务 - tranCode = reqBody.getTranCode(); - // check digest - packageNum = reqBody.getPackageNum(); - String localDigest = MessageDigestSHA256.digest(data); - String remoteDigest = reqBody.getDigest(); - if (!localDigest.equals(remoteDigest)) { - LOGGER.error("SHA-256 digest check fail, local [{}] remote [{}]", localDigest, remoteDigest); - throw GateException.build("SHA-256 digest check fail"); - } - - - IBusinessService service = socketServiceRouteMap.get(tranCode); - TradeEnum tradeEnum = TradeEnum.reverseFind(tranCode); - if (null != service && null != tradeEnum) { - String json = JsonUtil.convertToJson(service.processbusiness(tradeEnum, reqBody.getJsonData())); - reqBody.setJsonData(json); - } else { - LOGGER.error("socket server 路由未配置,transCode:[{}]", tranCode); - throw GateException.build("illegal tranCode"); - } - } catch (GateException e) { - throw e; - } catch (Exception e) { - LOGGER.error("socket SwitchController error!", e); - throw GateException.build("system error"); - } - } catch (GateException e) { - socketErrorMsgVo.setRespMsg(e.getMessage()); - } - - // 准备返回报文 - try { - // 如果错误信息不为空,返回错误信息 - if (StringUtils.isNotEmpty(socketErrorMsgVo.getRespMsg())) { - socketErrorMsgVo.setRespCode(AppCode.FAIL); - String tmp = JsonUtil.convertToJson(socketErrorMsgVo); - reqBody.setJsonData(tmp); - reqBody.setTranCode(tranCode); - reqBody.setPackageNum(packageNum); - } - - // 转换byte[] - byte[] data = bomap.object2bytes(SocketMsg.SPTCC_MSG_BODY, reqBody); - reqBody.setDigest(MessageDigestSHA256.digest(data)); - byte[] allData = bomap.object2bytes(SocketMsg.SPTCC_MSG, reqBody); - - LOGGER.info("socket sendMsg [{}]", new String(allData, "UTF-8")); - // 组成响应报文 - ctx.writeAndFlush(SocketMsg.buildRespMsg(allData)); - } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) { - LOGGER.error("socket resp digest fail", e); - } catch (Exception e) { - LOGGER.error("prepare resp data fail", e); - } - return; - } -// -// @RequestMapping("/test") -// public String test() { -// String str = "{\"tranCode\":\"02650\",\"businessCode\":\"30\",\"fwdCode\":\"xiaohui\",\"acqCode\":\"xiaohui\",\"reqId\":\"14160\",\"reqTime\":\"20191206162008\",\"txnCommonInfo\":{\"dataCelectionDate\":\"000000000000\",\"checkInTxnSeq\":\"000000\",\"driverCardId\":\"0000000000\",\"driverCardType\":\"00\",\"checkInDate\":\"000000000000\",\"checkOutCount\":\"000000\",\"txnFlag\":\"88\",\"companyNo\":\"88888888888\",\"posId\":\"41530905\",\"posSeqId\":\"000000000001\",\"cityCode\":\"7700\",\"cardId\":\"0000000000\",\"cardType\":\"0F\",\"balBef\":\"00000000\",\"txnAmount\":\"00000100\",\"txnDate\":\"20191206\",\"txnTime\":\"162015\",\"counter\":\"000000\",\"orignalTxnAmount\":\"00000100\",\"cardSpec\":\"00\",\"tac\":\"00000000\",\"recordSpacialFlag\":\"01\",\"dtlRecNum\":\"0001\"},\"itsStationInfo\":{\"lineId\":\"09\"},\"qrCodeTxnInfo\":{\"dtlRecType2060\":\"2060\",\"txnCode\":\"386\",\"txnType\":\"00\",\"scanCodeType\":\"01\",\"termSerialNum\":\"000001\",\"payAccount\":\"0000256884 \",\"cardAccount\":\"3104770005650284200F\",\"acquirerNo\":\"2000 \",\"cardIssuerNo\":\"31047700 \",\"codeIssuerNo\":\"11223344 \",\"mcc\":\"4143\",\"chnType\":\"03\",\"transAmt\":\"000000000100\",\"refNum\":\"000000000001\",\"curCode\":\"156\",\"discountType\":\"0000\",\"recAmt\":\"00000064\",\"algFlag\":\"00\",\"rfu\":\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\",\"inTerminalID\":\"FFF200041530905\",\"interminalSeq\":\"00000001\",\"txnSummary\":\" \",\"intoTxnDate\":\"20191206162015\",\"outTerminalID\":\"FFFFFFFFFFFFFFF\",\"outTerminalSeq\":\"FFFFFFFF\",\"outTxnDate\":\"20191206162015\",\"outRFU\":\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\",\"qrCode\":\"gQFJJAEBAAAIEjEEdwASQAAAAQQEACEDkop57fwdTaZf5+1izDtHJffXGPRb40DCCz2KZzidOEswgb6Rn8KTTlD8Ou8YisdHhbrg+ynqYpeAI+/JNpritLuAtKDjAgum5cNrWHe8AS+BdAopT4OC9TiQOpJmx0UNMDAwMDI1Njg4NCAgICAgIDEEdwAFZQKEIA8xBHcAESIzRAAAB9ACXgrXBn/7cgYW1PhL4NPR9SO9wzopp0g2/r1M+hRD3ypd6kduALQAFcA11NAarpEEUEZdTvMtKR1CzPE4VRVCIBQxvSHk3sv04kvhSlZNzPPBbNlWSheBKcmNGLVczVn8Dpaq8gxIyU1d6g8uFRFn1X8aFYhrTXN9T6+Q8rZ4MGhvO9OVj3keO3bG0BmverLpgOT26lPpzbHjekCA+YkzZY58Aey0J8G9lGi7zqx=\"}}"; -// String tranCode = "02650"; -// IBusinessService service = socketServiceRouteMap.get(tranCode); -// String json = JsonUtil.toJson(service.processbusiness(TradeEnum.INDUSTRY_OFFLINE_UPLOAD, str)); -// return json; -// } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/ByteTools.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/ByteTools.java deleted file mode 100644 index c96f166f..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/ByteTools.java +++ /dev/null @@ -1,317 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.util; - -import java.io.*; -import java.util.Locale; - -/** - * 字节转换工具 - */ -public final class ByteTools { - - /** - * Mask for bit 0 of a byte. - */ - private static final int BIT_0 = 1; - - /** - * Mask for bit 1 of a byte. - */ - private static final int BIT_1 = 0x02; - - /** - * Mask for bit 2 of a byte. - */ - private static final int BIT_2 = 0x04; - - /** - * Mask for bit 3 of a byte. - */ - private static final int BIT_3 = 0x08; - - /** - * Mask for bit 4 of a byte. - */ - private static final int BIT_4 = 0x10; - - /** - * Mask for bit 5 of a byte. - */ - private static final int BIT_5 = 0x20; - - /** - * Mask for bit 6 of a byte. - */ - private static final int BIT_6 = 0x40; - - /** - * Mask for bit 7 of a byte. - */ - private static final int BIT_7 = 0x80; - - private static final int[] BITS = {BIT_0, BIT_1, BIT_2, BIT_3, BIT_4, BIT_5, BIT_6, BIT_7}; - - /** - * 把16进制字符串转换成字节数组 - * - * @param hex - * @return - */ - public static byte[] hexStringToByte(String hex) { - - int len = (hex.length() / 2); - byte[] result = new byte[len]; - char[] achar = hex.toUpperCase().toCharArray(); - for (int i = 0; i < len; i++) { - int pos = i * 2; - result[i] = (byte) (toByte(achar[pos]) << 4 | (toByte(achar[pos + 1]) & 0xff)); - } - return result; - } - - private static byte toByte(char c) { - return (byte) "0123456789ABCDEF".indexOf(c); - } - - /** - * 把字节数组转换成16进制字符串 - * - * @param bArray - * @return - */ - public static final String bytesToHexString(byte[] bArray) { - StringBuffer sb = new StringBuffer(bArray.length); - String sTemp; - for (int i = 0; i < bArray.length; i++) { - sTemp = Integer.toHexString(0xFF & bArray[i]); - if (sTemp.length() < 2) { - sb.append(0); - } - Locale locale = new Locale("US-ASCII"); - sb.append(sTemp.toUpperCase(locale)); - } - return sb.toString(); - } - - /** - * 把字节数组转换为对象 - * - * @param bytes - * @return - * @throws IOException - * @throws ClassNotFoundException - */ - public static final Object bytesToObject(byte[] bytes) throws IOException, - ClassNotFoundException { - ByteArrayInputStream in = new ByteArrayInputStream(bytes); - ObjectInputStream oi = new ObjectInputStream(in); - Object o = oi.readObject(); - oi.close(); - return o; - } - - /** - * 把可序列化对象转换成字节数组 - * - * @param s - * @return - * @throws IOException - */ - public static final byte[] objectToBytes(Serializable s) throws IOException { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - ObjectOutputStream ot = new ObjectOutputStream(out); - ot.writeObject(s); - ot.flush(); - ot.close(); - return out.toByteArray(); - } - - /** - * 可序列化对象转换成十六进制字符串 - * - * @param s - * @return - * @throws IOException - */ - public static final String objectToHexString(Serializable s) - throws IOException { - return bytesToHexString(objectToBytes(s)); - } - - public static final Object hexStringToObject(String hex) - throws IOException, ClassNotFoundException { - return bytesToObject(hexStringToByte(hex)); - } - - - /** - * @函数功能: 10进制串转为BCD码 - * @输入参数: 10进制串 - * @输出结果: BCD码 - */ - public static byte[] str2Bcd(String ascii) { - String asc = ascii; - int len = asc.length(); - int mod = len % 2; - - if (mod != 0) { - asc = "0" + asc; - len = asc.length(); - } - - byte abt[] = null; - if (len >= 2) { - len = len / 2; - } - - byte bbt[] = new byte[len]; - try { - abt = asc.getBytes("US-ASCII"); - } catch (UnsupportedEncodingException e) { - - } - int j, k; - - for (int p = 0; p < asc.length() / 2; p++) { - if ((abt[2 * p] >= '0') && (abt[2 * p] <= '9')) { - j = abt[2 * p] - '0'; - } else if ((abt[2 * p] >= 'a') && (abt[2 * p] <= 'z')) { - j = abt[2 * p] - 'a' + 0x0a; - } else { - j = abt[2 * p] - 'A' + 0x0a; - } - - if ((abt[2 * p + 1] >= '0') && (abt[2 * p + 1] <= '9')) { - k = abt[2 * p + 1] - '0'; - } else if ((abt[2 * p + 1] >= 'a') && (abt[2 * p + 1] <= 'z')) { - k = abt[2 * p + 1] - 'a' + 0x0a; - } else { - k = abt[2 * p + 1] - 'A' + 0x0a; - } - - int a = (j << 4) + k; - byte b = (byte) a; - bbt[p] = b; - } - return bbt; - } - - /** - * 字节数据转长整型 - * - * @param resource - * @return - */ - public static long bytes2int(byte[] resource) { - if (resource == null) { - return 0; - } - if (resource.length >= 4) { - return 0; - } - int mask = 0xff; - int temp = 0; - int res = 0; - byte[] b = new byte[]{0, 0, 0, 0}; - System.arraycopy(resource, 0, b, 4 - resource.length, resource.length); - for (int i = 0; i < 4; i++) { - res <<= 8; - temp = b[i] & mask; - res |= temp; - } - return res; - } - - /** - * 整型数据转字节码 - * - * @param num - * @return - */ - public static byte[] int2bytes(int num) { - byte[] b = new byte[4]; - long value = num; - for (int i = 0; i < 4; i++) { - b[i] = (byte) ((value >>> (24 - i * 8)) & 0xFF); - } - return b; - } - - /** - * 把字节数组转换成ASCII '0''1'表示字符串,不使用apache的codec的原因是它的bincodec是反过来的 - * - * @param raw - * @return - */ - public static final char[] bytesToascii(byte[] raw) { - if (raw == null || raw.length == 0) { - return new char[0]; - } - // get 8 times the bytes with 3 bit shifts to the left of the length - char[] lascii = new char[raw.length << 3]; - /* - * We decr index jj by 8 as we go along to not recompute indices using - * multiplication every time inside the loop. - */ - for (int ii = raw.length - 1, jj = lascii.length - 1; ii >= 0; ii--, jj -= 8) { - for (int bits = 0; bits < BITS.length; ++bits) { - if ((raw[ii] & BITS[bits]) == 0) { - lascii[jj - bits] = '0'; - } else { - lascii[jj - bits] = '1'; - } - } - } - return lascii; - } - - /** - * ascii字符数组转 字节码 - * - * @param ascii - * @return - */ - public static final byte[] acsiiTobytes(char[] ascii) { - if (ascii == null || ascii.length == 0) { - return new byte[0]; - } - // get length/8 times bytes with 3 bit shifts to the right of the length - byte[] lraw = new byte[ascii.length >> 3]; - /* - * We decr index jj by 8 as we go along to not recompute indices using - * multiplication every time inside the loop. - */ - for (int ii = lraw.length - 1, jj = ascii.length - 1; ii >= 0; ii--, jj -= 8) { - for (int bits = 0; bits < BITS.length; ++bits) { - if (ascii[jj - bits] == '1') { - lraw[ii] |= BITS[bits]; - } - } - } - return lraw; - - } - - /** - * 组合字节数组. - * - * @param bytes the bytes - * @return the byte[] - * @throws IOException Signals that an I/O exception has occurred. - */ - public static byte[] combinByteArray(byte[]... bytes) throws IOException { - ByteArrayOutputStream bos = null; - try { - bos = new ByteArrayOutputStream(); - for (byte[] b : bytes) { - bos.write(b); - } - return bos.toByteArray(); - } finally { - if (bos != null) { - bos.close(); - bos = null; - } - } - } - -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/ConvertTools.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/ConvertTools.java deleted file mode 100644 index 7ba263dc..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/ConvertTools.java +++ /dev/null @@ -1,319 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.util; - - -import org.apache.commons.lang.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.*; -import java.math.BigDecimal; -import java.util.Locale; - - -public final class ConvertTools { - - /** - * The Constant LOGGER. - */ - private static final Logger LOGGER = LoggerFactory - .getLogger(ConvertTools.class); - - - /** - * Mask for bit 0 of a byte. - */ - private static final int BIT_0 = 1; - - /** - * Mask for bit 1 of a byte. - */ - private static final int BIT_1 = 0x02; - - /** - * Mask for bit 2 of a byte. - */ - private static final int BIT_2 = 0x04; - - /** - * Mask for bit 3 of a byte. - */ - private static final int BIT_3 = 0x08; - - /** - * Mask for bit 4 of a byte. - */ - private static final int BIT_4 = 0x10; - - /** - * Mask for bit 5 of a byte. - */ - private static final int BIT_5 = 0x20; - - /** - * Mask for bit 6 of a byte. - */ - private static final int BIT_6 = 0x40; - - /** - * Mask for bit 7 of a byte. - */ - private static final int BIT_7 = 0x80; - - private static final int[] BITS = {BIT_0, BIT_1, BIT_2, BIT_3, BIT_4, - BIT_5, BIT_6, BIT_7}; - - /** - * 基础构造 - */ - private ConvertTools() { - - } - - /* - * 把16进制字符串转换成字节数组 @param hex @return - */ - public static byte[] hexStringToByte(String hex) { - - int len = (hex.length() / 2); - byte[] result = new byte[len]; - char[] achar = hex.toUpperCase().toCharArray(); - for (int i = 0; i < len; i++) { - int pos = i * 2; - result[i] = (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1]) & 0xff); - } - return result; - } - - private static byte toByte(char c) { - return (byte) "0123456789ABCDEF".indexOf(c); - } - - /** - * 把字节数组转换成16进制字符串 - * - * @param bArray - * @return - */ - public static final String bytesToHexString(byte[] bArray) { - StringBuffer sb = new StringBuffer(bArray.length); - String sTemp; - for (int i = 0; i < bArray.length; i++) { - sTemp = Integer.toHexString(0xFF & bArray[i]); - if (sTemp.length() < 2) { - sb.append(0); - } - Locale locale = new Locale("US-ASCII"); - sb.append(sTemp.toUpperCase(locale)); - } - return sb.toString(); - } - - /** - * 把字节数组转换为对象 - * - * @param bytes - * @return - * @throws IOException - * @throws ClassNotFoundException - */ - public static final Object bytesToObject(byte[] bytes) throws IOException, - ClassNotFoundException { - ByteArrayInputStream in = new ByteArrayInputStream(bytes); - ObjectInputStream oi = new ObjectInputStream(in); - Object o = oi.readObject(); - oi.close(); - return o; - } - - /** - * 把可序列化对象转换成字节数组 - * - * @param s - * @return - * @throws IOException - */ - public static final byte[] objectToBytes(Serializable s) throws IOException { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - ObjectOutputStream ot = new ObjectOutputStream(out); - ot.writeObject(s); - ot.flush(); - ot.close(); - return out.toByteArray(); - } - - public static final String objectToHexString(Serializable s) - throws IOException { - return bytesToHexString(objectToBytes(s)); - } - - public static final Object hexStringToObject(String hex) - throws IOException, ClassNotFoundException { - return bytesToObject(hexStringToByte(hex)); - } - - public static long bytes2int(byte[] resource) { - if (resource == null) { - return 0; - } - if (resource.length >= 4) { - return 0; - } - int mask = 0xff; - int temp = 0; - int res = 0; - byte[] b = new byte[]{0, 0, 0, 0}; - System.arraycopy(resource, 0, b, 4 - resource.length, resource.length); - for (int i = 0; i < 4; i++) { - res <<= 8; - temp = b[i] & mask; - res |= temp; - } - return res; - } - - public static byte[] int2bytes(int num) { - byte[] b = new byte[4]; - long value = num; - for (int i = 0; i < 4; i++) { - b[i] = (byte) ((value >>> (24 - i * 8)) & 0xFF); - } - return b; - } - - /** - * 把字节数组转换成ASCII '0''1'表示字符串,不使用apache的codec的原因是它的bincodec是反过来的 - * - * @param raw - * @return - */ - public static final char[] bytesToascii(byte[] raw) { - if (raw == null || raw.length == 0) { - return new char[0]; - } - // get 8 times the bytes with 3 bit shifts to the left of the length - char[] lascii = new char[raw.length << 3]; - /* - * We decr index jj by 8 as we go along to not recompute indices using - * multiplication every time inside the loop. - */ - for (int ii = raw.length - 1, jj = lascii.length - 1; ii >= 0; ii--, jj -= 8) { - for (int bits = 0; bits < BITS.length; ++bits) { - if ((raw[ii] & BITS[bits]) == 0) { - lascii[jj - bits] = '0'; - } else { - lascii[jj - bits] = '1'; - } - } - } - return lascii; - } - - public static final byte[] acsiiTobytes(char[] ascii) { - if (ascii == null || ascii.length == 0) { - return new byte[0]; - } - // get length/8 times bytes with 3 bit shifts to the right of the length - byte[] lraw = new byte[ascii.length >> 3]; - /* - * We decr index jj by 8 as we go along to not recompute indices using - * multiplication every time inside the loop. - */ - for (int ii = lraw.length - 1, jj = ascii.length - 1; ii >= 0; ii--, jj -= 8) { - for (int bits = 0; bits < BITS.length; ++bits) { - if (ascii[jj - bits] == '1') { - lraw[ii] |= BITS[bits]; - } - } - } - return lraw; - - } - - /** - * 组合字节数组. - * - * @param bytes the bytes - * @return the byte[] - * @throws IOException Signals that an I/O exception has occurred. - */ - public static byte[] combinByteArray(byte[]... bytes) throws IOException { - ByteArrayOutputStream bos = null; - try { - bos = new ByteArrayOutputStream(); - for (byte[] b : bytes) { - bos.write(b); - } - return bos.toByteArray(); - } finally { - if (bos != null) { - bos.close(); - bos = null; - } - } - } - - /** - * 将指定字符串转为指定长度 - * 如果过长则截取前n位 - * 如果过短则左补指定字符 - * - * @param str - * @param s - * @param length - * @return - */ - public static String leftPad(String str, char s, int length) { - if (str == null) { - str = ""; - } - if (str.length() > length) { - return str.substring(0, length); - } - while (str.length() < length) { - str = s + str; - } - return str; - } - - /** - * 元转分 - * - * @param amount - * @return - */ - public static Long yuan2fen(String amount) { - if (StringUtils.isBlank(amount)) { - return 0L; - } - Long fen; - try { - fen = new BigDecimal(amount).multiply(new BigDecimal(100)).longValue(); - } catch (Exception e) { - LOGGER.error("amount error"); - fen = 0L; - } - return fen; - } - - /** - * 分转元 - * 默认回0 - * 四舍五入两位小数 - * - * @param amount - * @return - */ - public static String fen2yuan(Long amount) { - if (amount == null) { - return "0"; - } - String yuan = "0"; - try { - yuan = new BigDecimal(amount).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP).toString(); - } catch (Exception e) { - LOGGER.error("amount error"); - } - return yuan; - } - -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/DTOFactory.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/DTOFactory.java deleted file mode 100644 index 1e2e0ffe..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/DTOFactory.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.util; - -import com.google.common.collect.Maps; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.lang.reflect.Method; -import java.util.Map; - -/** - * @describe - * @auther chen_yang - * @create 2018-04-16-14:02 - */ -public class DTOFactory { - - private static final Logger LOGGER = LoggerFactory.getLogger(DTOFactory.class); - private static Class[] classes = new Class[]{String.class}; - private static Object[] respCode = new Object[]{"01"}; - private static Object[] respMsg = new Object[]{"FAIL"}; - private static Map respCodeObjectsMap = Maps.newHashMap(); - - static { - respCodeObjectsMap.put("01", new Object[]{"01"}); - respCodeObjectsMap.put("88", new Object[]{"88"}); - } - - public static T newInstance(Class tClass) { - try { - return tClass.newInstance(); - } catch (Exception e) { - return null; - } - } - - /** - * 创建默认失败应答 - * - * @param tClass 类型参数 - */ - public static T newFailInstance(Class tClass, String respCode, String respMsg) { - Object[] codeObj = respCodeObjectsMap.get(respCode); - if (null == codeObj) { - codeObj = new Object[]{respCode}; - respCodeObjectsMap.put(respCode, codeObj); - } - return newFailInstance(tClass, codeObj, new Object[]{respMsg}); - } - - public static T newFailInstance(Class tClass, Object[] respCode, Object[] respMsg) { - try { - T t = tClass.newInstance(); - Method[] methods = tClass.getMethods(); - - for (Method method : methods) { - if (null != respCode && method.getName().contains("setRespCode")) { - Method setCodeMethod = tClass.getMethod("setRespCode", classes); - setCodeMethod.invoke(t, respCode); - } - - if (null != respMsg && method.getName().contains("setRespMsg")) { - Method setMsgMethod = t.getClass().getMethod("setRespMsg", classes); - setMsgMethod.invoke(t, respMsg); - } - } - - return t; - } catch (Exception e) { - LOGGER.error("DTOFactory 构建默认失败应答失败", e); - return null; - } - } - - /** - * 构建默认错误应答信息 - */ - public static T newFailInstance(Class tClass) { - return newFailInstance(tClass, respCode, respMsg); - } - - /** - * @param tClass 应答参数类型 - * @param respMsg 错误应答信息 - */ - public static T newFailInstance(Class tClass, String respMsg) { - return newFailInstance(tClass, respCode, new Object[]{respMsg}); - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/NoProperisObjectMapper.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/NoProperisObjectMapper.java deleted file mode 100644 index 06422e49..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/NoProperisObjectMapper.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.util; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JavaType; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.type.TypeFactory; -import com.google.common.collect.Maps; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.Map; - -/** - * @auther chen_yang - * @create 2018-01-22-16:03 - */ -public class NoProperisObjectMapper extends ObjectMapper { - - private static final Logger LOGGER = LoggerFactory.getLogger(NoProperisObjectMapper.class); - private static final long serialVersionUID = 1847111343578713457L; - - private static final NoProperisObjectMapper jsonMapper = new NoProperisObjectMapper(); - /** - * javaType 存储 - */ - private Map typeMap = Maps.newHashMap(); - - /** - * json toJsonString filter null value field and sort by first charaster - */ - public NoProperisObjectMapper() { - super.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); - super.setSerializationInclusion(JsonInclude.Include.NON_NULL); - } - - public static NoProperisObjectMapper defaultInstance() { - return jsonMapper; - } - - /** - * 简单类型反序列 - * - * @param s 待反序列字符串 - * @param tClass 参数类型 - */ - public T fromJsonString(String s, Class tClass) { - try { - return jsonMapper.readValue(s, tClass); - } catch (IOException e) { - LOGGER.error("fromJsonString fail,oriString [{}],classType [{}]", s, tClass, e); - return null; - } - } - - /** - * 泛型反序列 - * - * @param s 待反序列字符串 - * @param tClass 参数类型 - * @param parameterClasses 泛型参数 - */ - public T fromJsonString(String s, Class tClass, Class... parameterClasses) { - // className join with '_' as key - StringBuilder builder = new StringBuilder(tClass.getName()); - for (Class aClass : parameterClasses) { - builder.append("_").append(aClass.getName()); - } - - String key = builder.toString(); - JavaType type = typeMap.get(key); - - if (null == type) { - type = TypeFactory.defaultInstance().constructParametricType(tClass, parameterClasses); - typeMap.put(key, type); - } - - try { - return jsonMapper.readValue(s, type); - } catch (IOException e) { - LOGGER.error("jsonMapper fail,oriStr [{}]", s, e); - return null; - } - } - - /** - * @param obj 待序列化对象 - */ - public String toJsonString(Object obj) { - try { - return jsonMapper.writeValueAsString(obj); - } catch (Exception e) { - LOGGER.error("jsonMapper fail", e); - return ""; - } - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/ShadowUtil.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/ShadowUtil.java deleted file mode 100644 index c49df230..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/ShadowUtil.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.util; - -import org.apache.commons.lang3.StringUtils; - -import java.util.regex.Pattern; - -/** - * 敏感信息遮蔽工具类 - * - * @auther samayou - * @create 2018-06-15-10:42 - */ -public class ShadowUtil { - - private static final Pattern pattern = Pattern.compile("[0-9]+"); - - /** - * 遮蔽敏感字段信息,先对原始字符串正则匹配,如果原始串含有数字,认为是证件号/手机,否则当用户名进行遮蔽 - * - * @param oriStr 原始字符串 - */ - public static String shadow(String oriStr) { - if (pattern.matcher(oriStr).find()) {// oriStr 包含数字 -> 不为用户名 - return shadowPhoneOrIdNo(oriStr); - } else { - return shadowUserName(oriStr); - } - } - - /** - * 手机号&证件号敏感信息遮蔽,保留前3后4 - */ - public static String shadowPhoneOrIdNo(String oriStr) { - if (StringUtils.isEmpty(oriStr) || oriStr.length() <= 7) {// 手机号为空 || 手机长度不满足7位 - return oriStr; - } - StringBuilder builder = new StringBuilder(); - builder.append(oriStr); - int len = oriStr.length(); - return oriStr.substring(0, 3) - + oriStr.substring(3, len - 4).replaceAll("[0-9]", "*") - + oriStr.substring(len - 4, len); - } - - /** - * 用户名遮蔽,只保留姓 - * - * @param oriUserName 原用户名 - */ - public static String shadowUserName(String oriUserName) { - if (StringUtils.isEmpty(oriUserName)) { - return oriUserName; - } - // - return oriUserName.substring(0, 1) + oriUserName.substring(1, oriUserName.length()) - .replaceAll("[\\u4e00-\\u9fa5]|(\\w)", "*"); - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/UUIDUtil.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/UUIDUtil.java deleted file mode 100644 index efcffc2d..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/UUIDUtil.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.util; - -import com.fasterxml.uuid.EthernetAddress; -import com.fasterxml.uuid.Generators; -import com.fasterxml.uuid.impl.RandomBasedGenerator; -import com.fasterxml.uuid.impl.TimeBasedGenerator; - -import java.util.UUID; - -public class UUIDUtil { - // 修改成constructMulticastAddress ,防止jmv多个实例在一台服务器上 - private static TimeBasedGenerator uuidGenerator = Generators - .timeBasedGenerator(EthernetAddress.constructMulticastAddress()); - - public static UUID getRandomBaseUUID() { - // or bogus which would be gotten with: EthernetAddress.constructMulticastAddress() - RandomBasedGenerator uuidGenerator = Generators.randomBasedGenerator(); - // also: we don't specify synchronizer, getting an intra-JVM syncer; there is - // also external file-locking-based synchronizer if multiple JVMs run JUG - return uuidGenerator.generate(); - } - - public static String getRandomBaseUUIDString() { - // or bogus which would be gotten with: EthernetAddress.constructMulticastAddress() - RandomBasedGenerator uuidGenerator = Generators.randomBasedGenerator(); - // also: we don't specify synchronizer, getting an intra-JVM syncer; there is - // also external file-locking-based synchronizer if multiple JVMs run JUG - return uuidGenerator.generate().toString().replaceAll("-", ""); - } - - // need to pass Ethernet address; can either use real one (shown here) - public static UUID getTimebaseUUID() { - // or bogus which would be gotten with: - // EthernetAddress.constructMulticastAddress() - - // also: we don't specify synchronizer, getting an intra-JVM syncer; - // there is - // also external file-locking-based synchronizer if multiple JVMs run - // JUG - return uuidGenerator.generate(); - } - -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/ValidateUtils.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/ValidateUtils.java deleted file mode 100644 index 4ab3068f..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/util/ValidateUtils.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.util; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.validation.ConstraintViolation; -import javax.validation.Validation; -import javax.validation.Validator; -import java.util.Optional; -import java.util.Set; - -/** - * - */ -public class ValidateUtils { - - private static final Logger LOGGER = LoggerFactory.getLogger(ValidateUtils.class); - - private static Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); - - /** - * 字段合法性校验 - * - * @param r 待校验参数 - */ - public static Optional validate(R r) { - Set> checkResult = validator.validate(r); - if (checkResult.isEmpty()) { - return Optional.empty(); - } - StringBuilder buffer = new StringBuilder(); - checkResult.stream().forEach(result -> buffer.append(result.getMessage())); - return Optional.of(buffer.toString()); - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/validate/BizCheck.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/validate/BizCheck.java deleted file mode 100644 index 350dc065..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/common/validate/BizCheck.java +++ /dev/null @@ -1,130 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.common.validate; - -import com.jiuyv.sptcc.carbon.userGate.userGate.common.database.exception.BaseException; -import org.apache.commons.lang.StringUtils; - -import java.util.Collection; - - -/** - * The Class BizCheck. - * - * @author cowyk - * @version 1.0.0 - * @company Shanghai JinYu Software Systems CO.,LTD. - * @since 2014-2-17 15:41:44 - */ -public abstract class BizCheck { - - /** - * 验证为非空对象. - * - * @param toChk the to chk - * @param errorCode 错误代码 - * @param errorMsg 错误信息 - * @throws BaseException the base exception - */ - public static void notNull(Object toChk, String errorCode, String errorMsg) throws BaseException { - if (toChk == null) { - throw new BaseException(errorCode, errorMsg); - } - } - - /** - * 验证集合对象非空. - * - * @param toChk the to chk - * @param errorCode 错误代码 - * @param errorMsg 错误信息 - * @throws BaseException the base exception - */ - @SuppressWarnings("rawtypes") - public static void notEmpty(Collection toChk, String errorCode, String errorMsg) throws BaseException { - if (toChk == null || toChk.isEmpty()) { - throw new BaseException(errorCode, errorMsg); - } - } - - /** - * 验证字符串为非空串. - * - * @param toChk the to chk - * @param errorCode 错误代码 - * @param errorMsg 错误信息 - * @throws BaseException the base exception - */ - public static void notBlank(String toChk, String errorCode, String errorMsg) throws BaseException { - if (StringUtils.isBlank(toChk)) { - throw new BaseException(errorCode, errorMsg); - } - } - - /** - * 验证对象相等 调用equals方法,为null时也报错. - * - * @param toChk the to chk - * @param target the target - * @param errorCode 错误代码 - * @param errorMsg 错误信息 - * @throws BaseException the base exception - */ - public static void same(Object toChk, Object target, String errorCode, String errorMsg) throws BaseException { - if (toChk == null || target == null) { - throw new BaseException(errorCode, errorMsg); - } - if (!toChk.equals(target)) { - throw new BaseException(errorCode, errorMsg); - } - } - - /** - * 验证对象不相等 调用equals方法,比较对象相同时报错, - * 为null时也报错. - * - * @param toChk the to chk - * @param target the target - * @param errorCode the error code - * @param errorMsg the error msg - * @throws BaseException the base exception - */ - public static void notSame(Object toChk, Object target, String errorCode, String errorMsg) throws BaseException { - if (toChk == null || target == null) { - throw new BaseException(errorCode, errorMsg); - } - if (toChk.equals(target)) { - throw new BaseException(errorCode, errorMsg); - } - } - - /** - * 验证结果为True, false时抛出异常. - * - * @param toChk the to chk - * @param errorCode the error code - * @param errorMsg the error msg - * @throws BaseException the base exception - */ - public static void isTrue(boolean toChk, String errorCode, - String errorMsg) throws BaseException { - if (!toChk) { - throw new BaseException(errorCode, errorMsg); - } - } - - /** - * 验证字符串长度是否在规定返回内 - * 空也返回错误. - * - * @param toChk the to chk - * @param errorCode the error code - * @param errorMsg the error msg - * @throws BaseException the base exception - */ - public static void lengthValidate(String toChk, int min, int max, String errorCode, - String errorMsg) throws BaseException { - if (StringUtils.isBlank(toChk) || toChk.length() < min || toChk.length() > max) { - throw new BaseException(errorCode, errorMsg); - } - } - -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/config/BaseConfig.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/config/BaseConfig.java deleted file mode 100644 index ff338c37..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/config/BaseConfig.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.config; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -/** - * @title: Config - * @projectName: tanph.userGate - * @description: - * @author: BYT - * @date: 2023/07/18 4:15 PM - */ -@Component -@ConfigurationProperties(prefix = "baseconfig") -public class BaseConfig { - // sm4秘钥 - private String sm4key; - - public String getSm4key() { - return sm4key; - } - - public void setSm4key(String sm4key) { - this.sm4key = sm4key; - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/config/NettyBusinessTaskExecutorConfig.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/config/NettyBusinessTaskExecutorConfig.java deleted file mode 100644 index 9866398b..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/config/NettyBusinessTaskExecutorConfig.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.config; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.task.TaskExecutor; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; - -import javax.annotation.PostConstruct; -import java.util.concurrent.ThreadPoolExecutor; - -@EnableAsync -@Configuration -public class NettyBusinessTaskExecutorConfig { - private static final Logger LOGGER = LoggerFactory.getLogger(NettyBusinessTaskExecutorConfig.class); - - @Value("${netty.maxBusinessThread}") - private int maxBusinessThreads; - - @PostConstruct - public void init() { - LOGGER.info("netty server 最大业务线程数 {}", maxBusinessThreads); - } - - @Bean("asyncBusinessExecutor") - public TaskExecutor getAsyncExecutor() { - ThreadPoolTaskExecutor taskExecutor = - new ThreadPoolTaskExecutor(); - taskExecutor.setThreadNamePrefix("netty-business-ayncTask-"); - taskExecutor.setCorePoolSize(maxBusinessThreads / 2); - taskExecutor.setMaxPoolSize(maxBusinessThreads); - taskExecutor.setQueueCapacity(maxBusinessThreads * 5); - taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy()); - return taskExecutor; - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/controller/CouponPlatformController.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/controller/CouponPlatformController.java deleted file mode 100644 index 468daddf..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/controller/CouponPlatformController.java +++ /dev/null @@ -1,123 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.controller; - -import com.jiuyv.sptcc.carbon.gate.dto.GResultDTO; -import com.jiuyv.sptcc.carbon.gate.dto.QryUserUID; -import com.jiuyv.sptcc.carbon.gate.dto.ReqThreeInOneRealNameInfoDTO; -import com.jiuyv.sptcc.carbon.gate.dto.ResThreeInOneRealNameInfoDTO; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.ByteUtil; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.CrcUtil; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.DateUtil; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.Util; -import com.jiuyv.sptcc.carbon.userGate.userGate.dispatcher.entity.QueryUserUID; -import com.jiuyv.sptcc.carbon.userGate.userGate.message.AbstractMessage; -import com.jiuyv.sptcc.carbon.userGate.userGate.message.RealNameRecordMessage; -import com.jiuyv.sptcc.carbon.userGate.userGate.message.ReqHeaderMessage; -import com.jiuyv.sptcc.carbon.userGate.userGate.message.ReqQryUserMessage; -import com.jiuyv.sptcc.carbon.userGate.userGate.message.ReqThreeInOneInfoMessage; -import com.jiuyv.sptcc.carbon.userGate.userGate.message.ResThreeInOneInfoMessage; -import com.jiuyv.sptcc.carbon.userGate.userGate.service.INettyClientService; -import com.jiuyv.sptcc.carbon.userGate.userGate.service.impl.NettyClientServiceImpl; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; - -import java.util.Arrays; - -/** - * 卡券平台接口 - * - * @author ren_chao - */ -@RestController -public class CouponPlatformController { - - /** - * 请求码 - */ - private static final String REQ_RECORD_CODE = "0"; - /** - * 安全模块号 模块:取模块编号(同一个节点做交易时模块号可能不同,充资移入对应一个,售卡退卡对应一个) - * POS_NO = "200095070001"; // 200095070002 备用 - * N12 - */ - private static final String SAM_ID = "200095070001"; - /** - * 随机数 通讯密钥的分散因子Random A H16 - */ - private static final String RANDOM = "0000000000000000"; - /** - * 营运公司代码 地铁行业填线路站点信息 - * N11 - */ - private static final String COMPANY_CODE = "00095000012"; - - - @Autowired - private INettyClientService nettyClientService; - - @PostMapping("/tanph-userGate/queryRealNameInfoByPhone2") - public GResultDTO queryRealNameInfoByPhone(@RequestBody ReqThreeInOneRealNameInfoDTO reqDTO) { - ReqThreeInOneInfoMessage reqMessage = new ReqThreeInOneInfoMessage(); - reqMessage.setCenterSequence(reqDTO.getCenterSequence()); - reqMessage.setPhoneNo("13400010002"); - reqMessage.setStartNo("1"); - reqMessage.setTransactionType("0000"); - ReqHeaderMessage header = buildHeader(reqMessage, "2997"); - ReqHeaderMessage message = nettyClientService.sendRequest(header); - - ByteBuf buffer = ByteBufAllocator.DEFAULT.buffer(); - buffer.writeBytes(message.getRecordContent()); - - ResThreeInOneInfoMessage info = new ResThreeInOneInfoMessage(); - buffer.readBytes(info.getMessage()); - - int i = buffer.readableBytes(); - - RealNameRecordMessage recordMessage = new RealNameRecordMessage(); - int size = recordMessage.size(); - - return null; - } - - - @GetMapping("/test11") - public QryUserUID.RespDTO qryUserUID22(QryUserUID.ReqDTO reqDTO) { - ReqQryUserMessage qryUserMessage = new ReqQryUserMessage(); - qryUserMessage.setCenterSequence(DateUtil.getDate() + "000000"); - qryUserMessage.setTransactionType("0000"); - - // SPTCC_APP -> 004 ALIPAY->0009 - qryUserMessage.setChannleNo("0004"); - qryUserMessage.setQueryType("0001"); - - ReqHeaderMessage reqHeader = buildHeader(qryUserMessage, "2994"); - - ReqHeaderMessage reqHeaderMessage = nettyClientService.sendRequest(reqHeader); - - - return null; - } - - - /** - * 构建请求头 - */ - private ReqHeaderMessage buildHeader(AbstractMessage contentMessage, String recordCode) { - ReqHeaderMessage header = new ReqHeaderMessage(); - header.setRecordContent(contentMessage.getMessage()); - header.setRecordCode(recordCode); - header.setRecordLen(String.format("%04d", contentMessage.size() + header.size())); - header.setRequestFlag(REQ_RECORD_CODE); - header.setSamId(SAM_ID); - header.setRandom(RANDOM); - header.setCompanyCode(COMPANY_CODE); - header.setTerminalCode(SAM_ID.substring(4)); - header.setOprCode(SAM_ID.substring(4)); - return header; - } - -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/controller/UserController.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/controller/UserController.java deleted file mode 100644 index 516d3fa2..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/controller/UserController.java +++ /dev/null @@ -1,238 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.controller; - -import com.jiuyv.sptcc.carbon.gate.api.IUserGateApi; -import com.jiuyv.sptcc.carbon.gate.dto.QryThreeInOneInfo; -import com.jiuyv.sptcc.carbon.gate.dto.QryUserRealnameInfo; -import com.jiuyv.sptcc.carbon.gate.dto.QryUserUID; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.Constant; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.JsonUtil; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.Sm3Util; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.Sm4Util; -import com.jiuyv.sptcc.carbon.userGate.userGate.config.BaseConfig; -import com.jiuyv.sptcc.carbon.userGate.userGate.dispatcher.client.SptccClientAdapter; -import com.jiuyv.sptcc.carbon.userGate.userGate.dispatcher.entity.QueryThreeInOneInfo; -import com.jiuyv.sptcc.carbon.userGate.userGate.dispatcher.entity.QueryUserRealnameInfo; -import com.jiuyv.sptcc.carbon.userGate.userGate.dispatcher.entity.QueryUserUID; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import org.apache.commons.lang.StringUtils; -import org.apache.tomcat.util.buf.HexUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.springframework.web.bind.annotation.RestController; - -import java.util.ArrayList; -import java.util.List; - -/** - * 二维码平台外部接口文档3.0 8.11 外部注册开户实名接口 - * - * @auther chen_yang - * @create 2018-01-29-17:01 - */ -@RestController -@Component -public class UserController implements IUserGateApi { - - private static final Logger LOGGER = LoggerFactory.getLogger(UserController.class); - - @Autowired - private SptccClientAdapter clientAdapter; - - @Autowired - private BaseConfig baseConfig; - - /** - * 用户实名信息查询 - */ - @Override - public QryUserRealnameInfo.RespDTO qryUserRealnameInfo(QryUserRealnameInfo.ReqDTO reqDTO) { -// LOGGER.info("userinfo search [{}]", JsonUtil.convertToJson(reqDTO)); -// QryUserRealnameInfo.RespDTO respDto = null; -// respDto = socketClientRouteProxy.sendMsg(AppCode.QUERY_USER_REALNAME_INFO, reqDTO, QryUserRealnameInfo.RespDTO.class); -// LOGGER.info("userinfo search [{}]", JsonUtil.convertToJson(respDto)); -// return respDto; - - String sm4key = HexUtils.toHexString(baseConfig.getSm4key().getBytes()); - LOGGER.info("userrealnameinfo search [{}]", JsonUtil.convertToJson(reqDTO)); - QryUserRealnameInfo.RespDTO resp = new QryUserRealnameInfo.RespDTO(); - resp.setReqId(reqDTO.getReqId()); - try { - QueryUserRealnameInfo request = new QueryUserRealnameInfo(); - request.head.setBytes("2993"); - request.reqBody.setBytes(reqDTO); - QueryUserRealnameInfo rsp = (QueryUserRealnameInfo) clientAdapter.sendMsg(request); - // 连接超时 返回未知异常 - if (null == rsp) { - resp.setRespCode(Constant.RespCode.SYS_UNKNOWN_ERROR); - resp.setRespDesc(Constant.RespMsg.SYS_UNKNOWN_ERROR); - return resp; - } - if (rsp.rspBody.getResponseCode().equals(Constant.ResponseCode.SUCCESS)) { - resp.setRespCode(Constant.RespCode.SUCCESS); - resp.setRespDesc(Constant.RespMsg.SUCCESS); - resp.setRespMsg(rsp.rspBody.getDesc()); - resp.setCenterDate(rsp.rspBody.getCentdate()); - resp.setCenterSequence(rsp.rspBody.getCenctlseq()); - resp.setCertNo(Sm4Util.decryptEcb(sm4key, rsp.rspBody.getCertNo()).trim()); - resp.setCertType(Sm4Util.decryptEcb(sm4key, rsp.rspBody.getCertType()).trim()); - // 没有证件类型默认身份证 - if (StringUtils.isBlank(resp.getCertType())) { - LOGGER.info("无证件类型,默认身份证"); - resp.setCertType("0"); - } - resp.setName(Sm4Util.decryptEcb(sm4key, rsp.rspBody.getName()).trim()); - resp.setPhoneNo(Sm4Util.decryptEcb(sm4key, rsp.rspBody.getPhoneNo()).trim()); - } else { - resp.setRespCode(Constant.RespCode.SYS_BUSINESS_ERROR); - resp.setRespDesc(Constant.RespMsg.SYS_BUSINESS_ERROR); - } - } catch (Exception e) { - LOGGER.error("userrealnameinfo search error", e); - resp.setRespCode(Constant.RespCode.SYS_UNKNOWN_ERROR); - resp.setRespDesc(Constant.RespMsg.SYS_UNKNOWN_ERROR); - return resp; - } - LOGGER.info("userrealnameinfo search resp {}", JsonUtil.convertToJson(resp)); - return resp; - } - - - /** - * 交通卡用户UID查询 - */ - @Override - public QryUserUID.RespDTO qryUserUID(QryUserUID.ReqDTO reqDTO) { - LOGGER.info("userUID search [{}]", JsonUtil.convertToJson(reqDTO)); - QryUserUID.RespDTO resp = new QryUserUID.RespDTO(); - resp.setReqId(reqDTO.getReqId()); - try { - QueryUserUID request = new QueryUserUID(); - request.head.setBytes("2994"); - request.reqBody.setBytes(reqDTO); - QueryUserUID rsp = (QueryUserUID) clientAdapter.sendMsg(request); - // 连接超时 返回未知异常 - if (null == rsp) { - resp.setRespCode(Constant.RespCode.SYS_UNKNOWN_ERROR); - resp.setRespDesc(Constant.RespMsg.SYS_UNKNOWN_ERROR); - return resp; - } - if (rsp.rspBody.getResponseCode().equals(Constant.ResponseCode.SUCCESS)) { - resp.setRespCode(Constant.RespCode.SUCCESS); - resp.setRespDesc(Constant.RespMsg.SUCCESS); - resp.setRespMsg(rsp.rspBody.getDesc()); - resp.setCenterDate(rsp.rspBody.getCentdate()); - resp.setCenterSequence(rsp.rspBody.getCenctlseq()); - resp.setUserId(rsp.rspBody.getUserId()); - } else { - resp.setRespCode(Constant.RespCode.SYS_BUSINESS_ERROR); - resp.setRespDesc(Constant.RespMsg.SYS_BUSINESS_ERROR); - } - } catch (Exception e) { - LOGGER.error("userUID search error", e); - resp.setRespCode(Constant.RespCode.SYS_UNKNOWN_ERROR); - resp.setRespDesc(Constant.RespMsg.SYS_UNKNOWN_ERROR); - return resp; - } - LOGGER.info("userUID search resp {}", JsonUtil.convertToJson(resp)); - return resp; - } - - /** - * 根据手机号查询三合一实名信息 - */ - @Override - public QryThreeInOneInfo.RespDTO queryRealNameInfoByPhone(QryThreeInOneInfo.ReqDTO reqDTO) { - String reqName = reqDTO.getName(); - String reqCertNo = reqDTO.getCertNo(); - - LOGGER.info("userUID search [{}]", JsonUtil.convertToJson(reqDTO)); - QryThreeInOneInfo.RespDTO resp = new QryThreeInOneInfo.RespDTO(); - resp.setReqId(reqDTO.getReqId()); - QueryThreeInOneInfo request = new QueryThreeInOneInfo(); - request.head.setBytes("2997"); - request.reqBody.setBytes(reqDTO); - QueryThreeInOneInfo rsp = (QueryThreeInOneInfo) clientAdapter.sendMsg(request); - - // 连接超时 返回未知异常 - if (null == rsp) { - resp.setRespCode(Constant.RespCode.SYS_UNKNOWN_ERROR); - resp.setRespDesc(Constant.RespMsg.SYS_UNKNOWN_ERROR); - return resp; - } - - if (!rsp.rspBody.getResponseCode().equals(Constant.ResponseCode.SUCCESS)) { - resp.setRespCode(Constant.RespCode.SYS_BUSINESS_ERROR); - resp.setRespDesc(Constant.RespMsg.SYS_BUSINESS_ERROR); - return resp; - } - resp.setRespCode(Constant.RespCode.SUCCESS); - resp.setRespDesc(Constant.RespMsg.SUCCESS); - resp.setRespMsg(rsp.rspBody.getDesc()); - resp.setCenterDate(rsp.rspBody.getCentdate()); - resp.setCenterSequence(rsp.rspBody.getCenctlseq()); - - List list = new ArrayList<>(); - - try { - handleRecord(reqName, reqCertNo, rsp, list); - - // 查询剩余部分 - int snum = Integer.parseInt(rsp.rspBody.getSnum()); - int startNo = 1; - while (snum > 0) { - startNo = startNo + Integer.parseInt(rsp.rspBody.getCnum()); - reqDTO.setStartNo(Integer.toString(startNo)); - request.reqBody.setBytes(reqDTO); - rsp = (QueryThreeInOneInfo) clientAdapter.sendMsg(request); - // 连接超时未处理 - handleRecord(reqName, reqCertNo, rsp, list); - snum = Integer.parseInt(rsp.rspBody.getSnum()); - } - - } catch (Exception e) { - LOGGER.error("解密失败和hash失败"); - resp.setRespCode(Constant.RespCode.DECRYPT_FAILED); - resp.setRespDesc(Constant.RespMsg.DECRYPT_FAILED); - return resp; - } - - resp.setRecords(list); - - return resp; - } - - /** - * 处理查询到的记录 - * - */ - private void handleRecord(String reqName, String reqCertNo, QueryThreeInOneInfo rsp, List list) throws Exception { - ByteBuf buffer = ByteBufAllocator.DEFAULT.buffer(); - buffer.writeBytes(rsp.rspBody.record); - byte[] bytes = new byte[408]; - String sm4key = HexUtils.toHexString(baseConfig.getSm4key().getBytes()); - while (buffer.isReadable()) { - buffer.readBytes(bytes); - QueryThreeInOneInfo.MsgRecord msgRecord = new QueryThreeInOneInfo.MsgRecord(); - msgRecord.setBytes(bytes); - - String name = Sm4Util.decryptEcb(sm4key, msgRecord.getName()).trim(); - String certNo = Sm4Util.decryptEcb(sm4key, msgRecord.getCertNo()).trim(); - String certNoCiphertext = Sm3Util.encrypt(certNo); - LOGGER.debug("姓名:{},证件号:{}", name, certNoCiphertext); - - if (certNoCiphertext.equals(reqCertNo) && name.equals(reqName)) { - QryThreeInOneInfo.Record record = new QryThreeInOneInfo.Record(); - record.setChannelNo(msgRecord.getChannelNo()); - record.setChannelId(msgRecord.getChannelId()); - record.setName(name); - record.setCertNo(certNo); - record.setNote(msgRecord.getNote()); - list.add(record); - } - } - } - -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/client/SptccClientAdapter.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/client/SptccClientAdapter.java deleted file mode 100644 index 0ac6ddf2..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/client/SptccClientAdapter.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.dispatcher.client; - -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.SocketMsg; -import com.jiuyv.sptcc.carbon.userGate.userGate.dispatcher.entity.ISocketMsgProvider; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.stereotype.Component; - -@Component -@ConditionalOnProperty(value = "netty.sptccMarketing.enabled", havingValue = "true") -public class SptccClientAdapter { - private static final Logger LOGGER = LoggerFactory.getLogger(SptccClientAdapter.class); - - private final SptccSocketClient socketClient; - - @Autowired - public SptccClientAdapter(SptccSocketClient socketClient) { - this.socketClient = socketClient; - } - - public ISocketMsgProvider sendMsg(ISocketMsgProvider msgProvider) { - try { - byte[] reqData = msgProvider.getReq(); - SocketMsg req = new SocketMsg.Builder().setLength(reqData.length).setMessageBody(reqData).build(); - SocketMsg rsp = socketClient.sendMsg(req); - if (null == rsp) { - LOGGER.error("==== socketClient.sendMsg rsp null, classType [{}]", msgProvider.getClass().toString()); - return null; - } - - msgProvider.setRsp(rsp.getMessageBody()); - return msgProvider; - } catch (Exception e) { - LOGGER.error("===== socketClient communicate fail, classType [{}]", msgProvider.getClass().toString(), e); - return null; - } - } -} \ No newline at end of file diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/client/SptccClientHandler.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/client/SptccClientHandler.java deleted file mode 100644 index 5953959d..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/client/SptccClientHandler.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.dispatcher.client; - -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.client.ISocketClient; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.SocketMsg; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInboundHandlerAdapter; -import io.netty.handler.timeout.IdleState; -import io.netty.handler.timeout.IdleStateEvent; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * @describe - * @auther beck5293 - * @create 2018-03-26-15:32 - */ - -public class SptccClientHandler extends ChannelInboundHandlerAdapter { - private static final Logger LOGGER = LoggerFactory.getLogger(SptccClientHandler.class); - - private ISocketClient client; - - public SptccClientHandler(ISocketClient client) { - this.client = client; - } - - @Override - public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { - SocketMsg respMsg = (SocketMsg) msg; - if (0 == respMsg.getLength()) {// 接收到心跳应答,修改标志位 - return; - } - client.receiveFromServer(ctx.channel(), respMsg); - } - - @Override - public void userEventTriggered(ChannelHandlerContext ctx, Object evt) - throws Exception { - if (evt instanceof IdleStateEvent) { - IdleStateEvent event = (IdleStateEvent) evt; - if (event.state().equals(IdleState.READER_IDLE)) { - // 超时关闭channel - LOGGER.info("READER_IDLE channel {} close it ", ctx.channel().id().asShortText()); - ctx.close(); - } else if (event.state().equals(IdleState.WRITER_IDLE)) { - - // 超时关闭channel - LOGGER.info("WRITE_IDLE channel {} close it ", ctx.channel().id().asShortText()); - ctx.close(); - - } else if (event.state().equals(IdleState.ALL_IDLE)) { - // 超时关闭channel - LOGGER.info("ALL_IDLE channel {} close it ", ctx.channel().id().asShortText()); - ctx.close(); - } - } - super.userEventTriggered(ctx, evt); - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/client/SptccDecoder.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/client/SptccDecoder.java deleted file mode 100644 index 276c4a28..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/client/SptccDecoder.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.dispatcher.client; - -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.SocketMsg; -import io.netty.buffer.ByteBuf; -import io.netty.channel.Channel; -import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.ByteToMessageDecoder; -import org.apache.commons.codec.Charsets; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.net.InetSocketAddress; -import java.util.List; - -/** - * 解码器 - */ -public class SptccDecoder extends ByteToMessageDecoder { - private static final Logger LOGGER = LoggerFactory.getLogger(SptccDecoder.class); - - @Override - protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { - // check package len - if (in.readableBytes() < 4) { - LOGGER.info("----package len not enought"); - return; - } - - // remote ip:port - InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel().remoteAddress(); - - in.markReaderIndex(); - // get package len value - byte[] packageLenByte = new byte[4]; - in.readBytes(packageLenByte); - String respString = new String(packageLenByte, Charsets.toCharset("GBK")); - int packageLen = Integer.parseInt(respString); - - SocketMsg socketMsg; - if (0 == packageLen) { - socketMsg = new SocketMsg.Builder().setLength(0).build(); - out.add(socketMsg); - return; - } - - if (in.readableBytes() < packageLen) { - in.resetReaderIndex(); - return; - } - byte[] packageByte = new byte[packageLen]; - in.readBytes(packageByte); - socketMsg = new SocketMsg.Builder() - .setLength(packageLen) - .setRemoteip(socketAddress.getAddress().getHostAddress()) - .setRemoteport(socketAddress.getPort()) - .setMessageBody(packageByte) - .build(); - out.add(socketMsg); - } - - @Override - public void channelActive(final ChannelHandlerContext ctx) { // (1) - Channel in = ctx.channel(); - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("----server channelActive,syncClient ip=[{}]", in.remoteAddress()); - } - } - - - @Override - public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { - // Close the connection when an exception is raised. - LOGGER.warn("Unexpected exception from downstream.", cause); - ctx.close(); - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/client/SptccEncoder.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/client/SptccEncoder.java deleted file mode 100644 index d1c87d58..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/client/SptccEncoder.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.dispatcher.client; - -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.SocketMsg; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.ByteTools; -import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.MessageToByteEncoder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * 编码器 - */ -public class SptccEncoder extends MessageToByteEncoder { - private static final Logger LOGGER = LoggerFactory.getLogger(SptccEncoder.class); - - @Override - protected void encode(ChannelHandlerContext ctx, SocketMsg msg, ByteBuf out) throws Exception { - byte[] respByte; - byte[] packageLenByte = String.format("%04d", msg.getLength()).getBytes("GBK"); - - if (0 != msg.getLength()) { - respByte = ByteTools.combinByteArray(packageLenByte, msg.getMessageBody()); - - } else { - respByte = packageLenByte; - } - out.writeBytes(respByte); - } - - @Override - public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { - LOGGER.warn("Unexpected exception from downstream.", cause); - ctx.close(); - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/client/SptccSocketClient.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/client/SptccSocketClient.java deleted file mode 100644 index 7365924b..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/client/SptccSocketClient.java +++ /dev/null @@ -1,290 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.dispatcher.client; - -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.client.ISocketClient; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.CallBackResult; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.SocketCode; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.SocketMsg; -import io.netty.bootstrap.Bootstrap; -import io.netty.channel.Channel; -import io.netty.channel.EventLoop; -import io.netty.channel.EventLoopGroup; -import io.netty.channel.nio.NioEventLoopGroup; -import io.netty.channel.pool.AbstractChannelPoolHandler; -import io.netty.channel.pool.ChannelHealthChecker; -import io.netty.channel.pool.ChannelPoolHandler; -import io.netty.channel.pool.FixedChannelPool; -import io.netty.channel.socket.SocketChannel; -import io.netty.channel.socket.nio.NioSocketChannel; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.stereotype.Component; -import org.springframework.util.Assert; - -import javax.annotation.PostConstruct; -import java.net.InetSocketAddress; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import java.util.concurrent.atomic.AtomicLong; -import java.util.concurrent.atomic.AtomicReference; -import java.util.function.Supplier; - -/** - * @describe - * @auther beck5293 - * @create 2018-03-27-13:52 - */ -@Component -@ConditionalOnProperty(value = "netty.sptccMarketing.enabled", havingValue = "true") -public final class SptccSocketClient implements ISocketClient { - private static final Logger LOGGER = LoggerFactory.getLogger(SptccSocketClient.class); - protected final boolean isAsync = false; - protected final boolean isKeepAlive = true; - public Map callBackResults = new ConcurrentHashMap<>(); - public String host; - public int port; - /** - * channel 归还channelPool 时进行健康检查 - */ - ChannelHealthChecker channelHealthChecker = channel -> { - EventLoop loop = channel.eventLoop(); - boolean channelStatus = channel.isActive(); - LOGGER.info("channelId [{}] activeStatus [{}]", channel.id(), channelStatus); - return channelStatus - ? loop.newSucceededFuture(Boolean.TRUE) - : loop.newSucceededFuture(Boolean.FALSE); - }; - private AtomicLong atomicLong = new AtomicLong(); - private int idletimeout = 30; - private Bootstrap bootstrap = new Bootstrap(); - private EventLoopGroup group = new NioEventLoopGroup(); - private FixedChannelPool channelPool; - @Autowired - private SocketCode socketCode; - - @PostConstruct - public void init() { - Assert.notNull(socketCode.shqrcodeHost); - Assert.notNull(socketCode.shqrcodePort); - - this.host = socketCode.shqrcodeHost; - this.port = socketCode.shqrcodePort; - this.bootstrap.group(group) - .channel(NioSocketChannel.class) - .remoteAddress(new InetSocketAddress(host, port)); - LOGGER.info("====== shqrcode socket client create"); - createChannelPool(); - } - - /** - * 创建连接池 - */ - public void createChannelPool() { - // channel 构建 handler 不得共用 - Supplier clientSupplier = () -> this; - AtomicReference atomicReference = new AtomicReference<>(); - atomicReference.set(this); - // 连接池处理 - ChannelPoolHandler poolHandler = new AbstractChannelPoolHandler() { - @Override - public void channelCreated(Channel ch) { - SocketChannel channel = (SocketChannel) ch; - - channel.config().setKeepAlive(true).setTcpNoDelay(true).setConnectTimeoutMillis(500); - channel.pipeline() - .addLast(new SptccDecoder()) - .addLast(new SptccEncoder()) - .addLast(new SptccClientHandler(clientSupplier.get())); - } - }; - - /** - * 连接池配置 - */ - channelPool = new FixedChannelPool(bootstrap, - poolHandler, - channelHealthChecker, - FixedChannelPool.AcquireTimeoutAction.NEW, - SocketCode.ACQUIRE_TIMEOUT, - SocketCode.MAX_CHANNEL, - SocketCode.MAX_PEND_ACQUIRE, - true, - true); - } - - /** - * @param channel - * @param socketMsg - * @return - */ - public String genSendKey(Channel channel, SocketMsg socketMsg) { - String sendKey = String.valueOf(atomicLong.getAndIncrement()); - - channel.attr(SocketCode.SEND_KEY).set(sendKey); - - return sendKey; - } - - /** - * @param channel - * @param socketMsg - * @return - */ - @Override - public SocketMsg receiveFromServer(Channel channel, SocketMsg socketMsg) { - String receiveKey = getReceiveKey(channel, socketMsg); - - if (StringUtils.isEmpty(receiveKey)) { - LOGGER.error("----receiveKey is empty"); - - return null; - } - - // 记录应答数据 - CallBackResult callBackResult = callBackResults.getOrDefault(receiveKey, null); // 根据packageNum 获取 map中记录应答的数据结构 - - if (null == callBackResult) { // 如果超时,packageNum对应 callBackResult被移除 - LOGGER.error("----response store in callBackResult fail,callBackResult is Null,packageNum [{}]", - receiveKey); - - return null; - } - - // 记录应答数据 - callBackResult.setRespSocketMsg(socketMsg); - callBackResult.setSuccess(true); - - // 释放信号量 - callBackResult.getRecvsemap().release(); - - // 短链接关闭 - if (!this.isKeepAlive) { - channel.close(); - } - - return socketMsg; - } - - private void releaseChannel(Channel channel, boolean isAsync) { - if (null != channel) { - if (isAsync) { - channelPool.release(channel); - } else { - channel.close(); - channelPool.release(channel); - } - } - } - - /** - * 发送数据 - * - * @param socketMsg - * @return - */ - @Override - public SocketMsg sendMsg(SocketMsg socketMsg) { - Channel channel = null; - - try { - - // 申请channel - channel = channelPool.acquire().get(SocketCode.ACQUIRE_TIMEOUT, TimeUnit.SECONDS); - - if (null == channel) { - LOGGER.error("----socket client acquire channel timeout"); - - return null; - } - - // 检查异步/同步 - if (isAsync) { - - // 异步获取channel引用,直接归还;否则退化成同步连接 - channelPool.release(channel); - } - } catch (TimeoutException | InterruptedException | ExecutionException e) { - LOGGER.error("----socket client,channel acquire fail", e); - releaseChannel(channel, isAsync); - - return null; - } catch (Exception e) { - LOGGER.error("----socket client prepare sendMsg fail", e); - releaseChannel(channel, isAsync); - - return null; - } - - // 记录sendKey - String sendKey = genSendKey(channel, socketMsg); - - LOGGER.info("=====channelId [{}] sendKey [{}]", channel.id().asShortText(), sendKey); - - // 应答存储结构保存在channel中 - CallBackResult backResult = new CallBackResult(sendKey); - - if (null != callBackResults.putIfAbsent(sendKey, backResult)) { - LOGGER.error("----exist repeat sendKey,sendKey [{}]", sendKey); - releaseChannel(channel, isAsync); - - return null; - } - - try { - - // 发送数据 - channel.writeAndFlush(socketMsg); - - // 同步,挂在该资源上,等待回文 - backResult.getRecvsemap().tryAcquire(SocketCode.TIME_OUT, TimeUnit.SECONDS); - - if (!isAsync) { // 应答回复后,同步连接释放 - channelPool.release(channel); - } - } catch (InterruptedException e) { - - // 同步请求终端异常 - LOGGER.error("----socket client InterruptedException", e); - this.callBackResults.remove(sendKey); - releaseChannel(channel, isAsync); - - return null; - } - - // 同步应答处理 - backResult = this.callBackResults.remove(sendKey); - - if ((null != backResult) && backResult.isSuccess()) { - releaseChannel(channel, isAsync); - - return backResult.getRespSocketMsg(); - } - - releaseChannel(channel, isAsync); - - return null; - } - - /** - * @param channel - * @param socketMsg - * @return - */ - public String getReceiveKey(Channel channel, SocketMsg socketMsg) { - String sendKey = channel.attr(SocketCode.SEND_KEY).get(); - - if (!this.isKeepAlive) { - channel.close(); - } - - return sendKey; - } -} - - -//~ Formatted by Jindent --- http://www.jindent.com diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/entity/ISocketMsgProvider.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/entity/ISocketMsgProvider.java deleted file mode 100644 index 9492868f..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/entity/ISocketMsgProvider.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.dispatcher.entity; - -import java.io.UnsupportedEncodingException; - -public interface ISocketMsgProvider { - byte[] getReq() throws UnsupportedEncodingException; - - void setRsp(byte[] rsp) throws UnsupportedEncodingException; - -} \ No newline at end of file diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/entity/Msg.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/entity/Msg.java deleted file mode 100644 index 035167ae..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/entity/Msg.java +++ /dev/null @@ -1,128 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.dispatcher.entity; - -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.ByteUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public abstract class Msg implements ISocketMsgProvider { - public final static String MER_NO = "00095000012"; // 105290047890226--->注意修改营运公司代码的长度 - public final static String POS_NO = "200095070001"; // 200095070002 备用 - public final static int PRE_HEADER_LEN = 112; - protected static final Logger LOGGER = LoggerFactory.getLogger(Msg.class); - - public final static class MsgHead { - public byte[] transcode = new byte[4]; // 交易代码 - public byte[] RequestFlag = new byte[1]; // 请求标志 0:请求;1:应答 - public byte[] RecordLen = new byte[4]; // 报文长度 业务报文长度(B+C的长度) - public byte[] SAMId = new byte[12]; // 安全模块号 模块:取模块编号(同一个节点做交易时模块号可能不同,充资移入对应一个,售卡退卡对应一个) - public byte[] RANDOM = new byte[16]; // 随机数 通讯密钥的分散因子Random A - public byte[] CompanyCode = new byte[11]; // 营运公司代码 地铁行业填线路站点信息 - public byte[] TerminalCode = new byte[8]; // 终端代码 POS设备号 - public byte[] OprCode = new byte[8]; // 操作员 - public byte[] reserveddata = new byte[32]; // 保留数据 - public byte[] RecordSequence = new byte[8]; // 报文流水号 - public byte[] MacCode = new byte[8]; // MAC - - { - ByteUtil.bytesStrZero(transcode); - ByteUtil.bytesStrZero(RequestFlag); - ByteUtil.bytesStrZero(RecordLen); - ByteUtil.bytesStrZero(SAMId); - ByteUtil.bytesStrZero(RANDOM); - ByteUtil.bytesStrZero(CompanyCode); - ByteUtil.bytesStrZero(TerminalCode); - ByteUtil.bytesStrZero(OprCode); - ByteUtil.bytesStrZero(reserveddata); - ByteUtil.bytesStrZero(RecordSequence); - ByteUtil.bytesStrZero(MacCode); - } - - // lenth 112 - public byte[] getBytes(String len) { - ByteUtil.asciibytesCopy_R(RecordLen, len); - - return ByteUtil.uniteBytes( - transcode, - RequestFlag, - RecordLen, - SAMId, - RANDOM, - CompanyCode, - TerminalCode, - OprCode, - reserveddata, - RecordSequence, - MacCode); - } - - /** - * transcode,SAMId - * - * @param s - */ - public void setBytes(String... s) { - ByteUtil.asciibytesCopy_L(transcode, s[0]); - ByteUtil.asciibytesCopy_L(RequestFlag, "0"); - ByteUtil.asciibytesCopy_L(SAMId, POS_NO); - ByteUtil.asciibytesCopy_L(CompanyCode, MER_NO); - ByteUtil.asciibytesCopy_L(TerminalCode, POS_NO.substring(4)); - ByteUtil.asciibytesCopy_L(OprCode, POS_NO.substring(4)); - - if (s.length > 1) { - if ((s[1] == null) || "".equals(s[1].trim())) { - ByteUtil.asciibytesCopy_L(reserveddata, "0"); - } else { - ByteUtil.asciibytesCopy_L(reserveddata, s[1]); - } - } else { - ByteUtil.asciibytesCopy_L(reserveddata, "0"); - } - - ByteUtil.asciibytesCopy_L(RecordSequence, "0"); - } - } - - - /** - * TODO 手机信息域请求 - * - * @author jy - */ - public final static class MsgPhoneInfo { - public byte[] IMEI = new byte[16]; // 国际移动设备身份码 - public byte[] PHONE = new byte[12]; // 手机号 - public byte[] Model = new byte[20]; // 型号 - public byte[] OSVer = new byte[20]; // OS版本 - public byte[] appver = new byte[10]; // 应用版本 - public byte[] Ipaddr = new byte[15]; // IP地址 - public byte[] Macaddr = new byte[12]; // MAC地址 - - // LENTH - public byte[] getBytes() { - return ByteUtil.uniteBytes(IMEI, PHONE, Model, OSVer, appver, Ipaddr, Macaddr); - } - - public void setBytes(String... s) { - ByteUtil.asciibytesCopy_L(PHONE, s[0]); - ByteUtil.asciibytesCopy_L(Model, s[1]); - ByteUtil.asciibytesCopy_L(OSVer, s[2]); - ByteUtil.asciibytesCopy_L(appver, s[3]); - ByteUtil.asciibytesCopy_L(Ipaddr, s[4]); - ByteUtil.asciibytesCopy_L(IMEI, s[5]); - ByteUtil.asciibytesCopy_L(Macaddr, s[6]); - } - - public void setBytes() { - ByteUtil.asciibytesCopy_L(PHONE, " "); - ByteUtil.asciibytesCopy_L(Model, " "); - ByteUtil.asciibytesCopy_L(OSVer, " "); - ByteUtil.asciibytesCopy_L(appver, " "); - ByteUtil.asciibytesCopy_L(Ipaddr, " "); - ByteUtil.asciibytesCopy_L(IMEI, " "); - ByteUtil.asciibytesCopy_L(Macaddr, " "); - } - } -} - - -//~ Formatted by Jindent --- http://www.jindent.com diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/entity/QueryThreeInOneInfo.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/entity/QueryThreeInOneInfo.java deleted file mode 100644 index a4253a8e..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/entity/QueryThreeInOneInfo.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.dispatcher.entity; - -import com.jiuyv.sptcc.carbon.gate.dto.QryThreeInOneInfo; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.ByteUtil; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.CrcUtil; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.DateUtil; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.Util; - -import java.io.UnsupportedEncodingException; -import java.nio.charset.Charset; - - -/** - * @author ren_chao - */ -public class QueryThreeInOneInfo extends Msg { - - private static final Charset CHARSET_GBK = Charset.forName("GBK"); - - public MsgHead head = new MsgHead(); - public MsgReq reqBody = new MsgReq(); - public MsgRsp rspBody = new MsgRsp(); - - @Override - public byte[] getReq() throws UnsupportedEncodingException { - byte[] reqbytes = ByteUtil.uniteBytes(reqBody.getBytes()); - - try { - head.MacCode = ByteUtil.bytestoasciibytes(Util.toBytes((int) CrcUtil.mkCrc32(reqbytes))); - } catch (Exception e) { - } - - String len = String.valueOf(PRE_HEADER_LEN + reqbytes.length); - LOGGER.info("===== tradeClass [{}] req len: [{}]", this.getClass().getSimpleName(), len); - LOGGER.info("===== tradeClass [{}] req String data: [{}]", this.getClass().getSimpleName(), new String(reqbytes, "GBK")); - return ByteUtil.uniteBytes(head.getBytes(len), reqbytes); - } - - @Override - public void setRsp(byte[] rsp) throws UnsupportedEncodingException { - LOGGER.info("===== tradeClass [{}] rsp String data: [{}]", this.getClass().getSimpleName(), new String(rsp, "GBK")); - rspBody.setBytes(rsp); - } - - - - - - public static final class MsgReq { - public byte[] CenterSequence = new byte[14];// 中心流水号 - public byte[] TransactionType = new byte[4];// 全0 - public byte[] PhoneNo = new byte[20];// 手机号,没有填空格 - public byte[] StartNo = new byte[8];// userid - public byte[] Note = new byte[40];// 备注 - - public byte[] getBytes() { - return ByteUtil.uniteBytes(CenterSequence, TransactionType, PhoneNo, StartNo, Note); - } - - public void setBytes(QryThreeInOneInfo.ReqDTO reqDTO) { - ByteUtil.asciibytesCopy_L_default(CenterSequence, reqDTO.getCenterSequence(), DateUtil.getDate() + "000000"); - ByteUtil.asciibytesCopy_L_default(TransactionType, reqDTO.getTransactionType(), "0000"); - ByteUtil.asciibytesCopy_L_default(PhoneNo, reqDTO.getPhoneNo(), " "); - ByteUtil.asciibytesCopy_L_default(StartNo, reqDTO.getStartNo(), "1"); - ByteUtil.asciibytesCopy_L(Note, reqDTO.getNote()); - } - } - - - public static final class MsgRsp { - public byte[] ResponseCode = new byte[2];// 返回代码 - public byte[] Desc = new byte[40];// 代码含义描述 - public byte[] Centdate = new byte[8];// 中心受理日期 - public byte[] Cenctlseq = new byte[12];// 中心受理流水 - public byte[] TotNum = new byte[12];//总记录数 - public byte[] Snum = new byte[12];// 剩余记录数 - public byte[] Cnum = new byte[12];// 本页记录数 - public byte[] Qnum = new byte[12];// 起始记录号 - public byte[] record;// 记录 - - - - public void setBytes(byte[] b) { - ByteUtil.bytesCopy(ResponseCode, 0, b, PRE_HEADER_LEN, ResponseCode.length); - ByteUtil.bytesCopy(Desc, 0, b, PRE_HEADER_LEN + 2, Desc.length); - ByteUtil.bytesCopy(Centdate, 0, b, PRE_HEADER_LEN + 2 + 40, Centdate.length); - ByteUtil.bytesCopy(Cenctlseq, 0, b, PRE_HEADER_LEN + 2 + 40 + 8, Cenctlseq.length); - ByteUtil.bytesCopy(TotNum, 0, b, PRE_HEADER_LEN + 2 + 40 + 8 + 12, TotNum.length); - ByteUtil.bytesCopy(Snum, 0, b, PRE_HEADER_LEN + 2 + 40 + 8 + 12 + 12, Snum.length); - ByteUtil.bytesCopy(Cnum, 0, b, PRE_HEADER_LEN + 2 + 40 + 8 + 12 + 12 + 12, Cnum.length); - ByteUtil.bytesCopy(Qnum, 0, b, PRE_HEADER_LEN + 2 + 40 + 8 + 12 + 12 + 12 + 12, Qnum.length); - int destPos = PRE_HEADER_LEN + 2 + 40 + 8 + 12 + 12 + 12 + 12 + 12; - byte[] bytes = new byte[b.length - destPos]; - ByteUtil.bytesCopy(bytes, 0, b, destPos, bytes.length); - record = bytes; - } - - public String getTotNum() { - return new String(TotNum, CHARSET_GBK).trim(); - } - - public String getSnum() { - return new String(Snum, CHARSET_GBK).trim(); - } - - public String getCnum() { - return new String(Cnum, CHARSET_GBK).trim(); - } - - public String getQnum() { - return new String(Qnum, CHARSET_GBK).trim(); - } - - public String getResponseCode() { - return new String(ResponseCode, CHARSET_GBK).trim(); - } - - public String getDesc() { - return new String(Desc, CHARSET_GBK).trim(); - } - - public String getCentdate() { - return new String(Centdate, CHARSET_GBK).trim(); - } - - public String getCenctlseq() { - return new String(Cenctlseq, CHARSET_GBK).trim(); - } - } - - public static final class MsgRecord { - public byte[] channelNo = new byte[4]; // 渠道号 - public byte[] channelId = new byte[128]; // 渠道ID - public byte[] name = new byte[128]; // 姓名 - public byte[] certNo = new byte[128]; // 证件号 - public byte[] Note = new byte[20]; // 备注 - - public void setBytes(byte[] b) { - ByteUtil.bytesCopy(channelNo, 0, b, 0, channelNo.length); - ByteUtil.bytesCopy(channelId, 0, b, 4, channelId.length); - ByteUtil.bytesCopy(name, 0, b, 4 + 128, name.length); - ByteUtil.bytesCopy(certNo, 0, b, 4 + 128 + 128, certNo.length); - ByteUtil.bytesCopy(Note, 0, b, 4 + 128 + 128 + 128, Note.length); - - } - - public String getChannelNo() { - return new String(channelNo, CHARSET_GBK).trim(); - } - - public String getChannelId() { - return new String(channelId, CHARSET_GBK).trim(); - } - - public String getName() { - return new String(name, CHARSET_GBK).trim(); - } - - public String getCertNo() { - return new String(certNo, CHARSET_GBK).trim(); - } - - public String getNote() { - return new String(Note, CHARSET_GBK).trim(); - } - - } - -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/entity/QueryUserRealnameInfo.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/entity/QueryUserRealnameInfo.java deleted file mode 100644 index 338f1693..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/entity/QueryUserRealnameInfo.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.dispatcher.entity; - -import com.jiuyv.sptcc.carbon.gate.dto.QryUserRealnameInfo; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.ByteUtil; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.CrcUtil; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.Util; - -import javax.crypto.BadPaddingException; -import javax.crypto.IllegalBlockSizeException; -import javax.crypto.NoSuchPaddingException; -import java.io.UnsupportedEncodingException; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; -import java.security.NoSuchProviderException; - -/** - * 8.14用户信息查询(新) - * 碳普惠授权中心向卡用户中心发起用户实名信息查询的请求 - * - * @version 1.0 - */ -public class QueryUserRealnameInfo extends Msg { - public MsgHead head = new MsgHead(); - public MsgReq reqBody = new MsgReq(); - public MsgRsp rspBody = new MsgRsp(); - - @Override - public byte[] getReq() throws UnsupportedEncodingException { - byte[] reqbytes = ByteUtil.uniteBytes(reqBody.getBytes()); - - try { - head.MacCode = ByteUtil.bytestoasciibytes(Util.toBytes((int) CrcUtil.mkCrc32(reqbytes))); - } catch (Exception e) { - } - - String len = String.valueOf(PRE_HEADER_LEN + reqbytes.length); - LOGGER.info("===== tradeClass [{}] req len: [{}]", this.getClass().getSimpleName(), len); - LOGGER.info("===== tradeClass [{}] req String data: [{}]", this.getClass().getSimpleName(), new String(reqbytes, "GBK")); - return ByteUtil.uniteBytes(head.getBytes(len), reqbytes); - } - - @Override - public void setRsp(byte[] rsp) throws UnsupportedEncodingException { - LOGGER.info("===== tradeClass [{}] rsp String data: [{}]", this.getClass().getSimpleName(), new String(rsp, "GBK")); - rspBody.setBytes(rsp); - } - - public final class MsgReq { - public byte[] CenterSequence = new byte[14];// 中心流水号 - public byte[] TransactionType = new byte[4];// 全0 - public byte[] PhoneNo = new byte[20];// 手机号,没有填空格 - public byte[] UserId = new byte[10];// userid - public byte[] Note = new byte[20];// 备注 - - public byte[] getBytes() { - byte[] b1 = ByteUtil.uniteBytes(CenterSequence, TransactionType, PhoneNo, UserId, Note); - return b1; - } - - public void setBytes(QryUserRealnameInfo.ReqDTO qryUserRealnameInfo) { - ByteUtil.asciibytesCopy_L(CenterSequence, qryUserRealnameInfo.getCenterSequence()); - ByteUtil.asciibytesCopy_L_default(TransactionType, qryUserRealnameInfo.getTransactionType(), "0000"); - ByteUtil.asciibytesCopy_L_default(PhoneNo, qryUserRealnameInfo.getPhoneNo(), " "); - ByteUtil.asciibytesCopy_L(UserId, qryUserRealnameInfo.getUserId()); - ByteUtil.asciibytesCopy_L(Note, qryUserRealnameInfo.getNote()); - } - } - - public final class MsgRsp { - public byte[] ResponseCode = new byte[2];// 返回代码 - public byte[] Desc = new byte[40];// 代码含义描述 - public byte[] Centdate = new byte[8];// 中心受理日期 - public byte[] Cenctlseq = new byte[12];// 中心受理流水 - public byte[] Name = new byte[128];// 姓名 - public byte[] CertNo = new byte[128];// 证件号 - public byte[] CertType = new byte[32];// 证件类型 - public byte[] PhoneNo = new byte[64];// 手机号 - - - public void setBytes(byte[] b) { - ByteUtil.bytesCopy(ResponseCode, 0, b, PRE_HEADER_LEN, ResponseCode.length); - ByteUtil.bytesCopy(Desc, 0, b, PRE_HEADER_LEN + 2, Desc.length); - ByteUtil.bytesCopy(Centdate, 0, b, PRE_HEADER_LEN + 2 + 40, Centdate.length); - ByteUtil.bytesCopy(Cenctlseq, 0, b, PRE_HEADER_LEN + 2 + 40 + 8, Cenctlseq.length); - ByteUtil.bytesCopy(Name, 0, b, PRE_HEADER_LEN + 2 + 40 + 8 + 12, Name.length); - ByteUtil.bytesCopy(CertNo, 0, b, PRE_HEADER_LEN + 2 + 40 + 8 + 12 + 128, CertNo.length); - ByteUtil.bytesCopy(CertType, 0, b, PRE_HEADER_LEN + 2 + 40 + 8 + 12 + 128 + 128, CertType.length); - ByteUtil.bytesCopy(PhoneNo, 0, b, PRE_HEADER_LEN + 2 + 40 + 8 + 12 + 128 + 128 + 32, PhoneNo.length); - } - - public String getName() throws UnsupportedEncodingException, NoSuchPaddingException, NoSuchAlgorithmException, IllegalBlockSizeException, BadPaddingException, NoSuchProviderException, InvalidKeyException { - return new String(Name, "GBK").trim(); - } - - public String getCertNo() throws UnsupportedEncodingException, NoSuchPaddingException, NoSuchAlgorithmException, IllegalBlockSizeException, BadPaddingException, NoSuchProviderException, InvalidKeyException { - return new String(CertNo, "GBK").trim(); - } - - public String getCertType() throws UnsupportedEncodingException, NoSuchPaddingException, NoSuchAlgorithmException, IllegalBlockSizeException, BadPaddingException, NoSuchProviderException, InvalidKeyException { - return new String(CertType, "GBK").trim(); - } - - public String getPhoneNo() throws UnsupportedEncodingException, NoSuchPaddingException, NoSuchAlgorithmException, IllegalBlockSizeException, BadPaddingException, NoSuchProviderException, InvalidKeyException { - return new String(PhoneNo, "GBK").trim(); - } - - public String getResponseCode() throws UnsupportedEncodingException { - return new String(ResponseCode, "GBK").trim(); - } - - public String getDesc() throws UnsupportedEncodingException { - return new String(Desc, "GBK").trim(); - } - - public String getCentdate() throws UnsupportedEncodingException { - return new String(Centdate, "GBK").trim(); - } - - public String getCenctlseq() throws UnsupportedEncodingException { - return new String(Cenctlseq, "GBK").trim(); - } - } - -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/entity/QueryUserUID.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/entity/QueryUserUID.java deleted file mode 100644 index 4e1b7ec4..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/dispatcher/entity/QueryUserUID.java +++ /dev/null @@ -1,116 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.dispatcher.entity; - -import com.jiuyv.sptcc.carbon.gate.dto.QryUserUID; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.ByteUtil; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.CrcUtil; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.DateUtil; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.Util; - -import java.io.UnsupportedEncodingException; - -/** - * @version 1.0 - * 碳普惠授权中心向卡用户中心发起用户UID查询的请求 - */ -public class QueryUserUID extends Msg { - public MsgHead head = new MsgHead(); - public MsgReq reqBody = new MsgReq(); - public MsgRsp rspBody = new MsgRsp(); - - @Override - public byte[] getReq() throws UnsupportedEncodingException { - byte[] reqbytes = ByteUtil.uniteBytes(reqBody.getBytes()); - - try { - head.MacCode = ByteUtil.bytestoasciibytes(Util.toBytes((int) CrcUtil.mkCrc32(reqbytes))); - } catch (Exception e) { - } - - String len = String.valueOf(PRE_HEADER_LEN + reqbytes.length); - LOGGER.info("===== tradeClass [{}] req len: [{}]", this.getClass().getSimpleName(), len); - LOGGER.info("===== tradeClass [{}] req String data: [{}]", this.getClass().getSimpleName(), new String(reqbytes, "GBK")); - return ByteUtil.uniteBytes(head.getBytes(len), reqbytes); - } - - @Override - public void setRsp(byte[] rsp) throws UnsupportedEncodingException { - LOGGER.info("===== tradeClass [{}] rsp String data: [{}]", this.getClass().getSimpleName(), new String(rsp, "GBK")); - rspBody.setBytes(rsp); - } - - public final class MsgReq { - public byte[] CenterSequence = new byte[14];// 中心流水号 - public byte[] TransactionType = new byte[4];// 全0 - public byte[] ChannleNo = new byte[4];// 渠道号 - public byte[] ChannleUID = new byte[128];// 渠道用户uid - public byte[] PHONENO = new byte[20];// 渠道手机号 - public byte[] QUERYTYPE = new byte[4];// 查询类型 - public byte[] Note = new byte[20];// 备注 - - public byte[] getBytes() { - byte[] b1 = ByteUtil.uniteBytes(CenterSequence, TransactionType, ChannleNo, ChannleUID, PHONENO, QUERYTYPE, Note); - return b1; - } - - public void setBytes(QryUserUID.ReqDTO qryUserUID) { - ByteUtil.asciibytesCopy_L(CenterSequence, DateUtil.getDate() + "000000"); - ByteUtil.asciibytesCopy_L_default(TransactionType, qryUserUID.getTransactionType(), "0000"); - String channel = qryUserUID.getChannelNo(); - if (channel.equals("SPTCC_APP")) { - ByteUtil.asciibytesCopy_L(ChannleNo, "0004"); - } else if (channel.equals("ALIPAY")) { - ByteUtil.asciibytesCopy_L(ChannleNo, "0009"); - } else { // 支付渠道未知SPTCC_APP - LOGGER.info("支付渠道未知:{}", channel); - ByteUtil.asciibytesCopy_L(ChannleNo, null); - } - ByteUtil.asciibytesCopy_L(ChannleUID, qryUserUID.getChannelUID()); - ByteUtil.asciibytesCopy_L(PHONENO, null); - ByteUtil.asciibytesCopy_L(QUERYTYPE, "0001"); - ByteUtil.asciibytesCopy_L(Note, qryUserUID.getNote()); - } - } - - public final class MsgRsp { - public byte[] ResponseCode = new byte[2];// 返回代码 - public byte[] Desc = new byte[40];// 代码含义描述 - public byte[] Centdate = new byte[8];// 中心受理日期 - public byte[] Cenctlseq = new byte[12];// 中心受理流水 - public byte[] UserId = new byte[10];// 交通卡用户uid - public byte[] SptccId = new byte[12];// 交通卡用户sptccid - - public void setBytes(byte[] b) { - ByteUtil.bytesCopy(ResponseCode, 0, b, PRE_HEADER_LEN, ResponseCode.length); - ByteUtil.bytesCopy(Desc, 0, b, PRE_HEADER_LEN + 2, Desc.length); - ByteUtil.bytesCopy(Centdate, 0, b, PRE_HEADER_LEN + 2 + 40, Centdate.length); - ByteUtil.bytesCopy(Cenctlseq, 0, b, PRE_HEADER_LEN + 2 + 40 + 8, Cenctlseq.length); - ByteUtil.bytesCopy(UserId, 0, b, PRE_HEADER_LEN + 2 + 40 + 8 + 12, UserId.length); - ByteUtil.bytesCopy(SptccId, 0, b, PRE_HEADER_LEN + 2 + 40 + 8 + 12 + 10, SptccId.length); - } - - public String getUserId() throws UnsupportedEncodingException { - return new String(UserId, "GBK").trim(); - } - - public String getResponseCode() throws UnsupportedEncodingException { - return new String(ResponseCode, "GBK").trim(); - } - - public String getDesc() throws UnsupportedEncodingException { - return new String(Desc, "GBK").trim(); - } - - public String getCentdate() throws UnsupportedEncodingException { - return new String(Centdate, "GBK").trim(); - } - - public String getCenctlseq() throws UnsupportedEncodingException { - return new String(Cenctlseq, "GBK").trim(); - } - - public String getSptccId() throws UnsupportedEncodingException { - return new String(SptccId, "GBK").trim(); - } - } - -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/exception/ServiceException.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/exception/ServiceException.java deleted file mode 100644 index 30c8b0e1..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/exception/ServiceException.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.exception; - -/** - * 业务异常 - * - */ -public final class ServiceException extends RuntimeException { - private static final long serialVersionUID = 1L; - - public ServiceException(String message) { - super(message); - } - -} \ No newline at end of file diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/handler/ClientMessageHandler.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/handler/ClientMessageHandler.java deleted file mode 100644 index 7ac91c9f..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/handler/ClientMessageHandler.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.handler; - -import com.jiuyv.sptcc.carbon.userGate.userGate.message.ReqHeaderMessage; -import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInboundHandlerAdapter; -import io.netty.util.concurrent.DefaultPromise; - -/** - * 报文接收处理器 - * - * @author ren_chao - */ -public class ClientMessageHandler extends ChannelInboundHandlerAdapter { - - private final DefaultPromise connectionPromise; - - public ClientMessageHandler(DefaultPromise connectionPromise) { - this.connectionPromise = connectionPromise; - } - - @Override - public void channelRead(ChannelHandlerContext ctx, Object msg) { - if (msg instanceof ReqHeaderMessage) { - connectionPromise.setSuccess((ReqHeaderMessage) msg); - } - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/message/RealNameRecordMessage.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/message/RealNameRecordMessage.java deleted file mode 100644 index 93cb3ce2..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/message/RealNameRecordMessage.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.message; - -/** - * 2.1. 根据手机号查询三合一实名信息 交易记录体 - * - * @author ren_chao - */ -public class RealNameRecordMessage extends AbstractMessage { - - /** - * 每个交易记录体 408 - */ - public RealNameRecordMessage() { - super(408); - } - - /** - * 渠道号 - * N4 - */ - public String getChannelNo() { - return arraycopy(0, 4); - } - - /** - * 渠道号 - * N4 - */ - public void setChannelNo(String channelNo) { - setArray(channelNo, 0, 4); - } - - /** - * 渠道ID - * N128 - */ - public String getChannelId() { - return arraycopy(4, 128); - } - - /** - * 渠道ID - * N128 - */ - public void setChannelId(String channelId) { - setArray(channelId, 4, 128); - } - - /** - * 姓名 - * H128 - */ - public String getName() { - return arraycopy(132, 128); - } - - /** - * 姓名 - * H128 - */ - public void setName(String name) { - setArray(name, 132, 128); - } - - /** - * 证件号 - * H128 - */ - public String getCertNo() { - return arraycopy(260, 128); - } - - /** - * 证件号 - * H128 - */ - public void setCertNo(String certNo) { - setArray(certNo, 260, 128); - } - - /** - * 备注 - * ANS20 - */ - public String getNote() { - return arraycopy(388, 20); - } - - /** - * 备注 - * ANS20 - */ - public void setNote(String note) { - setArray(note, 388, 20); - } - -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/message/ReqQryUserMessage.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/message/ReqQryUserMessage.java deleted file mode 100644 index af3c16a2..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/message/ReqQryUserMessage.java +++ /dev/null @@ -1,108 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.message; - -/** - * @author ren_chao - */ -public class ReqQryUserMessage extends AbstractMessage { - - public ReqQryUserMessage() { - super(194); - } - - /** - * 中心流水号 14 - */ - public String getCenterSequence() { - return arraycopy(0, 14); - } - /** - * 中心流水号 14 - */ - public void setCenterSequence(String centerSequence) { - setArray(centerSequence, 0, 14); - } - - /** - * 全0 4 - */ - public String getTransactionType() { - return arraycopy(14, 4); - } - - /** - * 全0 4 - */ - public void setTransactionType(String transactionType) { - setArray(transactionType, 14, 4); - } - - /** - * 渠道号 4 - */ - public String getChannleNo() { - return arraycopy(18, 4); - } - - /** - * 渠道号 4 - */ - public void setChannleNo(String channleNo) { - setArray(channleNo, 18, 4); - } - - /** - * 渠道用户uid 128 - */ - public String getChannleUID() { - return arraycopy(22, 128); - } - - /** - * 渠道用户uid 128 - */ - public void setChannleUID(String channleUID) { - setArray(channleUID, 22, 128); - } - - /** - * 渠道手机号 20 - */ - public String getPhoneNO() { - return arraycopy(150, 20); - } - - /** - * 渠道手机号 20 - */ - public void setPhoneNO(String phoneNO) { - setArray(phoneNO, 150, 20); - } - - /** - * 查询类型 4 - */ - public String getQueryType() { - return arraycopy(170, 4); - } - - /** - * 查询类型 4 - */ - public void setQueryType(String queryType) { - setArray(queryType, 170, 4); - } - - /** - * 备注 20 - */ - public String getNote() { - return arraycopy(174, 20); - } - - /** - * 备注 20 - */ - public void setNote(String note) { - setArray(note, 174, 20); - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/message/ReqThreeInOneInfoMessage.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/message/ReqThreeInOneInfoMessage.java deleted file mode 100644 index 8d2b19e5..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/message/ReqThreeInOneInfoMessage.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.message; - -/** - * 2.1. 根据手机号查询三合一实名信息 请求报文体 - * - * @author ren_chao - */ -public class ReqThreeInOneInfoMessage extends AbstractMessage{ - - /** - * 请求报文总长度 86 - */ - public ReqThreeInOneInfoMessage() { - super(86); - } - - /** - * 中心流水号 8位日期+6位0 - * N14 - */ - public String getCenterSequence() { - return arraycopy(0, 14); - } - - /** - * 中心流水号 8位日期+6位0 - * N14 - */ - public void setCenterSequence(String centerSequence) { - setArray(centerSequence, 0, 14); - } - - /** - * 交易类型 全0 - * N4 - */ - public String getTransactionType() { - return arraycopy(14, 4); - } - - /** - * 交易类型 全0 - * N4 - */ - public void setTransactionType(String transactionType) { - setArray(transactionType, 14, 4); - } - - /** - * 手机号 选填 - * N20 - */ - public String getPhoneNo() { - return arraycopy(18, 20); - } - - /** - * 手机号 选填 - * N20 - */ - public void setPhoneNo(String phoneNo) { - setArray(phoneNo, 18, 20); - } - - /** - * 起始记录号 - * 从1开始查,每次后台最多返回10条,超过10条的需要前端分次查询,第二次查询从11开始查,以此类推 - * N8 - */ - public String getStartNo() { - return arraycopy(38, 8); - } - - /** - * 起始记录号 - * 从1开始查,每次后台最多返回10条,超过10条的需要前端分次查询,第二次查询从11开始查,以此类推 - * N8 - */ - public void setStartNo(String startNo) { - setArray(startNo, 38, 8); - } - - /** - * 查询备注 - * H40 - */ - public String getNote() { - return arraycopy(46, 40); - } - - /** - * 查询备注 - * H40 - */ - public void setNote(String note) { - setArray(note, 46, 40); - } - -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/message/ResThreeInOneInfoMessage.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/message/ResThreeInOneInfoMessage.java deleted file mode 100644 index d3e0b2b6..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/message/ResThreeInOneInfoMessage.java +++ /dev/null @@ -1,158 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.message; - -/** - * 2.1. 根据手机号查询三合一实名信息 应答报文体 - * - * @author ren_chao - */ -public class ResThreeInOneInfoMessage extends AbstractMessage { - - /** - * 交易记录体 依次排列 - */ - private byte[] recordBody; - - public byte[] getRecordBody() { - return recordBody; - } - - public void setRecordBody(byte[] recordBody) { - this.recordBody = recordBody; - } - - /** - * 应答报文体110 + 交易记录体【可变】 - */ - public ResThreeInOneInfoMessage() { - super(110); - } - - /** - * 应答代码 - * H2 - */ - public String getResponseCode() { - return arraycopy(0, 2); - } - - /** - * 应答代码 - * H2 - */ - public void setResponseCode(String responseCode) { - setArray(responseCode, 0, 2); - } - - /** - * 代码含义描述 - * H40 - */ - public String getDesc() { - return arraycopy(2, 40); - } - - /** - * 代码含义描述 - * H40 - */ - public void setDesc(String desc) { - setArray(desc, 2, 40); - } - - /** - * 中心受理日期 - * N8 - */ - public String getCentDate() { - return arraycopy(42, 8); - } - - /** - * 中心受理日期 - * N8 - */ - public void setCentDate(String centDate) { - setArray(centDate, 42, 8); - } - - /** - * 中心受理流水 - * N12 - */ - public String getCentralSeq() { - return arraycopy(50, 12); - } - - /** - * 中心受理流水 - * N12 - */ - public void setCentralSeq(String centralSeq) { - setArray(centralSeq, 50, 12); - } - - /** - * 总记录数 - * N12 - */ - public String getTotNum() { - return arraycopy(62, 12); - } - - /** - * 总记录数 - * N12 - */ - public void setTotNum(String totNum) { - setArray(totNum, 62, 12); - } - - /** - * 剩余记录数 - * N12 - */ - public String getSnum() { - return arraycopy(74, 12); - } - - /** - * 剩余记录数 - * N12 - */ - public void setSnum(String snum) { - setArray(snum, 74, 12); - } - - /** - * 本页记录数 - * N12 - */ - public String getCnum() { - return arraycopy(86, 12); - } - - /** - * 本页记录数 - * N12 - */ - public void setCnum(String cnum) { - setArray(cnum, 86, 12); - } - - /** - * 起始记录号 - * N12 - */ - public String getQnum() { - return arraycopy(98, 12); - } - - /** - * 起始记录号 - * N12 - */ - public void setQnum(String qnum) { - setArray(qnum, 98, 12); - } - -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/model/ResultBean.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/model/ResultBean.java deleted file mode 100644 index 9a468bb4..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/model/ResultBean.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.model; - -/** - * 返回错误信息 - * - * @author jiuyv - */ -public class ResultBean { - - /** - * 是否成功 - */ - private boolean success; - - /** - * 返回码 - */ - private String respCode; - - /** - * 返回信息 - */ - private String respMessage; - - /** - * 数据 - */ - private T data; - - /** - * 构造方法 - * - * @param respCode - * @param respMessage - */ - public ResultBean() { - - } - - /** - * 构造方法 - * - * @param respCode - * @param respMessage - */ - public ResultBean(boolean success, String respCode, String respMessage) { - this.success = success; - this.respCode = respCode; - this.respMessage = respMessage; - } - - /** - * 构造方法 - * - * @param respCode - * @param respMessage - */ - public ResultBean(boolean success, String respCode, String respMessage, T data) { - this.success = success; - this.respCode = respCode; - this.respMessage = respMessage; - this.data = data; - } - - /** - * @return the respCode - */ - public String getRespCode() { - return respCode; - } - - /** - * @param respCode the respCode to set - */ - public void setRespCode(String respCode) { - this.respCode = respCode; - } - - /** - * @return the respMessage - */ - public String getRespMessage() { - return respMessage; - } - - /** - * @param respMessage the respMessage to set - */ - public void setRespMessage(String respMessage) { - this.respMessage = respMessage; - } - - /** - * @return the data - */ - public T getData() { - return data; - } - - /** - * @param data the data to set - */ - public void setData(T data) { - this.data = data; - } - - /** - * @return the success - */ - public boolean isSuccess() { - return success; - } - - /** - * @param success the success to set - */ - public void setSuccess(boolean success) { - this.success = success; - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/model/gate/vo/MsgBodyVo.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/model/gate/vo/MsgBodyVo.java deleted file mode 100644 index 20295f54..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/model/gate/vo/MsgBodyVo.java +++ /dev/null @@ -1,139 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.model.gate.vo; - -import com.jiuyv.bomap.common.util.MessageDigestSHA256; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.AppCode; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.ByteTools; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.DateUtil; - -import java.io.IOException; -import java.io.Serializable; - -/** - * socket socket package data - */ -public class MsgBodyVo implements Serializable { - private static final long serialVersionUID = 6515211060837179221L; - // 报文头 - // 版本号 version - private String version; - // 本包包号 - private String packageNum; - // 加密标志 - private String encryptFlag; - // 压缩标志 - private String compressFlag; - // 交易代码 - private String tranCode; - // 报文体摘要 - private String digest; - // 报文体长度 - private String jsonDataLen; - // 报文体数据 - private String jsonData; - - public MsgBodyVo() { - } - - public MsgBodyVo(String jsonData) { - this.jsonData = jsonData; - } - - /** - * combin field data - * - * @param msgHead - * @param msgBody - */ - public static MsgBodyVo combin(MsgBodyVo msgHead, MsgBodyVo msgBody) { - msgHead.jsonDataLen = msgBody.jsonDataLen; - msgHead.jsonData = msgBody.jsonData; - - return msgHead; - } - - /** - * @param tranCode - * @param msgData - * @return - * @throws IOException - */ - public static MsgBodyVo build(String tranCode, String msgData) throws IOException { - MsgBodyVo msgBodyVo = new MsgBodyVo(); - msgBodyVo.version = AppCode.MSG_VERSION; - msgBodyVo.packageNum = DateUtil.getDateTime().substring(9, 14); - msgBodyVo.encryptFlag = AppCode.DEFALUT_FLAG_0; - msgBodyVo.compressFlag = AppCode.DEFALUT_FLAG_0; - msgBodyVo.tranCode = tranCode; - - byte[] tmp = msgData.getBytes(AppCode.UTF8); - msgBodyVo.jsonDataLen = String.format("%05d", tmp.length); - msgBodyVo.digest = MessageDigestSHA256.digest(ByteTools.combinByteArray(msgBodyVo.jsonDataLen.getBytes(AppCode.UTF8), tmp)); - msgBodyVo.jsonData = msgData; - - return msgBodyVo; - } - - public String getVersion() { - return version; - } - - public void setVersion(String version) { - this.version = version; - } - - public String getPackageNum() { - return packageNum; - } - - public void setPackageNum(String packageNum) { - this.packageNum = packageNum; - } - - public String getEncryptFlag() { - return encryptFlag; - } - - public void setEncryptFlag(String encryptFlag) { - this.encryptFlag = encryptFlag; - } - - public String getCompressFlag() { - return compressFlag; - } - - public void setCompressFlag(String compressFlag) { - this.compressFlag = compressFlag; - } - - public String getTranCode() { - return tranCode; - } - - public void setTranCode(String tranCode) { - this.tranCode = tranCode; - } - - public String getDigest() { - return digest; - } - - public void setDigest(String digest) { - this.digest = digest; - } - - public String getJsonDataLen() { - return jsonDataLen; - } - - public void setJsonDataLen(String jsonDataLen) { - this.jsonDataLen = jsonDataLen; - } - - public String getJsonData() { - return jsonData; - } - - public void setJsonData(String jsonData) { - this.jsonData = jsonData; - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/route/IBusinessService.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/route/IBusinessService.java deleted file mode 100644 index 47ca607a..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/route/IBusinessService.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.route; - -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.RespEnum; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.TradeEnum; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.DTOFactory; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.JsonUtil; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.NoProperisObjectMapper; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.util.Assert; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -/** - * 业务处理器 - * - * @since 2019.03.26 - */ -public interface IBusinessService extends IGetRespCode { - - Logger LOGGER = LoggerFactory.getLogger(IBusinessService.class); - NoProperisObjectMapper jsonMapper = NoProperisObjectMapper.defaultInstance(); - Class[] respCodeClassType = new Class[]{String.class}; - - /** - * 业务处理函数 - * - * @param tradeEnum 交易枚举类 - * @param reqStr 接收到原始请求json串 - * @return 返回应答json串 - */ - default RpcResp processbusiness(TradeEnum tradeEnum, String reqStr) { - String tradeCode = tradeEnum.code; - String tradeMsg = tradeEnum.msg; - Class reqClassType = (Class) tradeEnum.rpcReq; - Class respClassType = (Class) tradeEnum.rpcResp; - - Assert.isTrue(!StringUtils.isAllBlank(tradeCode, tradeMsg), "trade code/msg exist empty"); - - Assert.notNull(reqClassType, "tradeEnum not config reqClassType,tradeCode" + tradeCode); - Assert.notNull(respClassType, "tradeEnum not config respClassType,tradeCode " + tradeCode); - - RpcReq rpcReq = JsonUtil.json2Bean(reqStr, reqClassType); - LOGGER.info("trade code[{}] msg [{}]", tradeCode, tradeMsg); - LOGGER.info("trade code[{}] req [{}]", tradeCode, JsonUtil.convertToJson(rpcReq)); - RpcResp rpcResp; - try { - rpcResp = route(rpcReq); - } catch (Exception e) { - LOGGER.error("", e); - rpcResp = DTOFactory.newFailInstance(respClassType, RespEnum.FAIL.errorCode, "上游服务超时"); - } - LOGGER.info("trade code[{}] msg [{}]", tradeCode, tradeMsg); - LOGGER.info("trade code[{}] resp[{}]", tradeCode, JsonUtil.convertToJson(rpcResp)); - return rpcResp; - } - - /** - * 路由函数 默认直接抛异常 - * - * @param rpcReq 路由请求参数 - * @return 应答数据 - * @throws NoSuchMethodException 无该方法实现 - */ - default RpcResp route(RpcReq rpcReq) throws NoSuchMethodException { - throw new NoSuchMethodException("no route method implement"); - } - - /** - * @param rpcResp 待提取应答码字段数据对象 - * @return 提取成功 返回应答 ;失败返回字符串: get respCode fail - */ - default String getRespCode(RpcResp rpcResp) { - try { - Method getRespCodeMethod = rpcResp.getClass().getMethod("getRespCode", respCodeClassType); - return getRespCodeMethod.invoke(rpcResp).toString(); - } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { - LOGGER.error("{} 提取应答码失败", toString(), e); - return "get respCode fail"; - } - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/route/IGetRespCode.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/route/IGetRespCode.java deleted file mode 100644 index 42ead4d3..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/route/IGetRespCode.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.route; - -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.RespEnum; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * @author chen_yang - * @create 2018-10-29-12:39 - */ -public interface IGetRespCode { - - Logger LOGGER = LoggerFactory.getLogger(IGetRespCode.class); - - /*从应答json串中获取错误应答码失败*/ - String GET_RESPONSE_CODE_FAIL = "GET_RESPONSE_CODE_FAIL"; - - /** - * @param respStr 应答json串 - * @return 应答json串 错误应答码 - */ - String getRespCode(String respStr); - - /** - * @param respStr 应答json串 - * @return 应答json串中错误应答码 true 应答成功 false失败应答码 - */ - default boolean isRespSuccess(String respStr) { - try { - return RespEnum.SUCCESS.errorCode.equals(getRespCode(respStr)); - } catch (Exception e) { - LOGGER.error("[{}] get real RespCode", this.toString(), e); - return false; - } - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/route/ISocketClientRoute.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/route/ISocketClientRoute.java deleted file mode 100644 index 681ad241..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/route/ISocketClientRoute.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.route; - -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.RespEnum; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.TradeEnum; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.DTOFactory; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.JsonUtil; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.NoProperisObjectMapper; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.ValidateUtils; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.util.Assert; - -import java.util.Objects; -import java.util.Optional; - -/** - * @author chen_yang - * @create 2018-11-03-11:07 - */ -public interface ISocketClientRoute { - - Logger LOGGER = LoggerFactory.getLogger(ISocketClientRoute.class); - NoProperisObjectMapper jsonMapper = NoProperisObjectMapper.defaultInstance(); - - /** - * 入参空值校验 - * - * @param objects 参数列表 - */ - default void checkParameters(Object... objects) { - for (Object object : objects) { - Objects.requireNonNull(object, object.toString() + " is null"); - } - } - - /** - * 默认处理函数 - * - * @param tradeEnum 交易枚举类 - * @param r 原始请求参数 - * @param sClass 返回上游应答参数类型 - */ - default S defaultProcess(TradeEnum tradeEnum, R r, Class sClass) { - checkParameters(tradeEnum, r, sClass); - - String tradeCode = tradeEnum.code; - String tradeMsg = tradeEnum.msg; - Assert.isTrue(!StringUtils.isAllBlank(tradeCode, tradeMsg), "trade code/msg exist empty"); - - Optional checkResult = ValidateUtils.validate(r); - - // exist fail - if (checkResult.isPresent()) { - String errorMsg = checkResult.get(); - return DTOFactory.newFailInstance(sClass, RespEnum.FIELD_ERROR.errorCode, errorMsg); - } - - LOGGER.info("trade code[{}] msg [{}]", tradeCode, tradeMsg); - LOGGER.info("trade code[{}] req[{}]", tradeCode, JsonUtil.convertToJson(r)); - S s = sendMsg(tradeCode, r, sClass); - LOGGER.info("trade code[{}] msg [{}]", tradeCode, tradeMsg); - LOGGER.info("trade code[{}] resp[{}]", tradeCode, JsonUtil.convertToJson(s)); - return s; - } - - V sendMsg(String transCode, T t, Class vClass); -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/route/SocketClientRouteProxy.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/route/SocketClientRouteProxy.java deleted file mode 100644 index 5dfa189c..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/route/SocketClientRouteProxy.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.route; - -import com.jiuyv.sptcc.carbon.userGate.userGate.common.database.exception.GateException; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.client.SocketClientRoute; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.netty.entity.RespCode; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.JsonUtil; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.Map; - -/** - * @author chen_yang - * @create 2018-11-11-11:05 - */ -// @Component("socketClientProxy") -public class SocketClientRouteProxy implements ISocketClientRoute { - - private static final Logger LOGGER = LoggerFactory.getLogger(SocketClientRouteProxy.class); - - @Autowired - private SocketClientRoute targetRoute; - - /** - * @param transCode 交易代码 - * @param t 请求参数 - * @param vClass 应答参数类型 - * @return - */ - @Override - // @MethodTimeConsumeAndResponseMonitor( isOpenFlowControl = FlowGradeTypeEnum.NO, resultParser = SocketClientMonitorParser.class) - public V sendMsg(String transCode, T t, Class vClass) { - - LOGGER.info("transCode {} reqDTO {}", transCode, JsonUtil.convertToJson(t)); - LOGGER.info("transCode {} respType {}", transCode, vClass.getName()); - V respV = null; - try { - respV = targetRoute.sendMsg(transCode, t, vClass); - } catch (Exception e) { - String respCode = RespCode.FAIL, - respMsg = "失败"; - if (e instanceof GateException) { - String tmpCode = ((GateException) e).getErrorCode(); - String tmpMsg = e.getMessage(); - respCode = StringUtils.isBlank(tmpCode) ? respCode : tmpCode; - respMsg = StringUtils.isBlank(tmpMsg) ? respMsg : tmpMsg; - } - Map objectMap = JsonUtil.json2Bean(JsonUtil.convertToJson(t), Map.class); - objectMap.put("respCode", respCode); - objectMap.put("respMsg", respMsg); - return JsonUtil.json2Bean(JsonUtil.convertToJson(objectMap), vClass); - } - LOGGER.info("transCode {} respDTO {}", transCode, JsonUtil.convertToJson(respV)); - - return respV; - } - - - public SocketClientRoute getTargetRoute() { - return targetRoute; - } - - public SocketClientRouteProxy setTargetRoute( - SocketClientRoute targetRoute) { - this.targetRoute = targetRoute; - return this; - } -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/service/INettyClientService.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/service/INettyClientService.java deleted file mode 100644 index b30fff8c..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/service/INettyClientService.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.service; - -import com.jiuyv.sptcc.carbon.gate.dto.ReqThreeInOneRealNameInfoDTO; -import com.jiuyv.sptcc.carbon.userGate.userGate.message.ReqHeaderMessage; - -/** - * Netty 请求服务, - * 暂时使用短连接 - * - * @author ren_chao - */ -public interface INettyClientService { - - /** - * 发送请求 - */ - ReqHeaderMessage sendRequest(ReqHeaderMessage reqHeader); -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/service/impl/NettyClientServiceImpl.java b/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/service/impl/NettyClientServiceImpl.java deleted file mode 100644 index 93f4cb41..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/java/com/jiuyv/sptcc/carbon/userGate/userGate/service/impl/NettyClientServiceImpl.java +++ /dev/null @@ -1,121 +0,0 @@ -package com.jiuyv.sptcc.carbon.userGate.userGate.service.impl; - -import com.jiuyv.sptcc.carbon.gate.dto.QryUserUID; -import com.jiuyv.sptcc.carbon.gate.dto.ReqThreeInOneRealNameInfoDTO; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.ByteUtil; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.CrcUtil; -import com.jiuyv.sptcc.carbon.userGate.userGate.common.util.Util; -import com.jiuyv.sptcc.carbon.userGate.userGate.dispatcher.entity.QueryUserUID; -import com.jiuyv.sptcc.carbon.userGate.userGate.handler.ClientMessageHandler; -import com.jiuyv.sptcc.carbon.userGate.userGate.handler.MessageDecoder; -import com.jiuyv.sptcc.carbon.userGate.userGate.message.ReqHeaderMessage; -import com.jiuyv.sptcc.carbon.userGate.userGate.message.ReqThreeInOneInfoMessage; -import com.jiuyv.sptcc.carbon.userGate.userGate.service.INettyClientService; -import io.netty.bootstrap.Bootstrap; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import io.netty.channel.Channel; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInboundHandlerAdapter; -import io.netty.channel.ChannelInitializer; -import io.netty.channel.ChannelOutboundHandlerAdapter; -import io.netty.channel.ChannelPromise; -import io.netty.channel.nio.NioEventLoopGroup; -import io.netty.channel.socket.nio.NioSocketChannel; -import io.netty.handler.codec.LengthFieldBasedFrameDecoder; -import io.netty.util.concurrent.DefaultPromise; -import org.springframework.stereotype.Service; - -import java.io.UnsupportedEncodingException; -import java.nio.charset.Charset; -import java.util.Arrays; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; - -/** - * Netty客户端 请求服务, - * 暂时使用短连接 有性能要求再改连接池 - * - * @author ren_chao - */ -@Service -public class NettyClientServiceImpl implements INettyClientService { - - private final Bootstrap bootstrap; - private final String host = "127.0.0.1"; - private final int port = 22588; - // private final int port = 8080; - - public NettyClientServiceImpl() { - NioEventLoopGroup group = new NioEventLoopGroup(); - this.bootstrap = new Bootstrap() - .group(group) - .channel(NioSocketChannel.class) - .handler(new ChannelInitializer() { - @Override - protected void initChannel(NioSocketChannel ch) { - ch.pipeline().addLast(new MessageDecoder()); - - } - }); - } - - - - /** - * 发送请求 - */ - @Override - public ReqHeaderMessage sendRequest(ReqHeaderMessage reqHeader) { - try { - Channel channel = getChannel(); - DefaultPromise connectionPromise = new DefaultPromise<>(channel.eventLoop()); - channel.pipeline().addLast(new ClientMessageHandler(connectionPromise)); - - byte[] content = reqHeader.getRecordContent(); - int len = content.length + reqHeader.size(); - String length = String.format("%04d", len); - reqHeader.setRecordLen(length); - - try { - byte[] macCode = ByteUtil.bytestoasciibytes(Util.toBytes((int) CrcUtil.mkCrc32(content))); - reqHeader.setRacCode(new String(macCode)); - } catch (Exception e) { - e.printStackTrace(); - } - - ByteBuf buffer = ByteBufAllocator.DEFAULT.buffer(); - buffer.writeBytes(length.getBytes()); - buffer.writeBytes(reqHeader.getMessage()); - buffer.writeBytes(content); - - byte[] bytes = new byte[len + 4]; - buffer.readBytes(bytes); - System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++"); - System.out.println(Arrays.toString(bytes)); - System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++"); - System.out.println(new String(bytes)); - System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++"); - - buffer.resetReaderIndex(); - channel.writeAndFlush(buffer); - - // 等待返回结果,超时时间20s - ReqHeaderMessage message = connectionPromise.get(20, TimeUnit.SECONDS); - channel.close(); - return message; - - //TODO 异常处理 - } catch (InterruptedException | ExecutionException | TimeoutException e) { - e.printStackTrace(); - } - return null; - } - - - private Channel getChannel() throws InterruptedException { - return this.bootstrap.connect(host, port).sync().channel(); - } - -} diff --git a/carbon-usergate/carbon-usergate-service/src/main/resources/application-default.yml b/carbon-usergate/carbon-usergate-service/src/main/resources/application-default.yml index 5d8be80f..1828032b 100644 --- a/carbon-usergate/carbon-usergate-service/src/main/resources/application-default.yml +++ b/carbon-usergate/carbon-usergate-service/src/main/resources/application-default.yml @@ -1,6 +1,4 @@ spring: - tomcat: - max-threads: 200 cloud: loadbalancer: retry: @@ -9,10 +7,7 @@ spring: user: password: 123456 name: sptcc -# zipkin: -# baseUrl: http://168.10.35.165:9411 #loki地址 -# sender: -# type: web #支持多种,最常用的是web,具体见官网 + eureka: instance: appname: ${spring.application.name} @@ -28,48 +23,12 @@ eureka: fetch-registry: true serviceUrl: defaultZone: http://192.168.10.165:18888/eureka/ -#ribbon: -# eureka: -# enabled: true -# eager-load: -# enabled: false -# clients: acc2Gate,rule -# OkToRetryOnAllOperation: false -# ReadTimeout: 20000 -# ConnectTimeout: 10000 -# MaxAutoRetriesNextServer: 0 -# MaxAutoRetries: 0 -#netty: -# port: 3307 -# user: -# host: 163.10.10.136 -# port: 22590 -# maxBusinessThread: 200 -# client: -# max_channel: 20 -# acquire_timeout: 3 -# max_pend_acquire: 100 -# wait_for_resp_timeout: 30 -# sptccMarketing: -# enabled: true -# host: 192.168.10.166 -# port: 8103 + netty: - port: 3307 - user: - host: 127.0.0.1 - port: 22590 - maxBusinessThread: 200 - client: - max_channel: 20 - acquire_timeout: 3 - max_pend_acquire: 100 - wait_for_resp_timeout: 30 - sptccMarketing: - enabled: true - host: 127.0.0.1 - port: 22588 + host: 127.0.0.1 + port: 22588 + max-connections: 5 + baseconfig: - sm4key: dsfgfgh243sd5676 -# sm4key: ffbfc534ert478rt \ No newline at end of file + sm4key: dsfgfgh243sd5676 \ No newline at end of file diff --git a/carbon-usergate/carbon-usergate-service/src/main/resources/application.yml b/carbon-usergate/carbon-usergate-service/src/main/resources/application.yml index 4b4d665f..f0f189b5 100644 --- a/carbon-usergate/carbon-usergate-service/src/main/resources/application.yml +++ b/carbon-usergate/carbon-usergate-service/src/main/resources/application.yml @@ -1,16 +1,6 @@ server: - connection-timeout: 60000 compression: enabled: true min-response-size: 1024 -feign: - httpclient: - enabled: false - #替换默认的http连接 - okhttp: - enabled: true - compression: - request: - enabled: true - response: - enabled: true \ No newline at end of file + tomcat: + connection-timeout: 60000 diff --git a/carbon-usergate/carbon-usergate-service/src/main/resources/bomap/bomap.xml b/carbon-usergate/carbon-usergate-service/src/main/resources/bomap/bomap.xml deleted file mode 100644 index a0f5cacf..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/resources/bomap/bomap.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/carbon-usergate/carbon-usergate-service/src/main/resources/bomap/sptcc.xml b/carbon-usergate/carbon-usergate-service/src/main/resources/bomap/sptcc.xml deleted file mode 100644 index 5ea3d518..00000000 --- a/carbon-usergate/carbon-usergate-service/src/main/resources/bomap/sptcc.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/carbon-usergate/carbon-usergate-service/src/main/resources/bootstrap.yml b/carbon-usergate/carbon-usergate-service/src/main/resources/bootstrap.yml index d0391397..31fb6d07 100644 --- a/carbon-usergate/carbon-usergate-service/src/main/resources/bootstrap.yml +++ b/carbon-usergate/carbon-usergate-service/src/main/resources/bootstrap.yml @@ -5,26 +5,14 @@ spring: use-legacy-processing: true application: name: carbon-userGate - # cloud: - # config: - # uri: http://130.252.200.93:18898 - # username: config - # password: config123 - # profile: dev - # label: dev - # enabled: false + cloud: config: uri: http://168.10.35.161:18898 profile: test label: test enabled: false - #关闭链路跟踪 - sleuth: - enabled: true -#读取日志文件路径 -logging: - config: classpath:logback-boot.xml + eureka: client: enabled: true @@ -34,8 +22,6 @@ ribbon: enabled: true #启用metrics,prometheus监控 management: - security: - enabled: false metrics: export: prometheus: diff --git a/carbon-usergate/carbon-usergate-service/src/main/resources/logback-boot.xml b/carbon-usergate/carbon-usergate-service/src/main/resources/logback-spring.xml similarity index 100% rename from carbon-usergate/carbon-usergate-service/src/main/resources/logback-boot.xml rename to carbon-usergate/carbon-usergate-service/src/main/resources/logback-spring.xml diff --git a/carbon-usergate/pom.xml b/carbon-usergate/pom.xml index d19a6f67..50c7afc3 100644 --- a/carbon-usergate/pom.xml +++ b/carbon-usergate/pom.xml @@ -3,7 +3,7 @@ carbon-usergate com.jiuyv.sptcc - 0.3.1-SNAPSHOT + 0.3.2-SNAPSHOT pom carbon-usergate