@@ -0,0 +1,17 @@ | |||
package cn.com.taiji.core.entity.log; | |||
import cn.com.taiji.core.entity.AbstractInterfaceLog; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
import lombok.experimental.Accessors; | |||
import javax.persistence.Entity; | |||
import javax.persistence.Table; | |||
@Getter | |||
@Setter | |||
@Accessors(chain = true) | |||
@Entity | |||
@Table(name = "LOG_BILL_INTERFACE") | |||
public class LogBillInterface extends AbstractInterfaceLog { | |||
} |
@@ -0,0 +1,17 @@ | |||
package cn.com.taiji.core.entity.log; | |||
import cn.com.taiji.core.entity.AbstractInterfaceLog; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
import lombok.experimental.Accessors; | |||
import javax.persistence.Entity; | |||
import javax.persistence.Table; | |||
@Getter | |||
@Setter | |||
@Accessors(chain = true) | |||
@Entity | |||
@Table(name = "LOG_OCR_INTERFACE") | |||
public class LogOcrInterface extends AbstractInterfaceLog { | |||
} |
@@ -2,6 +2,7 @@ package cn.com.taiji.core.model.comm.protocol.ods.bill.model; | |||
import cn.com.taiji.common.model.BaseModel; | |||
import com.fasterxml.jackson.annotation.JsonInclude; | |||
import com.fasterxml.jackson.annotation.JsonProperty; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
@@ -10,65 +11,86 @@ import lombok.Setter; | |||
@JsonInclude(JsonInclude.Include.NON_NULL) | |||
public class BillOpenModel extends BaseModel { | |||
/** 设备盘号或纳税人识别号 */ | |||
@JsonProperty("mid") | |||
private String mid; | |||
/** 发票类型代码 */ | |||
@JsonProperty("invoice_type") | |||
private String invoiceType; | |||
/** 发票请求流水 */ | |||
@JsonProperty("invoice_serial") | |||
private String invoiceSerial; | |||
/** 开票类型0-开票,1-红冲 */ | |||
@JsonProperty("open_type") | |||
private String openType; | |||
/** 购货方税号 */ | |||
@JsonProperty("buyer_taxno") | |||
private String buyerTaxno; | |||
/** 购货方名称 */ | |||
@JsonProperty("buyer_name") | |||
private String buyerName; | |||
/** 购货方地址电话 */ | |||
@JsonProperty("buyer_adphone") | |||
private String buyerAdphone; | |||
/** 购货方银行账号 */ | |||
@JsonProperty("buyer_bank") | |||
private String buyerBank; | |||
/** 清单标识0无,1是 */ | |||
@JsonProperty("list_flag") | |||
private String listFlag; | |||
/** 商品信息 */ | |||
@JsonProperty("product_info") | |||
private String productInfo; | |||
/** 备注 */ | |||
@JsonProperty("remark") | |||
private String remark; | |||
/** 联系手机号 */ | |||
@JsonProperty("mobile") | |||
private String mobile; | |||
/** 复核人 */ | |||
@JsonProperty("reviewer") | |||
private String reviewer; | |||
/** 开票人 */ | |||
@JsonProperty("biller") | |||
private String biller; | |||
/** 收款人 */ | |||
@JsonProperty("payee") | |||
private String payee; | |||
/** 原发票代码,冲红必填 */ | |||
@JsonProperty("older_invoice_code") | |||
private String olderInvoiceCode; | |||
/** 原发票号码,冲红必填 */ | |||
@JsonProperty("older_invoice_num") | |||
private String olderInvoiceNum; | |||
/** 版式文件 */ | |||
@JsonProperty("is_format") | |||
private String isFormat; | |||
/** 推送手机号 */ | |||
@JsonProperty("push_mobile") | |||
private String pushMobile; | |||
/** 自然人 */ | |||
@JsonProperty("is_personal") | |||
private String isPersonal; | |||
/** 订单编号列表 */ | |||
@JsonProperty("orderno_list") | |||
private String ordernoList; | |||
} |
@@ -0,0 +1,7 @@ | |||
package cn.com.taiji.core.repo.jpa.log; | |||
import cn.com.taiji.common.repo.jpa.AbstractJpaRepo; | |||
import cn.com.taiji.core.entity.log.LogBillInterface; | |||
public interface LogBillInterfaceRepo extends AbstractJpaRepo<LogBillInterface, String> { | |||
} |
@@ -0,0 +1,7 @@ | |||
package cn.com.taiji.core.repo.jpa.log; | |||
import cn.com.taiji.common.repo.jpa.AbstractJpaRepo; | |||
import cn.com.taiji.core.entity.log.LogOcrInterface; | |||
public interface LogOcrInterfaceRepo extends AbstractJpaRepo<LogOcrInterface, String> { | |||
} |
@@ -1,12 +1,9 @@ | |||
package cn.com.taiji.ods.manager.bill; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.core.model.comm.protocol.ods.bill.*; | |||
import cn.com.taiji.core.model.comm.protocol.ods.bill.BillOpenRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ods.bill.BillCommResponse; | |||
public interface BillOpenManager { | |||
BillCommResponse serviceOpen(BillOpenRequest request) throws ServiceHandleException; | |||
BillCommResponse serviceReversal(BillReversalRequest request) throws ServiceHandleException; | |||
BillOrderPushLogResponse serviceOrderPush(BillOrderPushLogRequest req) throws ServiceHandleException; | |||
BillCommResponse serviceHandle(BillOpenRequest request) throws ServiceHandleException; | |||
} |
@@ -3,97 +3,66 @@ package cn.com.taiji.ods.manager.bill; | |||
import cn.com.taiji.common.manager.AbstractManager; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.common.pub.json.JsonTools; | |||
import cn.com.taiji.core.manager.tools.http.HttpClientUtil; | |||
import cn.com.taiji.core.model.comm.protocol.AbstractSignTypeRequest; | |||
import cn.com.taiji.core.model.comm.protocol.AbstractSignTypeResponse; | |||
import cn.com.taiji.core.model.comm.protocol.ods.bill.*; | |||
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError; | |||
import cn.com.taiji.core.entity.log.LogBillInterface; | |||
import cn.com.taiji.core.manager.comm.LogManager; | |||
import cn.com.taiji.core.model.comm.protocol.ods.bill.BillCommResponse; | |||
import cn.com.taiji.core.model.comm.protocol.ods.bill.BillOpenRequest; | |||
import cn.com.taiji.core.repo.jpa.log.LogBillInterfaceRepo; | |||
import cn.com.taiji.ods.model.bill.HltResponse; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.beans.factory.annotation.Value; | |||
import org.springframework.stereotype.Service; | |||
import org.springframework.util.StringUtils; | |||
import org.springframework.web.client.HttpClientErrorException; | |||
import org.springframework.web.client.HttpServerErrorException; | |||
import java.io.IOException; | |||
@Service | |||
public class BillOpenManagerImpl extends AbstractManager implements BillOpenManager { | |||
public class BillOpenManagerImpl extends AbstractManager | |||
implements BillOpenManager, LogManager<BillOpenRequest, BillCommResponse, LogBillInterface> { | |||
Logger logger = LoggerFactory.getLogger(BillOpenManagerImpl.class); | |||
@Autowired | |||
private HltService hltService; | |||
@Value("${orderNotice.url}") | |||
private String orderNoticeUrl; | |||
@Override | |||
public BillCommResponse serviceOpen(BillOpenRequest request) throws ServiceHandleException { | |||
return processRequest(request, BillCommResponse.class); | |||
} | |||
// 订单补推 | |||
@Override | |||
public BillCommResponse serviceReversal(BillReversalRequest request) throws ServiceHandleException { | |||
return processRequest(request, BillCommResponse.class); | |||
} | |||
@Autowired | |||
private LogBillInterfaceRepo logRepo; | |||
@Override | |||
public BillOrderPushLogResponse serviceOrderPush(BillOrderPushLogRequest req) throws ServiceHandleException { | |||
logger.info("请求发票订单请求参数:{}", req); | |||
String response = null; | |||
try { | |||
response = HttpClientUtil.sendPost(orderNoticeUrl, req.toJson(), null); | |||
} catch (IOException e) { | |||
e.printStackTrace(); | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("接口错误:发票订单补推响应异常!"); | |||
} | |||
logger.info("请求发票订单响应参数:{}", response); | |||
if (StringUtils.hasText(response)) { | |||
try { | |||
return JsonTools.json2Object(response, BillOrderPushLogResponse.class); | |||
} catch (IOException e) { | |||
logger.error("发票订单补推响应异常:{}", e.getMessage(), e); | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("接口错误:发票订单补推响应异常!"); | |||
} | |||
} else { | |||
logger.error("发票订单补推响应异常"); | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("接口错误:发票订单补推响应异常!"); | |||
} | |||
} | |||
/** 统一处理请求*/ | |||
private <T extends AbstractSignTypeRequest<?>, R extends AbstractSignTypeResponse> R processRequest( | |||
T request, Class<R> responseClass) throws ServiceHandleException { | |||
public BillCommResponse serviceHandle(BillOpenRequest request) throws ServiceHandleException { | |||
logger.info("请求汇联通开始,请求参数: {}", request); | |||
long begin = System.currentTimeMillis(); | |||
try { | |||
HltResponse response = hltService.postHlt(request.toJson()); | |||
logger.info("请求汇联通结束,响应参数: {}", response); | |||
if ("0000".equals(response.getRespCode())) { | |||
try { | |||
return JsonTools.json2Object(response.getData(), responseClass); | |||
BillCommResponse commResponse = JsonTools.json2Object(response.getData(), BillCommResponse.class); | |||
return onSuccess(request, commResponse, LogBillInterface.class, System.currentTimeMillis() - begin); | |||
} catch (IOException e) { | |||
logger.error("汇联通响应解析异常: {}", e.getMessage(), e); | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("接口错误:汇联通接口返回值格式错误!"); | |||
throw exception(request, LogBillInterface.class, "接口错误:汇联通接口返回值格式错误!"); | |||
} | |||
} else { | |||
logger.error("汇联通响应异常,状态码: {}, 错误信息: {}", response.getRespCode(), response.getRespMessage()); | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException( | |||
throw exception(request, LogBillInterface.class, | |||
String.format("接口错误:汇联通响应异常!状态码:%s,错误信息:%s", response.getRespCode(), response.getRespMessage())); | |||
} | |||
} catch (HttpClientErrorException | HttpServerErrorException e) { | |||
logger.error("HTTP请求异常,状态码: {}, 错误信息: {}", e.getStatusCode(), e.getResponseBodyAsString(), e); | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException( | |||
throw exception(request, LogBillInterface.class, | |||
String.format("接口错误:HTTP请求异常!状态码:%s,错误信息:%s", e.getStatusCode(), e.getResponseBodyAsString())); | |||
} catch (Exception e) { | |||
logger.error("请求汇联通异常: {}", e.getMessage(), e); | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("接口错误:请求汇联通异常!"); | |||
throw exception(request, LogBillInterface.class, "接口错误:请求汇联通异常!"); | |||
} | |||
} | |||
@Override | |||
public void doSaveLog(BillOpenRequest request, BillCommResponse response, LogBillInterface log) { | |||
logger.info("enter do save log"); | |||
logRepo.persist(log); | |||
} | |||
} |
@@ -0,0 +1,9 @@ | |||
package cn.com.taiji.ods.manager.bill; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.core.model.comm.protocol.ods.bill.BillOrderPushLogResponse; | |||
import cn.com.taiji.core.model.comm.protocol.ods.bill.BillOrderPushLogRequest; | |||
public interface BillOrderPushManager { | |||
BillOrderPushLogResponse serviceHandle(BillOrderPushLogRequest request) throws ServiceHandleException; | |||
} |
@@ -0,0 +1,60 @@ | |||
package cn.com.taiji.ods.manager.bill; | |||
import cn.com.taiji.common.manager.AbstractManager; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.common.pub.json.JsonTools; | |||
import cn.com.taiji.core.entity.log.LogBillInterface; | |||
import cn.com.taiji.core.manager.comm.LogManager; | |||
import cn.com.taiji.core.manager.tools.http.HttpClientUtil; | |||
import cn.com.taiji.core.model.comm.protocol.ods.bill.BillOrderPushLogRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ods.bill.BillOrderPushLogResponse; | |||
import cn.com.taiji.core.repo.jpa.log.LogBillInterfaceRepo; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.beans.factory.annotation.Value; | |||
import org.springframework.stereotype.Service; | |||
import java.io.IOException; | |||
@Service | |||
public class BillOrderPushManagerImpl extends AbstractManager | |||
implements BillOrderPushManager, LogManager<BillOrderPushLogRequest, BillOrderPushLogResponse, LogBillInterface> { | |||
@Value("${orderNotice.url}") | |||
private String orderNoticeUrl; | |||
@Autowired | |||
private LogBillInterfaceRepo logRepo; | |||
@Override | |||
public BillOrderPushLogResponse serviceHandle(BillOrderPushLogRequest request) throws ServiceHandleException { | |||
logger.info("请求发票订单请求参数:{}", request); | |||
long begin = System.currentTimeMillis(); | |||
String response = null; | |||
try { | |||
response = HttpClientUtil.sendPost(orderNoticeUrl, request.toJson(), null); | |||
} catch (IOException e) { | |||
e.printStackTrace(); | |||
throw exception(request, LogBillInterface.class, "接口错误:发票订单补推响应异常!"); | |||
} | |||
logger.info("请求发票订单响应参数:{}", response); | |||
if (hasText(response)) { | |||
try { | |||
BillOrderPushLogResponse pushLogResponse = JsonTools.json2Object(response, BillOrderPushLogResponse.class); | |||
return onSuccess(request, pushLogResponse, LogBillInterface.class, System.currentTimeMillis() - begin); | |||
} catch (IOException e) { | |||
logger.error("发票订单补推响应异常:{}", e.getMessage(), e); | |||
throw exception(request, LogBillInterface.class, "接口错误:发票订单补推响应异常!"); | |||
} | |||
} else { | |||
logger.error("发票订单补推响应异常"); | |||
throw exception(request, LogBillInterface.class, "接口错误:发票订单补推响应异常!"); | |||
} | |||
} | |||
@Override | |||
public void doSaveLog(BillOrderPushLogRequest request, BillOrderPushLogResponse response, LogBillInterface log) { | |||
logger.info("enter do save log"); | |||
logRepo.persist(log); | |||
} | |||
} |
@@ -0,0 +1,9 @@ | |||
package cn.com.taiji.ods.manager.bill; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.core.model.comm.protocol.ods.bill.BillReversalRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ods.bill.BillCommResponse; | |||
public interface BillReversalManager { | |||
BillCommResponse serviceHandle(BillReversalRequest request) throws ServiceHandleException; | |||
} |
@@ -0,0 +1,71 @@ | |||
package cn.com.taiji.ods.manager.bill; | |||
import cn.com.taiji.common.manager.AbstractManager; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.common.pub.json.JsonTools; | |||
import cn.com.taiji.core.entity.log.LogBillInterface; | |||
import cn.com.taiji.core.manager.comm.LogManager; | |||
import cn.com.taiji.core.model.comm.protocol.ods.bill.BillCommResponse; | |||
import cn.com.taiji.core.model.comm.protocol.ods.bill.BillReversalRequest; | |||
import cn.com.taiji.core.repo.jpa.log.LogBillInterfaceRepo; | |||
import cn.com.taiji.ods.model.bill.HltResponse; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
import org.springframework.transaction.annotation.Transactional; | |||
import org.springframework.web.client.HttpClientErrorException; | |||
import org.springframework.web.client.HttpServerErrorException; | |||
import java.io.IOException; | |||
@Service | |||
public class BillReversalManagerImpl extends AbstractManager | |||
implements BillReversalManager, LogManager<BillReversalRequest, BillCommResponse, LogBillInterface> { | |||
Logger logger = LoggerFactory.getLogger(BillReversalManagerImpl.class); | |||
@Autowired | |||
private HltService hltService; | |||
@Autowired | |||
private LogBillInterfaceRepo logRepo; | |||
@Override | |||
public BillCommResponse serviceHandle(BillReversalRequest request) throws ServiceHandleException { | |||
logger.info("请求汇联通开始,请求参数: {}", request); | |||
long begin = System.currentTimeMillis(); | |||
try { | |||
HltResponse response = hltService.postHlt(request.toJson()); | |||
logger.info("请求汇联通结束,响应参数: {}", response); | |||
if ("0000".equals(response.getRespCode())) { | |||
try { | |||
BillCommResponse commResponse = JsonTools.json2Object(response.getData(), BillCommResponse.class); | |||
return onSuccess(request, commResponse, LogBillInterface.class, System.currentTimeMillis() - begin); | |||
} catch (IOException e) { | |||
logger.error("汇联通响应解析异常: {}", e.getMessage(), e); | |||
throw exception(request, LogBillInterface.class, "接口错误:汇联通接口返回值格式错误!"); | |||
} | |||
} else { | |||
logger.error("汇联通响应异常,状态码: {}, 错误信息: {}", response.getRespCode(), response.getRespMessage()); | |||
throw exception(request, LogBillInterface.class, | |||
String.format("接口错误:汇联通响应异常!状态码:%s,错误信息:%s", response.getRespCode(), response.getRespMessage())); | |||
} | |||
} catch (HttpClientErrorException | HttpServerErrorException e) { | |||
logger.error("HTTP请求异常,状态码: {}, 错误信息: {}", e.getStatusCode(), e.getResponseBodyAsString(), e); | |||
throw exception(request, LogBillInterface.class, | |||
String.format("接口错误:HTTP请求异常!状态码:%s,错误信息:%s", e.getStatusCode(), e.getResponseBodyAsString())); | |||
} catch (Exception e) { | |||
logger.error("请求汇联通异常: {}", e.getMessage(), e); | |||
throw exception(request, LogBillInterface.class, "接口错误:请求汇联通异常!"); | |||
} | |||
} | |||
@Override | |||
@Transactional | |||
public void doSaveLog(BillReversalRequest request, BillCommResponse response, LogBillInterface log) { | |||
logger.info("enter do save log"); | |||
logRepo.persist(log); | |||
} | |||
} |
@@ -37,7 +37,7 @@ public class HltServiceImpl implements HltService { | |||
HltResponse response; | |||
try { | |||
// 发送请求 | |||
System.out.println("==>"+hltRequest.toJson()); | |||
System.out.println("加密后==>"+hltRequest.toJson()); | |||
String res = HttpClientUtil.sendPost(hltUrl, hltRequest.toJson(), null); | |||
response = JsonTools.json2Object(res, HltResponse.class); | |||
// 对返回的数据进行解密 |
@@ -11,6 +11,8 @@ import cn.com.taiji.core.model.comm.protocol.ods.bill.BillOpenRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ods.bill.BillOrderPushLogRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ods.bill.BillReversalRequest; | |||
import cn.com.taiji.ods.manager.bill.BillOpenManager; | |||
import cn.com.taiji.ods.manager.bill.BillOrderPushManager; | |||
import cn.com.taiji.ods.manager.bill.BillReversalManager; | |||
import com.zgglyun.common.model.AbstractHttpRequestInfo; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
@@ -23,17 +25,21 @@ public class BillOpenServiceHandler extends AbstractOdsServiceHandler<BillOpenCm | |||
@Autowired | |||
private BillOpenManager billOpenManager; | |||
@Autowired | |||
private BillReversalManager billReversalManager; | |||
@Autowired | |||
private BillOrderPushManager billOrderPushManager; | |||
@Override | |||
protected <T extends AbstractSignTypeRequest<?>> AbstractSignTypeResponse handleInternal(T request, SignJsonRequest jsonReq, AbstractHttpRequestInfo reqInfo) throws ServiceHandleException { | |||
BillOpenCmd cmd = BillOpenCmd.fromIfCode(jsonReq.getIfCode()); | |||
switch (cmd) { | |||
case OPEN: | |||
return billOpenManager.serviceOpen((BillOpenRequest) request); | |||
return billOpenManager.serviceHandle((BillOpenRequest) request); | |||
case REVERSAL: | |||
return billOpenManager.serviceReversal((BillReversalRequest) request); | |||
return billReversalManager.serviceHandle((BillReversalRequest) request); | |||
case ORDERPUSH: | |||
return billOpenManager.serviceOrderPush((BillOrderPushLogRequest) request); | |||
return billOrderPushManager.serviceHandle((BillOrderPushLogRequest) request); | |||
default: | |||
throw FileProtocolSystemError.NOT_SUPPORT.toHandleException(jsonReq.getIfCode()); | |||
} |