mirror of https://github.com/jeecgboot/jeecg-boot
feat: (WIP) skus info check between db and api
parent
d8b51d3a90
commit
1a6ef4fa36
|
@ -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<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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -86,4 +86,6 @@ public interface SkuMapper extends BaseMapper<Sku> {
|
|||
int countUnpairedSkus(@Param("shopId") String shopId);
|
||||
|
||||
List<String> latestSkuCounter(@Param("userCode") String userCode, @Param("clientCode") String clientCode, @Param("date") String date);
|
||||
|
||||
void setDesynced(@Param("erpCodes") List<String> erpCodes);
|
||||
}
|
||||
|
|
|
@ -821,4 +821,12 @@
|
|||
FROM sku s
|
||||
WHERE erp_code LIKE CONCAT(#{date}, #{userCode}, '%%%-', #{clientCode});
|
||||
</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>
|
||||
|
|
|
@ -130,4 +130,6 @@ public interface ISkuService extends IService<Sku> {
|
|||
int countUnpairedSkus(String shopId);
|
||||
|
||||
int latestSkuCounter(String userCode, String clientCode, String date);
|
||||
|
||||
void setDesynced(List<String> erpCodes);
|
||||
}
|
||||
|
|
|
@ -636,4 +636,9 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements ISkuS
|
|||
}).collect(Collectors.toList());
|
||||
return counters.stream().max(Integer::compareTo).orElse(0) + 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDesynced(List<String> erpCodes) {
|
||||
skuMapper.setDesynced(erpCodes);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue