forked from rongchao/epmet-cloud-rizhao
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.
428 lines
17 KiB
428 lines
17 KiB
<?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>
|