package com.saye.hospitalgd.scheduler.jobMethod; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.saye.hospitalgd.commons.date.DateDUtil; import com.saye.hospitalgd.commons.getBean.GetBeanUtil; import com.saye.hospitalgd.commons.log.LogUtil; import com.saye.hospitalgd.commons.string.StringDUtil; import com.saye.hospitalgd.entity.BankbillHistory; import com.saye.hospitalgd.service.BankbillGetinfoService; import com.saye.hospitalgd.service.BankbillHistoryService; import com.saye.hospitalgd.service.impl.BankbillGetinfoServiceImpl; import com.saye.hospitalgd.service.impl.BankbillHistoryServiceImpl; import com.saye.hospitalgd.service.system.ServiceParamsService; import com.saye.hospitalgd.service.system.impl.ServiceParamsServiceImpl; import com.saye.hospitalgd.util.HttpDutil; import lombok.extern.slf4j.Slf4j; import java.util.HashMap; import java.util.List; /** * @author Mr.zs * @date 2024/6/25 */ @Slf4j public class BankGetDataByWXAPI { public HashMap getDate(String id, String name, String trade_date, HashMap map) { HashMap resultMap = new HashMap<>(); String errCode = "0"; String errMsg = ""; BankbillHistoryService bankbillHistoryService = GetBeanUtil.getBean(BankbillHistoryServiceImpl.class); BankbillGetinfoService bankbillGetinfoService = GetBeanUtil.getBean(BankbillGetinfoServiceImpl.class); ServiceParamsService serviceParamsService = GetBeanUtil.getBean(ServiceParamsServiceImpl.class); boolean isOk = false; // 重新执行最多10次 还没获取到肯定有问题 不执行了 // 如果有传入时间 那就只执行一次 获取不到就还是获取不到 int num = "".equals(trade_date) ? 0 : 9; while (!isOk && num < 10) { num++; String bill_table_name = StringDUtil.changeNullToEmpty(map.get("BILL_TABLE_NAME")); String thirdConfigId = StringDUtil.changeNullToEmpty(map.get("ID")); String dateStr = ""; // 如果有传入时间 那就使用传入时间 if (StrUtil.isNotBlank(trade_date)) { DateTime parse = DateUtil.parse(trade_date); dateStr = DateUtil.format(parse, "yyyyMMdd"); } else { DateTime yesterday = DateUtil.yesterday(); dateStr = DateUtil.format(yesterday, "yyyyMMdd"); trade_date = DateUtil.format(yesterday, "yyyy-MM-dd"); } map.put("trade_date", dateStr); try { List> serviceParams = serviceParamsService.findParamValByParamCode("hgd_dmz"); String dmz_url = StringDUtil.changeNullToEmpty(serviceParams.get(0).get("PARAM_VAL")); String result = HttpDutil.post(dmz_url + "/getBankDataByWXAPI", map); // 解析返回的json字符串 JSONObject jsonObject = JSONObject.parseObject(result); errCode = StringDUtil.changeNullToEmpty(jsonObject.get("errCode")); errMsg = StringDUtil.changeNullToEmpty(jsonObject.get("errMsg")); // 如果没问题 解析返回的集合 if ("0".equals(errCode)) { String list = StringDUtil.changeNullToEmpty(jsonObject.get("list")); List bankbillHistories = JSONArray.parseArray(list, BankbillHistory.class); // 如果有数据 if (bankbillHistories != null && bankbillHistories.size() > 0) { // 先存一份原始的 这份只是留底查询 bankbillHistoryService.insertBankBillOriginal(bankbillHistories, trade_date, bill_table_name); // 再存一份修改替换其中一些字段的 bankbillHistoryService.insertAllBankHistory(bankbillHistories, trade_date, bill_table_name); } isOk = true; } else { isOk = false; } } catch (Exception e) { e.printStackTrace(); errCode = "999"; errMsg = "处理数据错误,原因:" + e.getMessage(); isOk = false; } // 记录数据获取记录 HashMap addMap = new HashMap<>(); addMap.put("trade_date", trade_date); addMap.put("quartz_id", id); addMap.put("quartz_name", name); addMap.put("bill_table_name", bill_table_name); addMap.put("thirdConfigId", thirdConfigId); if (isOk) { addMap.put("is_ok", "1"); } else { addMap.put("is_ok", "0"); } addMap.put("modify_time", DateDUtil.getCurrentDate(DateDUtil.yyyy_MM_dd_HH_mm_ss)); bankbillGetinfoService.insertBankbillGetinfo(addMap); // 判断是否成功 如果失败 执行休眠一小时 if (!isOk && num < 10) { try { // 记录日志 LogUtil.error(this.getClass(), errMsg); System.out.println("获取对账记录没有成功,1小时后重新执行"); Thread.sleep(1000 * 60 * 60); } catch (Exception e) { e.printStackTrace(); } } } resultMap.put("errCode", errCode); resultMap.put("errMsg", errMsg); return resultMap; } }