Commit fedbd32b authored by liudong1993's avatar liudong1993

课程下单

parent 0dfbe62a
......@@ -309,12 +309,16 @@ namespace Mall.Model.Entity.Product
/// </summary>
public int? SmallShopsId { get; set; }
/// <summary>
/// 订单分类 0正常订单 1司导订单
/// 订单分类 0正常订单 1司导订单 2教育订单
/// </summary>
public int OrderClassify { get; set; }
/// <summary>
/// 目的地(司导订单)
/// </summary>
public string DestinationAddress { get; set; }
/// <summary>
/// 课程卡抵扣金额
/// </summary>
public decimal? EducationMoney { get; set; }
}
}
......@@ -345,5 +345,9 @@ namespace Mall.Model.Entity.Product
/// 评论返积分
/// </summary>
public int CommentGiveIntegral { get; set; }
/// <summary>
/// 使用课程卡id
/// </summary>
public int? EducationCouponId { get; set; }
}
}
......@@ -12,12 +12,14 @@ using Mall.Common.Plugin;
using Mall.Model.Entity.Finance;
using Mall.Model.Entity.Product;
using Mall.Model.Extend.BaseSetUp;
using Mall.Model.Extend.Education;
using Mall.Model.Extend.Finance;
using Mall.Model.Extend.Product;
using Mall.Model.Extend.User;
using Mall.Module.User;
using Mall.Repository;
using Mall.Repository.BaseSetUp;
using Mall.Repository.Education;
using Mall.Repository.Finance;
using Mall.Repository.GuideCar;
using Mall.Repository.MarketingCenter;
......@@ -38,6 +40,25 @@ namespace Mall.Module.Product
/// </summary>
public partial class OrderModule
{
/// <summary>
/// 用户课程卡
/// </summary>
private RB_Education_MemberCouponRepository education_MemberCouponRepository = new RB_Education_MemberCouponRepository();
/// <summary>
/// 课程卡实体
/// </summary>
private RB_Education_CouponRepository education_CouponRepository = new RB_Education_CouponRepository();
/// <summary>
/// 课程卡适配
/// </summary>
private RB_Education_CouponProductRepository education_CouponProductRepository = new RB_Education_CouponProductRepository();
/// <summary>
/// 课程卡使用
/// </summary>
private RB_Education_MemberUseCouponRepository education_MemberUseCouponRepository = new RB_Education_MemberUseCouponRepository();
/// <summary>
/// 获取小程序结算页面详情
/// </summary>
......@@ -68,6 +89,8 @@ namespace Mall.Module.Product
decimal Total_integral_price = 0;//总积分金额
int Total_use_integral = 0;//总积分
decimal CouponsMoney = 0;//优惠总金额
decimal EducationMoney = 0;//课程卡抵扣金额
int EducationNum = 0;//课程卡抵扣数量
bool IsPointsDeduction = false;//是否有商品可使用积分抵扣
List<object> goods_list = new List<object>();
......@@ -119,8 +142,46 @@ namespace Mall.Module.Product
}
}
#endregion
#region 课程卡初始化
List<RB_Education_MemberCoupon_Extend> eList = new List<RB_Education_MemberCoupon_Extend>();
List<RB_Education_Coupon_Extend> deList = new List<RB_Education_Coupon_Extend>();
List<RB_Education_CouponProduct_Extend> edcpList = new List<RB_Education_CouponProduct_Extend>();
if (demodel.Use_Education_Id > 0)
{
if (demodel.User_Coupon_Id > 0) {
return ApiResult.Failed("课程卡与优惠券不能同时使用");
}
if (demodel.Use_Integral > 0) {
return ApiResult.Failed("课程卡与积分抵扣不能同时使用");
}
eList = education_MemberCouponRepository.GetList(new RB_Education_MemberCoupon_Extend() { Ids = (demodel.Use_Education_Id ?? 0).ToString(), UserId = umodel.Id, TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId });
if (eList.Any())
{
var educationModel = eList.FirstOrDefault();
if (educationModel.HeXiao <= educationModel.UseHeXiao) {
return ApiResult.Failed("课程卡剩余次数不足");
}
string cIds = string.Join(",", eList.Select(x => x.CouponId).Distinct());
deList = education_CouponRepository.GetDiscountCouponList(new RB_Education_Coupon_Extend() { CouponIds = cIds, TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId }, true);
edcpList = education_CouponProductRepository.GetListByDiscountCouponIds(new Model.Entity.Education.RB_Education_Coupon() { TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId }, cIds, true);
if (deList.Any())
{
foreach (var item in eList)
{
if (item.CouponId > 0)
{
if (!deList.Where(x => x.ID == item.CouponId).Any())
{
return ApiResult.Failed("课程卡不存在,请核实后再试");
}
}
}
}
}
}
#endregion
List<RB_Goods_CouponModel> GoodsCouponList = new List<RB_Goods_CouponModel>();//商品优惠卷 价格(每个商品优惠的价格)
List<int> YFCategoryList = new List<int>();//全局适配 分类
#region 微店价格
RB_SmallShops_Info_Extend smallModel = new RB_SmallShops_Info_Extend();
......@@ -139,6 +200,10 @@ namespace Mall.Module.Product
{
continue;
}
if (gmodel.GoodsClassify != 2)
{
return ApiResult.Failed("有非教育类商品");
}
var categoryList = clist.Where(x => x.GoodsId == item.GoodsId).ToList();
#region 图片
......@@ -324,7 +389,6 @@ namespace Mall.Module.Product
#endregion
#region 优惠券
//decimal CouponsMoney = 0;
if (demodel.User_Coupon_Id > 0)
{
var ccmodel = cList.Where(x => x.Id == demodel.User_Coupon_Id).FirstOrDefault();
......@@ -380,6 +444,69 @@ namespace Mall.Module.Product
}
#endregion
#region 课程卡
if (demodel.Use_Education_Id > 0)
{
var ccmodel = eList.Where(x => x.Id == demodel.Use_Education_Id).FirstOrDefault();
string couponItem = (ccmodel?.CouponId ?? 0).ToString();
if (!string.IsNullOrEmpty(couponItem))
{
var dcModel = deList.Where(x => x.ID == Convert.ToInt32(couponItem)).FirstOrDefault();
if (dcModel == null)
{
return ApiResult.Failed("优惠卷不存在,亲核实后再试");
}
if (dcModel.UseType == Common.Enum.MarketingCenter.UseTypeEnum.Category) //指定分类
{
var categoryList1 = dcpList.Where(x => x.DiscountCouponId == Convert.ToInt32(couponItem) && x.DiscountCouponType == Common.Enum.MarketingCenter.UseTypeEnum.Category).Select(x => x.ProductId).ToList();//获取特殊优惠卷
if (categoryList.Select(x => x.Id).Where(x => categoryList1.Contains(x)).Any())
{
if (dcModel.MaxDiscountsPrice == 0 || dcModel.MaxDiscountsPrice >= (item.Final_Price ?? 0))
{
GoodsCouponList.Add(new RB_Goods_CouponModel()
{
GoodsId = item.GoodsId ?? 0,
Key = item.SpecificationSort,
TotalMoney = item.Final_Price ?? 0,
CouponMoney = 0
});
}
}
}
else if (dcModel.UseType == Common.Enum.MarketingCenter.UseTypeEnum.Product)//指定商品
{
var goodsList = dcpList.Where(x => x.DiscountCouponId == Convert.ToInt32(couponItem) && x.DiscountCouponType == Common.Enum.MarketingCenter.UseTypeEnum.Product).Select(x => x.ProductId).ToList();//获取特殊优惠卷
if (goodsList.Contains(item.GoodsId ?? 0))
{
if (dcModel.MaxDiscountsPrice == 0 || dcModel.MaxDiscountsPrice >= (item.Final_Price ?? 0))
{
GoodsCouponList.Add(new RB_Goods_CouponModel()
{
GoodsId = item.GoodsId ?? 0,
Key = item.SpecificationSort,
TotalMoney = item.Final_Price ?? 0,
CouponMoney = 0
});
}
}
}
else
{
if (dcModel.MaxDiscountsPrice == 0 || dcModel.MaxDiscountsPrice >= (item.Final_Price ?? 0))
{
GoodsCouponList.Add(new RB_Goods_CouponModel()
{
GoodsId = item.GoodsId ?? 0,
Key = item.SpecificationSort,
TotalMoney = item.Final_Price ?? 0,
CouponMoney = 0
});
}
}
}
}
#endregion
Total_integral_price += (item.IntegralMoney ?? 0);
Total_use_integral += (item.IntegralNumber ?? 0);
TotalGoodsMoney += item.Final_Price ?? 0;
......@@ -439,6 +566,10 @@ namespace Mall.Module.Product
}
}
}
if (demodel.Use_Education_Id > 0 && GoodsCouponList.Any()) {
var ccmodel = eList.Where(x => x.Id == demodel.Use_Education_Id).FirstOrDefault();
GoodsCouponList = GoodsCouponList.OrderBy(x => x.TotalMoney).Take(ccmodel.HeXiao - ccmodel.UseHeXiao).ToList();
}
//赋值
foreach (var item in demodel.DetailList)
{
......@@ -449,11 +580,24 @@ namespace Mall.Module.Product
}
decimal couponMoney = 0;//优惠金额
var couponModel = GoodsCouponList.Where(x => x.GoodsId == item.GoodsId).FirstOrDefault();
if (couponModel != null)
if (demodel.User_Coupon_Id > 0)
{
couponMoney = couponModel.CouponMoney;
TotalGoodsMoney -= couponMoney;//总价格需减去优惠券金额
var couponModel = GoodsCouponList.Where(x => x.GoodsId == item.GoodsId).FirstOrDefault();
if (couponModel != null)
{
couponMoney = couponModel.CouponMoney;
TotalGoodsMoney -= couponMoney;//总价格需减去优惠券金额
}
}
bool IsUseEducation = false;
if (demodel.Use_Education_Id > 0) {
var couponModel = GoodsCouponList.Where(x => x.GoodsId == item.GoodsId).FirstOrDefault();
if (couponModel != null) {
EducationNum += 1;
EducationMoney += couponModel.TotalMoney;
TotalGoodsMoney -= couponModel.TotalMoney;//总价格需减去课程卡金额
IsUseEducation = true;
}
}
goods_list.Add(new
......@@ -481,6 +625,7 @@ namespace Mall.Module.Product
integral_price = demodel.Use_Integral == 1 ? item.IntegralMoney : 0,//积分抵扣金额
use_integral = demodel.Use_Integral == 1 ? item.IntegralNumber : 0,
couponMoney,
is_use_education = IsUseEducation,
name = gmodel.Name,
cover_pic = gmodel.CoverImage,
detail = gmodel.GoodsDetails,
......@@ -492,7 +637,8 @@ namespace Mall.Module.Product
share_commission_third = x.ThreeCommission,
level = x.DistributorGrade
}),
attr_setting_type = gmodel.SeparateDistributionType
attr_setting_type = gmodel.SeparateDistributionType,
course_score = gmodel.CourseScore
},
discounts = item.Discounts,
member_discount = ((item.Unit_Price ?? 0) * (item.Number ?? 0)) - (item.MemberPrice * (item.Number ?? 0)),
......@@ -549,6 +695,13 @@ namespace Mall.Module.Product
user_coupon_id = demodel.User_Coupon_Id ?? 0
},
integral = IntegralObj,
education = new {
enabled = true,
use = demodel.Use_Education_Id > 0 ? true : false,
use_education_id = demodel.Use_Education_Id ?? 0,
education_money = EducationMoney,
education_num = EducationNum //抵扣几套课程
},
total_price = TotalGoodsMoney,
});
......@@ -579,5 +732,830 @@ namespace Mall.Module.Product
#endregion
return ApiResult.Success("", Robj);
}
/// <summary>
/// 网课下单
/// </summary>
/// <param name="demodel"></param>
/// <returns></returns>
public ApiResult SetAppletCourseOrderInfo(RB_Goods_Order_Extend demodel)
{
var umodel = member_UserRepository.GetEntity(demodel.UserId);
if (umodel == null)
{
return ApiResult.Failed("用户不存在");
}
if (demodel.SmallShopsId == 0)
{
demodel.SmallShopsId = umodel.SmallShopId;
}
if (umodel.Blacklist == 1)
{
return ApiResult.Failed("您在黑名单状态无法下单,请联系管理员核实");
}
decimal TotalMoney = 0;
string GoodsIds = "";
int TotalIntegralNumber = 0;//总使用积分
decimal TotalIntegralMoney = 0;//总使用积分抵扣金额
List<RB_Goods_CouponModel> GoodsCouponList = new List<RB_Goods_CouponModel>();//商品优惠卷 价格(每个商品优惠的价格)
decimal CouponsMoney = 0;//优惠卷验证
decimal EducationMoney = 0;//课程卡抵扣金额
int EducationNum = 0;//课程卡抵扣数量
#region 优惠卷初始化
List<RB_Member_DiscountCoupon_Extend> cList = new List<RB_Member_DiscountCoupon_Extend>();
List<Model.Extend.MarketingCenter.RB_DiscountCoupon_Extend> dcList = new List<Model.Extend.MarketingCenter.RB_DiscountCoupon_Extend>();
List<Model.Extend.MarketingCenter.RB_DiscountCoupon_Product_Extend> dcpList = new List<Model.Extend.MarketingCenter.RB_DiscountCoupon_Product_Extend>();
demodel.CouponsIds = "";
bool IsCommissionCoupons = true;// 是否通用优惠券 2020-08-13 ld
if (demodel.User_Coupon_Id > 0)
{
demodel.CouponsIds = demodel.User_Coupon_Id.ToString();
if (!string.IsNullOrEmpty(demodel.CouponsIds))
{
cList = member_CouponRepository.GetList(new RB_Member_DiscountCoupon_Extend() { UseState = 0, Ids = demodel.CouponsIds, UserId = umodel.Id, TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId });
if (cList.Any())
{
string cIds = string.Join(",", cList.Select(x => x.CouponId).Distinct());
dcList = discountCouponRepository.GetDiscountCouponList(new Model.Extend.MarketingCenter.RB_DiscountCoupon_Extend() { CouponIds = cIds, TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId }, true);
dcpList = discountCoupon_ProductRepository.GetListByDiscountCouponIds(new Model.Entity.MarketingCenter.RB_DiscountCoupon() { TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId }, cIds, true);
if (dcList.Any())
{
foreach (var item in cList)
{
if (item.CouponId > 0)
{
if (!dcList.Where(x => x.ID == item.CouponId).Any())
{
return ApiResult.Failed("优惠券不存在,请核实后再试");
}
}
}
if (dcList.Where(x => x.SmallShopId > 0).Any())
{
IsCommissionCoupons = false;
}
}
}
}
}
#endregion
#region 课程卡初始化
List<RB_Education_MemberCoupon_Extend> eList = new List<RB_Education_MemberCoupon_Extend>();
List<RB_Education_Coupon_Extend> deList = new List<RB_Education_Coupon_Extend>();
List<RB_Education_CouponProduct_Extend> edcpList = new List<RB_Education_CouponProduct_Extend>();
if (demodel.Use_Education_Id > 0)
{
if (demodel.User_Coupon_Id > 0)
{
return ApiResult.Failed("课程卡与优惠券不能同时使用");
}
if (demodel.Use_Integral > 0)
{
return ApiResult.Failed("课程卡与积分抵扣不能同时使用");
}
eList = education_MemberCouponRepository.GetList(new RB_Education_MemberCoupon_Extend() { Ids = (demodel.Use_Education_Id ?? 0).ToString(), UserId = umodel.Id, TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId });
if (eList.Any())
{
var educationModel = eList.FirstOrDefault();
if (educationModel.HeXiao <= educationModel.UseHeXiao)
{
return ApiResult.Failed("课程卡剩余次数不足");
}
string cIds = string.Join(",", eList.Select(x => x.CouponId).Distinct());
deList = education_CouponRepository.GetDiscountCouponList(new RB_Education_Coupon_Extend() { CouponIds = cIds, TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId }, true);
edcpList = education_CouponProductRepository.GetListByDiscountCouponIds(new Model.Entity.Education.RB_Education_Coupon() { TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId }, cIds, true);
if (deList.Any())
{
foreach (var item in eList)
{
if (item.CouponId > 0)
{
if (!deList.Where(x => x.ID == item.CouponId).Any())
{
return ApiResult.Failed("课程卡不存在,请核实后再试");
}
}
}
}
}
}
#endregion
if (demodel.DetailList.Any())
{
//积分
Model.Entity.MarketingCenter.RB_Integral_Settings integralModel = new Model.Entity.MarketingCenter.RB_Integral_Settings();
if (demodel.Use_Integral == 1 && umodel.Integral > 0)
{
integralModel = integral_SettingsRepository.GetIntegralSettingsList(new Model.Entity.MarketingCenter.RB_Integral_Settings() { TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId }).FirstOrDefault();
}
GoodsIds = string.Join(",", demodel.DetailList.Select(x => x.GoodsId));
var gList = goodsRepository.GetList(new RB_Goods_Extend() { GoodsIds = GoodsIds, TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId });
var clist = goods_CategoryRepository.GetList(new RB_Goods_Category_Extend() { GoodsIds = GoodsIds, TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId });
var mpriceList = goods_MemberPriceRepository.GetList(new RB_Goods_MemberPrice_Extend() { GoodsIds = GoodsIds, TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId });
#region 微店价格
RB_SmallShops_Info_Extend smallModel = new RB_SmallShops_Info_Extend();
List<RB_SmallShops_Price_Extend> smallPList = new List<RB_SmallShops_Price_Extend>();
if (demodel.SmallShopsId > 0)
{
smallModel = smallShops_InfoRepository.GetEntity<RB_SmallShops_Info_Extend>(demodel.SmallShopsId);
smallPList = smallShops_PriceRepository.GetList(new RB_SmallShops_Price_Extend() { SmallShopsId = demodel.SmallShopsId, GoodsIds = GoodsIds });
}
#endregion
foreach (var item in demodel.DetailList)
{
var gmodel = gList.Where(x => x.Id == item.GoodsId).FirstOrDefault();
if (gmodel == null || gmodel.GoodsStatus != 1)
{
return ApiResult.Failed("有商品不存在或者商品已失效");
}
if (gmodel.GoodsClassify != 2) {
return ApiResult.Failed("有非网课类商品");
}
var categoryList = clist.Where(x => x.GoodsId == item.GoodsId).ToList();
item.CommissionPrice = gmodel.Commission;// 粉象 返佣金额
item.CostMoney = (gmodel.CostPrice ?? 0);
item.PresentFXGrade = gmodel.PresentFXGrade ?? 0;//赠送粉象分销等级
item.PresentFXMonth = gmodel.PresentFXMonth ?? 0;
item.CategoryIdList = categoryList.Select(x => x.CategoryId ?? 0).ToList();
#region 规格
item.SmallShopsCostPrice = gmodel.SellingPrice ?? 0;
if (demodel.SmallShopsId > 0)
{
if ((smallModel.UpPrice ?? 0) > 0 || smallPList.Where(x => x.GoodsId == item.GoodsId && x.UpPrice > 0).Any())
{
var sspModel = smallPList.Where(x => x.GoodsId == item.GoodsId && x.SpecificationKey == "").FirstOrDefault();
if (sspModel != null)
{
//单商品设置的
if (sspModel.PriceType == 1)
{
gmodel.SellingPrice += Math.Ceiling((gmodel.SellingPrice ?? 0) * (sspModel.UpPrice ?? 0) / 100);
}
else if (sspModel.PriceType == 2)
{
gmodel.SellingPrice += (sspModel.UpPrice ?? 0);
}
}
else
{
if ((smallModel.UpPrice ?? 0) > 0)
{
if (smallModel.PriceType == 1)
{
gmodel.SellingPrice += Math.Ceiling((gmodel.SellingPrice ?? 0) * (smallModel.UpPrice ?? 0) / 100);
}
else if (smallModel.PriceType == 2)
{
gmodel.SellingPrice += (smallModel.UpPrice ?? 0);
}
}
}
}
}
#endregion
#region 会员价格
gmodel.MemberPrice = gmodel.SellingPrice ?? 0;
if (umodel.MemberGrade > 0)
{
if (gmodel.EnjoyMember == 1 && gmodel.SeparateSetMember == 1)
{
gmodel.MemberPrice = mpriceList.Where(x => x.GoodsId == item.GoodsId && x.MemberGrade == umodel.MemberGrade && x.SpecificationSort == item.SpecificationSort).FirstOrDefault()?.MemberPrice ?? 0;
item.IsMemberPrice = 1;
item.SmallShopsCostPrice = gmodel.MemberPrice;
if (demodel.SmallShopsId > 0)
{
if ((smallModel.UpPrice ?? 0) > 0 || smallPList.Where(x => x.GoodsId == item.GoodsId && x.UpPrice > 0).Any())
{
var sspModel = smallPList.Where(x => x.GoodsId == item.GoodsId && x.SpecificationKey == item.SpecificationSort).FirstOrDefault();
if (sspModel != null)
{
//单商品设置的
if (sspModel.PriceType == 1)
{
gmodel.MemberPrice += Math.Ceiling((gmodel.MemberPrice) * (sspModel.UpPrice ?? 0) / 100);
}
else if (sspModel.PriceType == 2)
{
gmodel.MemberPrice += (sspModel.UpPrice ?? 0);
}
}
else
{
if ((smallModel.UpPrice ?? 0) > 0)
{
if (smallModel.PriceType == 1)
{
gmodel.MemberPrice += Math.Ceiling((gmodel.MemberPrice) * (smallModel.UpPrice ?? 0) / 100);
}
else if (smallModel.PriceType == 2)
{
gmodel.MemberPrice += (smallModel.UpPrice ?? 0);
}
}
}
}
}
}
else
{
//求会员等级折扣
var gradeModel = member_GradeRepository.GetList(new RB_Member_Grade_Extend() { Grade = umodel.MemberGrade, TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId }).FirstOrDefault();
gmodel.MemberPrice = Math.Round((gmodel.SellingPrice ?? 0) * (gradeModel?.Discount ?? 10) / 10, 2, MidpointRounding.AwayFromZero);
item.SmallShopsCostPrice = Math.Round((item.SmallShopsCostPrice ?? 0) * (gradeModel?.Discount ?? 10) / 10, 2, MidpointRounding.AwayFromZero);
item.DiscountRate = gradeModel?.Discount ?? 10;
}
}
if (umodel.MemberGrade > 0)
{
item.Final_Price = gmodel.MemberPrice * (item.Number ?? 0);
}
else
{
item.Final_Price = (gmodel.SellingPrice ?? 0) * (item.Number ?? 0);
}
#endregion
#region 直播返佣
item.LiveCommission = 0;
item.LiveFinanceIds = "";
if (gmodel.IsLiveGoods == 1)
{
item.LiveCommission = (item.CommissionPrice / 4) * (item.Number ?? 0);
}
#endregion
item.SmallShopsCostPrice = (item.SmallShopsCostPrice ?? 0) * (item.Number ?? 0);
item.Unit_Price = gmodel.SellingPrice ?? 0;
item.Original_Price = (item.Unit_Price) * (item.Number);
#region 积分
if (umodel.Integral > 0 && gmodel.PointsDeduction > 0 && integralModel.IntegralNum > 0)
{
decimal SingleMaxMoney = 0, MultMaxMoney = 0;
if (gmodel.PointsDeductionType == 1)
{
SingleMaxMoney = Math.Round(gmodel.MemberPrice * (gmodel.PointsDeduction ?? 0) / 100, 2, MidpointRounding.AwayFromZero);
MultMaxMoney = Math.Round(gmodel.MemberPrice * (item.Number ?? 0) * (gmodel.PointsDeduction ?? 0) / 100, 2, MidpointRounding.AwayFromZero);
}
if (gmodel.IsMultipleDeduction == 1)
{
//可以多件商品可累计抵扣
if (gmodel.PointsDeductionType == 1)
{
int MaxInterral = Convert.ToInt32(MultMaxMoney * integralModel.IntegralNum);
//最多可抵扣积分
if (umodel.Integral > MaxInterral)
{
item.IntegralNumber = MaxInterral;
item.IntegralMoney = Math.Round(Convert.ToDecimal(MaxInterral) / integralModel.IntegralNum, 2, MidpointRounding.AwayFromZero);
umodel.Integral -= MaxInterral;
}
else
{
item.IntegralNumber = umodel.Integral;
item.IntegralMoney = Math.Round(Convert.ToDecimal(umodel.Integral ?? 0) / integralModel.IntegralNum, 2, MidpointRounding.AwayFromZero);
umodel.Integral = 0;
}
}
else
{
int MaxInterral = Convert.ToInt32((gmodel.PointsDeduction ?? 0) * integralModel.IntegralNum * (item.Number ?? 0));
//最多可抵扣积分
if (umodel.Integral > MaxInterral)
{
item.IntegralNumber = MaxInterral;
item.IntegralMoney = Math.Round(Convert.ToDecimal(MaxInterral) / integralModel.IntegralNum, 2, MidpointRounding.AwayFromZero);
umodel.Integral -= MaxInterral;
}
else
{
item.IntegralNumber = umodel.Integral;
item.IntegralMoney = Math.Round(Convert.ToDecimal(umodel.Integral ?? 0) / integralModel.IntegralNum, 2, MidpointRounding.AwayFromZero);
umodel.Integral = 0;
}
}
}
else
{
//单件商品
if (gmodel.PointsDeductionType == 1)
{
int MaxInterral = Convert.ToInt32(SingleMaxMoney * integralModel.IntegralNum);
//最多可抵扣积分
if (umodel.Integral > MaxInterral)
{
item.IntegralNumber = MaxInterral;
item.IntegralMoney = Math.Round(Convert.ToDecimal(MaxInterral) / integralModel.IntegralNum, 2, MidpointRounding.AwayFromZero);
umodel.Integral -= MaxInterral;
}
else
{
item.IntegralNumber = umodel.Integral;
item.IntegralMoney = Math.Round(Convert.ToDecimal(umodel.Integral ?? 0) / integralModel.IntegralNum, 2, MidpointRounding.AwayFromZero);
umodel.Integral = 0;
}
}
else
{
int MaxInterral = Convert.ToInt32((gmodel.PointsDeduction ?? 0) * integralModel.IntegralNum);
//最多可抵扣积分
if (umodel.Integral > MaxInterral)
{
item.IntegralNumber = MaxInterral;
item.IntegralMoney = Math.Round(Convert.ToDecimal(MaxInterral) / integralModel.IntegralNum, 2, MidpointRounding.AwayFromZero);
umodel.Integral -= MaxInterral;
}
else
{
item.IntegralNumber = umodel.Integral;
item.IntegralMoney = Math.Round(Convert.ToDecimal(umodel.Integral ?? 0) / integralModel.IntegralNum, 2, MidpointRounding.AwayFromZero);
umodel.Integral = 0;
}
}
}
}
if (demodel.Use_Integral == 1)
{
TotalIntegralNumber += (item.IntegralNumber ?? 0);
TotalIntegralMoney += (item.IntegralMoney ?? 0);
item.Final_Price -= (item.IntegralMoney ?? 0);
item.SmallShopsCostPrice -= (item.IntegralMoney ?? 0);
}
#endregion
#region 优惠券
if (demodel.User_Coupon_Id > 0)
{
var ccmodel = cList.Where(x => x.Id == demodel.User_Coupon_Id).FirstOrDefault();
string couponItem = (ccmodel?.CouponId ?? 0).ToString();
if (!string.IsNullOrEmpty(couponItem))
{
var dcModel = dcList.Where(x => x.ID == Convert.ToInt32(couponItem)).FirstOrDefault();
if (dcModel == null)
{
return ApiResult.Failed("优惠卷不存在,亲核实后再试");
}
dcModel.DiscountsPrice = dcModel.DiscountsPrice == 0 ? 10 : dcModel.DiscountsPrice;
if (dcModel.UseType == Common.Enum.MarketingCenter.UseTypeEnum.Category) //指定分类
{
var categoryList1 = dcpList.Where(x => x.DiscountCouponId == Convert.ToInt32(couponItem) && x.DiscountCouponType == Common.Enum.MarketingCenter.UseTypeEnum.Category).Select(x => x.ProductId).ToList();//获取特殊优惠卷
if (categoryList.Select(x => x.Id).Where(x => categoryList1.Contains(x)).Any())
{
GoodsCouponList.Add(new RB_Goods_CouponModel()
{
GoodsId = item.GoodsId ?? 0,
Key = item.SpecificationSort,
TotalMoney = item.Final_Price ?? 0,
CouponMoney = 0
});
}
}
else if (dcModel.UseType == Common.Enum.MarketingCenter.UseTypeEnum.Product)//指定商品
{
var goodsList = dcpList.Where(x => x.DiscountCouponId == Convert.ToInt32(couponItem) && x.DiscountCouponType == Common.Enum.MarketingCenter.UseTypeEnum.Product).Select(x => x.ProductId).ToList();//获取特殊优惠卷
if (goodsList.Contains(item.GoodsId ?? 0))
{
GoodsCouponList.Add(new RB_Goods_CouponModel()
{
GoodsId = item.GoodsId ?? 0,
Key = item.SpecificationSort,
TotalMoney = item.Final_Price ?? 0,
CouponMoney = 0
});
}
}
else
{
GoodsCouponList.Add(new RB_Goods_CouponModel()
{
GoodsId = item.GoodsId ?? 0,
Key = item.SpecificationSort,
TotalMoney = item.Final_Price ?? 0,
CouponMoney = 0
});
}
}
}
#endregion
#region 课程卡
if (demodel.Use_Education_Id > 0)
{
var ccmodel = eList.Where(x => x.Id == demodel.Use_Education_Id).FirstOrDefault();
string couponItem = (ccmodel?.CouponId ?? 0).ToString();
if (!string.IsNullOrEmpty(couponItem))
{
var dcModel = deList.Where(x => x.ID == Convert.ToInt32(couponItem)).FirstOrDefault();
if (dcModel == null)
{
return ApiResult.Failed("优惠卷不存在,亲核实后再试");
}
if (dcModel.UseType == Common.Enum.MarketingCenter.UseTypeEnum.Category) //指定分类
{
var categoryList1 = dcpList.Where(x => x.DiscountCouponId == Convert.ToInt32(couponItem) && x.DiscountCouponType == Common.Enum.MarketingCenter.UseTypeEnum.Category).Select(x => x.ProductId).ToList();//获取特殊优惠卷
if (categoryList.Select(x => x.Id).Where(x => categoryList1.Contains(x)).Any())
{
if (dcModel.MaxDiscountsPrice == 0 || dcModel.MaxDiscountsPrice >= (item.Final_Price ?? 0))
{
GoodsCouponList.Add(new RB_Goods_CouponModel()
{
GoodsId = item.GoodsId ?? 0,
Key = item.SpecificationSort,
TotalMoney = item.Final_Price ?? 0,
CouponMoney = 0
});
}
}
}
else if (dcModel.UseType == Common.Enum.MarketingCenter.UseTypeEnum.Product)//指定商品
{
var goodsList = dcpList.Where(x => x.DiscountCouponId == Convert.ToInt32(couponItem) && x.DiscountCouponType == Common.Enum.MarketingCenter.UseTypeEnum.Product).Select(x => x.ProductId).ToList();//获取特殊优惠卷
if (goodsList.Contains(item.GoodsId ?? 0))
{
if (dcModel.MaxDiscountsPrice == 0 || dcModel.MaxDiscountsPrice >= (item.Final_Price ?? 0))
{
GoodsCouponList.Add(new RB_Goods_CouponModel()
{
GoodsId = item.GoodsId ?? 0,
Key = item.SpecificationSort,
TotalMoney = item.Final_Price ?? 0,
CouponMoney = 0
});
}
}
}
else
{
if (dcModel.MaxDiscountsPrice == 0 || dcModel.MaxDiscountsPrice >= (item.Final_Price ?? 0))
{
GoodsCouponList.Add(new RB_Goods_CouponModel()
{
GoodsId = item.GoodsId ?? 0,
Key = item.SpecificationSort,
TotalMoney = item.Final_Price ?? 0,
CouponMoney = 0
});
}
}
}
}
#endregion
TotalMoney += (item.Final_Price ?? 0);
item.OrderType = gmodel.GoodsType;
item.GoodsName = gmodel.Name;
item.CoverImage = "";
if (!string.IsNullOrEmpty(gmodel.CarouselImage) && gmodel.CarouselImage != "[]")
{
List<string> CarouselIdList = JsonConvert.DeserializeObject<List<string>>(gmodel.CarouselImage);
//封面图
item.CoverImage = CarouselIdList[0];
}
item.SeparateDistribution = gmodel.SeparateDistribution;
item.SeparateDistributionType = gmodel.SeparateDistributionType;
item.SeparateDistributionMoneyType = gmodel.SeparateDistributionMoneyType;
item.IntegralPresent = gmodel.IntegralPresent;
item.IntegralPresentType = gmodel.IntegralPresentType;
}
if (demodel.User_Coupon_Id > 0 && GoodsCouponList.Any())
{
decimal FinalMoney = GoodsCouponList.Sum(x => x.TotalMoney);
var ccmodel = cList.Where(x => x.Id == demodel.User_Coupon_Id).FirstOrDefault();
var dcModel = dcList.Where(x => x.ID == (ccmodel?.CouponId ?? 0)).FirstOrDefault();
if (dcModel == null)
{
return ApiResult.Failed("优惠卷不存在,亲核实后再试");
}
if (dcModel.MinConsumePrice > 0)
{
if (FinalMoney < dcModel.MinConsumePrice)
{
FinalMoney = 0;
}
}
if (dcModel.CouponType == Common.Enum.MarketingCenter.CouponTypeEnum.FullReduction && FinalMoney > 0)
{
CouponsMoney = dcModel.DiscountsPrice;
}
else if (dcModel.CouponType == Common.Enum.MarketingCenter.CouponTypeEnum.Discount && FinalMoney > 0)
{
decimal disMoney = Math.Round(FinalMoney * (10 - dcModel.DiscountsPrice) / 10, 2, MidpointRounding.AwayFromZero);
if (dcModel.MaxDiscountsPrice > 0 && dcModel.MaxDiscountsPrice < disMoney)
{
disMoney = dcModel.MaxDiscountsPrice;
}
CouponsMoney = disMoney;
}
//每个商品优惠券分摊金额
if (CouponsMoney > 0)
{
foreach (var item in GoodsCouponList)
{
item.CouponMoney = Math.Round((item.TotalMoney / FinalMoney) * CouponsMoney, 2, MidpointRounding.AwayFromZero);
}
if (CouponsMoney != GoodsCouponList.Sum(x => x.CouponMoney))
{
//四舍五入存在差值
decimal diffMoney = CouponsMoney - GoodsCouponList.Sum(x => x.CouponMoney);
var gcModel = GoodsCouponList.OrderBy(x => x.CouponMoney).Take(1).FirstOrDefault();
gcModel.CouponMoney += diffMoney;
}
}
}
if (demodel.Use_Education_Id > 0 && GoodsCouponList.Any())
{
var ccmodel = eList.Where(x => x.Id == demodel.Use_Education_Id).FirstOrDefault();
GoodsCouponList = GoodsCouponList.OrderBy(x => x.TotalMoney).Take(ccmodel.HeXiao - ccmodel.UseHeXiao).ToList();
}
foreach (var item in demodel.DetailList)
{
var gmodel = gList.Where(x => x.Id == item.GoodsId).FirstOrDefault();
if (gmodel == null || gmodel.GoodsStatus != 1)
{
continue;
}
item.SupplierId = gmodel.SupplierId;
item.CouponMoney = 0;
if (demodel.User_Coupon_Id > 0)
{
var couponModel = GoodsCouponList.Where(x => x.GoodsId == item.GoodsId).FirstOrDefault();
if (couponModel != null)
{
item.CouponMoney = couponModel.CouponMoney;
TotalMoney -= (item.CouponMoney ?? 0);//总价格需减去优惠券金额
item.Final_Price -= (item.CouponMoney ?? 0);
if (IsCommissionCoupons)
{
//通用优惠券
item.SmallShopsCostPrice -= (item.CouponMoney ?? 0);
}
}
}
if (demodel.Use_Education_Id > 0)
{
var couponModel = GoodsCouponList.Where(x => x.GoodsId == item.GoodsId).FirstOrDefault();
if (couponModel != null)
{
EducationMoney += couponModel.TotalMoney;
EducationNum += 1;
item.EducationCouponId = demodel.Use_Education_Id;
}
}
item.FreightMoney = 0;
item.CommentGiveIntegral = 0;
if (gmodel.IntegralComment > 0)
{
if (gmodel.IntegralCommentType == 1)
{
item.CommentGiveIntegral = Convert.ToInt32(Math.Floor((gmodel.IntegralComment ?? 0) * (item.Final_Price ?? 0) / 100));
}
else
{
item.CommentGiveIntegral = Convert.ToInt32((gmodel.IntegralComment ?? 0) * (item.Number ?? 0));
}
}
}
}
if (demodel.EducationMoney != EducationMoney)
{
return ApiResult.Failed("课程卡抵扣金额不正确");
}
if (CouponsMoney != demodel.CouponMoney)
{
return ApiResult.Failed("优惠金额计算有误");
}
//验证总额
if (demodel.Income != (TotalMoney - EducationMoney))
{
return ApiResult.Failed("订单合计金额不正确");
}
demodel.PreferPrice = TotalMoney + CouponsMoney;
#region 手续费计算
decimal ServiceCharge = Convert.ToDecimal(Config.SettlementRate) / 100;
if (ServiceCharge > 0)
{
decimal TotalFee = Math.Round((demodel.Income ?? 0) * ServiceCharge, 2, MidpointRounding.AwayFromZero);
if (demodel.DetailList.Any())
{
int dcount = demodel.DetailList.Count();
decimal avgFee = Math.Round(TotalFee / dcount, 2, MidpointRounding.AwayFromZero);
foreach (var item in demodel.DetailList)
{
item.ServiceCharge = avgFee;
}
if (avgFee * dcount != TotalFee)
{
//多余的 直接算在第一个商品里
var detailmodel = demodel.DetailList.FirstOrDefault();
detailmodel.ServiceCharge += (TotalFee - avgFee * dcount);
}
}
}
#endregion
var trans = goods_OrderRepository.DbTransaction;
try
{
Random R = new Random();
int Rstr = R.Next(111, 999);
demodel.OrderNo = DateTime.Now.ToString("yyyyMMddHHmmssfff") + Rstr;
demodel.PaymentWay = OrderPaymentTypeEnum.OnlinePayment;//先默认在线支付
demodel.Remark ??= "";
demodel.ApplyForCancelStatus ??= 0;
int OrderId = goods_OrderRepository.Insert(demodel, trans);
if (OrderId > 0)
{
#region 公司比例
demodel.CompanyProfitRate = 0;
demodel.CompanyId = 0;
var pUserId = member_UserRepository.GetMemberFristParentren(demodel.UserId ?? 0);
if (pUserId > 0)
{
var pumodel = member_UserRepository.GetEntity(pUserId);
demodel.CompanyProfitRate = (pumodel?.CompanyProfitRate ?? 0);
demodel.CompanyId = pUserId;
}
#endregion
//插入订单明细+ 商品库存更新
InsertOrderDetail(demodel, trans, OrderId, new List<FreeShippingGoodsDetail>());
//用户订单数增加
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_Member_User_Extend.OrderNum),(umodel.OrderNum??0)+1}
};
//优惠券使用
if (cList.Any())
{
foreach (var item in cList)
{
Dictionary<string, object> keyValues1 = new Dictionary<string, object>() {
{ nameof(RB_Member_DiscountCoupon_Extend.UseDate),DateTime.Now},
{ nameof(RB_Member_DiscountCoupon_Extend.UseState),1}
};
List<WhereHelper> wheres1 = new List<WhereHelper>() {
new WhereHelper(){
FiledName=nameof(RB_Member_DiscountCoupon_Extend.Id),
FiledValue=item.Id,
OperatorEnum=OperatorEnum.Equal
}
};
member_CouponRepository.Update(keyValues1, wheres1, trans);
umodel.CouponsNum = (umodel.CouponsNum ?? 0) - 1;
}
if (umodel.CouponsNum < 0) { umodel.CouponsNum = 0; }
keyValues.Add(nameof(RB_Member_User_Extend.CouponsNum), umodel.CouponsNum);
}
//积分
if (demodel.Use_Integral == 1 && TotalIntegralNumber > 0)
{
keyValues.Add(nameof(RB_Member_User_Extend.Integral), (umodel.Integral ?? 0));
member_IntegralRepository.Insert(new Model.Entity.User.RB_Member_Integral()
{
Id = 0,
CreateDate = DateTime.Now,
Description = "订单使用积分抵扣" + TotalIntegralMoney + "元,订单号:" + demodel.OrderNo,
Image = 0,
Integral = TotalIntegralNumber,
MallBaseId = demodel.MallBaseId,
PlatformType = demodel.OrderSource,
Remarks = "",
TenantId = demodel.TenantId,
Type = Common.Enum.MarketingCenter.RecordTypeEnum.Expend,
UserId = demodel.UserId,
OrderId = OrderId
}, trans);
}
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
FiledName=nameof(RB_Member_User_Extend.Id),
FiledValue=umodel.Id,
OperatorEnum=OperatorEnum.Equal
}
};
member_UserRepository.Update(keyValues, wheres, trans);
#region 课程卡使用
if (demodel.Use_Education_Id > 0 && EducationNum > 0) {
education_MemberUseCouponRepository.Insert(new Model.Entity.Education.RB_Education_MemberUseCoupon()
{
Id = 0,
MallBaseId = demodel.MallBaseId,
MemberCouponId = demodel.Use_Education_Id,
OrderId = OrderId,
Remarks = "",
Status = 0,
TenantId = demodel.TenantId,
UseDate = DateTime.Now,
UserId = demodel.UserId,
UseHeXiao = EducationNum
});
}
#endregion
//来自购物车的话 需清除购物车数据
if (demodel.IsFormShoppingCart == 1)
{
foreach (var cartItem in demodel.ShoppingCartIdList)
{
Dictionary<string, object> keyValues2 = new Dictionary<string, object>() {
{ nameof(RB_Goods_ShoppingCart.Status),1},
{ nameof(RB_Goods_ShoppingCart.UpdateDate),DateTime.Now}
};
List<WhereHelper> wheres2 = new List<WhereHelper>() {
new WhereHelper(){
FiledName=nameof(RB_Goods_ShoppingCart.Id),
FiledValue=cartItem,
OperatorEnum=OperatorEnum.IN
},
new WhereHelper(){
FiledName=nameof(RB_Goods_ShoppingCart.UserId),
FiledValue=demodel.UserId,
OperatorEnum=OperatorEnum.IN
},
new WhereHelper(){
FiledName=nameof(RB_Goods_ShoppingCart.TenantId),
FiledValue=demodel.TenantId,
OperatorEnum=OperatorEnum.Equal
},
new WhereHelper(){
FiledName=nameof(RB_Goods_ShoppingCart.MallBaseId),
FiledValue=demodel.MallBaseId,
OperatorEnum=OperatorEnum.Equal
}
};
goods_ShoppingCartRepository.Update(keyValues2, wheres2);
}
}
//下线
if (umodel.DownlineCondition == Common.Enum.User.DistrbutorReferralsEnum.SCXD && umodel.IsBeDownline == 2)
{
//首次下单成为下线
Dictionary<string, object> keyValues1 = new Dictionary<string, object>() {
{nameof(RB_Member_User_Extend.SuperiorId),umodel.WaitSuperiorId },
{nameof(RB_Member_User_Extend.IsBeDownline),1 },
{nameof(RB_Member_User_Extend.BeDownlineDate),DateTime.Now },
};
List<WhereHelper> wheres1 = new List<WhereHelper>() {
new WhereHelper(){
FiledName=nameof(RB_Member_User_Extend.Id),
FiledValue=umodel.Id,
OperatorEnum=OperatorEnum.Equal
}
};
member_UserRepository.Update(keyValues1, wheres1, trans);
}
//任务执行返佣 失败查看日志,手动返佣(空闲可增加手动返佣接口)
if (demodel.User_Coupon_Id > 0 && demodel.CouponMoney > 0)
{
demodel.CouponDestription = "使用" + (IsCommissionCoupons ? "通用" : "店铺") + "优惠券抵扣";
}
Task.Run(() => InsertOrderCommission(demodel, umodel, GoodsIds, OrderId));
//记录日志
goods_LogRepository.Insert(new RB_Goods_Log()
{
Id = 0,
Type = 1,
SourceId = OrderId,
Content = "新增课程订单",
CreateDate = DateTime.Now,
MallBaseId = demodel.MallBaseId,
TenantId = demodel.TenantId
});
}
goods_OrderRepository.DBSession.Commit();
return ApiResult.Success("", new { OrderId });
}
catch (Exception ex)
{
LogHelper.Write(ex, "SetAppletGoodsOrderInfo");
goods_OrderRepository.DBSession.Rollback("SetAppletGoodsOrderInfo");
return ApiResult.Failed();
}
}
}
}
......@@ -456,7 +456,7 @@ namespace Mall.WebApi.Controllers.MallBase
}
/// <summary>
/// 下单
/// 商城下单
/// </summary>
/// <returns></returns>
[HttpPost]
......@@ -545,6 +545,72 @@ namespace Mall.WebApi.Controllers.MallBase
return orderModule.SetAppletGoodsOrderInfo(demodel);
}
/// <summary>
/// 教育下单
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetAppletCourseOrderInfo()
{
var req = RequestParm;
var userInfo = AppletUserInfo;
RB_Goods_Order_Extend demodel = JsonConvert.DeserializeObject<RB_Goods_Order_Extend>(req.msg.ToString());
if (demodel.IsFormShoppingCart == 1)
{
if (demodel.ShoppingCartIdList == null || !demodel.ShoppingCartIdList.Any())
{
return ApiResult.ParamIsNull("请传递购物车id");
}
}
if (demodel.DetailList == null || !demodel.DetailList.Any())
{
return ApiResult.ParamIsNull("请传递商品信息");
}
foreach (var item in demodel.DetailList)
{
if ((item.GoodsId ?? 0) <= 0)
{
return ApiResult.ParamIsNull("请传递商品id");
}
if ((item.Number ?? 0) <= 0)
{
return ApiResult.ParamIsNull("请传递商品数量");
}
}
if ((demodel.Income ?? 0) <= 0)
{
return ApiResult.ParamIsNull("订单金额不正确");
}
demodel.BuyerMessage ??= "";//买家留言
demodel.OrderSource ??= UserSourceEnum.WeiXin;
#region 赋默认值
demodel.TenantId = userInfo.TenantId;
demodel.MallBaseId = userInfo.MallBaseId;
demodel.Country ??= 2;
demodel.OrderStatus = Common.Enum.Goods.OrderStatusEnum.NonPayment;
demodel.CreateDate = DateTime.Now;
demodel.Fee ??= 0;
demodel.FreightMoney ??= 0;
demodel.HistoryOrderStatus ??= 0;
demodel.IsApplyForCancel ??= 2;
demodel.IsOrderCommission ??= 2;
demodel.MerchantsNo ??= "";
demodel.Recycled ??= 2;
demodel.Refund ??= 0;
demodel.Status = 0;
demodel.AnchorName ??= "";
demodel.UpdateDate = DateTime.Now;
demodel.UserId = userInfo.UserId;
demodel.SmallShopsId = req.SmallShopsId;
demodel.OrderClassify = 2;
#endregion
return orderModule.SetAppletCourseOrderInfo(demodel);
}
/// <summary>
/// 司导下单
/// </summary>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment