bourse stock
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

133 lines
5.3 KiB

<?php
namespace app\admin\service\setting;
use app\admin\service\AdminBaseService;
use app\model\StockInListModel;
use app\model\StockMarketModel;
use app\model\UserInGiveStockOrderModel;
use app\model\UserModel;
use app\utility\ClientGo;
use app\utility\Tool;
use think\facade\Db;
// 送股
class GiveStockService extends AdminBaseService
{
// 列表
public function index($marketType, $param, $adminId)
{
try {
if (empty($param['page']) || !is_numeric($param['page']) || empty($param['limit']) || !is_numeric($param['limit'])) {
return $this->toData('1', '分页参数错误');
}
$where = [];
$userId = 0;
// 用户号精确搜索
if (!empty($param['user_no'])) {
$user = UserModel::where('user_no', $param['user_no'])->find();
if (empty($user)) {
return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], 'extent' => StockMarketModel::STOCK_MARKET_TYPE]);
}
$userId = $user['user_id'];
}
// 判断是否是代理 如果是代理 只能看他自己管理的用户
$whereU = $this->getWhereByIsAgentAndUserId($adminId, $where, $userId);
if (!is_array($whereU)) {
return $this->toData('0', 'SUCCESS', ['total' => 0, 'list' => [], 'extent' => StockMarketModel::STOCK_MARKET_TYPE]);
}
// 股票号
if (!empty($param['stock_code']) && is_string($param['stock_code'])) {
$where[] = [
'stock_code', 'like', '%' . $param['stock_code']
];
}
$tableObj = (new IPOService())->getStockModel($marketType);
$query = Db::table($tableObj['give_order_table'])->where($where)->where($whereU)->with(['user' => function ($query) {
$query->field('user_id,user_no,nick_name,email,phone_number');
}])->order('id', 'desc');
$totalQuery = Db::table($tableObj['give_order_table'])->where($where)->where($whereU)->order('id', 'desc');
$list = $query->page($param['page'], $param['limit'])->select()->toArray();
$total = $totalQuery->count();
$stockCodeArr = array_column($list, 'stock_code');
$stockNameArr = Db::table($tableObj['list_table'])->whereIn('stock_code', $stockCodeArr)->column('stock_name', 'stock_code');
foreach ($list as &$v) {
$v['stock_name'] = $stockNameArr[$v['stock_code']];
}
return $this->toData('0', 'SUCCESS', ['list' => $list, 'total' => $total, 'extent' => StockMarketModel::STOCK_MARKET_TYPE]);
} catch (\Exception $exception) {
return $this->toData('1', '系统繁忙', [$exception->getMessage()]);
}
}
// 新增
public function add($marketType, $param)
{
try {
// 股票代码
if (empty($param['stock_code']) || !is_string($param['stock_code'])) {
return $this->toData('1', '股票代码 无效');
}
if (empty($param['tape']) || !is_numeric($param['tape'])) {
return $this->toData('1', '交易所 无效');
}
$tapeList = (new StockMarketModel)->getAllTape();
if (strpos($param['stock_code'], ':') !== false) {
$param['stock_code'] = explode(':', $param['stock_code'])[1];
}
$tape = $tapeList[$marketType][$param['tape']];
if ($marketType != 3) $param['stock_code'] = $tape . ':' . $param['stock_code'];
$tableObj = (new IPOService())->getStockModel($marketType);
$isHas = Db::table($tableObj['list_table'])->where('stock_code', $param['stock_code'])->value('id');
if (empty($isHas)) return $this->toData('1', '股票 无效');
// 股票代码
if (empty($param['user_id']) || !is_numeric($param['user_id'])) {
return $this->toData('1', '用户 无效');
}
if (empty($param['num']) || !is_numeric($param['num']) || $param['num'] <= 0) {
return $this->toData('1', '送股数量 无效');
}
$price=!empty($param['price']) ? floatval($param['price']) : 0;
$date = date('Y-m-d H:i:s');
$orderNo = (new Tool())->orderNo(20);
$insertArr = [
'user_id' => $param['user_id'],
'stock_code' => $param['stock_code'],
'order_no' => $orderNo,
'num' => $param['num'],
'price' => $price,
'amount' => $price*$param['num'],
'create_time' => $date,
'update_time' => $date
];
$insertBool = Db::table($tableObj['give_order_table'])->insert($insertArr);
if ($insertBool) {
// 通知交易
$bool = (new ClientGo())->giveawaysStock($param['stock_code'], $orderNo, $param['market_type']);
if (!$bool) {
return $this->toData('1', '给交易推送数据异常', []);
}
}
return $this->toData('0', 'SUCCESS');
} catch (\Exception $exception) {
return $this->toData('0', '系统繁忙', [$exception->getMessage()]);
}
}
}