TASK:mixi;

This commit is contained in:
shahaibo
2024-04-25 03:59:05 +08:00
parent a7821a634f
commit 1d44cf21c1
3 changed files with 96 additions and 11 deletions

View File

@@ -2,6 +2,7 @@ package com.mixi.common.tasks;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mixi.common.tasks.mituExportEntity.*;
import com.mixi.common.utils.CopyUtil;
import com.mixi.common.utils.MinioUtil;
import com.mixi.mapper.*;
import com.mixi.mapper.entity.*;
@@ -57,8 +58,8 @@ public class MiTuExportScheduledTask {
// weeklySellThrReport();
// WeeklyHeavyStockReport();
// QuarterlyProductGroupingReport();
// customerTypeAnalysis();
getBestSell();
customerTypeAnalysis();
// getBestSell();
}
// public static void main(String[] args) {
@@ -1771,6 +1772,9 @@ public class MiTuExportScheduledTask {
@Resource
private MiTuMemberMapper miTuMemberMapper;
public Map<String, Double> varianceMap = new HashMap<>();
public Map<String, String> mostFrequentColorMap = new HashMap<>();
private List<MiTuMember> getMemberType(List<String> memberCodeList) {
List<MiTuMember> miTuMemberList = new ArrayList<>();
for (String memberCode : memberCodeList) {
@@ -1778,15 +1782,88 @@ public class MiTuExportScheduledTask {
continue;
}
String memberType = getMemberTypeByMemberCode(memberCode);
MiTuMember miTuMember = new MiTuMember();
MiTuMember member = getMember(memberCode);
MiTuMember miTuMember = CopyUtil.copyObject(member, MiTuMember.class);
miTuMember.setMbrCode(memberCode);
miTuMember.setMemberType(memberType);
miTuMemberList.add(miTuMember);
}
// 计算顾客颜色方差的方差
// 计算所有顾客方差值的方差
double overallVariance = calculateOverallVariance(varianceMap);
for (MiTuMember miTuMember : miTuMemberList) {
if (miTuMember.getMemberType() == null) {
if (varianceMap.get(miTuMember.getMbrCode()) < overallVariance) {
miTuMember.setMemberType("Type D");
miTuMember.setMostFrequentColor(mostFrequentColorMap.get(miTuMember.getMbrCode()));
}else {
miTuMember.setMemberType("Type S");
}
}
miTuMemberMapper.insert(miTuMember);
}
return miTuMemberList;
}
private MiTuMember getMember(String memberCode) {
MiTuMember member = new MiTuMember();
Connection conn = null;
Statement stmt = null;
try {
// 注册 JDBC 驱动器
Class.forName(JDBC_DRIVER);
// 打开一个连接
System.out.println("连接数据库...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
// 执行查询
System.out.println("创建声明...");
stmt = conn.createStatement();
String sql;
sql = "SELECT * FROM V_RW0095B\n" +
"WHERE mbr_code = '" + memberCode + "'";
ResultSet rs = stmt.executeQuery(sql);
// 处理结果集
while (rs.next()) {
member.setMbrCode(rs.getString("mbr_code"));
member.setMbrName(rs.getString("mbr_name"));
member.setMbrMobile(rs.getString("mbr_mobile"));
member.setMbrGroup(rs.getString("mbr_group"));
member.setMbrStatus(rs.getString("mbr_status").charAt(0));
member.setJoinDate(rs.getDate("join_date").toLocalDate());
member.setMbrIssue(rs.getString("mbr_issue"));
member.setBirthMonth(rs.getInt("birth_m"));
member.setMbrSex(rs.getString("mbr_sex").charAt(0));
member.setOffBonus(rs.getDouble("off_bonus"));
member.setEffBonus(rs.getDouble("eff_bonus"));
member.setSumBonus(rs.getDouble("sum_bonus"));
}
// 清理环境
rs.close();
stmt.close();
conn.close();
} catch (SQLException | ClassNotFoundException e) {
// 处理异常
e.printStackTrace();
}
return member;
}
private double calculateOverallVariance(Map<String, Double> varianceMap) {
// 计算平均值
double mean = varianceMap.values().stream().mapToDouble(Double::doubleValue).average().orElse(0.0);
// 计算方差
double sumOfSquaredDifferences = varianceMap.values().stream()
.mapToDouble(value -> Math.pow(value - mean, 2))
.sum();
return sumOfSquaredDifferences / varianceMap.size();
}
private String getMemberTypeByMemberCode(String memberCode) {
List<Transaction> transactionList = new ArrayList<>();
Connection conn = null;
@@ -1838,10 +1915,10 @@ public class MiTuExportScheduledTask {
e.printStackTrace();
}
return analysis(transactionList);
return analysis(transactionList, memberCode);
}
private String analysis(List<Transaction> transactionList) {
private String analysis(List<Transaction> transactionList, String memberCode) {
int discountNum = 0;
int currentSeasonNum = 0;
int leadingNum = 0;
@@ -1858,9 +1935,15 @@ public class MiTuExportScheduledTask {
// 计算每种颜色的出现频率
double mean = (double) totalCount / colorCountMap.size();
double varianceSum = 0;
String mostFrequentColor = null;
int maxCount = 0;
for (Map.Entry<String, Integer> entry : colorCountMap.entrySet()) {
int count = entry.getValue();
varianceSum += Math.pow(count - mean, 2);
if (count > maxCount) {
maxCount = count;
mostFrequentColor = entry.getKey();
}
}
// 计算方差
@@ -1879,10 +1962,13 @@ public class MiTuExportScheduledTask {
if (currentSeasonNum >= transactionList.size() * 0.7) {
return "Type i";
}
if (variance <= 0.2) {
return "Type D";
}
return "Type S";
varianceMap.put(memberCode, variance);
mostFrequentColorMap.put(memberCode, mostFrequentColor);
return null;
// if (variance <= 0.2) {
// return "Type D";
// }
// return "Type S";
}
private List<String> getMemberCode() {

View File

@@ -27,4 +27,5 @@ public class MiTuMember implements Serializable {
private Double effBonus;
private Double sumBonus;
private String memberType;
private String mostFrequentColor;
}

View File

@@ -199,7 +199,5 @@ public class MiTuExportServiceImpl implements MiTuExportService {
default :
throw new BusinessException("Unknown memberType.");
}
// return null;
}
}