百度服务 fib bug

This commit is contained in:
Jack 2025-08-08 10:33:27 +08:00
parent d2882f39b0
commit a6f53f4535
5 changed files with 227 additions and 231 deletions

View File

@ -314,6 +314,7 @@
</dependencies>
<profiles>
<!--本地环境 -->
<profile>
<id>local</id>

View File

@ -5,7 +5,6 @@ import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.suisung.mall.common.exception.ApiException;
import com.suisung.mall.common.pojo.dto.BaiduAiBriefDTO;
import com.suisung.mall.common.utils.CheckUtil;
import com.suisung.mall.common.utils.HttpServletUtils;
@ -14,20 +13,26 @@ import com.suisung.mall.shop.config.BaiduConfig;
import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component
public class BaiduAi {
static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder().build();
private static final Logger log = LoggerFactory.getLogger(BaiduAi.class);
public static void main(String[] args) {
@Autowired
private BaiduConfig baiduConfig;
public void main(String[] args) {
String url = "https://lancerdt.oss-accelerate.aliyuncs.com/mall/images/media/store/10002/20240123d3c27007baf740c9bdc429f850259501.jpg";
BaiduAiBriefDTO brief = new BaiduAiBriefDTO();
@ -67,90 +72,7 @@ public class BaiduAi {
}
public static String addProductImg(String url, BaiduAiBriefDTO brief) {
Map<String, String> map = new HashMap<>();
map.put("url", url);
map.put("brief", JSON.toJSONString(brief));
String par = "";
try {
par = HttpServletUtils.generateParams(map, "utf-8");
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
RequestBody body = RequestBody.create(mediaType, par);
Request request = new Request.Builder()
.url("https://aip.baidubce.com/rest/2.0/image-classify/v1/realtime_search/product/add?access_token=" + BaiduConfig.getAccessToken())
.method("POST", body)
.addHeader("Content-Type", "application/x-www-form-urlencoded")
.addHeader("Accept", "application/json")
.build();
Response response = HTTP_CLIENT.newCall(request).execute();
String resultStr = response.body().string();
System.out.println(resultStr);
JSONObject jsonObject = JSONUtil.parseObj(resultStr);
Integer errCode = Convert.toInt(jsonObject.get("error_code"));
// String errMessage = Convert.toStr(jsonObject.get("error_msg"));
String contSign = Convert.toStr(jsonObject.get("cont_sign"));
if (CheckUtil.isNotEmpty(errCode)) {
return "";
}
return contSign;
} catch (Exception e) {
log.error("Baidu Ai 添加图片异常", e.getMessage());
return "";
}
}
public static String editProductImg(String url, BaiduAiBriefDTO brief) {
Map<String, String> map = new HashMap<>();
map.put("url", url);
map.put("brief", JSON.toJSONString(brief));
String par = "";
try {
par = HttpServletUtils.generateParams(map, "utf-8");
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
RequestBody body = RequestBody.create(mediaType, par);
Request request = new Request.Builder()
.url("https://aip.baidubce.com/rest/2.0/image-classify/v1/realtime_search/product/update?access_token=" + BaiduConfig.getAccessToken())
.method("POST", body)
.addHeader("Content-Type", "application/x-www-form-urlencoded")
.addHeader("Accept", "application/json")
.build();
Response response = HTTP_CLIENT.newCall(request).execute();
String resultStr = response.body().string();
System.out.println(resultStr);
JSONObject jsonObject = JSONUtil.parseObj(resultStr);
Integer errCode = Convert.toInt(jsonObject.get("error_code"));
String errMessage = Convert.toStr(jsonObject.get("error_msg"));
String contSign = Convert.toStr(jsonObject.get("cont_sign"));
if (CheckUtil.isEmpty(errCode)) {
} else {
return "";
}
return contSign;
} catch (Exception e) {
log.error("Baidu Ai 编辑图片异常", e.getMessage());
return "";
}
}
public static String removeProductImg(String url, String cont_sign) {
public String removeProductImg(String url, String cont_sign) {
Map<String, String> map = new HashMap<>();
if (CheckUtil.isNotEmpty(url)) {
@ -169,7 +91,7 @@ public class BaiduAi {
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
RequestBody body = RequestBody.create(mediaType, par);
Request request = new Request.Builder()
.url("https://aip.baidubce.com/rest/2.0/image-classify/v1/realtime_search/product/delete?access_token=" + BaiduConfig.getAccessToken())
.url("https://aip.baidubce.com/rest/2.0/image-classify/v1/realtime_search/product/delete?access_token=" + baiduConfig.getAccessToken())
.method("POST", body)
.addHeader("Content-Type", "application/x-www-form-urlencoded")
.addHeader("Accept", "application/json")
@ -195,7 +117,7 @@ public class BaiduAi {
}
}
public static List<Map> searchProductImg(String url, Integer pn, Integer rn) {
public List<Map> searchProductImg(String url, Integer pn, Integer rn) {
Map<String, String> map = new HashMap<>();
map.put("url", url);
@ -216,7 +138,7 @@ public class BaiduAi {
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
RequestBody body = RequestBody.create(mediaType, par);
Request request = new Request.Builder()
.url("https://aip.baidubce.com/rest/2.0/image-classify/v1/realtime_search/product/search?access_token=" + BaiduConfig.getAccessToken())
.url("https://aip.baidubce.com/rest/2.0/image-classify/v1/realtime_search/product/search?access_token=" + baiduConfig.getAccessToken())
.method("POST", body)
.addHeader("Content-Type", "application/x-www-form-urlencoded")
.addHeader("Accept", "application/json")
@ -254,4 +176,85 @@ public class BaiduAi {
return null;
}
}
public String addProductImg(String url, BaiduAiBriefDTO brief) {
Map<String, String> map = new HashMap<>();
map.put("url", url);
map.put("brief", JSON.toJSONString(brief));
String par = "";
try {
par = HttpServletUtils.generateParams(map, "utf-8");
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
RequestBody body = RequestBody.create(mediaType, par);
Request request = new Request.Builder()
.url("https://aip.baidubce.com/rest/2.0/image-classify/v1/realtime_search/product/add?access_token=" + baiduConfig.getAccessToken())
.method("POST", body)
.addHeader("Content-Type", "application/x-www-form-urlencoded")
.addHeader("Accept", "application/json")
.build();
Response response = HTTP_CLIENT.newCall(request).execute();
String resultStr = response.body().string();
System.out.println(resultStr);
JSONObject jsonObject = JSONUtil.parseObj(resultStr);
Integer errCode = Convert.toInt(jsonObject.get("error_code"));
// String errMessage = Convert.toStr(jsonObject.get("error_msg"));
String contSign = Convert.toStr(jsonObject.get("cont_sign"));
if (CheckUtil.isNotEmpty(errCode)) {
return "";
}
return contSign;
} catch (Exception e) {
log.error("Baidu Ai 添加图片异常", e.getMessage());
return "";
}
}
public String editProductImg(String url, BaiduAiBriefDTO brief) {
Map<String, String> map = new HashMap<>();
map.put("url", url);
map.put("brief", JSON.toJSONString(brief));
String par = "";
try {
par = HttpServletUtils.generateParams(map, "utf-8");
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
RequestBody body = RequestBody.create(mediaType, par);
Request request = new Request.Builder()
.url("https://aip.baidubce.com/rest/2.0/image-classify/v1/realtime_search/product/update?access_token=" + baiduConfig.getAccessToken())
.method("POST", body)
.addHeader("Content-Type", "application/x-www-form-urlencoded")
.addHeader("Accept", "application/json")
.build();
Response response = HTTP_CLIENT.newCall(request).execute();
String resultStr = response.body().string();
System.out.println(resultStr);
JSONObject jsonObject = JSONUtil.parseObj(resultStr);
Integer errCode = Convert.toInt(jsonObject.get("error_code"));
String errMessage = Convert.toStr(jsonObject.get("error_msg"));
String contSign = Convert.toStr(jsonObject.get("cont_sign"));
if (CheckUtil.isEmpty(errCode)) {
} else {
return "";
}
return contSign;
} catch (Exception e) {
log.error("Baidu Ai 编辑图片异常", e.getMessage());
return "";
}
}
}

View File

@ -1,9 +1,7 @@
package com.suisung.mall.shop.config;
import com.suisung.mall.shop.base.service.AccountBaseConfigService;
import okhttp3.*;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
@ -13,26 +11,20 @@ import java.io.IOException;
* OSS对象存储相关配置
*/
@Configuration
//@Service
public class BaiduConfig {
@Autowired
static private AccountBaseConfigService accountBaseConfigService;
static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder().build();
@Value("#{accountBaseConfigService.getConfig('baidu_app_id')}")
static private String appId;
private String appId;
@Value("#{accountBaseConfigService.getConfig('baidu_secret_id')}")
static private String apiKey;
private String apiKey;
@Value("#{accountBaseConfigService.getConfig('baidu_secret_key')}")
static private String secretKey;
private String secretKey;
@Value("#{accountBaseConfigService.getConfig('baidu_translate_app_id')}")
static private String translateAppId;
private String translateAppId;
@Value("#{accountBaseConfigService.getConfig('baidu_translate_app_key')}")
static private String translateAppKey;
static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder().build();
private String translateAppKey;
/**
* 从用户的AKSK生成鉴权签名Access Token
@ -40,7 +32,7 @@ public class BaiduConfig {
* @return 鉴权签名Access Token
* @throws IOException IO异常
*/
public static String getAccessToken() throws IOException {
public String getAccessToken() throws IOException {
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
RequestBody body = RequestBody.create(mediaType, "grant_type=client_credentials&client_id=" + apiKey

View File

@ -25,7 +25,6 @@ import com.suisung.mall.common.constant.CommonConstant;
import com.suisung.mall.common.constant.ConfigConstant;
import com.suisung.mall.common.constant.MqConstant;
import com.suisung.mall.common.domain.UserDto;
import com.suisung.mall.common.enums.DicEnum;
import com.suisung.mall.common.exception.ApiException;
import com.suisung.mall.common.feignService.EduService;
import com.suisung.mall.common.feignService.SearchService;
@ -49,7 +48,6 @@ import com.suisung.mall.common.utils.CSVUtils;
import com.suisung.mall.common.utils.CheckUtil;
import com.suisung.mall.common.utils.CommonUtil;
import com.suisung.mall.common.utils.I18nUtil;
import com.suisung.mall.core.web.service.RedisService;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.shop.activity.service.ShopActivityGroupbookingService;
import com.suisung.mall.shop.base.service.*;
@ -65,8 +63,6 @@ import com.suisung.mall.shop.product.pojo.vo.ProductVo;
import com.suisung.mall.shop.product.service.*;
import com.suisung.mall.shop.sixun.service.SxSyncGoodsService;
import com.suisung.mall.shop.store.service.*;
import com.suisung.mall.shop.sync.service.ProductMappingService;
import com.suisung.mall.shop.sync.service.StoreDbConfigService;
import com.suisung.mall.shop.user.service.*;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
@ -106,6 +102,7 @@ import static io.seata.common.util.LambdaUtils.distinctByKey;
@Transactional
@Service
public class ShopProductBaseServiceImpl extends BaseServiceImpl<ShopProductBaseMapper, ShopProductBase> implements ShopProductBaseService {
private final static int delate_batch_limit = 100;//删除最大限制
private final Logger logger = LoggerFactory.getLogger(ShopProductBaseServiceImpl.class);
@Autowired
private ShopBaseProductCategoryService shopBaseProductCategoryService;
@ -201,15 +198,10 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl<ShopProductBaseM
private ShopBaseLangMetaService shopBaseLangMetaService;
@Autowired
private SxSyncGoodsService sxSyncGoodsService;
@Autowired
private PlatformTransactionManager transactionManager;
@Autowired
private ProductMappingService productMappingService;
private final static int delate_batch_limit=100;//删除最大限制
private BaiduAi BaiduAi;
@Override
public boolean trySaveProduct(String productObj, String productItems) {
@ -870,7 +862,7 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl<ShopProductBaseM
if (StrUtil.isNotBlank(product_number)) {
QueryWrapper<ShopProductIndex> indexQueryWrapper = new QueryWrapper<>();
indexQueryWrapper.eq("product_number", product_number);
indexQueryWrapper.eq("store_id",store_id);
indexQueryWrapper.eq("store_id", store_id);
ShopProductIndex temp_info_row = shopProductIndexService.findOne(indexQueryWrapper);
if (temp_info_row != null && !ObjectUtil.equal(temp_info_row.getProduct_id(), productId)) {
// 商品货号已经存在不可重
@ -999,8 +991,8 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl<ShopProductBaseM
// todo 生成商家SKU
String sku_uniqid = "default";
if(CollUtil.isNotEmpty(spec_item_ids)){
sku_uniqid = CollUtil.join(spec_item_ids, "-");
if (CollUtil.isNotEmpty(spec_item_ids)) {
sku_uniqid = CollUtil.join(spec_item_ids, "-");
}
String product_item_seq_val = String.format("%s:%s", productId, sku_uniqid);
String product_item_seq_id = SecureUtil.md5(product_item_seq_val);
@ -1008,12 +1000,12 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl<ShopProductBaseM
//判断是否存在
ShopProductItemSeq product_item_seq_row = shopProductItemSeqService.get(product_item_seq_id);
//新增反向校验
if(null == product_item_seq_row){
if (null == product_item_seq_row) {
QueryWrapper<ShopProductItemSeq> itemSeqQueryWrapper = new QueryWrapper<>();
itemSeqQueryWrapper.eq("item_id",item_row.getItem_id());
itemSeqQueryWrapper.eq("product_id",item_row.getProduct_id());
product_item_seq_row= shopProductItemSeqService.findOne(itemSeqQueryWrapper);
if(null!=product_item_seq_row){
itemSeqQueryWrapper.eq("item_id", item_row.getItem_id());
itemSeqQueryWrapper.eq("product_id", item_row.getProduct_id());
product_item_seq_row = shopProductItemSeqService.findOne(itemSeqQueryWrapper);
if (null != product_item_seq_row) {
product_item_seq_row.setProduct_item_seq_id(product_item_seq_id);
product_item_seq_row.setProduct_item_seq_val(product_item_seq_val);
shopProductItemSeqService.updateSeqIdByItemIdAndProductId(product_item_seq_row);
@ -1081,24 +1073,24 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl<ShopProductBaseM
if (CollUtil.isNotEmpty(item_ids_deprecate)) {
QueryWrapper<ShopUserCart> cartQueryWrapper = new QueryWrapper<>();
cartQueryWrapper.in("item_id", item_ids_deprecate);
List<ShopUserCart> shopUserCarts=shopUserCartService.list(cartQueryWrapper);
List<Integer> shopUserCartIds=shopUserCarts.stream().map(ShopUserCart::getCart_id).collect(Collectors.toList());
if(CollectionUtil.isNotEmpty(shopUserCarts)){
List<ShopUserCart> shopUserCarts = shopUserCartService.list(cartQueryWrapper);
List<Integer> shopUserCartIds = shopUserCarts.stream().map(ShopUserCart::getCart_id).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(shopUserCarts)) {
shopUserCartService.removeBatchByIds(shopUserCartIds);
}
QueryWrapper<ShopProductItemSeq> seqQueryWrapper = new QueryWrapper<>();
seqQueryWrapper.in("item_id", item_ids_deprecate);
List<ShopProductItemSeq> shopProductItemSeqs=shopProductItemSeqService.list(seqQueryWrapper);
List<String> shopProductItemSeqIds=shopProductItemSeqs.stream().map(ShopProductItemSeq::getProduct_item_seq_id).collect(Collectors.toList());
if(CollectionUtil.isNotEmpty(shopProductItemSeqIds)) {
List<ShopProductItemSeq> shopProductItemSeqs = shopProductItemSeqService.list(seqQueryWrapper);
List<String> shopProductItemSeqIds = shopProductItemSeqs.stream().map(ShopProductItemSeq::getProduct_item_seq_id).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(shopProductItemSeqIds)) {
shopProductItemSeqService.removeBatchByIds(shopProductItemSeqIds);
}
QueryWrapper<ShopStoreActivityItem> activityItemQueryWrapper = new QueryWrapper<>();
activityItemQueryWrapper.in("item_id", item_ids_deprecate);
List<ShopStoreActivityItem> shopStoreActivityItems= shopStoreActivityItemService.list(activityItemQueryWrapper);
List<Long> shopStoreActivityItemIds=shopStoreActivityItems.stream().map(ShopStoreActivityItem::getActivity_item_id).collect(Collectors.toList());
if(CollectionUtil.isNotEmpty(shopStoreActivityItemIds)) {
List<ShopStoreActivityItem> shopStoreActivityItems = shopStoreActivityItemService.list(activityItemQueryWrapper);
List<Long> shopStoreActivityItemIds = shopStoreActivityItems.stream().map(ShopStoreActivityItem::getActivity_item_id).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(shopStoreActivityItemIds)) {
shopStoreActivityItemService.removeBatchByIds(shopStoreActivityItemIds);
}
if (!shopProductItemService.remove(item_ids_deprecate)) {
@ -2756,9 +2748,9 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl<ShopProductBaseM
public Map getList(QueryWrapper<ShopProductBase> wrapper, Integer pageNum, Integer pageSize) {
Map map = new HashMap();
Integer store_id = Convert.toInt(getCurrentUser().getStore_id(),1);
Integer store_id = Convert.toInt(getCurrentUser().getStore_id(), 1);
Integer nodeid = Convert.toInt(getParameter("nodeid"), 0);
boolean openCount=getParameter("openCount",false);//1是开启0是不开启
boolean openCount = getParameter("openCount", false);//1是开启0是不开启
if (CheckUtil.isNotEmpty(nodeid)) {
IPage<Long> listItem = shopProductBaseMapper.listItem(new Page<>(1, 9999), nodeid);
List<Long> item_ids = Convert.toList(Long.class, listItem.getRecords());
@ -2993,15 +2985,15 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl<ShopProductBaseM
}
}
if(openCount){
Integer[] countArrays= countShopIndex(category_ids,store_id);
List<Map> itemsMap= (List<Map>) data.get("items");
data.put("items", countItemQuantity(itemsMap));//统计存储
data.put("allRecords",countArrays[0]);//全部
data.put("normalRecords",countArrays[1]);//销售中
data.put("offRecords",countArrays[2]);//仓库中
data.put("illegalRecords",countArrays[3]);//违规禁售
data.put("unCheckedRecords",countArrays[4]);//未分配或者待审核
if (openCount) {
Integer[] countArrays = countShopIndex(category_ids, store_id);
List<Map> itemsMap = (List<Map>) data.get("items");
data.put("items", countItemQuantity(itemsMap));//统计存储
data.put("allRecords", countArrays[0]);//全部
data.put("normalRecords", countArrays[1]);//销售中
data.put("offRecords", countArrays[2]);//仓库中
data.put("illegalRecords", countArrays[3]);//违规禁售
data.put("unCheckedRecords", countArrays[4]);//未分配或者待审核
}
return data;
}
@ -3456,25 +3448,25 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl<ShopProductBaseM
QueryWrapper<ShopUserCart> cartQueryWrapper = new QueryWrapper<>();
cartQueryWrapper.in("item_id", product_item_ids);
List<ShopUserCart> shopUserCarts=shopUserCartService.list(cartQueryWrapper);
List<Integer> shopUserCartIds=shopUserCarts.stream().map(ShopUserCart::getCart_id).collect(Collectors.toList());
if(CollectionUtil.isNotEmpty(shopUserCartIds)){
List<ShopUserCart> shopUserCarts = shopUserCartService.list(cartQueryWrapper);
List<Integer> shopUserCartIds = shopUserCarts.stream().map(ShopUserCart::getCart_id).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(shopUserCartIds)) {
shopUserCartService.removeBatchByIds(shopUserCartIds);
}
QueryWrapper<ShopProductItemSeq> seqQueryWrapper = new QueryWrapper<>();
seqQueryWrapper.in("item_id", product_item_ids);
List<ShopProductItemSeq> shopProductItemSeqs=shopProductItemSeqService.list(seqQueryWrapper);
List<String> shopProductItemSeqIds=shopProductItemSeqs.stream().map(ShopProductItemSeq::getProduct_item_seq_id).collect(Collectors.toList());
if(CollectionUtil.isNotEmpty(shopProductItemSeqIds)) {
List<ShopProductItemSeq> shopProductItemSeqs = shopProductItemSeqService.list(seqQueryWrapper);
List<String> shopProductItemSeqIds = shopProductItemSeqs.stream().map(ShopProductItemSeq::getProduct_item_seq_id).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(shopProductItemSeqIds)) {
shopProductItemSeqService.removeBatchByIds(shopProductItemSeqIds);
}
}
QueryWrapper<ShopStoreActivityItem> itemQueryWrapper = new QueryWrapper<>();
itemQueryWrapper.eq("product_id", product_id);
ShopStoreActivityItem shopStoreActivityItem=shopStoreActivityItemService.findOne(itemQueryWrapper);
if(null!=shopStoreActivityItem){
ShopStoreActivityItem shopStoreActivityItem = shopStoreActivityItemService.findOne(itemQueryWrapper);
if (null != shopStoreActivityItem) {
shopStoreActivityItemService.remove(shopStoreActivityItem.getActivity_item_id());
}
if (!remove(product_id)) {
@ -5358,12 +5350,12 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl<ShopProductBaseM
// 已存在商品设置ID并加入更新列表
String existIdAndState = existingProducts.get(key);
String [] existBaseIdAndState= existIdAndState.split("_");
String[] existBaseIdAndState = existIdAndState.split("_");
Long existId = Long.valueOf(existBaseIdAndState[0]);
Integer product_state_id = Integer.valueOf(existBaseIdAndState[1]);
base.setProduct_id(existId);
base.setProduct_src_id(existId);
if(!(base.getProduct_state_id()==StateCode.PRODUCT_STATE_OFF_THE_SHELF_UNCHECK)){//重新分配
if (!(base.getProduct_state_id() == StateCode.PRODUCT_STATE_OFF_THE_SHELF_UNCHECK)) {//重新分配
base.setProduct_state_id(product_state_id);
}
shopProductBaseList.get(i).setProduct_id(existId);
@ -5572,7 +5564,7 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl<ShopProductBaseM
updateShopProductDetailList.get(i).setProduct_id(productId);
updateShopProductInfoList.get(i).setProduct_id(productId);
//计算规格
if(existingProducts.get(productId)!=null){
if (existingProducts.get(productId) != null) {
udpateShopProductItemList.get(i).get(0).setItem_id(existingProducts.get(productId));
udpateItemIds.add(existingProducts.get(productId));
}
@ -6069,7 +6061,7 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl<ShopProductBaseM
return existing.stream()
.collect(Collectors.toMap(
p -> p.getStore_id() + "_" + p.getProduct_number(),
p -> p.getProduct_id()+"_"+ p.getProduct_state_id()
p -> p.getProduct_id() + "_" + p.getProduct_state_id()
));
}
@ -6092,7 +6084,7 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl<ShopProductBaseM
.eq("product_id", pair.getSecond()));
});
query.groupBy("product_id");
List<ShopProductItem> existing = shopProductItemService.list(query);
List<ShopProductItem> existing = shopProductItemService.list(query);
// 4. 构建存在商品的映射表
return existing.stream()
@ -6112,7 +6104,7 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl<ShopProductBaseM
// 使用IN查询优化根据数据库特性可能需要分批
QueryWrapper<ShopProductBase> query = new QueryWrapper<>();
query.select("product_id", "store_id", "product_number","product_state_id");
query.select("product_id", "store_id", "product_number", "product_state_id");
// 构建OR条件 (store_id=X AND product_number=Y) OR (store_id=A AND product_number=B)...
storeProductPairs.forEach(pair -> {
@ -6204,51 +6196,51 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl<ShopProductBaseM
}
//计算全部销售中仓库中违规禁销未分配商品的数量
public Integer[] countShopIndex(List<Integer> category_ids,Integer storeId) {
//商品状态:1001-正常;1002-下架仓库中;1003-待审核; 1000-违规禁售,1003
public Integer[] countShopIndex(List<Integer> category_ids, Integer storeId) {
//商品状态:1001-正常;1002-下架仓库中;1003-待审核; 1000-违规禁售,1003
int taskCount = 5;
CompletableFuture<Integer> count1 = CompletableFuture.supplyAsync(() -> {
QueryWrapper<ShopProductIndex> queryWrapper=new QueryWrapper<>();
if(CollectionUtil.isNotEmpty(category_ids)){
queryWrapper.in("category_id",category_ids);
QueryWrapper<ShopProductIndex> queryWrapper = new QueryWrapper<>();
if (CollectionUtil.isNotEmpty(category_ids)) {
queryWrapper.in("category_id", category_ids);
}
queryWrapper.eq("store_id",storeId);
queryWrapper.eq("store_id", storeId);
return ((int) shopProductIndexService.count(queryWrapper));
});
CompletableFuture<Integer> count2 = CompletableFuture.supplyAsync(() -> {
QueryWrapper<ShopProductIndex> queryWrapper=new QueryWrapper<>();
if(CollectionUtil.isNotEmpty(category_ids)){
queryWrapper.in("category_id",category_ids);
QueryWrapper<ShopProductIndex> queryWrapper = new QueryWrapper<>();
if (CollectionUtil.isNotEmpty(category_ids)) {
queryWrapper.in("category_id", category_ids);
}
queryWrapper.eq("store_id",storeId);
queryWrapper.eq("product_state_id",StateCode.PRODUCT_STATE_NORMAL);
queryWrapper.eq("store_id", storeId);
queryWrapper.eq("product_state_id", StateCode.PRODUCT_STATE_NORMAL);
return ((int) shopProductIndexService.count(queryWrapper));
});
CompletableFuture<Integer> count3 = CompletableFuture.supplyAsync(() -> {
QueryWrapper<ShopProductIndex> queryWrapper=new QueryWrapper<>();
if(CollectionUtil.isNotEmpty(category_ids)){
queryWrapper.in("category_id",category_ids);
QueryWrapper<ShopProductIndex> queryWrapper = new QueryWrapper<>();
if (CollectionUtil.isNotEmpty(category_ids)) {
queryWrapper.in("category_id", category_ids);
}
queryWrapper.eq("store_id",storeId);
queryWrapper.eq("product_state_id",StateCode.PRODUCT_STATE_OFF_THE_SHELF);
queryWrapper.eq("store_id", storeId);
queryWrapper.eq("product_state_id", StateCode.PRODUCT_STATE_OFF_THE_SHELF);
return ((int) shopProductIndexService.count(queryWrapper));
});
CompletableFuture<Integer> count4 = CompletableFuture.supplyAsync(() -> {
QueryWrapper<ShopProductIndex> queryWrapper=new QueryWrapper<>();
if(CollectionUtil.isNotEmpty(category_ids)){
queryWrapper.in("category_id",category_ids);
QueryWrapper<ShopProductIndex> queryWrapper = new QueryWrapper<>();
if (CollectionUtil.isNotEmpty(category_ids)) {
queryWrapper.in("category_id", category_ids);
}
queryWrapper.eq("store_id",storeId);
queryWrapper.eq("product_state_id",StateCode.PRODUCT_STATE_ILLEGAL);
queryWrapper.eq("store_id", storeId);
queryWrapper.eq("product_state_id", StateCode.PRODUCT_STATE_ILLEGAL);
return ((int) shopProductIndexService.count(queryWrapper));
});
CompletableFuture<Integer> count5 = CompletableFuture.supplyAsync(() -> {
QueryWrapper<ShopProductIndex> queryWrapper=new QueryWrapper<>();
if(CollectionUtil.isNotEmpty(category_ids)){
queryWrapper.in("category_id",category_ids);
QueryWrapper<ShopProductIndex> queryWrapper = new QueryWrapper<>();
if (CollectionUtil.isNotEmpty(category_ids)) {
queryWrapper.in("category_id", category_ids);
}
queryWrapper.eq("store_id",storeId);
queryWrapper.eq("product_state_id",StateCode.PRODUCT_STATE_OFF_THE_SHELF_UNCHECK);
queryWrapper.eq("store_id", storeId);
queryWrapper.eq("product_state_id", StateCode.PRODUCT_STATE_OFF_THE_SHELF_UNCHECK);
return ((int) shopProductIndexService.count(queryWrapper));
});
@ -6271,27 +6263,28 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl<ShopProductBaseM
}
/**
*统计商品的库存
* 统计商品的库存
*
* @param items
* @return
*/
private List<Map> countItemQuantity(List<Map> items){
if(items.isEmpty()){
private List<Map> countItemQuantity(List<Map> items) {
if (items.isEmpty()) {
return items;
}
List<Long> prductIds=items.stream().map(map -> {
return (Long)map.get("product_id");
List<Long> prductIds = items.stream().map(map -> {
return (Long) map.get("product_id");
}).collect(Collectors.toList());
Integer storId= MapUtil.getInt(items.get(0),"store_id",1);
QueryWrapper<ShopProductItem> queryWrapper=new QueryWrapper<>();
Integer storId = MapUtil.getInt(items.get(0), "store_id", 1);
QueryWrapper<ShopProductItem> queryWrapper = new QueryWrapper<>();
queryWrapper.select("product_id,sum(item_quantity) as item_quantity");
queryWrapper.in("product_id",prductIds);
queryWrapper.eq("store_id",storId);
queryWrapper.in("product_id", prductIds);
queryWrapper.eq("store_id", storId);
queryWrapper.groupBy("product_id");
List<ShopProductItem> shopProductItems= shopProductItemService.list(queryWrapper);
Map<Long,Integer> countMap=shopProductItems.stream().collect(Collectors.toMap(ShopProductItem::getProduct_id,ShopProductItem::getItem_quantity));
List<ShopProductItem> shopProductItems = shopProductItemService.list(queryWrapper);
Map<Long, Integer> countMap = shopProductItems.stream().collect(Collectors.toMap(ShopProductItem::getProduct_id, ShopProductItem::getItem_quantity));
items.forEach(shopProductIndex -> {
shopProductIndex.put("itemQuantity",MapUtil.getLong(countMap,shopProductIndex.get("product_id")));
shopProductIndex.put("itemQuantity", MapUtil.getLong(countMap, shopProductIndex.get("product_id")));
});
return items;
}
@ -6299,13 +6292,13 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl<ShopProductBaseM
@Override
@Transactional
public boolean removeByProductIds(String product_ids) {
if(product_ids.contains(",")){
String[] productIds= product_ids.split(",");
if(productIds.length>delate_batch_limit){
throw new ApiException("最大删除数量为100");
}
List<String> productIdList=Arrays.asList(productIds);
return removeByProductBatch(productIdList);
if (product_ids.contains(",")) {
String[] productIds = product_ids.split(",");
if (productIds.length > delate_batch_limit) {
throw new ApiException("最大删除数量为100");
}
List<String> productIdList = Arrays.asList(productIds);
return removeByProductBatch(productIdList);
}
return removeByProductId(Long.valueOf(product_ids));
}
@ -6323,9 +6316,9 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl<ShopProductBaseM
}
// 不使用缓存
QueryWrapper<ShopProductBase> queryWrapper = new QueryWrapper<>();
queryWrapper.in("product_id",productIdList);
List<ShopProductBase> shopProductBaseList= shopProductBaseService.list(queryWrapper);
if(shopProductBaseList.size()!=productIdList.size()){
queryWrapper.in("product_id", productIdList);
List<ShopProductBase> shopProductBaseList = shopProductBaseService.list(queryWrapper);
if (shopProductBaseList.size() != productIdList.size()) {
throw new ApiException("存在商品编号不存在,请检查");
}
if (getCurrentUser().isPlatform() || batchCheckDataRights(storeId, shopProductBaseList)) {
@ -6347,12 +6340,12 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl<ShopProductBaseM
return false;
}
private boolean batchCheckDataRights(Integer storeId, List<ShopProductBase> shopProductBaseList){
if(shopProductBaseList.isEmpty()){
private boolean batchCheckDataRights(Integer storeId, List<ShopProductBase> shopProductBaseList) {
if (shopProductBaseList.isEmpty()) {
return false;
}
for (ShopProductBase shopProductBase:shopProductBaseList){
if(shopProductBase.getStore_id().intValue()!=storeId.intValue()){
for (ShopProductBase shopProductBase : shopProductBaseList) {
if (shopProductBase.getStore_id().intValue() != storeId.intValue()) {
return false;
}
}
@ -6402,25 +6395,25 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl<ShopProductBaseM
shopProductItemService.removeBatchByIds(product_item_ids);
QueryWrapper<ShopUserCart> cartQueryWrapper = new QueryWrapper<>();
cartQueryWrapper.in("item_id", product_item_ids);
List<ShopUserCart> shopUserCarts=shopUserCartService.list(cartQueryWrapper);
List<Integer> shopUserCartIds=shopUserCarts.stream().map(ShopUserCart::getCart_id).collect(Collectors.toList());
if(CollectionUtil.isNotEmpty(shopUserCartIds)){
List<ShopUserCart> shopUserCarts = shopUserCartService.list(cartQueryWrapper);
List<Integer> shopUserCartIds = shopUserCarts.stream().map(ShopUserCart::getCart_id).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(shopUserCartIds)) {
shopUserCartService.removeBatchByIds(shopUserCartIds);
}
QueryWrapper<ShopProductItemSeq> seqQueryWrapper = new QueryWrapper<>();
seqQueryWrapper.in("item_id", product_item_ids);
List<ShopProductItemSeq> shopProductItemSeqs=shopProductItemSeqService.list(seqQueryWrapper);
List<String> shopProductItemSeqIds=shopProductItemSeqs.stream().map(ShopProductItemSeq::getProduct_item_seq_id).collect(Collectors.toList());
if(CollectionUtil.isNotEmpty(shopProductItemSeqIds)){
List<ShopProductItemSeq> shopProductItemSeqs = shopProductItemSeqService.list(seqQueryWrapper);
List<String> shopProductItemSeqIds = shopProductItemSeqs.stream().map(ShopProductItemSeq::getProduct_item_seq_id).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(shopProductItemSeqIds)) {
shopProductItemSeqService.removeBatchByIds(shopProductItemSeqIds);
}
}
QueryWrapper<ShopStoreActivityItem> itemQueryWrapper = new QueryWrapper<>();
itemQueryWrapper.in("product_id", longProductList);
List<ShopStoreActivityItem> items= shopStoreActivityItemService.list(itemQueryWrapper);
List<Long> itemIds=items.stream().map(ShopStoreActivityItem::getActivity_item_id).collect(Collectors.toList());
if(CollectionUtil.isNotEmpty(itemIds)){
List<ShopStoreActivityItem> items = shopStoreActivityItemService.list(itemQueryWrapper);
List<Long> itemIds = items.stream().map(ShopStoreActivityItem::getActivity_item_id).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(itemIds)) {
shopStoreActivityItemService.removeBatchByIds(itemIds);
}
if (!removeBatchByIds(longProductList)) {

29
pom.xml
View File

@ -31,7 +31,7 @@
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<skipTests>true</skipTests>
<!-- Docker 远程管理地址全局-->
<!-- <docker.host>https://42.194.196.179:2375</docker.host>-->
<!-- <docker.host>https://159.75.249.163:2275</docker.host>-->
<docker.maven.plugin.version>1.2.2</docker.maven.plugin.version>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR5</spring-cloud.version>
@ -76,12 +76,12 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-devtools</artifactId>-->
<!-- <scope>runtime</scope>-->
<!-- <optional>true</optional>-->
<!-- </dependency>-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
@ -296,7 +296,10 @@
</dependencies>
</dependencyManagement>
<profiles>
<profile>
<!-- 本地环境 -->
<id>local</id>
<properties>
@ -323,7 +326,7 @@
<mysql.user>web_dev</mysql.user>
<mysql.pwd>Abc654321$^</mysql.pwd>
<mysql.driver>com.mysql.cj.jdbc.Driver</mysql.driver>
<!-- <mysql.host>42.194.196.179</mysql.host>-->
<!-- <mysql.host>159.75.249.163</mysql.host>-->
<!-- <mysql.port>3306</mysql.port>-->
<!-- <mysql.db>mall_prod</mysql.db>-->
<!-- <mysql.user>root</mysql.user>-->
@ -334,7 +337,7 @@
<redis.database>15</redis.database>
<redis.port>6379</redis.port>
<redis.password>Gpff654321</redis.password>
<!-- <redis.host>42.194.196.179</redis.host>-->
<!-- <redis.host>159.75.249.163</redis.host>-->
<!-- <redis.database>15</redis.database>-->
<!-- <redis.port>6480</redis.port>-->
<!-- <redis.password>hwe9EgqgMAwY</redis.password>-->
@ -462,7 +465,7 @@
<properties>
<spring.profile>prod</spring.profile>
<!-- Docker 远程管理地址全局-->
<docker.host>https://42.194.196.179:2275</docker.host>
<docker.host>https://159.75.249.163:2275</docker.host>
<docker.ca>/Users/panjunjie/code/docker_registry_ca_prod</docker.ca>
<!-- nacos配置 -->
<nacos.server.address>172.16.0.11:8848</nacos.server.address>
@ -513,7 +516,11 @@
</profile>
</profiles>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
@ -545,7 +552,7 @@
<!--定义基础镜像-->
<baseImage>java:8</baseImage>
<!--定义容器启动命令,注意不能换行-->
<entryPoint>["java", "-jar", "-Xms128m", "-Xmx512m", "-XX:PermSize=64M", "-XX:MaxPermSize=512M", "-Dspring.profiles.active=${spring.profile}", "-Duser.timezone=Asia/Shanghai", "/${project.build.finalName}.jar"]
<entryPoint>["java", "-jar", "-Xms256m", "-Xmx512m", "-XX:PermSize=64M", "-XX:MaxPermSize=512M", "-Dspring.profiles.active=${spring.profile}", "-Duser.timezone=Asia/Shanghai", "/${project.build.finalName}.jar"]
</entryPoint>
<!--推送镜像仓库校验安全证书,无安全证书无法推送-->
<dockerCertPath>${docker.ca}</dockerCertPath>