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.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.mixi.common.tasks.mituExportEntity.*;
|
import com.mixi.common.tasks.mituExportEntity.*;
|
||||||
|
import com.mixi.common.utils.CopyUtil;
|
||||||
import com.mixi.common.utils.MinioUtil;
|
import com.mixi.common.utils.MinioUtil;
|
||||||
import com.mixi.mapper.*;
|
import com.mixi.mapper.*;
|
||||||
import com.mixi.mapper.entity.*;
|
import com.mixi.mapper.entity.*;
|
||||||
@@ -57,8 +58,8 @@ public class MiTuExportScheduledTask {
|
|||||||
// weeklySellThrReport();
|
// weeklySellThrReport();
|
||||||
// WeeklyHeavyStockReport();
|
// WeeklyHeavyStockReport();
|
||||||
// QuarterlyProductGroupingReport();
|
// QuarterlyProductGroupingReport();
|
||||||
// customerTypeAnalysis();
|
customerTypeAnalysis();
|
||||||
getBestSell();
|
// getBestSell();
|
||||||
}
|
}
|
||||||
|
|
||||||
// public static void main(String[] args) {
|
// public static void main(String[] args) {
|
||||||
@@ -1771,6 +1772,9 @@ public class MiTuExportScheduledTask {
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private MiTuMemberMapper miTuMemberMapper;
|
private MiTuMemberMapper miTuMemberMapper;
|
||||||
|
|
||||||
|
public Map<String, Double> varianceMap = new HashMap<>();
|
||||||
|
public Map<String, String> mostFrequentColorMap = new HashMap<>();
|
||||||
private List<MiTuMember> getMemberType(List<String> memberCodeList) {
|
private List<MiTuMember> getMemberType(List<String> memberCodeList) {
|
||||||
List<MiTuMember> miTuMemberList = new ArrayList<>();
|
List<MiTuMember> miTuMemberList = new ArrayList<>();
|
||||||
for (String memberCode : memberCodeList) {
|
for (String memberCode : memberCodeList) {
|
||||||
@@ -1778,15 +1782,88 @@ public class MiTuExportScheduledTask {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
String memberType = getMemberTypeByMemberCode(memberCode);
|
String memberType = getMemberTypeByMemberCode(memberCode);
|
||||||
MiTuMember miTuMember = new MiTuMember();
|
MiTuMember member = getMember(memberCode);
|
||||||
|
MiTuMember miTuMember = CopyUtil.copyObject(member, MiTuMember.class);
|
||||||
miTuMember.setMbrCode(memberCode);
|
miTuMember.setMbrCode(memberCode);
|
||||||
miTuMember.setMemberType(memberType);
|
miTuMember.setMemberType(memberType);
|
||||||
miTuMemberList.add(miTuMember);
|
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);
|
miTuMemberMapper.insert(miTuMember);
|
||||||
}
|
}
|
||||||
return miTuMemberList;
|
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) {
|
private String getMemberTypeByMemberCode(String memberCode) {
|
||||||
List<Transaction> transactionList = new ArrayList<>();
|
List<Transaction> transactionList = new ArrayList<>();
|
||||||
Connection conn = null;
|
Connection conn = null;
|
||||||
@@ -1838,10 +1915,10 @@ public class MiTuExportScheduledTask {
|
|||||||
e.printStackTrace();
|
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 discountNum = 0;
|
||||||
int currentSeasonNum = 0;
|
int currentSeasonNum = 0;
|
||||||
int leadingNum = 0;
|
int leadingNum = 0;
|
||||||
@@ -1858,9 +1935,15 @@ public class MiTuExportScheduledTask {
|
|||||||
// 计算每种颜色的出现频率
|
// 计算每种颜色的出现频率
|
||||||
double mean = (double) totalCount / colorCountMap.size();
|
double mean = (double) totalCount / colorCountMap.size();
|
||||||
double varianceSum = 0;
|
double varianceSum = 0;
|
||||||
|
String mostFrequentColor = null;
|
||||||
|
int maxCount = 0;
|
||||||
for (Map.Entry<String, Integer> entry : colorCountMap.entrySet()) {
|
for (Map.Entry<String, Integer> entry : colorCountMap.entrySet()) {
|
||||||
int count = entry.getValue();
|
int count = entry.getValue();
|
||||||
varianceSum += Math.pow(count - mean, 2);
|
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) {
|
if (currentSeasonNum >= transactionList.size() * 0.7) {
|
||||||
return "Type i";
|
return "Type i";
|
||||||
}
|
}
|
||||||
if (variance <= 0.2) {
|
varianceMap.put(memberCode, variance);
|
||||||
return "Type D";
|
mostFrequentColorMap.put(memberCode, mostFrequentColor);
|
||||||
}
|
return null;
|
||||||
return "Type S";
|
// if (variance <= 0.2) {
|
||||||
|
// return "Type D";
|
||||||
|
// }
|
||||||
|
// return "Type S";
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<String> getMemberCode() {
|
private List<String> getMemberCode() {
|
||||||
|
|||||||
@@ -27,4 +27,5 @@ public class MiTuMember implements Serializable {
|
|||||||
private Double effBonus;
|
private Double effBonus;
|
||||||
private Double sumBonus;
|
private Double sumBonus;
|
||||||
private String memberType;
|
private String memberType;
|
||||||
|
private String mostFrequentColor;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -199,7 +199,5 @@ public class MiTuExportServiceImpl implements MiTuExportService {
|
|||||||
default :
|
default :
|
||||||
throw new BusinessException("Unknown memberType.");
|
throw new BusinessException("Unknown memberType.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// return null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user