package mysql
-------医疗消费分析------------
-- 饼状图 默认值 1:商品销售 2:挂号 3:住院每日消费 4.住院门诊
-- 41:住院门诊化验  42:住院门诊影像 43:住院门诊处方 44:住院门诊手术
-- 45:住院门诊处置  5:住院商品销售 6:普通门诊 61:普通门诊化验
-- 62:普通门诊影像 63:普通门诊处方 64:普通门诊手术 65:普通门诊处置
-- 7:美容 8:寄养每日消费 9:寄养商品销售 10:疫苗 11:驱虫 12:订单结算商品销售',
SELECT
    consumption.top_category_id,
    con._name,
    convert(ifnull(sum(consumption.quantity*consumption.payprice), 0) / 1000000, decimal(11,3))
FROM
    his_consumption consumption
    left JOIN his_bill bill ON consumption.his_bill_id = bill.id
    LEFT JOIN con_category  con ON consumption.top_category_id =  con.id
WHERE
    consumption.delflag = 0
  AND consumption.sys_hospital_id IN ( 0, 1 )
  AND bill.billtype  IN (1,4,6,7)
  and consumption.his_retreatbill_id = 0
  and consumption.commodity_ismeal = 0
  and consumption.meter_num = 0
  AND consumption.top_category_id IN ( 1,2,3,4,5,6,7,8,9,10)
GROUP BY
    consumption.top_category_id
-- 下方数据
SELECT
    consumption.top_category_id as top_id ,
    con._name as _name,
    convert(ifnull(sum(consumption.quantity*consumption.payprice), 0) / 1000000, decimal(11,3)) AS money,
			DATE_FORMAT(consumption.createtime,'%Y-%m-%d') AS _time
FROM
    his_consumption consumption
    left JOIN his_bill bill ON consumption.his_bill_id = bill.id
    LEFT JOIN con_category  con ON consumption.top_category_id =  con.id
WHERE
    consumption.delflag = 0
  AND consumption.sys_hospital_id IN ( 0, 1 )
  AND bill.billtype  IN (1,4,6,7)
  and consumption.his_retreatbill_id = 0
  and consumption.commodity_ismeal = 0
  and consumption.meter_num = 0
  AND consumption.top_category_id IN ( 1,2,3,4,5,6,7,9,10)
  AND 	DATE_FORMAT(consumption.createtime,'%Y-%m-%d') BETWEEN "2021-01-01" AND "2022-01-01"
GROUP BY
    consumption.top_category_id,DATE_FORMAT(consumption.createtime,'%Y-%m-%d')
---- 商品分析
---商品数量以及分类数量
-- 商品库存总量
select
    COUNT(quantity)
from
    g_stock
where
        delflag = 0
  and sys_hospital_id = 1
-- 服务商品总量
--商品总种类
select
    count( 0 ) as counts
FROM
    (
        SELECT
            commodity.id
        FROM
            g_stock stock
                LEFT JOIN con_commodity commodity ON stock.con_commodity_id = commodity.id
                LEFT JOIN con_category category ON category.id = commodity.con_category_id
        WHERE
                stock.delflag = 0
          AND stock.sys_hospital_id = 1
          AND commodity.top_category_id IN ( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12)
        GROUP BY
            commodity.id
    ) a
-- 普通商品
select
    count( 0 ) as counts
FROM
    (
        SELECT
            commodity.id
        FROM
            g_stock stock
                LEFT JOIN con_commodity commodity ON stock.con_commodity_id = commodity.id
                LEFT JOIN con_category category ON category.id = commodity.con_category_id
        WHERE
                stock.delflag = 0
          AND stock.sys_hospital_id = 1
          AND commodity.top_category_id IN ( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
        GROUP BY
            commodity.id
    ) a
-- 商品其他种类 在in中填写 种类id
select
    count( 0 ) as counts
FROM
    (
        SELECT
            commodity.id
        FROM
            g_stock stock
                LEFT JOIN con_commodity commodity ON stock.con_commodity_id = commodity.id
                LEFT JOIN con_category category ON category.id = commodity.con_category_id
        WHERE
                stock.delflag = 0
          AND stock.sys_hospital_id = 1
          AND commodity.top_category_id IN ( 11)
        GROUP BY
            commodity.id
    ) a
--
select
    count( 0 ) as counts
FROM
    (
        SELECT
            commodity.id
        FROM
            g_stock stock
                LEFT JOIN con_commodity commodity ON stock.con_commodity_id = commodity.id
                LEFT JOIN con_category category ON category.id = commodity.con_category_id
        WHERE
                stock.delflag = 0
          AND stock.sys_hospital_id = 1
          AND commodity.top_category_id IN ( 12)
        GROUP BY
            commodity.id
    ) a
--商品警惕
SELECT
    c.con_commodity_id,
    c.commodity_name,
    COUNT(0)
FROM
    his_consumption AS c
        LEFT JOIN his_bill AS b ON b.id = c.his_bill_id
        LEFT JOIN g_stock AS g ON g.con_commodity_id = c.con_commodity_id
WHERE
        c.delflag = 0
  AND c.sys_hospital_id = 1
  AND c.his_retreatbill_id = 0
  AND c.commodity_ismeal = 0
  AND c.meter_num = 0
  AND b.billtype IN ( 1, 4, 6, 7 )
  and DATE_FORMAT(b.paytime, "%Y-%m-%d") BETWEEN "2021-01-01"  AND "2022-01-01"
GROUP BY
    c.con_commodity_id

--商品销售分析
SELECT
    c.con_commodity_id,
    c.commodity_name,
    c.top_category_id,
    SUM(c.quantity) ,
    CONVERT (
                ifnull( sum( c.quantity * c.payprice ), 0 ) / 1000000,
                DECIMAL ( 11, 3 )),
    CONVERT (
                ifnull( sum( c.quantity * g.costmoney ), 0 ) / 1000000,
                DECIMAL ( 11, 3 ))
FROM
    his_consumption AS c
        LEFT JOIN his_bill AS b ON b.id = c.his_bill_id
        LEFT JOIN g_stock AS g ON g.con_commodity_id = c.con_commodity_id
WHERE
        c.delflag = 0
  AND c.sys_hospital_id = 1
  AND c.his_retreatbill_id = 0
  AND c.commodity_ismeal = 0
  AND c.meter_num = 0
  AND b.billtype IN ( 1, 4, 6, 7 )
GROUP BY
    c.con_commodity_id
---员工分析
-- 首先查出所有的已结订单
--B端小程序
--- 数据概览
-- 新增用户
select count(*) from his_consumer where delflag = 0 and DATE_FORMAT(addtime, ?) = ?
--新增会员(新增会员卡与次卡去重后就是新增会员)
--  新增的会员卡用户
SELECT
    c.id
FROM
    his_consumer c
        INNER JOIN his_card card ON c.id = card.his_consumer_id
        AND c.id not IN (select his_consumer_id  FROM  his_card WHERE delflag = 0 AND sys_hospital_id = 1 AND  createtime < "2021-01-01")
        AND c.id not IN (select his_consumer_id  FROM  his_metercard WHERE delflag = 0 AND sys_hospital_id = 1 AND  createtime < "2021-01-01")
-- 新增的次卡用户
SELECT
    c.id
FROM
    his_consumer c
        INNER JOIN his_metercard card ON c.id = card.his_consumer_id
        AND c.id not IN (select his_consumer_id  FROM  his_card WHERE delflag = 0 AND sys_hospital_id = 1 AND  createtime < "2021-01-01")
        AND c.id not IN (select his_consumer_id  FROM  his_metercard WHERE delflag = 0 AND sys_hospital_id = 1 AND  createtime < "2021-01-01")
--- 新客消费 老客消费  到店消费
--  新客
SELECT
    his_consumer_id,
    SUM( paymoney / 1000 ) price
FROM
    his_bill
WHERE
        delflag = 0
  AND his_consumer_id > 0
  AND billtype != 5
	AND billtype != 7
	AND sys_hospital_id = 1
	AND DATE_FORMAT( paytime, '%Y-%m-%d' ) = "2021-04-06"
	AND his_consumer_id NOT IN (
	SELECT
		his_consumer_id
	FROM
		his_bill
	WHERE
		delflag = 0
		AND his_consumer_id > 0
		AND billtype != 5
		AND billtype != 7
		AND sys_hospital_id = 1
		AND DATE_FORMAT( paytime, '%Y-%m-%d' ) < "2021-04-06"
	GROUP BY
		his_consumer_id
	)
GROUP BY
    DATE_FORMAT( paytime, '%Y-%m-%d' ),
    his_consumer_id
-- 老客
SELECT
    his_consumer_id,
    SUM( paymoney / 1000 ) price
FROM
    his_bill
WHERE
        delflag = 0
  AND his_consumer_id > 0
  AND billtype != 5
	AND billtype != 7
	AND sys_hospital_id = 1
	AND date_format( paytime, '%Y-%m-%d' ) = "2021-04-06"
	AND his_consumer_id IN (
	SELECT
		his_consumer_id
	FROM
		his_bill
	WHERE
		delflag = 0
		AND his_consumer_id > 0
		AND billtype != 5
		AND billtype != 7
		AND sys_hospital_id = 1
		AND DATE_FORMAT( paytime, '%Y-%m-%d' ) < "2021-04-06"
	GROUP BY
		his_consumer_id
	)
GROUP BY
    DATE_FORMAT( paytime, '%Y-%m-%d' ),
    his_consumer_id
-- 到店 为 新客加老客

-- 次卡分析
-- 次卡分析按时间与次卡id
-- 次卡充值的可以使用的次数SUM( meter ),与新开次卡张数 COUNT( 0 )
SELECT
    DATE_FORMAT( card.createtime, '%Y-%m-%d' ) ,
    card.con_metercardtype_id,
    type._name,
    ifnull( SUM( meter ), 0 ),
    COUNT( 0 )
FROM
    dbc_hueqzfp2kn.his_metercard card
    LEFT JOIN dbc_hueqzfp2kn.con_metercardtype type ON type.id = card.con_metercardtype_id
WHERE
    card.delflag = 0
  AND card.sys_hospital_id = 1
  AND DATE_FORMAT( card.createtime, '%Y-%m-%d' ) BETWEEN "2021-01-01"
  AND  "2022-01-01"
  AND 	card.con_metercardtype_id = 3
GROUP BY
    DATE_FORMAT( card.createtime, '%Y-%m-%d' )
-- 次卡分析之详细数据
SELECT
    DATE_FORMAT( meter_detail.eventtime, '%Y-%m-%d' ),
    SUM( CONVERT ( ifnull( meter_detail.money, 0 ), DECIMAL ( 11, 3 )) ) / 1000 AS money,
    meter_type.id
FROM
    dbc_hueqzfp2kn.his_metercard_detail AS meter_detail
        LEFT JOIN dbc_hueqzfp2kn.his_metercard AS meter ON meter_detail.his_metercard_id = meter.id
        LEFT JOIN dbc_hueqzfp2kn.con_metercardtype AS meter_type ON meter.con_metercardtype_id = meter_type.id
WHERE
        meter_detail.sys_hospital_id = 1
  AND meter_detail.eventtype = 2
  AND meter_detail.delflag = 0
  AND DATE_FORMAT( meter_detail.eventtime, '%Y-%m-%d' ) BETWEEN "2021-01-01"
    AND "2022-01-01"
  AND meter_type.id = 2
GROUP BY
    DATE_FORMAT( meter_detail.eventtime, '%Y-%m-%d' )
-- 数据概览
-- 开卡 充值 排行
-- 会员卡
SELECT
    card_type._name,
    ifnull(SUM(card_pay.money) / 1000,0)
FROM
    his_card card
    LEFT JOIN  con_cardtype card_type ON card_type.id  = card.con_cardtype_id
    LEFT JOIN his_card_detail card_detail ON. card_detail.his_card_id = card.id
    left JOIN his_card_detail_pay  card_pay ON card_pay.his_card_detail_id = card_detail.id
    AND card.sys_hospital_id = 1
GROUP BY card.con_cardtype_id

-- 次卡
SELECT
    card_type._name,
    ifnull(SUM(card_pay.money),0)  / 1000
FROM
    his_metercard card
    LEFT JOIN  con_metercardtype card_type ON card_type.id  = card.con_metercardtype_id
    LEFT JOIN his_metercard_detail card_detail ON. card_detail.his_metercard_id = card.id
    left JOIN his_metercard_detail_pay  card_pay ON card_pay.his_metercard_detail_id = card_detail.id
    AND card.sys_hospital_id = 1
GROUP BY card.con_metercardtype_id


-- 押金
SELECT
        SUM(p.money) / 1000
FROM
    his_deposit_detail d
        LEFT JOIN his_deposit_detail_pay p ON d.id = p.his_deposit_detail_id
WHERE
        d.sys_hospital_id = 1

-- 新客户初诊
SELECT
    COUNT(0)
FROM
    (SELECT
         id,
         DATE_FORMAT( eventtime, '%Y-%m-%d' ) AS _time
FROM
         his_clinic
         WHERE
	delflag = 0
	AND sys_hospital_id = 1
	AND DATE_FORMAT( eventtime, '%Y-%m-%d' ) BETWEEN "2021-09-01"
	AND "2021-10-10"
	AND group_id = 0
	AND his_consumer_id NOT IN (
	SELECT
		his_consumer_id
	FROM
		his_clinic
	WHERE
		delflag = 0
		AND sys_hospital_id = 1
		AND DATE_FORMAT( eventtime, '%Y-%m-%d' ) < "2021-09-10"
	)
     GROUP BY his_consumer_id) as a