ShopGoodsModel.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. <?php
  2. namespace app\common\model;
  3. use app\common\model\TimeModel;
  4. use think\facade\Db;
  5. use function Composer\Autoload\includeFile;
  6. class ShopGoodsModel extends TimeModel
  7. {
  8. protected $name = "shop_goods";
  9. /**
  10. * @param array $map
  11. * @param array $paginate
  12. * @param string|null $field
  13. * @order sort->goods_id倒序排线
  14. * @return array
  15. */
  16. public static function list (array $map = [], array $paginate = [], array $orderMap = [], $filter)
  17. {
  18. $field = 'sort,category,goods_sn,goods_name,goods_img,min_original_price as original_price,min_price as price,rebate_score,sales_volume,inventory,attension_count,restrictions_num';
  19. $order = 'sort desc,goods_id desc';
  20. foreach ($map as $k => $v) {
  21. if (empty($v)) {
  22. unset($map[$k]);
  23. }
  24. }
  25. if (isset($map['ids'])) {
  26. $list['data'] = self::where(['goods_sn' => $map['ids']])->field($field)->select()->toArray();
  27. } else {
  28. if (!empty($orderMap['sort'])) {
  29. switch (intval($orderMap['sort'])) {
  30. case 1:
  31. // $order = 'goods_id asc';
  32. $order = 'sort desc';
  33. break;
  34. case 2:
  35. $order = 'attension_count asc';
  36. break;
  37. case 3:
  38. $order = 'created_time desc';
  39. break;
  40. case 4:
  41. // 价格降序
  42. $order = 'price desc';
  43. break;
  44. case 5:
  45. $order = 'price asc';
  46. break;
  47. case 6:
  48. $order = 'sales_volume desc';
  49. break;
  50. case 7:
  51. $order = 'sales_volume asc';
  52. break;
  53. case 8:
  54. $order = 'rebate_score asc';
  55. break;
  56. case 9:
  57. $order = 'rebate_score desc';
  58. break;
  59. case 10:
  60. $order = 'rebate_score asc';
  61. break;
  62. case 11:
  63. // 10积分升序
  64. $order = 'rebate_score desc';
  65. break;
  66. default:
  67. break;
  68. }
  69. }
  70. $where = [];
  71. // if ($filter){
  72. //
  73. // $price = explode('-', $filter['price']);
  74. // $redscore = explode('-', $filter['redscore']);
  75. // $score = explode('-', $filter['score']);
  76. // if (count($price) == 2){
  77. // if (!empty($price[0])){
  78. // $where[] = ['price', '>', $price[0]];
  79. // }
  80. //
  81. // if (!empty($price[1])){
  82. // $where[] = ['price', '<', $price[1]];
  83. // }
  84. //
  85. //
  86. //
  87. // }
  88. //
  89. // if (count($redscore) == 2){
  90. // if (!empty($redscore[0])){
  91. // $where[] = ['rebate_score_lock', '>', $redscore[0]];
  92. // }
  93. //
  94. // if (!empty($redscore[1])){
  95. // $where[] = ['rebate_score_lock', '<', $redscore[1]];
  96. // }
  97. // }
  98. //
  99. // if (count($score) == 2){
  100. // if (!empty($score[0])){
  101. // $where[] = ['rebate_score_most', '>', $score[0]];
  102. // }
  103. //
  104. // if (!empty($score[1])){
  105. // $where[] = ['rebate_score_most', '<', $score[1]];
  106. // }
  107. //
  108. //
  109. // }
  110. //
  111. //
  112. // }
  113. if (isset($map['menu_id']) && intval($map['menu_id']) > 0){
  114. $where[] = ['menu_id', '=', $map['menu_id']];
  115. unset($map['menu_id']);
  116. }
  117. if (!empty($map['keywords'])) {
  118. $where[] = ['goods_name|hot_keywords', 'like', "%{$map['keywords']}%"];
  119. unset($map['keywords']);
  120. }
  121. if (!empty($map['cls'])) {
  122. $where[] = ['give_vip', '>', 0];
  123. unset($map['cls']);
  124. }
  125. // if (!empty($map['category_id']) && $map['category_id'] != 0) {
  126. // $where[] = ['category', '=', $map['category_id']];
  127. // unset($map['category_id']);
  128. // }
  129. $where[] = ['on_sale', '=', 1];
  130. $list = self::where($map)->where($where)->field($field)->order($order)->paginate($paginate['limit'])->toArray();
  131. }
  132. // if ($map['goods_type'] == 1){
  133. //// $cur_xzmoney = Db::name('system_config')->where('name', 'xz_cur_money')->where('group', 'xzconfig')->value('value');
  134. // foreach ($list['data'] as $key=>$val){
  135. // if ($val['goods_type'] == 1){
  136. //
  137. //// $list['data'][$key]['price'] = getXzPirceWithPrice($cur_xzmoney, $val['price']);
  138. // }
  139. // }
  140. // }
  141. // return sr_getLastSql();
  142. return $list['data'];
  143. }
  144. public static function details (array $map, ?string $field = '*'): array
  145. {
  146. $cache = false;
  147. if (($goodsBase = \services\CacheServices::get(md5('goodsDetail_' . $map['goods_sn']))) === false || empty($goodsBase)) {
  148. $field = 'menu_id,spec_name,goods_id,category,goods_sn,goods_name,goods_img,goods_img_banner,goods_remark,min_original_price as original_price,min_price as price,note,inventory,rebate_score,sales_volume,restrictions,rush_buy,buynote_template as buyNote,post_template_id,restrictions_num';
  149. $goodsBase = self::where(['goods_sn' => $map['goods_sn']])->field($field)->withAttr('goods_img_banner', function ($value) {
  150. return json_decode($value, true) ?: [];
  151. })->withAttr('goods_remark', function ($value) {
  152. return htmlspecialchars_decode($value);
  153. })->withAttr('buyNote', function ($value) {
  154. return htmlspecialchars_decode($value);
  155. })->findOrEmpty()->toArray();
  156. if (empty($goodsBase)) return [];
  157. $specRelation = Db::name('shop_goods_spec_relation')->field('spec_name,spec_value')->where(['goods_id' => $goodsBase['goods_id']])->withAttr('spec_value', function ($value) {
  158. return json_decode($value, true);
  159. })->select()->toArray();
  160. $goodsExpress = Db::name('express_delivery')->where(['id' => $goodsBase['post_template_id']])->findOrEmpty();
  161. $goodsSpec = Db::name('shop_goods_spec')->field('spec_ids,spec_text,original_price,price,picture,stock')->where(['goods_id' => $goodsBase['goods_id']])->select()->toArray();
  162. $goodsBase['expressNote'] = $goodsExpress['remake'] ?: '';
  163. $goodsBase['spec_relation'] = $specRelation;
  164. $goodsBase['goods_spec'] = $goodsSpec;
  165. // if ($goodsBase['goods_type'] == 5){
  166. // $cur_xzmoney = Db::name('system_config')->where('name', 'xz_cur_money')->where('group', 'xzconfig')->value('value');
  167. // $goodsBase['price'] = getXzPirceWithPrice($cur_xzmoney, $goodsBase['price']);
  168. // }
  169. $cache = true;
  170. \services\CacheServices::set(md5('goodsDetail_' . $map['goods_sn']), $goodsBase);
  171. }
  172. if (empty($cache)) {
  173. $goodsSpec = Db::name('shop_goods_spec')->field('spec_ids,spec_text,original_price,price,picture,stock')->where(['goods_id' => $goodsBase['goods_id']])->select()->toArray();
  174. $goodsBase['goods_spec'] = $goodsSpec;
  175. }
  176. // if ($goodsBase['goods_type'] == 5){
  177. // $cur_xzmoney = Db::name('system_config')->where('name', 'xz_cur_money')->where('group', 'xzconfig')->value('value');
  178. // foreach ($goodsBase['goods_spec'] as $key=>&$val){
  179. // $val['price'] = getXzPirceWithPrice($cur_xzmoney, floatval($val['price']));
  180. // }
  181. // }
  182. return $goodsBase;
  183. }
  184. }