GoodsController.php 17 KB

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