重新编写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.server.collect.infrastructure.pojo.domain.TaskConfig;
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.tool.PeriodTime;
import com.xxl.job.core.context.XxlJobHelper;
@ -13,77 +14,64 @@ import javax.annotation.Resource;
import java.util.Date;
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
private IPowerUserService userService;
protected ITBasicService basicService;
@Resource
private ITaskConfigService taskConfigService;
protected ITaskConfigService taskConfigService;
/**
*
*/
@Override
public void startCollectAll(String taskConfigId) {
TaskConfig taskConfig = taskConfigService.getTaskConfig(taskConfigId);
List<PeriodTime> periodTimes = taskConfig.getAllPeriodTimes();
for (PeriodTime periodTime : periodTimes) {
getUsers(periodTime, taskConfig);
get(periodTime, taskConfig);
taskConfigService.updateAllPointerDate(taskConfigId, periodTime.getPeriodEndDate());
}
}
/**
*
*/
@Override
public void startCollectIncrement(String taskConfigId) {
TaskConfig taskConfig = taskConfigService.getTaskConfig(taskConfigId);
List<PeriodTime> periodTimes = taskConfig.getIncPeriodTimes();
periodTimes.forEach(periodTime -> {
getUsers(periodTime, taskConfig);
get(periodTime, taskConfig);
taskConfigService.updateIncPointerDate(taskConfigId, periodTime.getPeriodEndDate());
});
}
protected String getJobParam() {
return XxlJobHelper.getJobParam();
}
/**
*
*
* @param periodTime
* @param taskConfig
*/
private void getUsers(PeriodTime periodTime, TaskConfig taskConfig) {
@Override
public void get(PeriodTime periodTime, TaskConfig taskConfig) {
//考虑到性能,应该把起始时间和结束时间进行切割拆分到每天。按段查询。
List<UserDTO> users;
List<T> t;
int pageNum = 1;
for (; true; pageNum++) {
users = this.getUsers(
t = this.execute(
periodTime.getPeriodStartDate(),
periodTime.getPeriodEndDate(),
pageNum,
taskConfig.getPageSize()
);
if (Func.isEmpty(users)) {
if (Func.isEmpty(t)) {
break;
}
userService.batchSaveOrUpdatePowerUser(users);
this.batchInsertOrUpdate(t);
}
}
/**
*
*
* @param startDate
* @param endDate
* @param pageNum
* @param pageSize
* @return
*/
public abstract List<UserDTO> getUsers(Date startDate, Date endDate, long pageNum, long pageSize);
protected String getJobParam() {
return XxlJobHelper.getJobParam();
}
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;
import com.docus.server.collect.job.AbstractCollectJob;
import com.docus.server.collect.service.IHttpCollector;
import com.docus.server.record.pojo.dto.TBasicDTO;
import com.xxl.job.core.handler.annotation.XxlJob;
@ -11,7 +12,7 @@ import java.util.List;
@Component
public class TBasicHttpCollectJob extends AbstractTBasicCollectJob {
public class TBasicHttpCollectJob extends AbstractCollectJob<TBasicDTO> {
@Resource(name = "httpTBasicCollectorImpl")
private IHttpCollector collector;
@ -34,10 +35,15 @@ public class TBasicHttpCollectJob extends AbstractTBasicCollectJob {
@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;
import com.docus.server.collect.job.AbstractCollectJob;
import com.docus.server.his.service.IHisService;
import com.docus.server.record.pojo.dto.TBasicDTO;
import com.xxl.job.core.handler.annotation.XxlJob;
@ -10,7 +11,7 @@ import java.util.Date;
import java.util.List;
@Component
public class TBasicViewCollectJob extends AbstractTBasicCollectJob {
public class TBasicViewCollectJob extends AbstractCollectJob<TBasicDTO> {
@Resource
private IHisService hisService;
@ -22,7 +23,6 @@ public class TBasicViewCollectJob extends AbstractTBasicCollectJob {
super.startCollectAll(getJobParam());
}
/**
* xxl jobhandler
*/
@ -31,10 +31,14 @@ public class TBasicViewCollectJob extends AbstractTBasicCollectJob {
super.startCollectIncrement(getJobParam());
}
@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即可。
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;
import com.docus.server.collect.job.AbstractCollectJob;
import com.docus.server.collect.service.IHttpCollector;
import com.docus.server.sys.common.pojo.dto.DeptDTO;
import com.xxl.job.core.handler.annotation.XxlJob;
@ -11,7 +12,7 @@ import java.util.List;
@Component
public class DeptHttpCollectJob extends AbstractDeptCollectJob {
public class DeptHttpCollectJob extends AbstractCollectJob<DeptDTO> {
@Resource(name = "httpDeptCollectorImpl")
private IHttpCollector collector;
@ -32,12 +33,14 @@ public class DeptHttpCollectJob extends AbstractDeptCollectJob {
super.startCollectIncrement(getJobParam());
}
@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;
import com.docus.server.collect.job.AbstractCollectJob;
import com.docus.server.his.service.IHisService;
import com.docus.server.sys.common.pojo.dto.DeptDTO;
import com.xxl.job.core.handler.annotation.XxlJob;
@ -10,7 +11,7 @@ import java.util.Date;
import java.util.List;
@Component
public class DeptViewCollectJob extends AbstractDeptCollectJob {
public class DeptViewCollectJob extends AbstractCollectJob<DeptDTO> {
@Resource
private IHisService hisService;
@ -31,12 +32,15 @@ public class DeptViewCollectJob extends AbstractDeptCollectJob {
super.startCollectIncrement(getJobParam());
}
@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即可。
return hisService.getDeptListView(startDate, endDate, pageNum, pageSize);
}
}

@ -1,5 +1,6 @@
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.sys.common.pojo.dto.UserDTO;
import com.xxl.job.core.handler.annotation.XxlJob;
@ -11,8 +12,7 @@ import java.util.List;
@Component
public class UserHttpCollectJob extends AbstractUserCollectJob {
public class UserHttpCollectJob extends AbstractCollectJob<UserDTO> {
@Resource(name = "httpUserCollectorImpl")
private IHttpCollector collector;
@ -32,10 +32,15 @@ public class UserHttpCollectJob extends AbstractUserCollectJob {
super.startCollectIncrement(getJobParam());
}
@Override
protected void batchInsertOrUpdate(List<UserDTO> t) {
userService.batchSaveOrUpdatePowerUser(t);
}
@SuppressWarnings("unchecked")
@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;
import com.docus.server.collect.job.AbstractCollectJob;
import com.docus.server.his.service.IHisService;
import com.docus.server.sys.common.pojo.dto.UserDTO;
import com.xxl.job.core.handler.annotation.XxlJob;
@ -10,7 +11,7 @@ import java.util.Date;
import java.util.List;
@Component
public class UserViewCollectJob extends AbstractUserCollectJob {
public class UserViewCollectJob extends AbstractCollectJob<UserDTO> {
@Resource
private IHisService hisService;
@ -31,11 +32,14 @@ public class UserViewCollectJob extends AbstractUserCollectJob {
super.startCollectIncrement(getJobParam());
}
@Override
protected void batchInsertOrUpdate(List<UserDTO> t) {
userService.batchSaveOrUpdatePowerUser(t);
}
@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即可。
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.infrastructure.redis.service.IdService;
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.UserModifyParam;
import com.docus.server.sys.common.pojo.entity.PowerUser;
import com.docus.server.sys.mapper.PowerUserMapper;
import com.docus.server.sys.service.IPowerUserService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
@ -26,11 +27,13 @@ public class PowerUserServiceImpl extends ServiceImpl<PowerUserMapper, PowerUser
@Resource
private UserProperties userProperties;
@Transactional
@Override
public void batchSaveOrUpdatePowerUser(List<UserDTO> userDTOList) {
userDTOList.forEach(this::saveOrUpdatePowerUser);
}
@Transactional
@Override
public boolean saveOrUpdatePowerUser(UserDTO userDTO) {
PowerUser powerUser = baseMapper.getUserByUserName(userDTO.getUserName());

Loading…
Cancel
Save