同步商品文件上传cos
This commit is contained in:
parent
24ba57be22
commit
24e26480f9
@ -645,9 +645,13 @@ public class ShopPageBaseServiceImpl extends BaseServiceImpl<ShopPageBaseMapper,
|
|||||||
}
|
}
|
||||||
} else if (StrUtil.equals("2", type)) {
|
} else if (StrUtil.equals("2", type)) {
|
||||||
String category_name = getParameter("name");
|
String category_name = getParameter("name");
|
||||||
|
String storeId = getParameter("store_id");
|
||||||
if (StrUtil.isNotBlank(category_name)) {
|
if (StrUtil.isNotBlank(category_name)) {
|
||||||
params.put("category_name", category_name);
|
params.put("category_name", category_name);
|
||||||
}
|
}
|
||||||
|
if (StrUtil.isNotBlank(storeId)) {
|
||||||
|
params.put("storeId", storeId);
|
||||||
|
}
|
||||||
|
|
||||||
data = getProductCategoryList(page, rows, params);
|
data = getProductCategoryList(page, rows, params);
|
||||||
List<Map> items = (List<Map>) data.get("items");
|
List<Map> items = (List<Map>) data.get("items");
|
||||||
@ -1433,12 +1437,16 @@ public class ShopPageBaseServiceImpl extends BaseServiceImpl<ShopPageBaseMapper,
|
|||||||
private Map getProductCategoryList(Integer pageNum, Integer pageSize, Map params) {
|
private Map getProductCategoryList(Integer pageNum, Integer pageSize, Map params) {
|
||||||
|
|
||||||
String categoryName = (String) params.get("category_name");
|
String categoryName = (String) params.get("category_name");
|
||||||
|
String storeId = (String) params.get("storeId");
|
||||||
|
|
||||||
QueryWrapper<ShopBaseProductCategory> queryWrapper = new QueryWrapper<>();
|
QueryWrapper<ShopBaseProductCategory> queryWrapper = new QueryWrapper<>();
|
||||||
Integer category_parent_id = getParameter("category_parent_id", Integer.class);
|
Integer category_parent_id = getParameter("category_parent_id", Integer.class);
|
||||||
if (category_parent_id != null) {
|
if (category_parent_id != null) {
|
||||||
queryWrapper.eq("category_parent_id", category_parent_id);
|
queryWrapper.eq("category_parent_id", category_parent_id);
|
||||||
}
|
}
|
||||||
|
if (storeId != null) {
|
||||||
|
queryWrapper.eq("store_id", storeId);
|
||||||
|
}
|
||||||
|
|
||||||
String category_name = ObjectUtil.defaultIfNull(categoryName, getParameter("category_name", getParameter("search_key")));
|
String category_name = ObjectUtil.defaultIfNull(categoryName, getParameter("category_name", getParameter("search_key")));
|
||||||
if (StrUtil.isNotBlank(category_name)) {
|
if (StrUtil.isNotBlank(category_name)) {
|
||||||
|
|||||||
@ -146,4 +146,14 @@ public class SyncThirdDataController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ApiOperation(value = "通知上传商品文件到cos", notes = "通知上传商品文件到cos")
|
||||||
|
@RequestMapping(value = "/uploudToCos", method = RequestMethod.POST)
|
||||||
|
public ThirdApiRes uploudToCos(@RequestBody List<String> folders,
|
||||||
|
@RequestParam String appKey,
|
||||||
|
@RequestParam String sign,
|
||||||
|
@RequestParam String syncType) {
|
||||||
|
return syncThirdDataService.fileUploadToOss(appKey,sign,syncType,folders);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -110,4 +110,13 @@ public interface SyncThirdDataService {
|
|||||||
*/
|
*/
|
||||||
void saveStoreRealeas(Map storeData);
|
void saveStoreRealeas(Map storeData);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param appKey
|
||||||
|
* @param sign
|
||||||
|
* @param folders
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
ThirdApiRes fileUploadToOss(String appKey, String sign,String syncType, List<String> folders);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,10 +11,11 @@ package com.suisung.mall.shop.sync.service.impl;
|
|||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.convert.Convert;
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.util.CharsetUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.http.HttpException;
|
import cn.hutool.core.util.ZipUtil;
|
||||||
import cn.hutool.json.JSONArray;
|
import cn.hutool.json.JSONArray;
|
||||||
|
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
@ -25,7 +26,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|||||||
import com.qcloud.cos.model.COSObjectSummary;
|
import com.qcloud.cos.model.COSObjectSummary;
|
||||||
import com.suisung.mall.common.api.CommonResult;
|
import com.suisung.mall.common.api.CommonResult;
|
||||||
|
|
||||||
import com.suisung.mall.common.domain.UserDto;
|
|
||||||
import com.suisung.mall.common.enums.DicEnum;
|
import com.suisung.mall.common.enums.DicEnum;
|
||||||
import com.suisung.mall.common.modules.base.ShopBaseProductBrand;
|
import com.suisung.mall.common.modules.base.ShopBaseProductBrand;
|
||||||
import com.suisung.mall.common.modules.base.ShopBaseProductCategory;
|
import com.suisung.mall.common.modules.base.ShopBaseProductCategory;
|
||||||
@ -57,7 +57,6 @@ import com.suisung.mall.shop.sixun.service.SxSyncGoodsService;
|
|||||||
import com.suisung.mall.shop.sixun.service.SxSyncVipService;
|
import com.suisung.mall.shop.sixun.service.SxSyncVipService;
|
||||||
import com.suisung.mall.shop.sixun.utils.CommonUtil;
|
import com.suisung.mall.shop.sixun.utils.CommonUtil;
|
||||||
import com.suisung.mall.shop.sixun.utils.FileUtils;
|
import com.suisung.mall.shop.sixun.utils.FileUtils;
|
||||||
import com.suisung.mall.shop.sync.Utils.CryptoUtils;
|
|
||||||
import com.suisung.mall.shop.sync.Utils.ThreadFileUtils;
|
import com.suisung.mall.shop.sync.Utils.ThreadFileUtils;
|
||||||
import com.suisung.mall.shop.sync.keymanage.RedisKey;
|
import com.suisung.mall.shop.sync.keymanage.RedisKey;
|
||||||
import com.suisung.mall.shop.sync.service.*;
|
import com.suisung.mall.shop.sync.service.*;
|
||||||
@ -83,6 +82,8 @@ import java.nio.charset.StandardCharsets;
|
|||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
|
import java.time.Duration;
|
||||||
|
import java.time.Instant;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.*;
|
import java.util.concurrent.*;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
@ -123,12 +124,8 @@ public class SyncThirdDataServiceImpl extends SyncBaseThirdSxAbstract implements
|
|||||||
@Autowired
|
@Autowired
|
||||||
private StoreDbConfigService storeDbConfigService;
|
private StoreDbConfigService storeDbConfigService;
|
||||||
|
|
||||||
private final static String CLIENTFILEPATH="sxclient/";
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ShopBaseProductCategoryService shopBaseProductCategoryService;
|
private ShopBaseProductCategoryService shopBaseProductCategoryService;
|
||||||
@Autowired
|
|
||||||
private FileUtils fileUtils;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ShopProductSpecItemService shopProductSpecItemService;
|
private ShopProductSpecItemService shopProductSpecItemService;
|
||||||
@ -136,6 +133,8 @@ public class SyncThirdDataServiceImpl extends SyncBaseThirdSxAbstract implements
|
|||||||
@Autowired
|
@Autowired
|
||||||
private ShopBaseProductSpecService baseProductSpecService;
|
private ShopBaseProductSpecService baseProductSpecService;
|
||||||
|
|
||||||
|
@Value("#{accountBaseConfigService.getConfig('tengxun_default_dir')}")
|
||||||
|
private String TENGXUN_DEFA;
|
||||||
/**
|
/**
|
||||||
* 批量保存商品的分类
|
* 批量保存商品的分类
|
||||||
*
|
*
|
||||||
@ -435,6 +434,7 @@ public class SyncThirdDataServiceImpl extends SyncBaseThirdSxAbstract implements
|
|||||||
if (syncAppO == null) {
|
if (syncAppO == null) {
|
||||||
return new ThirdApiRes().fail(1001, I18nUtil._("签名有误!"));
|
return new ThirdApiRes().fail(1001, I18nUtil._("签名有误!"));
|
||||||
}
|
}
|
||||||
|
|
||||||
String storeId = syncAppO.getStore_id();
|
String storeId = syncAppO.getStore_id();
|
||||||
try {
|
try {
|
||||||
if (multipartFile.isEmpty()) {
|
if (multipartFile.isEmpty()) {
|
||||||
@ -446,6 +446,14 @@ public class SyncThirdDataServiceImpl extends SyncBaseThirdSxAbstract implements
|
|||||||
String filePath= FileUtils.createFolderAndFileUsingFile(folder,filName);
|
String filePath= FileUtils.createFolderAndFileUsingFile(folder,filName);
|
||||||
Path path = Paths.get(filePath);
|
Path path = Paths.get(filePath);
|
||||||
Files.write(path, bytes);
|
Files.write(path, bytes);
|
||||||
|
logger.info("path-{},parent-{},filename-{},root-{}",path.toString(),path.getParent(),path.getFileName().toString(),path.getRoot());
|
||||||
|
// String filaPath=path.toString();
|
||||||
|
// if(filePath.contains(":")){
|
||||||
|
// filePath=filePath.substring(filePath.indexOf(":")+1);
|
||||||
|
// }
|
||||||
|
// filePath=filePath.replaceAll("\\\\","/");
|
||||||
|
// String cosFileName =TENGXUN_DEFA.concat("/").concat("sync/").concat(filePath);
|
||||||
|
// ossService.uploadObject4OSS(new File(filePath),cosFileName);
|
||||||
// String fileDownloadUri = ServletUriComponentsBuilder.fromCurrentContextPath()
|
// String fileDownloadUri = ServletUriComponentsBuilder.fromCurrentContextPath()
|
||||||
// .path("/download/")
|
// .path("/download/")
|
||||||
// .path(Objects.requireNonNull(multipartFile.getOriginalFilename()))
|
// .path(Objects.requireNonNull(multipartFile.getOriginalFilename()))
|
||||||
@ -471,6 +479,8 @@ public class SyncThirdDataServiceImpl extends SyncBaseThirdSxAbstract implements
|
|||||||
.eq(SyncApp::getApp_key, appKey)
|
.eq(SyncApp::getApp_key, appKey)
|
||||||
.eq(SyncApp::getApp_secret,sign));
|
.eq(SyncApp::getApp_secret,sign));
|
||||||
String storeId = syncApp.getStore_id();
|
String storeId = syncApp.getStore_id();
|
||||||
|
Date tenMinutesAgo = Date.from(Instant.now().minus(Duration.ofMinutes(5)));//校准误差
|
||||||
|
Date date= DateUtil.date(tenMinutesAgo);
|
||||||
if(null==syncApp.getStore_id()|| syncApp.getStore_id().isEmpty()){
|
if(null==syncApp.getStore_id()|| syncApp.getStore_id().isEmpty()){
|
||||||
logger.info("商品id为空");
|
logger.info("商品id为空");
|
||||||
return;
|
return;
|
||||||
@ -479,11 +489,16 @@ public class SyncThirdDataServiceImpl extends SyncBaseThirdSxAbstract implements
|
|||||||
logger.info("没有商品数据");
|
logger.info("没有商品数据");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<String> newFolders=new ArrayList<>();
|
List<String> newFolders=new ArrayList<>();
|
||||||
folders.forEach(page->{
|
folders.forEach(page->{
|
||||||
String newfolder=new FileUtils().getSyncTypeFlag(syncType,clientPath)+storeId+FileUtils.pathSeparator+page+FileUtils.pathSeparator;
|
String newfolder=new FileUtils().getSyncTypeFlag(syncType,clientPath)+storeId+FileUtils.pathSeparator+page+FileUtils.pathSeparator;
|
||||||
newFolders.add(newfolder);
|
newFolders.add(newfolder);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//upLoadZipToOss(newFolders.get(0));//上传文件到cos
|
||||||
|
dowloadAndUnZip(newFolders.get(0));//读取cos文件回本地
|
||||||
|
|
||||||
syncPrimaryKey();
|
syncPrimaryKey();
|
||||||
shopNumberSeqService.clearKey();
|
shopNumberSeqService.clearKey();
|
||||||
shopBaseProductCategoryService.clearCategoryCache(storeId);
|
shopBaseProductCategoryService.clearCategoryCache(storeId);
|
||||||
@ -560,6 +575,19 @@ public class SyncThirdDataServiceImpl extends SyncBaseThirdSxAbstract implements
|
|||||||
//todo 定时清理文件,建议用服务器脚本
|
//todo 定时清理文件,建议用服务器脚本
|
||||||
logger.info("执行成功{}个文件,失败{}个文件",success,fails);
|
logger.info("执行成功{}个文件,失败{}个文件",success,fails);
|
||||||
logger.info("同步商品数据执行结束");
|
logger.info("同步商品数据执行结束");
|
||||||
|
//更新当前的获取时间,用户客户端获取
|
||||||
|
try {
|
||||||
|
QueryWrapper<StoreDbConfig> storeDbConfigQueryWrapper = new QueryWrapper<>();
|
||||||
|
storeDbConfigQueryWrapper.eq("store_id", storeId);
|
||||||
|
StoreDbConfig storeDbConfig=storeDbConfigService.getOne(storeDbConfigQueryWrapper);
|
||||||
|
if(ObjectUtil.isNotEmpty(storeDbConfig)){
|
||||||
|
storeDbConfig.setRefreshTime(date);
|
||||||
|
storeDbConfigService.saveOrUpdate(storeDbConfig);
|
||||||
|
}
|
||||||
|
}catch (RuntimeException e){
|
||||||
|
logger.error("同步时间失败"+e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -685,4 +713,86 @@ public class SyncThirdDataServiceImpl extends SyncBaseThirdSxAbstract implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 压缩商家数据,并上传cos
|
||||||
|
* 保存商店数据 如
|
||||||
|
* "E:\\data\\uploaded\\goods\\2025\\6\\6\\1\\2"
|
||||||
|
* @param path
|
||||||
|
*/
|
||||||
|
public void upLoadZipToOss(String path){
|
||||||
|
File file=new File(path);
|
||||||
|
File parentFile=null;
|
||||||
|
if(!file.exists()){//存在则取本地,不存在下载cos的数据
|
||||||
|
logger.info("没有同步数据上传");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
parentFile=file.getParentFile();
|
||||||
|
String filePath=parentFile.getPath();
|
||||||
|
filePath=filePath.replaceAll("\\\\","/");
|
||||||
|
String folderName=parentFile.getName();
|
||||||
|
String parentFolderName=parentFile.getParentFile().getPath().replaceAll("\\\\","/");
|
||||||
|
String localPath=parentFolderName+"/"+folderName+".zip";
|
||||||
|
ZipUtil.zip(filePath,localPath,true);
|
||||||
|
if(parentFolderName.contains(":")){
|
||||||
|
parentFolderName=parentFolderName.substring(filePath.indexOf(":")+1);
|
||||||
|
}
|
||||||
|
String cosFileName =TENGXUN_DEFA.concat("/").concat("sync").concat(parentFolderName).concat("/").concat(folderName+".zip");
|
||||||
|
ossService.uploadObject4OSS(new File(localPath),cosFileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 压缩商家数据,并上传cos
|
||||||
|
* 保存商店数据 如
|
||||||
|
* "E:\\data\\uploaded\\goods\\2025\\6\\6\\1\\2"
|
||||||
|
* @param path
|
||||||
|
*/
|
||||||
|
public void dowloadAndUnZip(String path){
|
||||||
|
File file=new File(path);
|
||||||
|
File parentFile=null;
|
||||||
|
if(file.exists()){//存在则取本地,不存在下载cos的数据
|
||||||
|
logger.info("没有同步数据下载");
|
||||||
|
}else {
|
||||||
|
parentFile=file.getParentFile();
|
||||||
|
String ossFilePath=parentFile.getParentFile().getPath();
|
||||||
|
|
||||||
|
String fileName=parentFile.getName()+".zip";
|
||||||
|
|
||||||
|
String parentFolderName=parentFile.getParent().replaceAll("\\\\","/");
|
||||||
|
String localPath=parentFolderName+"/"+fileName;
|
||||||
|
ossFilePath=ossFilePath.replaceAll("\\\\","/")+"/"+fileName;
|
||||||
|
|
||||||
|
if(ossFilePath.contains(":")){
|
||||||
|
ossFilePath=ossFilePath.substring(ossFilePath.indexOf(":")+1);
|
||||||
|
}
|
||||||
|
ossFilePath=TENGXUN_DEFA.concat("/").concat("sync").concat(ossFilePath);
|
||||||
|
String dowlowFilePath=ossService.download(ossFilePath,localPath);
|
||||||
|
File localFile=new File(dowlowFilePath);
|
||||||
|
ZipUtil.unzip(dowlowFilePath,localFile.getParent(), CharsetUtil.CHARSET_GBK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ThirdApiRes fileUploadToOss(String appKey, String sign, String syncType, List<String> folders) {
|
||||||
|
SyncApp syncApp = syncAppService.getOne(new LambdaQueryWrapper<SyncApp>()
|
||||||
|
.select(SyncApp::getApp_key, SyncApp::getApp_secret,SyncApp::getStore_id)
|
||||||
|
.eq(SyncApp::getApp_key, appKey)
|
||||||
|
.eq(SyncApp::getApp_secret,sign));
|
||||||
|
String storeId = syncApp.getStore_id();
|
||||||
|
Date tenMinutesAgo = Date.from(Instant.now().minus(Duration.ofMinutes(5)));//校准误差
|
||||||
|
Date date= DateUtil.date(tenMinutesAgo);
|
||||||
|
if(null==syncApp.getStore_id()|| syncApp.getStore_id().isEmpty()){
|
||||||
|
logger.info("商品id为空");
|
||||||
|
return new ThirdApiRes().fail(250,"商品id为空");
|
||||||
|
}
|
||||||
|
if(folders==null||folders.isEmpty()){
|
||||||
|
logger.info("没有商品数据");
|
||||||
|
return new ThirdApiRes().fail(250,"没有商品数据");
|
||||||
|
}
|
||||||
|
|
||||||
|
String newfolder=new FileUtils().getSyncTypeFlag(syncType,clientPath)+storeId+FileUtils.pathSeparator+folders.get(0)+FileUtils.pathSeparator;
|
||||||
|
upLoadZipToOss(newfolder);//上传文件到cos
|
||||||
|
return new ThirdApiRes().success("上传成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user