@@ -1917,43 +1917,122 @@ public class JDUtil {
}
public void LD ( String input , String fromWxid ) {
// 生成当前日期 2025-02-05
String date = LocalDate . now ( ) . format ( DateTimeFormatter . ofPattern ( " yyyy-MM-dd " ) ) ;
JDOrder jdOrder = parseOrderFromText ( input . trim ( ) . replace ( " 元 " , " " ) ) ;
if ( jdOrder . getOrderId ( ) = = null ) {
return ;
}
if ( Util . isAnyEmpty ( jdOrder . getOrderId ( ) , jdOrder . getBuyer ( ) , jdOrder . getOrderTime ( ) , jdOrder . getPaymentAmount ( ) , jdOrder . getRebateAmount ( ) , jdOrder . getAddress ( ) , jdOrder . getLogisticsLink ( ) , jdOrder . getModelNumber ( ) , jdOrder . getLink ( ) , jdOrder . getOrderId ( ) , jdOrder . getBuyer ( ) ) ) {
return ;
}
JDOrder byOrderId = jdOrderRepository . findByOrderId ( jdOrder . getOrderId ( ) ) ;
if ( byOrderId ! = null ) {
logger . info ( " 订单已存在:{} " , byOrderId ) ;
jdOrder . setId ( byOrderId . getId ( ) ) ;
} else {
logger . info ( " 订单不存在,新增:{} " , jdOrder ) ;
}
jdOrderRepository . save ( jdOrder ) ;
if ( input . equals ( " 单 " ) ) {
// 查找今天所有订单出来, 按Remark升序, 并且拼接成长文本, 并且先根据distributionMark分组, 再根据 ModelNumber 分组,最后再进行统计 paymentAmount 和 rebateAmount
// 获取今天的日期
LocalDate today = LocalDate . now ( ) ;
LocalDateTime startOfDay = today . atStartOfDay ( ) ;
LocalDateTime endOfDay = today . atTime ( 23 , 59 , 59 ) ;
StringBuilder sb = new StringBuilder ( ) ;
//单号 下单日期 型号 内部订单号 地址 物流 外派给谁 后返金额 谁的单 下单价格
// 从jdOrder中获取转化
String distributionMark = jdOrder . getDistributionMark ( ) ;
String distributionMark2 = " " ;
if ( distributionMark ! = null ) {
if ( distributionMark . startsWith ( " H " ) ) {
distributionMark2 = " 鸿 " ;
} else if ( distributionMark . startsWith ( " F " ) ) {
distributionMark2 = " 凡 " ;
// 将 LocalDateTime 转换为 Date
Date startDate = Date . from ( startOfDay . atZone ( ZoneId . systemDefault ( ) ) . toInstant ( ) ) ;
Date endDate = Date . from ( endOfDay . atZone ( ZoneId . systemDefault ( ) ) . toInstant ( ) ) ;
List < JDOrder > todayOrders = jdOrderRepository . findByOrderTimeBetween ( startDate , endDate ) ;
if ( todayOrders . isEmpty ( ) ) {
wxUtil . sendTextMessage ( fromWxid , " 今天没有订单。 " , 1 , fromWxid , false ) ;
return ;
}
// 按 remark 升序排序( null 值排最后)
todayOrders . sort ( Comparator . comparing (
JDOrder : : getRemark ,
Comparator . nullsLast ( String : : compareTo )
) ) ;
// 先按 distributionMark 分组,再按 modelNumber 分组
Map < String , Map < String , List < JDOrder > > > groupedOrders = todayOrders . stream ( )
. collect ( Collectors . groupingBy ( JDOrder : : getDistributionMark ,
Collectors . groupingBy ( JDOrder : : getModelNumber ) ) ) ;
// 遍历每个 distributionMark 分组,生成独立的消息内容并发送
for ( Map . Entry < String , Map < String , List < JDOrder > > > entry : groupedOrders . entrySet ( ) ) {
String distributionMark = entry . getKey ( ) ;
Map < String , List < JDOrder > > modelGroups = entry . getValue ( ) ;
StringBuilder resultBuilder = new StringBuilder ( ) ;
resultBuilder . append ( " 【 " ) . append ( distributionMark ) . append ( " 】 " ) . append ( " \ n " ) ;
for ( Map . Entry < String , List < JDOrder > > modelEntry : modelGroups . entrySet ( ) ) {
String modelNumber = modelEntry . getKey ( ) ;
List < JDOrder > orders = modelEntry . getValue ( ) ;
int count = orders . size ( ) ;
double totalPaymentAmount = orders . stream ( )
. mapToDouble ( order - > order . getPaymentAmount ( ) ! = null ? order . getPaymentAmount ( ) : 0 . 0 )
. sum ( ) ;
double totalRebateAmount = orders . stream ( )
. mapToDouble ( order - > order . getRebateAmount ( ) ! = null ? order . getRebateAmount ( ) : 0 . 0 )
. sum ( ) ;
resultBuilder . append ( " 型号: " ) . append ( modelNumber ! = null ? modelNumber : " 未知 " )
. append ( " \ n数量: " ) . append ( count )
. append ( " \ n总支付金额: " ) . append ( String . format ( " %.2f " , totalPaymentAmount ) )
. append ( " 元 " )
. append ( " \ n总后返金额: " ) . append ( String . format ( " %.2f " , totalRebateAmount ) )
. append ( " 元 " )
. append ( " \ n──────────── \ n " ) ;
for ( JDOrder order : orders ) {
resultBuilder . append ( " 单: " ) . append ( order . getRemark ( ) ! = null ? order . getRemark ( ) : " 未提供 " )
. append ( " \ n型号: " ) . append ( order . getModelNumber ( ) ! = null ? order . getModelNumber ( ) : " 未提供 " )
. append ( " \ n下单付款: " ) . append ( order . getPaymentAmount ( ) ! = null ? String . format ( " %.2f " , order . getPaymentAmount ( ) ) : " 0.00 " )
. append ( " 元 " )
. append ( " \ n后返金额: " ) . append ( order . getRebateAmount ( ) ! = null ? String . format ( " %.2f " , order . getRebateAmount ( ) ) : " 0.00 " )
. append ( " 元 " )
. append ( " \ n地址: " ) . append ( order . getAddress ( ) ! = null ? order . getAddress ( ) : " 未提供 " )
. append ( " \ n物流链接: " ) . append ( order . getLogisticsLink ( ) ! = null ? order . getLogisticsLink ( ) : " 无 " )
. append ( " \ n──────────── \ n " ) ;
}
}
// 发送每条分组的消息到微信
wxUtil . sendTextMessage ( fromWxid , resultBuilder . toString ( ) , 1 , fromWxid , true ) ;
}
} else {
// 生成当前日期 2025-02-05
String date = LocalDate . now ( ) . format ( DateTimeFormatter . ofPattern ( " yyyy-MM-dd " ) ) ;
JDOrder jdOrder = parseOrderFromText ( input . trim ( ) . replace ( " 元 " , " " ) ) ;
if ( jdOrder . getOrderId ( ) = = null ) {
return ;
}
if ( Util . isAnyEmpty ( jdOrder . getOrderId ( ) , jdOrder . getBuyer ( ) , jdOrder . getOrderTime ( ) , jdOrder . getPaymentAmount ( ) , jdOrder . getRebateAmount ( ) , jdOrder . getAddress ( ) , jdOrder . getLogisticsLink ( ) , jdOrder . getModelNumber ( ) , jdOrder . getLink ( ) , jdOrder . getOrderId ( ) , jdOrder . getBuyer ( ) ) ) {
return ;
}
JDOrder byOrderId = jdOrderRepository . findByOrderId ( jdOrder . getOrderId ( ) ) ;
String info = " " ;
if ( byOrderId ! = null ) {
logger . info ( " 订单已存在:{} " , byOrderId ) ;
info = " 更新成功 " ;
jdOrder . setId ( byOrderId . getId ( ) ) ;
} else {
info = " 新增成功 " ;
logger . info ( " 订单不存在,新增:{} " , jdOrder ) ;
}
jdOrderRepository . save ( jdOrder ) ;
StringBuilder sb = new StringBuilder ( ) ;
//单号 下单日期 型号 内部订单号 地址 物流 外派给谁 后返金额 谁的单 下单价格
// 从jdOrder中获取转化
String distributionMark = jdOrder . getDistributionMark ( ) ;
String distributionMark2 = " " ;
if ( distributionMark ! = null ) {
if ( distributionMark . startsWith ( " H " ) ) {
distributionMark2 = " 鸿 " ;
} else if ( distributionMark . startsWith ( " F " ) ) {
distributionMark2 = " 凡 " ;
}
}
sb . append ( jdOrder . getRemark ( ) ) . append ( " \ t " ) . append ( jdOrder . getOrderId ( ) ) . append ( " \ t " ) . append ( date ) . append ( " \ t " ) . append ( jdOrder . getModelNumber ( ) ) . append ( " \ t " ) . append ( jdOrder . getAddress ( ) ) . append ( " \ t " ) . append ( jdOrder . getLogisticsLink ( ) ) . append ( " \ t " ) . append ( " \ t " ) . append ( jdOrder . getBuyer ( ) ) . append ( " \ t " ) . append ( jdOrder . getPaymentAmount ( ) ) . append ( " \ t " ) . append ( distributionMark2 ) ;
logger . info ( " 订单信息:{} " , sb ) ;
if ( fromWxid . isEmpty ( ) ) {
return ;
}
wxUtil . sendTextMessage ( fromWxid , info , 1 , null , true ) ;
wxUtil . sendTextMessage ( fromWxid , sb . toString ( ) , 1 , null , true ) ;
}
sb . append ( jdOrder . getRemark ( ) ) . append ( " \ t " ) . append ( jdOrder . getOrderId ( ) ) . append ( " \ t " ) . append ( date ) . append ( " \ t " ) . append ( jdOrder . getModelNumber ( ) ) . append ( " \ t " ) . append ( jdOrder . getAddress ( ) ) . append ( " \ t " ) . append ( jdOrder . getLogisticsLink ( ) ) . append ( " \ t " ) . append ( " \ t " ) . append ( jdOrder . getBuyer ( ) ) . append ( " \ t " ) . append ( jdOrder . getPaymentAmount ( ) ) . append ( " \ t " ) . append ( distributionMark2 ) ;
logger . info ( " 订单信息:{} " , sb ) ;
if ( fromWxid . isEmpty ( ) ) {
return ;
}
wxUtil . sendTextMessage ( fromWxid , " 解析成功 " , 1 , null , true ) ;
wxUtil . sendTextMessage ( fromWxid , sb . toString ( ) , 1 , null , true ) ;
}