|
|
|
@ -1,10 +1,14 @@
|
|
|
|
|
package com.ms.api.service.impl;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
|
|
import com.doudian.open.api.shop_getShopCategory.data.DataItem;
|
|
|
|
|
import com.ms.api.bo.CompareAndGetNeedProcessCidsBO;
|
|
|
|
|
import com.ms.api.common.Ret;
|
|
|
|
|
import com.ms.api.consts.RedisKeyConst;
|
|
|
|
|
import com.ms.api.paas.StorageService;
|
|
|
|
|
import com.ms.api.tool.CommonTool;
|
|
|
|
|
import com.ms.api.tool.MoveTool;
|
|
|
|
|
import com.ms.api.util.DdRequestUtil;
|
|
|
|
|
import com.ms.dal.entity.Category;
|
|
|
|
|
import com.ms.api.service.CategoryService;
|
|
|
|
@ -33,6 +37,9 @@ public class CategoryServiceImpl implements CategoryService{
|
|
|
|
|
@Autowired
|
|
|
|
|
private RedisTemplate<String, String> redisTemplate;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private StorageService storageService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private RsyncCategoryQueueMapper rsyncCategoryQueueMapper;
|
|
|
|
|
|
|
|
|
@ -234,11 +241,13 @@ public class CategoryServiceImpl implements CategoryService{
|
|
|
|
|
int successCnt = 0;
|
|
|
|
|
|
|
|
|
|
Map<Long, Category> categoryMap = getAllCategoryMap();
|
|
|
|
|
|
|
|
|
|
log.info("start buildProductCatePath");
|
|
|
|
|
for (Map.Entry<Long, Category> entry : categoryMap.entrySet()) {
|
|
|
|
|
Long categoryId = entry.getKey();
|
|
|
|
|
Category categoryInfo = entry.getValue();
|
|
|
|
|
|
|
|
|
|
// todo: 之前有用个本地文件控制同步停止,可有可无先忽略
|
|
|
|
|
|
|
|
|
|
if (categoryInfo.getLevel() <= 1) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
@ -247,16 +256,37 @@ public class CategoryServiceImpl implements CategoryService{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// todo:
|
|
|
|
|
String realPath = findCategoryRealPath(categoryMap, categoryId, "");
|
|
|
|
|
|
|
|
|
|
if (StringUtils.isEmpty(realPath) || realPath.equals(categoryInfo.getPath())) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Category updateData = new Category();
|
|
|
|
|
updateData.setCategoryId(categoryId);
|
|
|
|
|
updateData.setPath(realPath);
|
|
|
|
|
updateData.setGmtModified(new Date());
|
|
|
|
|
categoryMapper.updateByPrimaryKeySelective(updateData);
|
|
|
|
|
|
|
|
|
|
successCnt++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
log.info("end buildProductCatePath");
|
|
|
|
|
return successCnt > 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// todo:
|
|
|
|
|
private String findCategoryRealPath(Map<Long, Category> categoryMap, Long categoryId, String path) {
|
|
|
|
|
if (!categoryMap.containsKey(categoryId)) {
|
|
|
|
|
return path;
|
|
|
|
|
}
|
|
|
|
|
Category categoryInfo = categoryMap.get(categoryId);
|
|
|
|
|
|
|
|
|
|
path = !StringUtils.isEmpty(path) ? (categoryInfo.getCategoryName() + ">" + path) : categoryInfo.getCategoryName();
|
|
|
|
|
if (!StringUtils.isEmpty(categoryInfo.getParentCategoryId()) && Long.valueOf(categoryInfo.getParentCategoryId()) != 0L) {
|
|
|
|
|
path = findCategoryRealPath(categoryMap, Long.valueOf(categoryInfo.getParentCategoryId()), path);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return successCnt > 0;
|
|
|
|
|
return path;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@ -281,8 +311,53 @@ public class CategoryServiceImpl implements CategoryService{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void getAllLeafProductCatListFromTos(Integer shopId, boolean isFlushCache) {
|
|
|
|
|
public List<Category> getAllLeafProductCatListFromTos(Integer shopId, boolean isFlushCache) {
|
|
|
|
|
String tosPath = MoveTool.getAllLeafProductCatListOssPath(shopId);
|
|
|
|
|
|
|
|
|
|
List<Category> cateListAll = null;
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
Ret getTosContentRet = storageService.getContent(tosPath);
|
|
|
|
|
if (getTosContentRet.getResult().equals("success") && !isFlushCache) {
|
|
|
|
|
cateListAll = JSONObject.parseArray(getTosContentRet.getData().get("data").toString(), Category.class);
|
|
|
|
|
if (ObjectUtil.isNotEmpty(cateListAll)) {
|
|
|
|
|
return cateListAll;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
log.error("商品类目TOS读取操作过程异常:", e);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cateListAll = getAllLeafProductCatListFromDb(shopId);
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
storageService.uploadContent(tosPath, JSONObject.toJSONString(cateListAll));
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
log.error("商品类目TOS写入操作过程异常:", e);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// todo: tosPath文件 加入 tos自动清理队列,目前isFlushCache用的都是true,不清理也基本没影响,用到false的时候再说,有效期1天后自动删除,
|
|
|
|
|
|
|
|
|
|
return cateListAll;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<Category> getAllLeafProductCatListFromDb(Integer shopId) {
|
|
|
|
|
List<Category> cateListAll = new ArrayList<>();
|
|
|
|
|
final int stepLen = 200;
|
|
|
|
|
Long maxCid = 0L;
|
|
|
|
|
while (true) {
|
|
|
|
|
List<Category> cateList = categoryMapper.selectLeafByPositionPage(shopId, maxCid, stepLen);
|
|
|
|
|
if (cateList.isEmpty()) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
cateListAll.addAll(cateList);
|
|
|
|
|
if (cateList.size() < stepLen) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
maxCid = cateList.get(cateList.size() - 1).getCategoryId();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return cateListAll;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|