Commit 088aa326 by 裴大威

Merge branch 'feat-1002761' into 'master'

1002761 按周设置

See merge request rays/pcloud-book!667
parents 3538ab8c 9fd84137
...@@ -324,4 +324,10 @@ public class BookConstant { ...@@ -324,4 +324,10 @@ public class BookConstant {
"ⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅬⅭⅮⅯⅰⅱⅲⅳⅴⅵⅶⅷⅸ" + "ⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅬⅭⅮⅯⅰⅱⅲⅳⅴⅵⅶⅷⅸ" +
"ⅹⅺⅻⅼⅽⅾⅿ┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋╌╍╎╏═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬◤◥◄►▶◀◣◢▲▼◥▸◂" + "ⅹⅺⅻⅼⅽⅾⅿ┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋╌╍╎╏═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬◤◥◄►▶◀◣◢▲▼◥▸◂" +
"▴▾△▽▷◁⊿▻◅▵▿▹◃❏❐❑❒▀▁▂▃▄▅▆▇▉▊▋█▌▍▎▏▐░▒▓▔▕■□▢▣▤▥▦▧▨▩▪▫▬▭▮▯㋀㋁㋂㋃㋄㋅㋆㋇㋈㋉㋊㋋]+$"; "▴▾△▽▷◁⊿▻◅▵▿▹◃❏❐❑❒▀▁▂▃▄▅▆▇▉▊▋█▌▍▎▏▐░▒▓▔▕■□▢▣▤▥▦▧▨▩▪▫▬▭▮▯㋀㋁㋂㋃㋄㋅㋆㋇㋈㋉㋊㋋]+$";
public static final String TIME_CONTROL_KEY = "lgsc";
public static final String TIME_CONTROL_UPDATE_SEND = "TIME_CONTROL_UPDATE_SEND";
public static final String TIME_CONTROL_SEND = "TIME_CONTROL_SEND_";
} }
...@@ -28,6 +28,8 @@ public class CreateTaskDto implements Serializable { ...@@ -28,6 +28,8 @@ public class CreateTaskDto implements Serializable {
private Integer advancedSetting; private Integer advancedSetting;
private Integer sendType;
private Long depLabelId; private Long depLabelId;
private Long purLabelId; private Long purLabelId;
...@@ -35,4 +37,5 @@ public class CreateTaskDto implements Serializable { ...@@ -35,4 +37,5 @@ public class CreateTaskDto implements Serializable {
private Long proLabelId; private Long proLabelId;
} }
package com.pcloud.book.timecontrol.dto; package com.pcloud.book.timecontrol.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.Max; import javax.validation.constraints.Max;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
...@@ -17,7 +19,6 @@ public class CreateTaskItemDto implements Serializable { ...@@ -17,7 +19,6 @@ public class CreateTaskItemDto implements Serializable {
@NotNull(message = "任务ID不能为空") @NotNull(message = "任务ID不能为空")
private Integer taskId; private Integer taskId;
@NotNull(message = "请输入天数")
@Max(value = 200) @Max(value = 200)
private Integer startDay; private Integer startDay;
...@@ -44,4 +45,15 @@ public class CreateTaskItemDto implements Serializable { ...@@ -44,4 +45,15 @@ public class CreateTaskItemDto implements Serializable {
private String itemIntroduce; private String itemIntroduce;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date startTime;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date endTime;
//发送方式 /1每天 2每周
private Integer pushType;
private List<Integer> weekdays;
} }
package com.pcloud.book.timecontrol.dto; package com.pcloud.book.timecontrol.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.book.timecontrol.entity.TimeControlWeekDay;
import java.util.Date;
import java.util.List;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
...@@ -25,4 +29,18 @@ public class ReplyMessageBaseDto implements Serializable { ...@@ -25,4 +29,18 @@ public class ReplyMessageBaseDto implements Serializable {
* 0-不可配置,1-已配置,2-未配置 * 0-不可配置,1-已配置,2-未配置
*/ */
private Integer configState; private Integer configState;
//周次
private List<TimeControlWeekDay> timeControlWeekDayList;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private java.util.Date startTime;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date endTime;
//发送方式 /1每天 2每周
private Integer pushType;
private List<Integer> weekdays;
} }
...@@ -43,4 +43,6 @@ public class SubscribeTaskUserDTO extends BaseDto { ...@@ -43,4 +43,6 @@ public class SubscribeTaskUserDTO extends BaseDto {
* 订阅状态(0-取消订阅 1-订阅 2-完成) * 订阅状态(0-取消订阅 1-订阅 2-完成)
*/ */
private Integer subscribeState; private Integer subscribeState;
private Integer sendCount;
} }
...@@ -37,5 +37,6 @@ public class TaskCompletedDto implements Serializable { ...@@ -37,5 +37,6 @@ public class TaskCompletedDto implements Serializable {
private Integer subscribePersonCount; private Integer subscribePersonCount;
//1按天发送 2按周发送
private Integer sendType;
} }
...@@ -51,4 +51,7 @@ public class TaskDto implements Serializable { ...@@ -51,4 +51,7 @@ public class TaskDto implements Serializable {
private String purLabelName; private String purLabelName;
//1按天发送 2按周发送
private Integer sendType;
} }
...@@ -44,4 +44,15 @@ public class TaskItemDto implements Serializable { ...@@ -44,4 +44,15 @@ public class TaskItemDto implements Serializable {
private String sendHour; private String sendHour;
private Integer progressGuidance; private Integer progressGuidance;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date startTime;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date endTime;
//发送方式 /1每天 2每周
private Integer pushType;
private List<Integer> weekdays;
} }
package com.pcloud.book.timecontrol.dto; package com.pcloud.book.timecontrol.dto;
import java.util.Date;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
...@@ -24,4 +25,23 @@ public class TaskSendDto implements Serializable { ...@@ -24,4 +25,23 @@ public class TaskSendDto implements Serializable {
private Integer completeState; private Integer completeState;
private Long bookId;
private Integer subscribeId;
private String sendDay;
private Date createTime;
private Integer sendState;
private String sendHour;
private Integer working;
private Integer sendWeek;
private Integer sendCount;
} }
package com.pcloud.book.timecontrol.dto; package com.pcloud.book.timecontrol.dto;
import io.swagger.annotations.ApiParam;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
...@@ -35,4 +36,7 @@ public class UpdateTaskDto implements Serializable { ...@@ -35,4 +36,7 @@ public class UpdateTaskDto implements Serializable {
private Long proLabelId; private Long proLabelId;
//1按天发送 2按周发送
private Integer sendType;
} }
package com.pcloud.book.timecontrol.dto; package com.pcloud.book.timecontrol.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.Max; import javax.validation.constraints.Max;
...@@ -18,7 +20,6 @@ public class UpdateTaskItemDto implements Serializable { ...@@ -18,7 +20,6 @@ public class UpdateTaskItemDto implements Serializable {
@NotNull(message = "消息配置ID不能为空") @NotNull(message = "消息配置ID不能为空")
private Integer id; private Integer id;
@NotNull(message = "请输入天数")
@Max(value = 200) @Max(value = 200)
private Integer startDay; private Integer startDay;
...@@ -45,4 +46,14 @@ public class UpdateTaskItemDto implements Serializable { ...@@ -45,4 +46,14 @@ public class UpdateTaskItemDto implements Serializable {
private String itemIntroduce; private String itemIntroduce;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date startTime;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date endTime;
private Integer pushType;
private List<Integer> weekdays;
} }
package com.pcloud.book.timecontrol.entity;
import java.util.Date;
import lombok.Data;
@Data
public class TimeControlWeekDay {
private Long id;
private Integer taskItemId;
private Integer weekDay;
private Date createTime;
}
package com.pcloud.book.timecontrol.enums;
public enum SendTypeEnum {
SEND_DAY(1, "按天发送"),
SEND_WEEK(2, "按周发送");
public Integer state;
public String desc;
public Integer getState() {
return state;
}
public void setState(Integer state) {
this.state = state;
}
SendTypeEnum(Integer state, String desc) {
this.state = state;
this.desc = desc;
}
}
package com.pcloud.book.timecontrol.enums;
public enum TimeControlPushTypeEnum {
SEND_EVERY_DAY(1, "每天发送"),
SEND_4_WEEK(2, "周几发送");
public Integer state;
public String desc;
public Integer getState() {
return state;
}
public void setState(Integer state) {
this.state = state;
}
TimeControlPushTypeEnum(Integer state, String desc) {
this.state = state;
this.desc = desc;
}
}
...@@ -61,4 +61,14 @@ public interface TimeControlTaskService { ...@@ -61,4 +61,14 @@ public interface TimeControlTaskService {
@ApiOperation(value = "订阅任务") @ApiOperation(value = "订阅任务")
@GetMapping("unSubscribeTask") @GetMapping("unSubscribeTask")
void unSubscribeTask(@RequestParam("wxId") String wxId, @RequestParam("taskId") Integer taskId); void unSubscribeTask(@RequestParam("wxId") String wxId, @RequestParam("taskId") Integer taskId);
@ApiOperation(value = "定时任务更新send表发送状态")
@GetMapping("updateSendState4Week")
void updateSendState4Week();
@ApiOperation(value = "按周定时发送任务消息", httpMethod = "POST")
@PostMapping("sendTimeTaskMessage4Week")
void sendTimeTaskMessage4Week(@RequestBody Map<String, Object> map);
} }
\ No newline at end of file
...@@ -10,6 +10,7 @@ import com.pcloud.book.timecontrol.dto.TaskItemDto; ...@@ -10,6 +10,7 @@ import com.pcloud.book.timecontrol.dto.TaskItemDto;
import com.pcloud.book.timecontrol.dto.UpdateTaskDto; import com.pcloud.book.timecontrol.dto.UpdateTaskDto;
import com.pcloud.book.timecontrol.dto.UpdateTaskItemDto; import com.pcloud.book.timecontrol.dto.UpdateTaskItemDto;
import com.pcloud.book.timecontrol.entity.TimeControlReplyMessage; import com.pcloud.book.timecontrol.entity.TimeControlReplyMessage;
import com.pcloud.book.timecontrol.entity.TimeControlTask;
import com.pcloud.book.timecontrol.vo.KeyWordTaskVO; import com.pcloud.book.timecontrol.vo.KeyWordTaskVO;
import com.pcloud.common.page.PageBeanNew; import com.pcloud.common.page.PageBeanNew;
...@@ -64,4 +65,10 @@ public interface TaskBiz { ...@@ -64,4 +65,10 @@ public interface TaskBiz {
void sendReplyMessage(List<TimeControlReplyMessage> replyMessages, String wxUserId, String robotWxId, String ip); void sendReplyMessage(List<TimeControlReplyMessage> replyMessages, String wxUserId, String robotWxId, String ip);
Integer copyTaskItem(Integer taskItemId); Integer copyTaskItem(Integer taskItemId);
void addTask4TimeControl();
void updateSendState4Week();
void updateTaskSendType(TimeControlTask taskDto);
} }
...@@ -38,4 +38,6 @@ public interface TaskSubscribeBiz { ...@@ -38,4 +38,6 @@ public interface TaskSubscribeBiz {
* 时间管理订阅 * 时间管理订阅
*/ */
void subscribeTimeControlTask(String wxUserId, Long bookId, Integer taskId, String robotWxId); void subscribeTimeControlTask(String wxUserId, Long bookId, Integer taskId, String robotWxId);
void sendTimeTaskMessage4Week(Integer taskItemId);
} }
package com.pcloud.book.timecontrol.biz.impl; package com.pcloud.book.timecontrol.biz.impl;
import static com.pcloud.book.guide.constant.PcloudGuideRedisConstant.PCLOUD_WAKE_UP_CRON_JOB;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.pcloud.appcenter.app.dto.AppDto; import com.pcloud.appcenter.app.dto.AppDto;
import com.pcloud.book.base.exception.BookBizException; import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.book.constant.BookConstant;
import com.pcloud.book.consumer.app.AppConsr; import com.pcloud.book.consumer.app.AppConsr;
import com.pcloud.book.consumer.channel.QrcodeSceneConsr; import com.pcloud.book.consumer.channel.QrcodeSceneConsr;
import com.pcloud.book.consumer.content.ResourceConsr; import com.pcloud.book.consumer.content.ResourceConsr;
...@@ -28,23 +31,12 @@ import com.pcloud.book.timecontrol.dto.TaskDto; ...@@ -28,23 +31,12 @@ import com.pcloud.book.timecontrol.dto.TaskDto;
import com.pcloud.book.timecontrol.dto.TaskItemDto; import com.pcloud.book.timecontrol.dto.TaskItemDto;
import com.pcloud.book.timecontrol.dto.UpdateTaskDto; import com.pcloud.book.timecontrol.dto.UpdateTaskDto;
import com.pcloud.book.timecontrol.dto.UpdateTaskItemDto; import com.pcloud.book.timecontrol.dto.UpdateTaskItemDto;
import com.pcloud.book.timecontrol.entity.TimeControlPrizeItem; import com.pcloud.book.timecontrol.entity.*;
import com.pcloud.book.timecontrol.entity.TimeControlReplyMessage; import com.pcloud.book.timecontrol.enums.SendTypeEnum;
import com.pcloud.book.timecontrol.entity.TimeControlTask;
import com.pcloud.book.timecontrol.entity.TimeControlTaskItem;
import com.pcloud.book.timecontrol.entity.TimeControlTaskPrize;
import com.pcloud.book.timecontrol.entity.TimeControlTaskSend;
import com.pcloud.book.timecontrol.entity.TimeControlTaskSubscribe;
import com.pcloud.book.timecontrol.enums.TaskPrizeTypeEnum; import com.pcloud.book.timecontrol.enums.TaskPrizeTypeEnum;
import com.pcloud.book.timecontrol.enums.TaskSendStateEnum; import com.pcloud.book.timecontrol.enums.TaskSendStateEnum;
import com.pcloud.book.timecontrol.mapper.BookTaskBindingMapper; import com.pcloud.book.timecontrol.enums.TimeControlPushTypeEnum;
import com.pcloud.book.timecontrol.mapper.TaskPrizeItemMapper; import com.pcloud.book.timecontrol.mapper.*;
import com.pcloud.book.timecontrol.mapper.TaskPrizeMapper;
import com.pcloud.book.timecontrol.mapper.TimeControlReplyMessageMapper;
import com.pcloud.book.timecontrol.mapper.TimeControlTaskItemMapper;
import com.pcloud.book.timecontrol.mapper.TimeControlTaskMapper;
import com.pcloud.book.timecontrol.mapper.TimeControlTaskSendMapper;
import com.pcloud.book.timecontrol.mapper.TimeControlTaskSubscribeMapper;
import com.pcloud.book.timecontrol.vo.KeyWordTaskVO; import com.pcloud.book.timecontrol.vo.KeyWordTaskVO;
import com.pcloud.book.util.common.YesOrNoEnums; import com.pcloud.book.util.common.YesOrNoEnums;
import com.pcloud.channelcenter.wechat.dto.AccountSettingDto; import com.pcloud.channelcenter.wechat.dto.AccountSettingDto;
...@@ -59,6 +51,9 @@ import com.pcloud.common.utils.httpclient.UrlUtils; ...@@ -59,6 +51,9 @@ import com.pcloud.common.utils.httpclient.UrlUtils;
import com.pcloud.common.utils.string.StringUtil; import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.common.utils.string.StringUtilParent; import com.pcloud.common.utils.string.StringUtilParent;
import com.pcloud.contentcenter.resource.dto.ResourceDTO; import com.pcloud.contentcenter.resource.dto.ResourceDTO;
import com.pcloud.facade.quartz.entity.CallBackParam;
import com.pcloud.facade.quartz.entity.ScheduleJob;
import com.pcloud.facade.quartz.service.ScheduleService;
import com.pcloud.labelcenter.label.service.LabelService; import com.pcloud.labelcenter.label.service.LabelService;
import com.pcloud.wechatgroup.base.exception.WechatGroupBizException; import com.pcloud.wechatgroup.base.exception.WechatGroupBizException;
import com.pcloud.wechatgroup.group.dto.GroupRobotDTO; import com.pcloud.wechatgroup.group.dto.GroupRobotDTO;
...@@ -68,7 +63,16 @@ import com.sdk.wxgroup.SendFileVO; ...@@ -68,7 +63,16 @@ import com.sdk.wxgroup.SendFileVO;
import com.sdk.wxgroup.SendMessageTypeEnum; import com.sdk.wxgroup.SendMessageTypeEnum;
import com.sdk.wxgroup.SendPicMessageVO; import com.sdk.wxgroup.SendPicMessageVO;
import com.sdk.wxgroup.SendTextMessageVO; import com.sdk.wxgroup.SendTextMessageVO;
import io.swagger.models.auth.In;
import java.sql.Struct;
import java.util.HashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.codehaus.jackson.JsonParseException;
import org.quartz.SchedulerException;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
...@@ -97,6 +101,8 @@ public class TaskBizImpl implements TaskBiz { ...@@ -97,6 +101,8 @@ public class TaskBizImpl implements TaskBiz {
private final static Logger LOGGER = LoggerFactory.getLogger(TaskBizImpl.class); private final static Logger LOGGER = LoggerFactory.getLogger(TaskBizImpl.class);
private static final ExecutorService EXECUTOR_SERVICE = Executors.newFixedThreadPool(4);
@Autowired @Autowired
private PcloudSkillDao pcloudSkillDao; private PcloudSkillDao pcloudSkillDao;
@Autowired @Autowired
...@@ -104,6 +110,8 @@ public class TaskBizImpl implements TaskBiz { ...@@ -104,6 +110,8 @@ public class TaskBizImpl implements TaskBiz {
@Autowired @Autowired
private TimeControlTaskItemMapper taskItemMapper; private TimeControlTaskItemMapper taskItemMapper;
@Autowired @Autowired
private TimeControlTaskItemWeekMapper taskItemWeekMapper;
@Autowired
private TimeControlReplyMessageMapper replyMessageMapper; private TimeControlReplyMessageMapper replyMessageMapper;
@Autowired @Autowired
private BookTaskBindingMapper bookTaskBindingMapper; private BookTaskBindingMapper bookTaskBindingMapper;
...@@ -135,6 +143,10 @@ public class TaskBizImpl implements TaskBiz { ...@@ -135,6 +143,10 @@ public class TaskBizImpl implements TaskBiz {
private ResourceConsr resourceConsr; private ResourceConsr resourceConsr;
@Autowired @Autowired
private ProductConsr productConsr; private ProductConsr productConsr;
@Autowired
private ScheduleService scheduleService;
@Autowired
private TimeControlTaskItemWeekMapper timeControlTaskItemWeekMapper;
@Override @Override
public Integer createTask(CreateTaskDto createTaskDto) { public Integer createTask(CreateTaskDto createTaskDto) {
...@@ -151,16 +163,20 @@ public class TaskBizImpl implements TaskBiz { ...@@ -151,16 +163,20 @@ public class TaskBizImpl implements TaskBiz {
if (Objects.nonNull(byRelId)) { if (Objects.nonNull(byRelId)) {
throw new BookBizException(BookBizException.PARAM_IS_EXIST, "该计划已经关联技能,无法删除!"); throw new BookBizException(BookBizException.PARAM_IS_EXIST, "该计划已经关联技能,无法删除!");
} }
TimeControlTask timeControlTask = taskMapper.selectByPrimaryKey(taskId);
// 1删除任务模板 // 1删除任务模板
taskMapper.deleteByPrimaryKey(taskId); taskMapper.deleteByPrimaryKey(taskId);
// 2删除书与任务之间的关联关系 // 2删除书与任务之间的关联关系
bookTaskBindingMapper.deleteByTask(taskId); bookTaskBindingMapper.deleteByTask(taskId);
// 3删除用户对这个任务的订阅关系 // 3删除用户对这个任务的订阅关系
taskSubscribeMapper.unSubscribeTaskByTaskId(taskId); taskSubscribeMapper.unSubscribeTaskByTaskId(taskId);
//4 取消待发送的任务 //4 取消待发送的任务
timeControlTaskSendMapper.cancelSendByTaskId(taskId); timeControlTaskSendMapper.cancelSendByTaskId(taskId);
//取消定时任务
if (SendTypeEnum.SEND_WEEK.state.equals(timeControlTask.getSendType())){
deleteQuartz4TaskId(taskId);
}
taskItemMapper.deleteByTaskId(taskId);
} }
@Override @Override
...@@ -225,7 +241,7 @@ public class TaskBizImpl implements TaskBiz { ...@@ -225,7 +241,7 @@ public class TaskBizImpl implements TaskBiz {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Integer createTaskItem(CreateTaskItemDto createTaskItemDto) { public Integer createTaskItem(CreateTaskItemDto createTaskItemDto) {
Integer taskId = createTaskItemDto.getTaskId(); Integer taskId = createTaskItemDto.getTaskId();
Integer startDay = createTaskItemDto.getStartDay(); Integer startDay = createTaskItemDto.getStartDay();
TimeControlTask timeControlTask = taskMapper.selectByPrimaryKey(taskId); TimeControlTask timeControlTask = taskMapper.selectByPrimaryKey(taskId);
...@@ -275,6 +291,16 @@ public class TaskBizImpl implements TaskBiz { ...@@ -275,6 +291,16 @@ public class TaskBizImpl implements TaskBiz {
} }
taskItemMapper.insert(item); taskItemMapper.insert(item);
Integer taskItemId = item.getId(); Integer taskItemId = item.getId();
List<TimeControlWeekDay> weekDayList=new ArrayList<>();
if (!ListUtils.isEmpty(createTaskItemDto.getWeekdays())){
for (Integer weekDay:createTaskItemDto.getWeekdays()) {
TimeControlWeekDay timeControlWeekDay=new TimeControlWeekDay();
timeControlWeekDay.setTaskItemId(taskItemId);
timeControlWeekDay.setWeekDay(weekDay);
weekDayList.add(timeControlWeekDay);
}
taskItemWeekMapper.batchInsert(weekDayList);
}
List<TimeControlReplyMessage> list = new ArrayList<>(); List<TimeControlReplyMessage> list = new ArrayList<>();
replyMessageList.forEach(message -> { replyMessageList.forEach(message -> {
TimeControlReplyMessage replyMessage = new TimeControlReplyMessage(); TimeControlReplyMessage replyMessage = new TimeControlReplyMessage();
...@@ -297,16 +323,76 @@ public class TaskBizImpl implements TaskBiz { ...@@ -297,16 +323,76 @@ public class TaskBizImpl implements TaskBiz {
}); });
} }
replyMessageMapper.batchInsert(list); replyMessageMapper.batchInsert(list);
if (SendTypeEnum.SEND_WEEK.state.equals(timeControlTask.getSendType())){
EXECUTOR_SERVICE.execute(()->{
addTask4AddTimeControl(createTaskItemDto,taskItemId);
});
}
return taskItemId; return taskItemId;
} }
private void addTask4AddTimeControl(CreateTaskItemDto createTaskItemDto, Integer taskItemId) {
log.info("新增计划时新增定时任务createTaskItemDto:{},taskItemId:{}",createTaskItemDto,taskItemId);
try {
int hour = Integer.parseInt(createTaskItemDto.getSendHour().substring(0, 2));
String weeks = "";
if (TimeControlPushTypeEnum.SEND_EVERY_DAY.state.equals(createTaskItemDto.getPushType())){
weeks = "1,2,3,4,5,6,7";
}else if (TimeControlPushTypeEnum.SEND_4_WEEK.state.equals(createTaskItemDto.getPushType())){
List<Integer> weekdays = createTaskItemDto.getWeekdays();
for (Integer weekDay : weekdays) {
if (weekDay == 7) {
weekDay = 1;
} else {
weekDay = weekDay + 1;
}
weeks = weeks + weekDay + ",";
}
weeks= weeks.substring(0,weeks.length()-1);
}
String cronStr = 0 + " " + 0 + " " + hour + " ? * " + weeks;
String jobName = BookConstant.TIME_CONTROL_SEND + taskItemId;
ScheduleJob job = new ScheduleJob();
//定时器任务
job.setJobName(jobName);
//cron表达式
job.setCronExpression(cronStr);
//定时器分组
job.setJobGroup("book");
CallBackParam param = new CallBackParam();
//service名称
param.setBeanName("timeControlTaskService");
//回调内部接口方法名称
param.setMethodName("sendTimeTaskMessage4Week");
//设置回调参数
Map<String, Object> map = new HashMap<>();
map.put("jobName", jobName);
map.put("taskItemId",taskItemId);
param.setParamMap(map);
Map<String, Object> scheduleMap = new HashMap<>();
scheduleMap.put("scheduleJob", job);
scheduleMap.put("callBackParam", param);
scheduleService.addCronJob(scheduleMap);
} catch (SchedulerException | JsonParseException e) {
log.info("【TaskBizImpl.createCronJob】创建定时任务失败", e);
}
}
@Override @Override
@Transactional
public void deleteTaskItem(Integer taskItemId) { public void deleteTaskItem(Integer taskItemId) {
taskItemMapper.deleteByPrimaryKey(taskItemId); taskItemMapper.deleteByPrimaryKey(taskItemId);
replyMessageMapper.deleteByItemId(taskItemId); replyMessageMapper.deleteByItemId(taskItemId);
//删除待发送任务 //删除待发送任务
timeControlTaskSendMapper.cancelSendByItemId(taskItemId); timeControlTaskSendMapper.cancelSendByItemId(taskItemId);
timeControlTaskItemWeekMapper.batchDelete(Stream.of(taskItemId).collect(Collectors.toList()));
//删除定时任务
try {
scheduleService.deleteJob( BookConstant.TIME_CONTROL_SEND + taskItemId, "book");
} catch (Exception e) {
log.error("删除定时任务失败,taskItemId+" + taskItemId);
}
} }
@Override @Override
...@@ -364,6 +450,18 @@ public class TaskBizImpl implements TaskBiz { ...@@ -364,6 +450,18 @@ public class TaskBizImpl implements TaskBiz {
timeControlTaskItem.setProgressGuidance(0); timeControlTaskItem.setProgressGuidance(0);
} }
taskItemMapper.updateTaskItem(timeControlTaskItem); taskItemMapper.updateTaskItem(timeControlTaskItem);
//删除原week配置
timeControlTaskItemWeekMapper.batchDelete(Stream.of(timeControlTaskItem.getId()).collect(Collectors.toList()));
List<TimeControlWeekDay> weekDayList=new ArrayList<>();
if (!ListUtils.isEmpty(updateTaskItemDto.getWeekdays())){
for (Integer weekDay: updateTaskItemDto.getWeekdays()) {
TimeControlWeekDay timeControlWeekDay=new TimeControlWeekDay();
timeControlWeekDay.setTaskItemId(taskItemId);
timeControlWeekDay.setWeekDay(weekDay);
weekDayList.add(timeControlWeekDay);
}
taskItemWeekMapper.batchInsert(weekDayList);
}
//删除原item下的配置 //删除原item下的配置
replyMessageMapper.deleteByItemId(taskItemId); replyMessageMapper.deleteByItemId(taskItemId);
//重新插入 //重新插入
...@@ -395,10 +493,19 @@ public class TaskBizImpl implements TaskBiz { ...@@ -395,10 +493,19 @@ public class TaskBizImpl implements TaskBiz {
public TaskItemDto getTaskItem(Integer id) { public TaskItemDto getTaskItem(Integer id) {
TaskItemDto taskItemDto = new TaskItemDto(); TaskItemDto taskItemDto = new TaskItemDto();
TimeControlTaskItem timeControlTaskItem = taskItemMapper.selectByPrimaryKey(id); TimeControlTaskItem timeControlTaskItem = taskItemMapper.selectByPrimaryKey(id);
if(timeControlTaskItem==null){
return new TaskItemDto();
}
BeanUtils.copyProperties(timeControlTaskItem, taskItemDto);
List<TimeControlWeekDay> weekDayList=taskItemWeekMapper.selectByItemId(id);
List<Integer> weekdays=new ArrayList<>();
for (TimeControlWeekDay weekDay:weekDayList) {
weekdays.add(weekDay.getWeekDay());
}
taskItemDto.setWeekdays(weekdays);
if (null == timeControlTaskItem) { if (null == timeControlTaskItem) {
return taskItemDto; return taskItemDto;
} }
BeanUtils.copyProperties(timeControlTaskItem, taskItemDto);
List<TimeControlReplyMessage> list = replyMessageMapper.list4TaskItem(id, 0); List<TimeControlReplyMessage> list = replyMessageMapper.list4TaskItem(id, 0);
List<TimeControlReplyMessage> completeReplyMessageList = replyMessageMapper.list4TaskItem(id, 1); List<TimeControlReplyMessage> completeReplyMessageList = replyMessageMapper.list4TaskItem(id, 1);
List<ReplyMessageDto> messageDtos = new ArrayList<>(); List<ReplyMessageDto> messageDtos = new ArrayList<>();
...@@ -814,4 +921,70 @@ public class TaskBizImpl implements TaskBiz { ...@@ -814,4 +921,70 @@ public class TaskBizImpl implements TaskBiz {
return null; return null;
} }
@Override
public void addTask4TimeControl() {
try {
String cronStr = "0 0 0 * * ?";
String jobName = BookConstant.TIME_CONTROL_UPDATE_SEND;
ScheduleJob job = new ScheduleJob();
//定时器任务
job.setJobName(jobName);
//cron表达式
job.setCronExpression(cronStr);
//定时器分组
job.setJobGroup("book");
CallBackParam param = new CallBackParam();
//service名称
param.setBeanName("timeControlTaskService");
//回调内部接口方法名称
param.setMethodName("updateSendState4Week");
//设置回调参数
Map<String, Object> map = new HashMap<>();
map.put("jobName", jobName);
param.setParamMap(map);
Map<String, Object> scheduleMap = new HashMap<>();
scheduleMap.put("scheduleJob", job);
scheduleMap.put("callBackParam", param);
scheduleService.addCronJob(scheduleMap);
} catch (SchedulerException | JsonParseException e) {
log.info("【TaskBizImpl.createCronJob】创建定时任务失败", e);
}
}
@Override
@ParamLog("定时任务更新send表发送状态")
public void updateSendState4Week() {
timeControlTaskSendMapper.updateSendState4Week();
}
@Override
@ParamLog("修改任务模板的发送方式")
public void updateTaskSendType(TimeControlTask taskDto) {
//由周转为天需将之前的周的定时任务删掉
if (SendTypeEnum.SEND_DAY.state.equals(taskDto.getSendType())){
deleteQuartz4TaskId(taskDto.getTaskId());
}
//删除之前的任务
taskItemMapper.deleteByTaskId(taskDto.getTaskId());
taskMapper.updateTaskSendType(taskDto);
}
private void deleteQuartz4TaskId(Integer taskId) {
//同时删除定时任务
List<TimeControlTaskItem> timeControlTaskItems = taskItemMapper.listByTaskId(taskId);
if (ListUtils.isEmpty(timeControlTaskItems)){
return;
}
List<Integer> taskItemIds = timeControlTaskItems.stream().map(TimeControlTaskItem::getId).collect(Collectors.toList());
//删除周任务
timeControlTaskItemWeekMapper.batchDelete(taskItemIds);
taskItemIds.forEach(id ->{
try {
scheduleService.deleteJob( BookConstant.TIME_CONTROL_SEND + id, "book");
} catch (Exception e) {
log.error("删除定时任务失败,taskItemId+" + id);
}
});
}
} }
...@@ -20,11 +20,14 @@ import com.pcloud.book.timecontrol.mapper.TaskPrizeMapper; ...@@ -20,11 +20,14 @@ import com.pcloud.book.timecontrol.mapper.TaskPrizeMapper;
import com.pcloud.book.timecontrol.mapper.TimeControlReplyMessageMapper; import com.pcloud.book.timecontrol.mapper.TimeControlReplyMessageMapper;
import com.pcloud.book.timecontrol.mapper.TimeControlTaskItemMapper; import com.pcloud.book.timecontrol.mapper.TimeControlTaskItemMapper;
import com.pcloud.book.timecontrol.mapper.TimeControlTaskMapper; import com.pcloud.book.timecontrol.mapper.TimeControlTaskMapper;
import com.pcloud.book.timecontrol.mapper.TimeControlTaskSendDetailMapper;
import com.pcloud.book.timecontrol.mapper.TimeControlTaskSendMapper; import com.pcloud.book.timecontrol.mapper.TimeControlTaskSendMapper;
import com.pcloud.book.timecontrol.mapper.TimeControlTaskSubscribeMapper; import com.pcloud.book.timecontrol.mapper.TimeControlTaskSubscribeMapper;
import com.pcloud.book.timecontrol.vo.request.TimeControlTaskItemVO;
import com.pcloud.common.constant.CacheConstant; import com.pcloud.common.constant.CacheConstant;
import com.pcloud.common.exceptions.BizException; import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.page.PageBeanNew; import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.utils.DateUtils;
import com.pcloud.common.utils.ListUtils; import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.cache.redis.JedisClusterUtils; import com.pcloud.common.utils.cache.redis.JedisClusterUtils;
import com.pcloud.common.utils.string.StringUtil; import com.pcloud.common.utils.string.StringUtil;
...@@ -38,11 +41,7 @@ import org.slf4j.LoggerFactory; ...@@ -38,11 +41,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.ArrayList; import java.util.*;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -80,6 +79,8 @@ public class TaskCompletedBizImpl implements TaskCompletedBiz { ...@@ -80,6 +79,8 @@ public class TaskCompletedBizImpl implements TaskCompletedBiz {
//private PcloudKeywordService pcloudKeywordService; //private PcloudKeywordService pcloudKeywordService;
@Autowired @Autowired
private ResourceConsr resourceConsr; private ResourceConsr resourceConsr;
@Autowired
private TimeControlTaskSendDetailMapper timeControlTaskSendDetailMapper;
@Override @Override
...@@ -121,12 +122,12 @@ public class TaskCompletedBizImpl implements TaskCompletedBiz { ...@@ -121,12 +122,12 @@ public class TaskCompletedBizImpl implements TaskCompletedBiz {
private void fillUserCompletedList(Integer taskId, List<SubscribeTaskUserDTO> list) { private void fillUserCompletedList(Integer taskId, List<SubscribeTaskUserDTO> list) {
List<String> wxIdList = list.stream().map(a -> a.getWxUserId()).distinct().collect(Collectors.toList()); List<String> wxIdList = list.stream().map(a -> a.getWxUserId()).distinct().collect(Collectors.toList());
//未完成次数 //未完成次数 不需要展示未完成次数
List<SubscribeTaskUserDTO> taskUserSendList=timeControlTaskSendMapper.getTaskNoCompletedCount(wxIdList,taskId); //List<SubscribeTaskUserDTO> taskUserSendList=timeControlTaskSendMapper.getTaskNoCompletedCount(wxIdList,taskId);
Map<String, Integer> noCompletedMap=new HashMap<>(); Map<String, Integer> noCompletedMap=new HashMap<>();
if(!ListUtils.isEmpty(taskUserSendList)){ /* if(!ListUtils.isEmpty(taskUserSendList)){
noCompletedMap= taskUserSendList.stream().collect(Collectors.toMap(a -> a.getWxUserId(), a -> a.getNoCompletedCount(), (k1, k2) -> k2)); noCompletedMap= taskUserSendList.stream().collect(Collectors.toMap(a -> a.getWxUserId(), a -> a.getNoCompletedCount(), (k1, k2) -> k2));
} }*/
Map<String, GroupUserDTO> userDTOMap = wechatGroupConsr.mapWxUserInfoByWxIdList(wxIdList); Map<String, GroupUserDTO> userDTOMap = wechatGroupConsr.mapWxUserInfoByWxIdList(wxIdList);
for (SubscribeTaskUserDTO subscribeTaskUserDTO : list) { for (SubscribeTaskUserDTO subscribeTaskUserDTO : list) {
//填充未完成次数 //填充未完成次数
...@@ -152,11 +153,11 @@ public class TaskCompletedBizImpl implements TaskCompletedBiz { ...@@ -152,11 +153,11 @@ public class TaskCompletedBizImpl implements TaskCompletedBiz {
public PageBeanNew<TaskItemSendDto> listTaskItemSendRecord4Pcloud(Integer currentPage, Integer numPerPage, String startTime, String endTime, String robotWxId, String taskName, String sendContent, String search) { public PageBeanNew<TaskItemSendDto> listTaskItemSendRecord4Pcloud(Integer currentPage, Integer numPerPage, String startTime, String endTime, String robotWxId, String taskName, String sendContent, String search) {
List<TaskItemSendDto> list = new ArrayList<>(); List<TaskItemSendDto> list = new ArrayList<>();
Integer count = timeControlTaskSendMapper.getTaskItemSendCount(startTime,endTime,robotWxId,taskName,sendContent); Integer count = timeControlTaskSendDetailMapper.getTaskItemSendCount(startTime,endTime,robotWxId,taskName,sendContent);
if (count <= 0) { if (count <= 0) {
return new PageBeanNew<>(currentPage, numPerPage, count, list); return new PageBeanNew<>(currentPage, numPerPage, count, list);
} }
list = timeControlTaskSendMapper.listTaskItemSendRecord4Pcloud(currentPage * numPerPage, numPerPage,startTime,endTime,robotWxId,taskName,sendContent); list = timeControlTaskSendDetailMapper.listTaskItemSendRecord4Pcloud(currentPage * numPerPage, numPerPage,startTime,endTime,robotWxId,taskName,sendContent);
log.info("发送记录查询条数="+list.size()); log.info("发送记录查询条数="+list.size());
if(ListUtils.isEmpty(list)){ if(ListUtils.isEmpty(list)){
return new PageBeanNew<>(currentPage, numPerPage, count, list); return new PageBeanNew<>(currentPage, numPerPage, count, list);
...@@ -224,11 +225,11 @@ public class TaskCompletedBizImpl implements TaskCompletedBiz { ...@@ -224,11 +225,11 @@ public class TaskCompletedBizImpl implements TaskCompletedBiz {
return new PageBeanNew<>(currentPage, numPerPage, 0, list); return new PageBeanNew<>(currentPage, numPerPage, 0, list);
} }
} }
Integer count = timeControlTaskSendMapper.getTaskItemSendUserCount(wxIds, taskItemId, robotWxId, startTime, endTime); Integer count = timeControlTaskSendDetailMapper.getTaskItemSendUserCount(wxIds, taskItemId, robotWxId, startTime, endTime);
if (count <= 0) { if (count <= 0) {
return new PageBeanNew<>(currentPage, numPerPage, count, list); return new PageBeanNew<>(currentPage, numPerPage, count, list);
} }
list = timeControlTaskSendMapper.listTaskItemSendUser4Pcloud(currentPage * numPerPage, numPerPage, wxIds, taskItemId, robotWxId, startTime, endTime); list = timeControlTaskSendDetailMapper.listTaskItemSendUser4Pcloud(currentPage * numPerPage, numPerPage, wxIds, taskItemId, robotWxId, startTime, endTime);
if (ListUtils.isEmpty(list)) { if (ListUtils.isEmpty(list)) {
return new PageBeanNew<>(currentPage, numPerPage, count, list); return new PageBeanNew<>(currentPage, numPerPage, count, list);
} }
...@@ -249,7 +250,7 @@ public class TaskCompletedBizImpl implements TaskCompletedBiz { ...@@ -249,7 +250,7 @@ public class TaskCompletedBizImpl implements TaskCompletedBiz {
@Override @Override
public TodayTaskSendDto getTodayTaskSend() { public TodayTaskSendDto getTodayTaskSend() {
TodayTaskSendDto todayTaskSendDto=new TodayTaskSendDto(); TodayTaskSendDto todayTaskSendDto=new TodayTaskSendDto();
Integer todayTaskSendCount = timeControlTaskSendMapper.todayTaskSendCount(); Integer todayTaskSendCount = timeControlTaskSendDetailMapper.todayTaskSendCount();
Integer todayTaskNotSendCount = timeControlTaskSendMapper.todayTaskNotSendCount(); Integer todayTaskNotSendCount = timeControlTaskSendMapper.todayTaskNotSendCount();
todayTaskSendDto.setTodaySendCount(todayTaskSendCount); todayTaskSendDto.setTodaySendCount(todayTaskSendCount);
todayTaskSendDto.setTodayNotSendCount(todayTaskNotSendCount); todayTaskSendDto.setTodayNotSendCount(todayTaskNotSendCount);
...@@ -258,10 +259,59 @@ public class TaskCompletedBizImpl implements TaskCompletedBiz { ...@@ -258,10 +259,59 @@ public class TaskCompletedBizImpl implements TaskCompletedBiz {
@Override @Override
public List<String> getTaskSendDateList(String date) { public List<String> getTaskSendDateList(String date) {
List<String> taskSendDateList = timeControlTaskSendDetailMapper.getTaskSendDateList(date);
/* //获取sendType=1的时间集合
List<String> taskSendDateList = timeControlTaskSendMapper.getTaskSendDateList(date); List<String> taskSendDateList = timeControlTaskSendMapper.getTaskSendDateList(date);
if(ListUtils.isEmpty(taskSendDateList)){
taskSendDateList=new ArrayList<>();
}
//获取sendType=2 pushType=1的时间集合
date=date+"-01";
TimeControlTaskItemVO monthDay = taskItemMapper.getMonthDay(date);
List<Date> betweenDates = getBetweenDates(monthDay.getStartDay(), monthDay.getEndDay());
for (Date dateStr:betweenDates) {
String str = DateUtils.formatDate(dateStr, "yyyy-MM-dd");
if(!ListUtils.isEmpty(taskSendDateList)&&!taskSendDateList.contains(str)){
taskSendDateList.add(str);
}
}
//获取sendType=2 pushType=2的时间集合
List<TimeControlTaskItemVO> monthSecondDay=taskItemMapper.getMonthSecondDay(date);
for (TimeControlTaskItemVO taskItemVO:monthSecondDay) {
List<Date> betdate = getBetweenDates(taskItemVO.getStartDay(), taskItemVO.getEndDay());
for(int d=0;d<betdate.size();d++) {
Calendar betrq = Calendar.getInstance();
betrq.setTime(betdate.get(d));
Integer day = betrq.get(Calendar.DAY_OF_WEEK)-1;
if(day==0){
day=7;
}
String str1 = DateUtils.formatDate(betrq.getTime(), "yyyy-MM-dd");
if(!ListUtils.isEmpty(taskSendDateList)&&taskItemVO.getWeekDays().contains(day.toString())&&!taskSendDateList.contains(str1)){
taskSendDateList.add(str1);
}
}
}*/
return taskSendDateList; return taskSendDateList;
} }
private List<Date> getBetweenDates(Date start, Date end) {
List<Date> datelist = new ArrayList<Date>();
Calendar tempStart = Calendar.getInstance();
tempStart.setTime(start);
//tempStart.add(Calendar.DAY_OF_YEAR, 1);//这里可以设置从第二天开始
Calendar tempEnd = Calendar.getInstance();
tempEnd.setTime(end);
while (tempStart.before(tempEnd)) {
datelist.add(tempStart.getTime());
tempStart.add(Calendar.DAY_OF_YEAR, 1);
}
return datelist;
}
@Override @Override
public TaskProgressDTO getUserTaskProgress(Integer taskId, String wxUserId) throws BizException { public TaskProgressDTO getUserTaskProgress(Integer taskId, String wxUserId) throws BizException {
TaskProgressDTO taskProgressDTO = new TaskProgressDTO(); TaskProgressDTO taskProgressDTO = new TaskProgressDTO();
...@@ -283,7 +333,7 @@ public class TaskCompletedBizImpl implements TaskCompletedBiz { ...@@ -283,7 +333,7 @@ public class TaskCompletedBizImpl implements TaskCompletedBiz {
taskProgressDTO.setFinishCount(progressDTO.getFinishCount()); taskProgressDTO.setFinishCount(progressDTO.getFinishCount());
} }
taskProgressDTO.setTaskCount(taskItemMapper.getTaskItemCount(taskId)); taskProgressDTO.setTaskCount(taskItemMapper.getTaskItemCount(taskId));
List<TaskProgressItemDTO> itemList = timeControlTaskSendMapper.getUserTaskItemProgress(taskId, wxUserId); List<TaskProgressItemDTO> itemList = timeControlTaskSendDetailMapper.getUserTaskItemProgress(taskId, wxUserId);
taskProgressDTO.setItemList(itemList); taskProgressDTO.setItemList(itemList);
Integer finishTaskCount = 0; Integer finishTaskCount = 0;
if (!ListUtils.isEmpty(itemList)) { if (!ListUtils.isEmpty(itemList)) {
......
...@@ -2,6 +2,7 @@ package com.pcloud.book.timecontrol.biz.impl; ...@@ -2,6 +2,7 @@ package com.pcloud.book.timecontrol.biz.impl;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.consumer.app.AppConsr; import com.pcloud.book.consumer.app.AppConsr;
import com.pcloud.book.consumer.channel.QrcodeSceneConsr; import com.pcloud.book.consumer.channel.QrcodeSceneConsr;
import com.pcloud.book.consumer.content.ResourceConsr; import com.pcloud.book.consumer.content.ResourceConsr;
...@@ -28,17 +29,23 @@ import com.pcloud.book.timecontrol.entity.TimeControlTask; ...@@ -28,17 +29,23 @@ import com.pcloud.book.timecontrol.entity.TimeControlTask;
import com.pcloud.book.timecontrol.entity.TimeControlTaskItem; import com.pcloud.book.timecontrol.entity.TimeControlTaskItem;
import com.pcloud.book.timecontrol.entity.TimeControlTaskSend; import com.pcloud.book.timecontrol.entity.TimeControlTaskSend;
import com.pcloud.book.timecontrol.entity.TimeControlTaskSubscribe; import com.pcloud.book.timecontrol.entity.TimeControlTaskSubscribe;
import com.pcloud.book.timecontrol.entity.TimeControlWeekDay;
import com.pcloud.book.timecontrol.enums.TimeControlPushTypeEnum;
import com.pcloud.book.timecontrol.enums.SendTypeEnum;
import com.pcloud.book.timecontrol.enums.TaskSendStateEnum; import com.pcloud.book.timecontrol.enums.TaskSendStateEnum;
import com.pcloud.book.timecontrol.enums.TaskSubscribeStateEnum; import com.pcloud.book.timecontrol.enums.TaskSubscribeStateEnum;
import com.pcloud.book.timecontrol.mapper.TimeControlReplyMessageMapper; import com.pcloud.book.timecontrol.mapper.TimeControlReplyMessageMapper;
import com.pcloud.book.timecontrol.mapper.TimeControlTaskItemMapper; import com.pcloud.book.timecontrol.mapper.TimeControlTaskItemMapper;
import com.pcloud.book.timecontrol.mapper.TimeControlTaskItemWeekMapper;
import com.pcloud.book.timecontrol.mapper.TimeControlTaskMapper; import com.pcloud.book.timecontrol.mapper.TimeControlTaskMapper;
import com.pcloud.book.timecontrol.mapper.TimeControlTaskSendDetailMapper;
import com.pcloud.book.timecontrol.mapper.TimeControlTaskSendMapper; import com.pcloud.book.timecontrol.mapper.TimeControlTaskSendMapper;
import com.pcloud.book.timecontrol.mapper.TimeControlTaskSubscribeMapper; import com.pcloud.book.timecontrol.mapper.TimeControlTaskSubscribeMapper;
import com.pcloud.book.util.common.YesOrNoEnums; import com.pcloud.book.util.common.YesOrNoEnums;
import com.pcloud.channelcenter.base.constants.ChannelConstants; import com.pcloud.channelcenter.base.constants.ChannelConstants;
import com.pcloud.channelcenter.wechat.dto.AccountSettingDto; import com.pcloud.channelcenter.wechat.dto.AccountSettingDto;
import com.pcloud.common.core.aspect.ParamLog; import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.utils.BeanUtils;
import com.pcloud.common.utils.DateUtils; import com.pcloud.common.utils.DateUtils;
import com.pcloud.common.utils.ListUtils; import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.httpclient.UrlUtils; import com.pcloud.common.utils.httpclient.UrlUtils;
...@@ -124,14 +131,18 @@ public class TaskSubscribeBizImpl implements TaskSubscribeBiz { ...@@ -124,14 +131,18 @@ public class TaskSubscribeBizImpl implements TaskSubscribeBiz {
private PcloudSkillRecordDao pcloudSkillRecordDao; private PcloudSkillRecordDao pcloudSkillRecordDao;
@Autowired @Autowired
private TaskBiz taskBiz; private TaskBiz taskBiz;
@Autowired
private TimeControlTaskItemWeekMapper timeControlTaskItemWeekMapper;
@Autowired
private TimeControlTaskSendDetailMapper timeControlTaskSendDetailMapper;
@Override @Override
@ParamLog("任务订阅") @ParamLog("任务订阅")
public void subscribeTask(String wxUserId, Long bookId, Integer taskId, String robotWxId) { public void subscribeTask(String wxUserId, Long bookId, Integer taskId, String robotWxId) {
//更新技能记录列表状态 //更新技能记录列表状态
List<Long> skillIds = pcloudSkillDao.getListByRelId(taskId); List<Long> skillIds = pcloudSkillDao.getListByRelId(taskId);
if (!ListUtils.isEmpty(skillIds)){ if (!ListUtils.isEmpty(skillIds)) {
pcloudSkillRecordDao.batchUpdateState4ResourceAndActivity(wxUserId,skillIds,1); pcloudSkillRecordDao.batchUpdateState4ResourceAndActivity(wxUserId, skillIds, 1);
} }
TimeControlTask timeControlTask = taskMapper.selectByPrimaryKey(taskId); TimeControlTask timeControlTask = taskMapper.selectByPrimaryKey(taskId);
if (null == timeControlTask) { if (null == timeControlTask) {
...@@ -158,25 +169,7 @@ public class TaskSubscribeBizImpl implements TaskSubscribeBiz { ...@@ -158,25 +169,7 @@ public class TaskSubscribeBizImpl implements TaskSubscribeBiz {
taskSubscribe.setRobotWxId(robotWxId); taskSubscribe.setRobotWxId(robotWxId);
taskSubscribeMapper.subscribeTask(taskSubscribe); taskSubscribeMapper.subscribeTask(taskSubscribe);
} }
//插入待发送记录 insertTaskSend(wxUserId, bookId, taskId, timeControlTask, taskSubscribe);
List<ReplyMessageBaseDto> dayList = taskItemMapper.listTaskItemDay(taskId);
List<TimeControlTaskSend> taskSendList = new ArrayList<>();
if (!ListUtils.isEmpty(dayList)) {
for (ReplyMessageBaseDto item : dayList) {
TimeControlTaskSend taskSend = new TimeControlTaskSend();
taskSend.setWxUserId(wxUserId);
taskSend.setBookId(bookId);
taskSend.setTaskId(taskId);
taskSend.setSubscribeId(taskSubscribe.getId());
taskSend.setSendState(TaskSendStateEnum.WAIT_SEND.state);
taskSend.setTaskItemId(item.getId());
taskSend.setSendDay(DateUtils.getShortDateStr(DateUtils.addDay(new Date(), item.getStartDay())));
taskSend.setSendHour(item.getSendHour());
taskSendList.add(taskSend);
}
LOGGER.info("111");
timeControlTaskSendMapper.batchInsert(taskSendList);
}
//订阅成功个人号回复消息 //订阅成功个人号回复消息
EXECUTOR_SERVICE.execute(() -> { EXECUTOR_SERVICE.execute(() -> {
PcloudSkill pcloudSkill = pcloudSkillDao.getByRelId(taskId, SkillTypeEnum.TIME_MANAGE.value); PcloudSkill pcloudSkill = pcloudSkillDao.getByRelId(taskId, SkillTypeEnum.TIME_MANAGE.value);
...@@ -201,6 +194,51 @@ public class TaskSubscribeBizImpl implements TaskSubscribeBiz { ...@@ -201,6 +194,51 @@ public class TaskSubscribeBizImpl implements TaskSubscribeBiz {
LOGGER.info("222"); LOGGER.info("222");
} }
private void insertTaskSend(String wxUserId, Long bookId, Integer taskId, TimeControlTask timeControlTask,
TimeControlTaskSubscribe taskSubscribe) {
List<ReplyMessageBaseDto> dayList = taskItemMapper.listTaskItemDay(taskId);
List<TimeControlTaskSend> taskSendList = new ArrayList<>();
if (!ListUtils.isEmpty(dayList)) {
if (SendTypeEnum.SEND_DAY.state.equals(timeControlTask.getSendType())) {
for (ReplyMessageBaseDto item : dayList) {
TimeControlTaskSend taskSend = new TimeControlTaskSend();
taskSend.setWxUserId(wxUserId);
taskSend.setBookId(bookId);
taskSend.setTaskId(taskId);
taskSend.setSubscribeId(taskSubscribe.getId());
taskSend.setSendState(TaskSendStateEnum.WAIT_SEND.state);
taskSend.setTaskItemId(item.getId());
taskSend.setSendDay(DateUtils.getShortDateStr(DateUtils.addDay(new Date(), item.getStartDay())));
taskSend.setSendHour(item.getSendHour());
taskSendList.add(taskSend);
}
} else if (SendTypeEnum.SEND_WEEK.state.equals(timeControlTask.getSendType())) {
for (ReplyMessageBaseDto item : dayList) {
List<Integer> weekdays = item.getWeekdays();
if (!ListUtils.isEmpty(weekdays)) {
for (Integer weekDay : weekdays){
TimeControlTaskSend taskSend = new TimeControlTaskSend();
taskSend.setWxUserId(wxUserId);
taskSend.setBookId(bookId);
taskSend.setTaskId(taskId);
taskSend.setSubscribeId(taskSubscribe.getId());
taskSend.setSendState(TaskSendStateEnum.WAIT_SEND.state);
taskSend.setTaskItemId(item.getId());
taskSend.setSendWeek(weekDay);
taskSend.setSendCount(0);
taskSend.setSendHour(item.getSendHour());
taskSendList.add(taskSend);
}
}
}
}
LOGGER.info("111");
if (!ListUtils.isEmpty(taskSendList)){
timeControlTaskSendMapper.batchInsert(taskSendList);
}
}
}
@ParamLog @ParamLog
private void sendReply(PcloudSubReply pcloudSubReply, String userWxId, String robotWxId, String ip, String messageGroupId, Integer count, Integer index) { private void sendReply(PcloudSubReply pcloudSubReply, String userWxId, String robotWxId, String ip, String messageGroupId, Integer count, Integer index) {
Integer type = pcloudSubReply.getType(); Integer type = pcloudSubReply.getType();
...@@ -337,6 +375,7 @@ public class TaskSubscribeBizImpl implements TaskSubscribeBiz { ...@@ -337,6 +375,7 @@ public class TaskSubscribeBizImpl implements TaskSubscribeBiz {
if(ListUtils.isEmpty(taskSendList)){ if(ListUtils.isEmpty(taskSendList)){
return; return;
} }
addSendDetails(taskSendList);
Map<String, List<TaskSendDto>> collect = taskSendList.stream().collect(Collectors.groupingBy(taskSendDto -> taskSendDto.getWxUserId() + "_" + taskSendDto.getTaskId())); Map<String, List<TaskSendDto>> collect = taskSendList.stream().collect(Collectors.groupingBy(taskSendDto -> taskSendDto.getWxUserId() + "_" + taskSendDto.getTaskId()));
for (String s : collect.keySet()) { for (String s : collect.keySet()) {
sendTaskMsg(collect.get(s)); sendTaskMsg(collect.get(s));
...@@ -349,6 +388,7 @@ public class TaskSubscribeBizImpl implements TaskSubscribeBiz { ...@@ -349,6 +388,7 @@ public class TaskSubscribeBizImpl implements TaskSubscribeBiz {
int count = 0; int count = 0;
for(TaskSendDto sendDto : taskSendList) { for(TaskSendDto sendDto : taskSendList) {
count++; count++;
Integer taskId = sendDto.getTaskId();
Integer taskItemId = sendDto.getTaskItemId(); Integer taskItemId = sendDto.getTaskItemId();
TimeControlTaskItem timeControlTaskItem = taskItemMapper.selectByPrimaryKey(taskItemId); TimeControlTaskItem timeControlTaskItem = taskItemMapper.selectByPrimaryKey(taskItemId);
if (null == timeControlTaskItem) { if (null == timeControlTaskItem) {
...@@ -378,7 +418,7 @@ public class TaskSubscribeBizImpl implements TaskSubscribeBiz { ...@@ -378,7 +418,7 @@ public class TaskSubscribeBizImpl implements TaskSubscribeBiz {
sendTextMessageVO.setRobotProcessType(RobotProcessTypeEnum.TIME_CONTROL); sendTextMessageVO.setRobotProcessType(RobotProcessTypeEnum.TIME_CONTROL);
wechatGroupConsr.sendMessage(JSON.toJSONString(sendTextMessageVO)); wechatGroupConsr.sendMessage(JSON.toJSONString(sendTextMessageVO));
} }
if (YesOrNoEnums.YES.getValue().equals(timeControlTaskItem.getFinishConfirm()) || YesOrNoEnums.YES.getValue().equals(timeControlTaskItem.getTdConfirm())){ if (YesOrNoEnums.YES.getValue().equals(timeControlTaskItem.getTdConfirm())){
//封装退订提醒 //封装退订提醒
SendTextMessageVO sendTextMessageVO = new SendTextMessageVO(); SendTextMessageVO sendTextMessageVO = new SendTextMessageVO();
sendTextMessageVO.setCode(SendMessageTypeEnum.SELF.getCode()); sendTextMessageVO.setCode(SendMessageTypeEnum.SELF.getCode());
...@@ -387,15 +427,6 @@ public class TaskSubscribeBizImpl implements TaskSubscribeBiz { ...@@ -387,15 +427,6 @@ public class TaskSubscribeBizImpl implements TaskSubscribeBiz {
sendTextMessageVO.setWxGroupId(wxUserId); sendTextMessageVO.setWxGroupId(wxUserId);
sendTextMessageVO.setIp(ip); sendTextMessageVO.setIp(ip);
String content = ""; String content = "";
if (YesOrNoEnums.YES.getValue().equals(timeControlTaskItem.getFinishConfirm())) {
String finishLinkUrl = timeControlTaskItem.getFinishLinkUrl();
if (finishLinkUrl != null) {
String baseUrl = wechatGroupLinkPrefix + "/link?";
finishLinkUrl = baseUrl + "wxId=" +wxUserId+"&taskSendId=" +taskSendId+"&url=" + URLEncoder.encode(finishLinkUrl);
String resultUrl = UrlUtils.getShortUrl4Own(finishLinkUrl);
content = content + timeControlTaskItem.getFinishLinkIntroduce() + "\n" + resultUrl;
}
}
if (YesOrNoEnums.YES.getValue().equals(timeControlTaskItem.getTdConfirm())) { if (YesOrNoEnums.YES.getValue().equals(timeControlTaskItem.getTdConfirm())) {
if (StringUtil.isEmpty(content)) { if (StringUtil.isEmpty(content)) {
content = content + "如需退订,请回复 TD" + sendDto.getTaskId(); content = content + "如需退订,请回复 TD" + sendDto.getTaskId();
...@@ -410,6 +441,7 @@ public class TaskSubscribeBizImpl implements TaskSubscribeBiz { ...@@ -410,6 +441,7 @@ public class TaskSubscribeBizImpl implements TaskSubscribeBiz {
sendTextMessageVO.setRobotProcessType(RobotProcessTypeEnum.TIME_CONTROL); sendTextMessageVO.setRobotProcessType(RobotProcessTypeEnum.TIME_CONTROL);
wechatGroupConsr.sendMessage(JSON.toJSONString(sendTextMessageVO));; wechatGroupConsr.sendMessage(JSON.toJSONString(sendTextMessageVO));;
} }
if (YesOrNoEnums.YES.getValue().equals(timeControlTaskItem.getProgressGuidance())) { if (YesOrNoEnums.YES.getValue().equals(timeControlTaskItem.getProgressGuidance())) {
//封装任务进度 //封装任务进度
SendTextMessageVO sendTextMessageVO = new SendTextMessageVO(); SendTextMessageVO sendTextMessageVO = new SendTextMessageVO();
...@@ -428,21 +460,117 @@ public class TaskSubscribeBizImpl implements TaskSubscribeBiz { ...@@ -428,21 +460,117 @@ public class TaskSubscribeBizImpl implements TaskSubscribeBiz {
sendTextMessageVO.setRobotProcessType(RobotProcessTypeEnum.TIME_CONTROL); sendTextMessageVO.setRobotProcessType(RobotProcessTypeEnum.TIME_CONTROL);
wechatGroupConsr.sendMessage(JSON.toJSONString(sendTextMessageVO));; wechatGroupConsr.sendMessage(JSON.toJSONString(sendTextMessageVO));;
} }
TimeControlTask timeControlTask = taskMapper.selectByPrimaryKey(taskId);
//更新发送状态 //更新发送状态
Integer completeState = null; Integer completeState = null;
Integer weekDay = DateUtils.getWeek();
if(weekDay == 1){
weekDay = 7;
}else{
weekDay = --weekDay;
}
Integer maxWeekDay = timeControlTaskItemWeekMapper.getMaxWeekDay(taskItemId);
if (!YesOrNoEnums.YES.getValue().equals(timeControlTaskItem.getFinishConfirm())) { if (!YesOrNoEnums.YES.getValue().equals(timeControlTaskItem.getFinishConfirm())) {
completeState = 1; //根据日期来判断完成状态
if (SendTypeEnum.SEND_DAY.state.equals(timeControlTask.getSendType())){
completeState = 1;
}else if (SendTypeEnum.SEND_WEEK.state.equals(timeControlTask.getSendType())){
Date nextSendDate = DateUtils.addDay(new Date(),7);
Date shortNextSendDate = DateUtils.dateFormat(nextSendDate);
if (TimeControlPushTypeEnum.SEND_EVERY_DAY.state.equals(timeControlTask.getSendType())){
//如果每天发送今天等于结束时间则结束
if (DateUtils.dateFormat(new Date()).equals(timeControlTaskItem.getEndTime())){
completeState = 1;
}
}else if(maxWeekDay != null && maxWeekDay.equals(weekDay) && TimeControlPushTypeEnum.SEND_4_WEEK.state.equals(timeControlTask.getSendType())){
//如果下一次执行的时候大于最大时间则算完成了
if (shortNextSendDate.after(timeControlTaskItem.getEndTime())){
completeState = 1;
}
}
}
} else if (YesOrNoEnums.YES.getValue().equals(timeControlTaskItem.getFinishConfirm())){
//根据日期来判断完成状态
if (SendTypeEnum.SEND_DAY.state.equals(timeControlTask.getSendType())){
send4Finish(timeControlTaskItem, robotWxId, wxUserId, ip, taskSendId);
}else if (SendTypeEnum.SEND_WEEK.state.equals(timeControlTask.getSendType())) {
Date nextSendDate = DateUtils.addDay(new Date(), 7);
Date shortNextSendDate = DateUtils.dateFormat(nextSendDate);
if (TimeControlPushTypeEnum.SEND_EVERY_DAY.state.equals(timeControlTask.getSendType())) {
//如果每天发送今天等于结束时间则结束
if (DateUtils.dateFormat(new Date()).equals(timeControlTaskItem.getEndTime())) {
send4Finish(timeControlTaskItem, robotWxId, wxUserId, ip, taskSendId);
completeState = 1;
}
} else if (maxWeekDay != null && maxWeekDay.equals(weekDay) && TimeControlPushTypeEnum.SEND_4_WEEK.state
.equals(timeControlTask.getSendType())) {
//如果下一次执行的时候大于最大时间则算完成了
if (shortNextSendDate.after(timeControlTaskItem.getEndTime())) {
send4Finish(timeControlTaskItem, robotWxId, wxUserId, ip, taskSendId);
completeState = 1;
}
}
}
} }
timeControlTaskSendMapper.updateSendState(sendDto.getId(), TaskSendStateEnum.FINISH_SEND.getState(), completeState); timeControlTaskSendMapper.updateSendState(sendDto.getId(), TaskSendStateEnum.FINISH_SEND.getState(), completeState);
//如果是按周发送则增加发送次数
if (SendTypeEnum.SEND_WEEK.state.equals(timeControlTask.getSendType())){
timeControlTaskSendMapper.addSendCount(sendDto.getId());
}
//每次都要判断一下是否所有单项任务都完成。完成之后需要同步修改关注表里面完成状态 //每次都要判断一下是否所有单项任务都完成。完成之后需要同步修改关注表里面完成状态
if(count==taskSendList.size()) { if (SendTypeEnum.SEND_DAY.state.equals(timeControlTask.getSendType())){
Integer noCompletedItem = timeControlTaskSendMapper.getNoCompletedCount(timeControlTaskSend.getSubscribeId()); if(count==taskSendList.size()) {
if (noCompletedItem == 0) { Integer noCompletedItem = timeControlTaskSendMapper.getNoCompletedCount(timeControlTaskSend.getSubscribeId());
taskSubscribeMapper.completedTaskById(timeControlTaskSend.getSubscribeId()); if (noCompletedItem == 0) {
taskSubscribeMapper.completedTaskById(timeControlTaskSend.getSubscribeId());
}
}
}else if (SendTypeEnum.SEND_WEEK.state.equals(timeControlTask.getSendType())){
Date nextSendDate = DateUtils.addDay(new Date(),7);
Date shortNextSendDate = DateUtils.dateFormat(nextSendDate);
Date maxEndTime = taskItemMapper.getMaxEndTime(taskId);
if (TimeControlPushTypeEnum.SEND_EVERY_DAY.state.equals(timeControlTask.getSendType())){
//如果每天发送今天等于结束时间则结束
if (DateUtils.dateFormat(new Date()).equals(maxEndTime)){
taskSubscribeMapper.completedTaskById(timeControlTaskSend.getSubscribeId());
}
}else if(maxWeekDay != null && maxWeekDay.equals(weekDay) && TimeControlPushTypeEnum.SEND_4_WEEK.state.equals(timeControlTask.getSendType())){
//如果下一次执行的时候大于最大时间则算完成了
if (shortNextSendDate.after(maxEndTime)){
taskSubscribeMapper.completedTaskById(timeControlTaskSend.getSubscribeId());
}
} }
}
}
}
private void send4Finish(TimeControlTaskItem timeControlTaskItem, String robotWxId, String wxUserId, String ip, Integer taskSendId) {
//封装退订提醒
SendTextMessageVO sendTextMessageVO = new SendTextMessageVO();
sendTextMessageVO.setCode(SendMessageTypeEnum.SELF.getCode());
sendTextMessageVO.setWxId(robotWxId);
sendTextMessageVO.setAltId(robotWxId);
sendTextMessageVO.setWxGroupId(wxUserId);
sendTextMessageVO.setIp(ip);
String content = "";
if (YesOrNoEnums.YES.getValue().equals(timeControlTaskItem.getFinishConfirm())) {
String finishLinkUrl = timeControlTaskItem.getFinishLinkUrl();
if (finishLinkUrl != null) {
String baseUrl = wechatGroupLinkPrefix + "/link?";
finishLinkUrl = baseUrl + "wxId=" +wxUserId+"&taskSendId=" +taskSendId+"&url=" + URLEncoder.encode(finishLinkUrl);
String resultUrl = UrlUtils.getShortUrl4Own(finishLinkUrl);
content = content + timeControlTaskItem.getFinishLinkIntroduce() + "\n" + resultUrl;
} }
} }
sendTextMessageVO.setContent(content);
sendTextMessageVO.setIndex(0);
sendTextMessageVO.setCounts(1);
sendTextMessageVO.setMessageGroupId(UUID.randomUUID().toString());
sendTextMessageVO.setRobotProcessType(RobotProcessTypeEnum.TIME_CONTROL);
wechatGroupConsr.sendMessage(JSON.toJSONString(sendTextMessageVO));
;
} }
@Override @Override
...@@ -486,22 +614,44 @@ public class TaskSubscribeBizImpl implements TaskSubscribeBiz { ...@@ -486,22 +614,44 @@ public class TaskSubscribeBizImpl implements TaskSubscribeBiz {
taskSubscribeMapper.subscribeTask(taskSubscribe); taskSubscribeMapper.subscribeTask(taskSubscribe);
} }
//插入待发送记录 //插入待发送记录
List<ReplyMessageBaseDto> dayList = taskItemMapper.listTaskItemDay(taskId); insertTaskSend(wxUserId,bookId,taskId,timeControlTask,taskSubscribe);
List<TimeControlTaskSend> taskSendList = new ArrayList<>(); }
if (!ListUtils.isEmpty(dayList)) {
for (ReplyMessageBaseDto item : dayList) { @Override
TimeControlTaskSend taskSend = new TimeControlTaskSend(); @ParamLog("按周定时发送任务消息")
taskSend.setWxUserId(wxUserId); public void sendTimeTaskMessage4Week(Integer taskItemId) {
taskSend.setBookId(bookId); TimeControlTaskItem timeControlTaskItem = taskItemMapper.selectByPrimaryKey(taskItemId);
taskSend.setTaskId(taskId); if (null == timeControlTaskItem){
taskSend.setSubscribeId(taskSubscribe.getId()); throw new BookBizException(BookBizException.PARAM_IS_NULL,taskItemId+"此任务不存在");
taskSend.setSendState(TaskSendStateEnum.WAIT_SEND.state); }
taskSend.setTaskItemId(item.getId()); Integer weekDay = DateUtils.getWeek();
taskSend.setSendDay(DateUtils.getShortDateStr(DateUtils.addDay(new Date(), item.getStartDay()))); if(weekDay == 1){
taskSend.setSendHour(item.getSendHour()); weekDay = 7;
taskSendList.add(taskSend); }else{
} weekDay = --weekDay;
timeControlTaskSendMapper.batchInsert(taskSendList); }
List<TaskSendDto> taskSendList = timeControlTaskSendMapper.listTodayTask4Week(taskItemId,weekDay);
if(ListUtils.isEmpty(taskSendList)){
return;
}
addSendDetails(taskSendList);
Map<String, List<TaskSendDto>> collect = taskSendList.stream().collect(Collectors.groupingBy(taskSendDto -> taskSendDto.getWxUserId() + "_" + taskSendDto.getTaskId()));
for (String s : collect.keySet()) {
sendTaskMsg(collect.get(s));
}
}
private void addSendDetails(List<TaskSendDto> taskSendList) {
List<TimeControlTaskSend> taskSendDetailList = new ArrayList<>();
taskSendList.stream().forEach(e ->{
TimeControlTaskSend timeControlTaskSend = new TimeControlTaskSend();
BeanUtils.copyProperties(e,timeControlTaskSend);
taskSendDetailList.add(timeControlTaskSend);
});
//新增发送记录表
if (!ListUtils.isEmpty(taskSendDetailList)){
timeControlTaskSendDetailMapper.batchInsert(taskSendDetailList);
} }
} }
......
...@@ -32,4 +32,7 @@ public class TimeControlTask { ...@@ -32,4 +32,7 @@ public class TimeControlTask {
private String successUnSubscribeWord; private String successUnSubscribeWord;
//1按天发送 2按周发送
private Integer sendType;
} }
\ No newline at end of file
...@@ -3,6 +3,7 @@ package com.pcloud.book.timecontrol.entity; ...@@ -3,6 +3,7 @@ package com.pcloud.book.timecontrol.entity;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date; import java.util.Date;
import java.util.List;
public class TimeControlTaskItem { public class TimeControlTaskItem {
private Integer id; private Integer id;
...@@ -34,6 +35,49 @@ public class TimeControlTaskItem { ...@@ -34,6 +35,49 @@ public class TimeControlTaskItem {
private String itemIntroduce; private String itemIntroduce;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date startTime;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date endTime;
private Integer pushType;
private List<Integer> weekdays;
public List<Integer> getWeekdays() {
return weekdays;
}
public void setWeekdays(List<Integer> weekdays) {
this.weekdays = weekdays;
}
public Integer getPushType() {
return pushType;
}
public void setPushType(Integer pushType) {
this.pushType = pushType;
}
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
public Date getEndTime() {
return endTime;
}
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
public Integer getAddSendTime() { public Integer getAddSendTime() {
return addSendTime; return addSendTime;
} }
......
...@@ -36,4 +36,8 @@ public class TimeControlTaskSend implements Serializable { ...@@ -36,4 +36,8 @@ public class TimeControlTaskSend implements Serializable {
private String sendHour; private String sendHour;
private Integer working; private Integer working;
private Integer sendWeek;
private Integer sendCount;
} }
...@@ -19,6 +19,8 @@ import org.springframework.web.bind.annotation.RequestMapping; ...@@ -19,6 +19,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
...@@ -68,7 +70,15 @@ public class TimeControlPrizeFacadeImpl { ...@@ -68,7 +70,15 @@ public class TimeControlPrizeFacadeImpl {
@GetMapping("downloadCertificate") @GetMapping("downloadCertificate")
ResponseDto<?> downloadCertificate(@RequestHeader String token, @RequestParam Integer id, @RequestParam Integer type) { ResponseDto<?> downloadCertificate(@RequestHeader String token, @RequestParam Integer id, @RequestParam Integer type) {
String url = taskPrizeBiz.downloadCertificate(id, type); String url = taskPrizeBiz.downloadCertificate(id, type);
return new ResponseDto<>(url); String filePath="";
try {
URLEncoder.encode(url,"utf-8");
filePath=new String(url.getBytes("iso8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return new ResponseDto<>(filePath);
} }
} }
package com.pcloud.book.timecontrol.facade.impl; package com.pcloud.book.timecontrol.facade.impl;
import com.pcloud.book.book.constant.BookConstant;
import com.pcloud.book.timecontrol.biz.TaskBiz; import com.pcloud.book.timecontrol.biz.TaskBiz;
import com.pcloud.book.timecontrol.biz.TaskSubscribeBiz; import com.pcloud.book.timecontrol.biz.TaskSubscribeBiz;
import com.pcloud.book.timecontrol.entity.TimeControlTask;
import com.pcloud.book.timecontrol.entity.TimeControlTaskSubscribe; import com.pcloud.book.timecontrol.entity.TimeControlTaskSubscribe;
import com.pcloud.book.timecontrol.vo.KeyWordTaskVO; import com.pcloud.book.timecontrol.vo.KeyWordTaskVO;
import com.pcloud.common.dto.ResponseDto; import com.pcloud.common.dto.ResponseDto;
...@@ -168,4 +170,21 @@ public class TimeControlTaskFacadeImpl { ...@@ -168,4 +170,21 @@ public class TimeControlTaskFacadeImpl {
Integer id = taskBiz.copyTaskItem(taskItemId); Integer id = taskBiz.copyTaskItem(taskItemId);
return new ResponseDto<>(id); return new ResponseDto<>(id);
} }
@ApiOperation(value = "新增定时任务", httpMethod = "GET")
@GetMapping("addTask4TimeControl")
ResponseDto<?> addTask4TimeControl(@RequestHeader String token, @RequestParam String key){
if (BookConstant.TIME_CONTROL_KEY.equalsIgnoreCase(key)){
taskBiz.addTask4TimeControl();
}
return new ResponseDto<>();
}
@PostMapping("updateTaskSendType")
@ApiOperation(value = "修改任务模板的发送方式", httpMethod = "POST")
ResponseDto<?> updateTaskSendType(@RequestHeader("token") String token, @RequestBody TimeControlTask timeControlTask) throws PermissionException {
SessionUtil.getToken4Redis(token);
taskBiz.updateTaskSendType(timeControlTask);
return new ResponseDto<>();
}
} }
\ No newline at end of file
...@@ -3,6 +3,9 @@ package com.pcloud.book.timecontrol.mapper; ...@@ -3,6 +3,9 @@ package com.pcloud.book.timecontrol.mapper;
import com.pcloud.book.timecontrol.entity.TimeControlTaskItem; import com.pcloud.book.timecontrol.entity.TimeControlTaskItem;
import com.pcloud.book.timecontrol.dto.ReplyMessageBaseDto; import com.pcloud.book.timecontrol.dto.ReplyMessageBaseDto;
import java.util.Date;
import com.pcloud.book.timecontrol.vo.request.TimeControlTaskItemVO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -28,4 +31,12 @@ public interface TimeControlTaskItemMapper { ...@@ -28,4 +31,12 @@ public interface TimeControlTaskItemMapper {
Integer getTaskItemCount(@Param("taskId") Integer taskId); Integer getTaskItemCount(@Param("taskId") Integer taskId);
List<TimeControlTaskItem> listByTaskId(Integer taskId); List<TimeControlTaskItem> listByTaskId(Integer taskId);
Date getMaxEndTime(Integer taskId);
void deleteByTaskId(Integer taskId);
TimeControlTaskItemVO getMonthDay(String date);
List<TimeControlTaskItemVO> getMonthSecondDay(String date);
} }
\ No newline at end of file
package com.pcloud.book.timecontrol.mapper;
import com.pcloud.book.timecontrol.dto.ReplyMessageBaseDto;
import com.pcloud.book.timecontrol.entity.TimeControlTaskItem;
import com.pcloud.book.timecontrol.entity.TimeControlWeekDay;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
import java.util.List;
@Component("taskItemWeekMapper")
public interface TimeControlTaskItemWeekMapper {
int batchInsert(List<TimeControlWeekDay> record);
List<TimeControlWeekDay> selectByItemId(Integer taskItemId);
Integer getMaxWeekDay(Integer taskItemId);
void batchDelete(List<Integer> taskItemIds);
}
\ No newline at end of file
...@@ -63,4 +63,5 @@ public interface TimeControlTaskMapper { ...@@ -63,4 +63,5 @@ public interface TimeControlTaskMapper {
List<SubscribeTaskUserDTO> listTaskSubscribeUser4Pcloud(@Param("pageNum") Integer pageNum, @Param("numPerPage") Integer numPerPage, @Param("search") String search, @Param("taskId") Integer taskId,@Param("subscribeType") Integer subscribeType,@Param("wxIds") List<String> wxIds); List<SubscribeTaskUserDTO> listTaskSubscribeUser4Pcloud(@Param("pageNum") Integer pageNum, @Param("numPerPage") Integer numPerPage, @Param("search") String search, @Param("taskId") Integer taskId,@Param("subscribeType") Integer subscribeType,@Param("wxIds") List<String> wxIds);
void updateTaskSendType(TimeControlTask taskDto);
} }
\ No newline at end of file
package com.pcloud.book.timecontrol.mapper;
import com.pcloud.book.timecontrol.dto.SubscribeTaskUserDTO;
import com.pcloud.book.timecontrol.dto.TaskItemSendDto;
import com.pcloud.book.timecontrol.dto.TaskProgressItemDTO;
import com.pcloud.book.timecontrol.dto.TaskSendDto;
import com.pcloud.book.timecontrol.dto.TaskSendUserDto;
import com.pcloud.book.timecontrol.entity.TimeControlTaskSend;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
/**
* @date: 2020年01月31日 20:05
* @Author: Zcy
* @Descprition
*/
@Component
public interface TimeControlTaskSendDetailMapper {
void batchInsert(List<TimeControlTaskSend> taskSendList);
Integer getTaskItemSendCount(@Param("startTime") String startTime, @Param("endTime") String endTime,
@Param("robotWxId") String robotWxId, @Param("taskName") String taskName, @Param("sendContent") String sendContent);
List<TaskItemSendDto> listTaskItemSendRecord4Pcloud(@Param("pageNum") Integer pageNum, @Param("numPerPage") Integer numPerPage,
@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("robotWxId") String robotWxId,
@Param("taskName") String taskName, @Param("sendContent") String sendContent);
Integer getTaskItemSendUserCount(@Param("wxIds") List<String> wxIds, @Param("taskItemId") Integer taskItemId,
@Param("robotWxId") String robotWxId,
@Param("startTime") String startTime, @Param("endTime") String endTime);
List<TaskSendUserDto> listTaskItemSendUser4Pcloud(@Param("pageNum") Integer pageNum, @Param("numPerPage") Integer numPerPage,
@Param("wxIds") List<String> wxIds, @Param("taskItemId") Integer taskItemId, @Param("robotWxId") String robotWxId,
@Param("startTime") String startTime, @Param("endTime") String endTime);
List<SubscribeTaskUserDTO> getTaskNoCompletedCount(@Param("wxIds") List<String> wxIds, @Param("taskId") Integer taskId);
Integer getNoCompletedCount(@Param("subscribeId") Integer subscribeId);
Integer getCompletedCount(Integer subscribeId);
List<TaskProgressItemDTO> getUserTaskItemProgress(@Param("taskId") Integer taskId, @Param("wxUserId") String wxUserId);
void updateSendState4Week();
List<TaskSendDto> listTodayTask4Week(@Param("taskItemId") Integer taskItemId, @Param("weekDay") Integer weekDay);
void addSendCount(Integer id);
Integer todayTaskSendCount();
List<String> getTaskSendDateList(String date);
}
...@@ -65,4 +65,9 @@ public interface TimeControlTaskSendMapper { ...@@ -65,4 +65,9 @@ public interface TimeControlTaskSendMapper {
List<TaskProgressItemDTO> getUserTaskItemProgress(@Param("taskId")Integer taskId, @Param("wxUserId") String wxUserId); List<TaskProgressItemDTO> getUserTaskItemProgress(@Param("taskId")Integer taskId, @Param("wxUserId") String wxUserId);
void updateSendState4Week();
List<TaskSendDto> listTodayTask4Week(@Param("taskItemId")Integer taskItemId, @Param("weekDay")Integer weekDay);
void addSendCount(Integer id);
} }
...@@ -9,6 +9,8 @@ import com.pcloud.book.timecontrol.mapper.TimeControlTaskMapper; ...@@ -9,6 +9,8 @@ import com.pcloud.book.timecontrol.mapper.TimeControlTaskMapper;
import com.pcloud.book.timecontrol.service.TimeControlTaskService; import com.pcloud.book.timecontrol.service.TimeControlTaskService;
import com.pcloud.common.dto.ResponseDto; import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.utils.ResponseHandleUtil; import com.pcloud.common.utils.ResponseHandleUtil;
import io.swagger.models.auth.In;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
...@@ -24,6 +26,7 @@ import java.util.Map; ...@@ -24,6 +26,7 @@ import java.util.Map;
@RestController("timeControlTaskService") @RestController("timeControlTaskService")
@RequestMapping("timeControlTaskService") @RequestMapping("timeControlTaskService")
@Slf4j
public class TimeControlTaskServiceImpl implements TimeControlTaskService { public class TimeControlTaskServiceImpl implements TimeControlTaskService {
@Autowired @Autowired
...@@ -94,4 +97,22 @@ public class TimeControlTaskServiceImpl implements TimeControlTaskService { ...@@ -94,4 +97,22 @@ public class TimeControlTaskServiceImpl implements TimeControlTaskService {
taskSubscribeBiz.unSubscribeTask(wxId, null, taskId); taskSubscribeBiz.unSubscribeTask(wxId, null, taskId);
} }
@Override
@GetMapping("updateSendState4Week")
public void updateSendState4Week() {
new Thread(() -> {
taskBiz.updateSendState4Week();
}).start();
}
@Override
@PostMapping("sendTimeTaskMessage4Week")
public void sendTimeTaskMessage4Week(@RequestBody Map<String, Object> map) {
new Thread(() -> {
log.info("sendTimeTaskMessage4Week开始执行定时任务");
Integer taskItemId = (Integer) map.get("taskItemId");
taskSubscribeBiz.sendTimeTaskMessage4Week(taskItemId);
}).start();
}
} }
package com.pcloud.book.timecontrol.vo.request;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
import java.util.List;
@Data
public class TimeControlTaskItemVO {
private Integer id;
private Integer pushType;
private Integer sendType;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date startDay;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date endDay;
private String weekDays;
}
\ No newline at end of file
...@@ -16,17 +16,34 @@ ...@@ -16,17 +16,34 @@
<result column="send_hour" property="sendHour" jdbcType="VARCHAR" /> <result column="send_hour" property="sendHour" jdbcType="VARCHAR" />
<result column="progress_guidance" property="progressGuidance" jdbcType="INTEGER" /> <result column="progress_guidance" property="progressGuidance" jdbcType="INTEGER" />
<result column="item_introduce" property="itemIntroduce" jdbcType="VARCHAR" /> <result column="item_introduce" property="itemIntroduce" jdbcType="VARCHAR" />
<result column="start_time" property="startTime" jdbcType="TIMESTAMP" />
<result column="end_time" property="endTime" jdbcType="TIMESTAMP" />
<result column="push_type" property="pushType" jdbcType="INTEGER" />
</resultMap>
<resultMap id="ReplyMessageBaseDtoMap" type="com.pcloud.book.timecontrol.dto.ReplyMessageBaseDto">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="task_id" property="taskId" jdbcType="INTEGER" />
<result column="start_day" property="startDay" jdbcType="INTEGER" />
<result column="send_hour" property="sendHour" jdbcType="VARCHAR" />
<result column="configState" property="configState" jdbcType="INTEGER" />
<result column="start_time" property="startTime" jdbcType="TIMESTAMP" />
<result column="end_time" property="endTime" jdbcType="TIMESTAMP" />
<result column="push_type" property="pushType" jdbcType="INTEGER" />
<collection property="weekdays" ofType="integer">
<result column="week_day" jdbcType="INTEGER"/>
</collection>
</resultMap> </resultMap>
<sql id="Base_Column_List" > <sql id="Base_Column_List" >
id, task_id, start_day, finish_confirm, finish_key_word, create_time, update_time,td_confirm,finish_link_introduce,finish_link_url id, task_id, start_day, finish_confirm, finish_key_word, create_time, update_time,td_confirm,finish_link_introduce,finish_link_url
,add_send_time,send_hour,progress_guidance, item_introduce ,add_send_time,send_hour,progress_guidance, item_introduce,start_time,end_time,push_type
</sql> </sql>
<insert id="insert" parameterType="com.pcloud.book.timecontrol.entity.TimeControlTaskItem" useGeneratedKeys="true" keyProperty="id"> <insert id="insert" parameterType="com.pcloud.book.timecontrol.entity.TimeControlTaskItem" useGeneratedKeys="true" keyProperty="id">
insert into time_control_task_item(task_id, start_day, finish_confirm, finish_key_word, create_time, update_time insert into time_control_task_item(task_id, start_day, finish_confirm, finish_key_word, create_time, update_time
,td_confirm,finish_link_introduce,finish_link_url,add_send_time,send_hour,progress_guidance, item_introduce) ,td_confirm,finish_link_introduce,finish_link_url,add_send_time,send_hour,progress_guidance, item_introduce,start_time,end_time,push_type)
values (#{taskId}, #{startDay}, #{finishConfirm}, #{finishKeyWord}, now(), now(),#{tdConfirm},#{finishLinkIntroduce},#{finishLinkUrl} values (#{taskId}, #{startDay}, #{finishConfirm}, #{finishKeyWord}, now(), now(),#{tdConfirm},#{finishLinkIntroduce},#{finishLinkUrl}
,#{addSendTime},#{sendHour},#{progressGuidance}, #{itemIntroduce}) ,#{addSendTime},#{sendHour},#{progressGuidance}, #{itemIntroduce},#{startTime},#{endTime},#{pushType})
</insert> </insert>
<update id="updateTaskItem" parameterType="com.pcloud.book.timecontrol.entity.TimeControlTaskItem"> <update id="updateTaskItem" parameterType="com.pcloud.book.timecontrol.entity.TimeControlTaskItem">
...@@ -41,7 +58,10 @@ ...@@ -41,7 +58,10 @@
add_send_time=#{addSendTime}, add_send_time=#{addSendTime},
send_hour=#{sendHour}, send_hour=#{sendHour},
progress_guidance=#{progressGuidance}, progress_guidance=#{progressGuidance},
update_time = now(), item_introduce = #{itemIntroduce} update_time = now(), item_introduce = #{itemIntroduce},
start_time = #{startTime},
end_time= #{endTime},
push_type = #{pushType}
where id = #{id} where id = #{id}
</update> </update>
...@@ -59,11 +79,22 @@ ...@@ -59,11 +79,22 @@
where task_id = #{taskId} and start_day = #{startDay} where task_id = #{taskId} and start_day = #{startDay}
</select> </select>
<select id="listTaskItemDay" resultType="com.pcloud.book.timecontrol.dto.ReplyMessageBaseDto"> <select id="listTaskItemDay" resultMap="ReplyMessageBaseDtoMap">
select id, task_id taskId, start_day startDay, send_hour sendHour, select
if(finish_confirm=0,0,2) configState item.id,
from time_control_task_item where task_id = #{taskId} item.task_id ,
order by startDay asc, send_hour asc item.start_day ,
item.send_hour ,
if(item.finish_confirm=0,0,2) configState,
week.task_item_id,
week.week_day,
item.start_time,
item.end_time,
item.push_type
from time_control_task_item item
left join time_control_task_item_week week on item.id = week.task_item_id
where task_id = #{taskId}
order by start_time asc,end_time asc,start_day asc, send_hour asc
</select> </select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" > <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
...@@ -71,6 +102,11 @@ ...@@ -71,6 +102,11 @@
where id = #{id,jdbcType=INTEGER} where id = #{id,jdbcType=INTEGER}
</delete> </delete>
<delete id="deleteByTaskId" parameterType="integer">
delete from time_control_task_item
where task_id = #{taskId}
</delete>
<select id="getByItemIdList" resultMap="BaseResultMap"> <select id="getByItemIdList" resultMap="BaseResultMap">
select select
<include refid="Base_Column_List" /> <include refid="Base_Column_List" />
...@@ -98,4 +134,38 @@ ...@@ -98,4 +134,38 @@
WHERE WHERE
task_id = #{taskId} task_id = #{taskId}
</select> </select>
<select id="getMaxEndTime" parameterType="Integer" resultType="date">
select
max(end_time)
from
time_control_task_item
where
task_id = #{taskId}
</select>
<select id="getMonthDay" parameterType="String" resultType="com.pcloud.book.timecontrol.vo.request.TimeControlTaskItemVO">
select a.id,if(min(a.start_time)<![CDATA[ < ]]>DATE_ADD(#{date},interval -day(#{date})+1 day),DATE_ADD(#{date},interval -day(#{date})+1 day),min(a.start_time)) startDay,
if(max(a.end_time)<![CDATA[ > ]]>last_day(#{date}),last_day(#{date}),max(a.end_time)) endDay
,a.push_type pushType,b.send_type sendType from time_control_task_item a
LEFT JOIN time_control_task b on b.task_id=a.task_id
where b.send_type=2
and end_time<![CDATA[ >= ]]>DATE_ADD(#{date},interval -day(#{date})+1 day)
AND start_time<![CDATA[ <= ]]>last_day(#{date})
and push_type=1
GROUP BY push_type;
</select>
<select id="getMonthSecondDay" parameterType="String" resultType="com.pcloud.book.timecontrol.vo.request.TimeControlTaskItemVO">
select a.id,if(a.start_time<![CDATA[ < ]]>DATE_ADD(#{date},interval -day(#{date})+1 day) ,DATE_ADD(#{date},interval -day(#{date})+1 day),a.start_time)startDay,
if(a.end_time<![CDATA[ > ]]>last_day(#{date}),last_day(#{date}),a.end_time) endDay
,a.push_type pushType,b.send_type sendType ,GROUP_CONCAT(c.week_day) weekDays from time_control_task_item a
LEFT JOIN time_control_task b on b.task_id=a.task_id
LEFT JOIN time_control_task_item_week c on a.id=c.task_item_id
where b.send_type=2
and end_time<![CDATA[ >= ]]>DATE_ADD(#{date},interval -day(#{date})+1 day)
AND start_time<![CDATA[ <= ]]>last_day(#{date})
and push_type=2
GROUP BY a.id;
</select>
</mapper> </mapper>
\ No newline at end of file
<?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.pcloud.book.timecontrol.mapper.TimeControlTaskItemWeekMapper" >
<resultMap id="BaseResultMap" type="com.pcloud.book.timecontrol.entity.TimeControlWeekDay" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="task_item_id" property="taskItemId" jdbcType="INTEGER" />
<result column="week_day" property="weekDay" jdbcType="INTEGER" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
</resultMap>
<sql id="Base_Column_List" >
id, task_item_id, week_day, create_time
</sql>
<insert id="insert" parameterType="com.pcloud.book.timecontrol.entity.TimeControlTaskItem" useGeneratedKeys="true" keyProperty="id">
insert into time_control_task_item_week(task_item_id, week_day, create_time)
values (#{taskItemId}, #{weekDay}, now())
</insert>
<insert id="batchInsert" parameterType="com.pcloud.book.timecontrol.entity.TimeControlTaskItem" useGeneratedKeys="true" keyProperty="id">
insert into time_control_task_item_week(task_item_id, week_day, create_time)
values
<foreach collection="list" item="item" index="index" separator="," >
(#{item.taskItemId}, #{item.weekDay}, now())
</foreach>
</insert>
<delete id="batchDelete" parameterType="list">
delete
from
time_control_task_item_week
where
task_item_id in
<foreach collection="list" index="index" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</delete>
<select id="selectByItemId" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
<include refid="Base_Column_List" />
from time_control_task_item_week
where task_item_id = #{taskItemId}
</select>
<select id="getMaxWeekDay" parameterType="integer" resultType="integer">
select
max(week_day)
from
time_control_task_item_week
where
task_item_id = #{taskItemId}
</select>
</mapper>
\ No newline at end of file
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
<result column="pur_label_id" property="purLabelId" jdbcType="INTEGER" /> <result column="pur_label_id" property="purLabelId" jdbcType="INTEGER" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" /> <result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP" /> <result column="update_time" property="updateTime" jdbcType="TIMESTAMP" />
<result column="send_type" property="sendType" jdbcType="TINYINT" />
</resultMap> </resultMap>
<resultMap id="TaskDtoMap" type="com.pcloud.book.timecontrol.dto.TaskDto" > <resultMap id="TaskDtoMap" type="com.pcloud.book.timecontrol.dto.TaskDto" >
...@@ -30,7 +31,7 @@ ...@@ -30,7 +31,7 @@
</resultMap> </resultMap>
<sql id="Base_Column_List" > <sql id="Base_Column_List" >
task_id, task_name, task_introduce, task_key_word, subscribe_word, advanced_setting, task_id, task_name, task_introduce, task_key_word, subscribe_word, advanced_setting,
create_time, update_time, pro_label_id, dep_label_id, pur_label_id, success_subscribe_word, success_unsubscribe_word create_time, update_time, pro_label_id, dep_label_id, pur_label_id, success_subscribe_word, success_unsubscribe_word,send_type
</sql> </sql>
<update id="updateTask" parameterType="com.pcloud.book.timecontrol.entity.TimeControlTask"> <update id="updateTask" parameterType="com.pcloud.book.timecontrol.entity.TimeControlTask">
...@@ -41,6 +42,16 @@ ...@@ -41,6 +42,16 @@
where task_id = #{taskId} where task_id = #{taskId}
</update> </update>
<update id="updateTaskSendType" parameterType="com.pcloud.book.timecontrol.entity.TimeControlTask">
update time_control_task
<set>
<if test="sendType != null">
send_type = #{sendType}
</if>
</set>
where task_id = #{taskId}
</update>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" > <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select select
<include refid="Base_Column_List" /> <include refid="Base_Column_List" />
...@@ -63,7 +74,8 @@ ...@@ -63,7 +74,8 @@
COUNT(b.id) taskItemCount, COUNT(b.id) taskItemCount,
a.pur_label_id purLabelId, a.pur_label_id purLabelId,
a.pro_label_id proLabelId, a.pro_label_id proLabelId,
a.dep_label_id depLabelId a.dep_label_id depLabelId,
a.send_type sendType
FROM FROM
time_control_task a time_control_task a
LEFT JOIN time_control_task_item b ON a.task_id = b.task_id LEFT JOIN time_control_task_item b ON a.task_id = b.task_id
...@@ -73,9 +85,11 @@ ...@@ -73,9 +85,11 @@
</if> </if>
GROUP BY GROUP BY
a.task_id a.task_id
order by a.create_time desc
<if test="pageNum != null"> <if test="pageNum != null">
limit #{pageNum}, #{numPerPage} limit #{pageNum}, #{numPerPage}
</if> </if>
</select> </select>
<!--根据 专业/深度/目的 标签查询任务模板集合--> <!--根据 专业/深度/目的 标签查询任务模板集合-->
...@@ -224,10 +238,10 @@ ...@@ -224,10 +238,10 @@
insert into time_control_task (task_name, task_introduce, insert into time_control_task (task_name, task_introduce,
task_key_word, subscribe_word, advanced_setting, task_key_word, subscribe_word, advanced_setting,
create_time, update_time, pro_label_id, dep_label_id, pur_label_id, success_subscribe_word, create_time, update_time, pro_label_id, dep_label_id, pur_label_id, success_subscribe_word,
success_unsubscribe_word) success_unsubscribe_word,send_type)
values (#{taskName,jdbcType=VARCHAR}, #{taskIntroduce,jdbcType=VARCHAR}, values (#{taskName,jdbcType=VARCHAR}, #{taskIntroduce,jdbcType=VARCHAR},
#{taskKeyWord,jdbcType=VARCHAR}, #{subscribeWord,jdbcType=VARCHAR}, #{advancedSetting,jdbcType=INTEGER}, #{taskKeyWord,jdbcType=VARCHAR}, #{subscribeWord,jdbcType=VARCHAR}, #{advancedSetting,jdbcType=INTEGER},
now(), now(), #{proLabelId}, #{depLabelId}, #{purLabelId}, #{successSubscribeWord}, #{successUnSubscribeWord}) now(), now(), #{proLabelId}, #{depLabelId}, #{purLabelId}, #{successSubscribeWord}, #{successUnSubscribeWord}, ifnull(#{sendType},2))
</insert> </insert>
<select id="getTaskCompletedCount" resultType="java.lang.Integer"> <select id="getTaskCompletedCount" resultType="java.lang.Integer">
...@@ -252,6 +266,7 @@ ...@@ -252,6 +266,7 @@
SELECT SELECT
a.task_id taskId, a.task_id taskId,
a.task_name taskName, a.task_name taskName,
a.send_type sendType,
COUNT(distinct c.id) taskItemCount, COUNT(distinct c.id) taskItemCount,
COUNT(DISTINCT d.wx_user_id) subscribePersonCount COUNT(DISTINCT d.wx_user_id) subscribePersonCount
FROM time_control_task a FROM time_control_task a
...@@ -296,7 +311,9 @@ ...@@ -296,7 +311,9 @@
<select id="listTaskSubscribeUser4Pcloud" resultType="com.pcloud.book.timecontrol.dto.SubscribeTaskUserDTO"> <select id="listTaskSubscribeUser4Pcloud" resultType="com.pcloud.book.timecontrol.dto.SubscribeTaskUserDTO">
select t1.wxUserId wxUserId, select t1.wxUserId wxUserId,
t1.subscribeState subscribeState, t1.subscribeState subscribeState,
ifnull(t2.completedCount,0) completedCount from ifnull(t2.completedCount,0) completedCount,
t2.sendCount
from
(select (select
wx_user_id wxUserId, wx_user_id wxUserId,
state subscribeState state subscribeState
...@@ -315,8 +332,9 @@ ...@@ -315,8 +332,9 @@
)t1 )t1
left join left join
( (
select wx_user_id wxId,count(1) completedCount select wx_user_id wxId,count(1) completedCount,
from time_control_task_send a where sum(send_count) sendCount
from time_control_task_send_detail a where
1=1 1=1
<if test="wxIds != null and wxIds.size()>0"> <if test="wxIds != null and wxIds.size()>0">
and a.wx_user_id IN and a.wx_user_id IN
......
<?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.pcloud.book.timecontrol.mapper.TimeControlTaskSendDetailMapper" >
<resultMap id="BaseResultMap" type="com.pcloud.book.timecontrol.entity.TimeControlTaskSend" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="wx_user_id" property="wxUserId" jdbcType="VARCHAR" />
<result column="book_id" property="bookId" jdbcType="INTEGER" />
<result column="task_id" property="taskId" jdbcType="INTEGER" />
<result column="task_item_id" property="taskItemId" jdbcType="INTEGER" />
<result column="subscribe_id" property="subscribeId" jdbcType="INTEGER" />
<result column="send_state" property="sendState" jdbcType="INTEGER" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<result column="send_day" property="sendDay" jdbcType="TIMESTAMP" />
<result column="working" property="working" jdbcType="INTEGER" />
<result column="complete_state" property="completeState" jdbcType="INTEGER" />
<result column="send_week" property="sendWeek" jdbcType="INTEGER" />
<result column="send_count" property="sendCount" jdbcType="INTEGER" />
</resultMap>
<sql id="Base_Column_List">
id, wx_user_id, book_id, task_id, task_item_id, subscribe_id, send_day, send_state, create_time, complete_state,send_week,send_count
</sql>
<insert id="batchInsert" parameterType="com.pcloud.book.timecontrol.entity.TimeControlTaskSend" useGeneratedKeys="true" keyProperty="id">
insert into time_control_task_send_detail
(wx_user_id, book_id, task_id, task_item_id, subscribe_id, send_day, send_state, create_time, send_hour,send_week)
values
<foreach collection="list" item="item" index="index" separator=",">
(
#{item.wxUserId,jdbcType=VARCHAR}, #{item.bookId,jdbcType=INTEGER}, #{item.taskId,jdbcType=INTEGER},
#{item.taskItemId,jdbcType=INTEGER}, #{item.subscribeId,jdbcType=INTEGER}, DATE_FORMAT(NOW(),'%Y-%m-%d'),
1, NOW(), #{item.sendHour},#{item.sendWeek}
)
</foreach>
</insert>
<select id="getTaskItemSendCount" resultType="java.lang.Integer">
select count(1) from (
select c.robot_wx_id
from
time_control_task_send_detail a LEFT JOIN
time_control_task b on a.task_id=b.task_id
LEFT JOIN time_control_task_subscribe c on a.subscribe_id=c.id
LEFT JOIN time_control_reply_message d on a.task_item_id=d.task_item_id
where 1=1
<if test="startTime !=null">
and a.send_day <![CDATA[ >= ]]> STR_TO_DATE(#{startTime},'%Y-%m-%d')
</if>
<if test="endTime !=null">
and a.send_day <![CDATA[ <= ]]> STR_TO_DATE(#{endTime},'%Y-%m-%d')
</if>
<if test="robotWxId !=null">
and c.robot_wx_id=#{robotWxId}
</if>
<if test="taskName !=null">
and b.task_name like concat('%', #{taskName}, '%')
</if>
<if test="sendContent !=null">
and d.content like concat('%', #{sendContent}, '%')
</if>
group by
a.task_item_id,c.robot_wx_id
)s
</select>
<select id="listTaskItemSendRecord4Pcloud" resultType="com.pcloud.book.timecontrol.dto.TaskItemSendDto">
select
a.task_id taskId,
b.task_name taskName,
a.task_item_id taskItemId,
c.robot_wx_id robotWxId,
ifnull(count(DISTINCT a.wx_user_id),0) sendPersonCount,
e.create_time createTime
from
time_control_task_send_detail a LEFT JOIN
time_control_task b on a.task_id=b.task_id
LEFT JOIN time_control_task_subscribe c on a.subscribe_id=c.id
LEFT JOIN time_control_reply_message d on a.task_item_id=d.task_item_id
LEFT JOIN time_control_task_item e on a.task_item_id = e.id
where 1=1
<if test="startTime !=null">
and a.send_day <![CDATA[ >= ]]> STR_TO_DATE(#{startTime},'%Y-%m-%d')
</if>
<if test="endTime !=null">
and a.send_day <![CDATA[ <= ]]> STR_TO_DATE(#{endTime},'%Y-%m-%d')
</if>
<if test="robotWxId !=null">
and c.robot_wx_id=#{robotWxId}
</if>
<if test="taskName !=null">
and b.task_name like concat('%', #{taskName}, '%')
</if>
<if test="sendContent !=null">
and d.content like concat('%', #{sendContent}, '%')
</if>
GROUP BY
a.task_item_id,c.robot_wx_id
<if test="pageNum != null">
limit #{pageNum}, #{numPerPage}
</if>
</select>
<select id="getTaskItemSendUserCount" resultType="java.lang.Integer">
SELECT ifnull(COUNT(DISTINCT a.wx_user_id),0) FROM time_control_task_send_detail a
LEFT JOIN time_control_task_subscribe b ON a.subscribe_id = b.id
where 1=1
<if test="wxIds != null and wxIds.size()>0">
and a.wx_user_id IN
<foreach collection="wxIds" open="(" close=")" separator="," item="item">
#{item}
</foreach>
</if>
and a.task_item_id=#{taskItemId} AND b.robot_Wx_id = #{robotWxId}
<if test="startTime !=null">
and a.send_day <![CDATA[ >= ]]> STR_TO_DATE(#{startTime},'%Y-%m-%d')
</if>
<if test="endTime !=null">
and a.send_day <![CDATA[ <= ]]> STR_TO_DATE(#{endTime},'%Y-%m-%d')
</if>
</select>
<select id="listTaskItemSendUser4Pcloud" resultType="com.pcloud.book.timecontrol.dto.TaskSendUserDto">
SELECT
a.task_id taskId,
a.task_item_id taskItemId,
a.wx_user_id wxUserId,
a.send_state sendState, a.send_day sendDay, a.send_hour sendHour
FROM time_control_task_send_detail a
LEFT JOIN time_control_task_subscribe b on a.subscribe_id = b.id
where 1=1
<if test="wxIds != null and wxIds.size()>0">
and a.wx_user_id IN
<foreach collection="wxIds" open="(" close=")" separator="," item="item">
#{item}
</foreach>
</if>
and a.task_item_id=#{taskItemId} AND b.robot_wx_id = #{robotWxId}
<if test="startTime !=null">
and a.send_day <![CDATA[ >= ]]> STR_TO_DATE(#{startTime},'%Y-%m-%d')
</if>
<if test="endTime !=null">
and a.send_day <![CDATA[ <= ]]> STR_TO_DATE(#{endTime},'%Y-%m-%d')
</if>
<if test="pageNum != null">
limit #{pageNum}, #{numPerPage}
</if>
</select>
<select id="getTaskNoCompletedCount" resultType="com.pcloud.book.timecontrol.dto.SubscribeTaskUserDTO">
select
wx_user_id wxUserId,
ifnull(count(1),0) noCompletedCount
from time_control_task_send
where task_id=#{taskId}
and complete_state=0
and send_state !=2
<if test="wxIds !=null and wxIds.size()>0">
and wx_user_id IN
<foreach collection="wxIds" open="(" close=")" separator="," item="item">
#{item}
</foreach>
</if>
group by wx_user_id
</select>
<select id="getNoCompletedCount" resultType="java.lang.Integer">
select ifnull(count(1),0)
from time_control_task_send
WHERE subscribe_id =#{subscribeId}
and complete_state !=1 AND send_state !=2
</select>
<select id="getCompletedCount" resultType="java.lang.Integer">
select ifnull(count(1),0)
from time_control_task_send
WHERE subscribe_id =#{subscribeId}
and working =1 and complete_state = 1
</select>
<select id="getUserTaskItemProgress" resultType="com.pcloud.book.timecontrol.dto.TaskProgressItemDTO">
SELECT
s.id taskSendId,
s.task_id taskId,
s.task_item_id taskItemId,
CONCAT(s.send_day, ' ', s.send_hour) taskItemName,
s.complete_state completeState,
IF (i.id IS NULL, 0, 1) hasPrize
FROM
time_control_task_send_detail s
LEFT JOIN time_control_task_prize_item i ON s.task_id = i.task_id
AND s.task_item_id = i.task_item_id
WHERE
s.task_id = #{taskId}
AND s.wx_user_id = #{wxUserId}
AND working = 1
GROUP BY
s.id
ORDER BY
s.send_day,
s.send_hour
</select>
<update id="updateSendState4Week">
update
time_control_task_send
set
send_state = 0
where
working = 1
and
complete_state = 0
and
send_state = 1
and
send_week is not null
</update>
<select id="listTodayTask4Week" parameterType="map" resultType="com.pcloud.book.timecontrol.dto.TaskSendDto">
select
a.id id,
b.robot_wx_id robotWxId,
a.wx_user_id wxUserId,
a.task_id taskId,
a.task_item_id taskItemId
from time_control_task_send a
left join time_control_task_subscribe b on a.subscribe_id = b.id
left join time_control_task_item t on a.task_item_id = t.id
where
a.send_state = 0
and
a.send_week is not null
and
DATE_FORMAT(NOW(), '%Y-%m-%d') &gt;= t.start_time
and
DATE_FORMAT(NOW(), '%Y-%m-%d') &lt;= t.end_time
and
a.send_week = #{weekDay}
and
a.task_item_id = #{taskItemId}
</select>
<select id="todayTaskSendCount" resultType="java.lang.Integer">
SELECT ifnull(COUNT(1),0) FROM time_control_task_send_detail WHERE send_state = 1
AND send_day =DATE_FORMAT(NOW(), '%Y-%m-%d')
</select>
<update id="addSendCount" parameterType="integer">
update
time_control_task_send
set
send_count = send_count + 1
where
id = #{id}
</update>
<select id="getTaskSendDateList" resultType="java.lang.String">
SELECT DISTINCT send_day from time_control_task_send_detail where SUBSTRING_INDEX(send_day,"-",2)=#{date}
ORDER BY send_day
</select>
</mapper>
\ No newline at end of file
...@@ -13,21 +13,23 @@ ...@@ -13,21 +13,23 @@
<result column="send_day" property="sendDay" jdbcType="TIMESTAMP" /> <result column="send_day" property="sendDay" jdbcType="TIMESTAMP" />
<result column="working" property="working" jdbcType="INTEGER" /> <result column="working" property="working" jdbcType="INTEGER" />
<result column="complete_state" property="completeState" jdbcType="INTEGER" /> <result column="complete_state" property="completeState" jdbcType="INTEGER" />
<result column="send_week" property="sendWeek" jdbcType="INTEGER" />
<result column="send_count" property="sendCount" jdbcType="INTEGER" />
</resultMap> </resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id, wx_user_id, book_id, task_id, task_item_id, subscribe_id, send_day, send_state, create_time, complete_state id, wx_user_id, book_id, task_id, task_item_id, subscribe_id, send_day, send_state, create_time, complete_state,send_week,send_count
</sql> </sql>
<insert id="batchInsert" parameterType="com.pcloud.book.timecontrol.entity.TimeControlTaskSend" useGeneratedKeys="true" keyProperty="id"> <insert id="batchInsert" parameterType="com.pcloud.book.timecontrol.entity.TimeControlTaskSend" useGeneratedKeys="true" keyProperty="id">
insert into time_control_task_send insert into time_control_task_send
(wx_user_id, book_id, task_id, task_item_id, subscribe_id, send_day, send_state, create_time, send_hour) (wx_user_id, book_id, task_id, task_item_id, subscribe_id, send_day, send_state, create_time, send_hour,send_week,send_count)
values values
<foreach collection="list" item="item" index="index" separator=","> <foreach collection="list" item="item" index="index" separator=",">
( (
#{item.wxUserId,jdbcType=VARCHAR}, #{item.bookId,jdbcType=INTEGER}, #{item.taskId,jdbcType=INTEGER}, #{item.wxUserId,jdbcType=VARCHAR}, #{item.bookId,jdbcType=INTEGER}, #{item.taskId,jdbcType=INTEGER},
#{item.taskItemId,jdbcType=INTEGER}, #{item.subscribeId,jdbcType=INTEGER}, #{item.sendDay,jdbcType=VARCHAR}, #{item.taskItemId,jdbcType=INTEGER}, #{item.subscribeId,jdbcType=INTEGER}, #{item.sendDay,jdbcType=VARCHAR},
#{item.sendState,jdbcType=INTEGER}, NOW(), #{item.sendHour} #{item.sendState,jdbcType=INTEGER}, NOW(), #{item.sendHour},#{item.sendWeek},#{item.sendCount}
) )
</foreach> </foreach>
</insert> </insert>
...@@ -38,11 +40,18 @@ ...@@ -38,11 +40,18 @@
b.robot_wx_id robotWxId, b.robot_wx_id robotWxId,
a.wx_user_id wxUserId, a.wx_user_id wxUserId,
a.task_id taskId, a.task_id taskId,
a.task_item_id taskItemId a.task_item_id taskItemId,
a.book_id bookId,
a.task_id taskId,
a.subscribe_id subscribeId,
a.send_day sendDay,
a.send_hour sendHour,
a.send_week sendWeek
from time_control_task_send a from time_control_task_send a
left join time_control_task_subscribe b on a.subscribe_id = b.id left join time_control_task_subscribe b on a.subscribe_id = b.id
where a.send_state = 0 where a.send_state = 0
and CONCAT_WS(" ",a.send_day,SUBSTRING_INDEX(a.send_hour,":",1)) = DATE_FORMAT(NOW(), '%Y-%m-%d %H'); and CONCAT_WS(" ",a.send_day,SUBSTRING_INDEX(a.send_hour,":",1)) = DATE_FORMAT(NOW(), '%Y-%m-%d %H')
and send_week is null;
</select> </select>
...@@ -273,4 +282,58 @@ ...@@ -273,4 +282,58 @@
s.send_day, s.send_day,
s.send_hour s.send_hour
</select> </select>
<update id="updateSendState4Week">
update
time_control_task_send
set
send_state = 0
where
working = 1
and
complete_state = 0
and
send_state = 1
and
send_week is not null
</update>
<select id="listTodayTask4Week" parameterType="map" resultType="com.pcloud.book.timecontrol.dto.TaskSendDto">
select
a.id id,
b.robot_wx_id robotWxId,
a.wx_user_id wxUserId,
a.task_id taskId,
a.task_item_id taskItemId,
a.book_id bookId,
a.task_id taskId,
a.subscribe_id subscribeId,
a.send_day sendDay,
a.send_hour sendHour,
a.send_week sendWeek
from time_control_task_send a
left join time_control_task_subscribe b on a.subscribe_id = b.id
left join time_control_task_item t on a.task_item_id = t.id
where
a.send_state = 0
and
a.send_week is not null
and
DATE_FORMAT(NOW(), '%Y-%m-%d') &gt;= t.start_time
and
DATE_FORMAT(NOW(), '%Y-%m-%d') &lt;= t.end_time
and
a.send_week = #{weekDay}
and
a.task_item_id = #{taskItemId}
</select>
<update id="addSendCount" parameterType="integer">
update
time_control_task_send
set
send_count = send_count + 1
where
id = #{id}
</update>
</mapper> </mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment