User.php 51 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475
  1. <?php
  2. namespace app\api\controller\v1;
  3. use app\AddressValidate;
  4. use app\model\admin\MemberLevel;
  5. use app\model\admin\Product;
  6. use app\model\admin\SiteLevel;
  7. use app\model\api\ExpCost;
  8. use app\model\api\Member;
  9. use app\model\api\MemberDetail;
  10. use app\model\api\MemberShop;
  11. use app\model\api\Order;
  12. use app\model\api\OrderInfo;
  13. use app\model\api\OrderInfoAsw;
  14. use app\model\api\OrderInfoDd;
  15. use app\model\api\PayTrade;
  16. use app\model\api\Recharge;
  17. use app\model\api\SiteDetail;
  18. use app\model\api\SiteProduct;
  19. use app\model\api\Tx;
  20. use app\model\api\Warehouse;
  21. use app\model\api\WeixinPushUser;
  22. use app\model\api\UserAddress;
  23. use app\model\api\SystemCity;
  24. use app\model\system\MemberFollow;
  25. use app\model\system\News;
  26. use app\Request;
  27. use app\api\controller\AuthController;
  28. use library\services\UtilService;
  29. use library\utils\alipay;
  30. use library\utils\Qiniu;
  31. use library\utils\Region;
  32. use think\db\exception\DbException;
  33. use think\db\Where;
  34. use think\facade\Db;
  35. use think\Image;
  36. use Alipay\EasySDK\Kernel\Factory;
  37. use Alipay\EasySDK\Kernel\Config;
  38. use think\exception\ValidateException;
  39. class User extends AuthController
  40. {
  41. /**
  42. * 地址 获取单个
  43. * @param Request $request
  44. * @param $id
  45. * @return mixed
  46. * @throws DataNotFoundException
  47. * @throws ModelNotFoundException
  48. * @throws DbException
  49. */
  50. public function address(Request $request, $id)
  51. {
  52. $addressInfo = [];
  53. if ($id && is_numeric($id) && UserAddress::be(['is_del' => 0, 'id' => $id, 'uid' => $request->user['uid']])) {
  54. $addressInfo = UserAddress::find($id)->toArray();
  55. }
  56. return app('json')->successful($addressInfo);
  57. }
  58. /**
  59. * 地址列表
  60. * @param Request $request
  61. * @param $page
  62. * @param $limit
  63. * @return mixed
  64. * @throws \Exception
  65. */
  66. public function address_list(Request $request)
  67. {
  68. list($page, $limit) = UtilService::getMore([['page', 0], ['limit', 20]], $request, true);
  69. $list = UserAddress::getUserValidAddressList($request->user['uid'], $page, $limit, 'id,real_name,phone,province,city,district,detail,is_default');
  70. return app('json')->successful($list);
  71. }
  72. /**
  73. * 设置默认地址
  74. *
  75. * @param Request $request
  76. * @return mixed
  77. * @throws \Exception
  78. */
  79. public function address_default_set(Request $request)
  80. {
  81. list($id) = UtilService::getMore([['id', 0]], $request, true);
  82. if (!$id || !is_numeric($id)) return app('json')->fail('参数错误!');
  83. if (!UserAddress::be(['is_del' => 0, 'id' => $id, 'uid' => $request->user['uid']]))
  84. return app('json')->fail('地址不存在!');
  85. $res = UserAddress::setDefaultAddress($id, $request->user['uid']);
  86. if (!$res)
  87. return app('json')->fail('地址不存在!');
  88. else
  89. return app('json')->successful();
  90. }
  91. /**
  92. * 获取默认地址
  93. * @param Request $request
  94. * @return mixed
  95. */
  96. public function address_default(Request $request)
  97. {
  98. $defaultAddress = UserAddress::getUserDefaultAddress($request->user['uid'], 'id,real_name,phone,province,city,district,detail,is_default');
  99. if ($defaultAddress) {
  100. $defaultAddress = $defaultAddress->toArray();
  101. return app('json')->successful('ok', $defaultAddress);
  102. }
  103. return app('json')->successful('empty', []);
  104. }
  105. /**
  106. * 修改 添加地址
  107. * @param Request $request
  108. * @return mixed
  109. * @throws \Exception
  110. */
  111. public function address_edit(Request $request)
  112. {
  113. $addressInfo = UtilService::getMore([
  114. ['address', []],
  115. ['is_default', false],
  116. ['real_name', ''],
  117. ['post_code', ''],
  118. ['phone', ''],
  119. ['detail', ''],
  120. ['id', 0],
  121. ['type', 0]
  122. ], $request);
  123. if (!isset($addressInfo['address']['province'])) return app('json')->fail('收货地址格式错误!');
  124. if (!isset($addressInfo['address']['city'])) return app('json')->fail('收货地址格式错误!');
  125. if (!isset($addressInfo['address']['district'])) return app('json')->fail('收货地址格式错误!');
  126. if (!isset($addressInfo['address']['city_id']) && $addressInfo['type'] == 0) {
  127. return app('json')->fail('收货地址格式错误!请重新选择!');
  128. } else if ($addressInfo['type'] == 1) {
  129. $city = $addressInfo['address']['city'];
  130. $cityId = SystemCity::where('name', $city)->where('parent_id', '<>', 0)->value('city_id');
  131. if ($cityId) {
  132. $addressInfo['address']['city_id'] = $cityId;
  133. } else {
  134. if (!($cityId = SystemCity::where('parent_id', '<>', 0)->where('name', 'like', "%$city%")->value('city_id'))) {
  135. return app('json')->fail('收货地址格式错误!修改后请重新导入!');
  136. }
  137. }
  138. }
  139. $addressInfo['province'] = $addressInfo['address']['province'];
  140. $addressInfo['city'] = $addressInfo['address']['city'];
  141. $addressInfo['city_id'] = $addressInfo['address']['city_id'] ?? 0;
  142. $addressInfo['district'] = $addressInfo['address']['district'];
  143. $addressInfo['is_default'] = (int)$addressInfo['is_default'] == true ? 1 : 0;
  144. $addressInfo['uid'] = $request->user['uid'];
  145. unset($addressInfo['address'], $addressInfo['type']);
  146. try {
  147. validate(AddressValidate::class)->check($addressInfo);
  148. } catch (ValidateException $e) {
  149. return app('json')->fail($e->getError());
  150. }
  151. if ($addressInfo['id'] && UserAddress::be(['id' => $addressInfo['id'], 'uid' => $request->user['uid'], 'is_del' => 0])) {
  152. $id = $addressInfo['id'];
  153. unset($addressInfo['id']);
  154. if (UserAddress::edit($addressInfo, $id, 'id')) {
  155. if ($addressInfo['is_default'])
  156. UserAddress::setDefaultAddress($id, $request->user['uid']);
  157. return app('json')->successful();
  158. } else
  159. return app('json')->fail('编辑收货地址失败!');
  160. } else {
  161. $addressInfo['add_time'] = time();
  162. if ($address = UserAddress::create($addressInfo)) {
  163. if ($addressInfo['is_default']) {
  164. UserAddress::setDefaultAddress($address->id, $request->user['uid']);
  165. }
  166. return app('json')->successful(['id' => $address->id]);
  167. } else {
  168. return app('json')->fail('添加收货地址失败!');
  169. }
  170. }
  171. }
  172. /**
  173. * 删除地址
  174. *
  175. * @param Request $request
  176. * @return mixed
  177. * @throws \Exception
  178. */
  179. public function address_del(Request $request)
  180. {
  181. list($id) = UtilService::getMore([['id', 0]], $request, true);
  182. if (!$id || !is_numeric($id)) return app('json')->fail('参数错误!');
  183. if (!UserAddress::be(['is_del' => 0, 'id' => $id, 'uid' => $request->user['uid']]))
  184. return app('json')->fail('地址不存在!');
  185. if (UserAddress::edit(['is_del' => '1'], $id, 'id'))
  186. return app('json')->successful();
  187. else
  188. return app('json')->fail('删除地址失败!');
  189. }
  190. /**
  191. * 获取配置
  192. */
  193. public function index(Request $request)
  194. {
  195. $post = [];
  196. //获取公告
  197. [$page, $data] = (new News)->getList(0, ['cate_id' => 2,'is_show'=>1], '6', '*', 'time desc');
  198. $newData = UtilService::getParam([
  199. 'id',
  200. 'title',
  201. ['time', 'time', 'date("Y-m-d",$1)'],
  202. ], $data);
  203. $post['news'] = $newData;
  204. //快递费用
  205. $expCode = new ExpCost;
  206. $expData = $expCode->getExpCostData($request->site['sassid'], $request->user['levelid']);
  207. $post['expData'] = $expData;
  208. //
  209. //总金额
  210. $total = (new Order)
  211. ->where('uid', $request->user['uid'])
  212. ->where('status', '>', 0)
  213. ->sum('all_price');
  214. $post['total'] = $total;
  215. //未支付
  216. $unpaid = (new Order)
  217. ->where('uid', $request->user['uid'])
  218. ->where('status', 0)
  219. ->count();
  220. $post['unpaid'] = $unpaid;
  221. //打单子中
  222. $inOrder = (new Order)
  223. ->where('uid', $request->user['uid'])
  224. ->where('status', 1)
  225. ->count();
  226. $post['inOrder'] = $inOrder;
  227. //打单子中
  228. $sendOrder = (new Order)
  229. ->where('uid', $request->user['uid'])
  230. ->where('status', 2)
  231. ->count();
  232. $post['sendOrder'] = $sendOrder;
  233. //异常订单
  234. $abnormalOrder = (new Order)
  235. ->where('uid', $request->user['uid'])
  236. ->where('status', 9)
  237. ->count();
  238. $post['abnormalOrder'] = $abnormalOrder;
  239. $dateAr = [];
  240. $order = new Order;
  241. //8天订单量
  242. for ($i = 0; $i < 8; $i++) {
  243. $time = strtotime('-' . $i . ' day');
  244. $date = date('Y-m-d', $time);
  245. $count = $order
  246. ->where('uid', $request->user['uid'])
  247. ->where('sassid', $request->site['sassid'])
  248. ->whereDay('time', $date)
  249. ->count();
  250. $dateAr[] = ['count' => $count, 'name' => $date];
  251. }
  252. $post['date'] = array_reverse($dateAr);
  253. //绑定数据
  254. $wxPush = (new WeixinPushUser)
  255. ->field("avatar,nickname")
  256. ->where('sassid', $request->site['sassid'])
  257. ->where('uid', $request->user['uid'])
  258. ->find();
  259. if (empty($wxPush)) {
  260. $token = base64_encode(crypto_encrypt($request->user['uid'] . "|" . time(), 'md5_user_token'));
  261. $url = \config('app')['API_URL']
  262. . '/api/bind/system_bind?token=' . $token . '&secret_key=' . $request->site['secret_key'];
  263. $post['bind'] = false;
  264. $post['bind_url'] = $url;
  265. } else {
  266. $post['bind'] = true;
  267. }
  268. return app('json')->success($post);
  269. }
  270. /**
  271. * 获取个人信息
  272. */
  273. public function init(Request $request)
  274. {
  275. $user = (new Member)->where('uid',$request->user['uid'])->whereTime('lasttime', 'today')->find();
  276. if(!$user){
  277. (new Member)->where('uid',$request->user['uid'])->save(['lasttime'=>time()]);
  278. $data['uid'] = $request->user['uid'];
  279. $data['ip'] = $request->ip();
  280. $data['time'] = time();
  281. Db::name("login_record")->insert($data);
  282. }
  283. $info = [
  284. 'uid' => $request->user['uid'],
  285. 'mobile' => $request->user['mobile'],
  286. 'name' => $request->user['name'],
  287. 'nickname' => $request->user['nickname'],
  288. 'avatar' => $request->user['avatar'],
  289. 'money' => $request->user['money'],
  290. 'openid' => $request->user['openid'],
  291. 'routine_openid' => $request->user['routine_openid']
  292. ];
  293. return app('json')->success($info);
  294. }
  295. /**
  296. * 获取仓库列表
  297. * @param Request $request
  298. */
  299. public function warehouse(Request $request)
  300. {
  301. $warehouse = new Warehouse;
  302. $expCode = new ExpCost;
  303. $expCode->getExpCostData($request->site['sassid'], $request->user['levelid']);
  304. $data = $warehouse->field("name,id,platform_ids,address,exp_time,exp_star,tran_star,beijing,shanghai,qinghai")
  305. ->where("status", 1)
  306. ->whereIn("sassid",[0,$request->site['sassid']])
  307. ->order("sassid", "desc")
  308. ->order("seq", "desc")
  309. ->select()
  310. ->toArray();
  311. $platform = (new \app\model\system\Platform());
  312. foreach ($data as $k => $v) {
  313. $idsAr = explode(',', $v['platform_ids']);
  314. //平台
  315. $data[$k]['platform'] = array_map(
  316. function ($item) use ($platform) {
  317. return $platform->getPlatformId($item, '*');
  318. }, $idsAr);
  319. //邮费模板
  320. $data[$k]['expCode'] = $expCode->getWareHouseExpCost($v['id'], '*');
  321. }
  322. return app('json')->success($data);
  323. }
  324. /**
  325. * 提交
  326. * @param Request $request
  327. */
  328. public function subOrder(Request $request)
  329. {
  330. [$orderAr, $proId, $warehouseId, $expId, $platformId, $mono, $extraFreight] = UtilService::getMore([
  331. ['orderAr', '', 'empty', '参数错误'],
  332. ['proId', '', 'empty', '参数错误'],
  333. ['warehouseId', '', 'empty', '参数错误'],
  334. ['expId', '', 'empty', '请选择运送方式'],
  335. ['platformId', '', 'empty', '参数错误'],
  336. ['mono', ''],
  337. ['extraFreight', 0]
  338. ], $request, true);
  339. $expPrice = 0; //邮费费用
  340. $expressId = 0; //快递ID
  341. $siteExpCommission = 0;//分站佣金费用
  342. //检测数据
  343. $sitePro = (new SiteProduct)->getItem($proId);
  344. if ($sitePro['count'] <= 0 || count($orderAr) > $sitePro['count']) {
  345. return app('json')->fail("订单产品数量不足,请重新选择!");
  346. }
  347. //判断仓库是否可以下单
  348. $warehouseIds = explode(',',$sitePro['warehouse_ids']);
  349. if(!in_array($warehouseId,$warehouseIds)) {
  350. return app('json')->fail("请重新选择产品!");
  351. }
  352. $warehouse = (new Warehouse)->where('id',$warehouseId)->find();
  353. if(empty($warehouse) || empty($warehouse['status'])) {
  354. return app('json')->fail("分仓已下架,请选择其他分仓");
  355. }
  356. $region = new Region;
  357. //检查地址数据
  358. foreach ($orderAr as $k => $v) {
  359. $rData = $region->getRegion($v['address']);
  360. if (empty($rData['province']) ||
  361. empty($rData['city']) ||
  362. empty($rData['area'])
  363. ) {
  364. // return app('json')->fail('第' . (intval($k) + 1) .'行,'.$v['address'] .'地址信息有误,请重新检查省市区!');
  365. }
  366. }
  367. //订单总数
  368. $orderCount = count($orderAr);
  369. $price = $sitePro['price'] * $orderCount;
  370. $siteProCommission = $sitePro['price'] > $sitePro['commission'] ? ($sitePro['price'] - $sitePro['commission']) : 0;//分站佣金
  371. //快递信息
  372. $expCode = new ExpCost;
  373. $expCode->getExpCostData($request->site['sassid'], $request->user['levelid']);
  374. $expData = array_filter($expCode->getWareHouseExpCost($warehouseId, '*'), function ($item) use ($expId) {
  375. if ($item['id'] == $expId) {
  376. return true;
  377. }
  378. });
  379. //如果有快递信息,分析分账提成 || 用户推荐佣金
  380. if (!empty($expData)) {
  381. $expressId = $expData[0]['express_id'];
  382. $expPrice = $expData[0]['money'];
  383. //分站金额
  384. $money = $expCode->getSysExpCostPrice($expressId, $warehouseId, $request->site['sassid']);
  385. $siteExpCommission = empty($money) ? 0 : ($expPrice > $money ? ($expPrice - $money) : 0);
  386. }
  387. if (empty($expressId)) {
  388. return app('json')->fail("本次邮寄方式不存在,请重新选择邮寄方式。");
  389. }
  390. //获取低价
  391. $floorExp = $expCode
  392. ->where('warehouse_id', $warehouseId)
  393. ->where('express_id', $expressId)
  394. ->where('sassid', 0)
  395. ->where('level_id', -1)
  396. ->value('money');
  397. //会员店铺
  398. $shopAr = [];
  399. foreach ($orderAr as $v) {
  400. $shop_name = trim($v['shop_name']);
  401. if (!empty($shop_name)) {
  402. $shopAr[$shop_name] = ['name' => $shop_name];
  403. }
  404. }
  405. try {
  406. Order::beginTrans();
  407. $mShop = new MemberShop;
  408. foreach ($shopAr as $k => $v) {
  409. $shopId = $mShop->where('name', $k)
  410. ->where('uid', $this->user['uid'])
  411. ->value('id');
  412. if (empty($shopId)) $shopId = $mShop->insertGetId(['name' => $k, 'uid' => $this->user['uid']]);
  413. $shopAr[$k]['id'] = $shopId;
  414. }
  415. //下单
  416. $save['order_id'] = 'TF' . time() . sprintf('%04d', rand(0, 1000)) . $request->user['uid'];//订单号
  417. $save['all_price'] = $price + $expPrice * $orderCount + $extraFreight;//总金额 [价格 + 快递*产品数量]
  418. $save['pro_site_commission'] = $siteProCommission * $orderCount;//产品分站佣金
  419. $save['exp_site_commission'] = $siteExpCommission * $orderCount;//快递分站佣金
  420. $save['site_commission'] = $save['pro_site_commission'] + $save['exp_site_commission'];//分站提成
  421. $save['pro_id'] = $sitePro['id'];//产品ID
  422. $save['platform_id'] = $platformId;//来源[拼多多,淘宝]
  423. $save['warehouse_id'] = $warehouseId;//仓库来源
  424. $save['status'] = 0;//状态
  425. $save['time'] = time();
  426. $save['express_id'] = $expressId;//快递类型
  427. $save['sassid'] = $request->site['sassid'];//分站
  428. $save['mono'] = $mono;//备注
  429. $save['pro_price'] = $price;//产品价格
  430. $save['uid'] = $request->user['uid'];
  431. $oId = (new Order)->insertGetId($save);
  432. foreach ($orderAr as $k => $v) {
  433. $shop_name = trim($v['shop_name']);
  434. $d = [];
  435. $d['o_id'] = $oId;
  436. $d['in_order_id'] = $save['order_id'] . '-' . ($k + 1);
  437. $d['out_order_id'] = $v['out_order_id'];
  438. $d['name'] = $v['name'];
  439. $d['mobile'] = $v['mobile'];
  440. $d['address'] = $v['address'];
  441. $d['pro_price'] = $sitePro['price'];
  442. $d['pro_id'] = $sitePro['id'];
  443. $d['exp_id'] = $expressId;
  444. if(strstr($d['address'], '北京')){
  445. $d['exp_price'] = $expPrice + $warehouse['beijing'];
  446. }else if(strstr($d['address'], '上海')){
  447. $d['exp_price'] = $expPrice + $warehouse['shanghai'];
  448. }else if(strstr($d['address'], '青海')){
  449. $d['exp_price'] = $expPrice + $warehouse['qinghai'];
  450. }else{
  451. $d['exp_price'] = $expPrice;
  452. }
  453. $d['money'] = $sitePro['price'] + $d['exp_price'];
  454. $d['sassid'] = $request->site['sassid'];
  455. $d['uid'] = $request->user['uid'];
  456. $d['time'] = time();
  457. $d['platform_id'] = $platformId;
  458. $d['warehouse_id'] = $warehouseId;
  459. $d['pro_site_commission'] = $siteProCommission;
  460. $d['exp_site_commission'] = $siteExpCommission;
  461. $d['site_commission'] = $siteProCommission + $siteExpCommission;
  462. $d['exp_floor_price'] = empty($floorExp) ? 0 : $floorExp;
  463. $d['shop_id'] = empty($shop_name) ? 0 : $shopAr[$shop_name]['id'];
  464. (new OrderInfo)->insert($d);
  465. }
  466. Order::commitTrans();
  467. } catch (DbException $db) {
  468. Order::rollbackTrans();
  469. return app('json')->fail("下单失败,理由:" . $db->getMessage());
  470. }
  471. return app('json')->success([
  472. 'order_id' => $save['order_id'],
  473. 'price' => $save['all_price'],
  474. ]);
  475. }
  476. /**
  477. * 获取支单独单号
  478. * @param Request $request
  479. */
  480. public function getPayOrder(Request $request)
  481. {
  482. [$orderId] = UtilService::getMore([
  483. ['order_id', '', 'empty', '参数错误'],
  484. ], $request, true);
  485. $data = Order::where('order_id', $orderId)->find();
  486. if (empty($data)) {
  487. return app('json')->fail('找不到订单信息');
  488. }
  489. //订单已付款
  490. if (!empty($data['is_pay'])) {
  491. return app('json')->fail('订单已经支付成功');
  492. }
  493. $orderCount = (new OrderInfo)->where('o_id', $data['id'])->count();
  494. $sitePro = (new SiteProduct)->getProItem($data['pro_id']);
  495. if ($sitePro['count'] <= 0 || $orderCount > $sitePro['count']) {
  496. return app('json')->fail("订单产品数量不足,请重新选择!");
  497. }
  498. $post = [];
  499. $post['order_id'] = $orderId;
  500. $post['count'] = $orderCount;
  501. $post['title'] = $sitePro['title'];
  502. $post['img'] = $sitePro['img'];
  503. $post['all_price'] = $data['all_price'];
  504. $post['user_money'] = $request->user['money'];
  505. return app('json')->success($post);
  506. }
  507. /**
  508. * 余额支付
  509. * @param Request $request
  510. */
  511. public function balancePay(Request $request)
  512. {
  513. [$orderId] = UtilService::getMore([
  514. ['order_id', '', 'empty', '参数错误'],
  515. ], $request, true);
  516. $data = Order::where('order_id', $orderId)->find();
  517. if (empty($data)) {
  518. return app('json')->fail('找不到订单信息');
  519. }
  520. if (empty($data)) {
  521. return app('json')->fail('找不到订单信息');
  522. }
  523. //订单已付款
  524. if (!empty($data['is_pay'])) {
  525. return app('json')->fail('订单已经支付成功');
  526. }
  527. if ($data['all_price'] > $request->user['money']) {
  528. return app('json')->fail('余额不足!');
  529. }
  530. $infoCount = OrderInfo::where('o_id', $data['id'])->count();
  531. //平台分佣
  532. if ($request->site['tj_sassid'] > 0) {
  533. (new ExpCost)
  534. ->difference($request->site, [
  535. 'count' => $infoCount,
  536. 'user' => $request->user['mobile'],
  537. 'money' => $data['site_commission'],
  538. 'warehouse_id' => $data['warehouse_id'],
  539. 'express_id' => $data['express_id'],
  540. 'sassid' => $request->site['tj_sassid'],
  541. 'orderid' => $orderId,
  542. ]);
  543. }
  544. $bool = (new MemberDetail)->consumption($data['all_price'], $request->user['uid'], [
  545. 'name' => $request->user['mobile'],
  546. 'order_id' => $orderId,
  547. 'allmoney' => $data['all_price'],
  548. 'money' => $data['all_price'],
  549. ], $request->site['sassid']);
  550. //提交数据
  551. if ($bool) {
  552. //判断是否有推荐人
  553. if ($request->user['i_uid'] > 0) {
  554. //每单提成
  555. $money = $infoCount * 0.05;
  556. (new MemberDetail)->income(
  557. $money,
  558. $request->user['i_uid'],
  559. ['user' => $request->user['mobile'], 'order_id' => $orderId, 'count' => $infoCount, 'money' => $money],
  560. $request->site['sassid']
  561. );
  562. }
  563. //减库存
  564. (new Product)->where('id', $data['pro_id'])->dec('count', $infoCount)->inc('sales', $infoCount)->update();
  565. //改状态
  566. Order::where('order_id', $orderId)->save([
  567. 'is_pay' => 1,
  568. 'pay_time' => time(),
  569. 'status' => 1,
  570. ]);
  571. //修改子订单数据
  572. OrderInfo::where('o_id', $data['id'])->save([
  573. 'status' => 1,
  574. ]);
  575. //设置维护人
  576. $last_con_time = (new Member)->where('uid', $request->user['uid'])->value('last_con_time');
  577. if($last_con_time == 0){
  578. $follow = (new MemberFollow)->where('uid', $request->user['uid'])->where('admin_id', 99)->find();
  579. if($follow){
  580. (new Member)->where('uid', $request->user['uid'])->save(['admin_id' => 99]);
  581. }else{
  582. (new Member)->where('uid', $request->user['uid'])->save(['admin_id' => 100]);
  583. }
  584. }
  585. (new Member)->where('uid', $request->user['uid'])->save(['last_con_time' => time()]);
  586. //平台佣金
  587. if ($data['site_commission'] > 0) {
  588. (new SiteDetail)->commission($data['site_commission'],
  589. $request->site['sassid'],
  590. $orderId,
  591. ['user' => $request->user['mobile'],
  592. 'pro_money' => $data['pro_site_commission'],
  593. 'exp_money' => $data['exp_site_commission'],
  594. 'order_id' => $orderId,
  595. 'count' => $infoCount,
  596. 'money' => $data['site_commission'],
  597. ]
  598. );
  599. }
  600. return app('json')->success(['msg' => '支付成功']);
  601. } else {
  602. return app('json')->fail('支付失败');
  603. }
  604. }
  605. /**
  606. * 订单列表-初始化数据
  607. * @param Request $request
  608. */
  609. public function orderInit(Request $request)
  610. {
  611. //总金额
  612. $total = (new Order)
  613. ->where('uid', $request->user['uid'])
  614. ->where('status', '>', 0)
  615. ->sum('all_price');
  616. //未支付
  617. $unpaid = (new Order)
  618. ->where('uid', $request->user['uid'])
  619. ->where('status', 0)
  620. ->count();
  621. //打单中
  622. $inOrder = (new Order)
  623. ->where('uid', $request->user['uid'])
  624. ->where('status', 1)
  625. ->count();
  626. //已出单
  627. $sendOrder = (new Order)
  628. ->where('uid', $request->user['uid'])
  629. ->where('status', 2)
  630. ->count();
  631. //异常订单
  632. $abnormalOrder = (new Order)
  633. ->where('uid', $request->user['uid'])
  634. ->where('status', 9)
  635. ->count();
  636. //取消订单
  637. $cancelOrder = (new Order)
  638. ->where('uid', $request->user['uid'])
  639. ->where('status', -1)
  640. ->count();
  641. //退货订单
  642. $refundOrder = (new Order)
  643. ->where('uid', $request->user['uid'])
  644. ->where('status', -2)
  645. ->count();
  646. //子订单
  647. $subOrder = (new OrderInfo)
  648. ->where('uid', $request->user['uid'])
  649. ->where('status', '>', 0)
  650. ->count();
  651. //
  652. return app('json')->success([
  653. 'total' => $total,
  654. 'unpaid' => $unpaid,
  655. 'inorder' => $inOrder,
  656. 'sendOrder' => $sendOrder,
  657. 'abnormalOrder' => $abnormalOrder,
  658. 'cancelOrder' => $cancelOrder,
  659. 'refundOrder' => $refundOrder,
  660. 'subOrder' => $subOrder,
  661. ]);
  662. }
  663. /**
  664. * 子订单数据
  665. * @param Request $request
  666. */
  667. public function orderSubItem(Request $request)
  668. {
  669. $pageSize = 20;
  670. $post = UtilService::getMore(
  671. [
  672. ['id', ''],
  673. ['page', 1],
  674. ['order_id', ''],
  675. ['mobile', ''],
  676. ['name', ''],
  677. ['shop_id', ''],
  678. ], $request
  679. );
  680. $where = $post;
  681. $where['sassid'] = $request->site['sassid'];
  682. $where['id'] = $post['id'];
  683. $where['uid'] = $request->user['uid'];
  684. list($pageCount, $data) = (new OrderInfo)->getList($post['page'], $where, $pageSize, "*", "id desc");
  685. $result = UtilService::getParam([
  686. "id",
  687. "exp_name",
  688. "order_id",
  689. "out_order_id",
  690. "name",
  691. "mobile",
  692. "address",
  693. "mono",
  694. "shop_name",
  695. "time",
  696. "send_time",
  697. "exp_number",
  698. "msg_err",
  699. "money",
  700. "status",
  701. ['_send_time', 'send_time', 'date("Y-m-d H:i:s",$1)']
  702. ], $data);
  703. return app('json')->success([
  704. 'list' => $result,
  705. 'pageCount' => $pageCount,
  706. 'pageSize' => $pageSize,
  707. 'page' => $post['page'],
  708. ]);
  709. }
  710. /**
  711. * 导出数据
  712. * @param Request $request
  713. */
  714. public function orderDown(Request $request)
  715. {
  716. $region = new Region;
  717. $post = UtilService::getMore([
  718. ['id', '', 'empty', '参数错误'],
  719. ['shop_id', ''],
  720. ], $request);
  721. $where = [];
  722. $where['sassid'] = $request->site['sassid'];
  723. $where['uid'] = $request->user['uid'];
  724. $where['id'] = $post['id'];
  725. if (!empty($post['shop_id'])) $where['shop_id'] = $post['shop_id'];
  726. $data = (new OrderInfo)->getAllList($where, 'id desc');
  727. $tAr = [];
  728. foreach ($data as $v) {
  729. $d = [];
  730. $d['name'] = $v['name'];
  731. $d['mobile'] = $v['mobile'];
  732. $d['out_order_id'] = $v['out_order_id'];
  733. $d['address'] = $v['address'];
  734. $d['exp_name'] = $v['exp_name'];
  735. $d['exp_number'] = $v['exp_number'];
  736. $d['platform_name'] = $v['platform_name'];
  737. $d['pro_name'] = $v['pro_name'];
  738. $d['send_time'] = $v['send_time'] <= 0 ? '' : date('Y-m-d H:i:s', $v['send_time']);
  739. // $v['address'] = '贵州省 贵阳市 观山湖区 世纪城社区服务中心福建街世纪城龙耀苑10栋12楼(000000)';
  740. $rData = $region->getRegion($v['address']);
  741. $d['address'] = $rData['address'];
  742. $d['province'] = $rData['province'];
  743. $d['shop_name'] = $v['shop_name'];
  744. $d['city'] = $rData['city'];
  745. $d['area'] = $rData['area'];
  746. $tAr[] = $d;
  747. }
  748. return app('json')->success($tAr);
  749. }
  750. /**
  751. * 升级显示
  752. * @param Request $request
  753. */
  754. public function rechargeXinit(Request $request)
  755. {
  756. $inAr = [
  757. ['name' => '30元', 'v' => 30, 'upname' => ''],
  758. ['name' => '10000元', 'v' => 10000, 'upname' => ''],
  759. ];
  760. $siteLevel = (new SiteLevel)
  761. ->field("sl.update_money,l.name")
  762. ->alias("sl")
  763. ->join("member_level l", "l.id = sl.level_id")
  764. ->where('sl.sass_id', $request->site['sassid'])
  765. ->select();
  766. foreach ($siteLevel as $v) {
  767. if (!empty($v['update_money']) && $v['update_money'] > 0) {
  768. $update_money = floatval($v['update_money']);
  769. $len = 0;
  770. $isAdd = false;
  771. foreach ($inAr as $kk => $vv) {
  772. $val = floatval($vv['v']);
  773. if ($update_money > $val) {
  774. $len = $kk;
  775. $isAdd = true;
  776. }
  777. if ($update_money == $val) {
  778. $len = $kk;
  779. $isAdd = false;
  780. break;
  781. }
  782. }
  783. if ($isAdd) {
  784. array_splice($inAr, $len, 0, [[
  785. 'name' => $v['update_money'] . '元',
  786. 'v' => $update_money,
  787. 'upname' => $v['name'],
  788. ]]);
  789. } else {
  790. $inAr[$len]['upname'] = $v['name'];
  791. }
  792. }
  793. }
  794. //排序
  795. $flag = [];
  796. foreach ($inAr as $v){
  797. $flag[] = $v['v'];
  798. }
  799. array_multisort($flag,SORT_ASC,$inAr);
  800. return app('json')->success($inAr);
  801. }
  802. /**
  803. * 充值
  804. * @param Request $request
  805. */
  806. public function rechargeX(Request $request)
  807. {
  808. $post = UtilService::getMore([
  809. ['v', '0', 'empty', '请选择充值金额'],
  810. ], $request);
  811. //充值
  812. try {
  813. Recharge::beginTrans();
  814. $recharge = new Recharge();
  815. $d = [];
  816. $d['order_id'] = 'RE' . time() . sprintf('%04d', rand(0, 1000)) . $request->user['uid'];
  817. $d['v'] = $post['v'];
  818. $d['status'] = '0';
  819. $d['time'] = time();
  820. $d['sassid'] = $request->site['sassid'];
  821. $d['uid'] = $request->user['uid'];
  822. $recharge->insert($d);
  823. //生成支付凭证
  824. (new PayTrade)->mkTrade([
  825. 'out_trade_no' => $d['order_id'],
  826. 'uid' => $request->user['uid'],
  827. 'tag' => 'alipay',
  828. 'type' => 'recharge',
  829. 'money' => $post['v'],
  830. 'content' => '会员充值' . $d['v'] . '元',
  831. 'sassid' => $request->site['sassid'],
  832. ]);
  833. Recharge::commitTrans();
  834. $url = config('app.API_URL') . '/api/ott/alipay?order_id=' . $d['order_id'];
  835. return app('json')->success(['url' => $url, 'orderId' => $d['order_id']]);
  836. } catch (DbException $db) {
  837. Recharge::rollbackTrans();
  838. return app('json')->fail("充值失败,请联系客服人员");
  839. }
  840. }
  841. /**
  842. * 检查充值
  843. * @param Request $request
  844. */
  845. public function checkRecharge(Request $request)
  846. {
  847. $post = UtilService::getMore([
  848. ['order_id', '0', 'empty', '订单不存在'],
  849. ], $request);
  850. $recharge = new Recharge();
  851. $data = $recharge->where('order_id', $post['order_id'])->find();
  852. if (empty($data)) {
  853. return app('json')->fail('无充值订单');
  854. }
  855. if (empty($data['status'])) {
  856. return app('json')->fail('');
  857. }
  858. return app('json')->success(['data' => $data]);
  859. }
  860. /**
  861. * 资金情况
  862. * @param Request $request
  863. */
  864. public function rechargeInit(Request $request)
  865. {
  866. $info = [
  867. 'money' => $request->user['money'],
  868. 'tx_money' => $request->user['tx_money'],//提现金额
  869. 'in_money' => (new Tx)->where('uid', $request->user['uid'])->where('is_type', 0)->sum('money'),
  870. ];
  871. return app('json')->success($info);
  872. }
  873. /**
  874. * 提现列表
  875. * @param Request $request
  876. */
  877. public function txList(Request $request)
  878. {
  879. $pageSize = 10;
  880. $post = UtilService::getMore(
  881. [
  882. ['page', 1],
  883. ], $request
  884. );
  885. $where['sassid'] = $request->site['sassid'];
  886. $where['uid'] = $request->user['uid'];
  887. $tx = new Tx();
  888. list($pageCount, $data) = $tx->getList($post['page'], $where, $pageSize, "*", "time desc");
  889. $result = UtilService::getParam([
  890. "id",
  891. "money",
  892. "bank",
  893. 'name',
  894. 'code',
  895. "is_type",
  896. ["time", "time", "date('Y-m-d H:i:s',$1)"],
  897. ], $data);
  898. return app('json')->success([
  899. 'list' => $result,
  900. 'pageCount' => $pageCount,
  901. 'pageSize' => $pageSize,
  902. 'page' => $post['page'],
  903. ]);
  904. }
  905. /**
  906. * 操作明细
  907. * @param Request $request
  908. */
  909. public function detailList(Request $request)
  910. {
  911. $pageSize = 10;
  912. $post = UtilService::getMore(
  913. [
  914. ['page', 1],
  915. ['tabType', 'all'],
  916. ], $request
  917. );
  918. $where['sassid'] = $request->site['sassid'];
  919. $where['uid'] = $request->user['uid'];
  920. if (!empty($post['tabType']) && $post['tabType'] != 'all') {
  921. $where['code'] = $post['tabType'];
  922. }
  923. $detail = new MemberDetail();
  924. list($pageCount, $data) = $detail->getList($post['page'], $where, $pageSize, "*", "time desc");
  925. $result = UtilService::getParam([
  926. "id",
  927. "code",
  928. "v",
  929. 'title',
  930. 'content',
  931. "type",
  932. ["time", "time", "date('Y-m-d H:i:s',$1)"],
  933. ], $data);
  934. return app('json')->success([
  935. 'list' => $result,
  936. 'pageCount' => $pageCount,
  937. 'pageSize' => $pageSize,
  938. 'page' => $post['page'],
  939. ]);
  940. }
  941. /**
  942. * 我要提现
  943. * @param Request $request
  944. */
  945. public function subTx(Request $request)
  946. {
  947. $post = UtilService::getMore(
  948. [
  949. ['bank', "", "empty", "请输入到账账号"],
  950. ['money', '0', "empty", "请输入提现金额"],
  951. ['name', '', 'empty', '请输入真实姓名'],
  952. ], $request
  953. );
  954. //提现金额
  955. if ($request->user['tx_money'] < $post['money']) {
  956. return app('json')->fail("余额不足,无法提现!");
  957. }
  958. (new Tx)
  959. ->insert([
  960. 'uid' => $request->user['uid'],
  961. 'money' => $post['money'],
  962. 'bank' => '支付宝',
  963. 'name' => $post['name'],
  964. 'code' => $post['bank'],
  965. 'time' => time(),
  966. 'is_type' => 0,
  967. 'sassid' => $request->site['sassid'],
  968. ]);
  969. return app('json')->success(
  970. '提现成功,请等待打款!'
  971. );
  972. }
  973. /**
  974. * 订单详情数据
  975. * @param Request $request
  976. */
  977. public function orderInfoItem(Request $request)
  978. {
  979. $post = UtilService::getMore(
  980. [
  981. ['id', "", "empty", "参数错误"],
  982. ], $request
  983. );
  984. $orderInfo = (new OrderInfo())->getItem($post['id']);
  985. if (empty($orderInfo)) {
  986. return app('json')->fail('找不到订单数据');
  987. }
  988. return app('json')->success([
  989. 'id' => $orderInfo['id'],
  990. 'out_order_id' => $orderInfo['out_order_id'],
  991. 'exp_name' => $orderInfo['exp_name'],
  992. 'exp_number' => $orderInfo['exp_number'],
  993. 'pro_name' => $orderInfo['pro_title'],
  994. "mono" => $orderInfo['mono'],
  995. ]);
  996. }
  997. /*
  998. * 问题件反馈
  999. */
  1000. public function subOrderInfoMono(Request $request)
  1001. {
  1002. $post = UtilService::getMore(
  1003. [
  1004. ['id', "", "empty", "参数错误"],
  1005. ['mono', ""],
  1006. ], $request
  1007. );
  1008. $orderInfo = (new OrderInfo())->getItem($post['id']);
  1009. if (empty($orderInfo)) {
  1010. return app('json')->fail('找不到订单数据');
  1011. }
  1012. (new OrderInfo)->where('id', $orderInfo['id'])->save([
  1013. 'mono' => $post['mono'],
  1014. ]);
  1015. $data = (new OrderInfoAsw)
  1016. ->where('o_id', $orderInfo['o_id'])
  1017. ->where('of_id', $orderInfo['id'])
  1018. ->where('status', 0)
  1019. ->find();
  1020. if (!empty($data)) {
  1021. (new OrderInfoAsw)->Where('id', $data['id'])->save(['mono' => $post['mono']]);
  1022. } else {
  1023. (new OrderInfoAsw)->insert([
  1024. 'o_id' => $orderInfo['o_id'],
  1025. 'of_id' => $orderInfo['id'],
  1026. 'mono' => $post['mono'],
  1027. 'time' => time(),
  1028. 'status' => 0,
  1029. ]);
  1030. }
  1031. return app('json')->success('反馈成功');
  1032. }
  1033. /**
  1034. * 底单申请
  1035. * @param Request $request
  1036. */
  1037. public function subOrderDdInfo(Request $request)
  1038. {
  1039. $post = UtilService::getMore(
  1040. [
  1041. ['id', "", "empty", "参数错误"],
  1042. ['mono', ""],
  1043. ], $request
  1044. );
  1045. $orderInfo = (new OrderInfo())->getItem($post['id']);
  1046. if (empty($orderInfo)) {
  1047. return app('json')->fail('找不到订单数据');
  1048. }
  1049. $count = (new OrderInfoDd)
  1050. ->where('o_id', $orderInfo['o_id'])
  1051. ->where('of_id', $orderInfo['id'])
  1052. ->count();
  1053. if ($count > 0) {
  1054. return app('json')->fail('已提交申请,请勿重复提交');
  1055. }
  1056. (new OrderInfoDd)->insert([
  1057. 'o_id' => $orderInfo['o_id'],
  1058. 'of_id' => $orderInfo['id'],
  1059. 'mono' => $post['mono'],
  1060. 'time' => time(),
  1061. 'sassid' => $request->site['sassid'],
  1062. 'uid' => $request->user['uid'],
  1063. 'status' => 0,
  1064. ]);
  1065. return app('json')->success('反馈成功');
  1066. }
  1067. /**
  1068. * 问题反馈列表
  1069. * @param Request $request
  1070. */
  1071. public function orderMonoList(Request $request)
  1072. {
  1073. $pageSize = 10;
  1074. $post = UtilService::getMore(
  1075. [
  1076. ['page', 1],
  1077. ['exp_number', ''],
  1078. ['id', ''],
  1079. ['date', ["", ""]],
  1080. ['mobile', ''],
  1081. ['name', ''],
  1082. ['orderType', ''],
  1083. ['out_order_id', ''],
  1084. ['status', ''],
  1085. ['timeType', ''],
  1086. ], $request
  1087. );
  1088. $where = $post;
  1089. $where['sassid'] = $request->site['sassid'];
  1090. $where['uid'] = $request->user['uid'];
  1091. $tx = new OrderInfoAsw();
  1092. list($pageCount, $data) = $tx->getList($post['page'], $where, $pageSize, "*");
  1093. $result = UtilService::getParam([
  1094. "id",
  1095. "o_id",
  1096. "mono",
  1097. "status",
  1098. "cl_time",
  1099. "cl_admin_time",
  1100. "out_order_id",
  1101. "name",
  1102. "mobile",
  1103. "address",
  1104. "time",
  1105. "send_time",
  1106. "exp_number",
  1107. 'msg_mono',
  1108. "exp_name",
  1109. ], $data);
  1110. return app('json')->success([
  1111. 'list' => $result,
  1112. 'pageCount' => $pageCount,
  1113. 'pageSize' => $pageSize,
  1114. 'page' => $post['page'],
  1115. ]);
  1116. }
  1117. /**
  1118. * 订单撤销数据
  1119. * @param Request $request
  1120. */
  1121. public function orderMonoCancel(Request $request)
  1122. {
  1123. $post = UtilService::getMore(
  1124. [
  1125. ['id', "", "empty", "参数错误"],
  1126. ['mono', ""],
  1127. ], $request
  1128. );
  1129. (new OrderInfoAsw)->where('id', $post['id'])->where('uid', $request->user['uid'])->delete();
  1130. return app('json')->success('撤销成功');
  1131. }
  1132. /**
  1133. * 底单申请
  1134. * @param Request $request
  1135. */
  1136. public function orderDdList(Request $request)
  1137. {
  1138. $pageSize = 10;
  1139. $post = UtilService::getMore(
  1140. [
  1141. ['page', 1],
  1142. ['exp_number', ''],
  1143. ['id', ''],
  1144. ['date', ["", ""]],
  1145. ['mobile', ''],
  1146. ['name', ''],
  1147. ['orderType', ''],
  1148. ['out_order_id', ''],
  1149. ['status', ''],
  1150. ['timeType', ''],
  1151. ], $request
  1152. );
  1153. $where = $post;
  1154. $where['sassid'] = $request->site['sassid'];
  1155. $where['uid'] = $request->user['uid'];
  1156. $tx = new OrderInfoDd();
  1157. list($pageCount, $data) = $tx->getList($post['page'], $where, $pageSize, "*");
  1158. $result = UtilService::getParam([
  1159. "id",
  1160. "o_id",
  1161. "mono",
  1162. "status",
  1163. "cl_time",
  1164. "cl_admin_time",
  1165. "out_order_id",
  1166. "name",
  1167. "mobile",
  1168. "address",
  1169. "time",
  1170. "send_time",
  1171. "exp_number",
  1172. 'msg_mono',
  1173. "msg_img",
  1174. "exp_name",
  1175. ], $data);
  1176. return app('json')->success([
  1177. 'list' => $result,
  1178. 'pageCount' => $pageCount,
  1179. 'pageSize' => $pageSize,
  1180. 'page' => $post['page'],
  1181. ]);
  1182. }
  1183. /**
  1184. * 订单撤销数据
  1185. * @param Request $request
  1186. */
  1187. public function orderDbCancel(Request $request)
  1188. {
  1189. $post = UtilService::getMore(
  1190. [
  1191. ['id', "", "empty", "参数错误"],
  1192. ['mono', ""],
  1193. ], $request
  1194. );
  1195. (new OrderInfoDd())->where('id', $post['id'])->where('uid', $request->user['uid'])->delete();
  1196. return app('json')->success('撤销成功');
  1197. }
  1198. /**
  1199. * 邀请好友返利
  1200. * @param Request $request
  1201. */
  1202. public function extension(Request $request)
  1203. {
  1204. $uid = $request->user['uid'];
  1205. $mkuid = base64_encode(crypto_encrypt($uid, $request->site['secret_key']));
  1206. $url = '/login/reg?uid=' . $mkuid;
  1207. $url2 = '/mobile/reg/step1?uid=' . $mkuid;
  1208. $url3 = '/h5/pages/users/register/index?uid=' . $mkuid;
  1209. return app('json')->success([
  1210. 'url' => $url,
  1211. 'url2' => $url2,
  1212. 'url3' => $url3,
  1213. 'count' => (new Member)->where('i_uid', $request->user['uid'])->where('sassid', $request->site['sassid'])->count(),
  1214. ]);
  1215. }
  1216. /**
  1217. * @param Request $request
  1218. * @return mixed
  1219. */
  1220. public function extensionList(Request $request)
  1221. {
  1222. $pageSize = 10;
  1223. $post = UtilService::getMore(
  1224. [
  1225. ['page', 1],
  1226. ], $request
  1227. );
  1228. $where['sassid'] = $request->site['sassid'];
  1229. $where['i_uid'] = $request->user['uid'];
  1230. $member = new Member;
  1231. list($pageCount, $data) = $member->getList($post['page'], $where, $pageSize, "*");
  1232. $result = UtilService::getParam([
  1233. "uid",
  1234. "mobile",
  1235. ['regtime', 'regtime', 'date(\'Y-m-d H:i:s\',$1)'],
  1236. 'order_count',
  1237. 'lavel_name',
  1238. ], $data);
  1239. return app('json')->success([
  1240. 'list' => $result,
  1241. 'pageCount' => $pageCount,
  1242. 'pageSize' => $pageSize,
  1243. 'page' => $post['page'],
  1244. ]);
  1245. }
  1246. /**
  1247. * 修改账号
  1248. * @param Request $request
  1249. */
  1250. public function account(Request $request)
  1251. {
  1252. $post = UtilService::getMore(
  1253. [
  1254. ['nickname', ''],
  1255. ['avatar', ''],
  1256. ], $request
  1257. );
  1258. $m = (new Member);
  1259. $m->where('uid', $request->user['uid'])->save(['nickname' => $post['nickname'], 'avatar' => $post['avatar']]);
  1260. return app('json')->success('修改成功');
  1261. }
  1262. /**
  1263. * 修改密码
  1264. * @param Request $request
  1265. */
  1266. public function password(Request $request)
  1267. {
  1268. $post = UtilService::getMore(
  1269. [
  1270. ['oldpass', '', 'empty', '请输入旧密码'],
  1271. ['password', '', 'empty', '请输入新密码'],
  1272. ], $request
  1273. );
  1274. if ($request->user['password'] != md5($post['password'])) {
  1275. return app('json')->fail('旧密码错误,请检查之后在修改');
  1276. }
  1277. (new Member)->where('uid', $request->user['uid'])->save(['password' => md5($post['password'])]);
  1278. return app('json')->success('修改成功');
  1279. }
  1280. /**
  1281. * 绑定公众号
  1282. * @param Request $request
  1283. */
  1284. public function bind(Request $request)
  1285. {
  1286. $token = base64_encode(crypto_encrypt($request->user['uid'] . "|" . time(), 'md5_user_token'));
  1287. $url = \config('app')['API_URL']
  1288. . '/api/bind/system_bind?token=' . $token . '&secret_key=' . $request->site['secret_key'];
  1289. $wxPush = (new WeixinPushUser)
  1290. ->field("avatar,nickname")
  1291. ->where('sassid', $request->site['sassid'])
  1292. ->where('uid', $request->user['uid'])
  1293. ->find();
  1294. $result = [];
  1295. $result['url'] = $url;
  1296. $result['isbind'] = empty($wxPush) ? false : true;
  1297. $result['bind'] = $wxPush;
  1298. return app('json')->success($result);
  1299. }
  1300. /**
  1301. * 取消绑定
  1302. * @param Request $request
  1303. */
  1304. public function delbind(Request $request)
  1305. {
  1306. (new WeixinPushUser)->where('uid', $request->user['uid'])->where('sassid', $request->site['sassid'])->delete();
  1307. return app('json')->success('取消成功');
  1308. }
  1309. /**
  1310. * vip
  1311. * @param Request $request
  1312. */
  1313. public function vip(Request $request)
  1314. {
  1315. $wData = (new Warehouse)->select()->toArray();
  1316. $level = (new \app\model\admin\MemberLevel)
  1317. ->field("ml.*,(select update_money from table_site_level where level_id = ml.id and sass_id = " . $request->site['sassid'] . " ) as update_money")
  1318. ->alias("ml")
  1319. ->where('ml.is_show', 1)
  1320. ->select()
  1321. ->toArray();
  1322. $levelIds = array_column($level, 'id');
  1323. $expCost = new ExpCost;
  1324. $tAr = [];
  1325. foreach ($wData as $v) {
  1326. $d = [];
  1327. $eAr = [];
  1328. $d['name'] = $v['name'];
  1329. $d['id'] = $v['id'];
  1330. $d['data'] = [];
  1331. $exData = $expCost
  1332. ->field("ec.money,e.title,ec.level_id,ec.express_id")
  1333. ->alias("ec")
  1334. ->join('express e', 'e.id = ec.express_id')
  1335. ->where('ec.warehouse_id', $v['id'])
  1336. ->whereIn('ec.level_id', $levelIds)
  1337. ->where('sassid', $request->site['sassid'])
  1338. ->select();
  1339. foreach ($exData as $vv) {
  1340. $key = 'level_' . $vv['level_id'];
  1341. if (empty($d[$key])) {
  1342. $d[$key] = $vv['money'];
  1343. } else {
  1344. $d[$key] = $d[$key] > $vv['money'] ? $vv['money'] : $d[$key];
  1345. }
  1346. if (empty($eAr[$vv['express_id']])) $eAr[$vv['express_id']] = ['title' => $vv['title']];
  1347. $eAr[$vv['express_id']][$key] = $vv['money'];
  1348. }
  1349. //处理数据
  1350. foreach ($eAr as $vv) {
  1351. $d['data'][] = $vv;
  1352. }
  1353. if (count($exData) > 0) $tAr[] = $d;
  1354. }
  1355. return app('json')->success(['data' => $tAr, 'level' => $level]);
  1356. }
  1357. /**
  1358. * 店铺信息
  1359. * @param Request $request
  1360. */
  1361. public function shop(Request $request)
  1362. {
  1363. return app('json')
  1364. ->success((new MemberShop)
  1365. ->where('uid', $this->user['uid'])
  1366. ->select()
  1367. ->toArray()
  1368. );
  1369. }
  1370. /**
  1371. * 删除店铺
  1372. * @param Request $request
  1373. */
  1374. public function shopDel(Request $request)
  1375. {
  1376. [$id] = UtilService::getMore(
  1377. [
  1378. ['id', '', 'empty', '参数错误'],
  1379. ]
  1380. , $request, true);
  1381. (new MemberShop)
  1382. ->where('uid', $this->user['uid'])
  1383. ->where('id', $id)->delete();
  1384. return app('json')->fail('删除成功');
  1385. }
  1386. }