1
This commit is contained in:
@@ -27,10 +27,14 @@ public class JDOrder extends BaseEntity {
|
||||
@Excel(name = "分销标记")
|
||||
private String distributionMark;
|
||||
|
||||
/** 型号 */
|
||||
/** 型号(本体,不含店铺后缀) */
|
||||
@Excel(name = "型号")
|
||||
private String modelNumber;
|
||||
|
||||
/** 型号店铺短前缀(如海尔厨房;完整型号 = modelNumber + modelShop) */
|
||||
@Excel(name = "型号店铺")
|
||||
private String modelShop;
|
||||
|
||||
/** 列表筛选:型号不含这些子串(逗号/空格分隔,对应 SQL 多条 NOT LIKE),不入库 */
|
||||
@Transient
|
||||
private String modelNumberExclude;
|
||||
|
||||
@@ -10,6 +10,9 @@ public class QuickRecordModelOption {
|
||||
|
||||
private String modelNumber;
|
||||
|
||||
/** 型号店铺短前缀 */
|
||||
private String modelShop;
|
||||
|
||||
/** 最近一次订单的下单付款金额 */
|
||||
private Double lastPaymentAmount;
|
||||
|
||||
|
||||
@@ -67,6 +67,13 @@ public interface JDOrderMapper {
|
||||
* 每个型号取其主键最大的一条订单的付款 / 后返(用于快捷录单下拉回填)
|
||||
*/
|
||||
List<QuickRecordModelOption> selectQuickRecordModelOptions();
|
||||
|
||||
/** 待拆分型号店铺的历史订单(全表扫描,由业务层按配置过滤) */
|
||||
List<JDOrder> selectOrdersPendingModelShopMigration();
|
||||
|
||||
int updateModelShopFields(@org.apache.ibatis.annotations.Param("id") Long id,
|
||||
@org.apache.ibatis.annotations.Param("modelNumber") String modelNumber,
|
||||
@org.apache.ibatis.annotations.Param("modelShop") String modelShop);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.ruoyi.jarvis.service;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import com.ruoyi.jarvis.domain.JDOrder;
|
||||
import com.ruoyi.jarvis.domain.dto.QuickRecordModelShopOption;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 型号与店铺前缀拆分、归一化及历史数据迁移。
|
||||
*/
|
||||
public interface IJDOrderModelShopService {
|
||||
|
||||
List<QuickRecordModelShopOption> loadShopOptions();
|
||||
|
||||
void normalizeOrder(JDOrder order);
|
||||
|
||||
String fullModel(JDOrder order);
|
||||
|
||||
String lookupModelBase(String rawModel);
|
||||
|
||||
/** 一键迁移:将 model_number 末尾匹配的店铺前缀写入 model_shop 并从 model_number 截掉 */
|
||||
Map<String, Object> migrateExistingOrders();
|
||||
}
|
||||
@@ -52,6 +52,9 @@ public interface IJDOrderService {
|
||||
|
||||
/** 快捷录单:型号及最近一次单的付款 / 后返 */
|
||||
List<QuickRecordModelOption> selectQuickRecordModelOptions();
|
||||
|
||||
/** 一键迁移:拆分 model_number 末尾店铺前缀到 model_shop */
|
||||
java.util.Map<String, Object> migrateModelShopSplit();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ import com.ruoyi.jarvis.domain.WeComShareLinkLogisticsJob;
|
||||
import com.ruoyi.jarvis.service.IInstructionService;
|
||||
import com.ruoyi.jarvis.service.IOrderRowsService;
|
||||
import com.ruoyi.jarvis.service.IJDOrderService;
|
||||
import com.ruoyi.jarvis.service.IJDOrderModelShopService;
|
||||
import com.ruoyi.jarvis.service.IProductJdConfigService;
|
||||
import com.ruoyi.jarvis.service.IPhoneReplaceConfigService;
|
||||
import com.ruoyi.jarvis.service.SuperAdminService;
|
||||
@@ -42,6 +43,8 @@ public class InstructionServiceImpl implements IInstructionService {
|
||||
@Resource
|
||||
private IJDOrderService jdOrderService;
|
||||
@Resource
|
||||
private IJDOrderModelShopService jdOrderModelShopService;
|
||||
@Resource
|
||||
private SuperAdminService superAdminService;
|
||||
@Resource
|
||||
private StringRedisTemplate stringRedisTemplate;
|
||||
@@ -358,13 +361,13 @@ public class InstructionServiceImpl implements IInstructionService {
|
||||
// 统一截取分销标记
|
||||
list.forEach(order -> order.setDistributionMark(truncateDistributionMark(order.getDistributionMark())));
|
||||
String low = kw.toLowerCase(Locale.ROOT);
|
||||
List<JDOrder> matched = list.stream().filter(o -> contains(o.getRemark(), low) || contains(o.getOrderId(), low) || contains(o.getModelNumber(), low) || contains(o.getAddress(), low) || contains(o.getBuyer(), low)).limit(50).collect(Collectors.toList());
|
||||
List<JDOrder> matched = list.stream().filter(o -> contains(o.getRemark(), low) || contains(o.getOrderId(), low) || contains(o.getModelNumber(), low) || contains(o.getModelShop(), low) || contains(orderFullModel(o), low) || contains(o.getAddress(), low) || contains(o.getBuyer(), low)).limit(50).collect(Collectors.toList());
|
||||
if (matched.isEmpty()) return Collections.singletonList("未找到匹配的订单");
|
||||
StringBuilder sb = new StringBuilder();
|
||||
int i = 0;
|
||||
for (JDOrder o : matched) {
|
||||
i++;
|
||||
sb.append(i).append(", 单:").append(nvl(o.getRemark())).append("\n分销标记:").append(nvl(o.getDistributionMark())).append("\n型号:").append(nvl(o.getModelNumber())).append("\n链接:").append(nvl(o.getLink())).append("\n下单付款:").append(nvl(o.getPaymentAmount())).append("\n后返金额:").append(nvl(o.getRebateAmount())).append("\n地址:").append(nvl(o.getAddress())).append("\n物流链接:").append(nvl(o.getLogisticsLink())).append("\n订单号:").append(nvl(o.getOrderId())).append("\n下单人:").append(nvl(o.getBuyer())).append("\n下单时间:").append(nvl(o.getOrderTime())).append("\n备注:").append(nvl(o.getStatus())).append("\n━━━━━━━━━━━━\n");
|
||||
sb.append(i).append(", 单:").append(nvl(o.getRemark())).append("\n分销标记:").append(nvl(o.getDistributionMark())).append("\n型号:").append(nvl(orderFullModel(o))).append("\n链接:").append(nvl(o.getLink())).append("\n下单付款:").append(nvl(o.getPaymentAmount())).append("\n后返金额:").append(nvl(o.getRebateAmount())).append("\n地址:").append(nvl(o.getAddress())).append("\n物流链接:").append(nvl(o.getLogisticsLink())).append("\n订单号:").append(nvl(o.getOrderId())).append("\n下单人:").append(nvl(o.getBuyer())).append("\n下单时间:").append(nvl(o.getOrderTime())).append("\n备注:").append(nvl(o.getStatus())).append("\n━━━━━━━━━━━━\n");
|
||||
}
|
||||
return Collections.singletonList(sb.toString());
|
||||
}
|
||||
@@ -388,7 +391,7 @@ public class InstructionServiceImpl implements IInstructionService {
|
||||
List<JDOrder> sorted = filtered.stream().sorted(Comparator.comparing(JDOrder::getRemark, Comparator.nullsFirst(String::compareTo))).collect(Collectors.toList());
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (JDOrder o : sorted) {
|
||||
sb.append(nvl(o.getRemark())).append('\t').append(nvl(o.getOrderId())).append('\t').append(fmt(o.getOrderTime()).split(" ")[0]).append('\t').append(nvl(o.getModelNumber())).append('\t').append(nvl(o.getAddress())).append('\t').append(nvl(o.getLogisticsLink())).append('\t').append('\t').append(nvl(o.getBuyer())).append('\t').append(nvl(o.getPaymentAmount())).append('\t').append(nvl(o.getRebateAmount())).append('\t').append(mapDistribution(o.getDistributionMark())).append('\t').append(nvl(o.getStatus())).append("\n");
|
||||
sb.append(nvl(o.getRemark())).append('\t').append(nvl(o.getOrderId())).append('\t').append(fmt(o.getOrderTime()).split(" ")[0]).append('\t').append(nvl(orderFullModel(o))).append('\t').append(nvl(o.getAddress())).append('\t').append(nvl(o.getLogisticsLink())).append('\t').append('\t').append(nvl(o.getBuyer())).append('\t').append(nvl(o.getPaymentAmount())).append('\t').append(nvl(o.getRebateAmount())).append('\t').append(mapDistribution(o.getDistributionMark())).append('\t').append(nvl(o.getStatus())).append("\n");
|
||||
}
|
||||
return Collections.singletonList(sb.toString());
|
||||
}
|
||||
@@ -422,7 +425,7 @@ public class InstructionServiceImpl implements IInstructionService {
|
||||
String dm = e.getKey() != null ? e.getKey() : "未提供";
|
||||
List<JDOrder> orders = e.getValue();
|
||||
|
||||
Map<String, Long> byModel = orders.stream().collect(Collectors.groupingBy(JDOrder::getModelNumber, Collectors.counting()));
|
||||
Map<String, Long> byModel = orders.stream().collect(Collectors.groupingBy(this::orderFullModel, Collectors.counting()));
|
||||
|
||||
int totalCount = 0;
|
||||
StringBuilder summary = new StringBuilder();
|
||||
@@ -445,7 +448,7 @@ public class InstructionServiceImpl implements IInstructionService {
|
||||
|
||||
// 找到该型号价格最高的订单
|
||||
for (JDOrder order : orders) {
|
||||
if (model.equals(order.getModelNumber())) {
|
||||
if (model.equals(orderFullModel(order))) {
|
||||
JDOrder currentMax = groupMaxPriceOrders.get(model);
|
||||
if (currentMax == null ||
|
||||
(order.getPaymentAmount() != null &&
|
||||
@@ -467,7 +470,7 @@ public class InstructionServiceImpl implements IInstructionService {
|
||||
.append("单:").append(o.getRemark() != null ? o.getRemark() : "未提供").append("\n")
|
||||
.append("备注:").append(o.getStatus() != null ? o.getStatus() : " ").append("\n")
|
||||
.append("第三方单号:").append(o.getThirdPartyOrderNo() != null && !o.getThirdPartyOrderNo().isEmpty() ? o.getThirdPartyOrderNo() : "无").append("\n")
|
||||
.append("型号:").append(o.getModelNumber() != null ? o.getModelNumber() : "未提供").append("\n")
|
||||
.append("型号:").append(o.getModelNumber() != null || o.getModelShop() != null ? orderFullModel(o) : "未提供").append("\n")
|
||||
.append("地址:").append(o.getAddress() != null ? o.getAddress() : "未提供").append("\n")
|
||||
.append("物流链接:\n").append(o.getLogisticsLink() != null ? o.getLogisticsLink() : "无");
|
||||
}
|
||||
@@ -594,7 +597,7 @@ public class InstructionServiceImpl implements IInstructionService {
|
||||
List<JDOrder> orders = e.getValue();
|
||||
|
||||
Map<String, Long> byModel = orders.stream()
|
||||
.collect(Collectors.groupingBy(JDOrder::getModelNumber, Collectors.counting()));
|
||||
.collect(Collectors.groupingBy(this::orderFullModel, Collectors.counting()));
|
||||
|
||||
int totalCount = 0;
|
||||
StringBuilder summary = new StringBuilder();
|
||||
@@ -616,7 +619,7 @@ public class InstructionServiceImpl implements IInstructionService {
|
||||
|
||||
// 找到该型号价格最高的订单
|
||||
for (JDOrder order : orders) {
|
||||
if (model.equals(order.getModelNumber())) {
|
||||
if (model.equals(orderFullModel(order))) {
|
||||
JDOrder currentMax = buyerMaxPriceOrders.get(model);
|
||||
if (currentMax == null ||
|
||||
(order.getPaymentAmount() != null &&
|
||||
@@ -641,7 +644,7 @@ public class InstructionServiceImpl implements IInstructionService {
|
||||
.append("单:").append(o.getRemark() != null ? o.getRemark() : "未提供").append("\n")
|
||||
.append("备注:").append(o.getStatus() != null ? o.getStatus() : " ").append("\n")
|
||||
.append("第三方单号:").append(o.getThirdPartyOrderNo() != null && !o.getThirdPartyOrderNo().isEmpty() ? o.getThirdPartyOrderNo() : "无").append("\n")
|
||||
.append("型号:").append(o.getModelNumber() != null ? o.getModelNumber() : "未提供").append("\n")
|
||||
.append("型号:").append(o.getModelNumber() != null || o.getModelShop() != null ? orderFullModel(o) : "未提供").append("\n")
|
||||
.append("地址:").append(o.getAddress() != null ? o.getAddress() : "未提供").append("\n")
|
||||
.append("物流链接:\n").append(o.getLogisticsLink() != null ? o.getLogisticsLink() : "无");
|
||||
}
|
||||
@@ -874,7 +877,7 @@ public class InstructionServiceImpl implements IInstructionService {
|
||||
}
|
||||
}
|
||||
|
||||
String jf = productJdConfigService.getJdUrlByProductModel(modelNumber);
|
||||
String jf = productJdConfigService.getJdUrlByProductModel(jdOrderModelShopService.lookupModelBase(modelNumber));
|
||||
|
||||
StringBuilder order = new StringBuilder();
|
||||
order.append("生"+phone).append("\n").append(fenxiaoInfo).append("\n").append(modelNumber).append("\n").append(jf).append("\n").append(quantityStr).append("\n").append(address);
|
||||
@@ -928,10 +931,11 @@ public class InstructionServiceImpl implements IInstructionService {
|
||||
|
||||
String rawModelToken = extractLastNonChineseToken(addressLine);
|
||||
String modelNumber = sanitizeModel(rawModelToken);
|
||||
String lookupModel = jdOrderModelShopService.lookupModelBase(modelNumber);
|
||||
String cleanedAddress = addressLine.replaceAll("\\[.*?]", "").replace(rawModelToken, "").replaceAll("\\s+", " ").trim();
|
||||
String fullAddress = cleanedAddress + " 安装派送联系" + phone + (suffix.isEmpty() ? "" : "转" + suffix);
|
||||
|
||||
String jfLink = productJdConfigService.getJdUrlByProductModel(modelNumber);
|
||||
String jfLink = productJdConfigService.getJdUrlByProductModel(lookupModel);
|
||||
|
||||
StringBuilder sheng = new StringBuilder();
|
||||
sheng.append("生\n").append(distributionMark).append("\n").append(modelNumber).append("\n").append(jfLink != null ? jfLink : "").append("\n")
|
||||
@@ -956,7 +960,7 @@ public class InstructionServiceImpl implements IInstructionService {
|
||||
String distributionMark = split[1];
|
||||
String link = sanitizeLink(split[3]);
|
||||
if ((link == null || link.isEmpty()) && shouldAutoFillLink(distributionMark)) {
|
||||
String fetched = productJdConfigService.getJdUrlByProductModel(split[2]);
|
||||
String fetched = productJdConfigService.getJdUrlByProductModel(jdOrderModelShopService.lookupModelBase(split[2]));
|
||||
if (fetched != null && !fetched.isEmpty()) {
|
||||
link = fetched;
|
||||
}
|
||||
@@ -1148,7 +1152,7 @@ public class InstructionServiceImpl implements IInstructionService {
|
||||
}
|
||||
|
||||
// 获取转链链接
|
||||
String jf = productJdConfigService.getJdUrlByProductModel(modelNumber);
|
||||
String jf = productJdConfigService.getJdUrlByProductModel(jdOrderModelShopService.lookupModelBase(modelNumber));
|
||||
|
||||
// 构建"生"指令格式
|
||||
StringBuilder sheng = new StringBuilder();
|
||||
@@ -1453,7 +1457,7 @@ public class InstructionServiceImpl implements IInstructionService {
|
||||
if (order == null) {
|
||||
return null;
|
||||
}
|
||||
String model = order.getModelNumber();
|
||||
String model = jdOrderModelShopService.fullModel(order);
|
||||
String address = order.getAddress();
|
||||
String logistics = extractOriginalLogisticsLinkNew(originalInput);
|
||||
if (logistics == null && order.getLogisticsLink() != null) {
|
||||
@@ -1515,6 +1519,7 @@ public class InstructionServiceImpl implements IInstructionService {
|
||||
String originalInput = input.trim().replace("元", "");
|
||||
// 与 JDUtil.parseOrderFromText 一致的模板字段
|
||||
JDOrder order = parseOrderFromText(originalInput);
|
||||
jdOrderModelShopService.normalizeOrder(order);
|
||||
|
||||
// 字段校验并返回缺失项(根据新模板格式,单号存储在remark字段中)
|
||||
StringBuilder missing = new StringBuilder();
|
||||
@@ -1658,7 +1663,7 @@ public class InstructionServiceImpl implements IInstructionService {
|
||||
sb.append("第三方单号:").append(order.getThirdPartyOrderNo().trim()).append("\n");
|
||||
}
|
||||
sb.append("分销标记:").append(nvl(order.getDistributionMark())).append("\n");
|
||||
sb.append("型号:").append(nvl(order.getModelNumber())).append("\n");
|
||||
sb.append("型号:").append(nvl(jdOrderModelShopService.fullModel(order))).append("\n");
|
||||
sb.append("下单人:").append(nvl(order.getBuyer())).append("\n");
|
||||
sb.append("付款:").append(order.getPaymentAmount() != null ? order.getPaymentAmount().toString() : "").append("\n");
|
||||
sb.append("后返:").append(order.getRebateAmount() != null ? order.getRebateAmount().toString() : "").append("\n");
|
||||
@@ -1692,6 +1697,11 @@ public class InstructionServiceImpl implements IInstructionService {
|
||||
return first;
|
||||
}
|
||||
|
||||
/** 对外展示 / 录单文案用的完整型号(本体 + 店铺前缀) */
|
||||
private String orderFullModel(JDOrder order) {
|
||||
return order == null ? "" : jdOrderModelShopService.fullModel(order);
|
||||
}
|
||||
|
||||
private boolean isEmpty(String s) {
|
||||
return s == null || s.isEmpty();
|
||||
}
|
||||
@@ -1730,7 +1740,7 @@ public class InstructionServiceImpl implements IInstructionService {
|
||||
sb.append("下单地址(注意带分机):\n");
|
||||
sb.append(order.getAddress() != null ? order.getAddress() : "").append("\n");
|
||||
sb.append("—————————\n");
|
||||
sb.append("型号:").append(order.getModelNumber() != null ? order.getModelNumber() : "").append("\n");
|
||||
sb.append("型号:").append(orderFullModel(order)).append("\n");
|
||||
sb.append("\n");
|
||||
sb.append("下单人(需填):\n");
|
||||
sb.append(order.getBuyer() != null ? order.getBuyer() : "").append("\n");
|
||||
@@ -1772,7 +1782,7 @@ public class InstructionServiceImpl implements IInstructionService {
|
||||
sb.append("分销标记:").append(order.getDistributionMark() != null ? order.getDistributionMark() : "").append("\n");
|
||||
sb.append("第三方单号:").append(order.getThirdPartyOrderNo() != null ? order.getThirdPartyOrderNo() : "").append("\n");
|
||||
sb.append("型号:\n");
|
||||
sb.append(order.getModelNumber() != null ? order.getModelNumber() : "").append("\n");
|
||||
sb.append(orderFullModel(order)).append("\n");
|
||||
sb.append("链接:\n");
|
||||
sb.append(order.getLink() != null ? order.getLink() : "").append("\n");
|
||||
sb.append("下单付款:\n");
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
package com.ruoyi.jarvis.service.impl;
|
||||
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.jarvis.domain.JDOrder;
|
||||
import com.ruoyi.jarvis.domain.dto.QuickRecordModelShopOption;
|
||||
import com.ruoyi.jarvis.mapper.JDOrderMapper;
|
||||
import com.ruoyi.jarvis.service.IJDOrderModelShopService;
|
||||
import com.ruoyi.jarvis.util.QuickRecordModelShopOptionUtil;
|
||||
import com.ruoyi.system.service.ISysConfigService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Service
|
||||
public class JDOrderModelShopServiceImpl implements IJDOrderModelShopService {
|
||||
|
||||
@Autowired
|
||||
private ISysConfigService sysConfigService;
|
||||
|
||||
@Autowired
|
||||
private JDOrderMapper jdOrderMapper;
|
||||
|
||||
@Override
|
||||
public List<QuickRecordModelShopOption> loadShopOptions() {
|
||||
String raw = sysConfigService.selectConfigByKey(QuickRecordModelShopOptionUtil.CONFIG_KEY);
|
||||
return QuickRecordModelShopOptionUtil.parseOptions(raw);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void normalizeOrder(JDOrder order) {
|
||||
QuickRecordModelShopOptionUtil.normalizeOrderModelShop(order, loadShopOptions());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String fullModel(JDOrder order) {
|
||||
return QuickRecordModelShopOptionUtil.fullModelNumber(order);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String lookupModelBase(String rawModel) {
|
||||
return QuickRecordModelShopOptionUtil.lookupModelBase(rawModel, loadShopOptions());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> migrateExistingOrders() {
|
||||
List<QuickRecordModelShopOption> options = loadShopOptions();
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
if (options.isEmpty()) {
|
||||
result.put("updated", 0);
|
||||
result.put("skipped", 0);
|
||||
result.put("message", "未配置店铺选项(quickRecord.modelShopOptions),请先配置后再迁移");
|
||||
return result;
|
||||
}
|
||||
List<JDOrder> candidates = jdOrderMapper.selectOrdersPendingModelShopMigration();
|
||||
int updated = 0;
|
||||
int skipped = 0;
|
||||
for (JDOrder row : candidates) {
|
||||
String beforeBase = StringUtils.trim(row.getModelNumber());
|
||||
String beforeShop = StringUtils.trim(row.getModelShop());
|
||||
normalizeOrder(row);
|
||||
String afterBase = StringUtils.trim(row.getModelNumber());
|
||||
String afterShop = StringUtils.trim(row.getModelShop());
|
||||
if (beforeBase.equals(afterBase) && beforeShop.equals(afterShop)) {
|
||||
skipped++;
|
||||
continue;
|
||||
}
|
||||
jdOrderMapper.updateModelShopFields(row.getId(), row.getModelNumber(), row.getModelShop());
|
||||
updated++;
|
||||
}
|
||||
result.put("updated", updated);
|
||||
result.put("skipped", skipped);
|
||||
result.put("total", candidates.size());
|
||||
result.put("message", String.format("迁移完成:更新 %d 条,无变化 %d 条(共扫描 %d 条)", updated, skipped, candidates.size()));
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@ package com.ruoyi.jarvis.service.impl;
|
||||
import com.ruoyi.jarvis.domain.JDOrder;
|
||||
import com.ruoyi.jarvis.domain.dto.QuickRecordModelOption;
|
||||
import com.ruoyi.jarvis.mapper.JDOrderMapper;
|
||||
import com.ruoyi.jarvis.service.IJDOrderModelShopService;
|
||||
import com.ruoyi.jarvis.service.IJDOrderProfitService;
|
||||
import com.ruoyi.jarvis.service.IJDOrderService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -19,6 +20,9 @@ public class JDOrderServiceImpl implements IJDOrderService {
|
||||
@Autowired
|
||||
private IJDOrderProfitService jdOrderProfitService;
|
||||
|
||||
@Autowired
|
||||
private IJDOrderModelShopService jdOrderModelShopService;
|
||||
|
||||
@Override
|
||||
public List<JDOrder> selectJDOrderList(JDOrder jdOrder) {
|
||||
return jdOrderMapper.selectJDOrderList(jdOrder);
|
||||
@@ -36,12 +40,14 @@ public class JDOrderServiceImpl implements IJDOrderService {
|
||||
|
||||
@Override
|
||||
public int insertJDOrder(JDOrder jdOrder) {
|
||||
jdOrderModelShopService.normalizeOrder(jdOrder);
|
||||
jdOrderProfitService.recalculate(jdOrder);
|
||||
return jdOrderMapper.insertJDOrder(jdOrder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int updateJDOrder(JDOrder jdOrder) {
|
||||
jdOrderModelShopService.normalizeOrder(jdOrder);
|
||||
return jdOrderMapper.updateJDOrder(jdOrder);
|
||||
}
|
||||
|
||||
@@ -87,6 +93,11 @@ public class JDOrderServiceImpl implements IJDOrderService {
|
||||
public List<QuickRecordModelOption> selectQuickRecordModelOptions() {
|
||||
return jdOrderMapper.selectQuickRecordModelOptions();
|
||||
}
|
||||
|
||||
@Override
|
||||
public java.util.Map<String, Object> migrateModelShopSplit() {
|
||||
return jdOrderModelShopService.migrateExistingOrders();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.ruoyi.jarvis.util;
|
||||
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.jarvis.domain.dto.QuickRecordModelShopOption;
|
||||
import com.ruoyi.jarvis.domain.JDOrder;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
@@ -88,4 +89,58 @@ public final class QuickRecordModelShopOptionUtil {
|
||||
}
|
||||
return new String[] { full, "" };
|
||||
}
|
||||
|
||||
public static String fullModelNumber(String base, String shop) {
|
||||
String b = StringUtils.trim(base);
|
||||
String s = StringUtils.trim(shop);
|
||||
if (StringUtils.isEmpty(b)) {
|
||||
return s;
|
||||
}
|
||||
if (StringUtils.isEmpty(s)) {
|
||||
return b;
|
||||
}
|
||||
if (b.endsWith(s)) {
|
||||
return b;
|
||||
}
|
||||
return b + s;
|
||||
}
|
||||
|
||||
public static String fullModelNumber(JDOrder order) {
|
||||
if (order == null) {
|
||||
return "";
|
||||
}
|
||||
return fullModelNumber(order.getModelNumber(), order.getModelShop());
|
||||
}
|
||||
|
||||
/**
|
||||
* 落库前归一化:model_number 仅存本体,model_shop 存店铺前缀。
|
||||
* 若 model_shop 已有值则仅纠正 model_number 仍带后缀的情况。
|
||||
*/
|
||||
public static void normalizeOrderModelShop(JDOrder order, List<QuickRecordModelShopOption> options) {
|
||||
if (order == null) {
|
||||
return;
|
||||
}
|
||||
String base = StringUtils.trim(order.getModelNumber());
|
||||
String shop = StringUtils.trim(order.getModelShop());
|
||||
if (StringUtils.isNotEmpty(shop)) {
|
||||
if (StringUtils.isNotEmpty(base) && base.endsWith(shop) && base.length() > shop.length()) {
|
||||
order.setModelNumber(base.substring(0, base.length() - shop.length()));
|
||||
}
|
||||
order.setModelShop(shop);
|
||||
return;
|
||||
}
|
||||
if (StringUtils.isEmpty(base)) {
|
||||
order.setModelShop("");
|
||||
return;
|
||||
}
|
||||
String[] split = splitModelSuffix(base, options);
|
||||
order.setModelNumber(split[0]);
|
||||
order.setModelShop(split[1]);
|
||||
}
|
||||
|
||||
/** 京粉/型号配置 lookup 用本体型号 */
|
||||
public static String lookupModelBase(String rawModel, List<QuickRecordModelShopOption> options) {
|
||||
String[] split = splitModelSuffix(StringUtils.trim(rawModel), options);
|
||||
return split[0];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user