使用泛型<T>,模塊化,反射思想進行多表數據推送

需求:有13個表,其中一個主表和12細表,主表用來記錄推送狀態,細表記錄12種病例的詳細信息,現在需要把這12張病例表數據進行數據推送;普通方法需要寫12個方法分別去推送數據然后修改狀態;現在可以通過模塊化思想去封裝通用接口;

通用數據處理方法

  /*** 通用的數據處理方法* @param dataList 數據列表* @param mbType MB類型名稱* @param gType G類型標識* @param dtoClass DTO類類型* @param result 結果列表*/private <T, D> void processMBData(List<T> dataList, String mbType, String gType, Class<D> dtoClass, List<TechBeianBingLiDetail> result) {if (CollUtil.isNotEmpty(dataList)) {dataList.forEach(item -> {try {D dto = BeanUtil.copyProperties(item, dtoClass);BeanUtil.setFieldValue(dto, "timestamp", DateUtil.format(DateUtil.date(), "yyyy/MM/dd HH:mm:ss"));BeanUtil.setFieldValue(dto, "flag", "i");BeanUtil.setFieldValue(dto, "mbid", gType);String jsonRequest = dto.toString();NcisReponseMsg ncisReponseMsg = proxyUtil.postCaseInfo(jsonRequest, mbType + "-" + BeanUtil.getFieldValue(dto, "ZJID"));PushStatusEnum pushStatus = "0".equals(ncisReponseMsg.getFlag())? PushStatusEnum.YI_TUI_SONG: PushStatusEnum.TUI_SONG_SHI_BAI;result.add(new TechBeianBingLiDetail().setBusinessId(String.valueOf(BeanUtil.getFieldValue(dto, "ZJID"))).setPushStatus(pushStatus.getStatus()));} catch (Exception e) {log.error("推送失敗{} data: {}, Error: {}",mbType, JSONUtil.toJsonStr(item), e.getMessage(), e);}});}}

因為我的數據要求json格式為:

[{"ZD":"timestamp","DA":"2020/11/02 21:11:30"}, 
{"ZD":"flag","DA":"i"},
{"ZD":"mbid","DA":"G01"},
{"ZD":"zjid","DA":"xxxx"},
{"ZD":"yyid","DA":"xxxx"},
......
{"ZD":"p1","DA":"123456"}]

因為我寫了一個通用類,重寫tostring方法,這12個病例繼承這個類,并重寫自己的同string方法,通過super.tostring調用父類方法就行;

ToStringIgnore是我自定義的json忽略注解;

ToStringAlias是我自定義的json別名注解;

package org.yunshu.medicaltechnology.proxys;import org.yunshu.medicaltechnology.annotation.ToStringAlias;
import org.yunshu.medicaltechnology.annotation.ToStringIgnore;import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;public class BaseDto {@Overridepublic String toString() {List<String> fields = new ArrayList<>();Class<?> clazz = this.getClass();while (clazz != null && clazz != Object.class) {Field[] declaredFields = clazz.getDeclaredFields();for (Field field : declaredFields) {field.setAccessible(true);// 1. 忽略被標記為 @ToStringIgnore 的字段if (field.isAnnotationPresent(ToStringIgnore.class)) {continue;}// 2. 獲取別名String fieldName = field.getName();if (field.isAnnotationPresent(ToStringAlias.class)) {fieldName = field.getAnnotation(ToStringAlias.class).value();}// 3. 讀取字段值并格式化try {Object value = field.get(this);fields.add(formatField(fieldName, value != null ? value.toString() : ""));} catch (IllegalAccessException e) {fields.add(formatField(fieldName, ""));}}clazz = clazz.getSuperclass(); // 處理繼承的字段}return "[" + String.join(", ", fields) + "]";}private String formatField(String fieldName, String fieldValue) {return "{\"ZD\":\"" + fieldName + "\",\"DA\":\"" + fieldValue + "\"}";}
}

最終實現:

   /*** 獲取并處理所有類型的數據* @return 推送成功的記錄數*/@Override@Scheduled(cron = "0 20 0 * * ?")public String insert() {ArrayList<TechBeianBingLiDetail> bo = new ArrayList<>();// 處理MB01數據processMBData(gMapper.getMB01(), "MB01", "G01", NcisCaseInfoG01Dto.class, bo);// 處理MB02數據processMBData(gMapper.getMB02(), "MB02", "G02", NcisCaseInfoG02Dto.class, bo);// 處理MB03數據processMBData(gMapper.getMB03(), "MB03", "G03", NcisCaseInfoG03Dto.class, bo);// 處理MB04數據processMBData(gMapper.getMB04(), "MB04", "G04", NcisCaseInfoG04Dto.class, bo);// 處理MB06數據processMBData(gMapper.getMB06(), "MB06", "G06", NcisCaseInfoG06Dto.class, bo);// 處理MB07數據processMBData(gMapper.getMB07(), "MB07", "G07", NcisCaseInfoG07Dto.class, bo);// 處理MB08數據processMBData(gMapper.getMB08(), "MB08", "G08", NcisCaseInfoG08Dto.class, bo);// 處理MB10數據processMBData(gMapper.getMB10(), "MB10", "G10", NcisCaseInfoG10Dto.class, bo);// 處理MB11數據processMBData(gMapper.getMB11(), "MB11", "G11", NcisCaseInfoG11Dto.class, bo);// 處理MB13數據processMBData(gMapper.getMB13(), "MB13", "G13", NcisCaseInfoG13Dto.class, bo);// 處理MB16數據processMBData(gMapper.getMb16(), "MB16", "G16", NcisCaseInfoG16Dto.class, bo);// 處理MB17數據processMBData(gMapper.getMb17(), "MB17", "G17", NcisCaseInfoG17Dto.class, bo);if(CollUtil.isNotEmpty(bo)){techBeianBingLiDetailMapper.batchUpdatePushStatus(bo);}return String.valueOf(bo.size());}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/90238.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/90238.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/90238.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

光流 | RAFT光流算法如何改進提升

RAFT(Recurrent All-Pairs Field Transforms)作為ECCV 2020最佳論文,已成為光流估計領域的標桿模型。其通過構建4D相關體金字塔和GRU迭代優化機制,在精度與泛化性上實現了突破。但針對其計算效率、大位移處理、跨場景泛化等問題,研究者提出了多維度改進方案,核心方向可系…

linux/ubuntu日志管理--/dev/log 的本質與作用

文章目錄 **一、基本概念****二、技術細節:UNIX域套接字****三、在不同日志系統中的角色****四、應用程序如何使用 `dev/log`****五、查看和驗證 `/dev/log`****六、總結 `/dev/log` 的核心作用**一、基本概念 /dev/log 是一個 UNIX域套接字(Unix Domain Socket),是Linux系…

EMC整改案例之(1):汽車NFC進入模塊BCI整改

EMC整改案例(1):汽車NFC進入模塊BCI整改 在汽車電子系統中,NFC(Near Field Communication)進入模塊用于實現無鑰匙進入功能,但它在電磁兼容(EMC)測試中常面臨挑戰。本案例聚焦于BCI(Bulk Current Injection)測試整改,該測試模擬大電流注入對設備的影響。以下是基于…

2025年INS SCI2區,靈活交叉變異灰狼算法GWO_C/M+集群任務調度,深度解析+性能實測

目錄1.摘要2.灰狼算法GWO原理3.靈活交叉變異灰狼算法GWO_C/M4.結果展示5.參考文獻6.代碼獲取7.算法輔導應用定制讀者交流1.摘要 隨著云計算的快速發展&#xff0c;受自然現象啟發的任務調度算法逐漸成為研究的熱點。灰狼算法&#xff08;GWO&#xff09;因其強大的收斂性和易于…

Java常用加密算法詳解與實戰代碼 - 附可直接運行的測試示例

&#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有堅忍不拔之志 &#x1f390; 個人CSND主頁——Micro麥可樂的博客 &#x1f425;《Docker實操教程》專欄以最新的Centos版本為基礎進行Docker實操教程&#xff0c;入門到實戰 &#x1f33a;《RabbitMQ》…

2025開發者工具鏈革命:AI賦能的效率躍遷

目錄引言&#xff1a;效率焦慮下的開發者生存現狀一、智能代碼編輯器&#xff1a;從輔助到主導的進化1.1 GitHub Copilot&#xff1a;全能型AI助手1.2 Cursor Pro&#xff1a;極致編碼體驗1.3 飛算JavaAI&#xff1a;垂直領域顛覆者二、版本控制革命&#xff1a;Git的AI進化論2…

“虛空”的物理、哲學悖論

一、虛空并非“完全真空”&#xff1a;量子場論揭示的“真空不空” 物理真空的本質 現代物理學中的“真空”并非絕對的空無一物&#xff0c;而是量子場的基態&#xff08;能量最低狀態&#xff09;。根據量子場論&#xff1a; 虛粒子漲落&#xff1a;真空中持續發生量子漲落&am…

CSP-S模擬賽二總結(實際難度大于CSP-S)

T1 很簡短&#xff0c;也很好做&#xff0c;第一題直接場切。 我的方法 首先要明確一件事&#xff1a;就是如果選了 ax,ya_{x,y}ax,y?&#xff0c;那么就必然要選 ay,xa_{y,x}ay,x?&#xff0c;所以第一步就在 ax,ya_{x,y}ax,y? 的基礎上加上 ay,xa_{y,x}ay,x?。 然后我…

旋轉屏幕優化

1.問題背景 從google原生算法&#xff0c;可以知道其有2個比較大的缺陷&#xff1a; 1) 通過重力傳感器傳來的x&#xff0c;y&#xff0c;z軸的加速度合成之后只有一個垂直往下的加速度&#xff0c;如果此時用戶在別的方向上有加速度&#xff0c;那么通過反余弦、反正切等計算…

Java---day2

七、IDEA開發工具 &#x1f4e6; 一、下載 IntelliJ IDEA 官網地址&#xff1a; &#x1f517; IntelliJ IDEA – the IDE for Pro Java and Kotlin Development 版本選擇&#xff1a; 版本說明Community Edition (CE)免費開源版本&#xff0c;適合 Java、Kotlin、Android…

RAL-2025 | 清華大學數字孿生驅動的機器人視覺導航!VR-Robo:面向視覺機器人導航與運動的現實-模擬-現實框架

作者&#xff1a; Shaoting Zhu, Linzhan Mou, Derun Li, Baijun Ye, Runhan Huang, Hang Zhao單位&#xff1a;清華大學交叉信息研究院&#xff0c;上海期智研究院&#xff0c;Galaxea AI&#xff0c;上海交通大學電子信息與電氣工程學院論文標題&#xff1a;VR-Robo: A Real-…

碰一碰發視頻 + 矩陣系統聚合平臺源碼搭建,支持OEM

隨著短視頻生態與多平臺運營需求的融合&#xff0c;“碰一碰發視頻 矩陣系統” 聚合平臺成為內容創作者與企業營銷的新基建。這類系統需實現近場交互觸發、多平臺內容分發、數據聚合分析的全流程閉環&#xff0c;其源碼搭建與定制開發需突破硬件交互與軟件矩陣的技術壁壘。核心…

緩存雪崩、緩存穿透、緩存預熱、緩存更新、緩存降級

1. 緩存雪崩&#xff08;Cache Avalanche&#xff09;定義&#xff1a;緩存雪崩是指大量緩存中的數據在同一時間過期&#xff0c;導致大量請求同時訪問數據庫&#xff0c;造成數據庫壓力驟增&#xff0c;甚至可能導致數據庫崩潰。原因&#xff1a;多個緩存的 key 在同一時間過期…

【unity實戰】Unity手搓腳本工具實現合并網格功能

注意:考慮到實戰的內容比較多,我將該內容分開,并全部整合放在【unity實戰】專欄里,感興趣的小伙伴可以前往逐一查看學習。 文章目錄 前言實戰1、簡單的合并網格實現2、設置統一的材質3、設置不同的多種材質4、多材質網格合并方案專欄推薦完結前言 有許多單獨的網格對象會影…

ThreadPoolTaskExecutor 的使用案例

ThreadPoolTaskExecutor 的使用案例 1. 依賴說明 <!-- Spring Retry&#xff08;用于任務重試&#xff09; --> <dependency><groupId>org.springframework.retry</groupId><artifactId>spring-retry</artifactId><version>1.3.1<…

0.3mg硝酸甘油舌下片:冠心病預防中的“消防員”

冠狀動脈疾病&#xff08;CAD&#xff09;如同一顆定時炸彈&#xff0c;即使在成功進行血運重建或藥物治療后&#xff0c;心絞痛急性發作的風險依然如影隨形。在冠心病管理的漫長戰役中&#xff0c;二級預防的核心目標不僅僅是延緩疾病進展&#xff0c;更是預防致命性心臟事件復…

【Spring源碼學習系列】基礎架構和環境搭建

一直以來都把精力花在中間件的研究和系統設計上&#xff0c;忽略了離我最近的spring&#xff0c;最近開始學習spring的源碼了&#xff0c;為了學習到成體系的spring知識和提高學習效率&#xff0c;想要找了一本書看&#xff0c;最終選的是郝佳的《Spring源碼深度解析&#xff0…

C++十大排序詳解(包括變種優化)

排序**基礎排序算法**1. **冒泡排序&#xff08;Bubble Sort&#xff09;**冒泡排序優化**1. 提前終止優化&#xff08;標志位優化&#xff09;****原理**&#xff1a;**實現示例**&#xff08;以C為例&#xff09;&#xff1a;**優點**&#xff1a;**2. 雙向冒泡排序&#xff…

React 性能優化實戰:用useTransition解決卡頓問題

文章目錄1. 概述2. 基本原理與語法3. 應用場景3.1 數據密集型界面的更新優化3.2 動態內容切換的平滑過渡3.3 搜索與過濾結果的實時展示4. 與其他相關Hook的對比5. 結合Suspense使用6. 注意事項1. 概述 useTransition Hook 。它允許開發者將一些非緊急的 UI 更新標記為 “過渡更…

基于Rust紅巖題材游戲、汽車控制系統、機器人運動學游戲實例

根據紅巖題材設計的關鍵游戲實例 以下是根據紅巖題材設計的關鍵游戲實例,結合Rust語言特性(如安全并發、ECS架構等)的框架性方案。所有設計均需符合Rust語法規范,實際開發需配合游戲引擎(如Bevy、Amethyst)。 核心系統模塊 // ECS架構示例(Bevy引擎) use bevy::prel…