Goods.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  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. }
  87. $data['count'] =$count;
  88. $data['list']=$result;
  89. $this->success('我的商品列表',$data);
  90. }
  91. /**
  92. * @Title ("添加商品")
  93. * @Param ("name",desc="商品名称")
  94. * @Param ("cateids",desc="商品分类")
  95. * @Param ("cover",desc="商品封面图")
  96. * @Param ("slider",desc="商品轮播图")
  97. * @Param ("content",desc="商品详情")
  98. * @Param ("stock_total",desc="商品库存")
  99. * @Param ("price_selling",desc="商品销售价")
  100. * @Param ("status",desc="1在售 0下架")
  101. * @Param ("spec",desc="规格 [{name:默认分组,list:[{name:默认规格,check:true,show:true,group:默认分组}]}]")
  102. * @Param ("items",desc="商品规格信息 [ goods_spec 规格名 颜色::红色;;大小::1','stock_total 库存','price_selling 售价','sku_image 图片''status 1在售 2 下架']")
  103. */
  104. public function goods_add(){
  105. $admin_id = $this->uuid();
  106. $data = $this->_vali(
  107. [
  108. 'name.require'=>'商品名称不能为空',
  109. 'cateids.require'=>'商品分类不能不选',
  110. 'cover.require'=>'商品封面不能为空',
  111. 'slider.require'=>'商品轮播图不能为空',
  112. 'content.require'=>'商品详情不能为空',
  113. 'stock_total.require'=>'商品库存不能为空',
  114. 'price_selling.require'=>'商品销售价格不能为空',
  115. 'spec.require'=>'商品规格参数',
  116. 'items.require'=>'商品规格不能为空',
  117. 'status.require'=>'商品状态不能为空',
  118. ]
  119. );
  120. $goods_data= [
  121. 'name'=>$data['name'],
  122. 'cateids'=>$data['cateids'],
  123. 'cover'=>$data['cover'],
  124. 'slider'=>$data['slider'],
  125. 'content'=>$data['content'],
  126. 'stock_total'=>$data['stock_total'],
  127. 'price_selling'=>$data['price_selling'],
  128. 'price_market'=>$data['price_selling'],
  129. 'code'=>CodeExtend::uniqidNumber(20, 'G'),
  130. 'data_specs'=>$data['spec'],
  131. 'data_items'=>$data['items'],
  132. 'status'=>$data['status'],
  133. 'create_at'=>date('Y-m-d H:i:s'),
  134. 'admin_id'=>$admin_id->id,
  135. ];
  136. Db::startTrans();
  137. try {
  138. ShopGoods::mk()->insertGetId($goods_data);
  139. $data['items']=json_decode($data['items'],true);
  140. foreach ($data['items'] as &$v){
  141. $item_data = [
  142. 'goods_sku'=>CodeExtend::uniqidNumber(12, 'S'),
  143. 'goods_code'=>$goods_data['code'],
  144. 'goods_spec'=>$v['goods_spec'],
  145. 'stock_total'=>$v['stock_total'],
  146. 'price_selling'=>$v['price_selling'],
  147. 'price_market'=>$v['price_selling'],
  148. 'show_image'=>$v['sku_image'] ? $v['sku_image'] : $data['cover'],
  149. 'create_at'=>date('Y-m-d H:i:s'),
  150. 'status'=>$v['status'],
  151. 'admin_id'=>$admin_id->id
  152. ];
  153. ShopGoodsItem::mk()->insertGetId($item_data);
  154. }
  155. Db::commit();
  156. $this->success('商品数据入库成功!');
  157. }catch (ErrorException $e){
  158. Db::rollback();
  159. $this->error('商品数据入库失败!');
  160. }
  161. }
  162. /**
  163. * @Title ("商品修改")
  164. * @Param ("goods_id",desc="商品id")
  165. * @Param ("name",desc="商品名称")
  166. * @Param ("cateids",desc="商品分类")
  167. * @Param ("cover",desc="商品封面图")
  168. * @Param ("slider",desc="商品轮播图")
  169. * @Param ("content",desc="商品详情")
  170. * @Param ("stock_total",desc="商品库存")
  171. * @Param ("price_selling",desc="商品销售价")
  172. * @Param ("status",desc="商品状态 1上架 0下架")
  173. * @Param ("items",desc="商品规格信息 ['id sku的id' , goods_spec 规格名 颜色::红色;;大小::1','stock_total 库存','price_selling 售价','sku_image 图片''status 1在售 2 下架']")
  174. * @return void
  175. *
  176. */
  177. public function goods_edit(){
  178. $goods_id = input('goods_id');
  179. $goods = ShopGoods::mk()->where('id',$goods_id)->find();
  180. if($goods['examine'] == 0)$this->error('商品审核中暂不支持编辑');
  181. $data = $this->_vali(
  182. [
  183. 'name.require'=>'商品名称不能为空',
  184. 'cateids.require'=>'商品分类不能不选',
  185. 'cover.require'=>'商品封面不能为空',
  186. 'slider.require'=>'商品轮播图不能为空',
  187. 'content.require'=>'商品详情不能为空',
  188. 'stock_total.require'=>'商品库存不能为空',
  189. 'price_selling.require'=>'商品销售价格不能为空',
  190. 'items.require'=>'商品规格不能为空',
  191. 'status.require'=>'商品状态不能为空'
  192. ]
  193. );
  194. $goods_data= [
  195. 'name'=>$data['name'],
  196. 'cateids'=>$data['cateids'],
  197. 'cover'=>$data['cover'],
  198. 'slider'=>$data['slider'],
  199. 'content'=>$data['content'],
  200. 'stock_total'=>$data['stock_total'],
  201. 'price_selling'=>$data['price_selling'],
  202. 'data_items'=>$data['items'],
  203. 'status'=>$data['status'],
  204. 'create_at'=>date('Y-m-d H:i:s'),
  205. 'examine'=>0,
  206. ];
  207. Db::startTrans();
  208. try {
  209. ShopGoods::mk()->where('id',$goods_id)->save($goods_data);
  210. $data['items']=json_decode($data['items'],true);
  211. foreach ($data['items']as &$v){
  212. $item_data = [
  213. 'goods_spec'=>$v['goods_spec'],
  214. 'stock_total'=>$v['stock_total'],
  215. 'price_selling'=>$v['price_selling'],
  216. 'price_market'=>$v['price_selling'],
  217. 'show_image'=>$v['sku_image'],
  218. 'status'=>$v['status'],
  219. 'create_at'=>date('Y-m-d H:i:s'),
  220. ];
  221. ShopGoodsItem::mk()->where('id',$v['id'])->save($item_data);
  222. }
  223. Db::commit();
  224. $this->success('商品数据编辑成功!');
  225. }catch (ErrorException $e){
  226. Db::rollback();
  227. $this->success('商品数据编辑失败!'.$e);
  228. }
  229. }
  230. /**
  231. * @Title ("删除商品")
  232. * @Method ("post")
  233. * @Param ("goods_id",desc="商品id")
  234. * @return void
  235. */
  236. public function del_goods(){
  237. $admin = $this->uuid();
  238. $goods_id=input('goods_id');
  239. ShopGoods::mk()->where('admin_id',$admin->id)->where('id',$goods_id)->save(['deleted'=>1]);
  240. $this->success('商品已删除');
  241. }
  242. /**
  243. * @Title ("商品详情")
  244. * @Method ("post")
  245. * @Param ("goods_id",desc="商品id")
  246. */
  247. public function goods_details(){
  248. $goods_id = input('goods_id');
  249. $details = ShopGoods::mk()->alias('goods')
  250. ->where('goods.id',$goods_id)
  251. ->find();
  252. $details['item']=ShopGoodsItem::mk()->where('goods_code', $details['code'])->select();
  253. $details['cate_name']=ShopGoodsCate::mk()->whereIn('id',$details['cateids'])->field('name')->select();
  254. $this->success('商品详情',$details);
  255. }
  256. /**
  257. * @Title ("商品下架")
  258. * @Method ("post")
  259. * @Param ("goods_id",desc="商品id")
  260. * @return void
  261. */
  262. public function lower(){
  263. $admin = $this->uuid();
  264. $data = $this->_vali(['goods_id.require'=>'请选择要处理的商品']);
  265. ShopGoods::mk()->where('admin_id',$admin->id)->whereIn('id',$data['goods_id'])->save(['status'=>0]);
  266. $this->success('商品已下架成功');
  267. }
  268. /**
  269. * @Title ("商品上架")
  270. * @Method ("post")
  271. * @Param ("goods_id",desc="商品id")
  272. * @return void
  273. */
  274. public function shelves(){
  275. $admin = $this->uuid();
  276. $data = $this->_vali(['goods_id.require'=>'请选择要处理的商品']);
  277. ShopGoods::mk()->where('admin_id',$admin->id)->whereIn('id',$data['goods_id'])->save(['status'=>1]);
  278. $this->success('商品已上架成功');
  279. }
  280. public function uuid(){
  281. $purchase_model = new Common($this->app);
  282. $uuid = $purchase_model->uuid();
  283. return $uuid;
  284. }
  285. }