1
This commit is contained in:
@@ -17,6 +17,14 @@ public interface JDOrderMapper {
|
||||
* 根据主键查询
|
||||
*/
|
||||
JDOrder selectJDOrderById(Long id);
|
||||
|
||||
int insertJDOrder(JDOrder jdOrder);
|
||||
|
||||
int updateJDOrder(JDOrder jdOrder);
|
||||
|
||||
JDOrder selectJDOrderByRemark(String remark);
|
||||
|
||||
List<JDOrder> selectJDOrderListByAddress(String address);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -16,6 +16,18 @@ public interface IJDOrderService {
|
||||
* 按ID查询
|
||||
*/
|
||||
JDOrder selectJDOrderById(Long id);
|
||||
|
||||
/** 新增 */
|
||||
int insertJDOrder(JDOrder jdOrder);
|
||||
|
||||
/** 更新 */
|
||||
int updateJDOrder(JDOrder jdOrder);
|
||||
|
||||
/** 按 remark 查单(单号) */
|
||||
JDOrder selectJDOrderByRemark(String remark);
|
||||
|
||||
/** 按地址倒序查询全部 */
|
||||
java.util.List<JDOrder> selectJDOrderListByAddress(String address);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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 "指令入口:请在\"一键转链\"页面使用(输入文案/链接后点生成)";
|
||||
|
||||
@@ -23,6 +23,26 @@ public class JDOrderServiceImpl implements IJDOrderService {
|
||||
public JDOrder selectJDOrderById(Long id) {
|
||||
return jdOrderMapper.selectJDOrderById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int insertJDOrder(JDOrder jdOrder) {
|
||||
return jdOrderMapper.insertJDOrder(jdOrder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int updateJDOrder(JDOrder jdOrder) {
|
||||
return jdOrderMapper.updateJDOrder(jdOrder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JDOrder selectJDOrderByRemark(String remark) {
|
||||
return jdOrderMapper.selectJDOrderByRemark(remark);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<JDOrder> selectJDOrderListByAddress(String address) {
|
||||
return jdOrderMapper.selectJDOrderListByAddress(address);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -56,6 +56,50 @@
|
||||
where id = #{id}
|
||||
</select>
|
||||
|
||||
<insert id="insertJDOrder" parameterType="JDOrder" useGeneratedKeys="true" keyProperty="id">
|
||||
insert into jd_order (
|
||||
remark, distribution_mark, model_number, link,
|
||||
payment_amount, rebate_amount, address, logistics_link,
|
||||
order_id, buyer, order_time, create_time, update_time, status
|
||||
) values (
|
||||
#{remark}, #{distributionMark}, #{modelNumber}, #{link},
|
||||
#{paymentAmount}, #{rebateAmount}, #{address}, #{logisticsLink},
|
||||
#{orderId}, #{buyer}, #{orderTime}, now(), now(), #{status}
|
||||
)
|
||||
</insert>
|
||||
|
||||
<update id="updateJDOrder" parameterType="JDOrder">
|
||||
update jd_order
|
||||
<set>
|
||||
<if test="remark != null"> remark = #{remark},</if>
|
||||
<if test="distributionMark != null"> distribution_mark = #{distributionMark},</if>
|
||||
<if test="modelNumber != null"> model_number = #{modelNumber},</if>
|
||||
<if test="link != null"> link = #{link},</if>
|
||||
<if test="paymentAmount != null"> payment_amount = #{paymentAmount},</if>
|
||||
<if test="rebateAmount != null"> rebate_amount = #{rebateAmount},</if>
|
||||
<if test="address != null"> address = #{address},</if>
|
||||
<if test="logisticsLink != null"> logistics_link = #{logisticsLink},</if>
|
||||
<if test="orderId != null"> order_id = #{orderId},</if>
|
||||
<if test="buyer != null"> buyer = #{buyer},</if>
|
||||
<if test="orderTime != null"> order_time = #{orderTime},</if>
|
||||
<if test="status != null"> status = #{status},</if>
|
||||
update_time = now()
|
||||
</set>
|
||||
where id = #{id}
|
||||
</update>
|
||||
|
||||
<select id="selectJDOrderByRemark" parameterType="string" resultMap="JDOrderResult">
|
||||
<include refid="selectJDOrderBase"/>
|
||||
where remark = #{remark}
|
||||
limit 1
|
||||
</select>
|
||||
|
||||
<select id="selectJDOrderListByAddress" parameterType="string" resultMap="JDOrderResult">
|
||||
<include refid="selectJDOrderBase"/>
|
||||
where address = #{address}
|
||||
order by order_time desc
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user