CAST(AES_DECRYPT(FROM_BASE64(jkp.card_no),'*#id#') AS CHAR) AS card_no,
jkp.phone,
so1.name AS city_name,
so1.name AS city_name,
so2.name AS area_name,
so2.name AS area_name,
so3.name AS street_name,
so3.name AS street_name,
so4.name AS community_name,
so4.name AS community_name,
jlpvr.id AS id,
t1.rating_type as rating_level,
jlpvr.id AS visit_record_id,
v.sys_type_office_label,
jlpvr.key_person_visit_id,
v.sys_type_office_value,
jlpvr.plan_name,
v.id AS key_person_visit_id,
jlpvr.plan_type,
t1.sys_type AS rating_dict_type,
jlpvr.rating_type,
v.plan_name AS plan_name,
jlpvr.plan_start_data,
v.plan_type AS plan_type,
jlpvr.plan_end_data,
v.rating_type AS plan_rating_type,
jlpvr.overdue_date,
jlpvr.do_status,
CASE
CASE
WHEN DATEDIFF(jlpvr.plan_end_data, CURDATE()) < 0 THEN 0
WHEN r.id is NULL THEN
ELSE DATEDIFF(jlpvr.plan_end_data, CURDATE())
'1'
END AS remain_days,
WHEN
jlpvr.is_overdue AS is_overdue,
v.id is NOT NULL AND r.id is not NULL
CASE
AND DATE_FORMAT(NOW(),'%Y-%m-%d') < DATE_FORMAT(DATE_ADD(r.visit_time, INTERVAL v.visit_start_day DAY), '%Y-%m-%d') THEN
WHEN jlpvr.overdue_date IS NOT NULL AND CURDATE() >= jlpvr.overdue_date AND CURDATE() <= jlpvr.plan_end_data THEN '1'
'0'
ELSE '0'
WHEN
END AS is_near_due
v.id is NOT NULL AND r.id is not NULL
FROM jl_key_person jkp
AND DATE_FORMAT(NOW(),'%Y-%m-%d') >= DATE_FORMAT(DATE_ADD(r.visit_time, INTERVAL v.visit_start_day DAY), '%Y-%m-%d')
INNER JOIN jl_key_person_visit_record jlpvr
AND DATE_FORMAT(NOW(),'%Y-%m-%d') < DATE_FORMAT(DATE_ADD(r.visit_time, INTERVAL v.visit_end_day - v.overdue_warning_day DAY), '%Y-%m-%d') THEN
ON jkp.id = jlpvr.key_person_id
'1'
AND jlpvr.do_status = #{params.do_status}
WHEN
LEFT JOIN sys_office so1 ON jkp.city_id = so1.id
v.id is NOT NULL AND r.id is not NULL
LEFT JOIN sys_office so2 ON jkp.area_id = so2.id
AND DATE_FORMAT(NOW(),'%Y-%m-%d') >= DATE_FORMAT(DATE_ADD(r.visit_time, INTERVAL v.visit_end_day - v.overdue_warning_day DAY), '%Y-%m-%d')
LEFT JOIN sys_office so3 ON jkp.street_id = so3.id
AND DATE_FORMAT(NOW(),'%Y-%m-%d') <= DATE_FORMAT(DATE_ADD(r.visit_time, INTERVAL v.visit_end_day DAY), '%Y-%m-%d') THEN
LEFT JOIN sys_office so4 ON jkp.community_id = so4.id
'2'
WHEN
v.id is NOT NULL AND r.id is not NULL
AND DATE_FORMAT(NOW(),'%Y-%m-%d') > DATE_FORMAT(DATE_ADD(r.visit_time, INTERVAL v.visit_end_day DAY), '%Y-%m-%d') THEN
'3'
ELSE
'1'
END AS 'visit_status'
FROM
(
SELECT
kp.id AS person_id,
kp.name,
CAST(AES_DECRYPT(FROM_BASE64(kp.card_no),'*#id#') AS CHAR) AS card_no,
kp.phone,
kp.sys_type,
kp.city_id,
kp.area_id,
kp.street_id,
kp.community_id,
s.rating_type
FROM
(<includerefid="getPsersonList"></include>) kp,
jl_key_person_rating_summary s
WHERE
s.key_person_id = kp.id
AND s.is_history = '1'
) t1
LEFT JOIN jl_key_person_visit v ON v.rating_type = t1.rating_type AND v.status = '1' AND v.sys_type_office_label = #{params.office_label} AND v.rating_dict_type = t1.sys_type
LEFT JOIN jl_key_person_visit_record r ON t1.person_id = r.key_person_id AND r.is_new = '1' AND r.sys_type_office_label = #{params.office_label}
LEFT JOIN sys_office so1 ON t1.city_id = so1.id
LEFT JOIN sys_office so2 ON t1.area_id = so2.id
LEFT JOIN sys_office so3 ON t1.street_id = so3.id
LEFT JOIN sys_office so4 ON t1.community_id = so4.id
<where>
<where>
<iftest="params.name != null and params.name != ''">
<iftest="params.rating_level != null and params.rating_level != ''">
AND jkp.name LIKE CONCAT('%', #{params.name}, '%')
AND v.rating_type = #{params.rating_level}
</if>
</if>
<iftest="params.card_no != null and params.card_no != ''">
<iftest="params.visit_status != null and params.visit_status != ''">
AND jkp.card_no = TO_BASE64(AES_ENCRYPT(#{params.card_no},'*#id#'))
<choose>
</if>
<whentest='params.visit_status == "0"'>
<iftest="params.city_id != null and params.city_id != ''">
AND v.id is NOT NULL
AND jkp.city_id = #{params.city_id}
AND r.id is not NULL
</if>
AND DATE_FORMAT(NOW(),'%Y-%m-%d') < DATE_FORMAT(DATE_ADD(r.visit_time, INTERVAL v.visit_start_day DAY), '%Y-%m-%d')
<iftest="params.area_id != null and params.area_id != ''">
</when>
AND jkp.area_id = #{params.area_id}
<whentest='params.visit_status == "1"'>
</if>
AND (
<iftest="params.street_id != null and params.street_id != ''">
r.id is NULL
AND jkp.street_id = #{params.street_id}
or
</if>
(
<iftest="params.community_id != null and params.community_id != ''">
v.id is NOT NULL
AND jkp.community_id = #{params.community_id}
AND r.id is not NULL
</if>
AND DATE_FORMAT(NOW(),'%Y-%m-%d') >= DATE_FORMAT(DATE_ADD(r.visit_time, INTERVAL v.visit_start_day DAY), '%Y-%m-%d')
<iftest="params.rating_type != null and params.rating_type != ''">
AND DATE_FORMAT(NOW(),'%Y-%m-%d') < DATE_FORMAT(DATE_ADD(r.visit_time, INTERVAL v.visit_end_day - v.overdue_warning_day DAY), '%Y-%m-%d')
AND jlpvr.rating_type = #{params.rating_type}
)
</if>
)
<iftest="params.rating_dict_type != null and params.rating_dict_type != ''">
</when>
AND jlpvr.rating_dict_type = #{params.rating_dict_type}
<whentest='params.visit_status == "2"'>
</if>
AND v.id is NOT NULL
<iftest="params.is_overdue != null and params.is_overdue != ''">
AND r.id is not NULL
AND jlpvr.is_overdue = #{params.is_overdue}
AND DATE_FORMAT(NOW(),'%Y-%m-%d') >= DATE_FORMAT(DATE_ADD(r.visit_time, INTERVAL v.visit_end_day - v.overdue_warning_day DAY), '%Y-%m-%d')
AND DATE_FORMAT(NOW(),'%Y-%m-%d') <= DATE_FORMAT(DATE_ADD(r.visit_time, INTERVAL v.visit_end_day DAY), '%Y-%m-%d')
</when>
<whentest='params.visit_status == "3"'>
AND v.id is NOT NULL
AND r.id is not NULL
AND DATE_FORMAT(NOW(),'%Y-%m-%d') > DATE_FORMAT(DATE_ADD(r.visit_time, INTERVAL v.visit_end_day DAY), '%Y-%m-%d')