281 lines
13 KiB
PHP
281 lines
13 KiB
PHP
<?php
|
|
/**
|
|
* SAAS应用系统 --- 十年开发经验汇集巨献!
|
|
* ==========================================================
|
|
* Copy right 2020-2050 成都众联思索科技有限公司,保留所有权利。
|
|
* ----------------------------------------------------------
|
|
* 官方网址: https://www.zoomtk.com
|
|
* 这不是自由软件!未经允许不得用于商业目或程序代码摘取及修改。
|
|
* 任何企业和个人未经允许对程序代码以任何形式任何目的再发布传播。
|
|
* 唯一发布渠道www.zoomtk.com;非官方渠道统一视为侵权行为。
|
|
* ==========================================================
|
|
*/
|
|
|
|
namespace addon\saas\model;
|
|
|
|
use app\model\BaseModel;
|
|
use think\facade\Db;
|
|
|
|
//结算芝麻流水佣金
|
|
class ManageOrder extends BaseModel
|
|
{
|
|
|
|
|
|
/**
|
|
* 获取分销订单列表
|
|
* @param unknown $condition
|
|
* @param number $page
|
|
* @param string $page_size
|
|
* @param string $order
|
|
*/
|
|
public function getOrderPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '')
|
|
{
|
|
$field = '*';
|
|
$list = model('manage_order')->pageList($condition, $field, $order, $page, $page_size);
|
|
return $this->success($list);
|
|
}
|
|
|
|
public function getOrderInfo($condition = [], $field = '*')
|
|
{
|
|
$info = model('manage_order')->getInfo($condition, $field);
|
|
return $this->success($info);
|
|
}
|
|
|
|
/***
|
|
* 计算佣金订单,仅算芝麻流水签约流水佣金
|
|
* @param $data
|
|
* @return array
|
|
*/
|
|
public function calculate($data = [])
|
|
{
|
|
if (isset($data['order_status']) && $data['order_status'] == 'ORDERED') { //下单成功
|
|
return $this->success();
|
|
//获取分销基础配置
|
|
$siteInfo = model("site")->getInfo([['site_id', '=', $data['site_id']]]);
|
|
if (!$siteInfo['manage_id']) return $this->success(); //对应拓客管理员
|
|
$agent_id = $siteInfo['agent_id'];
|
|
if (!$agent_id) return $this->success();
|
|
$where = [
|
|
['order_id', '=', $data['order_id']],
|
|
['order_no', '=', $data['third_order_no']]
|
|
];
|
|
$manage_order_id = model('manage_order')->getValue($where, 'id'); //这里不对
|
|
if ($manage_order_id) return $this->success();
|
|
|
|
$commission_rate = model('pay_shop')->getValue(['site_id' => $data['site_id']], 'service_commission');//当前商家费率
|
|
if (!$commission_rate) return $this->success();
|
|
$config_model = new Config();
|
|
$basic_config = $config_model->getBasicsConfig($agent_id)['data']['value'];
|
|
if (empty($basic_config) || $basic_config['is_open'] == 0) return $this->success();
|
|
$level_config = model('manage_level')->getColumn([['site_id', '=', $agent_id]], '*', 'level_id');
|
|
if (!$level_config) return $this->success();
|
|
|
|
//获取三层关系图
|
|
$manageInfo = Db::view('manage_user a', 'id,level_id as one_level_id,real_name as one_real_name,parent,grand_parent,status')
|
|
->view('manage_user b', 'level_id as two_level_id,real_name as two_real_name', 'a.parent=b.id', 'left')
|
|
->view('manage_user c', 'level_id as three_level_id,real_name as three_real_name', 'a.grand_parent=c.id', 'left')
|
|
->where('a.id', '=', $siteInfo['manage_id'])
|
|
->find();
|
|
|
|
$levelInnfo = $level_config[$manageInfo['one_level_id']] ?? '';
|
|
if (empty($levelInnfo)) return $this->success();
|
|
if ($manageInfo['status'] != 1) return $this->success();
|
|
|
|
$commission = round($data['amount'] * $commission_rate / 100, 2); //总佣金
|
|
$one_rate = $levelInnfo['direct_trade_rate'] ?? 0;
|
|
$two_rate = $levelInnfo['indirect_trade_rate'] ?? 0;
|
|
|
|
if ($manageInfo['two_level_id'] == $manageInfo['one_level_id']) { //同级处理 官方特性
|
|
$two_rate = $levelInnfo['same_trade_rate'] ?? 0;
|
|
}
|
|
|
|
$three_rate = $levelInnfo['direct_trade_rate'] ?? 0;
|
|
if ($manageInfo['three_level_id'] == $manageInfo['three_level_id']) {
|
|
$three_rate = $levelInnfo['same_trade_rate'] ?? 0;
|
|
}
|
|
|
|
$one_commission = round($data['amount'] * $one_rate / 100, 2); //一级佣金
|
|
$two_commission = round($data['amount'] * $two_rate / 100, 2); //二级佣金
|
|
$three_commission = round($data['amount'] * $three_rate / 100, 2); //三级佣金
|
|
$orderGoodsInfo = model('order_goods')->getInfo([['order_id', '=', $data['order_id']]]);
|
|
/***
|
|
* 城市服务商佣金奖励
|
|
*/
|
|
$province_rate = $levelInnfo['province_trade_rate'];
|
|
$city_rate = $levelInnfo['city_trade_rate'];
|
|
$district_rate = $levelInnfo['district_trade_rate'];
|
|
$province_commission = round($data['amount'] * $province_rate / 100, 2);
|
|
$city_commission = round($data['amount'] * $city_rate / 100, 2);
|
|
$district_commission = round($data['amount'] * $district_rate / 100, 2);
|
|
|
|
//启动分销
|
|
$addData = [
|
|
'order_id' => $data['order_id'],
|
|
'order_no' => $data['third_order_no'],
|
|
'order_goods_id' => $orderGoodsInfo['order_goods_id'],
|
|
'site_id' => $siteInfo['site_id'],
|
|
'ag_site_id' => $siteInfo['agent_id'],
|
|
'site_name' => $siteInfo['site_name'],
|
|
'goods_id' => $orderGoodsInfo['order_goods_id'],
|
|
'sku_id' => $orderGoodsInfo['sku_id'],
|
|
'sku_name' => $orderGoodsInfo['sku_name'],
|
|
'sku_image' => $orderGoodsInfo['sku_image'],
|
|
'price' => $data['amount'],
|
|
'num' => 1,
|
|
'real_goods_money' => $orderGoodsInfo['goods_money'],
|
|
'member_id' => $orderGoodsInfo['member_id'],
|
|
'member_name' => $data['name'],
|
|
'member_mobile' => $data['mobile'],
|
|
'full_address' => $data['full_address'] . $data['address'],
|
|
'province_id' => $data['province_id'],
|
|
'city_id' => $data['city_id'],
|
|
'district_id' => $data['district_id'],
|
|
'promotion_type' => $data['promotion_type'] ?? '',
|
|
'promotion_type_name' => $data['promotion_type_name'] ?? '',
|
|
'one_manage_id' => $manageInfo['id'],
|
|
'two_manage_id' => $manageInfo['parent'],
|
|
'three_manage_id' => $manageInfo['grand_parent'],
|
|
|
|
'commission' => $commission, //总佣金
|
|
'commission_rate' => $commission_rate,//总费率
|
|
|
|
'one_manage_name' => $manageInfo['one_real_name'],
|
|
'two_manage_name' => $manageInfo['two_real_name'],
|
|
'three_manage_name' => $manageInfo['three_real_name'],
|
|
|
|
|
|
'one_commission' => $one_commission,
|
|
'two_commission' => $two_commission,
|
|
'three_commission' => $three_commission,
|
|
|
|
'province_commission' => $province_commission,
|
|
'city_commission' => $city_commission,
|
|
'district_commission' => $district_commission,
|
|
|
|
'one_rate' => $one_rate,
|
|
'two_rate' => $two_rate,
|
|
'three_rate' => $three_rate,
|
|
'trade_form' => 'zmxx',
|
|
'create_time' => time()
|
|
];
|
|
$res = model("manage_order")->add($addData);
|
|
// 分销商检测升级
|
|
if ($level_config['upgrade_type'] > 0) {
|
|
event('UpgradeManagelevel', $siteInfo['manage_id']);
|
|
}
|
|
return $this->success($res);
|
|
}
|
|
}
|
|
|
|
|
|
/****
|
|
* 按周结算佣金
|
|
* @param $agent_id
|
|
* @return array|void
|
|
*/
|
|
public function SaasCronOrderSettlement($agent_id = 0)
|
|
{
|
|
if ($agent_id) {
|
|
$config_model = new Config();
|
|
$basic_config = $config_model->getBasicsConfig($agent_id)['data']['value'];
|
|
if (empty($basic_config) || $basic_config['is_open'] == 0) return $this->success();
|
|
}
|
|
}
|
|
|
|
/***
|
|
* 常规订单结算佣金
|
|
* @param $params
|
|
* @return void
|
|
*/
|
|
public function OrderSettlementByOrder($params = [])
|
|
{
|
|
if (isset($params['order_id'])) {
|
|
$where = [
|
|
['order_id', '=', $params['order_id']],
|
|
['is_settlement', '=', 0],
|
|
['is_refund', '=', 0],
|
|
];
|
|
$field = 'id,one_manage_id,one_commission,one_manage_name,two_manage_id,two_commission,two_manage_name,three_manage_id,three_commission,three_manage_name';
|
|
$manage_order_info = model('manage_order')->getList($where, $field);
|
|
if ($manage_order_info) {
|
|
$account = new ManageAccount();
|
|
model('manage_order')->update(['is_settlement' => 1], $where);//变更结算状态
|
|
foreach ($manage_order_info as $k => $v) {
|
|
$one_manage_id = $v['one_manage_id'];
|
|
if ($one_manage_id && $v['one_commission']) { //添加直连佣金
|
|
$account->addAccount($one_manage_id, $v['one_manage_name'], 'order', $v['one_commission'], $v['id']);
|
|
}
|
|
$two_manage_id = $v['two_manage_id'];
|
|
if ($two_manage_id && $v['two_commission']) { //添加贡献值
|
|
$account->addContribute($two_manage_id, $v['two_manage_name'], 'two_contribute', $v['two_commission'], $v['id']);
|
|
}
|
|
$three_manage_id = $v['three_manage_id'];
|
|
if ($three_manage_id && $v['three_commission']) {//添加贡献值
|
|
$account->addContribute($three_manage_id, $v['three_manage_name'], 'three_contribute', $v['three_commission'], $v['id']);
|
|
}
|
|
}
|
|
return $this->success('OrderSettlementByOrder');
|
|
}
|
|
}
|
|
return $this->error('OrderSettlementByOrder');
|
|
}
|
|
|
|
|
|
/***
|
|
* 签约订扣款成功结算佣金
|
|
* @param $param
|
|
* @return void
|
|
*/
|
|
public function CloudOrderSettlement($param = [])
|
|
{
|
|
if (isset($param['order_status']) && $param['order_status'] == 'PAID') {
|
|
$where = [
|
|
['order_id', '=', $param['order_id']],
|
|
['order_no', '=', $param['third_order_no']],
|
|
['is_settlement', '=', 0],
|
|
['is_refund', '=', 0],
|
|
];
|
|
$manage_order_info = model('manage_order')->getInfo($where, '*');
|
|
if ($manage_order_info) {
|
|
$account = new ManageAccount();
|
|
$one_manage_id = $manage_order_info['one_manage_id'];
|
|
if ($one_manage_id && $manage_order_info['one_commission']) { //添加直连佣金
|
|
$account->addAccount($one_manage_id, $manage_order_info['one_manage_name'], 'order', $manage_order_info['one_commission'], $manage_order_info['id']);
|
|
}
|
|
$two_manage_id = $manage_order_info['two_manage_id'];
|
|
if ($two_manage_id && $manage_order_info['two_commission']) {
|
|
$account->addAccount($two_manage_id, $manage_order_info['two_manage_name'], 'order', $manage_order_info['two_commission'], $manage_order_info['id']);
|
|
}
|
|
$three_manage_id = $manage_order_info['three_manage_id'];
|
|
if ($three_manage_id && $manage_order_info['three_commission']) {
|
|
$account->addAccount($three_manage_id, $manage_order_info['three_manage_name'], 'order', $manage_order_info['three_commission'], $manage_order_info['id']);
|
|
}
|
|
$this->SiteRewardPoints($manage_order_info['ag_site_id'], $manage_order_info['site_id'], $manage_order_info['commission']);
|
|
return $this->success('CloudOrderSettlement');
|
|
}
|
|
}
|
|
return $this->error('CloudOrderSettlement');
|
|
}
|
|
|
|
/***
|
|
* 站点奖励积分
|
|
* @param $agent_id
|
|
* @param $site_id
|
|
* @param $commission
|
|
* @return void
|
|
*/
|
|
public function SiteRewardPoints($agent_id, $site_id, $commission)
|
|
{
|
|
$config_model = new Config();
|
|
$basic_config = $config_model->getBasicsConfig($agent_id)['data']['value'];
|
|
if ($basic_config['is_point_cash']) {
|
|
$point_cash_rate = $basic_config['point_cash_rate'];
|
|
$point = $commission;
|
|
if ($point_cash_rate) {
|
|
$point = $commission * $point_cash_rate / 100;
|
|
}
|
|
model('site')->update(['point' => ['exp', 'integral+' . round($point)]], ['site_id' => $site_id]);
|
|
}
|
|
}
|
|
}
|