|
|
@@ -82,7 +82,6 @@ public class DistributorSelfRechargeServiceImpl implements DistributorSelfRechar
|
|
|
private ConfigApi configApi;
|
|
|
|
|
|
|
|
|
-
|
|
|
@Override
|
|
|
public DistributorSelfRechargeSimpleRespVO createDistributorSelfRecharge(DistributorSelfRechargeSaveReqVO createReqVO) {
|
|
|
LoginUser loginUser = otaAuthUtils.getAgencyLoginUser();
|
|
|
@@ -95,7 +94,7 @@ public class DistributorSelfRechargeServiceImpl implements DistributorSelfRechar
|
|
|
// 处理对公转账逻辑
|
|
|
if (createReqVO.getPayType() == 9) {
|
|
|
// 对公转账逻辑:仅保存数据,不调用支付接口
|
|
|
- return handlePublicTransfer(createReqVO, loginType,respDTO);
|
|
|
+ return handlePublicTransfer(createReqVO, loginType, respDTO);
|
|
|
} else {
|
|
|
// 插入
|
|
|
DistributorSelfRechargeDO distributorSelfRecharge = BeanUtils.toBean(createReqVO, DistributorSelfRechargeDO.class);
|
|
|
@@ -135,7 +134,7 @@ public class DistributorSelfRechargeServiceImpl implements DistributorSelfRechar
|
|
|
|
|
|
private DistributorSelfRechargeSimpleRespVO handlePublicTransfer(
|
|
|
DistributorSelfRechargeSaveReqVO createReqVO,
|
|
|
- LoginTypeRespVO loginType,AdminUserRespDTO respDTO) {
|
|
|
+ LoginTypeRespVO loginType, AdminUserRespDTO respDTO) {
|
|
|
Long distributorId = loginType.getDistributorId();
|
|
|
// 1. 校验分销商信息
|
|
|
DistributorDO distributor = distributorService.getDistributor(loginType.getDistributorId());
|
|
|
@@ -146,22 +145,6 @@ public class DistributorSelfRechargeServiceImpl implements DistributorSelfRechar
|
|
|
// 2. 生成对公账号
|
|
|
String bankAccount = "717902731210902" + distributor.getCmbShortNo();
|
|
|
|
|
|
- // 3. 构建充值记录对象
|
|
|
- /*DistributorSelfRechargeDO rechargeDO = new DistributorSelfRechargeDO();
|
|
|
- org.springframework.beans.BeanUtils.copyProperties(createReqVO, rechargeDO);
|
|
|
- rechargeDO.setId(IdWorker.getId());
|
|
|
- rechargeDO.setDistributorId(loginType.getDistributorId());
|
|
|
- rechargeDO.setRechargeState(0); // 初始状态:待处理
|
|
|
- rechargeDO.setAccountId(respDTO.getId());
|
|
|
- rechargeDO.setAccountName(respDTO.getNickname());
|
|
|
- rechargeDO.setCreator(respDTO.getId().toString());
|
|
|
- rechargeDO.setTenantId(loginType.getTenantId());*/
|
|
|
-
|
|
|
- // 4. 保存到数据库
|
|
|
- /*TenantUtils.execute(loginType.getTenantId(), () -> {
|
|
|
- distributorSelfRechargeMapper.insert(rechargeDO);
|
|
|
- });*/
|
|
|
-
|
|
|
// 5. 构造响应
|
|
|
DistributorSelfRechargeSimpleRespVO respVO = new DistributorSelfRechargeSimpleRespVO();
|
|
|
respVO.setDistributorId(distributorId);
|
|
|
@@ -263,25 +246,25 @@ public class DistributorSelfRechargeServiceImpl implements DistributorSelfRechar
|
|
|
@Override
|
|
|
public void abcRemittance(DistributorDO distributor) {
|
|
|
String cardNo = distributor.getCmbShortNo();
|
|
|
- log.info("abc对公转账充值");
|
|
|
+ log.error("abc对公转账充值查询{}", cardNo);
|
|
|
String host = configApi.getPlatformConfigValueByKey("dgConfig_ip");
|
|
|
String portStr = configApi.getPlatformConfigValueByKey("dgConfig_port");
|
|
|
String yqtCard = configApi.getPlatformConfigValueByKey("dgConfig_card");
|
|
|
String day = configApi.getPlatformConfigValueByKey("dgConfig_day");
|
|
|
int ofday = 1;
|
|
|
- if(StringUtils.isNotBlank(day)){
|
|
|
+ if (StringUtils.isNotBlank(day)) {
|
|
|
try {
|
|
|
ofday = Integer.parseInt(day);
|
|
|
- }catch (Exception ignored){
|
|
|
+ } catch (Exception ignored) {
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
int port = 15999;
|
|
|
- if(StringUtils.isNotBlank(portStr)){
|
|
|
+ if (StringUtils.isNotBlank(portStr)) {
|
|
|
try {
|
|
|
port = Integer.parseInt(portStr);
|
|
|
- }catch (Exception ignored){
|
|
|
+ } catch (Exception ignored) {
|
|
|
|
|
|
}
|
|
|
}
|
|
|
@@ -293,13 +276,13 @@ public class DistributorSelfRechargeServiceImpl implements DistributorSelfRechar
|
|
|
// 构造请求方流水号 (保证唯一性)
|
|
|
Random random = new Random();
|
|
|
int randomNumber2 = random.nextInt(1000) + 1000;
|
|
|
- String reqSeqNo = new SimpleDateFormat("yyyyMMddHHmmss").format(now) + ""+randomNumber2+"";
|
|
|
+ String reqSeqNo = new SimpleDateFormat("yyyyMMddHHmmss").format(now) + randomNumber2;
|
|
|
|
|
|
// 1. 获取当前时间,用于组装公共包头流水与日期
|
|
|
- Long s1 = System.currentTimeMillis();
|
|
|
- Long s0 = s1-172800000;
|
|
|
+ long s1 = System.currentTimeMillis();
|
|
|
+ long s0 = s1 - 172800000;
|
|
|
|
|
|
- Date sDate = DateUtil.offsetDay( now,-ofday);
|
|
|
+ Date sDate = DateUtil.offsetDay(now, -ofday);
|
|
|
String endDate = new SimpleDateFormat("yyyyMMdd").format(now);
|
|
|
String startDate = new SimpleDateFormat("yyyyMMdd").format(sDate);
|
|
|
|
|
|
@@ -316,14 +299,14 @@ public class DistributorSelfRechargeServiceImpl implements DistributorSelfRechar
|
|
|
" <ReqTime>" + reqTime + "</ReqTime>\n" +
|
|
|
" <Sign></Sign>\n" +
|
|
|
" <Corp>\n" +
|
|
|
- " <StartDate>"+startDate+"</StartDate>\n" +
|
|
|
- " <EndDate>"+endDate+"</EndDate>\n" +
|
|
|
+ " <StartDate>" + startDate + "</StartDate>\n" +
|
|
|
+ " <EndDate>" + endDate + "</EndDate>\n" +
|
|
|
" </Corp>\n" +
|
|
|
" <Cmp>\n" +
|
|
|
" <DbProv>17</DbProv>\n" +
|
|
|
- " <StartTime>"+s0+"</StartTime>\n" +
|
|
|
- " <DbAccNo>"+yqtCard+"</DbAccNo>\n" +
|
|
|
- " <DbLogAccNo>"+cardNo+"</DbLogAccNo>\n" +
|
|
|
+ " <StartTime>" + s0 + "</StartTime>\n" +
|
|
|
+ " <DbAccNo>" + yqtCard + "</DbAccNo>\n" +
|
|
|
+ " <DbLogAccNo>" + cardNo + "</DbLogAccNo>\n" +
|
|
|
" <DbCur>01</DbCur>\n" +
|
|
|
" <LogAccBkOInd>0</LogAccBkOInd>\n" +
|
|
|
" </Cmp>\n" +
|
|
|
@@ -355,7 +338,7 @@ public class DistributorSelfRechargeServiceImpl implements DistributorSelfRechar
|
|
|
out.write(fullPacket);
|
|
|
out.flush();
|
|
|
System.out.println("请求报文发送成功,等待响应...\n");
|
|
|
- System.out.println("请求报文发送成功,等待响应...\n"+new String(fullPacket, "GBK"));
|
|
|
+ System.out.println("请求报文发送成功,等待响应...\n" + new String(fullPacket, "GBK"));
|
|
|
|
|
|
// 6. 接收并解析前置机返回的报文
|
|
|
InputStream in = socket.getInputStream();
|
|
|
@@ -376,26 +359,30 @@ public class DistributorSelfRechargeServiceImpl implements DistributorSelfRechar
|
|
|
if (recvData.length() >= 7) {
|
|
|
String respHeader = recvData.substring(0, 7);
|
|
|
String respXml = recvData.substring(7);
|
|
|
- System.out.println("收到前置机响应头: '" + respHeader + "'");
|
|
|
- System.out.println("收到前置机响应报文:\n" + respXml);
|
|
|
+ log.error("收到前置机响应头: '{}'", respHeader);
|
|
|
+ log.error("收到前置机响应报文:\n{}", respXml);
|
|
|
JSONObject jsonObject = XML.toJSONObject(respXml);
|
|
|
- System.out.println(jsonObject);
|
|
|
|
|
|
JSONObject ap = jsonObject.getJSONObject("ap");
|
|
|
String respCode = ap.getStr("RespCode");
|
|
|
- if(!"0000".equals(respCode)){
|
|
|
- System.err.println("交易发送异常,异常信息:"+ap.getStr("RespInfo"));
|
|
|
- }else {
|
|
|
- System.out.println("交易发送成功");
|
|
|
-
|
|
|
+ if (!"0000".equals(respCode)) {
|
|
|
+ log.error("交易发送异常,异常信息:{}", ap.getStr("RespInfo"));
|
|
|
+ } else {
|
|
|
+ JSONObject cmp = ap.getJSONObject("Cmp");
|
|
|
+ JSONObject cme = ap.getJSONObject("Cme");
|
|
|
+ String batchFileName = cmp.getStr("BatchFileName");
|
|
|
+ String recordNum = cme.getStr("RecordNum");
|
|
|
+ if (StringUtils.equals("0", recordNum)) {
|
|
|
+ log.error("无交易数据{}", cardNo);
|
|
|
+ return;
|
|
|
+ }
|
|
|
// 使用 try-with-resources 自动关闭流 //替换成文件目录
|
|
|
- try (FileInputStream fis = new FileInputStream("C:\\Users\\90653\\Desktop\\aaa.txt");
|
|
|
+ try (FileInputStream fis = new FileInputStream("/data/bankshare/" + batchFileName);
|
|
|
InputStreamReader isr = new InputStreamReader(fis, "GBK");
|
|
|
BufferedReader br = new BufferedReader(isr)) {
|
|
|
-
|
|
|
String line;
|
|
|
while ((line = br.readLine()) != null) {
|
|
|
- System.out.println(line);
|
|
|
+ log.error(line);
|
|
|
//省市代码|账号|账薄号|货币码|交易日期|日志号|交易时间|户名|账薄名|交易类型|交
|
|
|
//易行号|传票号|发生额标识|现转标志|交易金额|账户余额|上笔余额|凭证种类|交易码|
|
|
|
//凭证号|对方账号省市代码|对方账号|对方账号货币码|对方账号户名|对方账号开户行|
|
|
|
@@ -403,23 +390,17 @@ public class DistributorSelfRechargeServiceImpl implements DistributorSelfRechar
|
|
|
//17|342101046484369|1203444786|01|20260423|1527670363|20260423112009578611|宜畅式东士煌本孔凰于慊官送|宜畅式东士煌本孔凰于慊官送重庆万友国际旅行社
|
|
|
// |0||3|0|1|30.00|30.00|0.00|2|2581|00000000|17|342101046420983||宜常收镐赛坭足克凰幼慊关嗣|中国农业银行股份有限公司枝江市支行||||0199|测试3||||
|
|
|
String[] split = line.split("\\|");
|
|
|
- String refNbr = split[5];
|
|
|
+ String refNbr = split[5];
|
|
|
String logTime = split[6];
|
|
|
String recardNo = split[2];
|
|
|
String trsAmt = split[14];
|
|
|
- System.err.println("日志号:" + refNbr);
|
|
|
- System.err.println("交易时间:" + logTime);
|
|
|
- System.err.println("卡号:" + recardNo);
|
|
|
- System.err.println("金额:" + trsAmt);
|
|
|
-
|
|
|
-
|
|
|
+ log.error("日志号:{}交易时间:{}卡号:{}金额:{}", refNbr, logTime, recardNo, trsAmt);
|
|
|
LambdaQueryWrapper<DistributorSelfRechargeDO> existCheckWrapper = new LambdaQueryWrapper<>();
|
|
|
existCheckWrapper.eq(DistributorSelfRechargeDO::getRechargeNo, refNbr);
|
|
|
if (distributorSelfRechargeMapper.selectCount(existCheckWrapper) > 0) {
|
|
|
log.warn("refNbr [{}] 已存在,跳过重复插入", refNbr);
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
try {
|
|
|
DistributorSelfRechargeDO newRecharge = new DistributorSelfRechargeDO();
|
|
|
newRecharge.setId(IdWorker.getId());
|
|
|
@@ -438,7 +419,7 @@ public class DistributorSelfRechargeServiceImpl implements DistributorSelfRechar
|
|
|
TenantUtils.execute(distributor.getTenantId(), () -> {
|
|
|
distributorSelfRechargeMapper.insert(newRecharge);
|
|
|
});
|
|
|
- log.info("成功插入充值记录 | refNbr:{}", refNbr);
|
|
|
+ log.error("成功插入充值记录 | refNbr:{}", refNbr);
|
|
|
DistributorSelfRechargeReqDTO reqDTO = new DistributorSelfRechargeReqDTO();
|
|
|
reqDTO.setOrderId(newRecharge.getId());
|
|
|
reqDTO.setPayOrderId(refNbr);
|
|
|
@@ -461,13 +442,13 @@ public class DistributorSelfRechargeServiceImpl implements DistributorSelfRechar
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
- System.out.println("响应报文异常或为空");
|
|
|
+ log.error("响应报文异常或为空");
|
|
|
}
|
|
|
|
|
|
} catch (SocketTimeoutException e) {
|
|
|
- System.err.println("交易发送超时,请检查ICT前置机通讯状态。");
|
|
|
+ log.error("交易发送超时,请检查ICT前置机通讯状态。{}", String.valueOf(e));
|
|
|
} catch (Exception e) {
|
|
|
- System.err.println("交易发送异常: " + e.getMessage());
|
|
|
+ log.error("交易发送异常: {}", String.valueOf(e));
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
|