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.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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue