diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/MabangSkuJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/MabangSkuJob.java index 8354b500f..c2919c741 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/MabangSkuJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/MabangSkuJob.java @@ -8,6 +8,7 @@ import org.codehaus.jettison.json.JSONObject; import org.jeecg.modules.business.domain.api.mabang.doSearchSkuListNew.*; import org.jeecg.modules.business.domain.api.mabang.doSearchSkuListNew.SkuData; import org.jeecg.modules.business.entity.*; +import org.jeecg.modules.business.mongoService.SkuMongoService; import org.jeecg.modules.business.service.*; import org.quartz.Job; import org.quartz.JobDataMap; @@ -39,8 +40,6 @@ public class MabangSkuJob implements Job { @Setter private ISkuListMabangService skuListMabangService; @Autowired - private MigrationService migrationService; - @Autowired private EmailService emailService; @Autowired private FreeMarkerConfigurer freemarkerConfigurer; @@ -48,6 +47,8 @@ public class MabangSkuJob implements Job { Environment env; private static final Integer DEFAULT_NUMBER_OF_DAYS = 5; private static final DateType DEFAULT_DATE_TYPE = DateType.CREATE; + @Autowired + private SkuMongoService skuMongoService; @Override public void execute(JobExecutionContext context) throws JobExecutionException { @@ -114,7 +115,7 @@ public class MabangSkuJob implements Job { // mongo sync after transaction for(Sku sku : newSkusMap.keySet()) { try { - migrationService.migrateOneSku(sku); + skuMongoService.migrateOneSku(sku); } catch (Exception e) { log.error("Error while migrating skuId: {}", sku.getId()); log.error(e.getMessage()); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/MongoMigrationJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/MongoMigrationJob.java index c1903e850..3a1cba63b 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/MongoMigrationJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/MongoMigrationJob.java @@ -4,8 +4,8 @@ import lombok.extern.slf4j.Slf4j; import org.codehaus.jettison.json.JSONException; import org.codehaus.jettison.json.JSONObject; import org.jeecg.modules.business.entity.Sku; +import org.jeecg.modules.business.mongoService.SkuMongoService; import org.jeecg.modules.business.service.ISkuService; -import org.jeecg.modules.business.service.MigrationService; import org.quartz.Job; import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; @@ -19,11 +19,10 @@ import java.util.List; @Slf4j @Component public class MongoMigrationJob implements Job { - - @Autowired - private MigrationService migrationService; @Autowired private ISkuService skuService; + @Autowired + private SkuMongoService skuMongoService; @Override public void execute(JobExecutionContext context) throws JobExecutionException { @@ -45,13 +44,13 @@ public class MongoMigrationJob implements Job { } if(skuList.isEmpty()) { log.info("Migrating all skus .."); - migrationService.migrateSkuData(); + skuMongoService.migrateSkuData(); } else { log.info("Migrating skus: {}", skuList); for(String erpCode : skuList) { Sku sku = skuService.getByErpCode(erpCode); - migrationService.migrateOneSku(sku); + skuMongoService.migrateOneSku(sku); } } log.info("MongoMigrationJob end .."); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mongoRepository/SkuRepository.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mongoRepository/SkuRepository.java index b2fdc68f7..d93506fdd 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mongoRepository/SkuRepository.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mongoRepository/SkuRepository.java @@ -3,6 +3,7 @@ package org.jeecg.modules.business.mongoRepository; import org.jeecg.modules.business.model.SkuDocument; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.data.mongodb.repository.Query; +import java.util.List; /** * @Description: Mongo Repository for Sku Collection @@ -11,10 +12,10 @@ import org.springframework.data.mongodb.repository.Query; */ public interface SkuRepository extends MongoRepository { @Query("{'erpCode': ?0}") - SkuDocument findByErpCode(String erpCode); + List findByErpCode(String erpCode); @Query("{'skuId': ?0}") - SkuDocument findBySkuId(String skuId); + List findBySkuId(String skuId); long count(); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mongoService/SkuMongoService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mongoService/SkuMongoService.java index 6d9b8de00..0f9607fd8 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mongoService/SkuMongoService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mongoService/SkuMongoService.java @@ -6,12 +6,13 @@ import org.jeecg.modules.business.entity.SkuPrice; import org.jeecg.modules.business.entity.SkuWeight; import org.jeecg.modules.business.model.SkuDocument; import org.jeecg.modules.business.vo.SkuOrderPage; +import org.springframework.transaction.annotation.Transactional; import java.util.List; public interface SkuMongoService { - SkuDocument findByErpCode(String erpCode); - SkuDocument findBySkuId(String skuId); + List findByErpCode(String erpCode); + List findBySkuId(String skuId); void findAndReplace(String field, String value, SkuDocument skuDocument); @@ -34,4 +35,9 @@ public interface SkuMongoService { void updateSkuFromMabangSync(Sku sku); List textSearch(String keywords); + + @Transactional + void migrateSkuData(); + + void migrateOneSku(Sku sku); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mongoService/impl/SkuMongoServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mongoService/impl/SkuMongoServiceImpl.java index 239475d41..a68215e7b 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mongoService/impl/SkuMongoServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mongoService/impl/SkuMongoServiceImpl.java @@ -1,14 +1,11 @@ package org.jeecg.modules.business.mongoService.impl; -import com.mongodb.client.result.UpdateResult; import lombok.extern.slf4j.Slf4j; -import org.jeecg.modules.business.entity.Sku; -import org.jeecg.modules.business.entity.SkuDeclaredValue; -import org.jeecg.modules.business.entity.SkuPrice; -import org.jeecg.modules.business.entity.SkuWeight; +import org.jeecg.modules.business.entity.*; import org.jeecg.modules.business.model.SkuDocument; import org.jeecg.modules.business.mongoRepository.SkuRepository; import org.jeecg.modules.business.mongoService.SkuMongoService; +import org.jeecg.modules.business.service.*; import org.jeecg.modules.business.vo.SkuOrderPage; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.FindAndModifyOptions; @@ -16,6 +13,7 @@ import org.springframework.data.mongodb.core.FindAndReplaceOptions; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.*; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; @@ -25,18 +23,28 @@ import java.util.stream.Collectors; @Component @Slf4j public class SkuMongoServiceImpl implements SkuMongoService { + @Autowired + private ISkuService skuService; @Autowired private MongoTemplate mongoTemplate; @Autowired private SkuRepository skuRepository; + @Autowired + private ISkuWeightService skuWeightService; + @Autowired + private ISkuDeclaredValueService skuDeclaredValueService; + @Autowired + private ISkuPriceService skuPriceService; + @Autowired + private ISensitiveAttributeService sensitiveAttributeService; @Override - public SkuDocument findByErpCode(String erpCode) { + public List findByErpCode(String erpCode) { return skuRepository.findByErpCode(erpCode); } @Override - public SkuDocument findBySkuId(String skuId) { + public List findBySkuId(String skuId) { return skuRepository.findBySkuId(skuId); } @@ -126,7 +134,26 @@ public class SkuMongoServiceImpl implements SkuMongoService { @Override public void upsertSkuWeight(SkuWeight skuWeight) { - SkuDocument skuDocument = findBySkuId(skuWeight.getSkuId()); + List skuDocuments = findBySkuId(skuWeight.getSkuId()); + SkuDocument skuDocument; + if(skuDocuments == null || skuDocuments.isEmpty()) { + log.error(" SkuDocument with skuId was {} not found.", skuWeight.getSkuId()); + String obsoleteErpCode = skuService.getById(skuWeight.getSkuId()).getErpCode(); + List obsoleteDocuments = findByErpCode(obsoleteErpCode); + if(obsoleteDocuments != null && !obsoleteDocuments.isEmpty()) { + log.error("Deleting obsolete SkuDocuments with erpCode : {} ", obsoleteErpCode); + obsoleteDocuments.forEach(obsoleteDocument -> deleteBySkuId(obsoleteDocument.getSkuId())); + } + log.info("Pulling Sku from DB to Mongo"); + migrateOneSku(skuService.getById(skuWeight.getSkuId())); + } + else if(skuDocuments.size() > 1) { + log.error("Multiple SkuDocument with skuId was {} found.", skuWeight.getSkuId()); + skuDocuments.forEach(document -> deleteBySkuId(document.getSkuId())); + log.info("Pulling Sku from DB to Mongo"); + migrateOneSku(skuService.getById(skuWeight.getSkuId())); + } + skuDocument = findBySkuId(skuWeight.getSkuId()).get(0); Date latestWeightInDB = Optional.ofNullable(skuDocument.getLatestSkuWeight()) .map(SkuDocument.LatestSkuWeight::getEffectiveDate) .orElse(null); @@ -255,4 +282,117 @@ public class SkuMongoServiceImpl implements SkuMongoService { .orElse(null)); return skuOrderPage; } + + @Transactional + @Override + public void migrateSkuData() { + List skuList = skuService.listSkus(); + log.info("MigrateSkuData: migrating {} skus.", skuList.size()); + + int count = 0; + for(Sku sku : skuList) { + if(count == 0) { + log.info("MigrateSkuData progressions: [----------] 0%"); + } + if(count == skuList.size() / 10) { + log.info("MigrateSkuData progressions: [█---------] 10%"); + } + if(count == skuList.size() / 5) { + log.info("MigrateSkuData progressions: [██--------] 20%"); + } + if(count == skuList.size() / 10 * 3) { + log.info("MigrateSkuData progressions: [███-------] 30%"); + } + if(count == skuList.size() / 10 * 4) { + log.info("MigrateSkuData progressions: [████------] 40%"); + } + if(count == skuList.size() / 2) { + log.info("MigrateSkuData progressions: [█████-----] 50%"); + } + if(count == skuList.size() / 10 * 6) { + log.info("MigrateSkuData progressions: [██████----] 60%"); + } + if(count == skuList.size() / 10 * 7) { + log.info("MigrateSkuData progressions: [███████---] 70%"); + } + if(count == skuList.size() / 10 * 8) { + log.info("MigrateSkuData progressions: [█████████-] 90%"); + } + if(count == skuList.size() - 1) { + log.info("MigrateSkuData progressions: [██████████] 100%"); + } + count++; + try { + migrateOneSku(sku); + } catch (Exception e) { + log.error("Error while migrating skuId: {}", sku.getId()); + log.error(e.getMessage()); + } + } + } + + @Override + public void migrateOneSku(Sku sku) { + + SkuWeight latestWeight = skuWeightService.getBySkuId(sku.getId()); + SkuDeclaredValue latestDeclaredValue = skuDeclaredValueService.getLatestBySkuId(sku.getId()); + SkuPrice latestPrice = skuPriceService.getLatestBySkuId(sku.getId()); + SensitiveAttribute sensitiveAttribute = sensitiveAttributeService.getById(sku.getSensitiveAttributeId()); + + if(sensitiveAttribute == null) { + log.error("SensitiveAttribute not found for skuId: {}", sku.getId()); + throw new RuntimeException("SensitiveAttribute not found for skuId: " + sku.getId()); + } + + SkuDocument skuDocument = SkuDocument.builder() + .skuId(sku.getId()) + .createBy(sku.getCreateBy()) + .createTime(sku.getCreateTime()) + .updateBy(sku.getUpdateBy()) + .updateTime(sku.getUpdateTime()) + .erpCode(sku.getErpCode()) + .zhName(sku.getZhName()) + .enName(sku.getEnName()) + .invoiceName(sku.getInvoiceName()) + .availableAmount(sku.getAvailableAmount()) + .purchasingAmount(sku.getPurchasingAmount()) + .imageSource(sku.getImageSource()) + .shippingDiscount(sku.getShippingDiscount()) + .serviceFee(sku.getServiceFee()) + .status(sku.getStatus()) + .moq(sku.getMoq()) + .isGift(sku.getIsGift()) + .sensitiveAttribute(SkuDocument.SensitiveAttribute.builder() + .zhName(sensitiveAttribute.getZhName()) + .enName(sensitiveAttribute.getEnName()) + .build() + ) + .build(); + if(latestWeight != null) { + skuDocument.setLatestSkuWeight(SkuDocument.LatestSkuWeight.builder() + .weight(latestWeight.getWeight()) + .effectiveDate(latestWeight.getEffectiveDate()) + .build() + ); + } + if(latestPrice != null) { + skuDocument.setLatestSkuPrice(SkuDocument.LatestSkuPrice.builder() + .date(latestPrice.getDate()) + .price(latestPrice.getPrice()) + .discountedPrice(latestPrice.getDiscountedPrice()) + .threshold(latestPrice.getThreshold()) + .priceRmb(latestPrice.getPriceRmb()) + .discountedPriceRmb(latestPrice.getDiscountedPriceRmb()) + .build() + ); + } + if(latestDeclaredValue != null) { + skuDocument.setLatestDeclaredValue(SkuDocument.LatestDeclaredValue.builder() + .declaredValue(latestDeclaredValue.getDeclaredValue()) + .effectiveDate(latestDeclaredValue.getEffectiveDate()) + .build() + ); + } + findAndReplace("erpCode", sku.getErpCode(), skuDocument); + } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/MigrationService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/MigrationService.java deleted file mode 100644 index 957661c15..000000000 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/MigrationService.java +++ /dev/null @@ -1,143 +0,0 @@ -package org.jeecg.modules.business.service; - -import lombok.extern.slf4j.Slf4j; -import org.jeecg.modules.business.entity.*; -import org.jeecg.modules.business.model.SkuDocument; -import org.jeecg.modules.business.mongoRepository.SkuRepository; -import org.jeecg.modules.business.mongoService.SkuMongoService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -@Slf4j -@Service -public class MigrationService { - // MySql - @Autowired - ISensitiveAttributeService sensitiveAttributeService; - @Autowired - ISkuService skuService; - @Autowired - ISkuDeclaredValueService skuDeclaredValueService; - @Autowired - ISkuWeightService skuWeightService; - @Autowired - ISkuPriceService skuPriceService; - @Autowired - SkuMongoService skuMongoService; - // Mongo - @Autowired - private SkuRepository skuRepository; - - @Transactional - public void migrateSkuData() { - List skuList = skuService.listSkus(); - log.info("MigrateSkuData: migrating {} skus.", skuList.size()); - - int count = 0; - for(Sku sku : skuList) { - if(count == 0) { - log.info("MigrateSkuData progressions: [----------] 0%"); - } - if(count == skuList.size() / 10) { - log.info("MigrateSkuData progressions: [█---------] 10%"); - } - if(count == skuList.size() / 5) { - log.info("MigrateSkuData progressions: [██--------] 20%"); - } - if(count == skuList.size() / 10 * 3) { - log.info("MigrateSkuData progressions: [███-------] 30%"); - } - if(count == skuList.size() / 10 * 4) { - log.info("MigrateSkuData progressions: [████------] 40%"); - } - if(count == skuList.size() / 2) { - log.info("MigrateSkuData progressions: [█████-----] 50%"); - } - if(count == skuList.size() / 10 * 6) { - log.info("MigrateSkuData progressions: [██████----] 60%"); - } - if(count == skuList.size() / 10 * 7) { - log.info("MigrateSkuData progressions: [███████---] 70%"); - } - if(count == skuList.size() / 10 * 8) { - log.info("MigrateSkuData progressions: [█████████-] 90%"); - } - if(count == skuList.size() - 1) { - log.info("MigrateSkuData progressions: [██████████] 100%"); - } - count++; - try { - migrateOneSku(sku); - } catch (Exception e) { - log.error("Error while migrating skuId: {}", sku.getId()); - log.error(e.getMessage()); - } - } - } - public void migrateOneSku(Sku sku) { - - SkuWeight latestWeight = skuWeightService.getBySkuId(sku.getId()); - SkuDeclaredValue latestDeclaredValue = skuDeclaredValueService.getLatestBySkuId(sku.getId()); - SkuPrice latestPrice = skuPriceService.getLatestBySkuId(sku.getId()); - SensitiveAttribute sensitiveAttribute = sensitiveAttributeService.getById(sku.getSensitiveAttributeId()); - - if(sensitiveAttribute == null) { - log.error("SensitiveAttribute not found for skuId: {}", sku.getId()); - throw new RuntimeException("SensitiveAttribute not found for skuId: " + sku.getId()); - } - - SkuDocument skuDocument = SkuDocument.builder() - .skuId(sku.getId()) - .createBy(sku.getCreateBy()) - .createTime(sku.getCreateTime()) - .updateBy(sku.getUpdateBy()) - .updateTime(sku.getUpdateTime()) - .erpCode(sku.getErpCode()) - .zhName(sku.getZhName()) - .enName(sku.getEnName()) - .invoiceName(sku.getInvoiceName()) - .availableAmount(sku.getAvailableAmount()) - .purchasingAmount(sku.getPurchasingAmount()) - .imageSource(sku.getImageSource()) - .shippingDiscount(sku.getShippingDiscount()) - .serviceFee(sku.getServiceFee()) - .status(sku.getStatus()) - .moq(sku.getMoq()) - .isGift(sku.getIsGift()) - .sensitiveAttribute(SkuDocument.SensitiveAttribute.builder() - .zhName(sensitiveAttribute.getZhName()) - .enName(sensitiveAttribute.getEnName()) - .build() - ) - .build(); - if(latestWeight != null) { - skuDocument.setLatestSkuWeight(SkuDocument.LatestSkuWeight.builder() - .weight(latestWeight.getWeight()) - .effectiveDate(latestWeight.getEffectiveDate()) - .build() - ); - } - if(latestPrice != null) { - skuDocument.setLatestSkuPrice(SkuDocument.LatestSkuPrice.builder() - .date(latestPrice.getDate()) - .price(latestPrice.getPrice()) - .discountedPrice(latestPrice.getDiscountedPrice()) - .threshold(latestPrice.getThreshold()) - .priceRmb(latestPrice.getPriceRmb()) - .discountedPriceRmb(latestPrice.getDiscountedPriceRmb()) - .build() - ); - } - if(latestDeclaredValue != null) { - skuDocument.setLatestDeclaredValue(SkuDocument.LatestDeclaredValue.builder() - .declaredValue(latestDeclaredValue.getDeclaredValue()) - .effectiveDate(latestDeclaredValue.getEffectiveDate()) - .build() - ); - } - skuMongoService.findAndReplace("skuId", sku.getId(), skuDocument); - } -} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/ClientSkuServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/ClientSkuServiceImpl.java index 58290ec35..347f5ea2f 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/ClientSkuServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/ClientSkuServiceImpl.java @@ -50,14 +50,27 @@ public class ClientSkuServiceImpl extends ServiceImpl