Virtualgoods.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace app\shop\controller;
  11. use addon\form\model\Form;
  12. use app\model\goods\Goods as GoodsModel;
  13. use app\model\goods\GoodsAttribute as GoodsAttributeModel;
  14. use app\model\goods\GoodsBrand as GoodsBrandModel;
  15. use app\model\goods\GoodsCategory as GoodsCategoryModel;
  16. use app\model\goods\GoodsLabel as GoodsLabelModel;
  17. use app\model\goods\GoodsService as GoodsServiceModel;
  18. use app\model\goods\VirtualGoods as VirtualGoodsModel;
  19. use app\model\store\Store as StoreModel;
  20. use app\model\web\Config as ConfigModel;
  21. /**
  22. * 虚拟商品
  23. * Class Virtualgoods
  24. * @package app\shop\controller
  25. */
  26. class Virtualgoods extends BaseShop
  27. {
  28. /**
  29. * 添加商品
  30. * @return mixed
  31. */
  32. public function addGoods()
  33. {
  34. if (request()->isAjax()) {
  35. $category_id = input("category_id", 0);// 分类id
  36. $category_json = json_encode($category_id);//分类字符串
  37. $category_id = ',' . implode(',', $category_id) . ',';
  38. $data = [
  39. 'goods_name' => input("goods_name", ""),// 商品名称,
  40. 'goods_attr_class' => input("goods_attr_class", ""),// 商品类型id,
  41. 'goods_attr_name' => input("goods_attr_name", ""),// 商品类型名称,
  42. 'is_limit' => input("is_limit", "0"),// 商品是否限购,
  43. 'limit_type' => input("limit_type", "1"),// 商品限购类型,
  44. 'site_id' => $this->site_id,
  45. 'category_id' => $category_id,
  46. 'category_json' => $category_json,
  47. 'goods_image' => input("goods_image", ""),// 商品主图路径
  48. 'goods_content' => input("goods_content", ""),// 商品详情
  49. 'goods_state' => input("goods_state", ""),// 商品状态(1.正常0下架)
  50. 'price' => input("price", 0),// 商品价格(取第一个sku)
  51. 'market_price' => input("market_price", 0),// 市场价格(取第一个sku)
  52. 'cost_price' => input("cost_price", 0),// 成本价(取第一个sku)
  53. 'sku_no' => input("sku_no", ""),// 商品sku编码
  54. 'weight' => input("weight", ""),// 重量
  55. 'volume' => input("volume", ""),// 体积
  56. 'goods_stock' => input("goods_stock", 0),// 商品库存(总和)
  57. 'goods_stock_alarm' => input("goods_stock_alarm", 0),// 库存预警
  58. 'goods_spec_format' => input("goods_spec_format", ""),// 商品规格格式
  59. 'goods_attr_format' => input("goods_attr_format", ""),// 商品参数格式
  60. 'introduction' => input("introduction", ""),// 促销语
  61. 'keywords' => input("keywords", ""),// 关键词
  62. 'unit' => input("unit", ""),// 单位
  63. 'sort' => input("sort", 0),// 排序,
  64. 'video_url' => input("video_url", ""),// 视频
  65. 'goods_sku_data' => input("goods_sku_data", ""),// SKU商品数据
  66. 'goods_service_ids' => input("goods_service_ids", ''),// 商品服务id集合
  67. 'label_id' => input("label_id", ''),// 商品分组id
  68. 'brand_id' => input("brand_id", 0),//品牌id
  69. 'virtual_sale' => input("virtual_sale", 0),// 虚拟销量
  70. 'max_buy' => input("max_buy", 0),// 限购
  71. 'min_buy' => input("min_buy", 0),// 起售
  72. 'recommend_way' => input('recommend_way', 0), // 推荐方式,1:新品,2:精品,3;推荐
  73. 'timer_on' => strtotime(input('timer_on', 0)),//定时上架
  74. 'timer_off' => strtotime(input('timer_off', 0)),//定时下架
  75. 'is_consume_discount' => input('is_consume_discount', 0),//是否参与会员折扣
  76. 'is_need_verify' => input("is_need_verify", 0),// 是否需要核销
  77. 'verify_validity_type' => input("verify_validity_type", 0),// 核销有效期类型
  78. 'virtual_indate' => 0,// 虚拟商品有效期
  79. 'qr_id' => input('qr_id', 0),// 社群二维码id
  80. 'template_id' => input('template_id', 0), // 商品海报id
  81. 'sale_show' => input('sale_show', 0),//
  82. 'stock_show' => input('stock_show', 0),//
  83. 'market_price_show' => input('market_price_show', 0),//
  84. 'barrage_show' => input('barrage_show', 0),//
  85. 'virtual_deliver_type' => input('virtual_deliver_type', ''),
  86. 'virtual_receive_type' => input('virtual_receive_type', ''),
  87. 'form_id' => input('form_id', 0),
  88. 'sale_channel' => input('sale_channel', 'all'),
  89. 'sale_store' => input('sale_store', 'all'),
  90. ];
  91. if ($data[ 'verify_validity_type' ] == 1) {
  92. $data[ 'virtual_indate' ] = input("virtual_indate", 0);
  93. } else if ($data[ 'verify_validity_type' ] == 2) {
  94. $data[ 'virtual_indate' ] = strtotime(input("virtual_time", ''));
  95. }
  96. $virtual_goods_model = new VirtualGoodsModel();
  97. $res = $virtual_goods_model->addGoods($data);
  98. return $res;
  99. } else {
  100. //获取一级商品分类
  101. $goods_category_model = new GoodsCategoryModel();
  102. $condition = [
  103. [ 'pid', '=', 0 ],
  104. [ 'site_id', '=', $this->site_id ]
  105. ];
  106. $goods_category_list = $goods_category_model->getCategoryList($condition, 'category_id,category_name,level,commission_rate')[ 'data' ];
  107. $this->assign("goods_category_list", $goods_category_list);
  108. //获取商品类型
  109. $goods_attr_model = new GoodsAttributeModel();
  110. $attr_class_list = $goods_attr_model->getAttrClassList([ [ 'site_id', '=', $this->site_id ] ], 'class_id,class_name')[ 'data' ];
  111. $this->assign("attr_class_list", $attr_class_list);
  112. // 商品服务
  113. $goods_service_model = new GoodsServiceModel();
  114. $service_list = $goods_service_model->getServiceList([ [ 'site_id', '=', $this->site_id ] ], 'id,service_name,icon')[ 'data' ];
  115. $this->assign("service_list", $service_list);
  116. // 商品分组
  117. $goods_label_model = new GoodsLabelModel();
  118. $label_list = $goods_label_model->getLabelList([ [ 'site_id', '=', $this->site_id ] ], 'id,label_name', 'sort ASC')[ 'data' ];
  119. $this->assign("label_list", $label_list);
  120. // 商品品牌
  121. $goods_brand_model = new GoodsBrandModel();
  122. $brand_list = $goods_brand_model->getBrandList([ [ 'site_id', '=', $this->site_id ] ], 'brand_id,brand_name', 'sort asc')[ 'data' ];
  123. $this->assign("brand_list", $brand_list);
  124. //商品默认排序值
  125. $config_model = new ConfigModel();
  126. $sort_config = $config_model->getGoodsSort($this->site_id);
  127. $sort_config = $sort_config[ 'data' ][ 'value' ];
  128. $this->assign("sort_config", $sort_config);
  129. //获取商品海报
  130. $poster_list = event('PosterTemplate', [ 'site_id' => $this->site_id ], true);
  131. if (!empty($poster_list)) {
  132. $poster_list = $poster_list[ 'data' ];
  133. }
  134. $this->assign('poster_list', $poster_list);
  135. $this->assign('virtualcard_exit', addon_is_exit('virtualcard', $this->site_id));
  136. $form_is_exit = addon_is_exit('form', $this->site_id);
  137. if ($form_is_exit) {
  138. $form_list = ( new Form() )->getFormList([ [ 'site_id', '=', $this->site_id ], [ 'form_type', '=', 'goods' ], [ 'is_use', '=', 1 ] ], 'id desc', 'id, form_name')[ 'data' ];
  139. $this->assign('form_list', $form_list);
  140. }
  141. $this->assign('form_is_exit', $form_is_exit);
  142. $this->assign('all_goodsclass', event('GoodsClass'));
  143. $this->assign('goods_class', ( new VirtualGoodsModel() )->getGoodsClass());
  144. $this->assign('store_is_exit', addon_is_exit('store', $this->site_id));
  145. return $this->fetch("virtualgoods/add_goods");
  146. }
  147. }
  148. /**
  149. * 编辑商品
  150. * @return mixed
  151. */
  152. public function editGoods()
  153. {
  154. $virtual_goods_model = new VirtualGoodsModel();
  155. if (request()->isAjax()) {
  156. $category_id = input("category_id", 0);// 分类id
  157. $category_json = json_encode($category_id);//分类字符串
  158. $category_id = ',' . implode(',', $category_id) . ',';
  159. $data = [
  160. 'goods_id' => input("goods_id", 0),// 商品id
  161. 'goods_name' => input("goods_name", ""),// 商品名称,
  162. 'goods_attr_class' => input("goods_attr_class", ""),// 商品类型id,
  163. 'goods_attr_name' => input("goods_attr_name", ""),// 商品类型名称,
  164. 'is_limit' => input("is_limit", "0"),// 商品是否限购,
  165. 'limit_type' => input("limit_type", "1"),// 商品限购类型,
  166. 'site_id' => $this->site_id,
  167. 'category_id' => $category_id,
  168. 'category_json' => $category_json,
  169. 'goods_image' => input("goods_image", ""),// 商品主图路径
  170. 'goods_content' => input("goods_content", ""),// 商品详情
  171. 'goods_state' => input("goods_state", ""),// 商品状态(1.正常0下架)
  172. 'price' => input("price", 0),// 商品价格(取第一个sku)
  173. 'market_price' => input("market_price", 0),// 市场价格(取第一个sku)
  174. 'cost_price' => input("cost_price", 0),// 成本价(取第一个sku)
  175. 'sku_no' => input("sku_no", ""),// 商品sku编码
  176. 'weight' => input("weight", ""),// 重量
  177. 'volume' => input("volume", ""),// 体积
  178. 'goods_stock' => input("goods_stock", 0),// 商品库存(总和)
  179. 'goods_stock_alarm' => input("goods_stock_alarm", 0),// 库存预警
  180. 'goods_spec_format' => input("goods_spec_format", ""),// 商品规格格式
  181. 'goods_attr_format' => input("goods_attr_format", ""),// 商品参数格式
  182. 'introduction' => input("introduction", ""),// 促销语
  183. 'keywords' => input("keywords", ""),// 关键词
  184. 'unit' => input("unit", ""),// 单位
  185. 'sort' => input("sort", 0),// 排序,
  186. 'video_url' => input("video_url", ""),// 视频
  187. 'goods_sku_data' => input("goods_sku_data", ""),// SKU商品数据
  188. 'goods_service_ids' => input("goods_service_ids", ''),// 商品服务id集合
  189. 'label_id' => input("label_id", ''),// 商品分组id
  190. 'brand_id' => input("brand_id", 0),//品牌id
  191. 'virtual_sale' => input("virtual_sale", 0),// 虚拟销量
  192. 'max_buy' => input("max_buy", 0),// 限购
  193. 'min_buy' => input("min_buy", 0),// 起售
  194. 'recommend_way' => input('recommend_way', 0), // 推荐方式,1:新品,2:精品,3;推荐
  195. 'timer_on' => strtotime(input('timer_on', 0)),//定时上架
  196. 'timer_off' => strtotime(input('timer_off', 0)),//定时下架
  197. 'spec_type_status' => input('spec_type_status', 0),
  198. 'is_consume_discount' => input('is_consume_discount', 0),//是否参与会员折扣
  199. 'is_need_verify' => input("is_need_verify", 0),// 是否需要核销
  200. 'verify_validity_type' => input("verify_validity_type", 0),// 核销有效期类型
  201. 'virtual_indate' => 0,// 虚拟商品有效期
  202. 'verify_num' => input("verify_num", 1), // 核销次数
  203. 'qr_id' => input('qr_id', 0),// 社群二维码id
  204. 'template_id' => input('template_id', 0), // 商品海报id
  205. 'sale_show' => input('sale_show', 0),//
  206. 'stock_show' => input('stock_show', 0),//
  207. 'market_price_show' => input('market_price_show', 0),//
  208. 'barrage_show' => input('barrage_show', 0),//
  209. 'virtual_deliver_type' => input('virtual_deliver_type', ''),
  210. 'virtual_receive_type' => input('virtual_receive_type', ''),
  211. 'form_id' => input('form_id', 0),
  212. 'sale_channel' => input('sale_channel', 'all'),
  213. 'sale_store' => input('sale_store', 'all'),
  214. ];
  215. if ($data[ 'verify_validity_type' ] == 1) {
  216. $data[ 'virtual_indate' ] = input("virtual_indate", 0);
  217. } else if ($data[ 'verify_validity_type' ] == 2) {
  218. $data[ 'virtual_indate' ] = strtotime(input("virtual_time", ''));
  219. }
  220. $res = $virtual_goods_model->editGoods($data);
  221. return $res;
  222. } else {
  223. $goods_model = new GoodsModel();
  224. $goods_id = input("goods_id", 0);
  225. $goods_info = $goods_model->editGetGoodsInfo([ [ 'goods_id', '=', $goods_id ], [ 'site_id', '=', $this->site_id ] ])[ 'data' ];
  226. $goods_sku_list = $virtual_goods_model->getGoodsSkuList([ [ 'goods_id', '=', $goods_id ], [ 'site_id', '=', $this->site_id ] ], "sku_id,sku_name,sku_no,sku_spec_format,price,market_price,cost_price,stock,virtual_indate,sku_image,sku_images,goods_spec_format,spec_name,stock_alarm,is_default,verify_num", '')[ 'data' ];
  227. $goods_info[ 'sku_list' ] = $goods_sku_list;
  228. $this->assign("goods_info", $goods_info);
  229. //获取一级商品分类
  230. $goods_category_model = new GoodsCategoryModel();
  231. $condition = [
  232. [ 'pid', '=', 0 ],
  233. [ 'site_id', '=', $this->site_id ]
  234. ];
  235. $goods_category_list = $goods_category_model->getCategoryList($condition, 'category_id,category_name,level,commission_rate')[ 'data' ];
  236. $this->assign("goods_category_list", $goods_category_list);
  237. //获取商品类型
  238. $goods_attr_model = new GoodsAttributeModel();
  239. $attr_class_list = $goods_attr_model->getAttrClassList([ [ 'site_id', '=', $this->site_id ] ], 'class_id,class_name')[ 'data' ];
  240. $this->assign("attr_class_list", $attr_class_list);
  241. // 商品服务
  242. $goods_service_model = new GoodsServiceModel();
  243. $service_list = $goods_service_model->getServiceList([ [ 'site_id', '=', $this->site_id ] ], 'id,service_name,icon')[ 'data' ];
  244. $this->assign("service_list", $service_list);
  245. //获取品牌
  246. $goods_brand_model = new GoodsBrandModel();
  247. $brand_list = $goods_brand_model->getBrandList([ [ 'site_id', '=', $this->site_id ] ], "brand_id, brand_name")[ 'data' ];
  248. $this->assign("brand_list", $brand_list);
  249. // 商品标签
  250. $goods_label_model = new GoodsLabelModel();
  251. $label_list = $goods_label_model->getLabelList([ [ 'site_id', '=', $this->site_id ] ], 'id,label_name', 'sort ASC')[ 'data' ];
  252. $this->assign("label_list", $label_list);
  253. //获取商品海报
  254. $poster_list = event('PosterTemplate', [ 'site_id' => $this->site_id ], true);
  255. if (!empty($poster_list)) {
  256. $poster_list = $poster_list[ 'data' ];
  257. }
  258. $this->assign('poster_list', $poster_list);
  259. $form_is_exit = addon_is_exit('form', $this->site_id);
  260. if ($form_is_exit) {
  261. $form_list = ( new Form() )->getFormList([ [ 'site_id', '=', $this->site_id ], [ 'form_type', '=', 'goods' ], [ 'is_use', '=', 1 ] ], 'id desc', 'id, form_name')[ 'data' ];
  262. $this->assign('form_list', $form_list);
  263. }
  264. $this->assign('form_is_exit', $form_is_exit);
  265. $store_is_exit = addon_is_exit('store', $this->site_id);
  266. if ($store_is_exit && $goods_info[ 'sale_store' ] != 'all') {
  267. $store_list = ( new StoreModel() )->getStoreList([ [ 'site_id', '=', $this->site_id ], [ 'store_id', 'in', $goods_info[ 'sale_store' ] ] ], 'store_id,store_name,status,address,full_address,is_frozen');
  268. $this->assign('store_list', $store_list[ 'data' ]);
  269. }
  270. $this->assign('store_is_exit', $store_is_exit);
  271. return $this->fetch("virtualgoods/edit_goods");
  272. }
  273. }
  274. }