getInfo([['order_id', '=', $order_id]]); if (empty($order_info)) return null; $store_id = $order_info['store_id']; $site_id = $order_info['site_id']; if (!$store_id) return null; $config_model = new Config(); $config = $config_model->getStoreWithdrawConfig($site_id)['data']['value'] ?? []; $is_settlement = $config['is_settlement'];//结算模式 todo 系统配置的门店计算开关是否会对门店结算开关造成影响 if ($is_settlement > 0) { $store_model = new Store(); $store_condition = array( ['site_id', '=', $site_id], ['store_id', '=', $store_id] ); $store_info = $store_model->getStoreInfo($store_condition)['data'] ?? []; if ($store_info['aliapy_auto_settlement'] || $is_settlement == 3) return null;//如果是线上自动结算,则不进行计算 $is_settlement = $store_info['is_settlement'] ?? 0; if ($is_settlement > 0) { $store_settlement_rate = $store_info['settlement_rate']; if ($store_settlement_rate > 0) { $settlement_rate = $store_settlement_rate; } else { $settlement_rate = $config['settlement_rate']; } if ($settlement_rate > 0) { $settlement_rate_calc = $settlement_rate / 100;//计算门店抽成比例 $order_money = $order_info['order_money']; //todo 可能还有退款 $settlement_cost = $config['settlement_cost']; $settlement_cost_array = explode(',', $settlement_cost); $base_money = $order_money; $base_money -= $order_info['refund_money'] ?? 0;//todo 这儿涉及到一个问题,退款的金额里面包含一部分余额,可能结算金额不太一致 $base_money = $base_money < 0 ? 0 : $base_money; if (in_array('balance', $settlement_cost_array)) { $balance_money = $order_info['balance_money']; $base_money -= $balance_money; } if (in_array('point', $settlement_cost_array)) { $point_money = $order_info['point_money']; $base_money += $point_money; } if (in_array('fenxiao_commission', $settlement_cost_array)) { $commission = $order_info['commission']; $base_money -= $commission; } //优惠券比较特殊, 不过不扣除要价格优惠券抵扣金额加回去 if (!in_array('coupon', $settlement_cost_array)) { $coupon_money = $order_info['coupon_money']; $base_money += $coupon_money; } if ($base_money > 0) { $store_commission_rate = $settlement_rate; $store_commission = round($base_money * $settlement_rate_calc, 2); $order_data = array( 'store_commission_rate' => $store_commission_rate, 'store_commission' => $store_commission ); $order_condition = array( ['order_id', '=', $order_id] ); model('order')->update($order_data, $order_condition); $store_account_model = new StoreAccount(); //门店账户金额增加 $store_account_data = array( 'account_data' => $store_commission, 'site_id' => $site_id, 'store_id' => $store_id, 'from_type' => 'order', 'remark' => '订单完成,门店抽成金额' . $store_commission, 'related_id' => $order_id ); $store_account_model->addStoreAccount($store_account_data); } } } } } /** * 用户退款退还佣金 * @param $data * @return void */ public function orderRefundSettlementAccount($data) { $order_goods_id = $data['order_goods_id']; $order_goods_info = model('order_goods')->getInfo([['order_goods_id', '=', $order_goods_id]]); if (empty($order_goods_info)) return null; $order_id = $order_goods_info['order_id']; $order_info = model('order')->getInfo([['order_id', '=', $order_id]]); if (empty($order_info)) return null; $site_id = $order_info['site_id']; $store_id = $order_info['store_id']; $order_scene = $order_info['order_scene']; //只有收银台订单会有这种情况 if ($store_id == 0 || $order_scene != 'cashier') return null; $refund_money = $order_goods_info['refund_real_money']; $order_money = $order_info['order_money']; $store_commission = $order_info['store_commission']; $refund_store_commission = round($store_commission * ($refund_money / $order_money), 2); $store_account_model = new StoreAccount(); //门店账户金额增加 $store_account_data = array( 'account_data' => -$refund_store_commission, 'site_id' => $site_id, 'store_id' => $store_id, 'from_type' => 'refund', 'remark' => '订单退款,门店抽成金额扣除' . $refund_store_commission, 'related_id' => $order_goods_id, 'is_limit' => 0 ); $store_account_model->addStoreAccount($store_account_data); } }