规格计算单价

This commit is contained in:
liyj 2025-11-04 14:38:53 +08:00
parent 81fe3a88b8
commit 85294f332a

View File

@ -981,9 +981,12 @@ public class SyncThirdDataServiceImpl extends SyncBaseThirdSxAbstract implements
}
cn.hutool.json.JSONObject item = (cn.hutool.json.JSONObject) ((cn.hutool.json.JSONObject) array_item_spec.get(0)).get("item");
String name = Convert.toStr(item.get("name"));
BigDecimal itemQuaryty = getBigDecimal(delta, name);
BigDecimal[] itemQuarytys = getBigDecimal(delta, name);
BigDecimal unitWeight = itemQuarytys[0];
BigDecimal itemQuaryty = itemQuarytys[1];
BigDecimal unitPriceBg=new BigDecimal(unitPrice).divide(unitWeight,4, RoundingMode.HALF_UP);
// 使用 Redis HINCRBY 保证原子性和高性能
redisTemplate.opsForHash().increment(key, itemId+"-"+orderId+"-"+unitPrice, itemQuaryty.doubleValue());
redisTemplate.opsForHash().increment(key, itemId+"-"+orderId+"-"+unitPriceBg.toPlainString(), itemQuaryty.doubleValue());
logger.info("存储有规格库存成功");
} catch (Exception e) {
logger.error("库存累计失败productKey={}, delta={}, error={}", productKey, delta, e.getMessage(), e);
@ -993,21 +996,27 @@ public class SyncThirdDataServiceImpl extends SyncBaseThirdSxAbstract implements
/**
* 计算最终数量 如果是g转换为kg如果是数量就是直接值
*
* @param delta
* @param name
* @return
* @return [0]单位重量
* [1] 总重量
*/
private static BigDecimal getBigDecimal(Integer delta, String name) {
private static BigDecimal[] getBigDecimal(Integer delta, String name) {
BigDecimal itemQuaryty = new BigDecimal(delta);
BigDecimal[] result=new BigDecimal[2];
if(name.contains("kg")){
String weightStr= name.split("kg")[0];
result[0]=new BigDecimal(weightStr);
itemQuaryty=new BigDecimal(weightStr).multiply(new BigDecimal(delta));
}
if(name.contains("g")){
String weightStr= name.split("g")[0];
result[0]=new BigDecimal(weightStr).divide(new BigDecimal(1000),4,RoundingMode.HALF_UP);
itemQuaryty=new BigDecimal(weightStr).multiply(new BigDecimal(delta)).divide(new BigDecimal(1000),4,RoundingMode.HALF_UP);
}
return itemQuaryty;
result[1]=itemQuaryty;
return result;
}