Files
oms/back/application/api/controller/Contract.php
2026-03-17 20:21:37 +08:00

430 lines
16 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\api\controller;
use think\Config;
use think\Controller;
use think\Db;
use think\Log;
use think\Model;
use think\Request;
use think\cache\driver\Memcache;
header("Access-Control-Allow-Origin:*");
header("Access-Control-Allow-Methods:GET, POST, OPTIONS, DELETE");
header("Access-Control-Allow-Headers:DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type, Accept-Language, Origin, Accept-Encoding");
class Contract extends Common
{
//获取运营合同类型列表
public function GetOperationContractTypeList()
{
$FirstLeveType = db('contract_type')->where('super_type_id', 0)->where('type_id', '>', 10)->select();
for ($i = 0; $i < count($FirstLeveType); $i++) {
$SecondLeveType = db('contract_type')->where('super_type_id', $FirstLeveType[$i]['type_id'])->select();
for ($m = 0; $m < count($SecondLeveType); $m++)
{
$count = db('contract_info')->where('contract_type', $SecondLeveType[$m]['type_id'])->where('del_time',null)->count();
if ($count>0)
{
$SecondLeveType[$m]['type_name'] .= '【'.$count.'】';
}
}
for ($j = 0; $j < count($SecondLeveType); $j++) {
$ThridLeveType = db('contract_type')->where('super_type_id', $SecondLeveType[$j]['type_id'])->select();
for ($k = 0; $k < count($ThridLeveType); $k++)
{
$count = db('contract_info')->where('contract_type', $ThridLeveType[$k]['type_id'])->where('del_time',null)->count();
if ($count>0)
{
$ThridLeveType[$k]['type_name'] .= '【'.$count.'】';
}
}
$SecondLeveType[$j]['sub_type'] = $ThridLeveType;
}
$FirstLeveType[$i]['sub_type'] = $SecondLeveType;
}
return $this->sendSuccess($FirstLeveType);
}
//根据合同类型获取合同列表
public function GetOperationContractList()
{
$param = request()->post();
$ContractInfoList = db('contract_info')->where('contract_type', $param['contract_type'])
->where('del_time',null)
->select();
return $this->sendSuccess($ContractInfoList);
}
public function GetCustomerProjectList()
{
$param = request()->post();
$FirstLeveType = db('partner_company')->where('company_type & 0x01', 1)->field('company_id as id, company_name as name')->select();
for ($i = 0; $i < count($FirstLeveType); $i++)
{
//dump($FirstLeveType[$i]['type_id']);
$SecondLeveType = db('project_info')->where('customer_id', $FirstLeveType[$i]['id'])->field('project_id as id, project_name as name')->select();
//dump($SecondLeveType);
for ($j = 0; $j < count($SecondLeveType); $j++)
{
$count = db('contract_info')->where('project_id', $SecondLeveType[$j]['id'])->where('contract_category','in', [1, 3])->count();
$SecondLeveType[$j]['name'] .= '【'.$count.'】';
}
$FirstLeveType[$i]['customer_projects'] = $SecondLeveType;
}
return $this->sendSuccess($FirstLeveType);
}
public function GetDevelopProjectList()
{
$param = request()->post();
$FirstLeveType = db('project_info')->where('project_type', 3)->field('project_id as id, project_name as name')->select();
for ($j = 0; $j < count($FirstLeveType); $j++)
{
$count = db('contract_info')->where('project_id', $FirstLeveType[$j]['id'])->where('contract_type', 2)->where('del_time',null)->count();
$FirstLeveType[$j]['name'] .= '【'.$count.'】';
}
return $this->sendSuccess($FirstLeveType);
}
public function GetProjectContractList()
{
$param = request()->post();
$ContractInfoList = [];
if (isset($param['contract_category']))
{
//销售合同/技术协议
if (1 == $param['contract_category']){
$ContractInfoList = db('contract_info')->where('project_id', $param['project_id'])
->where('contract_type', 'in', [1, 2])
->where('contract_category', 'in', [1, 3])
->where('del_time',null)
->select();
}elseif (2 == $param['contract_category']){
$ContractInfoList = db('contract_info')->where('project_id', $param['project_id'])
->where('contract_type', 'in', [1, 2])
->where('contract_category', 'in', [2, 4])
->where('del_time',null)
->select();
}
if (5 == $param['contract_category']){
$ContractInfoList = db('contract_info')->where('project_id', $param['project_id'])
->where('contract_type', 'in', [1, 2])
->where('contract_category', $param['contract_category'])
->where('del_time',null)
->select();
}
}
else
{
$ContractInfoList = db('contract_info')->where('project_id', $param['project_id'])
->where('contract_type', $param['contract_type'])
->where('contract_category', 'in', [1, 3])
->where('del_time',null)
->select();
}
if(isset($param['contract_type'])){
//采购合同/技术协议
if (1 == $param['contract_type'] || 2 == $param['contract_type'])
{
if(isset($param['partner_id'])){
$ContractInfoList = db('contract_info')->where('project_id', $param['project_id'])
->where('contract_type', $param['contract_type'])
->where('partner_id', $param['partner_id'])
->whereIn('contract_category', $param['contract_category'])
->where('del_time',null)
->select();
}else{
$ContractInfoList = db('contract_info')->where('project_id', $param['project_id'])
->where('contract_type', $param['contract_type'])
->where('contract_category', 'in', [1, 3])
->where('del_time',null)
->select();
}
}
}
return $this->sendSuccess($ContractInfoList);
}
//添加合同类型
public function AddContractType()
{
$param = request()->post();
$ret = [];
if ($param['type_id']>0)
{
//添加子类型
$ret = db('contract_type')->where('type_id', $param['type_id'])->field('type_id,super_type_id')->find();
}
else
{
//添加基类型
$ret['type_id'] = 0;
}
if ($ret != null) {
$insert = [];
$insert['type_name'] = $param['type_name'];
$insert['super_type_id'] = $ret['type_id'];
$insert['create_time'] = date('Y-m-d H:i:s');
db('contract_type')->insert($insert);
}
}
public function AddContractInfo()
{
$param = request()->post();
$insert_info = [];
$insert_info['contract_number'] = $param['contract_number'];
$insert_info['contract_name'] = $param['contract_name'];
$insert_info['create_time'] = $param['create_time'];
if(isset($param['contract_des'])){
$insert_info['contract_des'] = $param['contract_des'];
}
if(isset($param['contract_price'])) {
$insert_info['contract_price'] = $param['contract_price'];
}
if(isset($param['partner_id'])){
$insert_info['partner_id'] = $param['partner_id'];
}
if (isset($param['project_id']))
{
$insert_info['project_id'] = $param['project_id']; //合同所属项目ID
$insert_info['contract_category'] = $param['contract_category']; //合同类型 1 商务合同2 技术协议
}
if (isset($param['contract_type']))
{
$insert_info['contract_type'] = $param['contract_type']; //合同所属项目ID
}
if (isset($param['contract_category']))
{
$insert_info['contract_category']= $param['contract_category'];
}
// 先检查键是否存在,再判断值是否为空
if (!isset($param['contract_url']) || $param['contract_url'] == '') {
$insert_info['contract_url'] = '';
} else {
$insert_info['contract_url'] = $param['contract_url'];
// 同理contract_file_name 也建议做存在性检查,避免同理报错
$insert_info['contract_file_name'] = isset($param['contract_file_name']) ? $param['contract_file_name'] : '';
}
db('contract_info')->insert($insert_info);
return $this->sendSuccess('添加成功');
}
public function AddProjectContract()
{
$param = request()->post();
$insert_info = [];
$insert_info['contract_number'] = $param['contract_number'];
$insert_info['contract_name'] = $param['contract_name'];
$insert_info['create_time'] = $param['create_time'];
$insert_info['contract_price'] = $param['contract_price'];
if(isset($param['partner_id'])){
$insert_info['partner_id'] = $param['partner_id'];
}
if (isset($param['project_id']))
{
$insert_info['project_id'] = $param['project_id']; //合同所属项目ID
$insert_info['contract_type'] = $param['contract_type']; //合同类型 1 商务合同2 技术协议
}
$insert_info['contract_type'] = 1; //客户项目合同类
if (isset($param['contract_category']))
{
$insert_info['contract_category']= $param['contract_category'];
}
if($param['contract_url'] == ''){
$insert_info['contract_url'] = '';
}else{
$insert_info['contract_url'] = $param['contract_url'];
}
db('contract_info')->insert($insert_info);
return $this->sendSuccess('添加成功');
}
public function updateContractInfo()
{
$param = request()->post();
if($param != null){
$update = [];
$update['contract_name'] = $param['contract_name'];
$update['contract_category'] = $param['contract_category'];
$update['contract_number'] = $param['contract_number'];
$update['contract_des'] = $param['contract_des'];
if($param['contract_url'] != '')
{
$update['contract_url'] = $param['contract_url'];
}
$update['contract_price'] = $param['contract_price'];
$update['create_time'] = $param['create_time'];
$update['contract_file_name'] = $param['contract_file_name'];
$ret = db('contract_info')->where('contract_id',$param['contract_id'])->update($update);
if($ret){
return $this->sendSuccess('修改成功');
}else{
return $this->sendError('修改失败');
}
}
}
public function delContractInfo()
{
$param = request()->post();
// dump($param);
$update = [];
$update['del_time'] = date('Y-m-d H:i:s');
$ret = db('contract_info')->where('contract_id',$param['contract_id'])->update($update);
if($ret){
return $this->sendSuccess('删除成功');
}else{
return $this->sendError('删除失败');
}
}
// 合同检索
public function searchContracts()
{
$param = request()->param();
$currPage = isset($param['currPage']) ? $param['currPage'] : 1;
$pageSize = isset($param['pageSize']) ? $param['pageSize'] : 20;
// 构建查询条件
$where = ['del_time' => null];
// 时间范围筛选
if (isset($param['start_date']) && !empty($param['start_date'])) {
$where['create_time'] = ['>=', $param['start_date']];
}
if (isset($param['end_date']) && !empty($param['end_date'])) {
if (isset($where['create_time'])) {
$where['create_time'] = [
['>=', $param['start_date']],
['<=', $param['end_date']]
];
} else {
$where['create_time'] = ['<=', $param['end_date']];
}
}
// 合同分类筛选
if (isset($param['contract_category']) && $param['contract_category'] !== '' && $param['contract_category'] !== '0') {
$where['contract_category'] = $param['contract_category'];
}
// 查询合同列表
$contractList = db('contract_info')
->where($where)
->order('contract_id', 'desc')
->page($currPage, $pageSize)
->select();
// 遍历合同列表,补充关联信息
foreach ($contractList as &$contract) {
// 获取合同类型名称
if ($contract['contract_type']) {
$contractType = db('contract_type')
->where('type_id', $contract['contract_type'])
->field('type_name')
->find();
$contract['contract_type_name'] = $contractType ? $contractType['type_name'] : '';
} else {
$contract['contract_type_name'] = '';
}
// 获取合同分类名称
switch ($contract['contract_category']) {
case 1:
$contract['contract_category_name'] = '销售合同';
break;
case 2:
$contract['contract_category_name'] = '销售技术协议';
break;
case 3:
$contract['contract_category_name'] = '采购合同';
break;
case 4:
$contract['contract_category_name'] = '采购及技术协议';
break;
case 5:
$contract['contract_category_name'] = '其他';
break;
default:
$contract['contract_category_name'] = '';
}
// 获取项目名称
if ($contract['project_id']) {
$project = db('project_info')
->where('project_id', $contract['project_id'])
->field('project_name')
->find();
$contract['project_name'] = $project ? $project['project_name'] : '';
} else {
$contract['project_name'] = '';
}
// 获取合作伙伴名称
if ($contract['partner_id']) {
$partner = db('partner_company')
->where('company_id', $contract['partner_id'])
->field('company_name')
->find();
$contract['partner_name'] = $partner ? $partner['company_name'] : '';
} else {
$contract['partner_name'] = '';
}
}
unset($contract);
// 查询总记录数
$total = db('contract_info')->where($where)->count();
$res['list'] = $contractList;
$res['total'] = $total;
return $this->sendSuccess($res);
}
}