yzc vor 2 Jahren
Ursprung
Commit
84652363c4
27 geänderte Dateien mit 799 neuen und 0 gelöschten Zeilen
  1. 17 0
      code/src/test/java/oaDataSource.java
  2. 4 0
      hx-admin/pom.xml
  3. 4 0
      hx-admin/src/main/resources/application-dev.yml
  4. 4 0
      hx-admin/src/main/resources/application-prod.yml
  5. 4 0
      hx-admin/src/main/resources/application-test.yml
  6. 1 0
      hx-common/src/main/java/com/fjhx/common/constant/SourceConstant.java
  7. 27 0
      hx-oa/pom.xml
  8. 19 0
      hx-oa/src/main/java/com/fjhx/oa/controller/schedule/ScheduleDetailsController.java
  9. 78 0
      hx-oa/src/main/java/com/fjhx/oa/controller/schedule/ScheduleInfoController.java
  10. 17 0
      hx-oa/src/main/java/com/fjhx/oa/entity/schedule/dto/ScheduleDetailsDto.java
  11. 17 0
      hx-oa/src/main/java/com/fjhx/oa/entity/schedule/dto/ScheduleDetailsSelectDto.java
  12. 23 0
      hx-oa/src/main/java/com/fjhx/oa/entity/schedule/dto/ScheduleInfoDto.java
  13. 17 0
      hx-oa/src/main/java/com/fjhx/oa/entity/schedule/dto/ScheduleInfoSelectDto.java
  14. 32 0
      hx-oa/src/main/java/com/fjhx/oa/entity/schedule/po/ScheduleDetails.java
  15. 72 0
      hx-oa/src/main/java/com/fjhx/oa/entity/schedule/po/ScheduleInfo.java
  16. 19 0
      hx-oa/src/main/java/com/fjhx/oa/entity/schedule/vo/ScheduleDetailsVo.java
  17. 28 0
      hx-oa/src/main/java/com/fjhx/oa/entity/schedule/vo/ScheduleInfoVo.java
  18. 17 0
      hx-oa/src/main/java/com/fjhx/oa/mapper/schedule/ScheduleDetailsMapper.java
  19. 30 0
      hx-oa/src/main/java/com/fjhx/oa/mapper/schedule/ScheduleInfoMapper.java
  20. 17 0
      hx-oa/src/main/java/com/fjhx/oa/service/schedule/ScheduleDetailsService.java
  21. 49 0
      hx-oa/src/main/java/com/fjhx/oa/service/schedule/ScheduleInfoService.java
  22. 21 0
      hx-oa/src/main/java/com/fjhx/oa/service/schedule/impl/ScheduleDetailsServiceImpl.java
  23. 127 0
      hx-oa/src/main/java/com/fjhx/oa/service/schedule/impl/ScheduleInfoServiceImpl.java
  24. 111 0
      hx-oa/src/main/java/com/fjhx/oa/utils/Notice.java
  25. 4 0
      hx-oa/src/main/resources/mapper/schedule/ScheduleDetailsMapper.xml
  26. 34 0
      hx-oa/src/main/resources/mapper/schedule/ScheduleInfoMapper.xml
  27. 6 0
      pom.xml

+ 17 - 0
code/src/test/java/oaDataSource.java

@@ -0,0 +1,17 @@
+import fly.generator.GeneratorApplication;
+
+public class oaDataSource {
+
+    public static void main(String[] args) {
+        GeneratorApplication.builder()
+                .url("jdbc:mysql://36.134.91.96:17330/bytesailing_oa?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true")
+                .username("fjhx2012mysql")
+                .password("3PN-Mzn#vnP&q6d")
+                .port(9989)
+                .module("hx-oa")
+                .parent("com.fjhx.oa")
+                .superServiceClass("com.ruoyi.common.core.service.BaseService")
+                .build();
+    }
+
+}

+ 4 - 0
hx-admin/pom.xml

@@ -43,6 +43,10 @@
             <groupId>com.fjhx</groupId>
             <artifactId>hx-mes</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.fjhx</groupId>
+            <artifactId>hx-oa</artifactId>
+        </dependency>
 
     </dependencies>
 

+ 4 - 0
hx-admin/src/main/resources/application-dev.yml

@@ -6,6 +6,10 @@ spring:
             strict: true
             primary: base
             datasource:
+                oa:
+                    url: jdbc:mysql://36.134.91.96:17330/bytesailing_oa?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
+                    username: fjhx2012mysql
+                    password: 3PN-Mzn#vnP&q6d
                 mes:
                     url: jdbc:mysql://36.134.91.96:17330/bytesailing_mes?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
                     username: fjhx2012mysql

+ 4 - 0
hx-admin/src/main/resources/application-prod.yml

@@ -6,6 +6,10 @@ spring:
             strict: true
             primary: base
             datasource:
+                oa:
+                    url: jdbc:mysql://127.0.0.1:28643/bytesailing_oa?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
+                    username: fjhx2012mysql
+                    password: IzJshF_dk9NNFpNm_IK
                 mes:
                     url: jdbc:mysql://127.0.0.1:28643/bytesailing_mes?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
                     username: fjhx2012mysql

+ 4 - 0
hx-admin/src/main/resources/application-test.yml

@@ -6,6 +6,10 @@ spring:
             strict: true
             primary: base
             datasource:
+                oa:
+                    url: jdbc:mysql://36.134.91.96:17330/bytesailing_oa?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
+                    username: fjhx2012mysql
+                    password: 3PN-Mzn#vnP&q6d
                 mes:
                     url: jdbc:mysql://36.134.91.96:17330/bytesailing_mes?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
                     username: fjhx2012mysql

+ 1 - 0
hx-common/src/main/java/com/fjhx/common/constant/SourceConstant.java

@@ -11,5 +11,6 @@ public interface SourceConstant {
     String WMS = "wms";
 
     String MES = "mes";
+    String OA = "oa";
 
 }

+ 27 - 0
hx-oa/pom.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>com.fjhx</groupId>
+        <artifactId>bytesailing</artifactId>
+        <version>1.0</version>
+    </parent>
+
+    <artifactId>hx-oa</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.fjhx</groupId>
+            <artifactId>hx-base</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fjhx</groupId>
+            <artifactId>hx-common</artifactId>
+        </dependency>
+    </dependencies>
+
+
+</project>

+ 19 - 0
hx-oa/src/main/java/com/fjhx/oa/controller/schedule/ScheduleDetailsController.java

@@ -0,0 +1,19 @@
+package com.fjhx.oa.controller.schedule;
+
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * <p>
+ * 日程明细 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-03
+ */
+@RestController
+@RequestMapping("/scheduleDetails")
+public class ScheduleDetailsController {
+
+
+}

+ 78 - 0
hx-oa/src/main/java/com/fjhx/oa/controller/schedule/ScheduleInfoController.java

@@ -0,0 +1,78 @@
+package com.fjhx.oa.controller.schedule;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.oa.entity.schedule.vo.ScheduleInfoVo;
+import com.fjhx.oa.entity.schedule.dto.ScheduleInfoSelectDto;
+import com.fjhx.oa.entity.schedule.dto.ScheduleInfoDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.oa.service.schedule.ScheduleInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 日程信息表 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-03
+ */
+@RestController
+@RequestMapping("/scheduleInfo")
+public class ScheduleInfoController {
+
+    @Autowired
+    private ScheduleInfoService scheduleInfoService;
+
+    /**
+     * 日程信息表分页
+     */
+    @PostMapping("/page")
+    public Page<ScheduleInfoVo> page(@RequestBody ScheduleInfoSelectDto dto) {
+        return scheduleInfoService.getPage(dto);
+    }
+
+    /**
+     * 日程信息表明细
+     */
+    @PostMapping("/detail")
+    public ScheduleInfoVo detail(@RequestBody BaseSelectDto dto) {
+        return scheduleInfoService.detail(dto.getId());
+    }
+
+    /**
+     * 日程信息表新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody ScheduleInfoDto scheduleInfoDto) {
+        scheduleInfoService.add(scheduleInfoDto);
+    }
+
+    /**
+     * 日程信息表编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody ScheduleInfoDto scheduleInfoDto) {
+        scheduleInfoService.edit(scheduleInfoDto);
+    }
+
+    /**
+     * 日程信息表删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        scheduleInfoService.delete(dto.getId());
+    }
+
+    /**
+     * 我的日程
+     */
+    @PostMapping("/mySchedule")
+    public List<ScheduleInfoVo> mySchedule(@RequestBody ScheduleInfoSelectDto dto){
+        return scheduleInfoService.mySchedule(dto);
+    }
+
+}

+ 17 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/schedule/dto/ScheduleDetailsDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.oa.entity.schedule.dto;
+
+import com.fjhx.oa.entity.schedule.po.ScheduleDetails;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 日程明细新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-04-03
+ */
+@Getter
+@Setter
+public class ScheduleDetailsDto extends ScheduleDetails {
+
+}

+ 17 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/schedule/dto/ScheduleDetailsSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.oa.entity.schedule.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 日程明细列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-03
+ */
+@Getter
+@Setter
+public class ScheduleDetailsSelectDto extends BaseSelectDto {
+
+}

+ 23 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/schedule/dto/ScheduleInfoDto.java

@@ -0,0 +1,23 @@
+package com.fjhx.oa.entity.schedule.dto;
+
+import com.fjhx.oa.entity.schedule.po.ScheduleDetails;
+import com.fjhx.oa.entity.schedule.po.ScheduleInfo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 日程信息表新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-04-03
+ */
+@Getter
+@Setter
+public class ScheduleInfoDto extends ScheduleInfo {
+
+    /**参与人id列表*/
+    private List<ScheduleDetails> participantList;
+
+}

+ 17 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/schedule/dto/ScheduleInfoSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.oa.entity.schedule.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 日程信息表列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-03
+ */
+@Getter
+@Setter
+public class ScheduleInfoSelectDto extends BaseSelectDto {
+
+}

+ 32 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/schedule/po/ScheduleDetails.java

@@ -0,0 +1,32 @@
+package com.fjhx.oa.entity.schedule.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 日程明细
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-03
+ */
+@Getter
+@Setter
+@TableName("schedule_details")
+public class ScheduleDetails extends BasePo {
+
+    /**
+     * 日程id
+     */
+    private Long scheduleInfoId;
+
+    /**
+     * 参与者id
+     */
+    private Long participantId;
+
+}

+ 72 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/schedule/po/ScheduleInfo.java

@@ -0,0 +1,72 @@
+package com.fjhx.oa.entity.schedule.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 日程信息表
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-03
+ */
+@Getter
+@Setter
+@TableName("schedule_info")
+public class ScheduleInfo extends BasePo {
+
+    /**
+     * 标题
+     */
+    private String title;
+
+    /**
+     * 开始时间
+     */
+    private Date startDate;
+
+    /**
+     * 结束时间
+     */
+    private Date endDate;
+
+    /**
+     * 重复 0不重复 1每天重复 2每周重复 3每月重复
+     */
+    private Integer repeatType;
+
+    /**
+     * 是否是全天任务
+     */
+    private Integer isAllDay;
+
+    /**
+     * 颜色
+     */
+    private String colour;
+
+    /**
+     * 地点
+     */
+    private String place;
+
+    /**
+     * 通知类型 15提前15分钟 30提前30分钟 60提前1小时
+     */
+    private Integer noticeType;
+
+    /**
+     * 任务权限 0仅自己可见 1参与人可见 2全员可见
+     */
+    private Integer taskPermissions;
+
+    /**
+     * 任务描述
+     */
+    private String remark;
+
+}

+ 19 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/schedule/vo/ScheduleDetailsVo.java

@@ -0,0 +1,19 @@
+package com.fjhx.oa.entity.schedule.vo;
+
+import com.fjhx.oa.entity.schedule.po.ScheduleDetails;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 日程明细列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-04-03
+ */
+@Getter
+@Setter
+public class ScheduleDetailsVo extends ScheduleDetails {
+
+    /**参与者名称*/
+    private String participantName;
+}

+ 28 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/schedule/vo/ScheduleInfoVo.java

@@ -0,0 +1,28 @@
+package com.fjhx.oa.entity.schedule.vo;
+
+import com.fjhx.oa.entity.schedule.po.ScheduleDetails;
+import com.fjhx.oa.entity.schedule.po.ScheduleInfo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 日程信息表列表查询返回值实体
+ *
+ * @author
+ * @since 2023-04-03
+ */
+@Getter
+@Setter
+public class ScheduleInfoVo extends ScheduleInfo {
+
+    /**
+     * 参与人列表
+     */
+    private List<ScheduleDetailsVo> participantList;
+
+    /**参与人id*/
+    private Long participantId;
+
+}

+ 17 - 0
hx-oa/src/main/java/com/fjhx/oa/mapper/schedule/ScheduleDetailsMapper.java

@@ -0,0 +1,17 @@
+package com.fjhx.oa.mapper.schedule;
+
+import com.fjhx.oa.entity.schedule.po.ScheduleDetails;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+
+/**
+ * <p>
+ * 日程明细 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-03
+ */
+public interface ScheduleDetailsMapper extends BaseMapper<ScheduleDetails> {
+
+}

+ 30 - 0
hx-oa/src/main/java/com/fjhx/oa/mapper/schedule/ScheduleInfoMapper.java

@@ -0,0 +1,30 @@
+package com.fjhx.oa.mapper.schedule;
+
+import com.fjhx.oa.entity.schedule.po.ScheduleInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.oa.entity.schedule.vo.ScheduleInfoVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 日程信息表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-03
+ */
+public interface ScheduleInfoMapper extends BaseMapper<ScheduleInfo> {
+
+    /**
+     * 日程信息表分页
+     */
+    Page<ScheduleInfoVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<ScheduleInfo> wrapper);
+
+    List<ScheduleInfoVo> mySchedule(@Param("ew") IWrapper<ScheduleInfo> wrapper);
+
+}

+ 17 - 0
hx-oa/src/main/java/com/fjhx/oa/service/schedule/ScheduleDetailsService.java

@@ -0,0 +1,17 @@
+package com.fjhx.oa.service.schedule;
+
+import com.fjhx.oa.entity.schedule.po.ScheduleDetails;
+import com.ruoyi.common.core.service.BaseService;
+
+
+/**
+ * <p>
+ * 日程明细 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-03
+ */
+public interface ScheduleDetailsService extends BaseService<ScheduleDetails> {
+
+}

+ 49 - 0
hx-oa/src/main/java/com/fjhx/oa/service/schedule/ScheduleInfoService.java

@@ -0,0 +1,49 @@
+package com.fjhx.oa.service.schedule;
+
+import com.fjhx.oa.entity.schedule.po.ScheduleInfo;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.oa.entity.schedule.vo.ScheduleInfoVo;
+import com.fjhx.oa.entity.schedule.dto.ScheduleInfoSelectDto;
+import com.fjhx.oa.entity.schedule.dto.ScheduleInfoDto;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 日程信息表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-03
+ */
+public interface ScheduleInfoService extends BaseService<ScheduleInfo> {
+
+    /**
+     * 日程信息表分页
+     */
+    Page<ScheduleInfoVo> getPage(ScheduleInfoSelectDto dto);
+
+    /**
+     * 日程信息表明细
+     */
+    ScheduleInfoVo detail(Long id);
+
+    /**
+     * 日程信息表新增
+     */
+    void add(ScheduleInfoDto scheduleInfoDto);
+
+    /**
+     * 日程信息表编辑
+     */
+    void edit(ScheduleInfoDto scheduleInfoDto);
+
+    /**
+     * 日程信息表删除
+     */
+    void delete(Long id);
+
+    List<ScheduleInfoVo> mySchedule(ScheduleInfoSelectDto dto);
+}

+ 21 - 0
hx-oa/src/main/java/com/fjhx/oa/service/schedule/impl/ScheduleDetailsServiceImpl.java

@@ -0,0 +1,21 @@
+package com.fjhx.oa.service.schedule.impl;
+
+import com.fjhx.oa.entity.schedule.po.ScheduleDetails;
+import com.fjhx.oa.mapper.schedule.ScheduleDetailsMapper;
+import com.fjhx.oa.service.schedule.ScheduleDetailsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * <p>
+ * 日程明细 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-03
+ */
+@Service
+public class ScheduleDetailsServiceImpl extends ServiceImpl<ScheduleDetailsMapper, ScheduleDetails> implements ScheduleDetailsService {
+
+}

+ 127 - 0
hx-oa/src/main/java/com/fjhx/oa/service/schedule/impl/ScheduleInfoServiceImpl.java

@@ -0,0 +1,127 @@
+package com.fjhx.oa.service.schedule.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.oa.entity.schedule.dto.ScheduleInfoDto;
+import com.fjhx.oa.entity.schedule.dto.ScheduleInfoSelectDto;
+import com.fjhx.oa.entity.schedule.po.ScheduleDetails;
+import com.fjhx.oa.entity.schedule.po.ScheduleInfo;
+import com.fjhx.oa.entity.schedule.vo.ScheduleDetailsVo;
+import com.fjhx.oa.entity.schedule.vo.ScheduleInfoVo;
+import com.fjhx.oa.mapper.schedule.ScheduleInfoMapper;
+import com.fjhx.oa.service.schedule.ScheduleDetailsService;
+import com.fjhx.oa.service.schedule.ScheduleInfoService;
+import com.fjhx.oa.utils.Notice;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.ruoyi.system.utils.UserUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+
+/**
+ * <p>
+ * 日程信息表 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-04-03
+ */
+@DS(SourceConstant.OA)
+@Service
+public class ScheduleInfoServiceImpl extends ServiceImpl<ScheduleInfoMapper, ScheduleInfo> implements ScheduleInfoService {
+    @Autowired
+    ScheduleDetailsService scheduleDetailsService;
+
+    @Override
+    public Page<ScheduleInfoVo> getPage(ScheduleInfoSelectDto dto) {
+        IWrapper<ScheduleInfo> wrapper = getWrapper();
+        wrapper.orderByDesc("si", ScheduleInfo::getId);
+        Page<ScheduleInfoVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    @Override
+    public ScheduleInfoVo detail(Long id) {
+        ScheduleInfo ScheduleInfo = this.getById(id);
+        ScheduleInfoVo result = BeanUtil.toBean(ScheduleInfo, ScheduleInfoVo.class);
+        List<ScheduleDetails> scheduleDetailsList = scheduleDetailsService.list(q -> q.eq(ScheduleDetails::getScheduleInfoId, result.getId()));
+        List<ScheduleDetailsVo> scheduleDetailsVos = BeanUtil.copyToList(scheduleDetailsList, ScheduleDetailsVo.class);
+        if (ObjectUtil.isNotEmpty(scheduleDetailsVos)) {
+            //赋值用户信息
+            UserUtil.assignmentNickName(scheduleDetailsVos, ScheduleDetails::getParticipantId, ScheduleDetailsVo::setParticipantName);
+            result.setParticipantList(scheduleDetailsVos);
+        }
+        return result;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(ScheduleInfoDto scheduleInfoDto) {
+        this.save(scheduleInfoDto);
+        //添加日程明细
+        List<ScheduleDetails> participantList = scheduleInfoDto.getParticipantList();
+        if (ObjectUtil.isNotEmpty(participantList)) {
+            for (ScheduleDetails scheduleDetails : participantList) {
+                scheduleDetails.setScheduleInfoId(scheduleInfoDto.getId());
+            }
+            scheduleDetailsService.saveBatch(participantList);
+        }
+        //判断是否是今天的日程是加入消息通知队列
+        Notice.updateNoticeList(scheduleInfoDto);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(ScheduleInfoDto scheduleInfoDto) {
+        this.updateById(scheduleInfoDto);
+        //更新明细信息
+        List<ScheduleDetails> participantList = scheduleInfoDto.getParticipantList();
+        //先处理删除掉的参与人
+        List<Long> scheduleDetailsIds = participantList.stream().map(ScheduleDetails::getParticipantId).collect(Collectors.toList());
+        scheduleDetailsService.remove(q -> q.eq(ScheduleDetails::getScheduleInfoId, scheduleInfoDto.getId())
+                .notIn(ObjectUtil.isNotEmpty(scheduleDetailsIds), ScheduleDetails::getParticipantId, scheduleDetailsIds));
+        if (ObjectUtil.isNotEmpty(participantList)) {
+            for (ScheduleDetails scheduleDetails : participantList) {
+                scheduleDetails.setScheduleInfoId(scheduleInfoDto.getId());
+            }
+            scheduleDetailsService.saveOrUpdateBatch(participantList);
+        }
+        //判断是否是今天的日程是加入消息通知队列
+        Notice.updateNoticeList(scheduleInfoDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+        //删除日程对应的通知计划
+        Notice.deleteNoticeList(id);
+    }
+
+    @Override
+    public List<ScheduleInfoVo> mySchedule(ScheduleInfoSelectDto dto) {
+        IWrapper<ScheduleInfo> wrapper = getWrapper();
+        wrapper.eq(ScheduleInfoVo::getParticipantId, SecurityUtils.getUserId());
+        wrapper.eq("(date( si.start_date ) = curdate())", 1);
+        if (ObjectUtil.isNotEmpty(dto.getKeyword())) {
+            wrapper.and(wrapper1 ->
+                    wrapper1.like(
+                                    ScheduleInfo::getTitle, dto.getKeyword())
+                            .or()
+                            .like(ScheduleInfo::getPlace, dto.getKeyword())
+                            .or()
+                            .like(ScheduleInfo::getRemark, dto.getKeyword())
+            );
+        }
+        return baseMapper.mySchedule(wrapper);
+    }
+
+}

+ 111 - 0
hx-oa/src/main/java/com/fjhx/oa/utils/Notice.java

@@ -0,0 +1,111 @@
+package com.fjhx.oa.utils;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.fjhx.oa.entity.schedule.po.ScheduleDetails;
+import com.fjhx.oa.entity.schedule.po.ScheduleInfo;
+import com.fjhx.oa.service.schedule.ScheduleDetailsService;
+import com.fjhx.oa.service.schedule.ScheduleInfoService;
+import com.fjhx.socket.service.WebSocketServer;
+import com.ruoyi.framework.mybatis.holder.TenantHolder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import javax.annotation.PostConstruct;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 工作日程消息通知
+ */
+
+@Configuration
+@EnableScheduling
+public class Notice {
+    private static Map<Long, ScheduleInfo> scheduleInfoMap = new HashMap<>();
+    private static SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
+
+    @Autowired
+    ScheduleInfoService scheduleInfoService;
+    @Autowired
+    ScheduleDetailsService scheduleDetailsService;
+
+    /**
+     * 启动时和每天0点 查询当天的日程
+     */
+    @PostConstruct
+    @Scheduled(cron = "0 0 0 * * ?")
+    public void getNoticeList() {
+        TenantHolder.setIgnore(true);
+        QueryWrapper queryWrapper = new QueryWrapper();
+        queryWrapper.eq("(date( start_date ) = curdate())",1);
+        List<ScheduleInfo> scheduleInfos0 = scheduleInfoService.list(queryWrapper);
+        scheduleInfoMap = scheduleInfos0.stream().collect(Collectors.groupingBy(ScheduleInfo::getId,
+                Collectors.collectingAndThen(Collectors.toList(), value -> value.get(0))));
+        TenantHolder.clear();
+    }
+
+
+    /**
+     * 每10秒检查一次
+     */
+    @Scheduled(cron = "0/10 * * * * ?")
+    public void sendNoticeTime() {
+        List<ScheduleInfo> scheduleInfos = new ArrayList<>();
+        for (Map.Entry<Long, ScheduleInfo> entry : scheduleInfoMap.entrySet()) {
+            ScheduleInfo scheduleInfo = entry.getValue();
+            Date startDate = scheduleInfo.getStartDate();
+            Date date = new Date();
+            long diff = date.getTime() - startDate.getTime();
+            long min = diff / 60 / 1000;
+            //根据类型判断提前多少分钟通知
+            if (min == scheduleInfo.getNoticeType()) {
+                scheduleInfoMap.remove(scheduleInfo.getId());
+                scheduleInfos.add(scheduleInfo);
+            }
+        }
+        //查询参与者并发送通知
+        if (ObjectUtil.isNotEmpty(scheduleInfos)) {
+            Map<Long, ScheduleInfo> scheduleInfoMap1 = scheduleInfos.stream().collect(Collectors.groupingBy(ScheduleInfo::getId,
+                    Collectors.collectingAndThen(Collectors.toList(), value -> value.get(0))));
+            List<Long> scheduleInfoIds = scheduleInfos.stream().map(ScheduleInfo::getId).collect(Collectors.toList());
+            List<ScheduleDetails> scheduleDetailsList = scheduleDetailsService.listByIds(scheduleInfoIds);
+            for (ScheduleDetails scheduleDetails : scheduleDetailsList) {
+                //发送消息
+                ScheduleInfo scheduleInfo = scheduleInfoMap1.get(scheduleDetails.getScheduleInfoId());
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                String msg = String.format("您的日程<%s>将于%s开始。", scheduleInfo.getTitle(), sdf.format(scheduleInfo.getStartDate()));
+                Map<String, Object> msgMap = new HashMap<>();
+                msgMap.put("businessId", scheduleInfo.getId());
+                msgMap.put("msg", msg);
+                WebSocketServer.sendInfo(scheduleDetails.getParticipantId(), 1, msgMap);
+            }
+        }
+    }
+
+    /**
+     * 判断日期日程的开始时间是否是今天,如果是就添加到待发送消息队列
+     */
+    public static void updateNoticeList(ScheduleInfo scheduleInfo) {
+        Date now = new Date();
+        //获取今天的日期
+        String nowDay = sf.format(now);
+        //对比的时间
+        String day = sf.format(scheduleInfo.getStartDate());
+        if (day.equals(nowDay)) {
+            scheduleInfoMap.put(scheduleInfo.getId(), scheduleInfo);
+        } else {
+            scheduleInfoMap.remove(scheduleInfo.getId());
+        }
+    }
+
+    /**
+     * 删除日程的通知计划
+     */
+    public static void deleteNoticeList(Long id) {
+        scheduleInfoMap.remove(id);
+    }
+}

+ 4 - 0
hx-oa/src/main/resources/mapper/schedule/ScheduleDetailsMapper.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.oa.mapper.schedule.ScheduleDetailsMapper">
+</mapper>

+ 34 - 0
hx-oa/src/main/resources/mapper/schedule/ScheduleInfoMapper.xml

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.oa.mapper.schedule.ScheduleInfoMapper">
+    <select id="getPage" resultType="com.fjhx.oa.entity.schedule.vo.ScheduleInfoVo">
+        select
+            si.id,
+            si.title,
+            si.start_date,
+            si.end_date,
+            si.repeat_type,
+            si.is_all_day,
+            si.colour,
+            si.place,
+            si.notice_type,
+            si.task_permissions,
+            si.remark,
+            si.create_user,
+            si.create_time,
+            si.update_user,
+            si.update_time
+        from schedule_info si
+            ${ew.customSqlSegment}
+    </select>
+    <select id="mySchedule" resultType="com.fjhx.oa.entity.schedule.vo.ScheduleInfoVo">
+        SELECT
+            si.*,
+            sd.participant_id
+        FROM
+            schedule_info si
+                JOIN schedule_details sd ON sd.schedule_info_id = si.id
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 6 - 0
pom.xml

@@ -23,6 +23,7 @@
         <module>hx-supply</module>
         <module>hx-wms</module>
         <module>hx-common</module>
+        <module>hx-oa</module>
     </modules>
 
     <properties>
@@ -101,6 +102,11 @@
                 <artifactId>hx-wms</artifactId>
                 <version>${hx.version}</version>
             </dependency>
+            <dependency>
+                <groupId>com.fjhx</groupId>
+                <artifactId>hx-oa</artifactId>
+                <version>${hx.version}</version>
+            </dependency>
         </dependencies>
     </dependencyManagement>