Goods.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace addon\fenxiao\shop\controller;
  11. use addon\fenxiao\model\FenxiaoGoodsSku as FenxiaoGoodsSkuModel;
  12. use addon\fenxiao\model\FenxiaoLevel as FenxiaoLevelModel;
  13. use app\model\goods\Goods as GoodsModel;
  14. use app\shop\controller\BaseShop;
  15. use addon\fenxiao\model\FenxiaoGoods as FenxiaoGoodsModel;
  16. use think\facade\Db;
  17. use addon\fenxiao\model\Config as FenxiaoConfigModel;
  18. /**
  19. * 分销商品
  20. */
  21. class Goods extends BaseShop
  22. {
  23. /**
  24. * 分销等级列表
  25. */
  26. public function lists()
  27. {
  28. $model = new GoodsModel();
  29. if (request()->isAjax()) {
  30. $page_index = input('page', 1);
  31. $page_size = input('page_size', PAGE_LIST_ROWS);
  32. $condition = [
  33. [ 'is_delete', '=', 0 ],
  34. [ 'site_id', '=', $this->site_id ],
  35. [ 'goods_class', '<>', 6 ] // 排除称重商品
  36. ];
  37. $search_text_type = input('search_text_type', "goods_name");//店铺名称或者商品名称
  38. $search_text = input('search_text', "");
  39. $goods_class = input('goods_class', "");//商品种类
  40. $goods_state = input('goods_state', "");//商品状态
  41. $category_id = input('category_id', "");//分类ID
  42. $is_fenxiao = input('is_fenxiao', "");
  43. $start_sale = input('start_sale', 0);
  44. $end_sale = input('end_sale', 0);
  45. if (!empty($search_text)) {
  46. $condition[] = [ $search_text_type, 'like', '%' . $search_text . '%' ];
  47. }
  48. if ($is_fenxiao !== "") {
  49. $condition[] = [ 'is_fenxiao', '=', $is_fenxiao ];
  50. }
  51. if (!empty($start_sale)) $condition[] = [ 'sale_num', '>=', $start_sale ];
  52. if (!empty($end_sale)) $condition[] = [ 'sale_num', '<=', $end_sale ];
  53. if ($goods_class !== "") {
  54. $condition[] = [ 'goods_class', '=', $goods_class ];
  55. }
  56. if ($goods_state !== '') {
  57. $condition[] = [ 'goods_state', '=', $goods_state ];
  58. }
  59. if (!empty($category_id)) {
  60. $condition[] = [ 'category_id', 'like', '%,' . $category_id . ',%' ];
  61. }
  62. $list = $model->getGoodsPageList($condition, $page_index, $page_size);
  63. return $list;
  64. } else {
  65. $this->forthMenu();
  66. return $this->fetch('goods/lists');
  67. }
  68. }
  69. public function detail()
  70. {
  71. $goods_id = input('goods_id');
  72. $goods_model = new GoodsModel();
  73. $fenxiao_sku_model = new FenxiaoGoodsSkuModel();
  74. $fenxiao_leve_model = new FenxiaoLevelModel();
  75. $goods_info = $goods_model->getGoodsDetail($goods_id);
  76. if (empty($goods_info[ 'data' ]) || $goods_info[ 'data' ][ 'site_id' ] != $this->site_id) $this->error('商品信息不存在');
  77. $fenxiao_skus = $fenxiao_sku_model->getSkuList([ 'goods_id' => $goods_id ]);
  78. $skus = [];
  79. foreach ($fenxiao_skus[ 'data' ] as $fenxiao_sku) {
  80. $skus[ $fenxiao_sku[ 'level_id' ] . '_' . $fenxiao_sku[ 'sku_id' ] ] = $fenxiao_sku;
  81. }
  82. $goods_info[ 'data' ][ 'fenxiao_skus' ] = $skus;
  83. $goods_info[ 'data' ][ 'goods_image' ] = explode(',', $goods_info[ 'data' ][ 'goods_image' ]);
  84. $fenxiao_level = $fenxiao_leve_model->getLevelList([ [ 'site_id', '=', $this->site_id ] ]);
  85. $this->assign('fenxiao_level', $fenxiao_level[ 'data' ]);
  86. $this->assign('goods_info', $goods_info[ 'data' ]);
  87. $fenxiao_config_model = new FenxiaoConfigModel();
  88. $fenxiao_config = $fenxiao_config_model->getFenxiaoBasicsConfig($this->site_id)[ 'data' ] ?? [];
  89. $this->assign('fenxiao_config', $fenxiao_config[ 'value' ] ?? []);
  90. return $this->fetch('goods/detail');
  91. }
  92. /**
  93. * 添加活动
  94. */
  95. public function config()
  96. {
  97. $goods_id = input('goods_id');
  98. $goods_model = new GoodsModel();
  99. $fenxiao_sku_model = new FenxiaoGoodsSkuModel();
  100. $fenxiao_leve_model = new FenxiaoLevelModel();
  101. $fenxiao_level = $fenxiao_leve_model->getLevelList([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 1 ] ], '*', 'level_num asc,one_rate asc');
  102. $goods_info = $goods_model->getGoodsDetail($goods_id);
  103. if (empty($goods_info[ 'data' ]) || $goods_info[ 'data' ][ 'site_id' ] != $this->site_id) $this->error('商品信息不存在');
  104. $fenxiao_config_model = new FenxiaoConfigModel();
  105. $fenxiao_config = $fenxiao_config_model->getFenxiaoBasicsConfig($this->site_id)[ 'data' ] ?? [];
  106. $fenxiao_config = $fenxiao_config[ 'value' ] ?? [];
  107. if (request()->isAjax()) {
  108. Db::startTrans();
  109. try {
  110. $fenxiao_type = input('fenxiao_type', 1);
  111. $fenxiao_skus = input('fenxiao', []);
  112. $is_fenxiao = input('is_fenxiao', 0);
  113. $fenxiao_price = input('fenxiao_price', []);
  114. $goods_data = [ 'is_fenxiao' => $is_fenxiao, 'fenxiao_type' => $fenxiao_type ];
  115. if ($fenxiao_type == 2) {
  116. $fenxiao_goods_sku_data = [];
  117. foreach ($fenxiao_skus as $level_id => $level_data) {
  118. foreach ($level_data[ 'sku_id' ] as $key => $sku_id) {
  119. $fenxiao_total = 0;
  120. $fenxiao_level = [ 'one', 'two', 'three' ];
  121. foreach ($fenxiao_level as $level) {
  122. $item_rate_array = $level_data[ $level . '_rate' ] ?? [];
  123. $item_rate = $item_rate_array[ $key ] ?? 0;
  124. $item_money_array = $level_data[ $level . '_money' ] ?? [];
  125. $item_money = $item_money_array[ $key ] ?? 0;
  126. $var_rate_name = $level . '_rate';
  127. $$var_rate_name = $item_rate;
  128. $var_money_name = $level . '_money';
  129. $$var_money_name = $item_money;
  130. if ($item_rate > 0) {
  131. $fenxiao_total += $level_data[ 'sku_price' ][ $key ] * $item_rate / 100;
  132. } elseif ($item_money > 0) {
  133. $fenxiao_total += $item_money;
  134. }
  135. }
  136. if (empty($fenxiao_total)) {
  137. return error(-1, '分销金额不可以为零');
  138. }
  139. if ($level_data[ 'sku_price' ][ $key ] < $fenxiao_total) {
  140. return error(-1, '分销总金额不能大于商品sku价格的100%!');
  141. }
  142. if ($fenxiao_config[ 'level' ] < 3) {
  143. $three_rate = 0;
  144. $three_money = 0;
  145. //通过分销设置的等级配置
  146. if ($fenxiao_config[ 'level' ] < 2) {
  147. $two_rate = 0;
  148. $two_money = 0;
  149. }
  150. }
  151. $fenxiao_sku = [
  152. 'goods_id' => $goods_id,
  153. 'level_id' => $level_id,
  154. 'sku_id' => $sku_id,
  155. 'one_rate' => $one_rate ?? 0,
  156. 'one_money' => $one_money ?? 0,
  157. 'two_rate' => $two_rate ?? 0,
  158. 'two_money' => $two_money ?? 0,
  159. 'three_rate' => $three_rate ?? 0,
  160. 'three_money' => $three_money ?? 0,
  161. ];
  162. $fenxiao_goods_sku_data[] = $fenxiao_sku;
  163. }
  164. }
  165. $fenxiao_sku_model->deleteSku([ 'goods_id' => $goods_id ]);
  166. $fenxiao_sku_model->addSkuList($fenxiao_goods_sku_data);
  167. }
  168. if ($fenxiao_type == 1) {
  169. $fenxiao_goods_sku_data = [];
  170. foreach ($fenxiao_level[ 'data' ] as $level) {
  171. foreach ($goods_info[ 'data' ][ 'sku_data' ] as $sku) {
  172. $item_one_rate = $level[ 'one_rate' ] ?? 0;
  173. $item_two_rate = $level[ 'two_rate' ] ?? 0;
  174. $item_three_rate = $level[ 'three_rate' ] ?? 0;
  175. //通过分销设置的等级配置
  176. if ($fenxiao_config[ 'level' ] < 3) {
  177. $item_three_rate = 0;
  178. if ($fenxiao_config[ 'level' ] < 2) {
  179. $item_two_rate = 0;
  180. }
  181. }
  182. $fenxiao_sku = [
  183. 'goods_id' => $goods_id,
  184. 'level_id' => $level[ 'level_id' ],
  185. 'sku_id' => $sku[ 'sku_id' ],
  186. 'one_rate' => $item_one_rate,
  187. 'one_money' => 0,
  188. 'two_rate' => $item_two_rate,
  189. 'two_money' => 0,
  190. 'three_rate' => $item_three_rate,
  191. 'three_money' => 0,
  192. ];
  193. $fenxiao_goods_sku_data[] = $fenxiao_sku;
  194. }
  195. }
  196. $fenxiao_sku_model->deleteSku([ 'goods_id' => $goods_id ]);
  197. $fenxiao_sku_model->addSkuList($fenxiao_goods_sku_data);
  198. }
  199. $fenxiao_goods_model = new FenxiaoGoodsModel();
  200. $re = $fenxiao_goods_model->editGoodsFenxiao($goods_data, [ [ 'goods_id', '=', $goods_id ], [ 'site_id', '=', $this->site_id ] ]);
  201. if ($is_fenxiao) {
  202. foreach ($fenxiao_price as $sku_id => $item) {
  203. if (empty($item) || $item < 0) $item = 0;
  204. $res = model('goods_sku')->update([ 'fenxiao_price' => $item ], [ [ 'sku_id', '=', $sku_id ], [ 'site_id', '=', $this->site_id ] ]);
  205. }
  206. }
  207. Db::commit();
  208. return $re;
  209. } catch (\Exception $e) {
  210. Db::rollback();
  211. return error(-1, $e->getMessage());
  212. }
  213. }
  214. $fenxiao_skus = $fenxiao_sku_model->getSkuList([ 'goods_id' => $goods_id ]);
  215. $skus = [];
  216. foreach ($fenxiao_skus[ 'data' ] as $fenxiao_sku) {
  217. $skus[ $fenxiao_sku[ 'level_id' ] . '_' . $fenxiao_sku[ 'sku_id' ] ] = $fenxiao_sku;
  218. }
  219. $goods_info[ 'data' ][ 'fenxiao_skus' ] = $skus;
  220. $goods_info[ 'data' ][ 'goods_image' ] = explode(',', $goods_info[ 'data' ][ 'goods_image' ]);
  221. $this->assign('fenxiao_level', $fenxiao_level[ 'data' ]);
  222. $this->assign('goods_info', $goods_info[ 'data' ]);
  223. $this->assign('fenxiao_config', $fenxiao_config);
  224. return $this->fetch("goods/config");
  225. }
  226. /**
  227. * 修改分销状态
  228. */
  229. public function modify()
  230. {
  231. if (request()->isAjax()) {
  232. $fenxiao_goods_model = new FenxiaoGoodsModel();
  233. $goods_id = input('goods_id');
  234. $is_fenxiao = input('is_fenxiao', 0);
  235. return $fenxiao_goods_model->modifyGoodsFenxiaoStatus($goods_id, $is_fenxiao ? 0 : 1, $this->site_id);
  236. }
  237. }
  238. /**
  239. * 批量设置是否参与分销
  240. * @return array
  241. */
  242. public function setGoodsIsFenxiao()
  243. {
  244. if (request()->isAjax()) {
  245. $fenxiao_goods_model = new FenxiaoGoodsModel();
  246. $goods_ids = input('goods_ids', '');
  247. $is_fenxiao = input('is_fenxiao', 0);
  248. return $fenxiao_goods_model->modifyGoodsIsFenxiao($goods_ids, $is_fenxiao, $this->site_id);
  249. }
  250. }
  251. }