Zimo 1 неделя назад
Родитель
Сommit
69f886068d

+ 98 - 0
yudao-server/src/main/java/cn/iocoder/yudao/server/controller/admin/SrmNoticeController.java

@@ -0,0 +1,98 @@
+package cn.iocoder.yudao.server.controller.admin;
+
+import cn.iocoder.yudao.server.controller.admin.vo.srm.IotSrmNoticePageReqVO;
+import cn.iocoder.yudao.server.controller.admin.vo.srm.IotSrmNoticeRespVO;
+import cn.iocoder.yudao.server.controller.admin.vo.srm.IotSrmNoticeSaveReqVO;
+import cn.iocoder.yudao.server.dal.dataobject.SrmNoticeDO;
+import cn.iocoder.yudao.server.service.srm.SrmNoticeService;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import java.util.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+
+@Tag(name = "管理后台 - OA消息通知")
+@RestController
+@RequestMapping("/rq/iot-srm-notice")
+@Validated
+public class SrmNoticeController {
+
+    @Resource
+    private SrmNoticeService srmNoticeService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建OA消息通知")
+    @PreAuthorize("@ss.hasPermission('rq:iot-srm-notice:create')")
+    public CommonResult<Long> createIotSrmNotice(@Valid @RequestBody IotSrmNoticeSaveReqVO createReqVO) {
+        return success(srmNoticeService.createIotSrmNotice(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新OA消息通知")
+    @PreAuthorize("@ss.hasPermission('rq:iot-srm-notice:update')")
+    public CommonResult<Boolean> updateIotSrmNotice(@Valid @RequestBody IotSrmNoticeSaveReqVO updateReqVO) {
+        srmNoticeService.updateIotSrmNotice(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除OA消息通知")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('rq:iot-srm-notice:delete')")
+    public CommonResult<Boolean> deleteIotSrmNotice(@RequestParam("id") Long id) {
+        srmNoticeService.deleteIotSrmNotice(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得OA消息通知")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('rq:iot-srm-notice:query')")
+    public CommonResult<IotSrmNoticeRespVO> getIotSrmNotice(@RequestParam("id") Long id) {
+        SrmNoticeDO iotSrmNotice = srmNoticeService.getIotSrmNotice(id);
+        return success(BeanUtils.toBean(iotSrmNotice, IotSrmNoticeRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得OA消息通知分页")
+    @PreAuthorize("@ss.hasPermission('rq:iot-srm-notice:query')")
+    public CommonResult<PageResult<IotSrmNoticeRespVO>> getIotSrmNoticePage(@Valid IotSrmNoticePageReqVO pageReqVO) {
+        PageResult<SrmNoticeDO> pageResult = srmNoticeService.getIotSrmNoticePage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, IotSrmNoticeRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出OA消息通知 Excel")
+    @PreAuthorize("@ss.hasPermission('rq:iot-srm-notice:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportIotSrmNoticeExcel(@Valid IotSrmNoticePageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<SrmNoticeDO> list = srmNoticeService.getIotSrmNoticePage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "OA消息通知.xls", "数据", IotSrmNoticeRespVO.class,
+                        BeanUtils.toBean(list, IotSrmNoticeRespVO.class));
+    }
+
+}

+ 33 - 4
yudao-server/src/main/java/cn/iocoder/yudao/server/controller/admin/TodoController.java

@@ -14,10 +14,8 @@ import cn.iocoder.yudao.module.system.util.DingtalkUtil;
 import cn.iocoder.yudao.server.dal.dataobject.CrmNoticeDO;
 import cn.iocoder.yudao.server.dal.dataobject.CrmPersonDO;
 import cn.iocoder.yudao.server.dal.dataobject.OaNoticeDO;
-import cn.iocoder.yudao.server.dal.mysql.CrmNoticeMapper;
-import cn.iocoder.yudao.server.dal.mysql.CrmPersonMapper;
-import cn.iocoder.yudao.server.dal.mysql.OaNoticeMapper;
-import cn.iocoder.yudao.server.dal.mysql.PmsMapper;
+import cn.iocoder.yudao.server.dal.dataobject.SrmNoticeDO;
+import cn.iocoder.yudao.server.dal.mysql.*;
 import cn.iocoder.yudao.server.rest.CrmRest;
 import cn.iocoder.yudao.server.rest.SrmRest;
 import cn.iocoder.yudao.server.service.PortalOaFlow;
@@ -62,6 +60,8 @@ public class TodoController {
     private CrmPersonMapper crmPersonMapper;
     @Autowired
     private SrmRest srmRest;
+    @Autowired
+    private SrmNoticeMapper srmNoticeMapper;
 
     @GetMapping("/oa")
     @PermitAll
@@ -164,6 +164,16 @@ public class TodoController {
         }
     }
 
+    @GetMapping("/srm/notice")
+    @PermitAll
+    public CommonResult<List> srmNotice(String workcode) throws Exception {
+        List<SrmNoticeDO> srmNotices = srmNoticeMapper.selectList("work_code", workcode);
+        SrmNoticeDO newestNoticeDO = srmNotices.stream().max(Comparator.comparing(SrmNoticeDO::getSrmCreateTime))
+                .orElse(null);
+        List srmNotice = srmRest.getSrmNotice(workcode, newestNoticeDO);
+        return CommonResult.success(srmNotice);
+    }
+
     @GetMapping("/oa/notice")
     @PermitAll
     public CommonResult<List> oaNotice(String workcode) throws Exception {
@@ -197,6 +207,13 @@ public class TodoController {
         return CommonResult.success(workCode.stream().sorted(Comparator.comparing(OaNoticeDO::getOaCreateTime).reversed()).collect(Collectors.toList()));
     }
 
+    @GetMapping("/srm/notice/self")
+    @PermitAll
+    public CommonResult<List> srmNoticeSelfSystem(String workcode) throws Exception {
+        List<SrmNoticeDO> workCode = srmNoticeMapper.selectList("work_code", workcode);
+        return CommonResult.success(workCode.stream().sorted(Comparator.comparing(SrmNoticeDO::getSrmCreateTime).reversed()).collect(Collectors.toList()));
+    }
+
     @GetMapping("/crm/notice/readed")
     @PermitAll
     public CommonResult<String> crmNoticeReaded(String workcode) throws Exception {
@@ -209,6 +226,18 @@ public class TodoController {
         return CommonResult.success("完成已读");
     }
 
+    @GetMapping("/srm/notice/readed")
+    @PermitAll
+    public CommonResult<String> srmNoticeReaded(String workcode) throws Exception {
+        List<SrmNoticeDO> workCode = srmNoticeMapper.selectList("work_code", workcode);
+        workCode.forEach(item -> {
+            //设置为已读
+            item.setStatus("1");
+            srmNoticeMapper.updateById(item);
+        });
+        return CommonResult.success("完成已读");
+    }
+
     @GetMapping("/oa/notice/readed")
     @PermitAll
     public CommonResult<String> oaNoticeReaded(String workcode) throws Exception {

+ 56 - 0
yudao-server/src/main/java/cn/iocoder/yudao/server/controller/admin/vo/srm/IotSrmNoticePageReqVO.java

@@ -0,0 +1,56 @@
+package cn.iocoder.yudao.server.controller.admin.vo.srm;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - OA消息通知分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class IotSrmNoticePageReqVO extends PageParam {
+
+    @Schema(description = "srm的创建人")
+    private String srmCreator;
+
+    @Schema(description = "srm的创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private String[] srmCreateTime;
+
+    @Schema(description = "srm的创建人", example = "张三")
+    private String srmCreateName;
+
+    @Schema(description = "消息标题")
+    private String title;
+
+    @Schema(description = "消息内容")
+    private String content;
+
+    @Schema(description = "图片地址", example = "https://www.iocoder.cn")
+    private String imgUrl;
+
+    @Schema(description = "请求地址", example = "https://www.iocoder.cn")
+    private String reqUrl;
+
+    @Schema(description = "读取状态", example = "2")
+    private String readStatus;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "工号")
+    private String workCode;
+
+    @Schema(description = "srm的消息主键id", example = "23034")
+    private String crmNoticeId;
+
+    @Schema(description = "状态", example = "2")
+    private String status;
+
+}

+ 68 - 0
yudao-server/src/main/java/cn/iocoder/yudao/server/controller/admin/vo/srm/IotSrmNoticeRespVO.java

@@ -0,0 +1,68 @@
+package cn.iocoder.yudao.server.controller.admin.vo.srm;
+
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - OA消息通知 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class IotSrmNoticeRespVO {
+
+    @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "7204")
+    @ExcelProperty("主键id")
+    private Long id;
+
+    @Schema(description = "srm的创建人")
+    @ExcelProperty("srm的创建人")
+    private String srmCreator;
+
+    @Schema(description = "srm的创建时间")
+    @ExcelProperty("srm的创建时间")
+    private String srmCreateTime;
+
+    @Schema(description = "srm的创建人", example = "张三")
+    @ExcelProperty("srm的创建人")
+    private String srmCreateName;
+
+    @Schema(description = "消息标题", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("消息标题")
+    private String title;
+
+    @Schema(description = "消息内容")
+    @ExcelProperty("消息内容")
+    private String content;
+
+    @Schema(description = "图片地址", example = "https://www.iocoder.cn")
+    @ExcelProperty("图片地址")
+    private String imgUrl;
+
+    @Schema(description = "请求地址", example = "https://www.iocoder.cn")
+    @ExcelProperty("请求地址")
+    private String reqUrl;
+
+    @Schema(description = "读取状态", example = "2")
+    @ExcelProperty("读取状态")
+    private String readStatus;
+
+    @Schema(description = "创建时间")
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "工号")
+    @ExcelProperty("工号")
+    private String workCode;
+
+    @Schema(description = "srm的消息主键id", example = "23034")
+    @ExcelProperty("srm的消息主键id")
+    private String crmNoticeId;
+
+    @Schema(description = "状态", example = "2")
+    @ExcelProperty("状态")
+    private String status;
+
+}

+ 50 - 0
yudao-server/src/main/java/cn/iocoder/yudao/server/controller/admin/vo/srm/IotSrmNoticeSaveReqVO.java

@@ -0,0 +1,50 @@
+package cn.iocoder.yudao.server.controller.admin.vo.srm;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.*;
+
+@Schema(description = "管理后台 - OA消息通知新增/修改 Request VO")
+@Data
+public class IotSrmNoticeSaveReqVO {
+
+    @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "7204")
+    private Long id;
+
+    @Schema(description = "srm的创建人")
+    private String srmCreator;
+
+    @Schema(description = "srm的创建时间")
+    private String srmCreateTime;
+
+    @Schema(description = "srm的创建人", example = "张三")
+    private String srmCreateName;
+
+    @Schema(description = "消息标题", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotEmpty(message = "消息标题不能为空")
+    private String title;
+
+    @Schema(description = "消息内容")
+    private String content;
+
+    @Schema(description = "图片地址", example = "https://www.iocoder.cn")
+    private String imgUrl;
+
+    @Schema(description = "请求地址", example = "https://www.iocoder.cn")
+    private String reqUrl;
+
+    @Schema(description = "读取状态", example = "2")
+    private String readStatus;
+
+    @Schema(description = "工号")
+    private String workCode;
+
+    @Schema(description = "srm的消息主键id", example = "23034")
+    private String crmNoticeId;
+
+    @Schema(description = "状态", example = "2")
+    private String status;
+
+}

+ 72 - 0
yudao-server/src/main/java/cn/iocoder/yudao/server/dal/dataobject/SrmNoticeDO.java

@@ -0,0 +1,72 @@
+package cn.iocoder.yudao.server.dal.dataobject;
+
+import lombok.*;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * OA消息通知 DO
+ *
+ * @author 超级管理员
+ */
+@TableName("rq_iot_srm_notice")
+@KeySequence("rq_iot_srm_notice_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SrmNoticeDO extends BaseDO {
+
+    /**
+     * 主键id
+     */
+    @TableId
+    private Long id;
+    /**
+     * srm的创建人
+     */
+    private String srmCreator;
+    /**
+     * srm的创建时间
+     */
+    private String srmCreateTime;
+    /**
+     * srm的创建人
+     */
+    private String srmCreateName;
+    /**
+     * 消息标题
+     */
+    private String title;
+    /**
+     * 消息内容
+     */
+    private String content;
+    /**
+     * 图片地址
+     */
+    private String imgUrl;
+    /**
+     * 请求地址
+     */
+    private String reqUrl;
+    /**
+     * 读取状态
+     */
+    private String readStatus;
+    /**
+     * 工号
+     */
+    private String workCode;
+    /**
+     * srm的消息主键id
+     */
+    private String crmNoticeId;
+    /**
+     * 状态
+     */
+    private String status;
+
+}

+ 35 - 0
yudao-server/src/main/java/cn/iocoder/yudao/server/dal/mysql/SrmNoticeMapper.java

@@ -0,0 +1,35 @@
+package cn.iocoder.yudao.server.dal.mysql;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.server.controller.admin.vo.srm.IotSrmNoticePageReqVO;
+import cn.iocoder.yudao.server.dal.dataobject.SrmNoticeDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * OA消息通知 Mapper
+ *
+ * @author 超级管理员
+ */
+@Mapper
+public interface SrmNoticeMapper extends BaseMapperX<SrmNoticeDO> {
+
+    default PageResult<SrmNoticeDO> selectPage(IotSrmNoticePageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<SrmNoticeDO>()
+                .eqIfPresent(SrmNoticeDO::getSrmCreator, reqVO.getSrmCreator())
+                .betweenIfPresent(SrmNoticeDO::getSrmCreateTime, reqVO.getSrmCreateTime())
+                .likeIfPresent(SrmNoticeDO::getSrmCreateName, reqVO.getSrmCreateName())
+                .eqIfPresent(SrmNoticeDO::getTitle, reqVO.getTitle())
+                .eqIfPresent(SrmNoticeDO::getContent, reqVO.getContent())
+                .eqIfPresent(SrmNoticeDO::getImgUrl, reqVO.getImgUrl())
+                .eqIfPresent(SrmNoticeDO::getReqUrl, reqVO.getReqUrl())
+                .eqIfPresent(SrmNoticeDO::getReadStatus, reqVO.getReadStatus())
+                .betweenIfPresent(SrmNoticeDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(SrmNoticeDO::getWorkCode, reqVO.getWorkCode())
+                .eqIfPresent(SrmNoticeDO::getCrmNoticeId, reqVO.getCrmNoticeId())
+                .eqIfPresent(SrmNoticeDO::getStatus, reqVO.getStatus())
+                .orderByDesc(SrmNoticeDO::getId));
+    }
+
+}

+ 92 - 8
yudao-server/src/main/java/cn/iocoder/yudao/server/rest/SrmRest.java

@@ -5,14 +5,16 @@ import cn.iocoder.yudao.framework.common.exception.ServiceException;
 import cn.iocoder.yudao.module.system.controller.admin.auth.vo.AuthOaLoginReqVO;
 import cn.iocoder.yudao.module.system.oa.SslSkippingRestTemplate;
 import cn.iocoder.yudao.module.system.service.auth.AdminAuthService;
+import cn.iocoder.yudao.server.dal.dataobject.SrmNoticeDO;
+import cn.iocoder.yudao.server.dal.mysql.SrmNoticeMapper;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.google.common.collect.ImmutableMap;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.MediaType;
+import org.springframework.http.*;
 import org.springframework.stereotype.Component;
 import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
@@ -20,10 +22,9 @@ import org.springframework.web.client.RestClientException;
 import org.springframework.web.client.RestTemplate;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Objects;
+import java.time.Instant;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Component
 public class SrmRest {
@@ -31,8 +32,12 @@ public class SrmRest {
     private String srmTodoUrl;
     @Value("${srm.done}")
     private String srmDoneUrl;
+    @Value("${srm.notice}")
+    private String srmNoticeUrl;
     @Resource
     private AdminAuthService authService;
+    @Autowired
+    private SrmNoticeMapper srmNoticeMapper;
 
     /**
      * 获取SRM的待办及已办的数量
@@ -75,6 +80,7 @@ public class SrmRest {
         }
         System.out.println("result srm todo:" + todoStr);
         JSONArray todoList = JSON.parseArray(JSON.toJSONString(JSON.parseObject(todoStr).get("content")));
+        Integer todoTotalElements = Integer.valueOf(JSON.toJSONString(JSON.parseObject(todoStr).get("totalElements")));
 
         //待办消息处理
         Map<String, Object> doneRequestBody = new LinkedHashMap<>();
@@ -89,10 +95,88 @@ public class SrmRest {
         String doneStr = restTemplate.postForObject(srmDoneUrl, requestEntitydone, String.class);
         System.out.println("result srm done:" + doneStr);
         JSONArray doneList = JSON.parseArray(JSON.toJSONString(JSON.parseObject(doneStr).get("content")));
+        Integer doneTotalElements = Integer.valueOf(JSON.toJSONString(JSON.parseObject(doneStr).get("totalElements")));
         //已办消息处理
-        return ImmutableMap.of("todoList", todoList, "doneList", doneList,"todoCount", doneList.size(),"doneCount", doneList.size());
+        return ImmutableMap.of("todoList", todoList, "doneList", doneList,"todoCount", todoTotalElements,"doneCount", doneTotalElements);
 
     }
 
+    public static void main(String[] args) {
+        String date1 = "2026-04-30T20:00:00.209Z";
+        String date2 = "2025-12-25T12:00:00.000Z";
+
+        // 1. 转成时间戳
+        Instant instant1 = Instant.parse(date1);
+        Instant instant2 = Instant.parse(date2);
+
+        // 2. 比较大小
+        if (instant1.isAfter(instant2)) {
+            System.out.println("date1 比 date2 晚");
+        } else if (instant1.isBefore(instant2)) {
+            System.out.println("date1 比 date2 早");
+        } else {
+            System.out.println("两个时间一样");
+        }
+    }
+    public List getSrmNotice(String workcode, SrmNoticeDO srmNoticeDO) {
+        AuthOaLoginReqVO reqVO = new AuthOaLoginReqVO();
+        reqVO.setUsername(workcode);
+        String tokenStr = authService.srmSsoToken(reqVO);
+        String token = String.valueOf(JSON.parseObject(tokenStr).get("msg"));
+        if (Objects.isNull(token)||"null".equals(token)){
+            throw new ServiceException(new ErrorCode(3,"srm获取token异常"));
+        }
+        HttpHeaders headers = new HttpHeaders();
+        headers.set("Authorization", "Bearer "+token);
+        headers.setContentType(MediaType.APPLICATION_JSON);
+
+
+        // 2. 创建请求体参数
+        Map<String, Object> requestBody = new LinkedHashMap<>();
+
+        requestBody.put("size", 1000);
+        requestBody.put("page", 0);
+        requestBody.put("sort", "createdDate,DESC");
+        requestBody.put("propertyNames", "readStatus");
+        requestBody.put("propertyValues", 0);
+        System.out.println("==============================" + JSON.toJSONString(requestBody));
+        HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestBody, headers);
+        RestTemplate restTemplate = SslSkippingRestTemplate.createRestTemplate();
+        String todoStr = null;
+        try {
+            ResponseEntity<String> exchange = restTemplate.exchange(srmNoticeUrl, HttpMethod.GET, requestEntity, String.class);
+            todoStr = exchange.getBody();
+            List<JSONObject> jsonObjects = JSON.parseArray(todoStr, JSONObject.class);
+            if (Objects.isNull(jsonObjects)){
+                return new ArrayList<>();
+            }
+            List<JSONObject> needInsert = jsonObjects.stream().filter(e -> {
+                String createdDate = JSON.toJSONString(e.get("createdDate"));
+                if (StringUtils.isBlank(createdDate)) {
+                    return false;
+                }
+                Instant instant1 = Instant.parse(createdDate);
+                Instant instant2 = Instant.parse(srmNoticeDO.getSrmCreateTime());
+                return instant1.isAfter(instant2);
+            }).collect(Collectors.toList());
+            List<SrmNoticeDO> collect = needInsert.stream().map(f -> {
+                SrmNoticeDO srmNoticeDO1 = new SrmNoticeDO();
+                srmNoticeDO1.setDeleted(false);
+                srmNoticeDO1.setSrmCreateTime(String.valueOf(f.get("createdDate")));
+                srmNoticeDO1.setSrmCreator(String.valueOf(f.get("userId")));
+                JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(f.get("information")));
+                srmNoticeDO1.setTitle(jsonObject.getString("title"));
+                srmNoticeDO1.setContent(jsonObject.getString("content"));
+                srmNoticeDO1.setReadStatus("0");
+                srmNoticeDO1.setImgUrl(jsonObject.getString("imgUrl"));
+                srmNoticeDO1.setReqUrl(jsonObject.getString("reqUrl"));
+                return srmNoticeDO1;
+            }).collect(Collectors.toList());
+            srmNoticeMapper.insertBatch(collect);
+            return collect;
+        } catch (RestClientException e) {
+            throw new RuntimeException(e);
+        }
+    }
 
 }

+ 55 - 0
yudao-server/src/main/java/cn/iocoder/yudao/server/service/srm/SrmNoticeService.java

@@ -0,0 +1,55 @@
+package cn.iocoder.yudao.server.service.srm;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.server.controller.admin.vo.srm.IotSrmNoticePageReqVO;
+import cn.iocoder.yudao.server.controller.admin.vo.srm.IotSrmNoticeSaveReqVO;
+import cn.iocoder.yudao.server.dal.dataobject.SrmNoticeDO;
+
+import javax.validation.Valid;
+
+/**
+ * OA消息通知 Service 接口
+ *
+ * @author 超级管理员
+ */
+public interface SrmNoticeService {
+
+    /**
+     * 创建OA消息通知
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createIotSrmNotice(@Valid IotSrmNoticeSaveReqVO createReqVO);
+
+    /**
+     * 更新OA消息通知
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateIotSrmNotice(@Valid IotSrmNoticeSaveReqVO updateReqVO);
+
+    /**
+     * 删除OA消息通知
+     *
+     * @param id 编号
+     */
+    void deleteIotSrmNotice(Long id);
+
+    /**
+     * 获得OA消息通知
+     *
+     * @param id 编号
+     * @return OA消息通知
+     */
+    SrmNoticeDO getIotSrmNotice(Long id);
+
+    /**
+     * 获得OA消息通知分页
+     *
+     * @param pageReqVO 分页查询
+     * @return OA消息通知分页
+     */
+    PageResult<SrmNoticeDO> getIotSrmNoticePage(IotSrmNoticePageReqVO pageReqVO);
+
+}

+ 73 - 0
yudao-server/src/main/java/cn/iocoder/yudao/server/service/srm/SrmNoticeServiceImpl.java

@@ -0,0 +1,73 @@
+package cn.iocoder.yudao.server.service.srm;
+
+import cn.iocoder.yudao.framework.common.exception.ErrorCode;
+import cn.iocoder.yudao.server.controller.admin.vo.srm.IotSrmNoticePageReqVO;
+import cn.iocoder.yudao.server.controller.admin.vo.srm.IotSrmNoticeSaveReqVO;
+import cn.iocoder.yudao.server.dal.dataobject.SrmNoticeDO;
+import cn.iocoder.yudao.server.dal.mysql.SrmNoticeMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+
+
+import javax.annotation.Resource;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+
+/**
+ * OA消息通知 Service 实现类
+ *
+ * @author 超级管理员
+ */
+@Service
+@Validated
+public class SrmNoticeServiceImpl implements SrmNoticeService {
+
+    @Resource
+    private SrmNoticeMapper srmNoticeMapper;
+
+    @Override
+    public Long createIotSrmNotice(IotSrmNoticeSaveReqVO createReqVO) {
+        // 插入
+        SrmNoticeDO iotSrmNotice = BeanUtils.toBean(createReqVO, SrmNoticeDO.class);
+        srmNoticeMapper.insert(iotSrmNotice);
+        // 返回
+        return iotSrmNotice.getId();
+    }
+
+    @Override
+    public void updateIotSrmNotice(IotSrmNoticeSaveReqVO updateReqVO) {
+        // 校验存在
+        validateIotSrmNoticeExists(updateReqVO.getId());
+        // 更新
+        SrmNoticeDO updateObj = BeanUtils.toBean(updateReqVO, SrmNoticeDO.class);
+        srmNoticeMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteIotSrmNotice(Long id) {
+        // 校验存在
+        validateIotSrmNoticeExists(id);
+        // 删除
+        srmNoticeMapper.deleteById(id);
+    }
+
+    private void validateIotSrmNoticeExists(Long id) {
+        if (srmNoticeMapper.selectById(id) == null) {
+            throw exception(new ErrorCode(1, "不存在"));
+        }
+    }
+
+    @Override
+    public SrmNoticeDO getIotSrmNotice(Long id) {
+        return srmNoticeMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<SrmNoticeDO> getIotSrmNoticePage(IotSrmNoticePageReqVO pageReqVO) {
+        return srmNoticeMapper.selectPage(pageReqVO);
+    }
+
+}