重新编写job继承模式

segment2.0
linrf 2 years ago
parent 898668a70a
commit 915811beae

@ -1,9 +1,10 @@
package com.docus.server.collect.job.user; package com.docus.server.collect.job;
import com.docus.core.util.Func; import com.docus.core.util.Func;
import com.docus.server.collect.infrastructure.pojo.domain.TaskConfig; import com.docus.server.collect.infrastructure.pojo.domain.TaskConfig;
import com.docus.server.collect.service.ITaskConfigService; import com.docus.server.collect.service.ITaskConfigService;
import com.docus.server.sys.common.pojo.dto.UserDTO; import com.docus.server.record.service.ITBasicService;
import com.docus.server.sys.service.IPowerDeptService;
import com.docus.server.sys.service.IPowerUserService; import com.docus.server.sys.service.IPowerUserService;
import com.docus.server.tool.PeriodTime; import com.docus.server.tool.PeriodTime;
import com.xxl.job.core.context.XxlJobHelper; import com.xxl.job.core.context.XxlJobHelper;
@ -13,77 +14,64 @@ import javax.annotation.Resource;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
public abstract class AbstractUserCollectJob { public abstract class AbstractCollectJob<T> implements IJob<T> {
@Resource
protected IPowerUserService userService;
@Resource
protected IPowerDeptService deptService;
@Autowired @Autowired
private IPowerUserService userService; protected ITBasicService basicService;
@Resource @Resource
private ITaskConfigService taskConfigService; protected ITaskConfigService taskConfigService;
/** @Override
*
*/
public void startCollectAll(String taskConfigId) { public void startCollectAll(String taskConfigId) {
TaskConfig taskConfig = taskConfigService.getTaskConfig(taskConfigId); TaskConfig taskConfig = taskConfigService.getTaskConfig(taskConfigId);
List<PeriodTime> periodTimes = taskConfig.getAllPeriodTimes(); List<PeriodTime> periodTimes = taskConfig.getAllPeriodTimes();
for (PeriodTime periodTime : periodTimes) { for (PeriodTime periodTime : periodTimes) {
getUsers(periodTime, taskConfig); get(periodTime, taskConfig);
taskConfigService.updateAllPointerDate(taskConfigId, periodTime.getPeriodEndDate()); taskConfigService.updateAllPointerDate(taskConfigId, periodTime.getPeriodEndDate());
} }
} }
/** @Override
*
*/
public void startCollectIncrement(String taskConfigId) { public void startCollectIncrement(String taskConfigId) {
TaskConfig taskConfig = taskConfigService.getTaskConfig(taskConfigId); TaskConfig taskConfig = taskConfigService.getTaskConfig(taskConfigId);
List<PeriodTime> periodTimes = taskConfig.getIncPeriodTimes(); List<PeriodTime> periodTimes = taskConfig.getIncPeriodTimes();
periodTimes.forEach(periodTime -> { periodTimes.forEach(periodTime -> {
getUsers(periodTime, taskConfig); get(periodTime, taskConfig);
taskConfigService.updateIncPointerDate(taskConfigId, periodTime.getPeriodEndDate()); taskConfigService.updateIncPointerDate(taskConfigId, periodTime.getPeriodEndDate());
}); });
} }
protected String getJobParam() { @Override
return XxlJobHelper.getJobParam(); public void get(PeriodTime periodTime, TaskConfig taskConfig) {
}
/**
*
*
* @param periodTime
* @param taskConfig
*/
private void getUsers(PeriodTime periodTime, TaskConfig taskConfig) {
//考虑到性能,应该把起始时间和结束时间进行切割拆分到每天。按段查询。 //考虑到性能,应该把起始时间和结束时间进行切割拆分到每天。按段查询。
List<UserDTO> users; List<T> t;
int pageNum = 1; int pageNum = 1;
for (; true; pageNum++) { for (; true; pageNum++) {
users = this.getUsers( t = this.execute(
periodTime.getPeriodStartDate(), periodTime.getPeriodStartDate(),
periodTime.getPeriodEndDate(), periodTime.getPeriodEndDate(),
pageNum, pageNum,
taskConfig.getPageSize() taskConfig.getPageSize()
); );
if (Func.isEmpty(users)) { if (Func.isEmpty(t)) {
break; break;
} }
userService.batchSaveOrUpdatePowerUser(users);
this.batchInsertOrUpdate(t);
} }
} }
/** protected String getJobParam() {
* return XxlJobHelper.getJobParam();
* }
* @param startDate
* @param endDate
* @param pageNum
* @param pageSize
* @return
*/
public abstract List<UserDTO> getUsers(Date startDate, Date endDate, long pageNum, long pageSize);
protected abstract void batchInsertOrUpdate(List<T> t);
protected abstract List<T> execute(Date startDate, Date endDate, long pageNum, long pageSize);
} }

@ -0,0 +1,14 @@
package com.docus.server.collect.job;
import com.docus.server.collect.infrastructure.pojo.domain.TaskConfig;
import com.docus.server.tool.PeriodTime;
public interface IJob<T> {
void startCollectAll(String taskConfigId);
void startCollectIncrement(String taskConfigId);
void get(PeriodTime periodTime, TaskConfig taskConfig);
}

@ -1,90 +0,0 @@
package com.docus.server.collect.job.basic;
import com.docus.core.util.Func;
import com.docus.server.collect.infrastructure.pojo.domain.TaskConfig;
import com.docus.server.collect.service.ITaskConfigService;
import com.docus.server.record.pojo.dto.TBasicDTO;
import com.docus.server.record.service.ITBasicService;
import com.docus.server.tool.PeriodTime;
import com.xxl.job.core.context.XxlJobHelper;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
public abstract class AbstractTBasicCollectJob {
@Autowired
private ITBasicService basicService;
@Resource
private ITaskConfigService taskConfigService;
/**
*
*/
public void startCollectAll(String taskConfigId) {
TaskConfig taskConfig = taskConfigService.getTaskConfig(taskConfigId);
List<PeriodTime> periodTimes = taskConfig.getAllPeriodTimes();
for (PeriodTime periodTime : periodTimes) {
getTBasic(periodTime, taskConfig);
taskConfigService.updateAllPointerDate(taskConfigId, periodTime.getPeriodEndDate());
}
}
/**
*
*/
public void startCollectIncrement(String taskConfigId) {
TaskConfig taskConfig = taskConfigService.getTaskConfig(taskConfigId);
List<PeriodTime> periodTimes = taskConfig.getIncPeriodTimes();
periodTimes.forEach(periodTime -> {
getTBasic(periodTime, taskConfig);
taskConfigService.updateIncPointerDate(taskConfigId, periodTime.getPeriodEndDate());
});
}
protected String getJobParam() {
return XxlJobHelper.getJobParam();
}
/**
*
*
* @param periodTime
* @param taskConfig
*/
private void getTBasic(PeriodTime periodTime, TaskConfig taskConfig) {
//考虑到性能,应该把起始时间和结束时间进行切割拆分到每天。按段查询。
List<TBasicDTO> basics;
int pageNum = 1;
for (; true; pageNum++) {
basics = this.getTBasics(
periodTime.getPeriodStartDate(),
periodTime.getPeriodEndDate(),
pageNum,
taskConfig.getPageSize()
);
if (Func.isEmpty(basics)) {
break;
}
//保存
basicService.batchSaveBasics(basics);
}
}
/**
*
*
* @param startDate
* @param endDate
* @param pageNum
* @param pageSize
* @return
*/
public abstract List<TBasicDTO> getTBasics(Date startDate, Date endDate, long pageNum, long pageSize);
}

@ -1,5 +1,6 @@
package com.docus.server.collect.job.basic; package com.docus.server.collect.job.basic;
import com.docus.server.collect.job.AbstractCollectJob;
import com.docus.server.collect.service.IHttpCollector; import com.docus.server.collect.service.IHttpCollector;
import com.docus.server.record.pojo.dto.TBasicDTO; import com.docus.server.record.pojo.dto.TBasicDTO;
import com.xxl.job.core.handler.annotation.XxlJob; import com.xxl.job.core.handler.annotation.XxlJob;
@ -11,7 +12,7 @@ import java.util.List;
@Component @Component
public class TBasicHttpCollectJob extends AbstractTBasicCollectJob { public class TBasicHttpCollectJob extends AbstractCollectJob<TBasicDTO> {
@Resource(name = "httpTBasicCollectorImpl") @Resource(name = "httpTBasicCollectorImpl")
private IHttpCollector collector; private IHttpCollector collector;
@ -34,10 +35,15 @@ public class TBasicHttpCollectJob extends AbstractTBasicCollectJob {
@Override @Override
public List<TBasicDTO> getTBasics(Date startDate, Date endDate, long pazeNum, long pageSize) { protected void batchInsertOrUpdate(List<TBasicDTO> t) {
basicService.batchSaveBasics(t);
}
@SuppressWarnings("unchecked")
@Override
protected List<TBasicDTO> execute(Date startDate, Date endDate, long pageNum, long pageSize) {
//需要根据不同医院去解析不同的内容。使用接口实现的方式。 //需要根据不同医院去解析不同的内容。使用接口实现的方式。
return collector.get(startDate, endDate, pazeNum, pageSize); return collector.get(startDate, endDate, pageNum, pageSize);
} }
} }

@ -1,5 +1,6 @@
package com.docus.server.collect.job.basic; package com.docus.server.collect.job.basic;
import com.docus.server.collect.job.AbstractCollectJob;
import com.docus.server.his.service.IHisService; import com.docus.server.his.service.IHisService;
import com.docus.server.record.pojo.dto.TBasicDTO; import com.docus.server.record.pojo.dto.TBasicDTO;
import com.xxl.job.core.handler.annotation.XxlJob; import com.xxl.job.core.handler.annotation.XxlJob;
@ -10,7 +11,7 @@ import java.util.Date;
import java.util.List; import java.util.List;
@Component @Component
public class TBasicViewCollectJob extends AbstractTBasicCollectJob { public class TBasicViewCollectJob extends AbstractCollectJob<TBasicDTO> {
@Resource @Resource
private IHisService hisService; private IHisService hisService;
@ -22,7 +23,6 @@ public class TBasicViewCollectJob extends AbstractTBasicCollectJob {
super.startCollectAll(getJobParam()); super.startCollectAll(getJobParam());
} }
/** /**
* xxl jobhandler * xxl jobhandler
*/ */
@ -31,10 +31,14 @@ public class TBasicViewCollectJob extends AbstractTBasicCollectJob {
super.startCollectIncrement(getJobParam()); super.startCollectIncrement(getJobParam());
} }
@Override @Override
public List<TBasicDTO> getTBasics(Date startDate, Date endDate, long pageNum, long pageSize) { protected void batchInsertOrUpdate(List<TBasicDTO> t) {
basicService.batchSaveBasics(t);
}
@SuppressWarnings("unchecked")
@Override
protected List<TBasicDTO> execute(Date startDate, Date endDate, long pageNum, long pageSize) {
//每家医院按照固定的格式写sql不同医院需要替换不同的sql即可。 //每家医院按照固定的格式写sql不同医院需要替换不同的sql即可。
return hisService.getTBasicListView(startDate, endDate, pageNum, pageSize); return hisService.getTBasicListView(startDate, endDate, pageNum, pageSize);
} }

@ -1,88 +0,0 @@
package com.docus.server.collect.job.dept;
import com.docus.core.util.Func;
import com.docus.server.collect.infrastructure.pojo.domain.TaskConfig;
import com.docus.server.collect.service.ITaskConfigService;
import com.docus.server.sys.common.pojo.dto.DeptDTO;
import com.docus.server.sys.service.IPowerDeptService;
import com.docus.server.tool.PeriodTime;
import com.xxl.job.core.context.XxlJobHelper;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
public abstract class AbstractDeptCollectJob {
@Resource
private IPowerDeptService deptService;
@Resource
private ITaskConfigService taskConfigService;
/**
*
*/
public void startCollectAll(String taskConfigId) {
TaskConfig taskConfig = taskConfigService.getTaskConfig(taskConfigId);
List<PeriodTime> periodTimes = taskConfig.getAllPeriodTimes();
for (PeriodTime periodTime : periodTimes) {
getDepts(periodTime, taskConfig);
taskConfigService.updateAllPointerDate(taskConfigId, periodTime.getPeriodEndDate());
}
}
/**
*
*/
public void startCollectIncrement(String taskConfigId) {
TaskConfig taskConfig = taskConfigService.getTaskConfig(taskConfigId);
List<PeriodTime> periodTimes = taskConfig.getIncPeriodTimes();
periodTimes.forEach(periodTime -> {
getDepts(periodTime, taskConfig);
taskConfigService.updateIncPointerDate(taskConfigId, periodTime.getPeriodEndDate());
});
}
protected String getJobParam() {
return XxlJobHelper.getJobParam();
}
/**
*
*
* @param periodTime
* @param taskConfig
*/
private void getDepts(PeriodTime periodTime, TaskConfig taskConfig) {
//考虑到性能,应该把起始时间和结束时间进行切割拆分到每天。按段查询。
List<DeptDTO> depts;
int pageNum = 1;
for (; true; pageNum++) {
depts = this.getDepts(
periodTime.getPeriodStartDate(),
periodTime.getPeriodEndDate(),
pageNum,
taskConfig.getPageSize()
);
if (Func.isEmpty(depts)) {
break;
}
deptService.batchSaveOrUpdatePowerDept(depts);
}
}
/**
*
*
* @param startDate
* @param endDate
* @param pageNum
* @param pageSize
* @return
*/
public abstract List<DeptDTO> getDepts(Date startDate, Date endDate, long pageNum, long pageSize);
}

@ -1,5 +1,6 @@
package com.docus.server.collect.job.dept; package com.docus.server.collect.job.dept;
import com.docus.server.collect.job.AbstractCollectJob;
import com.docus.server.collect.service.IHttpCollector; import com.docus.server.collect.service.IHttpCollector;
import com.docus.server.sys.common.pojo.dto.DeptDTO; import com.docus.server.sys.common.pojo.dto.DeptDTO;
import com.xxl.job.core.handler.annotation.XxlJob; import com.xxl.job.core.handler.annotation.XxlJob;
@ -11,7 +12,7 @@ import java.util.List;
@Component @Component
public class DeptHttpCollectJob extends AbstractDeptCollectJob { public class DeptHttpCollectJob extends AbstractCollectJob<DeptDTO> {
@Resource(name = "httpDeptCollectorImpl") @Resource(name = "httpDeptCollectorImpl")
private IHttpCollector collector; private IHttpCollector collector;
@ -32,12 +33,14 @@ public class DeptHttpCollectJob extends AbstractDeptCollectJob {
super.startCollectIncrement(getJobParam()); super.startCollectIncrement(getJobParam());
} }
@Override @Override
public List<DeptDTO> getDepts(Date startDate, Date endDate, long pazeNum, long pageSize) { protected void batchInsertOrUpdate(List<DeptDTO> t) {
deptService.batchSaveOrUpdatePowerDept(t);
//需要根据不同医院去解析不同的内容。使用接口实现的方式。 }
return collector.get(startDate, endDate, pazeNum, pageSize); @SuppressWarnings("unchecked")
@Override
protected List<DeptDTO> execute(Date startDate, Date endDate, long pageNum, long pageSize) {
return collector.get(startDate, endDate, pageNum, pageSize);
} }
} }

@ -1,5 +1,6 @@
package com.docus.server.collect.job.dept; package com.docus.server.collect.job.dept;
import com.docus.server.collect.job.AbstractCollectJob;
import com.docus.server.his.service.IHisService; import com.docus.server.his.service.IHisService;
import com.docus.server.sys.common.pojo.dto.DeptDTO; import com.docus.server.sys.common.pojo.dto.DeptDTO;
import com.xxl.job.core.handler.annotation.XxlJob; import com.xxl.job.core.handler.annotation.XxlJob;
@ -10,7 +11,7 @@ import java.util.Date;
import java.util.List; import java.util.List;
@Component @Component
public class DeptViewCollectJob extends AbstractDeptCollectJob { public class DeptViewCollectJob extends AbstractCollectJob<DeptDTO> {
@Resource @Resource
private IHisService hisService; private IHisService hisService;
@ -31,12 +32,15 @@ public class DeptViewCollectJob extends AbstractDeptCollectJob {
super.startCollectIncrement(getJobParam()); super.startCollectIncrement(getJobParam());
} }
@Override @Override
public List<DeptDTO> getDepts(Date startDate, Date endDate, long pageNum, long pageSize) { protected void batchInsertOrUpdate(List<DeptDTO> t) {
deptService.batchSaveOrUpdatePowerDept(t);
}
@SuppressWarnings("unchecked")
@Override
protected List<DeptDTO> execute(Date startDate, Date endDate, long pageNum, long pageSize) {
//每家医院按照固定的格式写sql不同医院需要替换不同的sql即可。 //每家医院按照固定的格式写sql不同医院需要替换不同的sql即可。
return hisService.getDeptListView(startDate, endDate, pageNum, pageSize); return hisService.getDeptListView(startDate, endDate, pageNum, pageSize);
} }
} }

@ -1,5 +1,6 @@
package com.docus.server.collect.job.user; package com.docus.server.collect.job.user;
import com.docus.server.collect.job.AbstractCollectJob;
import com.docus.server.collect.service.IHttpCollector; import com.docus.server.collect.service.IHttpCollector;
import com.docus.server.sys.common.pojo.dto.UserDTO; import com.docus.server.sys.common.pojo.dto.UserDTO;
import com.xxl.job.core.handler.annotation.XxlJob; import com.xxl.job.core.handler.annotation.XxlJob;
@ -11,8 +12,7 @@ import java.util.List;
@Component @Component
public class UserHttpCollectJob extends AbstractUserCollectJob { public class UserHttpCollectJob extends AbstractCollectJob<UserDTO> {
@Resource(name = "httpUserCollectorImpl") @Resource(name = "httpUserCollectorImpl")
private IHttpCollector collector; private IHttpCollector collector;
@ -32,10 +32,15 @@ public class UserHttpCollectJob extends AbstractUserCollectJob {
super.startCollectIncrement(getJobParam()); super.startCollectIncrement(getJobParam());
} }
@Override
protected void batchInsertOrUpdate(List<UserDTO> t) {
userService.batchSaveOrUpdatePowerUser(t);
}
@SuppressWarnings("unchecked")
@Override @Override
public List<UserDTO> getUsers(Date startDate, Date endDate, long pazeNum, long pageSize) { protected List<UserDTO> execute(Date startDate, Date endDate, long pageNum, long pageSize) {
//需要根据不同医院去解析不同的内容。使用接口实现的方式。 //需要根据不同医院去解析不同的内容。使用接口实现的方式。
return collector.get(startDate, endDate, pazeNum, pageSize); return collector.get(startDate, endDate, pageNum, pageSize);
} }
} }

@ -1,5 +1,6 @@
package com.docus.server.collect.job.user; package com.docus.server.collect.job.user;
import com.docus.server.collect.job.AbstractCollectJob;
import com.docus.server.his.service.IHisService; import com.docus.server.his.service.IHisService;
import com.docus.server.sys.common.pojo.dto.UserDTO; import com.docus.server.sys.common.pojo.dto.UserDTO;
import com.xxl.job.core.handler.annotation.XxlJob; import com.xxl.job.core.handler.annotation.XxlJob;
@ -10,7 +11,7 @@ import java.util.Date;
import java.util.List; import java.util.List;
@Component @Component
public class UserViewCollectJob extends AbstractUserCollectJob { public class UserViewCollectJob extends AbstractCollectJob<UserDTO> {
@Resource @Resource
private IHisService hisService; private IHisService hisService;
@ -31,11 +32,14 @@ public class UserViewCollectJob extends AbstractUserCollectJob {
super.startCollectIncrement(getJobParam()); super.startCollectIncrement(getJobParam());
} }
@Override
protected void batchInsertOrUpdate(List<UserDTO> t) {
userService.batchSaveOrUpdatePowerUser(t);
}
@Override @Override
public List<UserDTO> getUsers(Date startDate, Date endDate, long pageNum, long pageSize) { protected List<UserDTO> execute(Date startDate, Date endDate, long pageNum, long pageSize) {
//每家医院按照固定的格式写sql不同医院需要替换不同的sql即可。 //每家医院按照固定的格式写sql不同医院需要替换不同的sql即可。
return hisService.getUserListView(startDate, endDate, pageNum, pageSize); return hisService.getUserListView(startDate, endDate, pageNum, pageSize);
} }
} }

@ -4,12 +4,13 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.docus.core.util.Func; import com.docus.core.util.Func;
import com.docus.infrastructure.redis.service.IdService; import com.docus.infrastructure.redis.service.IdService;
import com.docus.server.sys.common.UserProperties; import com.docus.server.sys.common.UserProperties;
import com.docus.server.sys.mapper.PowerUserMapper;
import com.docus.server.sys.common.pojo.dto.UserDTO; import com.docus.server.sys.common.pojo.dto.UserDTO;
import com.docus.server.sys.common.pojo.dto.UserModifyParam; import com.docus.server.sys.common.pojo.dto.UserModifyParam;
import com.docus.server.sys.common.pojo.entity.PowerUser; import com.docus.server.sys.common.pojo.entity.PowerUser;
import com.docus.server.sys.mapper.PowerUserMapper;
import com.docus.server.sys.service.IPowerUserService; import com.docus.server.sys.service.IPowerUserService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List; import java.util.List;
@ -26,11 +27,13 @@ public class PowerUserServiceImpl extends ServiceImpl<PowerUserMapper, PowerUser
@Resource @Resource
private UserProperties userProperties; private UserProperties userProperties;
@Transactional
@Override @Override
public void batchSaveOrUpdatePowerUser(List<UserDTO> userDTOList) { public void batchSaveOrUpdatePowerUser(List<UserDTO> userDTOList) {
userDTOList.forEach(this::saveOrUpdatePowerUser); userDTOList.forEach(this::saveOrUpdatePowerUser);
} }
@Transactional
@Override @Override
public boolean saveOrUpdatePowerUser(UserDTO userDTO) { public boolean saveOrUpdatePowerUser(UserDTO userDTO) {
PowerUser powerUser = baseMapper.getUserByUserName(userDTO.getUserName()); PowerUser powerUser = baseMapper.getUserByUserName(userDTO.getUserName());

Loading…
Cancel
Save