GoodsController.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. <?php
  2. namespace app\controller;
  3. use app\business\GoodsBusiness;
  4. use app\business\StreamBusiness;
  5. use Illuminate\Support\Arr;
  6. use Respect\Validation\Validator;
  7. use support\Db;
  8. use support\Request;
  9. use hg\apidoc\annotation as Apidoc;
  10. #[Apidoc\Title("项目管理")]
  11. #[Apidoc\Group("Goods")]
  12. #[Apidoc\Sort(3)]
  13. class GoodsController
  14. {
  15. #[Apidoc\Title("列表")]
  16. #[Apidoc\Url("api/goods/charity.html")]
  17. #[Apidoc\Method("POST")]
  18. #[Apidoc\Param("page", type: "int", require: true, desc: "页面", mock: 1)]
  19. #[Apidoc\Param("limit", type: "int", require: true, desc: "输出条数", mock: 10)]
  20. #[Apidoc\Param("type", type: "int", require: true, desc: "类型:1=国债债券,2=股权分红", mock: 1)]
  21. #[Apidoc\Returned(name: "id", type: "int", require: true, desc: '产品ID', default: '')]
  22. #[Apidoc\Returned(name: "name", type: "string", require: true, desc: '名称', default: '')]
  23. #[Apidoc\Returned(name: "pay_price", type: "string", require: true, desc: '支付金额', default: '')]
  24. #[Apidoc\Returned(name: "bonus", type: "string", require: true, desc: '日收益', default: '')]
  25. #[Apidoc\Returned(name: "balance", type: "string", require: true, desc: '赠送华润银联卡余额', default: '')]
  26. #[Apidoc\Returned(name: "bl", type: "string", require: true, desc: '日利率', default: '')]
  27. #[Apidoc\Returned(name: "img", type: "string", require: true, desc: '图片', default: '')]
  28. #[Apidoc\Returned(name: "total_num", type: "int", require: true, desc: '总数', default: '')]
  29. #[Apidoc\Returned(name: "num", type: "int", require: true, desc: '剩余数量', default: '')]
  30. public function charity(Request $request)
  31. {
  32. Db::beginTransaction();
  33. try {
  34. $param = $request->param_data;
  35. Validator::input($param, [
  36. 'type' => Validator::notEmpty()->intType()->setName('类型'),
  37. ]);
  38. $data = Db::table('wa_goods')
  39. ->where(function ($query) use ($param) {
  40. $query->where('state', 1);
  41. $query->where('type', Arr::get($param, 'type', 1));
  42. })
  43. ->orderBy('sort')
  44. ->paginate(Arr::get($param, 'limit', 10), ['*'], 'page', Arr::get($param, 'page'))
  45. ->toArray();
  46. foreach ($data['data'] as $k => $v) {
  47. $data['data'][$k]->img = imageToBase64($v->img);
  48. $data['data'][$k]->has = Db::table('wa_payorder')
  49. ->where('user_id', $request->user_data['id'])
  50. ->where('is_pay', 2)
  51. ->where('goods_id', $v->id)
  52. ->exists();
  53. }
  54. } catch (\Throwable $exception) {
  55. Db::rollBack();
  56. return error($exception->getMessage());
  57. }
  58. Db::commit();
  59. return success($data);
  60. }
  61. #[Apidoc\Title("支付")]
  62. #[Apidoc\Url("api/goods/charity_buy.html")]
  63. #[Apidoc\Method("POST")]
  64. #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  65. #[Apidoc\Param(name: "id", type: "int", require: true, desc: '产品ID', default: '')]
  66. #[Apidoc\Param(name: "pay_characteristic", type: "int", require: true, desc: '支付通道标识', default: '1')]
  67. #[Apidoc\Param(name: "num", type: "int", require: true, desc: '购买数量:默认1', default: '1')]
  68. #[Apidoc\Returned(name: "type", type: "int", require: true, desc: '类型 1直接购买 2支付通道', default: 2)]
  69. #[Apidoc\Returned(name: "url", type: "string", require: true, desc: '支付地址', default: 'https://www.baidu.com/')]
  70. #[Apidoc\Returned(name: "payOrderId", type: "string", require: true, desc: '订单号', default: '111')]
  71. public function charityBuy(Request $request)
  72. {
  73. Db::beginTransaction();
  74. try {
  75. $param = $request->param_data;
  76. $param['url'] = $request->header('origin');
  77. $param['user_data'] = $request->user_data;
  78. $param['num'] = Arr::get($param, 'num', 1);
  79. Validator::input($param, [
  80. 'id' => Validator::notEmpty()->intType()->setName('产品标识'),
  81. 'pay_characteristic' => Validator::notEmpty()->setName('支付标识'),
  82. ]);
  83. $goods = Db::table('wa_goods')->where('id', $param['id'])->first();
  84. if (empty($goods)) {
  85. throw new \Exception('产品不存在!');
  86. }
  87. $arr = GoodsBusiness::buyType1($param);
  88. } catch (\Throwable $exception) {
  89. Db::rollBack();
  90. return error($exception->getMessage());
  91. }
  92. Db::commit();
  93. return success($arr, '购买成功');
  94. }
  95. // #[Apidoc\Title("国债债券")]
  96. // #[Apidoc\Url("api/goods/nationalDebty_buy.html")]
  97. // #[Apidoc\Method("POST")]
  98. // #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  99. // #[Apidoc\Param(name: "id", type: "int", require: true, desc: '产品ID', default: '')]
  100. // public function nationalDebty_buy(Request $request)
  101. // {
  102. // Db::beginTransaction();
  103. // try {
  104. // $param = $request->param_data;
  105. // $param['user_data'] = $request->user_data;
  106. // $param['num'] = Arr::get($param, 'num', 1);
  107. // Validator::input($param, [
  108. // 'id' => Validator::notEmpty()->intType()->setName('产品标识'),
  109. // ]);
  110. // $goods = Db::table('wa_goods')->where('id', $param['id'])->first();
  111. // if (empty($goods)) {
  112. // throw new \Exception('产品不存在!');
  113. // }
  114. // $arr = GoodsBusiness::buyType2($param);
  115. // } catch (\Throwable $exception) {
  116. // Db::rollBack();
  117. // return error($exception->getMessage());
  118. // }
  119. // Db::commit();
  120. // return success($arr, '购买成功');
  121. // }
  122. // #[Apidoc\Title("商品列表")]
  123. // #[Apidoc\Url("api/goods/exchange_goods.html")]
  124. // #[Apidoc\Method("POST")]
  125. // #[Apidoc\Param("page", type: "int", require: true, desc: "页面", mock: 1)]
  126. // #[Apidoc\Param("limit", type: "int", require: true, desc: "输出条数", mock: 10)]
  127. // #[Apidoc\Param("type", type: "int", require: true, desc: '类型:不传查全部 1=手饰,2=小产品,3=房产', mock: '')]
  128. // #[Apidoc\Returned(name: "id", type: "int", require: true, desc: '产品ID', default: '')]
  129. // #[Apidoc\Returned(name: "name", type: "string", require: true, desc: '名称', default: '')]
  130. // #[Apidoc\Returned(name: "pay_price", type: "string", require: true, desc: '支付金额', default: '')]
  131. // #[Apidoc\Returned(name: "describe", type: "string", require: true, desc: '描述', default: '')]
  132. // #[Apidoc\Returned(name: "storey", type: "string", require: true, desc: '平方', default: '138m²')]
  133. // #[Apidoc\Returned(name: "img", type: "string", require: true, desc: '图片', default: '')]
  134. // #[Apidoc\Returned(name: "total_num", type: "int", require: true, desc: '总数', default: '')]
  135. // #[Apidoc\Returned(name: "num", type: "int", require: true, desc: '剩余数量', default: '')]
  136. // #[Apidoc\Returned(name: "type", type: "int", require: true, desc: '类型:1=国产电器类,2=电子设备类,3=国产新能源汽车类', default: '')]
  137. // public function exchangeGoods(Request $request)
  138. // {
  139. // Db::beginTransaction();
  140. // try {
  141. // $param = Arr::only($request->param_data, ['page', 'limit', 'type']);
  142. // $data = Db::table('wa_sign_goods')
  143. // ->where('state', 1)
  144. // ->where(function ($query) use ($param) {
  145. // if (Arr::get($param, 'type')) {
  146. // $query->where('type', $param['type']);
  147. // }
  148. // })
  149. // ->orderBy('sort')
  150. // ->paginate(Arr::get($param, 'limit', 10), ['*'], 'page', Arr::get($param, 'page'))
  151. // ->toArray();
  152. // foreach ($data['data'] as $k => $v) {
  153. // $data['data'][$k]->img = imageToBase64($v->img);
  154. // }
  155. // } catch (\Throwable $exception) {
  156. // Db::rollBack();
  157. // return error($exception->getMessage());
  158. // }
  159. // Db::commit();
  160. // return success($data);
  161. // }
  162. //
  163. // #[Apidoc\Title("兑换")]
  164. // #[Apidoc\Url("api/goods/exchange.html")]
  165. // #[Apidoc\Method("POST")]
  166. // #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  167. // #[Apidoc\Param("id", type: "int", require: true, desc: '产品ID', default: '')]
  168. // #[Apidoc\Param("num", type: "int", require: true, desc: '购买数量:默认1', default: '1')]
  169. // #[Apidoc\Param("name", type: "int", require: true, desc: '姓名', default: '')]
  170. // #[Apidoc\Param("mobile", type: "int", require: true, desc: '手机号', default: '')]
  171. // #[Apidoc\Param("address", type: "int", require: true, desc: '详细地址', default: '')]
  172. // public function exchange(Request $request)
  173. // {
  174. // Db::beginTransaction();
  175. // try {
  176. // $param = $request->param_data;
  177. // $param['user_data'] = $request->user_data;
  178. // $param['num'] = Arr::get($param, 'num', 1);
  179. // Validator::input($param, [
  180. // 'id' => Validator::notEmpty()->intType()->setName('产品标识'),
  181. // ]);
  182. // $goods = Db::table('wa_sign_goods')->where('id', $param['id'])->first();
  183. // if (!$goods) {
  184. // throw new \Exception('数据不存在!');
  185. // }
  186. // $price_money = bcmul($goods->pay_price, $param['num']);
  187. // if ($param['user_data']['money_one'] < $price_money) {
  188. // throw new \Exception('华润财富余额不足!');
  189. // }
  190. // if ($goods->num <= $param['num']) {
  191. // throw new \Exception('当前商品兑换数量不足!');
  192. // }
  193. // if (!empty($price_money)) {
  194. // Db::table('wa_sign_record')->insert([
  195. // 'uid' => $param['user_data']['id'],
  196. // 'goods_id' => $param['id'],
  197. // 'num' => $param['num'],
  198. // 'money' => $price_money,
  199. // 'status' => 1,
  200. // 'order_no' => date('YmdHis') . mt_rand(1000, 9999),
  201. // 'name' => Arr::get($param, 'name', ''),
  202. // 'mobile' => Arr::get($param, 'mobile', ''),
  203. // 'address' => Arr::get($param, 'address', ''),
  204. // 'created_at' => date('Y-m-d H:i:s'),
  205. // 'updated_at' => date('Y-m-d H:i:s'),
  206. // ]);
  207. // StreamBusiness::delStream($param['user_data']['id'], $price_money, streamType16, moldType2, moldTypefild2, $param['id']);
  208. // }
  209. // Db::table('wa_sign_goods')->where('id', $param['id'])->decrement('num', $param['num']);
  210. //
  211. // } catch (\Throwable $exception) {
  212. // Db::rollBack();
  213. // return error($exception->getMessage());
  214. // }
  215. // Db::commit();
  216. // return success([], '兑换成功');
  217. // }
  218. //
  219. //
  220. // #[Apidoc\Title("兑换记录(发货记录)")]
  221. // #[Apidoc\Url("api/goods/exchange_list.html")]
  222. // #[Apidoc\Method("POST")]
  223. // #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  224. // #[Apidoc\Param("page", type: "int", require: true, desc: "页面", mock: 1)]
  225. // #[Apidoc\Param("limit", type: "int", require: true, desc: "输出条数", mock: 10)]
  226. // #[Apidoc\Returned(name: "num", type: "int", require: true, desc: '购买数量:默认1', default: '1')]
  227. // #[Apidoc\Returned(name: "goods_name", type: "int", require: true, desc: '商品名称', default: '')]
  228. // #[Apidoc\Returned(name: "pay_price", type: "int", require: true, desc: '支付积分', default: '')]
  229. // #[Apidoc\Returned(name: "img", type: "int", require: true, desc: '图片', default: '')]
  230. // #[Apidoc\Returned(name: "money", type: "int", require: true, desc: '总支付', default: '')]
  231. // #[Apidoc\Returned(name: "num", type: "int", require: true, desc: '兑换数量', default: '')]
  232. // #[Apidoc\Returned(name: "status", type: "int", require: true, desc: '状态:1=领取成功,2=发货中,3=已到货', default: '')]
  233. // #[Apidoc\Returned(name: "status_name", type: "int", require: true, desc: '状态描述', default: '')]
  234. // #[Apidoc\Returned(name: "order_no", type: "int", require: true, desc: '订单号', default: '')]
  235. // #[Apidoc\Returned(name: "name", type: "int", require: true, desc: '姓名', default: '')]
  236. // #[Apidoc\Returned(name: "mobile", type: "int", require: true, desc: '手机号', default: '')]
  237. // #[Apidoc\Returned(name: "province", type: "int", require: true, desc: '省市区', default: '')]
  238. // #[Apidoc\Returned(name: "address", type: "int", require: true, desc: '详细地址', default: '')]
  239. // #[Apidoc\Returned(name: "type", type: "int", require: true, desc: '类型: 1=手饰,2=小产品,3=房产', mock: '')]
  240. // public function exchangeList(Request $request)
  241. // {
  242. // Db::beginTransaction();
  243. // try {
  244. // $param = $request->param_data;
  245. // $param['user_data'] = $request->user_data;
  246. //
  247. // $signdata = Db::table('wa_sign_record')
  248. // ->where('uid', $param['user_data']['id'])
  249. // ->orderByDesc('id')
  250. // ->paginate(Arr::get($param, 'limit', 10))->toArray();
  251. // $arr = [];
  252. // foreach ($signdata['data'] as $k => $v) {
  253. // $wa_goods = Db::table('wa_sign_goods')->where('id', $v->goods_id)->first();
  254. // if ($v->status == 1) {
  255. // $status_name = '调货中,请耐心等待';
  256. // } elseif ($v->status == 2) {
  257. // $status_name = '发货中';
  258. // } elseif ($v->status == 3) {
  259. // $status_name = '已到货';
  260. // } else {
  261. // $status_name = '请耐心等待';
  262. // }
  263. // $arr[] = [
  264. // 'good_name' => $wa_goods->name,
  265. // 'goods_id' => $v->goods_id,
  266. // 'pay_price' => $wa_goods->pay_price,
  267. // 'type' => $wa_goods->type,
  268. // 'img' => imageToBase64($wa_goods->img),
  269. // 'created_at' => date('Y-m-d H:i:s', strtotime($v->created_at)),
  270. // 'id' => $v->id,
  271. // 'num' => $v->num,
  272. // 'money' => $v->money,
  273. // 'status' => $v->status,
  274. // 'status_name' => $status_name,
  275. // 'order_no' => $v->order_no,
  276. // 'name' => $v->name,
  277. // 'mobile' => $v->mobile,
  278. // 'address' => $v->address,
  279. // ];
  280. // }
  281. // } catch (\Throwable $exception) {
  282. // Db::rollBack();
  283. // return error($exception->getMessage());
  284. // }
  285. // Db::commit();
  286. // return success($arr, '获取成功');
  287. // }
  288. //
  289. // #[Apidoc\Title("兑换商品地址编辑")]
  290. // #[Apidoc\Url("api/goods/edid_address.html")]
  291. // #[Apidoc\Method("POST")]
  292. // #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  293. // #[Apidoc\Param("id", type: "int", require: true, desc: "ID", mock: "")]
  294. // #[Apidoc\Param("name", type: "string", require: true, desc: "姓名", mock: "")]
  295. // #[Apidoc\Param("mobile", type: "string", require: true, desc: "手机号", mock: "")]
  296. // #[Apidoc\Param("number", type: "string", require: true, desc: "身份证", mock: "")]
  297. // #[Apidoc\Param("address", type: "string", require: true, desc: "地址", mock: "")]
  298. // public function edid_address(Request $request)
  299. // {
  300. // $param = $request->param_data;
  301. // $param['user_data'] = $request->user_data;
  302. // Db::beginTransaction();
  303. // try {
  304. // Validator::input($param, [
  305. // 'id' => Validator::notEmpty()->setName('id'),
  306. // ]);
  307. // $datalist = Db::table('wa_sign_record')
  308. // ->where('uid', $param['user_data']['id'])
  309. // ->where('id', $param['id'])
  310. // ->first();
  311. // if (!$datalist) {
  312. // throw new \Exception('非法操作');
  313. // }
  314. // Db::table('wa_sign_record')->where('id', $datalist->id)->update([
  315. // 'mobile' => Arr::get($param, 'mobile', $param['user_data']['mobile']),
  316. // 'name' => Arr::get($param, 'name', $datalist->name),
  317. // 'address' => Arr::get($param, 'address', $datalist->address),
  318. // ]);
  319. //
  320. // } catch (\Throwable $exception) {
  321. // Db::rollBack();
  322. // return error($exception->getMessage());
  323. // }
  324. // Db::commit();
  325. // return success([], '操作成功');
  326. //
  327. // }
  328. }