This commit is contained in:
weiz 2024-03-21 14:37:08 +08:00
parent 55d16cfdb5
commit 7430279c85
2 changed files with 216 additions and 211 deletions

View File

@ -12,181 +12,182 @@
// | author: likeadminTeam
// +----------------------------------------------------------------------
namespace app\adminapi\logic\contract;
namespace app\adminapi\logic\contract;
use app\common\model\auth\Admin;
use app\common\model\contract\Contract;
use app\common\model\contract\ContractNegotiation;
use app\common\logic\BaseLogic;
use app\common\model\custom\Custom;
use app\common\model\oa\FlowApprove;
use app\common\model\project\Project;
use think\facade\Db;
use app\common\logic\BaseLogic;
use app\common\model\auth\Admin;
use app\common\model\contract\Contract;
use app\common\model\contract\ContractNegotiation;
use app\common\model\custom\Custom;
use app\common\model\oa\FlowApprove;
use app\common\model\project\Project;
use think\facade\Db;
/**
* 合同洽商逻辑
* Class ContractNegotiationLogic
* @package app\adminapi\logic\contract
*/
class ContractNegotiationLogic extends BaseLogic
{
/**
* 合同洽商逻辑
* Class ContractNegotiationLogic
* @package app\adminapi\logic\contract
*/
class ContractNegotiationLogic extends BaseLogic
{
/**
* @notes 添加合同洽商
* @param array $params
* @return bool
* @author likeadmin
* @date 2023/12/04 21:26
*/
public static function add(array $params): bool
{
$contract = Contract::field('project_id')->where('id',$params['contract_id'])->findOrEmpty();
$profit = $params['negotiation_amount'] - (($params['labor_costs']?:0) + ($params['material_costs']?:0));
$profit_rate = $profit / $params['negotiation_amount'];
Db::startTrans();
try {
ContractNegotiation::create([
'project_id' => $contract['project_id'],
'contract_id' => $params['contract_id'],
'negotiation_name' => $params['negotiation_name'],
'negotiation_no' => data_unique_code('QS'),
'negotiation_amount' => $params['negotiation_amount'],
'negotiation_type' => $params['negotiation_type'],
'labor_costs' => $params['labor_costs'] ?? 0,
'material_costs' => $params['material_costs'] ?? 0,
'warranty_amount' => $params['warranty_amount'] ?? 0,
'warranty_expire_date' => !empty($params['Warranty_expire_date']) ? strtotime($params['Warranty_expire_date']) : 0,
'profit' => $profit,
'profit_rate' => $profit_rate,
'negotiation_content' => $params['negotiation_content'] ?? '',
'negotiation_detail' => $params['negotiation_detail'] ?? '',
'negotiation_quotation' => $params['negotiation_quotation'] ? json_encode($params['negotiation_quotation']) : null,
'negotiation_basis' => $params['negotiation_basis'] ? json_encode($params['negotiation_basis']) : null,
]);
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/12/04 21:26
*/
public static function edit(array $params): bool
{
$contract = Contract::field('project_id')->where('id',$params['contract_id'])->findOrEmpty();
$profit = $params['negotiation_amount'] - (($params['labor_costs']??0) + ($params['material_costs']??0));
$profit_rate = $profit / $params['negotiation_amount'];
Db::startTrans();
try {
ContractNegotiation::where('id', $params['id'])->update([
'project_id' => $contract['project_id'],
'contract_id' => $params['contract_id'],
'negotiation_name' => $params['negotiation_name'],
'negotiation_amount' => $params['negotiation_amount'],
'negotiation_type' => $params['negotiation_type'],
'labor_costs' => $params['labor_costs'] ?? 0,
'material_costs' => $params['material_costs'] ?? 0,
'warranty_amount' => $params['warranty_amount'] ?? 0,
'warranty_expire_date' => !empty($params['Warranty_expire_date']) ? strtotime($params['Warranty_expire_date']) : 0,
'profit' => $profit,
'profit_rate' => $profit_rate,
'negotiation_content' => $params['negotiation_content'] ?? '',
'negotiation_detail' => $params['negotiation_detail'] ?? '',
'negotiation_quotation' => $params['negotiation_quotation'] ? json_encode($params['negotiation_quotation']) : null,
'negotiation_basis' => $params['negotiation_basis'] ? json_encode($params['negotiation_basis']) : null,
]);
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/12/04 21:26
*/
public static function delete(array $params): bool
{
return ContractNegotiation::destroy($params['id']);
}
/**
* @notes 获取合同洽商详情
* @param $params
* @return array
* @author likeadmin
* @date 2023/12/04 21:26
*/
public static function detail($params): array
{
$data = ContractNegotiation::findOrEmpty($params['id']);
$contract = Contract::field('contract_name,contract_code,contract_type,contract_pricing_method,contract_date,business_director')->where('id',$data['contract_id'])->findOrEmpty();
$project = Project::field('custom_id,name,project_code')->where('id',$data['project_id'])->findOrEmpty();
$custom = Custom::field('name')->where('id',$project['custom_id'])->findOrEmpty();
$business_director = Admin::field('name')->where('id',$contract['business_director'])->findOrEmpty();
$data['contract_name'] = $contract['contract_name'];
$data['contract_code'] = $contract['contract_code'];
$data['contract_type'] = $contract->contract_type_text;
$data['contract_pricing_method'] = $contract->contract_pricing_method_text;
$data['contract_date'] = $contract['contract_date'];
$data['business_director'] = $business_director['name'];
$data['project_name'] = $project['name'];
$data['project_code'] = $project['project_code'];
$data['custom_name'] = $custom['name'];
$data['negotiation_type_text'] = $data->negotiation_type_text;
$approve_data = FlowApprove::where('id',$data['approve_id'])->findOrEmpty();
$data['approve_check_status'] = $approve_data['check_status'];
return $data->toArray();
}
public static function approve($params,$admin_id): bool{
$data = ContractNegotiation::where('id',$params['id'])->findOrEmpty();
$approve_data = FlowApprove::where('id',$data['approve_id'])->findOrEmpty();
if(!empty($data['approve_id']) && $approve_data['check_status'] != 3){
self::setError('当前内容存在审核信息,请勿重复提交');
return false;
}
Db::startTrans();
try {
$res = addApprove(
'项目合同洽商',
$params['id'],
'app\common\model\contract\ContractNegotiation',
$params['path'],
$params['flow_id'],
$admin_id
);
if($res){
Contract::where('id',$params['id'])->update([
'approve_id' => $res,
/**
* @notes 添加合同洽商
* @param array $params
* @return bool
* @author likeadmin
* @date 2023/12/04 21:26
*/
public static function add(array $params): bool
{
$contract = Contract::field('project_id')->where('id', $params['contract_id'])->findOrEmpty();
$profit = $params['negotiation_amount'] - (($params['labor_costs'] ?: 0) + ($params['material_costs'] ?: 0));
$profit_rate = $profit / $params['negotiation_amount'];
Db::startTrans();
try {
ContractNegotiation::create([
'project_id' => $contract['project_id'],
'contract_id' => $params['contract_id'],
'negotiation_name' => $params['negotiation_name'],
'negotiation_no' => data_unique_code('QS'),
'negotiation_amount' => $params['negotiation_amount'],
'negotiation_type' => $params['negotiation_type'],
'labor_costs' => $params['labor_costs'] ?? 0,
'material_costs' => $params['material_costs'] ?? 0,
'warranty_amount' => $params['warranty_amount'] ?? 0,
'warranty_expire_date' => !empty($params['warranty_expire_date']) ? strtotime($params['warranty_expire_date']) : 0,
'profit' => $profit,
'profit_rate' => $profit_rate,
'negotiation_content' => $params['negotiation_content'] ?? '',
'negotiation_detail' => $params['negotiation_detail'] ?? '',
'negotiation_quotation' => $params['negotiation_quotation'] ? json_encode($params['negotiation_quotation']) : null,
'negotiation_basis' => $params['negotiation_basis'] ? json_encode($params['negotiation_basis']) : null,
]);
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/12/04 21:26
*/
public static function edit(array $params): bool
{
$contract = Contract::field('project_id')->where('id', $params['contract_id'])->findOrEmpty();
$profit = $params['negotiation_amount'] - (($params['labor_costs'] ?? 0) + ($params['material_costs'] ?? 0));
$profit_rate = $profit / $params['negotiation_amount'];
Db::startTrans();
try {
ContractNegotiation::where('id', $params['id'])->update([
'project_id' => $contract['project_id'],
'contract_id' => $params['contract_id'],
'negotiation_name' => $params['negotiation_name'],
'negotiation_amount' => $params['negotiation_amount'],
'negotiation_type' => $params['negotiation_type'],
'labor_costs' => $params['labor_costs'] ?? 0,
'material_costs' => $params['material_costs'] ?? 0,
'warranty_amount' => $params['warranty_amount'] ?? 0,
'warranty_expire_date' => !empty($params['warranty_expire_date']) ? strtotime($params['warranty_expire_date']) : 0,
'profit' => $profit,
'profit_rate' => $profit_rate,
'negotiation_content' => $params['negotiation_content'] ?? '',
'negotiation_detail' => $params['negotiation_detail'] ?? '',
'negotiation_quotation' => $params['negotiation_quotation'] ? json_encode($params['negotiation_quotation']) : null,
'negotiation_basis' => $params['negotiation_basis'] ? json_encode($params['negotiation_basis']) : null,
]);
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/12/04 21:26
*/
public static function delete(array $params): bool
{
return ContractNegotiation::destroy($params['id']);
}
/**
* @notes 获取合同洽商详情
* @param $params
* @return array
* @author likeadmin
* @date 2023/12/04 21:26
*/
public static function detail($params): array
{
$data = ContractNegotiation::findOrEmpty($params['id']);
$contract = Contract::field('contract_name,contract_code,contract_type,contract_pricing_method,contract_date,business_director')->where('id', $data['contract_id'])->findOrEmpty();
$project = Project::field('custom_id,name,project_code')->where('id', $data['project_id'])->findOrEmpty();
$custom = Custom::field('name')->where('id', $project['custom_id'])->findOrEmpty();
$business_director = Admin::field('name')->where('id', $contract['business_director'])->findOrEmpty();
$data['contract_name'] = $contract['contract_name'];
$data['contract_code'] = $contract['contract_code'];
$data['contract_type'] = $contract->contract_type_text;
$data['contract_pricing_method'] = $contract->contract_pricing_method_text;
$data['contract_date'] = $contract['contract_date'];
$data['business_director'] = $business_director['name'];
$data['project_name'] = $project['name'];
$data['project_code'] = $project['project_code'];
$data['custom_name'] = $custom['name'];
$data['negotiation_type_text'] = $data->negotiation_type_text;
$approve_data = FlowApprove::where('id', $data['approve_id'])->findOrEmpty();
$data['approve_check_status'] = $approve_data['check_status'];
return $data->toArray();
}
public static function approve($params, $admin_id): bool
{
$data = ContractNegotiation::where('id', $params['id'])->findOrEmpty();
$approve_data = FlowApprove::where('id', $data['approve_id'])->findOrEmpty();
if (!empty($data['approve_id']) && $approve_data['check_status'] != 3) {
self::setError('当前内容存在审核信息,请勿重复提交');
return false;
}
Db::startTrans();
try {
$res = addApprove(
'项目合同洽商',
$params['id'],
'app\common\model\contract\ContractNegotiation',
$params['path'],
$params['flow_id'],
$admin_id
);
if ($res) {
Contract::where('id', $params['id'])->update([
'approve_id' => $res,
]);
}
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
self::setError($e->getMessage());
return false;
}
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
self::setError($e->getMessage());
return false;
}
}
}

View File

@ -12,42 +12,46 @@
// | author: likeadminTeam
// +----------------------------------------------------------------------
namespace app\common\model\contract;
namespace app\common\model\contract;
use app\common\model\BaseModel;
use app\common\model\dict\DictData;
use think\model\concern\SoftDelete;
use app\common\model\BaseModel;
use app\common\model\dict\DictData;
use think\model\concern\SoftDelete;
/**
* 合同洽商模型
* Class ContractNegotiation
* @package app\common\model\contract
*/
class ContractNegotiation extends BaseModel
{
use SoftDelete;
protected $name = 'contract_negotiation';
protected $deleteTime = 'delete_time';
/**
* 合同洽商模型
* Class ContractNegotiation
* @package app\common\model\contract
*/
class ContractNegotiation extends BaseModel
{
use SoftDelete;
protected $name = 'contract_negotiation';
protected $deleteTime = 'delete_time';
public function getWarrantyExpireDateAttr($value): string
{
return empty($value) ? '' : date('Y-m-d H:i:s', $value);
}
public function getWarrantyExpireDateAttr($value): string
{
return empty($value) ? '' : date('Y-m-d', $value);
}
public function getNegotiationQuotationAttr($value)
{
return !empty($value) ? json_decode($value) : '';
}
public function getNegotiationBasisAttr($value)
{
return !empty($value) ? json_decode($value) : '';
}
public function getNegotiationTypeTextAttr($value, $data)
{
$dict = DictData::where('type_value', 'negotiation_type')->column('name', 'value');
return !empty($data['negotiation_type']) ? $dict[$data['negotiation_type']] : '';
}
public function getNegotiationQuotationAttr($value){
return !empty($value) ? json_decode($value) : '';
}
public function getNegotiationBasisAttr($value){
return !empty($value) ? json_decode($value) : '';
}
public function getNegotiationTypeTextAttr($value,$data){
$dict = DictData::where('type_value','negotiation_type')->column('name','value');
return !empty($data['negotiation_type']) ? $dict[$data['negotiation_type']] : '';
}
}