From 296b67944a807fb918d78b50a2d89768ec4aca38 Mon Sep 17 00:00:00 2001
From: zhaowenxuan <chacca165@163.com>
Date: 星期五, 18 七月 2025 14:33:46 +0800
Subject: [PATCH] 接口加解密

---
 ltkj-admin/src/main/java/com/ltkj/web/controller/api/config/DecryptFilterConfig.java    |   22 ++
 ltkj-admin/src/main/java/com/ltkj/web/controller/api/utils/CryptoUtil.java              |   36 ++++
 ltkj-admin/src/main/java/com/ltkj/web/controller/api/DefaultController.java             |  344 +++++++++++++++++++++++++++++--------
 ltkj-admin/src/main/java/com/ltkj/web/controller/api/anno/Encrypt.java                  |   16 +
 ltkj-admin/src/main/java/com/ltkj/web/controller/api/filter/DecryptFilter.java          |   36 ++++
 ltkj-admin/src/main/java/com/ltkj/web/controller/api/wrapper/DecryptRequestWrapper.java |   33 +++
 ltkj-admin/src/main/java/com/ltkj/web/controller/api/advice/EncryptResponseAdvice.java  |   38 ++++
 7 files changed, 445 insertions(+), 80 deletions(-)

diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/api/DefaultController.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/DefaultController.java
index 6018389..f0a20b5 100644
--- a/ltkj-admin/src/main/java/com/ltkj/web/controller/api/DefaultController.java
+++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/DefaultController.java
@@ -9,17 +9,16 @@
 import com.itextpdf.text.Paragraph;
 import com.ltkj.common.core.domain.AjaxResult;
 import com.ltkj.framework.config.MatchUtils;
+import com.ltkj.hosp.domain.DictHosp;
 import com.ltkj.hosp.domain.TjCustomer;
 import com.ltkj.hosp.domain.TjOrder;
 import com.ltkj.hosp.domain.TjOrderYcxm;
 import com.ltkj.hosp.mapper.TjCustomerMapper;
-import com.ltkj.hosp.service.ITjCustomerService;
-import com.ltkj.hosp.service.ITjOrderDetailService;
-import com.ltkj.hosp.service.ITjOrderService;
-import com.ltkj.hosp.service.TjOrderYcxmService;
+import com.ltkj.hosp.service.*;
 import com.ltkj.hosp.vodomain.ShenGaoTiZhongVo;
 import com.ltkj.system.service.ISysConfigService;
 import com.ltkj.web.config.pdfutils.PdfUtils;
+import com.ltkj.web.controller.api.anno.Encrypt;
 import com.ltkj.web.controller.system.TjCheckController;
 import com.ltkj.web.controller.system.TjReportController;
 import io.swagger.annotations.ApiOperation;
@@ -27,7 +26,6 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import java.io.File;
 import java.io.IOException;
@@ -53,8 +51,6 @@
     private TjCheckController tjCheckController;
     @Autowired
     private TjCustomerMapper tjCustomerMapper;
-    @Resource
-    private ITjCustomerService customerService;
     @Autowired
     private ITjOrderService tjOrderService;
     @Autowired
@@ -63,6 +59,37 @@
     private ISysConfigService sysConfigService;
     @Autowired
     private TjOrderYcxmService tjOrderYcxmService;
+    @Autowired
+    private IDictHospService dictHospService;
+    @Autowired
+    private ITjCustomerService customerService;
+
+    /**************************************** 鎻愪緵缁橦IS璋冪敤 *************************************************/
+
+    /**
+     * 瀵逛簬HIS鎻愪緵
+     * 鏍规嵁韬唤璇佸彿鏌ヨ杩斿洖浣撴璁板綍锛氬寘鍚鍚嶃�佽韩浠借瘉鍙枫�佹�у埆銆佸嚭鐢熸棩鏈熴�佸勾榫勩�佷綋妫�鍙枫�佽仈绯荤數璇濓紝浣撴鏃ユ湡锛屾姤鍛婄姸鎬�
+     * @param json
+     * @return
+     */
+    @PostMapping("/getInfo")
+    public AjaxResult getInfo(@RequestBody String json){
+        JSONObject entries = JSONUtil.parseObj(json);
+        String card = entries.getStr("card");
+//        TjCustomer customer = tjCustomerMapper.getCusInfo(card);
+        String key = sysConfigService.selectConfigByKey("h5OrXcxQueryDate");
+        if (StrUtil.isBlank(key)){
+            key = "2025-05-01";
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        try {
+            Date date = sdf.parse(key);
+            List<Map<String ,Object>> customer = tjCustomerMapper.getCusInfoList(card,date);
+            return AjaxResult.success(customer);
+        } catch (ParseException e) {
+            return AjaxResult.error();
+        }
+    }
 
     /**
      * 鎻愪緵缁欎笁鏂硅皟鐢ㄧ殑鎶ュ憡鏌ョ湅鎺ュ彛
@@ -81,23 +108,6 @@
             return;
         }
         tjReportController.preview(response,true,tjNum);
-    }
-
-    @PostMapping("/viewReportUrl")
-    public AjaxResult viewReportUrl(@RequestBody String json){
-        JSONObject entries = JSONUtil.parseObj(json);
-        String tjNum = entries.getStr("tjNum");
-        LambdaQueryWrapper<TjOrder> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(TjOrder::getHeshouStatus,1);
-        wrapper.eq(TjOrder::getTjNumber,tjNum);
-        List<TjOrder> list = tjOrderService.list(wrapper);
-        if (list.isEmpty()){
-            return AjaxResult.error("鎶ュ憡鏈牳鏀�,璇锋牳鏀跺悗鏌ョ湅");
-        }
-        TjOrder tjOrder = tjOrderService.getOrderByTjNum(tjNum);
-        TjCustomer tjCustomer = tjCustomerMapper.selectById( tjOrder.getUserId());
-        String filePath = tjCustomer.getCusId() + tjNum + tjCustomer.getCusName() + "_鎶ュ憡.pdf";
-        return AjaxResult.success(filePath);
     }
 
     /**
@@ -215,29 +225,17 @@
         return JSONUtil.toBean(entries, AjaxResult.class);
     }
 
+    /**************************************** 鑷敤鎺ュ彛 鏈夊姞瑙e瘑 ******************************************/
+
     /**
-     * 瀵逛簬HIS鎻愪緵
-     * 鏍规嵁韬唤璇佸彿鏌ヨ杩斿洖浣撴璁板綍锛氬寘鍚鍚嶃�佽韩浠借瘉鍙枫�佹�у埆銆佸嚭鐢熸棩鏈熴�佸勾榫勩�佷綋妫�鍙枫�佽仈绯荤數璇濓紝浣撴鏃ユ湡锛屾姤鍛婄姸鎬�
-     * @param json
-     * @return
+     * 灏忕▼搴忔煡璇㈠垎闄㈠尯淇℃伅鍒楄〃
      */
-    @PostMapping("/getInfo")
-    public AjaxResult getInfo(@RequestBody String json){
-        JSONObject entries = JSONUtil.parseObj(json);
-        String card = entries.getStr("card");
-//        TjCustomer customer = tjCustomerMapper.getCusInfo(card);
-        String key = sysConfigService.selectConfigByKey("h5OrXcxQueryDate");
-        if (StrUtil.isBlank(key)){
-            key = "2025-05-01";
-        }
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-        try {
-            Date date = sdf.parse(key);
-            List<Map<String ,Object>> customer = tjCustomerMapper.getCusInfoList(card,date);
-            return AjaxResult.success(customer);
-        } catch (ParseException e) {
-            return AjaxResult.error();
-        }
+    @Encrypt
+    @PostMapping("/getHospList")
+    @ApiOperation(value = "灏忕▼搴忔煡璇㈠垎闄㈠尯淇℃伅鍒楄〃")
+    public AjaxResult getHospList() {
+        List<DictHosp> list = dictHospService.list();
+        return AjaxResult.success(list);
     }
 
     /**
@@ -246,6 +244,7 @@
      * @param json
      * @return
      */
+    @Encrypt
     @PostMapping("/getCusInfo")
     public AjaxResult getInfoCus(@RequestBody String json){
         JSONObject entries = JSONUtil.parseObj(json);
@@ -260,8 +259,226 @@
             if (customer == null) return AjaxResult.error();
             name = customer.getCusName();
         }
-        List<Map<String ,Object>> customer = tjCustomerMapper.getCusInfoListByCardAndName(card,name);
-        return AjaxResult.success(customer);
+        String key = sysConfigService.selectConfigByKey("h5OrXcxQueryDate");
+        if (StrUtil.isBlank(key)){
+            key = "2025-05-01";
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        try {
+            Date date = sdf.parse(key);
+            List<Map<String ,Object>> customer = tjCustomerMapper.getCusInfoListByCardAndName(card,name,date);
+            return AjaxResult.success(customer);
+        } catch (ParseException e) {
+            return AjaxResult.error();
+        }
+    }
+
+    /**
+     * 鎻愪緵缁欎笁鏂硅皟鐢ㄧ殑鎶ュ憡鏌ョ湅鎺ュ彛
+     * @param response
+     * @param json
+     */
+    @Encrypt
+    @PostMapping("/cusViewReport")
+    public void cusViewReport(HttpServletResponse response, @RequestBody String json) throws IOException {
+        JSONObject entries = JSONUtil.parseObj(json);
+        String tjNum = entries.getStr("tjNum");
+        LambdaQueryWrapper<TjOrder> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(TjOrder::getHeshouStatus,1);
+        wrapper.eq(TjOrder::getTjNumber,tjNum);
+        List<TjOrder> list = tjOrderService.list(wrapper);
+        if (list.isEmpty()){
+            return;
+        }
+        tjReportController.preview(response,true,tjNum);
+    }
+
+    /**
+     * 鎻愪緵缁欎笁鏂硅皟鐢ㄧ殑鎶ュ憡鏁版嵁鎺ュ彛
+     * @param json
+     * @return
+     */
+    @Encrypt
+    @PostMapping("/cusReportData")
+    public AjaxResult cusReportData(@RequestBody String json){
+        String tjNum = JSONUtil.parseObj(json).getStr("tjNum");
+        LambdaQueryWrapper<TjOrder> wrapper = new LambdaQueryWrapper<>();
+//        wrapper.eq(TjOrder::getHeshouStatus,1);
+        wrapper.eq(TjOrder::getTjNumber,tjNum);
+        List<TjOrder> list = tjOrderService.list(wrapper);
+        if (list.isEmpty()){
+            return AjaxResult.error("鏆傛棤鏁版嵁锛侊紒");
+        }
+        JSONObject entries = JSONUtil.parseObj(tjCheckController.updateCheckType(tjNum));
+
+        LambdaQueryWrapper<TjOrderYcxm> wq = new LambdaQueryWrapper<>();
+        wq.eq(TjOrderYcxm::getTjh, tjNum);
+        List<TjOrderYcxm> ycxms = tjOrderYcxmService.list(wq);
+        Map<String, List<TjOrderYcxm>> stringListMap = ycxms.stream().collect(Collectors.groupingBy(TjOrderYcxm::getParentName));
+        int xmXh = 1;
+        JSONArray jczs = JSONUtil.createArray();
+        for (Map.Entry<String, List<TjOrderYcxm>> entry : stringListMap.entrySet()) {
+            List<TjOrderYcxm> details = entry.getValue();
+            String xmmc = entry.getKey();
+            boolean isXmWrite = false;
+            int index = 1;
+            JSONObject object = JSONUtil.createObj();
+            for (TjOrderYcxm detail : details) {
+                if (!isXmWrite) {
+                    object.putOpt("xh",xmXh);
+                    object.putOpt("xmmc",xmmc);
+                    xmXh++;
+                }
+                String result = detail.getJcjg();
+                if (StrUtil.isNotBlank(result)) {
+                    result = result.replaceAll("鏈姤鍛婁粎瀵规湰娆℃鏌ヨ礋璐o紝涓村簥鍖荤敓渚濇嵁鐥呮儏濡傛湁鐤戦棶锛岃鍙婃椂澶嶆煡鎴栬繘涓�姝ユ鏌�", "");
+                    StringBuilder builder = new StringBuilder();
+                    if (StrUtil.isBlank(result.replaceAll("\n", "").trim())) continue;
+                    builder.append("    (").append(index).append(")").append(detail.getJcxm()).append(": ").append(result).append("\n");
+                    index++;
+                    result = builder.toString();
+                }
+                object.putOpt("result",result);
+            }
+            jczs.add(object);
+        }
+        entries.putOpt("jczs",jczs);
+
+        xmXh = 1;
+        JSONArray ysjy = JSONUtil.createArray();
+        for (Map.Entry<String, List<TjOrderYcxm>> entry : stringListMap.entrySet()) {
+            List<TjOrderYcxm> details = entry.getValue();
+            if(null !=details && !details.isEmpty()){
+                details= details.stream()
+                        .sorted(Comparator.comparing(TjOrderYcxm::getJcxm))
+                        .collect(Collectors.toList());
+                boolean isXmWrite = false;
+                int index1 = 1;
+                for (TjOrderYcxm detail : details) {
+                    JSONObject obj = JSONUtil.createObj();
+                    String xmmc = entry.getKey().toString();
+                    if (!isXmWrite) {
+                        isXmWrite = true;
+                        obj.putOpt("xh",xmXh);
+                        obj.putOpt("xmmc",xmmc);
+                        xmXh++;
+                    }
+                    String result = detail.getJcjg();
+                    if (StrUtil.isNotBlank(result)) {
+                        StringBuilder builder = new StringBuilder();
+                        if (StrUtil.isBlank(result.replaceAll("\n", "").trim())) continue;
+                        builder.append("    (").append(index1).append(")").append(detail.getJcxm()).append(": ").append(result).append("\n");
+                        index1++;
+                        result = builder.toString();
+                    }
+                    if (StrUtil.isNotBlank(result)) {
+                        obj.putOpt("result",result);
+                    } else {
+                        obj.putOpt("result","寤鸿瀹氭湡澶嶆煡");
+                    }
+                    String str = "     ";
+                    List<Map<String, Object>> maps = new ArrayList<>();
+
+                    String jynr = detail.getJynr();
+                    JSONArray array = JSONUtil.parseArray(jynr);
+                    for (Object object : array) {
+                        Map<String,Object> objectMap=new HashMap<>();
+                        JSONObject jsonObject = (JSONObject) object;
+                        String bt = jsonObject.getStr("bt");
+                        String nr = jsonObject.getStr("nr");
+                        objectMap.put("bt",bt);
+                        objectMap.put("nr",nr);
+                        if(null !=bt || null !=nr) maps.add(objectMap);
+                    }
+                    ArrayList<String> strings = new ArrayList<>();
+                    List<Map<String, Object>> collect1 = maps.stream().distinct().collect(Collectors.toList());
+                    for (Map<String, Object> objectMap : collect1) {
+                        String content = str + objectMap.get("bt").toString() + objectMap.get("nr").toString();
+                        if (StrUtil.isBlank(content)) content = "     ";
+                        strings.add(content);
+                    }
+                    obj.putOpt("contents",strings);
+                    ysjy.add(obj);
+                }
+            }
+        }
+
+        entries.putOpt("ysjy",ysjy);
+
+        removeNullFields(entries);
+        return JSONUtil.toBean(entries, AjaxResult.class);
+    }
+
+    @Encrypt
+    @PostMapping("/viewReportUrl")
+    public AjaxResult viewReportUrl(@RequestBody String json){
+        JSONObject entries = JSONUtil.parseObj(json);
+        String tjNum = entries.getStr("tjNum");
+        LambdaQueryWrapper<TjOrder> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(TjOrder::getHeshouStatus,1);
+        wrapper.eq(TjOrder::getTjNumber,tjNum);
+        List<TjOrder> list = tjOrderService.list(wrapper);
+        if (list.isEmpty()){
+            return AjaxResult.error("鎶ュ憡鏈牳鏀�,璇锋牳鏀跺悗鏌ョ湅");
+        }
+        TjOrder tjOrder = tjOrderService.getOrderByTjNum(tjNum);
+        TjCustomer tjCustomer = tjCustomerMapper.selectById( tjOrder.getUserId());
+        String filePath = tjCustomer.getCusId() + tjNum + tjCustomer.getCusName() + "_鎶ュ憡.pdf";
+        return AjaxResult.success(filePath);
+    }
+
+    /**
+     * 灏忕▼搴忕偣鍑讳綋妫�鎶ュ憡鏌ヨ璇︽儏,鏄剧ず韬珮浣撻噸浣撻噸鎸囨暟鏀剁缉鍘嬭垝寮犲帇
+     */
+    @Encrypt
+    @GetMapping("/getShenGaoTiZhong")
+    @ApiOperation(value = "灏忕▼搴�-浣撴鎶ュ憡鏌ヨ璇︽儏")
+    public AjaxResult getShenGaoTiZhong(@RequestParam @ApiParam(value = "浣撴鍙�") String tjNumber) {
+//        Map<String, Object> objectMap = new HashMap<>();
+        LambdaQueryWrapper<TjOrder> wq1 = new LambdaQueryWrapper<>();
+        wq1.eq(TjOrder::getTjNumber, tjNumber);
+        wq1.eq(TjOrder::getCheckStatus, 1);
+        TjOrder one = tjOrderService.getOne(wq1);
+        if (one == null) {
+            return AjaxResult.success("浣撴鏆傛湭瀹屾垚锛侊紒");
+        }
+
+        List<ShenGaoTiZhongVo> maps = detailService.getShenGaoTiZhongList(one.getTjNumber());
+
+        log.info("ltkj {}鐨勪綋妫�鎶ュ憡鏌ヨ璇︽儏"+maps,tjNumber);
+        return AjaxResult.success(maps);
+
+    }
+
+    /**
+     * 灏忕▼搴忕偣鍑讳綋妫�鎶ュ憡鏌ヨ璇︽儏,鏄剧ず韬珮浣撻噸浣撻噸鎸囨暟鏀剁缉鍘嬭垝寮犲帇
+     */
+    @Encrypt
+    @GetMapping("/updatePhone")
+    @ApiOperation(value = "灏忕▼搴�-淇敼鎵嬫満鍙锋帴鍙�")
+    public AjaxResult updatePhone(@RequestParam @ApiParam(value = "韬唤璇佸彿") String sfzh,
+                                  @RequestParam @ApiParam(value = "濮撳悕") String name,
+                                  @RequestParam @ApiParam(value = "鎵嬫満鍙�") String phone) {
+        if(StrUtil.isBlank(sfzh) || StrUtil.isBlank(name) || StrUtil.isBlank(phone)){
+            return AjaxResult.error("璇疯緭鍏ユ纭殑淇℃伅!");
+        }
+        if(!MatchUtils.isIdCard(sfzh)){
+            return AjaxResult.error("韬唤璇佸彿鏍煎紡閿欒 璇锋牳瀵瑰悗閲嶆柊杈撳叆!");
+        }
+        LambdaQueryWrapper<TjCustomer> wq = new LambdaQueryWrapper<>();
+        wq.eq(TjCustomer::getCusIdcard, sfzh);
+        wq.like(TjCustomer::getCusName, name);
+        TjCustomer customer = customerService.getOne(wq);
+        if(null != customer){
+            if(!MatchUtils.isMobileNO( phone)){
+                return AjaxResult.error("鎵嬫満鍙蜂笉姝g‘ 璇锋牳瀵瑰悗閲嶆柊杈撳叆!");
+            }
+            customer.setCusPhone( phone);
+            customerService.updateById(customer);
+            return AjaxResult.success("淇敼鎴愬姛!");
+        }
+        return AjaxResult.error("鏈煡璇㈠埌璇ヤ汉鍛�!");
+
     }
 
     public static void removeNullFields(JSONObject jsonObject) {
@@ -299,37 +516,4 @@
             jsonObject.remove(key);
         }
     }
-
-
-
-    /**
-     * 灏忕▼搴忕偣鍑讳綋妫�鎶ュ憡鏌ヨ璇︽儏,鏄剧ず韬珮浣撻噸浣撻噸鎸囨暟鏀剁缉鍘嬭垝寮犲帇
-     */
-    @GetMapping("/updatePhone")
-    @ApiOperation(value = "灏忕▼搴�-淇敼鎵嬫満鍙锋帴鍙�")
-    public AjaxResult updatePhone(@RequestParam @ApiParam(value = "韬唤璇佸彿") String sfzh,
-                                  @RequestParam @ApiParam(value = "濮撳悕") String name,
-                                  @RequestParam @ApiParam(value = "鎵嬫満鍙�") String phone) {
-        if(StrUtil.isBlank(sfzh) || StrUtil.isBlank(name) || StrUtil.isBlank(phone)){
-            return AjaxResult.error("璇疯緭鍏ユ纭殑淇℃伅!");
-        }
-        if(!MatchUtils.isIdCard(sfzh)){
-            return AjaxResult.error("韬唤璇佸彿鏍煎紡閿欒 璇锋牳瀵瑰悗閲嶆柊杈撳叆!");
-        }
-        LambdaQueryWrapper<TjCustomer> wq = new LambdaQueryWrapper<>();
-        wq.eq(TjCustomer::getCusIdcard, sfzh);
-        wq.like(TjCustomer::getCusName, name);
-        TjCustomer customer = customerService.getOne(wq);
-        if(null != customer){
-            if(!MatchUtils.isMobileNO( phone)){
-                return AjaxResult.error("鎵嬫満鍙蜂笉姝g‘ 璇锋牳瀵瑰悗閲嶆柊杈撳叆!");
-            }
-            customer.setCusPhone( phone);
-            customerService.updateById(customer);
-            return AjaxResult.success("淇敼鎴愬姛!");
-        }
-        return AjaxResult.error("鏈煡璇㈠埌璇ヤ汉鍛�!");
-
-    }
-
 }
diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/api/advice/EncryptResponseAdvice.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/advice/EncryptResponseAdvice.java
new file mode 100644
index 0000000..c5243d4
--- /dev/null
+++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/advice/EncryptResponseAdvice.java
@@ -0,0 +1,38 @@
+package com.ltkj.web.controller.api.advice;
+
+import com.ltkj.web.controller.api.anno.Encrypt;
+import com.ltkj.web.controller.api.utils.CryptoUtil;
+import org.springframework.core.MethodParameter;
+import org.springframework.http.MediaType;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+import org.springframework.http.server.ServerHttpRequest;
+import org.springframework.http.server.ServerHttpResponse;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
+
+@RestControllerAdvice
+public class EncryptResponseAdvice implements ResponseBodyAdvice<Object> {
+
+    @Override
+    public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
+        return returnType.hasMethodAnnotation(Encrypt.class)
+                || returnType.getContainingClass().isAnnotationPresent(Encrypt.class);
+    }
+
+    @Override
+    public Object beforeBodyWrite(Object body,
+                                  MethodParameter returnType,
+                                  MediaType selectedContentType,
+                                  Class<? extends HttpMessageConverter<?>> selectedConverterType,
+                                  ServerHttpRequest request,
+                                  ServerHttpResponse response) {
+
+        try {
+            String json = body instanceof String ? (String) body : new com.fasterxml.jackson.databind.ObjectMapper().writeValueAsString(body);
+            System.out.println("鍔犲瘑鍓嶏細" + json);
+            return CryptoUtil.encrypt(json);
+        } catch (Exception e) {
+            throw new RuntimeException("鍝嶅簲鍔犲瘑澶辫触", e);
+        }
+    }
+}
diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/api/anno/Encrypt.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/anno/Encrypt.java
new file mode 100644
index 0000000..a649712
--- /dev/null
+++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/anno/Encrypt.java
@@ -0,0 +1,16 @@
+package com.ltkj.web.controller.api.anno;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @Company: 瑗垮畨璺嘲绉戞妧鏈夐檺鍏徃
+ * @Author: zhaowenxuan
+ * @Date: 2025/7/17 17:31
+ */
+@Target({ElementType.METHOD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Encrypt {
+}
diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/api/config/DecryptFilterConfig.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/config/DecryptFilterConfig.java
new file mode 100644
index 0000000..bc6fa83
--- /dev/null
+++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/config/DecryptFilterConfig.java
@@ -0,0 +1,22 @@
+package com.ltkj.web.controller.api.config;
+
+import com.ltkj.web.controller.api.filter.DecryptFilter;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @Company: 瑗垮畨璺嘲绉戞妧鏈夐檺鍏徃
+ * @Author: zhaowenxuan
+ * @Date: 2025/7/17 17:27
+ */
+@Configuration
+public class DecryptFilterConfig {
+    @Bean
+    public FilterRegistrationBean<DecryptFilter> decryptFilter() {
+        FilterRegistrationBean<DecryptFilter> registrationBean = new FilterRegistrationBean<>();
+        registrationBean.setFilter(new DecryptFilter());
+        registrationBean.addUrlPatterns("/api/cusViewReport", "/api/cusReportData", "/api/getCusInfo","/api/getHospList","/api/updatePhone");
+        return registrationBean;
+    }
+}
diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/api/filter/DecryptFilter.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/filter/DecryptFilter.java
new file mode 100644
index 0000000..1a3b0c8
--- /dev/null
+++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/filter/DecryptFilter.java
@@ -0,0 +1,36 @@
+package com.ltkj.web.controller.api.filter;
+
+import com.ltkj.web.controller.api.utils.CryptoUtil;
+import com.ltkj.web.controller.api.wrapper.DecryptRequestWrapper;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.*;
+import javax.servlet.annotation.WebFilter;
+import javax.servlet.http.HttpServletRequest;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.util.stream.Collectors;
+
+//@Component
+//@WebFilter(urlPatterns = {"/api/cusViewReport", "/api/cusReportData", "/api/getCusInfo"})
+public class DecryptFilter implements Filter {
+
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+        HttpServletRequest httpRequest = (HttpServletRequest) request;
+
+        String body = new BufferedReader(httpRequest.getReader()).lines()
+                .collect(Collectors.joining(System.lineSeparator()));
+        System.out.println("璇锋眰鏁版嵁锛�"+body);
+        try {
+            String decryptedBody = CryptoUtil.decrypt(body);
+            System.out.println("瑙e瘑鍚庯細"+decryptedBody);
+            DecryptRequestWrapper wrappedRequest = new DecryptRequestWrapper(httpRequest, decryptedBody);
+            chain.doFilter(wrappedRequest, response);
+        } catch (Exception e) {
+            throw new ServletException("璇锋眰浣撹В瀵嗗け璐�", e);
+        }
+    }
+}
diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/api/utils/CryptoUtil.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/utils/CryptoUtil.java
new file mode 100644
index 0000000..44ab2b2
--- /dev/null
+++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/utils/CryptoUtil.java
@@ -0,0 +1,36 @@
+package com.ltkj.web.controller.api.utils;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
+import java.util.Base64;
+
+public class CryptoUtil {
+
+    private static final String KEY = "f$9Lz#Q@1vT!eW2%"; // AES瀵嗛挜锛�16浣嶏級
+    private static final String ALGORITHM = "AES";
+
+    // 鍔犲瘑
+    public static String encrypt(String plainText) throws Exception {
+        SecretKeySpec keySpec = new SecretKeySpec(KEY.getBytes(), ALGORITHM);
+        Cipher cipher = Cipher.getInstance(ALGORITHM);
+        cipher.init(Cipher.ENCRYPT_MODE, keySpec);
+        byte[] encrypted = cipher.doFinal(plainText.getBytes());
+        return Base64.getEncoder().encodeToString(encrypted);
+    }
+
+    // 瑙e瘑
+    public static String decrypt(String cipherText) throws Exception {
+        SecretKeySpec keySpec = new SecretKeySpec(KEY.getBytes(), ALGORITHM);
+        Cipher cipher = Cipher.getInstance(ALGORITHM);
+        cipher.init(Cipher.DECRYPT_MODE, keySpec);
+        byte[] decrypted = cipher.doFinal(Base64.getDecoder().decode(cipherText));
+        return new String(decrypted);
+    }
+
+    public static void main(String[] args) throws Exception {
+        String encrypt = encrypt("{\"card\": \"622722197210102079\",\"name\":\"鐒︽媺姘慭"}");
+        System.out.println("encrypt = " + encrypt);
+        String decrypt = decrypt(encrypt);
+        System.out.println("decrypt = " + decrypt);
+    }
+}
diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/api/wrapper/DecryptRequestWrapper.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/wrapper/DecryptRequestWrapper.java
new file mode 100644
index 0000000..a5c91a1
--- /dev/null
+++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/wrapper/DecryptRequestWrapper.java
@@ -0,0 +1,33 @@
+package com.ltkj.web.controller.api.wrapper;
+
+import javax.servlet.ReadListener;
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.io.*;
+
+public class DecryptRequestWrapper extends HttpServletRequestWrapper {
+
+    private final byte[] body;
+
+    public DecryptRequestWrapper(HttpServletRequest request, String decryptedBody) {
+        super(request);
+        this.body = decryptedBody.getBytes();
+    }
+
+    @Override
+    public ServletInputStream getInputStream() {
+        ByteArrayInputStream bais = new ByteArrayInputStream(body);
+        return new ServletInputStream() {
+            @Override public boolean isFinished() { return bais.available() == 0; }
+            @Override public boolean isReady() { return true; }
+            @Override public void setReadListener(ReadListener readListener) {}
+            @Override public int read() { return bais.read(); }
+        };
+    }
+
+    @Override
+    public BufferedReader getReader() {
+        return new BufferedReader(new InputStreamReader(getInputStream()));
+    }
+}

--
Gitblit v1.8.0