|
@@ -71,6 +71,72 @@ namespace JiaZhiQuan.Common {
|
|
});
|
|
});
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 获取服务费以及到手价
|
|
|
|
+ ///
|
|
|
|
+ /// IOS更新,计算到手价和售价
|
|
|
|
+ /// </summary>
|
|
|
|
+ /// <param name="catId">类目id</param>
|
|
|
|
+ /// <param name="salePrices">多个销售价</param>
|
|
|
|
+ /// <param name="saleType">1,寄售,2挂售</param>
|
|
|
|
+ /// <returns></returns>
|
|
|
|
+ /// <exception cref="LogicalException"></exception>
|
|
|
|
+ public static async Task<Dictionary<int, FeeInfo>> GetSalePriceByCatIdV1(this DbRESTFulRepository repository,
|
|
|
|
+ int serviceFeeTempId, List<int> salePrices, bool careNetAmount = true)
|
|
|
|
+ {
|
|
|
|
+ if (serviceFeeTempId == 0)
|
|
|
|
+ throw new LogicalException("请输入正确的服务费模板id");
|
|
|
|
+
|
|
|
|
+ List<MallServiceFee> fees = new List<MallServiceFee>();
|
|
|
|
+ var feeRange = await repository.QueryAsync<MallServiceFeeRange>(@"SELECT
|
|
|
|
+ f.`name`,
|
|
|
|
+ fr.serviceFeeId,
|
|
|
|
+ fr.chargeType,
|
|
|
|
+ fr.startRange,
|
|
|
|
+ fr.endRange,
|
|
|
|
+ fr.chargeAmount,
|
|
|
|
+ fr.chargeRate,
|
|
|
|
+ fr.minFee,
|
|
|
|
+ fr.maxFee,
|
|
|
|
+ tl.displayOrder
|
|
|
|
+ FROM mall_servicefee_temp t
|
|
|
|
+ INNER JOIN mall_servicefee_temp_list tl on t.id=tl.serviceFeeTempId
|
|
|
|
+ INNER JOIN mall_service_fee f on f.id=tl.serviceFeeId
|
|
|
|
+ INNER JOIN mall_service_fee_range fr on f.id=fr.serviceFeeId
|
|
|
|
+ WHERE t.id=@serviceFeeTempId AND t.state=1
|
|
|
|
+ ORDER BY fr.startRange", new { serviceFeeTempId });
|
|
|
|
+ var result = new Dictionary<int, FeeInfo>();
|
|
|
|
+ salePrices.ForEach(p => {
|
|
|
|
+ var netFee = CalNetFeeV1(feeRange, p);
|
|
|
|
+ var rst = new FeeInfo
|
|
|
|
+ {
|
|
|
|
+ totalServicePrice = (int)(netFee.totalServiceFee * UNIT),
|
|
|
|
+ totalServiceFee = "-¥" + netFee.totalServiceFee.ToString("0.##"),
|
|
|
|
+ netAmount = (int)(netFee.netAmount * UNIT),
|
|
|
|
+ netAmountStr = "¥" + netFee.netAmount.ToString("0.##"), //到手金额
|
|
|
|
+ fees = netFee.fees ?? new List<MallServiceFee>(), //服务费详情列表
|
|
|
|
+ isBelowMiniPrice = netFee.isBelowMiniPrice,
|
|
|
|
+ belowMiniPriceDesc = netFee.isBelowMiniPrice ? $"不足¥{UE_MIN_PRICE},请重新出价" : ""
|
|
|
|
+ };
|
|
|
|
+ result[p] = rst;
|
|
|
|
+ //服务费也不能大于salePrice
|
|
|
|
+ if (rst.totalServicePrice >= p || rst.netAmount <= 0)
|
|
|
|
+ {
|
|
|
|
+ if (!careNetAmount)
|
|
|
|
+ {
|
|
|
|
+ //rst.totalServicePrice = p;
|
|
|
|
+ rst.netAmount = 0;
|
|
|
|
+ rst.netAmountStr = "¥" + rst.netAmount.ToString("0.##");
|
|
|
|
+ rst.belowMiniPriceDesc = $"¥0,请重新出价";
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ throw new Exception("商品定价存在问题,服务价过高或到手价为0");
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ return result;
|
|
|
|
+ }
|
|
|
|
+
|
|
/// <summary>
|
|
/// <summary>
|
|
/// 计算服务费
|
|
/// 计算服务费
|
|
/// </summary>
|
|
/// </summary>
|
|
@@ -117,7 +183,7 @@ namespace JiaZhiQuan.Common {
|
|
fee = "-¥" + CommonUtils.DivideAndRound(money, UNIT).ToString("0.##"),
|
|
fee = "-¥" + CommonUtils.DivideAndRound(money, UNIT).ToString("0.##"),
|
|
displayOrder = fee.displayOrder,
|
|
displayOrder = fee.displayOrder,
|
|
});
|
|
});
|
|
- netAmount += money;
|
|
|
|
|
|
+ netAmount -= money;
|
|
totalServiceFee += money;
|
|
totalServiceFee += money;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -130,6 +196,77 @@ namespace JiaZhiQuan.Common {
|
|
totalServiceFee = CommonUtils.DivideAndRound(totalServiceFee, UNIT)
|
|
totalServiceFee = CommonUtils.DivideAndRound(totalServiceFee, UNIT)
|
|
};
|
|
};
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 计算服务费
|
|
|
|
+ ///
|
|
|
|
+ /// IOS更新,转换到手价和售价
|
|
|
|
+ /// </summary>
|
|
|
|
+ /// <param name="feeRange"></param>
|
|
|
|
+ /// <param name="salePrice">单位是分</param>
|
|
|
|
+ /// <returns></returns>
|
|
|
|
+ private static NetServiceFee CalNetFeeV1(IEnumerable<MallServiceFeeRange> feeRange, int salePrice)
|
|
|
|
+ {
|
|
|
|
+ List<MallServiceFee> fees = new List<MallServiceFee>();
|
|
|
|
+ //到手金额
|
|
|
|
+ int netAmount = salePrice;
|
|
|
|
+ int totalServiceFee = 0;
|
|
|
|
+ var feeDic = feeRange.GroupBy(f => f.serviceFeeId).ToDictionary(g => g.Key, g => g.ToList());
|
|
|
|
+
|
|
|
|
+ foreach (var item in feeDic)
|
|
|
|
+ {
|
|
|
|
+ int money = 0;
|
|
|
|
+ string name = string.Empty;
|
|
|
|
+ foreach (var fee in item.Value)
|
|
|
|
+ {
|
|
|
|
+ //,1,比例,2,定额
|
|
|
|
+ switch (fee.chargeType)
|
|
|
|
+ {
|
|
|
|
+ case 1:
|
|
|
|
+ long lmoney = (long)salePrice * fee.chargeRate;
|
|
|
|
+ int deduction = (int)(lmoney / 10000);
|
|
|
|
+ name = fee.name + $"({CommonUtils.DivideAndRound(fee.chargeRate, UNIT):0.##}%";
|
|
|
|
+ if (fee.minFee.HasValue && deduction < fee.minFee.Value)
|
|
|
|
+ {
|
|
|
|
+ deduction = fee.minFee.Value;
|
|
|
|
+ name += $",最低¥{CommonUtils.DivideAndRound(deduction, UNIT):0.##}";
|
|
|
|
+ }
|
|
|
|
+ if (fee.maxFee.HasValue && deduction > fee.maxFee.Value)
|
|
|
|
+ {
|
|
|
|
+ deduction = fee.maxFee.Value;
|
|
|
|
+ name += $",最高¥{CommonUtils.DivideAndRound(deduction, UNIT):0.##}";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ money = deduction;
|
|
|
|
+ name += ")";
|
|
|
|
+ break;
|
|
|
|
+ case 2:
|
|
|
|
+ money = fee.chargeAmount;
|
|
|
|
+ name = fee.name + $"(¥{CommonUtils.DivideAndRound(money, UNIT):0.##})";
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ fees.Add(new MallServiceFee
|
|
|
|
+ {
|
|
|
|
+ name = name,
|
|
|
|
+ fee = "-¥" + CommonUtils.DivideAndRound(money, UNIT).ToString("0.##"),
|
|
|
|
+ displayOrder = fee.displayOrder,
|
|
|
|
+ });
|
|
|
|
+ netAmount += money;
|
|
|
|
+ totalServiceFee += money;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ fees = fees.OrderByDescending(f => f.displayOrder).ToList();
|
|
|
|
+
|
|
|
|
+ return new NetServiceFee
|
|
|
|
+ {
|
|
|
|
+ fees = fees,
|
|
|
|
+ isBelowMiniPrice = netAmount < UE_MIN_PRICE * UNIT,
|
|
|
|
+ netAmount = CommonUtils.DivideAndRound(netAmount, UNIT),
|
|
|
|
+ totalServiceFee = CommonUtils.DivideAndRound(totalServiceFee, UNIT)
|
|
|
|
+ };
|
|
|
|
+ }
|
|
|
|
+
|
|
#endregion
|
|
#endregion
|
|
|
|
|
|
#region 欧拉币抵扣计算
|
|
#region 欧拉币抵扣计算
|