<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace= "com.epmet.dao.project.ProjectProcessDao" >
<select id= "selectProcessList" resultType= "com.epmet.entity.project.ProjectProcessEntity" >
SELECT
pro.project_id AS "projectId",
pro.operation AS "operation",
DATE_FORMAT(pro.created_time, "%Y-%m-%d") AS "createdTime",
p.agency_id
FROM
project_process pro
INNER JOIN project p ON pro.project_id = p.id
WHERE
pro.del_flag = '0'
AND p.del_flag = '0'
AND p.customer_id = #{customerId}
<![CDATA[AND DATE_FORMAT(pro.created_time, "%Y-%m-%d") <= DATE_FORMAT(#{createdTime}, "%Y-%m-%d")]]>
ORDER BY pro.project_id,pro.CREATED_TIME ASC
</select>
<select id= "selectProcessListByCustomer" resultType= "com.epmet.dto.project.ProcessInfoDTO" >
SELECT DISTINCT
staff.ORG_ID AS agencyId,
staff.GRID_ID,
staff.DEPARTMENT_ID,
staff.ORG_ID_PATH AS pids,
pp.PROJECT_ID,
pp.OPERATION,
pp.STAFF_ID,
pp.CREATED_TIME
FROM project_process pp
INNER JOIN project p ON pp.PROJECT_ID = p.ID
INNER JOIN project_staff staff ON pp.PROJECT_ID = staff.PROJECT_ID
AND pp.DEPARTMENT_NAME = staff.DEPARTMENT_NAME
AND staff.IS_HANDLE = 'handle'
AND pp.STAFF_ID = staff.STAFF_ID
AND staff.DEL_FLAG = '0'
WHERE
pp.DEL_FLAG = '0'
AND p.CUSTOMER_ID = #{customerId}
AND pp.OPERATION !='response'
AND pp.OPERATION !='created'
<if test= "date != null and date.trim() != ''" >
AND DATE_FORMAT(pp.CREATED_TIME, '%Y%m%d') = #{date}
</if>
</select>
<select id= "selectProcessStaffByCustomer" resultType= "com.epmet.dto.project.ProcessInfoDTO" >
SELECT
ps.ORG_ID AS "agencyId",
ps.DEPARTMENT_ID,
ps.GRID_ID,
pp.PROJECT_ID,
pp.OPERATION,
ps.STAFF_ID,
ps.ORG_ID_PATH AS pids,
pp.CREATED_TIME
FROM project_staff ps
INNER JOIN project_process pp ON ps.PROCESS_ID = pp.ID AND pp.DEL_FLAG = '0'
INNER JOIN project p ON pp.PROJECT_ID = p.ID AND p.DEL_FLAG = '0'
WHERE p.CUSTOMER_ID = #{customerId}
AND ps.DEL_FLAG = '0'
<if test= "date != null and date.trim() != ''" >
AND DATE_FORMAT(pp.CREATED_TIME, '%Y%m%d') = #{date}
</if>
</select>
<select id= "selectSatisfactionRecordByCustomer" resultType= "com.epmet.dto.project.ProcessInfoDTO" >
SELECT DISTINCT
p.AGENCY_ID,
psd.PROJECT_ID,
psd.SATISFACTION AS "operation",
psd.CREATED_BY AS "staffId",
resiuser.GRID_ID,
psd.CREATED_TIME
FROM project_satisfaction_detail psd
INNER JOIN project p ON psd.PROJECT_ID = p.ID
LEFT JOIN project_related_personnel resiuser ON psd.PROJECT_ID = resiuser.PROJECT_ID
AND resiuser.APP = 'resi'
WHERE p.CUSTOMER_ID = #{customerId}
<if test= "date != null and date.trim() != ''" >
AND DATE_FORMAT(psd.CREATED_TIME, '%Y%m%d') = #{date}
</if>
</select>
<select id= "selectClosedProjectList" resultType= "com.epmet.entity.project.ProjectProcessEntity" >
SELECT
pp.PROJECT_ID ,
pp.CREATED_TIME,
p.CLOSED_STATUS AS isResolved
FROM project_process pp
INNER JOIN project p ON pp.PROJECT_ID = p.ID
WHERE p.CUSTOMER_ID = #{customerId}
AND pp.OPERATION = 'close'
<if test= "date != null and date.trim() != ''" >
AND DATE_FORMAT(pp.CREATED_TIME, '%Y%m%d') = #{date}
</if>
</select>
<!-- 查询项目 - 机关各个节点历时详情 -->
<select id= "selectProjectOrgPeriod" resultType= "com.epmet.dto.project.result.ProjectOrgPeriodResultDTO" >
SELECT
staff.ID AS projectStaffId,
project.CUSTOMER_ID,
process.ID AS processId,
process.PROJECT_ID,
process.OPERATION AS lastAction,
IF(staff.IS_HANDLE='handle',selfAction.OPERATION,null) AS operation,
staff.DEPARTMENT_NAME,
staff.ORG_ID,
staff.DEPARTMENT_ID,
staff.GRID_ID,
staff.STAFF_ID AS staffId,
staff.ORG_ID_PATH,
IF(staff.IS_HANDLE='handle',timestampdiff(MINUTE , staff.CREATED_TIME , staff.UPDATED_TIME),0) AS TOTAL_PERIOD,
staff.CREATED_TIME AS informedDate,
IF(staff.IS_HANDLE='handle','resolved','unresolved') AS isResolved,
IF(staff.IS_HANDLE='handle',staff.UPDATED_TIME,null) AS handledDate,
IF(staff.IS_HANDLE='handle',staff.UPDATED_TIME,null) AS periodTillReplyFirstly
FROM PROJECT_STAFF staff
LEFT JOIN PROJECT project ON staff.PROJECT_ID = project.ID AND project.DEL_FLAG = '0'
LEFT JOIN PROJECT_PROCESS process ON staff.PROCESS_ID = process.ID AND process.DEL_FLAG = '0'
LEFT JOIN PROJECT_PROCESS selfAction ON staff.PROJECT_ID = selfAction.PROJECT_ID AND selfAction.DEL_FLAG = '0'
AND ABS(TIMESTAMPDIFF(SECOND,staff.UPDATED_TIME,selfAction.CREATED_TIME)) <![CDATA[ <= ]]> 30
AND staff.STAFF_ID = selfAction.STAFF_ID
WHERE staff.DEL_FLAG = '0'
AND project.CUSTOMER_ID = #{customerId}
<if test= 'null != projectStatus and "" != projectStatus' >
AND project.STATUS = #{projectStatus}
</if>
<if test= 'null != dateId and "" != dateId' >
AND (
DATE_FORMAT(project.CREATED_TIME , '%Y%m%d') = #{dateId}
OR
DATE_FORMAT(project.UPDATED_TIME , '%Y%m%d') = #{dateId}
)
</if>
AND process.OPERATION <![CDATA[ <> ]]> 'response'
ORDER BY process.PROJECT_ID,staff.CREATED_TIME ASC
</select>
<select id= "selectProjectOrgPeriodDirectly" resultType= "com.epmet.dto.project.result.ProjectOrgPeriodResultDTO" >
SELECT
staff.CUSTOMER_ID,
staff.PROCESS_ID,
staff.PROJECT_ID,
relation.SOURCE_OPERATION AS lastAction,
relation.OPERATION,
staff.DEPARTMENT_NAME,
staff.ORG_ID,
staff.DEPARTMENT_ID,
staff.GRID_ID,
staff.ORG_ID_PATH,
staff.STAFF_ID,
relation.TOTAL_PERIOD,
relation.INFORMED_DATE,
IF(staff.IS_HANDLE='handle','resolved','unresolved') AS isResolved,
relation.HANDLED_DATE,
relation.FIRST_DEALT_DATE AS periodTillReplyFirstly
FROM PROJECT_STAFF staff
INNER JOIN PROJECT_ORG_RELATION relation ON staff.ID = relation.PROJECT_STAFF_ID AND relation.DEL_FLAG = '0'
WHERE staff.DEL_FLAG = '0'
AND staff.CUSTOMER_ID = #{customerId}
<if test= 'null != projectStatus and "" != projectStatus' >
AND project.STATUS = #{projectStatus}
</if>
<if test= 'null != dateId and "" != dateId' >
AND (
DATE_FORMAT(relation.UPDATED_TIME , '%Y%m%d') = #{dateId}
)
</if>
ORDER BY staff.PROJECT_ID,staff.CREATED_TIME ASC
</select>
<!-- 查询项目 - 机关各个节点的响应列表 -->
<select id= "selectResponseTrace" resultType= "com.epmet.dto.project.result.ProjectOrgRelationWhenResponseResultDTO" >
SELECT
process.PROJECT_ID,
process.ID AS PROCESS_ID,
process.STAFF_ID,
process.DEPARTMENT_NAME,
process.OPERATION,
process.CREATED_TIME
FROM
PROJECT_PROCESS process
WHERE
process.DEL_FLAG = '0'
AND
<foreach collection= "projects" item= "id" open= "(" close= ")" separator= " OR " >
process.PROJECT_ID = #{id}
</foreach>
AND
EXISTS(
SELECT * FROM PROJECT_PROCESS WHERE DEL_FLAG = '0' AND PROJECT_ID = process.PROJECT_ID AND OPERATION = 'response'
AND STAFF_ID = process.STAFF_ID AND DEPARTMENT_NAME = process.DEPARTMENT_NAME
)
ORDER BY process.PROJECT_ID , process.STAFF_ID , process.CREATED_TIME ASC
</select>
<!-- 查询项目的节点 -->
<select id= "selectProjectProcess" resultType= "com.epmet.dto.project.result.ProjectOrgRelationWhenResponseResultDTO" >
SELECT
ID AS processId,
PROJECT_ID,
STAFF_ID,
OPERATION,
CREATED_TIME
FROM
PROJECT_PROCESS
WHERE
DEL_FLAG = '0'
AND
PROJECT_ID
IN(
SELECT DISTINCT ID
)
<foreach collection= "projects" item= "id" open= "AND (" close= ")" separator= " OR " >
PROJECT_ID = #{id}
</foreach>
ORDER BY PROJECT_ID,STAFF_ID,CREATED_TIME ASC
</select>
<select id= "selectFinishOrg" resultType= "com.epmet.dto.project.FinishOrgDTO" >
SELECT
a.GRID_ID,
a.DEPARTMENT_ID,
a.PROJECT_ID,
a.ORG_ID_PATH,
b.ORG_ID_PATH AS pIdPath
FROM
(
SELECT
ps.PROJECT_ID,
ps.ORG_ID_PATH,
ps.GRID_ID,
ps.DEPARTMENT_ID
FROM
project_process pp
INNER JOIN project_staff ps ON pp.STAFF_ID = ps.STAFF_ID
AND pp.DEPARTMENT_NAME = ps.DEPARTMENT_NAME
AND pp.PROJECT_ID = ps.PROJECT_ID
AND ps.IS_HANDLE = 'handle'
AND pp.CREATED_TIME = ps.UPDATED_TIME
AND ps.CUSTOMER_ID = #{customerId}
WHERE
pp.OPERATION = 'close'
<if test= "date != null and date.trim() != ''" >
AND DATE_FORMAT(pp.CREATED_TIME , '%Y%m%d') = #{date}
</if>
) a
LEFT JOIN (
SELECT PROJECT_ID, ORG_ID_PATH, MIN( LENGTH( ORG_ID_PATH ))
FROM project_staff
WHERE CUSTOMER_ID = #{customerId}
GROUP BY PROJECT_ID
) b ON a.PROJECT_ID = b.PROJECT_ID
</select>
<!-- 查找项目最近一次操作说明 -->
<select id= "selectLatestOperation" resultType= "com.epmet.dto.project.result.ProjectLatestOperationResultDTO" >
SELECT
process.PROJECT_ID,
process.OPERATION_NAME,
project.TITLE,
CASE WHEN project.status = 'pending' THEN TIMESTAMPDIFF(MINUTE,project.created_time,NOW()) ELSE TIMESTAMPDIFF(MINUTE,project.created_time,project.UPDATED_TIME) END AS costTime
FROM
project_process process LEFT JOIN project ON process.PROJECT_ID = project.ID AND project.DEL_FLAG = '0'
WHERE
process.DEL_FLAG = '0'
AND process.CUSTOMER_ID = #{customerId}
<if test= "null != list and list.size() > 0" >
<foreach collection= "list" item= "projectId" open= "AND (" separator= " OR " close= " )" >
process.PROJECT_ID = #{projectId}
</foreach>
</if>
GROUP BY process.PROJECT_ID
ORDER BY process.CREATED_TIME DESC
</select>
<select id= "selectResponseProcessList" resultType= "com.epmet.dto.project.ProcessInfoDTO" >
SELECT DISTINCT
ps.ORG_ID AS "agencyId",
ps.DEPARTMENT_ID,
ps.GRID_ID,
ps.ORG_ID_PATH AS pids,
pp.PROJECT_ID,
pp.OPERATION,
pp.STAFF_ID,
pp.CREATED_TIME
FROM
project_process pp
INNER JOIN project p ON pp.PROJECT_ID = p.ID AND p.DEL_FLAG = '0'
LEFT JOIN project_staff ps ON pp.PROJECT_ID = ps.PROJECT_ID
AND pp.STAFF_ID = ps.STAFF_ID
AND pp.DEPARTMENT_NAME = ps.DEPARTMENT_NAME
WHERE
1=1
AND pp.DEL_FLAG = '0'
AND p.CUSTOMER_ID = #{customerId}
AND pp.OPERATION = 'response'
<if test= "date != null and date.trim() != ''" >
AND DATE_FORMAT(pp.CREATED_TIME,'%Y%m%d') = #{date}
</if>
</select>
<select id= "selectClosedProjectOnAppointedDay" resultType= "com.epmet.dto.ProjectProcessDTO" >
SELECT
project_id,
created_time
FROM
`project_process`
WHERE
del_flag = '0'
AND customer_id = #{customerId}
AND operation = 'close'
AND DATE_FORMAT( CREATED_TIME, '%Y%m%d' ) = #{dateId}
</select>
<select id= "selectClosedProjectByProjectIds" resultType= "com.epmet.dto.ProjectProcessDTO" >
SELECT
project_id,
created_time
FROM
`project_process`
WHERE
del_flag = '0'
AND operation = 'close'
<foreach collection= "list" item= "projectId" open= "AND (" separator= " OR " close= " )" >
project_id = #{projectId}
</foreach>
</select>
<resultMap id= "processDirectionMap" type= "com.epmet.dto.screen.ScreenProjectProcessDTO" >
<result column= "customer_id" property= "customerId" />
<result column= "processId" property= "processId" />
<result column= "project_id" property= "projectId" />
<result column= "handlerName" property= "handlerName" />
<result column= "handlerId" property= "handlerId" />
<result column= "handlerType" property= "handlerType" />
<result column= "org_id_path" property= "orgIdPath" />
<result column= "operation" property= "operation" />
<result column= "public_reply" property= "publicReply" />
<result column= "internal_remark" property= "internalRemark" />
<result column= "processTime" property= "processTime" />
<result column= "dataEndTime" property= "dataEndTime" />
<collection property= "points" ofType= "com.epmet.dto.project.ProjectStaffDTO" >
<result column= "orgId" property= "orgId" />
<result column= "DEPARTMENT_NAME" property= "departmentName" />
</collection>
</resultMap>
<select id= "selectProjectProcessAndDirection" resultMap= "processDirectionMap" >
SELECT
process.project_id,
process.customer_id,
process.id as processId,
process.DEPARTMENT_NAME as handlerName,
CASE WHEN process.DEPARTMENT_ID IS NOT NULL <![CDATA[&&]]> trim(process.DEPARTMENT_ID) <![CDATA[<>]]> '' THEN process.DEPARTMENT_ID
WHEN process.GRID_ID IS NOT NULL <![CDATA[&&]]> trim(process.GRID_ID) <![CDATA[<>]]> '' THEN process.GRID_ID
ELSE process.AGENCY_ID END as handlerId,
CASE WHEN process.DEPARTMENT_ID IS NOT NULL <![CDATA[&&]]> trim(process.DEPARTMENT_ID) <![CDATA[<>]]> '' THEN 'department'
WHEN process.GRID_ID IS NOT NULL <![CDATA[&&]]> trim(process.GRID_ID) <![CDATA[<>]]> '' THEN 'grid'
ELSE 'agency' END as handlerType,
process.ORG_ID_PATH,
process.OPERATION,
process.PUBLIC_REPLY,
process.INTERNAL_REMARK,
process.CREATED_TIME as processTime,
#{dataEndTime} as dataEndTime,
staff.DEPARTMENT_NAME,
CASE WHEN staff.DEPARTMENT_ID IS NOT NULL <![CDATA[&&]]> trim(staff.DEPARTMENT_ID) <![CDATA[<>]]> '' THEN staff.DEPARTMENT_ID
WHEN staff.GRID_ID IS NOT NULL <![CDATA[&&]]> trim(staff.GRID_ID) <![CDATA[<>]]> '' THEN staff.GRID_ID
ELSE staff.ORG_ID END as orgId
FROM `project_process` process
left join `project_staff` staff on staff.PROCESS_ID = process.ID and staff.DEL_FLAG = '0'
where process.del_flag = '0' and process.customer_id = #{customerId}
<choose >
<when test= 'null != dateId and "" != dateId' >
AND DATE_FORMAT(process.created_time, '%Y%m%d') = #{dateId}
</when>
<otherwise >
AND CAST(DATE_FORMAT(process.created_time, '%Y%m%d') AS SIGNED) <![CDATA[ <= ]]> CAST(#{dataEndTime} AS SIGNED)
</otherwise>
</choose>
</select>
<select id= "selectProcessAttachment" resultType= "com.epmet.dto.screen.ScreenProjectProcessAttachmentDTO" >
SELECT
ID AS attachmentId,
CUSTOMER_ID,
PROJECT_ID,
PROCESS_ID,
FILE_PLACE,
FILE_NAME,
ATTACHMENT_NAME,
ATTACHMENT_SIZE,
ATTACHMENT_FORMAT,
ATTACHMENT_TYPE,
ATTACHMENT_URL,
SORT,
DURATION
FROM
`project_process_attachment`
WHERE
del_flag = '0'
AND ( ( FILE_PLACE = 'public' AND STATUS IN ( 'auto_passed', 'approved' ) ) OR FILE_PLACE = 'internal' )
<foreach collection= "list" item= "processId" open= "AND ( " separator= " OR " close= " )" >
PROCESS_ID = #{processId}
</foreach>
</select>
</mapper>