Zimo hace 1 día
padre
commit
ceeb6d5fb7

+ 13 - 1
yudao-server/src/main/java/cn/iocoder/yudao/server/controller/admin/TodoController.java

@@ -152,7 +152,7 @@ public class TodoController {
                 throw new ServiceException(new ErrorCode(1,"不存在OA用户"));
             }
         }
-        OaNoticeDO workcode2 = oaNoticeMapper.selectList("workcode", workcode).stream().max(Comparator.comparing(OaNoticeDO::getOaCreateTime))
+        OaNoticeDO workcode2 = oaNoticeMapper.selectList("work_code", workcode).stream().max(Comparator.comparing(OaNoticeDO::getOaCreateTime))
                 .orElse(null);
         List oaNotice = portalOaFlow.getOaNotice(workcode1.get(0).getOaId(), workcode2, workcode);
         return CommonResult.success(oaNotice);
@@ -185,4 +185,16 @@ public class TodoController {
         });
         return CommonResult.success("完成已读");
     }
+
+    @GetMapping("/oa/notice/readed")
+    @PermitAll
+    public CommonResult<String> oaNoticeReaded(String workcode) throws Exception {
+        List<OaNoticeDO> workCode = oaNoticeMapper.selectList("work_code", workcode);
+        workCode.forEach(item -> {
+            //设置为已读
+            item.setStatus("1");
+            oaNoticeMapper.updateById(item);
+        });
+        return CommonResult.success("完成已读");
+    }
 }

+ 2 - 0
yudao-server/src/main/java/cn/iocoder/yudao/server/controller/admin/vo/oa/IotOaNoticePageReqVO.java

@@ -38,4 +38,6 @@ public class IotOaNoticePageReqVO extends PageParam {
     @Schema(description = "crm的消息主键id", example = "8663")
     private String crmNoticeId;
 
+    @Schema(description = "状态")
+    private String status;
 }

+ 3 - 0
yudao-server/src/main/java/cn/iocoder/yudao/server/controller/admin/vo/oa/IotOaNoticeRespVO.java

@@ -45,4 +45,7 @@ public class IotOaNoticeRespVO {
     @ExcelProperty("crm的消息主键id")
     private String crmNoticeId;
 
+    private String status;
+
+
 }

+ 4 - 0
yudao-server/src/main/java/cn/iocoder/yudao/server/dal/dataobject/OaNoticeDO.java

@@ -32,6 +32,10 @@ public class OaNoticeDO extends BaseDO {
      * OA的创建时间
      */
     private String oaCreateTime;
+    /**
+     * 状态
+     */
+    private String status;
     /**
      * OA的创建人
      */

+ 26 - 8
yudao-server/src/main/java/cn/iocoder/yudao/server/service/PortalOaFlow.java

@@ -54,6 +54,7 @@ public class PortalOaFlow {
 
     private static String spk = "";
     private static String secret = "";
+    @Autowired
     private OaNoticeMapper oaNoticeMapper;
 
 
@@ -97,12 +98,24 @@ public class PortalOaFlow {
 
     // ==================== 新增:每次使用【全新的、无Cookie】的RestTemplate ====================
     private RestTemplate getNewRestTemplateWithoutCookie() {
-        return new RestTemplate(new HttpComponentsClientHttpRequestFactory(
+//        return new RestTemplate(new HttpComponentsClientHttpRequestFactory(
+//                HttpClients.custom()
+//                        .disableCookieManagement() // 彻底禁用Cookie,不保存、不携带
+//                        .setRedirectStrategy(new LaxRedirectStrategy())
+//                        .build()
+//        ));
+        RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory(
                 HttpClients.custom()
-                        .disableCookieManagement() // 彻底禁用Cookie,不保存、不携带
+                        .disableCookieManagement() // 彻底禁用Cookie
                         .setRedirectStrategy(new LaxRedirectStrategy())
                         .build()
         ));
+        // 关键:强制响应编码为 UTF-8
+        restTemplate.getMessageConverters().stream()
+                .filter(converter -> converter instanceof org.springframework.http.converter.StringHttpMessageConverter)
+                .forEach(converter -> ((org.springframework.http.converter.StringHttpMessageConverter) converter)
+                        .setDefaultCharset(java.nio.charset.StandardCharsets.UTF_8));
+        return restTemplate;
     }
 
     public ImmutableMap<String, Object> getOaTodo(String oaId, Integer pageNo ,Integer pageSize) throws Exception {
@@ -167,6 +180,9 @@ public class PortalOaFlow {
         headersOut.setContentType(MediaType.APPLICATION_JSON);
         headersOut.remove(HttpHeaders.COOKIE); // 保险清空
 
+        headersOut.setAcceptCharset(Collections.singletonList(java.nio.charset.StandardCharsets.UTF_8));
+        headersOut.add(HttpHeaders.ACCEPT, "application/json;charset=UTF-8");
+
         Map<String, Object> params = new HashMap<>();
         params.put("userId", oaId);
         if (oaNoticeDO != null) {
@@ -177,25 +193,27 @@ public class PortalOaFlow {
 
         RestTemplate noCookieRestTemplate = getNewRestTemplateWithoutCookie();
         //消息通知
-        JSONObject out = null;
+        String out = null;
         try {
-            out = noCookieRestTemplate.postForObject(
-                    "https://yfoa.keruioil.com/api/msgDataInfo/flow/get", requestEntityOut, JSONObject.class
-            );
+            out = noCookieRestTemplate.postForObject("https://yfoa.keruioil.com/api/msgDataInfo/flow/get", requestEntityOut, String.class);
         } catch (RestClientException e) {
             throw new ServiceException(new ErrorCode(1,"获取OA消息通知信息失败"));
         }
-        if (Objects.isNull(out)) {return new ArrayList();}
+        if (Objects.isNull(out)||StringUtils.isBlank(out)) {return new ArrayList();}
+        JSONObject out1 = JSON.parseObject(out);
         //查询的某个日期后面的未读消息中心
-        String data1 = out.getString("data");
+        String data1 = out1.getString("data");
         List<OaNoticeVo> oaNoticeDOS = JSON.parseArray(data1, OaNoticeVo.class);
         if (CollUtil.isEmpty(oaNoticeDOS)) {return  new ArrayList();}
         List<OaNoticeDO> collect = oaNoticeDOS.stream().map(e -> {
             OaNoticeDO oaNoticeDO1 = new OaNoticeDO();
             oaNoticeDO1.setOaCreateName(e.getCreatorName());
             oaNoticeDO1.setOaCreateTime(e.getCreateTime());
+            oaNoticeDO1.setTitle(e.getTitle());
             oaNoticeDO1.setOaCreator(e.getCreator());
             oaNoticeDO1.setDeleted(false);
+            //未读
+            oaNoticeDO1.setStatus("0");
             oaNoticeDO1.setWorkCode(workcode);
             return oaNoticeDO1;
         }).collect(Collectors.toList());

+ 2 - 1
yudao-server/src/main/java/cn/iocoder/yudao/server/service/oa/OaNoticeServiceImpl.java

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.server.service.oa;
 
+import cn.iocoder.yudao.framework.common.exception.ErrorCode;
 import cn.iocoder.yudao.server.controller.admin.vo.oa.IotOaNoticePageReqVO;
 import cn.iocoder.yudao.server.controller.admin.vo.oa.IotOaNoticeSaveReqVO;
 import cn.iocoder.yudao.server.dal.dataobject.OaNoticeDO;
@@ -55,7 +56,7 @@ public class OaNoticeServiceImpl implements OaNoticeService {
 
     private void validateIotOaNoticeExists(Long id) {
         if (iotOaNoticeMapper.selectById(id) == null) {
-            throw exception(IOT_OA_NOTICE_NOT_EXISTS);
+            throw exception(new ErrorCode(2,"不存在"));
         }
     }