Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
mall.oytour.com
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
黄奎
mall.oytour.com
Commits
e222bdb4
Commit
e222bdb4
authored
Nov 04, 2020
by
黄奎
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
页面修改
parent
3b90d7be
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
376 additions
and
629 deletions
+376
-629
OrderModule.cs
Mall.Module.Product/OrderModule.cs
+376
-629
No files found.
Mall.Module.Product/OrderModule.cs
View file @
e222bdb4
...
...
@@ -4761,20 +4761,15 @@ namespace Mall.Module.Product
message
=
"您在黑名单状态无法下单,请联系管理员核实"
;
return
false
;
}
List
<
int
>
disList
=
new
List
<
int
>();
disList
.
Add
(
demodel
.
Province
??
0
);
disList
.
Add
(
demodel
.
City
??
0
);
disList
.
Add
(
demodel
.
District
??
0
);
var
goodModel
=
goodsRepository
.
GetEntity
(
demodel
.
GoodsId
);
decimal
TotalExpress
=
0
;
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
>();
...
...
@@ -4814,142 +4809,66 @@ namespace Mall.Module.Product
}
}
#
endregion
List
<
FreeShippingGoodsDetail
>
SatisfiedGoodsList
=
new
List
<
FreeShippingGoodsDetail
>();
//可包邮的商品
if
(
demodel
.
DetailList
.
Any
())
#
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
)
{
//积分
Model
.
Entity
.
MarketingCenter
.
RB_Integral_Settings
integralModel
=
new
Model
.
Entity
.
MarketingCenter
.
RB_Integral_Settings
();
if
(
demodel
.
Use_Integral
==
1
&&
umodel
.
Integral
>
0
)
if
(
demodel
.
User_Coupon_Id
>
0
)
{
integralModel
=
integral_SettingsRepository
.
GetIntegralSettingsList
(
new
Model
.
Entity
.
MarketingCenter
.
RB_Integral_Settings
()
{
TenantId
=
demodel
.
TenantId
,
MallBaseId
=
demodel
.
MallBaseId
}).
FirstOrDefault
();
message
=
"套餐卡与优惠券不能同时使用"
;
return
false
;
}
int
DefFreightId
=
0
;
//默认运费id
GoodsIds
=
string
.
Join
(
","
,
demodel
.
DetailList
.
Select
(
x
=>
x
.
GoodsId
));
var
gList
=
goodsRepository
.
GetList
(
new
RB_Goods_Extend
()
if
(
demodel
.
Use_Integral
>
0
)
{
GoodsIds
=
GoodsIds
,
TenantId
=
demodel
.
TenantId
,
MallBaseId
=
demodel
.
MallBaseId
,
GoodsClassify
=
3
});
var
clist
=
goods_CategoryRepository
.
GetList
(
new
RB_Goods_Category_Extend
()
{
GoodsIds
=
GoodsIds
,
TenantId
=
demodel
.
TenantId
,
MallBaseId
=
demodel
.
MallBaseId
});
var
speciPList
=
goods_SpecificationPriceRepository
.
GetList
(
new
RB_Goods_SpecificationPrice_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
});
List
<
Model
.
Extend
.
BaseSetUp
.
RB_Logistics_Rules_Extend
>
rulesList
=
new
List
<
Model
.
Extend
.
BaseSetUp
.
RB_Logistics_Rules_Extend
>();
List
<
Model
.
Extend
.
BaseSetUp
.
RB_Logistics_RulesPrice_Extend
>
priceList
=
new
List
<
Model
.
Extend
.
BaseSetUp
.
RB_Logistics_RulesPrice_Extend
>();
List
<
Model
.
Extend
.
BaseSetUp
.
RB_Logistics_RulesRegion_Extend
>
regionList
=
new
List
<
Model
.
Extend
.
BaseSetUp
.
RB_Logistics_RulesRegion_Extend
>();
if
(
gList
.
Any
()
&&
demodel
.
DeliveryMethod
==
OrderDeliveryMethodEnum
.
ExpressDistribution
)
message
=
"套餐卡与积分抵扣不能同时使用"
;
return
false
;
}
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
())
{
List
<
int
>
FreightIdList
=
new
List
<
int
>
();
if
(
gList
.
Where
(
x
=>
x
.
FreightId
>
0
).
Any
()
)
var
educationModel
=
eList
.
FirstOrDefault
();
if
(
educationModel
.
HeXiao
<=
educationModel
.
UseHeXiao
)
{
FreightIdList
.
AddRange
(
gList
.
Where
(
x
=>
x
.
FreightId
>
0
).
Select
(
x
=>
x
.
FreightId
??
0
).
ToList
());
}
if
(
gList
.
Where
(
x
=>
x
.
FreightId
==
0
).
Any
())
{
//查询默认
DefFreightId
=
logistics_RulesRepository
.
GetLogisticsRulesList
(
new
Model
.
Extend
.
BaseSetUp
.
RB_Logistics_Rules_Extend
()
{
IsDefault
=
1
,
TenantId
=
demodel
.
TenantId
,
MallBaseId
=
demodel
.
MallBaseId
}).
FirstOrDefault
()?.
ID
??
0
;
FreightIdList
.
Add
(
DefFreightId
);
}
if
(
FreightIdList
.
Any
())
{
rulesList
=
logistics_RulesRepository
.
GetLogisticsRulesList
(
new
Model
.
Extend
.
BaseSetUp
.
RB_Logistics_Rules_Extend
()
{
RulesIds
=
string
.
Join
(
","
,
FreightIdList
),
TenantId
=
demodel
.
TenantId
,
MallBaseId
=
demodel
.
MallBaseId
});
priceList
=
logistics_RulesPriceRepository
.
GetListRepository
(
new
Model
.
Extend
.
BaseSetUp
.
RB_Logistics_RulesPrice_Extend
()
{
TenantId
=
demodel
.
TenantId
,
MallBaseId
=
demodel
.
MallBaseId
,
RulesIds
=
string
.
Join
(
","
,
FreightIdList
)
});
if
(
priceList
.
Any
())
{
string
priceIds
=
string
.
Join
(
","
,
priceList
.
Select
(
x
=>
x
.
ID
));
regionList
=
logistics_RulesRegionRepository
.
GetListRepository
(
new
Model
.
Extend
.
BaseSetUp
.
RB_Logistics_RulesRegion_Extend
()
{
TenantId
=
demodel
.
TenantId
,
MallBaseId
=
demodel
.
MallBaseId
,
PriceIds
=
priceIds
});
}
message
=
"套餐卡剩余次数不足"
;
return
false
;
}
}
var
OrderGoodsNumList
=
new
List
<
RB_Goods_Order_Extend
>();
bool
IsLimitOk
=
false
;
if
(
gList
.
Where
(
x
=>
x
.
LimitBuyGoodsNum
>
0
).
Any
())
{
IsLimitOk
=
true
;
string
LimitGoodsIds
=
string
.
Join
(
","
,
gList
.
Where
(
x
=>
x
.
LimitBuyGoodsNum
>
0
).
Select
(
x
=>
x
.
Id
));
//查询用户该商品已下单数量
OrderGoodsNumList
=
goods_OrderRepository
.
GetUserOrderGoodsNum
(
demodel
.
UserId
??
0
,
LimitGoodsIds
,
demodel
.
TenantId
,
demodel
.
MallBaseId
);
}
var
OrderNumList
=
new
List
<
RB_Goods_Order_Extend
>();
if
(
gList
.
Where
(
x
=>
x
.
LimitBuyOrderNum
>
0
).
Any
())
{
IsLimitOk
=
true
;
string
LimitGoodsIds
=
string
.
Join
(
","
,
gList
.
Where
(
x
=>
x
.
LimitBuyOrderNum
>
0
).
Select
(
x
=>
x
.
Id
));
//查询用户该商品已下单数量
OrderNumList
=
goods_OrderRepository
.
GetUserOrderNum
(
demodel
.
UserId
??
0
,
LimitGoodsIds
,
demodel
.
TenantId
,
demodel
.
MallBaseId
);
}
//验证限购
if
(
OrderGoodsNumList
.
Any
()
||
OrderNumList
.
Any
())
{
List
<
int
>
GoodsIdList
=
demodel
.
DetailList
.
Select
(
x
=>
x
.
GoodsId
??
0
).
Distinct
().
ToList
();
foreach
(
var
item
in
GoodsIdList
)
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
())
{
int
GoodsNum
=
demodel
.
DetailList
.
Where
(
x
=>
x
.
GoodsId
==
item
).
Sum
(
x
=>
x
.
Number
??
0
);
var
gmodel
=
gList
.
Where
(
x
=>
x
.
Id
==
item
).
FirstOrDefault
();
if
(
gmodel
==
null
||
gmodel
.
GoodsStatus
!=
1
)
{
message
=
"有商品不存在或者商品已失效"
;
return
false
;
}
#
region
验证商品限购,订单限购
if
(
gmodel
.
LimitBuyGoodsNum
>
0
)
{
var
ogModel
=
OrderGoodsNumList
.
Where
(
x
=>
x
.
GoodsId
==
gmodel
.
Id
).
FirstOrDefault
();
if
(
ogModel
!=
null
)
{
if
(
ogModel
.
GoodsTotalNum
+
GoodsNum
>
(
gmodel
.
LimitBuyGoodsNum
??
0
))
{
message
=
"该商品限购"
+
(
gmodel
.
LimitBuyGoodsNum
??
0
)
+
"件,您已购买"
+
ogModel
.
GoodsTotalNum
+
"件"
;
return
false
;
}
}
}
if
(
gmodel
.
LimitBuyOrderNum
>
0
)
foreach
(
var
item
in
eList
)
{
var
ogModel
=
OrderNumList
.
Where
(
x
=>
x
.
GoodsId
==
gmodel
.
Id
).
FirstOrDefault
();
if
(
ogModel
!=
null
)
if
(
item
.
CouponId
>
0
)
{
if
(
ogModel
.
OrderNum
+
1
>
(
gmodel
.
LimitBuyOrderNum
??
0
))
if
(
!
deList
.
Where
(
x
=>
x
.
ID
==
item
.
CouponId
).
Any
(
))
{
message
=
"
该商品订单限购"
+
(
gmodel
.
LimitBuyOrderNum
??
0
)
+
"单,您已购买"
+
ogModel
.
OrderNum
+
"单
"
;
message
=
"
课程卡不存在,请核实后再试
"
;
return
false
;
}
}
}
#
endregion
}
}
else
if
(
IsLimitOk
)
}
#
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
)
{
List
<
int
>
GoodsIdList
=
demodel
.
DetailList
.
Select
(
x
=>
x
.
GoodsId
??
0
).
Distinct
().
ToList
();
foreach
(
var
item
in
GoodsIdList
)
{
int
GoodsNum
=
demodel
.
DetailList
.
Where
(
x
=>
x
.
GoodsId
==
item
).
Sum
(
x
=>
x
.
Number
??
0
);
var
gmodel
=
gList
.
Where
(
x
=>
x
.
Id
==
item
).
FirstOrDefault
();
if
(
gmodel
==
null
||
gmodel
.
GoodsStatus
!=
1
)
{
message
=
"有商品不存在或者商品已失效"
;
return
false
;
}
#
region
验证商品限购,订单限购
if
(
gmodel
.
LimitBuyGoodsNum
>
0
)
{
if
(
GoodsNum
>
(
gmodel
.
LimitBuyGoodsNum
??
0
))
{
message
=
"该商品限购"
+
(
gmodel
.
LimitBuyGoodsNum
??
0
)
+
"件"
;
return
false
;
}
}
#
endregion
}
integralModel
=
integral_SettingsRepository
.
GetIntegralSettingsList
(
new
Model
.
Entity
.
MarketingCenter
.
RB_Integral_Settings
()
{
TenantId
=
demodel
.
TenantId
,
MallBaseId
=
demodel
.
MallBaseId
}).
FirstOrDefault
();
}
List
<
int
>
YFCategoryList
=
new
List
<
int
>();
//全局适配 分类
var
mallbaseModel
=
mallBaseRepository
.
GetListRepository
(
new
Model
.
Extend
.
BaseSetUp
.
RB_MallBase_Extend
()
{
TenantId
=
demodel
.
TenantId
,
MallBaseId
=
demodel
.
MallBaseId
}).
FirstOrDefault
();
GoodsIds
=
string
.
Join
(
","
,
demodel
.
DetailList
.
Select
(
x
=>
x
.
GoodsId
));
var
gList
=
goodsRepository
.
GetListForCommission
(
new
RB_Goods_Extend
()
{
GoodsIds
=
GoodsIds
,
TenantId
=
demodel
.
TenantId
,
MallBaseId
=
demodel
.
MallBaseId
},
3
);
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
();
...
...
@@ -4969,157 +4888,60 @@ namespace Mall.Module.Product
message
=
"有商品不存在或者商品已失效"
;
return
false
;
}
if
(
gmodel
.
PresentFXGrade
>
0
)
if
(
gmodel
.
GoodsClassify
!=
3
)
{
//是赠送VIP商品
if
(
demodel
.
DetailList
.
Count
()
>
1
)
{
//多商品
message
=
"VIP商品不能与其他商品同时下单,请先购买VIP商品"
;
return
false
;
}
var
disModel
=
distributor_InfoRepository
.
GetListForSingle
(
new
RB_Distributor_Info_Extend
()
{
UserId
=
umodel
.
Id
}).
FirstOrDefault
();
if
(
disModel
!=
null
)
{
var
fxgradeList
=
distributor_FXGradeRepository
.
GetList
(
new
RB_Distributor_FXGrade_Extend
()
{
TenantId
=
umodel
.
TenantId
,
MallBaseId
=
umodel
.
MallBaseId
});
fxgradeList
=
fxgradeList
.
Where
(
x
=>
x
.
IsGuest
==
1
||
x
.
IsGuest
==
3
).
ToList
();
if
(!
fxgradeList
.
Select
(
x
=>
x
.
Id
).
Contains
(
disModel
.
FXGradeId
??
0
))
{
message
=
"您当前等级无法购买VIP商品"
;
return
false
;
}
}
message
=
"有非线下服务类商品"
;
return
false
;
}
var
categoryList
=
clist
.
Where
(
x
=>
x
.
GoodsId
==
item
.
GoodsId
).
ToList
();
if
((
mallbaseModel
?.
IsFreeShipping
??
0
)
==
1
&&
(
gmodel
.
FullMoneyPinkage
??
0
)
==
0
&&
(
gmodel
.
FullNumPinkage
??
0
)
==
0
)
{
YFCategoryList
.
AddRange
(
categoryList
.
Select
(
x
=>
x
.
CategoryId
??
0
).
ToList
());
}
item
.
InventoryNum
=
gmodel
.
InventoryNum
??
0
;
item
.
CommissionPrice
=
gmodel
.
Commission
;
// 粉象 返佣金额
item
.
CostMoney
=
(
gmodel
.
IsCustomSpecification
==
2
)
?
(
gmodel
.
CostPrice
??
0
)
:
(
speciPList
.
Where
(
x
=>
x
.
GoodsId
==
item
.
GoodsId
&&
x
.
SpecificationSort
==
item
.
SpecificationSort
).
FirstOrDefault
()?.
CostMoney
??
0
);
//gmodel.CostPrice ?? 0;
item
.
CostMoney
=
(
gmodel
.
CostPrice
??
0
);
item
.
Specification
=
"[]"
;
item
.
SpecificationSort
=
"0"
;
item
.
PresentFXGrade
=
gmodel
.
PresentFXGrade
??
0
;
//赠送粉象分销等级
item
.
PresentFXMonth
=
gmodel
.
PresentFXMonth
??
0
;
item
.
ProductCode
=
gmodel
.
GoodsNumbers
;
item
.
CategoryIdList
=
categoryList
.
Select
(
x
=>
x
.
CategoryId
??
0
).
ToList
();
int
GoodsWeight
=
gmodel
.
GoodsWeight
??
0
;
//商品重量
#
region
规格
//验证规格是否已失效
if
(
gmodel
.
IsCustomSpecification
==
1
)
{
if
(
string
.
IsNullOrEmpty
(
item
.
SpecificationSort
))
{
message
=
"有商品已失效,请重新下单"
;
return
false
;
}
if
(!
speciPList
.
Where
(
x
=>
x
.
GoodsId
==
item
.
GoodsId
&&
x
.
SpecificationSort
==
item
.
SpecificationSort
).
Any
())
{
message
=
"有商品已失效,请重新下单"
;
return
false
;
}
}
else
{
if
(!
string
.
IsNullOrEmpty
(
item
.
SpecificationSort
))
{
message
=
"有商品已失效,请重新下单"
;
return
false
;
}
}
if
(!
string
.
IsNullOrEmpty
(
item
.
SpecificationSort
))
item
.
SmallShopsCostPrice
=
gmodel
.
SellingPrice
??
0
;
if
(
demodel
.
SmallShopsId
>
0
)
{
var
speciPModel
=
speciPList
.
Where
(
x
=>
x
.
GoodsId
==
item
.
GoodsId
&&
x
.
SpecificationSort
==
item
.
SpecificationSort
).
FirstOrDefault
();
gmodel
.
SellingPrice
=
speciPModel
?.
SellingPrice
??
0
;
gmodel
.
InventoryNum
=
speciPModel
?.
InventoryNum
??
0
;
GoodsWeight
=
speciPModel
?.
GoodsWeight
??
0
;
item
.
InventoryNum
=
speciPModel
?.
InventoryNum
??
0
;
item
.
SpeciPriceId
=
speciPModel
?.
Id
??
0
;
item
.
ProductCode
=
speciPModel
?.
GoodsNumbers
??
""
;
if
(
item
.
Number
>
speciPModel
.
InventoryNum
)
{
message
=
"商品库存不足:"
+
gmodel
.
Name
;
return
false
;
}
item
.
CommissionPrice
=
speciPModel
?.
Commission
??
0
;
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
())
{
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
)
{
var
sspModel
=
smallPList
.
Where
(
x
=>
x
.
GoodsId
==
item
.
GoodsId
&&
x
.
SpecificationKey
==
item
.
SpecificationSort
).
FirstOrDefault
();
if
(
sspModel
!=
null
)
//单商品设置的
if
(
sspModel
.
PriceType
==
1
)
{
//单商品设置的
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
);
}
gmodel
.
SellingPrice
+=
Math
.
Ceiling
((
gmodel
.
SellingPrice
??
0
)
*
(
sspModel
.
UpPrice
??
0
)
/
100
);
}
else
else
if
(
sspModel
.
PriceType
==
2
)
{
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
);
}
}
gmodel
.
SellingPrice
+=
(
sspModel
.
UpPrice
??
0
);
}
}
}
}
else
{
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
())
else
{
var
sspModel
=
smallPList
.
Where
(
x
=>
x
.
GoodsId
==
item
.
GoodsId
&&
x
.
SpecificationKey
==
""
).
FirstOrDefault
();
if
(
sspModel
!=
null
)
if
((
smallModel
.
UpPrice
??
0
)
>
0
)
{
//单商品设置的
if
(
sspModel
.
PriceType
==
1
)
if
(
smallModel
.
PriceType
==
1
)
{
gmodel
.
SellingPrice
+=
Math
.
Ceiling
((
gmodel
.
SellingPrice
??
0
)
*
(
s
sp
Model
.
UpPrice
??
0
)
/
100
);
gmodel
.
SellingPrice
+=
Math
.
Ceiling
((
gmodel
.
SellingPrice
??
0
)
*
(
s
mall
Model
.
UpPrice
??
0
)
/
100
);
}
else
if
(
s
sp
Model
.
PriceType
==
2
)
else
if
(
s
mall
Model
.
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
);
}
gmodel
.
SellingPrice
+=
(
smallModel
.
UpPrice
??
0
);
}
}
}
}
}
#
endregion
#
region
会员价格
gmodel
.
MemberPrice
=
gmodel
.
SellingPrice
??
0
;
if
(
umodel
.
MemberGrade
>
0
)
...
...
@@ -5193,8 +5015,6 @@ namespace Mall.Module.Product
#
endregion
item
.
SmallShopsCostPrice
=
(
item
.
SmallShopsCostPrice
??
0
)
*
(
item
.
Number
??
0
);
item
.
NorGoodsMoney
=
item
.
Final_Price
??
0
;
//用于计算 运费的 202-08-05 ld
item
.
GoodsWeight
=
GoodsWeight
;
item
.
Unit_Price
=
gmodel
.
SellingPrice
??
0
;
item
.
Original_Price
=
(
item
.
Unit_Price
)
*
(
item
.
Number
);
...
...
@@ -5321,357 +5141,209 @@ namespace Mall.Module.Product
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
TotalMoney
+=
(
item
.
Final_Price
??
0
);
item
.
OrderType
=
OrderTypeEnum
.
OfflineService
;
item
.
GoodServiceTime
=
goodModel
?.
ServiceTime
??
0
;
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
)
{
message
=
"优惠卷不存在,亲核实后再试"
;
return
false
;
}
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
;
}
}
}
#
region
处理全局包邮
List
<
RB_FreeShipping_Extend
>
freeShippingList
=
new
List
<
RB_FreeShipping_Extend
>();
if
(
YFCategoryList
.
Any
())
{
YFCategoryList
=
YFCategoryList
.
Distinct
().
ToList
();
string
categoryIds
=
string
.
Join
(
","
,
YFCategoryList
);
freeShippingList
=
freeShippingRepository
.
GetFreeShippingListByCategoryIds
(
new
RB_FreeShipping_Extend
{
MallBaseId
=
demodel
.
MallBaseId
,
TenantId
=
demodel
.
TenantId
,
CategoryIds
=
categoryIds
});
}
#
endregion
List
<
int
>
ExpressGoodsId
=
new
List
<
int
>();
//同商品 多规格
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
;
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
);
}
}
#
region
运费
decimal
Express
=
0
;
decimal
TExpress
=
0
;
bool
ExpressIsReckon
=
false
;
if
(
demodel
.
DeliveryMethod
==
OrderDeliveryMethodEnum
.
ExpressDistribution
)
{
//计算总和
int
exNum
=
demodel
.
DetailList
.
Where
(
x
=>
x
.
GoodsId
==
item
.
GoodsId
).
Sum
(
x
=>
x
.
Number
??
0
);
decimal
exMoney
=
demodel
.
DetailList
.
Where
(
x
=>
x
.
GoodsId
==
item
.
GoodsId
).
Sum
(
x
=>
x
.
NorGoodsMoney
);
if
(!((
gmodel
.
FullNumPinkage
>
0
&&
exNum
>=
gmodel
.
FullNumPinkage
)
||
(
gmodel
.
FullMoneyPinkage
>
0
&&
exMoney
>=
gmodel
.
FullMoneyPinkage
)))
{
bool
FreeShipping_Use
=
false
;
if
((
gmodel
.
FullMoneyPinkage
??
0
)
==
0
&&
(
gmodel
.
FullNumPinkage
??
0
)
==
0
&&
YFCategoryList
.
Any
())
{
//查找全局包邮规则
if
(
freeShippingList
!=
null
&&
freeShippingList
.
Any
())
{
var
fullNumPinkageModel
=
freeShippingList
.
Where
(
x
=>
item
.
CategoryIdList
.
Contains
(
x
.
CategoryId
)
&&
x
.
IsFreeShipping
==
1
&&
x
.
IsEnable
==
1
&&
x
.
FullNumPinkage
>
0
&&
x
.
CategoryId
>
0
).
OrderBy
(
x
=>
x
.
FullNumPinkage
).
ThenByDescending
(
x
=>
x
.
ID
).
FirstOrDefault
();
if
(
fullNumPinkageModel
==
null
||
fullNumPinkageModel
.
ID
<=
0
)
{
fullNumPinkageModel
=
freeShippingList
.
Where
(
x
=>
item
.
CategoryIdList
.
Contains
(
x
.
CategoryId
)
&&
x
.
IsFreeShipping
==
1
&&
x
.
IsEnable
==
1
&&
x
.
FullMoneyPinkage
>
0
&&
x
.
CategoryId
>
0
).
OrderBy
(
x
=>
x
.
FullMoneyPinkage
).
ThenByDescending
(
x
=>
x
.
ID
).
FirstOrDefault
();
}
if
(
fullNumPinkageModel
==
null
||
fullNumPinkageModel
.
ID
<=
0
)
{
fullNumPinkageModel
=
freeShippingList
.
Where
(
x
=>
item
.
CategoryIdList
.
Contains
(
x
.
CategoryId
)
&&
x
.
IsFreeShipping
==
1
&&
x
.
IsEnable
==
1
&&
x
.
FullNumPinkage
>
0
&&
x
.
CategoryId
==
0
).
OrderBy
(
x
=>
x
.
FullNumPinkage
).
ThenByDescending
(
x
=>
x
.
ID
).
FirstOrDefault
();
}
if
(
fullNumPinkageModel
==
null
||
fullNumPinkageModel
.
ID
<=
0
)
{
fullNumPinkageModel
=
freeShippingList
.
Where
(
x
=>
item
.
CategoryIdList
.
Contains
(
x
.
CategoryId
)
&&
x
.
IsFreeShipping
==
1
&&
x
.
IsEnable
==
1
&&
x
.
FullMoneyPinkage
>
0
&&
x
.
CategoryId
==
0
).
OrderBy
(
x
=>
x
.
FullMoneyPinkage
).
ThenByDescending
(
x
=>
x
.
ID
).
FirstOrDefault
();
}
if
(
fullNumPinkageModel
!=
null
)
{
//看所有商品是否满足该规则
var
sglist
=
SatisfiedGoodsList
.
Where
(
x
=>
x
.
FreeShipping
==
fullNumPinkageModel
.
ID
).
ToList
();
var
nosglist
=
SatisfiedGoodsList
.
Where
(
x
=>
x
.
FreeShipping
!=
fullNumPinkageModel
.
ID
).
ToList
();
if
(
sglist
.
Any
())
{
//看着商品是否包含在这里面
if
(
sglist
.
Where
(
x
=>
x
.
GoodsId
==
item
.
GoodsId
&&
x
.
SpecificationKey
==
item
.
SpecificationSort
).
Any
())
{
FreeShipping_Use
=
true
;
item
.
FreeShippingRemarks
=
sglist
.
Where
(
x
=>
x
.
GoodsId
==
item
.
GoodsId
&&
x
.
SpecificationKey
==
item
.
SpecificationSort
).
FirstOrDefault
().
Name
;
}
}
else
{
//根据 查询出所有的订单商品
var
SatisfiedGoodsList2
=
new
List
<
FreeShippingGoodsDetail
>();
foreach
(
var
qitem
in
demodel
.
DetailList
)
{
var
qgmodel
=
gList
.
Where
(
x
=>
x
.
Id
==
qitem
.
GoodsId
).
FirstOrDefault
();
if
(
qgmodel
!=
null
&&
qgmodel
.
GoodsStatus
==
1
&&
(
qgmodel
.
FullMoneyPinkage
??
0
)
==
0
&&
(
qgmodel
.
FullNumPinkage
??
0
)
==
0
)
{
if
(!
nosglist
.
Where
(
x
=>
x
.
GoodsId
==
qitem
.
GoodsId
&&
x
.
SpecificationKey
==
qitem
.
SpecificationSort
).
Any
())
{
var
fpkModel
=
freeShippingList
.
Where
(
x
=>
qitem
.
CategoryIdList
.
Contains
(
x
.
CategoryId
)
&&
x
.
IsFreeShipping
==
1
&&
x
.
IsEnable
==
1
&&
x
.
FullNumPinkage
>
0
&&
x
.
CategoryId
>
0
).
OrderBy
(
x
=>
x
.
FullNumPinkage
).
ThenByDescending
(
x
=>
x
.
ID
).
FirstOrDefault
();
if
(
fpkModel
==
null
||
fpkModel
.
ID
<=
0
)
{
fpkModel
=
freeShippingList
.
Where
(
x
=>
qitem
.
CategoryIdList
.
Contains
(
x
.
CategoryId
)
&&
x
.
IsFreeShipping
==
1
&&
x
.
IsEnable
==
1
&&
x
.
FullMoneyPinkage
>
0
&&
x
.
CategoryId
>
0
).
OrderBy
(
x
=>
x
.
FullMoneyPinkage
).
ThenByDescending
(
x
=>
x
.
ID
).
FirstOrDefault
();
}
if
(
fpkModel
==
null
||
fpkModel
.
ID
<=
0
)
{
fpkModel
=
freeShippingList
.
Where
(
x
=>
qitem
.
CategoryIdList
.
Contains
(
x
.
CategoryId
)
&&
x
.
IsFreeShipping
==
1
&&
x
.
IsEnable
==
1
&&
x
.
FullNumPinkage
>
0
&&
x
.
CategoryId
==
0
).
OrderBy
(
x
=>
x
.
FullNumPinkage
).
ThenByDescending
(
x
=>
x
.
ID
).
FirstOrDefault
();
}
if
(
fpkModel
==
null
||
fpkModel
.
ID
<=
0
)
{
fpkModel
=
freeShippingList
.
Where
(
x
=>
qitem
.
CategoryIdList
.
Contains
(
x
.
CategoryId
)
&&
x
.
IsFreeShipping
==
1
&&
x
.
IsEnable
==
1
&&
x
.
FullMoneyPinkage
>
0
&&
x
.
CategoryId
==
0
).
OrderBy
(
x
=>
x
.
FullMoneyPinkage
).
ThenByDescending
(
x
=>
x
.
ID
).
FirstOrDefault
();
}
if
(
fpkModel
!=
null
&&
fpkModel
.
ID
==
fullNumPinkageModel
.
ID
)
{
//是同一包邮规则里的
string
Name
=
fullNumPinkageModel
.
Name
;
if
(
fullNumPinkageModel
.
FullNumPinkage
>
0
)
{
Name
+=
":满"
+
fullNumPinkageModel
.
FullNumPinkage
+
"件包邮"
;
}
else
if
(
fullNumPinkageModel
.
FullMoneyPinkage
>
0
)
{
Name
+=
":满"
+
fullNumPinkageModel
.
FullMoneyPinkage
+
"元包邮"
;
}
SatisfiedGoodsList2
.
Add
(
new
FreeShippingGoodsDetail
()
{
FreeShipping
=
fullNumPinkageModel
.
ID
,
Name
=
Name
,
GoodsId
=
qitem
.
GoodsId
??
0
,
SpecificationKey
=
qitem
.
SpecificationSort
,
Number
=
qitem
.
Number
??
0
,
Money
=
qitem
.
NorGoodsMoney
,
CategoryId
=
fullNumPinkageModel
.
CategoryId
});
}
}
}
}
if
(
SatisfiedGoodsList2
.
Any
())
{
//看是否满足包邮
if
(
fullNumPinkageModel
.
FullNumPinkage
>
0
)
{
if
(
SatisfiedGoodsList2
.
Sum
(
x
=>
x
.
Number
)
>=
fullNumPinkageModel
.
FullNumPinkage
)
{
FreeShipping_Use
=
true
;
SatisfiedGoodsList
.
AddRange
(
SatisfiedGoodsList2
);
}
}
else
if
(
fullNumPinkageModel
.
FullMoneyPinkage
>
0
)
{
if
(
SatisfiedGoodsList2
.
Sum
(
x
=>
x
.
Money
)
>=
fullNumPinkageModel
.
FullMoneyPinkage
)
{
FreeShipping_Use
=
true
;
SatisfiedGoodsList
.
AddRange
(
SatisfiedGoodsList2
);
}
}
}
//看着商品是否包含在这里面
if
(
SatisfiedGoodsList
.
Where
(
x
=>
x
.
GoodsId
==
item
.
GoodsId
&&
x
.
SpecificationKey
==
item
.
SpecificationSort
).
Any
())
{
item
.
FreeShippingRemarks
=
SatisfiedGoodsList
.
Where
(
x
=>
x
.
GoodsId
==
item
.
GoodsId
&&
x
.
SpecificationKey
==
item
.
SpecificationSort
).
FirstOrDefault
().
Name
;
}
}
}
}
}
if
(
FreeShipping_Use
==
false
)
{
int
FreightId2
=
gmodel
.
FreightId
??
0
;
if
(
gmodel
.
FreightId
==
0
)
{
FreightId2
=
DefFreightId
;
}
if
(
FreightId2
>
0
)
{
var
rulesModel
=
rulesList
.
Where
(
x
=>
x
.
ID
==
FreightId2
).
FirstOrDefault
();
List
<
Model
.
Extend
.
BaseSetUp
.
RB_Logistics_RulesPrice_Extend
>
priceList2
=
priceList
.
Where
(
x
=>
x
.
RulesId
==
FreightId2
).
ToList
();
if
(
priceList2
.
Any
())
{
var
priceIds
=
priceList2
.
Select
(
x
=>
x
.
ID
).
ToList
();
var
regionList2
=
regionList
.
Where
(
x
=>
priceIds
.
Contains
(
x
.
RulesPriceId
)).
ToList
();
var
regionModel
=
regionList2
.
Where
(
x
=>
disList
.
Contains
(
x
.
RegionId
)).
FirstOrDefault
();
if
(
regionModel
!=
null
)
{
var
pmodel
=
priceList2
.
Where
(
x
=>
x
.
ID
==
regionModel
.
RulesPriceId
).
FirstOrDefault
();
if
(
pmodel
!=
null
&&
rulesModel
!=
null
)
{
if
(
rulesModel
.
ChargeMode
==
Common
.
Enum
.
MallBase
.
ChargeModeEnum
.
Num
)
{
//按件计费
if
(
exNum
<=
pmodel
.
First
)
{
Express
=
pmodel
.
FirstPrice
;
}
else
{
if
(
pmodel
.
Second
>
0
)
{
if
((
exNum
-
pmodel
.
First
)
%
pmodel
.
Second
==
0
)
{
Express
=
pmodel
.
FirstPrice
+
((
exNum
-
pmodel
.
First
)
/
pmodel
.
Second
)
*
pmodel
.
SecondPrice
;
}
else
{
Express
=
pmodel
.
FirstPrice
+
((
exNum
-
pmodel
.
First
)
/
pmodel
.
Second
+
1
)
*
pmodel
.
SecondPrice
;
}
}
else
{
Express
=
pmodel
.
FirstPrice
;
}
}
}
else
{
//重量计费
int
TotalW
=
exNum
*
(
item
.
GoodsWeight
??
0
);
if
(
TotalW
<=
pmodel
.
First
)
{
Express
=
pmodel
.
FirstPrice
;
}
else
{
if
(
pmodel
.
Second
>
0
)
{
if
((
TotalW
-
pmodel
.
First
)
%
pmodel
.
Second
==
0
)
{
Express
=
pmodel
.
FirstPrice
+
((
TotalW
-
pmodel
.
First
)
/
pmodel
.
Second
)
*
pmodel
.
SecondPrice
;
}
else
{
Express
=
pmodel
.
FirstPrice
+
((
TotalW
-
pmodel
.
First
)
/
pmodel
.
Second
+
1
)
*
pmodel
.
SecondPrice
;
}
}
else
{
Express
=
pmodel
.
FirstPrice
;
}
}
}
}
}
}
}
TExpress
=
Express
;
if
(
exNum
!=
item
.
Number
)
}
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
))
{
Express
=
Math
.
Round
(
Express
*
(
item
.
Number
??
0
)
/
exNum
,
2
,
MidpointRounding
.
AwayFromZero
);
if
(!
ExpressGoodsId
.
Contains
(
item
.
GoodsId
??
0
))
GoodsCouponList
.
Add
(
new
RB_Goods_CouponModel
()
{
ExpressGoodsId
.
Add
(
item
.
GoodsId
??
0
);
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
)
{
message
=
"优惠卷不存在,亲核实后再试"
;
return
false
;
}
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
}
}
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
))
{
ExpressIsReckon
=
true
;
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
});
}
}
}
}
if
(!
ExpressIsReckon
)
#
endregion
TotalMoney
+=
(
item
.
Final_Price
??
0
);
item
.
OrderType
=
gmodel
.
GoodsType
;
item
.
GoodsName
=
gmodel
.
Name
;
item
.
CoverImage
=
""
;
if
(!
string
.
IsNullOrEmpty
(
gmodel
.
CarouselImage
)
&&
gmodel
.
CarouselImage
!=
"[]"
)
{
TotalExpress
+=
TExpress
;
List
<
string
>
CarouselIdList
=
JsonConvert
.
DeserializeObject
<
List
<
string
>>(
gmodel
.
CarouselImage
);
//封面图
item
.
CoverImage
=
CarouselIdList
[
0
];
}
#
endregion
item
.
FreightMoney
=
Express
;
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
)
{
message
=
"优惠卷不存在,亲核实后再试"
;
return
false
;
}
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
;
item
.
GoodServiceTime
=
gmodel
.
ServiceTime
;
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
);
}
}
}
item
.
EducationCouponId
=
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
)
{
...
...
@@ -5686,9 +5358,9 @@ namespace Mall.Module.Product
}
}
}
if
(
demodel
.
FreightMoney
!=
TotalExpress
)
if
(
(
demodel
?.
EducationMoney
??
0
)
!=
EducationMoney
)
{
message
=
"
运费
不正确"
;
message
=
"
套餐卡抵扣金额
不正确"
;
return
false
;
}
if
(
CouponsMoney
!=
demodel
.
CouponMoney
)
...
...
@@ -5696,8 +5368,9 @@ namespace Mall.Module.Product
message
=
"优惠金额计算有误"
;
return
false
;
}
//验证总额
if
(
demodel
.
Income
!=
(
TotalMoney
+
TotalExpress
))
if
(
demodel
.
Income
!=
(
TotalMoney
-
EducationMoney
))
{
message
=
"订单合计金额不正确"
;
return
false
;
...
...
@@ -5705,28 +5378,27 @@ namespace Mall.Module.Product
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);
//
}
//
}
//
}
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
try
{
Random
R
=
new
Random
();
...
...
@@ -5735,6 +5407,14 @@ namespace Mall.Module.Product
demodel
.
PaymentWay
=
OrderPaymentTypeEnum
.
OnlinePayment
;
//先默认在线支付
demodel
.
Remark
??=
""
;
demodel
.
ApplyForCancelStatus
??=
0
;
if
(
demodel
.
Income
==
0
)
{
demodel
.
OrderStatus
=
OrderStatusEnum
.
Completed
;
demodel
.
PaymentTime
=
DateTime
.
Now
;
demodel
.
DeliveryTime
=
DateTime
.
Now
;
demodel
.
ReceivingTime
=
DateTime
.
Now
;
demodel
.
FinishTime
=
DateTime
.
Now
;
}
int
OrderId
=
goods_OrderRepository
.
Insert
(
demodel
);
if
(
OrderId
>
0
)
{
...
...
@@ -5751,7 +5431,7 @@ namespace Mall.Module.Product
}
#
endregion
//插入订单明细+ 商品库存更新
InsertOrderDetail
(
demodel
,
null
,
OrderId
,
SatisfiedGoodsList
);
InsertOrderDetail
(
demodel
,
null
,
OrderId
,
new
List
<
FreeShippingGoodsDetail
>()
);
//用户订单数增加
Dictionary
<
string
,
object
>
keyValues
=
new
Dictionary
<
string
,
object
>()
...
...
@@ -5764,20 +5444,30 @@ namespace Mall.Module.Product
{
foreach
(
var
item
in
cList
)
{
Dictionary
<
string
,
object
>
keyValues1
=
new
Dictionary
<
string
,
object
>()
Dictionary
<
string
,
object
>
keyValues1
=
new
Dictionary
<
string
,
object
>()
{
{
nameof
(
RB_Member_DiscountCoupon_Extend
.
UseDate
),
DateTime
.
Now
},
{
nameof
(
RB_Member_DiscountCoupon_Extend
.
UseState
),
1
}
};
member_CouponRepository
.
Update
(
keyValues1
,
new
WhereHelper
(
nameof
(
RB_Member_DiscountCoupon_Extend
.
Id
),
item
.
Id
));
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
);
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
));
...
...
@@ -5797,7 +5487,55 @@ namespace Mall.Module.Product
OrderId
=
OrderId
});
}
member_UserRepository
.
Update
(
keyValues
,
new
WhereHelper
(
nameof
(
RB_Member_User_Extend
.
Id
),
umodel
.
Id
));
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
);
#
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
});
var
educationModel
=
eList
.
FirstOrDefault
();
if
(
educationModel
!=
null
)
{
//更新用户课程卡 已使用数量
Dictionary
<
string
,
object
>
keyValues1
=
new
Dictionary
<
string
,
object
>()
{
{
nameof
(
RB_Education_MemberCoupon_Extend
.
UseHeXiao
),
educationModel
.
UseHeXiao
+
EducationNum
}
};
List
<
WhereHelper
>
wheres1
=
new
List
<
WhereHelper
>()
{
new
WhereHelper
()
{
FiledName
=
nameof
(
RB_Education_MemberCoupon_Extend
.
Id
),
FiledValue
=
educationModel
.
Id
,
OperatorEnum
=
OperatorEnum
.
Equal
}
};
education_MemberCouponRepository
.
Update
(
keyValues1
,
wheres1
);
}
}
#
endregion
//来自购物车的话 需清除购物车数据
if
(
demodel
.
IsFormShoppingCart
==
1
)
...
...
@@ -5813,27 +5551,27 @@ namespace Mall.Module.Product
{
new
WhereHelper
()
{
FiledName
=
nameof
(
RB_Goods_ShoppingCart
.
Id
),
FiledValue
=
cartItem
,
OperatorEnum
=
OperatorEnum
.
IN
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
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
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
FiledName
=
nameof
(
RB_Goods_ShoppingCart
.
MallBaseId
),
FiledValue
=
demodel
.
MallBaseId
,
OperatorEnum
=
OperatorEnum
.
Equal
}
};
goods_ShoppingCartRepository
.
Update
(
keyValues2
,
wheres2
);
...
...
@@ -5849,7 +5587,16 @@ namespace Mall.Module.Product
{
nameof
(
RB_Member_User_Extend
.
IsBeDownline
),
1
},
{
nameof
(
RB_Member_User_Extend
.
BeDownlineDate
),
DateTime
.
Now
},
};
member_UserRepository
.
Update
(
keyValues1
,
new
WhereHelper
(
nameof
(
RB_Member_User_Extend
.
Id
),
umodel
.
Id
));
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
);
}
//任务执行返佣 失败查看日志,手动返佣(空闲可增加手动返佣接口)
...
...
@@ -5864,7 +5611,7 @@ namespace Mall.Module.Product
Id
=
0
,
Type
=
1
,
SourceId
=
OrderId
,
Content
=
"新增
线下服务
订单"
,
Content
=
"新增
课程
订单"
,
CreateDate
=
DateTime
.
Now
,
MallBaseId
=
demodel
.
MallBaseId
,
TenantId
=
demodel
.
TenantId
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment