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
26709c8b
Commit
26709c8b
authored
Oct 29, 2020
by
黄奎
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新增订单
parent
d2d4cdb1
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
1205 additions
and
1 deletion
+1205
-1
RB_Goods_Order.cs
Mall.Model/Entity/Product/RB_Goods_Order.cs
+7
-1
OrderModule.cs
Mall.Module.Product/OrderModule.cs
+1141
-0
AppletOrderController.cs
Mall.WebApi/Controllers/Product/AppletOrderController.cs
+57
-0
No files found.
Mall.Model/Entity/Product/RB_Goods_Order.cs
View file @
26709c8b
...
...
@@ -309,7 +309,7 @@ namespace Mall.Model.Entity.Product
/// </summary>
public
int
?
SmallShopsId
{
get
;
set
;
}
/// <summary>
/// 订单分类 0正常订单 1司导订单 2教育订单
/// 订单分类 0正常订单 1司导订单 2教育订单
3-线下服务订单
/// </summary>
public
int
OrderClassify
{
get
;
set
;
}
/// <summary>
...
...
@@ -320,5 +320,11 @@ namespace Mall.Model.Entity.Product
/// 课程卡抵扣金额
/// </summary>
public
decimal
?
EducationMoney
{
get
;
set
;
}
/// <summary>
/// 门店编号
/// </summary>
public
int
StoresId
{
get
;
set
;
}
}
}
Mall.Module.Product/OrderModule.cs
View file @
26709c8b
...
...
@@ -4597,6 +4597,1147 @@ namespace Mall.Module.Product
}
}
/// <summary>
/// 线下服务订单
/// </summary>
/// <param name="demodel"></param>
/// <returns></returns>
[
TransactionCallHandler
]
public
bool
SetAppletOfflineGoodsOrderModule
(
RB_Goods_Order_Extend
demodel
,
out
string
message
)
{
message
=
""
;
var
umodel
=
member_UserRepository
.
GetEntity
(
demodel
.
UserId
);
if
(
umodel
==
null
)
{
message
=
"用户不存在"
;
return
false
;
}
if
(
demodel
.
SmallShopsId
==
0
)
{
demodel
.
SmallShopsId
=
umodel
.
SmallShopId
;
}
if
(
umodel
.
Blacklist
==
1
)
{
message
=
"您在黑名单状态无法下单,请联系管理员核实"
;
return
false
;
}
List
<
int
>
disList
=
new
List
<
int
>();
disList
.
Add
(
demodel
.
Province
??
0
);
disList
.
Add
(
demodel
.
City
??
0
);
disList
.
Add
(
demodel
.
District
??
0
);
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
;
//优惠卷验证
#
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
())
{
message
=
"优惠券不存在,请核实后再试"
;
return
false
;
}
}
}
if
(
dcList
.
Where
(
x
=>
x
.
SmallShopId
>
0
).
Any
())
{
IsCommissionCoupons
=
false
;
}
}
}
}
}
#
endregion
List
<
FreeShippingGoodsDetail
>
SatisfiedGoodsList
=
new
List
<
FreeShippingGoodsDetail
>();
//可包邮的商品
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
();
}
int
DefFreightId
=
0
;
//默认运费id
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
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
)
{
List
<
int
>
FreightIdList
=
new
List
<
int
>();
if
(
gList
.
Where
(
x
=>
x
.
FreightId
>
0
).
Any
())
{
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
});
}
}
}
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
)
{
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
)
{
var
ogModel
=
OrderNumList
.
Where
(
x
=>
x
.
GoodsId
==
gmodel
.
Id
).
FirstOrDefault
();
if
(
ogModel
!=
null
)
{
if
(
ogModel
.
OrderNum
+
1
>
(
gmodel
.
LimitBuyOrderNum
??
0
))
{
message
=
"该商品订单限购"
+
(
gmodel
.
LimitBuyOrderNum
??
0
)
+
"单,您已购买"
+
ogModel
.
OrderNum
+
"单"
;
return
false
;
}
}
}
#
endregion
}
}
else
if
(
IsLimitOk
)
{
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
}
}
List
<
int
>
YFCategoryList
=
new
List
<
int
>();
//全局适配 分类
var
mallbaseModel
=
mallBaseRepository
.
GetListRepository
(
new
Model
.
Extend
.
BaseSetUp
.
RB_MallBase_Extend
()
{
TenantId
=
demodel
.
TenantId
,
MallBaseId
=
demodel
.
MallBaseId
}).
FirstOrDefault
();
#
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
)
{
message
=
"有商品不存在或者商品已失效"
;
return
false
;
}
if
(
gmodel
.
PresentFXGrade
>
0
)
{
//是赠送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
;
}
}
}
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
.
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
))
{
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
())
{
var
sspModel
=
smallPList
.
Where
(
x
=>
x
.
GoodsId
==
item
.
GoodsId
&&
x
.
SpecificationKey
==
item
.
SpecificationSort
).
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
);
}
}
}
}
}
}
else
{
if
(
item
.
Number
>
gmodel
.
InventoryNum
)
{
message
=
"商品库存不足:"
+
gmodel
.
Name
;
return
false
;
}
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
.
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
);
#
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
优惠券
//decimal CouponsMoney = 0;
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
)
{
message
=
"优惠卷不存在,亲核实后再试"
;
return
false
;
}
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
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
)
{
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
)
{
Express
=
Math
.
Round
(
Express
*
(
item
.
Number
??
0
)
/
exNum
,
2
,
MidpointRounding
.
AwayFromZero
);
if
(!
ExpressGoodsId
.
Contains
(
item
.
GoodsId
??
0
))
{
ExpressGoodsId
.
Add
(
item
.
GoodsId
??
0
);
}
else
{
ExpressIsReckon
=
true
;
}
}
}
}
}
if
(!
ExpressIsReckon
)
{
TotalExpress
+=
TExpress
;
}
#
endregion
item
.
FreightMoney
=
Express
;
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
.
FreightMoney
!=
TotalExpress
)
{
message
=
"运费不正确"
;
return
false
;
}
if
(
CouponsMoney
!=
demodel
.
CouponMoney
)
{
message
=
"优惠金额计算有误"
;
return
false
;
}
//验证总额
if
(
demodel
.
Income
!=
(
TotalMoney
+
TotalExpress
))
{
message
=
"订单合计金额不正确"
;
return
false
;
}
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
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
);
if
(
OrderId
>
0
)
{
demodel
.
OrderId
=
OrderId
;
#
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
,
null
,
OrderId
,
SatisfiedGoodsList
);
//用户订单数增加
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
}
};
member_CouponRepository
.
Update
(
keyValues1
,
new
WhereHelper
(
nameof
(
RB_Member_DiscountCoupon_Extend
.
Id
),
item
.
Id
));
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
});
}
member_UserRepository
.
Update
(
keyValues
,
new
WhereHelper
(
nameof
(
RB_Member_User_Extend
.
Id
),
umodel
.
Id
));
//来自购物车的话 需清除购物车数据
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
},
};
member_UserRepository
.
Update
(
keyValues1
,
new
WhereHelper
(
nameof
(
RB_Member_User_Extend
.
Id
),
umodel
.
Id
));
}
//任务执行返佣 失败查看日志,手动返佣(空闲可增加手动返佣接口)
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
});
}
return
true
;
}
catch
(
Exception
ex
)
{
LogHelper
.
Write
(
ex
,
"SetAppletOfflineGoodsOrderModule"
);
return
false
;
}
}
/// <summary>
/// 赠送粉象等级
/// </summary>
...
...
Mall.WebApi/Controllers/Product/AppletOrderController.cs
View file @
26709c8b
...
...
@@ -694,6 +694,63 @@ namespace Mall.WebApi.Controllers.MallBase
return
orderModule
.
SetAppletSDGoodsOrderInfo
(
demodel
);
}
/// <summary>
/// 线下服务下单
/// </summary>
/// <returns></returns>
[
HttpPost
]
public
ApiResult
SetAppletOfflineGoodsOrderInfo
()
{
var
req
=
RequestParm
;
var
userInfo
=
AppletUserInfo
;
RB_Goods_Order_Extend
demodel
=
JsonConvert
.
DeserializeObject
<
RB_Goods_Order_Extend
>(
req
.
msg
.
ToString
());
if
(
string
.
IsNullOrEmpty
(
demodel
.
Consignee
))
{
return
ApiResult
.
ParamIsNull
(
"请传递联系人"
);
}
if
(
string
.
IsNullOrEmpty
(
demodel
.
Mobile
))
{
return
ApiResult
.
ParamIsNull
(
"请传递联系人手机号码"
);
}
demodel
.
DeliveryMethod
=
Common
.
Enum
.
Goods
.
OrderDeliveryMethodEnum
.
VerificationShop
;
if
((
demodel
.
Income
??
0
)
<=
0
)
{
return
ApiResult
.
ParamIsNull
(
"订单金额不正确"
);
}
if
(
demodel
.
StoresId
<=
0
)
{
return
ApiResult
.
ParamIsNull
(
"请选择服务门店"
);
}
demodel
.
BuyerMessage
??=
""
;
//买家留言
demodel
.
OrderSource
??=
Common
.
Enum
.
User
.
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
=
3
;
demodel
.
DestinationAddress
??=
""
;
#
endregion
bool
flag
=
orderModule
.
SetAppletOfflineGoodsOrderModule
(
demodel
,
out
string
message
);
return
flag
?
ApiResult
.
Success
(
message
:
message
)
:
ApiResult
.
Failed
(
message
:
message
);
}
/// <summary>
/// ERP下单
/// </summary>
...
...
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