问题说明:普通商品门店后台先核销然后退款,流水记录会多一条信息
修改文件:app\services\store\finance\StoreFinanceFlowServices
修改方法:setFinance()
public function setFinance($order, $type = 1, $price = 0)
{
/** @var StoreOrderServices $storeOrderServices */
$storeOrderServices = app()->make(StoreOrderServices::class);
switch ($type) {
case 1 ://商品订单
if ($order['store_id'] > 0) {
//门店订单
//2.1修改门店流水按照下单支付金额计算,
if ($order['type'] == 8) {
$order['pay_price'] = $order['total_price'];
}
$total_price = $order['pay_price'];
//支付金额+积分抵扣(由平台承担)
$total_price = bcadd((string)$total_price, (string)($order['deduction_price'] ?? 0), 2);
$append = [
'pay_price' => $total_price,
'total_price' => $total_price,
'rate' => 1
];
//支付订单
$this->savaData($order, $total_price, 1, 1, 1);
//现金支付增加
if ($order['pay_type'] == PayServices::CASH_PAY) {
//交易订单记录
$this->savaData($order, $order['pay_price'], 0, 2, 1, $append);
}
$product_type = $storeOrderServices->value(['id' => $order['id']], 'product_type');
if (!in_array($product_type, [4, 5, 6])) {
//门店订单
$this->savaData($order, $total_price, 1, 2, 1, $append);
}
[$type, $rate] = $this->getRate(1, (int)$order['shipping_type']);
//费率按实付金额计算
$total_price = bcmul((string)$order['pay_price'], (string)$this->getPercent($rate), 2);
$append['rate'] = $rate;
//交易订单记录
if (!in_array($product_type, [4, 5, 6])) {
$this->savaData($order, $total_price, 1, $type, 2, $append);
$this->savaData($order, $total_price, 0, 3, 1, $append);
}
} else {
$orderList = $storeOrderServices->getSonOrder($order['id'], '*', 1);
if ($orderList) {
foreach ($orderList as $order) {
$total_price = $order['pay_price'];
$append = [
'pay_price' => $total_price,
'total_price' => $total_price,
'rate' => 1
];
//支付订单
$this->savaData($order, $total_price, 1, 1, 1);
//门店订单
$this->savaData($order, $total_price, 1, 2, 1, $append);
[$type, $rate] = $this->getRate(1, (int)$order['shipping_type']);
//费率按实付金额计算
$total_price = bcmul((string)$order['pay_price'], (string)$this->getPercent($rate), 2);
$append['rate'] = $rate;
//交易订单记录
$this->savaData($order, $total_price, 1, $type, 2);
$this->savaData($order, $total_price, 0, 3, 1, $append);
}
}
}
break;
case 2://充值订单
//充值订单返点
[$type, $rate] = $this->getRate(2);
$order['pay_type'] = $order['recharge_type'];
$append = [
'pay_price' => $order['price'],
'total_price' => $order['price'],
'rate' => $rate
];
//订单账单
$this->savaData($order, $order['price'], 1, $type, 2, $append);
//收银台充值线下付款记录一条负记录
if (in_array($order['recharge_type'], [PayServices::OFFLINE_PAY, PayServices::CASH_PAY])) {
$this->savaData($order, $order['price'], 0, $type, 1, $append);
}
//返点
$pay_price = bcmul($order['price'], $this->getPercent($rate), 2);
$this->savaData($order, $pay_price, 1, 5, 1, $append);
break;
case 3://付费会员订单
//购买付费会员返点
[$type, $rate] = $this->getRate(2);
$append = [
'pay_price' => $order['pay_price'],
'total_price' => $order['pay_price'],
'rate' => $rate
];
//订单账单
$this->savaData($order, $order['pay_price'], 1, $type, 2, $append);
//收银台充值线下付款记录一条负记录
if (in_array($order['pay_type'], [PayServices::OFFLINE_PAY, PayServices::CASH_PAY])) {
$this->savaData($order, $order['pay_price'], 0, $type, 1, $append);
}
//返点
$pay_price = bcmul($order['pay_price'], $this->getPercent($rate), 2);
$this->savaData($order, $pay_price, 1, 6, 1, $append);
break;
case 4://退款
//取下单流水记录费率
$rate = $this->dao->value(['link_id' => $order['order_id'], 'type' => 3, 'trade_type' => 1], 'rate');
if (!$rate) {
//获取失败,如果是子订单;在查询主订单
if (isset($order['pid']) && $order['pid']) {
$order_id = $storeOrderServices->value(['id' => $order['pid']], 'order_id');
if ($order_id) $rate = $this->dao->value(['link_id' => $order_id, 'type' => 3, 'trade_type' => 1], 'rate');
}
}
if (!$rate) {//未获取到,下单保存费率;获取系统配置
[$type, $rate] = $this->getRate(1, (int)$order['shipping_type']);
}
$total_price = bcmul($price, $this->getPercent($rate), 2);
$append['rate'] = $rate;
//退款
$this->savaData($order, $price, 0, 4, 1, $append);
$this->savaData($order, $total_price, 1, 3, 1, $append);
break;
case 5://充值退款
//取充值流水记录费率
$rate = $this->dao->value(['link_id' => $order['order_id'], 'type' => 5, 'trade_type' => 1], 'rate');
if (!$rate) {//获取失败,取系统配置
$rate = sys_config('store_recharge_order_rate');
}
$order['pay_type'] = $order['recharge_type'];
$append = [
'pay_price' => $order['price'],
'total_price' => $order['price'],
'rate' => $rate
];
//订单账单
$this->savaData($order, $price, 0, 4, 2, $append);
//返点扣除
$pay_price = bcmul($price, $this->getPercent($rate), 2);
$this->savaData($order, $pay_price, 0, 5, 1, $append);
break;
case 6://配送订单
$append = ['pay_price' => $order['cargo_price']];
$this->savaData($order, $price, 0, 13, 1, $append);
break;
case 7://取消配送订单
$append = ['pay_price' => $order['cargo_price']];
$this->savaData($order, $price, 1, 13, 1, $append);
break;
case 8://核销次卡、卡项、预约
$product_type = $storeOrderServices->value(['id' => $order['id']], 'product_type');
if (!in_array($product_type, [4, 5, 6])) return true;
[$type, $rate] = $this->getRate(1, (int)$order['shipping_type']);
//费率金额计算
$total_price = bcmul((string)$price, (string)$this->getPercent($rate), 2);
$append['rate'] = $rate;
$append = [
'pay_price' => $price,
'total_price' => $price
];
$this->savaData($order, $price, 1, 14, 1, $append);
//交易订单记录
$this->savaData($order, $total_price, 1, $type, 2, $append);
$this->savaData($order, $total_price, 0, 3, 1, $append);
break;
}
}