GoodsLogic.php 11 KB

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