feat: (WIP) skus info check between db and api

pull/8523/head
Gauthier LO 2025-04-18 09:45:41 +02:00
parent d8b51d3a90
commit 1a6ef4fa36
6 changed files with 79 additions and 0 deletions

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.base.CaseFormat; import com.google.common.base.CaseFormat;
import com.google.common.collect.Lists;
import freemarker.template.Template; import freemarker.template.Template;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; 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.query.QueryGenerator;
import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.oConvertUtils; 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.entity.*;
import org.jeecg.modules.business.model.SkuDocument;
import org.jeecg.modules.business.mongoService.SkuMongoService; import org.jeecg.modules.business.mongoService.SkuMongoService;
import org.jeecg.modules.business.service.*; import org.jeecg.modules.business.service.*;
import org.jeecg.modules.business.vo.*; import org.jeecg.modules.business.vo.*;
@ -42,6 +48,7 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -63,6 +70,8 @@ public class SkuController {
@Autowired @Autowired
private ISkuService skuService; private ISkuService skuService;
@Autowired @Autowired
private ISkuWeightService skuWeightService;
@Autowired
private ISkuPriceService skuPriceService; private ISkuPriceService skuPriceService;
@Autowired @Autowired
private IShippingDiscountService shippingDiscountService; private IShippingDiscountService shippingDiscountService;
@ -614,4 +623,51 @@ public class SkuController {
@RequestParam(name= "date") String date) { @RequestParam(name= "date") String date) {
return Result.OK(skuService.latestSkuCounter(userCode, clientCode, date)); return Result.OK(skuService.latestSkuCounter(userCode, clientCode, date));
} }
@GetMapping(value = "/compare")
public Result<?> compareClientSkuWithMabang(@RequestParam(name="clientId") String clientId) {
List<String> skuIds = skuService.listByClientId(clientId).stream()
.map(Sku::getId)
.collect(Collectors.toList());
List<SkuDocument> clientSkus = new ArrayList<>();
for(String skuId: skuIds) {
List<SkuDocument> 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<List<String>> erpCodes = Lists.partition(clientSkus, 50)
.stream()
.map(skus -> skus.stream().map(SkuDocument::getErpCode).collect(Collectors.toList()))
.collect(Collectors.toList());
List<SkuData> skusFromMabang = new ArrayList<>();
for(List<String> 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<String> 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();
}
} }

View File

@ -126,4 +126,10 @@ public class Sku implements Serializable {
*/ */
@JSONField(name="isGift") @JSONField(name="isGift")
private Integer isGift; private Integer isGift;
/**
* 0;1
*/
@Excel(name = "是否一致", width = 15, dicCode = "is_synced")
@JSONField(name="isSynced")
private Integer isSynced;
} }

View File

@ -86,4 +86,6 @@ public interface SkuMapper extends BaseMapper<Sku> {
int countUnpairedSkus(@Param("shopId") String shopId); int countUnpairedSkus(@Param("shopId") String shopId);
List<String> latestSkuCounter(@Param("userCode") String userCode, @Param("clientCode") String clientCode, @Param("date") String date); List<String> latestSkuCounter(@Param("userCode") String userCode, @Param("clientCode") String clientCode, @Param("date") String date);
void setDesynced(@Param("erpCodes") List<String> erpCodes);
} }

View File

@ -821,4 +821,12 @@
FROM sku s FROM sku s
WHERE erp_code LIKE CONCAT(#{date}, #{userCode}, '%%%-', #{clientCode}); WHERE erp_code LIKE CONCAT(#{date}, #{userCode}, '%%%-', #{clientCode});
</select> </select>
<update id="setDesynced">
UPDATE sku
SET is_synced = 0
WHERE erp_code IN
<foreach collection="erpCodes" item="erpCode" index="index" separator="," open="(" close=")">
#{erpCode}
</foreach>;
</update>
</mapper> </mapper>

View File

@ -130,4 +130,6 @@ public interface ISkuService extends IService<Sku> {
int countUnpairedSkus(String shopId); int countUnpairedSkus(String shopId);
int latestSkuCounter(String userCode, String clientCode, String date); int latestSkuCounter(String userCode, String clientCode, String date);
void setDesynced(List<String> erpCodes);
} }

View File

@ -636,4 +636,9 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements ISkuS
}).collect(Collectors.toList()); }).collect(Collectors.toList());
return counters.stream().max(Integer::compareTo).orElse(0) + 1; return counters.stream().max(Integer::compareTo).orElse(0) + 1;
} }
@Override
public void setDesynced(List<String> erpCodes) {
skuMapper.setDesynced(erpCodes);
}
} }