Shop.php 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981
  1. <?php
  2. namespace app\api\controller;
  3. use app\admin\model\Attribute;
  4. use app\admin\model\Label;
  5. use app\api\model\Category;
  6. use app\api\model\ShopUserOld;
  7. use app\api\model\StoreEvaluate;
  8. use app\api\model\StoreOrder;
  9. use app\api\model\StoreProduct;
  10. use app\admin\model\store\StoreProductAttribute;
  11. use app\api\model\StoreSeckill;
  12. use app\common\controller\Api;
  13. use app\api\model\ShopUser;
  14. class Shop extends Api
  15. {
  16. protected $noNeedLogin =[ 'attribute','attribute_xh','label','category','store_list'];//都需要登录
  17. //获取分类
  18. public function category(){
  19. $where = ['status' => 'normal'];
  20. $where['pid']=0;//商家下面的分类
  21. $list = Category::where($where)
  22. //->field('id,name,type')
  23. ->with('catelist')
  24. ->field('id,name,pid')
  25. ->order('weigh desc,id desc')
  26. ->select();
  27. $this->result('ok', $list, 1);
  28. }
  29. /**
  30. * 申请成为商家
  31. *
  32. * @ApiTitle (申请成为商家)
  33. * @ApiSummary (申请成为商家)
  34. * @ApiMethod (POST)
  35. * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
  36. * @ApiRoute (/api/shop/apply_shop)
  37. * @ApiParams (name="user_id", type="int", required=true, description="用户user_id")
  38. * @ApiParams (name="shop_user_id", type="int", required=true, description="商户申请id")
  39. */
  40. public function apply_shop(){
  41. $userId = $this->request->param('user_id');
  42. $shop_user_id=$this->request->param('shop_user_id');
  43. $get_is=ShopUser::where(['mid'=>$userId])->find();
  44. if(!empty($get_is)){
  45. if ($get_is['status']==0){
  46. $this->result('您提交的资料正在审核,请耐心等待',$get_is,'101');
  47. }elseif ($get_is['status']=='1' || $get_is['status']=='4'|| $get_is['status']=='5'){
  48. $this->result('您已经成为商家',$get_is,'103');
  49. }else{
  50. if (empty($shop_user_id)){//如果不是提交修改
  51. $this->result('您提交的资料审核失败,请重新修改',$get_is,'102');
  52. }
  53. }
  54. }
  55. $post_array=$this->request->post();
  56. $name=$post_array['name'];//姓名
  57. $shopname=$post_array['shopname'];//店铺姓名
  58. $phone=$post_array['phone'];//手机号
  59. $effect_city=$post_array['effect_city'];//管理省市
  60. $city=$post_array['city'];//商家所在省市区
  61. $address=$post_array['address'];
  62. $cate_id=$post_array['cate_id'];//分类id
  63. $cate_top_id=$post_array['cate_top_id'];//分类id
  64. $type_id=$post_array['type_id'];//商店类型1个人,2车商,3 4s店
  65. $image=str_replace(config('site.siteUrl'),'',$post_array['image']);
  66. $images=str_replace(config('site.siteUrl'),'',$post_array['images']);
  67. if (empty($name) || empty($phone) || empty($effect_city) || empty($city)|| empty($address) || empty($cate_id) ){
  68. $this->result('数据丢失');
  69. }
  70. $time=time();
  71. $date=[
  72. 'mid'=>$userId,
  73. 'shopname'=>$shopname,
  74. 'name'=>$name,
  75. 'phone'=>$phone,
  76. 'cate_id'=>$cate_id,
  77. 'cate_top_id'=>$cate_top_id,
  78. 'type_id'=>$type_id,
  79. 'effect_city'=>$effect_city,
  80. 'city'=>$city,
  81. 'address'=>$address,
  82. 'status'=>0,
  83. 'image'=>$image,
  84. 'images'=>$images,
  85. 'updatetime'=>$time
  86. ];
  87. if (!empty($shop_user_id)){
  88. ShopUser::where('id',$shop_user_id)->update($date);
  89. $this->result('申请已经重新提交,等待审核', $shop_user_id, 1);
  90. }else{
  91. $date['createtime']=$time;
  92. if(ShopUser::insert($date)){ //添加数据
  93. $bid = ShopUser::getLastInsID(); //成功后跳转界面
  94. $this->result('申请已经提交,等待审核', $bid, 1);
  95. }else{
  96. $this->result('申请失败,请重新提交');
  97. }
  98. }
  99. }
  100. /**
  101. * 商家信息
  102. *
  103. * @ApiTitle (商家信息)
  104. * @ApiSummary (商家信息)
  105. * @ApiMethod (POST)
  106. * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
  107. * @ApiRoute (/api/shop/shop_info)
  108. * @ApiParams (name="user_id", type="int", required=true, description="用户user_id")
  109. * @ApiParams (name="type", type="int", required=true, description="1-查询返回个人信息 2-提交修改个人信息")
  110. * @ApiParams (name="shop_user_id", type="int", required=true, description="商户申请id")
  111. */
  112. public function shop_info(){
  113. $userId = $this->request->post('user_id');
  114. $type = $this->request->post('type');
  115. $shop_user_id=$this->request->post('shop_user_id');
  116. if (empty($userId)){
  117. $this->result('系统错误,刷新重试');
  118. }
  119. if (!$type) {
  120. $type=1;
  121. }
  122. $get_is=ShopUser::where(['mid'=>$userId])->find();
  123. if(!empty($get_is)){
  124. if ($get_is['status']==0){
  125. $this->result('您提交的资料正在审核,请耐心等待',$get_is,'101');
  126. }elseif ($get_is['status']=='1' || $get_is['status']=='4' || $get_is['status']=='5'){
  127. if ($type==1){
  128. $this->result('SUCCESS', $get_is, 1);
  129. }else{
  130. $post_array=$this->request->post();
  131. $name=$post_array['name'];//姓名
  132. $phone=$post_array['phone'];//手机号
  133. $city=$post_array['city'];//商家所在省市区
  134. // $effect_city=$post_array['effect_city'];//商家所在省市区
  135. $address=$post_array['address'];
  136. $image=str_replace(config('site.siteUrl'),'',$post_array['image']);
  137. $images=str_replace(config('site.siteUrl'),'',$post_array['images']);
  138. $time=time();
  139. $date=[
  140. 'name'=>$name,
  141. 'phone'=>$phone,
  142. 'city'=>$city,
  143. 'address'=>$address,
  144. 'status'=>4,
  145. 'image'=>$image,
  146. 'images'=>$images,
  147. 'updatetime'=>$time
  148. ];
  149. if (!empty($post_array['effect_city'])){
  150. $date['effect_city']=$post_array['effect_city'];
  151. }
  152. ShopUser::where(['mid'=>$userId])->update($date);
  153. $image=str_replace(config('site.siteUrl').'/',"/",$get_is['image']);//商品图片
  154. $images=str_replace(config('site.siteUrl').'/',"/",$get_is['images']);//商品图片
  155. $image=str_replace(config('site.siteUrl'),"/",$image);//商品图片
  156. $images=str_replace(config('site.siteUrl'),"/",$images);//商品图片
  157. $insert=[
  158. 'suser_id'=>$get_is['id'],
  159. 'shopname'=>$get_is['shopname'],
  160. 'name'=>$get_is['name'],
  161. 'phone'=>$get_is['phone'],
  162. 'city'=>$get_is['city'],
  163. 'description'=>$get_is['description'],
  164. 'effect_city'=> $get_is['effect_city'],
  165. 'address'=>$get_is['address'],
  166. 'status'=>$get_is['status'],
  167. 'image'=>$image,
  168. 'images'=>implode(',',$images),
  169. 'updatetime'=>$time,
  170. 'createtime'=>$time
  171. ];
  172. ShopUserOld::insert($insert);
  173. // StoreProduct::where('suser_id',$shop_user_id)->update(['is_show'=>0]);
  174. $this->result('申请已经重新提交,等待审核', $shop_user_id, 1);
  175. }
  176. }else{
  177. $this->result('您提交的资料审核失败,请重新修改',$get_is,'102');
  178. }
  179. }else{
  180. $this->result('您不是商家,请先去申请入驻');
  181. }
  182. }
  183. /**
  184. * 商品列表
  185. *
  186. * @ApiTitle (商品列表)
  187. * @ApiSummary (商品列表)
  188. * @ApiMethod (POST)
  189. * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
  190. * @ApiRoute (/api/shop/store_list)
  191. * @ApiParams (name="user_id", type="int", required=true, description="用户user_id")
  192. * @ApiParams (name="suser_id", type="int", required=true, description="商家id")
  193. */
  194. public function store_list(){
  195. $userId = $this->request->post('user_id');
  196. $suser_id= $this->request->post('suser_id');
  197. $search = $this->request->post('search');
  198. $cate_id = $this->request->post('cate_id');//分类id
  199. $where['is_del']=array('eq',0);
  200. if (!empty($suser_id)){
  201. $where['suser_id']=$suser_id;
  202. }
  203. if (!empty($search)){
  204. $where['store_name']=array('like','%'.$search.'%');
  205. }
  206. if (!empty($cate_id)){
  207. $where['cate_id']=$cate_id;
  208. }
  209. $list=StoreProduct::where($where)->field('id,slider_image,image,store_name,deposit_price,price,false as shop_show,cate_top_id ')->order('id desc')->select();
  210. foreach ($list as $k=>$v){
  211. $v['shop_show']=false;
  212. }
  213. $this->result('success', $list, 1);
  214. }
  215. //获取筛选条件
  216. public function attribute(){
  217. $cate_top_id = $this->request->post('cate_top_id');
  218. if (empty($cate_top_id)){
  219. $cate_top_id='0';
  220. }
  221. if ($cate_top_id=='17'){
  222. $whereArr['cate_top_id'] = array('in',['0','17']);
  223. }
  224. if ($cate_top_id=='18'){
  225. $whereArr['cate_top_id'] = array('in',['0','18']);
  226. }
  227. $whereArr['pid'] = array('eq',0);
  228. $whereArr['id'] = array('neq','4');
  229. $list = Attribute::where('status',1)
  230. ->where($whereArr)
  231. ->with('attlist')
  232. ->order('weigh desc,id desc')
  233. ->select();
  234. $this->result('SUCCESS', $list, 1);
  235. }
  236. //获取标签
  237. public function label(){
  238. $cate_top_id = $this->request->post('cate_top_id');
  239. if (empty($cate_top_id)){
  240. $cate_top_id='0';
  241. }
  242. if ($cate_top_id=='17'){
  243. $whereArr['cate_top_id'] = array('in',['0','17']);
  244. }
  245. if ($cate_top_id=='18'){
  246. $whereArr['cate_top_id'] = array('in',['0','18']);
  247. }
  248. if ($cate_top_id=='15'){
  249. $whereArr['cate_top_id'] = array('in',['0','15']);
  250. }
  251. $list = Label::where('status',1)
  252. ->field('id,name')
  253. ->order('weigh desc,id desc')
  254. ->select();
  255. $this->result('SUCCESS', $list, 1);
  256. }
  257. //获取筛选条件---型号
  258. public function attribute_xh(){
  259. $pid = $this->request->post('pid');
  260. $whereArr['pid'] = array('eq',$pid);
  261. $list = Attribute::where('status',1)
  262. ->where($whereArr)
  263. ->order('weigh desc,id desc')
  264. ->select();
  265. $this->result('SUCCESS', $list, 1);
  266. }
  267. /**
  268. * 商品添加
  269. *
  270. * @ApiTitle (商品添加)
  271. * @ApiSummary (商品添加)
  272. * @ApiMethod (POST)
  273. * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
  274. * @ApiRoute (/api/shop/store_add)
  275. * @ApiParams (name="user_id", type="int", required=true, description="用户user_id")
  276. * @ApiParams (name="type", type="int", required=true, description="1添加 2修改")
  277. * @ApiParams (name="store_id", type="int", required=true, description="商品id")
  278. */
  279. public function store_add(){
  280. $userId = $this->request->post('user_id');
  281. $type = $this->request->post('type');
  282. $store_id = $this->request->post('store_id');
  283. if ($type==2 && empty($store_id)){
  284. $this->result('系统错误,刷新重试');
  285. }
  286. $get_is=ShopUser::where(['mid'=>$userId])->find();
  287. if(!empty($get_is)){
  288. if($get_is['status']!='1'){
  289. $this->result('您提交的信息正在审核,现在无法发布商品');
  290. }else{
  291. if (empty($type)){
  292. $type=1;
  293. }
  294. $time=time();
  295. $post=$this->request->post('',null,null);
  296. $insert['car_number']=mt_rand('1000000','9999999');
  297. $insert['suser_id']=$post['suser_id'];//商家id
  298. $insert['store_name']=$post['store_name'];//商品名称
  299. $insert['store_info']=$post['store_info'];//商品简介
  300. // if ($post['cate_top_id']=='14') {
  301. // $insert['car_info'] = $post['car_info'];//车况
  302. // }
  303. $image=str_replace(config('site.siteUrl'),"/",$post['image']);//商品图片
  304. $slider_image=str_replace(config('site.siteUrl'),"/",$post['slider_image']);//商品图片
  305. $mp4=str_replace(config('site.siteUrl'),"/",$post['mp4']);//商品图片
  306. //
  307. // $image=str_replace('http://car.xoxoso.com/'.'/',"/",$image);//商品图片
  308. // $slider_image=str_replace('http://car.xoxoso.com/'.'/',"/",$slider_image);//商品图片
  309. // $mp4=str_replace('http://car.xoxoso.com/'.'/',"/",$mp4);//商品图片
  310. $insert['image']=str_replace('//u',"/u",$image);//商品图片
  311. $insert['slider_image']=str_replace('//u',"/u",$slider_image);//商品图片
  312. $insert['mp4']=str_replace('//u'.'/',"/u",$mp4);//视频
  313. $insert['cate_id']=$post['cate_id'];//商品分类
  314. $insert['cate_top_id']=$post['cate_top_id'];//商品上级分类
  315. $insert['one_commission']=empty($post['one_commission'])?'0':$post['one_commission'];;//商品一级分销比例
  316. $insert['two_commission']=empty($post['two_commission'])?'0':$post['two_commission'];;//商品二级分销比例
  317. if (($insert['one_commission']+ $insert['two_commission'])>=100){
  318. $this->result('佣金比例最高100');
  319. }
  320. $insert['price']=$post['price'];//商品价格
  321. $insert['deposit_price']=$post['deposit_price'];//商品定金
  322. $insert['special_price']=$post['special_price'];//商品市场价
  323. $insert['stock']=$post['stock'];//商品库存
  324. $insert['is_show']=$post['is_show'];//上下架状态 0 下架 1上架
  325. $insert['is_seckill']=empty($post['is_seckill'])?'0':$post['is_seckill'];//上下架状态 0 下架 1上架
  326. $insert['description']=$post['description'];//商品描述
  327. $insert['feight_id']=$post['feight_id'];//邮费id
  328. $insert['updatetime']=$time;//修改时间
  329. $label=$this->request->post('label');
  330. if (!empty($label)){
  331. $insert['label']=$label;//标签
  332. }
  333. $car_start_date=$this->request->post('car_start_date');
  334. if (!empty($car_start_date)){
  335. $insert['car_start_date']=$car_start_date;//上牌日期
  336. }
  337. $car_distance=$this->request->post('car_distance');
  338. if (!empty($car_distance)){
  339. $insert['car_distance']=$car_distance;//标签
  340. }
  341. if ($type==1){
  342. $insert['createtime']=$time;
  343. if(StoreProduct::insert($insert)){ //添加数据
  344. $bid = StoreProduct::getLastInsID(); //成功后跳转界面
  345. $insert_seckill['store_id']=$bid;
  346. $insert_seckill['sort']='1';
  347. $insert_seckill['is_hot']='0';
  348. $insert_seckill['sales']='0';
  349. $insert_seckill['add_time']=time();
  350. $insert_seckill['price']=empty($post['seckill_price'])?date('Y-m-d'):$post['seckill_price'];
  351. $insert_seckill['stock']=empty($post['seckill_stock'])?'0':$post['seckill_stock'];
  352. $insert_seckill['start_time']=empty($post['seckill_start_time'])?date('Y-m-d'):$post['seckill_start_time'];
  353. $insert_seckill['time_id']=empty($post['seckill_time_id'])?'0':$post['seckill_time_id'];
  354. if (empty($post['is_seckill'])){
  355. $insert_seckill['is_show']='0';
  356. }else{
  357. $insert_seckill['is_show']='1';
  358. }
  359. StoreSeckill::insert($insert_seckill);
  360. if ($post['cate_top_id']=='14'){
  361. if (!empty($post['attribute'])){
  362. $attribute=$post['attribute'];
  363. $attribute_array=explode(',',$attribute);
  364. $insert_attr['suser_id']=$post['suser_id'];//商家id
  365. $insert_attr['pro_id']=$bid;
  366. foreach ($attribute_array as $k=>$v){
  367. $a=explode(':',$v);
  368. if (!empty($a)){
  369. $insert_attr['attribute_id']=$a['0'];
  370. if (empty($a['1'])){
  371. $insert_attr['attribute_list_id']=0;
  372. $insert_attr['attribute_list_value']=$a['2'];
  373. }else{
  374. $insert_attr['attribute_list_id']=$a['1'];
  375. $insert_attr['attribute_list_value']=$a['2'];
  376. }
  377. $insert_attr['createtime']=$insert_attr['updatetime']=time();
  378. StoreProductAttribute::insert($insert_attr);
  379. if ($a['0']==4 && empty($insert['store_name'])){
  380. $get_a = Attribute::where('id',$a['1'])->field('name')->find();
  381. if (!empty($a['2'])){
  382. $get_b = Attribute::where('id',$a['2'])->field('name')->find();
  383. $store_name=$get_a['name'].' '.$get_b['name'];
  384. }else{
  385. $store_name=$get_a['name'];
  386. }
  387. $save = StoreProduct::where('id', $bid)
  388. ->update(['store_name'=>$store_name]);
  389. }
  390. }
  391. }
  392. }
  393. }
  394. $this->result('SUCCESS', $bid, 1);
  395. }else{
  396. $this->result('发布失败,稍后重试');
  397. }
  398. }else{
  399. $save = StoreProduct::where('id', $store_id)
  400. ->update($insert);
  401. $insert_seckill['price']=empty($post['seckill_price'])?date('Y-m-d'):$post['seckill_price'];
  402. $insert_seckill['stock']=empty($post['seckill_stock'])?'0':$post['seckill_stock'];
  403. $insert_seckill['start_time']=empty($post['seckill_start_time'])?date('Y-m-d'):$post['seckill_start_time'];
  404. $insert_seckill['time_id']=empty($post['seckill_time_id'])?'0':$post['seckill_time_id'];
  405. if (empty($post['is_seckill'])){
  406. $insert_seckill['is_show']='0';
  407. }else{
  408. $insert_seckill['is_show']='1';
  409. }
  410. $get_seck= StoreSeckill::where('store_id', $store_id)->find();
  411. if (empty($get_seck)){
  412. $insert_seckill['store_id']=$store_id;
  413. $insert_seckill['sort']='1';
  414. $insert_seckill['is_hot']='0';
  415. $insert_seckill['sales']='0';
  416. $insert_seckill['add_time']=time();
  417. StoreSeckill::insert($insert_seckill);
  418. }else{
  419. StoreSeckill::where('store_id', $store_id)->update($insert_seckill);
  420. }
  421. if ($post['cate_top_id']=='14') {
  422. $attribute=$post['attribute'];
  423. $attribute_array=explode(',',$attribute);
  424. $insert_attr['suser_id']=$post['suser_id'];//商家id
  425. $insert_attr['pro_id']=$store_id;
  426. StoreProductAttribute::where('pro_id',$store_id)->delete();
  427. if (!empty($attribute_array)){
  428. foreach ($attribute_array as $k=>$v){
  429. $a=explode(':',$v);
  430. if (!empty($a)){
  431. $insert_attr['attribute_id']=$a['0'];
  432. if (empty($a['1'])){
  433. $insert_attr['attribute_list_id']=0;
  434. $insert_attr['attribute_list_value']=$a['2'];
  435. }else{
  436. $insert_attr['attribute_list_id']=$a['1'];
  437. $insert_attr['attribute_list_value']=$a['2'];
  438. }
  439. $insert_attr['createtime']=$insert_attr['updatetime']=time();
  440. StoreProductAttribute::insert($insert_attr);
  441. if ($a['0']==4 && empty($insert['store_name'])){
  442. $get_a = Attribute::where('id',$a['1'])->field('name')->find();
  443. if (!empty($a['2'])){
  444. $get_b = Attribute::where('id',$a['2'])->field('name')->find();
  445. $store_name=$get_a['name'].' '.$get_b['name'];
  446. }else{
  447. $store_name=$get_a['name'];
  448. }
  449. $save = StoreProduct::where('id', $store_id)
  450. ->update(['store_name'=>$store_name]);
  451. }
  452. }
  453. }
  454. }
  455. }
  456. $this->result('SUCCESS'.$post['is_seckill'], $store_id, 1);
  457. }
  458. }
  459. }else{
  460. $this->result('您不是商家,无法发布商品');
  461. }
  462. }
  463. /**
  464. * 商品详情
  465. *
  466. * @ApiTitle (商品详情)
  467. * @ApiSummary (商品详情)
  468. * @ApiMethod (POST)
  469. * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
  470. * @ApiRoute (/api/shop/store_info)
  471. * @ApiParams (name="suser_id", type="int", required=true, description="suser_id")
  472. * @ApiParams (name="store_id", type="int", required=true, description="商品id")//
  473. */
  474. public function store_info(){
  475. $store_id = $this->request->post('store_id');
  476. $suser_id = $this->request->post('suser_id');
  477. if (empty($store_id)){
  478. $this->result('系统错误,刷新重试');
  479. }
  480. $where['id']=$store_id;
  481. $where['suser_id']=$suser_id;
  482. $where['is_del']=array('eq',0);
  483. $get=StoreProduct::where($where)->with(['storeseckill','storeseckill.seckilltime','attribute'])->find();
  484. if (empty($get)){
  485. $this->result('商品不存在');
  486. }
  487. $list = Attribute::where('status',1)
  488. ->where(['pid'=>0])
  489. ->with('attlist')
  490. ->order('weigh desc,id desc')
  491. ->select();
  492. if (!empty($list)){
  493. $pro_list['id']='';
  494. $pro_list['attribute_list_id']='';
  495. $pro_list['attribute_list_value']='';
  496. foreach ($list as $k=>$v){
  497. $pro=StoreProductAttribute::where('pro_id',$store_id)->with('attribute')->where('attribute_id',$v['id'])->find();
  498. if (!empty($pro)){
  499. $list[$k]['pro']=$pro;
  500. }else{
  501. $list[$k]['pro']=$pro_list;
  502. }
  503. }
  504. }
  505. $get['attribute_list']=$list;
  506. $label_array=[];
  507. if (!empty($get['label'])){
  508. foreach ($get['label'] as $k=>$v){
  509. $list = Label::where('id',$v)
  510. ->field('id,name')
  511. ->find();
  512. $label_array[]=$list;
  513. }
  514. }
  515. if (!empty($get['attribute'])){
  516. foreach ($get['attribute'] as $k=>$v){
  517. if ($v['attribute_id']=='4'){
  518. if (!empty($v['attribute_list_value'])){
  519. $a = Attribute::where(['id'=>$v['attribute_list_value']])
  520. ->find();
  521. $get['xinghao']=$a;
  522. }
  523. }
  524. }
  525. }
  526. $get['label']=$label_array;
  527. $this->result('SUCCESS',$get,1);
  528. }
  529. /**
  530. * 商品删除
  531. *
  532. * @ApiTitle (商品删除)
  533. * @ApiSummary (商品删除)
  534. * @ApiMethod (POST)
  535. * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
  536. * @ApiRoute (/api/shop/store_del)
  537. * @ApiParams (name="suser_id", type="int", required=true, description="suser_id")
  538. * @ApiParams (name="store_id", type="int", required=true, description="商品id")//
  539. */
  540. public function store_del(){
  541. $store_id = $this->request->post('store_id');
  542. $suser_id = $this->request->post('suser_id');
  543. if (empty($store_id)){
  544. $this->result('系统错误,刷新重试');
  545. }
  546. $where['id']=$store_id;
  547. $where['suser_id']=$suser_id;
  548. $where['is_del']=array('eq',0);
  549. $get=StoreProduct::where($where)->field('id')->find();
  550. if (empty($get)){
  551. $this->result('商品不存在');
  552. }
  553. $insert['is_del']=1;//修改时间
  554. $insert['updatetime']=time();//修改时间
  555. $save = StoreProduct::where('id', $store_id)
  556. ->update($insert);
  557. StoreSeckill::where('store_id', $store_id)
  558. ->update(['is_del'=>'1']);
  559. $this->result('SUCCESS', $store_id, 1);
  560. }
  561. /**
  562. * 订单列表
  563. *
  564. * @ApiTitle (订单列表)
  565. * @ApiSummary (订单列表)
  566. * @ApiMethod (POST)
  567. * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
  568. * @ApiRoute ( /api/shop/order_list)
  569. * @ApiParams (name="suser_id", type="int", required=true, description="suser_id")
  570. * @ApiParams (name="type", type="int", required=true, description="all 全部")订单状态(-1 : 申请退款 -2 : 退货成功 0:待付款,1:待发货(已付款);2:待收货(已发货);3:已收货(确认收货,待评价);4:已评价;-1:已退款)
  571. */
  572. public function order_list(){
  573. $suser_id = $this->request->post('suser_id');
  574. $search = $this->request->post('search');
  575. if (empty($suser_id)){
  576. $this->result('系统错误,刷新重试');
  577. }
  578. $type = $this->request->post('type');
  579. if (empty($type)){
  580. $type=0;
  581. }
  582. if (!empty($search)){
  583. $where['store_name']=array('like','%'.$search.'%');
  584. }
  585. if ($type==14){
  586. $where['cate_id']=14;//定金订单,是车辆的
  587. $where['status']=['in',['3','4']];
  588. }else{
  589. $where['cate_id']=15;
  590. if ($type=='1'){
  591. $where['status']=['eq','1'];
  592. }elseif($type=='2'){
  593. $where['status']=['eq','2'];
  594. }elseif($type=='3'){
  595. $where['status']=['in',['3','4']];
  596. }elseif($type=='-1'){
  597. $where['status']=['in',['-1','-2','-3','-4','-5']];
  598. }
  599. }
  600. $where['suser_id']=$suser_id;
  601. $where['is_del']=0;
  602. $where['is_system_del']=0;
  603. $get_order=StoreOrder::where($where)
  604. ->where('status','neq','9')
  605. ->with(['member','product'])
  606. ->field('id,order_id,total_price,total_num,freight_price,mid,suser_id,store_product_id,prepay_id,status,mark,delivery_id,delivery_name,commission_price')
  607. ->order('id','desc')
  608. ->select();
  609. $this->result('SUCCESS', $get_order, 1);
  610. }
  611. /**
  612. * 订单详情
  613. *
  614. * @ApiTitle (订单详情)
  615. * @ApiSummary (订单详情)
  616. * @ApiMethod (POST)
  617. * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
  618. * @ApiRoute (/api/shop/order_info)
  619. * @ApiParams (name="user_id", type="int", required=true, description="用户user_id")
  620. * @ApiParams (name="order_id", type="int", required=true, description="订单编号 id"
  621. */
  622. public function order_info(){
  623. $user_id = $this->request->post('user_id');
  624. $id = $this->request->post('order_id');
  625. $suser_id = $this->request->post('suser_id');
  626. // $where['mid']=$user_id;
  627. $where['id']=$id;
  628. $where['suser_id']=$suser_id;
  629. $where['is_del']=0;
  630. $where['is_system_del']=0;
  631. $get_order=StoreOrder::where($where)
  632. ->with(['product','express','refundexpress'])
  633. //->field('id,order_id,total_price,total_num,freight_price,mid,suser_id,store_product_id,prepay_id,type')
  634. ->find();
  635. if (empty($get_order)){
  636. $this->result('此订单已删除');
  637. }
  638. $this->result('success',$get_order,1);
  639. }
  640. /**
  641. * 订单发货
  642. * @ApiTitle (订单发货)
  643. * @ApiSummary (订单发货)
  644. * @ApiMethod (POST)
  645. * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
  646. * @ApiRoute (/api/shop/order_deliver)
  647. * @ApiParams (name="user_id", type="int", required=true, description="用户user_id")
  648. * @ApiParams (name="order_id", type="int", required=true, description="订单编号 id")
  649. */
  650. public function order_deliver(){
  651. $user_id = $this->request->post('user_id');
  652. $id = $this->request->post('order_id');
  653. $suser_id = $this->request->post('suser_id');
  654. $delivery_name = $this->request->post('delivery_name');
  655. $delivery_id = $this->request->post('delivery_id');
  656. // $where['mid']=$user_id;
  657. $where['suser_id']=$suser_id;
  658. $where['id']=$id;
  659. $where['is_del']=0;
  660. $where['is_system_del']=0;
  661. $where['status']=['in',['1','2','-3']];
  662. // dump($where);
  663. $get_order=StoreOrder::where($where)
  664. ->field('id,status,delivery_id')
  665. ->find();
  666. // echo $get_order->getLastSql();
  667. if (empty($get_order)){
  668. $this->result('此订单不能操作发货');
  669. }
  670. if (!empty($delivery_name) && !empty($delivery_id)){
  671. StoreOrder::where(['id' => $id])->update(['delivery_name'=>$delivery_name,'delivery_id'=>$delivery_id,'status'=>'2']);
  672. }
  673. $this->result('success',$get_order,1);
  674. }
  675. /**
  676. * 退款处理
  677. * @ApiTitle (退款处理)
  678. * @ApiSummary (退款处理)
  679. * @ApiMethod (POST)
  680. * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
  681. * @ApiRoute (/api/shop/order_refund)
  682. * @ApiParams (name="user_id", type="int", required=true, description="用户user_id")
  683. * @ApiParams (name="order_id", type="int", required=true, description="订单编号 id")
  684. */
  685. public function order_refund(){
  686. $user_id = $this->request->post('user_id');
  687. $id = $this->request->post('order_id');
  688. $suser_id = $this->request->post('suser_id');
  689. $refund_reason= $this->request->post('refund_reason');
  690. $refund_status = $this->request->post('refund_status');
  691. // $where['mid']=$user_id;
  692. $where['suser_id']=$suser_id;
  693. $where['id']=$id;
  694. $where['id']=$id;
  695. $where['is_del']=0;
  696. $where['is_system_del']=0;
  697. $where['status']=['in',['-1','-2','-3','-4']];
  698. $get_order=StoreOrder::where($where)
  699. ->field('id,status,refund_status,refund_type,order_id,pay_price,refund_price')
  700. ->find();
  701. if (empty($get_order)){
  702. $this->result('此订单不能再次进行退款操作');
  703. }
  704. if ($refund_status==1 || $refund_status==3){
  705. if ($get_order['refund_status'] !='4'){
  706. StoreOrder::where(['id' => $id])->update(['refund_status'=>$refund_status,'refund_reason'=>$refund_reason,'status'=>0-$refund_status]);
  707. $this->result('success',$get_order,1);
  708. }
  709. }elseif($refund_status==2){
  710. if ($get_order['refund_type']=='0'){
  711. if ($get_order['refund_status'] !='4'){
  712. StoreOrder::where(['id' => $id])->update(['refund_status'=>$refund_status,'refund_reason'=>$refund_reason,'status'=>0-$refund_status]);
  713. $this->result('success',$get_order,1);
  714. }
  715. }else{
  716. if ($get_order['refund_status'] !='5'){
  717. $reoderSn=$get_order['order_id'];//订单编号
  718. //获取支付金额
  719. $money =$get_order['pay_price'];
  720. $wx = new WxPay();//实例化微信支付控制器
  721. $body = '订单号' . $get_order['order_id'];//支付说明
  722. $out_trade_no = $reoderSn;//订单号
  723. $total_fee = $money * 100;//支付金额(乘以100)
  724. $refund_fee=$get_order['refund_price']*100;
  725. $order = $wx->wxrefund($out_trade_no,date('YmdHis').time(),$total_fee,$refund_fee);
  726. // dump($order);
  727. if(($order['return_code']=='SUCCESS') && ($order['result_code']=='SUCCESS')){
  728. StoreOrder::where(['id' => $id])->update(['refund_status'=>'5','refund_reason'=>$refund_reason,'status'=>'-5']);
  729. $this->result('success',$get_order,1);
  730. }else if(($order['return_code']=='FAIL') || $order['result_code']=='FAIL' ){
  731. $reason = (empty($order['err_code_des'])?$order['return_msg']:$order['err_code_des']);
  732. $this->result('退款失败',$reason);
  733. }else{
  734. $this->result('退款失败');
  735. }
  736. }
  737. }
  738. }elseif($refund_status=5){
  739. if ($get_order['refund_status'] !='5'){
  740. $reoderSn=$get_order['order_id'];//订单编号
  741. //获取支付金额
  742. $money =$get_order['pay_price'];
  743. $wx = new WxPay();//实例化微信支付控制器
  744. $body = '订单号' . $get_order['order_id'];//支付说明
  745. $out_trade_no = $reoderSn;//订单号
  746. $total_fee = $money * 100;//支付金额(乘以100)
  747. $refund_fee=$get_order['refund_price']*100;
  748. $order = $wx->wxrefund($out_trade_no,date('YmdHis').time(),$total_fee,$refund_fee);
  749. // dump($order);
  750. if(($order['return_code']=='SUCCESS') && ($order['result_code']=='SUCCESS')){
  751. StoreOrder::where(['id' => $id])->update(['refund_status'=>$refund_status,'refund_reason'=>$refund_reason,'status'=>0-$refund_status]);
  752. $this->result('success',$get_order,1);
  753. }else if(($order['return_code']=='FAIL') || $order['result_code']=='FAIL' ){
  754. $reason = (empty($order['err_code_des'])?$order['return_msg']:$order['err_code_des']);
  755. $this->result('退款失败',$reason);
  756. }else{
  757. $this->result('退款失败');
  758. }
  759. }
  760. $this->result('退款失败');
  761. }
  762. }
  763. /**
  764. * 订单评价
  765. * @ApiTitle (订单评价)
  766. * @ApiSummary (订单评价)
  767. * @ApiMethod (POST)
  768. * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
  769. * @ApiRoute (/api/shop/order_evaluate)
  770. * @ApiParams (name="user_id", type="int", required=true, description="用户user_id")
  771. * @ApiParams (name="order_id", type="int", required=true, description="订单编号 id")
  772. */
  773. public function order_evaluate(){
  774. $user_id = $this->request->post('user_id');
  775. $id = $this->request->post('order_id');
  776. $suser_id = $this->request->post('suser_id');
  777. $get= StoreEvaluate::where('order_id',$id)->with(['member','reply','shopuser'])->where('pid','0')->find();
  778. // $huifu=[];
  779. if (!empty($get)){
  780. $get['add_time']=$get['createtime'];
  781. // $huifu=StoreEvaluate::where('order_id',$id)->where('pid',$get['id'])->where('mid','0')->find();
  782. }
  783. // $get['huifu']=$huifu;
  784. $this->result('success',$get,1);
  785. }
  786. /**
  787. * 订单评价回复
  788. * @ApiTitle (订单评价回复)
  789. * @ApiSummary (订单评价回复)
  790. * @ApiMethod (POST)
  791. * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
  792. * @ApiRoute (/api/shop/order_evaluate_huifu)
  793. * @ApiParams (name="user_id", type="int", required=true, description="用户user_id")
  794. * @ApiParams (name="order_id", type="int", required=true, description="订单编号 id")
  795. */
  796. public function order_evaluate_huifu(){
  797. $user_id = $this->request->post('user_id');
  798. $id = $this->request->post('order_id');
  799. $evaluate_id = $this->request->post('evaluate_id');
  800. $content= $this->request->post('content');
  801. $get= StoreEvaluate::where('order_id',$id)->where('pid','0')->where('id',$evaluate_id)->find();
  802. StoreEvaluate::where('order_id',$id)->where('pid',$get['id'])->delete();
  803. $insert['mid']='';
  804. $insert['store_id']=$get['store_id'];
  805. $insert['order_id']=$get['order_id'];
  806. $insert['suser_id']=$get['suser_id'];
  807. $insert['xj']='0';
  808. $insert['content']=$content;
  809. $insert['pid']=$get['id'];
  810. $insert['status']=1;
  811. $insert['createtime']=$insert['updatetime']=time();
  812. StoreEvaluate::insert($insert);
  813. $this->result('success',$get,1);
  814. }
  815. /**
  816. * 账单列表
  817. *
  818. * @ApiTitle (账单列表)
  819. * @ApiSummary (账单列表)
  820. * @ApiMethod (POST)
  821. * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
  822. * @ApiRoute ( /api/shop/take_order_list)
  823. * @ApiParams (name="suser_id", type="int", required=true, description="suser_id")
  824. * @ApiParams (name="mouth", type="int", required=true, description="本月")
  825. */
  826. function getthemonth($date)
  827. {
  828. $firstday = date('Y-m-01', strtotime($date));
  829. $lastday = date('Y-m-d', strtotime("$firstday +1 month -1 day"));
  830. return array($firstday, $lastday);
  831. }
  832. public function take_order_list(){
  833. $suser_id = $this->request->post('suser_id');
  834. if (empty($suser_id)){
  835. $this->result('系统错误,刷新重试');
  836. }
  837. $mouth = $this->request->post('mouth');
  838. $type= $this->request->post('type');
  839. if (empty($mouth) || $mouth=='本月'){
  840. $mouth=date('Y-m');
  841. }
  842. if ($type=='年'){
  843. $start=$mouth.'-01-01';
  844. $end=$mouth.'-12-31';
  845. $s= strtotime($start.'00:00:00');
  846. $e=strtotime($end.'23:59:59');
  847. $where['take_time'] = array('between',$s.",".$e);
  848. }
  849. if ($type=='月'){
  850. $time_array=$this->getthemonth($mouth);
  851. $start=$time_array['0'];
  852. $end=$time_array['1'];
  853. $s= strtotime($start.'00:00:00');
  854. $e=strtotime($end.'23:59:59');
  855. $where['take_time'] = array('between',$s.",".$e);
  856. }
  857. if ($type=='日'){
  858. $s= strtotime($mouth.'00:00:00');
  859. $e=strtotime($mouth.'23:59:59');
  860. $where['take_time'] = array('between',$s.",".$e);
  861. }
  862. $where['suser_id']=$suser_id;
  863. $where['status']=['in',['3','4']];
  864. $where1['take_time']=['neq',''];
  865. $get_order=StoreOrder::where($where)
  866. ->with(['member'])
  867. ->where($where1)
  868. ->field('id,order_id,take_time,mid,suser_id,pay_price,commission_price')
  869. ->order('take_time','desc')
  870. ->select();
  871. $get_num=StoreOrder::where($where)
  872. ->where($where1)
  873. ->field('sum(pay_price-commission_price) as order_price,count(*) as order_num')
  874. ->find();
  875. foreach ($get_order as $k=>$v){
  876. $get_order[$k]['take_date']=date('Y-m-d',$v['take_time']);
  877. }
  878. $this->result('SUCCESS', ['list'=>$get_order,'num'=>$get_num], 1);
  879. }
  880. }