| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- <?php
- namespace app\api\logic;
- use app\common\logic\BaseLogic;
- use app\common\model\external\ExternalPlatform;
- use app\common\model\external\ExternalPlatformGoods;
- use app\common\model\goods\Goods;
- use app\common\model\goods_category\GoodsCategory;
- use app\common\model\works\ServiceWork;
- use think\facade\Db;
- use think\facade\Log;
- /**
- * 服务商品逻辑处理
- * Class GoodsLogic
- * @package app\api\logic
- */
- class GoodsLogic extends BaseLogic
- {
- /**
- * @notes 商品详情
- * @param $goods_id
- * @param $userId
- * @return array
- * @author whitef
- * @date 2022/9/20 17:09
- */
- public static function detail($id,$type,$userId = 0,$params = []){
- $where = [];
- $service_work_id = $params['service_work_id']??0;
- $platform_appid = $params['platform_appid']??0;
- $platform_value = $params['platform_value']??0;
- if($type == 'category'){
- $where[] = ['goods_status','=',1];
- $where[] = ['goods_category_id','=',$id];
- $where[] = ['user_id','=',0];
- $where[] = ['is_agent','=',0];
- $where[] = ['is_activity','=',0];
- if($service_work_id > 0){
- $platform_value = ServiceWork::where('id',$service_work_id)->value('external_platform_id');
- $where[] = ['platform_value','=',$platform_value];
- }elseif ($platform_appid > 0){
- $platform_value = ExternalPlatform::where('appid',$platform_appid)->value('id');
- $where[] = ['platform_value','=',$platform_value];
- }else{
- $where[] = ['platform_value','=',$platform_value];
- }
- $goods = Goods::where($where)->visible([
- 'id','goods_image','goods_name','goods_banners','good_unit','sell_num','base_service_fee',
- 'service_total','service_fee','service_image','fee_schedule','warranty_period','goods_payment_type','goods_category_id'
- ])->select()->toArray();
- }else{
- $goods_category_id = Goods::where('id',$id)->value('goods_category_id');
- $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([
- 'id','goods_image','goods_name','goods_banners','good_unit','sell_num','base_service_fee',
- 'service_total','service_fee','service_image','fee_schedule','warranty_period','goods_payment_type','goods_category_id'
- ])->select()->toArray();
- }
- if(!empty($goods)){
- !empty(env('DEBUG_LOG', false)) && Log::info($userId.'--detail-商品详情:'.json_encode($goods));
- $data = [];
- foreach ($goods as $key => $value) {
- if($service_work_id > 0 || $platform_appid > 0 || $platform_value > 0){
- $value['service_fee'] = self::getPlatformServiceFee($platform_value,$value['id'])?:$value['service_fee'];
- }
- if($value['goods_payment_type'] == '2'){
- $coupon = ($value['service_total']-$value['service_fee'])>0?'立减'.$value['service_total']-$value['service_fee']:'';
- }
- if($value['goods_payment_type'] == '3'){
- $coupon = '首付'.$value['service_fee'];
- }
- $data[] = [
- 'id'=>$value['id'],
- 'goods_image'=>$value['goods_image'],
- 'goods_name'=>$value['goods_name'],
- 'good_unit'=>$value['good_unit'],
- 'goods_banners'=>!empty($value['goods_banners']) ? $value['goods_banners'] : [],
- 'goods_payment_type'=>$value['goods_payment_type'],
- 'sell_num'=>$value['sell_num'],
- 'base_service_fee'=>$value['base_service_fee'],
- 'service_total'=>$value['service_total'],
- 'service_fee'=>$value['service_fee'],
- 'coupon'=>!empty($coupon)?$coupon:'',
- 'service_image'=>$value['service_image'],
- 'warranty_period'=>$value['warranty_period'],
- 'fee_schedule'=>$value['fee_schedule'],
- 'goods_category_id'=>$value['goods_category_id']
- ];
- }
- $goods = $data;
- }
- return $goods;
- }
- public static function eventDetail($id,$userId){
- $goods = Goods::where(['id'=>$id])->where(['platform_value'=>0])->visible([
- 'id','goods_image','goods_name','goods_banners','good_unit','sell_num','base_service_fee',
- 'service_total','service_fee','service_image','fee_schedule','warranty_period','goods_payment_type','goods_category_id','is_activity','activity_service_fee'
- ])->select()
- ->each(function (&$item, $key) use ($userId){
- //判定是否存在可使用的用户优惠券,存在的话直接更新展示价格
- if($userId!=0){
- $result = UserCouponLogic::categoryWithAmountLists(['user_id'=>$userId,'amount'=>$item['service_fee'],'goods_category_id'=>$item['goods_category_id'],'goods_id'=>$item['id']]);
- if(!empty($result[0]['amount'])){
- !empty(env('DEBUG_LOG', false)) && Log::info($userId.'--eventDetail-用户优惠券:'.json_encode($result));
- $item['base_service_fee'] = '券后'.($item['base_service_fee'] - $result[0]['amount']);
- }
- }
- })->toArray();
- if(!empty($goods)){
- !empty(env('DEBUG_LOG', false)) && Log::info($userId.'--eventDetail-商品详情:'.json_encode($goods));
- $data = [];
- foreach ($goods as $key => $value) {
- if($value['goods_payment_type'] == '2'){
- $coupon = ($value['service_total']-$value['service_fee'])>0?'立减'.$value['service_total']-$value['service_fee']:'';
- }
- if($value['goods_payment_type'] == '3'){
- $coupon = '首付'.$value['service_fee'];
- }
- $data[] = [
- 'id'=>$value['id'],
- 'goods_image'=>$value['goods_image'],
- 'goods_name'=>$value['goods_name'],
- 'good_unit'=>$value['good_unit'],
- 'goods_banners'=>!empty($value['goods_banners']) ? $value['goods_banners'] : [],
- 'goods_payment_type'=>$value['goods_payment_type'],
- 'sell_num'=>$value['sell_num'],
- 'base_service_fee'=>$value['base_service_fee'],
- 'service_total'=>$value['service_total'],
- 'service_fee'=>$value['service_fee'],
- 'coupon'=>!empty($coupon)?$coupon:'',
- 'service_image'=>$value['service_image'],
- 'warranty_period'=>$value['warranty_period'],
- 'fee_schedule'=>$value['fee_schedule'],
- 'goods_category_id'=>$value['goods_category_id']
- ];
- }
- $goods = $data;
- }
- return $goods;
- }
- public static function getHotData()
- {
- return Goods::where(['user_id'=>0,'is_hot'=>1,'platform_value'=>0])
- ->with('goodsCategory')
- ->visible(['id','goods_name','goods_image'])
- ->order(['top_weight' => 'desc', 'id' => 'desc'])
- ->select()->toArray();
- }
- public static function sync(array $params,int $userId): bool
- {
- Db::startTrans();
- try {
- if(isset($params['id'])){
- $model = Goods::findOrEmpty($params['id']);
- if($model->isEmpty()){
- throw new \Exception('数据异常');
- }
- } else{
- $model = new Goods();
- }
- $params['goods_category_id'] = end($params['goods_category_ids']);
- $model->goods_category_id = $params['goods_category_id'];
- $model->category_type = GoodsCategory::where('id',$params['goods_category_id'])->value('category_type');
- $model->goods_category_ids = $params['goods_category_ids'];
- $model->goods_category_id = $params['goods_category_id'];
- $model->goods_name = $params['goods_name'];
- $model->goods_image = $params['goods_image'];
- $model->goods_video = $params['goods_video'];
- $model->goods_banners = $params['goods_banners'];
- $model->goods_number = $params['goods_number'];
- $model->good_unit = $params['good_unit'];
- $model->goods_size = $params['goods_size'];
- $model->goods_type = $params['goods_type'];
- $model->goods_brand = $params['goods_brand'];
- $model->install_guide = $params['install_guide'];
- $model->goods_payment_type = $params['goods_payment_type'];
- $model->base_service_fee = $params['base_service_fee'];
- $model->service_total = $params['service_total'];
- $model->service_fee = $params['service_fee'];
- $model->service_image = $params['service_image'];
- $model->warranty_period = $params['warranty_period'];
- $model->fee_schedule = $params['fee_schedule'];
- $model->goods_status = $params['goods_status'];
- $model->user_id = $userId;
- $model->save();
- Db::commit();
- return true;
- } catch (\Exception $e) {
- Db::rollback();
- self::setError($e->getMessage());
- return false;
- }
- }
- public static function firmGoodsDetail($params){
- try{
- $data= Goods::where('id',$params['id'])
- ->where('user_id',$params['user_id'])
- ->with('goodsCategory')
- ->withoutField(['is_recommend','recommend_weight','is_top','top_weight','is_hot','hot_weight'])
- ->findOrEmpty()->toArray();
- if(!empty($data['goods_category_ids'])) {
- $data['goods_category_ids'] = array_map("intval", $data['goods_category_ids']);
- }
- return $data;
- }catch(\Exception $e){
- self::setError($e->getMessage());
- return false;
- }
- }
- public static function getPlatformServiceFee($platform_value,$goods_id)
- {
- return ExternalPlatformGoods::where('external_platform_id',$platform_value)->where('goods_id',$goods_id)->value('service_fee');
- }
- public static function getPlatformCategoryIds($platform_appid){
- try{
- $platform_value = ExternalPlatform::where('appid',$platform_appid)->value('id');
- $goods_categorys= Goods::where('platform_value',$platform_value)
- ->field('goods_category_ids')
- ->group('goods_category_ids')
- ->select()->toArray();
- $res = [];
- foreach ($goods_categorys as $goods_category) {
- $res = array_unique(array_merge($res, $goods_category['goods_category_ids']));
- }
- return $res;
- }catch(\Exception $e){
- self::setError($e->getMessage());
- return [0];
- }
- }
- }
|