znpt-backend/core/src/main/resources/mapper/ProjectMapper.xml

57 lines
3.1 KiB
XML

<?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.dite.znpt.mapper.ProjectMapper">
<select id="queryBySelective" resultType="com.dite.znpt.domain.vo.ProjectListResp">
with taskProgress as (
SELECT
count(1) task_count,
sum(status=0) taskPendingCount,
sum(status=1) task_progress_count,
sum(status=2) task_complete_count,
project_id
FROM project_task
group by project_id
)
SELECT
prj.project_id, prj.project_origin, prj.project_budget, prj.project_name, prj.farm_name, prj.status, prj.cover_url, prj.farm_address, prj.client, prj.client_contact, prj.client_phone, prj.inspection_unit,
prj.inspection_contact, prj.inspection_phone, prj.scale, prj.turbine_model, prj.project_manager_id, pm.name AS project_manager_name, prj.constructor_ids,
GROUP_CONCAT(DISTINCT con.name) AS constructor_name, prj.start_date, prj.end_date, tp.taskPendingCount, tp.task_progress_count, tp.task_complete_count, tp.task_count
FROM project prj
LEFT JOIN user pm ON pm.user_id = prj.project_manager_id
LEFT JOIN user con ON FIND_IN_SET(con.user_id,prj.constructor_ids) > 0 AND con.del_flag = '0'
left join taskProgress tp on prj.project_id = tp.project_id
<where>
<if test="projectName != null and projectName != ''">
AND prj.project_name LIKE concat ('%', #{projectName}, '%')
</if>
<if test="farmName != null and farmName != ''">
AND prj.farm_name LIKE concat ('%', #{farmName}, '%')
</if>
<if test="farmAddress != null and farmAddress != ''">
AND prj.farm_address LIKE concat ('%', #{farmAddress}, '%')
</if>
<if test="client != null and client != ''">
AND prj.client LIKE concat ('%', #{client}, '%')
</if>
<if test="status != null and status != ''">
AND prj.status = #{status}
</if>
<if test="startDate != null">
and prj.start_date &gt;= #{startDate}
</if>
<if test="endDate != null">
and prj.end_date &lt;= #{endDate}
</if>
<if test="userId != null and userId != ''">
and (prj.auditor_id = #{userId} or prj.construct_team_leader_id = #{userId}
or prj.project_manager_id = #{userId} or prj.quality_officer_id = #{userId}
or prj.constructor_ids like concat('%', #{userId},'%'))
</if>
</where>
GROUP BY prj.project_id, prj.project_name, prj.farm_name, prj.status, prj.cover_url, prj.farm_address, prj.client, prj.client_contact, prj.client_phone, prj.inspection_unit,
prj.inspection_contact, prj.inspection_phone, prj.scale, prj.turbine_model, prj.project_manager_id, pm.name, prj.constructor_ids,
prj.start_date, prj.end_date, tp.taskPendingCount, tp.task_progress_count, tp.task_complete_count, tp.task_count
</select>
</mapper>