diff --git a/.gitignore b/.gitignore index 6f60b29c..1bd0223c 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,5 @@ /pt.iml /dxhy-lq-rpc/target/ /dxhy-lq-channel/target/ +/dxhy-oss/target/ +/dxhy-oss/dxhy-oss.iml \ No newline at end of file diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/controller/InterfaceController.java b/dxhy-erp/src/main/java/com/dxhy/erp/controller/InterfaceController.java index 08e18366..18432dd6 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/controller/InterfaceController.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/controller/InterfaceController.java @@ -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 voucherRecords = JSON.parseArray(zdata, VoucherRecord.class); @@ -1202,9 +1202,30 @@ public class InterfaceController extends AbstractController { @PostMapping("receiveErpInvoiceMessage") public String receiveErpInvoiceMessage(@RequestBody ErpInvoiceData erpInvoiceData){ OutPut outPut = new OutPut(); + + List zdata = JSON.parseArray(erpInvoiceData.getIS_INPUT().getZDATA(), ZDATA.class); + List fpdms = new ArrayList<>(); + List fphms = new ArrayList<>(); + List 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 { EsOutPutResp esOutPutResp=invoiceAuthService.receiveErpInvoiceMessage(erpInvoiceData.getIS_INPUT()); 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); }catch (Exception e){ log.info("{}接收erp发票数据出错,sapkey:{}",e,erpInvoiceData.getIS_INPUT().getSAPKEY()); @@ -1215,13 +1236,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 list = JSON.parseArray(zdata, Map.class); + + List fpdms = new ArrayList<>(); + List fphms = new ArrayList<>(); + for (Map 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 map:list){ String invoiceCode =(String) map.get("ZFPDM"); String invoiceNo = (String)map.get("ZFPHM"); @@ -1239,6 +1276,9 @@ public class InterfaceController extends AbstractController { es.setZTYPE("E"); es.setZMESSAGE("底账数据不存在"); outPut.setES_OUTPUT(es); + + requestRecordService.saveRecord(transferOutRecord, 1, 1, JsonUtils.getInstance().toJsonString(outPut), 0); + return JsonUtils.getInstance().toJsonString(outPut); } } @@ -1283,6 +1323,9 @@ public class InterfaceController extends AbstractController { } } } + + requestRecordService.saveRecord(transferOutRecord,0, 0, transfer); + return transfer; }catch (Exception e){ e.printStackTrace(); @@ -1293,9 +1336,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); } } + } diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/controller/RequestRecallController.java b/dxhy-erp/src/main/java/com/dxhy/erp/controller/RequestRecallController.java new file mode 100644 index 00000000..3567e79c --- /dev/null +++ b/dxhy-erp/src/main/java/com/dxhy/erp/controller/RequestRecallController.java @@ -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 { + + +} diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java b/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java index a954c619..b83ffc3b 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java @@ -106,6 +106,9 @@ public class SDNYMainProcessController extends AbstractController { @Resource private GatherService gatherService; + + @Resource + private RequestRecordService requestRecordService; /** * 查验发票 */ @@ -117,6 +120,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)) { @@ -129,6 +134,8 @@ public class SDNYMainProcessController extends AbstractController { data.put("message", "success"); data.put("data", checkInvoiceResult); + requestRecordService.saveRecord(singleInvoiceCheckRecord, 0,0, JSONObject.toJSONString(data)); + return ResponseEntity.ok(JSONObject.toJSONString(data)); } @@ -139,6 +146,9 @@ public class SDNYMainProcessController extends AbstractController { log.info("查验类发票,执行查验操作后入库"); //权限校验 if (StringUtils.isBlank(pramsMap.get("invoiceNumber"))) { + + requestRecordService.saveRecord(singleInvoiceCheckRecord,1,1,JSONObject.toJSONString(R.error("发票号码不能为空!")),0); + return ResponseEntity.ok(JSONObject.toJSONString(R.error("发票号码不能为空!"))); } @@ -150,10 +160,16 @@ public class SDNYMainProcessController extends AbstractController { pramsMap.put("invoiceDate", billingDate); pramsMap.put("billingDate", billingDate); } else { + + requestRecordService.saveRecord(singleInvoiceCheckRecord,1,1,JSONObject.toJSONString(R.error("开票日期不能为空!")), 0); + return ResponseEntity.ok(JSONObject.toJSONString(R.error("开票日期不能为空!"))); } if (StringUtils.isBlank(pramsMap.get("invoiceType"))) { + + requestRecordService.saveRecord(singleInvoiceCheckRecord,1,1,JSONObject.toJSONString(R.error("发票类型不能为空!")), 0); + return ResponseEntity.ok(JSONObject.toJSONString(R.error("发票类型不能为空!"))); } @@ -164,10 +180,16 @@ 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"))) { + + requestRecordService.saveRecord(singleInvoiceCheckRecord,1,1,JSONObject.toJSONString(R.error("金额不能为空!")), 0); + return ResponseEntity.ok(JSONObject.toJSONString(R.error("金额不能为空!"))); } } else { if (StringUtils.isBlank(pramsMap.get("checkCode"))) { + + requestRecordService.saveRecord(singleInvoiceCheckRecord,1,1,JSONObject.toJSONString(R.error("校验码不能为空!")), 0); + return ResponseEntity.ok(JSONObject.toJSONString(R.error("校验码不能为空!"))); } } @@ -182,6 +204,9 @@ public class SDNYMainProcessController extends AbstractController { log.info("uuid={}", uuid); String notes = invoiceQueryService.checkingInvoiceInfo("business", uuid, getUserInfo()); if (notes != null) { + + requestRecordService.saveRecord(singleInvoiceCheckRecord,1,1,JSONObject.toJSONString(R.error(notes)), 0); + return ResponseEntity.ok(JSONObject.toJSONString(R.error(notes))); } @@ -201,12 +226,20 @@ public class SDNYMainProcessController extends AbstractController { List baseTDxRecordInvoiceDetail = baseTDxRecordInvoiceDetailDao.selectList(detailWrapper); DynamicContextHolder.push("business" + DbConstant.BUSINESS_READ); +// RequestRecord singleCheckInvoiceRecord = null; if(baseTDxRecordInvoiceDetail != null && baseTDxRecordInvoiceDetail.size() == 0){ //先删除原有主数据,再查验更新主数据和明细数据 int delete = baseTDxRecordInvoiceDao.delete(recordWrapper); if(delete > 0) { +// singleCheckInvoiceRecord =requestRecordService.getBaseRequestRecord(JSONObject.toJSONString(pramsMap), +// "/singleInvoiceCheck", pramsMap.get("invoiceCode"),pramsMap.get("invoiceNumber"), +// "singleCheckInvoice",1); + checkInvoiceResult = snPushCheckRecordService.singleCheckInvoice(pramsMap); + singleInvoiceCheckRecord.setActiveCall("singleCheckInvoice"); + singleInvoiceCheckRecord.setActiveCallResponse(JSONObject.toJSONString(checkInvoiceResult)); + if (!checkInvoiceResult.containsKey("code")) { if (!checkInvoiceResult.containsKey("cyjg")) { checkInvoiceResult.put("invoiceNo", checkInvoiceResult.getString("invoiceNumber")); @@ -228,6 +261,16 @@ public class SDNYMainProcessController extends AbstractController { //查验结果保存 // 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)); } else { TdxSaleRecordInvoice tdxSaleRecordInvoice = tdxSaleRecordInvoiceDao.selectByUuid(uuid); @@ -252,18 +295,27 @@ public class SDNYMainProcessController extends AbstractController { //查验结果保存 // saveCheckLog(pramsMap,checkInvoice); + requestRecordService.saveRecord(singleInvoiceCheckRecord,0,0,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 { - checkInvoiceResult = snPushCheckRecordService.singleCheckInvoice(pramsMap); - log.info("查验结果为:{}", checkInvoiceResult); + checkInvoiceResult = snPushCheckRecordService.singleCheckInvoice(pramsMap); + + log.info("查验结果为:{}", checkInvoiceResult); } catch (Exception e) { e.printStackTrace(); 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()))); } @@ -272,6 +324,10 @@ public class SDNYMainProcessController extends AbstractController { if (checkInvoiceResult.containsKey("cyjg") && !"0001".equals(checkInvoiceResult.getString("cyjg"))) { R data = new R(); 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)); } @@ -285,6 +341,9 @@ public class SDNYMainProcessController extends AbstractController { checkInvoiceResult.put("invoiceNo", checkInvoiceResult.getString("invoiceNumber")); log.info("返回给影像系统的结果为:{}", checkInvoiceResult); 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)); @@ -305,9 +364,15 @@ public class SDNYMainProcessController extends AbstractController { } data.put("data", checkInvoiceResult); + + requestRecordService.saveRecord(singleInvoiceCheckRecord,0,0,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))); } @@ -559,6 +624,21 @@ public class SDNYMainProcessController extends AbstractController { log.info("影像系统同步数据:{}", JSONObject.toJSONString(snRequestObject)); + List recordList = new ArrayList<>(); + List invoiceCodes = new ArrayList<>(); + List 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 orgCode = snRequestObject.getCompCode(); @@ -619,6 +699,9 @@ public class SDNYMainProcessController extends AbstractController { if (!"ok".equals(result) && !"0000".equals(result)) { R data = new R(1000, "default success"); data.put("data", result); + + requestRecordService.saveRecord(record,0, 0, JSONObject.toJSONString(R.error(result))); + return ResponseEntity.ok(JSONObject.toJSONString(R.error(result))); } SAPInvoiceInfo info = convertToSapOnject(invoice, imageId, compCode); @@ -631,16 +714,29 @@ 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 { //将信息推送到影像系统 result = snPushCheckRecordService.pushCheckResultToSAP(request.toJSONString()); R data = new R(1000, "default success"); 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)); } catch (Exception e) { e.printStackTrace(); 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))); } } else { @@ -660,6 +756,9 @@ public class SDNYMainProcessController extends AbstractController { R data = new R(1000, "default success"); data.put("data", ""); + + requestRecordService.saveRecord(record,0, 0, JSONObject.toJSONString(data)); + return ResponseEntity.ok(JSONObject.toJSONString(data)); } else { //删除对应的影像号 @@ -677,6 +776,9 @@ public class SDNYMainProcessController extends AbstractController { } R data = new R(1000, "default success"); data.put("data", ""); + + requestRecordService.saveRecord(record,0, 0, JSONObject.toJSONString(data)); + return ResponseEntity.ok(JSONObject.toJSONString(data)); } @@ -684,14 +786,23 @@ public class SDNYMainProcessController extends AbstractController { } catch (TimeoutException exception) { log.error("同步SAP失败,报错信息为:{}", exception); 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))); } catch(NullPointerException exception){ log.error("同步SAP失败,报错信息为:{}", exception); 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))); } catch(Exception exception){ log.error("同步SAP失败,报错信息为:{}", exception); 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))); } diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/dao/RequestRecordDao.java b/dxhy-erp/src/main/java/com/dxhy/erp/dao/RequestRecordDao.java new file mode 100644 index 00000000..f43a9e6a --- /dev/null +++ b/dxhy-erp/src/main/java/com/dxhy/erp/dao/RequestRecordDao.java @@ -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 { + + /** + * 查询记录 + * @param portName 接口名 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @param status 请求状态 + * @param methodName 方法名 + * @return + */ + List selectRecordList(@Param("portName") String portName, + @Param("startTime") Date startTime, + @Param("endTime") Date endTime, + @Param("status") Integer status, + @Param("methodName") String methodName); +} diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/entity/RequestRecord.java b/dxhy-erp/src/main/java/com/dxhy/erp/entity/RequestRecord.java new file mode 100644 index 00000000..0399a12f --- /dev/null +++ b/dxhy-erp/src/main/java/com/dxhy/erp/entity/RequestRecord.java @@ -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; + +} diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/enums/RequestRecordEnum.java b/dxhy-erp/src/main/java/com/dxhy/erp/enums/RequestRecordEnum.java new file mode 100644 index 00000000..4745d048 --- /dev/null +++ b/dxhy-erp/src/main/java/com/dxhy/erp/enums/RequestRecordEnum.java @@ -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; + } +} diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/RequestRecordService.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/RequestRecordService.java new file mode 100644 index 00000000..3ffd368a --- /dev/null +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/RequestRecordService.java @@ -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 { + + int saveRecord(RequestRecord requestRecord,Integer failedTimes, Integer status, String responseDetail,Integer... failedReason); + + List 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); +} diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/RequestRecordServiceImpl.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/RequestRecordServiceImpl.java new file mode 100644 index 00000000..d4de92d1 --- /dev/null +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/RequestRecordServiceImpl.java @@ -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 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 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 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); + } + +} diff --git a/dxhy-erp/src/main/resources/mapper/RequestRecordMapper.xml b/dxhy-erp/src/main/resources/mapper/RequestRecordMapper.xml new file mode 100644 index 00000000..487a433d --- /dev/null +++ b/dxhy-erp/src/main/resources/mapper/RequestRecordMapper.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file