123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583 |
- <?php
- /**
- * RebateLogic.php UTF-8
- * 返利逻辑处理表
- *
- * @date : 2018/7/28 15:12
- *
- * @license 这不是一个自由软件,未经授权不许任何使用和传播。
- * @author : wuyonghong <wyh@huosdk.com>
- * @version : Huosdk 8.0
- */
- namespace huoRebate\logic;
- use huo\controller\member\MemCache;
- use huo\controller\wap\Option;
- use huo\logic\member\CpLogic;
- use huo\logic\member\MemberLogic;
- use huo\model\game\GameModel;
- use huo\model\member\MemberModel;
- use huo\model\member\MemGameModel;
- use huo\model\member\MgRoleModel;
- use huo\model\order\OrderModel;
- use huolib\constant\CommonConst;
- use huolib\constant\OptionConst;
- use huolib\constant\OrderConst;
- use huolib\constant\PaywayConst;
- use huolib\constant\WalletConst;
- use huolib\tool\StrUtils;
- use huoRebate\model\RebateOrderModel;
- use huoRebate\model\RebateOrderPayModel;
- class RebateLogic {
- /**
- * 获取未返利的订单
- *
- * @param int $mem_id 玩家ID
- * @param int $app_id 应用ID
- * @param int $start_time 开始时间戳
- * @param int $end_time 结束时间戳
- *
- * @return array
- */
- public function getNotRebateOrders($mem_id, $app_id = 0, $start_time = 0, $end_time = 0) {
- $_o_map['mem_id'] = $mem_id;
- if (!empty($app_id)) {
- $_o_map['app_id'] = $app_id;
- }
- if (!empty($start_time)) {
- $_o_map['create_time'] = ['gt', $start_time];
- }
- if (!empty($end_time)) {
- $_o_map['create_time'] = ['lt', $end_time];
- }
- $_o_map['status'] = OrderConst::PAY_STATUS_SUC;
- $_pay_orders = (new OrderModel())->where($_o_map)->column('order_id');
- if (empty($_pay_orders)) {
- return [];
- }
- $_rop_orders = (new RebateOrderPayModel())->getOrdersByMemApp($mem_id, $app_id);
- $_orders = array_diff($_pay_orders, $_rop_orders);
- if (empty($_orders)) {
- return [];
- }
- return $_orders;
- }
- /**
- * 获取游戏金额
- *
- * @param int $mem_id 玩家ID
- *
- * @param int $app_id 应用ID
- *
- * @param int $start_time 开始时间戳
- * @param int $end_time 结束时间戳
- *
- * @return array
- */
- public function getGameAmount($mem_id, $app_id = 0, $start_time = 0, $end_time = 0) {
- $_orders = $this->getNotRebateOrders($mem_id);
- if (empty($_orders)) {
- return [];
- }
- $_map['order_id'] = ['in', $_orders];
- if (!empty($app_id)) {
- $_map['app_id'] = $app_id;
- }
- if (!empty($start_time)) {
- $_map['create_time'] = ['gt', $start_time];
- }
- if (!empty($end_time)) {
- $_map['create_time'] = ['lt', $end_time];
- }
- if (!empty($app_id)) {
- $_rdata = (new OrderModel())->where($_map)->column('sum(amount) amount,id,app_id', 'app_id');
- } else {
- $_rdata = (new OrderModel())->where($_map)->group('app_id')->column(
- 'sum(amount) amount,id,app_id', 'app_id'
- );
- }
- if (empty($_rdata)) {
- return [];
- }
- $_rdata = array_values($_rdata);
- if (empty($_rdata[0]['app_id'])) {
- return [];
- }
- return $_rdata;
- }
- /**
- * 获取可返利的游戏ID
- *
- * @param int $mem_id 玩家ID
- *
- * @return array
- */
- public function getGames($mem_id) {
- $_o_map['mem_id'] = $mem_id;
- $_o_map['status'] = OrderConst::PAY_STATUS_SUC;
- $_app_ids = (new OrderModel())->where($_o_map)->column('distinct(app_id)');
- if (empty($_app_ids)) {
- return [];
- }
- return $_app_ids;
- }
- /**
- * 获取区服角色
- *
- * @param int $mem_id 玩家ID
- * @param int $app_id 应用ID
- *
- * @return array
- */
- public function getServerRoles($mem_id, $app_id) {
- $_map['mem_id'] = $mem_id;
- $_map['app_id'] = $app_id;
- $_mg_mem_ids = (new MemGameModel())->where($_map)->column('id');
- if (empty($_mg_mem_ids)) {
- return [];
- }
- $_mgr_map['app_id'] = $app_id;
- $_mgr_map['mg_mem_id'] = ['in', $_mg_mem_ids];
- $_sr_list = (new MgRoleModel())->getServerRoles($_mgr_map);
- if (empty($_sr_list)) {
- return [];
- }
- $_list = [];
- foreach ($_sr_list as $_k => $_v) {
- $_role_list = [];
- if (in_array($_v['server_id'], $_list)) {
- $_role_list['mg_mem_id'] = $_v['mg_mem_id'];
- $_role_list['role_id'] = $_v['role_id'];
- $_role_list['role_name'] = $_v['role_name'];
- $_list[$_v['server_id']]['role_list'][] = $_role_list;
- } else {
- $_list[$_v['server_id']]['server_id'] = $_v['server_id'];
- $_list[$_v['server_id']]['server_name'] = $_v['server_name'];
- $_role_list['mg_mem_id'] = $_v['mg_mem_id'];
- $_role_list['role_id'] = $_v['role_id'];
- $_role_list['role_name'] = $_v['role_name'];
- $_list[$_v['server_id']]['role_list'][] = $_role_list;
- }
- }
- return array_values($_list);
- }
- /**
- * 获取返利订单列表
- *
- * @param array $where
- * @param string $page
- * @param string $order
- * @param array $field
- *
- * @return array
- */
- public function getList($where = [], $page = '1,10', $order = 'create_time desc', $field = []) {
- $_map = $where;
- $_ro_model = new RebateOrderModel();
- $_count = $_ro_model->where($where)->count();
- if (empty($_count)) {
- $_rdata['count'] = 0;
- $_rdata['list'] = [];
- return $_rdata;
- }
- $_field = [
- 'id' => 'id',
- 'app_id' => 'app_id',
- 'order_id' => 'order_id',
- 'amount' => 'amount',
- 'status' => 'status',
- '`status`' => 'status_txt',
- 'create_time' => 'apply_time',
- ];
- if (!empty($field)) {
- $_field = array_merge($_field, $field);
- }
- $_order = $order;
- $_datas = $_ro_model
- ->with('game')
- ->field($_field)
- ->where($_map)
- ->order($_order)
- ->page($page)
- ->select();
- if (is_object($_datas)) {
- $_datas = $_datas->toArray();
- }
- $_list = [];
- foreach ($_datas as $_k => $_v) {
- $_data = [];
- $_data['id'] = $_v['id'];
- $_data['order_id'] = $_v['order_id'];
- $_data['game_id'] = isset($_v['game']) ? $_v['game']['id'] : 0;
- $_data['gamename'] = isset($_v['game']) ? $_v['game']['name'] : '';
- $_data['icon'] = isset($_v['game']) ? $_v['game']['icon'] : '';
- $_data['amount'] = $_v['amount'];
- $_data['status'] = $_v['status'];
- $_data['status_txt'] = $_v['status_txt'];
- $_data['apply_time'] = $_v['apply_time'];
- $_list[] = $_data;
- }
- if (empty($_list)) {
- $_list = null;
- }
- $_rdata['count'] = $_count;
- $_rdata['list'] = $_list;
- return $_rdata;
- }
- /**
- * 获取返利详情
- *
- * @param int $mem_id 玩家ID
- * @param int $ro_id 返利ID
- *
- * @return array
- */
- public function getRoDetail($mem_id, $ro_id) {
- $_map['mem_id'] = $mem_id;
- $_map['ro_id'] = $ro_id;
- $_orders = (new RebateOrderPayModel())->where($_map)->column('order_id');
- if (empty($_orders)) {
- $_rdata['count'] = 0;
- $_rdata['list'] = null;
- return $_rdata;
- }
- $_o_map['order_id'] = ['in', $_orders];
- $_field = [
- 'order_id' => 'order_id',
- 'amount' => 'amount',
- 'real_amount' => 'real_amount',
- 'create_time' => 'create_time',
- 'payway' => 'payway',
- ];
- $_datas = (new OrderModel())->field($_field)->where($_o_map)->select();
- if (is_object($_datas)) {
- $_datas = $_datas->toArray();
- }
- if (empty($_datas)) {
- $_rdata['count'] = 0;
- $_rdata['list'] = null;
- return $_rdata;
- }
- $_rdata['count'] = count($_datas);
- $_list = [];
- foreach ($_datas as $_k => $_v) {
- $_data['order_id'] = $_v['order_id'];
- $_data['amount'] = $_v['amount'];
- $_data['real_amount'] = $_v['real_amount'];
- $_data['create_time'] = $_v['create_time'];
- $_data['payname'] = PaywayConst::getMsg($_v['payway']);
- $_list[] = $_data;
- }
- $_rdata['list'] = $_list;
- return $_rdata;
- }
- /**
- * 后台获取返利订单列表
- *
- * @param array $param
- * @param string $page
- * @param string $order
- *
- * @return array
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\ModelNotFoundException
- * @throws \think\exception\DbException
- */
- public function getAdminList($param = [], $page = '1,10', $order = 'create_time desc') {
- $_rdata = ['count' => 0, 'list' => [], 'sum' => 0, 'members' => []];
- $_map = [];
- if (!empty($param['start_time']) && !empty($param['end_time'])) {
- $_map['create_time']
- = [
- 'between',
- [
- strtotime($param['start_time']),
- CommonConst::CONST_DAY_SECONDS + strtotime($param['end_time'])
- ]
- ];
- } elseif (!empty($param['start_time'])) {
- $_map['create_time'] = ['egt', strtotime($param['start_time'])];
- } elseif (!empty($param['end_time'])) {
- $_map['create_time'] = ['elt', CommonConst::CONST_DAY_SECONDS + strtotime($param['end_time'])];
- }
- if (!empty($param['order_id'])) {
- $_map['order_id'] = $param['order_id'];
- }
- if (!empty($param['username'])) {
- $_mem_id = (new MemberLogic())->getIdByName($param['username']);
- if (empty($_mem_id)) { //没有玩家返回空数据
- return $_rdata;
- }
- $_map['mem_id'] = $_mem_id;
- }
- if (!empty($param['status'])) {
- $_map['status'] = $param['status'];
- }
- if (!empty($param['cp'])) {
- /*获取CP下的所有游戏id*/
- $_ids = (new GameModel())->where(['cp_id' => $param['cp']])->column('id');
- if (empty($_ids)) {
- return $_rdata;
- }
- $_map['app_id'] = ['in', $_ids];
- }
- if (!empty($param['app_id'])) {
- $_map['app_id'] = $param['app_id'];
- }
- if (!empty($param['mg_mem_id'])) {
- $_map['mg_mem_id'] = $param['mg_mem_id'];
- }
- $_ro_model = new RebateOrderModel();
- $_count = $_ro_model->where($_map)->count();
- if (empty($_count)) {
- return $_rdata;
- }
- $_sum = $_ro_model->where($_map)->value('sum(amount)');
- $_field = [
- 'id' => 'id',
- 'order_id' => 'order_id',
- 'app_id' => 'app_id',
- 'mem_id' => 'mem_id',
- 'server_name' => 'server_name',
- 'role_id' => 'role_id',
- 'role_name' => 'role_name',
- 'amount' => 'amount',
- 'status' => 'status',
- '`status`' => 'status_txt',
- 'create_time' => 'apply_time',
- 'remark' => 'remark',
- 'mg_mem_id' => 'mg_mem_id',
- ];
- if (!empty($field)) {
- $_field = array_merge($_field, $field);
- }
- $_order = $order;
- $_datas = $_ro_model
- ->with('game')
- ->field($_field)
- ->where($_map)
- ->order($_order)
- ->page($page)
- ->select();
- if (is_object($_datas)) {
- $_datas = $_datas->toArray();
- }
- $_list = [];
- $_mem_ids = [];
- foreach ($_datas as $_k => $_v) {
- $_data = [];
- $_data['id'] = $_v['id'];
- $_data['order_id'] = $_v['order_id'];
- $_data['mem_id'] = $_v['mem_id'];
- array_push($_mem_ids, $_data['mem_id']);
- $_data['server_name'] = $_v['server_name'];
- $_data['role_id'] = $_v['role_id'];
- $_data['role_name'] = $_v['role_name'];
- //$_data['game_id'] = isset($_v['game']) ? $_v['game']['id'] : 0;
- $_data['gamename'] = isset($_v['game']) ? $_v['game']['name'] : '';
- //$_data['icon'] = isset($_v['game']) ? $_v['game']['icon'] : '';
- $_data['cp_id'] = isset($_v['game']) ? $_v['game']['cp_id'] : 0;
- $_data['amount'] = $_v['amount'];
- $_data['status'] = $_v['status'];
- $_data['status_txt'] = $_v['status_txt'];
- $_data['apply_time'] = $_v['apply_time'];
- $_data['remark'] = $_v['remark'];
- $_data['mg_mem_id'] = $_v['mg_mem_id'];
- $_list[] = $_data;
- }
- if (empty($_list)) {
- $_list = null;
- }
- $_members = [];
- if (!empty($_mem_ids)) {
- $_mem_ids = array_unique($_mem_ids);
- $_members = (new MemberModel())->where(['id' => ['in', $_mem_ids]])->column('username', 'id');
- }
- $_rdata['count'] = $_count;
- $_rdata['list'] = $_list;
- $_rdata['members'] = $_members;
- $_rdata['sum'] = $_sum;
- return $_rdata;
- }
- /**
- * 添加返利
- *
- * @param $mem_id
- * @param $amount
- * @param array $orders 订单数组
- * @param array $param 参数
- *
- * @return bool
- */
- public function addRebate($mem_id, $amount, $orders = [], $param = []) {
- $_agent_id = MemCache::ins()->getAgentIdByMemId($mem_id);
- $_ro_data['order_id'] = StrUtils::genOrderId(
- $_agent_id, $_agent_id, $mem_id, WalletConst::WALLET_ORDER_PREFIX_REBATE
- );
- $_ro_data['mem_id'] = $mem_id;
- $_ro_data['mobile'] = $param['mobile'];
- $_ro_data['mg_mem_id'] = $param['mg_mem_id'];
- $_ro_data['agent_id'] = $_agent_id;
- $_ro_data['app_id'] = $param['app_id'];
- $_ro_data['amount'] = $amount;
- $_ro_data['status'] = OrderConst::REBATE_STATUS_NOT;
- $_ro_data['server_id'] = $param['server_id'];
- $_ro_data['server_name'] = $param['server_name'];
- $_ro_data['role_id'] = $param['role_id'];
- $_ro_data['role_name'] = $param['role_name'];
- $_ro_data['start_time'] = $param['start_time'];
- $_ro_data['end_time'] = $param['end_time'];
- $_ro_data['remark'] = $param['remark'];
- $_ro_id = (new RebateOrderModel())->add($_ro_data);
- if (false == $_ro_id) {
- return false;
- }
- $_rop_datas = [];
- foreach ($orders as $_order_id) {
- $_rop_data = [];
- $_rop_data['ro_id'] = $_ro_id;
- $_rop_data['mem_id'] = $mem_id;
- $_rop_data['app_id'] = $param['app_id'];;
- $_rop_data['order_id'] = $_order_id;
- $_rop_data['status'] = OrderConst::REBATE_STATUS_NOT;
- $_rop_data['create_time'] = time();
- $_rop_data['update_time'] = $_rop_data['create_time'];
- $_rop_datas[] = $_rop_data;
- }
- $_rs = (new RebateOrderPayModel())->insertAll($_rop_datas);
- if (false == $_rs) {
- return false;
- }
- return true;
- }
- /**
- * 订单审核
- *
- * @param $id
- * @param $status
- *
- * @param string $remark
- *
- * @return bool
- * @throws \think\exception\PDOException
- */
- public function setStatus($id, $status, $remark = '') {
- $_ro_data['status'] = $status;
- if (!empty($remark)) {
- $_ro_data['remark'] = $remark;
- }
- $_ro_data['update_time'] = time();
- $_rop_data['status'] = $status;
- $_rop_data['update_time'] = time();
- $_ro_map = ['id' => $id];
- $_rop_map = ['ro_id' => $id];
- // 启动事务
- $_ro_model = new RebateOrderModel();
- $_rop_model = new RebateOrderPayModel();
- $_ro_model->startTrans();
- try {
- $_ro_model->update($_ro_data, $_ro_map);
- $_rop_model->update($_rop_data, $_rop_map);
- // 提交事务
- $_ro_model->commit();
- return true;
- } catch (\Exception $e) {
- // 回滚事务
- $_ro_model->rollback();
- return false;
- }
- }
- /***
- * 获取返利详情
- *
- * @param $ro_id
- *
- * @return bool|array
- * @throws \think\Exception
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\ModelNotFoundException
- * @throws \think\exception\DbException
- */
- public function getRoInfo($ro_id) {
- $_map = ['id' => $ro_id];
- $_data = (new RebateOrderModel())->with('game')
- ->where($_map)
- ->find();
- if (is_object($_data)) {
- $_data = $_data->toArray();
- }
- if (empty($_data)) {
- return false;
- }
- $_ro_info = [];
- $_ro_info['id'] = $_data['id'];
- $_ro_info['order_id'] = $_data['order_id'];
- $_ro_info['mem_id'] = $_data['mem_id'];
- $_ro_info['server_name'] = $_data['server_name'];
- $_ro_info['role_id'] = $_data['role_id'];
- $_ro_info['role_name'] = $_data['role_name'];
- $_ro_info['gamename'] = isset($_data['game']) ? $_data['game']['name'] : '';
- $_ro_info['cp_id'] = isset($_data['game']) ? $_data['game']['cp_id'] : 0;
- $_ro_info['amount'] = $_data['amount'];
- $_ro_info['status'] = $_data['status'];
- $_ro_info['apply_time'] = $_data['create_time'];
- $_ro_info['remark'] = $_data['remark'];
- $_ro_info['mg_mem_id'] = $_data['mg_mem_id'];
- $_ro_info['cp'] = '';
- $_ro_info['mem'] = '';
- if (!empty($_ro_info['cp_id'])) {
- $_ro_info['cp'] = (new CpLogic())->getCpNameById($_ro_info['cp_id']);
- }
- if (!empty($_ro_info['mem_id'])) {
- $_ro_info['mem'] = (new MemberLogic())->getNameById($_ro_info['mem_id']);
- }
- $_ro_list = $this->getRoDetail($_ro_info['mem_id'], $_ro_info['id']);
- return ['ro_info' => $_ro_info, 'ro_list' => $_ro_list];
- }
- /**
- * 获取最小值设定
- * return int
- */
- public function getMinSet() {
- $_setting_name = OptionConst::REBATE_MIN_SET;
- $_item = (new Option())->getOptionData($_setting_name, 1, true);
- if (!empty($_item['option_value'])) {
- return $_item['option_value'];
- }
- return 0;
- }
- public function setMinSet($setting_name, $_option_vale) {
- $_res = (new Option())->saveOptionData($setting_name, json_encode($_option_vale));
- return $_res;
- }
- }
|