进项接口添加请求记录

release
xuliangwei 2 years ago
parent e81d00b5fb
commit 7b57c4f5d6
  1. 2
      .gitignore
  2. 55
      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. 111
      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. 19
      dxhy-erp/src/main/java/com/dxhy/erp/service/RequestRecordService.java
  9. 125
      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 /pt.iml
/dxhy-lq-rpc/target/ /dxhy-lq-rpc/target/
/dxhy-lq-channel/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.math.BigDecimal;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.HashMap; import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
/** /**
* @author jiaohongyang * @author jiaohongyang
@ -108,6 +105,8 @@ public class InterfaceController extends AbstractController {
private BaseIReceiptInvoiceService baseIReceiptInvoiceService; private BaseIReceiptInvoiceService baseIReceiptInvoiceService;
@Value("${erp.ipUrl}") @Value("${erp.ipUrl}")
private String ipUrl; private String ipUrl;
@Resource
private RequestRecordService requestRecordService;
/** /**
* *
@ -1167,6 +1166,7 @@ public class InterfaceController extends AbstractController {
} }
private String insertVouncherRecord(ErpInvoiceData requestParam) { private String insertVouncherRecord(ErpInvoiceData requestParam) {
OutPut outPut = new OutPut(); OutPut outPut = new OutPut();
String zdata = requestParam.getIS_INPUT().getZDATA(); String zdata = requestParam.getIS_INPUT().getZDATA();
List<VoucherRecord> voucherRecords = JSON.parseArray(zdata, VoucherRecord.class); List<VoucherRecord> voucherRecords = JSON.parseArray(zdata, VoucherRecord.class);
@ -1202,9 +1202,30 @@ public class InterfaceController extends AbstractController {
@PostMapping("receiveErpInvoiceMessage") @PostMapping("receiveErpInvoiceMessage")
public String receiveErpInvoiceMessage(@RequestBody ErpInvoiceData erpInvoiceData){ public String receiveErpInvoiceMessage(@RequestBody ErpInvoiceData erpInvoiceData){
OutPut outPut = new OutPut(); 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", 0);
receiveErpInvoiceMessageRecord.setBzdh(JSONObject.toJSONString(bzdhs));
try { try {
EsOutPutResp esOutPutResp=invoiceAuthService.receiveErpInvoiceMessage(erpInvoiceData.getIS_INPUT()); EsOutPutResp esOutPutResp=invoiceAuthService.receiveErpInvoiceMessage(erpInvoiceData.getIS_INPUT());
outPut.setES_OUTPUT(esOutPutResp); outPut.setES_OUTPUT(esOutPutResp);
if (esOutPutResp.getZMESSAGE().contains("不存在")) {
requestRecordService.saveRecord(receiveErpInvoiceMessageRecord, 1,1, JsonUtils.getInstance().toJsonString(outPut),0);
} else {
requestRecordService.saveRecord(receiveErpInvoiceMessageRecord, 0,0, JsonUtils.getInstance().toJsonString(outPut));
}
return JsonUtils.getInstance().toJsonString(outPut); return JsonUtils.getInstance().toJsonString(outPut);
}catch (Exception e){ }catch (Exception e){
log.info("{}接收erp发票数据出错,sapkey:{}",e,erpInvoiceData.getIS_INPUT().getSAPKEY()); log.info("{}接收erp发票数据出错,sapkey:{}",e,erpInvoiceData.getIS_INPUT().getSAPKEY());
@ -1215,13 +1236,29 @@ public class InterfaceController extends AbstractController {
esOutPutResp.setZTYPE("E"); esOutPutResp.setZTYPE("E");
esOutPutResp.setZMESSAGE("程序内部错误"); esOutPutResp.setZMESSAGE("程序内部错误");
outPut.setES_OUTPUT(esOutPutResp); outPut.setES_OUTPUT(esOutPutResp);
requestRecordService.saveRecord(receiveErpInvoiceMessageRecord, 1,1, JsonUtils.getInstance().toJsonString(outPut), 1);
return JsonUtils.getInstance().toJsonString(outPut); return JsonUtils.getInstance().toJsonString(outPut);
} }
} }
public String transferOut(ErpInvoiceData erpInvoiceData){ public String transferOut(ErpInvoiceData erpInvoiceData){
String zdata = erpInvoiceData.getIS_INPUT().getZDATA(); String zdata = erpInvoiceData.getIS_INPUT().getZDATA();
List<Map> list = JSON.parseArray(zdata, Map.class); 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", 0);
for(Map<String ,Object> map:list){ for(Map<String ,Object> map:list){
String invoiceCode =(String) map.get("ZFPDM"); String invoiceCode =(String) map.get("ZFPDM");
String invoiceNo = (String)map.get("ZFPHM"); String invoiceNo = (String)map.get("ZFPHM");
@ -1239,6 +1276,9 @@ public class InterfaceController extends AbstractController {
es.setZTYPE("E"); es.setZTYPE("E");
es.setZMESSAGE("底账数据不存在"); es.setZMESSAGE("底账数据不存在");
outPut.setES_OUTPUT(es); outPut.setES_OUTPUT(es);
requestRecordService.saveRecord(transferOutRecord, 1, 1, JsonUtils.getInstance().toJsonString(outPut), 0);
return JsonUtils.getInstance().toJsonString(outPut); return JsonUtils.getInstance().toJsonString(outPut);
} }
} }
@ -1283,6 +1323,9 @@ public class InterfaceController extends AbstractController {
} }
} }
} }
requestRecordService.saveRecord(transferOutRecord,0, 0, transfer);
return transfer; return transfer;
}catch (Exception e){ }catch (Exception e){
e.printStackTrace(); e.printStackTrace();
@ -1293,9 +1336,13 @@ public class InterfaceController extends AbstractController {
es.setZTYPE("E"); es.setZTYPE("E");
es.setZMESSAGE("系统内部错误"); es.setZMESSAGE("系统内部错误");
outPut.setES_OUTPUT(es); outPut.setES_OUTPUT(es);
requestRecordService.saveRecord(transferOutRecord,1, 1, JsonUtils.getInstance().toJsonString(outPut), 1);
return JsonUtils.getInstance().toJsonString(outPut); 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 {
}

@ -106,6 +106,9 @@ public class SDNYMainProcessController extends AbstractController {
@Resource @Resource
private GatherService gatherService; private GatherService gatherService;
@Resource
private RequestRecordService requestRecordService;
/** /**
* 查验发票 * 查验发票
*/ */
@ -117,6 +120,8 @@ public class SDNYMainProcessController extends AbstractController {
String userid = "101833"; String userid = "101833";
String dbName = "business"; String dbName = "business";
JSONObject checkInvoiceResult = null; JSONObject checkInvoiceResult = null;
RequestRecord singleInvoiceCheckRecord = requestRecordService.getBaseRequestRecord(JSONObject.toJSONString(pramsMap),
"/singleInvoiceCheck",pramsMap.get("invoiceCode"),pramsMap.get("invoiceNumber"), "singleInvoiceCheck");
//挡板开关 //挡板开关
if ("1".equals(isPresure)) { if ("1".equals(isPresure)) {
@ -129,6 +134,8 @@ public class SDNYMainProcessController extends AbstractController {
data.put("message", "success"); data.put("message", "success");
data.put("data", checkInvoiceResult); data.put("data", checkInvoiceResult);
requestRecordService.saveRecord(singleInvoiceCheckRecord, 0,0, JSONObject.toJSONString(data));
return ResponseEntity.ok(JSONObject.toJSONString(data)); return ResponseEntity.ok(JSONObject.toJSONString(data));
} }
@ -139,6 +146,9 @@ public class SDNYMainProcessController extends AbstractController {
log.info("查验类发票,执行查验操作后入库"); log.info("查验类发票,执行查验操作后入库");
//权限校验 //权限校验
if (StringUtils.isBlank(pramsMap.get("invoiceNumber"))) { if (StringUtils.isBlank(pramsMap.get("invoiceNumber"))) {
requestRecordService.saveRecord(singleInvoiceCheckRecord,1,1,JSONObject.toJSONString(R.error("发票号码不能为空!")),0);
return ResponseEntity.ok(JSONObject.toJSONString(R.error("发票号码不能为空!"))); return ResponseEntity.ok(JSONObject.toJSONString(R.error("发票号码不能为空!")));
} }
@ -150,10 +160,16 @@ public class SDNYMainProcessController extends AbstractController {
pramsMap.put("invoiceDate", billingDate); pramsMap.put("invoiceDate", billingDate);
pramsMap.put("billingDate", billingDate); pramsMap.put("billingDate", billingDate);
} else { } else {
requestRecordService.saveRecord(singleInvoiceCheckRecord,1,1,JSONObject.toJSONString(R.error("开票日期不能为空!")), 0);
return ResponseEntity.ok(JSONObject.toJSONString(R.error("开票日期不能为空!"))); return ResponseEntity.ok(JSONObject.toJSONString(R.error("开票日期不能为空!")));
} }
if (StringUtils.isBlank(pramsMap.get("invoiceType"))) { if (StringUtils.isBlank(pramsMap.get("invoiceType"))) {
requestRecordService.saveRecord(singleInvoiceCheckRecord,1,1,JSONObject.toJSONString(R.error("发票类型不能为空!")), 0);
return ResponseEntity.ok(JSONObject.toJSONString(R.error("发票类型不能为空!"))); return ResponseEntity.ok(JSONObject.toJSONString(R.error("发票类型不能为空!")));
} }
@ -164,10 +180,16 @@ public class SDNYMainProcessController extends AbstractController {
|| SNFplxEnum.QDZP.getSnFplxDm().equals(pramsMap.get("invoiceType")) || SNFplxEnum.QDZP.getSnFplxDm().equals(pramsMap.get("invoiceType"))
|| SNFplxEnum.QDPP.getSnFplxDm().equals(pramsMap.get("invoiceType"))) { || SNFplxEnum.QDPP.getSnFplxDm().equals(pramsMap.get("invoiceType"))) {
if (StringUtils.isBlank(pramsMap.get("totalAmount"))) { if (StringUtils.isBlank(pramsMap.get("totalAmount"))) {
requestRecordService.saveRecord(singleInvoiceCheckRecord,1,1,JSONObject.toJSONString(R.error("金额不能为空!")), 0);
return ResponseEntity.ok(JSONObject.toJSONString(R.error("金额不能为空!"))); return ResponseEntity.ok(JSONObject.toJSONString(R.error("金额不能为空!")));
} }
} else { } else {
if (StringUtils.isBlank(pramsMap.get("checkCode"))) { if (StringUtils.isBlank(pramsMap.get("checkCode"))) {
requestRecordService.saveRecord(singleInvoiceCheckRecord,1,1,JSONObject.toJSONString(R.error("校验码不能为空!")), 0);
return ResponseEntity.ok(JSONObject.toJSONString(R.error("校验码不能为空!"))); return ResponseEntity.ok(JSONObject.toJSONString(R.error("校验码不能为空!")));
} }
} }
@ -182,6 +204,9 @@ public class SDNYMainProcessController extends AbstractController {
log.info("uuid={}", uuid); log.info("uuid={}", uuid);
String notes = invoiceQueryService.checkingInvoiceInfo("business", uuid, getUserInfo()); String notes = invoiceQueryService.checkingInvoiceInfo("business", uuid, getUserInfo());
if (notes != null) { if (notes != null) {
requestRecordService.saveRecord(singleInvoiceCheckRecord,1,1,JSONObject.toJSONString(R.error(notes)), 0);
return ResponseEntity.ok(JSONObject.toJSONString(R.error(notes))); return ResponseEntity.ok(JSONObject.toJSONString(R.error(notes)));
} }
@ -201,12 +226,20 @@ public class SDNYMainProcessController extends AbstractController {
List<BaseTDxRecordInvoiceDetail> baseTDxRecordInvoiceDetail = baseTDxRecordInvoiceDetailDao.selectList(detailWrapper); List<BaseTDxRecordInvoiceDetail> baseTDxRecordInvoiceDetail = baseTDxRecordInvoiceDetailDao.selectList(detailWrapper);
DynamicContextHolder.push("business" + DbConstant.BUSINESS_READ); DynamicContextHolder.push("business" + DbConstant.BUSINESS_READ);
// RequestRecord singleCheckInvoiceRecord = null;
if(baseTDxRecordInvoiceDetail != null && baseTDxRecordInvoiceDetail.size() == 0){ if(baseTDxRecordInvoiceDetail != null && baseTDxRecordInvoiceDetail.size() == 0){
//先删除原有主数据,再查验更新主数据和明细数据 //先删除原有主数据,再查验更新主数据和明细数据
int delete = baseTDxRecordInvoiceDao.delete(recordWrapper); int delete = baseTDxRecordInvoiceDao.delete(recordWrapper);
if(delete > 0) { if(delete > 0) {
// singleCheckInvoiceRecord =requestRecordService.getBaseRequestRecord(JSONObject.toJSONString(pramsMap),
// "/singleInvoiceCheck", pramsMap.get("invoiceCode"),pramsMap.get("invoiceNumber"),
// "singleCheckInvoice",1);
checkInvoiceResult = snPushCheckRecordService.singleCheckInvoice(pramsMap); checkInvoiceResult = snPushCheckRecordService.singleCheckInvoice(pramsMap);
singleInvoiceCheckRecord.setActiveCall("singleCheckInvoice");
singleInvoiceCheckRecord.setActiveCallResponse(JSONObject.toJSONString(checkInvoiceResult));
if (!checkInvoiceResult.containsKey("code")) { if (!checkInvoiceResult.containsKey("code")) {
if (!checkInvoiceResult.containsKey("cyjg")) { if (!checkInvoiceResult.containsKey("cyjg")) {
checkInvoiceResult.put("invoiceNo", checkInvoiceResult.getString("invoiceNumber")); checkInvoiceResult.put("invoiceNo", checkInvoiceResult.getString("invoiceNumber"));
@ -228,6 +261,16 @@ public class SDNYMainProcessController extends AbstractController {
//查验结果保存 //查验结果保存
// saveCheckLog(pramsMap, checkInvoice); // saveCheckLog(pramsMap, checkInvoice);
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));
}
return ResponseEntity.ok(JSONObject.toJSONString(data)); return ResponseEntity.ok(JSONObject.toJSONString(data));
} else { } else {
TdxSaleRecordInvoice tdxSaleRecordInvoice = tdxSaleRecordInvoiceDao.selectByUuid(uuid); TdxSaleRecordInvoice tdxSaleRecordInvoice = tdxSaleRecordInvoiceDao.selectByUuid(uuid);
@ -252,18 +295,27 @@ public class SDNYMainProcessController extends AbstractController {
//查验结果保存 //查验结果保存
// saveCheckLog(pramsMap,checkInvoice); // saveCheckLog(pramsMap,checkInvoice);
requestRecordService.saveRecord(singleInvoiceCheckRecord,0,0,JSONObject.toJSONString(data));
return ResponseEntity.ok(JSONObject.toJSONString(data)); return ResponseEntity.ok(JSONObject.toJSONString(data));
} }
} }
} }
RequestRecord singleCheckInvoiceRecord =requestRecordService.getBaseRequestRecord(JSONObject.toJSONString(pramsMap),
"/singleInvoiceCheck", pramsMap.get("invoiceCode"),pramsMap.get("invoiceNumber"),
"singleCheckInvoice",1);
try { try {
checkInvoiceResult = snPushCheckRecordService.singleCheckInvoice(pramsMap); checkInvoiceResult = snPushCheckRecordService.singleCheckInvoice(pramsMap);
log.info("查验结果为:{}", checkInvoiceResult); log.info("查验结果为:{}", checkInvoiceResult);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
log.error("查验失败,errormsg:{}",e.getMessage()); log.error("查验失败,errormsg:{}",e.getMessage());
requestRecordService.saveRecord(singleCheckInvoiceRecord,1,1,JSONObject.toJSONString(R.error("查验失败,"+e.getMessage())),1);
requestRecordService.saveRecord(singleInvoiceCheckRecord,1,1,JSONObject.toJSONString(R.error("查验失败,"+e.getMessage())), 1);
return ResponseEntity.ok(JSONObject.toJSONString(R.error("查验失败,"+e.getMessage()))); return ResponseEntity.ok(JSONObject.toJSONString(R.error("查验失败,"+e.getMessage())));
} }
@ -272,6 +324,10 @@ public class SDNYMainProcessController extends AbstractController {
if (checkInvoiceResult.containsKey("cyjg") && !"0001".equals(checkInvoiceResult.getString("cyjg"))) { if (checkInvoiceResult.containsKey("cyjg") && !"0001".equals(checkInvoiceResult.getString("cyjg"))) {
R data = new R(); R data = new R();
data = errorInfo(checkInvoiceResult, data); data = errorInfo(checkInvoiceResult, data);
requestRecordService.saveRecord(singleInvoiceCheckRecord,1,1,JSONObject.toJSONString(data), 0);
requestRecordService.saveRecord(singleCheckInvoiceRecord,1,1,JSONObject.toJSONString(checkInvoiceResult), 0);
return ResponseEntity.ok(JSONObject.toJSONString(data)); return ResponseEntity.ok(JSONObject.toJSONString(data));
} }
@ -285,6 +341,9 @@ public class SDNYMainProcessController extends AbstractController {
checkInvoiceResult.put("invoiceNo", checkInvoiceResult.getString("invoiceNumber")); checkInvoiceResult.put("invoiceNo", checkInvoiceResult.getString("invoiceNumber"));
log.info("返回给影像系统的结果为:{}", checkInvoiceResult); log.info("返回给影像系统的结果为:{}", checkInvoiceResult);
signSaveInvoiceInfoService.saveQueryInvoiceResult(checkInvoiceResult, userid, "1", dbName); signSaveInvoiceInfoService.saveQueryInvoiceResult(checkInvoiceResult, userid, "1", dbName);
requestRecordService.saveRecord(singleInvoiceCheckRecord,0,0,JSONObject.toJSONString(data));
requestRecordService.saveRecord(singleCheckInvoiceRecord,0,0,JSONObject.toJSONString(checkInvoiceResult));
} }
return ResponseEntity.ok(JSONObject.toJSONString(data)); return ResponseEntity.ok(JSONObject.toJSONString(data));
@ -305,9 +364,15 @@ public class SDNYMainProcessController extends AbstractController {
} }
data.put("data", checkInvoiceResult); data.put("data", checkInvoiceResult);
requestRecordService.saveRecord(singleInvoiceCheckRecord,0,0,JSONObject.toJSONString(data));
return ResponseEntity.ok(JSONObject.toJSONString(data)); return ResponseEntity.ok(JSONObject.toJSONString(data));
} }
requestRecordService.saveRecord(singleInvoiceCheckRecord,1,1,JSONObject.toJSONString(R.error().put("data", checkInvoiceResult)),0);
return ResponseEntity.ok(JSONObject.toJSONString(R.error().put("data", checkInvoiceResult))); return ResponseEntity.ok(JSONObject.toJSONString(R.error().put("data", checkInvoiceResult)));
} }
@ -559,6 +624,21 @@ public class SDNYMainProcessController extends AbstractController {
log.info("影像系统同步数据:{}", JSONObject.toJSONString(snRequestObject)); log.info("影像系统同步数据:{}", JSONObject.toJSONString(snRequestObject));
List<RequestRecord> recordList = new ArrayList<>();
List<String> invoiceCodes = new ArrayList<>();
List<String> invoiceNos = new ArrayList<>();
if (snRequestObject.getInvoiceInfoList()!=null &&snRequestObject.getInvoiceInfoList().size()>0) {
snRequestObject.getInvoiceInfoList().stream().forEach(invoiceInfo->{
invoiceCodes.add(invoiceInfo.getInvoiceCode());
invoiceNos.add(invoiceInfo.getInvoiceNumber());
});
}
RequestRecord record = requestRecordService.getBaseRequestRecord(JSONObject.toJSONString(snRequestObject),
"/syncInvoiceInfo",
JSONObject.toJSONString(invoiceCodes),
JSONObject.toJSONString(invoiceNos),
"syncInvoiceInfo", 0);
String dbName = "business"; String dbName = "business";
// 入参统一在入口处理 // 入参统一在入口处理
String orgCode = snRequestObject.getCompCode(); String orgCode = snRequestObject.getCompCode();
@ -619,6 +699,9 @@ public class SDNYMainProcessController extends AbstractController {
if (!"ok".equals(result) && !"0000".equals(result)) { if (!"ok".equals(result) && !"0000".equals(result)) {
R data = new R(1000, "default success"); R data = new R(1000, "default success");
data.put("data", result); data.put("data", result);
requestRecordService.saveRecord(record,0, 0, JSONObject.toJSONString(R.error(result)));
return ResponseEntity.ok(JSONObject.toJSONString(R.error(result))); return ResponseEntity.ok(JSONObject.toJSONString(R.error(result)));
} }
SAPInvoiceInfo info = convertToSapOnject(invoice, imageId, compCode); SAPInvoiceInfo info = convertToSapOnject(invoice, imageId, compCode);
@ -631,16 +714,29 @@ public class SDNYMainProcessController extends AbstractController {
JSONObject request = new JSONObject(); JSONObject request = new JSONObject();
request.put("IS_INPUT", object); request.put("IS_INPUT", object);
RequestRecord pushCheckResultToSAPRecord =requestRecordService.getBaseRequestRecord(request.toJSONString(),
"/syncInvoiceInfo",
JSONObject.toJSONString(invoiceCodes),
JSONObject.toJSONString(invoiceNos),
"pushCheckResultToSAP", 1);
try { try {
//将信息推送到影像系统 //将信息推送到影像系统
result = snPushCheckRecordService.pushCheckResultToSAP(request.toJSONString()); result = snPushCheckRecordService.pushCheckResultToSAP(request.toJSONString());
R data = new R(1000, "default success"); R data = new R(1000, "default success");
data.put("data", result); data.put("data", result);
requestRecordService.saveRecord(pushCheckResultToSAPRecord,0, 0, JSONObject.toJSONString(data));
requestRecordService.saveRecord(record,0, 0, JSONObject.toJSONString(data));
return ResponseEntity.ok(JSONObject.toJSONString(data)); return ResponseEntity.ok(JSONObject.toJSONString(data));
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
log.error("", e); log.error("", e);
requestRecordService.saveRecord(pushCheckResultToSAPRecord,1, 1, JSONObject.toJSONString(R.error(CommonConstants.MSG_ERR_PUSH_SDNY)), 1);
requestRecordService.saveRecord(record,1, 1, JSONObject.toJSONString(R.error(CommonConstants.MSG_ERR_PUSH_SDNY)), 1);
return ResponseEntity.ok(JSONObject.toJSONString(R.error(CommonConstants.MSG_ERR_PUSH_SDNY))); return ResponseEntity.ok(JSONObject.toJSONString(R.error(CommonConstants.MSG_ERR_PUSH_SDNY)));
} }
} else { } else {
@ -660,6 +756,9 @@ public class SDNYMainProcessController extends AbstractController {
R data = new R(1000, "default success"); R data = new R(1000, "default success");
data.put("data", ""); data.put("data", "");
requestRecordService.saveRecord(record,0, 0, JSONObject.toJSONString(data));
return ResponseEntity.ok(JSONObject.toJSONString(data)); return ResponseEntity.ok(JSONObject.toJSONString(data));
} else { } else {
//删除对应的影像号 //删除对应的影像号
@ -677,6 +776,9 @@ public class SDNYMainProcessController extends AbstractController {
} }
R data = new R(1000, "default success"); R data = new R(1000, "default success");
data.put("data", ""); data.put("data", "");
requestRecordService.saveRecord(record,0, 0, JSONObject.toJSONString(data));
return ResponseEntity.ok(JSONObject.toJSONString(data)); return ResponseEntity.ok(JSONObject.toJSONString(data));
} }
@ -684,14 +786,23 @@ public class SDNYMainProcessController extends AbstractController {
} catch (TimeoutException exception) { } catch (TimeoutException exception) {
log.error("同步SAP失败,报错信息为:{}", exception); log.error("同步SAP失败,报错信息为:{}", exception);
exception.printStackTrace(); exception.printStackTrace();
requestRecordService.saveRecord(record,1, 1, JSONObject.toJSONString(R.error(CommonConstants.CONNECT_TIMEOUT)),1);
return ResponseEntity.ok(JSONObject.toJSONString(R.error(CommonConstants.CONNECT_TIMEOUT))); return ResponseEntity.ok(JSONObject.toJSONString(R.error(CommonConstants.CONNECT_TIMEOUT)));
} catch(NullPointerException exception){ } catch(NullPointerException exception){
log.error("同步SAP失败,报错信息为:{}", exception); log.error("同步SAP失败,报错信息为:{}", exception);
exception.printStackTrace(); exception.printStackTrace();
requestRecordService.saveRecord(record,1, 1, JSONObject.toJSONString(R.error(CommonConstants.NULL_POINTER_TIMEOUT)), 1);
return ResponseEntity.ok(JSONObject.toJSONString(R.error(CommonConstants.NULL_POINTER_TIMEOUT))); return ResponseEntity.ok(JSONObject.toJSONString(R.error(CommonConstants.NULL_POINTER_TIMEOUT)));
} catch(Exception exception){ } catch(Exception exception){
log.error("同步SAP失败,报错信息为:{}", exception); log.error("同步SAP失败,报错信息为:{}", exception);
exception.printStackTrace(); exception.printStackTrace();
requestRecordService.saveRecord(record,1, 1, JSONObject.toJSONString(R.error(CommonConstants.MSG_ERR_DEFAULT)),1);
return ResponseEntity.ok(JSONObject.toJSONString(R.error(CommonConstants.MSG_ERR_DEFAULT))); 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,19 @@
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);
ResponseEntity<?> reCall(RequestRecord requestRecord);
}

@ -0,0 +1,125 @@
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 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;
@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]);
}
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 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