diff --git a/app/api/controller/CompanyController.php b/app/api/controller/CompanyController.php index 15014e3bd..8c9ad76a3 100644 --- a/app/api/controller/CompanyController.php +++ b/app/api/controller/CompanyController.php @@ -10,6 +10,7 @@ use app\common\model\contract\Contract; use app\common\model\user\User; use app\common\model\user\UserAccountLog; use think\facade\Db; +use app\common\logic\CompanyLogic as CommonCompanyLogic; /** * Class CompanyController @@ -125,4 +126,27 @@ class CompanyController extends BaseApiController unset($user['role_id'], $user['dept_id'], $user['jobs_id']); return $this->success('success', $user); } + + //**发起合同 */ + public function initiate_contract() + { + $params = $this->request->param(); + $params['party_a']=$this->userInfo['company_id']; + $params['type']=1; + $result = CommonCompanyLogic::initiate_contract($params); + if($result==true){ + return $this->success('发起成功,等待平台风控部上传合同'); + } + return $this->fail(CommonCompanyLogic::getError()); + } + // /**生成合同 */ + public function Draftingcontracts() + { + $params = $this->request->param(); + $result = CommonCompanyLogic::Draftingcontracts($params); + if($result==true){ + return $this->success('生成合同成功'); + } + return $this->fail(CommonCompanyLogic::getError()); + } } diff --git a/app/common/logic/CompanyLogic.php b/app/common/logic/CompanyLogic.php new file mode 100644 index 000000000..fa01074c7 --- /dev/null +++ b/app/common/logic/CompanyLogic.php @@ -0,0 +1,292 @@ +find(); + // if (!empty($exist)) { + // throw new ValidateException('该账号已经注册过企业'); + // } + $level_one = $params['contract']['party_a'] ?? 0; + $data = Company::create([ + // 'level_two' => $params['level_two'], + // 'level_one' => $params['level_one'], + 'company_name' => $params['company_name'], + 'organization_code' => $params['organization_code'], + 'province' => $params['province'], + 'city' => $params['city'], + 'area' => $params['area'], + 'street' => $params['street'], + 'address' => $params['address'], + 'company_type' => $params['company_type'], + 'master_name' => $params['master_name'], + 'master_position' => $params['master_position'], + 'master_phone' => $params['master_phone'], + 'master_email' => $params['master_email'], + 'other_contacts' => $params['other_contacts'], + 'area_manager' => $params['area_manager'] ?? 0, + // 'is_contract' => $params['is_contract'], + // 'account' => $params['account'], + // 'password' => $params['password'], + // 'deposit' => $params['deposit'], + // 'deposit_time' => $params['deposit_time'], + 'qualification' => $params['qualification'], + 'admin_id' => $params['admin_id'] ?? 0, + 'level_one' => $level_one, + // 'status' => $params['status'] + ]); + if ($level_one > 0) { + $contractId = self::contract($data['id'], $params); + } + 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/07/15 14:43 + */ + public static function edit(array $params): bool + { + Db::startTrans(); + try { + Company::where('id', $params['id'])->update([ + // 'level_two' => $params['level_two'], + // 'level_one' => $params['level_one'], + 'company_name' => $params['company_name'], + 'organization_code' => $params['organization_code'], + 'province' => $params['province'], + 'city' => $params['city'], + 'area' => $params['area'], + 'street' => $params['street'], + 'address' => $params['address'], + 'company_type' => $params['company_type'], + 'master_name' => $params['master_name'], + 'master_position' => $params['master_position'], + 'master_phone' => $params['master_phone'], + 'master_email' => $params['master_email'], + 'other_contacts' => $params['other_contacts'], + 'area_manager' => $params['area_manager'] ?? 0, + // 'is_contract' => $params['is_contract'], + // 'account' => $params['account'], + // 'password' => $params['password'], + // 'deposit' => $params['deposit'], + // 'deposit_time' => $params['deposit_time'], + 'qualification' => $params['qualification'], + 'admin_id' => $params['admin_id'] ?? 0, + 'level_one' => $params['contract']['party_a'] ?? 0, + // 'status' => $params['status'] + ]); + if ($params['contract']) { + $contractId = self::contract($params['id'], $params); + Company::update(['contract_id' => $contractId], ['id' => $params['id']]); + } + if ($params['admin_id']) { + $admin = Admin::where('company_id', $params['id'])->find(); + Admin::where('id', $params['admin_id'])->update(['company_id' => $params['id']]); + User::where('admin_id', $params['admin_id'])->update(['company_id' => $params['id'], 'qualification' => $params['qualification'], 'province' => $params['province'], 'city' => $params['city'], 'area' => $params['area'], 'street' => $params['street'], 'address' => $params['address'], 'is_contract' => $admin['is_contract'], 'mobile' => $admin['phone']]); + if ($admin['id'] != $params['admin_id']) { + Admin::where('id', $admin['id'])->update(['company_id' => 0]); + User::where('admin_id', $admin['id'])->update(['company_id' => 0]); + } + } + Db::commit(); + return true; + } catch (\Exception $e) { + Db::rollback(); + self::setError($e->getMessage(), $e->getFile()); + return false; + } + } + + + /** + * @notes 删除 + * @param array $params + * @return bool + * @author likeadmin + * @date 2023/07/15 14:43 + */ + public static function delete(array $params): bool + { + return Company::destroy($params['id']); + } + + + /** + * @notes 获取详情 + * @param $params + * @return array + * @author likeadmin + * @date 2023/07/15 14:43 + */ + public static function detail($params): array + { + $data = Company::findOrEmpty($params['id'])->toArray(); + if ($data) { + $data['other_contacts'] = json_decode($data['other_contacts'], true); + $data['qualification'] = json_decode($data['qualification'], true); + $data['admin_name'] = Db::name('admin')->where('id', $data['admin_id'])->value('name'); + $data['area_manager_name'] = Db::name('admin')->where('id', $data['area_manager'])->value('name'); + $data['contract'] = Db::name('contract')->where('party_b', $data['id']) + ->withAttr('party_a_name', function ($value, $data) { + return Db::name('company')->where('id', $data['party_a'])->value('company_name'); + }) + ->find(); + } + return $data; + } + + public static function contract($companyId, $params) + { + $model = Contract::where(['party_b' => $companyId])->find(); + if (empty($model)) { + $model = new Contract(); + $model->contract_no = time(); + $model->create_time = time(); + $model->type = 1; + } + $model->update_time = time(); + $model->party_a = $params['contract']['party_a'] ?? 0; + $model->contract_type = $params['contract']['contract_type'] ?? 0; + $model->file = $params['contract']['file'] ?? ''; + $model->party_b = $companyId; + $model->save(); + return $model->id; + } + + public static function getAllCompanyIds() + { + $companyId = request()->adminInfo['company_id'] ?? 0; + $companyIds[] = $companyId; + $companies = loopGetChild(Company::class, $companyId, 'level_one', 'id,level_one'); + if (!empty($companies)) { + $companyIds = array_merge(array_column($companies, 'id'), $companyIds); + } + return array_filter($companyIds); + } + + //**发起合同 */ + public static function initiate_contract($params) + { + $find = Db::name('company')->where('id', $params['party_b'])->value('is_contract'); + if ($find == 1) { + return self::setError('该公司已签约无法发起合同'); + } + $params['check_status'] = 1; + $res = Contract::Initiate_contract($params); + if (true === $res) { + return true; + } + return self::setError('发起失败'); + } + + // /**生成合同 */ + public static function Draftingcontracts($params) + { + $result = self::detail($params); + if ($result && $result['contract'] && $result['contract']['file'] != '') { + $data = [ + 'name' => $result['company_name'] . '合同', + 'signatories' => [['fullName' => $result['company_name'], 'identityType' => 12, 'identityCard' => $result['organization_code'], 'email' => $result['master_email'], 'noNeedVerify' => 1, 'signLevel' => 1]], + 'url' => $result['contract']['file'] + ]; + $res = app(JunziqianController::class)->Signing($data, $result['contract']['id']); + if ($res->success == true) { + Db::name('contract')->where('id', $result['contract']['id'])->update(['contract_no' => $res->data, 'check_status' => 3]); + $company = Db::name('company')->where('id', $params['id'])->find(); + if ($company) { + $find = Db::name('contract')->where('party_b', $company['id']) + ->withAttr('contract_type_name', function ($value, $data) { + return Db::name('dict_data')->where('id', $data['contract_type'])->value('name'); + })->find(); + if ($find) { + $data = array( + "applyNo" => $find['contract_no'], //TODO * + "fullName" => $company['company_name'], //TODO * + "identityCard" => $company['organization_code'], //TODO * + "identityType" => 12, //TODO * + ); + $res = app(JunziqianController::class)->SigningLink($data); + if ($res->success == true) { + Db::name('contract')->where('id', $find['id'])->update(['url' => $res->data]); + //发送短信 + $sms = [ + 'mobile' => $company['master_phone'], + 'name' => $company['company_name'], + 'type' => '《' . $find['contract_type_name'] . '》', + 'code' => 'api/Hetong/url?id=' . $find['id'], + 'scene' => 'WQ' + ]; + $result = SmsLogic::contractUrl($sms); + if (true === $result) { + return true; + } else { + return self::setError(SmsLogic::getError()); + } + } else { + return self::setError($res->msg); + } + } + } + return true; + } else { + return self::setError($res->msg); + } + } else { + return self::setError('生成合同成功失败,联系管理员'); + } + } +} diff --git a/app/common/logic/UserLogic.php b/app/common/logic/UserLogic.php index 37f285e21..f73b3f917 100755 --- a/app/common/logic/UserLogic.php +++ b/app/common/logic/UserLogic.php @@ -153,7 +153,7 @@ class UserLogic extends BaseLogic ]; $res = app(JunziqianController::class)->Signing($data, $result['contract']['id']); if ($res->success == true) { - Db::name('contract')->where('id', $result['contract']['id'])->update(['contract_no' => $res->data]); + Db::name('contract')->where('id', $result['contract']['id'])->update(['contract_no' => $res->data,'check_status'=>3]); $data = array( "applyNo" => $res->data, //TODO * "fullName" => $result['nickname'], //TODO *