| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426 |
- <?php
- namespace app\controller;
- use app\business\GoodsBusiness;
- use app\business\StreamBusiness;
- use Illuminate\Support\Arr;
- use Respect\Validation\Validator;
- use support\Db;
- use support\Redis;
- use support\Request;
- use hg\apidoc\annotation as Apidoc;
- #[Apidoc\Title("项目管理")]
- #[Apidoc\Group("Goods")]
- #[Apidoc\Sort(3)]
- class GoodsController
- {
- #[Apidoc\Title("列表")]
- #[Apidoc\Url("api/goods/charity.html")]
- #[Apidoc\Method("POST")]
- #[Apidoc\Param("page", type: "int", require: true, desc: "页面", mock: 1)]
- #[Apidoc\Param("limit", type: "int", require: true, desc: "输出条数", mock: 10)]
- #[Apidoc\Param("type", type: "int", require: true, desc: "类型:1=国债债券,2=股权分红", mock: 1)]
- #[Apidoc\Returned(name: "id", type: "int", require: true, desc: '产品ID', default: '')]
- #[Apidoc\Returned(name: "name", type: "string", require: true, desc: '名称', default: '')]
- #[Apidoc\Returned(name: "pay_price", type: "string", require: true, desc: '支付金额', default: '')]
- #[Apidoc\Returned(name: "bonus", type: "string", require: true, desc: '日收益', default: '')]
- #[Apidoc\Returned(name: "balance", type: "string", require: true, desc: '赠送华润银联卡余额', default: '')]
- #[Apidoc\Returned(name: "bl", type: "string", require: true, desc: '日利率', default: '')]
- #[Apidoc\Returned(name: "img", type: "string", require: true, desc: '图片', default: '')]
- #[Apidoc\Returned(name: "total_num", type: "int", require: true, desc: '总数', default: '')]
- #[Apidoc\Returned(name: "num", type: "int", require: true, desc: '剩余数量', default: '')]
- public function charity(Request $request)
- {
- Db::beginTransaction();
- try {
- $param = $request->param_data;
- Validator::input($param, [
- 'type' => Validator::notEmpty()->intType()->setName('类型'),
- ]);
- $data = Db::table('wa_goods')
- ->where(function ($query) use ($param) {
- $query->where('state', 1);
- $query->where('type', Arr::get($param, 'type', 1));
- })
- ->orderBy('sort')
- ->paginate(Arr::get($param, 'limit', 10), ['*'], 'page', Arr::get($param, 'page'))
- ->toArray();
- foreach ($data['data'] as $k => $v) {
- $data['data'][$k]->img = imageToBase64($v->img);
- }
- } catch (\Throwable $exception) {
- Db::rollBack();
- return error($exception->getMessage());
- }
- Db::commit();
- return success($data);
- }
- #[Apidoc\Title("支付")]
- #[Apidoc\Url("api/goods/charity_buy.html")]
- #[Apidoc\Method("POST")]
- #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
- #[Apidoc\Param(name: "id", type: "int", require: true, desc: '产品ID', default: '')]
- #[Apidoc\Param(name: "pay_characteristic", type: "int", require: true, desc: '支付通道标识', default: '1')]
- #[Apidoc\Param(name: "num", type: "int", require: true, desc: '购买数量:默认1', default: '1')]
- #[Apidoc\Returned(name: "type", type: "int", require: true, desc: '类型 1直接购买 2支付通道', default: 2)]
- #[Apidoc\Returned(name: "url", type: "string", require: true, desc: '支付地址', default: 'https://www.baidu.com/')]
- #[Apidoc\Returned(name: "payOrderId", type: "string", require: true, desc: '订单号', default: '111')]
- public function charityBuy(Request $request)
- {
- Db::beginTransaction();
- try {
- $param = $request->param_data;
- $param['url'] = $request->header('origin');
- $param['user_data'] = $request->user_data;
- $param['num'] = Arr::get($param, 'num', 1);
- Validator::input($param, [
- 'id' => Validator::notEmpty()->intType()->setName('产品标识'),
- 'pay_characteristic' => Validator::notEmpty()->setName('支付标识'),
- ]);
- $goods = Db::table('wa_goods')->where('id', $param['id'])->first();
- if (empty($goods)) {
- throw new \Exception('产品不存在!');
- }
- $arr = GoodsBusiness::buyType1($param);
- } catch (\Throwable $exception) {
- Db::rollBack();
- return error($exception->getMessage());
- }
- Db::commit();
- return success($arr, '购买成功');
- }
- #[Apidoc\Title("商品列表")]
- #[Apidoc\Url("api/goods/exchange_goods.html")]
- #[Apidoc\Method("POST")]
- #[Apidoc\Param("page", type: "int", require: true, desc: "页面", mock: 1)]
- #[Apidoc\Param("limit", type: "int", require: true, desc: "输出条数", mock: 10)]
- #[Apidoc\Returned(name: "id", type: "int", require: true, desc: '产品ID', default: '')]
- #[Apidoc\Returned(name: "name", type: "string", require: true, desc: '名称', default: '')]
- #[Apidoc\Returned(name: "lowest_pay_price", type: "string", require: true, desc: '最低支付', default: '')]
- #[Apidoc\Returned(name: "highest_pay_price", type: "string", require: true, desc: '最高支付', default: '')]
- #[Apidoc\Returned(name: "describe", type: "string", require: true, desc: '描述', default: '')]
- #[Apidoc\Returned(name: "day", type: "string", require: true, desc: '周期', default: '')]
- #[Apidoc\Returned(name: "bl", type: "string", require: true, desc: '分红比例', default: '')]
- #[Apidoc\Returned(name: "img", type: "string", require: true, desc: '图片', default: '')]
- #[Apidoc\Returned(name: "total_num", type: "int", require: true, desc: '总数', default: '')]
- #[Apidoc\Returned(name: "num", type: "int", require: true, desc: '剩余数量', default: '')]
- public function exchangeGoods(Request $request)
- {
- Db::beginTransaction();
- try {
- $param = $request->param_data;
- $data = Db::table('wa_sign_goods')
- ->where('state', 1)
- ->where(function ($query) use ($param) {
- if (Arr::get($param, 'type')) {
- $query->where('type', $param['type']);
- }
- })
- ->orderBy('sort')
- ->paginate(Arr::get($param, 'limit', 10), ['*'], 'page', Arr::get($param, 'page'))
- ->toArray();
- foreach ($data['data'] as $k => $v) {
- $data['data'][$k]->img = imageToBase64($v->img);
- }
- } catch (\Throwable $exception) {
- Db::rollBack();
- return error($exception->getMessage());
- }
- Db::commit();
- return success($data);
- }
- #[Apidoc\Title("兑换")]
- #[Apidoc\Url("api/goods/exchange.html")]
- #[Apidoc\Method("POST")]
- #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
- #[Apidoc\Param("id", type: "int", require: true, desc: '产品ID', default: '')]
- #[Apidoc\Param("num", type: "int", require: true, desc: '购买数量:默认1', default: '1')]
- public function exchange(Request $request)
- {
- Db::beginTransaction();
- try {
- $param = $request->param_data;
- $param['user_data'] = $request->user_data;
- $param['num'] = Arr::get($param, 'num', 1);
- Validator::input($param, [
- 'id' => Validator::notEmpty()->intType()->setName('产品标识'),
- 'pay_price' => Validator::notEmpty()->intType()->setName('兑换USD'),
- ]);
- $goodsdata = Db::table('wa_sign_goods')->where('id', $param['id'])->first();
- if (!$goodsdata) {
- throw new \Exception('数据不存在!');
- }
- // if($goodsdata->highest_pay_price<=$param['pay_price'] && $param['pay_price']>=$goodsdata->lowest_pay_price){
- // $price_money = $param['pay_price'];
- // }else{
- // throw new \Exception('兑换USD不在兑换区间!');
- // }
- $price_money = $param['pay_price'];
- $userlist = Db::table('wa_users')->where('id', $param['user_data']['id'])->first();
- if ($goodsdata->type == 1) {
- // if ($userlist->raffle_num <= 0) {
- // throw new \Exception('助力次数不足!');
- // }
- if ($userlist->money < $price_money) {
- throw new \Exception('USD不足!');
- }
- if ($goodsdata->num <= $param['num']) {
- throw new \Exception('当前助力基金已完成!');
- }
- if (!empty(Redis::get($param['id'] . $request->user_data['id']))) {
- throw new \Exception('慢点操作');
- }
- Redis::setEx($param['id'] . $request->user_data['id'], 6, $request->user_data['id']);
- if (!empty($price_money)) {
- $signId = Db::table('wa_sign_record')->insertGetId([
- 'uid' => $param['user_data']['id'],
- 'goods_id' => $param['id'],
- 'num' => $param['num'],
- 'money' => $price_money,
- 'status' => 1,
- 'order_no' => date('YmdHis') . mt_rand(1000, 9999),
- 'created_at' => date('Y-m-d H:i:s'),
- 'updated_at' => date('Y-m-d H:i:s'),
- ]);
- StreamBusiness::delStream($param['user_data']['id'], $price_money, streamType16, moldType1, moldTypefild1, $signId);
- $thisDay = date('Y-m-d H:i:s');
- /** @var $futureDay 未来时间 */
- $futureDay = futureDay($goodsdata->day);
- if (!empty($goodsdata->bl)) {
- $bonus = bcmul($price_money, bcdiv($goodsdata->bl, 100, 2), 2);
- Db::table('wa_cron_task_sign')->insert([
- 'user_id' => $param['user_data']['id'],
- 'goods_id' => $goodsdata->id,
- 'order_id' => $signId,
- 'money' => $price_money,
- 'bonus' => $bonus,
- 'goods_type' => $goodsdata->type,
- 'day_dividend_time' => strtotime(date('Y-m-d', strtotime('+1 days')) . ' 00:30:00'),
- 'dividend_time' => strtotime($futureDay),
- 'created_at' => $thisDay,
- 'updated_at' => $thisDay,
- 'my_good_id' => $signId,
- ]);
- StreamBusiness::addStream($param['user_data']['id'], $bonus, streamType13, moldType2, moldTypefild2, $signId);
- }
- }
- // Db::table('wa_users')->where('id', $param['user_data']['id'])->decrement('raffle_num', 1);
- Db::table('wa_sign_goods')->where('id', $param['id'])->decrement('num', $param['num']);
- if ($userlist->is_boost == 0) {
- Db::table('wa_users')->where('id', $param['user_data']['id'])->update(['is_boost' => 1]);
- }
- $userdata = Db::table('wa_users')->where('id', $param['user_data']['id'])->first();
- if ($userdata->continuity >= 3 && $userdata->is_boost == 1 && $userdata->is_effective == 0 && !empty($request->user_data['pid'])) {
- Db::table('wa_users')->where('id', $request->user_data['pid'])->increment('effective_is_num', 1);
- Db::table('wa_users')->where(['id' => $request->user_data['id']])->update(['is_effective' => 1]);
- }
- }
- if ($goodsdata->type == 2) {
- // if ($userlist->buy_num <= 0) {
- // throw new \Exception('购买矿机台资格数不足!');
- // }
- if ($userlist->money < $price_money) {
- throw new \Exception('USD不足!');
- }
- if (!empty(Redis::get($param['id'] . $request->user_data['id']))) {
- throw new \Exception('慢点操作');
- }
- Redis::setEx($param['id'] . $request->user_data['id'], 6, $request->user_data['id']);
- if (!empty($price_money)) {
- $signId = Db::table('wa_sign_record')->insertGetId([
- 'uid' => $param['user_data']['id'],
- 'goods_id' => $param['id'],
- 'num' => $param['num'],
- 'money' => $price_money,
- 'type' => $goodsdata->type,
- 'status' => 1,
- 'order_no' => date('YmdHis') . mt_rand(1000, 9999),
- 'created_at' => date('Y-m-d H:i:s'),
- 'updated_at' => date('Y-m-d H:i:s'),
- ]);
- StreamBusiness::delStream($param['user_data']['id'], $price_money, streamType18, moldType1, moldTypefild1, $signId);
- $thisDay = date('Y-m-d H:i:s');
- /** @var $futureDay 未来时间 */
- $futureDay = futureDay($goodsdata->day);
- if (!empty($goodsdata->highest_pay_price)) {
- Db::table('wa_cron_task_sign_two')->insert([
- 'user_id' => $param['user_data']['id'],
- 'goods_id' => $goodsdata->id,
- 'order_id' => $signId,
- 'money' => $price_money,
- 'bonus' => 0,
- 'goods_type' => $goodsdata->type,
- 'day_dividend_time' => strtotime(date('Y-m-d', strtotime('+1 days')) . ' 01:00:00'),
- 'dividend_time' => strtotime($futureDay),
- 'created_at' => $thisDay,
- 'updated_at' => $thisDay,
- 'my_good_id' => $signId,
- 'highest_pay_price' => $goodsdata->highest_pay_price,
- 'day' => $goodsdata->day,
- 'bl' => $goodsdata->bl,
- 'progress' => $goodsdata->progress,
- ]);
- StreamBusiness::addStream($param['user_data']['id'], $goodsdata->highest_pay_price, streamType19, moldType5, moldTypefild5, $signId);
- StreamBusiness::addStream($param['user_data']['id'], $goodsdata->day, streamType19, moldType1, moldTypefild1, $signId);
- StreamBusiness::addStream($param['user_data']['id'], $goodsdata->progress, streamType19, moldType4, moldTypefild4, $signId);
- Db::table('wa_users')->where('id', $param['user_data']['id'])->increment('raffle_num', $goodsdata->bl);
- Db::table('wa_users')->where('id', $param['user_data']['id'])->increment('accumulate_raffle_num', $goodsdata->bl);
- }
- // $hasone = Db::table('wa_stream')
- // ->where('user_id', $param['user_data']['id'])
- // ->where('type', streamType20)
- // ->where('mold', moldType6)
- // ->whereBetween('add_time', [strtotime(date('Y-m-d') . ' 00:00:00'), strtotime(date('Y-m-d') . ' 23:59:59')])
- // ->exists();
- // if (empty($hasone)) {
- // StreamBusiness::addStream($param['user_data']['id'], 1, streamType20, moldType6, moldTypefild6);
- // }
- }
- Db::table('wa_users')->where('id', $param['user_data']['id'])->decrement('buy_num', 1);
- Db::table('wa_sign_goods')->where('id', $param['id'])->decrement('num', $param['num']);
- }
- } catch (\Throwable $exception) {
- Db::rollBack();
- return error($exception->getMessage());
- }
- Db::commit();
- return success([], '兑换成功');
- }
- #[Apidoc\Title("助力记录")]
- #[Apidoc\Url("api/goods/exchange_list.html")]
- #[Apidoc\Method("POST")]
- #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
- #[Apidoc\Param("page", type: "int", require: true, desc: "页面", mock: 1)]
- #[Apidoc\Param("limit", type: "int", require: true, desc: "输出条数", mock: 10)]
- #[Apidoc\Returned(name: "num", type: "int", require: true, desc: '购买数量:默认1', default: '1')]
- #[Apidoc\Returned(name: "goods_name", type: "int", require: true, desc: '商品名称', default: '')]
- #[Apidoc\Returned(name: "lowest_pay_price", type: "string", require: true, desc: '最低支付', default: '')]
- #[Apidoc\Returned(name: "highest_pay_price", type: "string", require: true, desc: '最高支付', default: '')]
- #[Apidoc\Returned(name: "describe", type: "string", require: true, desc: '描述', default: '')]
- #[Apidoc\Returned(name: "day", type: "string", require: true, desc: '周期', default: '')]
- #[Apidoc\Returned(name: "bl", type: "string", require: true, desc: '分红比例', default: '')]
- #[Apidoc\Returned(name: "pay_price", type: "int", require: true, desc: '支付积分', default: '')]
- #[Apidoc\Returned(name: "img", type: "int", require: true, desc: '图片', default: '')]
- #[Apidoc\Returned(name: "money", type: "int", require: true, desc: '总支付', default: '')]
- #[Apidoc\Returned(name: "num", type: "int", require: true, desc: '兑换数量', default: '')]
- #[Apidoc\Returned(name: "status", type: "int", require: true, desc: '状态:1=助力', default: '')]
- #[Apidoc\Returned(name: "order_no", type: "int", require: true, desc: '订单号', default: '')]
- public function exchangeList(Request $request)
- {
- Db::beginTransaction();
- try {
- $param = $request->param_data;
- $param['user_data'] = $request->user_data;
- $signdata = Db::table('wa_sign_record')
- ->where('uid', $param['user_data']['id'])
- ->where(function ($query) use ($param) {
- if (Arr::get($param, 'type')) {
- $query->where('type', $param['type']);
- }
- })
- ->orderByDesc('id')
- ->paginate(Arr::get($param, 'limit', 10), ['*'], 'page', Arr::get($param, 'page'))
- ->toArray();
- $arr = [];
- foreach ($signdata['data'] as $k => $v) {
- $wa_goods = Db::table('wa_sign_goods')->where('id', $v->goods_id)->first();
- $arr[] = [
- 'good_name' => $wa_goods->name,
- 'describe' => $wa_goods->describe,
- 'lowest_pay_price' => $wa_goods->lowest_pay_price,
- 'highest_pay_price' => $wa_goods->highest_pay_price,
- 'day' => $wa_goods->day,
- 'bl' => $wa_goods->bl,
- 'original_bl' => $wa_goods->original_bl,
- 'progress' => $wa_goods->progress,
- 'goods_id' => $v->goods_id,
- 'type' => $wa_goods->type,
- 'img' => imageToBase64($wa_goods->img),
- 'created_at' => date('Y-m-d H:i:s', strtotime($v->created_at)),
- 'pay_price' => $v->money,
- 'id' => $v->id,
- 'num' => $v->num,
- 'money' => $v->money,
- 'status' => $v->status,
- 'order_no' => $v->order_no,
- ];
- }
- } catch (\Throwable $exception) {
- Db::rollBack();
- return error($exception->getMessage());
- }
- Db::commit();
- return success($arr, '获取成功');
- }
- // #[Apidoc\Title("兑换商品地址编辑")]
- // #[Apidoc\Url("api/goods/edid_address.html")]
- // #[Apidoc\Method("POST")]
- // #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
- // #[Apidoc\Param("id", type: "int", require: true, desc: "ID", mock: "")]
- // #[Apidoc\Param("name", type: "string", require: true, desc: "姓名", mock: "")]
- // #[Apidoc\Param("mobile", type: "string", require: true, desc: "手机号", mock: "")]
- // #[Apidoc\Param("number", type: "string", require: true, desc: "身份证", mock: "")]
- // #[Apidoc\Param("address", type: "string", require: true, desc: "地址", mock: "")]
- // public function edid_address(Request $request)
- // {
- // $param = $request->param_data;
- // $param['user_data'] = $request->user_data;
- // Db::beginTransaction();
- // try {
- // Validator::input($param, [
- // 'id' => Validator::notEmpty()->setName('id'),
- // ]);
- // $datalist = Db::table('wa_sign_record')
- // ->where('uid', $param['user_data']['id'])
- // ->where('id', $param['id'])
- // ->first();
- // if (!$datalist) {
- // throw new \Exception('非法操作');
- // }
- // Db::table('wa_sign_record')->where('id', $datalist->id)->update([
- // 'mobile' => Arr::get($param, 'mobile', $param['user_data']['mobile']),
- // 'name' => Arr::get($param, 'name', $datalist->name),
- // 'address' => Arr::get($param, 'address', $datalist->address),
- // ]);
- //
- // } catch (\Throwable $exception) {
- // Db::rollBack();
- // return error($exception->getMessage());
- // }
- // Db::commit();
- // return success([], '操作成功');
- //
- // }
- }
|