优化
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
package com.baiyue.firstleg.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@TableName("fl_price_warehouse_mapping")
|
||||
public class PriceWarehouseMappingEntity {
|
||||
@TableId(type = IdType.ASSIGN_ID)
|
||||
private Long id;
|
||||
private String sourceType;
|
||||
private String sourceValue;
|
||||
private Long warehouseId;
|
||||
private String warehouseCode;
|
||||
private String warehouseType;
|
||||
private String status;
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.baiyue.firstleg.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baiyue.firstleg.entity.PriceWarehouseMappingEntity;
|
||||
|
||||
public interface PriceWarehouseMappingMapper extends BaseMapper<PriceWarehouseMappingEntity> {}
|
||||
@@ -7,11 +7,13 @@ import com.baiyue.firstleg.entity.PriceBookChannelEntity;
|
||||
import com.baiyue.firstleg.entity.PriceBookVersionEntity;
|
||||
import com.baiyue.firstleg.entity.PriceChannelCatalogEntity;
|
||||
import com.baiyue.firstleg.entity.PriceOriginAliasEntity;
|
||||
import com.baiyue.firstleg.entity.PriceWarehouseMappingEntity;
|
||||
import com.baiyue.firstleg.mapper.CarrierFbaRateMapper;
|
||||
import com.baiyue.firstleg.mapper.PriceBookChannelMapper;
|
||||
import com.baiyue.firstleg.mapper.PriceBookVersionMapper;
|
||||
import com.baiyue.firstleg.mapper.PriceChannelCatalogMapper;
|
||||
import com.baiyue.firstleg.mapper.PriceOriginAliasMapper;
|
||||
import com.baiyue.firstleg.mapper.PriceWarehouseMappingMapper;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@@ -25,6 +27,7 @@ public class PriceBookRepository {
|
||||
@Resource private CarrierFbaRateMapper rates;
|
||||
@Resource private PriceChannelCatalogMapper catalog;
|
||||
@Resource private PriceOriginAliasMapper aliases;
|
||||
@Resource private PriceWarehouseMappingMapper warehouseMappings;
|
||||
|
||||
public int insertVersion(PriceBookVersionEntity value) { return versions.insert(value); }
|
||||
public int updateVersion(PriceBookVersionEntity value) {
|
||||
@@ -109,6 +112,11 @@ public class PriceBookRepository {
|
||||
return aliases.selectList(new LambdaQueryWrapper<PriceOriginAliasEntity>()
|
||||
.eq(PriceOriginAliasEntity::getStatus, "ACTIVE"));
|
||||
}
|
||||
public List<PriceWarehouseMappingEntity> activeWarehouseMappings() {
|
||||
return warehouseMappings.selectList(new LambdaQueryWrapper<PriceWarehouseMappingEntity>()
|
||||
.eq(PriceWarehouseMappingEntity::getStatus, "ACTIVE")
|
||||
.orderByAsc(PriceWarehouseMappingEntity::getId));
|
||||
}
|
||||
public void supersede(PriceBookVersionEntity old, LocalDateTime at, long operatorId) {
|
||||
old.setStatus("SUPERSEDED"); old.setSupersededAt(at); old.setUpdatedBy(operatorId); old.setUpdatedAt(at);
|
||||
updateVersion(old);
|
||||
|
||||
@@ -16,6 +16,7 @@ import com.baiyue.firstleg.entity.CarrierFbaRateEntity;
|
||||
import com.baiyue.firstleg.entity.PriceBookChannelEntity;
|
||||
import com.baiyue.firstleg.entity.PriceBookVersionEntity;
|
||||
import com.baiyue.firstleg.entity.PriceChannelCatalogEntity;
|
||||
import com.baiyue.firstleg.entity.PriceWarehouseMappingEntity;
|
||||
import com.baiyue.firstleg.pricing.importer.PriceWorkbookParseResult;
|
||||
import com.baiyue.firstleg.pricing.importer.PriceWorkbookParser;
|
||||
import com.baiyue.firstleg.repository.PriceBookRepository;
|
||||
@@ -262,7 +263,37 @@ public class PlatformPriceBookService {
|
||||
List<PriceBookDtos.ParseIssue> issues = parsed.issues().stream().map(value -> issue(
|
||||
value.severity() == PriceWorkbookParseResult.Severity.ERROR ? "BLOCKING" : "WARNING",
|
||||
value.code(), value.message(), value.sheetName(), value.rowNumber(), null)).toList();
|
||||
return new ParsedPriceBook(channels, rates, issues);
|
||||
return new ParsedPriceBook(channels, applyInitializedWarehouseMappings(rates), issues);
|
||||
}
|
||||
|
||||
private List<PriceBookDtos.ParsedRate> applyInitializedWarehouseMappings(List<PriceBookDtos.ParsedRate> rates) {
|
||||
Map<String, PriceWarehouseMappingEntity> origins = new HashMap<>();
|
||||
Map<String, PriceWarehouseMappingEntity> overseas = new HashMap<>();
|
||||
for (PriceWarehouseMappingEntity mapping : repository.activeWarehouseMappings()) {
|
||||
if (mapping == null || mapping.getWarehouseId() == null || mapping.getWarehouseId() <= 0) continue;
|
||||
if ("ORIGIN_CODE".equals(mapping.getSourceType())
|
||||
&& "DOMESTIC".equals(mapping.getWarehouseType())
|
||||
&& mappingKey(mapping.getSourceValue()).equals(mappingKey(mapping.getWarehouseCode()))) {
|
||||
origins.putIfAbsent(mappingKey(mapping.getSourceValue()), mapping);
|
||||
} else if ("OVERSEAS_NAME".equals(mapping.getSourceType())
|
||||
&& "OVERSEAS".equals(mapping.getWarehouseType())
|
||||
&& StringUtils.hasText(mapping.getWarehouseCode())) {
|
||||
overseas.putIfAbsent(mappingKey(mapping.getSourceValue()), mapping);
|
||||
}
|
||||
}
|
||||
return rates.stream().map(rate -> {
|
||||
PriceWarehouseMappingEntity origin = origins.get(mappingKey(rate.originWarehouseCode()));
|
||||
PriceWarehouseMappingEntity destination = rate.destinationType() == PricingDestinationType.OVERSEAS
|
||||
? overseas.get(mappingKey(rate.destinationName())) : null;
|
||||
return new PriceBookDtos.ParsedRate(rate.id(), rate.channelCode(), rate.priceModel(),
|
||||
origin == null ? rate.originWarehouseId() : origin.getWarehouseId(),
|
||||
rate.originWarehouseCode(), rate.originWarehouseName(),
|
||||
destination == null ? rate.destinationCode() : mappingKey(destination.getWarehouseCode()), rate.destinationType(),
|
||||
destination == null ? rate.destinationWarehouseId() : destination.getWarehouseId(),
|
||||
rate.destinationName(), rate.regionCode(), rate.pricingTaxMode(), rate.chargeUnit(), rate.weightFromKg(),
|
||||
rate.unitPrice(), rate.currency(), rate.sourceSheetName(), rate.sourceRowNumber(),
|
||||
rate.sourceDestinationText(), rate.remark());
|
||||
}).toList();
|
||||
}
|
||||
|
||||
private PriceBookDtos.ParsedRate parsedRate(String channelCode, PriceModel model,
|
||||
|
||||
Reference in New Issue
Block a user