admin/addon/store/model/cashier/CashierOrderOffset.php

255 lines
8.3 KiB
PHP

<?php
/**
* ThinkShop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 上海牛之云网络科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.cdcloudshop.com
* =========================================================
*/
namespace addon\store\model\cashier;
use addon\memberrecharge\model\RechargeOrder;
use addon\store\model\member\MemberOnceCard;
use addon\store\model\store\Store;
use app\model\BaseModel;
use app\model\member\Member;
use app\model\member\MemberAccount;
use app\model\member\MemberCoupon;
use app\model\member\MemberLevelOrder;
use app\model\order\OrderCommon;
use app\model\order\OrderCreateTool;
use app\model\order\OrderGoods;
use app\model\site\Site;
use app\model\system\Pay;
use think\facade\Cache;
use think\facade\Log;
use think\facade\Queue;
/**
* 收银订单抵扣
*
* @author Administrator
*
*/
class CashierOrderOffset extends BaseModel
{
public $type = array(
[
'name' => 'coupon',
'title' => '代金券'
],
[
'name' => 'hongbao',
'title' => '红包'
],
[
'name' => 'point',
'title' => '积分'
],
[
'name' => 'balance',
'title' => '储值余额'
],
[
'name' => 'balance_money',
'title' => '现金余额'
],
);
/**
* 增加订单优惠项
* @param $params
* @return array
*/
public function addOrderOffset($params){
$order_id = $params['order_id'];
$type = $params['type'];
$num = $params['num'];
$relate_id = $params['relate_id'] ?? 0;
$offset_money = $params['offset_money'];
$order_goods_id = $params['order_goods_id'] ?? '';
$site_id = $params['site_id'];
$store_id = $params['store_id'] ?? 0;
$data = array(
'order_id' => $order_id,
'type' => $type,
'num' => $num,
'relate_id' => $relate_id,
'offset_money' => $offset_money,
'order_goods_id' => $order_goods_id,
'site_id' => $site_id,
'store_id' => $store_id
);
model('store_cashier_order_offset')->add($data);
return $this->success();
}
/**
* 获取优惠券记录
* @param $condition
* @param string $field
*/
public function getOrderOffsetList($condition, $field = '*', $order = ''){
$list = model('store_cashier_order_offset')->getList($condition, $field, $order);
return $this->success($list);
}
/**
* 计算订单项的店铺优惠金额
* @param $order_goods_id
*/
public function getOrderGoodsOffsetMoney($order_goods_id){
$condition = array(
['order_goods_id', '=', $order_goods_id],
['type', '=', 'coupon'],
);
$offset_list = $this->getOrderOffsetList($condition)['data'] ?? [];
$offset_money = 0;
if(!empty($offset_list)){
foreach($offset_list as $k => $v){
$offset_money += $v['offset_money'];
}
}
return $offset_money;
}
/**
* 返还订单相关优惠和抵扣
* @param $params
*/
public function orderOffsetRefund($params){
$order_id = $params['order_id'];
$site_id = $params['site_id'];
$member_id = $params['member_id'];
$limit = $params['limit'] ?? [];
$offset_condition = array(
['order_id', '=', $order_id]
);
$offset_list = $this->getOrderOffsetList($offset_condition)['data'] ?? [];
foreach($offset_list as $k => $v){
$type = $v['type'];
if(!empty($limit) && !in_array($type, $limit)){
continue;
}
$num = $v['num'];
$relate_id = $v['relate_id'];
switch($type){
case 'balance'://储值余额
$from_type = 'refund';
$relate_tag = '储值余额返还';
$remark = '订单关闭,返还储值余额:' . $num.',订单id:'.$order_id;
$member_account_model = new MemberAccount();
$account_title = '订单关闭,返还储值余额';
$result = $member_account_model->addMemberAccount($site_id, $member_id, 'balance', $num, $from_type, $relate_tag, $remark, $account_title);
break;
case 'balance_money'://现金余额
$from_type = 'refund';
$relate_tag = '现金余额返还';
$remark = '订单关闭,返还现金余额:' . $num.',订单id:'.$order_id;
$account_title = '订单关闭,返还现金余额';
$member_account_model = new MemberAccount();
$result = $member_account_model->addMemberAccount($site_id, $member_id, 'balance_money', $num, $from_type, $relate_tag, $remark, $account_title);
break;
case 'coupon'://优惠券
$member_coupon_model = new MemberCoupon();
$coupon_params = array(
'coupon_id' => $relate_id,
'site_id' => $site_id,
'member_id' => $member_id
);
$result = $member_coupon_model->recovery($coupon_params);
break;
case 'point'://积分
$from_type = 'refund';
$relate_tag = '积分返还';
$remark = '订单关闭,返还积分:' . $num . ',订单id:'.$order_id;
$account_title = '订单关闭,返还积分';
$member_account_model = new MemberAccount();
$result = $member_account_model->addMemberAccount($site_id, $member_id, 'point', $num, $from_type, $relate_tag, $remark,$account_title);
break;
case 'hongbao'://红包
$hongbao_model = new Hongbao();
$hongbao_params = array(
'member_hongbao_id' => $relate_id,
'site_id' => $site_id,
'member_id' => $member_id
);
$result = $hongbao_model->recovery($hongbao_params);
break;
}
$code = $result['code'] ?? 0;
if($code < 0){
return $result;
}
}
return $this->success();
}
/**
* 查询订单抵扣信息
* @param $params
*/
public function getOrderOffset($params){
$order_id = $params['order_id'];
$offset_condition = array(
['order_id', '=', $order_id]
);
$offset_list = $this->getOrderOffsetList($offset_condition)['data'] ?? [];
$balance = 0;
$balance_money = 0;
$point_money = 0;
$point = 0;
foreach($offset_list as $k => $v){
$type = $v['type'];
$num = $v['num'];//优惠项数量
$offset_money = $v['offset_money'];//优惠金额
switch($type){
case 'balance'://储值余额
$balance += $num;
break;
case 'balance_money'://现金余额
$balance_money += $num;
break;
// case 'coupon'://优惠券
//
// break;
case 'point'://积分
$point_money += $offset_money;
$point += $num;
break;
// case 'hongbao'://红包
//
// break;
}
}
$return = array(
'point' => $point,
'point_money' => $point_money,
'balance' => $balance,
'balance_money' => $balance_money
);
return $return;
}
/**
* 抵扣信息
* @param $condition
* @param string $field
* @return array
*/
public function getOrderOffsetInfo($condition, $field = '*'){
$info = model('store_cashier_order_offset')->getInfo($condition, $field);
return $this->error($info);
}
}