L o a d i n g

서비스 전산 관리자

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);