协会管理系统
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.
 
 

94 lines
4.8 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="apelet.association.dao.BusinessOpportunitiesMapper">
<!--
按线索来源统计商机转化数据:
- oppCount 转化商机数(该来源关联出的商机总数)
- winOppCount 赢单商机数(stage_manifestation = '5')
- winOppAmount 赢单商机金额(stage_manifestation = '5' 的 predicted_price 合计)
- oppTransformAmount 商机转化金额(该来源关联出的所有商机 predicted_price 合计,与是否赢单无关)
商机通过 clue_id 关联线索表 member_clue,按线索来源 source 分组统计。
-->
<select id="selectOppTransformStatBySource"
resultType="apelet.association.vo.OppTransformStatVo">
SELECT
mc.source AS source,
COUNT(bo.id) AS oppCount,
SUM(CASE WHEN bo.stage_manifestation = '5' THEN 1 ELSE 0 END) AS winOppCount,
COALESCE(SUM(CASE WHEN bo.stage_manifestation = '5' THEN bo.predicted_price ELSE 0 END), 0) AS winOppAmount,
COALESCE(SUM(bo.predicted_price), 0) AS oppTransformAmount
FROM business_opportunities bo
INNER JOIN member_clue mc ON bo.clue_id = mc.id
WHERE bo.deleted_flag = 1
AND mc.deleted_flag = 1
GROUP BY mc.source
</select>
<!--
按线索来源统计"线索→商机→合同"成交数据:
- dealCount 已转商机成交数(报价单 status = '3' 的数量)
- dealAmount 已转商机成交金额(报价单 status = '3' 的 qty 合计)
说明:合同表 contract 暂无数据(报价单反写逻辑未做),
暂以报价单 status = '3'(通过,即已成合同)作为成交口径。
报价单 quotation 通过 srcbillid 关联商机 business_opportunities,
商机再通过 clue_id 关联线索表 member_clue,按线索来源 source 分组统计。
-->
<select id="selectDealStatBySource"
resultType="apelet.association.vo.DealTransformStatVo">
SELECT
mc.source AS source,
COUNT(DISTINCT q.id) AS dealCount,
COALESCE(SUM(q.qty), 0) AS dealAmount
FROM quotation q
INNER JOIN business_opportunities bo ON q.srcbillid = bo.id
INNER JOIN member_clue mc ON bo.clue_id = mc.id
WHERE q.status = '3'
AND q.deleted_flag = 1
AND bo.deleted_flag = 1
AND mc.deleted_flag = 1
GROUP BY mc.source
</select>
<!--
整体汇总统计商机转化数据(不分线索来源,返回单行):
- oppCount 转化商机数(关联到线索的商机总数)
- winOppCount 赢单商机数(stage_manifestation = '5')
- winOppAmount 赢单商机金额(stage_manifestation = '5' 的 predicted_price 合计)
- oppTransformAmount 商机转化金额(所有商机 predicted_price 合计,与是否赢单无关)
-->
<select id="selectOppSummary"
resultType="apelet.association.vo.OppTransformStatVo">
SELECT
COUNT(bo.id) AS oppCount,
COALESCE(SUM(CASE WHEN bo.stage_manifestation = '5' THEN 1 ELSE 0 END), 0) AS winOppCount,
COALESCE(SUM(CASE WHEN bo.stage_manifestation = '5' THEN bo.predicted_price ELSE 0 END), 0) AS winOppAmount,
COALESCE(SUM(bo.predicted_price), 0) AS oppTransformAmount
FROM business_opportunities bo
INNER JOIN member_clue mc ON bo.clue_id = mc.id
WHERE bo.deleted_flag = 1
AND mc.deleted_flag = 1
</select>
<!--
整体汇总统计"线索→商机→合同"成交数据(不分线索来源,返回单行):
- dealCount 已转商机成交数(报价单 status = '3' 的数量)
- dealAmount 已转商机成交金额(报价单 status = '3' 的 qty 合计)
成交口径同 selectDealStatBySource(合同表 contract 暂无数据,暂以报价单 status='3' 作为成交口径)。
-->
<select id="selectDealSummary"
resultType="apelet.association.vo.DealTransformStatVo">
SELECT
COUNT(DISTINCT q.id) AS dealCount,
COALESCE(SUM(q.qty), 0) AS dealAmount
FROM quotation q
INNER JOIN business_opportunities bo ON q.srcbillid = bo.id
INNER JOIN member_clue mc ON bo.clue_id = mc.id
WHERE q.status = '3'
AND q.deleted_flag = 1
AND bo.deleted_flag = 1
AND mc.deleted_flag = 1
</select>
</mapper>