思迅同步活动问题修复

This commit is contained in:
liyj 2025-07-08 18:17:04 +08:00
parent da259b15e9
commit ce974276a8
3 changed files with 53 additions and 205 deletions

View File

@ -21,19 +21,9 @@ public class WebController {
@Autowired @Autowired
private SxDataService sxDataService; private SxDataService sxDataService;
@RequestMapping("/test") @RequestMapping("/upload")
public void upload(){ public void upload(){
CommentModel commentModel= sxDataService.getCommentModel(); System.out.println("upload");
DataBaseInfo dataBaseInfo=sxDataService.getDataBaseInfo(commentModel);
if(dataBaseInfo==null){
log.error("syncGoods dataBaseInfo is null");
return;
}
if(ObjectUtil.isNotEmpty(dataBaseInfo.getRefreshTime())){
commentModel.setSyncTime(DateUtil.formatDateTime(dataBaseInfo.getRefreshTime()));
}
// sxDataService.getCategoryChildren(new DataBaseInfo(),"0101");
System.out.println(sxDataService.getCategoryChildren(dataBaseInfo,"01"));
//webClientService.uploudSxData(); //webClientService.uploudSxData();
} }
@ -41,32 +31,14 @@ public class WebController {
public void synBrand(){ public void synBrand(){
log.info("synBrand"); log.info("synBrand");
// sxDataService.getAppSign(); // sxDataService.getAppSign();
CommentModel commentModel= sxDataService.getCommentModel(); sxDataService.SyncBranchList(new DataBaseInfo(),sxDataService.getCommentModel());
DataBaseInfo dataBaseInfo=sxDataService.getDataBaseInfo(commentModel);
if(dataBaseInfo==null){
log.error("syncGoods dataBaseInfo is null");
return;
}
if(ObjectUtil.isNotEmpty(dataBaseInfo.getRefreshTime())){
commentModel.setSyncTime(DateUtil.formatDateTime(dataBaseInfo.getRefreshTime()));
}
sxDataService.SyncBranchList(dataBaseInfo,sxDataService.getCommentModel());
} }
@RequestMapping("/syncCategory") @RequestMapping("/syncCategory")
public void syncCategory(){ public void syncCategory(){
log.info("syncCategory"); log.info("syncCategory");
//sxDataService.getAppSign(); //sxDataService.getAppSign();
CommentModel commentModel= sxDataService.getCommentModel(); sxDataService.SyncCategory(new DataBaseInfo(),sxDataService.getCommentModel());
DataBaseInfo dataBaseInfo=sxDataService.getDataBaseInfo(commentModel);
if(dataBaseInfo==null){
log.error("syncGoods dataBaseInfo is null");
return;
}
if(ObjectUtil.isNotEmpty(dataBaseInfo.getRefreshTime())){
commentModel.setSyncTime(DateUtil.formatDateTime(dataBaseInfo.getRefreshTime()));
}
sxDataService.SyncCategory(dataBaseInfo,sxDataService.getCommentModel());
} }
@RequestMapping("/syncGoods") @RequestMapping("/syncGoods")
@ -130,19 +102,7 @@ public class WebController {
@RequestMapping("/syncStoreData") @RequestMapping("/syncStoreData")
public void syncStoreData(){ public void syncStoreData(){
CommentModel commentModel= sxDataService.getCommentModel(); sxDataService.syncStoreData(new DataBaseInfo(),sxDataService.getCommentModel());
DataBaseInfo dataBaseInfo=sxDataService.getDataBaseInfo(commentModel);
if(dataBaseInfo==null){
log.error("syncGoods dataBaseInfo is null");
return;
}
if(StringUtils.isEmpty(commentModel.getSyncTime())){
commentModel =sxDataService.getCommentModel();
}
if(ObjectUtil.isNotEmpty(dataBaseInfo.getRefreshTime())){
commentModel.setSyncTime(DateUtil.formatDateTime(dataBaseInfo.getRefreshTime()));
}
sxDataService.syncStoreData(dataBaseInfo,commentModel);
} }
@ -158,7 +118,7 @@ public class WebController {
commentModel =sxDataService.getCommentModel(); commentModel =sxDataService.getCommentModel();
} }
if(ObjectUtil.isNotEmpty(dataBaseInfo.getRefreshTime())){ if(ObjectUtil.isNotEmpty(dataBaseInfo.getRefreshTime())){
commentModel.setSyncTime(DateUtil.formatDate(dataBaseInfo.getRefreshTime())); commentModel.setSyncTime(DateUtil.formatDateTime(dataBaseInfo.getRefreshTime()));
} }
sxDataService.syncAtive(new DataBaseInfo(),commentModel); sxDataService.syncAtive(new DataBaseInfo(),commentModel);
// sxDataService.syncAtive(new DataBaseInfo(),new CommentModel()); // sxDataService.syncAtive(new DataBaseInfo(),new CommentModel());
@ -176,7 +136,7 @@ public class WebController {
commentModel =sxDataService.getCommentModel(); commentModel =sxDataService.getCommentModel();
} }
if(ObjectUtil.isNotEmpty(dataBaseInfo.getRefreshTime())){ if(ObjectUtil.isNotEmpty(dataBaseInfo.getRefreshTime())){
commentModel.setSyncTime(DateUtil.formatDate(dataBaseInfo.getRefreshTime())); commentModel.setSyncTime(DateUtil.formatDateTime(dataBaseInfo.getRefreshTime()));
} }
sxDataService.syncAtiveShops(new DataBaseInfo(),commentModel); sxDataService.syncAtiveShops(new DataBaseInfo(),commentModel);
//sxDataService.syncAtiveShops(new DataBaseInfo(),new CommentModel()); //sxDataService.syncAtiveShops(new DataBaseInfo(),new CommentModel());

View File

@ -567,7 +567,7 @@ public class SxDataDao extends BaseDao{
activeDto.setActivityTypeId(3); activeDto.setActivityTypeId(3);
activeDto.setActiveMaxDesList(activeMaxDesList); activeDto.setActiveMaxDesList(activeMaxDesList);
} }
activeDto.setFlowNo(rs.getString("flow_no")); activeDto.setFlowNo(rs.getString("other3"));
activeDto.setActivityReleasetime(rs.getDate("oper_date")); activeDto.setActivityReleasetime(rs.getDate("oper_date"));
activeDto.setActivityStarttime(rs.getDate("start_date")); activeDto.setActivityStarttime(rs.getDate("start_date"));
activeDto.setActivityEndtime(rs.getDate("end_date")); activeDto.setActivityEndtime(rs.getDate("end_date"));
@ -657,9 +657,10 @@ public class SxDataDao extends BaseDao{
activeShopInfo.setActivityName(""+total1+""+max1+",满"+total2+""+max2); activeShopInfo.setActivityName(""+total1+""+max1+",满"+total2+""+max2);
activeShopInfo.setActivityTypeId(3); activeShopInfo.setActivityTypeId(3);
} }
activeShopInfo.setActivityItemMinQuantity(rs.getBigDecimal("sale_qty"));
activeShopInfo.setActivityStarttime(rs.getDate("start_date")); activeShopInfo.setActivityStarttime(rs.getDate("start_date"));
activeShopInfo.setActivityEndtime(rs.getDate("end_date")); activeShopInfo.setActivityEndtime(rs.getDate("end_date"));
activeShopInfo.setFlowNo(rs.getString("flow_no")); activeShopInfo.setFlowNo(rs.getString("other3"));
if(DateUtil.compare(activeShopInfo.getActivityEndtime(),DateUtil.date())>0){ if(DateUtil.compare(activeShopInfo.getActivityEndtime(),DateUtil.date())>0){
activeShopInfo.setActivityState(1);//正常进行中 activeShopInfo.setActivityState(1);//正常进行中
}else { }else {

View File

@ -25,12 +25,13 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource; import org.springframework.core.io.Resource;
import org.springframework.http.*; import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.MultiValueMap;
import org.springframework.util.StreamUtils; import org.springframework.util.StreamUtils;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
@ -38,6 +39,7 @@ import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.nio.file.Files; import java.nio.file.Files;
import java.time.Duration;
import java.time.Instant; import java.time.Instant;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -73,7 +75,7 @@ public class SxDataServiceImp extends SxDataAbstService implements SxDataService
*/ */
@Override @Override
public void SyncCategory(DataBaseInfo dataBaseInfo, CommentModel commentModel) { public void SyncCategory(DataBaseInfo dataBaseInfo, CommentModel commentModel) {
// dataBaseInfo= getDataBaseInfo(commentModel); dataBaseInfo= getDataBaseInfo(commentModel);
// 记录总数 // 记录总数
Integer total = sxDataDao.getTBdItemClsTotal(dataBaseInfo); Integer total = sxDataDao.getTBdItemClsTotal(dataBaseInfo);
if(total==0){ if(total==0){
@ -98,7 +100,7 @@ public class SxDataServiceImp extends SxDataAbstService implements SxDataService
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
String sign=CommonUtil.generateOpenSign(jsonString,commentModel.getAppKey(),commentModel.getAppId()); String sign=CommonUtil.generateOpenSign(jsonString,commentModel.getAppId(),commentModel.getAppKey());
log.info("sign:{}",sign); log.info("sign:{}",sign);
String code= HttpUtils.postData(restTemplate,remoteIp+HttpUtils.URL_SYNC_CATEGORY String code= HttpUtils.postData(restTemplate,remoteIp+HttpUtils.URL_SYNC_CATEGORY
+"?appKey="+commentModel.getAppKey() +"?appKey="+commentModel.getAppKey()
@ -133,11 +135,9 @@ public class SxDataServiceImp extends SxDataAbstService implements SxDataService
syncAllGoods(dataBaseInfo, commentModel); syncAllGoods(dataBaseInfo, commentModel);
break; break;
case "02"://增量 todo test case "02"://增量 todo test
String sycnTime=commentModel.getSyncTime(); syncIncrementAddGoods(dataBaseInfo, commentModel);
syncIncrementAddGoods(dataBaseInfo, commentModel);//同步新商品 syncIncrementModifyGoods(dataBaseInfo, commentModel);
// syncIncrementModifyGoods(dataBaseInfo, commentModel); syncIncrementStock(dataBaseInfo, commentModel);
syncIncrementStock(dataBaseInfo, commentModel);//同步库存
syncFlowPrice(dataBaseInfo, commentModel,sycnTime);//同步调价单
break; break;
} }
@ -150,7 +150,7 @@ public class SxDataServiceImp extends SxDataAbstService implements SxDataService
*/ */
@Override @Override
public void SyncBranchList(DataBaseInfo dataBaseInfo, CommentModel commentModel) { public void SyncBranchList(DataBaseInfo dataBaseInfo, CommentModel commentModel) {
// dataBaseInfo= getDataBaseInfo(commentModel); dataBaseInfo= getDataBaseInfo(commentModel);
List<BrandModel> brandModels= sxDataDao.getBdBrandList(dataBaseInfo); List<BrandModel> brandModels= sxDataDao.getBdBrandList(dataBaseInfo);
if(brandModels!=null&&brandModels.size()>0){ if(brandModels!=null&&brandModels.size()>0){
String jsonString =""; String jsonString ="";
@ -163,7 +163,7 @@ public class SxDataServiceImp extends SxDataAbstService implements SxDataService
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
String sign=CommonUtil.generateOpenSign(jsonString,commentModel.getAppKey(),commentModel.getAppId()); String sign=CommonUtil.generateOpenSign(jsonArray.toString(),commentModel.getAppId(),commentModel.getAppKey());
log.info("sign={}",sign); log.info("sign={}",sign);
String code= HttpUtils.postData(restTemplate,remoteIp+HttpUtils.URL_SYNC_BRAND String code= HttpUtils.postData(restTemplate,remoteIp+HttpUtils.URL_SYNC_BRAND
+"?appKey="+commentModel.getAppKey() +"?appKey="+commentModel.getAppKey()
@ -184,7 +184,7 @@ public class SxDataServiceImp extends SxDataAbstService implements SxDataService
*/ */
@Override @Override
public void SyncVipList(DataBaseInfo dataBaseInfo, CommentModel commentModel) { public void SyncVipList(DataBaseInfo dataBaseInfo, CommentModel commentModel) {
// dataBaseInfo= getDataBaseInfo(commentModel); dataBaseInfo= getDataBaseInfo(commentModel);
String where="where mobile is not null and mobile <>'' "; String where="where mobile is not null and mobile <>'' ";
if(StringUtils.isNotEmpty(commentModel.getSyncTime())){ if(StringUtils.isNotEmpty(commentModel.getSyncTime())){
where+="and oper_date > '"+commentModel.getSyncTime()+"'"; where+="and oper_date > '"+commentModel.getSyncTime()+"'";
@ -207,11 +207,10 @@ public class SxDataServiceImp extends SxDataAbstService implements SxDataService
memberList=ConverList(sxSyncVipList); memberList=ConverList(sxSyncVipList);
Gson gson=new Gson(); Gson gson=new Gson();
String jsonString = gson.toJson(memberList); String jsonString = gson.toJson(memberList);
String sign=CommonUtil.generateOpenSign(jsonString,commentModel.getAppKey(),commentModel.getAppId()); String sign=CommonUtil.generateOpenSign(jsonString,commentModel.getAppId(),commentModel.getAppKey());
String code= HttpUtils.postData(restTemplate,remoteIp+HttpUtils.URL_SYNC_MEMBER String code= HttpUtils.postData(restTemplate,remoteIp+HttpUtils.URL_SYNC_MEMBER
+"?appKey="+commentModel.getAppKey() +"?appKey="+commentModel.getAppKey()
+"&sign="+sign,memberList);//todo 后期改为文件传输 +"&sign="+sign,memberList);//todo 后期改为文件传输
if (!HttpUtils.SUCCESSCODE.equals(code)) { if (!HttpUtils.SUCCESSCODE.equals(code)) {
continue; continue;
} }
@ -239,26 +238,6 @@ public class SxDataServiceImp extends SxDataAbstService implements SxDataService
return parentId; return parentId;
} }
/**
* 获取父节点下的子节点
* @param dataBaseInfo
* @param parentId
* @return
*/
@Override
public String getCategoryChildren(DataBaseInfo dataBaseInfo,String parentId){
List<SxSyncCategory> sxSyncCategories=new SxDataDao().findTBdItemClsList(dataBaseInfo);
String childrens=commonCache.get(CommonCache.CACHE_CATEGROY+parentId);
if(StringUtils.isEmpty(childrens)){
log.info(JSONUtil.toJsonStr(buildTree(sxSyncCategories,parentId)));
childrens=commonCache.get(CommonCache.CACHE_CATEGROY+parentId);
if(StringUtils.isEmpty(childrens)){
return parentId;
}
}
return childrens;
}
/** /**
* 构建树节点 * 构建树节点
* @param sxSyncCategories * @param sxSyncCategories
@ -282,7 +261,7 @@ public class SxDataServiceImp extends SxDataAbstService implements SxDataService
public List<SxSyncCategory> getRootNode(List<SxSyncCategory> sxSyncCategories){ public List<SxSyncCategory> getRootNode(List<SxSyncCategory> sxSyncCategories){
List<SxSyncCategory> rootNodeList=new ArrayList<>(); List<SxSyncCategory> rootNodeList=new ArrayList<>();
for (SxSyncCategory node : sxSyncCategories) { for (SxSyncCategory node : sxSyncCategories) {
if (StringUtils.isEmpty(node.getCls_parent())) { if (null==node.getCls_parent()) {
rootNodeList.add(node); rootNodeList.add(node);
} }
} }
@ -310,60 +289,27 @@ public class SxDataServiceImp extends SxDataAbstService implements SxDataService
return root; return root;
} }
/**
* 判断是否有新增商品有新增商品才同步分类
* @param dataBaseInfo
* @param refreshTime
* @return
*/
public boolean isNewShop(DataBaseInfo dataBaseInfo, String refreshTime){
String where="where b.status='1' ";
where+=" and ( b.modify_date>'"+refreshTime+"' ";
where+=" or b.build_date>'"+refreshTime+"') ";
dataBaseInfo.setWhere(where);
int total = sxDataDao.getTBditemInfoTotal(dataBaseInfo);
log.info("判断库存数量,库存数量:{}",total);
return total>0;
}
/** /**
*同步所有商品 *同步所有商品
* @param dataBaseInfo * @param dataBaseInfo
* @param commentModel * @param commentModel
*/ */
private void syncAllGoods(DataBaseInfo dataBaseInfo, CommentModel commentModel){ private void syncAllGoods(DataBaseInfo dataBaseInfo, CommentModel commentModel){
//String where="where 1=1"; String where="where 1=1";
String where="where shop.status='1'";
Integer total =0; Integer total =0;
String parentId=getAndCacheTree(dataBaseInfo,dataBaseInfo.getCategoryName());//加载缓存用的 String parentId=getAndCacheTree(dataBaseInfo,dataBaseInfo.getCategoryName());//加载缓存用的
if(DicEnum.SYNCTYPE_02.getCode().equals(dataBaseInfo.getSyncType())){ if(DicEnum.SYNCTYPE_02.getCode().equals(dataBaseInfo.getSyncType())){
if (StringUtils.isNotEmpty(dataBaseInfo.getCategoryName())) { if (StringUtils.isNotEmpty(dataBaseInfo.getCategoryName())) {
//syncGoodsSearchModel.setItemClsno(childrens); //syncGoodsSearchModel.setItemClsno(childrens);
String childrens= commonCache.get(CommonCache.CACHE_CATEGROY+parentId); String childrens= commonCache.get(CommonCache.CACHE_CATEGROY+parentId);
where += " and shop.item_clsno in ('" + childrens + "')"; where += " and b.item_clsno in ('" + childrens + "')";
} }
if(StringUtils.isNotEmpty(commentModel.getSyncTime())){ if(StringUtils.isNotEmpty(commentModel.getSyncTime())){
where+=" and shop.modify_date>'"+commentModel.getSyncTime()+"' "; where+=" and b.modify_date>'"+commentModel.getSyncTime()+"' ";
where+=" or shop.build_date>'"+commentModel.getSyncTime()+"' "; where+=" or b.build_date>'"+commentModel.getSyncTime()+"' ";
} }
if(StringUtils.isNotEmpty(dataBaseInfo.getOperDate())){ if(StringUtils.isNotEmpty(dataBaseInfo.getOperDate())){
String stockOperateWhere=" ls.oper_date>'"+dataBaseInfo.getOperDate()+"' "; where+=" and ls.oper_date>'"+dataBaseInfo.getOperDate()+"' ";
dataBaseInfo.setStockOperateWhere(stockOperateWhere);
}
if(StringUtils.isNotEmpty(dataBaseInfo.getPriceOperatiem())){
where+=" and EXISTS ( " +
" select " +
" shop.item_no " +
" from " +
" t_pc_price_flow_detail tpfd " +
" left join t_pc_price_flow_master tppfm " +
" on " +
" tpfd.sheet_no = tppfm.sheet_no " +
" where " +
" tppfm.valid_flag = '1' " +//有效
" and shop.item_no=tpfd.item_no " +
" and tppfm.oper_date >'"+dataBaseInfo.getPriceOperatiem()+"' " +
" )";
} }
dataBaseInfo.setWhere(where); dataBaseInfo.setWhere(where);
// 记录总数 // 记录总数
@ -376,7 +322,7 @@ public class SxDataServiceImp extends SxDataAbstService implements SxDataService
log.info("暂无商品同步"); log.info("暂无商品同步");
return; return;
} }
//where+=" and"; where+=" and";
dataBaseInfo.setWhere(where); dataBaseInfo.setWhere(where);
// 总页数 // 总页数
@ -413,7 +359,7 @@ public class SxDataServiceImp extends SxDataAbstService implements SxDataService
+"&syncType="+DicEnum.MUAL_1.getCode() +"&syncType="+DicEnum.MUAL_1.getCode()
+"&refreshDateStr="+refreshDate, +"&refreshDateStr="+refreshDate,
JSONUtil.parseArray(folders)); JSONUtil.parseArray(folders));
log.info("商品总共有{}条数据,同步完成{}条",total,syncCount); log.info("商品分类总共有{}条数据,同步完成{}条",total,syncCount);
String code= HttpUtils.postData(restTemplate,remoteIp+HttpUtils.URL_SYNC_GOODS_READ String code= HttpUtils.postData(restTemplate,remoteIp+HttpUtils.URL_SYNC_GOODS_READ
+"?appKey="+commentModel.getAppKey() +"?appKey="+commentModel.getAppKey()
+"&sign="+commentModel.getAppId() +"&sign="+commentModel.getAppId()
@ -439,7 +385,7 @@ public class SxDataServiceImp extends SxDataAbstService implements SxDataService
String fileName=fileUtils.getFileName(syncType,page,FileUtils.txtEnd); String fileName=fileUtils.getFileName(syncType,page,FileUtils.txtEnd);
String filePath=file.getAbsolutePath(); String filePath=file.getAbsolutePath();
fileUtils.writeFile(filePath,fileName,content); fileUtils.writeFile(filePath,fileName,content);
String sign=CommonUtil.generateOpenSign(content,commentModel.getAppKey(),commentModel.getAppId()); String sign=CommonUtil.generateOpenSign(content,commentModel.getAppId(),commentModel.getAppKey());
commentModel.setSign(sign); commentModel.setSign(sign);
return webClientService.uploudSxData(filePath+FileUtils.pathSeparator+fileName,commentModel,page.toString(),syncType); return webClientService.uploudSxData(filePath+FileUtils.pathSeparator+fileName,commentModel,page.toString(),syncType);
} }
@ -483,16 +429,6 @@ public class SxDataServiceImp extends SxDataAbstService implements SxDataService
syncAllGoods(dataBaseInfo,commentModel); syncAllGoods(dataBaseInfo,commentModel);
} }
/**
* 增量同步 调价单变化
*/
private void syncFlowPrice(DataBaseInfo dataBaseInfo, CommentModel commentModel,String sycnTime){
dataBaseInfo.setPriceOperatiem(sycnTime);
commentModel.setSyncTime("");
dataBaseInfo.setOperDate("");
syncAllGoods(dataBaseInfo,commentModel);
}
/** /**
*获取特价商品 *获取特价商品
* @param dataBaseInfo * @param dataBaseInfo
@ -634,24 +570,12 @@ public class SxDataServiceImp extends SxDataAbstService implements SxDataService
} }
log.info("文件下载目录: {}", downloadDirectory); log.info("文件下载目录: {}", downloadDirectory);
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
// headers.set("User-Agent", "Apifox/1.0.0 (https://apifox.com)"); HttpEntity<String> requestEntity = new HttpEntity<>(headers);
//headers.setAccept(Collections.singletonList(MediaType.ALL)); // 对应 */*
// headers.set("Accept-Encoding", "gzip, deflate, br");
// 可以添加其他Apifox可能发送的头部
// headers.set("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8");
headers.set("Connection", "keep-alive");
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(headers);
String encryptedData = getPrimaryKey(); String encryptedData = getPrimaryKey();
String url = UriComponentsBuilder.fromHttpUrl(remoteIp + HttpUtils.URL_SYNC_GET_DOWNCLIENTJAR)
.queryParam("primaryKey", encryptedData)
.queryParam("clienVersionName", versionName)
.toUriString();
log.info("url:{}",url);
// RestTemplate myRestTemplate = createUnsafeRestTemplate();
ResponseEntity<Resource> response = restTemplate.exchange( ResponseEntity<Resource> response = restTemplate.exchange(
url, remoteIp+HttpUtils.URL_SYNC_GET_DOWNCLIENTJAR+"?primaryKey="+encryptedData
+"&clienVersionName="+versionName,
HttpMethod.GET, HttpMethod.GET,
requestEntity, requestEntity,
Resource.class); Resource.class);
@ -701,12 +625,9 @@ public class SxDataServiceImp extends SxDataAbstService implements SxDataService
log.error("文件下载失败:{}",e.getMessage()); log.error("文件下载失败:{}",e.getMessage());
return null; return null;
} }
File file=new File(downloadDirectory+originalFileName); return downloadDirectory+originalFileName;
return file.length()>0?downloadDirectory+originalFileName:null;
} }
@Override @Override
public void checkForUpdates() { public void checkForUpdates() {
log.info("curentPath:{}",JarPathUtil.getRuntimePath()); log.info("curentPath:{}",JarPathUtil.getRuntimePath());
@ -752,7 +673,6 @@ public class SxDataServiceImp extends SxDataAbstService implements SxDataService
DataBaseInfo dataBaseInfo=new DataBaseInfo(); DataBaseInfo dataBaseInfo=new DataBaseInfo();
if(null!=storeDbConfig){ if(null!=storeDbConfig){
dataBaseInfo.setIp(storeDbConfig.getDbIp()); dataBaseInfo.setIp(storeDbConfig.getDbIp());
dataBaseInfo.setUserName(storeDbConfig.getDbUsername());
dataBaseInfo.setPassword(storeDbConfig.getDbPassword()); dataBaseInfo.setPassword(storeDbConfig.getDbPassword());
dataBaseInfo.setDataBaseName(storeDbConfig.getDbName()); dataBaseInfo.setDataBaseName(storeDbConfig.getDbName());
dataBaseInfo.setDbPort(storeDbConfig.getDbPort()); dataBaseInfo.setDbPort(storeDbConfig.getDbPort());
@ -761,8 +681,6 @@ public class SxDataServiceImp extends SxDataAbstService implements SxDataService
dataBaseInfo.setCategoryName(storeDbConfig.getCategoryName()); dataBaseInfo.setCategoryName(storeDbConfig.getCategoryName());
dataBaseInfo.setRefreshTime(storeDbConfig.getRefreshTime()); dataBaseInfo.setRefreshTime(storeDbConfig.getRefreshTime());
dataBaseInfo.setIsTowSync(storeDbConfig.getIsTowSync()); dataBaseInfo.setIsTowSync(storeDbConfig.getIsTowSync());
dataBaseInfo.setShopGapTime(storeDbConfig.getShopGapTime());
dataBaseInfo.setSaleAccount(storeDbConfig.getSaleAccount());
return dataBaseInfo; return dataBaseInfo;
} }
return new DataBaseInfo(); return new DataBaseInfo();
@ -774,57 +692,28 @@ public class SxDataServiceImp extends SxDataAbstService implements SxDataService
log.info("不做双向同步数据库"); log.info("不做双向同步数据库");
return; return;
} }
String saleAccount= sxDataDao.getTRmCashier(dataBaseInfo,dataBaseInfo.getSaleAccount());
if(StringUtils.isEmpty(saleAccount)){
log.error("需要配置商城收银人员");
return;
}
JSONObject jsonObject= restTemplate.getForObject(remoteIp+HttpUtils.URL_SYNC_GET_STOR_DATA_RELEASE JSONObject jsonObject= restTemplate.getForObject(remoteIp+HttpUtils.URL_SYNC_GET_STOR_DATA_RELEASE
+"?appKey="+commentModel.getAppKey() +"?appKey="+commentModel.getAppKey()
+"&sign="+commentModel.getAppId(),JSONObject.class); +"&sign="+commentModel.getAppId(),JSONObject.class);
// String jsonStr="[{\"consumeId\":\"1986611923814223873\",\"orderId\":\"DD_20251107_1\",\"productNumber\":\"31011\",\"unitPrice\":10.90,\"quantity\":1.500,\"saleAmount\":16.35,\"status\":0,\"storeId\":78,\"createTime\":\"2025-11-07 01:49:26\",\"updateTime\":\"2025-11-07 01:49:26\"},{\"consumeId\":\"1986611923814223872\",\"orderId\":\"DD_20251107_2\",\"productNumber\":\"6909409023853\",\"unitPrice\":1.00,\"quantity\":1.000,\"saleAmount\":1.00,\"status\":0,\"storeId\":78,\"createTime\":\"2025-11-07 01:49:26\",\"updateTime\":\"2025-11-07 01:49:26\"},{\"consumeId\":\"1986611923814223874\",\"orderId\":\"DD_20251107_1\",\"productNumber\":\"6909409023853\",\"unitPrice\":1.00,\"quantity\":2.000,\"saleAmount\":2.00,\"status\":0,\"storeId\":78,\"createTime\":\"2025-11-07 01:49:26\",\"updateTime\":\"2025-11-07 01:49:26\"}]";
if(null!=jsonObject.get("result")){ if(null!=jsonObject.get("result")){
// Map map=(Map)jsonObject.get("result"); Map map=(Map)jsonObject.get("result");
String jsonStr= jsonObject.getStr("result"); sxDataDao.updateStoreData(dataBaseInfo,map);
List<ProductQuantityConsumptionDto> productQuantityConsumptionDtoList =
JSONUtil.toList(jsonStr,ProductQuantityConsumptionDto.class);
if(!productQuantityConsumptionDtoList.isEmpty()){
Map map = productQuantityConsumptionDtoList.stream()
.collect(Collectors.groupingBy(
ProductQuantityConsumptionDto::getProductNumber,
Collectors.reducing(
BigDecimal.ZERO,
ProductQuantityConsumptionDto::getQuantity,
BigDecimal::add
)
));
Map<String,ProductQuantityConsumptionDto> productQuantityConsumptionDtoMap=new HashMap<>();
productQuantityConsumptionDtoList.forEach(productQuantityConsumptionDto -> {
productQuantityConsumptionDtoMap.put(productQuantityConsumptionDto.getOrderId()+"-"+productQuantityConsumptionDto.getProductNumber(),productQuantityConsumptionDto);
});
sxDataDao.updateStoreData(dataBaseInfo,map,productQuantityConsumptionDtoMap,productQuantityConsumptionDtoList,commentModel);
}else {
log.info("无线上流水同步");
}
} }
} }
@Override @Override
public boolean syncAtive(DataBaseInfo dataBaseInfo, CommentModel commentModel) { public void syncAtive(DataBaseInfo dataBaseInfo, CommentModel commentModel) {
String where="where 1=1"; String where="where 1=1";
Integer total =0; Integer total =0;
if(StringUtils.isNotEmpty(commentModel.getSyncTime())){ if(StringUtils.isNotEmpty(commentModel.getSyncTime())){
where+=" and b.oper_date>'"+commentModel.getSyncTime()+"' "; where+=" and b.start_date>'"+commentModel.getSyncTime()+"' ";
// where+=" or b.oper_date>'"+commentModel.getSyncTime()+"') "; where+=" or b.oper_date>'"+commentModel.getSyncTime()+"' ";
} }
dataBaseInfo.setWhere(where); dataBaseInfo.setWhere(where);
total = sxDataDao.getNewActiveCount(dataBaseInfo); total = sxDataDao.getActiveCount(dataBaseInfo);
if(total==0){ if(total==0){
log.info("暂无活动同步"); log.info("暂无活动同步");
return false; return;
} }
// 总页数 // 总页数
int pages = CommonUtil.getPagesCount(total, SxDataDao.PAGESIZE); int pages = CommonUtil.getPagesCount(total, SxDataDao.PAGESIZE);
@ -833,13 +722,13 @@ public class SxDataServiceImp extends SxDataAbstService implements SxDataService
Date tenMinutesAgo = Date.from(Instant.now());//刷新时间 Date tenMinutesAgo = Date.from(Instant.now());//刷新时间
Date refreshDate= DateUtil.date(tenMinutesAgo); Date refreshDate= DateUtil.date(tenMinutesAgo);
for (int i = 1; i <=pages; i++) { for (int i = 1; i <=pages; i++) {
List<ActiveDto> activeDtos= sxDataDao.getNewActiveList(dataBaseInfo,i,SxDataDao.PAGESIZE); List<ActiveDto> activeDtos= sxDataDao.getActiveList(dataBaseInfo,i,SxDataDao.PAGESIZE);
Gson gson=new GsonBuilder() Gson gson=new GsonBuilder()
.setDateFormat("yyyy-MM-dd HH:mm:ss") // 设置全局 Date 格式 .setDateFormat("yyyy-MM-dd HH:mm:ss") // 设置全局 Date 格式
.create(); .create();
String jsonString= gson.toJson(activeDtos); String jsonString= gson.toJson(activeDtos);
JSONArray jsonArray = JSONUtil.parseArray(jsonString); JSONArray jsonArray = JSONUtil.parseArray(jsonString);
String sign=CommonUtil.generateOpenSign(jsonString,commentModel.getAppKey(),commentModel.getAppId()); String sign=CommonUtil.generateOpenSign(jsonString,commentModel.getAppId(),commentModel.getAppKey());
String code= HttpUtils.postData(restTemplate,remoteIp+HttpUtils.URL_SYNC_ACTIVE String code= HttpUtils.postData(restTemplate,remoteIp+HttpUtils.URL_SYNC_ACTIVE
+"?appKey="+commentModel.getAppKey() +"?appKey="+commentModel.getAppKey()
+"&sign="+sign, jsonArray); +"&sign="+sign, jsonArray);
@ -849,7 +738,7 @@ public class SxDataServiceImp extends SxDataAbstService implements SxDataService
syncCount+=activeDtos.size(); syncCount+=activeDtos.size();
} }
log.info("成功同步活动数据:"+syncCount); log.info("成功同步活动数据:"+syncCount);
return true;
} }
@Override @Override
@ -857,16 +746,13 @@ public class SxDataServiceImp extends SxDataAbstService implements SxDataService
String where="where 1=1"; String where="where 1=1";
Integer total =0; Integer total =0;
if(StringUtils.isNotEmpty(commentModel.getSyncTime())){ if(StringUtils.isNotEmpty(commentModel.getSyncTime())){
where+=" and t.oper_date>'"+commentModel.getSyncTime()+"' "; where+=" and start_date>'"+commentModel.getSyncTime()+"' ";
// where+=" or m.oper_date>'"+commentModel.getSyncTime()+"') "; where+=" or oper_date>'"+commentModel.getSyncTime()+"' ";
} }
dataBaseInfo.setWhere(where); dataBaseInfo.setWhere(where);
total = sxDataDao.getTotalSpecShop(dataBaseInfo); total = sxDataDao.getAllSpecCount(dataBaseInfo);
if(total==0){ if(total==0){
HttpUtils.postData(restTemplate,remoteIp+HttpUtils.URL_SYNC_REFRESH
+"?appKey="+commentModel.getAppKey()
+"&sign="+commentModel.getAppId(), new JSONArray());
log.info("暂无活动商品同步"); log.info("暂无活动商品同步");
return; return;
} }
@ -877,14 +763,14 @@ public class SxDataServiceImp extends SxDataAbstService implements SxDataService
Date tenMinutesAgo = Date.from(Instant.now());//刷新时间 Date tenMinutesAgo = Date.from(Instant.now());//刷新时间
Date refreshDate= DateUtil.date(tenMinutesAgo);//todo 要记录刷新时间 Date refreshDate= DateUtil.date(tenMinutesAgo);//todo 要记录刷新时间
for (int i = 1; i <=pages; i++) { for (int i = 1; i <=pages; i++) {
List<ActiveShopInfo> activeDtos= sxDataDao.getSpecShops(dataBaseInfo,i,SxDataDao.PAGESIZE); List<ActiveShopInfo> activeDtos= sxDataDao.getAllSpecPriceList(dataBaseInfo,i,SxDataDao.PAGESIZE);
Gson gson=new GsonBuilder() Gson gson=new GsonBuilder()
.setDateFormat("yyyy-MM-dd HH:mm:ss") // 设置全局 Date 格式 .setDateFormat("yyyy-MM-dd HH:mm:ss") // 设置全局 Date 格式
.registerTypeAdapter(BigDecimal.class,new BigDecimalTypeAdapter()) .registerTypeAdapter(BigDecimal.class,new BigDecimalTypeAdapter())
.create(); .create();
String jsonString=gson.toJson(activeDtos); String jsonString=gson.toJson(activeDtos);
JSONArray jsonArray = JSONUtil.parseArray(jsonString); JSONArray jsonArray = JSONUtil.parseArray(jsonString);
String sign=CommonUtil.generateOpenSign(jsonString,commentModel.getAppKey(),commentModel.getAppId()); String sign=CommonUtil.generateOpenSign(jsonString,commentModel.getAppId(),commentModel.getAppKey());
String code= HttpUtils.postData(restTemplate,remoteIp+HttpUtils.URL_SYNC_ACTIVE_SHOP String code= HttpUtils.postData(restTemplate,remoteIp+HttpUtils.URL_SYNC_ACTIVE_SHOP
+"?appKey="+commentModel.getAppKey() +"?appKey="+commentModel.getAppKey()
+"&sign="+sign, jsonArray); +"&sign="+sign, jsonArray);
@ -910,4 +796,5 @@ public class SxDataServiceImp extends SxDataAbstService implements SxDataService
return map; return map;
} }
} }