255 lines
8.3 KiB
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);
|
|
}
|
|
|
|
} |