TASK:mixi;
This commit is contained in:
@@ -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() {
|
||||
|
||||
@@ -27,4 +27,5 @@ public class MiTuMember implements Serializable {
|
||||
private Double effBonus;
|
||||
private Double sumBonus;
|
||||
private String memberType;
|
||||
private String mostFrequentColor;
|
||||
}
|
||||
|
||||
@@ -199,7 +199,5 @@ public class MiTuExportServiceImpl implements MiTuExportService {
|
||||
default :
|
||||
throw new BusinessException("Unknown memberType.");
|
||||
}
|
||||
|
||||
// return null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user