feature/template #5
@@ -54,7 +54,6 @@ $routes->group('article', ['namespace' => 'App\Controllers\Article'], function (
|
|||||||
// 관할포인트 인쇄
|
// 관할포인트 인쇄
|
||||||
$routes->get('apt/print', 'Apt::print');
|
$routes->get('apt/print', 'Apt::print');
|
||||||
|
|
||||||
|
|
||||||
/** API - 아파트단지 */
|
/** API - 아파트단지 */
|
||||||
$routes->get('apt/getAptLists', 'Apt::getAptLists');
|
$routes->get('apt/getAptLists', 'Apt::getAptLists');
|
||||||
$routes->post('apt/saveAptMemo', 'Apt::saveAptMemo');
|
$routes->post('apt/saveAptMemo', 'Apt::saveAptMemo');
|
||||||
@@ -92,6 +91,21 @@ $routes->group('article', ['namespace' => 'App\Controllers\Article'], function (
|
|||||||
*/
|
*/
|
||||||
$routes->get('apt/delChgApt/getAptLists', 'DelChgApt::getAptLists');
|
$routes->get('apt/delChgApt/getAptLists', 'DelChgApt::getAptLists');
|
||||||
$routes->post('apt/delChgApt/chgAptHscp', 'Apt::chgAptHscp');
|
$routes->post('apt/delChgApt/chgAptHscp', 'Apt::chgAptHscp');
|
||||||
|
|
||||||
|
|
||||||
|
// 아파트 평면도
|
||||||
|
$routes->get('apt/lists2', 'Ground::lists');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 아파트 평면도 - API
|
||||||
|
*/
|
||||||
|
$routes->get('apt/ground/getAptLists', 'Ground::getAptLists');
|
||||||
|
$routes->get('apt/ground/excel', 'Ground::excel');
|
||||||
|
$routes->post('apt/ground/chgAptDamdang', 'Ground::chgAptDamdang');
|
||||||
|
$routes->post('apt/ground/uploadFile', 'Ground::uploadFile');
|
||||||
|
$routes->get('apt/ground/print', 'Ground::print');
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -166,11 +166,17 @@ class Apt extends BaseController
|
|||||||
$damdang = $this->request->getPost(index: 'damdang');
|
$damdang = $this->request->getPost(index: 'damdang');
|
||||||
|
|
||||||
if (empty($team)) {
|
if (empty($team)) {
|
||||||
throw new Exception("팀정보 누락");
|
return $this->response->setJSON([
|
||||||
|
'code' => '9',
|
||||||
|
'msg' => '팀정보 누락',
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty($damdang)) {
|
if (empty($damdang)) {
|
||||||
throw new Exception("담당자정보 누락");
|
return $this->response->setJSON([
|
||||||
|
'code' => '9',
|
||||||
|
'msg' => '담당자정보 누락',
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -192,7 +198,10 @@ class Apt extends BaseController
|
|||||||
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
throw new Exception("저장할 데이터 누락");
|
return $this->response->setJSON([
|
||||||
|
'code' => '9',
|
||||||
|
'msg' => '저장데이터 누락',
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->response->setJSON([
|
return $this->response->setJSON([
|
||||||
@@ -262,8 +271,6 @@ class Apt extends BaseController
|
|||||||
// 엑셀 다운로드
|
// 엑셀 다운로드
|
||||||
public function excel()
|
public function excel()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
$data = [
|
$data = [
|
||||||
|
|||||||
@@ -4,6 +4,11 @@ namespace App\Controllers\Article;
|
|||||||
use App\Controllers\BaseController;
|
use App\Controllers\BaseController;
|
||||||
use App\Models\article\DelChgAptModel;
|
use App\Models\article\DelChgAptModel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 단지코드관리
|
||||||
|
* 2025.12.26
|
||||||
|
* 작성자 : yangsh
|
||||||
|
*/
|
||||||
class DelChgApt extends BaseController
|
class DelChgApt extends BaseController
|
||||||
{
|
{
|
||||||
private $model;
|
private $model;
|
||||||
|
|||||||
358
app/Controllers/Article/Ground.php
Normal file
358
app/Controllers/Article/Ground.php
Normal file
@@ -0,0 +1,358 @@
|
|||||||
|
<?php
|
||||||
|
namespace App\Controllers\Article;
|
||||||
|
|
||||||
|
use App\Controllers\BaseController;
|
||||||
|
use App\Libraries\MyUpload;
|
||||||
|
use App\Models\article\GroundModel;
|
||||||
|
use App\Models\common\CodeModel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 아파트 평면도
|
||||||
|
* 2025.12.26
|
||||||
|
* 작성자 : yangsh
|
||||||
|
*/
|
||||||
|
class Ground extends BaseController
|
||||||
|
{
|
||||||
|
private $model, $codeModel;
|
||||||
|
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->model = new GroundModel();
|
||||||
|
$this->codeModel = new CodeModel();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function lists(): string
|
||||||
|
{
|
||||||
|
|
||||||
|
$codes = $this->codeModel->getCodeLists(['VIDEO_TARGET', 'APT_GROUND_STEP', 'PHO_YN', 'VDO_YN']); // 코드조회
|
||||||
|
$sido = $this->model->getAreaList(); // 지역조회
|
||||||
|
$bonbu = $this->model->getBonbuList(); // 본부
|
||||||
|
$team = $this->model->getTeamList(); // 팀
|
||||||
|
$user = $this->model->getUserList(); // 유저
|
||||||
|
|
||||||
|
return view("pages/article/lists2", [
|
||||||
|
'codes' => $codes,
|
||||||
|
'sido' => $sido,
|
||||||
|
'bonbu' => $bonbu,
|
||||||
|
'team' => $team,
|
||||||
|
'user' => $user,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 아파트단지목록 조회
|
||||||
|
public function getAptLists()
|
||||||
|
{
|
||||||
|
|
||||||
|
$start = (int) $this->request->getGet('start') ?: 0;
|
||||||
|
$end = (int) $this->request->getGet('length') ?: 10;
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
'hscp_no' => $this->request->getGet('hscp_no'), // 단지코드
|
||||||
|
'part_no' => $this->request->getGet('part_no'), // 구분코드
|
||||||
|
'srcSido' => $this->request->getGet('srcSido'), // 시|도
|
||||||
|
'srcGugun' => $this->request->getGet('srcGugun'), // 시|군|구
|
||||||
|
'srcDong' => $this->request->getGet('srcDong'), // 읍|면|동
|
||||||
|
|
||||||
|
'rcpt_hscp_nm' => $this->request->getGet('rcpt_hscp_nm'), // 단지명
|
||||||
|
'sdate' => $this->request->getGet('sdate'), // 시작일
|
||||||
|
'edate' => $this->request->getGet('edate'), // 종료일
|
||||||
|
|
||||||
|
'bonbu' => $this->request->getGet('bonbu'), // 본부
|
||||||
|
'team' => $this->request->getGet('team'), // 팀
|
||||||
|
'damdang' => $this->request->getGet('damdang'), // 담당
|
||||||
|
|
||||||
|
'stat' => $this->request->getGet('stat'), // 진행상태
|
||||||
|
];
|
||||||
|
|
||||||
|
$totalCount = $this->model->getTotalCount($data);
|
||||||
|
$datas = $this->model->getAptLists($start, $end, $data);
|
||||||
|
|
||||||
|
$deptStatistics = $this->model->getDeptStatistics($data); // 조직별통계
|
||||||
|
$areaStatistics = $this->model->getStatistics($data); // 지역별통계
|
||||||
|
|
||||||
|
return $this->response->setJSON(body: [
|
||||||
|
'draw' => (int) ($this->request->getGetPost('draw') ?? 0), // 서버사이드면 권장
|
||||||
|
'recordsTotal' => $totalCount,
|
||||||
|
'recordsFiltered' => $totalCount,
|
||||||
|
'data' => $datas,
|
||||||
|
'widgets' => [
|
||||||
|
'deptList' => $deptStatistics,
|
||||||
|
'areaStats' => $areaStatistics,
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 엑셀 다운로드
|
||||||
|
public function excel()
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
'hscp_no' => $this->request->getGet('hscp_no'), // 단지코드
|
||||||
|
'part_no' => $this->request->getGet('part_no'), // 구분코드
|
||||||
|
'srcSido' => $this->request->getGet('srcSido'), // 시|도
|
||||||
|
'srcGugun' => $this->request->getGet('srcGugun'), // 시|군|구
|
||||||
|
'srcDong' => $this->request->getGet('srcDong'), // 읍|면|동
|
||||||
|
|
||||||
|
'rcpt_hscp_nm' => $this->request->getGet('rcpt_hscp_nm'), // 단지명
|
||||||
|
'sdate' => $this->request->getGet('sdate'), // 시작일
|
||||||
|
'edate' => $this->request->getGet('edate'), // 종료일
|
||||||
|
|
||||||
|
'bonbu' => $this->request->getGet('bonbu'), // 본부
|
||||||
|
'team' => $this->request->getGet('team'), // 팀
|
||||||
|
'damdang' => $this->request->getGet('damdang'), // 담당
|
||||||
|
|
||||||
|
'stat' => $this->request->getGet('stat'), // 진행상태
|
||||||
|
];
|
||||||
|
|
||||||
|
$datas = $this->model->getExcelList($data);
|
||||||
|
|
||||||
|
return $this->response->setJSON(body: [
|
||||||
|
'data' => $datas,
|
||||||
|
]);
|
||||||
|
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$e->getPrevious()->getTraceAsString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 관할포인트 인쇄 - 화면
|
||||||
|
public function print(): string
|
||||||
|
{
|
||||||
|
$deptSq = $this->request->getGet('depChk');
|
||||||
|
$dept_cnt = count($deptSq);
|
||||||
|
|
||||||
|
|
||||||
|
$listDept = $this->model->getDeptMapList($deptSq);
|
||||||
|
|
||||||
|
if (!empty($listDept)) {
|
||||||
|
$lati = 0;
|
||||||
|
$long = 0;
|
||||||
|
foreach ($listDept as $dept) {
|
||||||
|
$lati += $dept['rcpt_y'];
|
||||||
|
$long += $dept['rcpt_x'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$lati = $lati / $dept_cnt;
|
||||||
|
$long = $long / $dept_cnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
return view("pages/article/printMap", [
|
||||||
|
// 'lati' => $lati,
|
||||||
|
// 'long' => $long,
|
||||||
|
'listDept' => $listDept,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 담당자정보변경
|
||||||
|
public function chgAptDamdang()
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
|
||||||
|
$team = $this->request->getPost('team');
|
||||||
|
$damdang = $this->request->getPost(index: 'damdang');
|
||||||
|
|
||||||
|
if (empty($team)) {
|
||||||
|
return $this->response->setJSON([
|
||||||
|
'code' => '9',
|
||||||
|
'msg' => '팀정보 누락',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($damdang)) {
|
||||||
|
return $this->response->setJSON([
|
||||||
|
'code' => '9',
|
||||||
|
'msg' => '담당자정보 누락',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$rows = $this->request->getPost('rows');
|
||||||
|
|
||||||
|
$rows = json_decode($rows, true);
|
||||||
|
|
||||||
|
if (count($rows) > 0) {
|
||||||
|
foreach ($rows as $row) {
|
||||||
|
$params = [
|
||||||
|
$team,
|
||||||
|
$damdang,
|
||||||
|
$row['rcpt_no'],
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
// UPDATE apt_result
|
||||||
|
$this->model->updateAptDamdang($params);
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return $this->response->setJSON([
|
||||||
|
'code' => '9',
|
||||||
|
'msg' => '저장데이터 누락',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->response->setJSON([
|
||||||
|
'code' => '0',
|
||||||
|
'msg' => 'success'
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
return $this->response->setJSON([
|
||||||
|
'code' => '9',
|
||||||
|
'msg' => $e->getMessage(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 파일업로드(평면도)
|
||||||
|
public function uploadFile()
|
||||||
|
{
|
||||||
|
$lib = new MyUpload();
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
$rcpt_no = $this->request->getPost('rcpt_no');
|
||||||
|
$files = $this->request->getFiles();
|
||||||
|
$uploadPath = "/upload/apt_file/" . $rcpt_no . "/";
|
||||||
|
|
||||||
|
|
||||||
|
if (!isset($rcpt_no)) {
|
||||||
|
return $this->response->setJSON([
|
||||||
|
'success' => false,
|
||||||
|
'msg' => '접수번호 누락'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isset($files['file'])) {
|
||||||
|
return $this->response->setJSON([
|
||||||
|
'success' => false,
|
||||||
|
'msg' => '파일 없음'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$arrUploadfile = [];
|
||||||
|
$file = $files['file'];
|
||||||
|
if ($file->isValid() && !$file->hasMoved()) {
|
||||||
|
$uploadData = $lib->do_upload2($file, $uploadPath);
|
||||||
|
|
||||||
|
if ($uploadData !== false) {
|
||||||
|
$arrUploadfile[] = $uploadData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$gps_lat = null;
|
||||||
|
$gps_lon = null;
|
||||||
|
$camDate = null;
|
||||||
|
// print_r($arrUploadfile);
|
||||||
|
// exit;
|
||||||
|
if (!empty($arrUploadfile)) {
|
||||||
|
foreach ($arrUploadfile as $key => $uploadFile) {
|
||||||
|
$object_storage_url = $uploadFile['object_storage_url'];
|
||||||
|
$arrExifData = @exif_read_data($object_storage_url);
|
||||||
|
if (!empty($arrExifData)) {
|
||||||
|
$notFound = "Unavailable";
|
||||||
|
if (@array_key_exists('DateTime', $arrExifData)) {
|
||||||
|
$camDate = $arrExifData['DateTime'];
|
||||||
|
} else {
|
||||||
|
$camDate = $notFound;
|
||||||
|
}
|
||||||
|
|
||||||
|
$imageMetaData = $camDate;
|
||||||
|
$camDate = substr(str_replace(':', '-', $camDate), 0, 10);
|
||||||
|
|
||||||
|
$arrGPS = $arrExifData['GPS'] ?? null;
|
||||||
|
|
||||||
|
if (empty($arrGPS)) { // GPS 섹션이 없으면, 개별 키로도 체크
|
||||||
|
if (!empty($arrExifData['GPSLongitude']) && !empty($arrExifData['GPSLatitude'])) {
|
||||||
|
$arrGPS = [
|
||||||
|
'GPSLongitude' => $arrExifData['GPSLongitude'],
|
||||||
|
'GPSLatitude' => $arrExifData['GPSLatitude'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
!empty($arrGPS)
|
||||||
|
&& !empty($arrGPS['GPSLongitude'])
|
||||||
|
&& !empty($arrGPS['GPSLatitude'])
|
||||||
|
&& is_array($arrGPS['GPSLongitude'])
|
||||||
|
&& is_array($arrGPS['GPSLatitude'])
|
||||||
|
) { //GPS 정보가 있다면
|
||||||
|
if (@array_key_exists('GPSLongitude', $arrGPS) && (@array_key_exists('GPSLatitude', $arrGPS))) {
|
||||||
|
list($temp_d1, $temp_d2) = sscanf($arrGPS["GPSLatitude"][0], "%d/%d"); //문자->숫자로 계산
|
||||||
|
$gps_lat_d = $temp_d1 / $temp_d2;
|
||||||
|
list($temp_d1, $temp_d2) = sscanf($arrGPS["GPSLatitude"][1], "%d/%d");
|
||||||
|
$gps_lat_m = $temp_d1 / $temp_d2;
|
||||||
|
list($temp_d1, $temp_d2) = sscanf($arrGPS["GPSLatitude"][2], "%d/%d");
|
||||||
|
$gps_lat_s = $temp_d1 / $temp_d2;
|
||||||
|
|
||||||
|
list($temp_d1, $temp_d2) = sscanf($arrGPS["GPSLongitude"][0], "%d/%d"); //문자->숫자로 계산
|
||||||
|
$gps_lon_d = $temp_d1 / $temp_d2;
|
||||||
|
list($temp_d1, $temp_d2) = sscanf($arrGPS["GPSLongitude"][1], "%d/%d");
|
||||||
|
$gps_lon_m = $temp_d1 / $temp_d2;
|
||||||
|
list($temp_d1, $temp_d2) = sscanf($arrGPS["GPSLongitude"][2], "%d/%d");
|
||||||
|
$gps_lon_s = $temp_d1 / $temp_d2;
|
||||||
|
|
||||||
|
$gps_lat = $gps_lat_d + $gps_lat_m / 60 + $gps_lat_s / 3600; //도분초를 도로 변환
|
||||||
|
$gps_lon = $gps_lon_d + $gps_lon_m / 60 + $gps_lon_s / 3600;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$base = $uploadFile['base_name']; // xxxx
|
||||||
|
$dir = rtrim(dirname($uploadFile['object_key']), '/'); // upload/apt_file/2
|
||||||
|
$thumbKey = $dir . '/' . $base . '_thumb.jpg';
|
||||||
|
|
||||||
|
$imageDataBlob = file_get_contents($object_storage_url);
|
||||||
|
$im = new \Imagick();
|
||||||
|
$im->readImageBlob($imageDataBlob);
|
||||||
|
$im->thumbnailImage(105, 80, false);
|
||||||
|
$thumb_im = $im->getImageBlob();
|
||||||
|
// 썸네일 s3 전송
|
||||||
|
$lib->upload_object_storage_imagick2($thumbKey, $thumb_im);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 파일업로드 내용 저장
|
||||||
|
* rcpt_no, pho_lati, pho_long, filenm, filenm_up, file_path, thumb_path, thumb_nm, cloud_upload_yn
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
$uploadParam = [
|
||||||
|
'rcpt_no' => $rcpt_no, // 접수번호
|
||||||
|
'gps_lat' => $gps_lat, // latitude
|
||||||
|
'gps_lon' => $gps_lon, // longitude
|
||||||
|
'origin_name' => $uploadFile['origin_name'], // 원본파일명
|
||||||
|
'file_name' => $uploadFile['file_name'], // 저장파일명
|
||||||
|
'file_ext' => '.' . $uploadFile['ext'], // 파일확장자
|
||||||
|
'upload_path' => $uploadPath, // 저장경로
|
||||||
|
'thumb_name' => $base . '_thumb.jpg',
|
||||||
|
'cam_date' => $camDate, // 촬영일
|
||||||
|
];
|
||||||
|
|
||||||
|
// INSERT INTO apt_ground_photo
|
||||||
|
$res = $this->model->saveImg($uploadParam);
|
||||||
|
log_message('debug', 'apt_ground_file :: rcpt_no : ' . $rcpt_no . ', fileName : ' . $uploadFile['file_name']);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->response->setJSON([
|
||||||
|
'code' => '0',
|
||||||
|
'msg' => 'success'
|
||||||
|
]);
|
||||||
|
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
return $this->response->setJSON([
|
||||||
|
'code' => '9',
|
||||||
|
'msg' => $e->getMessage(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -203,6 +203,19 @@ class AptModel extends Model
|
|||||||
$sql .= "AND a.dong_cnt <= {$data['dong_cnt2']} ";
|
$sql .= "AND a.dong_cnt <= {$data['dong_cnt2']} ";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 담당자
|
||||||
|
if (!empty($data['damdang'])) {
|
||||||
|
$sql .= "AND a.charger = '{$data['damdang']}' ";
|
||||||
|
} else {
|
||||||
|
if (!empty($data['team'])) {
|
||||||
|
$sql .= "AND a.dept_sq IN (SELECT h.dept_sq FROM departments i INNER JOIN departments h ON h.lft >= i.lft AND h.lft <= i.rgt WHERE i.dept_sq = '{$data['team']}') ";
|
||||||
|
} else {
|
||||||
|
if (!empty($data['bonbu'])) {
|
||||||
|
$sql .= "AND a.dept_sq IN (SELECT h.dept_sq FROM departments i INNER JOIN departments h ON h.lft >= i.lft AND h.lft <= i.rgt WHERE i.dept_sq = '{$data['bonbu']}') ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 진행상태
|
// 진행상태
|
||||||
if (!empty($data['stat']) && is_array($data['stat'])) {
|
if (!empty($data['stat']) && is_array($data['stat'])) {
|
||||||
$statList = "'" . implode("','", $data['stat']) . "'";
|
$statList = "'" . implode("','", $data['stat']) . "'";
|
||||||
@@ -296,6 +309,19 @@ class AptModel extends Model
|
|||||||
$sql .= "AND a.dong_cnt <= {$data['dong_cnt2']} ";
|
$sql .= "AND a.dong_cnt <= {$data['dong_cnt2']} ";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 담당자
|
||||||
|
if (!empty($data['damdang'])) {
|
||||||
|
$sql .= "AND a.charger = '{$data['damdang']}' ";
|
||||||
|
} else {
|
||||||
|
if (!empty($data['team'])) {
|
||||||
|
$sql .= "AND a.dept_sq IN (SELECT h.dept_sq FROM departments i INNER JOIN departments h ON h.lft >= i.lft AND h.lft <= i.rgt WHERE i.dept_sq = '{$data['team']}') ";
|
||||||
|
} else {
|
||||||
|
if (!empty($data['bonbu'])) {
|
||||||
|
$sql .= "AND a.dept_sq IN (SELECT h.dept_sq FROM departments i INNER JOIN departments h ON h.lft >= i.lft AND h.lft <= i.rgt WHERE i.dept_sq = '{$data['bonbu']}') ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 진행상태
|
// 진행상태
|
||||||
if (!empty($data['stat']) && is_array($data['stat'])) {
|
if (!empty($data['stat']) && is_array($data['stat'])) {
|
||||||
$statList = "'" . implode("','", $data['stat']) . "'";
|
$statList = "'" . implode("','", $data['stat']) . "'";
|
||||||
@@ -391,6 +417,19 @@ class AptModel extends Model
|
|||||||
$sql .= "AND a.dong_cnt <= {$data['dong_cnt2']} ";
|
$sql .= "AND a.dong_cnt <= {$data['dong_cnt2']} ";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 담당자
|
||||||
|
if (!empty($data['damdang'])) {
|
||||||
|
$sql .= "AND a.charger = '{$data['damdang']}' ";
|
||||||
|
} else {
|
||||||
|
if (!empty($data['team'])) {
|
||||||
|
$sql .= "AND a.dept_sq IN (SELECT h.dept_sq FROM departments i INNER JOIN departments h ON h.lft >= i.lft AND h.lft <= i.rgt WHERE i.dept_sq = '{$data['team']}') ";
|
||||||
|
} else {
|
||||||
|
if (!empty($data['bonbu'])) {
|
||||||
|
$sql .= "AND a.dept_sq IN (SELECT h.dept_sq FROM departments i INNER JOIN departments h ON h.lft >= i.lft AND h.lft <= i.rgt WHERE i.dept_sq = '{$data['bonbu']}') ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 진행상태
|
// 진행상태
|
||||||
if (!empty($data['stat']) && is_array($data['stat'])) {
|
if (!empty($data['stat']) && is_array($data['stat'])) {
|
||||||
$statList = "'" . implode("','", $data['stat']) . "'";
|
$statList = "'" . implode("','", $data['stat']) . "'";
|
||||||
@@ -491,6 +530,19 @@ class AptModel extends Model
|
|||||||
$sql .= "AND a.dong_cnt <= {$data['dong_cnt2']} ";
|
$sql .= "AND a.dong_cnt <= {$data['dong_cnt2']} ";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 담당자
|
||||||
|
if (!empty($data['damdang'])) {
|
||||||
|
$sql .= "AND a.charger = '{$data['damdang']}' ";
|
||||||
|
} else {
|
||||||
|
if (!empty($data['team'])) {
|
||||||
|
$sql .= "AND a.dept_sq IN (SELECT h.dept_sq FROM departments i INNER JOIN departments h ON h.lft >= i.lft AND h.lft <= i.rgt WHERE i.dept_sq = '{$data['team']}') ";
|
||||||
|
} else {
|
||||||
|
if (!empty($data['bonbu'])) {
|
||||||
|
$sql .= "AND a.dept_sq IN (SELECT h.dept_sq FROM departments i INNER JOIN departments h ON h.lft >= i.lft AND h.lft <= i.rgt WHERE i.dept_sq = '{$data['bonbu']}') ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 진행상태
|
// 진행상태
|
||||||
if (!empty($data['stat']) && is_array($data['stat'])) {
|
if (!empty($data['stat']) && is_array($data['stat'])) {
|
||||||
$statList = "'" . implode("','", $data['stat']) . "'";
|
$statList = "'" . implode("','", $data['stat']) . "'";
|
||||||
@@ -729,6 +781,19 @@ class AptModel extends Model
|
|||||||
$sql .= "AND a.dong_cnt <= {$data['dong_cnt2']} ";
|
$sql .= "AND a.dong_cnt <= {$data['dong_cnt2']} ";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 담당자
|
||||||
|
if (!empty($data['damdang'])) {
|
||||||
|
$sql .= "AND a.charger = '{$data['damdang']}' ";
|
||||||
|
} else {
|
||||||
|
if (!empty($data['team'])) {
|
||||||
|
$sql .= "AND a.dept_sq IN (SELECT h.dept_sq FROM departments i INNER JOIN departments h ON h.lft >= i.lft AND h.lft <= i.rgt WHERE i.dept_sq = '{$data['team']}') ";
|
||||||
|
} else {
|
||||||
|
if (!empty($data['bonbu'])) {
|
||||||
|
$sql .= "AND a.dept_sq IN (SELECT h.dept_sq FROM departments i INNER JOIN departments h ON h.lft >= i.lft AND h.lft <= i.rgt WHERE i.dept_sq = '{$data['bonbu']}') ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 진행상태
|
// 진행상태
|
||||||
if (!empty($data['stat']) && is_array($data['stat'])) {
|
if (!empty($data['stat']) && is_array($data['stat'])) {
|
||||||
$statList = "'" . implode("','", $data['stat']) . "'";
|
$statList = "'" . implode("','", $data['stat']) . "'";
|
||||||
|
|||||||
651
app/Models/article/GroundModel.php
Normal file
651
app/Models/article/GroundModel.php
Normal file
@@ -0,0 +1,651 @@
|
|||||||
|
<?php
|
||||||
|
namespace App\Models\article;
|
||||||
|
|
||||||
|
use CodeIgniter\Model;
|
||||||
|
|
||||||
|
class GroundModel extends Model
|
||||||
|
{
|
||||||
|
// 지역 목록 조회
|
||||||
|
public function getAreaList($sido = '', $gugun = '')
|
||||||
|
{
|
||||||
|
|
||||||
|
if (!empty($gugun)) {
|
||||||
|
$gugun = substr($gugun, '0', '5');
|
||||||
|
|
||||||
|
$sql = "SELECT a.region_cd, TRIM(REPLACE(a.region_nm, b.region_nm, '')) region_nm" .
|
||||||
|
" FROM region_codes a" .
|
||||||
|
" LEFT JOIN region_codes b ON b.region_cd = CONCAT(SUBSTR(a.region_cd,1,5),'00000')" .
|
||||||
|
" WHERE a.region_cd LIKE concat(?, '%')" .
|
||||||
|
" AND a.region_cd NOT LIKE '%00000'" .
|
||||||
|
" AND a.region_cd LIKE '%00'" .
|
||||||
|
" AND a.use_yn = 'Y'" .
|
||||||
|
" ORDER BY a.region_nm ASC";
|
||||||
|
|
||||||
|
$query = $this->db->query($sql, [$gugun]);
|
||||||
|
|
||||||
|
} else if (!empty($sido)) {
|
||||||
|
$chk_sido = substr($sido, '0', '2');
|
||||||
|
|
||||||
|
if ($chk_sido === '36') {
|
||||||
|
$sido = substr($sido, '0', '4');
|
||||||
|
$sql = "SELECT a.region_cd, TRIM(REPLACE(a.region_nm, b.region_nm, '')) region_nm " .
|
||||||
|
"FROM region_codes a " .
|
||||||
|
"LEFT JOIN region_codes b ON b.region_cd = CONCAT(SUBSTR(a.region_cd,1,4),'000000') " .
|
||||||
|
"WHERE a.region_cd LIKE concat(?, '%') " .
|
||||||
|
"AND a.region_cd NOT LIKE '%000000' " .
|
||||||
|
"AND a.region_cd LIKE '%00' " .
|
||||||
|
"AND a.use_yn = 'Y' " .
|
||||||
|
"AND EXISTS (SELECT 'x' FROM region_codes c WHERE c.region_cd LIKE CONCAT(SUBSTR(a.region_cd,1,5),'%') AND c.region_cd > CONCAT(SUBSTR(a.region_cd,1,5),'00000')) " .
|
||||||
|
"ORDER BY a.region_nm ASC";
|
||||||
|
} else {
|
||||||
|
$sido = substr($sido, '0', '2');
|
||||||
|
$sql = "SELECT a.region_cd, TRIM(REPLACE(a.region_nm, b.region_nm, '')) region_nm" .
|
||||||
|
" FROM region_codes a" .
|
||||||
|
" LEFT JOIN region_codes b ON b.region_cd = CONCAT(SUBSTR(a.region_cd,1,2),'00000000')" .
|
||||||
|
" WHERE a.region_cd LIKE concat(?, '%')" .
|
||||||
|
" AND a.region_cd NOT LIKE '%00000000'" .
|
||||||
|
" AND a.region_cd LIKE '%00000'" .
|
||||||
|
" AND a.use_yn = 'Y'" .
|
||||||
|
" AND EXISTS (SELECT 'x' FROM region_codes c WHERE c.region_cd LIKE CONCAT(SUBSTR(a.region_cd,1,5),'%') AND c.region_cd > CONCAT(SUBSTR(a.region_cd,1,5),'00000'))" .
|
||||||
|
" ORDER BY a.region_nm ASC";
|
||||||
|
}
|
||||||
|
|
||||||
|
$query = $this->db->query($sql, [$sido]);
|
||||||
|
} else {
|
||||||
|
$sql = "SELECT a.region_cd, a.region_nm " .
|
||||||
|
"FROM region_codes a " .
|
||||||
|
"WHERE (a.region_cd LIKE '%00000000' " .
|
||||||
|
"AND a.use_yn = 'Y') " .
|
||||||
|
"OR region_cd = 3611000000;";
|
||||||
|
|
||||||
|
$query = $this->db->query($sql);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return $query->getResultArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 소속본부조회
|
||||||
|
public function getBonbuList()
|
||||||
|
{
|
||||||
|
$sql = "SELECT dept_sq, pdept_sq, dept_nm, dept_desc, dept_head, use_yn, depth, insert_tm, insert_usr, update_tm, update_usr, lft, rgt" .
|
||||||
|
" FROM departments" .
|
||||||
|
" WHERE depth = 1" .
|
||||||
|
" AND use_yn = 'Y'" .
|
||||||
|
" ORDER BY lft";
|
||||||
|
|
||||||
|
$query = $this->db->query($sql);
|
||||||
|
|
||||||
|
|
||||||
|
return $query->getResultArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 소속팀 조회
|
||||||
|
public function getTeamList()
|
||||||
|
{
|
||||||
|
$sql = "SELECT dept_sq, pdept_sq, dept_nm" .
|
||||||
|
" FROM departments" .
|
||||||
|
" WHERE depth = 2" .
|
||||||
|
" AND use_yn = 'Y'" .
|
||||||
|
" ORDER BY dept_nm";
|
||||||
|
|
||||||
|
$query = $this->db->query($sql);
|
||||||
|
|
||||||
|
|
||||||
|
return $query->getResultArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 유저 조회
|
||||||
|
public function getUserList()
|
||||||
|
{
|
||||||
|
$sql = "SELECT
|
||||||
|
a.usr_sq, a.usr_id, a.usr_nm, a.dept_sq
|
||||||
|
FROM users a
|
||||||
|
WHERE
|
||||||
|
a.usr_level IN ('3','4','40','5','50','6','60','61','62','7','8','70')
|
||||||
|
AND a.use_yn = 'Y'
|
||||||
|
AND EXISTS (
|
||||||
|
SELECT 'x' FROM departments a1 INNER JOIN departments a2 ON a2.lft BETWEEN a1.lft AND a1.rgt AND a2.use_yn = 'Y'
|
||||||
|
WHERE 1=1 AND a2.dept_sq = a.dept_sq AND a1.use_yn = 'Y'
|
||||||
|
)
|
||||||
|
ORDER BY a.usr_level DESC, a.usr_nm ASC ";
|
||||||
|
|
||||||
|
$query = $this->db->query($sql);
|
||||||
|
|
||||||
|
return $query->getResultArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTotalCount($data)
|
||||||
|
{
|
||||||
|
$sql = "SELECT COUNT(*) AS cnt
|
||||||
|
FROM apt_ground AS a
|
||||||
|
LEFT JOIN apt_ground_photo AS gp ON gp.pho_no = (SELECT p.pho_no
|
||||||
|
FROM apt_ground_photo p
|
||||||
|
WHERE p.rcpt_no = a.rcpt_no
|
||||||
|
ORDER BY p.pho_no DESC
|
||||||
|
LIMIT 1)
|
||||||
|
LEFT JOIN users b ON a.charger = b.usr_id
|
||||||
|
LEFT JOIN region_codes e ON a.region_cd = e.region_cd
|
||||||
|
LEFT JOIN departments i ON a.dept_sq = i.dept_sq
|
||||||
|
LEFT JOIN codes f ON a.write_complete_yn = f.cd AND f.category = 'PHO_YN'
|
||||||
|
LEFT JOIN codes h ON a.vdo_up_ynx = h.cd AND h.category = 'VDO_YN'
|
||||||
|
LEFT JOIN codes g ON a.apt_step = g.cd AND g.category = 'APT_STEP'
|
||||||
|
LEFT JOIN apt_history j ON a.rcpt_no = j.rcpt_no AND j.changed_detail = 'C2' AND NOT EXISTS (SELECT 'x' FROM apt_history WHERE changed_detail LIKE 'A%' AND rcpt_no = j.rcpt_no) ";
|
||||||
|
|
||||||
|
$sql .= "WHERE 1=1 ";
|
||||||
|
|
||||||
|
if (!empty($data['hscp_no'])) {
|
||||||
|
$sql .= "AND a.hscp_no LIKE CONCAT('%', '{$data['hscp_no']}', '%') ";
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if (!empty($data['hscp_no'])) {
|
||||||
|
$sql .= "AND a.part_no LIKE CONCAT('%', '{$data['part_no']}', '%') ";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($data['rcpt_hscp_nm'])) {
|
||||||
|
$sql .= "AND a.rcpt_hscp_nm LIKE CONCAT('%', '{$data['rcpt_hscp_nm']}', '%') ";
|
||||||
|
}
|
||||||
|
|
||||||
|
// 법정동코드로 지역구분
|
||||||
|
if (!empty($data['srcDong'])) {
|
||||||
|
$sql .= "AND a.region_cd = '{$data['srcDong']}' ";
|
||||||
|
} else {
|
||||||
|
if (!empty($data['srcGugun'])) {
|
||||||
|
$str_gugun = substr($data['srcGugun'], '0', '2');
|
||||||
|
if ($str_gugun == '36') { //세종시는 군구가 없고 바로 동이라서 예외
|
||||||
|
$sql .= "AND a.region_cd = '{$data['srcGugun']}' ";
|
||||||
|
} else {
|
||||||
|
$gugunPrefix = substr($data['srcGugun'], '0', '5');
|
||||||
|
$sql .= "AND a.region_cd LIKE '{$gugunPrefix}%' ";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!empty($data['srcSido'])) {
|
||||||
|
$sidoPrefix = substr($data['srcSido'], '0', '2');
|
||||||
|
$sql .= "AND a.region_cd LIKE '{$sidoPrefix}%' ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//촬영일자 == 단지정보작성완료 일자
|
||||||
|
if (!empty($data['sdate'])) {
|
||||||
|
$sql .= "AND b.write_complete_tm >= '{$data['sdate']} 00:00:00' ";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($data['edate'])) {
|
||||||
|
$sql .= "AND b.write_complete_tm <= '{$data['edate']} 00:00:00' ";
|
||||||
|
}
|
||||||
|
|
||||||
|
// 담당자
|
||||||
|
if (!empty($data['damdang'])) {
|
||||||
|
$sql .= "AND a.charger = '{$data['damdang']}' ";
|
||||||
|
} else {
|
||||||
|
if (!empty($data['team'])) {
|
||||||
|
$sql .= "AND a.dept_sq IN (SELECT h.dept_sq FROM departments i INNER JOIN departments h ON h.lft >= i.lft AND h.lft <= i.rgt WHERE i.dept_sq = '{$data['team']}') ";
|
||||||
|
} else {
|
||||||
|
if (!empty($data['bonbu'])) {
|
||||||
|
$sql .= "AND a.dept_sq IN (SELECT h.dept_sq FROM departments i INNER JOIN departments h ON h.lft >= i.lft AND h.lft <= i.rgt WHERE i.dept_sq = '{$data['bonbu']}') ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 진행상태
|
||||||
|
if (!empty($data['stat']) && is_array($data['stat'])) {
|
||||||
|
$statList = "'" . implode("','", $data['stat']) . "'";
|
||||||
|
$sql .= " AND a.apt_step IN ({$statList}) ";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$query = $this->db->query($sql);
|
||||||
|
|
||||||
|
|
||||||
|
return $query->getRow()->cnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAptLists($start, $end, $data)
|
||||||
|
{
|
||||||
|
$sql = "SELECT
|
||||||
|
a.rcpt_no, a.hscp_no, a.part_no, a.addr, a.addr2, a.rcpt_hscp_nm, a.pyeong_cnt, a.households_cnt, a.dong_cnt, a.rcpt_hscp_nm,
|
||||||
|
a.apt_cate_nm, a.rcpt_x, a.rcpt_y,
|
||||||
|
a.charger, a.memo, a.write_complete_yn, a.gpho_up_yn, a.vdo_up_ynx, a.apt_step, a.video_target, a.all_no_pho, a.send_end_tm,
|
||||||
|
a.dept_sq, a.vdo_up_tm, a.not_vdo_tm, a.check_tm, a.write_complete_tm,
|
||||||
|
b.usr_nm, i.dept_nm, j.changed_tm, gp.pho_no, gp.filenm, gp.filenm_up, gp.file_path, gp.file_ext, gp.cloud_upload_yn, gp.insert_tm
|
||||||
|
FROM
|
||||||
|
apt_ground AS a
|
||||||
|
LEFT JOIN apt_ground_photo AS gp ON gp.pho_no = (SELECT p.pho_no
|
||||||
|
FROM apt_ground_photo p
|
||||||
|
WHERE p.rcpt_no = a.rcpt_no
|
||||||
|
ORDER BY p.pho_no DESC
|
||||||
|
LIMIT 1)
|
||||||
|
LEFT JOIN users b ON a.charger = b.usr_id
|
||||||
|
LEFT JOIN region_codes e ON a.region_cd = e.region_cd
|
||||||
|
LEFT JOIN departments i ON a.dept_sq = i.dept_sq
|
||||||
|
LEFT JOIN codes f ON a.write_complete_yn = f.cd AND f.category = 'PHO_YN'
|
||||||
|
LEFT JOIN codes h ON a.vdo_up_ynx = h.cd AND h.category = 'VDO_YN'
|
||||||
|
LEFT JOIN codes g ON a.apt_step = g.cd AND g.category = 'APT_STEP'
|
||||||
|
LEFT JOIN apt_history j ON a.rcpt_no = j.rcpt_no AND j.changed_detail = 'C2' AND NOT EXISTS (SELECT 'x' FROM apt_history WHERE changed_detail LIKE 'A%' AND rcpt_no = j.rcpt_no) ";
|
||||||
|
|
||||||
|
$sql .= "WHERE 1=1 ";
|
||||||
|
|
||||||
|
if (!empty($data['hscp_no'])) {
|
||||||
|
$sql .= "AND a.hscp_no LIKE CONCAT('%', '{$data['hscp_no']}', '%') ";
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if (!empty($data['hscp_no'])) {
|
||||||
|
$sql .= "AND a.part_no LIKE CONCAT('%', '{$data['part_no']}', '%') ";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($data['rcpt_hscp_nm'])) {
|
||||||
|
$sql .= "AND a.rcpt_hscp_nm LIKE CONCAT('%', '{$data['rcpt_hscp_nm']}', '%') ";
|
||||||
|
}
|
||||||
|
|
||||||
|
// 법정동코드로 지역구분
|
||||||
|
if (!empty($data['srcDong'])) {
|
||||||
|
$sql .= "AND a.region_cd = '{$data['srcDong']}' ";
|
||||||
|
} else {
|
||||||
|
if (!empty($data['srcGugun'])) {
|
||||||
|
$str_gugun = substr($data['srcGugun'], '0', '2');
|
||||||
|
if ($str_gugun == '36') { //세종시는 군구가 없고 바로 동이라서 예외
|
||||||
|
$sql .= "AND a.region_cd = '{$data['srcGugun']}' ";
|
||||||
|
} else {
|
||||||
|
$gugunPrefix = substr($data['srcGugun'], '0', '5');
|
||||||
|
$sql .= "AND a.region_cd LIKE '{$gugunPrefix}%' ";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!empty($data['srcSido'])) {
|
||||||
|
$sidoPrefix = substr($data['srcSido'], '0', '2');
|
||||||
|
$sql .= "AND a.region_cd LIKE '{$sidoPrefix}%' ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//촬영일자 == 단지정보작성완료 일자
|
||||||
|
if (!empty($data['sdate'])) {
|
||||||
|
$sql .= "AND b.write_complete_tm >= '{$data['sdate']} 00:00:00' ";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($data['edate'])) {
|
||||||
|
$sql .= "AND b.write_complete_tm <= '{$data['edate']} 00:00:00' ";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($data['damdang'])) {
|
||||||
|
$sql .= "AND a.charger = '{$data['damdang']}' ";
|
||||||
|
} else {
|
||||||
|
if (!empty($data['team'])) {
|
||||||
|
$sql .= "AND a.dept_sq IN (SELECT h.dept_sq FROM departments i INNER JOIN departments h ON h.lft >= i.lft AND h.lft <= i.rgt WHERE i.dept_sq = '{$data['team']}') ";
|
||||||
|
} else {
|
||||||
|
if (!empty($data['bonbu'])) {
|
||||||
|
$sql .= "AND a.dept_sq IN (SELECT h.dept_sq FROM departments i INNER JOIN departments h ON h.lft >= i.lft AND h.lft <= i.rgt WHERE i.dept_sq = '{$data['bonbu']}') ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 진행상태
|
||||||
|
if (!empty($data['stat']) && is_array($data['stat'])) {
|
||||||
|
$statList = "'" . implode("','", $data['stat']) . "'";
|
||||||
|
$sql .= " AND a.apt_step IN ({$statList}) ";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$sql .= "LIMIT {$start}, {$end}";
|
||||||
|
|
||||||
|
$query = $this->db->query($sql);
|
||||||
|
|
||||||
|
return $query->getResultArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 조직별 통계
|
||||||
|
public function getDeptStatistics($data)
|
||||||
|
{
|
||||||
|
$sql = "SELECT
|
||||||
|
a.dept_sq, IFNULL(f.dept_nm, '') AS bonbu_nm, IFNULL(i.dept_nm, '미지정') AS team_nm, COUNT(a.dept_sq) as cnt
|
||||||
|
FROM
|
||||||
|
apt_ground a
|
||||||
|
LEFT JOIN apt_ground_photo AS gp ON gp.pho_no = (SELECT p.pho_no
|
||||||
|
FROM apt_ground_photo p
|
||||||
|
WHERE p.rcpt_no = a.rcpt_no
|
||||||
|
ORDER BY p.pho_no DESC
|
||||||
|
LIMIT 1)
|
||||||
|
LEFT JOIN users c ON a.charger = c.usr_id
|
||||||
|
LEFT JOIN region_codes e ON a.region_cd = e.region_cd
|
||||||
|
LEFT JOIN departments i ON a.dept_sq = i.dept_sq
|
||||||
|
LEFT JOIN departments f ON i.dept_sq = f.dept_sq ";
|
||||||
|
|
||||||
|
$sql .= "WHERE 1=1 ";
|
||||||
|
|
||||||
|
if (!empty($data['hscp_no'])) {
|
||||||
|
$sql .= "AND a.hscp_no LIKE CONCAT('%', '{$data['hscp_no']}', '%') ";
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if (!empty($data['hscp_no'])) {
|
||||||
|
$sql .= "AND a.part_no LIKE CONCAT('%', '{$data['part_no']}', '%') ";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($data['rcpt_hscp_nm'])) {
|
||||||
|
$sql .= "AND a.rcpt_hscp_nm LIKE CONCAT('%', '{$data['rcpt_hscp_nm']}', '%') ";
|
||||||
|
}
|
||||||
|
|
||||||
|
// 법정동코드로 지역구분
|
||||||
|
if (!empty($data['srcDong'])) {
|
||||||
|
$sql .= "AND a.region_cd = '{$data['srcDong']}' ";
|
||||||
|
} else {
|
||||||
|
if (!empty($data['srcGugun'])) {
|
||||||
|
$str_gugun = substr($data['srcGugun'], '0', '2');
|
||||||
|
if ($str_gugun == '36') { //세종시는 군구가 없고 바로 동이라서 예외
|
||||||
|
$sql .= "AND a.region_cd = '{$data['srcGugun']}' ";
|
||||||
|
} else {
|
||||||
|
$gugunPrefix = substr($data['srcGugun'], '0', '5');
|
||||||
|
$sql .= "AND a.region_cd LIKE '{$gugunPrefix}%' ";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!empty($data['srcSido'])) {
|
||||||
|
$sidoPrefix = substr($data['srcSido'], '0', '2');
|
||||||
|
$sql .= "AND a.region_cd LIKE '{$sidoPrefix}%' ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//촬영일자 == 단지정보작성완료 일자
|
||||||
|
if (!empty($data['sdate'])) {
|
||||||
|
$sql .= "AND b.write_complete_tm >= '{$data['sdate']} 00:00:00' ";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($data['edate'])) {
|
||||||
|
$sql .= "AND b.write_complete_tm <= '{$data['edate']} 00:00:00' ";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($data['damdang'])) {
|
||||||
|
$sql .= "AND a.charger = '{$data['damdang']}' ";
|
||||||
|
} else {
|
||||||
|
if (!empty($data['team'])) {
|
||||||
|
$sql .= "AND a.dept_sq IN (SELECT h.dept_sq FROM departments i INNER JOIN departments h ON h.lft >= i.lft AND h.lft <= i.rgt WHERE i.dept_sq = '{$data['team']}') ";
|
||||||
|
} else {
|
||||||
|
if (!empty($data['bonbu'])) {
|
||||||
|
$sql .= "AND a.dept_sq IN (SELECT h.dept_sq FROM departments i INNER JOIN departments h ON h.lft >= i.lft AND h.lft <= i.rgt WHERE i.dept_sq = '{$data['bonbu']}') ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 진행상태
|
||||||
|
if (!empty($data['stat']) && is_array($data['stat'])) {
|
||||||
|
$statList = "'" . implode("','", $data['stat']) . "'";
|
||||||
|
$sql .= " AND a.apt_step IN ({$statList}) ";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql .= "GROUP BY a.dept_sq ORDER BY bonbu_nm ASC, team_nm ASC ";
|
||||||
|
|
||||||
|
$query = $this->db->query($sql);
|
||||||
|
|
||||||
|
return $query->getResultArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 지역별 통계
|
||||||
|
public function getStatistics($data)
|
||||||
|
{
|
||||||
|
$sql = "SELECT
|
||||||
|
a.addr AS addr, COUNT(a.addr) AS cnt
|
||||||
|
FROM
|
||||||
|
apt_ground a
|
||||||
|
LEFT JOIN apt_ground_photo gp ON a.rcpt_no = gp.rcpt_no
|
||||||
|
LEFT JOIN users c ON a.charger = c.usr_id
|
||||||
|
LEFT JOIN region_codes e ON a.region_cd = e.region_cd
|
||||||
|
LEFT JOIN departments i ON a.dept_sq = i.dept_sq ";
|
||||||
|
|
||||||
|
$sql .= "WHERE 1=1 ";
|
||||||
|
|
||||||
|
if (!empty($data['hscp_no'])) {
|
||||||
|
$sql .= "AND a.hscp_no LIKE CONCAT('%', '{$data['hscp_no']}', '%') ";
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if (!empty($data['hscp_no'])) {
|
||||||
|
$sql .= "AND a.part_no LIKE CONCAT('%', '{$data['part_no']}', '%') ";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($data['rcpt_hscp_nm'])) {
|
||||||
|
$sql .= "AND a.rcpt_hscp_nm LIKE CONCAT('%', '{$data['rcpt_hscp_nm']}', '%') ";
|
||||||
|
}
|
||||||
|
|
||||||
|
// 법정동코드로 지역구분
|
||||||
|
if (!empty($data['srcDong'])) {
|
||||||
|
$sql .= "AND a.region_cd = '{$data['srcDong']}' ";
|
||||||
|
} else {
|
||||||
|
if (!empty($data['srcGugun'])) {
|
||||||
|
$str_gugun = substr($data['srcGugun'], '0', '2');
|
||||||
|
if ($str_gugun == '36') { //세종시는 군구가 없고 바로 동이라서 예외
|
||||||
|
$sql .= "AND a.region_cd = '{$data['srcGugun']}' ";
|
||||||
|
} else {
|
||||||
|
$gugunPrefix = substr($data['srcGugun'], '0', '5');
|
||||||
|
$sql .= "AND a.region_cd LIKE '{$gugunPrefix}%' ";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!empty($data['srcSido'])) {
|
||||||
|
$sidoPrefix = substr($data['srcSido'], '0', '2');
|
||||||
|
$sql .= "AND a.region_cd LIKE '{$sidoPrefix}%' ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//촬영일자 == 단지정보작성완료 일자
|
||||||
|
if (!empty($data['sdate'])) {
|
||||||
|
$sql .= "AND b.write_complete_tm >= '{$data['sdate']} 00:00:00' ";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($data['edate'])) {
|
||||||
|
$sql .= "AND b.write_complete_tm <= '{$data['edate']} 00:00:00' ";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($data['damdang'])) {
|
||||||
|
$sql .= "AND a.charger = '{$data['damdang']}' ";
|
||||||
|
} else {
|
||||||
|
if (!empty($data['team'])) {
|
||||||
|
$sql .= "AND a.dept_sq IN (SELECT h.dept_sq FROM departments i INNER JOIN departments h ON h.lft >= i.lft AND h.lft <= i.rgt WHERE i.dept_sq = '{$data['team']}') ";
|
||||||
|
} else {
|
||||||
|
if (!empty($data['bonbu'])) {
|
||||||
|
$sql .= "AND a.dept_sq IN (SELECT h.dept_sq FROM departments i INNER JOIN departments h ON h.lft >= i.lft AND h.lft <= i.rgt WHERE i.dept_sq = '{$data['bonbu']}') ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 진행상태
|
||||||
|
if (!empty($data['stat']) && is_array($data['stat'])) {
|
||||||
|
$statList = "'" . implode("','", $data['stat']) . "'";
|
||||||
|
$sql .= " AND a.apt_step IN ({$statList}) ";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql .= "GROUP BY a.addr ORDER BY a.addr ASC ";
|
||||||
|
|
||||||
|
$query = $this->db->query($sql);
|
||||||
|
|
||||||
|
return $query->getResultArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 엑셀 다운로드
|
||||||
|
public function getExcelList($data)
|
||||||
|
{
|
||||||
|
$sql = "SELECT
|
||||||
|
a.part_no AS '구분코드',
|
||||||
|
a.hscp_no AS '단지코드',
|
||||||
|
SUBSTRING_INDEX(a.addr, ' ', 1) AS '시도',
|
||||||
|
SUBSTRING_INDEX(a.addr, ' ', 2) AS '시군구',
|
||||||
|
SUBSTRING_INDEX(a.addr, ' ', 3) AS '읍면동',
|
||||||
|
a.addr2 AS '지번',
|
||||||
|
a.rcpt_hscp_nm AS '단지명',
|
||||||
|
a.apt_cate_nm AS '단지유형',
|
||||||
|
a.pyeong_cnt AS '평형',
|
||||||
|
i.dept_nm AS '방문팀',
|
||||||
|
b.usr_nm AS '담당자',
|
||||||
|
gp.insert_tm AS '촬영일자',
|
||||||
|
a.rcpt_x AS '단지X좌표',
|
||||||
|
a.rcpt_y AS '단지Y좌표'
|
||||||
|
FROM
|
||||||
|
apt_ground AS a
|
||||||
|
LEFT JOIN apt_ground_photo AS gp ON gp.pho_no = (SELECT p.pho_no
|
||||||
|
FROM apt_ground_photo p
|
||||||
|
WHERE p.rcpt_no = a.rcpt_no
|
||||||
|
ORDER BY p.pho_no DESC
|
||||||
|
LIMIT 1)
|
||||||
|
LEFT JOIN users b ON a.charger = b.usr_id
|
||||||
|
LEFT JOIN region_codes e ON a.region_cd = e.region_cd
|
||||||
|
LEFT JOIN departments i ON a.dept_sq = i.dept_sq
|
||||||
|
LEFT JOIN codes f ON a.write_complete_yn = f.cd AND f.category = 'PHO_YN'
|
||||||
|
LEFT JOIN codes h ON a.vdo_up_ynx = h.cd AND h.category = 'VDO_YN'
|
||||||
|
LEFT JOIN codes g ON a.apt_step = g.cd AND g.category = 'APT_STEP'
|
||||||
|
LEFT JOIN apt_history j ON a.rcpt_no = j.rcpt_no AND j.changed_detail = 'C2' AND NOT EXISTS (SELECT 'x' FROM apt_history WHERE changed_detail LIKE 'A%' AND rcpt_no = j.rcpt_no) ";
|
||||||
|
|
||||||
|
$sql .= "WHERE 1=1 ";
|
||||||
|
|
||||||
|
if (!empty($data['hscp_no'])) {
|
||||||
|
$sql .= "AND a.hscp_no LIKE CONCAT('%', '{$data['hscp_no']}', '%') ";
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if (!empty($data['hscp_no'])) {
|
||||||
|
$sql .= "AND a.part_no LIKE CONCAT('%', '{$data['part_no']}', '%') ";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($data['rcpt_hscp_nm'])) {
|
||||||
|
$sql .= "AND a.rcpt_hscp_nm LIKE CONCAT('%', '{$data['rcpt_hscp_nm']}', '%') ";
|
||||||
|
}
|
||||||
|
|
||||||
|
// 법정동코드로 지역구분
|
||||||
|
if (!empty($data['srcDong'])) {
|
||||||
|
$sql .= "AND a.region_cd = '{$data['srcDong']}' ";
|
||||||
|
} else {
|
||||||
|
if (!empty($data['srcGugun'])) {
|
||||||
|
$str_gugun = substr($data['srcGugun'], '0', '2');
|
||||||
|
if ($str_gugun == '36') { //세종시는 군구가 없고 바로 동이라서 예외
|
||||||
|
$sql .= "AND a.region_cd = '{$data['srcGugun']}' ";
|
||||||
|
} else {
|
||||||
|
$gugunPrefix = substr($data['srcGugun'], '0', '5');
|
||||||
|
$sql .= "AND a.region_cd LIKE '{$gugunPrefix}%' ";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!empty($data['srcSido'])) {
|
||||||
|
$sidoPrefix = substr($data['srcSido'], '0', '2');
|
||||||
|
$sql .= "AND a.region_cd LIKE '{$sidoPrefix}%' ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//촬영일자 == 단지정보작성완료 일자
|
||||||
|
if (!empty($data['sdate'])) {
|
||||||
|
$sql .= "AND b.write_complete_tm >= '{$data['sdate']} 00:00:00' ";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($data['edate'])) {
|
||||||
|
$sql .= "AND b.write_complete_tm <= '{$data['edate']} 00:00:00' ";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($data['damdang'])) {
|
||||||
|
$sql .= "AND a.charger = '{$data['damdang']}' ";
|
||||||
|
} else {
|
||||||
|
if (!empty($data['team'])) {
|
||||||
|
$sql .= "AND a.dept_sq IN (SELECT h.dept_sq FROM departments i INNER JOIN departments h ON h.lft >= i.lft AND h.lft <= i.rgt WHERE i.dept_sq = '{$data['team']}') ";
|
||||||
|
} else {
|
||||||
|
if (!empty($data['bonbu'])) {
|
||||||
|
$sql .= "AND a.dept_sq IN (SELECT h.dept_sq FROM departments i INNER JOIN departments h ON h.lft >= i.lft AND h.lft <= i.rgt WHERE i.dept_sq = '{$data['bonbu']}') ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 진행상태
|
||||||
|
if (!empty($data['stat']) && is_array($data['stat'])) {
|
||||||
|
$statList = "'" . implode("','", $data['stat']) . "'";
|
||||||
|
$sql .= " AND a.apt_step IN ({$statList}) ";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$query = $this->db->query($sql);
|
||||||
|
|
||||||
|
return $query->getResultArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 지도 마커 조회
|
||||||
|
public function getDeptMapList($deptSq)
|
||||||
|
{
|
||||||
|
$sql = "SELECT
|
||||||
|
a.hscp_no, a.rcpt_hscp_nm, a.rcpt_no, a.dept_sq, a.rcpt_x, a.rcpt_y
|
||||||
|
, a.charger, i.dept_nm, i.pdept_sq, i.dept_desc, c.usr_nm, c.usr_id
|
||||||
|
,(SELECT pdept_sq FROM departments WHERE dept_sq = i.dept_sq) bonbu
|
||||||
|
FROM
|
||||||
|
apt_ground a
|
||||||
|
LEFT JOIN apt_ground_photo AS gp ON gp.pho_no = (SELECT p.pho_no
|
||||||
|
FROM apt_ground_photo p
|
||||||
|
WHERE p.rcpt_no = a.rcpt_no
|
||||||
|
ORDER BY p.pho_no DESC
|
||||||
|
LIMIT 1)
|
||||||
|
LEFT JOIN users c ON a.charger = c.usr_id
|
||||||
|
LEFT JOIN region_codes e ON a.region_cd = e.region_cd
|
||||||
|
LEFT JOIN departments i ON a.dept_sq = i.dept_sq
|
||||||
|
LEFT JOIN codes f ON a.write_complete_yn = f.cd AND f.category = 'PHO_YN'
|
||||||
|
LEFT JOIN codes h ON a.vdo_up_ynx = h.cd AND h.category = 'VDO_YN'
|
||||||
|
LEFT JOIN codes g ON a.apt_step = g.cd AND g.category = 'APT_STEP' ";
|
||||||
|
|
||||||
|
$sql .= "WHERE 1=1 ";
|
||||||
|
|
||||||
|
if (!empty($deptSq)) {
|
||||||
|
$datas = "'" . implode("','", $deptSq) . "'";
|
||||||
|
$sql .= " AND a.dept_sq IN ({$datas}) ";
|
||||||
|
}
|
||||||
|
|
||||||
|
$query = $this->db->query($sql);
|
||||||
|
|
||||||
|
return $query->getResultArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 아파트 담당자 정보변경
|
||||||
|
public function updateAptDamdang($params)
|
||||||
|
{
|
||||||
|
$sql = "UPDATE apt_ground SET ";
|
||||||
|
$sql .= "dept_sq = ?, charger = ? ";
|
||||||
|
$sql .= "WHERE rcpt_no = ? ";
|
||||||
|
|
||||||
|
$this->db->query($sql, $params);
|
||||||
|
|
||||||
|
|
||||||
|
if ($this->db->transStatus() === false) {
|
||||||
|
return [
|
||||||
|
'success' => false,
|
||||||
|
'msg' => '저장실패',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 성공
|
||||||
|
return [
|
||||||
|
'success' => true,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 평면도 정보 저장
|
||||||
|
public function saveImg($data)
|
||||||
|
{
|
||||||
|
$sql = "INSERT INTO apt_ground_photo
|
||||||
|
(rcpt_no, filenm, filenm_up, file_ext, insert_tm, file_path, thumb_path, thumb_nm, use_yn, cloud_upload_yn)
|
||||||
|
VALUES
|
||||||
|
({$data['rcpt_no']}, '{$data['origin_name']}', '{$data['file_name']}', '{$data['file_ext']}', NOW(), '{$data['upload_path']}', '{$data['upload_path']}'
|
||||||
|
, '{$data['thumb_name']}', 'Y', 'Y')
|
||||||
|
";
|
||||||
|
|
||||||
|
|
||||||
|
if ($this->db->query($sql) === false) {
|
||||||
|
return [
|
||||||
|
'success' => false,
|
||||||
|
'msg' => '저장실패',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'success' => true,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -191,37 +191,16 @@
|
|||||||
onclick="progressStatAll(this, this.checked);">
|
onclick="progressStatAll(this, this.checked);">
|
||||||
<label class="form-check-label" for="progress_stat_all">전체</label>
|
<label class="form-check-label" for="progress_stat_all">전체</label>
|
||||||
</div>
|
</div>
|
||||||
|
<?php foreach ($codes as $code): ?>
|
||||||
<div class="form-check">
|
<?php if ($code['category'] === "APT_STEP"): ?>
|
||||||
<input class="form-check-input" type="checkbox" name="stat[]"
|
<div class="form-check">
|
||||||
id="stat_S01" value="S01">
|
<input class="form-check-input" type="checkbox" name="stat[]"
|
||||||
<label class="form-check-label" for="stat_S01">미촬영</label>
|
id="stat_<?= $code['cd'] ?>" value="<?= $code['cd'] ?>">
|
||||||
</div>
|
<label class="form-check-label"
|
||||||
<div class="form-check">
|
for="stat_<?= $code['cd'] ?>"><?= $code['cd_nm'] ?></label>
|
||||||
<input class="form-check-input" type="checkbox" name="stat[]"
|
</div>
|
||||||
id="stat_S02" value="S02">
|
<?php endif; ?>
|
||||||
<label class="form-check-label" for="stat_S02">사진촬영</label>
|
<?php endforeach; ?>
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" name="stat[]"
|
|
||||||
id="stat_S03" value="S03">
|
|
||||||
<label class="form-check-label" for="stat_S03">영상촬영</label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" name="stat[]"
|
|
||||||
id="stat_S04" value="S04">
|
|
||||||
<label class="form-check-label" for="stat_S04">촬영완료</label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" name="stat[]"
|
|
||||||
id="stat_S05" value="S05">
|
|
||||||
<label class="form-check-label" for="stat_S05">검수완료</label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" name="stat[]"
|
|
||||||
id="stat_S06" value="S06">
|
|
||||||
<label class="form-check-label" for="stat_S06">전송완료</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -536,7 +515,7 @@
|
|||||||
// 이 팀이 현재 본부에 속한 팀인지 체크
|
// 이 팀이 현재 본부에 속한 팀인지 체크
|
||||||
if (String(userArr[i].dept_sq) === String(dept_sq)) {
|
if (String(userArr[i].dept_sq) === String(dept_sq)) {
|
||||||
str += `
|
str += `
|
||||||
<option value="${userArr[i].usr_sq}">${userArr[i].usr_nm}</option>
|
<option value="${userArr[i].usr_id}">${userArr[i].usr_nm}</option>
|
||||||
`;
|
`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -653,7 +632,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"columnDefs": [
|
"columnDefs": [
|
||||||
{ targets: 0, orderable: false, className: 'text-center' },
|
{ className: 'text-center', targets: '_all' },
|
||||||
{ 'targets': '_all', "defaultContent": "" },
|
{ 'targets': '_all', "defaultContent": "" },
|
||||||
// { 'className': 'text-center', 'targets': [0, 2, 3, 4] },
|
// { 'className': 'text-center', 'targets': [0, 2, 3, 4] },
|
||||||
],
|
],
|
||||||
|
|||||||
1289
app/Views/pages/article/lists2.php
Normal file
1289
app/Views/pages/article/lists2.php
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user