// +---------------------------------------------------------------------- use think\facade\Env; use think\facade\Log; use think\Db; // 腾讯云cos - 使用Composer自动加载 // 应用公共文件 function p($a,$flag){ echo "
";
print_r($a);
if($flag) die;
}
/* * 根据分类获取数据字典
* @param $type string
* @return array
*/
function getdictionary($type) {
// 暂时去掉缓存
/* static $list;
if (empty($list)) {
$list = cache('dic_list');
}*/
$key = "{$type}";
/*
if (isset($list[$key])) {
$dic = $list[$key];
} else {
*/
$info = Db::name('dictionary')->where(['type' => $type, 'status' => 1])->field('code,valname')->order('sort')->select();
$list[$key] = $info;
$dic = $list[$key];
cache('dic_list', $list, 3600);
// }
return $dic;
}
/**
* 获取数据字典选中值
* @param string $type
* @param string $status
*/
function getDictionaryName($type, $status) {
$res = getdictionary($type);
$name = '';
if (!empty($res)) {
foreach ($res as $k => $v) {
if ($v['code'] == $status) {
$name = $v['valname'];
break;
}
}
}
return $name;
}
function getDictionaryNameFromDictList($dict_list, $status) {
$name = '';
if (!empty($dict_list)) {
foreach ($dict_list as $k => $v) {
if ($v['code'] == $status) {
$name = $v['valname'];
break;
}
}
}
return $name;
}
/**
* 获取数据字典[Options_automation]选中值
* @param type $type
* @param type $status
*/
function getDictionaryName_opa($type, $status) {
$res = getdictionary_opa($type);
$name = '';
$arr = [];
if (!empty($res)) {
if(strstr($status , ',')){
foreach (explode(',',$status) as $key => $value) {
foreach ($res as $k => $v) {
if ($v['code'] == $value) {
$arr[] = $v['name'];
break;
}
}
}
$name = implode(',', $arr);
}else{
foreach ($res as $k => $v) {
if ($v['code'] == $status) {
$name = $v['name'];
break;
}
}
}
}
return $name;
}
/**
* 获取 Options_automation表里的字段
*
* @param [type] $type
* @return void
*/
function getdictionary_opa($type) {
static $list;
$key = "{$type}";
if (isset($list[$key])) {
$dic = $list[$key];
} else {
$info = Db::name('options_automation')->where(['key' => $type])->field('code,name,type')->select();
$list[$key] = $info;
$dic = $list[$key];
cache('options_list', $list, 3600);
}
return $dic;
}
/**
* 获取数据字典code
* @param type $type
* @param type $name
* @return int
*/
function getDictionaryCode($type, $name) {
return Db::name('dictionary')
->where(['type'=>$type,'valname'=>$name])
->field('code')
->find();
}
/**
* 批量获取数据字典
* @param type $arr array
* @return array
*/
function getdictionarylist($arr) {
if (is_array($arr)) {
foreach ($arr as $value) {
$data[strtolower($value)] = getdictionary($value);
}
} else {
$data[strtolower($arr)] = getdictionary($arr);
}
return $data;
}
/**
* 上传文件到阿里云OSS
* @param string $object 文件名称(uploads/xxx/xxx)
* @param string $filePath 绝对路径
* @return array
*/
function ossUpload_ali($object, $filePath) {
try {
$cosClient = new \OSS\OssClient(config('uploadFile.access_key_id'), config('uploadFile.access_key_secret'), config('uploadFile.endpoint'));
//上传到阿里云
$cosClient->uploadFile(config('uploadFile.bucket'), $object, $filePath);
return ['code' => 1];
} catch (\Exception $e) {
return ['code' => -1, 'msg' => $e->getMessage()];
}
}
/**
* 上传文件到腾讯云COS
* @param string $object 文件名称(uploads/xxx/xxx)
* @param string $filePath 绝对路径
* @return array
*/
function ossUpload($object, $filePath) {
try {
// 创建 COS 客户端实例
$cosClient = new Qcloud\Cos\Client([
'region' => config('uploadFile.endpoint'),
'credentials' => [
'secretId' => config('uploadFile.access_key_id'),
'secretKey' => config('uploadFile.access_key_secret')
]
]);
// 上传文件到腾讯云
$cosClient->putObject([
'Bucket' => config('uploadFile.bucket'),
'Key' => $object,
'Body' => fopen($filePath, 'rb')
]);
return ['code' => 1];
} catch (\Exception $e) {
return ['code' => -1, 'msg' => $e->getMessage()];
}
}
/**
* Upload file to Tencent Cloud COS storage
*
* @param string $object The target path and filename in COS bucket
* @param string $filePath The local file path to upload
* @return mixed Returns upload result
*/
function ossDetele($object, $filePath) {
try {
// 创建 COS 客户端实例
$cosClient = new Qcloud\Cos\Client([
'region' => config('uploadFile.endpoint'),
'credentials' => [
'secretId' => config('uploadFile.access_key_id'),
'secretKey' => config('uploadFile.access_key_secret')
]
]);
// 删除文件
$cosClient->deleteObject([
'Bucket' => config('uploadFile.bucket'),
'Key' => $object
]);
return ['code' => 1];
} catch (\Exception $e) {
return ['code' => -1, 'msg' => $e->getMessage()];
}
}
/**
* 下载图片到本地
* @param $url
* @param $path
*/
function downLocal($url, $path) {
try {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //获取https图片
$file = curl_exec($ch);
curl_close($ch);
$filename = pathinfo($url, PATHINFO_BASENAME);
$resource = fopen($path . $filename, 'a');
fwrite($resource, $file);
fclose($resource);
return ['code' => 1, 'path' => $path . $filename]; //返回图片的绝对路径
} catch (\Exception $e) {
return ['code' => -1, 'msg' => $e->getMessage()];
}
}
function getQueryDateTime($field,$start_time,$end_time) {
$start_time_stamp = strtotime($start_time);
$end_time_stamp = strtotime($end_time);
$date_params = '';
if ($start_time && $end_time) {
if ($start_time_stamp > $end_time_stamp) {
$date_params = [$field,'between', [$end_time_stamp, $start_time_stamp + 86400 - 1]];
} else if ($start_time_stamp < $end_time_stamp) {
$date_params = [$field,'between', [$start_time_stamp, $end_time_stamp + 86400 - 1]];
} else {
$date_params = [$field,'between', [$start_time_stamp, $end_time_stamp + 86400 - 1]];
}
} else {
$start_time && $date_params = [$field,'egt', $start_time_stamp];
$end_time && $date_params = [$field,'elt', $end_time_stamp + 86400 - 1];
}
return $date_params;
}
/**
* 时间段查询 时间
*/
function getQueryDate($field, $start_time, $end_time) {
$start_time_stamp = strtotime($start_time);
$end_time_stamp = strtotime($end_time);
$date_params = '';
if ($start_time_stamp && $end_time_stamp) {
if ($start_time_stamp > $end_time_stamp) {
$date_params = [$field, 'between', [date('Y-m-d H:i:s', $end_time_stamp), date('Y-m-d 23:59:59', $start_time_stamp)]];
} else if ($start_time_stamp < $end_time_stamp) {
$date_params = [$field, 'between', [date('Y-m-d H:i:s', $start_time_stamp), date('Y-m-d 23:59:59', $end_time_stamp)]];
} else {
$date_params = [$field, 'between', [date('Y-m-d H:i:s', $start_time_stamp), date('Y-m-d 23:59:59', $start_time_stamp)]];
}
} else {
$start_time_stamp && $date_params = [$field, 'egt', date('Y-m-d H:i:s', $start_time_stamp)];
$end_time_stamp && $date_params = [$field, 'elt', date('Y-m-d 23:59:59', $end_time_stamp)];
}
return $date_params;
}
/**
* 其他字段区间范围筛选
*/
function getQuery($field, $start_length, $end_length) {
$date_params = '';
if ($start_length != null && $end_length != null) {
if ($start_length > $end_length) {
$date_params = [$field, 'between', [$end_length, $start_length]];
} else if ($start_length < $end_length) {
$date_params = [$field, 'between', [$start_length, $end_length]];
} else {
$date_params = [$field, 'between', [$start_length, $end_length]];
}
} else {
($start_length != null) && $date_params = [$field, 'egt', $start_length];
($end_length != null) && $date_params = [$field, 'elt', $end_length];
}
return $date_params;
}
/**
* 导出通用方法
* @param $list
* @param $filename
* @param array $indexKey
* @param array $indexValue
* @throws PHPExcel_Exception
* @throws PHPExcel_Writer_Exception
*/
function exportExcel($list, $filename, $indexKey = [], $indexValue = []){
$header_arr = ['A','B','C','D','E','F','G','H','I','J','K','L','M', 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
// 初始化PHPExcel()
$objPHPExcel = new \PHPExcel();
$PHPExcel_Cell_DataType =new \PHPExcel_Cell_DataType();
// 设置保存版本格式
$objWriter = new \PHPExcel_Writer_Excel2007($objPHPExcel);
// 接下来就是写数据到表格里面去
$objActSheet = $objPHPExcel -> getActiveSheet();
// 设置当前活动sheet的名称
$objActSheet->setTitle($filename);
$i = 1;
$j = 2;
// 设置表头
foreach ( $indexValue as $key => $value ){
// 这个比较有用,能自适应列宽
$objActSheet->getColumnDimension($header_arr[$key])->setAutoSize(true);
$objStyleA5 = $objActSheet->getStyle($header_arr[$key]);
//设置对齐方式
$objAlignA5 = $objStyleA5->getAlignment();
$objAlignA5->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objAlignA5->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objActSheet->setCellValue($header_arr[$key].$i,$value);
}
// 设置主要内容
foreach ($list as $row) {
foreach ($indexKey as $key => $value){
// if(!isset($row[$value]))
// continue;
// 这里是设置单元格的内容
// $objActSheet->setCellValueExplicit($header_arr[$key].$j,$row[$value], $PHPExcel_Cell_DataType::TYPE_STRING);
$objActSheet->setCellValue($header_arr[$key].$j,$row[$value]);
}
$j++;
}
// 下载这个表格,在浏览器输出就好了
// header("Pragma: public");
// header("Expires: 0");
// header("Cache-Control:must-revalidate,post-check=0,pre-check=0");
// header("Content-Type:application/force-download");
// header("Content-Type:application/vnd.ms-execl;charset=UTF-8");
// header("Content-Type:application/octet-stream");
// header("Content-Type:application/download");
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
header('Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition:attachment;filename='.$filename.'.xlsx');
// header("Content-Transfer-Encoding:binary");
// header("Access-Control-Expose-Headers:content-disposition");
$objWriter -> save(ROOT_PATH . 'public' . DS . 'uploads' . DS .$filename.'.xlsx');
if(file_exists(ROOT_PATH . 'public' . DS . 'uploads' . DS .$filename.'.xlsx')){
return Env::get('uploadFile.host_url') . '/' . 'uploads' . '/' .$filename.'.xlsx';
}else{
return "";
}
// 下载这个表格,在浏览器输出就好了
/*header("Pragma: public");
header("Expires: 0");
header("Cache-Control:must-revalidate,post-check=0,pre-check=0");
header("Content-Type:application/force-download");
header("Content-Type:application/vnd.ms-execl;charset=UTF-8");
header("Content-Type:application/octet-stream");
header("Content-Type:application/download");
header('Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition:attachment;filename='.$filename.'.xlsx');
header("Content-Transfer-Encoding:binary");
header("Access-Control-Expose-Headers:content-disposition");
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter -> save('php://output');*/
}
/**
* 通过excel获得结果集
* @param mixed $file $this->request->file('file');
* @param mixed $colname['dbcol'] = [] 数据库表字段名数组
* @param mixed $colname['excelcol'] = [] Excel表字段名数组
* @return Array
*/
function getArrayByExcel( $file,$sheet_index=0 )
{
if(!$file)
{
return [ 'code'=>-1,'msg'=>'文件不存在或文件出错','data'=>null];
}
try{
$excel = PHPExcel_IOFactory::load($file->getRealPath());
$sheet = $excel->getSheet($sheet_index);
$rows = $sheet->toArray(null, true, true, true);
// var_dump($rows);
}catch( Exception $e )
{
//log( '读取Excel文件出错:'.$e->getMessage() );
return [ 'code'=>-1,'msg'=>'读取Excel文件出错:'.$e->getMessage(),'data'=>null];
}
$data = array();
$i = 0;
// 第0行是字段描述,不读取
// 第1行代表字段名 读取数据库表字段名
$dbFields = array();
foreach( $rows[2] as $field )
{
if( $field == '')
{
break;
}
$dbFields[] = $field;
}
//从第2行读取
// 获取数据
$data = array();
for ($i = 3; $i <= count($rows); $i++)
{
$row = array();
foreach ($dbFields as $j => $field)
{
$value = isset($rows[$i][chr($j+65)]) ? trim($rows[$i][chr($j+65)]) : null;
if( $j ==0 && ($value == '0' || $value == ''))
{
break;
}
$row[$field] = $value;
}
if (!empty($row))
{
$data[] = $row;
}
}
return[ 'code'=>1,'msg'=>'','data'=>$data];
}
/**
* 将数值金额转换为中文大写金额
* @param $amount float 金额(支持到分)
* @param $type int 补整类型,0:到角补整;1:到元补整
* @return mixed 中文大写金额
*/
function convertAmountToCn($amount, $type = 1) {
$c1 = "零壹贰叁肆伍陆柒捌玖";
$c2 = "分角元拾佰仟万拾佰仟亿";
// 确保 $amount 是数值类型
if (!is_numeric($amount)) {
$amount = 0;
}
$num = round($amount, 2);
$num = $num * 100;
// 转换为整数后再转换为字符串
$num_str = (string)(int)$num;
if (strlen($num_str) > 14) {
return "数据太长,检查下";
}
$i = 0;
$c = "";
$num_int = (int)$num_str;
while (1) {
if ($i == 0) {
$n = substr($num_str, strlen($num_str)-1, 1);
} else {
$n = $num_int % 10;
}
$p1 = substr($c1, 3 * $n, 3);
$p2 = substr($c2, 3 * $i, 3);
if ($n != '0' || ($n == '0' && ($p2 == '亿' || $p2 == '万' || $p2 == '元'))) {
$c = $p1 . $p2 . $c;
} else {
$c = $p1 . $c;
}
$i = $i + 1;
$num_int = $num_int / 10;
$num_int = (int)$num_int;
if ($num_int == 0) {
break;
}
}
$j = 0;
$slen = strlen($c);
while ($j < $slen) {
$m = substr($c, $j, 6);
if ($m == '零元' || $m == '零万' || $m == '零亿' || $m == '零零') {
$left = substr($c, 0, $j);
$right = substr($c, $j + 3);
$c = $left . $right;
$j = $j-3;
$slen = $slen-3;
}
$j = $j + 3;
}
if (substr($c, strlen($c)-3, 3) == '零') {
$c = substr($c, 0, strlen($c)-3);
}
if (empty($c)) {
return "人民币零元整";
}else{
return "人民币". $c . "整";
}
return $result;
}
//数字转大写
function numToWordone($num){
$chiNum = array('○', '一', '二', '三', '四', '五', '六', '七', '八', '九');
$chiUni = array('','十');
$chiStr = '';
$num_str = (string)$num;
$count = strlen($num_str);
$last_flag = true; //上一个 是否为0
$zero_flag = true; //是否第一个
$temp_num = null; //临时数字
$chiStr = '';//拼接结果
if ($count == 2) {//两位
$temp_num = $num_str[0];
$chiStr = $temp_num == 1 ? $chiUni[1] : $chiNum[$temp_num].$chiUni[1];
$temp_num = $num_str[1];
$chiStr .= $temp_num == 0 ? '' : $chiNum[$temp_num];
}else if($count > 2){
$index = 0;
for ($i=$count-1; $i >= 0 ; $i--) {
$temp_num = $num_str[$i];
$chiStr = $chiNum[$temp_num].$chiStr;
$index ++;
}
}else{
$chiStr = $chiNum[$num_str[0]];
}
return $chiStr;
}
/**
* 消息提醒公用方法
*
* @author cavan
*
* @param $quot_id //询价主表id
* @param $type //消息归属
* @param $message_type //消息类型
* @param $property_cert_info_id //物业表id
*/
function PublicMessage($quot_id="" ,$type="" , $message_type="", $property_cert_info_id="") {
if(!$quot_id){
return array("code"=>0,"msg"=>"缺少必要参数询价主表id");
}
if(!$type){
return array("code"=>0,"msg"=>"缺少必要参数消息归属");
}
if(!$message_type){
return array("code"=>0,"msg"=>"缺少必要参数消息类型");
}
if(in_array($message_type,[6,7,8])){
if(!$property_cert_info_id){
return array("code"=>0,"msg"=>"缺少必要参数物业表id");
}
}
$where["i.id"] = $quot_id;
if($property_cert_info_id){
$where["ii.id"] = $property_cert_info_id;
}
$inquiry = Db::name("inquiry")
->alias("i")
->join('pg_property_cert_info ii','ii.quot_id=i.id','LEFT')
->where($where)
->group("ii.quot_id")
->field("i.order_no,i.user_id,i.user_name,i.type,ii.property_full_name,ii.survey_user_id,ii.survey_user_name,i.is_auto")
->find();
if(empty($inquiry)){
return array("code"=>0,"msg"=>"未查得相关物业信息");
}
$type_arr = array(9,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,32); //需要用到报告信息的状态
if(in_array($message_type,$type_arr)){
//报告编号
$report = Db::name("report")
->where("quot_id",$quot_id)
->field("id,report_no,producer_id,producer_name")
->find();
if(empty($inquiry)){
return array("code"=>0,"msg"=>"未查得相关报告信息");
}
}
//消息内容处理
$message_content = "";
$name = "";
$query = array();
$apptype = $title = $s_id = "";
$user_id_arr = array();
$flag = 1;
$apiAuth = new app\lib\AuthApi();
$FbbService = new app\lib\FbbService();
$where = array();
switch ($message_type)
{
case 1:
$flag = 2;
$roleCodes = array("roleCodes"=>'Technical_manager,Deputy_manager,Evaluation_Assistant'); //技术部经理,技术部副经理,评估助理
$message_content = "单号".$inquiry['order_no']."待询价员回价,请及时处理(物业名称:".$inquiry['property_full_name'].",业务员:".$inquiry['user_name'].")";
// //前端跳转方法和参数
// $type1 = ($inquiry['type'] == 1)?"priceReturnAllProjectUrgentProjectHouseList":"priceReturnAllProjectBusinessList";
// $name = "priceReturn-detail";
// $query = array(
// "id"=>$quot_id,
// "countdownPage"=>true,
// "isAllowOpenType"=>1,
// "type"=>1,
// "status"=>1,
// "from"=>$type1,
// );
if($inquiry['is_auto'] == 1){ //是否自动估价
//前端跳转方法和参数
$type1 = "home";
$name = "priceReturn-detail";
$query = array(
"id"=>$quot_id,
"countdownPage"=>true,
"isAllowOpenType"=>1,
"type"=>1,
"status"=>1,
"from"=>$type1,
);
}else{
//前端跳转方法和参数
$type1 = ($inquiry['type'] == 1)?"priceReturnAllProjectUrgentProjectHouseList":"priceReturnAllProjectBusinessList";
$name = "priceReturn-detail";
$query = array(
"id"=>$quot_id,
"countdownPage"=>true,
"isAllowOpenType"=>1,
"type"=>1,
"status"=>1,
"from"=>$type1,
);
}
break;
case 2:
$apptype = 401;
$title = "询价员已回价";
$user_id = $inquiry['user_id'];
$message_content = "单号".$inquiry['order_no']."询价员已回价,点击查看详情";
$where = ["message_type"=>1,"quot_id"=>$quot_id];
//前端跳转方法和参数
$inquiry_details = Db::name('property_cert_info')
->alias('a')
->join(['pg_return_price' => 'b'], 'b.property_cert_info_id = a.id','left')
->whereIn('a.quot_id', $quot_id)
->field([
'a.id', 'a.city','a.property_full_name', 'a.size','b.eva_unit_price','b.eva_total_value','b.eva_net_value'
])
->group('a.id')
->order('b.create_time', 'desc')
->select();
$name = "businessManage-businessInfo-inquiry-detail";
$query = array(
"id"=>$quot_id,
"order_no"=>$inquiry['order_no'],
"type"=>$inquiry['type'],
"inquiry_details"=>json_encode($inquiry_details)
);
break;
case 3:
$flag = 2;
$roleCodes = array("roleCodes"=>'Technical_manager,Deputy_manager,Evaluation_Assistant'); //技术部经理,技术部副经理,评估助理
$message_content = "单号".$inquiry['order_no']."待询价员调价,请及时处理(物业名称:".$inquiry['property_full_name'].",业务员:".$inquiry['user_name'].")";
// $where = ["message_type"=>2,"quot_id"=>$quot_id];
//前端跳转方法和参数
// $type1 = ($inquiry['type'] == 1)?"priceReturnAllProjectUrgentProjectHouseList":"priceReturnAllProjectBusinessList";
$name = "priceReturn-detail";
$query = array(
"id"=>$property_cert_info_id,
"countdownPage"=>true,
"isAllowOpenType"=>1,
"type"=>1,
"status"=>2,
"adjust"=>1,
"from"=>"home",
);
break;
case 4:
$apptype = 402;
$title = "询价员已调价";
$user_id = $inquiry['user_id'];
$message_content = "单号".$inquiry['order_no']."询价员已调价,点击查看详情";
$where = ["message_type"=>3,"quot_id"=>$quot_id];
//前端跳转方法和参数
$inquiry_details = Db::name('property_cert_info')
->alias('a')
->join(['pg_return_price' => 'b'], 'b.property_cert_info_id = a.id','left')
->whereIn('a.quot_id', $quot_id)
->field([
'a.id', 'a.city','a.property_full_name', 'a.size','b.eva_unit_price','b.eva_total_value','b.eva_net_value'
])
->group('a.id')
->order('b.create_time', 'desc')
->select();
$name = "businessManage-businessInfo-inquiry-detail";
$query = array(
"id"=>$quot_id,
"order_no"=>$inquiry['order_no'],
"type"=>$inquiry['type'],
"inquiry_details"=>json_encode($inquiry_details)
);
break;
case 5:
$flag = 2;
$roleCodes = array("roleCodes"=>'He_Xikun'); //特殊用户-何喜琨
$message_content = "单号".$inquiry['order_no']."查勘待派单,请及时处理(物业名称:".$inquiry['property_full_name'].",业务员:".$inquiry['user_name'].")";
$where = [["message_type","in","2,4"],["quot_id","=",$quot_id]];
break;
case 6:
$apptype = 403;
$title = "查勘待跟进";
//app推送消息需要查看表id
$s_id = Db::name("survey")->where(["order_no"=>$inquiry['order_no'],"property_cert_info_id"=>$property_cert_info_id])->value("id");
$user_id =Db::name("survey")->where(["order_no"=>$inquiry['order_no'],"property_cert_info_id"=>$property_cert_info_id])->value("user_id");
$message_content = "单号".$inquiry['order_no']."查勘待跟进,请及时处理(物业名称:".$inquiry['property_full_name'].",业务员:".$inquiry['user_name'].")";
$where = [["message_type","in","5,8"],["quot_id","=",$quot_id]];
//前端跳转方法和参数
$name = "surveyManageSurveyManageSurveyWaitFollowList";
$query = array();
break;
case 7:
$type2 = Db::name("survey")->where(["order_no"=>$inquiry['order_no'],"property_cert_info_id"=>$property_cert_info_id])->value("survey_type");
if($type2 == 1){
$apptype = 404;
$title = "查勘已完成";
}else{
$apptype = 405;
$title = "查勘已完成";
}
//app推送消息需要查看表id
$s_id = Db::name("survey")->where(["order_no"=>$inquiry['order_no'],"property_cert_info_id"=>$property_cert_info_id])->value("id");
$user_id = $inquiry['user_id'];
$message_content = "单号".$inquiry['order_no'].",物业名称:".$inquiry['property_full_name'].",查勘已完成";
$where = ["message_type"=>6,"quot_id"=>$quot_id];
//前端跳转方法和参数
$res=Db::name("survey")->alias('survey')
->join('property_cert_info ind','survey.property_cert_info_id=ind.id','LEFT')
->join('inquiry i','ind.quot_id=i.id','LEFT')
->field('ind.id,survey.id as survey_id,i.order_no,ind.city,ind.city_id,ind.property_full_name,i.is_multiple,i.type,survey.id as survey_id,survey.status,survey.create_time,survey.user_name as surver_username,i.user_name,survey.assign_time,survey.complete_time,survey.return_reason,ind.id as property_cert_info_id,survey.area,survey.survey_type,i.status as inquiry_status')
->where(["survey.order_no"=>$inquiry['order_no'],"survey.property_cert_info_id"=>$property_cert_info_id])
->group('survey.id')
->find();
$name = "surveyManage-surveyCompleteDetail";
if(!empty($res)){
$query = array(
"id"=>$res['id'],
"type"=>$res['type'],
"city_id"=>$res['city_id'],
"survey_id"=>$res['survey_id'],
"order_no"=>$res['order_no'],
"survey_type"=>$res['survey_type'],
"inquiry_status"=>$res['inquiry_status'],
"property_cert_info_id"=>$res['property_cert_info_id'],
"from"=>"surveyManage-surveyCompleteList",
);
}
break;
case 8:
$flag = 2;
$roleCodes = array("roleCodes"=>'He_Xikun'); //特殊用户-何喜琨
$message_content = "单号".$inquiry['order_no']."查勘被退回,待派单,请及时处理(物业名称:".$inquiry['property_full_name'].",业务员:".$inquiry['user_name'].")";
$where = ["message_type"=>7,"quot_id"=>$quot_id];
break;
case 9:
$flag = 2;
$roleCodes = array("roleCodes"=>'Assistant_appraiser'); //估计师
$message_content = "报告编号".$report['report_no']."报告待制作,请及时处理(物业名称:".$inquiry['property_full_name'].")";
$where = ["message_type"=>7,"quot_id"=>$quot_id];
//前端跳转方法和参数
$name = "report-detail";
$query = array(
"reportid"=>$report['id'],
"type"=>$inquiry['type'],
"from"=>'waitMake',
"isReset"=>true,
);
break;
case 10:
$flag = 2;
$roleCodes = array("roleCodes"=>'Review_quality_inspection'); //审查质检
$message_content = "报告编号".$report['report_no']."报告待审核,请及时处理(物业名称:".$inquiry['property_full_name'].",制作员:".$report['producer_name'].")";
$where = [["message_type","in","7,9,12"],["quot_id","=",$quot_id]];
//前端跳转方法和参数
$name = "report-examineDetail";
$query = array(
"reportid"=>$report['id'],
"type"=>$inquiry['type'],
"state"=> 'check',
"from"=>'waitApproval',
"isReset"=>true,
);
break;
case 11:
$apptype = 406;
$title = "报告已完成";
$user_id = $inquiry['user_id'];
$message_content = "单号".$inquiry['order_no']."报告已完成";
$where = [["message_type","in","10,13"],["quot_id","=",$quot_id]];
break;
case 12:
$user_id = $report['producer_id'];
$message_content = "报告编号".$report['report_no']."报告退回待制作,请及时处理(物业名称:".$inquiry['property_full_name'].")";
$where = ["message_type"=>11,"quot_id"=>$quot_id];
//前端跳转方法和参数
$name = "report-examineDetail";
$query = array(
"reportid"=>$report['id'],
"type"=>$inquiry['type'],
"from"=>'waitMake',
"isReset"=>true,
);
break;
case 13:
$flag = 2;
$roleCodes = array("roleCodes"=>'Review_quality_inspection'); //审查质检
$message_content = "报告编号".$report['report_no']."报告退回待审核,请及时处理(物业名称:".$inquiry['property_full_name'].")";
// $where = ["message_type"=>12,"quot_id"=>$quot_id];
//前端跳转方法和参数
$name = "report-examineDetail";
$query = array(
"reportid"=>$report['id'],
"type"=>$inquiry['type'],
"state"=> 'check',
"from"=>'waitApproval',
"isReset"=>true,
);
break;
case 14:
$user_id = $inquiry['user_id'];
$message_content = "报告编号".$report['report_no']."报告待领取";
// $where = ["message_type"=>13,"quot_id"=>$quot_id];
break;
case 15:
$flag = 2;
$roleCodes = array("roleCodes"=>'Business_manager'); //待部门经理审批:角色=业务经理的用户
$refund_type = Db::name("refund")->where("order_no",$inquiry['order_no'])->where("report_no",$report['report_no'])->value("refund_type");
if($refund_type == 1) { //申请退费
$message_content = "报告编号" . $report['report_no'] . "申请退报告费,待部门经理审批,请及时处理(物业名称:" . $inquiry['property_full_name'] . ",业务员:" . $inquiry['user_name'] . ")";
}else if($refund_type == 2){ //申请优惠
$message_content = "报告编号" . $report['report_no'] . "申请优惠,待部门经理审批,请及时处理(物业名称:" . $inquiry['property_full_name'] . ",业务员:" . $inquiry['user_name'] . ")";
}
$where = ["message_type"=>14,"quot_id"=>$quot_id];
//前端跳转方法和参数
$refund_id = Db::name("refund")->where("order_no",$inquiry['order_no'])->where("report_no",$report['report_no'])->value("refund_id");
$name = "costManage-financialManage-detailPage-applySubmitDetail";
$query = array(
"id"=>$refund_id,
"pathName"=>"financialDrawBackManage",
);
break;
case 16:
$apptype = 407;
$title = "部门经理审批已通过";
$user_id = $inquiry['user_id'];
$refund_type = Db::name("refund")->where("order_no",$inquiry['order_no'])->where("report_no",$report['report_no'])->value("refund_type");
if($refund_type == 1) { //申请退费
$message_content = "报告编号" . $report['report_no'] . "申请退报告费,部门经理审批通过";
}else if($refund_type == 2){ //申请优惠
$message_content = "报告编号" . $report['report_no'] . "申请优惠,部门经理审批通过";
}
$where = ["message_type"=>15,"quot_id"=>$quot_id];
//前端跳转方法和参数
$refund_id = Db::name("refund")->where("order_no",$inquiry['order_no'])->where("report_no",$report['report_no'])->value("refund_id");
$name = "businessManage-detailPage-applyDetail";
$query = array(
"id"=>$refund_id
);
break;
case 17:
$apptype = 407;
$title = "部门经理审批已驳回";
$user_id = $inquiry['user_id'];
$refund_type = Db::name("refund")->where("order_no",$inquiry['order_no'])->where("report_no",$report['report_no'])->value("refund_type");
if($refund_type == 1) { //申请退费
$message_content = "报告编号" . $report['report_no'] . "申请退报告费,部门经理审批驳回";
}else if($refund_type == 2){ //申请优惠
$message_content = "报告编号" . $report['report_no'] . "申请优惠,部门经理审批驳回";
}
$where = ["message_type"=>15,"quot_id"=>$quot_id];
//前端跳转方法和参数
$refund_id = Db::name("refund")->where("order_no",$inquiry['order_no'])->where("report_no",$report['report_no'])->value("refund_id");
$name = "businessManage-detailPage-applyDetail";
$query = array(
"id"=>$refund_id
);
break;
case 18:
$apptype = 407;
$title = "总经理审批已通过";
$user_id = $inquiry['user_id'];
$refund_type = Db::name("refund")->where("order_no",$inquiry['order_no'])->where("report_no",$report['report_no'])->value("refund_type");
if($refund_type == 1) { //申请退费
$message_content = "报告编号" . $report['report_no'] . "申请退报告费,总经理审批通过";
}else if($refund_type == 2){ //申请优惠
$message_content = "报告编号" . $report['report_no'] . "申请优惠,总经理审批通过";
}
$where = ["message_type"=>32,"quot_id"=>$quot_id];
//前端跳转方法和参数
$refund_id = Db::name("refund")->where("order_no",$inquiry['order_no'])->where("report_no",$report['report_no'])->value("refund_id");
$name = "businessManage-detailPage-applyDetail";
$query = array(
"id"=>$refund_id
);
break;
case 19:
$apptype = 407;
$title = "总经理审批已驳回";
$user_id = $inquiry['user_id'];
$refund_type = Db::name("refund")->where("order_no",$inquiry['order_no'])->where("report_no",$report['report_no'])->value("refund_type");
if($refund_type == 1) { //申请退费
$message_content = "报告编号" . $report['report_no'] . "申请退报告费,总经理审批驳回";
}else if($refund_type == 2){ //申请优惠
$message_content = "报告编号" . $report['report_no'] . "申请优惠,总经理审批驳回";
}
$where = ["message_type"=>32,"quot_id"=>$quot_id];
//前端跳转方法和参数
$refund_id = Db::name("refund")->where("order_no",$inquiry['order_no'])->where("report_no",$report['report_no'])->value("refund_id");
$name = "businessManage-detailPage-applyDetail";
$query = array(
"id"=>$refund_id
);
break;
case 20:
$flag = 2;
$roleCodes = array("roleCodes"=>'Finance_CSPG'); //财务
$refund_type = Db::name("refund")->where("order_no",$inquiry['order_no'])->where("report_no",$report['report_no'])->value("refund_type");
if($refund_type == 1) { //申请退费
$message_content = "报告编号".$report['report_no']."申请退报告费,待财务审批,请及时处理(物业名称:".$inquiry['property_full_name'].",业务员:".$inquiry['user_name'].")";
}else if($refund_type == 2){ //申请优惠
$message_content = "报告编号".$report['report_no']."申请优惠,待财务审批,请及时处理(物业名称:".$inquiry['property_full_name'].",业务员:".$inquiry['user_name'].")";
}
$where = [["message_type","in","18,19"],["quot_id","=",$quot_id]];
//前端跳转方法和参数
$refund_id = Db::name("refund")->where("order_no",$inquiry['order_no'])->where("report_no",$report['report_no'])->value("refund_id");
$name = "costManage-financialManage-detailPage-applySubmitDetail";
$query = array(
"id"=>$refund_id,
"pathName"=>"financialDrawBackManage"
);
break;
case 21:
$apptype = 408;
$title = "财务审批已通过";
$user_id = $inquiry['user_id'];
$refund_type = Db::name("refund")->where("order_no",$inquiry['order_no'])->where("report_no",$report['report_no'])->value("refund_type");
if($refund_type == 1) { //申请退费
$message_content = "报告编号".$report['report_no']."申请退报告费,财务审批通过";
}else if($refund_type == 2){ //申请优惠
$message_content = "报告编号".$report['report_no']."申请优惠,财务审批通过";
}
$where = ["message_type"=>20,"quot_id"=>$quot_id];
//前端跳转方法和参数
$refund_id = Db::name("refund")->where("order_no",$inquiry['order_no'])->where("report_no",$report['report_no'])->value("refund_id");
$name = "businessManage-detailPage-applyDetail";
$query = array(
"id"=>$refund_id
);
break;
case 22:
$apptype = 408;
$title = "财务审批已驳回";
$user_id = $inquiry['user_id'];
$refund_type = Db::name("refund")->where("order_no",$inquiry['order_no'])->where("report_no",$report['report_no'])->value("refund_type");
if($refund_type == 1) { //申请退费
$message_content = "报告编号".$report['report_no']."申请退报告费,财务审批驳回";
}else if($refund_type == 2){ //申请优惠
$message_content = "报告编号".$report['report_no']."申请优惠,财务审批驳回";
}
$where = ["message_type"=>20,"quot_id"=>$quot_id];
//前端跳转方法和参数
$refund_id = Db::name("refund")->where("order_no",$inquiry['order_no'])->where("report_no",$report['report_no'])->value("refund_id");
$name = "businessManage-detailPage-applyDetail";
$query = array(
"id"=>$refund_id
);
break;
case 23:
$flag = 2;
$roleCodes = array("roleCodes"=>'general_manager'); //魏总
$message_content = "单号".$inquiry['order_no']."待总经理审批,请及时处理(物业名称:".$inquiry['property_full_name'].",业务员:".$inquiry['user_name'].")";
// $where = ["message_type"=>18,"quot_id"=>$quot_id];
//前端跳转方法和参数
// $refund_id = Db::name("refund")->where("order_no",$inquiry['order_no'])->where("report_no",$report['report_no'])->value("refund_id");
// $name = "costManage-financialManage-detailPage-applySubmitDetail";
// $query = array(
// "id"=>$refund_id,
// "pathName"=>"waitAuditTicket"
// );
$bill_id = Db::name("bill")->where("order_no",$inquiry['order_no'])->where("report_no",$report['report_no'])->value("bill_id");
$name = "costManage-billManage-detailPage-applyChargeDetail";
$query = array(
"id"=>$bill_id,
"type"=>1,
"pathName"=>"waitAuditTicket"
);
break;
case 24:
$apptype = 409;
$title = "总经理审批已通过";
$user_id = $inquiry['user_id'];
$message_content = "单号".$inquiry['order_no']."总经理审批通过";
$where = ["message_type"=>23,"quot_id"=>$quot_id];
//前端跳转方法和参数
$bill_id = Db::name("bill")->where("order_no",$inquiry['order_no'])->where("report_no",$report['report_no'])->value("bill_id");
$name = "businessManage-detailPage-applyChargeDetail";
$query = array(
"id"=>$bill_id,
"type"=>3,
"pathName"=>'mineInvoice',
);
break;
case 25:
$apptype = 409;
$title = "总经理审批已驳回";
$user_id = $inquiry['user_id'];
$message_content = "单号".$inquiry['order_no']."总经理审批驳回";
$where = ["message_type"=>23,"quot_id"=>$quot_id];
//前端跳转方法和参数
$bill_id = Db::name("bill")->where("order_no",$inquiry['order_no'])->where("report_no",$report['report_no'])->value("bill_id");
$name = "businessManage-detailPage-applyChargeDetail";
$query = array(
"id"=>$bill_id,
"type"=>3,
"pathName"=>'mineInvoice',
);
break;
case 26:
$flag = 2;
$roleCodes = array("roleCodes"=>'general_manager'); //财务
$message_content = "单号".$inquiry['order_no']."待财务开票,请及时处理(物业名称:".$inquiry['property_full_name'].",业务员:".$inquiry['user_name'].")";
$where = [["message_type","in","24,25"],["quot_id","=",$quot_id]];
//前端跳转方法和参数
$bill_id = Db::name("bill")->where("order_no",$inquiry['order_no'])->where("report_no",$report['report_no'])->value("bill_id");
$name = "costManage-billManage-detailPage-applyChargeDetail";
$query = array(
"id"=>$bill_id,
"type"=>2,
"pathName"=>'waitOpenTicket',
);
break;
case 27:
$apptype = 410;
$title = "财务已开具票据";
$user_id = $inquiry['user_id'];
$message_content = "单号".$inquiry['order_no']."财务已开具票据";
$where = ["message_type"=>26,"quot_id"=>$quot_id];
//前端跳转方法和参数
$bill_id = Db::name("bill")->where("order_no",$inquiry['order_no'])->where("report_no",$report['report_no'])->value("bill_id");
$name = "costManage-billManage-detailPage-applyChargeDetail";
$query = array(
"id"=>$bill_id,
"type"=>3,
"pathName"=>'waitGetTicket',
);
break;
case 28:
$apptype = 410;
$title = "财务已驳回";
$user_id = $inquiry['user_id'];
$message_content = "单号".$inquiry['order_no']."财务已驳回";
$where = ["message_type"=>26,"quot_id"=>$quot_id];
//前端跳转方法和参数
$bill_id = Db::name("bill")->where("order_no",$inquiry['order_no'])->where("report_no",$report['report_no'])->value("bill_id");
$name = "costManage-billManage-detailPage-applyChargeDetail";
$query = array(
"id"=>$bill_id,
"type"=>3,
"pathName"=>'waitGetTicket',
);
break;
case 29:
$flag = 2;
$roleCodes = array("roleCodes"=>'Technical_manager,Deputy_manager,Evaluation_Assistant'); //技术部经理,技术部副经理,评估助理
$message_content = "单号".$inquiry['order_no']."(简易)待询价员回价,请及时处理(物业名称:".$inquiry['property_full_name'].",业务员:".$inquiry['user_name'].")";
// $where = ["message_type"=>22,"quot_id"=>$quot_id];
break;
case 30:
$flag = 2;
$roleCodes = array("roleCodes"=>'Assistant_appraiser,Review_quality_inspection'); //角色=估价师助理 ,审查质检 的用户
$message_content = "单号".$inquiry['order_no']."(简易)报告待制作,请及时处理(物业名称:".$inquiry['property_full_name'].")";
$where = ["message_type"=>29,"quot_id"=>$quot_id];
//前端跳转方法和参数
$inquiry_details = Db::name('property_cert_info')->alias('a')
->join(['pg_return_price' => 'b'], 'b.property_cert_info_id = a.id','left')
->whereIn('a.quot_id', $quot_id)
->field(['a.id','a.size','a.property_full_name','a.remark','b.eva_unit_price','b.eva_total_value','b.eva_net_value','a.remark'])
->group('a.id')
->order('b.create_time', 'desc')
->select();
$name = "priceReturn-allProject-simple-detail";
$query = array(
"isReset"=>true,
"from"=>"priceReturnAllProjectSimpleList",
"quot_id"=>$quot_id,
"property_cert_info_id"=>!empty($inquiry_details)?$inquiry_details[0]['id']:"",
"inquiry_details"=>json_encode($inquiry_details)
);
break;
case 31:
$apptype = 411;
$title = "报告已完成";
$user_id = $inquiry['user_id'];
$message_content = "单号".$inquiry['order_no']."报告已完成";
$where = ["message_type"=>30,"quot_id"=>$quot_id];
break;
case 32:
$flag = 2;
$roleCodes = array("roleCodes"=>'general_manager'); //待总经理审批:魏总
$refund_type = Db::name("refund")->where("order_no",$inquiry['order_no'])->where("report_no",$report['report_no'])->value("refund_type");
if($refund_type == 1) { //申请退费
$message_content = "报告编号" . $report['report_no'] . "申请退报告费,待总经理审批,请及时处理(物业名称:" . $inquiry['property_full_name'] . ",业务员:" . $inquiry['user_name'] . ")";
}else if($refund_type == 2){ //申请优惠
$message_content = "报告编号" . $report['report_no'] . "申请优惠,待总经理审批,请及时处理(物业名称:" . $inquiry['property_full_name'] . ",业务员:" . $inquiry['user_name'] . ")";
}
$where = [["message_type","in","16,17"],["quot_id","=",$quot_id]];
//前端跳转方法和参数
$refund_id = Db::name("refund")->where("order_no",$inquiry['order_no'])->where("report_no",$report['report_no'])->value("refund_id");
$name = "costManage-financialManage-detailPage-applySubmitDetail";
$query = array(
"id"=>$refund_id,
"pathName"=>"financialDrawBackManage"
);
break;
default:
}
$time = time();
$request = Request::instance();
if($flag == 1){
$insert_data = array();
$insert_data['user_id'] = $user_id;
$insert_data['quot_id'] = $quot_id;
$insert_data['name'] = $name;
$insert_data['query'] = json_encode($query);
if($property_cert_info_id){
$insert_data["property_cert_info_id"] = $property_cert_info_id;
}
$insert_data['type'] = $type;
$insert_data['message_type'] = $message_type;
$insert_data['message_content'] = $message_content;
$insert_data['create_time'] = date("Y-m-d H:i:s",$time);
$id = Db::name("message")->insertGetId($insert_data);
if($id){
//app推送消息
if($apptype){
$params = array();
$params['oa_user_id'] = $user_id;
$params['type'] = $apptype;
$params['unique_id'] = $s_id?$s_id:$quot_id;
$params['title'] = $title;
$params['content'] = $message_content;
$re = $FbbService->addAppBsMessage($params);
}
//pc推送消息
sock_post($request->domain() .":".$_SERVER["SERVER_PORT"]. $request->root()."/admin/MessageRemind/messagePush",["user_id"=>$user_id,"message_content"=>$message_content]);
}
}else{
//获取相应的用户列表
$userinfo = $apiAuth->getUser($roleCodes);
if($userinfo == "-4001"){
return array("code"=>0,"msg"=>"获取角色用户失败");
}else{
$userinfo = json_decode($userinfo,true);
if($userinfo['code'] == "0000"){
$user_id_arr = array_column($userinfo['data'],"oid");
}
}
if(!empty($user_id_arr)){
foreach ($user_id_arr as $k => $v){
$insert_data = array();
$insert_data['user_id'] = $v;
$insert_data['quot_id'] = $quot_id;
$insert_data['name'] = $name;
$insert_data['query'] = json_encode($query);
if($property_cert_info_id){
$insert_data["property_cert_info_id"] = $property_cert_info_id;
}
$insert_data['type'] = $type;
$insert_data['message_type'] = $message_type;
$insert_data['message_content'] = $message_content;
$insert_data['create_time'] = date("Y-m-d H:i:s",$time);
$id = Db::name("message")->insertGetId($insert_data);
if($id){
//app推送消息
if($apptype){
$params = array();
$params['oa_user_id'] = $v;
$params['type'] = $apptype;
$params['unique_id'] = $s_id?$s_id:$quot_id;
$params['title'] = $title;
$params['content'] = $message_content;
$re = $FbbService->addAppBsMessage($params);
}
//pc推送消息
sock_post($request->domain() . $request->root()."/admin/MessageRemind/messagePush",["user_id"=>$v,"message_content"=>$message_content]);
}
}
}
}
if(!empty($where)){ //修改其它未读状态数据状态
Db::name("message")->where($where)->update(array("status"=>2));
}
return array("code"=>1,"msg"=>"操作成功");
}
/**
* 消息已阅读公用方法
*
* @author cavan
*
* @param $id //消息表od
*/
function MessageRead($id=""){
if(!$id){
return array("code"=>0,"msg"=>"缺少必要参数信息表id");
}
$message_type = Db::name("message")->where("id",$id)->value("message_type");
if($message_type == 31){ //消息为最后一个状态 则处理当前状态的信息为无效数据
$update_data['issee'] = 1;
$update_data['status'] = 2;
}else{
$update_data['issee'] = 1;
}
Db::name("message")->where("id",$id)->update($update_data);
if($message_type == 14){
$quot_id = Db::name("message")->where("id",$id)->value("quot_id");
Db::name("message")->where("quot_id",$quot_id)->where("message_type",14)->update(array("status"=>2));
}
return array("code"=>1,"msg"=>"操作成功");
}
/**
* 推送消息
* @param array or string $to 用户id
* @param string $content 消息内容
*/
function sendMessage($to, $content)
{
if (!$to) {
return;
}
$to = str2arr($to);
foreach ($to as $uid) {
$data = [
'to' => $uid,
'type' => 'publish',
'content' => $content
];
$result = curlPostMessage($data);
}
return $result;
}
function curlPostMessage($data)
{
$url = Env::get('push.host') . ':' . Env::get('push.port');
$ch = curl_init();
$data = http_build_query($data);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Expect:"));
$return = curl_exec($ch);
curl_close($ch);
Log::write("返回:".$return."--请求:".$ch,'workermanCurl');
return $return;
}
/** 字符串转数组
* @param $str 要分割的字符串
* @param string $glue 分隔符
* @return array
*/
function str2arr($str, $glue = ',')
{
return explode($glue, $str);
}
//php 异步执行
function sock_post($url, $query) {
$_post = strval(null);
if (!empty($query)) {
$_post = "query=" . urlencode(json_encode($query));
}
$info = parse_url($url);
$fp = fsockopen($info["host"], 80, $errno, $errstr, 3);
if (!$fp) {
echo "$errstr($errno)
\n";
} else {
stream_set_blocking($fp, 0); //开启非阻塞模式
stream_set_timeout($fp, 3); //设置超时时间(s)
$head = "POST " . $info['path'] . "?" . $_post . " HTTP/1.1\r\n";
$head .= "Host: " . $info['host'] . "\r\n";
$head .= "Referer: http://" . $info['host'] . $info['path'] . "\r\n";
$head .= "Content-type: application/x-www-form-urlencoded\r\n";
$head .= "Content-Length: " . strlen(trim($_post)) . "\r\n";
$head .= "\r\n";
$head .= trim($_post);
fwrite($fp, $head);
Log::write("fp:".$fp."---head:".$head,'workerman');
fclose($fp);
}
}
//获取当前日期前一天工作日(避开周末)
//2022-01-05更新
//因接口调用失效或收费需要废弃重写该方法
/* function getCostDate($date) {
$valuation_time = '';
$workday_api = config('serviceConfig.API_WORKDAY_URL');
for ($i = 1; $i <= 30 ; $i++) {
$res_date = date('Ymd', strtotime("$date -$i day"));
$valuation_time = date('Y-m-d', strtotime("$date -$i day"));
$getData = file_get_contents($workday_api. $res_date);
$result = json_decode($getData, true);
if (!empty($result['workday']) && $result['workday'] == 1) {
break;
}
}
return $valuation_time;
} */
function getCostDate($date) {
$valuation_time = '';
for ($i = 1; $i <= 30 ; $i++) {
$res_date = date('Ymd', strtotime("$date -$i day"));
$valuation_time = date('Y-m-d', strtotime("$date -$i day"));
$result = Db::name('holiday')->where(['holiday_date'=>$res_date])->find();
if ($result) {
if ($result['holiday_type']==2) {
break;
}
} elseif (date('N', strtotime("$date -$i day"))<6) {
break;
}
}
return $valuation_time;
}
// 获取系统参数配置
function getSystemConfig($key_name){
return Db::name('system_config')->where(['name'=>$key_name])->value('value');
}
function getCity($city_name){
$where[] = ['name|shortname', 'eq', $city_name];
return Db::name('region')->where($where)->field('id,shortname')->find();
}
// 获取用户排序权重
function getSort($user_id){
$sorts = ['149'=>100,'178'=>99];
return !empty($sorts[$user_id]) ? $sorts[$user_id] : 0;
}
/**
* 前端控制台打印消息
* @param object $log
*/
function console($log='') {
switch (empty($log)) {
case False:
$out = json_encode($log);
$GLOBALS['console'] .= 'console.log('.$out.');';
break;
default:
echo '';
}
}
/**
* 过滤Emoji字符串
*/
function removeEmoji($text)
{
// Match Emoticons
$regexEmoticons = '/[\x{1F600}-\x{1F64F}]/u';
$clean_text = preg_replace($regexEmoticons, '', $text);
// Match Miscellaneous Symbols and Pictographs
$regexSymbols = '/[\x{1F300}-\x{1F5FF}]/u';
$clean_text = preg_replace($regexSymbols, '', $clean_text);
// Match Transport And Map Symbols
$regexTransport = '/[\x{1F680}-\x{1F6FF}]/u';
$clean_text = preg_replace($regexTransport, '', $clean_text);
// Match Miscellaneous Symbols
$regexMisc = '/[\x{2600}-\x{26FF}]/u';
$clean_text = preg_replace($regexMisc, '', $clean_text);
// Match Dingbats
$regexDingbats = '/[\x{2700}-\x{27BF}]/u';
$clean_text = preg_replace($regexDingbats, '', $clean_text);
$clean_text = preg_replace_callback(
'/./u',
function (array $match) {
return strlen($match[0]) >= 4 ? '' : $match[0];
},
$clean_text);
return trim($clean_text);
}
/**
* 通用cURL请求封装
*
* @param string $url 请求地址
* @param string $method 请求方法 (GET|POST|PUT|DELETE|PATCH)
* @param mixed $data 请求数据,数组或字符串形式
* @param array $headers 请求头数组,如 ['Content-Type: application/json']
* @param array $files 文件上传数组,格式为 ['field_name' => '/path/to/file']
* @param array $auth 基础认证 ['username' => '', 'password' => '']
* @param int $timeout 超时时间(秒),默认60
* @param bool $verifySSL 是否验证SSL证书,默认false(不验证)
* @return array 返回数组包含:
* 'code' => HTTP状态码,
* 'data' => 响应内容,
* 'error' => 错误信息,
* 'info' => curl_getinfo信息
*/
function curlRequest(
string $url,
string $method = 'GET',
$data = null,
array $headers = [],
array $files = [],
array $auth = [],
int $timeout = 60,
bool $verifySSL = false
): array {
$ch = curl_init();
$method = strtoupper($method);
// 1. 基础配置
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_HEADER, false);
// 2. SSL配置[2,6](@ref)
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $verifySSL);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, $verifySSL ? 2 : 0);
// 3. 处理文件上传 (优先于普通数据)[8](@ref)
if (!empty($files)) {
foreach ($files as $field => $filePath) {
if (file_exists($filePath)) {
$data[$field] = new CURLFile($filePath);
}
}
}
// 4. 请求数据处理
if (!empty($data)) {
// JSON数据[4](@ref)
if (in_array('Content-Type: application/json', $headers)) {
$payload = is_array($data) ? json_encode($data) : $data;
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
}
// 表单数据/文件上传
else {
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
}
// 5. Header处理[4,2](@ref)
if (!empty($headers)) {
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
}
// 6. 认证处理[4](@ref)
if (!empty($auth['username']) && !empty($auth['password'])) {
curl_setopt($ch, CURLOPT_USERPWD, "{$auth['username']}:{$auth['password']}");
}
// 7. 执行请求
$response = curl_exec($ch);
$error = curl_error($ch);
$info = curl_getinfo($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return [
'code' => $httpCode,
'data' => $response,
'error' => $error ?: null,
'info' => $info
];
}
//启动事物
function t_begin() {
Db::startTrans();
}
//提交事物
function t_commit() {
Db::commit();
}
//回滚事物
function t_rollback() {
Db::rollback();
}
/**
*
* @param type $data
* @param type $code
*/
function apiErrMsg($msg = '请勿异常操作', $code = 99999) {
$api = [
'code' => $code,
'msg' => empty($msg) ? \app\admin\service\ApiService::getMsg($code) : $msg,
];
exit(json_encode($api, JSON_UNESCAPED_UNICODE));
// $response = think\facade\Response::create(compact('code', 'msg'), 'json');
// throw new \think\exception\HttpResponseException($response);
}
function writeLog($log = '', $level = "writelog") {
$logConfig = Config::pull('log');
$logConfig['level'][] = $level;
$logConfig['apart_level'][] = $level;
Log::init($logConfig);
Log::write($log, $level);
}
$GLOBALS['console'] = '';