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([], '操作成功'); // // } }