|
@@ -3,25 +3,23 @@ package com.management.platform.service.impl;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
-import com.management.platform.entity.SysDict;
|
|
|
-import com.management.platform.entity.User;
|
|
|
-import com.management.platform.entity.VisitPlan;
|
|
|
+import com.management.platform.entity.*;
|
|
|
import com.management.platform.entity.dto.QueryVisitPlanDTO;
|
|
|
+import com.management.platform.entity.vo.VisitPlanDetailVO;
|
|
|
import com.management.platform.entity.vo.VisitPlanVO;
|
|
|
-import com.management.platform.mapper.SysDictMapper;
|
|
|
-import com.management.platform.mapper.UserMapper;
|
|
|
-import com.management.platform.mapper.VisitPlanMapper;
|
|
|
+import com.management.platform.mapper.*;
|
|
|
import com.management.platform.service.VisitPlanService;
|
|
|
import com.management.platform.time.VisitPlanDelayHandler;
|
|
|
import com.management.platform.time.VisitPlanDelayItem;
|
|
|
import com.management.platform.util.HttpRespMsg;
|
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Qualifier;
|
|
|
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
-import java.text.SimpleDateFormat;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
@@ -31,7 +29,8 @@ import java.util.stream.Collectors;
|
|
|
public class VisitPlanServiceImpl extends ServiceImpl<VisitPlanMapper, VisitPlan> implements VisitPlanService {
|
|
|
|
|
|
|
|
|
- @Resource
|
|
|
+ @Autowired
|
|
|
+ @Qualifier(value = "VisitPlanThreadPool")
|
|
|
ThreadPoolTaskExecutor threadPoolTaskExecutor;
|
|
|
|
|
|
|
|
@@ -43,9 +42,14 @@ public class VisitPlanServiceImpl extends ServiceImpl<VisitPlanMapper, VisitPlan
|
|
|
|
|
|
@Resource
|
|
|
private SysDictMapper sysDictMapper;
|
|
|
+ @Resource
|
|
|
+ private CustomMapper customMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private ContactsMapper contactsMapper;
|
|
|
|
|
|
@Override
|
|
|
- public HttpRespMsg addVisitPlan(VisitPlan visitPlan, HttpServletRequest request) {
|
|
|
+ public HttpRespMsg addOrUpdateVisitPlan(VisitPlan visitPlan, HttpServletRequest request) {
|
|
|
HttpRespMsg httpRespMsg = new HttpRespMsg();
|
|
|
Date now = new Date();
|
|
|
User user= userMapper.selectById(request.getHeader("token"));
|
|
@@ -53,7 +57,6 @@ public class VisitPlanServiceImpl extends ServiceImpl<VisitPlanMapper, VisitPlan
|
|
|
httpRespMsg.setError("用户不存在");
|
|
|
return httpRespMsg;
|
|
|
}
|
|
|
-
|
|
|
if(visitPlan.getVisitTime().before(now)){
|
|
|
httpRespMsg.setError("拜访时间不能在当前时段之前");
|
|
|
return httpRespMsg;
|
|
@@ -68,54 +71,118 @@ public class VisitPlanServiceImpl extends ServiceImpl<VisitPlanMapper, VisitPlan
|
|
|
return httpRespMsg;
|
|
|
}
|
|
|
Map<Integer, SysDict> timeTypeMap = remindTypeList.stream().collect(Collectors.toMap(SysDict::getId, t->t));
|
|
|
- SysDict timeTypeDict = timeTypeMap.get(visitPlan.getRemindType());
|
|
|
- if(null == timeTypeDict){
|
|
|
- httpRespMsg.setError("提醒类型不存在,请重新填写");
|
|
|
- return httpRespMsg;
|
|
|
+ SysDict timeTypeDict = null;
|
|
|
+ if(-1 != visitPlan.getRemindType()){ //timeType自定义时间不能作为字典项传输,写死为 -1
|
|
|
+ timeTypeDict = timeTypeMap.get(visitPlan.getRemindType());
|
|
|
+ if(null == timeTypeDict){
|
|
|
+ httpRespMsg.setError("提醒类型不存在,请重新填写");
|
|
|
+ return httpRespMsg;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- Long delayTime = 0L;
|
|
|
- Long startTimeMilliSec = 0L;
|
|
|
- Long endTimeMilliSec = 0L;
|
|
|
- if(timeTypeDict.getName().equals("不提醒")){
|
|
|
- //不加入队列,不需要提醒
|
|
|
- visitPlan.setRemindState(2);
|
|
|
- } else if (timeTypeDict.getName().equals("自定义时间")) {
|
|
|
- //重新计算delayTime 自定义时间-当前时间
|
|
|
- if(visitPlan.getRemindTime().before(now)
|
|
|
- || visitPlan.getRemindTime().after(visitPlan.getVisitTime())){
|
|
|
- httpRespMsg.setError("提醒时间不能在当前时段之前或拜访时间之后");
|
|
|
+ if(null != visitPlan.getId()){
|
|
|
+ //修改
|
|
|
+ Date visitTime = visitPlanMapper.selectById(visitPlan.getId()).getVisitTime();
|
|
|
+ long milliCosts = visitTime.getTime() - now.getTime();
|
|
|
+ if(milliCosts > 30 * 60 * 1000){
|
|
|
+ httpRespMsg.setError("原拜访时间为近半小时内的数据无法修改");
|
|
|
return httpRespMsg;
|
|
|
}
|
|
|
- //毫秒
|
|
|
- startTimeMilliSec = now.getTime();
|
|
|
- endTimeMilliSec = visitPlan.getRemindTime().getTime();
|
|
|
- delayTime = endTimeMilliSec - startTimeMilliSec;
|
|
|
+ Long delayTime = 0L;
|
|
|
+ Long startTimeMilliSec = 0L;
|
|
|
+ Long endTimeMilliSec = 0L;
|
|
|
+ boolean timeTypeCheck = false;
|
|
|
+ if(-1 == visitPlan.getRemindType()){
|
|
|
+ //重新计算delayTime 自定义时间-当前时间
|
|
|
+ if(visitPlan.getRemindTime().before(now)
|
|
|
+ || visitPlan.getRemindTime().after(visitPlan.getVisitTime())){
|
|
|
+ httpRespMsg.setError("提醒时间不能在当前时段之前或拜访时间之后");
|
|
|
+ return httpRespMsg;
|
|
|
+ }
|
|
|
+ //毫秒
|
|
|
+ startTimeMilliSec = now.getTime();
|
|
|
+ endTimeMilliSec = visitPlan.getRemindTime().getTime();
|
|
|
+ delayTime = endTimeMilliSec - startTimeMilliSec;
|
|
|
+ timeTypeCheck = true;
|
|
|
+ } else if (timeTypeDict.getName().equals("不提醒")) {
|
|
|
+ //不加入队列,不需要提醒
|
|
|
+ visitPlan.setRemindState(2);
|
|
|
+ }else{
|
|
|
+ startTimeMilliSec = now.getTime();
|
|
|
+ endTimeMilliSec = visitPlan.getVisitTime().getTime()-Integer.parseInt(timeTypeDict.getExt1()) * 1000L;
|
|
|
+ if(endTimeMilliSec < startTimeMilliSec){
|
|
|
+ httpRespMsg.setError("提醒时间不能在当前时段之前或拜访时间之后");
|
|
|
+ return httpRespMsg;
|
|
|
+ }
|
|
|
+ delayTime = endTimeMilliSec-startTimeMilliSec;
|
|
|
+ timeTypeCheck=true;
|
|
|
+ }
|
|
|
+
|
|
|
+ visitPlanMapper.updateById(visitPlan);
|
|
|
+ VisitPlan newPlan = visitPlanMapper.selectById(visitPlan.getId());//前端某些字段不传,以防万一
|
|
|
+
|
|
|
+ //从队列中取出,并重新计算时间入队列
|
|
|
+ if(timeTypeCheck){
|
|
|
+ VisitPlanDelayHandler tool = new VisitPlanDelayHandler();
|
|
|
+ tool.removeIfExist(visitPlan.getId());
|
|
|
+ VisitPlanDelayItem item = new VisitPlanDelayItem(delayTime
|
|
|
+ ,startTimeMilliSec
|
|
|
+ ,endTimeMilliSec
|
|
|
+ ,newPlan.getId(),newPlan);
|
|
|
+ tool.addItem(item);
|
|
|
+ }
|
|
|
+
|
|
|
}else{
|
|
|
- startTimeMilliSec = now.getTime();
|
|
|
- endTimeMilliSec = visitPlan.getVisitTime().getTime()-Integer.parseInt(timeTypeDict.getExt1()) * 1000L;
|
|
|
- if(endTimeMilliSec < startTimeMilliSec){
|
|
|
- httpRespMsg.setError("提醒时间不能在当前时段之前或拜访时间之后");
|
|
|
- return httpRespMsg;
|
|
|
+ //新增
|
|
|
+ visitPlan.setCompanyId(user.getCompanyId());
|
|
|
+ Long delayTime = 0L;
|
|
|
+ Long startTimeMilliSec = 0L;
|
|
|
+ Long endTimeMilliSec = 0L;
|
|
|
+ boolean timeTypeCheck = false;
|
|
|
+ if(-1 == visitPlan.getRemindType()){
|
|
|
+ //重新计算delayTime 自定义时间-当前时间
|
|
|
+ if(visitPlan.getRemindTime().before(now)
|
|
|
+ || visitPlan.getRemindTime().after(visitPlan.getVisitTime())){
|
|
|
+ httpRespMsg.setError("提醒时间不能在当前时段之前或拜访时间之后");
|
|
|
+ return httpRespMsg;
|
|
|
+ }
|
|
|
+ //毫秒
|
|
|
+ startTimeMilliSec = now.getTime();
|
|
|
+ endTimeMilliSec = visitPlan.getRemindTime().getTime();
|
|
|
+ delayTime = endTimeMilliSec - startTimeMilliSec;
|
|
|
+ timeTypeCheck = true;
|
|
|
+ } else if (timeTypeDict.getName().equals("不提醒")) {
|
|
|
+ //不加入队列,不需要提醒
|
|
|
+ visitPlan.setRemindState(2);
|
|
|
+ }else{
|
|
|
+ startTimeMilliSec = now.getTime();
|
|
|
+ endTimeMilliSec = visitPlan.getVisitTime().getTime()-Integer.parseInt(timeTypeDict.getExt1()) * 1000L;
|
|
|
+ if(endTimeMilliSec < startTimeMilliSec){
|
|
|
+ httpRespMsg.setError("提醒时间不能在当前时段之前或拜访时间之后");
|
|
|
+ return httpRespMsg;
|
|
|
+ }
|
|
|
+ delayTime = endTimeMilliSec-startTimeMilliSec;
|
|
|
+ timeTypeCheck=true;
|
|
|
}
|
|
|
- delayTime = endTimeMilliSec-startTimeMilliSec;
|
|
|
- }
|
|
|
|
|
|
- visitPlan.setCreateBy(user.getId());
|
|
|
- visitPlanMapper.insert(visitPlan);
|
|
|
+ Custom custom = customMapper.selectById(visitPlan.getCustomId());
|
|
|
+ visitPlan.setCustomName(custom.getCustomName());
|
|
|
+ visitPlan.setCreateBy(user.getId());
|
|
|
+ visitPlanMapper.insert(visitPlan);
|
|
|
|
|
|
- //加入执行队列
|
|
|
- if(!timeTypeDict.getName().equals("不提醒")){
|
|
|
- VisitPlanDelayHandler tool = new VisitPlanDelayHandler();
|
|
|
- VisitPlan taskPlan = visitPlanMapper.selectById(visitPlan.getId());
|
|
|
- VisitPlanDelayItem item = new VisitPlanDelayItem(delayTime
|
|
|
- ,startTimeMilliSec
|
|
|
- ,endTimeMilliSec
|
|
|
- ,taskPlan.getId(),taskPlan);
|
|
|
- tool.addItem(item);
|
|
|
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
- System.out.println("当前时间: "+format.format(new Date()));
|
|
|
- threadPoolTaskExecutor.execute(tool);
|
|
|
+ //加入执行队列
|
|
|
+ if(timeTypeCheck){
|
|
|
+ VisitPlanDelayHandler tool = new VisitPlanDelayHandler();
|
|
|
+ VisitPlan taskPlan = visitPlanMapper.selectById(visitPlan.getId());
|
|
|
+ VisitPlanDelayItem item = new VisitPlanDelayItem(delayTime
|
|
|
+ ,startTimeMilliSec
|
|
|
+ ,endTimeMilliSec
|
|
|
+ ,taskPlan.getId(),taskPlan);
|
|
|
+ tool.addItem(item);
|
|
|
+// SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+// System.out.println("当前时间: "+format.format(new Date()));
|
|
|
+ threadPoolTaskExecutor.execute(tool);
|
|
|
+ }
|
|
|
}
|
|
|
return httpRespMsg;
|
|
|
}
|
|
@@ -152,19 +219,22 @@ public class VisitPlanServiceImpl extends ServiceImpl<VisitPlanMapper, VisitPlan
|
|
|
return httpRespMsg;
|
|
|
}
|
|
|
VisitPlan taskPlan = visitPlanMapper.selectById(planId);
|
|
|
- SysDict timeTypeDict = sysDictMapper.selectOne(new LambdaQueryWrapper<SysDict>()
|
|
|
- .eq(SysDict::getCode, "RemindType")
|
|
|
- .eq(SysDict::getId, taskPlan.getRemindType())
|
|
|
- .eq(SysDict::getCompanyId, user.getCompanyId())
|
|
|
- );
|
|
|
+ SysDict timeTypeDict = null;
|
|
|
+ if(-1 != taskPlan.getRemindType()){
|
|
|
+ timeTypeDict = sysDictMapper.selectOne(new LambdaQueryWrapper<SysDict>()
|
|
|
+ .eq(SysDict::getCode, "RemindType")
|
|
|
+ .eq(SysDict::getId, taskPlan.getRemindType())
|
|
|
+ .eq(SysDict::getCompanyId, user.getCompanyId())
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
Long delayTime = 0L;
|
|
|
Long startTimeMilliSec = 0L;
|
|
|
Long endTimeMilliSec = 0L;
|
|
|
+ boolean timeTypeCheck = false;
|
|
|
taskPlan.setVisitTime(newVisitTime);
|
|
|
- if(timeTypeDict.getName().equals("不提醒")){
|
|
|
- //不加入队列,不修改状态,只修改拜访时间
|
|
|
- } else if (timeTypeDict.getName().equals("自定义时间")) {
|
|
|
+ if(-1 == taskPlan.getRemindType()){
|
|
|
//重新计算delayTime 自定义时间-当前时间
|
|
|
if(taskPlan.getRemindTime().before(now)
|
|
|
|| taskPlan.getRemindTime().after(newVisitTime)){
|
|
@@ -175,6 +245,9 @@ public class VisitPlanServiceImpl extends ServiceImpl<VisitPlanMapper, VisitPlan
|
|
|
startTimeMilliSec = now.getTime();
|
|
|
endTimeMilliSec = taskPlan.getRemindTime().getTime();
|
|
|
delayTime = endTimeMilliSec - startTimeMilliSec;
|
|
|
+ timeTypeCheck=true;
|
|
|
+ }else if (timeTypeDict.getName().equals("不提醒")){
|
|
|
+ //不加入队列,不修改状态,只修改拜访时间
|
|
|
}else{
|
|
|
startTimeMilliSec = now.getTime();
|
|
|
endTimeMilliSec = newVisitTime.getTime()-Integer.parseInt(timeTypeDict.getExt1()) * 1000L;
|
|
@@ -183,17 +256,20 @@ public class VisitPlanServiceImpl extends ServiceImpl<VisitPlanMapper, VisitPlan
|
|
|
return httpRespMsg;
|
|
|
}
|
|
|
delayTime = endTimeMilliSec-startTimeMilliSec;
|
|
|
+ timeTypeCheck=true;
|
|
|
}
|
|
|
|
|
|
//删除队列
|
|
|
VisitPlanDelayHandler tool = new VisitPlanDelayHandler();
|
|
|
tool.removeIfExist(planId);
|
|
|
//重新添加
|
|
|
- VisitPlanDelayItem item = new VisitPlanDelayItem(delayTime
|
|
|
- ,startTimeMilliSec
|
|
|
- ,endTimeMilliSec
|
|
|
- ,taskPlan.getId(),taskPlan);
|
|
|
- tool.addItem(item);
|
|
|
+ if(timeTypeCheck){
|
|
|
+ VisitPlanDelayItem item = new VisitPlanDelayItem(delayTime
|
|
|
+ ,startTimeMilliSec
|
|
|
+ ,endTimeMilliSec
|
|
|
+ ,taskPlan.getId(),taskPlan);
|
|
|
+ tool.addItem(item);
|
|
|
+ }
|
|
|
|
|
|
visitPlanMapper.update(null,new LambdaUpdateWrapper<VisitPlan>()
|
|
|
.set(VisitPlan::getVisitTime,newVisitTime)
|
|
@@ -224,7 +300,7 @@ public class VisitPlanServiceImpl extends ServiceImpl<VisitPlanMapper, VisitPlan
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public HttpRespMsg getPageVisitPlan(Integer pageIndex, Integer pageSize, String calenderDate, HttpServletRequest request) {
|
|
|
+ public HttpRespMsg getVisitPlanList(Integer pageIndex, Integer pageSize, String calenderDate, HttpServletRequest request) {
|
|
|
HttpRespMsg httpRespMsg = new HttpRespMsg();
|
|
|
User user= userMapper.selectById(request.getHeader("token"));
|
|
|
if(null == user){
|
|
@@ -242,4 +318,15 @@ public class VisitPlanServiceImpl extends ServiceImpl<VisitPlanMapper, VisitPlan
|
|
|
httpRespMsg.setData(resPage);
|
|
|
return httpRespMsg;
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpRespMsg getVisitPlanDetail(Long planId, HttpServletRequest request) {
|
|
|
+ HttpRespMsg httpRespMsg = new HttpRespMsg();
|
|
|
+ VisitPlanDetailVO detailVO = visitPlanMapper.getDetail(planId);
|
|
|
+ List<Contacts> contacts = contactsMapper.selectList(new LambdaQueryWrapper<Contacts>()
|
|
|
+ .eq(Contacts::getCustomId, detailVO.getCustomId()));
|
|
|
+ detailVO.setContacts(contacts);
|
|
|
+ httpRespMsg.setData(detailVO);
|
|
|
+ return httpRespMsg;
|
|
|
+ }
|
|
|
}
|