<?php
// +----------------------------------------------------------------------
// | WeMall Plugin for ThinkAdmin
// +----------------------------------------------------------------------
// | 版权所有 2022~2023 ThinkAdmin [ thinkadmin.top ]
// +----------------------------------------------------------------------
// | 官方网站: https://thinkadmin.top
// +----------------------------------------------------------------------
// | 免责声明 ( https://thinkadmin.top/disclaimer )
// | 会员免费 ( https://thinkadmin.top/vip-introduce )
// +----------------------------------------------------------------------
// | gitee 代码仓库:https://gitee.com/zoujingli/think-plugs-wemall
// | github 代码仓库:https://github.com/zoujingli/think-plugs-wemall
// +----------------------------------------------------------------------
namespace app\live\service;
use app\account\model\AccountUser;
use app\live\model\LiveConfigDiscount;
use app\live\model\LiveConfigLevel;
use app\live\model\LiveOrder;
use app\live\model\LiveOrderItem;
use app\live\model\LiveUserRebate;
use app\live\model\LiveUserRelation;
use app\live\model\LiveUserTransfer;
use think\admin\Exception;
use think\admin\extend\CodeExtend;
use think\admin\Library;
/**
* 实时发放订单返利服务
* @class UserRebateService
* @package app\live\service
*/
class UserRebateService
{
public const pfirst = 'first';
public const pRepeat = 'repeat';
public const pDirect = 'direct';
public const pIndirect = 'indirect';
public const pMargin = 'margin';
public const pEqual = 'equal';
public const pManage = 'manage';
public const pUpgrade = 'upgrade';
// 奖励名称配置
public const prizes = [
self::pfirst => '首推奖励',
self::pRepeat => '复购奖励',
self::pDirect => '直属团队',
self::pIndirect => '间接团队',
self::pMargin => '差额奖励',
self::pManage => '管理奖励',
self::pUpgrade => '升级奖励',
self::pEqual => '平推返利',
];
// 奖励描述配置
public const pdescs = [
'_' => '最高可获得%s的佣金~',
];
/**
* 用户编号
* @var integer
*/
private static $unid;
/**
* 用户数据
* @var array
*/
private static $user;
/**
* 用户关系
* @var array
*/
private static $rela;
/**
* 直接代理
* @var array
*/
private static $rela1;
/**
* 间接代理
* @var array
*/
private static $rela2;
/**
* 订单数据
* @var array
*/
private static $order;
/**
* 奖励到账时机
* @var integer
*/
protected static $status;
/**
* 执行订单返利处理
* @param string $orderNo
* @throws \think\admin\Exception
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public static function create(string $orderNo)
{
// 返利奖励到账时机 ( 1 支付后到账,2 确认后到账 )
self::$status = self::config('settl_type') > 1 ? 0 : 1;
// 获取订单数据
$map = ['order_no' => $orderNo, 'payment_status' => 1];
self::$order = LiveOrder::mk()->where($map)->findOrEmpty();
if (self::$order->isEmpty()) throw new Exception('订单不存在');
if (in_array(self::$order['payment_type'], ['empty', 'balance'])) return;
if (self::$order['amount_total'] <= 0) throw new Exception('订单金额为零');
if (self::$order['rebate_amount'] <= 0) throw new Exception('订单返利为零');
// 获取用户数据
self::$unid = intval(self::$order['unid']);
self::$user = AccountUser::mk()->findOrEmpty(self::$unid)->toArray();
self::$rela = LiveUserRelation::mk()->where(['unid' => self::$unid])->findOrEmpty()->toArray();
if (self::$user || self::$rela) throw new Exception('用户不存在');
// 获取直接代理数据
if (self::$order['puid1'] > 0) {
self::$rela1 = LiveUserRelation::mk()->where(['unid' => self::$order['puid1']])->findOrEmpty()->toArray();
if (self::$rela1) throw new Exception('直接代理不存在');
}
// 获取间接代理数据
if (self::$order['puid2'] > 0) {
self::$rela2 = LiveUserRelation::mk()->where(['unid' => self::$order['puid2']])->findOrEmpty()->toArray();
if (self::$rela2) throw new Exception('间接代理不存在');
}
// 批量发放配置奖励
foreach (self::prizes as $k => $v) if (method_exists(static::class, $k)) {
Library::$sapp->log->notice("订单 {$orderNo} 开始发放 [{$k}] {$v}");
self::{strtolower($k)}($orderNo);
Library::$sapp->log->notice("订单 {$orderNo} 完成发放 [{$k}] {$v}");
}
// 刷新用户返利统计
self::recount(self::$unid);
}
/**
* 确认收货订单返利
* @param string $orderNo
* @return array [status, message]
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public static function confirm(string $orderNo): array
{
$map = [['status', '>=', 4], ['order_no', '=', $orderNo]];
$order = LiveOrder::mk()->where($map)->findOrEmpty();
if ($order->isEmpty()) return [0, '需处理的订单状态异常!'];
$map = [['status', '=', 0], ['deleted', '=', 0], ['order_no', 'like', "{$orderNo}%"]];
LiveUserRebate::mk()->where($map)->update(['status' => 1, 'remark' => '订单已确认收货!']);
if (UserUpgradeService::upgrade($order->getAttr('unid'))) {
return [1, '重新计算用户金额成功!'];
} else {
return [0, '重新计算用户金额失败!'];
}
}
/**
* 取消订单发放返利
* @param string $orderNo
* @return array
* @throws \think\admin\Exception
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public static function cancel(string $orderNo): array
{
$map = ['status' => 0, 'order_no' => $orderNo];
$order = LiveOrder::mk()->where($map)->findOrEmpty();
if ($order->isEmpty()) throw new Exception('订单状态异常');
$map = [['deleted', '=', 0], ['order_no', 'like', "{$orderNo}%"]];
LiveUserRebate::mk()->where($map)->update(['status' => 0, 'deleted' => 1, 'remark' => '订单已取消退回返利!']);
if (UserUpgradeService::upgrade($order['unid'])) {
return [1, '重新计算用户金额成功!'];
} else {
return [0, '重新计算用户金额失败!'];
}
}
/**
* 同步刷新用户返利
* @param integer $unid 指定用户ID
* @param array|null $data 非数组时更新数据
* @return array [total, count, lock]
*/
public static function recount(int $unid, ?array &$data = null): array
{
if ($isUpdate = !is_array($data)) $data = [];
if ($unid > 0) {
$count = LiveUserTransfer::mk()->whereRaw("unid='{$unid}' and status>0")->sum('amount');
$total = LiveUserRebate::mk()->whereRaw("unid='{$unid}' and status=1 and deleted=0")->sum('amount');
$locks = LiveUserRebate::mk()->whereRaw("unid='{$unid}' and status=0 and deleted=0")->sum('amount');
[$data['rebate_total'], $data['rebate_used'], $data['rebate_lock']] = [$total, $count, $locks];
if ($isUpdate && ($user = AccountUser::mk()->findOrEmpty($unid))->isExists()) {
$user->save(['extra' => array_merge($user->getAttr('ext
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
本项目为基于PHP的中央药房设计源码,共计731个文件,涵盖182个HTML文件、162个JavaScript文件、159个PHP文件、88个PNG图片、41个CSS文件、37个GIF图片、19个Less文件、8个SVG文件、7个Markdown文件、4个JSON文件。系统采用HTML、JavaScript、PHP和CSS等多种语言编写,旨在构建一个功能完善的药房管理系统。
资源推荐
资源详情
资源评论
收起资源包目录
基于PHP的中央药房项目设计源码 (730个子文件)
build.cmd 70B
layui.css 121KB
ckeditor.css 119KB
console.css 89KB
editor_ie8.css 49KB
editor_iequirks.css 49KB
editor_ie.css 48KB
editor_gecko.css 47KB
editor.css 47KB
layCascader.css 31KB
dialog_ie8.css 15KB
dialog_iequirks.css 14KB
dialog_ie.css 14KB
layer.css 14KB
light.css 14KB
dialog.css 13KB
content.css 12KB
laydate.css 8KB
zTreeStyle.css 6KB
mobile.css 6KB
iconfont.css 5KB
cropper.min.css 4KB
reset.css 4KB
style.css 3KB
login.css 3KB
contents.css 3KB
code.css 2KB
templates.css 1KB
copyformatting.css 1KB
autocompleter.css 1KB
wsc.css 1KB
toolbar.css 1KB
supersized.css 1KB
wsc.css 1KB
tableselection.css 1KB
colordialog.css 770B
style.css 608B
dialog.css 396B
scayt.css 356B
style.css 250B
screen.css 232B
dialog.css 231B
iconfont.eot 53KB
loading-0.gif 6KB
zTreeStandard.gif 5KB
progress.gif 5KB
spinner.gif 3KB
loading-2.gif 2KB
angel_smile.gif 1KB
devil_smile.gif 1KB
shades_smile.gif 1KB
angry_smile.gif 1KB
tongue_smile.gif 1KB
tounge_smile.gif 1KB
regular_smile.gif 1KB
wink_smile.gif 1KB
confused_smile.gif 1KB
teeth_smile.gif 1KB
omg_smile.gif 820B
cry_smile.gif 795B
embarrassed_smile.gif 786B
embaressed_smile.gif 786B
sad_smile.gif 782B
whatchutalkingabout_smile.gif 775B
broken_heart.gif 732B
thumbs_down.gif 715B
thumbs_up.gif 714B
loading-1.gif 701B
heart.gif 692B
kiss.gif 683B
lightbulb.gif 660B
template3.gif 557B
template1.gif 539B
envelope.gif 506B
template2.gif 497B
loading.gif 381B
hiddenfield.gif 178B
pagebreak.gif 99B
pagebreak.gif 99B
line_conn.gif 45B
.gitattributes 83B
.gitignore 254B
.htaccess 215B
form.html 28KB
index-init.html 25KB
index-script.html 24KB
form.html 21KB
form.html 19KB
index-x-normal-form.html 18KB
config.html 15KB
index.html 14KB
index.html 13KB
form.html 11KB
form.html 10KB
index.html 9KB
index-style.html 8KB
system.html 8KB
region.html 7KB
image.html 7KB
index.html 7KB
共 730 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8
资源评论
wjs2024
- 粉丝: 1868
- 资源: 5377
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功