Files
pgserver3.0/pgserver/application/admin/controller/Survey.php
2026-04-27 10:10:35 +08:00

831 lines
34 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\admin\controller;
use app\admin\service\SurveyService;
use app\common\validate\SurveyValidate;
use app\model\Survey as SurveyModel;
use app\model\SurveyDetail as SurveyDetailModel;
use app\model\Inquiry as InquiryModel;
use app\model\Property_cert_info as InquiryDetailModel;
use app\model\Report as ReportModel;
use app\model\Region ;
use app\common\validate\ReportValidate;
use app\model\OptionsAutomation;
use app\util\Tools;
use app\util\ReturnCode;
use think\Db;
/**
* 查勘控制器
* @author zhong
*
* Class Survey
* @package app\admin\controller
*/
class Survey extends Base
{
/**
* @api {get} admin/survey/index 我的查勘列表
* @author zdc
*/
public function index(SurveyModel $survey)
{
$data = $this->request->get();
//2020年5月24日14:03:28 cavan
if(empty($this->userInfo)){
return $this->buildFailed("获取查勘列表失败,因用户信息为空,请重新登录","",ReturnCode::AUTH_ERROR);
}
if (!$this->isAdmin() && !$this->isAppraiser()) {
//$data['user_id'] = $this->userInfo['user_ids'] ? implode(',', $this->userInfo['user_ids']) : ''; //权限
$data['user_id'] = array($this->userInfo['user_id']);
}
$res = $survey->getSurveyList($this->getPage(), $data);
return $this->buildSuccess($res);
}
/**
* @api {get} admin/survey/exportList 导出我的查勘列表
*/
public function exportList(SurveyModel $survey){
$data = $this->request->post();
if(empty($this->userInfo)){
return $this->buildFailed("导出查勘列表失败,因用户信息为空,请重新登录","",ReturnCode::AUTH_ERROR);
}
if (!$this->isAdmin()) {
$data['user_id'] = $this->userInfo['user_id'];
}
$res = $survey->exportSurveyList($data);
$indexKey = ['order_no', 'city', 'area', 'property_full_name', 'type_str','is_multi_str', 'survey_status_str', 'status_str', 'size', 'eva_unit_price', 'eva_total_value', 'eva_net_value', 'eva_net_value2', 'bank_name', 'create_time', 'user_name', 'survey_time', 'survey_user_name'];
$indexValue = ['单号', '城市','小片区', '物业名称', '物业类型', '询价套数', '查勘状态', '订单状态', '面积', '单价', '评估总值', '评估净值1', '评估净值2', '银行', '询价时间', '业务员', '查勘完成时间', '查勘员'];
(new ChargeManage())->exportExcel($res, 'survey_'.date('Ymd'), $indexKey, $indexValue);
}
public function save()
{
}
public function read($id)
{
}
/**
* 退回到待派单
*
* @return \think\Response
* @throws \app\admin\exception\LogicException
*/
public function returnSurveyToAsked()
{
$data = $this->request->post();
$surveyService = new SurveyService();
$res = $surveyService->return_survey_to_asked($this->userInfo['user_id'], $data);
if ($res['code'] != 1){
return $this->buildFailed($res['message']);
}
return $this->buildSuccess();
}
/**
* 退回(废单)
*
* @return \think\Response
* @throws \app\admin\exception\LogicException
*/
public function reqSubmitSurveyReturn()
{
$data = $this->request->post();
$validate = new SurveyValidate();
if (!$validate->scene(SurveyValidate::SCENE_RETURN)->batch()->check($data)){
return $this->buildFailed('数据验证失败',$validate->getError());
}
$surveyService = new SurveyService();
$res = $surveyService->return_survey($this->userInfo['user_id'], $data);
if ($res['code'] != 1){
return $this->buildFailed($res['message']);
}
return $this->buildSuccess();
}
/**
* @api {post} admin/survey/reqSurveyInfo 查勘详情
* @author zdc
*/
public function reqSurveyInfo(SurveyModel $survey)
{
$data = $this->request->post();
$validate = new SurveyValidate();
if (!$validate->scene(SurveyValidate::SURVEY_DETAIL)->batch()->check($data)){
return $this->buildFailed('数据验证失败',$validate->getError());
}
$res = $survey->getSurveyDetail($data);
return $this->buildSuccess($res);
}
/**
* @api {post} admin/survey/getBuildingInfo 获取楼盘
* @author zdc
*/
public function getBuildingInfo(InquiryDetailModel $estate)
{
$quot_id = $this->request->post('quot_id');
$res = $estate->field('id,building_name')->where(['quot_id' => $quot_id])->select();
return $this->buildSuccess($res);
}
/**
* @api {post} admin/survey/addReport 生成报告
* @author zdc
*/
public function addReport(ReportModel $report)
{
$data['id'] = $this->request->post('id');
$data['details'] = $this->request->post('details/a');
if (empty($data['details'])) return $this->buildFailed('房产信息不能为空!');
$validate = new ReportValidate();
foreach ($data['details'] as $key => $value) {
if (!$validate->check($value)) {
return $this->buildFailed($validate->getError());
}
}
$result = $report->createReport($data, $this->userInfo['user_id']);
if ($result != true) {
return $this->buildFailed('操作失败', $result);
}
return $this->buildSuccess();
}
/**
*查勘任务指派列表
*/
public function reqAssignSurveyOrder(){
$data = $this->request->post();
$recordDate = $this->getQueryDateTime();
$validate=new SurveyValidate();
if(!$validate->scene(SurveyValidate::SCENE_APPOINT)->batch()->check($data)){
return $this->buildFailed('数据验证失败',$validate->getError());
}
$where = self::getWhere();
if($this->isAdmin()) {
}else if(in_array('Surveyor', $this->userInfo['roleCode']) && !in_array('Evaluation_salesman', $this->userInfo['roleCode']) && !in_array('general_manager', $this->userInfo['roleCode'])){
$where[] = ['survey.user_id' , '=' , $this->userInfo['user_id']];
} elseif (in_array('Evaluation_salesman', $this->userInfo['roleCode']) || in_array('Business_manager', $this->userInfo['roleCode'])) {
//$where[] = ['i.user_id|survey.user_id', 'in', $this->userInfo['user_ids']];
$where[] = ['i.user_id|survey.user_id', '=', $this->userInfo['user_id']];
} elseif (in_array('general_manager', $this->userInfo['roleCode'])) {
//$where[] = ['i.user_id|survey.user_id', 'in', $this->userInfo['user_ids']];
$where[] = ['i.user_id|survey.user_id', '=', $this->userInfo['user_id']];
}else
{
$where[] = ['i.user_id|survey.user_id', '=', $this->userInfo['user_id']];
}
$where[]= ['survey.status' , '=' , 1];
!empty($recordDate) && $where[] = ['survey.create_time' ,$recordDate[0] , $recordDate[1]];
!empty($keyword) && $where[] = ['i.order_no|ind.property_full_name','like','%'.$data['keyword'].'%'];
$res=SurveyModel::getSurveyList1($where,$this->getPage(),'survey.create_time','survey.id');
return $this->buildSuccess(['list' => $res['data'], 'count' => $res['total']]);
}
/**
*查勘待跟进列表
*/
public function reqFollowSurveyList(){
$data = $this->request->post();
$recordDate = $this->getQueryDateTime();
$validate=new SurveyValidate();
if(!$validate->scene(SurveyValidate::SCENE_WAIT)->batch()->check($data)){
return $this->buildFailed('数据验证失败',$validate->getError());
}
$where = self::getWhere();
// 权限控制
// if(in_array('Surveyor', $this->userInfo['roleCode']) && !in_array('Evaluation_salesman', $this->userInfo['roleCode'])){
// $where[] = ['survey.user_id' , '=' , $this->userInfo['user_id']];
// } elseif ((in_array('Evaluation_salesman', $this->userInfo['roleCode']) && in_array('Surveyor', $this->userInfo['roleCode'])) || in_array('Business_manager', $this->userInfo['roleCode'])) {
// $where[] = ['i.user_id|survey.user_id', 'in', $this->userInfo['user_ids']];
// }
if($this->isAdmin()) {
}else if(in_array('Surveyor', $this->userInfo['roleCode']) && !in_array('Evaluation_salesman', $this->userInfo['roleCode']) && !in_array('general_manager', $this->userInfo['roleCode'])){
$where[] = ['survey.user_id' , '=' , $this->userInfo['user_id']];
} elseif (in_array('Evaluation_salesman', $this->userInfo['roleCode']) || in_array('Business_manager', $this->userInfo['roleCode'])) {
//$where[] = ['i.user_id|survey.user_id', 'in', $this->userInfo['user_ids']];
$where[] = ['i.user_id|survey.user_id', '=', $this->userInfo['user_id']];
} elseif (in_array('general_manager', $this->userInfo['roleCode'])) {
//$where[] = ['i.user_id|survey.user_id', 'in', $this->userInfo['user_ids']];
$where[] = ['i.user_id|survey.user_id', '=', $this->userInfo['user_id']];
}
else
{
$where[] = ['i.user_id|survey.user_id', '=', $this->userInfo['user_id']];
}
$where[]= ['survey.status', '=', 2];
!empty($recordDate) && $where[] = ['survey.assign_time' ,$recordDate[0] , $recordDate[1]];
$res=SurveyModel::getSurveyList1($where,$this->getPage(),'survey.assign_time');
return $this->buildSuccess(['list' => $res['data'], 'count' => $res['total']]);
}
/**
* 查勘已完成列表
*/
public function reqCompletedSurveyList(){
$data = $this->request->post();
$recordDate = $this->getQueryDateTime();
$validate=new SurveyValidate();
if(!$validate->scene(SurveyValidate::SCENE_FINISH)->batch()->check($data)){
return $this->buildFailed('数据验证失败',$validate->getError());
}
$where = self::getWhere();
// 权限控制
// if(in_array('Surveyor', $this->userInfo['roleCode']) && !in_array('Evaluation_salesman', $this->userInfo['roleCode'])){
// $where[] = ['survey.user_id' , '=' , $this->userInfo['user_id']];
// } elseif ((in_array('Evaluation_salesman', $this->userInfo['roleCode']) && in_array('Surveyor', $this->userInfo['roleCode'])) || in_array('Business_manager', $this->userInfo['roleCode'])) {
// $where[] = ['i.user_id|survey.user_id', 'in', $this->userInfo['user_ids']];
// }
if($this->isAdmin()) {
}else if(in_array('Surveyor', $this->userInfo['roleCode']) && !in_array('Evaluation_salesman', $this->userInfo['roleCode']) && !in_array('general_manager', $this->userInfo['roleCode'])){
$where[] = ['survey.user_id' , '=' , $this->userInfo['user_id']];
} elseif (in_array('Evaluation_salesman', $this->userInfo['roleCode']) || in_array('Business_manager', $this->userInfo['roleCode'])) {
//$where[] = ['i.user_id|survey.user_id', 'in', $this->userInfo['user_ids']];
$where[] = ['i.user_id|survey.user_id', '=', $this->userInfo['user_id']];
} elseif (in_array('general_manager', $this->userInfo['roleCode'])) {
$where[] = ['i.user_id|survey.user_id', 'in', $this->userInfo['user_ids']];
} else
{
$where[] = ['i.user_id|survey.user_id', '=', $this->userInfo['user_id']];
}
$where[]= ['survey.status', '=', 3];
!empty($recordDate) && $where[] = ['survey.complete_time' ,$recordDate[0] , $recordDate[1]];
$res=SurveyModel::getSurveyList1($where,$this->getPage(),'survey.complete_time desc');
return $this->buildSuccess(['list' => $res['data'], 'count' => $res['total']]);
}
/**
*查勘订单退回列表
*/
public function reqSurveyReturnList(){
$data = $this->request->post();
$recordDate = $this->getQueryDateTime();
$validate=new SurveyValidate();
if(!$validate->scene(SurveyValidate::SCENE_BACK)->batch()->check($data)){
return $this->buildFailed('数据验证失败',$validate->getError());
}
$where = self::getWhere();
if($this->isAdmin()) {
}else if(in_array('Surveyor', $this->userInfo['roleCode']) && !in_array('Evaluation_salesman', $this->userInfo['roleCode']) && !in_array('general_manager', $this->userInfo['roleCode'])){
$where[] = ['survey.user_id' , '=' , $this->userInfo['user_id']];
} elseif (in_array('Evaluation_salesman', $this->userInfo['roleCode']) || in_array('Business_manager', $this->userInfo['roleCode'])) {
//$where[] = ['i.user_id|survey.user_id', 'in', $this->userInfo['user_ids']];
$where[] = ['i.user_id|survey.user_id', '=', $this->userInfo['user_id']];
} elseif (in_array('general_manager', $this->userInfo['roleCode'])) {
$where[] = ['i.user_id|survey.user_id', 'in', $this->userInfo['user_ids']];
} else
{
$where[] = ['i.user_id|survey.user_id', '=', $this->userInfo['user_id']];
}
$where[]= ['survey.status' , '=' , 4];
!empty($recordDate) && $where[] = ['survey.create_time' ,$recordDate[0] , $recordDate[1]];
$res=SurveyModel::getSurveyList1($where,$this->getPage(),'survey.create_time');
return $this->buildSuccess(['list' => $res['data'], 'count' => $res['total']]);
}
/**
*查勘任务退回列表删除按钮
*/
public function reqDelSurveyReturnOrder(){
$data = $this->request->post();
if (empty($data['survey_ids'])) return $this->buildFailed('请选择需要删除的查勘!');
Db::startTrans();
try {
foreach ($data['survey_ids'] as $key => $value) {
$db = new SurveyModel();
$survey = $db->where('id', $value)->find();
$building_name = Db::name('property_cert_info')->where('id', $survey['property_cert_info_id'])->value('property_full_name');
if ($survey['status'] != SurveyModel::STATUS_ASKED && $survey['status'] != SurveyModel::STATUS_RETURNED) {
return $this->buildFailed($building_name.'的查勘目前暂无法删除');
}
$upd['status'] = 5;
$upd['update_time'] = date('Y-m-d H:i:s', time());
$upd['delete_time'] = date('Y-m-d H:i:s', time());
$db->where('id', $survey['id'])->update($upd);
}
// 提交事务
Db::commit();
return $this->buildSuccess('删除成功');
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
return $this->buildFailed('删除失败'.$e->getMessage());
}
}
public function getWhere($where = []){
$workUsername=input('workUsername');
$keyword=input('keyword');
$surveyUsername=input('surveyUsername');
$city=input('city');
$area=input('area');
$inquiry_status=input('inquiry_status');
!empty($workUsername) && $where[] = ['i.buss_username' , 'like','%'.$workUsername.'%'];
!empty($keyword) && $where[] = ['i.order_no|ind.property_full_name','like','%'.$keyword.'%'];
!empty($surveyUsername) && $where[] = ['survey.user_name' , 'like','%'.$surveyUsername.'%'];
!empty($city) && $where[] = ['ind.city_id' , '=' , $city];
!empty($area) && $where[] = ['survey.area_id' , '=' , $area];
!empty($inquiry_status) && $where[] = ['i.status' , '=' , $inquiry_status];
return $where;
}
/**
*指派查勘员
*/
public function reqAppointedToSurveyor(){
$surveyIds=input('survey_ids');
$surveyUserId=input('surveyUserId');
$surveyName=input('surveyName');
$surveyPhone=input('surveyPhone');
$data = $this->request->post();
$validate=new SurveyValidate();
if(!$validate->scene(SurveyValidate::SCENE_SURVEYUSER)->batch()->check($data)){
return $this->buildFailed('数据验证失败',$validate->getError());
}
$building_name = [];
Db::startTrans();
try {
foreach ($data['survey_ids'] as $k => $v) {
$db=new SurveyModel();
$InquiryModel = new InquiryModel();
$survey=$db->where('id',$v)->find();
if ($survey['status'] != SurveyModel::STATUS_ASKED && $survey['status'] != SurveyModel::STATUS_RETURNED)
return $this->buildFailed('该查勘目前状态暂无法提交');
$building_name[] = Db::name('property_cert_info')->where('id' , $survey['property_cert_info_id'])->value('property_full_name');
$a['user_id']=$data['surveyUserId'];
$a['user_name']=$data['surveyName'];
$a['assignee_id']= $this->userInfo['user_id'];
$a['status']=2;
$a['assign_time']=date('Y-m-d H:i:s',time());
$db->where('id',$survey['id'])->update($a);
$result = $db->where(['order_no' => $survey['order_no'] , 'status' => ['in' , '1,4']])->find();
if(!$result){
$InquiryModel->where('order_no' , $survey['order_no'])->update(['status' => 4]);
}
}
PublicMessage($InquiryModel->where('order_no' , $survey['order_no'])->value('id'),5,6,$survey['property_cert_info_id']); // 消息推送
// 提交事务
Db::commit();
return $this->buildSuccess('指派成功');
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
return $this->buildFailed('指派失败'.$e->getMessage());
}
}
/**
*转派查勘员
*/
public function transferSurveyUser(){
$data = $this->request->post();
$validate = new SurveyValidate();
if(!$validate->scene(SurveyValidate::SCENE_TRANSFER_SURVEYUSER)->batch()->check($data)){
return $this->buildFailed('数据验证失败',$validate->getError());
}
Db::startTrans();
try{
$db = new SurveyModel();
$survey = $db->where('id',$data['survey_id'])->find();
if ($survey['status'] != SurveyModel::STATUS_ASSIGNED)
return $this->buildFailed('该查勘目前状态暂无法提交');
if($survey['user_name'] == $data['surveyName'])
return $this->buildFailed('转派查勘员不可与现查勘员相同');
$update['user_id'] = $data['surveyUserId'];
$update['user_name'] = $data['surveyName'];
$update['assignee_id'] = $this->userInfo['user_id'];
$update['assign_time'] = date('Y-m-d H:i:s',time());
$db->where('id',$survey['id'])->update($update);
//写入消息
$InquiryModel = new InquiryModel();
PublicMessage($InquiryModel->where('order_no' , $survey['order_no'])->value('id'),5,6,$survey['property_cert_info_id']); // 消息推送
Db::commit();
return $this->buildSuccess('指派成功');
} catch (\Exception $e){
Db::rollback();
return $this->buildFailed('改派失败'.$e->getMessage());
}
}
/**
*查勘细项
*/
public function surveyOptions(){
$db=new OptionsAutomation();
$res=$db->column('id,pid,name,survey_type,type,key,key2,code,value,text');
$tree=$this->listToTree($res,'id','pid');
return $this->buildSuccess($tree);
}
/**
*查勘细项
*/
public function surveyOptionsList(){
$db=new OptionsAutomation();
$res=$db->column('id,pid,name,survey_type,type,key,key2,code,value,text');
$tree=$this->listToTree($res,'id','pid');
return $tree;
}
/**
*提交查勘
*/
public function reqSubmitSurvey(){
$data = $this->request->post();
$validate=new SurveyValidate();
if(!$validate->scene(SurveyValidate::SCENE_SUBMIT)->batch()->check($data)){
return $this->buildFailed('数据验证失败',$validate->getError());
}
$surveyService = new SurveyService();
$data=$this->changeArrayToString($data);
$res = $surveyService->survey_detail($this->userInfo['user_id'],$data);
if ($res['code'] == -1){
return $this->buildFailed($res['message']);
}
return $this->buildSuccess();
}
/**
* 查勘退回到待跟进
*/
public function surveyReturn(){
$id = $this->request->post('id');
$order_no = Db::name('survey')->where('id='.$id)->value('order_no');
Db::startTrans();
$survey_upd = Db::name('survey')->where('id='.$id)->update(['status' => 2]);
$inquiry_upd = Db::name('inquiry')->where('order_no', $order_no)->update(['status' => 4]);
if ($survey_upd && $inquiry_upd) {
Db::commit();
return $this->buildSuccess();
} else {
Db::rollback();
return $this->buildFailed('查勘退回到待跟进失败');
}
}
/**
*编辑查勘
*/
public function reqEditSurvey(){
$data = $this->request->post();
//查勘信息
$validate=new SurveyValidate();
if(!$validate->scene(SurveyValidate::SCENE_SUBMIT)->batch()->check($data)){
return $this->buildFailed($validate->getError());
}
$surveyService = new SurveyService();
//删除arr不要的数据
foreach ($data as $key=>$v){
if(strpos($key,'_arr')){
unset($data[$key]);
}
if ($key == "facility") {
unset($data['facility']['shop_facilities_elevator_arr']);
}
if (strpos($key, '_img_ids') && !strpos($key,'_arr')) {
is_array($v) && $surveyInfo[$key] = implode(',', $v);
}
}
$surveydata=$this->changeArrayToString($data);
if (!$surveyService->survey_detail($this->userInfo['user_id'], $surveydata,3)){
return $this->buildFailed('保存失败');
}
return $this->buildSuccess();
}
public function changeArrayToString($data){
foreach ($data as $k => $v) {
if(is_array($v)){
if(isset($v[0])){
$data[$k]=implode(',',$v);
}else{
$data[$k]=$this->changeArrayToString($v);
}
}
}
return $data;
}
/**
* 把返回的数据集转换成Tree
* @param $list
* @param string $pk
* @param string $pid
* @param string $child
* @param string $root
* @return array
*/
public static function listToTree($list, $pk = 'id', $pid = 'fid', $child = '_child', $root = '0') {
$tree = array();
if (is_array($list)) {
$refer = array();
foreach ($list as $key => $data) {
// 跳过空数据或非数组数据
if (!is_array($data) || empty($data)) {
continue;
}
// 确保主键字段存在
if (!isset($data[$pk])) {
continue;
}
$refer[$data[$pk]] = &$list[$key];
}
foreach ($list as $key => $data) {
// 跳过空数据或非数组数据
if (!is_array($data) || empty($data)) {
continue;
}
// 确保父ID字段存在
if (!isset($data[$pid])) {
continue;
}
// 确保code字段存在
if (!isset($data['code'])) {
continue;
}
$parentId = $data[$pid];
if ($root == $parentId) {
$tree[$data['code']] = &$list[$key];
} else {
if (isset($refer[$parentId])) {
$parent = &$refer[$parentId];
if(!is_numeric($data['code'])){
$parent[$data['code']] = &$list[$key];
}else{
$parent[$child][] = &$list[$key];
}
}
}
}
}
return $tree;
}
/**
*获取报告信息
*/
public function reqReportPropertyInfo() {
$id = $this->request->post('id');
if (empty($id)) return $this->buildFailed('参数不能为空!');
$res = Db::name('property_cert_info')->field('owner_name,property_cert,attachments')->where('id', $id)->find();
if ($res) {
$attachment = Db::name('attachment')->field('id,url,name,thum1,ext')->whereIn('id', $res['attachments'])->select();
foreach ($attachment as &$value) {
$value['url'] = config('uploadFile.url') . $value['url'];
}
$res['house_cert_img_ids'] = $attachment;
$res['obligee'] = $res['owner_name'];
unset($res['owner_name'],$res['attachments']);
}
return $this->buildSuccess($res);
}
/**
* 获取查看人员列表
*
*/
public function surveyPersonnel(){
$info = Db::name('project_team')->field('uid_str,username_str')->where('type', 4)->where("status",1)->find();
$data = array();
if(!empty($info)){
$uid_arr = explode(",",$info['uid_str']);
$username_arr = explode(",",$info['username_str']);
foreach($uid_arr as $k => $v){
$data[$k]['value'] = $v;
$data[$k]['name'] = $username_arr[$k];
}
}
return $this->buildSuccess($data);
}
/**
* 获取城市 / 片区
* @return [type] [description]
*/
public function reqSurveyAreaList(){
$data = [
['value' => '110100' , 'label' => '北京' , 'children' => Region::BJ_area],
['value' => '440300' , 'label' => '深圳' , 'children' => Region::SZ_area],
['value' => '420100' , 'label' => '武汉' , 'children' => Region::WH_area],
['value' => '441900' , 'label' => '东莞' , 'children' => Region::DONGGUAN_area],
];
return $this->buildSuccess($data);
}
/**
* 复制查勘数据
*
*/
public function copySurveyData() {
$flag = true;
$survey_id = $this->request->param('id');
if (empty($survey_id)) {
return $this->buildFailed('查勘记录id不能为空');
}
$copy_survey_data = Db::name('survey')
->where(['id' => $survey_id])
->find();
$copy_survey_detail_data = Db::name('survey_detail')
->where(['survey_id' => $survey_id])
->find();
$copy_inquiry_detail_data = Db::name('property_cert_info')
->where(['id' => $copy_survey_data['property_cert_info_id']])
->find();
$reference_inquiry_detail_where[] = ['property_full_name', '=', $copy_inquiry_detail_data['property_full_name']];
$reference_inquiry_detail_where[] = ['create_time', '>=', '2023-07-20 00:00:00'];
$reference_inquiry_detail_where[] = ['id', '<>', $copy_survey_data['property_cert_info_id']];
$reference_inquiry_detail_data_arr = Db::name('property_cert_info')
->where($reference_inquiry_detail_where)
->order('create_time desc')
->select();
if ($reference_inquiry_detail_data_arr) {
$copyed_survey_data = [];
$copyed__inquiry_detail_data = [];
foreach ($reference_inquiry_detail_data_arr as $key => $value) {
$reference_survey_data = Db::name('survey')
->where(['property_cert_info_id' => $value['id']])
->find();
if ($reference_survey_data && $reference_survey_data['status'] == 3) {
$copyed__inquiry_detail_data = $value;
$copyed_survey_data = $reference_survey_data;
break;
}
}
if (!empty($copyed_survey_data)) {
Db::startTrans();
$copyed_survey_detail_data = Db::name('survey_detail')
->where(['survey_id'=>$copyed_survey_data['id']])
->find();
// 查勘详细数据复制
$copyed_survey_detail_data['id'] = $copy_survey_detail_data['id'];
$copyed_survey_detail_data['survey_id'] = $copy_survey_detail_data['survey_id'];
// $copyed_survey_detail_data['user_id'] = $copy_survey_detail_data['user_id'];
$copyed_survey_detail_data['building_completion_time'] = $copy_survey_detail_data['building_completion_time'];
$copyed_survey_detail_data['create_time'] = $copy_survey_detail_data['create_time'];
$copyed_survey_detail_data['update_time'] = $copy_survey_detail_data['update_time'];
$upd_survey_detail = Db::name('survey_detail')
->where(['id'=>$copy_survey_detail_data['id']])
->update($copyed_survey_detail_data);
// 更新查勘状态
$copy_survey_data['survey_type'] = $copyed_survey_data['survey_type'];
$copy_survey_data['area'] = $copyed_survey_data['area'];
$copy_survey_data['area_id'] = $copyed_survey_data['area_id'];
$copy_survey_data['complete_time'] = $copyed_survey_data['complete_time'];
$copy_survey_data['user_id'] = $copyed_survey_data['user_id'];
$copy_survey_data['user_name'] = $copyed_survey_data['user_name'];
$copy_survey_data['remark'] = $copyed_survey_data['remark'];
$copy_survey_data['status'] = $copyed_survey_data['status'];
$upd_survey = Db::name('survey')
->where(['id'=>$copy_survey_data['id']])
->update($copy_survey_data);
// 更新询价详细数据
$copy_inquiry_detail_data['survey_user_id'] = $copyed__inquiry_detail_data['survey_user_id'];
$copy_inquiry_detail_data['survey_user_name'] = $copyed__inquiry_detail_data['survey_user_name'];
$copy_inquiry_detail_data['survey_time'] = $copyed__inquiry_detail_data['survey_time'];
$copy_inquiry_detail_data['property_complex'] = $copyed__inquiry_detail_data['property_complex'];
$upd_inquiry_detail = Db::name('property_cert_info')
->where(['id'=>$copy_inquiry_detail_data['id']])
->update($copy_inquiry_detail_data);
// 更新询价状态(多套物业的还需要检查其它物业的查勘是否已完成)
$map[] = ['quot_id', '=', $copy_inquiry_detail_data['quot_id']];
$map[] = ['id', '<>', $copy_inquiry_detail_data['id']];
$inquiry_detail_data = Db::name('property_cert_info')
->where($map)
->field('id')
->select();
$upd_flag = true;
if (count($inquiry_detail_data) >= 1) {
foreach ($inquiry_detail_data as $k=>$v) {
$survey_data = Db::name('survey')
->where(['property_cert_info_id' => $v['id']])
->find();
if ($survey_data && $survey_data['status'] != 3) {
$upd_flag = false;
break;
}
}
}
if ($upd_flag) {
$upd_inquiry = Db::name('inquiry')
->where(['id'=>$copy_inquiry_detail_data['quot_id']])
->update(['status'=>5]);
} else {
$upd_inquiry = 1;
}
if ($upd_inquiry && $upd_inquiry_detail && $upd_survey && $upd_survey_detail) {
Db::commit();
} else {
$flag = false;
Db::rollback();
}
} else {
$flag = false;
}
} else {
$flag = false;
}
if ($flag) {
return $this->buildSuccess('', '复制查勘数据成功!');
} else {
return $this->buildFailed('没有可供复制的查勘数据!');
}
}
/**
* 获取查勘跟进中数量(当前登录人)
* @return \think\Response
*/
public function surveyFollowCount()
{
// 检查用户信息
if (empty($this->userInfo)) {
error_log("surveyFollowCount: userInfo is empty");
return $this->buildFailed('用户信息不存在');
}
// 检查用户ID
if (!isset($this->userInfo['user_id'])) {
error_log("surveyFollowCount: user_id is not set");
return $this->buildFailed('用户ID不存在');
}
$Survey = new SurveyModel();
// 如果是管理员admin 或 COM_TOP_ADMIN不限制 user_id
if ($this->isAdmin()) {
$count = $Survey->alias('s')
->join('pg_inquiry i', 's.order_no = i.order_no', 'INNER')
->where('i.status', 4)
->where('s.status', 2)
->where('s.assign_time', 'gt', '2025-02-01 00:00:00')
->group('s.id')
->count();
} else {
// 非管理员,只统计当前用户的查勘
$userId = $this->userInfo['user_id'];
$count = $Survey->alias('s')
->join('pg_inquiry i', 's.order_no = i.order_no', 'INNER')
->where('i.status', 4)
->where('s.status', 2)
->where('s.user_id', $userId)
->where('s.assign_time', 'gt', '2025-02-01 00:00:00')
->group('s.id')
->count();
}
error_log("surveyFollowCount: count = $count, userId = " . $this->userInfo['user_id'] . ", isAdmin = " . ($this->isAdmin() ? 'true' : 'false'));
return $this->buildSuccess([
'count' => $count
]);
}
}