Goods.php 11 KB

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