GoodsLogic.php 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <?php
  2. namespace app\api\logic;
  3. use app\common\logic\BaseLogic;
  4. use app\common\model\goods\Goods;
  5. use app\common\model\goods_category\GoodsCategory;
  6. use think\facade\Db;
  7. /**
  8. * 服务商品逻辑处理
  9. * Class GoodsLogic
  10. * @package app\api\logic
  11. */
  12. class GoodsLogic extends BaseLogic
  13. {
  14. /**
  15. * @notes 商品详情
  16. * @param $goods_id
  17. * @param $userId
  18. * @return array
  19. * @author whitef
  20. * @date 2022/9/20 17:09
  21. */
  22. public static function detail($id,$type){
  23. if($type == 'category'){
  24. $goods = Goods::where(['goods_category_id'=>$id,'user_id'=>0,'is_agent'=>0,'is_activity'=>0,'platform_value'=>0])->visible([
  25. 'id','goods_image','goods_name','goods_banners','good_unit','sell_num','base_service_fee',
  26. 'service_total','service_fee','service_image','fee_schedule','warranty_period','goods_payment_type','goods_category_id'
  27. ])->select()->toArray();
  28. }else{
  29. $goods_category_id = Goods::where('id',$id)->value('goods_category_id');
  30. $goods = Goods::where(['goods_category_id'=>$goods_category_id,'user_id'=>0,'is_agent'=>0,'is_activity'=>0,'platform_value'=>0])->visible([
  31. 'id','goods_image','goods_name','goods_banners','good_unit','sell_num','base_service_fee',
  32. 'service_total','service_fee','service_image','fee_schedule','warranty_period','goods_payment_type','goods_category_id'
  33. ])->select()->toArray();
  34. }
  35. if(!empty($goods)){
  36. $data = [];
  37. foreach ($goods as $key => $value) {
  38. if($value['goods_payment_type'] == '2'){
  39. $coupon = ($value['service_total']-$value['service_fee'])>0?'立减'.$value['service_total']-$value['service_fee']:'';
  40. }
  41. if($value['goods_payment_type'] == '3'){
  42. $coupon = '首付'.$value['service_fee'];
  43. }
  44. $data[] = [
  45. 'id'=>$value['id'],
  46. 'goods_image'=>$value['goods_image'],
  47. 'goods_name'=>$value['goods_name'],
  48. 'good_unit'=>$value['good_unit'],
  49. 'goods_banners'=>!empty($value['goods_banners']) ? $value['goods_banners'] : [],
  50. 'goods_payment_type'=>$value['goods_payment_type'],
  51. 'sell_num'=>$value['sell_num'],
  52. 'base_service_fee'=>$value['base_service_fee'],
  53. 'service_total'=>$value['service_total'],
  54. 'service_fee'=>$value['service_fee'],
  55. 'coupon'=>!empty($coupon)?$coupon:'',
  56. 'service_image'=>$value['service_image'],
  57. 'warranty_period'=>$value['warranty_period'],
  58. 'fee_schedule'=>$value['fee_schedule'],
  59. 'goods_category_id'=>$value['goods_category_id']
  60. ];
  61. }
  62. $goods = $data;
  63. }
  64. return $goods;
  65. }
  66. public static function eventDetail($id,$userId){
  67. $goods = Goods::where(['id'=>$id])->where(['platform_value'=>0])->visible([
  68. 'id','goods_image','goods_name','goods_banners','good_unit','sell_num','base_service_fee',
  69. 'service_total','service_fee','service_image','fee_schedule','warranty_period','goods_payment_type','goods_category_id'
  70. ])->select()
  71. ->each(function (&$item, $key) use ($userId){
  72. //判定是否存在可使用的用户优惠券,存在的话直接更新展示价格
  73. if($userId!=0){
  74. $result = UserCouponLogic::categoryWithAmountLists(['user_id'=>$userId,'amount'=>$item['service_fee'],'goods_category_id'=>$item['goods_category_id'],'goods_id'=>$item['id']]);
  75. if(!empty($result[0]['amount'])){
  76. $item['base_service_fee'] = '券后'.($item['base_service_fee'] - $result[0]['amount']);
  77. }
  78. }
  79. })->toArray();
  80. if(!empty($goods)){
  81. $data = [];
  82. foreach ($goods as $key => $value) {
  83. if($value['goods_payment_type'] == '2'){
  84. $coupon = ($value['service_total']-$value['service_fee'])>0?'立减'.$value['service_total']-$value['service_fee']:'';
  85. }
  86. if($value['goods_payment_type'] == '3'){
  87. $coupon = '首付'.$value['service_fee'];
  88. }
  89. $data[] = [
  90. 'id'=>$value['id'],
  91. 'goods_image'=>$value['goods_image'],
  92. 'goods_name'=>$value['goods_name'],
  93. 'good_unit'=>$value['good_unit'],
  94. 'goods_banners'=>!empty($value['goods_banners']) ? $value['goods_banners'] : [],
  95. 'goods_payment_type'=>$value['goods_payment_type'],
  96. 'sell_num'=>$value['sell_num'],
  97. 'base_service_fee'=>$value['base_service_fee'],
  98. 'service_total'=>$value['service_total'],
  99. 'service_fee'=>$value['service_fee'],
  100. 'coupon'=>!empty($coupon)?$coupon:'',
  101. 'service_image'=>$value['service_image'],
  102. 'warranty_period'=>$value['warranty_period'],
  103. 'fee_schedule'=>$value['fee_schedule'],
  104. 'goods_category_id'=>$value['goods_category_id']
  105. ];
  106. }
  107. $goods = $data;
  108. }
  109. return $goods;
  110. }
  111. public static function getHotData()
  112. {
  113. return Goods::where(['user_id'=>0,'is_hot'=>1,'platform_value'=>0])
  114. ->with('goodsCategory')
  115. ->visible(['id','goods_name','goods_image'])
  116. ->order(['top_weight' => 'desc', 'id' => 'desc'])
  117. ->select()->toArray();
  118. }
  119. public static function sync(array $params,int $userId): bool
  120. {
  121. Db::startTrans();
  122. try {
  123. if(isset($params['id'])){
  124. $model = Goods::findOrEmpty($params['id']);
  125. if($model->isEmpty()){
  126. throw new \Exception('数据异常');
  127. }
  128. } else{
  129. $model = new Goods();
  130. }
  131. $params['goods_category_id'] = end($params['goods_category_ids']);
  132. $model->goods_category_id = $params['goods_category_id'];
  133. $model->category_type = GoodsCategory::where('id',$params['goods_category_id'])->value('category_type');
  134. $model->goods_category_ids = $params['goods_category_ids'];
  135. $model->goods_category_id = $params['goods_category_id'];
  136. $model->goods_name = $params['goods_name'];
  137. $model->goods_image = $params['goods_image'];
  138. $model->goods_video = $params['goods_video'];
  139. $model->goods_banners = $params['goods_banners'];
  140. $model->goods_number = $params['goods_number'];
  141. $model->good_unit = $params['good_unit'];
  142. $model->goods_size = $params['goods_size'];
  143. $model->goods_type = $params['goods_type'];
  144. $model->goods_brand = $params['goods_brand'];
  145. $model->install_guide = $params['install_guide'];
  146. $model->goods_payment_type = $params['goods_payment_type'];
  147. $model->base_service_fee = $params['base_service_fee'];
  148. $model->service_total = $params['service_total'];
  149. $model->service_fee = $params['service_fee'];
  150. $model->service_image = $params['service_image'];
  151. $model->warranty_period = $params['warranty_period'];
  152. $model->fee_schedule = $params['fee_schedule'];
  153. $model->goods_status = $params['goods_status'];
  154. $model->user_id = $userId;
  155. $model->save();
  156. Db::commit();
  157. return true;
  158. } catch (\Exception $e) {
  159. Db::rollback();
  160. self::setError($e->getMessage());
  161. return false;
  162. }
  163. }
  164. public static function firmGoodsDetail($params){
  165. try{
  166. $data= Goods::where('id',$params['id'])
  167. ->where('user_id',$params['user_id'])
  168. ->with('goodsCategory')
  169. ->withoutField(['is_recommend','recommend_weight','is_top','top_weight','is_hot','hot_weight'])
  170. ->findOrEmpty()->toArray();
  171. if(!empty($data['goods_category_ids'])) {
  172. $data['goods_category_ids'] = array_map("intval", $data['goods_category_ids']);
  173. }
  174. return $data;
  175. }catch(\Exception $e){
  176. self::setError($e->getMessage());
  177. return false;
  178. }
  179. }
  180. }