package com.cdf.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cdf.common.PageInfo;
import com.cdf.entity.Brand;
import com.cdf.entity.HotOutline;
import com.cdf.httpClient.util.CdfOpenApiUtil;
import com.cdf.httpClient.vo.CdfBrand;
import com.cdf.mapper.IBrandMapper;
import com.cdf.request.BrandApiParam;
import com.cdf.response.BrandApiVo;
import com.cdf.service.IBrandService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cdf.service.IHotOutlineService;
import com.cdf.util.MyStringUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
/**
*
* 服务实现类
*
*
* @author
* @since 2023-12-06
*/
@Service
@Slf4j
public class BrandServiceImpl extends ServiceImpl implements IBrandService {
@Autowired
IHotOutlineService hotOutlineService;
@Override
public void updateBrandInfo() throws Exception {
Long pageNum = 1L;
Long pageSize = 100L;
List allBrand = new ArrayList<>();
PageInfo> pageInfo = CdfOpenApiUtil.getBrandList(pageNum,pageSize);
if(pageInfo == null){
return;
}
Long size = 0L;
if(pageInfo.getTotal() % pageSize == 0){
size = pageInfo.getTotal() /pageSize;
}else {
size = pageInfo.getTotal() / pageSize +1;
}
allBrand.addAll(pageInfo.getList());
log.info("cdf品牌总数为{},一共为{}页",pageInfo.getTotal(),size);
for (long i = 2 ; i<= size;i++){
Thread.sleep(100L);
pageInfo = CdfOpenApiUtil.getBrandList(i,pageSize);
allBrand.addAll(pageInfo.getList());
}
List list = this.list();
HashMap brandHashMap = new HashMap<>();
for (Brand brand : list) {
brandHashMap.put(brand.getCdfBrandId(),brand);
}
List saveList = new ArrayList<>();
HashMap cdfBrandHashMap = new HashMap<>();
for (CdfBrand cdfBrand : allBrand) {
cdfBrandHashMap.put(cdfBrand.getBrand_id(),cdfBrand);
}
for (String brandId : cdfBrandHashMap.keySet()) {
CdfBrand cdfBrand = cdfBrandHashMap.get(brandId);
if(cdfBrand == null){
continue;
}
Brand brand = brandHashMap.get(cdfBrand.getBrand_id());
if(brand != null &&
MyStringUtils.eqStr(brand.getZhName(),cdfBrand.getBrand_name()) &&
MyStringUtils.eqStr(brand.getFtName(),cdfBrand.getBrand_tc_name()) &&
MyStringUtils.eqStr(brand.getEnName(),cdfBrand.getBrand_en_name()) &&
MyStringUtils.eqStr(brand.getBrandLogo(),cdfBrand.getLogo())){
continue;
}
if(brand == null){
brand = new Brand();
brand.setCdfBrandId(cdfBrand.getBrand_id());
}
brand.setZhName(cdfBrand.getBrand_name());
brand.setFtName(cdfBrand.getBrand_tc_name());
brand.setEnName(cdfBrand.getBrand_en_name());
brand.setBrandLogo(cdfBrand.getLogo());
brand.setUpdateTime(null);
saveList.add(brand);
}
this.saveOrUpdateBatch(saveList);
List delList = new ArrayList<>();
Set cdfBrandIds = allBrand.stream().map(CdfBrand::getBrand_id).collect(Collectors.toSet());
Set dbBrandIds = list.stream().map(Brand::getCdfBrandId).collect(Collectors.toSet());
for (String dbBrandId : dbBrandIds) {
if(!cdfBrandIds.contains(dbBrandId)){
delList.add(dbBrandId);
}
}
if(delList.size() >0){
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.in(Brand::getCdfBrandId,delList);
this.remove(wrapper);
}
}
@Override
public Object pageList(BrandApiParam param) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
if(StringUtils.isNotBlank(param.getKeyword())){
wrapper.like(Brand::getZhName,param.getKeyword())
.or()
.like(Brand::getFtName,param.getKeyword())
.or()
.like(Brand::getEnName,param.getKeyword());
}
wrapper.orderByDesc(Brand::getCdfBrandId);
Page page = this.page(new Page<>(param.getPageNum(), param.getPageSize()), wrapper);
List outLineIds = page.getRecords().stream().map(Brand::getOutlineId).filter(Objects::nonNull).collect(Collectors.toList());
HashMap map = hotOutlineService.getMapByIds(outLineIds);
Page pageVo = new Page<>(param.getPageNum(), param.getPageSize());
List listVo = new ArrayList<>();
for (Brand record : page.getRecords()) {
BrandApiVo vo = new BrandApiVo();
BeanUtil.copyProperties(record,vo);
HotOutline hotOutline = map.get(record.getOutlineId());
if(hotOutline != null){
vo.setOutlineName(hotOutline.getOutlineName());
vo.setOutlineImage(hotOutline.getOutlineImage());
}
listVo.add(vo);
}
pageVo.setTotal(page.getTotal());
pageVo.setRecords(listVo);
return PageInfo.PageInfo(pageVo);
}
@Override
public HashMap getMapByIds(Set brandIds) {
HashMap map = new HashMap<>();
if(!brandIds.isEmpty()){
List brands = this.getByCdfBrandIds(new ArrayList<>(brandIds));
List outLineIds = brands.stream().map(Brand::getOutlineId).filter(Objects::nonNull).collect(Collectors.toList());
HashMap hotOutlineHashMap = hotOutlineService.getMapByIds(outLineIds);
for (Brand brand : brands) {
BrandApiVo vo = new BrandApiVo();
BeanUtil.copyProperties(brand,vo);
HotOutline hotOutline = hotOutlineHashMap.get(brand.getOutlineId());
if(hotOutline != null){
vo.setOutlineName(hotOutline.getOutlineName());
vo.setOutlineImage(hotOutline.getOutlineImage());
}
map.put(vo.getCdfBrandId(),vo);
}
}
return map;
}
@Override
public List getByCdfBrandIds(List brandIds) {
if(brandIds != null && brandIds.size() >0){
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.in(Brand::getCdfBrandId,brandIds);
return this.list(wrapper);
}
return null;
}
public static void main(String[] args) {
Long pageNum = 1L;
Long pageSize = 100L;
List allBrand = new ArrayList<>();
PageInfo> pageInfo =CdfOpenApiUtil.getBrandList(pageNum,pageSize);
if(pageInfo == null){
return;
}
Long size = 0L;
if(pageInfo.getTotal() % pageSize == 0){
size = pageInfo.getTotal() /pageSize;
}else {
size = pageInfo.getTotal() / pageSize +1;
}
log.info("品牌总数为{},一共为{}页",pageInfo.getTotal(),size);
for (long i = 1 ; i<= size;i++){
allBrand.addAll(pageInfo.getList());
pageInfo = CdfOpenApiUtil.getBrandList(i,pageSize);
}
System.out.println(allBrand.size());
}
@Override
public void updateBrandOutline(String brandId, String outlineId) {
LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(Brand::getCdfBrandId,brandId);
wrapper.set(Brand::getOutlineId,outlineId);
this.update(wrapper);
}
@Override
public List getByHotOutlineId(Integer outlineId) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Brand::getOutlineId,outlineId);
return this.list(wrapper);
}
}