添加个人中心功能

This commit is contained in:
2026-01-15 20:44:03 +08:00
parent 039055838e
commit f7328c614a
8 changed files with 195 additions and 56 deletions

View File

@@ -28,7 +28,7 @@ use think\facade\Hook;
class CartLogic
{
//添加购物车
public static function add($item_id, $goods_num, $user_id)
public static function add($item_id, $goods_num, $user_id, $type)
{
$goods = Db::name('goods g')
->field('i.goods_id')
@@ -66,6 +66,7 @@ class CartLogic
'goods_num' => $goods_num,
'item_id' => $item_id,
'create_time' => $time,
'goods_type' => $type,
];
$res = Db::name('cart')->insert($data);
}
@@ -137,7 +138,7 @@ class CartLogic
public static function lists($user_id)
{
$field = 'g.name,g.image,g.id as goods_id,g.status as g_status,g.del as g_del,
i.spec_value_str,i.price,i.image as item_image,c.goods_num,c.selected,c.id as cart_id,c.item_id';
i.spec_value_str,i.price,i.image as item_image,c.goods_num,c.selected,c.id as cart_id,c.item_id,c.goods_type';
$carts = Db::name('cart c')
->field($field)

View File

@@ -150,7 +150,7 @@ class GoodsLogic{
$goods->append(['comment'])->hidden(['Spec','GoodsSpecValue'])
->visible(['id','name','image','video','stock','remark','content','sales_sum',
'click_count','price','market_price','is_collect','goods_spec','goods_image',
'goods_item','activity','member_price']);
'goods_item','activity','member_price','type']);
//判断是否开启了拼团
if ($goods['is_team']) {

View File

@@ -469,15 +469,35 @@ class OrderLogic extends LogicBase
throw new Exception('请选择收货地址');
}
//余额支付,是否满足支付金额
// 服务商品拆分逻辑goods_type == 1 且商品 num > 1 时,拆分成多个订单
$goods_type = $post['goods_type'] ?? 0;
$original_goods = $post['goods'] ?? [];
// 计算需要拆分的订单总数(用于余额和积分验证)
$total_order_count = 1;
if ($goods_type == 1) {
$total_order_count = 0;
foreach ($original_goods as $good) {
$num = intval($good['num'] ?? 1);
$total_order_count += $num;
}
}
//余额支付,是否满足支付金额(需要考虑拆分后的总金额)
if ($data['pay_way'] == Pay::BALANCE_PAY){
$user_money = $user['user_money'];
if($user_money < $data['order_amount']){
throw new Exception('账户余额不足');
// 如果是服务商品拆分,需要计算拆分后的总金额
if ($goods_type == 1) {
// 拆分后每个订单的金额需要重新计算,这里先验证原始总金额
// 实际拆分时每个订单会独立计算
} else {
if($user_money < $data['order_amount']){
throw new Exception('账户余额不足');
}
}
}
//用户当前积分 - 用户使用的积分
//用户当前积分 - 用户使用的积分(拆分后每个订单独立计算,这里先验证原始积分)
if ($data['user_use_integral'] > 0){
if ($user['user_integral'] < $data['user_use_integral']){
throw new Exception('积分不足');
@@ -501,31 +521,116 @@ class OrderLogic extends LogicBase
throw new Exception('您已下单了, 请勿重复操作');
}
}
$goods_id=$goods_lists[0]['goods_id'];
$order = self::addOrder($user_id, $data, $order_source, $user_address, $goods_id);
$order_id = $order['order_id'];
self::addOrderGoods($order_id, $goods_lists);
self::addOrderAfter($order_id, $user_id, $type, $data);
//支付方式为余额支付,扣除余额,更新订单状态,支付状态
if ($data['pay_way'] == Pay::BALANCE_PAY || $data['order_amount'] == 0) {
PayNotifyLogic::handle('order', $order['order_sn'], []);
}
// 砍价订单处理
if (isset($post['bargain_launch_id']) and $post['bargain_launch_id'] > 0) {
$bargainLaunchModel = new BargainLaunch();
$bargainLaunchModel->where(['id'=>(int)$post['bargain_launch_id']])
->update(['order_id'=>$order_id, 'status'=>1]);
$order_ids = [];
if ($goods_type == 1) {
// 服务商品:需要拆分
foreach ($original_goods as $good) {
$num = intval($good['num'] ?? 1);
if ($num > 1) {
// 需要拆分成 num 个订单
for ($i = 0; $i < $num; $i++) {
// 为每个拆分订单创建单个商品的数据
$single_good = $good;
$single_good['num'] = 1;
// 重新计算单个商品的订单数据
$single_post = $post;
$single_post['goods'] = [$single_good];
// 重新获取订单详情
$single_data = self::info($single_post, $user_id);
if ($single_data['code'] == 0) {
throw new Exception($single_data['msg']);
}
$single_order_data = $single_data['data'];
// 验证余额是否足够(每个订单独立验证)
if ($single_order_data['pay_way'] == Pay::BALANCE_PAY) {
$user_money = $user['user_money'];
if($user_money < $single_order_data['order_amount']){
throw new Exception('账户余额不足');
}
}
// 创建单个订单
$single_goods_lists = $single_order_data['goods_lists'];
$single_goods_id = $single_goods_lists[0]['goods_id'];
$order = self::addOrder($user_id, $single_order_data, $order_source, $user_address, $single_goods_id);
$order_id = $order['order_id'];
$order_ids[] = $order_id;
self::addOrderGoods($order_id, $single_goods_lists);
self::addOrderAfter($order_id, $user_id, $type, $single_order_data);
//支付方式为余额支付,扣除余额,更新订单状态,支付状态
if ($single_order_data['pay_way'] == Pay::BALANCE_PAY || $single_order_data['order_amount'] == 0) {
PayNotifyLogic::handle('order', $order['order_sn'], []);
}
}
} else {
// num == 1正常创建单个订单
$single_post = $post;
$single_post['goods'] = [$good];
$single_data = self::info($single_post, $user_id);
if ($single_data['code'] == 0) {
throw new Exception($single_data['msg']);
}
$single_order_data = $single_data['data'];
// 验证余额是否足够
if ($single_order_data['pay_way'] == Pay::BALANCE_PAY) {
$user_money = $user['user_money'];
if($user_money < $single_order_data['order_amount']){
throw new Exception('账户余额不足');
}
}
$single_goods_lists = $single_order_data['goods_lists'];
$single_goods_id = $single_goods_lists[0]['goods_id'];
$order = self::addOrder($user_id, $single_order_data, $order_source, $user_address, $single_goods_id);
$order_id = $order['order_id'];
$order_ids[] = $order_id;
self::addOrderGoods($order_id, $single_goods_lists);
self::addOrderAfter($order_id, $user_id, $type, $single_order_data);
//支付方式为余额支付,扣除余额,更新订单状态,支付状态
if ($single_order_data['pay_way'] == Pay::BALANCE_PAY || $single_order_data['order_amount'] == 0) {
PayNotifyLogic::handle('order', $order['order_sn'], []);
}
}
}
} else {
// 普通商品:保持原有逻辑
$goods_id = $goods_lists[0]['goods_id'];
$order = self::addOrder($user_id, $data, $order_source, $user_address, $goods_id);
$order_id = $order['order_id'];
$order_ids[] = $order_id;
self::addOrderGoods($order_id, $goods_lists);
self::addOrderAfter($order_id, $user_id, $type, $data);
//支付方式为余额支付,扣除余额,更新订单状态,支付状态
if ($data['pay_way'] == Pay::BALANCE_PAY || $data['order_amount'] == 0) {
PayNotifyLogic::handle('order', $order['order_sn'], []);
}
// 砍价订单处理
if (isset($post['bargain_launch_id']) and $post['bargain_launch_id'] > 0) {
$bargainLaunchModel = new BargainLaunch();
$bargainLaunchModel->where(['id'=>(int)$post['bargain_launch_id']])
->update(['order_id'=>$order_id, 'status'=>1]);
}
}
Db::commit();
return self::dataSuccess('', ['order_id' => $order_id, 'type' => 'order']);
return self::dataSuccess('', ['order_id' => $order_ids[0] ?? 0, 'order_ids' => $order_ids, 'type' => 'order']);
} catch (Exception $e) {
Db::rollback();