MusicianAgreementService.php 5.27 KB
<?php

namespace App\Services;

use App\Helper\CosHelper;
use App\Helper\Response;
use App\Models\Legal\Contract;
use App\Models\Legal\StakeholderContract;
use App\Models\Legal\Treaty;
use Qcloud\Cos\Client;

/**
 * Class MusicianAgreementService
 * @package App\Services
 */
class MusicianAgreementService extends Service
{
    /**
     * @return \Illuminate\Http\JsonResponse
     */
    public function treatyList()
    {
        $res = Contract::query()->whereIn('stakeholder_id', $this->request->get('stakeholder_ids'))->where('flag', 3)->where('date_ending', '>', $this->now)->with(['filesNewTreaty:id,key,link_id'])
                ->select(['id', 'name as treaty_name', 'treaty_type', 'service_types as service_type', 'date_ending as deadline_date', 'music_nums as music_no'])->orderByDesc('created_at')->paginate($this->pageSize);

        $client = new CosHelper();

        foreach ($res as &$item) {
            $item_res = $item->toArray();
            $files = [];
            if (!empty($item_res['files_new_treaty'])) {
                $files = array_column($item_res['files_new_treaty'], 'key');
            }

            foreach ($files as &$file) {
                $file = $client->getPreviewUrl($file);
            }

            $item->setAttribute('treaty_type', $item->treaty_type_name);
            $item->setAttribute('service_type', $item->service_type_name);
            $item->setAttribute('files', $files);
            $item->setAttribute('files_new', $item->filesNewTreaty);

            unset($item->filesNew, $item->filesNewTreaty);
        }

        return Response::success($res);
    }


    /**
     * 我的合约列表
     * @return \Illuminate\Http\JsonResponse
     */
    public function agreementList()
    {
        $client = new CosHelper();

        //歌曲版权
        $contract_table = Contract::table();
        $contract = Contract::query()->with(['filesNew:id,key,link_id', 'moreSongs'])->where(['flag'=>1])->whereIn('sc.stakeholder_id', $this->request->get('stakeholder_ids'))
                    ->join(StakeholderContract::table()." as sc", Contract::table().".id", '=', 'sc.contract_id')
                    ->select(["{$contract_table}.id", 'contract_no', 'name', 'right_type', 'proportion', 'date_signing', 'date_starting', 'date_ending', 'cooperation_type', 'prepaid_money', 'reward_money'])->get()->toArray();

        $rights = [];
        foreach ($contract as $contract_item) {
            $files = [];
            if (!empty($contract_item['files_new'])) {
                $files = array_column($contract_item['files_new'], 'key');
            }

            foreach ($files as &$file) {
                $file = $client->getPreviewUrl($file);
            }

            if (!isset($rights[$contract_item['id']])) {
                $rights[$contract_item['id']] = [
                    'id'=>$contract_item['id'],
                    'no'=>$contract_item['contract_no'],
                    'name'=>$contract_item['name'],
                    'date_signing'=>$contract_item['date_signing'],
                    'date_starting'=>$contract_item['date_starting'],
                    'date_ending'=>$contract_item['date_ending'],  //截止日期
                    'files'=>$files,
                    'songs'=>$contract_item['more_songs'],
                    'type'=>2, //歌曲版权合同
                    'cooperation_type'=>$contract_item['cooperation_type'],
                ];
            }
            $rights[$contract_item['id']]['right'][] = [
                'right_type'=>$contract_item['right_type'],
                'proportion'=>$contract_item['proportion'],
                'prepaid_money'=>$contract_item['prepaid_money'],
                'reward_money'=>$contract_item['reward_money'],
            ];

            if ((strtotime($contract_item['date_starting']) >= time()) && (strtotime($contract_item['date_ending']) <= time())) {
                //进行中
                $rights[$contract_item['id']]['status'] = 1;
            } else {
                //未生效 || 已经结束
                $rights[$contract_item['id']]['status'] = 0;
            }

        }
        $rights = array_values($rights);
        foreach ($rights as &$right_item) {
            //关联歌曲
            $right_item['relation_song'] = Contract::relationSong($right_item['songs']);
            //权利类型
            $right_item['role'] = Contract::getRole($right_item['right']);
            //费用模式
            $right_item['model'] = Contract::getModel($right_item['cooperation_type'], $right_item['right']);
            unset($right_item['songs'], $right_item['right']);
        }

        $agreement = array_merge($rights);

        //排序
        usort($agreement, function ($a, $b) {
            if ($a['status'] == $b['status']) {
                if (!empty($a['date_signing']) && !empty($b['date_signing'])) {
                    return strtotime($a['date_signing']) > strtotime($b['date_signing']) ? -1 : 1;
                } else if (!empty($a['date_signing'])) {
                    return -1;
                } else if (!empty($b['date_signing'])) {
                    return 1;
                } else {
                    return -1;
                }
            }

            return $a['status'] > $b['status'] ? -1 : 1;
        });

        return Response::success($agreement);
    }

}