jh-admin/addon/saas/model/ManageOrder.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]);
}
}
}