You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

320 lines
12 KiB

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
require_once('../conn.php');
$signDetails = new signDetails();
$method = !empty($_POST['method']) ? $_POST['method'] : '';
if ($method == 'getSingDetails') {
header("Content-Type: application/json; charset=UTF-8");
echo $signDetails->getSingDetails();
}
if ($method == 'getSingDetailsAllCount') {
header("Content-Type: application/html; charset=UTF-8");
echo $signDetails->getSingDetailsAllCount();
}
}
class signDetails
{
public $count = 0;
public $now_page = 1;
public $end_page = 1;
public $per = 10;
public $system_name = '';
public $department_id = '';
public $user_id = '';
public $search = '';
public function __construct()
{
$this->now_page = !empty($_POST['now_page']) ? $_POST['now_page'] : 1;
$this->per = !empty($_POST['per']) ? $_POST['per'] : 10;
$this->system_name = !empty($_POST['system_name']) ? $_POST['system_name'] : '';
$this->department_id = !empty($_POST['department_id']) ? $_POST['department_id'] : '';
$this->user_id = !empty($_POST['user_id']) ? $_POST['user_id'] : '';
$this->search = !empty($_POST['search']) ? $_POST['search'] : '';
}
public function getSingDetailsAllCount()
{
global $conn;
global $connEkp;
$system_name = $this->system_name;
$department_id = $this->department_id;
$user_id = $this->user_id;
$search = $this->search;
$all_count = 0;
$wms_count = 0;
$bpm_count = 0;
$sql_str = "
SELECT
sm.system_name,
fm.flow_name,
f.form_key,
sf.current_assigner,
a.name AS user_name,
d.department_id,
d.depart_name AS depart_name,
sf.update_date
FROM flow AS f
LEFT JOIN system_main as sm
ON f.system_id = sm.system_id
LEFT JOIN flow_main as fm
ON f.flow_id = fm.flow_id
LEFT JOIN (
SELECT
form_key,
current_assigner,
IF(update_date IS NULL,create_date,update_date) AS update_date,
MAX(seq) AS seq
FROM subflow
WHERE 1 = 1
GROUP BY form_key, current_assigner, update_date
) AS sf
ON f.form_key = sf.form_key
LEFT JOIN account AS a
ON sf.current_assigner = a.accountid
LEFT JOIN (
SELECT DISTINCT
department_id,
name AS depart_name
FROM department
) AS d
ON a.department_id = d.department_id
WHERE 1 =1
AND f.flow_code != 'Z'
AND sf.form_key != ''
AND sf.form_key IS NOT NULL
AND sf.current_assigner != ''
AND sf.current_assigner IS NOT NULL
";
$sql_str .= !empty($department_id) ? " AND a.department_id = :department_id " : "";
$sql_str .= !empty($user_id) ? " AND sf.current_assigner = :user_id " : "";
if (!empty($search)) {
$sql_str .= " AND (
sm.system_name LIKE :search
OR fm.flow_name LIKE :search
OR f.form_key LIKE :search
OR sf.current_assigner LIKE :search
OR a.name LIKE :search
OR d.department_id LIKE :search
OR d.depart_name LIKE :search
OR sf.update_date LIKE :search
) ";
}
$stmt = $conn->prepare($sql_str);
!empty($department_id) ? $stmt->bindParam(':department_id', $department_id) : '';
!empty($user_id) ? $stmt->bindParam(':user_id', $user_id) : '';
!empty($search) ? $stmt->bindValue(':search', '%' . $search . '%') : '';
$stmt->execute();
$wms_count = $stmt->rowCount();
$sql_str = "
SELECT
'藍凌BPM' AS system_name,
krt.fd_name AS flow_name, -- 流程名稱
lp.fd_id AS form_key,
soe.fd_no AS current_assigner, -- 預計處理人員工編號
soe.fd_name AS user_name, -- 預計處理人名稱
'' AS department_id,
soe2.fd_name AS depart_name, -- 部門
lp.fd_create_time AS update_date -- 創建時間
FROM lbpm_process AS lp
LEFT JOIN km_review_template AS krt
ON lp.fd_template_model_id = krt.fd_id
LEFT JOIN lbpm_workitem AS lw
ON lp.fd_id = lw.fd_process_id
LEFT JOIN sys_org_element AS soe
ON lw.fd_expected_id = soe.fd_id
LEFT JOIN sys_org_element AS soe2
ON soe2.fd_id = soe.fd_parentid
LEFT JOIN lbpm_history_workitem AS lhw
ON lp.fd_id = lhw.fd_process_id
WHERE 1=1
-- AND lw.fd_status = '20'
AND lhw.fd_activity_type = 'reviewWorkitem'
AND krt.fd_name != ''
AND soe.fd_no != ''
";
$sql_str .= !empty($department_id) ? " AND a.department_id = :department_id " : "";
$sql_str .= !empty($user_id) ? " AND sf.current_assigner = :user_id " : "";
if (!empty($search)) {
$sql_str .= " AND (
krt.fd_name LIKE :search
OR lp.fd_id LIKE :search
OR soe.fd_no LIKE :search
OR soe.fd_name LIKE :search
OR soe2.fd_name LIKE :search
OR lp.fd_create_time LIKE :search
) ";
}
$stmt = $connEkp->prepare($sql_str);
!empty($department_id) ? $stmt->bindParam(':department_id', $department_id) : '';
!empty($user_id) ? $stmt->bindParam(':user_id', $user_id) : '';
!empty($search) ? $stmt->bindValue(':search', '%' . $search . '%') : '';
$stmt->execute();
$bpm_count = $stmt->rowCount();
$all_count = $wms_count + $bpm_count;
if ($system_name == 'wms')
return $wms_count;
if ($system_name == 'bpm')
return $bpm_count;
return $all_count;
}
public function getNowPage()
{
return $this->now_page = !empty($_POST['now_page']) ? $_POST['now_page'] : 1;
}
public function getEndPage()
{
$count = $this->getSingDetailsAllCount();
return $this->end_page = ceil($count / $this->per);
}
public function getSingDetails()
{
global $conn;
global $connEkp;
$system_name = $this->system_name;
$department_id = $this->department_id;
$user_id = $this->user_id;
$search = $this->search;
$per = $this->per;
$now_page = $this->now_page;
$limit_start = ($now_page - 1) * $per;
$data = [];
$wms_data = [];
$bpm_data = [];
$sql_str = "
SELECT
sm.system_name,
fm.flow_name,
f.form_key,
sf.current_assigner,
a.name AS user_name,
d.department_id,
d.depart_name AS depart_name,
sf.update_date,
DATEDIFF(NOW(),sf.update_date) AS diff_days
FROM flow AS f
LEFT JOIN system_main as sm
ON f.system_id = sm.system_id
LEFT JOIN flow_main as fm
ON f.flow_id = fm.flow_id
LEFT JOIN (
SELECT
form_key,
current_assigner,
IF(update_date IS NULL,create_date,update_date) AS update_date,
MAX(seq) AS seq
FROM subflow
WHERE 1 = 1
GROUP BY form_key, current_assigner, update_date
) AS sf
ON f.form_key = sf.form_key
LEFT JOIN account AS a
ON sf.current_assigner = a.accountid
LEFT JOIN (
SELECT DISTINCT
department_id,
name AS depart_name
FROM department
) AS d
ON a.department_id = d.department_id
WHERE 1 =1
AND f.flow_code != 'Z'
AND sf.form_key != ''
AND sf.form_key IS NOT NULL
AND sf.current_assigner != ''
AND sf.current_assigner IS NOT NULL
";
$sql_str .= !empty($department_id) ? " AND a.department_id = :department_id " : "";
$sql_str .= !empty($user_id) ? " AND sf.current_assigner = :user_id " : "";
if (!empty($search)) {
$sql_str .= " AND (
sm.system_name LIKE :search
OR fm.flow_name LIKE :search
OR f.form_key LIKE :search
OR sf.current_assigner LIKE :search
OR a.name LIKE :search
OR d.department_id LIKE :search
OR d.depart_name LIKE :search
OR sf.update_date LIKE :search
) ";
}
$sql_str .= " LIMIT :per OFFSET :limit_start";
$stmt = $conn->prepare($sql_str);
!empty($department_id) ? $stmt->bindParam(':department_id', $department_id) : '';
!empty($user_id) ? $stmt->bindParam(':user_id', $user_id) : '';
$stmt->bindParam(':limit_start', $limit_start, PDO::PARAM_INT);
$stmt->bindParam(':per', $per, PDO::PARAM_INT);
!empty($search) ? $stmt->bindValue(':search', '%' . $search . '%') : '';
$stmt->execute();
$wms_data = $stmt->fetchAll(PDO::FETCH_ASSOC);
$sql_str = "
SELECT
'藍凌BPM' AS system_name,
krt.fd_name AS flow_name, -- 流程名稱
lp.fd_id AS form_key,
soe.fd_no AS current_assigner, -- 預計處理人員工編號
soe.fd_name AS user_name, -- 預計處理人名稱
'' AS department_id,
soe2.fd_name AS depart_name, -- 部門
SUBSTR(lp.fd_create_time,1,19) AS update_date, -- 創建時間
DATEDIFF(NOW(),lp.fd_create_time) AS diff_days
FROM lbpm_process AS lp
LEFT JOIN km_review_template AS krt
ON lp.fd_template_model_id = krt.fd_id
LEFT JOIN lbpm_workitem AS lw
ON lp.fd_id = lw.fd_process_id
LEFT JOIN sys_org_element AS soe
ON lw.fd_expected_id = soe.fd_id
LEFT JOIN sys_org_element AS soe2
ON soe2.fd_id = soe.fd_parentid
LEFT JOIN lbpm_history_workitem AS lhw
ON lp.fd_id = lhw.fd_process_id
WHERE 1=1
-- AND lw.fd_status = '20'
AND lhw.fd_activity_type = 'reviewWorkitem'
AND krt.fd_name != ''
AND soe.fd_no != ''
";
$sql_str .= !empty($department_id) ? " AND a.department_id = :department_id " : "";
$sql_str .= !empty($user_id) ? " AND sf.current_assigner = :user_id " : "";
if (!empty($search)) {
$sql_str .= " AND (
krt.fd_name LIKE :search
OR lp.fd_id LIKE :search
OR soe.fd_no LIKE :search
OR soe.fd_name LIKE :search
OR soe2.fd_name LIKE :search
OR lp.fd_create_time LIKE :search
) ";
}
$sql_str .= " LIMIT :per OFFSET :limit_start";
$stmt = $connEkp->prepare($sql_str);
!empty($department_id) ? $stmt->bindParam(':department_id', $department_id) : '';
!empty($user_id) ? $stmt->bindParam(':user_id', $user_id) : '';
$stmt->bindParam(':limit_start', $limit_start, PDO::PARAM_INT);
$stmt->bindParam(':per', $per, PDO::PARAM_INT);
!empty($search) ? $stmt->bindValue(':search', '%' . $search . '%') : '';
$stmt->execute();
$bpm_data = $stmt->fetchAll(PDO::FETCH_ASSOC);
$data = array_merge($wms_data, $bpm_data);
if ($system_name == 'wms')
return json_encode($wms_data, JSON_UNESCAPED_UNICODE);
if ($system_name == 'bpm')
return json_encode($bpm_data, JSON_UNESCAPED_UNICODE);
return json_encode($data, JSON_UNESCAPED_UNICODE);
}
}