diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuController.java index 086b9c4d1..030aa3f23 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuController.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.base.CaseFormat; +import com.google.common.collect.Lists; import freemarker.template.Template; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -14,7 +15,12 @@ import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.business.domain.api.mabang.doSearchSkuListNew.SkuData; +import org.jeecg.modules.business.domain.api.mabang.doSearchSkuListNew.SkuListRawStream; +import org.jeecg.modules.business.domain.api.mabang.doSearchSkuListNew.SkuListRequestBody; +import org.jeecg.modules.business.domain.api.mabang.doSearchSkuListNew.SkuUpdateListStream; import org.jeecg.modules.business.entity.*; +import org.jeecg.modules.business.model.SkuDocument; import org.jeecg.modules.business.mongoService.SkuMongoService; import org.jeecg.modules.business.service.*; import org.jeecg.modules.business.vo.*; @@ -42,6 +48,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; +import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -63,6 +70,8 @@ public class SkuController { @Autowired private ISkuService skuService; @Autowired + private ISkuWeightService skuWeightService; + @Autowired private ISkuPriceService skuPriceService; @Autowired private IShippingDiscountService shippingDiscountService; @@ -614,4 +623,51 @@ public class SkuController { @RequestParam(name= "date") String date) { return Result.OK(skuService.latestSkuCounter(userCode, clientCode, date)); } + + @GetMapping(value = "/compare") + public Result compareClientSkuWithMabang(@RequestParam(name="clientId") String clientId) { + List skuIds = skuService.listByClientId(clientId).stream() + .map(Sku::getId) + .collect(Collectors.toList()); + List clientSkus = new ArrayList<>(); + for(String skuId: skuIds) { + List skus = skuMongoService.findBySkuId(skuId); + if(skus.size() > 1) { + SkuDocument latestSkuDocument = skus.stream().map(sku -> sku.getLatestSkuWeight().getEffectiveDate()) + .max(Date::compareTo) + .flatMap(date -> skus.stream().filter(sku -> sku.getLatestSkuWeight().getEffectiveDate().equals(date)).findFirst()) + .orElse(null); + + clientSkus.add(latestSkuDocument); + } else { + clientSkus.add(skus.get(0)); + } + } + + List> erpCodes = Lists.partition(clientSkus, 50) + .stream() + .map(skus -> skus.stream().map(SkuDocument::getErpCode).collect(Collectors.toList())) + .collect(Collectors.toList()); + List skusFromMabang = new ArrayList<>(); + for(List skuPartition : erpCodes) { + SkuListRequestBody body = new SkuListRequestBody(); + body.setStockSkuList(String.join(",", skuPartition)); + SkuListRawStream rawStream = new SkuListRawStream(body); + SkuUpdateListStream stream = new SkuUpdateListStream(rawStream); + skusFromMabang.addAll(stream.all()); + } + List desyncedSkus = new ArrayList<>(); + for(SkuDocument sku : clientSkus) { + skusFromMabang.stream().filter(skuData -> skuData.getErpCode().equals(sku.getErpCode())) + .findFirst() + .ifPresent(skuData -> { + if(!Objects.equals(skuData.getWeight(), sku.getLatestSkuWeight().getWeight()) || !Objects.equals(skuData.getSalePrice(), sku.getLatestSkuPrice().getPrice())) { + desyncedSkus.add(skuData.getErpCode()); + } + }); + } + skuService.setDesynced(desyncedSkus); + + return Result.OK(); + } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/Sku.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/Sku.java index b0c3cf171..70f12f232 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/Sku.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/Sku.java @@ -126,4 +126,10 @@ public class Sku implements Serializable { */ @JSONField(name="isGift") private Integer isGift; + /** + * 是否一致 0否;1是 + */ + @Excel(name = "是否一致", width = 15, dicCode = "is_synced") + @JSONField(name="isSynced") + private Integer isSynced; } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/SkuMapper.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/SkuMapper.java index 81fcdf091..c61f52fcf 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/SkuMapper.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/SkuMapper.java @@ -86,4 +86,6 @@ public interface SkuMapper extends BaseMapper { int countUnpairedSkus(@Param("shopId") String shopId); List latestSkuCounter(@Param("userCode") String userCode, @Param("clientCode") String clientCode, @Param("date") String date); + + void setDesynced(@Param("erpCodes") List erpCodes); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/SkuMapper.xml b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/SkuMapper.xml index 88349c633..5aa82233a 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/SkuMapper.xml +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/SkuMapper.xml @@ -821,4 +821,12 @@ FROM sku s WHERE erp_code LIKE CONCAT(#{date}, #{userCode}, '%%%-', #{clientCode}); + + UPDATE sku + SET is_synced = 0 + WHERE erp_code IN + + #{erpCode} + ; + diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/ISkuService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/ISkuService.java index 20bf72ad3..7fa78c128 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/ISkuService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/ISkuService.java @@ -130,4 +130,6 @@ public interface ISkuService extends IService { int countUnpairedSkus(String shopId); int latestSkuCounter(String userCode, String clientCode, String date); + + void setDesynced(List erpCodes); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/SkuServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/SkuServiceImpl.java index 18357e2da..3d68842ff 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/SkuServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/SkuServiceImpl.java @@ -636,4 +636,9 @@ public class SkuServiceImpl extends ServiceImpl implements ISkuS }).collect(Collectors.toList()); return counters.stream().max(Integer::compareTo).orElse(0) + 1; } + + @Override + public void setDesynced(List erpCodes) { + skuMapper.setDesynced(erpCodes); + } } \ No newline at end of file