全部
常见问题
产品动态
精选推荐

多商品订单部分退款时,将运费平均扣除问题【完善中】

管理 管理 编辑 删除

【产品名称】:多店版

【产品版本】:v3.1.0

【部署方式】:linux宝塔面板

【部署环境】:本地环境

【php版本】:7.3

【Mysql版本】:5.7

【使用终端】:小程序/ H5

【问题描述】:

如图,这里的运费是这样设置的:即每一单无论多少件商品,就收1元配送费

咱们系统的默认退费逻辑是把配送费也平均计算到各个商品退掉了。

举例购买了5件商品,当用户部分退款,比如只退1件商品的时候,按我的配送逻辑,1元运费是不退的,只有最后那件商品也退款或者整单退款的时候,才会退运费。

但是系统的最终退费值=商品单价*退款数量+(支付邮费1元/订单商品总数5件=0.2元)

求助一下,这个有没有可解决的办法呢?自己动了下手,

把/app/services/order/StoreOrderRefundServices.php文件这样修改了一下:

//总共申请多少件
            $total_num = array_sum(array_column($cart_ids, 'cart_num'));
            if ($total_num < $order['total_num']) {
                /** @var StoreOrderSplitServices $storeOrderSpliteServices */
                $storeOrderSpliteServices = app()->make(StoreOrderSplitServices::class);
                $cartInfos = $storeOrderSpliteServices->getSplitOrderCartInfo($id, $cart_ids, $order);
                $total_price = $pay_postage = 0;
                foreach ($cartInfos as $cart) {
                    $_info = is_string($cart['cart_info']) ? json_decode($cart['cart_info'], true) : $cart['cart_info'];
                    $total_price = bcadd((string)$total_price, bcmul((string)($_info['truePrice'] ?? 0), (string)$cart['cart_num'], 4), 2);
                    if (!in_array($order['shipping_type'], [2, 4])) {
                                        
                        //===========修改部分==============
                        //$pay_postage = bcadd((string)$pay_postage, (string)($_info['postage_price'] ?? 0), 2);
						$pay_postage = 0; //部分退款时,支付邮费不退
					    //===========修改部分==============
                    }
                }
                //实际退款金额
                $refund_pay_price = bcadd((string)$total_price, (string)$pay_postage, 2);

就是部分退款时,实际退款的金额没给加邮费,这样实际退款的额度是对了,但是部分退款后,订单会拆分,订单数据表=售后订单【eb_store_order_refund】中的【cart_info=退款商品信息】字段中,邮费=postage_price的值还是平均计算了="0.20",导致订单一拆分,没退款的商品运费也减少了,这样数据是错误的。

又经过进一步调试,终于找到了拆分订单postage_price的值修改的地方,代码如下:

else {//整单退款
            foreach ($cartInfos as $cart) {
                if (!$cart['is_support_refund']) {
                    throw new ValidateException('该订单中有商品不支持退款,请联系管理员');
                }
                if ($cart['refund_num'] > 0) {
                    throw new ValidateException('超出订单中商品数量,请重新选择!');
                }
            }
        }
        foreach ($cartInfos as &$cart) {
            $cart['cart_info'] = is_string($cart['cart_info']) ? json_decode($cart['cart_info'], true) : $cart['cart_info'];
			//===========修改部分======部分退款时,支付邮费不退========
			if ($total_num < $order['total_num']) {
				$cart['cart_info']['postage_price'] = 0;
			}
			//===========修改部分=====部分退款时,支付邮费不退=========
        }
        $refundData['uid'] = $uid;
        $refundData['store_id'] = $order['store_id'];
        $refundData['supplier_id'] = $order['supplier_id'];

这样部分退款拆分的订单数据库中的邮费=postage_price的值就=0了。

暂时普通订单的部分退款逻辑就改变了,还有主订单的数据需要修改,继续找……

请登录后查看

George 最后编辑于2024-11-13 00:38:05

快捷回复
回复
回复
回复({{post_count}}) {{!is_user ? '我的回复' :'全部回复'}}
排序 默认正序 回复倒序 点赞倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level }}

作者 管理员 企业

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推荐': '推荐'}}
{{item.is_suggest == 1? '取消推荐': '推荐'}}
沙发 板凳 地板 {{item.floor}}#
{{item.user_info.title || '暂无简介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
{{item.like_count}}
{{item.showReply ? '取消回复' : '回复'}}
删除
回复
回复

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回复 {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回复' : '回复'}}
删除
回复
回复
查看更多
373
{{like_count}}
{{collect_count}}
添加回复 ({{post_count}})

相关推荐

快速安全登录

使用微信扫码登录
{{item.label}} 加精
{{item.label}} {{item.label}} 板块推荐 常见问题 产品动态 精选推荐 首页头条 首页动态 首页推荐
取 消 确 定
回复
回复
问题:
问题自动获取的帖子内容,不准确时需要手动修改. [获取答案]
答案:
提交
bug 需求 取 消 确 定

微信登录/注册

切换手机号登录

{{ bind_phone ? '绑定手机' : '手机登录'}}

{{codeText}}
切换微信登录/注册
暂不绑定
CRMEB客服

CRMEB咨询热线 咨询热线

400-8888-794

微信扫码咨询

CRMEB开源商城下载 源码下载 CRMEB帮助文档 帮助文档
返回顶部 返回顶部
CRMEB客服