|
@@ -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,117 @@ 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);
|
|
|
+ taskRemind.setDept(selectedUser.getDepartmentId());
|
|
|
+ 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);
|
|
|
+ taskRemind.setDept(selectedUser.getDepartmentId());
|
|
|
+ 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);
|
|
|
+ taskRemind.setDept(selectedUser.getDepartmentId());
|
|
|
+ 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 +362,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"));
|
|
@@ -1895,7 +2040,41 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
|
|
|
executor=user.getId();
|
|
|
|
|
|
}
|
|
|
- List<TaskDto> taskDtoList= taskMapper.getTaskListByStartAndEnd(parseStartDate,parseEndDate,departmentId,executor,companyId);
|
|
|
+ List<TaskDto> taskDtoList = taskMapper.getTaskListByStartAndEnd(parseStartDate, parseEndDate, departmentId, executor, companyId);
|
|
|
+
|
|
|
+
|
|
|
+ List<TaskRemind> remindList = taskRemindService.list(new QueryWrapper<TaskRemind>()
|
|
|
+ .between("remind_date", parseStartDate, parseEndDate)
|
|
|
+ .eq(StringUtils.isNotEmpty(executor),"executor_id",executor)
|
|
|
+ .eq(departmentId!=null,"dept",departmentId)
|
|
|
+ .groupBy("task_id", "remind_date"));
|
|
|
+ if (!remindList.isEmpty()) {
|
|
|
+ List<Integer> collect = remindList.stream()
|
|
|
+ .distinct()
|
|
|
+ .map(TaskRemind::getTaskId)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ List<TaskDto> taskDtoListCollect = taskMapper.selectListByIds(collect);
|
|
|
+
|
|
|
+ ArrayList<TaskDto> taskDtos = new ArrayList<>();
|
|
|
+ for (TaskRemind remind : remindList) {
|
|
|
+ TaskDto taskDto = new TaskDto();
|
|
|
+ Optional<TaskDto> first = taskDtoListCollect.stream().filter(t -> t.getId().equals(remind.getTaskId())).findFirst();
|
|
|
+ if (first.isPresent()){
|
|
|
+ BeanUtils.copyProperties(first.get(),taskDto);
|
|
|
+ LocalDateTime remindDate = remind.getRemindDate();
|
|
|
+ taskDto.setStartDate(remindDate);
|
|
|
+ LocalDate date = remindDate.toLocalDate(); // 获取日期部分
|
|
|
+ LocalDateTime eveningNine = LocalDateTime.of(date, LocalTime.of(21, 0));
|
|
|
+ taskDto.setEndDate(eveningNine);
|
|
|
+ taskDto.setId(null);
|
|
|
+ taskDto.setTaskName(taskDto.getTaskName()+"(重复提醒)");
|
|
|
+ taskDtos.add(taskDto);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ taskDtoList.addAll(taskDtos);
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
/*if (type==1||type==2) {
|
|
|
// 使用LinkedHashMap保持日期顺序
|