@@ -185,9 +185,8 @@ public class InstructionServiceImpl implements IInstructionService {
}
return sb . toString ( ) ;
}
// 单… 的解析/入库在 jd 工程内较复杂,这里仅返回模板校验结果
if ( input . startsWith ( " 单 " ) ) {
return " 录单模板校验暂未开放(仅支持 慢搜/慢查、录单/慢单 查询) " ;
return handleDanWriteDb ( input ) ;
}
return helpText ( ) ;
}
@@ -395,6 +394,124 @@ public class InstructionServiceImpl implements IInstructionService {
return s . replaceAll ( " [ \\ t ]+ " , " " ) . replaceAll ( " \ n{3,} " , " \ n \ n " ) . trim ( ) ;
}
// ===== “单 …” 写库 =====
private String handleDanWriteDb ( String input ) {
// 与 JDUtil.parseOrderFromText 一致的模板字段
JDOrder order = parseOrderFromText ( input . trim ( ) . replace ( " 元 " , " " ) ) ;
// 字段校验并返回缺失项
StringBuilder missing = new StringBuilder ( ) ;
if ( isEmpty ( order . getOrderId ( ) ) ) missing . append ( " 单号 \ n " ) ;
if ( isEmpty ( order . getBuyer ( ) ) ) missing . append ( " 下单人 \ n " ) ;
if ( order . getPaymentAmount ( ) = = null | | order . getPaymentAmount ( ) = = 0 ) missing . append ( " 下单价格 \ n " ) ;
if ( order . getRebateAmount ( ) = = null ) missing . append ( " 后返金额 \ n " ) ;
if ( isEmpty ( order . getLogisticsLink ( ) ) ) missing . append ( " 物流链接 \ n " ) ;
if ( isEmpty ( order . getAddress ( ) ) ) missing . append ( " 收货地址 \ n " ) ;
if ( isEmpty ( order . getModelNumber ( ) ) ) missing . append ( " 型号 \ n " ) ;
if ( missing . length ( ) > 0 ) {
String warn = " [炸弹] [炸弹] [炸弹] 录单警告!!! \ n缺少表单字段 \ n " + missing ;
return warn ;
}
// 地址重复提示(不阻断写入,与 JDUtil 提示一致)
List < JDOrder > byAddress = jdOrderService . selectJDOrderListByAddress ( order . getAddress ( ) ) ;
if ( byAddress ! = null & & ! byAddress . isEmpty ( ) ) {
java . text . SimpleDateFormat sdf = new java . text . SimpleDateFormat ( " yyyy-MM-dd HH:mm:ss " ) ;
String latest = sdf . format ( byAddress . get ( 0 ) . getOrderTime ( ) ) ;
// 仅提示
}
// 按 remark 判断新增/更新
JDOrder exists = jdOrderService . selectJDOrderByRemark ( order . getRemark ( ) ) ;
String info ;
if ( exists ! = null ) {
order . setId ( exists . getId ( ) ) ;
jdOrderService . updateJDOrder ( order ) ;
info = " 更新成功 " ;
} else {
jdOrderService . insertJDOrder ( order ) ;
info = " 新增成功 " ;
}
StringBuilder sb = new StringBuilder ( ) ;
String distributionMark2 = " " ;
if ( ! isEmpty ( order . getDistributionMark ( ) ) ) {
if ( order . getDistributionMark ( ) . startsWith ( " H " ) ) distributionMark2 = " 鸿 " ;
else if ( order . getDistributionMark ( ) . startsWith ( " F " ) ) distributionMark2 = " 凡 " ;
}
java . text . SimpleDateFormat sdf = new java . text . SimpleDateFormat ( " yyyy-MM-dd " ) ;
sb . append ( order . getRemark ( ) ) . append ( '\t' )
. append ( order . getOrderId ( ) ) . append ( '\t' )
. append ( sdf . format ( order . getOrderTime ( ) ) ) . append ( '\t' )
. append ( order . getModelNumber ( ) ) . append ( '\t' )
. append ( order . getAddress ( ) ) . append ( '\t' )
. append ( order . getLogisticsLink ( ) ) . append ( '\t' )
. append ( '\t' ) . append ( order . getBuyer ( ) ) . append ( '\t' )
. append ( nvl ( order . getPaymentAmount ( ) ) ) . append ( '\t' )
. append ( nvl ( order . getRebateAmount ( ) ) ) . append ( '\t' )
. append ( distributionMark2 ) ;
return info + " \ n " + sb ;
}
private boolean isEmpty ( String s ) { return s = = null | | s . isEmpty ( ) ; }
// 参照 JDUtil.parseOrderFromText
private JDOrder parseOrderFromText ( String input ) {
input = input . replaceAll ( " \\ s+ " , " " ) . trim ( ) ;
Map < String , String > fields = new HashMap < > ( ) ;
extractField ( input , fields , " 单: " , " 备注: " ) ;
extractField ( input , fields , " 备注: " , " 分销标记: " ) ;
extractField ( input , fields , " 分销标记: " , " 型号: " ) ;
extractField ( input , fields , " 型号: " , " 链接: " ) ;
extractField ( input , fields , " 链接: " , " 下单付款: " ) ;
extractField ( input , fields , " 下单付款: " , " 后返金额: " ) ;
extractField ( input , fields , " 后返金额: " , " 地址: " ) ;
extractField ( input , fields , " 地址: " , " 物流链接: " ) ;
extractField ( input , fields , " 物流链接: " , " 订单号: " ) ;
extractField ( input , fields , " 订单号: " , " 下单人: " ) ;
java . util . regex . Pattern buyerPattern = java . util . regex . Pattern . compile ( " 下单人: \\ s*(.*?) \\ s*(?=单:| \\ Z) " , java . util . regex . Pattern . DOTALL ) ;
java . util . regex . Matcher buyerMatcher = buyerPattern . matcher ( input ) ;
if ( buyerMatcher . find ( ) ) {
fields . put ( " 下单人 " , buyerMatcher . group ( 1 ) . trim ( ) ) ;
}
JDOrder order = new JDOrder ( ) ;
order . setRemark ( fields . getOrDefault ( " 单 " , null ) ) ;
order . setDistributionMark ( fields . getOrDefault ( " 分销标记 " , null ) ) ;
order . setModelNumber ( fields . getOrDefault ( " 型号 " , null ) ) ;
order . setLink ( fields . getOrDefault ( " 链接 " , null ) ) ;
order . setStatus ( fields . getOrDefault ( " 备注 " , null ) ) ;
try { order . setPaymentAmount ( Double . parseDouble ( fields . getOrDefault ( " 下单付款 " , " 0 " ) ) ) ; } catch ( Exception ignore ) { }
try { order . setRebateAmount ( Double . parseDouble ( fields . getOrDefault ( " 后返金额 " , " 0 " ) ) ) ; } catch ( Exception ignore ) { }
order . setAddress ( fields . getOrDefault ( " 地址 " , null ) ) ;
order . setLogisticsLink ( extractFirstUrl ( fields . getOrDefault ( " 物流链接 " , " " ) ) ) ;
order . setOrderId ( fields . getOrDefault ( " 订单号 " , null ) ) ;
order . setBuyer ( fields . getOrDefault ( " 下单人 " , null ) ) ;
try {
String dateStr = fields . getOrDefault ( " 单 " , " " ) . split ( " " ) [ 0 ] ;
java . text . SimpleDateFormat sdf2 = new java . text . SimpleDateFormat ( " yyyy-MM-dd " ) ;
order . setOrderTime ( sdf2 . parse ( dateStr ) ) ;
} catch ( Exception e ) { order . setOrderTime ( new Date ( ) ) ; }
return order ;
}
private void extractField ( String input , Map < String , String > map , String startKeyword , String endKeyword ) {
java . util . regex . Pattern pattern = java . util . regex . Pattern . compile ( startKeyword + " \\ s*(.*?) \\ s*(?= " + endKeyword + " | \\ Z) " , java . util . regex . Pattern . DOTALL ) ;
java . util . regex . Matcher matcher = pattern . matcher ( input ) ;
if ( matcher . find ( ) ) {
String value = matcher . group ( 1 ) . trim ( ) . replaceAll ( " ^ " + startKeyword , " " ) . trim ( ) ;
map . put ( startKeyword . replace ( " : " , " " ) , value ) ;
}
}
private String extractFirstUrl ( String text ) {
if ( text = = null | | text . isEmpty ( ) ) return null ;
java . util . regex . Pattern urlPattern = java . util . regex . Pattern . compile ( " (https?://[^ \\ s]+) " ) ;
java . util . regex . Matcher matcher = urlPattern . matcher ( text ) ;
return matcher . find ( ) ? matcher . group ( 0 ) : null ;
}
private String handleTransferLike ( String input ) {
// 前端仍复用已有 /jarvis/jdorder/generatePromotionContent 接口,这里仅提供一个回显占位
return " 指令入口:请在 \" 一键转链 \" 页面使用(输入文案/链接后点生成) " ;