diff --git a/ad-platform-pojo/src/main/java/com/baiye/model/entity/BaseTimeTask.java b/ad-platform-pojo/src/main/java/com/baiye/model/entity/BaseTimeTask.java new file mode 100644 index 00000000..f6dabbc0 --- /dev/null +++ b/ad-platform-pojo/src/main/java/com/baiye/model/entity/BaseTimeTask.java @@ -0,0 +1,37 @@ +package com.baiye.model.entity; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.Column; +import javax.persistence.EntityListeners; +import javax.persistence.MappedSuperclass; +import java.util.Date; + +/** + * @author wujingtao + * @date 2022/01/04 + */ +@Getter +@Setter +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +public class BaseTimeTask { + + + @Column(name = "execute_time") + private Date executeTime; + + @Column(name = "is_repeat") + private Integer isRepeat; + + @Column(name = "status") + private Integer status; + + @Column(name = "message") + private String message; + + @Column(name = "user_id") + private Long userId; +} diff --git a/logs/2021-12/debug.2021-12-03.0.log.gz b/logs/2021-12/debug.2021-12-03.0.log.gz new file mode 100644 index 00000000..1ce591f5 Binary files /dev/null and b/logs/2021-12/debug.2021-12-03.0.log.gz differ diff --git a/logs/2021-12/debug.2021-12-10.0.log.gz b/logs/2021-12/debug.2021-12-10.0.log.gz new file mode 100644 index 00000000..5a6305c5 Binary files /dev/null and b/logs/2021-12/debug.2021-12-10.0.log.gz differ diff --git a/logs/ad-platform-gateway/2021-12/debug.2021-12-23.0.log.gz b/logs/ad-platform-gateway/2021-12/debug.2021-12-23.0.log.gz new file mode 100644 index 00000000..0cfcdeac Binary files /dev/null and b/logs/ad-platform-gateway/2021-12/debug.2021-12-23.0.log.gz differ diff --git a/logs/ad-platform-gateway/2021-12/debug.2021-12-24.0.log.gz b/logs/ad-platform-gateway/2021-12/debug.2021-12-24.0.log.gz new file mode 100644 index 00000000..9ce86106 Binary files /dev/null and b/logs/ad-platform-gateway/2021-12/debug.2021-12-24.0.log.gz differ diff --git a/logs/ad-platform-task/2021-12/debug.2021-12-15.0.log.gz b/logs/ad-platform-task/2021-12/debug.2021-12-15.0.log.gz new file mode 100644 index 00000000..a55078b2 Binary files /dev/null and b/logs/ad-platform-task/2021-12/debug.2021-12-15.0.log.gz differ diff --git a/logs/ad-platform-task/2021-12/debug.2021-12-17.0.log.gz b/logs/ad-platform-task/2021-12/debug.2021-12-17.0.log.gz new file mode 100644 index 00000000..cfdd0b07 Binary files /dev/null and b/logs/ad-platform-task/2021-12/debug.2021-12-17.0.log.gz differ diff --git a/logs/ad-platform-task/2021-12/debug.2021-12-20.0.log.gz b/logs/ad-platform-task/2021-12/debug.2021-12-20.0.log.gz new file mode 100644 index 00000000..6af935ee Binary files /dev/null and b/logs/ad-platform-task/2021-12/debug.2021-12-20.0.log.gz differ diff --git a/logs/ad-platform-task/2021-12/debug.2021-12-23.0.log.gz b/logs/ad-platform-task/2021-12/debug.2021-12-23.0.log.gz new file mode 100644 index 00000000..cf86cd21 Binary files /dev/null and b/logs/ad-platform-task/2021-12/debug.2021-12-23.0.log.gz differ diff --git a/logs/ad-platform-task/2021-12/debug.2021-12-24.0.log.gz b/logs/ad-platform-task/2021-12/debug.2021-12-24.0.log.gz new file mode 100644 index 00000000..7bd4c4a0 Binary files /dev/null and b/logs/ad-platform-task/2021-12/debug.2021-12-24.0.log.gz differ diff --git a/manage/ad-platform-management/src/main/resources/config/application-dev.yml b/manage/ad-platform-management/src/main/resources/config/application-dev.yml index f69cce05..42e7c9f8 100644 --- a/manage/ad-platform-management/src/main/resources/config/application-dev.yml +++ b/manage/ad-platform-management/src/main/resources/config/application-dev.yml @@ -15,6 +15,9 @@ spring: url: jdbc:mysql://118.178.137.129:3306/ad-platform?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&rewriteBatchedStatements=true&zeroDateTimeBehavior=convertToNull username: root password: root + # url: jdbc:mysql://localhost:3306/ad-platform?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull + # username: root + # password: 12345678 # 初始连接数 initial-size: 5 # 最小连接数 @@ -124,3 +127,6 @@ file: # 文件大小 /M maxSize: 100 avatarMaxSize: 5 + +jpa: + show-sql: true diff --git a/manage/ad-platform-task/src/main/java/com/baiye/AdPlatformTaskApplication.java b/manage/ad-platform-task/src/main/java/com/baiye/AdPlatformTaskApplication.java index 80c0528d..59f137d2 100644 --- a/manage/ad-platform-task/src/main/java/com/baiye/AdPlatformTaskApplication.java +++ b/manage/ad-platform-task/src/main/java/com/baiye/AdPlatformTaskApplication.java @@ -6,6 +6,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.data.jpa.repository.config.EnableJpaAuditing; +import org.springframework.scheduling.annotation.EnableAsync; /** * 广告平台任务应用程序 @@ -18,6 +19,7 @@ import org.springframework.data.jpa.repository.config.EnableJpaAuditing; @EnableFeignClients @EnableDiscoveryClient @SpringBootApplication +@EnableAsync public class AdPlatformTaskApplication { public static void main(String[] args) { diff --git a/manage/ad-platform-task/src/main/java/com/baiye/config/ThreadPoolConfig.java b/manage/ad-platform-task/src/main/java/com/baiye/config/ThreadPoolConfig.java new file mode 100644 index 00000000..f1d62d4b --- /dev/null +++ b/manage/ad-platform-task/src/main/java/com/baiye/config/ThreadPoolConfig.java @@ -0,0 +1,23 @@ +package com.baiye.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; + +import java.util.concurrent.*; + +/** + * @author wujingtao + * @date 2022/01/04 + */ +@Configuration +@EnableAsync +public class ThreadPoolConfig { + + @Bean(value = "taskExecutor") + public Executor taskExecutor() { + return new ThreadPoolExecutor( + 2, 16, 3, TimeUnit.SECONDS, new LinkedBlockingDeque<>(3), + Executors.defaultThreadFactory(), new ThreadPoolExecutor.DiscardOldestPolicy()); + } +} diff --git a/manage/ad-platform-task/src/main/java/com/baiye/job/AutomaticReminderJob.java b/manage/ad-platform-task/src/main/java/com/baiye/job/AutomaticReminderJob.java new file mode 100644 index 00000000..9a0eab02 --- /dev/null +++ b/manage/ad-platform-task/src/main/java/com/baiye/job/AutomaticReminderJob.java @@ -0,0 +1,34 @@ +package com.baiye.job; + +import com.baiye.modules.elsaticjob.entity.jobInstance.ElasticSimpleJob; +import com.baiye.modules.elsaticjob.service.impl.AutoReminderServiceImpl; +import com.dangdang.ddframe.job.api.ShardingContext; +import com.dangdang.ddframe.job.api.simple.SimpleJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; + +/** + * @author wujingtao + * @date 2022/01/05 + */ +@Slf4j +@Component +@ElasticSimpleJob(jobName = "AutomaticReminderJob", cron = "0 0 0/1 * * ?") +public class AutomaticReminderJob implements SimpleJob { + @Resource + private AutoReminderServiceImpl timeTaskServiceImpl; + private static AutomaticReminderJob automaticReminderJob; + + @PostConstruct + public void init() { + automaticReminderJob = this; + } + + @Override + public void execute(ShardingContext shardingContext) { + automaticReminderJob.timeTaskServiceImpl.runAutomaticReminder(); + } +} diff --git a/manage/ad-platform-task/src/main/java/com/baiye/modules/elsaticjob/api/AutoReminderController.java b/manage/ad-platform-task/src/main/java/com/baiye/modules/elsaticjob/api/AutoReminderController.java new file mode 100644 index 00000000..c79a9899 --- /dev/null +++ b/manage/ad-platform-task/src/main/java/com/baiye/modules/elsaticjob/api/AutoReminderController.java @@ -0,0 +1,36 @@ +package com.baiye.modules.elsaticjob.api; + +import com.baiye.http.CommonResponse; +import com.baiye.modules.elsaticjob.entity.AutoReminder; +import com.baiye.modules.elsaticjob.service.AutoReminderService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * @author wujingtao + * @date 2022/01/05 + */ +@Slf4j +@RestController +@RequestMapping("/api/time") +@Api(tags = "操作定时任务的条件") +public class AutoReminderController { + @Resource + private AutoReminderService timeTaskService; + + /** + * 注册新任务 + * + * @param timeTask + */ + @PostMapping("/add") + @ApiOperation("新增定时任务") + public CommonResponse addTimeTask(@RequestBody AutoReminder timeTask) { + + return timeTaskService.addTimeTask(timeTask); + } +} diff --git a/manage/ad-platform-task/src/main/java/com/baiye/modules/elsaticjob/dao/AutoReminderRepository.java b/manage/ad-platform-task/src/main/java/com/baiye/modules/elsaticjob/dao/AutoReminderRepository.java new file mode 100644 index 00000000..b5a8ada4 --- /dev/null +++ b/manage/ad-platform-task/src/main/java/com/baiye/modules/elsaticjob/dao/AutoReminderRepository.java @@ -0,0 +1,35 @@ +package com.baiye.modules.elsaticjob.dao; + +import com.baiye.modules.elsaticjob.entity.AutoReminder; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @author wujingtao + * @date 2022/01/05 + */ +@Repository +public interface AutoReminderRepository extends JpaRepository, JpaSpecificationExecutor { + /** + * 查询所有未执行的任务 + * + * @param status + * @return + */ + List findAllByStatus(Integer status); + + /** + * 修改只提醒一次的任务状态 + * + * @param status + * @param id + */ + @Modifying + @Query(value = "update AutoReminder set status =?1 where id =?2") + void updateTimeTaskStatus(Integer status, Long id); +} diff --git a/manage/ad-platform-task/src/main/java/com/baiye/modules/elsaticjob/entity/AutoReminder.java b/manage/ad-platform-task/src/main/java/com/baiye/modules/elsaticjob/entity/AutoReminder.java new file mode 100644 index 00000000..800bd59b --- /dev/null +++ b/manage/ad-platform-task/src/main/java/com/baiye/modules/elsaticjob/entity/AutoReminder.java @@ -0,0 +1,36 @@ +package com.baiye.modules.elsaticjob.entity; + +import cn.hutool.core.date.DatePattern; +import com.baiye.model.entity.BaseTimeTask; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +/** + * @author wujingtao + * @date 2022/01/05 + */ +@Getter +@Setter +@Entity +@Table(name = "tb_auto_reminder") +@EntityListeners(AuditingEntityListener.class) +public class AutoReminder extends BaseTimeTask implements Serializable { + + private static final long serialVersionUID = 1343708488273542805L; + @Id + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @LastModifiedDate + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DatePattern.NORM_DATETIME_PATTERN, timezone = "GMT+8") + @Column(name = "create_time") + private Date createTime; +} diff --git a/manage/ad-platform-task/src/main/java/com/baiye/modules/elsaticjob/service/AutoReminderService.java b/manage/ad-platform-task/src/main/java/com/baiye/modules/elsaticjob/service/AutoReminderService.java new file mode 100644 index 00000000..ddde98a7 --- /dev/null +++ b/manage/ad-platform-task/src/main/java/com/baiye/modules/elsaticjob/service/AutoReminderService.java @@ -0,0 +1,18 @@ +package com.baiye.modules.elsaticjob.service; + +import com.baiye.http.CommonResponse; +import com.baiye.modules.elsaticjob.entity.AutoReminder; + +/** + * @author wujingtao + * @date 2022/01/05 + */ +public interface AutoReminderService { + /** + * 新增定时任务 + * + * @param timeTask + * @return + */ + CommonResponse addTimeTask(AutoReminder timeTask); +} diff --git a/manage/ad-platform-task/src/main/java/com/baiye/modules/elsaticjob/service/impl/AutoReminderServiceImpl.java b/manage/ad-platform-task/src/main/java/com/baiye/modules/elsaticjob/service/impl/AutoReminderServiceImpl.java new file mode 100644 index 00000000..ffa31cb3 --- /dev/null +++ b/manage/ad-platform-task/src/main/java/com/baiye/modules/elsaticjob/service/impl/AutoReminderServiceImpl.java @@ -0,0 +1,68 @@ +package com.baiye.modules.elsaticjob.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUnit; +import cn.hutool.core.date.DateUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.baiye.constant.DefaultNumberConstants; +import com.baiye.http.CommonResponse; +import com.baiye.modules.elsaticjob.dao.AutoReminderRepository; +import com.baiye.modules.elsaticjob.entity.AutoReminder; +import com.baiye.modules.elsaticjob.service.AutoReminderService; +import com.baiye.socket.WebSocketServer; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author wujingtao + * @date 2022/01/05 + */ +@Slf4j +@Service +public class AutoReminderServiceImpl implements AutoReminderService { + @Resource + private AutoReminderRepository timeTaskRepository; + @Resource + private WebSocketServer webSocketServer; + + @Override + public CommonResponse addTimeTask(AutoReminder timeTask) { + if (timeTaskRepository.save(timeTask).getId() == null) { + return CommonResponse.createByErrorMessage("保存定时任务失败"); + } + return CommonResponse.createBySuccess(); + } + + /** + * 执行自体醒任务 + */ + @Transactional(rollbackFor = Exception.class) + public void runAutomaticReminder() { + List allByStatus = timeTaskRepository.findAllByStatus(DefaultNumberConstants.ZERO_NUMBER); + if (CollUtil.isEmpty(allByStatus)) { + return; + } + JSONObject object = new JSONObject(); + object.putOpt("type", ""); + object.putOpt("code", DefaultNumberConstants.TWO_HUNDRED); + for (AutoReminder info : allByStatus) { + if (DateUtil.between(info.getExecuteTime(), DateUtil.date(), DateUnit.HOUR) == 0) { + object.putOpt("message", info.getUserId()); + try { + webSocketServer.sendMessage(JSONUtil.toJsonStr(object), String.valueOf(info.getUserId())); + } catch (Exception e) { + log.info("执行自提醒任务 id:{} 发送websocket失败 {}", info.getId(), e.getMessage()); + continue; + } + if (info.getIsRepeat() == DefaultNumberConstants.ZERO_NUMBER) { + timeTaskRepository.updateTimeTaskStatus(DefaultNumberConstants.ONE_NUMBER, info.getId()); + } + } + } + } +} diff --git a/manage/ad-platform-task/src/main/java/com/baiye/socket/WebSocketServer.java b/manage/ad-platform-task/src/main/java/com/baiye/socket/WebSocketServer.java index 5c3c249d..42fa9402 100644 --- a/manage/ad-platform-task/src/main/java/com/baiye/socket/WebSocketServer.java +++ b/manage/ad-platform-task/src/main/java/com/baiye/socket/WebSocketServer.java @@ -138,7 +138,8 @@ public class WebSocketServer { * @param sessionId * @throws IOException */ - public static void sendMessage(String message, String sessionId) throws IOException { + public void sendMessage(String message, String sessionId) throws IOException { + log.info("发送web信息 {}", message); Session session = null; if (SESSIONS.get(sessionId) != null) { session = SESSIONS.get(sessionId); @@ -152,8 +153,6 @@ public class WebSocketServer { public void sendMessage(ReportMessageInfoVO reportMessageInfoVO) throws IOException { - - log.info("发给webSocket信息 {}", reportMessageInfoVO); Session session = null; for (String key : SESSIONS.keySet()) { if (key.equals(String.valueOf(reportMessageInfoVO.getUserId()))) { diff --git a/pom.xml b/pom.xml index 8fa49e1a..791abd2d 100644 --- a/pom.xml +++ b/pom.xml @@ -174,6 +174,8 @@ provided + + @@ -190,6 +192,7 @@ guava ${guava.version} + ${project.name} diff --git a/services/ad-platform-service/src/test/java/com/baiye/SettingTest.java b/services/ad-platform-service/src/test/java/com/baiye/SettingTest.java index 911305d1..46cdd76b 100644 --- a/services/ad-platform-service/src/test/java/com/baiye/SettingTest.java +++ b/services/ad-platform-service/src/test/java/com/baiye/SettingTest.java @@ -32,12 +32,12 @@ public class SettingTest { @Test public void getSetting() { DistributeDTO distributeDTO = new DistributeDTO(); - List strings = Lists.newArrayList(1L,2L,3L,4L,5L,6L,7L,8L,9L,10L); - List longs = Lists.newArrayList(12360L, 12361L,12362L,12363L,12365L); - List doubleList = Lists.newArrayList(16.66, 16.66,16.66,16.66,16.66,16.7); - distributeDTO.setResourceList(strings); - distributeDTO.setIsWeight(Boolean.TRUE); + List strings = Lists.newArrayList("a", "b", "c", "d", "e", "f", "g", "h", "i", "j"); + + List longs = Lists.newArrayList(12360L, 12361L, 12362L, 12363L, 12364L, 12365L); + List doubleList = Lists.newArrayList(16.66, 16.66, 16.66, 16.66, 16.66, 16.7); +// distributeDTO.setResourceList(strings); distributeDTO.setWeights(doubleList); distributeDTO.setDeptIds(longs); log.info(JSONUtil.toJsonStr(assignDataService.assignData(distributeDTO))); @@ -46,7 +46,6 @@ public class SettingTest { } - public static List> fixedGrouping2(List source, int n) { if (null == source || source.size() == 0 || n <= 0) @@ -173,9 +172,9 @@ public class SettingTest { } @Test - public void sortMap(){ + public void sortMap() { List doubles = Lists.newArrayList(123.00, 122.00); - List longs = Lists.newArrayList(12362L,12361L); + List longs = Lists.newArrayList(12362L, 12361L); Map collect = longs.stream().collect(Collectors.toMap(key -> key, key -> doubles.get(longs.indexOf(key)))); TreeMap sort = MapUtil.sort(collect);