Merge remote-tracking branch 'origin/0703-增加调用记录' into release

# Conflicts:
#	dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java
release
WangQi 2 years ago
commit a280045a82
  1. 2
      .gitignore
  2. 70
      dxhy-erp/src/main/java/com/dxhy/erp/controller/InterfaceController.java
  3. 13
      dxhy-erp/src/main/java/com/dxhy/erp/controller/RequestRecallController.java
  4. 234
      dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java
  5. 29
      dxhy-erp/src/main/java/com/dxhy/erp/dao/RequestRecordDao.java
  6. 125
      dxhy-erp/src/main/java/com/dxhy/erp/entity/RequestRecord.java
  7. 75
      dxhy-erp/src/main/java/com/dxhy/erp/enums/RequestRecordEnum.java
  8. 23
      dxhy-erp/src/main/java/com/dxhy/erp/service/RequestRecordService.java
  9. 149
      dxhy-erp/src/main/java/com/dxhy/erp/service/impl/RequestRecordServiceImpl.java
  10. 64
      dxhy-erp/src/main/resources/mapper/RequestRecordMapper.xml

2
.gitignore vendored

@ -34,3 +34,5 @@
/pt.iml
/dxhy-lq-rpc/target/
/dxhy-lq-channel/target/
/dxhy-oss/target/
/dxhy-oss/dxhy-oss.iml

@ -44,10 +44,7 @@ import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.*;
/**
* @author jiaohongyang
@ -108,6 +105,8 @@ public class InterfaceController extends AbstractController {
private BaseIReceiptInvoiceService baseIReceiptInvoiceService;
@Value("${erp.ipUrl}")
private String ipUrl;
@Resource
private RequestRecordService requestRecordService;
/**
*
@ -1167,6 +1166,7 @@ public class InterfaceController extends AbstractController {
}
private String insertVouncherRecord(ErpInvoiceData requestParam) {
OutPut outPut = new OutPut();
String zdata = requestParam.getIS_INPUT().getZDATA();
List<VoucherRecord> voucherRecords = JSON.parseArray(zdata, VoucherRecord.class);
@ -1202,9 +1202,35 @@ public class InterfaceController extends AbstractController {
@PostMapping("receiveErpInvoiceMessage")
public String receiveErpInvoiceMessage(@RequestBody ErpInvoiceData erpInvoiceData){
OutPut outPut = new OutPut();
List<ZDATA> zdata = JSON.parseArray(erpInvoiceData.getIS_INPUT().getZDATA(), ZDATA.class);
List<String> fpdms = new ArrayList<>();
List<String> fphms = new ArrayList<>();
List<String> bzdhs = new ArrayList<>();
zdata.stream().forEach(zdata1 -> {
fpdms.add(zdata1.getZFPDM());
fphms.add(zdata1.getZFPHM());
bzdhs.add(zdata1.getZBZDH());
});
RequestRecord receiveErpInvoiceMessageRecord =requestRecordService.getBaseRequestRecord(JSONObject.toJSONString(erpInvoiceData),
"/po", JSONObject.toJSONString(fpdms),JSONObject.toJSONString(fphms), "receiveErpInvoiceMessage");
receiveErpInvoiceMessageRecord.setBzdh(JSONObject.toJSONString(bzdhs));
try {
EsOutPutResp esOutPutResp=invoiceAuthService.receiveErpInvoiceMessage(erpInvoiceData.getIS_INPUT());
outPut.setES_OUTPUT(esOutPutResp);
try {
if (esOutPutResp.getZMESSAGE().contains("不存在")) {
requestRecordService.saveRecord(receiveErpInvoiceMessageRecord, 1,1, JsonUtils.getInstance().toJsonString(outPut),0);
} else {
requestRecordService.saveRecord(receiveErpInvoiceMessageRecord, 0,0, JsonUtils.getInstance().toJsonString(outPut));
}
} catch (Exception e) {
log.error("FI847接口记录保存失败,errormsg:{}",e.getMessage());
e.printStackTrace();
}
return JsonUtils.getInstance().toJsonString(outPut);
}catch (Exception e){
log.info("{}接收erp发票数据出错,sapkey:{}",e,erpInvoiceData.getIS_INPUT().getSAPKEY());
@ -1215,13 +1241,29 @@ public class InterfaceController extends AbstractController {
esOutPutResp.setZTYPE("E");
esOutPutResp.setZMESSAGE("程序内部错误");
outPut.setES_OUTPUT(esOutPutResp);
requestRecordService.saveRecord(receiveErpInvoiceMessageRecord, 1,1, JsonUtils.getInstance().toJsonString(outPut), 1);
return JsonUtils.getInstance().toJsonString(outPut);
}
}
public String transferOut(ErpInvoiceData erpInvoiceData){
String zdata = erpInvoiceData.getIS_INPUT().getZDATA();
List<Map> list = JSON.parseArray(zdata, Map.class);
List<String> fpdms = new ArrayList<>();
List<String> fphms = new ArrayList<>();
for (Map<String ,Object> map:list) {
String invoiceCode =(String) map.get("ZFPDM");
String invoiceNo = (String)map.get("ZFPHM");
fpdms.add(invoiceCode);
fphms.add(invoiceNo);
}
RequestRecord transferOutRecord =requestRecordService.getBaseRequestRecord(JSONObject.toJSONString(erpInvoiceData),
"/po", JSONObject.toJSONString(fpdms),JSONObject.toJSONString(fphms), "transferOut");
for(Map<String ,Object> map:list){
String invoiceCode =(String) map.get("ZFPDM");
String invoiceNo = (String)map.get("ZFPHM");
@ -1239,6 +1281,14 @@ public class InterfaceController extends AbstractController {
es.setZTYPE("E");
es.setZMESSAGE("底账数据不存在");
outPut.setES_OUTPUT(es);
try {
requestRecordService.saveRecord(transferOutRecord, 1, 1, JsonUtils.getInstance().toJsonString(outPut), 0);
} catch (Exception e) {
log.error("FI849接口记录保存失败,errormsg:{}",e.getMessage());
e.printStackTrace();
}
return JsonUtils.getInstance().toJsonString(outPut);
}
}
@ -1283,6 +1333,14 @@ public class InterfaceController extends AbstractController {
}
}
}
try {
requestRecordService.saveRecord(transferOutRecord,0, 0, transfer);
} catch (Exception e) {
log.error("FI849接口记录保存失败,errormsg:{}",e.getMessage());
e.printStackTrace();
}
return transfer;
}catch (Exception e){
e.printStackTrace();
@ -1293,9 +1351,13 @@ public class InterfaceController extends AbstractController {
es.setZTYPE("E");
es.setZMESSAGE("系统内部错误");
outPut.setES_OUTPUT(es);
requestRecordService.saveRecord(transferOutRecord,1, 1, JsonUtils.getInstance().toJsonString(outPut), 1);
return JsonUtils.getInstance().toJsonString(outPut);
}
}
}

@ -0,0 +1,13 @@
package com.dxhy.erp.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RequestMapping("/recall")
@RestController
public class RequestRecallController {
}

@ -18,11 +18,8 @@ import com.dxhy.erp.entity.*;
import com.dxhy.erp.entity.sdny.*;
import com.dxhy.erp.model.InvoiceDetailInfo;
import com.dxhy.erp.service.*;
import com.dxhy.erp.service.impl.GatherServiceImpl;
import com.dxhy.erp.utils.Base64;
import com.dxhy.erp.utils.CheckUtil;
import com.dxhy.erp.utils.HmacSHA1Util;
import com.google.gson.JsonArray;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
@ -108,6 +105,9 @@ public class SDNYMainProcessController extends AbstractController {
@Resource
private GatherService gatherService;
@Resource
private RequestRecordService requestRecordService;
/**
* 查验发票
*/
@ -119,6 +119,8 @@ public class SDNYMainProcessController extends AbstractController {
String userid = "101833";
String dbName = "business";
JSONObject checkInvoiceResult = null;
RequestRecord singleInvoiceCheckRecord = requestRecordService.getBaseRequestRecord(JSONObject.toJSONString(pramsMap),
"/singleInvoiceCheck",pramsMap.get("invoiceCode"),pramsMap.get("invoiceNumber"), "singleInvoiceCheck");
//挡板开关
if ("1".equals(isPresure)) {
@ -131,6 +133,14 @@ public class SDNYMainProcessController extends AbstractController {
data.put("message", "success");
data.put("data", checkInvoiceResult);
try {
requestRecordService.saveRecord(singleInvoiceCheckRecord, 0,0, JSONObject.toJSONString(data));
} catch (Exception e) {
log.error("发票查验接口记录保存失败,errormsg:{}",e.getMessage());
e.printStackTrace();
}
return ResponseEntity.ok(JSONObject.toJSONString(data));
}
@ -141,6 +151,14 @@ public class SDNYMainProcessController extends AbstractController {
log.info("查验类发票,执行查验操作后入库");
//权限校验
if (StringUtils.isBlank(pramsMap.get("invoiceNumber"))) {
try {
requestRecordService.saveRecord(singleInvoiceCheckRecord,1,1,JSONObject.toJSONString(R.error("发票号码不能为空!")),0);
} catch (Exception e) {
log.error("发票查验接口记录保存失败,errormsg:{}",e.getMessage());
e.printStackTrace();
}
return ResponseEntity.ok(JSONObject.toJSONString(R.error("发票号码不能为空!")));
}
@ -152,10 +170,26 @@ public class SDNYMainProcessController extends AbstractController {
pramsMap.put("invoiceDate", billingDate);
pramsMap.put("billingDate", billingDate);
} else {
try {
requestRecordService.saveRecord(singleInvoiceCheckRecord,1,1,JSONObject.toJSONString(R.error("开票日期不能为空!")), 0);
} catch (Exception e) {
log.error("发票查验接口记录保存失败,errormsg:{}",e.getMessage());
e.printStackTrace();
}
return ResponseEntity.ok(JSONObject.toJSONString(R.error("开票日期不能为空!")));
}
if (StringUtils.isBlank(pramsMap.get("invoiceType"))) {
try {
requestRecordService.saveRecord(singleInvoiceCheckRecord,1,1,JSONObject.toJSONString(R.error("发票类型不能为空!")), 0);
} catch (Exception e) {
log.error("发票查验接口记录保存失败,errormsg:{}",e.getMessage());
e.printStackTrace();
}
return ResponseEntity.ok(JSONObject.toJSONString(R.error("发票类型不能为空!")));
}
@ -166,10 +200,26 @@ public class SDNYMainProcessController extends AbstractController {
|| SNFplxEnum.QDZP.getSnFplxDm().equals(pramsMap.get("invoiceType"))
|| SNFplxEnum.QDPP.getSnFplxDm().equals(pramsMap.get("invoiceType"))) {
if (StringUtils.isBlank(pramsMap.get("totalAmount"))) {
try {
requestRecordService.saveRecord(singleInvoiceCheckRecord,1,1,JSONObject.toJSONString(R.error("金额不能为空!")), 0);
} catch (Exception e) {
log.error("发票查验接口记录保存失败,errormsg:{}",e.getMessage());
e.printStackTrace();
}
return ResponseEntity.ok(JSONObject.toJSONString(R.error("金额不能为空!")));
}
} else {
if (StringUtils.isBlank(pramsMap.get("checkCode"))) {
try {
requestRecordService.saveRecord(singleInvoiceCheckRecord,1,1,JSONObject.toJSONString(R.error("校验码不能为空!")), 0);
} catch (Exception e) {
log.error("发票查验接口记录保存失败,errormsg:{}",e.getMessage());
e.printStackTrace();
}
return ResponseEntity.ok(JSONObject.toJSONString(R.error("校验码不能为空!")));
}
}
@ -184,6 +234,14 @@ public class SDNYMainProcessController extends AbstractController {
log.info("uuid={}", uuid);
String notes = invoiceQueryService.checkingInvoiceInfo("business", uuid, getUserInfo());
if (notes != null) {
try {
requestRecordService.saveRecord(singleInvoiceCheckRecord,1,1,JSONObject.toJSONString(R.error(notes)), 0);
} catch (Exception e) {
log.error("发票查验接口记录保存失败,errormsg:{}",e.getMessage());
e.printStackTrace();
}
return ResponseEntity.ok(JSONObject.toJSONString(R.error(notes)));
}
@ -209,6 +267,9 @@ public class SDNYMainProcessController extends AbstractController {
if(delete > 0) {
checkInvoiceResult = snPushCheckRecordService.singleCheckInvoice(pramsMap,null);
singleInvoiceCheckRecord.setActiveCall("singleCheckInvoice");
singleInvoiceCheckRecord.setActiveCallResponse(JSONObject.toJSONString(checkInvoiceResult));
if (!checkInvoiceResult.containsKey("code")) {
if (!checkInvoiceResult.containsKey("cyjg")) {
checkInvoiceResult.put("invoiceNo", checkInvoiceResult.getString("invoiceNumber"));
@ -230,6 +291,21 @@ public class SDNYMainProcessController extends AbstractController {
//查验结果保存
// saveCheckLog(pramsMap, checkInvoice);
try {
if (checkInvoiceResult!=null && checkInvoiceResult.containsKey("code")) {
if (checkInvoiceResult.containsKey("cyjg")) {
requestRecordService.saveRecord(singleInvoiceCheckRecord,1,1,JSONObject.toJSONString(data), 0);
}
} else {
requestRecordService.saveRecord(singleInvoiceCheckRecord,0,0,JSONObject.toJSONString(data));
}
} catch (Exception e) {
log.error("发票查验接口记录保存失败,errormsg:{}",e.getMessage());
e.printStackTrace();
}
return ResponseEntity.ok(JSONObject.toJSONString(data));
} else {
TdxSaleRecordInvoice tdxSaleRecordInvoice = tdxSaleRecordInvoiceDao.selectByUuid(uuid);
@ -254,6 +330,12 @@ public class SDNYMainProcessController extends AbstractController {
//查验结果保存
// saveCheckLog(pramsMap,checkInvoice);
try {
requestRecordService.saveRecord(singleInvoiceCheckRecord,0,0,JSONObject.toJSONString(data));
} catch (Exception e) {
log.error("发票查验接口记录保存失败,errormsg:{}",e.getMessage());
e.printStackTrace();
}
return ResponseEntity.ok(JSONObject.toJSONString(data));
}
@ -262,10 +344,21 @@ public class SDNYMainProcessController extends AbstractController {
try {
checkInvoiceResult = snPushCheckRecordService.singleCheckInvoice(pramsMap,"1");
singleInvoiceCheckRecord.setActiveCall("singleCheckInvoice");
singleInvoiceCheckRecord.setActiveCallResponse(JSONObject.toJSONString(checkInvoiceResult));
log.info("查验结果为:{}", checkInvoiceResult);
} catch (Exception e) {
e.printStackTrace();
log.error("查验失败,errormsg:{}",e.getMessage());
try {
requestRecordService.saveRecord(singleInvoiceCheckRecord,1,1,JSONObject.toJSONString(R.error("查验失败,"+e.getMessage())), 1);
} catch (Exception exception) {
log.error("发票查验接口记录保存失败,errormsg:{}",e.getMessage());
exception.printStackTrace();
}
return ResponseEntity.ok(JSONObject.toJSONString(R.error("查验失败,"+e.getMessage())));
}
@ -274,6 +367,14 @@ public class SDNYMainProcessController extends AbstractController {
if (checkInvoiceResult.containsKey("cyjg") && !"0001".equals(checkInvoiceResult.getString("cyjg"))) {
R data = new R();
data = errorInfo(checkInvoiceResult, data);
try {
requestRecordService.saveRecord(singleInvoiceCheckRecord,1,1,JSONObject.toJSONString(data), 0);
} catch (Exception e) {
log.error("发票查验接口记录保存失败,errormsg:{}",e.getMessage());
e.printStackTrace();
}
return ResponseEntity.ok(JSONObject.toJSONString(data));
}
@ -287,6 +388,13 @@ public class SDNYMainProcessController extends AbstractController {
checkInvoiceResult.put("invoiceNo", checkInvoiceResult.getString("invoiceNumber"));
log.info("返回给影像系统的结果为:{}", checkInvoiceResult);
signSaveInvoiceInfoService.saveQueryInvoiceResult(checkInvoiceResult, userid, "1", dbName);
try {
requestRecordService.saveRecord(singleInvoiceCheckRecord,0,0,JSONObject.toJSONString(data));
} catch (Exception e) {
log.error("发票查验接口记录保存失败,errormsg:{}",e.getMessage());
e.printStackTrace();
}
}
return ResponseEntity.ok(JSONObject.toJSONString(data));
@ -307,9 +415,25 @@ public class SDNYMainProcessController extends AbstractController {
}
data.put("data", checkInvoiceResult);
try {
requestRecordService.saveRecord(singleInvoiceCheckRecord,0,0,JSONObject.toJSONString(data));
} catch (Exception e) {
log.error("发票查验接口记录保存失败,errormsg:{}",e.getMessage());
e.printStackTrace();
}
return ResponseEntity.ok(JSONObject.toJSONString(data));
}
try {
requestRecordService.saveRecord(singleInvoiceCheckRecord,1,1,JSONObject.toJSONString(R.error().put("data", checkInvoiceResult)),0);
} catch (Exception e) {
log.error("发票查验接口记录保存失败,errormsg:{}",e.getMessage());
e.printStackTrace();
}
return ResponseEntity.ok(JSONObject.toJSONString(R.error().put("data", checkInvoiceResult)));
}
@ -549,6 +673,37 @@ public class SDNYMainProcessController extends AbstractController {
log.info("影像系统同步数据:{}", JSONObject.toJSONString(snRequestObject));
List<String> invoiceCodes = new ArrayList<>();
List<String> invoiceNos = new ArrayList<>();
RequestRecord record=null;
if (snRequestObject.getInvoiceInfoList()!=null && snRequestObject.getInvoiceInfoList().size()>0) {
log.info("影像系统同步数据的发票号码为:{}", JSONObject.toJSONString(invoiceNos));
log.info("影像系统同步数据的发票代码为:{}", JSONObject.toJSONString(invoiceCodes));
snRequestObject.getInvoiceInfoList().stream().forEach(invoiceInfo->{
invoiceCodes.add(invoiceInfo.getInvoiceCode());
invoiceNos.add(invoiceInfo.getInvoiceNumber());
});
if (invoiceCodes.get(0)!=null) {
record = requestRecordService.getBaseRequestRecord(JSONObject.toJSONString(snRequestObject),
"/syncInvoiceInfo",
JSONObject.toJSONString(invoiceCodes),
JSONObject.toJSONString(invoiceNos),
"syncInvoiceInfo");
} else {
record = requestRecordService.getBaseRequestRecord(JSONObject.toJSONString(snRequestObject),
"/syncInvoiceInfo",
JSONObject.toJSONString(invoiceNos),
"syncInvoiceInfo");
}
} else {
record = requestRecordService.getBaseRequestRecord(JSONObject.toJSONString(snRequestObject),
"/syncInvoiceInfo",
"syncInvoiceInfo");
}
record.setImageId(snRequestObject.getImageId());
String dbName = "business";
// 入参统一在入口处理
String orgCode = snRequestObject.getCompCode();
@ -609,6 +764,14 @@ public class SDNYMainProcessController extends AbstractController {
if (!"ok".equals(result) && !"0000".equals(result)) {
R data = new R(1000, "default success");
data.put("data", result);
try {
requestRecordService.saveRecord(record,0, 0, JSONObject.toJSONString(R.error(result)));
} catch (Exception e) {
log.error("发票同步接口记录保存失败,errormsg:{}",e.getMessage());
e.printStackTrace();
}
return ResponseEntity.ok(JSONObject.toJSONString(R.error(result)));
}
SAPInvoiceInfo info = convertToSapOnject(invoice, imageId, compCode);
@ -621,16 +784,41 @@ public class SDNYMainProcessController extends AbstractController {
JSONObject request = new JSONObject();
request.put("IS_INPUT", object);
// RequestRecord pushCheckResultToSAPRecord =requestRecordService.getBaseRequestRecord(request.toJSONString(),
// "/syncInvoiceInfo",
// JSONObject.toJSONString(invoiceCodes),
// JSONObject.toJSONString(invoiceNos),
// "pushCheckResultToSAP", 1);
try {
record.setActiveCall("pushCheckResultToSAP");
//将信息推送到影像系统
result = snPushCheckRecordService.pushCheckResultToSAP(request.toJSONString());
record.setActiveCallResponse(JSONObject.toJSONString(result));
R data = new R(1000, "default success");
data.put("data", result);
try {
requestRecordService.saveRecord(record,0, 0, JSONObject.toJSONString(data));
} catch (Exception e) {
log.error("发票同步接口记录保存失败,errormsg:{}",e.getMessage());
e.printStackTrace();
}
return ResponseEntity.ok(JSONObject.toJSONString(data));
} catch (Exception e) {
e.printStackTrace();
log.error("", e);
// requestRecordService.saveRecord(pushCheckResultToSAPRecord,1, 1, JSONObject.toJSONString(R.error(CommonConstants.MSG_ERR_PUSH_SDNY)), 1);
try {
requestRecordService.saveRecord(record,1, 1, JSONObject.toJSONString(R.error(CommonConstants.MSG_ERR_PUSH_SDNY)), 1);
} catch (Exception exception) {
log.error("发票同步接口记录保存失败,errormsg:{}",e.getMessage());
exception.printStackTrace();
}
return ResponseEntity.ok(JSONObject.toJSONString(R.error(CommonConstants.MSG_ERR_PUSH_SDNY)));
}
} else {
@ -650,6 +838,14 @@ public class SDNYMainProcessController extends AbstractController {
R data = new R(1000, "default success");
data.put("data", "");
try {
requestRecordService.saveRecord(record,0, 0, JSONObject.toJSONString(data));
} catch (Exception e) {
log.error("发票同步接口记录保存失败,errormsg:{}",e.getMessage());
e.printStackTrace();
}
return ResponseEntity.ok(JSONObject.toJSONString(data));
} else {
//删除对应的影像号
@ -667,6 +863,14 @@ public class SDNYMainProcessController extends AbstractController {
}
R data = new R(1000, "default success");
data.put("data", "");
try {
requestRecordService.saveRecord(record,0, 0, JSONObject.toJSONString(data));
} catch (Exception e) {
log.error("发票同步接口记录保存失败,errormsg:{}",e.getMessage());
e.printStackTrace();
}
return ResponseEntity.ok(JSONObject.toJSONString(data));
}
@ -674,14 +878,38 @@ public class SDNYMainProcessController extends AbstractController {
} catch (TimeoutException exception) {
log.error("同步SAP失败,报错信息为:{}", exception);
exception.printStackTrace();
try {
requestRecordService.saveRecord(record,1, 1, JSONObject.toJSONString(R.error(CommonConstants.CONNECT_TIMEOUT)),1);
} catch (Exception e) {
log.error("发票同步接口记录保存失败,errormsg:{}",e.getMessage());
e.printStackTrace();
}
return ResponseEntity.ok(JSONObject.toJSONString(R.error(CommonConstants.CONNECT_TIMEOUT)));
} catch(NullPointerException exception){
log.error("同步SAP失败,报错信息为:{}", exception);
exception.printStackTrace();
try {
requestRecordService.saveRecord(record,1, 1, JSONObject.toJSONString(R.error(CommonConstants.NULL_POINTER_TIMEOUT)), 1);
} catch (Exception e) {
log.error("发票同步接口记录保存失败,errormsg:{}",e.getMessage());
e.printStackTrace();
}
return ResponseEntity.ok(JSONObject.toJSONString(R.error(CommonConstants.NULL_POINTER_TIMEOUT)));
} catch(Exception exception){
log.error("同步SAP失败,报错信息为:{}", exception);
exception.printStackTrace();
try {
requestRecordService.saveRecord(record,1, 1, JSONObject.toJSONString(R.error(CommonConstants.MSG_ERR_DEFAULT)),1);
} catch (Exception e) {
log.error("发票同步接口记录保存失败,errormsg:{}",e.getMessage());
e.printStackTrace();
}
return ResponseEntity.ok(JSONObject.toJSONString(R.error(CommonConstants.MSG_ERR_DEFAULT)));
}

@ -0,0 +1,29 @@
package com.dxhy.erp.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dxhy.erp.entity.RequestRecord;
import com.dxhy.erp.entity.TdxRecordInvoiceStatistics;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
@Mapper
public interface RequestRecordDao extends BaseMapper<RequestRecord> {
/**
* 查询记录
* @param portName 接口名
* @param startTime 开始时间
* @param endTime 结束时间
* @param status 请求状态
* @param methodName 方法名
* @return
*/
List<RequestRecord> selectRecordList(@Param("portName") String portName,
@Param("startTime") Date startTime,
@Param("endTime") Date endTime,
@Param("status") Integer status,
@Param("methodName") String methodName);
}

@ -0,0 +1,125 @@
package com.dxhy.erp.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName("t_dx_erp_request_record")
public class RequestRecord {
@TableId("id")
private Long id;
/**
*报账单号
*/
@TableField("bzdh")
private String bzdh;
/**
*发票代码
*/
@TableField("invoice_code")
private String invoiceCode;
/**
*影像id
*/
@TableField("image_id")
private String imageId;
/**
* 发票号码
*/
@TableField("invoice_no")
private String invoiceNo;
/**
* 请求信息
*/
@TableField("request_detail")
private String requestDetail;
/**
* 响应信息
*/
@TableField("response_detail")
private String responseDetail;
/**
* 请求接口名称
*/
@TableField("port_name")
private String portName;
/**
* 重试次数
*/
@TableField("retry_times")
private Integer retryTimes;
/**
* 失败次数
*/
@TableField("failed_times")
private Integer failedTimes;
/**
* 第一次请求时间
*/
@TableField("create_time")
private Date createTime;
/**
* 最后一次重试时间
*/
@TableField("last_retry_time")
private Date lastRetryTime;
/**
* 是否已经成功0成功1失败
*/
@TableField("status")
private Integer status;
/**
* 方法名
*/
@TableField("method_name")
private String methodName;
/**
* 主动调用其它系统方法名
*/
@TableField("active_call")
private String activeCall;
/**
* 失败原因0参数校验未通过1其他原因
*/
@TableField("failed_reason")
private Integer failedReason;
/**
* 重调用后的返回参数
*/
@TableField("recall_response_detail")
private String recallResponseDetail;
/**
* 主动调用其它系统的返回参数
*/
@TableField("active_call_response")
private String activeCallResponse;
}

@ -0,0 +1,75 @@
package com.dxhy.erp.enums;
import com.dxhy.erp.controller.InterfaceController;
import com.dxhy.erp.controller.SDNYMainProcessController;
import com.dxhy.erp.service.SNPushCheckRecordService;
import java.util.Map;
public enum RequestRecordEnum {
SYNC_INVOICE_INFO("/syncInvoiceInfo", "syncInvoiceInfo", SDNYMainProcessController.class),
SINGLE_INVOICE_CHECK("/singleInvoiceCheck", "singleInvoiceCheck", SDNYMainProcessController.class),
RECEIVE_ERP_INVOICE_MESSAGE("/po", "receiveErpInvoiceMessage", InterfaceController.class),
TRANSFER_OUT("/po", "transferOut", InterfaceController.class),
INSERT_VOUNCHER_RECORD("/po", "insertVouncherRecord", InterfaceController.class),
PUSH_CHECK_RESULT_TO_SAP("pushCheckResultToSAP", SNPushCheckRecordService.class, String.class),
SING_CHECK_INVOICE("singleCheckInvoice",SNPushCheckRecordService.class, Map.class);
private String portName;
private String methodName;
private Class<?> argClass;
private Class<?> controllerName;
RequestRecordEnum(String portName, String methodName, Class<?> controllerClass) {
this.portName = portName;
this.methodName = methodName;
this.controllerName = controllerClass;
}
RequestRecordEnum(String methodName, Class<?> controllerClass, Class<?> argClass) {
this.methodName = methodName;
this.controllerName = controllerClass;
this.argClass = argClass;
}
public void setPortName(String portName) {
this.portName = portName;
}
public void setMethodName(String methodName) {
this.methodName = methodName;
}
public void setControllerName(Class<?> controllerName) {
this.controllerName = controllerName;
}
public String getPortName() {
return portName;
}
public String getMethodName() {
return methodName;
}
public Class<?> getControllerName() {
return controllerName;
}
public Class<?> getArgClass() {
return argClass;
}
public void setArgClass(Class<?> argClass) {
this.argClass = argClass;
}
}

@ -0,0 +1,23 @@
package com.dxhy.erp.service;
import com.dxhy.common.service.MpBaseService;
import com.dxhy.erp.entity.RequestRecord;
import org.springframework.http.ResponseEntity;
import java.util.Date;
import java.util.List;
public interface RequestRecordService extends MpBaseService<RequestRecord> {
int saveRecord(RequestRecord requestRecord,Integer failedTimes, Integer status, String responseDetail,Integer... failedReason);
List<RequestRecord> getRecordList(String portName, Date startTime, Date endTime, Integer status, String methodName, Integer pageNumber, Integer PageSize);
RequestRecord getBaseRequestRecord(String requestDetail, String portName, String invoiceCode, String invoiceNo, String methodName);
RequestRecord getBaseRequestRecord(String requestDetail, String portName, String methodName);
RequestRecord getBaseRequestRecord(String requestDetail, String portName, String invoiceNo, String methodName);
ResponseEntity<?> reCall(RequestRecord requestRecord);
}

@ -0,0 +1,149 @@
package com.dxhy.erp.service.impl;
import cn.hutool.core.util.ReflectUtil;
import com.alibaba.fastjson.JSONObject;
import com.dxhy.common.constant.DbConstant;
import com.dxhy.common.datasource.config.DynamicContextHolder;
import com.dxhy.common.service.impl.MpBaseServiceImpl;
import com.dxhy.common.utils.R;
import com.dxhy.erp.dao.RequestRecordDao;
import com.dxhy.erp.entity.RequestRecord;
import com.dxhy.erp.enums.RequestRecordEnum;
import com.dxhy.erp.service.RequestRecordService;
import com.dxhy.erp.service.SNPushCheckRecordService;
import com.github.pagehelper.PageHelper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.lang.reflect.Method;
import java.util.Date;
import java.util.List;
@Slf4j
@Service
public class RequestRecordServiceImpl extends MpBaseServiceImpl<RequestRecordDao, RequestRecord> implements RequestRecordService {
private final Integer MAX_TIMES = 10;
@Resource
RequestRecordDao requestRecordDao;
@Resource
private SNPushCheckRecordService snPushCheckRecordService;
@Transactional(propagation = Propagation.REQUIRES_NEW)
@Override
public int saveRecord(RequestRecord record, Integer failedTimes, Integer status, String responseDetail, Integer... failedReason) {
DynamicContextHolder.push("business" + DbConstant.BUSINESS_WRITE);
record.setFailedTimes(failedTimes);
record.setStatus(status);
record.setResponseDetail(responseDetail);
if (failedReason.length > 0) {
record.setFailedReason(failedReason[0]);
}
log.info("接口调用记录正在保存,调用记录详情:{}",JSONObject.toJSONString(record));
int insert = super.getBaseMapper().insert(record);
return insert;
}
@Override
public List<RequestRecord> getRecordList(String portName, Date startTime, Date endTime, Integer status, String methodName, Integer pageNumber, Integer PageSize) {
DynamicContextHolder.push("business" + DbConstant.BUSINESS_READ);
PageHelper.startPage(pageNumber, PageSize);
List<RequestRecord> recordList = requestRecordDao.selectRecordList(portName, startTime, endTime, status, methodName);
return recordList;
}
@Override
public RequestRecord getBaseRequestRecord(String requestDetail, String portName, String invoiceCode, String invoiceNo, String methodName) {
return RequestRecord.builder()
.requestDetail(requestDetail)
.portName(portName)
.createTime(new Date())
.invoiceCode(invoiceCode)
.invoiceNo(invoiceNo)
.methodName(methodName)
.build();
}
@Override
public RequestRecord getBaseRequestRecord(String requestDetail, String portName, String methodName) {
return RequestRecord.builder()
.requestDetail(requestDetail)
.portName(portName)
.createTime(new Date())
.methodName(methodName)
.build();
}
@Override
public RequestRecord getBaseRequestRecord(String requestDetail, String portName, String invoiceNo, String methodName) {
return RequestRecord.builder()
.requestDetail(requestDetail)
.portName(portName)
.createTime(new Date())
.invoiceNo(invoiceNo)
.methodName(methodName)
.build();
}
@Override
public ResponseEntity<?> reCall(RequestRecord requestRecord) {
DynamicContextHolder.push("business" + DbConstant.BUSINESS_READ);
RequestRecord dbRecord = requestRecordDao.selectById(requestRecord.getId());
if (!dbRecord.getRequestDetail().equals(requestRecord.getRequestDetail())
|| !dbRecord.getResponseDetail().equals(requestRecord.getResponseDetail())
|| !dbRecord.getMethodName().equals(dbRecord.getMethodName())) {
return ResponseEntity.ok(JSONObject.toJSONString(R.error("请求信息错误,请确认后再发送!")));
}
if (dbRecord.getFailedReason() == 0) {
return ResponseEntity.ok(JSONObject.toJSONString(R.error("该请求参数不符合标准,无法进行重调,请校验参数后再申请!")));
}
if (dbRecord.getFailedTimes() > MAX_TIMES) {
return ResponseEntity.ok(JSONObject.toJSONString(R.error("该请求已达到最大重调用次数,无法再重新请求!")));
}
RequestRecordEnum[] RequestRecordEnums = RequestRecordEnum.values();
for (RequestRecordEnum recordenum : RequestRecordEnums) {
if (recordenum.getMethodName().equals(dbRecord.getMethodName())) {
if (recordenum.getPortName() == null) {
Method method = ReflectUtil.getMethod(recordenum.getControllerName(), recordenum.getMethodName());
Object invokeResponse;
try {
invokeResponse = method.invoke(snPushCheckRecordService, JSONObject.parseObject(dbRecord.getRequestDetail(), recordenum.getArgClass()));
updateRecord(dbRecord, 1, JSONObject.toJSONString(invokeResponse));
R data = new R(1000, "default success");
data.put("data", invokeResponse);
return ResponseEntity.ok(JSONObject.toJSONString(data));
} catch (Exception e) {
log.error("重调用失败,错误信息:{}", e);
updateRecord(dbRecord, 1);
e.printStackTrace();
if (recordenum.getMethodName().equals("singleCheckInvoice")) {
return ResponseEntity.ok(JSONObject.toJSONString(R.error("查验失败,错误信息:" + e.getMessage())));
}
return ResponseEntity.ok(JSONObject.toJSONString(R.error("推送失败,错误信息:" + e.getMessage())));
}
}
}
}
return ResponseEntity.ok(JSONObject.toJSONString(R.error("未找到相应信息!")));
}
private int updateRecord(RequestRecord record, Integer status, String... responseDetail) {
DynamicContextHolder.push("business" + DbConstant.BUSINESS_WRITE);
record.setLastRetryTime(new Date());
record.setRetryTimes(record.getRetryTimes() + 1);
record.setStatus(status);
record.setRecallResponseDetail(responseDetail[0]);
requestRecordDao.updateById(record);
return requestRecordDao.updateById(record);
}
}

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dxhy.erp.dao.RequestRecordDao">
<resultMap id="BaseResultMap" type="com.dxhy.erp.entity.RequestRecord">
<id column="id" property="id" />
<result column="bzdh" property="bzdh" />
<result column="invoice_code" property="invoiceCode" />
<result column="image_id" property="imageId" />
<result column="invoice_no" property="invoiceNo" />
<result column="request_detail" property="requestDetail" />
<result column="response_detail" property="responseDetail" />
<result column="port_name" property="portName" />
<result column="retry_times" property="retryTimes" />
<result column="failed_times" property="failedTimes" />
<result column="create_time" property="createTime" />
<result column="last_retry_time" property="lastRetryTime" />
<result column="status" property="status" />
<result column="method_name" property="methodName" />
<result column="active_call" property="activeCall" />
</resultMap>
<select id="selectRecordList" resultMap="BaseResultMap">
select
id,
bzdh,
invoice_code,
image_id,
invoice_no,
request_detail,
response_detail,
port_name,
retry_times,
failed_times,
create_time,
last_retry_time,
status,
method_name,
active_call from t_dx_erp_request_record
<where>
<if test="portName!=null and portName!=''">
and port_name=#{portName}
</if>
<if test="startTime!=null and startTime!=''">
and create_time>=#{startTime}
</if>
<if test="endTime!=null and endTime!=''">
<![CDATA[
and create_time<=#{create_time}
]]>
</if>
<if test="status!=null and status!=''">
and status=#{status}
</if>
<if test="methodName!=null and methodName!=''">
and method_name=#{methodName}
</if>
</where>
order by create_time
</select>
</mapper>
Loading…
Cancel
Save