From 915811beae1d1a13cdddb18e8df0c70d24563f51 Mon Sep 17 00:00:00 2001 From: linrf Date: Thu, 8 Jun 2023 10:11:08 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=96=B0=E7=BC=96=E5=86=99job?= =?UTF-8?q?=E7=BB=A7=E6=89=BF=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ollectJob.java => AbstractCollectJob.java} | 72 +++++++-------- .../com/docus/server/collect/job/IJob.java | 14 +++ .../job/basic/AbstractTBasicCollectJob.java | 90 ------------------- .../job/basic/TBasicHttpCollectJob.java | 12 ++- .../job/basic/TBasicViewCollectJob.java | 14 +-- .../job/dept/AbstractDeptCollectJob.java | 88 ------------------ .../collect/job/dept/DeptHttpCollectJob.java | 15 ++-- .../collect/job/dept/DeptViewCollectJob.java | 12 ++- .../collect/job/user/UserHttpCollectJob.java | 13 ++- .../collect/job/user/UserViewCollectJob.java | 10 ++- .../service/impl/PowerUserServiceImpl.java | 5 +- 11 files changed, 99 insertions(+), 246 deletions(-) rename common-collect/src/main/java/com/docus/server/collect/job/{user/AbstractUserCollectJob.java => AbstractCollectJob.java} (54%) create mode 100644 common-collect/src/main/java/com/docus/server/collect/job/IJob.java delete mode 100644 common-collect/src/main/java/com/docus/server/collect/job/basic/AbstractTBasicCollectJob.java delete mode 100644 common-collect/src/main/java/com/docus/server/collect/job/dept/AbstractDeptCollectJob.java diff --git a/common-collect/src/main/java/com/docus/server/collect/job/user/AbstractUserCollectJob.java b/common-collect/src/main/java/com/docus/server/collect/job/AbstractCollectJob.java similarity index 54% rename from common-collect/src/main/java/com/docus/server/collect/job/user/AbstractUserCollectJob.java rename to common-collect/src/main/java/com/docus/server/collect/job/AbstractCollectJob.java index 2970ba6..5a17724 100644 --- a/common-collect/src/main/java/com/docus/server/collect/job/user/AbstractUserCollectJob.java +++ b/common-collect/src/main/java/com/docus/server/collect/job/AbstractCollectJob.java @@ -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 implements IJob { + @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 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 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 users; + List t; int pageNum = 1; for (; true; pageNum++) { - users = this.getUsers( - periodTime.getPeriodStartDate(), - periodTime.getPeriodEndDate(), - pageNum, - taskConfig.getPageSize() + 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 getUsers(Date startDate, Date endDate, long pageNum, long pageSize); + protected String getJobParam() { + return XxlJobHelper.getJobParam(); + } + protected abstract void batchInsertOrUpdate(List t); + protected abstract List execute(Date startDate, Date endDate, long pageNum, long pageSize); } diff --git a/common-collect/src/main/java/com/docus/server/collect/job/IJob.java b/common-collect/src/main/java/com/docus/server/collect/job/IJob.java new file mode 100644 index 0000000..49258f3 --- /dev/null +++ b/common-collect/src/main/java/com/docus/server/collect/job/IJob.java @@ -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 { + + void startCollectAll(String taskConfigId); + + void startCollectIncrement(String taskConfigId); + + void get(PeriodTime periodTime, TaskConfig taskConfig); + +} diff --git a/common-collect/src/main/java/com/docus/server/collect/job/basic/AbstractTBasicCollectJob.java b/common-collect/src/main/java/com/docus/server/collect/job/basic/AbstractTBasicCollectJob.java deleted file mode 100644 index 9895ae6..0000000 --- a/common-collect/src/main/java/com/docus/server/collect/job/basic/AbstractTBasicCollectJob.java +++ /dev/null @@ -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 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 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 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 getTBasics(Date startDate, Date endDate, long pageNum, long pageSize); - - -} diff --git a/common-collect/src/main/java/com/docus/server/collect/job/basic/TBasicHttpCollectJob.java b/common-collect/src/main/java/com/docus/server/collect/job/basic/TBasicHttpCollectJob.java index 3bf0084..932922c 100644 --- a/common-collect/src/main/java/com/docus/server/collect/job/basic/TBasicHttpCollectJob.java +++ b/common-collect/src/main/java/com/docus/server/collect/job/basic/TBasicHttpCollectJob.java @@ -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 { @Resource(name = "httpTBasicCollectorImpl") private IHttpCollector collector; @@ -34,10 +35,15 @@ public class TBasicHttpCollectJob extends AbstractTBasicCollectJob { @Override - public List getTBasics(Date startDate, Date endDate, long pazeNum, long pageSize) { + protected void batchInsertOrUpdate(List t) { + basicService.batchSaveBasics(t); + } + @SuppressWarnings("unchecked") + @Override + protected List execute(Date startDate, Date endDate, long pageNum, long pageSize) { //需要根据不同医院去解析不同的内容。使用接口实现的方式。 - return collector.get(startDate, endDate, pazeNum, pageSize); + return collector.get(startDate, endDate, pageNum, pageSize); } } diff --git a/common-collect/src/main/java/com/docus/server/collect/job/basic/TBasicViewCollectJob.java b/common-collect/src/main/java/com/docus/server/collect/job/basic/TBasicViewCollectJob.java index 6658106..30648eb 100644 --- a/common-collect/src/main/java/com/docus/server/collect/job/basic/TBasicViewCollectJob.java +++ b/common-collect/src/main/java/com/docus/server/collect/job/basic/TBasicViewCollectJob.java @@ -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,9 +11,9 @@ import java.util.Date; import java.util.List; @Component -public class TBasicViewCollectJob extends AbstractTBasicCollectJob { +public class TBasicViewCollectJob extends AbstractCollectJob { @Resource - private IHisService hisService; + private IHisService hisService; /** * xxl jobhandler 手工执行,全量执行 @@ -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 getTBasics(Date startDate, Date endDate, long pageNum, long pageSize) { + protected void batchInsertOrUpdate(List t) { + basicService.batchSaveBasics(t); + } + @SuppressWarnings("unchecked") + @Override + protected List execute(Date startDate, Date endDate, long pageNum, long pageSize) { //每家医院按照固定的格式写sql,不同医院需要替换不同的sql即可。 return hisService.getTBasicListView(startDate, endDate, pageNum, pageSize); } diff --git a/common-collect/src/main/java/com/docus/server/collect/job/dept/AbstractDeptCollectJob.java b/common-collect/src/main/java/com/docus/server/collect/job/dept/AbstractDeptCollectJob.java deleted file mode 100644 index d7a9ade..0000000 --- a/common-collect/src/main/java/com/docus/server/collect/job/dept/AbstractDeptCollectJob.java +++ /dev/null @@ -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 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 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 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 getDepts(Date startDate, Date endDate, long pageNum, long pageSize); - - -} diff --git a/common-collect/src/main/java/com/docus/server/collect/job/dept/DeptHttpCollectJob.java b/common-collect/src/main/java/com/docus/server/collect/job/dept/DeptHttpCollectJob.java index a73af2e..03c127b 100644 --- a/common-collect/src/main/java/com/docus/server/collect/job/dept/DeptHttpCollectJob.java +++ b/common-collect/src/main/java/com/docus/server/collect/job/dept/DeptHttpCollectJob.java @@ -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 { @Resource(name = "httpDeptCollectorImpl") private IHttpCollector collector; @@ -32,12 +33,14 @@ public class DeptHttpCollectJob extends AbstractDeptCollectJob { super.startCollectIncrement(getJobParam()); } - @Override - public List getDepts(Date startDate, Date endDate, long pazeNum, long pageSize) { - - //需要根据不同医院去解析不同的内容。使用接口实现的方式。 + protected void batchInsertOrUpdate(List t) { + deptService.batchSaveOrUpdatePowerDept(t); + } - return collector.get(startDate, endDate, pazeNum, pageSize); + @SuppressWarnings("unchecked") + @Override + protected List execute(Date startDate, Date endDate, long pageNum, long pageSize) { + return collector.get(startDate, endDate, pageNum, pageSize); } } diff --git a/common-collect/src/main/java/com/docus/server/collect/job/dept/DeptViewCollectJob.java b/common-collect/src/main/java/com/docus/server/collect/job/dept/DeptViewCollectJob.java index 63100f4..f86ae8f 100644 --- a/common-collect/src/main/java/com/docus/server/collect/job/dept/DeptViewCollectJob.java +++ b/common-collect/src/main/java/com/docus/server/collect/job/dept/DeptViewCollectJob.java @@ -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 { @Resource private IHisService hisService; @@ -31,12 +32,15 @@ public class DeptViewCollectJob extends AbstractDeptCollectJob { super.startCollectIncrement(getJobParam()); } - @Override - public List getDepts(Date startDate, Date endDate, long pageNum, long pageSize) { + protected void batchInsertOrUpdate(List t) { + deptService.batchSaveOrUpdatePowerDept(t); + } + @SuppressWarnings("unchecked") + @Override + protected List execute(Date startDate, Date endDate, long pageNum, long pageSize) { //每家医院按照固定的格式写sql,不同医院需要替换不同的sql即可。 return hisService.getDeptListView(startDate, endDate, pageNum, pageSize); } - } diff --git a/common-collect/src/main/java/com/docus/server/collect/job/user/UserHttpCollectJob.java b/common-collect/src/main/java/com/docus/server/collect/job/user/UserHttpCollectJob.java index 4b026b4..52549d5 100644 --- a/common-collect/src/main/java/com/docus/server/collect/job/user/UserHttpCollectJob.java +++ b/common-collect/src/main/java/com/docus/server/collect/job/user/UserHttpCollectJob.java @@ -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 { @Resource(name = "httpUserCollectorImpl") private IHttpCollector collector; @@ -32,10 +32,15 @@ public class UserHttpCollectJob extends AbstractUserCollectJob { super.startCollectIncrement(getJobParam()); } + @Override + protected void batchInsertOrUpdate(List t) { + userService.batchSaveOrUpdatePowerUser(t); + } + @SuppressWarnings("unchecked") @Override - public List getUsers(Date startDate, Date endDate, long pazeNum, long pageSize) { + protected List execute(Date startDate, Date endDate, long pageNum, long pageSize) { //需要根据不同医院去解析不同的内容。使用接口实现的方式。 - return collector.get(startDate, endDate, pazeNum, pageSize); + return collector.get(startDate, endDate, pageNum, pageSize); } } diff --git a/common-collect/src/main/java/com/docus/server/collect/job/user/UserViewCollectJob.java b/common-collect/src/main/java/com/docus/server/collect/job/user/UserViewCollectJob.java index 13a9411..4b6f43f 100644 --- a/common-collect/src/main/java/com/docus/server/collect/job/user/UserViewCollectJob.java +++ b/common-collect/src/main/java/com/docus/server/collect/job/user/UserViewCollectJob.java @@ -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 { @Resource private IHisService hisService; @@ -31,11 +32,14 @@ public class UserViewCollectJob extends AbstractUserCollectJob { super.startCollectIncrement(getJobParam()); } + @Override + protected void batchInsertOrUpdate(List t) { + userService.batchSaveOrUpdatePowerUser(t); + } @Override - public List getUsers(Date startDate, Date endDate, long pageNum, long pageSize) { + protected List execute(Date startDate, Date endDate, long pageNum, long pageSize) { //每家医院按照固定的格式写sql,不同医院需要替换不同的sql即可。 return hisService.getUserListView(startDate, endDate, pageNum, pageSize); } - } diff --git a/docus-sys/src/main/java/com/docus/server/sys/service/impl/PowerUserServiceImpl.java b/docus-sys/src/main/java/com/docus/server/sys/service/impl/PowerUserServiceImpl.java index 476caec..4dc9956 100644 --- a/docus-sys/src/main/java/com/docus/server/sys/service/impl/PowerUserServiceImpl.java +++ b/docus-sys/src/main/java/com/docus/server/sys/service/impl/PowerUserServiceImpl.java @@ -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 userDTOList) { userDTOList.forEach(this::saveOrUpdatePowerUser); } + @Transactional @Override public boolean saveOrUpdatePowerUser(UserDTO userDTO) { PowerUser powerUser = baseMapper.getUserByUserName(userDTO.getUserName());