서비스 전산 관리자
Category
개발Customer
(주)빌리고Date
2022내용
빌리고 입사시 개발팀 본부장님이 말로 어떠어떠한 기능이 있으면 좋겠다 라는 말을 함 딱히 기횏허 없이 선 제작후 피드백 받으며 완성한 서비스 전산 관리자입니다.
# 서비스 전산 관리자
## 개발 환경
- apahce 2.4 이상
- php 7.3 이상
- MariaDB 10.0.x
## 로그인
- AJAX 이용하여 로그인 시스템 구현
## 접수관리
- PHP PDO, AJAX 이용한 데이터 INSERT, UPDATE
- GET 파라미터를 이용한 검색
- 코드 관리에서 데이터 가져오기
- 코드 관리에서 카타고리 수정시 이전버전 불러오기
- 출장비, 거리비 DB에 저장된 값 가져오기
- 본사, 센터 가격 다르게 가져오기
- 본사, 센터 노출 부분 다르게 변경
- repeater.js 를 이용하여 자제 입력 여러개 저정 가능 구현
- datatables를 이용하여 댓글 작성 기능 구현
- 파일 업로드 기능
- 접수 내용 복사 기능
- 접수상태가 있는 상태에서 최고 관리자만 삭제 하도록 구현
- 권한에 따른 엑셀 파일 다운로드 기능 구현
## 코드 관리
- nestable.js 를 이용하여 트리구조 UI 표시 및 코드생성 기능 구현
- DB저장시 lastInsertId 를 이용하여 db에 저장되게끔 구현
- 출장비 DB 저장을 통해 접수관리 메뉴에서 사용가능하도록 구현
## 자제관리
- PHP PDO, AJAX 이용한 데이터 INSERT, UPDATE
- 접수관리 -> 자제입력에서 repeater.js 를 이욯하여 여러가지 자제를 입력 할수 있도록 구현
## 업체관리
- PHP PDO, AJAX 이용한 데이터 INSERT, UPDATE
- AJAX를 통한 접근상태 버튼으로 바로 로그인 권한 차단 구현
- 지점별 로그인 계정 관리 페이지 구현
- 계정 관리 페이지에서 로그인 가능 불가능 쉽게 선택할수 있도록 구현
로그인 및 관리페이지
로그인 처리 PHP 부분
$object = new srms();
if(isset($_POST["ac_id"]))
{
//sleep(1);
$error = '';
$url = '';
$data = array(
':ac_id' => $_POST["ac_id"]
);
$object->query = "
SELECT * FROM management_account a
left JOIN management b on a.ac_code = b.cp_code
WHERE ac_id = :ac_id
";
$object->execute($data);
$total_row = $object->row_count();
if($total_row == 0)
{
$error = '해당 아이디가 존재 하지 않습니다.';
}
else
{
//$result = $statement->fetchAll();
$result = $object->statement_result();
foreach($result as $row)
{
if($row["ac_status"] == 'Enable' && $row["cp_status"] == 'Enable')
{
if($_POST["ac_passwd"] == $row["ac_passwd"])
{
$_SESSION['user_id'] = $row['ac_id'];
$_SESSION['user_type'] = $row['ac_type'];
if($row['user_type'] == '1')
{
$url = $object->base_url . 'dev/service_admin/dashboard.php';
}
else
{
$url = $object->base_url . 'dev/service_admin/dashboard.php';
}
}
else
{
$error = '비밀번호가 올바르지 않습니다.';
}
}
else
{
$error = '접근이 불가능한 사용자입니다.';
}
}
}
$output = array(
'error' => $error,
'url' => $url
);
echo json_encode($output);
}
접수관리 페이지 처리
프로세서 일부 처리 과정 코드
$object = new srms();
//각종권한 체크
$level_check = $object->level_check();
$cp_name_check = $object->cp_name_check();
$login_mame = $object->login_mame();
$cmp_code = $object->cmp_code();
$cmp_name = $object->cmp_name();
$login_id = $object->login_id();
if($_POST["action"] == 'fetch_comment')
{
$order_column = array('id', 'name', 'content');
$output = array();
$main_query = "
SELECT * FROM comment
";
$search_query = '';
if(isset($_POST["search"]["value"]))
{
// $search_query .= 'WHERE name LIKE "%'.$_POST["search"]["value"].'%" ';
//$search_query .= 'OR content LIKE "%'.$_POST["search"]["value"].'%" ';
}
if(isset($_POST["order"]))
{
$order_query = 'ORDER BY '.$order_column[$_POST['order']['0']['column']].' '.$_POST['order']['0']['dir'].' ';
}
else
{
$order_query = 'ORDER BY idx DESC ';
}
$limit_query = '';
if($_POST["length"] != -1)
{
$limit_query .= 'LIMIT ' . $_POST['start'] . ', ' . $_POST['length'];
}
$object->query = $main_query . $search_query . $order_query;
$object->execute();
$filtered_rows = $object->row_count();
$object->query .= $limit_query;
$result = $object->get_result();
$object->query = $main_query;
$object->execute();
$total_rows = $object->row_count();
$data = array();
foreach($result as $row)
{
if($row["secret"] == "true" && $level_check == "3") {
}else{
$sub_array = array();
$sub_array[] = substr(html_entity_decode($row["write_date"]), 5, 6);
$sub_array[] = html_entity_decode($row["secret"]);
$sub_array[] = html_entity_decode($row["name"]);
$sub_array[] = html_entity_decode($row["content"]);
$sub_array[] = '
<div align="center">
<button type="button" name="comment_delete_button" class="btn btn-danger btn-circle btn-sm comment_delete_button" data-id="'.$row["idx"].'">삭제</button>
</div>
';
$data[] = $sub_array;
}
}
$output = array(
"draw" => intval($_POST["draw"]),
"recordsTotal" => $total_rows,
"recordsFiltered" => $filtered_rows,
"data" => $data
);
echo json_encode($output);
}
트리메뉴 db저장 및 접수관리에서 사용하기 위한 데이터 처리
트리 메뉴 db 저장 로직
$menu = $_POST['menu'];
$array_menu = json_decode($menu[0], true);
//날짜 구하기
$update_date = date('Y-m-d H:i:s');
$object = new srms();
$prev_date = "";
$object->query = "SELECT * FROM category where parent_id = '0' AND update_date IN (SELECT MAX(update_date) FROM category) ORDER BY id_menu ASC limit 1";
$object->execute();
if($object->row_count() == 0){
$prev_date = $update_date;
}else{
$object->query = "SELECT * FROM category where parent_id = '0' AND update_date IN (SELECT MAX(update_date) FROM category) ORDER BY id_menu ASC limit 1";
$result = $object->get_result();
foreach($result as $row){
$prev_date = $row['update_date'];
}
}
function updateMenu($menu,$parent = 0)
{
global $db;
$prev_date = $GLOBALS['prev_date'];
$update_date = $GLOBALS['update_date'];
if (!empty($menu)) {
foreach ($menu as $value) {
$label = $value['label'];
$price1 = $value['price1'];
$price2 = $value['price2'];
$sql = "
INSERT INTO category (label_menu, price1, price2, parent_id, prev_date, update_date)
VALUES ('$label', '$price1', '$price2', '$parent', '$prev_date', '$update_date')
";
$db->query($sql);
$id = $db->insertedId();
if (array_key_exists('children', $value))
updateMenu($value['children'],$id);
}
}
}
echo "변경이 완료되었습니다.";
updateMenu($array_menu);