package com.ishop.merchant.util;
import com.ishop.merchant.Constants;
import com.ishop.model.po.EbProduct;
import com.ishop.model.po.EbProductAttr;
import com.ishop.model.po.EbProductAttrValue;
import com.ishop.model.vo.ProductAddVo;
import com.walker.infrastructure.utils.JsonUtils;
import com.walker.infrastructure.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class ProductAttrUtils {
protected static final Logger logger = LoggerFactory.getLogger(ProductAttrUtils.class);
/**
* 根据价格规格,返回自定义属性中要存放的价格信息。
*
*
*
* @param priceAttr 几个规格定义,如:[100,200,300,500,其他金额]
* @param attrValueSku 自定义属性值,如:98#,其他金额 或者 98#,500
* @return
* @date 2023-09-10
* @date 2023-09-11 目前该方法未使用,因为通过规格分组已经可以配置出来金额了。
*/
public static final double acquirePriceAttrMoney(String[] priceAttr, String attrValueSku){
String[] skuArray = StringUtils.commaDelimitedListToStringArray(attrValueSku);
for(String skuValue : skuArray){
if(skuValue.equals(Constants.ATTR_VALUE_OTHER_PRICE) || skuValue.equals(Constants.ATTR_VALUE_CUSTOM_PRICE)){
return 0;
}
for(String price : priceAttr){
if(skuValue.equals(price)){
return Double.parseDouble(price);
}
}
}
return -1;
}
/**
* 返回价格规格,对应的价格数组,如果存在的话。
*
* 格式如下:
* [100, 200, 其他金额(或自定义)]
*
* @param attrList
* @return
* @date 2023-09-10
*/
public static final String[] hasPriceAttr(List attrList){
for(EbProductAttr attr : attrList){
if(attr.getAttrName().equals(Constants.ATTR_NAME_PRICE)){
return StringUtils.commaDelimitedListToStringArray(attr.getAttrValues());
}
}
return null;
}
/**
* 设置添加(或编辑)商品价格信息。
* @param request
* @param product
* @date 2023-08-02
*/
public static final void combineProductAttrValue(ProductAddVo request, EbProduct product){
//计算价格
List attrValueAddRequestList = request.getAttrValue();
EbProductAttrValue minAttrValue = attrValueAddRequestList.stream().min(Comparator.comparing(EbProductAttrValue::getPrice)).get();
product.setPrice(minAttrValue.getPrice());
product.setOtPrice(minAttrValue.getOtPrice());
product.setCost(minAttrValue.getCost());
product.setStock(attrValueAddRequestList.stream().mapToInt(EbProductAttrValue::getStock).sum());
}
/**
* 商品sku。
* 返回数据格式,如:92汽油,95汽油,98汽油,规格值拼接了一下,要存储数据库
*
* @param attrValue json字符串,如:{"92号":"92号", "93号":"93号"}
* @return sku
*/
public static final String getSku(String attrValue) {
// LinkedHashMap linkedHashMap = JSONObject.parseObject(attrValue, LinkedHashMap.class, Feature.OrderedField);
// LinkedHashMap linkedHashMap = null;
// logger.debug("======= " + attrValue);
if(attrValue.startsWith("\"")){
attrValue = attrValue.substring(1, attrValue.length()-1);
// 前端传来的包含双引号转移反斜杠,老报错
attrValue = attrValue.replace("\\", StringUtils.EMPTY_STRING);
}
Map map = null;
try {
map = JsonUtils.jsonStringToObject(attrValue, Map.class);
} catch (Exception e) {
throw new RuntimeException(e);
}
Iterator> iterator = map.entrySet().iterator();
List strings = new ArrayList<>(map.size());
while (iterator.hasNext()) {
Map.Entry next = iterator.next();
strings.add(next.getValue());
}
return StringUtils.collectionToCommaDelimitedString(strings);
}
/**
* 把给定的 Key,分隔为:type | productId
* @param key
* @return
* @date 2023-06-14
*/
public static final String[] splitTypeAndProductId(String key){
return StringUtils.commaDelimitedListToStringArray(key);
}
public static final String combineKey(int type, long productId){
return new StringBuilder().append(type)
.append(StringUtils.DEFAULT_SPLIT_SEPARATOR).append(productId).toString();
}
}