文件
Henglianshutong/application/admin/controller/shopro/partner/Reward.php

171 行
6.4 KiB
PHP

<?php
namespace app\admin\controller\shopro\partner;
use app\admin\controller\shopro\Common;
use app\admin\model\shopro\partner\Reward as RewardModel;
use addons\shopro\service\Wallet;
use addons\shopro\service\partner\PartnerConfig;
use addons\shopro\service\partner\PartnerRewardService;
use think\Db;
class Reward extends Common
{
protected $model = null;
public function _initialize()
{
parent::_initialize();
$this->model = new RewardModel();
}
public function index()
{
if (!$this->request->isAjax()) {
$exportConfig = (new \addons\shopro\library\Export())->getConfig();
$this->assignconfig("save_type", $exportConfig['save_type'] ?? 'download');
$this->assignconfig("rewardTypeMap", PartnerConfig::rewardTypeMap());
return $this->view->fetch();
}
$showSkip = $this->request->param('show_skip', 0);
$query = $this->model->sheepFilter()->with(['buyer', 'user', 'order']);
if (!$showSkip) {
$query->where(function ($q) {
$q->where('amount', '>', 0)->whereOr('madow', '>', 0);
});
}
$list = $query->paginate($this->request->param('list_rows', 10));
$this->success('获取成功', null, $list);
}
public function export()
{
$cellTitles = [
'id' => 'Id',
'createtime' => '入账时间',
'user_nickname' => '受益人',
'buyer_nickname' => '买家',
'order_id' => '订单',
'reward_type_text' => '奖项',
'role_text' => '角色',
'amount' => '金额',
'madow' => '马豆',
'base_amount' => '基数',
'status_text' => '状态',
'formula' => '公式',
];
$total = $this->model->sheepFilter()->count();
if ($total <= 0) {
$this->error('导出数据为空');
}
$export = new \addons\shopro\library\Export();
$params = [
'file_name' => '合伙股东收益流水',
'cell_titles' => $cellTitles,
'total' => $total,
'is_sub_cell' => false,
];
$totalAmount = 0;
$totalMadow = 0;
$result = $export->export($params, function ($pages) use (&$totalAmount, &$totalMadow, $total) {
$datas = $this->model->sheepFilter()->with(['buyer', 'user', 'order'])
->limit((($pages['page'] - 1) * $pages['list_rows']), $pages['list_rows'])
->select();
$newDatas = [];
foreach ($datas as $reward) {
$newDatas[] = [
'id' => $reward['id'],
'createtime' => $reward['createtime'],
'user_nickname' => $reward['user']['nickname'] ?? '-',
'buyer_nickname' => $reward['buyer']['nickname'] ?? '-',
'order_id' => $reward['order']['order_sn'] ?? $reward['order_id'],
'reward_type_text' => $reward['reward_type_text'],
'role_text' => $reward['role_text'] ?? $reward['role'],
'amount' => $reward['amount'],
'madow' => $reward['madow'],
'base_amount' => $reward['base_amount'],
'status_text' => $reward['status_text'],
'formula' => $reward['formula'],
];
}
$totalAmount += array_sum(array_column($newDatas, 'amount'));
$totalMadow += array_sum(array_column($newDatas, 'madow'));
if ($pages['is_last_page']) {
$newDatas[] = ['id' => "总数:{$total};金额:{$totalAmount};马豆:{$totalMadow}"];
}
return $newDatas;
});
$this->success('导出成功', null, $result);
}
public function reissue()
{
$params = $this->request->only(['user_id', 'reward_type', 'amount', 'order_id', 'memo']);
if (empty($params['user_id']) || empty($params['reward_type']) || empty($params['memo'])) {
$this->error('用户、奖项、备注必填');
}
$amount = round((float) ($params['amount'] ?? 0), 2);
if ($amount == 0) {
$this->error('请输入金额');
}
Db::transaction(function () use ($params, $amount) {
$row = PartnerRewardService::write([
'order_id' => intval($params['order_id'] ?? 0) ?: -time(),
'user_id' => intval($params['user_id']),
'buyer_id' => 0,
'role' => 'system',
'reward_type' => 'manual_' . $params['reward_type'],
'amount' => $amount,
'base_amount' => $amount,
'ext' => ['formula' => '手工补发', 'memo' => $params['memo'], 'manual' => 1],
'status' => 1,
]);
Wallet::change($params['user_id'], 'commission', $amount, 'reward_income', [
'partner_reward_id' => $row->id ?? 0,
'manual' => 1,
], $params['memo']);
});
$this->success('补发成功');
}
public function back()
{
$id = $this->request->param('id');
$memo = trim((string) $this->request->param('memo', ''));
if ($memo === '') {
$this->error('请填写退回原因');
}
$row = $this->model->where('id', $id)->find();
if (!$row) {
$this->error('记录不存在');
}
if ($row->status != 1 || $row->settle_date) {
$this->error('仅已入账的即时奖可退回');
}
Db::transaction(function () use ($row, $memo) {
if ((float) $row->amount > 0 && $row->user_id > 0) {
Wallet::change($row->user_id, 'commission', -$row->amount, 'reward_back', [
'partner_reward_id' => $row->id,
], $memo);
}
$ext = is_array($row->ext) ? $row->ext : (json_decode($row->ext ?: '{}', true) ?: []);
$ext['back_memo'] = $memo;
$row->ext = $ext;
$row->status = -2;
$row->save();
});
$this->success('已退回');
}
public function backOrder()
{
$orderId = intval($this->request->param('order_id'));
if ($orderId <= 0) {
$this->error('请选择订单');
}
(new PartnerRewardService())->refund($orderId);
$this->success('整单已退回');
}
}