TASK:mixi;

This commit is contained in:
shahaibo
2024-05-07 15:38:17 +08:00
parent 14f5642168
commit 37b4cf4018

View File

@@ -26,6 +26,7 @@ import java.nio.file.Paths;
import java.sql.*;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
import java.util.Date;
import java.util.stream.Collectors;
@@ -54,11 +55,11 @@ public class MiTuExportScheduledTask {
private MiTuProductSellNumMapper miTuProductSellNumMapper;
@PostConstruct
public void executeWeeklyHeavyStockReport() {
// customerPurchaseReport();
// NewJoinVIPReport();
// weeklySellThrReport();
// WeeklyHeavyStockReport();
// QuarterlyProductGroupingReport();
customerPurchaseReport();
NewJoinVIPReport();
weeklySellThrReport();
WeeklyHeavyStockReport();
QuarterlyProductGroupingReport();
// customerTypeAnalysis();
// getBestSell();
}
@@ -315,7 +316,7 @@ public class MiTuExportScheduledTask {
* Customer purchase report
*/
@Retryable(value = Exception.class, maxAttempts = 3, backoff = @Backoff(delay = 1000))
// @Scheduled(cron = "0 0 22 L * ?")
@Scheduled(cron = "0 0 23 L * ?")
public void customerPurchaseReport() {
MiTuExport miTuExport = createMiTuExport("Customer purchase report", "month");
try {
@@ -347,22 +348,30 @@ public class MiTuExportScheduledTask {
case "week":
startTime = currentDateTime.with(DayOfWeek.MONDAY).with(LocalTime.MIN);
endTime = currentDateTime.with(DayOfWeek.SUNDAY).with(LocalTime.MAX);
exportName = fileName + "_week_" + currentDateTime.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
exportName = fileName + " week " + currentDateTime.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
break;
case "month":
startTime = currentDateTime.withDayOfMonth(1).with(LocalTime.MIN);
endTime = currentDateTime.withDayOfMonth(currentDateTime.toLocalDate().lengthOfMonth()).with(LocalTime.MAX);
exportName = fileName + "_month_" + currentDateTime.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
exportName = fileName + " month " + currentDateTime.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
break;
case "year":
startTime = currentDateTime.withDayOfYear(1).with(LocalTime.MIN);
endTime = currentDateTime.withDayOfYear(currentDateTime.toLocalDate().lengthOfYear()).with(LocalTime.MAX);
exportName = fileName + "_year_" + currentDateTime.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
exportName = fileName + " year " + currentDateTime.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
break;
case "quarter":
startTime = currentDateTime.withDayOfYear(1).with(LocalTime.MIN);
endTime = currentDateTime.withDayOfYear(currentDateTime.toLocalDate().lengthOfYear()).with(LocalTime.MAX);
exportName = fileName + "_quarter_" + currentDateTime.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
// 获取当前季度的第一个月和最后一个月
int currentQuarter = (currentDateTime.getMonthValue() - 1) / 3 + 1;
int firstMonthOfQuarter = (currentQuarter - 1) * 3 + 1;
int lastMonthOfQuarter = currentQuarter * 3;
// 获取当前季度的起始时间和结束时间
startTime = currentDateTime.withMonth(firstMonthOfQuarter).withDayOfMonth(1).with(LocalTime.MIN);
endTime = currentDateTime.withMonth(lastMonthOfQuarter).with(TemporalAdjusters.lastDayOfMonth()).with(LocalTime.MAX);
// 设置导出名称
exportName = fileName + " quarter " + currentDateTime.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
break;
default:
throw new IllegalArgumentException("Invalid period argument: " + period);
@@ -408,7 +417,7 @@ public class MiTuExportScheduledTask {
* New Join VIP report
*/
@Retryable(value = Exception.class, maxAttempts = 3, backoff = @Backoff(delay = 1000))
// @Scheduled(cron = "0 0 22 L * ?")
@Scheduled(cron = "0 0 23 ? * SUN")
public void NewJoinVIPReport() {
MiTuExport miTuExport = createMiTuExport("New join vip report", "week");
try {
@@ -484,7 +493,7 @@ public class MiTuExportScheduledTask {
* Weekly Sell Through Report
*/
@Retryable(value = Exception.class, maxAttempts = 3, backoff = @Backoff(delay = 1000))
// @Scheduled(cron = "0 0 22 L * ?")
@Scheduled(cron = "0 0 23 ? * SUN")
public void weeklySellThrReport() {
MiTuExport miTuExport = createMiTuExport("Weekly sell thr report", "week");
try {
@@ -585,7 +594,7 @@ public class MiTuExportScheduledTask {
* WeeklyHeavyStockReport
*/
@Retryable(value = Exception.class, maxAttempts = 3, backoff = @Backoff(delay = 1000))
// @Scheduled(cron = "0 0 22 L * ?")
@Scheduled(cron = "0 0 23 ? * SUN")
public void WeeklyHeavyStockReport() {
MiTuExport miTuExport = createMiTuExport("Weekly heavy stock report", "week");
try {
@@ -677,7 +686,7 @@ public class MiTuExportScheduledTask {
* Quarterly Product Grouping Report
*/
@Retryable(value = Exception.class, maxAttempts = 3, backoff = @Backoff(delay = 1000))
// @Scheduled(cron = "0 0 22 L * ?")
@Scheduled(cron = "#{@calculateLastDayOfQuarterCron}")
public void QuarterlyProductGroupingReport() {
MiTuExport miTuExport = createMiTuExport("Quarterly product grouping report", "quarter");
try {
@@ -695,6 +704,23 @@ public class MiTuExportScheduledTask {
}
}
public String calculateLastDayOfQuarterCron() {
// 获取当前日期
LocalDate currentDate = LocalDate.now();
// 计算下一个季度的最后一天
Month currentMonth = currentDate.getMonth();
Month nextQuarterStartMonth = currentMonth.plus(3 - currentMonth.getValue() % 3);
LocalDate nextQuarterStartDate = LocalDate.of(currentDate.getYear(), nextQuarterStartMonth, 1);
LocalDate lastDayOfNextQuarter = nextQuarterStartDate.with(TemporalAdjusters.lastDayOfMonth());
// 将日期转换成 Cron 表达式的格式
int year = lastDayOfNextQuarter.getYear();
int month = lastDayOfNextQuarter.getMonthValue();
int dayOfMonth = lastDayOfNextQuarter.getDayOfMonth();
return String.format("0 0 22 %d %d ?", dayOfMonth, month);
}
private void exportQuarterlyProductGrouping(List<WeeklyHeavyStock> weeklyHeavyStockList, String weeklyHeavyStockReportName) {
String currentPath = Paths.get("").toAbsolutePath().toString();
File file = new File(currentPath + "/" + weeklyHeavyStockReportName);
@@ -1116,6 +1142,17 @@ public class MiTuExportScheduledTask {
stmt = conn.createStatement();
String sql;
// 获取当前日期
LocalDate currentDate = LocalDate.now();
// 获取当前星期的第一天(星期一)和最后一天(星期日)
LocalDate firstDayOfWeek = currentDate.with(DayOfWeek.MONDAY);
LocalDate lastDayOfWeek = currentDate.with(DayOfWeek.SUNDAY);
// 格式化日期字符串
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String firstDayOfWeekStr = formatter.format(firstDayOfWeek);
String lastDayOfWeekStr = formatter.format(lastDayOfWeek);
// 构建完整的 SQL 查询语句
sql = "SELECT TOP 30\n" +
" PLU_CODE,\n" +
@@ -1134,8 +1171,8 @@ public class MiTuExportScheduledTask {
"FROM\n" +
" v_MZG020B\n" +
"WHERE\n" +
" TRX_DATE >= '2024-01-08'\n" +
" AND TRX_DATE <= '2024-01-14'\n" +
" TRX_DATE >= '" + firstDayOfWeekStr + "' \n" +
" AND TRX_DATE <= '" + lastDayOfWeekStr + "' \n" +
"GROUP BY\n" +
" PLU_CODE, ITEM_NAME, CATEGORY, SUB_CAT, PRICE_ORIGINAL\n" +
"ORDER BY \n" +
@@ -1681,7 +1718,6 @@ public class MiTuExportScheduledTask {
String sql;
sql = "SELECT \n" +
" user_member,\n" +
" SUM(CASE WHEN trx_date >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) AND trx_date <= GETDATE() THEN pay_bas_amt ELSE 0 END) AS thisMonth,\n" +
" SUM(CASE WHEN trx_date >= DATEADD(MONTH, -1, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)) AND trx_date < DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) THEN pay_bas_amt ELSE 0 END) AS month1,\n" +
" SUM(CASE WHEN trx_date >= DATEADD(MONTH, -2, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)) AND trx_date < DATEADD(MONTH, -1, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)) THEN pay_bas_amt ELSE 0 END) AS month2,\n" +
@@ -1759,7 +1795,7 @@ public class MiTuExportScheduledTask {
}
@Retryable(value = Exception.class, maxAttempts = 3, backoff = @Backoff(delay = 1000))
// @Scheduled(cron = "0 0 22 L * ?")
@Scheduled(cron = "#{@calculateLastDayOfQuarterCron}")
public void customerTypeAnalysis() {
try {
// 根据近三个月购买记录获取顾客member_code