BrandServiceImpl.java 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. package com.cdf.service.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.cdf.common.PageInfo;
  7. import com.cdf.entity.Brand;
  8. import com.cdf.entity.HotOutline;
  9. import com.cdf.httpClient.util.CdfOpenApiUtil;
  10. import com.cdf.httpClient.vo.CdfBrand;
  11. import com.cdf.mapper.IBrandMapper;
  12. import com.cdf.request.BrandApiParam;
  13. import com.cdf.response.BrandApiVo;
  14. import com.cdf.service.IBrandService;
  15. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  16. import com.cdf.service.IHotOutlineService;
  17. import lombok.extern.slf4j.Slf4j;
  18. import org.apache.commons.lang3.StringUtils;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.stereotype.Service;
  21. import java.util.*;
  22. import java.util.stream.Collectors;
  23. /**
  24. * <p>
  25. * 服务实现类
  26. * </p>
  27. *
  28. * @author
  29. * @since 2023-12-06
  30. */
  31. @Service
  32. @Slf4j
  33. public class BrandServiceImpl extends ServiceImpl<IBrandMapper, Brand> implements IBrandService {
  34. @Autowired
  35. IHotOutlineService hotOutlineService;
  36. @Override
  37. public void updateBrandInfo() throws Exception {
  38. Long pageNum = 1L;
  39. Long pageSize = 100L;
  40. List<CdfBrand> allBrand = new ArrayList<>();
  41. PageInfo<List<CdfBrand>> pageInfo = CdfOpenApiUtil.getBrandList(pageNum,pageSize);
  42. if(pageInfo == null){
  43. return;
  44. }
  45. Long size = 0L;
  46. if(pageInfo.getTotal() % pageSize == 0){
  47. size = pageInfo.getTotal() /pageSize;
  48. }else {
  49. size = pageInfo.getTotal() / pageSize +1;
  50. }
  51. log.info("cdf品牌总数为{},一共为{}页",pageInfo.getTotal(),size);
  52. for (long i = 1 ; i<= size;i++){
  53. Thread.sleep(500L);
  54. allBrand.addAll(pageInfo.getList());
  55. pageInfo = CdfOpenApiUtil.getBrandList(i,pageSize);
  56. }
  57. List<Brand> list = this.list();
  58. HashMap<String,Brand> brandHashMap = new HashMap<>();
  59. for (Brand brand : list) {
  60. brandHashMap.put(brand.getCdfBrandId(),brand);
  61. }
  62. List<Brand> saveList = new ArrayList<>();
  63. HashMap<String,CdfBrand> cdfBrandHashMap = new HashMap<>();
  64. for (CdfBrand cdfBrand : allBrand) {
  65. cdfBrandHashMap.put(cdfBrand.getBrand_id(),cdfBrand);
  66. }
  67. for (String brandId : cdfBrandHashMap.keySet()) {
  68. CdfBrand cdfBrand = cdfBrandHashMap.get(brandId);
  69. if(cdfBrand == null){
  70. continue;
  71. }
  72. Brand brand = brandHashMap.get(cdfBrand.getBrand_id());
  73. if(brand == null){
  74. brand = new Brand();
  75. brand.setCdfBrandId(cdfBrand.getBrand_id());
  76. }
  77. brand.setZhName(cdfBrand.getBrand_name());
  78. brand.setFtName(cdfBrand.getBrand_tc_name());
  79. brand.setEnName(cdfBrand.getBrand_en_name());
  80. brand.setBrandLogo(cdfBrand.getLogo());
  81. saveList.add(brand);
  82. }
  83. this.saveOrUpdateBatch(saveList);
  84. List<String> delList = new ArrayList<>();
  85. Set<String> cdfBrandIds = saveList.stream().map(Brand::getCdfBrandId).collect(Collectors.toSet());
  86. Set<String> dbBrandIds = list.stream().map(Brand::getCdfBrandId).collect(Collectors.toSet());
  87. for (String dbBrandId : dbBrandIds) {
  88. if(!cdfBrandIds.contains(dbBrandId)){
  89. delList.add(dbBrandId);
  90. }
  91. }
  92. if(delList.size() >0){
  93. LambdaQueryWrapper<Brand> wrapper = new LambdaQueryWrapper<>();
  94. wrapper.in(Brand::getCdfBrandId,delList);
  95. this.remove(wrapper);
  96. }
  97. }
  98. @Override
  99. public Object pageList(BrandApiParam param) {
  100. LambdaQueryWrapper<Brand> wrapper = new LambdaQueryWrapper<>();
  101. if(StringUtils.isNotBlank(param.getKeyWord())){
  102. wrapper.like(Brand::getZhName,param.getKeyWord())
  103. .or()
  104. .like(Brand::getFtName,param.getKeyWord())
  105. .or()
  106. .like(Brand::getEnName,param.getKeyWord());
  107. }
  108. wrapper.orderByDesc(Brand::getCreateTime);
  109. Page<Brand> page = this.page(new Page<>(param.getPageNum(), param.getPageSize()), wrapper);
  110. List<Integer> outLineIds = page.getRecords().stream().map(Brand::getOutlineId).filter(Objects::nonNull).collect(Collectors.toList());
  111. HashMap<Integer, HotOutline> map = hotOutlineService.getMapByIds(outLineIds);
  112. Page<BrandApiVo> pageVo = new Page<>(param.getPageNum(), param.getPageSize());
  113. List<BrandApiVo> listVo = new ArrayList<>();
  114. for (Brand record : page.getRecords()) {
  115. BrandApiVo vo = new BrandApiVo();
  116. BeanUtil.copyProperties(record,vo);
  117. HotOutline hotOutline = map.get(record.getOutlineId());
  118. if(hotOutline != null){
  119. vo.setOutlineName(hotOutline.getOutlineName());
  120. vo.setOutlineImage(hotOutline.getOutlineImage());
  121. }
  122. listVo.add(vo);
  123. }
  124. pageVo.setTotal(page.getTotal());
  125. pageVo.setRecords(listVo);
  126. return PageInfo.PageInfo(pageVo);
  127. }
  128. @Override
  129. public HashMap<String, BrandApiVo> getMapByIds(Set<String> brandIds) {
  130. HashMap<String, BrandApiVo> map = new HashMap<>();
  131. if(!brandIds.isEmpty()){
  132. List<Brand> brands = this.getByCdfBrandIds(new ArrayList<>(brandIds));
  133. List<Integer> outLineIds = brands.stream().map(Brand::getOutlineId).filter(Objects::nonNull).collect(Collectors.toList());
  134. HashMap<Integer, HotOutline> hotOutlineHashMap = hotOutlineService.getMapByIds(outLineIds);
  135. for (Brand brand : brands) {
  136. BrandApiVo vo = new BrandApiVo();
  137. BeanUtil.copyProperties(brand,vo);
  138. HotOutline hotOutline = hotOutlineHashMap.get(brand.getOutlineId());
  139. if(hotOutline != null){
  140. vo.setOutlineName(hotOutline.getOutlineName());
  141. vo.setOutlineImage(hotOutline.getOutlineImage());
  142. }
  143. map.put(vo.getCdfBrandId(),vo);
  144. }
  145. }
  146. return map;
  147. }
  148. @Override
  149. public List<Brand> getByCdfBrandIds(List<String> brandIds) {
  150. if(brandIds != null && brandIds.size() >0){
  151. LambdaQueryWrapper<Brand> wrapper = new LambdaQueryWrapper<>();
  152. wrapper.in(Brand::getCdfBrandId,brandIds);
  153. return this.list(wrapper);
  154. }
  155. return null;
  156. }
  157. public static void main(String[] args) {
  158. Long pageNum = 1L;
  159. Long pageSize = 100L;
  160. List<CdfBrand> allBrand = new ArrayList<>();
  161. PageInfo<List<CdfBrand>> pageInfo =CdfOpenApiUtil.getBrandList(pageNum,pageSize);
  162. if(pageInfo == null){
  163. return;
  164. }
  165. Long size = 0L;
  166. if(pageInfo.getTotal() % pageSize == 0){
  167. size = pageInfo.getTotal() /pageSize;
  168. }else {
  169. size = pageInfo.getTotal() / pageSize +1;
  170. }
  171. log.info("cdf品牌总数为{},一共为{}页",pageInfo.getTotal(),size);
  172. for (long i = 1 ; i<= size;i++){
  173. allBrand.addAll(pageInfo.getList());
  174. pageInfo = CdfOpenApiUtil.getBrandList(i,pageSize);
  175. }
  176. System.out.println(allBrand.size());
  177. }
  178. @Override
  179. public void updateBrandOutline(String brandId, String outlineId) {
  180. LambdaUpdateWrapper<Brand> wrapper = new LambdaUpdateWrapper<>();
  181. wrapper.eq(Brand::getCdfBrandId,brandId);
  182. wrapper.set(Brand::getOutlineId,outlineId);
  183. this.update(wrapper);
  184. }
  185. @Override
  186. public List<Brand> getByHotOutlineId(Integer outlineId) {
  187. LambdaQueryWrapper<Brand> wrapper = new LambdaQueryWrapper<>();
  188. wrapper.eq(Brand::getOutlineId,outlineId);
  189. return this.list(wrapper);
  190. }
  191. }