375 lines
13 KiB
XML
375 lines
13 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.unis.crm.mapper.WorkMapper">
|
||
|
||
<select id="selectTodayCheckIn" resultType="com.unis.crm.dto.work.WorkCheckInDTO">
|
||
select
|
||
id,
|
||
to_char(checkin_date, 'YYYY-MM-DD') as date,
|
||
to_char(checkin_time, 'HH24:MI') as time,
|
||
coalesce(location_text, '') as locationText,
|
||
coalesce(remark, '') as remark,
|
||
coalesce(status, 'normal') as status,
|
||
longitude,
|
||
latitude
|
||
from work_checkin
|
||
where user_id = #{userId}
|
||
and checkin_date = current_date
|
||
order by checkin_time desc nulls last, id desc
|
||
limit 1
|
||
</select>
|
||
|
||
<select id="selectTodayReport" resultType="com.unis.crm.dto.work.WorkDailyReportDTO">
|
||
select
|
||
r.id,
|
||
to_char(r.report_date, 'YYYY-MM-DD') as date,
|
||
to_char(r.submit_time, 'YYYY-MM-DD HH24:MI') as submitTime,
|
||
coalesce(r.work_content, '') as workContent,
|
||
coalesce(r.tomorrow_plan, '') as tomorrowPlan,
|
||
coalesce(r.source_type, 'manual') as sourceType,
|
||
coalesce(r.status, 'submitted') as status,
|
||
c.score,
|
||
c.comment_content as comment
|
||
from work_daily_report r
|
||
left join (
|
||
select distinct on (report_id)
|
||
report_id,
|
||
score,
|
||
comment_content
|
||
from work_daily_report_comment
|
||
order by report_id, reviewed_at desc nulls last, id desc
|
||
) c on c.report_id = r.id
|
||
where r.user_id = #{userId}
|
||
and r.report_date = current_date
|
||
order by r.submit_time desc nulls last, r.id desc
|
||
limit 1
|
||
</select>
|
||
|
||
<select id="selectTodayWorkContentLines" resultType="java.lang.String">
|
||
select line
|
||
from (
|
||
select
|
||
coalesce(s.created_at, now()) as action_time,
|
||
'新增销售拓展:' ||
|
||
coalesce(s.candidate_name, '未命名') ||
|
||
case
|
||
when s.title is not null and btrim(s.title) <> '' then ',岗位:' || s.title
|
||
else ''
|
||
end ||
|
||
case
|
||
when s.intent_level is not null and btrim(s.intent_level) <> '' then ',意向:' || s.intent_level
|
||
else ''
|
||
end as line
|
||
from crm_sales_expansion s
|
||
where s.owner_user_id = #{userId}
|
||
and s.created_at::date = current_date
|
||
|
||
union all
|
||
|
||
select
|
||
coalesce(c.created_at, now()) as action_time,
|
||
'新增渠道拓展:' ||
|
||
coalesce(c.channel_name, '未命名渠道') ||
|
||
case
|
||
when c.province is not null and btrim(c.province) <> '' then ',地区:' || c.province
|
||
else ''
|
||
end ||
|
||
case
|
||
when c.industry is not null and btrim(c.industry) <> '' then ',行业:' || c.industry
|
||
else ''
|
||
end as line
|
||
from crm_channel_expansion c
|
||
where c.owner_user_id = #{userId}
|
||
and c.created_at::date = current_date
|
||
|
||
union all
|
||
|
||
select
|
||
coalesce(o.created_at, now()) as action_time,
|
||
'新增商机:' ||
|
||
coalesce(o.opportunity_name, '未命名商机') ||
|
||
case
|
||
when cust.customer_name is not null and btrim(cust.customer_name) <> '' then ',客户:' || cust.customer_name
|
||
else ''
|
||
end ||
|
||
case
|
||
when o.amount is not null then ',金额:¥' || trim(to_char(o.amount, 'FM9999999999990.00'))
|
||
else ''
|
||
end as line
|
||
from crm_opportunity o
|
||
left join crm_customer cust on cust.id = o.customer_id
|
||
where o.owner_user_id = #{userId}
|
||
and o.created_at::date = current_date
|
||
|
||
union all
|
||
|
||
select
|
||
coalesce(f.followup_time, now()) as action_time,
|
||
'销售拓展跟进:' ||
|
||
coalesce(s.candidate_name, '未命名') ||
|
||
case
|
||
when f.followup_type is not null and btrim(f.followup_type) <> '' then ',方式:' || f.followup_type
|
||
else ''
|
||
end ||
|
||
case
|
||
when f.content is not null and btrim(f.content) <> '' then ',内容:' || f.content
|
||
else ''
|
||
end as line
|
||
from crm_expansion_followup f
|
||
join crm_sales_expansion s on s.id = f.biz_id and f.biz_type = 'sales'
|
||
where f.followup_user_id = #{userId}
|
||
and f.followup_time::date = current_date
|
||
|
||
union all
|
||
|
||
select
|
||
coalesce(f.followup_time, now()) as action_time,
|
||
'渠道拓展跟进:' ||
|
||
coalesce(c.channel_name, '未命名渠道') ||
|
||
case
|
||
when f.followup_type is not null and btrim(f.followup_type) <> '' then ',方式:' || f.followup_type
|
||
else ''
|
||
end ||
|
||
case
|
||
when f.content is not null and btrim(f.content) <> '' then ',内容:' || f.content
|
||
else ''
|
||
end as line
|
||
from crm_expansion_followup f
|
||
join crm_channel_expansion c on c.id = f.biz_id and f.biz_type = 'channel'
|
||
where f.followup_user_id = #{userId}
|
||
and f.followup_time::date = current_date
|
||
|
||
union all
|
||
|
||
select
|
||
coalesce(f.followup_time, now()) as action_time,
|
||
'商机跟进:' ||
|
||
coalesce(o.opportunity_name, '未命名商机') ||
|
||
case
|
||
when f.followup_type is not null and btrim(f.followup_type) <> '' then ',方式:' || f.followup_type
|
||
else ''
|
||
end ||
|
||
case
|
||
when f.content is not null and btrim(f.content) <> '' then ',内容:' || f.content
|
||
else ''
|
||
end as line
|
||
from crm_opportunity_followup f
|
||
join crm_opportunity o on o.id = f.opportunity_id
|
||
where f.followup_user_id = #{userId}
|
||
and f.followup_time::date = current_date
|
||
) work_lines
|
||
order by action_time asc, line asc
|
||
</select>
|
||
|
||
<select id="selectHistory" resultType="com.unis.crm.dto.work.WorkHistoryItemDTO">
|
||
select
|
||
id,
|
||
type,
|
||
date,
|
||
time,
|
||
content,
|
||
status,
|
||
score,
|
||
comment
|
||
from (
|
||
select
|
||
c.id,
|
||
'外勤打卡' as type,
|
||
to_char(c.checkin_date, 'YYYY-MM-DD') as date,
|
||
to_char(c.checkin_time, 'HH24:MI') as time,
|
||
coalesce(c.location_text, '') ||
|
||
case
|
||
when c.remark is not null and btrim(c.remark) <> '' then E'\n备注:' || c.remark
|
||
else ''
|
||
end as content,
|
||
case coalesce(c.status, 'normal')
|
||
when 'normal' then '正常'
|
||
when 'updated' then '已更新'
|
||
else coalesce(c.status, '正常')
|
||
end as status,
|
||
null::integer as score,
|
||
null::text as comment,
|
||
coalesce(c.checkin_date::timestamp + c.checkin_time::time, c.created_at) as sort_time
|
||
from work_checkin c
|
||
where c.user_id = #{userId}
|
||
|
||
union all
|
||
|
||
select
|
||
r.id,
|
||
'日报' as type,
|
||
to_char(r.report_date, 'YYYY-MM-DD') as date,
|
||
to_char(r.submit_time, 'HH24:MI') as time,
|
||
coalesce(r.work_content, '') ||
|
||
case
|
||
when r.tomorrow_plan is not null and btrim(r.tomorrow_plan) <> '' then E'\n明日计划:' || r.tomorrow_plan
|
||
else ''
|
||
end as content,
|
||
case coalesce(rc.comment_content, '')
|
||
when '' then
|
||
case coalesce(r.status, 'submitted')
|
||
when 'submitted' then '已提交'
|
||
when 'reviewed' then '已点评'
|
||
else coalesce(r.status, '已提交')
|
||
end
|
||
else '已点评'
|
||
end as status,
|
||
rc.score,
|
||
rc.comment_content as comment,
|
||
coalesce(r.report_date::timestamp + r.submit_time::time, r.created_at) as sort_time
|
||
from work_daily_report r
|
||
left join (
|
||
select distinct on (report_id)
|
||
report_id,
|
||
score,
|
||
comment_content
|
||
from work_daily_report_comment
|
||
order by report_id, reviewed_at desc nulls last, id desc
|
||
) rc on rc.report_id = r.id
|
||
where r.user_id = #{userId}
|
||
) history
|
||
order by sort_time desc nulls last, id desc
|
||
</select>
|
||
|
||
<select id="selectTodayCheckInId" resultType="java.lang.Long">
|
||
select id
|
||
from work_checkin
|
||
where user_id = #{userId}
|
||
and checkin_date = current_date
|
||
order by checkin_time desc nulls last, id desc
|
||
limit 1
|
||
</select>
|
||
|
||
<insert id="insertCheckIn">
|
||
insert into work_checkin (
|
||
id,
|
||
user_id,
|
||
checkin_date,
|
||
checkin_time,
|
||
longitude,
|
||
latitude,
|
||
location_text,
|
||
remark,
|
||
status,
|
||
created_at,
|
||
updated_at
|
||
) values (
|
||
(select coalesce(max(id), 0) + 1 from work_checkin),
|
||
#{userId},
|
||
current_date,
|
||
now(),
|
||
#{request.longitude},
|
||
#{request.latitude},
|
||
#{request.locationText},
|
||
#{request.remark},
|
||
'normal',
|
||
now(),
|
||
now()
|
||
)
|
||
</insert>
|
||
|
||
<update id="updateCheckIn">
|
||
update work_checkin
|
||
set checkin_time = now(),
|
||
longitude = #{request.longitude},
|
||
latitude = #{request.latitude},
|
||
location_text = #{request.locationText},
|
||
remark = #{request.remark},
|
||
status = 'normal',
|
||
updated_at = now()
|
||
where id = #{checkInId}
|
||
</update>
|
||
|
||
<select id="selectTodayReportId" resultType="java.lang.Long">
|
||
select id
|
||
from work_daily_report
|
||
where user_id = #{userId}
|
||
and report_date = current_date
|
||
order by submit_time desc nulls last, id desc
|
||
limit 1
|
||
</select>
|
||
|
||
<insert id="insertDailyReport">
|
||
insert into work_daily_report (
|
||
user_id,
|
||
report_date,
|
||
work_content,
|
||
tomorrow_plan,
|
||
source_type,
|
||
submit_time,
|
||
status,
|
||
created_at,
|
||
updated_at
|
||
) values (
|
||
#{userId},
|
||
current_date,
|
||
#{request.workContent},
|
||
#{request.tomorrowPlan},
|
||
#{request.sourceType},
|
||
now(),
|
||
'submitted',
|
||
now(),
|
||
now()
|
||
)
|
||
</insert>
|
||
|
||
<update id="updateDailyReport">
|
||
update work_daily_report
|
||
set work_content = #{request.workContent},
|
||
tomorrow_plan = #{request.tomorrowPlan},
|
||
source_type = #{request.sourceType},
|
||
submit_time = now(),
|
||
status = 'submitted',
|
||
updated_at = now()
|
||
where id = #{reportId}
|
||
</update>
|
||
|
||
<select id="selectTodoIdByBiz" resultType="java.lang.Long">
|
||
select id
|
||
from work_todo
|
||
where user_id = #{userId}
|
||
and biz_type = #{bizType}
|
||
and biz_id = #{bizId}
|
||
limit 1
|
||
</select>
|
||
|
||
<insert id="insertTodo">
|
||
insert into work_todo (
|
||
id,
|
||
user_id,
|
||
title,
|
||
biz_type,
|
||
biz_id,
|
||
due_date,
|
||
status,
|
||
priority,
|
||
created_at,
|
||
updated_at
|
||
) values (
|
||
#{todoId},
|
||
#{userId},
|
||
#{title},
|
||
#{bizType},
|
||
#{bizId},
|
||
current_date::timestamp + interval '1 day' + time '09:00',
|
||
'todo',
|
||
'medium',
|
||
now(),
|
||
now()
|
||
)
|
||
</insert>
|
||
|
||
<update id="updateTodo">
|
||
update work_todo
|
||
set title = #{title},
|
||
due_date = current_date::timestamp + interval '1 day' + time '09:00',
|
||
status = 'todo',
|
||
priority = 'medium',
|
||
updated_at = now()
|
||
where id = #{todoId}
|
||
</update>
|
||
|
||
</mapper>
|