Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
纵之格
ShopXO
提交
4848be36
ShopXO
项目概览
纵之格
/
ShopXO
通知
394
Star
16
Fork
11
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
ShopXO
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
4848be36
编写于
8月 05, 2020
作者:
D
devil
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
库存扣除优化
上级
fdf4c9fb
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
163 addition
and
58 deletion
+163
-58
application/index/controller/Cart.php
application/index/controller/Cart.php
+3
-3
application/service/BuyService.php
application/service/BuyService.php
+147
-47
application/service/OrderService.php
application/service/OrderService.php
+12
-8
sourcecode/weixin/pages/buy/buy.wxss
sourcecode/weixin/pages/buy/buy.wxss
+1
-0
未找到文件。
application/index/controller/Cart.php
浏览文件 @
4848be36
...
...
@@ -77,7 +77,7 @@ class Cart extends Common
$this
->
error
(
'非法访问'
);
}
$params
=
$
_POST
;
$params
=
$
this
->
data_post
;
$params
[
'user'
]
=
$this
->
user
;
return
BuyService
::
CartSave
(
$params
);
}
...
...
@@ -98,7 +98,7 @@ class Cart extends Common
return
$this
->
error
(
'非法访问'
);
}
$params
=
$
_POST
;
$params
=
$
this
->
data_post
;
$params
[
'user'
]
=
$this
->
user
;
return
BuyService
::
CartDelete
(
$params
);
}
...
...
@@ -119,7 +119,7 @@ class Cart extends Common
$this
->
error
(
'非法访问'
);
}
$params
=
$
_POST
;
$params
=
$
this
->
data_post
;
$params
[
'user'
]
=
$this
->
user
;
return
BuyService
::
CartStock
(
$params
);
}
...
...
application/service/BuyService.php
浏览文件 @
4848be36
...
...
@@ -102,17 +102,29 @@ class BuyService
return
$goods_base
;
}
//
获取商品规格图片
//
是否存在规格
if
(
!
empty
(
$spec
))
{
// 获取商品规格图片
$images
=
self
::
BuyGoodsSpecImages
(
$goods_id
,
$spec
);
if
(
!
empty
(
$images
))
{
$goods
[
'images'
]
=
$images
;
$goods
[
'images_old'
]
=
ResourcesService
::
AttachmentPathViewHandle
(
$images
);
}
// 从规格获取库存
$base
=
GoodsService
::
GoodsSpecDetail
([
'id'
=>
$goods_id
,
'spec'
=>
$spec
]);
if
(
$base
[
'code'
]
==
0
)
{
// 规格库存赋值
$goods
[
'inventory'
]
=
$base
[
'data'
][
'spec_base'
][
'inventory'
];
}
else
{
return
$base
;
}
}
// 数量
$stock
=
(
$goods
[
'buy_max_number'
]
>
0
&&
$params
[
'stock'
]
>
$goods
[
'buy_max_number'
])
?
$goods
[
'buy_max_number'
]
:
$params
[
'stock'
];
...
...
@@ -1477,7 +1489,7 @@ class BuyService
}
/**
* 订单支付前校验
*
单个
订单支付前校验
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
...
...
@@ -1485,7 +1497,7 @@ class BuyService
* @desc description
* @param [array] $params [输入参数]
*/
public
static
function
OrderPayBeginCheck
(
$params
=
[])
public
static
function
Single
OrderPayBeginCheck
(
$params
=
[])
{
// 请求参数
$p
=
[
...
...
@@ -1494,15 +1506,58 @@ class BuyService
'key_name'
=>
'order_id'
,
'error_msg'
=>
'订单id有误'
,
],
];
$ret
=
ParamsChecked
(
$params
,
$p
);
if
(
$ret
!==
true
)
{
return
DataReturn
(
$ret
,
-
1
);
}
// 是否扣除库存
if
(
MyC
(
'common_is_deduction_inventory'
,
0
)
!=
1
)
{
return
DataReturn
(
'未开启扣除库存'
,
0
);
}
// 获取订单商品
$order_detail
=
Db
::
name
(
'OrderDetail'
)
->
field
(
'id,goods_id,buy_number,spec'
)
->
where
([
'order_id'
=>
$params
[
'order_id'
]])
->
select
();
if
(
!
empty
(
$order_detail
))
{
foreach
(
$order_detail
as
$v
)
{
$ret
=
self
::
BuyOrderPayBeginGoodsCheck
(
$v
);
if
(
$ret
[
'code'
]
!=
0
)
{
return
$ret
;
}
}
return
DataReturn
(
'校验成功'
,
0
);
}
return
DataReturn
(
'没有需要扣除库存的数据'
,
0
);
}
/**
* 多个订单下单库存校验
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-08-04
* @desc description
* @param [array] $params [输入参数]
*/
public
static
function
MoreOrderPayBeginCheck
(
$params
=
[])
{
// 请求参数
$p
=
[
[
'checked_type'
=>
'empty'
,
'key_name'
=>
'order_data'
,
'error_msg'
=>
'订单
更新
数据不能为空'
,
'error_msg'
=>
'订单数据不能为空'
,
],
[
'checked_type'
=>
'is_array'
,
'key_name'
=>
'order_data'
,
'error_msg'
=>
'订单
更新
数据有误'
,
'error_msg'
=>
'订单数据有误'
,
]
];
$ret
=
ParamsChecked
(
$params
,
$p
);
...
...
@@ -1512,59 +1567,105 @@ class BuyService
}
// 是否扣除库存
$common_is_deduction_inventory
=
MyC
(
'common_is_deduction_inventory'
,
0
);
if
(
$common_is_deduction_inventory
!=
1
)
if
(
MyC
(
'common_is_deduction_inventory'
,
0
)
!=
1
)
{
return
DataReturn
(
'未开启扣除库存'
,
0
);
}
//
获取订单商品
$
order_detail
=
Db
::
name
(
'OrderDetail'
)
->
field
(
'id,goods_id,buy_number,spec'
)
->
where
([
'order_id'
=>
$params
[
'order_id'
]
])
->
select
();
if
(
!
empty
(
$order_
detail
))
//
数据集合
$
detail
=
Db
::
name
(
'OrderDetail'
)
->
field
(
'id,order_id,goods_id,buy_number,spec'
)
->
where
([
'order_id'
=>
array_column
(
$params
[
'order_data'
],
'id'
)
])
->
select
();
if
(
empty
(
$
detail
))
{
foreach
(
$order_detail
as
$v
)
{
// 获取商品
$goods
=
Db
::
name
(
'Goods'
)
->
field
(
'is_shelves,is_deduction_inventory,inventory,title'
)
->
find
(
$v
[
'goods_id'
]);
if
(
empty
(
$goods
))
{
return
DataReturn
(
'商品不存在'
,
-
10
);
}
return
DataReturn
(
'订单详情有误'
,
-
1
);
}
// 商品状态
if
(
$goods
[
'is_shelves'
]
!=
1
)
{
return
DataReturn
(
'商品已下架['
.
$goods
[
'title'
]
.
']'
,
-
10
);
}
// 订单集合
$order_group
=
[];
foreach
(
$params
[
'order_data'
]
as
$o
)
{
$order_group
[
$o
[
'id'
]]
=
$o
[
'warehouse_id'
];
}
// 订单详情
$data
=
[];
foreach
(
$detail
as
$d
)
{
$key
=
md5
(
empty
(
$d
[
'spec'
])
?
'default'
:
$d
[
'spec'
]);
if
(
!
isset
(
$data
[
$order_group
[
$d
[
'order_id'
]]][
$d
[
'goods_id'
]][
$key
]))
{
$data
[
$order_group
[
$d
[
'order_id'
]]][
$d
[
'goods_id'
]][
$key
]
=
$d
;
}
else
{
$data
[
$order_group
[
$d
[
'order_id'
]]][
$d
[
'goods_id'
]][
$key
][
'buy_number'
]
+=
$d
[
'buy_number'
];
}
}
// 库存
if
(
isset
(
$goods
[
'is_deduction_inventory'
])
&&
$goods
[
'is_deduction_inventory'
]
==
1
)
// 数据校验
foreach
(
$data
as
$w
)
{
foreach
(
$w
as
$g
)
{
foreach
(
$g
as
$v
)
{
// 先判断商品库存是否不足
if
(
$
goods
[
'inventory'
]
<
$v
[
'buy_number'
]
)
$ret
=
self
::
BuyOrderPayBeginGoodsCheck
(
$v
);
if
(
$
ret
[
'code'
]
!=
0
)
{
return
DataReturn
(
'库存不足['
.
$goods
[
'title'
]
.
'('
.
$goods
[
'inventory'
]
.
'<'
.
$v
[
'buy_number'
]
.
')]'
,
-
10
)
;
return
$ret
;
}
}
}
}
// 规格库存
$spec
=
empty
(
$v
[
'spec'
])
?
''
:
json_decode
(
$v
[
'spec'
],
true
);
$base
=
GoodsService
::
GoodsSpecDetail
([
'id'
=>
$v
[
'goods_id'
],
'spec'
=>
$spec
]);
if
(
$base
[
'code'
]
==
0
)
{
// 先判断商品规格库存是否不足
$inventory
=
Db
::
name
(
'GoodsSpecBase'
)
->
where
([
'id'
=>
$base
[
'data'
][
'spec_base'
][
'id'
],
'goods_id'
=>
$v
[
'goods_id'
]])
->
value
(
'inventory'
);
if
(
$inventory
<
$v
[
'buy_number'
])
{
return
DataReturn
(
'库存不足['
.
$goods
[
'title'
]
.
'('
.
$inventory
.
'<'
.
$v
[
'buy_number'
]
.
')]'
,
-
10
);
}
}
else
{
return
$base
;
}
return
DataReturn
(
'校验成功'
,
0
);
}
/**
* 订单支付前商品校验
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-08-05
* @desc description
* @param [array] $detail [订单详情]
*/
public
static
function
BuyOrderPayBeginGoodsCheck
(
$detail
)
{
// 获取商品
$goods
=
Db
::
name
(
'Goods'
)
->
field
(
'is_shelves,is_deduction_inventory,inventory,title'
)
->
find
(
$detail
[
'goods_id'
]);
if
(
empty
(
$goods
))
{
return
DataReturn
(
'商品不存在'
,
-
10
);
}
// 商品状态
if
(
$goods
[
'is_shelves'
]
!=
1
)
{
return
DataReturn
(
'商品已下架['
.
$goods
[
'title'
]
.
']'
,
-
10
);
}
// 库存
if
(
isset
(
$goods
[
'is_deduction_inventory'
])
&&
$goods
[
'is_deduction_inventory'
]
==
1
)
{
// 先判断商品库存是否不足
if
(
$goods
[
'inventory'
]
<
$detail
[
'buy_number'
])
{
return
DataReturn
(
'库存不足['
.
$goods
[
'title'
]
.
'('
.
$goods
[
'inventory'
]
.
'<'
.
$detail
[
'buy_number'
]
.
')]'
,
-
10
);
}
// 规格库存
$spec
=
empty
(
$detail
[
'spec'
])
?
''
:
json_decode
(
$detail
[
'spec'
],
true
);
$base
=
GoodsService
::
GoodsSpecDetail
([
'id'
=>
$detail
[
'goods_id'
],
'spec'
=>
$spec
]);
if
(
$base
[
'code'
]
==
0
)
{
// 先判断商品规格库存是否不足
if
(
$base
[
'data'
][
'spec_base'
][
'inventory'
]
<
$detail
[
'buy_number'
])
{
return
DataReturn
(
'库存不足['
.
$goods
[
'title'
]
.
'('
.
$base
[
'data'
][
'spec_base'
][
'inventory'
]
.
'<'
.
$detail
[
'buy_number'
]
.
')]'
,
-
10
);
}
}
else
{
return
$base
;
}
return
DataReturn
(
'校验成功'
,
0
);
}
return
DataReturn
(
'
没有需要扣除库存的数据
'
,
0
);
return
DataReturn
(
'
校验成功
'
,
0
);
}
/**
...
...
@@ -1669,10 +1770,9 @@ class BuyService
if
(
$base
[
'code'
]
==
0
)
{
// 先判断商品规格库存是否不足
$inventory
=
Db
::
name
(
'GoodsSpecBase'
)
->
where
([
'id'
=>
$base
[
'data'
][
'spec_base'
][
'id'
],
'goods_id'
=>
$v
[
'goods_id'
]])
->
value
(
'inventory'
);
if
(
$inventory
<
$v
[
'buy_number'
])
if
(
$base
[
'data'
][
'spec_base'
][
'inventory'
]
<
$v
[
'buy_number'
])
{
return
DataReturn
(
'商品规格库存不足['
.
$goods
[
'title'
]
.
'('
.
$
inventory
.
'<'
.
$v
[
'buy_number'
]
.
']'
,
-
10
);
return
DataReturn
(
'商品规格库存不足['
.
$goods
[
'title'
]
.
'('
.
$
base
[
'data'
][
'spec_base'
][
'inventory'
]
.
'<'
.
$v
[
'buy_number'
]
.
']'
,
-
10
);
}
// 扣除规格操作
...
...
application/service/OrderService.php
浏览文件 @
4848be36
...
...
@@ -80,6 +80,7 @@ class OrderService
$order_nos
=
[];
// 循环处理
$order_data
=
[];
foreach
(
$ids
as
$k
=>
$order_id
)
{
// 获取订单信息
...
...
@@ -95,13 +96,6 @@ class OrderService
return
DataReturn
(
'状态不可操作['
.
$status_text
.
']'
.
$order
[
'order_no'
],
-
1
);
}
// 订单支付前校验
$ret
=
BuyService
::
OrderPayBeginCheck
([
'order_id'
=>
$order
[
'id'
],
'order_data'
=>
$order
]);
if
(
$ret
[
'code'
]
!=
0
)
{
return
$ret
;
}
// 金额为0、走直接支付成功
if
(
$order
[
'total_price'
]
<=
0.00
)
{
...
...
@@ -130,6 +124,16 @@ class OrderService
$client_type
=
$order
[
'client_type'
];
$order_payment_id
=
$order
[
'payment_id'
];
}
// 订单数据集合
$order_data
[]
=
$order
;
}
// 订单支付前校验订单商品
$ret
=
BuyService
::
MoreOrderPayBeginCheck
([
'order_data'
=>
$order_data
]);
if
(
$ret
[
'code'
]
!=
0
)
{
return
$ret
;
}
// 支付方式
...
...
@@ -357,7 +361,7 @@ class OrderService
}
// 订单支付前校验
$ret
=
BuyService
::
OrderPayBeginCheck
([
'order_id'
=>
$order
[
'id'
],
'order_data'
=>
$order
]);
$ret
=
BuyService
::
Single
OrderPayBeginCheck
([
'order_id'
=>
$order
[
'id'
],
'order_data'
=>
$order
]);
if
(
$ret
[
'code'
]
!=
0
)
{
return
$ret
;
...
...
sourcecode/weixin/pages/buy/buy.wxss
浏览文件 @
4848be36
...
...
@@ -68,6 +68,7 @@
font-size: 24rpx;
padding: 5rpx 20rpx;
background: #f0f0f0;
border-radius: 6rpx;
}
.goods-title, .goods-spec {
margin-bottom: 5rpx;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录