Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
yangxiujun
/
paidan_demo
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 64cdd632
authored
Nov 07, 2023
by
Ren Ping
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat:改造初始化容量自动任务为分布式
1 parent
f6609703
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
1 additions
and
189 deletions
project-order/pom.xml
project-order/src/main/java/com/dituhui/pea/order/quartz/InitEngineerCapacityJob.java
project-order/src/main/java/com/dituhui/pea/order/quartz/InitEngineerCapacityListener.java
project-order/src/main/java/com/dituhui/pea/order/quartz/MyQuartzJobFactory.java
project-order/src/main/java/com/dituhui/pea/order/quartz/QuartzConfig.java
project-order/src/main/java/com/dituhui/pea/order/scheduler/InitEngineerCapacityScheduler.java
project-order/pom.xml
View file @
64cdd63
...
...
@@ -142,12 +142,6 @@
<version>
3.17
</version>
</dependency>
<!-- quartz依赖 -->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-quartz
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-test
</artifactId>
...
...
project-order/src/main/java/com/dituhui/pea/order/quartz/InitEngineerCapacityJob.java
deleted
100644 → 0
View file @
f660970
package
com
.
dituhui
.
pea
.
order
.
quartz
;
import
com.dituhui.pea.order.common.DateUtils
;
import
com.dituhui.pea.order.scheduler.InitEngineerCapacityScheduler
;
import
lombok.extern.slf4j.Slf4j
;
import
org.quartz.JobExecutionContext
;
import
org.quartz.JobExecutionException
;
import
org.quartz.JobKey
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.scheduling.quartz.QuartzJobBean
;
import
org.springframework.stereotype.Component
;
import
java.time.LocalDate
;
/**
* 自动派工任务
*
* @author RenPing
* @date 2023/11/02
*/
@Component
@Slf4j
public
class
InitEngineerCapacityJob
extends
QuartzJobBean
{
public
static
final
String
INIT_ENGINEER_JOB_PREFIX
=
"BOXI_INIT_ENGINEER_CAPACITY_"
;
@Value
(
"${scheduler.init-engineer-capacity.day-offset-begin}"
)
private
int
dayOffsetBegin
;
@Value
(
"${scheduler.init-engineer-capacity.day-offset-end}"
)
private
int
dayOffsetEnd
;
@Autowired
private
InitEngineerCapacityScheduler
initEngineerCapacityScheduler
;
@Override
protected
void
executeInternal
(
JobExecutionContext
jobExecutionContext
)
throws
JobExecutionException
{
try
{
JobKey
jobKey
=
jobExecutionContext
.
getJobDetail
().
getKey
();
String
name
=
jobKey
.
getName
();
String
engineerCode
=
name
.
substring
(
INIT_ENGINEER_JOB_PREFIX
.
length
());
long
start
=
System
.
currentTimeMillis
();
log
.
info
(
">>> 初始化开始,工程师(engineerCode:{})的容量将根据日历表的记录进行计算设置"
,
engineerCode
);
String
bdate
=
DateUtils
.
formatDate
(
LocalDate
.
now
().
plusDays
(
dayOffsetBegin
));
String
edate
=
DateUtils
.
formatDate
(
LocalDate
.
now
().
plusDays
(
dayOffsetEnd
));
initEngineerCapacityScheduler
.
initOneEngineerByDays
(
bdate
,
edate
,
engineerCode
);
long
end
=
System
.
currentTimeMillis
();
log
.
info
(
">>> 初始化结束,工程师(engineerCode:{})的容量,耗时:{}"
,
engineerCode
,
end
-
start
);
}
catch
(
Exception
e
)
{
log
.
error
(
e
.
getMessage
(),
e
);
}
}
}
\ No newline at end of file
project-order/src/main/java/com/dituhui/pea/order/quartz/InitEngineerCapacityListener.java
deleted
100644 → 0
View file @
f660970
package
com
.
dituhui
.
pea
.
order
.
quartz
;
import
cn.hutool.core.collection.CollectionUtil
;
import
com.dituhui.pea.order.dao.EngineerInfoDao
;
import
com.dituhui.pea.order.entity.EngineerInfoEntity
;
import
lombok.extern.slf4j.Slf4j
;
import
org.quartz.*
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.boot.context.event.ApplicationStartedEvent
;
import
org.springframework.context.ApplicationListener
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.Resource
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* 手动触发定时任务
*
* @author RenPing
* @date 2023/11/01
*/
@Component
@Slf4j
public
class
InitEngineerCapacityListener
implements
ApplicationListener
<
ApplicationStartedEvent
>
{
@Resource
private
Scheduler
scheduler
;
@Autowired
private
EngineerInfoDao
engineerInfoDao
;
@Value
(
"${scheduler.init-engineer-capacity.cron-expr}"
)
private
String
cronExpr
;
@Override
public
void
onApplicationEvent
(
ApplicationStartedEvent
applicationStartedEvent
)
{
List
<
String
>
allEngineerCodes
=
engineerInfoDao
.
findAll
().
stream
().
map
(
EngineerInfoEntity:
:
getEngineerCode
).
collect
(
Collectors
.
toList
());
allEngineerCodes
.
forEach
(
engineerCode
->
{
String
jobName
=
InitEngineerCapacityJob
.
INIT_ENGINEER_JOB_PREFIX
+
engineerCode
;
JobDetail
jobDetail
=
JobBuilder
.
newJob
(
InitEngineerCapacityJob
.
class
)
.
withIdentity
(
jobName
,
jobName
)
.
storeDurably
()
.
build
();
Trigger
trigger
=
TriggerBuilder
.
newTrigger
()
.
forJob
(
jobDetail
)
.
withIdentity
(
jobName
,
jobName
)
.
startNow
()
.
withSchedule
(
CronScheduleBuilder
.
cronSchedule
(
cronExpr
))
.
build
();
try
{
scheduler
.
scheduleJob
(
jobDetail
,
CollectionUtil
.
newHashSet
(
trigger
),
true
);
}
catch
(
SchedulerException
e
)
{
//log.error(e.getMessage(), e);
}
});
}
}
\ No newline at end of file
project-order/src/main/java/com/dituhui/pea/order/quartz/MyQuartzJobFactory.java
deleted
100644 → 0
View file @
f660970
package
com
.
dituhui
.
pea
.
order
.
quartz
;
import
org.quartz.Job
;
import
org.quartz.spi.TriggerFiredBundle
;
import
org.springframework.beans.BeansException
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.ApplicationContextAware
;
import
org.springframework.scheduling.quartz.AdaptableJobFactory
;
import
org.springframework.stereotype.Component
;
/**
* 自定义JobFactory,从Spring容器中拿单例Job
*
* @author RenPing
* @date 2023/11/02
*/
@Component
public
class
MyQuartzJobFactory
extends
AdaptableJobFactory
implements
ApplicationContextAware
{
private
ApplicationContext
applicationContext
;
@Override
public
void
setApplicationContext
(
ApplicationContext
applicationContext
)
throws
BeansException
{
this
.
applicationContext
=
applicationContext
;
}
@Override
protected
Object
createJobInstance
(
TriggerFiredBundle
bundle
)
throws
Exception
{
Job
job
=
applicationContext
.
getBean
(
bundle
.
getJobDetail
().
getJobClass
());
return
job
;
}
}
project-order/src/main/java/com/dituhui/pea/order/quartz/QuartzConfig.java
deleted
100644 → 0
View file @
f660970
package
com
.
dituhui
.
pea
.
order
.
quartz
;
import
org.quartz.spi.JobFactory
;
import
org.springframework.boot.autoconfigure.quartz.QuartzProperties
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.scheduling.quartz.SchedulerFactoryBean
;
import
javax.annotation.Resource
;
import
javax.sql.DataSource
;
import
java.io.IOException
;
import
java.util.Properties
;
@Configuration
public
class
QuartzConfig
{
@Resource
private
JobFactory
jobFactory
;
@Resource
private
QuartzProperties
quartzProperties
;
@Bean
public
SchedulerFactoryBean
schedulerFactoryBean
(
DataSource
dataSource
)
throws
IOException
{
SchedulerFactoryBean
factory
=
new
SchedulerFactoryBean
();
factory
.
setDataSource
(
dataSource
);
Properties
properties
=
new
Properties
();
for
(
String
key
:
quartzProperties
.
getProperties
().
keySet
())
{
properties
.
put
(
key
,
quartzProperties
.
getProperties
().
get
(
key
));
}
factory
.
setQuartzProperties
(
properties
);
factory
.
setJobFactory
(
jobFactory
);
return
factory
;
}
}
project-order/src/main/java/com/dituhui/pea/order/scheduler/InitEngineerCapacityScheduler.java
View file @
64cdd63
...
...
@@ -251,7 +251,7 @@ public class InitEngineerCapacityScheduler {
}
}
//
@Scheduled(cron = "${scheduler.init-engineer-capacity.cron-expr}")
@Scheduled
(
cron
=
"${scheduler.init-engineer-capacity.cron-expr}"
)
public
void
run
()
{
log
.
info
(
"开始初始化,所有工程师的容量将根据日历表的记录进行计算设置"
);
String
bdate
=
DateUtils
.
formatDate
(
LocalDate
.
now
().
plusDays
(
dayOffsetBegin
));
...
...
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment