CAST(AES_DECRYPT(FROM_BASE64(jkp.card_no),'*#id#') AS CHAR) AS card_no,
jkp.phone,
t1.*,
so1.name AS city_name,
so2.name AS area_name,
so3.name AS street_name,
so4.name AS community_name,
jlpvr.id AS id,
jlpvr.id AS visit_record_id,
jlpvr.key_person_visit_id,
jlpvr.plan_name,
jlpvr.plan_type,
jlpvr.rating_type,
jlpvr.plan_start_data,
jlpvr.plan_end_data,
jlpvr.overdue_date,
jlpvr.do_status,
t1.rating_type as rating_level,
v.sys_type_office_label,
v.sys_type_office_value,
v.id AS key_person_visit_id,
t1.sys_type AS rating_dict_type,
v.plan_name AS plan_name,
v.plan_type AS plan_type,
v.rating_type AS plan_rating_type,
CASE
WHEN DATEDIFF(jlpvr.plan_end_data, CURDATE()) < 0 THEN 0
ELSE DATEDIFF(jlpvr.plan_end_data, CURDATE())
END AS remain_days,
jlpvr.is_overdue AS is_overdue,
CASE
WHEN jlpvr.overdue_date IS NOT NULL AND CURDATE() >= jlpvr.overdue_date AND CURDATE() <= jlpvr.plan_end_data THEN '1'
ELSE '0'
END AS is_near_due
FROM jl_key_person jkp
INNER JOIN jl_key_person_visit_record jlpvr
ON jkp.id = jlpvr.key_person_id
AND jlpvr.do_status = #{params.do_status}
LEFT JOIN sys_office so1 ON jkp.city_id = so1.id
LEFT JOIN sys_office so2 ON jkp.area_id = so2.id
LEFT JOIN sys_office so3 ON jkp.street_id = so3.id
LEFT JOIN sys_office so4 ON jkp.community_id = so4.id
WHEN r.id is NULL THEN
'1'
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_start_day DAY), '%Y-%m-%d') THEN
'0'
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_start_day DAY), '%Y-%m-%d')
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
'1'
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 - 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') THEN
'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>
<iftest="params.name != null and params.name != ''">
AND jkp.name LIKE CONCAT('%', #{params.name}, '%')
</if>
<iftest="params.card_no != null and params.card_no != ''">
AND jkp.card_no = TO_BASE64(AES_ENCRYPT(#{params.card_no},'*#id#'))
</if>
<iftest="params.city_id != null and params.city_id != ''">
AND jkp.city_id = #{params.city_id}
</if>
<iftest="params.area_id != null and params.area_id != ''">
AND jkp.area_id = #{params.area_id}
</if>
<iftest="params.street_id != null and params.street_id != ''">
AND jkp.street_id = #{params.street_id}
</if>
<iftest="params.community_id != null and params.community_id != ''">
AND jkp.community_id = #{params.community_id}
</if>
<iftest="params.rating_type != null and params.rating_type != ''">
AND jlpvr.rating_type = #{params.rating_type}
</if>
<iftest="params.rating_dict_type != null and params.rating_dict_type != ''">
AND jlpvr.rating_dict_type = #{params.rating_dict_type}
</if>
<iftest="params.is_overdue != null and params.is_overdue != ''">
AND jlpvr.is_overdue = #{params.is_overdue}
<iftest="params.rating_level != null and params.rating_level != ''">
AND v.rating_type = #{params.rating_level}
</if>
<iftest="params.visit_status != null and params.visit_status != ''">
<choose>
<whentest='params.visit_status == "0"'>
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_start_day DAY), '%Y-%m-%d')
</when>
<whentest='params.visit_status == "1"'>
AND (
r.id is NULL
or
(
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_start_day DAY), '%Y-%m-%d')
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')
)
)
</when>
<whentest='params.visit_status == "2"'>
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 - 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')