Goods.php 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2017~2021 https://www.yiovo.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
  8. // +----------------------------------------------------------------------
  9. // | Author: 萤火科技 <admin@yiovo.com>
  10. // +----------------------------------------------------------------------
  11. declare (strict_types = 1);
  12. namespace app\api\controller;
  13. use app\api\model\Cart as CartModel;
  14. use app\api\model\Goods as GoodsModel;
  15. use app\api\service\User as UserService;
  16. use app\common\enum\goods\GoodsType;
  17. use app\common\library\helper;
  18. use app\common\model\BrowseRecords;
  19. use app\store\model\qc\QcMjSendActivity;
  20. use app\common\service\delivery\Express as ExpressService;
  21. use app\api\model\Category;
  22. use app\api\model\GoodsCategoryRel;
  23. use app\api\model\member\MemberGoods as MemberGoodsModel;
  24. use app\api\model\groupbuylb\GroupBuyLbActivity;
  25. use app\common\model\ms\MsActivity as MsActivityModel;
  26. use app\api\model\Order as OrderModel;
  27. use app\api\model\za\ZaActivity as ZaActivityModel;
  28. use app\common\model\store\Setting as SettingModel;
  29. /**
  30. * 商品控制器
  31. * Class Goods
  32. * @package app\api\controller
  33. */
  34. class Goods extends Controller
  35. {
  36. /**
  37. * 商品列表`
  38. *
  39. * @return array
  40. * @throws \think\db\exception\DbException
  41. */
  42. public function list()
  43. {
  44. // 获取列表数据
  45. $model = new GoodsModel;
  46. $enableExchange = boolval($this->request->param('enable_exchange', 0));
  47. $list = $model->getList($this->request->param(),15,false, $enableExchange);
  48. $goodsType = $this->request->param('goods_type', null);
  49. foreach ($list as $item){
  50. if ($goodsType == GoodsType::EXCHANGE){
  51. $item['za'] = null;
  52. $item['miaosha'] = null;
  53. continue;
  54. }
  55. //买一赠一
  56. $za = (new ZaActivityModel())->getZaGood($item['goods_id']);
  57. if(isset($za)){
  58. $item['za'] = $za;
  59. }else{
  60. $item['za'] = null;
  61. }
  62. $miaosha = (new MsActivityModel)->getMsPrice($item['goods_id'],$item['goods_price_min']);
  63. $item['miaosha'] = $miaosha;
  64. }
  65. return $this->renderSuccess(compact('list'));
  66. }
  67. public function ricelist(){
  68. // 获取列表数据
  69. $model = new GoodsModel;
  70. $category = Category::with(['goods'])->where("status",1)->where("type",2)->select();
  71. $goods_id_array = [];
  72. foreach($category as $row){
  73. $goods = $row['goods'];
  74. foreach($goods as $row){
  75. $goods_id_array[] = $row['goods_id'];
  76. }
  77. }
  78. $param = array_merge($this->request->param(),['goods_id_arr'=>$goods_id_array]);
  79. $list = $model->getRiceList($param);
  80. // return $category;
  81. return $this->renderSuccess(compact('list'));
  82. }
  83. /**
  84. * 获取商品详情
  85. * @param int $id
  86. * @return array
  87. */
  88. public function detail(int $id, int $addressId = 0, int $staffUserId = 0)
  89. {
  90. $user = UserService::getCurrentLoginUser();
  91. // 商品详情
  92. $model = new GoodsModel;
  93. $goodsInfo = $model->getDetails($id, $user, $addressId, $staffUserId);
  94. $goodsInfo->inc('view_num', 1)->update();
  95. if ($user) {
  96. $browseRecord = BrowseRecords::whereDay('create_time')->where(['user_id' => $user->user_id, 'source_type' => 1, 'source_id' => $id])->find();
  97. if (!$browseRecord) {
  98. BrowseRecords::create([
  99. 'user_id' => $user->user_id,
  100. 'source_type' => 1,
  101. 'source_id' => $id
  102. ]);
  103. $goodsInfo->inc('view_distinct_num', 1)->update();
  104. } else {
  105. $browseRecord->update_time = time();
  106. $browseRecord->save();
  107. }
  108. }
  109. $member = MemberGoodsModel::where('goods_id',$id)->where("status",0)->find();
  110. $goodsInfoArray = $goodsInfo->toArray();
  111. $goodsInfoArray['member_price'] = (new MemberGoodsModel)->getGoodsMemberPrice($id,$goodsInfoArray['goods_price_min']);
  112. $groupbuylb = new GroupBuyLbActivity;
  113. $group_buy = $groupbuylb->getGroupBuyLbPrice($id);
  114. $goodsInfoArray['group_buy'] = $group_buy;
  115. //秒杀
  116. $miaosha = (new MsActivityModel)->getMsPrice($id,$goodsInfoArray['goods_price_min']);
  117. if(isset($miaosha)&&$miaosha['type']==4){
  118. $goodsInfoArray['coupon_list'] = [];//秒杀中不返回优惠券
  119. }
  120. if(isset($miaosha)){
  121. $user_id = $user->user_id??0;
  122. if($user_id==0){
  123. $have_buy = 0;
  124. }else{
  125. $have_buy =(new OrderModel())->miaoshaHaveBuyCnt($miaosha['ms_id'],$user_id);
  126. }
  127. //还能买多少件
  128. $miaosha['can_buy_mount'] = $miaosha['limit_mount'] - $have_buy;
  129. }
  130. //买一赠一
  131. $za = (new ZaActivityModel())->getZaGood($id);
  132. if(isset($za)){
  133. $goodsInfoArray['za'] = $za;
  134. }
  135. $goodsInfoArray['miaosha'] = $miaosha;
  136. return $this->renderSuccess($goodsInfoArray);
  137. }
  138. /**
  139. * Notes:计算当前配送模板的运费
  140. * Author: zhangs
  141. * DateTime: 2021/9/24 20:28
  142. * @return array
  143. */
  144. public function calcDeliveryAmount()
  145. {
  146. $params = $this->request->param();
  147. $model = new GoodsModel();
  148. $goodsList = $model->getOrderGoodsListForDelivery(
  149. (int)$params['goodsId'],
  150. (string)$params['goodsSkuId'],
  151. (int)$params['goodsNum']
  152. );
  153. // 设置默认数据:配送费用
  154. helper::setDataAttribute($goodsList, [
  155. 'expressPrice' => 0,
  156. ], true);
  157. // 当前用户收货城市id
  158. $user = UserService::getCurrentLoginUser();
  159. $cityId = $user['address_default'] ? (int)$user['address_default']['city_id'] : 0;
  160. // 初始化配送服务类
  161. $ExpressService = new ExpressService($cityId, $goodsList);
  162. $isIntraRegion = true;
  163. // 验证商品是否在限购配送范围
  164. $isDeliveryLimit = $ExpressService->isDeliveryLimit();
  165. if ($isDeliveryLimit == false) {
  166. $isIntraRegion = false;
  167. } else {
  168. // 验证商品是否在配送范围
  169. $isIntraRegion = $ExpressService->isIntraRegion();
  170. if ($cityId > 0 && $isIntraRegion == false) {
  171. $isIntraRegion = false;
  172. }
  173. }
  174. // 验证商品是否在配送范围
  175. // $isIntraRegion = $ExpressService->isIntraRegion();
  176. // if ($cityId > 0 && $isIntraRegion == false) {
  177. // $notInRuleGoodsName = $ExpressService->getNotInRuleGoodsName();
  178. // return $this->renderError("很抱歉,您的收货地址不在商品 [".limit_str((string)$notInRuleGoodsName)."] 的配送范围内");
  179. // }
  180. // 订单总运费金额
  181. $expressPrice = $ExpressService->getDeliveryFee();
  182. return $this->renderSuccess(compact('isIntraRegion', 'expressPrice'));
  183. }
  184. /**
  185. * 全场满件赠活动数据
  186. *
  187. * @param int $act_id
  188. * @return array|\think\response\Json
  189. */
  190. public function qcMjSendActData(int $act_id)
  191. {
  192. $now = date('Y-m-d H:i:s');
  193. $filter[] = ['start_time', '<', $now];
  194. $filter[] = ['end_time', '>', $now];
  195. $filter[] = ['audit_status', '=', 1];
  196. $filter[] = ['status', '=', 1];
  197. $filter[] = ['id', '=', $act_id];
  198. $activity = QcMjSendActivity::detail($filter,['image','goodsExcept','giftGoods']);
  199. if(empty($activity)){
  200. return $this->renderError("活动不存在");
  201. }
  202. $activity = $activity->toArray();
  203. $activity['activity_status'] = $activity['activity_status']['code'];
  204. $activity['image_url'] = $activity['image']['preview_url'] ?? '';
  205. $cartModel = new CartModel();
  206. $activity['cart_total'] = $cartModel->getCartTotal();
  207. $cartGoods = $cartModel->getCartGoodsIdNums();
  208. if (!empty($activity['goodsExcept'])) {
  209. $num = 0;
  210. $mj_props = array_values(array_sort($activity['mj_props'], 'value'));
  211. foreach ($activity['goodsExcept'] as $key=>&$item) {
  212. if($item['residue_stock']<=0){
  213. unset($activity['goodsExcept'][$key]);
  214. }else{
  215. $num += $item['residue_stock'];
  216. }
  217. $item['cart_num'] = 0;
  218. if (isset($cartGoods[$item['goods_id']])) {
  219. $item['cart_num'] = $cartGoods[$item['goods_id']];
  220. }
  221. }
  222. if($num>0 && $mj_props[0]['value']>$num){//剩余数量小于最小的赠送
  223. $activity['goodsExcept'] = [];
  224. }
  225. }
  226. if (!empty($activity['giftGoods'])) {
  227. foreach ($activity['giftGoods'] as &$item) {
  228. $item['cart_num'] = 0;
  229. if (isset($cartGoods[$item['goods_id']])) {
  230. $item['cart_num'] = $cartGoods[$item['goods_id']];
  231. }
  232. }
  233. }
  234. return $this->renderSuccess($activity);
  235. }
  236. }