<?php
// +----------------------------------------------------------------------
// | likeadmin快速开发前后端分离管理后台(PHP版)
// +----------------------------------------------------------------------
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
// | 开源版本可自由商用,可去除界面版权logo
// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
// | github下载:https://github.com/likeshop-github/likeadmin
// | 访问官网:https://www.likeadmin.cn
// | likeadmin团队 版权所有 拥有最终解释权
// +----------------------------------------------------------------------
// | author: likeadminTeam
// +----------------------------------------------------------------------

namespace app\adminapi\logic\project;


use app\common\model\custom\Custom;
use app\common\model\dept\Dept;
use app\common\model\dept\Orgs;
use app\common\model\project\Project;
use app\common\logic\BaseLogic;
use app\common\model\project\ProjectTypeSet;
use think\facade\Db;


/**
 * Project逻辑
 * Class ProjectLogic
 * @package app\adminapi\logic\project
 */
class ProjectLogic extends BaseLogic
{


    /**
     * @notes 添加
     * @param array $params
     * @return bool
     * @author likeadmin
     * @date 2023/11/12 14:30
     */
    public static function add(array $params, $adminId): bool
    {
        Db::startTrans();
        try {
            Project::create([
	            'org_id' => $params['org_id'],
	            'dept_id' => $params['dept_id'],
                'custom_id' => $params['custom_id'],
				'name' => $params['name'],
                'project_type' => $params['project_type'],
                'project_code' => data_unique_code('P'),
                'project_content' => $params['project_content'] ?? 0,
                'project_estimation' => $params['project_estimation'] ?? 0,
                'project_address' => $params['project_address'] ?? '',
                'estimated_construction' => $params['estimated_construction'] ?? '',
                'bidding_time' => !empty($params['bidding_time']) ? strtotime($params['bidding_time']) : 0,
                'bidding_method' => $params['bidding_method'] ?? 0,
                'contacts' => $params['contacts'] ?? '',
                'position' => $params['position'] ?? '',
                'telephone' => $params['telephone'] ?? '',
                'department' => $params['department'] ?? '',
                'person' => $params['person'] ?? '',
                'relationship' => $params['relationship'] ?? 0,
                'discovery_time' => strtotime($params['discovery_time']),
                'information_sources' => $params['information_sources'],
                'competitor' => $params['competitor'] ?? '',
                'construction_funds_sources' => $params['construction_funds_sources'] ?? 0,
                'construction_payment_method' => $params['construction_payment_method'] ?? '',
                'construction_financial_status' => $params['construction_financial_status'] ?? 0,
                'construction_recognition' => $params['construction_recognition'] ?? 0,
                'my_construction_recognition' => $params['my_construction_recognition'] ?? 0,
                'strategic_significance' => $params['strategic_significance'] ?? 0,
                'industry' => $params['industry'] ?? 0,
                'unit_nature' => $params['unit_nature'] ?? 0,
                'annex' => $params['annex']? json_encode($params['annex']) : '',
                'status' => 0,
				'is_budget' => 0,
	            'add_user' => $adminId
            ]);
            Db::commit();
            return true;
        } catch (\Exception $e) {
            Db::rollback();
            self::setError($e->getMessage());
            return false;
        }
    }


    /**
     * @notes 编辑
     * @param array $params
     * @return bool
     * @author likeadmin
     * @date 2023/11/12 14:30
     */
    public static function edit(array $params): bool
    {
        Db::startTrans();
        try {
            Project::where('id', $params['id'])->update([
	            'org_id' => $params['org_id'],
	            'dept_id' => $params['dept_id'],
	            'custom_id' => $params['custom_id'],
	            'name' => $params['name'],
	            'project_type' => $params['project_type'],
	            'project_code' => data_unique_code('P'),
	            'project_content' => $params['project_content'] ?? 0,
	            'project_estimation' => $params['project_estimation'] ?? 0,
	            'project_address' => $params['project_address'] ?? '',
	            'estimated_construction' => $params['estimated_construction'] ?? '',
	            'bidding_time' => !empty($params['bidding_time']) ? strtotime($params['bidding_time']) : 0,
	            'bidding_method' => $params['bidding_method'] ?? 0,
	            'contacts' => $params['contacts'] ?? '',
	            'position' => $params['position'] ?? '',
	            'telephone' => $params['telephone'] ?? '',
	            'department' => $params['department'] ?? '',
	            'person' => $params['person'] ?? '',
	            'relationship' => $params['relationship'] ?? 0,
	            'discovery_time' => strtotime($params['discovery_time']),
	            'information_sources' => $params['information_sources'],
	            'competitor' => $params['competitor'] ?? '',
	            'construction_funds_sources' => $params['construction_funds_sources'] ?? 0,
	            'construction_payment_method' => $params['construction_payment_method'] ?? '',
	            'construction_financial_status' => $params['construction_financial_status'] ?? 0,
	            'construction_recognition' => $params['construction_recognition'] ?? 0,
	            'my_construction_recognition' => $params['my_construction_recognition'] ?? 0,
	            'strategic_significance' => $params['strategic_significance'] ?? 0,
	            'industry' => $params['industry'] ?? 0,
	            'unit_nature' => $params['unit_nature'] ?? 0,
                'annex' => $params['annex']? json_encode($params['annex']) : '',
	            'update_time' => time(),
            ]);
            Db::commit();
            return true;
        } catch (\Exception $e) {
            Db::rollback();
            self::setError($e->getMessage());
            return false;
        }
    }


    /**
     * @notes 删除
     * @param array $params
     * @return bool
     * @author likeadmin
     * @date 2023/11/12 14:30
     */
    public static function delete(array $params): bool
    {
        return Project::destroy($params['id']);
    }


    /**
     * @notes 获取详情
     * @param $params
     * @return array
     * @author likeadmin
     * @date 2023/11/12 14:30
     */
    public static function detail($params): array
    {
		$data = Project::findOrEmpty($params['id']);
		$org = Orgs::field('name')->where('id',$data['org_id'])->findOrEmpty();
		$dept = Dept::field('name')->where('id',$data['dept_id'])->findOrEmpty();
	    $projectType = ProjectTypeSet::field('name')->where('id',$data['project_type'])->findOrEmpty();
	    $custom = Custom::field('name')->where('id',$data['custom_id'])->findOrEmpty();
		$data['org_name'] = $org['name'];
		$data['dept_name'] = $dept['name'];
	    $data['custom_name'] = $custom['name'];
	    $data['project_type_name'] = $projectType['name'];
		$data['status_text'] = $data->status_text;
	    $data['project_content_text'] = $data->project_content_text;
	    $data['bidding_method_text'] = $data->bidding_method_text;
	    $data['relationship_text'] = $data->relationship_text;
	    $data['information_sources_text'] = $data->information_sources_text;
	    $data['construction_funds_sources_text'] = $data->construction_funds_sources_text;
	    $data['construction_financial_status_text'] = $data->construction_financial_status_text;
	    $data['construction_recognition_text'] = $data->construction_recognition_text;
	    $data['my_construction_recognition_text'] = $data->my_construction_recognition_text;
	    $data['strategic_significance_text'] = $data->strategic_significance_text;
	    $data['industry_text'] = $data->industry_text;
	    $data['unit_nature_text'] = $data->unit_nature_text;
        return $data->toArray();
    }
}