Переглянути джерело

任务添加重复提醒,保存相关数据

yusm 1 місяць тому
батько
коміт
7158ecb716

+ 21 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/TaskRemindController.java

@@ -0,0 +1,21 @@
+package com.management.platform.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2025-03-31
+ */
+@RestController
+@RequestMapping("/task-remind")
+public class TaskRemindController {
+
+}
+

+ 83 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/TaskRemind.java

@@ -0,0 +1,83 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2025-03-31
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class TaskRemind extends Model<TaskRemind> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 任务id
+     */
+    @TableField("task_id")
+    private Integer taskId;
+
+    /**
+     * 任务名称
+     */
+    @TableField("task_name")
+    private String taskName;
+
+    /**
+     * 执行人id
+     */
+    @TableField("executor_id")
+    private String executorId;
+
+    /**
+     * 执行人名称
+     */
+    @TableField("executor_name")
+    private String executorName;
+
+    /**
+     * 提醒日期
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField("remind_date")
+    private LocalDateTime remindDate;
+
+    /**
+     * 微信openid
+     */
+    @TableField("wx_openid")
+    private String wxOpenid;
+
+    /**
+     * 企业微信openid
+     */
+    @TableField("corpwx_userid")
+    private String corpwxUserid;
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/mapper/TaskRemindMapper.java

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.TaskRemind;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2025-03-31
+ */
+public interface TaskRemindMapper extends BaseMapper<TaskRemind> {
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/TaskRemindService.java

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.TaskRemind;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2025-03-31
+ */
+public interface TaskRemindService extends IService<TaskRemind> {
+
+}

+ 20 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/TaskRemindServiceImpl.java

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.TaskRemind;
+import com.management.platform.mapper.TaskRemindMapper;
+import com.management.platform.service.TaskRemindService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2025-03-31
+ */
+@Service
+public class TaskRemindServiceImpl extends ServiceImpl<TaskRemindMapper, TaskRemind> implements TaskRemindService {
+
+}

+ 145 - 3
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/TaskServiceImpl.java

@@ -14,6 +14,11 @@ import com.management.platform.mapper.*;
 import com.management.platform.service.*;
 import com.management.platform.util.ExcelUtil;
 import com.management.platform.util.HttpRespMsg;
+import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
+import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
+import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.ss.usermodel.CellType;
@@ -132,6 +137,16 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
     @Resource
     private CompanyMapper companyMapper;
 
+    @Resource
+    private TaskRemindService taskRemindService;
+
+    @Value("${wx.template_report_fill}")
+    public String TEMPLATE_REPORT_FILL;
+    @Value("${wx.app_id}")
+    public String appId;
+    @Value("${wx.app_secret}")
+    public String appSecret;
+
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -207,15 +222,114 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
                         .setCompanyId(user.getCompanyId());
                 taskExecutorMapper.insert(taskExecutor);
                 information.setUserId(executorId);
+
+                if (task.getStartDate()!=null) {
+                    if (task.getIsRepeat() != null && task.getIsRepeat() == 1) {
+                        ArrayList<TaskRemind> taskRemindList = new ArrayList<>();
+                        LocalDateTime startDate = task.getStartDate();
+                        Integer repeatEndCount=0;//重复几次
+                        LocalDate repeatEndDate=null;//重复到某个日期
+                        //repeatType  重复类型 :每天:0、每周:1、每月:2、自定义周期:3、自定义日期:4
+                        if (task.getRepeatType() != null && task.getRepeatType() <= 3) {
+                            Integer repeatType = task.getRepeatType();
+                            Integer repeatDesignSameday = task.getRepeatDesignSameday();
+                            //重复结束在几次之后
+                            if (task.getRepeatEndCount()!=null&&task.getRepeatEndCount()>0) {
+                                repeatEndCount = task.getRepeatEndCount();
+                            } else if (task.getRepeatEndDate()!=null) {
+                                repeatEndDate=task.getRepeatEndDate();
+                            }
+
+                            if (repeatEndCount!=null) {
+                                for (int i = 1; i <= repeatEndCount; i++) {
+                                    LocalDateTime repeatDate=null;
+                                    TaskRemind taskRemind = new TaskRemind();
+                                    taskRemind.setTaskId(task.getId());
+                                    taskRemind.setTaskName(task.getTaskName());
+                                    taskRemind.setExecutorId(executorId);
+                                    taskRemind.setExecutorName(selectedUser.getName());
+                                    taskRemind.setWxOpenid(selectedUser.getWxOpenid());
+                                    taskRemind.setCorpwxUserid(selectedUser.getCorpwxUserid());
+                                    if (repeatType==0) {
+                                        repeatDate = startDate.plusDays(i);
+                                    } else if (repeatType==1) {
+                                        repeatDate = startDate.plusWeeks(i);
+                                    } else if (repeatType==2) {
+                                        repeatDate = startDate.plusMonths(i);
+                                    } else if (repeatType==3&&repeatDesignSameday!=null) {
+                                        repeatDate = startDate.plusDays((long) i *repeatDesignSameday);
+                                    }
+                                    taskRemind.setRemindDate(repeatDate);
+                                    taskRemindList.add(taskRemind);
+                                }
+                            }
+                            if (repeatEndDate!=null) {
+                                LocalDateTime repeatDate=startDate;
+                                while (repeatDate.toLocalDate().isBefore(repeatEndDate)){
+                                    TaskRemind taskRemind = new TaskRemind();
+                                    taskRemind.setTaskId(task.getId());
+                                    taskRemind.setTaskName(task.getTaskName());
+                                    taskRemind.setExecutorId(executorId);
+                                    taskRemind.setExecutorName(selectedUser.getName());
+                                    taskRemind.setWxOpenid(selectedUser.getWxOpenid());
+                                    taskRemind.setCorpwxUserid(selectedUser.getCorpwxUserid());
+                                    if (repeatType==0) {
+                                        repeatDate = repeatDate.plusDays(1L);
+                                    } else if (repeatType==1) {
+                                        repeatDate = repeatDate.plusWeeks(1L);
+                                    } else if (repeatType==2) {
+                                        repeatDate = repeatDate.plusMonths(1L);
+                                    } else if (repeatType==3&&repeatDesignSameday!=null) {
+                                        repeatDate = repeatDate.plusDays((long) repeatDesignSameday);
+                                    }
+                                    taskRemind.setRemindDate(repeatDate);
+                                    taskRemindList.add(taskRemind);
+                                }
+                            }
+                        }
+                        else if (task.getRepeatType() != null && task.getRepeatType() ==4) {
+
+                            String repeatDesignDay = task.getRepeatDesignDay();
+                            if (StringUtils.isNotEmpty(repeatDesignDay)) {
+                                String[] strings = repeatDesignDay.split(",");
+                                List<String> list = Arrays.asList(strings);
+                                for (String s : list) {
+                                    LocalDateTime repeatDate=null;
+                                    TaskRemind taskRemind = new TaskRemind();
+                                    taskRemind.setTaskId(task.getId());
+                                    taskRemind.setTaskName(task.getTaskName());
+                                    taskRemind.setExecutorId(executorId);
+                                    taskRemind.setExecutorName(selectedUser.getName());
+                                    taskRemind.setWxOpenid(selectedUser.getWxOpenid());
+                                    taskRemind.setCorpwxUserid(selectedUser.getCorpwxUserid());
+                                    repeatDate=startDate.plusDays(Integer.parseInt(s));
+                                    taskRemind.setRemindDate(repeatDate);
+                                    taskRemindList.add(taskRemind);
+                                }
+                            }
+
+                        }
+
+                        taskRemindService.saveBatch(taskRemindList);
+                    }
+                }
+                //发送企业微信信息
+                if (wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                    wxCorpInfoService.sendWXCorpMsg(wxCorpInfo,selectedUser.getCorpwxUserid(),"你有新的任务",null, WxCorpInfoServiceImpl.TEXT_CARD_MSG_TASK);
+                }
+                //发送微信信息
+                else if (StringUtils.isNotEmpty(selectedUser.getWxOpenid())) {
+                    pushWxMsg(selectedUser.getWxOpenid(),task.getTaskName());
+                }
             }
             information.setTime(new Date()).setChecked(0).setMsg("你有新的任务").setPath("/tasks");
             informationArrayList.add(information);
             informationService.saveBatch(informationArrayList);
-            if (wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
-                wxCorpInfoService.sendWXCorpMsg(wxCorpInfo,user.getCorpwxUserid(),"你有新的任务",null, WxCorpInfoServiceImpl.TEXT_CARD_MSG_TASK);
-            }
+
         }
 
+
+
         //添加任务编译记录
         TaskLog taskLog = new TaskLog();
         taskLog.setTaskId(task.getId());
@@ -245,6 +359,34 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
         return httpRespMsg;
     }
 
+    public void pushWxMsg(String toOpenId,String taskName) {
+        //1,配置
+        WxMpInMemoryConfigStorage wxStorage = new WxMpInMemoryConfigStorage();
+        wxStorage.setAppId(appId);
+        wxStorage.setSecret(appSecret);
+        WxMpService wxMpService = new WxMpServiceImpl();
+        wxMpService.setWxMpConfigStorage(wxStorage);
+
+        //2,推送消息
+        WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
+                .toUser(toOpenId)//要推送的用户openid
+                .templateId(TEMPLATE_REPORT_FILL)//模版id
+                .url("http://mob.ttkuaiban.com/")//点击模版消息要访问的网址
+                .build();
+        //3,如果是正式版发送模版消息,这里需要配置你的信息
+        //templateMessage.addData(new WxMpTemplateData("first", "您今天的工时填报还未完成", "#FF00FF"));
+        templateMessage.addData(new WxMpTemplateData("first", "您有新的任务:", "#FF00FF"));
+        //templateMessage.addData(new WxMpTemplateData("keyword1", "屈跃庭", "#000000"));
+        templateMessage.addData(new WxMpTemplateData("keyword1",taskName, "#000000"));
+        try {
+            wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
+        } catch (Exception e) {
+            System.out.println("推送失败:" + e.getMessage());
+            e.printStackTrace();
+        }
+
+    }
+
     @Override
     public HttpRespMsg pageTask(TaskDto taskDto, HttpServletRequest request) {
         String token = String.valueOf(request.getHeader("Token"));

+ 20 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/TaskRemindMapper.xml

@@ -0,0 +1,20 @@
+<?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.management.platform.mapper.TaskRemindMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.TaskRemind">
+        <id column="id" property="id" />
+        <result column="task_id" property="taskId" />
+        <result column="task_name" property="taskName" />
+        <result column="executor_id" property="executorId" />
+        <result column="executor_name" property="executorName" />
+        <result column="remind_date" property="remindDate" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, task_id, task_name, executor_id, executor_name, remind_date
+    </sql>
+
+</mapper>