Goods.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. <?php
  2. namespace app\data\controller\api\business;
  3. use app\data\model\ShopGoods;
  4. use app\data\model\ShopGoodsCate;
  5. use app\data\model\ShopGoodsItem;
  6. use think\admin\Controller;
  7. use hg\apidoc\annotation\Title;
  8. use hg\apidoc\annotation\Method;
  9. use hg\apidoc\annotation\Param;
  10. use hg\apidoc\annotation\Returned;
  11. use think\admin\extend\CodeExtend;
  12. use think\db\Where;
  13. use think\exception\ErrorException;
  14. use think\facade\Db;
  15. /**
  16. * 商家商品数据接口
  17. */
  18. class Goods extends Controller
  19. {
  20. public function goods_status()
  21. {
  22. $data = ShopGoods::mk()->where('status',1)->field('status,stock_total,id')->select();
  23. foreach ($data as &$v){
  24. if($v['stock_total']<=0){
  25. ShopGoods::mk()->where('id',$v['id'])->save(['status'=>2]);
  26. }
  27. }
  28. }
  29. /**
  30. * @Title ("商品分类")
  31. * @return void
  32. * @throws \think\db\exception\DataNotFoundException
  33. * @throws \think\db\exception\DbException
  34. * @throws \think\db\exception\ModelNotFoundException
  35. */
  36. public function getCate()
  37. {
  38. $data = ShopGoodsCate::treeData();
  39. foreach ($data as &$v){
  40. if(!isset($v['sub'])){
  41. $v['sub']=[];
  42. }
  43. }
  44. $this->success('获取分类成功',$data );
  45. }
  46. /**
  47. * @Title ("我的商品数据")
  48. * @Param ("name",desc="商品名称")
  49. * @Param ("status",desc="1售卖中 0已下架 2已售罄 传空全部")
  50. * @Param ("cateids",desc="分类id 1,2")
  51. * @return void
  52. * @throws \think\db\exception\DataNotFoundException
  53. * @throws \think\db\exception\DbException
  54. * @throws \think\db\exception\ModelNotFoundException
  55. */
  56. public function goods_list(){
  57. $admin_id = $this->uuid();
  58. $count = ['全部','售卖中','已下架','已售罄'];
  59. foreach ($count as &$v){
  60. switch ($v){
  61. case '全部':
  62. $where =[];
  63. break;
  64. case '售卖中':
  65. $where['status']=1;
  66. break;
  67. case '已下架':
  68. $where['status']=0;
  69. break;
  70. case '已售罄':
  71. $where['status']=2;
  72. }
  73. $v=ShopGoods::mk()->where('admin_id',$admin_id->id)->where('deleted',0)->where($where)->count();
  74. }
  75. $cateids = input('cateids');
  76. $ids =[];
  77. if(!empty($cateids)){
  78. $ids[]= ['cateids','find in set' ,$cateids];
  79. }
  80. $query = ShopGoods::mQuery()->like('name')->equal('code,status');
  81. $result = $query->where('admin_id',$admin_id->id)->where($ids)->where('deleted',0)->order('id desc')->page(true, false, false, 10);
  82. foreach ($result['list'] as &$v){
  83. if($v['stock_total'] == 0){
  84. ShopGoods::mk()->where('id',$v['id'])->save(['status'=>2]);
  85. }
  86. // $v['cover'] = explode('|',$v['cover']);
  87. if($index = strpos($v['cover'],"|")){
  88. $v['cover'] = substr($v['cover'],0,$index);
  89. }
  90. $v['cover'] = substr($v['cover'],0);
  91. }
  92. $data['count'] =$count;
  93. $data['list']=$result;
  94. $this->success('我的商品列表',$data);
  95. }
  96. /**
  97. * @Title ("添加商品")
  98. * @Param ("name",desc="商品名称")
  99. * @Param ("cateids",desc="商品分类")
  100. * @Param ("cover",desc="商品封面图")
  101. * @Param ("slider",desc="商品轮播图")
  102. * @Param ("content",desc="商品详情")
  103. * @Param ("stock_total",desc="商品库存")
  104. * @Param ("price_selling",desc="商品销售价")
  105. * @Param ("status",desc="1在售 0下架")
  106. * @Param ("spec",desc="规格 [{name:默认分组,list:[{name:默认规格,check:true,show:true,group:默认分组}]}]")
  107. * @Param ("items",desc="商品规格信息 [ goods_spec 规格名 颜色::红色;;大小::1','stock_total 库存','price_selling 售价','sku_image 图片''status 1在售 2 下架']")
  108. */
  109. public function goods_add(){
  110. $admin_id = $this->uuid();
  111. $data = $this->_vali(
  112. [
  113. 'name.require'=>'商品名称不能为空',
  114. 'cateids.require'=>'商品分类不能不选',
  115. 'cover.require'=>'商品封面不能为空',
  116. // 'slider.require'=>'商品轮播图不能为空',
  117. // 'content.require'=>'商品详情不能为空',
  118. 'stock_total.require'=>'商品库存不能为空',
  119. 'price_selling.require'=>'商品销售价格不能为空',
  120. 'spec.require'=>'商品规格参数',
  121. 'items.require'=>'商品规格不能为空',
  122. 'status.require'=>'商品状态不能为空',
  123. ]
  124. );
  125. $goods_data= [
  126. 'name'=>$data['name'],
  127. 'cateids'=>$data['cateids'],
  128. 'cover'=>$data['cover'],
  129. // 'slider'=>$data['slider'],
  130. // 'content'=>$data['content'],
  131. 'stock_total'=>$data['stock_total'],
  132. 'price_selling'=>$data['price_selling'],
  133. 'price_market'=>$data['price_selling'],
  134. 'code'=>CodeExtend::uniqidNumber(20, 'G'),
  135. 'data_specs'=>$data['spec'],
  136. 'data_items'=>$data['items'],
  137. 'status'=>$data['status'],
  138. 'create_at'=>date('Y-m-d H:i:s'),
  139. 'admin_id'=>$admin_id->id,
  140. ];
  141. input('slider')??$goods_data['slider']=input('slider');
  142. input('content')??$goods_data['content']=input('content');
  143. Db::startTrans();
  144. try {
  145. ShopGoods::mk()->insertGetId($goods_data);
  146. $data['items']=json_decode($data['items'],true);
  147. foreach ($data['items'] as &$v){
  148. $item_data = [
  149. 'goods_sku'=>CodeExtend::uniqidNumber(12, 'S'),
  150. 'goods_code'=>$goods_data['code'],
  151. 'goods_spec'=>$v['goods_spec'],
  152. 'stock_total'=>$v['stock_total'],
  153. 'price_selling'=>$v['price_selling'],
  154. 'price_market'=>$v['price_selling'],
  155. 'show_image'=>$v['sku_image'] ? $v['sku_image'] : $data['cover'],
  156. 'create_at'=>date('Y-m-d H:i:s'),
  157. 'status'=>$v['status'],
  158. 'admin_id'=>$admin_id->id
  159. ];
  160. ShopGoodsItem::mk()->insertGetId($item_data);
  161. }
  162. Db::commit();
  163. $this->success('商品数据入库成功!');
  164. }catch (ErrorException $e){
  165. Db::rollback();
  166. $this->error('商品数据入库失败!');
  167. }
  168. }
  169. /**
  170. * @Title ("商品修改")
  171. * @Param ("goods_id",desc="商品id")
  172. * @Param ("name",desc="商品名称")
  173. * @Param ("cateids",desc="商品分类")
  174. * @Param ("cover",desc="商品封面图")
  175. * @Param ("slider",desc="商品轮播图")
  176. * @Param ("content",desc="商品详情")
  177. * @Param ("stock_total",desc="商品库存")
  178. * @Param ("price_selling",desc="商品销售价")
  179. * @Param ("status",desc="商品状态 1上架 0下架")
  180. * @Param ("items",desc="商品规格信息 ['id sku的id' , goods_spec 规格名 颜色::红色;;大小::1','stock_total 库存','price_selling 售价','sku_image 图片''status 1在售 2 下架']")
  181. * @return void
  182. *
  183. */
  184. public function goods_edit(){
  185. $goods_id = input('goods_id');
  186. $goods = ShopGoods::mk()->where('id',$goods_id)->find();
  187. // if($goods['examine'] == 0)$this->error('商品审核中暂不支持编辑');
  188. $data = $this->_vali(
  189. [
  190. 'name.require'=>'商品名称不能为空',
  191. 'cateids.require'=>'商品分类不能不选',
  192. 'cover.require'=>'商品封面不能为空',
  193. // 'slider.require'=>'商品轮播图不能为空',
  194. 'content.require'=>'商品详情不能为空',
  195. 'stock_total.require'=>'商品库存不能为空',
  196. 'price_selling.require'=>'商品销售价格不能为空',
  197. 'items.require'=>'商品规格不能为空',
  198. 'status.require'=>'商品状态不能为空'
  199. ]
  200. );
  201. $goods_data= [
  202. 'name'=>$data['name'],
  203. 'cateids'=>$data['cateids'],
  204. 'cover'=>$data['cover'],
  205. // 'slider'=>$data['slider'],
  206. 'content'=>$data['content'],
  207. 'stock_total'=>$data['stock_total'],
  208. 'price_selling'=>$data['price_selling'],
  209. 'data_items'=>$data['items'],
  210. 'status'=>$data['status'],
  211. 'create_at'=>date('Y-m-d H:i:s'),
  212. 'examine'=>0,
  213. ];
  214. input('slider')?$goods_data['slider']=input('slider'):'';
  215. Db::startTrans();
  216. try {
  217. ShopGoods::mk()->where('id',$goods_id)->save($goods_data);
  218. $data['items']=json_decode($data['items'],true);
  219. foreach ($data['items']as &$v){
  220. $item_data = [
  221. 'goods_spec'=>$v['goods_spec'],
  222. 'stock_total'=>$v['stock_total'],
  223. 'price_selling'=>$v['price_selling'],
  224. 'price_market'=>$v['price_selling'],
  225. 'show_image'=>$v['sku_image'],
  226. 'status'=>$v['status'],
  227. 'create_at'=>date('Y-m-d H:i:s'),
  228. ];
  229. ShopGoodsItem::mk()->where('id',$v['id'])->save($item_data);
  230. }
  231. Db::commit();
  232. $this->success('商品数据编辑成功!');
  233. }catch (ErrorException $e){
  234. Db::rollback();
  235. $this->success('商品数据编辑失败!'.$e);
  236. }
  237. }
  238. /**
  239. * @Title ("删除商品")
  240. * @Method ("post")
  241. * @Param ("goods_id",desc="商品id")
  242. * @return void
  243. */
  244. public function del_goods(){
  245. $admin = $this->uuid();
  246. $goods_id=input('goods_id');
  247. ShopGoods::mk()->where('admin_id',$admin->id)->where('id',$goods_id)->save(['deleted'=>1]);
  248. $this->success('商品已删除');
  249. }
  250. /**
  251. * @Title ("商品详情")
  252. * @Method ("post")
  253. * @Param ("goods_id",desc="商品id")
  254. */
  255. public function goods_details(){
  256. $goods_id = input('goods_id');
  257. $details = ShopGoods::mk()->alias('goods')
  258. ->where('goods.id',$goods_id)
  259. ->find();
  260. $details['item']=ShopGoodsItem::mk()->where('goods_code', $details['code'])->select();
  261. $details['cate_name']=ShopGoodsCate::mk()->whereIn('id',$details['cateids'])->field('name')->select();
  262. $this->success('商品详情',$details);
  263. }
  264. /**
  265. * @Title ("商品下架")
  266. * @Method ("post")
  267. * @Param ("goods_id",desc="商品id")
  268. * @return void
  269. */
  270. public function lower(){
  271. $admin = $this->uuid();
  272. $data = $this->_vali(['goods_id.require'=>'请选择要处理的商品']);
  273. ShopGoods::mk()->where('admin_id',$admin->id)->whereIn('id',$data['goods_id'])->save(['status'=>0]);
  274. $this->success('商品已下架成功');
  275. }
  276. /**
  277. * @Title ("商品上架")
  278. * @Method ("post")
  279. * @Param ("goods_id",desc="商品id")
  280. * @return void
  281. */
  282. public function shelves(){
  283. $admin = $this->uuid();
  284. $data = $this->_vali(['goods_id.require'=>'请选择要处理的商品']);
  285. ShopGoods::mk()->where('admin_id',$admin->id)->whereIn('id',$data['goods_id'])->save(['status'=>1]);
  286. $this->success('商品已上架成功');
  287. }
  288. public function uuid(){
  289. $purchase_model = new Common($this->app);
  290. $uuid = $purchase_model->uuid();
  291. return $uuid;
  292. }
  293. }