提交 1d687525 authored 作者: 000516's avatar 000516 提交者: Coding

销售记录上传飞书创建定时任务

销售记录上传飞书创建定时任务
......@@ -178,6 +178,18 @@
</exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/com.xuxueli/xxl-job-core -->
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
......
package com.wangxiaolu.export.config;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* xxl-job config
*
* @author xuxueli 2017-04-28
*/
@Configuration
public class XxlJobConfig {
private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
@Value("${xxl.job.accessToken}")
private String accessToken;
@Value("${xxl.job.executor.appname}")
private String appname;
@Value("${xxl.job.executor.address}")
private String address;
@Value("${xxl.job.executor.ip}")
private String ip;
@Value("${xxl.job.executor.port}")
private int port;
@Value("${xxl.job.executor.logpath}")
private String logPath;
@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
logger.info(">>>>>>>>>>> xxl-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appname);
xxlJobSpringExecutor.setAddress(address);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
/**
* 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP;
*
* 1、引入依赖:
* <dependency>
* <groupId>org.springframework.cloud</groupId>
* <artifactId>spring-cloud-commons</artifactId>
* <version>${version}</version>
* </dependency>
*
* 2、配置文件,或者容器启动变量
* spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
*
* 3、获取IP
* String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
*/
}
\ No newline at end of file
......@@ -38,7 +38,7 @@ public class ActivityToFeishuSheet {
* 飞书电子表格
* @param activityVo 查询活动创建日期范围
*/
@PostMapping("/feishu/sheet")
// @PostMapping("/feishu/sheet")
public void activityList(@RequestBody ActivityVo activityVo) {
/**
......
......@@ -19,6 +19,8 @@ import java.util.List;
@Repository
public interface TemporaryActivityClockMapper extends BaseMapper<TemporaryActivityClockDO> {
List<TemporaryActivityClockDO> findClockPhotoList(@Param("params") ActivityVo activityVo);
List<TemporaryActivityClockDO> findClockPhotoListByCreateDate(String dateStr);
}
......
......@@ -21,6 +21,8 @@ import java.util.Map;
public interface TemporaryActivityReportedMapper extends BaseMapper<TemporaryActivityReportedDO> {
List<TemporaryActivityReportedDO> findList(@Param("params") ActivityVo activityVo);
List<TemporaryActivityReportedDO> findListByCreateDate(String dateStr);
}
......
......@@ -20,10 +20,14 @@ public interface PromotionActivityService {
*/
List<TemporaryActivityReportedDO> findActivityList(ActivityVo activityVo);
List<TemporaryActivityReportedDO> findActivityListByCreateDate(String dateStr);
/**
* 查询打卡记录
*/
List<TemporaryActivityClockDO> findClockPhoto(ActivityVo activityVo);
Map<Long, List<TemporaryActivityPhotoDO>> findActivityPhotos(List<Long> activityId);
List<TemporaryActivityClockDO> findClockPhotoByCreateDate(String dateStr);
}
package com.wangxiaolu.export.service.impl;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.wangxiaolu.export.mapper.FeishuSheetRecordMapper;
......@@ -51,8 +52,8 @@ public class ActivityToFeishuSheetServiceImpl implements ActivityToFeishuSheetSe
@Override
public void activityDataToFeishuSheet(List<TemporaryActivityReportedDO> reportedDos, Map<Long, List<TemporaryActivityPhotoDO>> activityPhotos, Map<String, List<TemporaryActivityPhotoDO>> clockPhotoMap) {
sheetInfoD = null;
// 查询要更新的电子表格、工作表,每天晚上10点开始更新,所以获取当前日期
String month = DateUtil.format(new Date(), "yyyy-MM");
// 查询要更新的电子表格、工作表,每天凌晨开始更新,所以获取前一天日期
String month = DateUtil.format(DateUtil.yesterday(), "yyyy-MM");
FeishuSheetRecordDO sheetInfo = feishuSheetRecordMapper.selectOneByCreateMonth(month);
if (Objects.isNull(sheetInfo)) {
log.error("电子文档token信息获取失败,取消上传");
......
......@@ -41,6 +41,12 @@ public class PromotionActivityServiceImpl implements PromotionActivityService {
return dos;
}
@Override
public List<TemporaryActivityReportedDO> findActivityListByCreateDate(String dateStr) {
List<TemporaryActivityReportedDO> dos = temporaryActivityReportedMapper.findListByCreateDate(dateStr);
return dos;
}
/**
* 查询打卡记录
*/
......@@ -60,4 +66,10 @@ public class PromotionActivityServiceImpl implements PromotionActivityService {
return activityPhotoMap;
}
@Override
public List<TemporaryActivityClockDO> findClockPhotoByCreateDate(String dateStr) {
List<TemporaryActivityClockDO> clockPhotoList = temporaryActivityClockMapper.findClockPhotoListByCreateDate(dateStr);
return clockPhotoList;
}
}
package com.wangxiaolu.export.xxljobtask;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import com.wangxiaolu.export.mapper.entity.TemporaryActivityClockDO;
import com.wangxiaolu.export.mapper.entity.TemporaryActivityPhotoDO;
import com.wangxiaolu.export.mapper.entity.TemporaryActivityReportedDO;
import com.wangxiaolu.export.pojo.ActivityVo;
import com.wangxiaolu.export.service.ActivityToFeishuSheetService;
import com.wangxiaolu.export.service.PromotionActivityService;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
*
* 开发步骤:
* 1、任务开发:在Spring Bean实例中,开发Job方法;
* 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。
* 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志;
* 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果;
*
* @author xuxueli 2019-12-11 21:52:51
*/
@Component
@Slf4j
public class XxlJobHandler {
@Autowired
PromotionActivityService promotionActivityService;
@Autowired
ActivityToFeishuSheetService activityToFeishuSheetService;
/**
* 昨日活动数据上传飞书
*/
@XxlJob("yesterday_activity_push_feishu")
public void pushFeishuTask() {
/**
* 1>> 查询前一天的活动记录
*/
String yt = DateUtil.format(DateUtil.yesterday(), DatePattern.NORM_DATE_PATTERN);
List<TemporaryActivityReportedDO> reportedDos = promotionActivityService.findActivityListByCreateDate(yt);
List<Long> activityId = reportedDos.stream().map(TemporaryActivityReportedDO::getId).collect(Collectors.toList());
Map<Long, List<TemporaryActivityPhotoDO>> activityPhotos = promotionActivityService.findActivityPhotos(activityId);
/**
* 2>> 查询打卡记录
*/
List<TemporaryActivityClockDO> clockPhoto = promotionActivityService.findClockPhotoByCreateDate(yt);
Map<String, List<TemporaryActivityPhotoDO>> clockPhotoMap = new HashMap<>();
clockPhoto.stream().forEach(cp -> {
clockPhotoMap.put(cp.getTemporaryId() + "-" + cp.getCreateDate(), cp.getPhotoList());
});
log.info("============== 活动记录上传飞书 start(" + System.currentTimeMillis() + ") ==============");
activityToFeishuSheetService.activityDataToFeishuSheet(reportedDos,activityPhotos,clockPhotoMap);
log.info("============== 活动记录上传飞书 end(" + System.currentTimeMillis() + ") ==============");
}
}
......@@ -45,4 +45,18 @@ feishu:
app_secret: qzezaWe7Kxd61quiU9zRIf7COb4piEkF
activity_robot_2:
app_id: cli_a6220d5dcadf900b
app_secret: WeVaZ6yGXFEON6Lkl53rFdhHc8beQF1Y
\ No newline at end of file
app_secret: WeVaZ6yGXFEON6Lkl53rFdhHc8beQF1Y
# xxl-job配置
xxl:
job:
accessToken: default_token
admin:
addresses: http://42.193.103.153:9001/xxl-job-admin
executor:
appname: promotion-dev
port: 9989
logretentiondays: 30
address:
ip:
logpath: /var/logs/xxl_job # 执行器日志路径
\ No newline at end of file
......@@ -26,4 +26,17 @@
and ap.is_delete = 1;
</select>
<select id="findClockPhotoListByCreateDate" resultMap="clockMap">
select ar.temporary_id temporary_id,
ar.create_date create_date,
ap.type type,
ap.photo_url photo_url
from temporary_activity_reported ar
inner join temporary_activity_clock ac
on ar.temporary_id = ac.temporary_id and ar.create_date = ac.create_date
inner join temporary_activity_photo ap on ac.id = ap.clock_id
where ar.create_date = #{dateStr} and ap.is_delete = 1;
</select>
</mapper>
......@@ -38,4 +38,24 @@
where (ar.create_time between #{params.createDateStart} and #{params.createDateEnd})
and (qd.org_name like '%战区' or qd.org_name = '重客运营部');
</select>
<select id="findListByCreateDate" resultMap="BaseResultMap">
select ar.id,
ar.temporary_id,
ar.approver_id,
ar.approve_name,
ar.city,
ar.create_date,
ar.store_id,
ar.store_name,
ar.activity_pattern,
ar.approve_status,
ps.line_name,
qd.org_name
from temporary_activity_reported ar
left join promotion_store ps on ar.store_id = ps.id
left join qince_employee qe on ar.approver_id = qe.qc_id
left join qince_department qd on qe.waiqin365_org_id = qd.qc_id
where ar.create_date = #{dateStr} and (qd.org_name like '%战区' or qd.org_name = '重客运营部')
</select>
</mapper>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论