package cn.stylefeng.rest.modular.work;
|
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.date.DateTime;
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.util.ObjUtil;
|
import cn.hutool.json.JSONUtil;
|
import cn.stylefeng.guns.modular.business.dto.ImPushDataDTO;
|
import cn.stylefeng.guns.modular.business.dto.MentalTestMyTestTopicDTO;
|
import cn.stylefeng.guns.modular.business.entity.MentalAppointment;
|
import cn.stylefeng.guns.modular.business.service.IMentalAppointmentService;
|
import cn.stylefeng.guns.modular.business.service.IMentalTestRecordService;
|
import cn.stylefeng.guns.modular.business.service.impl.ImBizService;
|
import cn.stylefeng.roses.kernel.rule.enums.*;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.Resource;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
/**
|
* 定时任务-心理咨询预约
|
*/
|
@Slf4j
|
@Component
|
@EnableScheduling
|
public class MentalAppointmentWork {
|
|
@Resource
|
private ImBizService imBizService;
|
|
@Resource
|
private IMentalTestRecordService mentalTestRecordService;
|
|
@Resource
|
private IMentalAppointmentService mentalAppointmentService;
|
|
/**
|
* 固定时间延迟 @Scheduled(fixedDelay = 时间间隔(毫秒) )
|
*
|
* @Scheduled(fixedRate = 1000 * 60)
|
* Corn表达式 @Scheduled(cron = Corn表达式)
|
* @Scheduled(cron = "0 0/30 * * * *")
|
*/
|
@Scheduled(fixedRate = 1000 * 30)
|
public void autoStartMentalAppointment() {
|
// 当前时间
|
DateTime dateTime = DateUtil.date();
|
|
// 待开始预约单
|
List<MentalAppointment> mentalAppointmentList = mentalAppointmentService.list(
|
Wrappers.<MentalAppointment>lambdaUpdate()
|
.eq(MentalAppointment::getStatusFlag, MentalAppointmentStatusEnum.WAIT_SERVICE.getCode())
|
.apply("DATE_ADD(appointment_day, INTERVAL TIME_TO_SEC(begin_time_point) SECOND) < NOW()")
|
// .le(MentalAppointment::getAppointmentDay, dateTime.toDateStr())
|
// .le(MentalAppointment::getBeginTimePoint, DateUtil.format(dateTime, "HH:mm"))
|
);
|
|
// 我的测试(含题库信息)
|
List<MentalTestMyTestTopicDTO> myTestRecordTopicList = new ArrayList<>();
|
if (CollUtil.isNotEmpty(mentalAppointmentList)) {
|
myTestRecordTopicList = mentalTestRecordService.myTestRecordTopicByMentalAppointmentId(null, mentalAppointmentList.stream().map(MentalAppointment::getId).collect(Collectors.toList()));
|
}
|
|
for (MentalAppointment o : mentalAppointmentList) {
|
MentalTestMyTestTopicDTO mentalTestMyTestTopicDTO = myTestRecordTopicList.stream().filter(rt -> rt.getMentalAppointmentId().equals(o.getId())).findFirst().orElse(new MentalTestMyTestTopicDTO());
|
|
// 发送IM消息
|
ImPushDataDTO pushData = ImPushDataDTO.builder()
|
.type(ImPushTypeEnum.C_TO_W_IM_1V1_START_CONSULT.getCode())
|
.title(ImPushTypeEnum.C_TO_W_IM_1V1_START_CONSULT.getName())
|
.content("做了"
|
+ ObjUtil.defaultIfEmpty(mentalTestMyTestTopicDTO.getTitle(), "心理测试题")
|
+ ",帮我分析一下!")
|
.objId(ObjUtil.toString(o.getId()))
|
.data1(ObjUtil.toString(o.getUserId()))
|
.data2(ObjUtil.toString(o.getWorkerId()))
|
.data3(ObjUtil.toString(mentalTestMyTestTopicDTO.getId()))
|
.build();
|
imBizService.messageSendPrivate(
|
ObjUtil.toString(o.getUserId()),
|
new String[]{ObjUtil.toString(o.getWorkerId())},
|
pushData
|
);
|
|
// 开始预约咨询
|
mentalAppointmentService.update(
|
Wrappers.<MentalAppointment>lambdaUpdate()
|
.eq(MentalAppointment::getId, o.getId())
|
.set(MentalAppointment::getStatusFlag, MentalAppointmentStatusEnum.IN_SERVICE.getCode())
|
.set(MentalAppointment::getConsultStatus, MentalAppointmentConsultStatusEnum.IN_CONSULT.getCode())
|
);
|
log.info("开始预约咨询: {}", JSONUtil.toJsonStr(o));
|
}
|
}
|
|
@Scheduled(fixedRate = 1000 * 60)
|
public void autoEndMentalAppointment() {
|
// 当前时间
|
DateTime dateTime = DateUtil.date();
|
|
// 服务中预约单
|
List<MentalAppointment> mentalAppointmentList = mentalAppointmentService.list(
|
Wrappers.<MentalAppointment>lambdaUpdate()
|
.eq(MentalAppointment::getStatusFlag, MentalAppointmentStatusEnum.IN_SERVICE.getCode())
|
.le(MentalAppointment::getAppointmentDay, dateTime.toDateStr())
|
.le(MentalAppointment::getEndTimePoint, DateUtil.format(dateTime, "HH:mm"))
|
);
|
for (MentalAppointment o : mentalAppointmentList) {
|
// 结束咨询
|
mentalAppointmentService.update(
|
Wrappers.<MentalAppointment>lambdaUpdate()
|
.eq(MentalAppointment::getId, o.getId())
|
.set(MentalAppointment::getStatusFlag, MentalAppointmentStatusEnum.DONE.getCode())
|
.set(MentalAppointment::getConsultStatus, MentalAppointmentConsultStatusEnum.DONE.getCode())
|
);
|
log.info("结束咨询: {}", JSONUtil.toJsonStr(o));
|
|
try {
|
// 推送消息内容
|
String pushContent = "1v1咨询结束";
|
|
// IM推送数据json
|
ImPushDataDTO pushData_u = ImPushDataDTO.builder()
|
.type(ImPushTypeEnum.C_TO_C_TIP_STOP_IM.getCode())
|
.objId(ObjUtil.toString(o.getId()))
|
.title("通知")
|
.content(pushContent)
|
.data1(ObjUtil.toString(o.getWorkerId()))
|
.data2(ObjUtil.toString(o.getUserId()))
|
.build();
|
// 通知性格分析师
|
imBizService.messageSendSystem(o.getWorkerId()+"", new String[]{o.getUserId()+""}, pushData_u, null, null, false);
|
|
// IM推送数据json
|
ImPushDataDTO pushData = ImPushDataDTO.builder()
|
.type(ImPushTypeEnum.C_TO_C_TIP_STOP_IM.getCode())
|
.objId(ObjUtil.toString(o.getId()))
|
.title("通知")
|
.content(pushContent)
|
.data1(ObjUtil.toString(o.getUserId()))
|
.data2(ObjUtil.toString(o.getWorkerId()))
|
.build();
|
// 通知性格分析师
|
imBizService.messageSendSystem(o.getUserId()+"", new String[]{o.getWorkerId()+""}, pushData, ImUserTypeEnum.WORKER, PostIdEnum.PO_31, false);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
}
|
}
|
}
|