GroupActivityLogic.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <?php
  2. namespace app\api\logic;
  3. use app\common\logic\BaseLogic;
  4. use app\common\model\group_activity\GroupActivity;
  5. use think\facade\Db;
  6. /**
  7. * 拼团活动逻辑处理
  8. * Class GroupActivityLogic
  9. * @package app\api\logic
  10. */
  11. class GroupActivityLogic extends BaseLogic
  12. {
  13. /**
  14. * @notes 拼团活动详情
  15. */
  16. public static function detail($id){
  17. $detail = GroupActivity::where(['id'=>$id])->visible([
  18. 'id','title','image','start_time','end_time','type','equity_id',
  19. 'participant_num','origin_price','price','form_time_limit','is_simulate_form','simulate_num'
  20. ])->select()->toArray();
  21. if(!empty($detail)){
  22. $detail['price'] = explode(",",$detail['price']);
  23. $detail['participant_num'] = explode(",",$detail['participant_num']);
  24. $detail['simulate_num'] = $detail['simulate_num'] ? explode(",",$detail['simulate_num']) : [];
  25. }
  26. return $detail;
  27. }
  28. public static function orderDetail($id,$userId){
  29. $goods = GroupOrder::where(['id'=>$id, 'user_id' => $userId])->visible([
  30. 'id','sn','group_activity_id','status','create_time','sell_num','base_service_fee',
  31. 'service_total','service_fee','service_image','fee_schedule','warranty_period','goods_payment_type','goods_category_id'
  32. ])->select()
  33. ->each(function (&$item, $key) use ($userId){
  34. //判定是否存在可使用的用户优惠券,存在的话直接更新展示价格
  35. if($userId!=0){
  36. $result = UserCouponLogic::categoryWithAmountLists(['user_id'=>$userId,'amount'=>$item['service_fee'],'goods_category_id'=>$item['goods_category_id'],'goods_id'=>$item['id']]);
  37. if(!empty($result[0]['amount'])){
  38. $item['base_service_fee'] = '券后'.($item['base_service_fee'] - $result[0]['amount']);
  39. }
  40. }
  41. })->toArray();
  42. if(!empty($goods)){
  43. $data = [];
  44. foreach ($goods as $key => $value) {
  45. if($value['goods_payment_type'] == '2'){
  46. $coupon = ($value['service_total']-$value['service_fee'])>0?'立减'.$value['service_total']-$value['service_fee']:'';
  47. }
  48. if($value['goods_payment_type'] == '3'){
  49. $coupon = '首付'.$value['service_fee'];
  50. }
  51. $data[] = [
  52. 'id'=>$value['id'],
  53. 'goods_image'=>$value['goods_image'],
  54. 'goods_name'=>$value['goods_name'],
  55. 'good_unit'=>$value['good_unit'],
  56. 'goods_banners'=>!empty($value['goods_banners']) ? $value['goods_banners'] : [],
  57. 'goods_payment_type'=>$value['goods_payment_type'],
  58. 'sell_num'=>$value['sell_num'],
  59. 'base_service_fee'=>$value['base_service_fee'],
  60. 'service_total'=>$value['service_total'],
  61. 'service_fee'=>$value['service_fee'],
  62. 'coupon'=>!empty($coupon)?$coupon:'',
  63. 'service_image'=>$value['service_image'],
  64. 'warranty_period'=>$value['warranty_period'],
  65. 'fee_schedule'=>$value['fee_schedule'],
  66. 'goods_category_id'=>$value['goods_category_id']
  67. ];
  68. }
  69. $goods = $data;
  70. }
  71. return $goods;
  72. }
  73. public static function getHotData()
  74. {
  75. return Goods::where(['user_id'=>0,'is_hot'=>1,'platform_value'=>0])
  76. ->with('goodsCategory')
  77. ->visible(['id','goods_name','goods_image'])
  78. ->order(['top_weight' => 'desc', 'id' => 'desc'])
  79. ->select()->toArray();
  80. }
  81. public static function sync(array $params,int $userId): bool
  82. {
  83. Db::startTrans();
  84. try {
  85. if(isset($params['id'])){
  86. $model = Goods::findOrEmpty($params['id']);
  87. if($model->isEmpty()){
  88. throw new \Exception('数据异常');
  89. }
  90. } else{
  91. $model = new Goods();
  92. }
  93. $params['goods_category_id'] = end($params['goods_category_ids']);
  94. $model->goods_category_id = $params['goods_category_id'];
  95. $model->category_type = GoodsCategory::where('id',$params['goods_category_id'])->value('category_type');
  96. $model->goods_category_ids = $params['goods_category_ids'];
  97. $model->goods_category_id = $params['goods_category_id'];
  98. $model->goods_name = $params['goods_name'];
  99. $model->goods_image = $params['goods_image'];
  100. $model->goods_video = $params['goods_video'];
  101. $model->goods_banners = $params['goods_banners'];
  102. $model->goods_number = $params['goods_number'];
  103. $model->good_unit = $params['good_unit'];
  104. $model->goods_size = $params['goods_size'];
  105. $model->goods_type = $params['goods_type'];
  106. $model->goods_brand = $params['goods_brand'];
  107. $model->install_guide = $params['install_guide'];
  108. $model->goods_payment_type = $params['goods_payment_type'];
  109. $model->base_service_fee = $params['base_service_fee'];
  110. $model->service_total = $params['service_total'];
  111. $model->service_fee = $params['service_fee'];
  112. $model->service_image = $params['service_image'];
  113. $model->warranty_period = $params['warranty_period'];
  114. $model->fee_schedule = $params['fee_schedule'];
  115. $model->goods_status = $params['goods_status'];
  116. $model->user_id = $userId;
  117. $model->save();
  118. Db::commit();
  119. return true;
  120. } catch (\Exception $e) {
  121. Db::rollback();
  122. self::setError($e->getMessage());
  123. return false;
  124. }
  125. }
  126. public static function firmGoodsDetail($params){
  127. try{
  128. $data= Goods::where('id',$params['id'])
  129. ->where('user_id',$params['user_id'])
  130. ->with('goodsCategory')
  131. ->withoutField(['is_recommend','recommend_weight','is_top','top_weight','is_hot','hot_weight'])
  132. ->findOrEmpty()->toArray();
  133. if(!empty($data['goods_category_ids'])) {
  134. $data['goods_category_ids'] = array_map("intval", $data['goods_category_ids']);
  135. }
  136. return $data;
  137. }catch(\Exception $e){
  138. self::setError($e->getMessage());
  139. return false;
  140. }
  141. }
  142. }