退款新增总额

This commit is contained in:
liyj 2025-11-06 09:30:17 +08:00
parent 2ab4495920
commit 4814ca202d
3 changed files with 18 additions and 6 deletions

View File

@ -20,6 +20,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -138,8 +139,9 @@ public interface SyncThirdDataService {
* *
* @param stockDeltaMap key 为商品唯一keyvalue 为库存增降量 例如 {"1234567890123": 100, "1234567890124": 50} 库存数为正负整数单位可能是个数或重量 * @param stockDeltaMap key 为商品唯一keyvalue 为库存增降量 例如 {"1234567890123": 100, "1234567890124": 50} 库存数为正负整数单位可能是个数或重量
* 数量为正数时库存数增加数量为负数时库存数减少 * 数量为正数时库存数增加数量为负数时库存数减少
* itemReturnAmount 退货时输入
*/ */
void incrProductStockToRedis(Map<String, Integer> stockDeltaMap); void incrProductStockToRedis(Map<String, Integer> stockDeltaMap, BigDecimal itemReturnAmount);
/** /**

View File

@ -903,12 +903,13 @@ public class SyncThirdDataServiceImpl extends SyncBaseThirdSxAbstract implements
ProductQuantityConsumption productQuantityConsumption=new ProductQuantityConsumption(); ProductQuantityConsumption productQuantityConsumption=new ProductQuantityConsumption();
String productKey= (String) k; String productKey= (String) k;
String[] productKeyArrys=productKey.split("-"); String[] productKeyArrys=productKey.split("-");
if(productKeyArrys.length!=3){ if(productKeyArrys.length!=4){
return; return;
} }
String productNumber=productKeyArrys[0]; String productNumber=productKeyArrys[0];
String orderId=productKeyArrys[1]; String orderId=productKeyArrys[1];
String unitPrice=productKeyArrys[2]; String unitPrice=productKeyArrys[2];
String saleAmount=productKeyArrys[3];
productQuantityConsumption.setConsumeId(IdUtil.getSnowflakeNextIdStr()); productQuantityConsumption.setConsumeId(IdUtil.getSnowflakeNextIdStr());
productQuantityConsumption.setOrderId(orderId); productQuantityConsumption.setOrderId(orderId);
productQuantityConsumption.setProductNumber(productNumber); productQuantityConsumption.setProductNumber(productNumber);
@ -916,6 +917,7 @@ public class SyncThirdDataServiceImpl extends SyncBaseThirdSxAbstract implements
productQuantityConsumption.setStoreId(Integer.valueOf(storeId)); productQuantityConsumption.setStoreId(Integer.valueOf(storeId));
productQuantityConsumption.setStatus(0); productQuantityConsumption.setStatus(0);
productQuantityConsumption.setUnitPrice(new BigDecimal(unitPrice)); productQuantityConsumption.setUnitPrice(new BigDecimal(unitPrice));
productQuantityConsumption.setSaleAmount(new BigDecimal(saleAmount));
productQuantityConsumptionList.add(productQuantityConsumption); productQuantityConsumptionList.add(productQuantityConsumption);
}); });
return productQuantityConsumptionList; return productQuantityConsumptionList;
@ -926,7 +928,7 @@ public class SyncThirdDataServiceImpl extends SyncBaseThirdSxAbstract implements
} }
@Override @Override
public void incrProductStockToRedis(Map<String, Integer> stockDeltaMap) { public void incrProductStockToRedis(Map<String, Integer> stockDeltaMap, BigDecimal itemReturnAmount) {
// 校验参数避免空指针 // 校验参数避免空指针
if (CollectionUtil.isEmpty(stockDeltaMap)) { if (CollectionUtil.isEmpty(stockDeltaMap)) {
return; return;
@ -972,11 +974,12 @@ public class SyncThirdDataServiceImpl extends SyncBaseThirdSxAbstract implements
continue; continue;
} }
} }
cn.hutool.json.JSONArray array_item_spec= JSONUtil.parseArray(spuItem.getItem_spec()); cn.hutool.json.JSONArray array_item_spec = JSONUtil.parseArray(spuItem.getItem_spec());
logger.info("array_item_spec:{}",array_item_spec); logger.info("array_item_spec:{}",array_item_spec);
logger.info("key:{},Product_number:{}",key,itemId); logger.info("key:{},Product_number:{}",key,itemId);
if(array_item_spec.isEmpty()){ if(array_item_spec.isEmpty()){
redisTemplate.opsForHash().increment(key, itemId+"-"+orderId+"-"+unitPrice, delta.doubleValue()); BigDecimal saleAmount=new BigDecimal(unitPrice).multiply(new BigDecimal(delta));
redisTemplate.opsForHash().increment(key, itemId+"-"+orderId+"-"+unitPrice+"-"+saleAmount.toPlainString(), delta.doubleValue());
logger.info("存储无规格库存成功"); logger.info("存储无规格库存成功");
continue; continue;
} }
@ -986,9 +989,15 @@ public class SyncThirdDataServiceImpl extends SyncBaseThirdSxAbstract implements
BigDecimal unitWeight = itemQuarytys[0]; BigDecimal unitWeight = itemQuarytys[0];
BigDecimal itemQuaryty = itemQuarytys[1]; BigDecimal itemQuaryty = itemQuarytys[1];
BigDecimal unitPriceBg=new BigDecimal(unitPrice).divide(unitWeight,4, RoundingMode.HALF_UP); BigDecimal unitPriceBg=new BigDecimal(unitPrice).divide(unitWeight,4, RoundingMode.HALF_UP);
if(ObjectUtil.isNotNull(itemReturnAmount)){//退货
itemQuaryty=itemReturnAmount.divide(unitPriceBg,4,RoundingMode.HALF_UP);
}else {
itemReturnAmount=unitPriceBg.multiply(itemQuaryty);
}
logger.info("unitWeight-{};itemQuaryty-{};unitPriceBg-{}",unitWeight,itemQuaryty,unitPriceBg); logger.info("unitWeight-{};itemQuaryty-{};unitPriceBg-{}",unitWeight,itemQuaryty,unitPriceBg);
// 使用 Redis HINCRBY 保证原子性和高性能 // 使用 Redis HINCRBY 保证原子性和高性能
redisTemplate.opsForHash().increment(key, itemId+"-"+orderId+"-"+unitPriceBg.toPlainString(), itemQuaryty.doubleValue()); redisTemplate.opsForHash().increment(key, itemId+"-"+orderId+"-"+unitPriceBg.toPlainString()+"-"+itemReturnAmount.toPlainString(), itemQuaryty.doubleValue());
logger.info("存储有规格库存成功",itemId+"-"+orderId+"-"+unitPriceBg.toPlainString()); logger.info("存储有规格库存成功",itemId+"-"+orderId+"-"+unitPriceBg.toPlainString());
} catch (Exception e) { } catch (Exception e) {
logger.error("库存累计失败productKey={}, delta={}, error={}", productKey, delta, e.getMessage(), e); logger.error("库存累计失败productKey={}, delta={}, error={}", productKey, delta, e.getMessage(), e);

View File

@ -0,0 +1 @@
alter table product_quantity_consumption add column sale_amount decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '订单总额';