forked from kidgrow-microservices-platform

houruijun
2020-10-22 e50e03e296a2456836afbb7f6bee461ee7bddd05
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/ProductOrderDetailMapper.xml
@@ -4,7 +4,7 @@
<mapper namespace="com.kidgrow.oprationcenter.mapper.ProductOrderDetailMapper">
    <!--定义查询列-->
    <sql id="Column_List">
      *
      DISTINCT *
   </sql>
    <!--sql查询片段-->
@@ -12,72 +12,351 @@
        <where>
            <!--查询条件自行添加-->
            is_del=0
                                    <if test="id != null and id !=''">
                and  id =  #{id}
            <if test="p.id != null and p.id !=''">
                and id = #{p.id}
            </if>
                                                <if test="orderId != null and orderId !=''">
                and  order_id =  #{orderId}
            <if test="p.orderId != null and p.orderId !=''">
                and order_id = #{p.orderId}
            </if>
                                                <if test="proId != null and proId !=''">
                and  pro_id =  #{proId}
            <if test="p.proId != null and p.proId !=''">
                and pro_id = #{p.proId}
            </if>
                                                <if test="proName != null and proName !=''">
                and  pro_name =  #{proName}
            <if test="p.proName != null and p.proName !=''">
                and pro_name = #{p.proName}
            </if>
                                                <if test="isShare != null and isShare !=''">
                and  is_share =  #{isShare}
            <if test="p.isShare != null and p.isShare !=''">
                and is_share = #{p.isShare}
            </if>
                                                <if test="isDel != null and isDel !=''">
                and  is_del =  #{isDel}
            <if test="p.isDel != null and p.isDel !=''">
                and is_del = #{p.isDel}
            </if>
                                                <if test="ailightCount != null and ailightCount !=''">
                and  ailight_count =  #{ailightCount}
            <if test="p.ailightCount != null and p.ailightCount !=''">
                and ailight_count = #{p.ailightCount}
            </if>
                                                <if test="recordCount != null and recordCount !=''">
                and  record_count =  #{recordCount}
            <if test="p.recordCount != null and p.recordCount !=''">
                and record_count = #{p.recordCount}
            </if>
                                                <if test="proBegintime != null and proBegintime !=''">
                and  pro_begintime =  #{proBegintime}
            <if test="p.proBegintime != null and p.proBegintime !=''">
                and pro_begintime = #{p.proBegintime}
            </if>
                                                <if test="proEndtime != null and proEndtime !=''">
                and  pro_endtime =  #{proEndtime}
            <if test="p.proEndtime != null and p.proEndtime !=''">
                and pro_endtime = #{p.proEndtime}
            </if>
                                                <if test="enabled != null and enabled !=''">
                and  enabled =  #{enabled}
            <if test="p.enabled != null and p.enabled !=''">
                and enabled = #{p.enabled}
            </if>
                                                <if test="createUserId != null and createUserId !=''">
                and  create_user_id =  #{createUserId}
            <if test="p.createUserId != null and p.createUserId !=''">
                and create_user_id = #{p.createUserId}
            </if>
                                                <if test="createUserName != null and createUserName !=''">
                and  create_user_name =  #{createUserName}
            <if test="p.createUserName != null and p.createUserName !=''">
                and create_user_name = #{p.createUserName}
            </if>
                                                <if test="updateUserId != null and updateUserId !=''">
                and  update_user_id =  #{updateUserId}
            <if test="p.updateUserId != null and p.updateUserId !=''">
                and update_user_id = #{p.updateUserId}
            </if>
                                                <if test="updateTime != null and updateTime !=''">
                and  update_time =  #{updateTime}
            <if test="p.updateTime != null and p.updateTime !=''">
                and update_time = #{p.updateTime}
            </if>
                                                <if test="updateUserName != null and updateUserName !=''">
                and  update_user_name =  #{updateUserName}
            <if test="p.updateUserName != null and p.updateUserName !=''">
                and update_user_name = #{p.updateUserName}
            </if>
                                                <if test="createTime != null and createTime !=''">
                and  create_time =  #{createTime}
            <if test="p.createTime != null and p.createTime !=''">
                and create_time = #{p.createTime}
            </if>
                                </where>
        </where>
    </sql>
    <!--定义根据-ProductOrderDetail当作查询条件返回对象-->
    <select id="findByObject"  resultType="com.kidgrow.oprationcenter.model.ProductOrderDetail">
        select <include refid="Column_List"/>
    <select id="findByObject" resultType="com.kidgrow.oprationcenter.model.ProductOrderDetail">
        select
        <include refid="Column_List"/>
        from product_order_detail
        <include refid="where"/>
        order by id desc
        limit 1
    </select>
    <!--定义根据-ProductOrderDetail当作查询条件返回对象集合-->
    <select id="findList" resultType="com.kidgrow.oprationcenter.model.ProductOrderDetail">
        select <include refid="Column_List"/>
        select
        <include refid="Column_List"/>
        from product_order_detail
        <include refid="where"/>
        order by id desc
    </select>
    <!--sql查询片段-->
    <sql id="wherelimit">
        <where>
            <!--查询条件自行添加-->
            DE.is_del=0
            <if test="p.id != null and p.id !=''">
                and id = #{p.id}
            </if>
            <if test="p.proType != null and p.proType !=''">
                and DE.pro_type = #{p.proType}
            </if>
            <if test="p.enabled != null and p.enabled !=''">
                and DE.enabled = #{p.enabled}
            </if>
            <if test="p.hospitalName != null and p.hospitalName !=''">
                and PRO.hospital_name like concat ('%',#{p.hospitalName},'%')
            </if>
            <if test="p.proName != null and p.proName !=''">
                and DE.pro_name like concat ('%',#{p.proName},'%')
            </if>
            <if test="p.createTime != null and p.createTime !='' and p.updateTime != null and p.updateTime !=''">
                and (DE.create_time between #{p.createTime} and #{p.updateTime})
            </if>
            <if test="p.startTime!= null and p.startTime !=''">
                and DE.create_time &gt;= #{p.startTime}
            </if>
            <if test="p.endTime!= null and p.endTime !=''">
                and DE.create_time &lt;= #{p.endTime}
            </if>
            <include refid="com.kidgrow.oprationcenter.mapper.SysProductMapper.Role_Organization"></include>
        </where>
    </sql>
    <select id="groupProductDetail" resultType="com.kidgrow.oprationcenter.vo.GroupProductDetail">
        select
        COUNT(DE.pro_id) pro_count,
        max(DE.pro_name) pro_name
        from product_order_detail AS DE
        <include refid="wherelimit"/>
        GROUP BY DE.pro_id
        order by pro_count desc
    </select>
    <select id="getTypeByUser" resultType="com.kidgrow.oprationcenter.vo.ProductOrderJoinDetail" parameterType="long">
        SELECT
        pod.*
        FROM
        `product_order` po
        INNER JOIN product_order_detail pod ON po.id = pod.order_id
        WHERE
        po.hospital_id = #{id}
        AND NOW() &gt;= pod.pro_begintime
        AND NOW() &lt;=pod.pro_endtime
        AND pod.enabled = 1
        AND pod.is_del = 0
        AND po.enabled = 1
        AND po.is_del = 0
        ORDER BY
        pod.pro_type desc,pod.pro_endtime desc
    </select>
    <!--sql查询片段-->
    <sql id="whereforall">
        <where>
            <!--查询条件自行添加-->
            DE.is_del=0 and DE.ailight_count>=0 and DE.pro_begintime &lt;=now() and DE.pro_endtime >=now() and
            DE.enabled=1
            <if test="p.hospitalId != null and p.hospitalId !=''">
                and PRO.hospital_id = #{p.hospitalId}
            </if>
        </where>
    </sql>
    <!--查询产品的购买记录-->
    <select id="findAllList" resultType="com.kidgrow.oprationcenter.vo.ProductOrderJoinDetail">
        SELECT
        DE.id,
        DE.ailight_count,
        DE.record_count,
        DE.is_share,
        DE.pro_begintime,
        DE.pro_endtime,
        PRO.hospital_Id,
        PRO.department_id,
        DE.pro_type
        FROM
        product_order_detail DE
        LEFT JOIN product_order PRO ON DE.order_id = PRO.id
        <include refid="whereforall"/>
        order by
        DE.pro_endtime ASC,
        DE.pro_begintime ASC,
        DE.id asc
    </select>
    <select id="getEnabledCount" resultType="int" parameterType="long">
        SELECT
   COUNT(*)
FROM
   product_order_record
WHERE
pro_type=0 AND is_del=0 AND enabled=1 AND
   order_id IN (
   SELECT
      id
   FROM
      product_order
WHERE
   department_id = #{departmentId})
    </select>
    <select id="oprationChart" resultType="int" parameterType="int">
        <if test="datatype==0">
            -- 试用审核
            SELECT count(*) FROM product_order_detail WHERE enabled=0 AND is_del=0 and pro_type=0
        </if>
        <if test="datatype==1">
            -- 套餐总量
            SELECT count(*) FROM sys_product WHERE is_del=0 and enabled=1
        </if>
        <if test="datatype==2">
            -- 未处理用户反馈
            SELECT count(*) FROM sys_feedback WHERE is_del=0 and enabled=0
        </if>
        <if test="datatype==3">
            -- 未处理数据需求
            SELECT count(*) FROM data_need WHERE is_del=0 and enabled=0
        </if>
    </select>
    <select id="productOrderChart" resultType="com.kidgrow.oprationcenter.vo.OrderChartVo">
        <if test="p.datatype==1">
            -- 按年统计
            SELECT COUNT(t.id) ccount,t.units FROM
            (select id,DATE_FORMAT(contract_time,'%Y/%m') units,contract_time from product_order
            <include refid="whereorderchart"/>
            ) AS t
            GROUP BY t.units
        </if>
        <if test="p.datatype==2">
            -- 按月统计
            SELECT COUNT(t.id) ccount,t.units FROM
            (select id,DATE_FORMAT(contract_time,'%Y') units,contract_time from product_order
            <include refid="whereorderchart"/>
            ) AS t
            GROUP BY t.units
        </if>
    </select>
    <sql id="whereorderchart">
        <where>
            <!--查询条件自行添加-->
            is_del=0 and enabled=1
            <if test="p.startTime != null and p.endTime !=''">
                and contract_time between #{p.startTime} and #{p.endTime}
            </if>
        </where>
    </sql>
    <select id="proCountChart" resultType="com.kidgrow.oprationcenter.vo.OrderChartVo">
        SELECT
   count( pro_id ) ccount,
   pro_name units
FROM
   product_order_record
WHERE
   is_del = 0
   AND enabled = 1
   AND pro_id IN ( SELECT id FROM sys_product WHERE is_del = 0 AND enabled = 1 )
GROUP BY
   pro_id,
   pro_name
ORDER BY
   ccount DESC
   LIMIT 10
    </select>
    <select id="departmentProductDetail" resultType="com.kidgrow.oprationcenter.model.ProductOrderDetail">
        SELECT
   *
FROM
   product_order_detail
WHERE
   order_id IN ( SELECT id FROM product_order WHERE hospital_id = #{hospitalId} AND department_id = #{departmentId} AND is_del = 0 AND enabled = 1 )
   AND is_del = 0
   AND enabled = 1
ORDER BY
   create_time DESC
    </select>
   <select id="getUserdProduct" resultType="int">
        SELECT
        sum(total)
        FROM
        (
        SELECT
        count(*) total
        FROM
        `product_order` order_order
        LEFT JOIN product_order_record record ON order_order.id = record.order_id
        WHERE
        order_order.hospital_id = #{hospitalId}
        AND order_order.department_id = #{departmentId}
        and  record.pro_id!=1000000000000000000
        AND order_order.is_del = 0
   AND order_order.enabled = 1
      AND record.is_del = 0
   AND record.enabled = 1
   AND record.pro_endtime>now()
        UNION ALL
        SELECT
        count(*) total
        FROM
        `product_order` order_order
        LEFT JOIN product_order_record record ON order_order.id = record.order_id
        WHERE
        order_order.hospital_id = #{hospitalId}
        AND record.is_share = 1
        and  record.pro_id!=1000000000000000000
        AND order_order.is_del = 0
   AND order_order.enabled = 1
      AND record.is_del = 0
   AND record.enabled = 1
   AND record.pro_endtime>now()
        ) cc
    </select>
    <select id="productEndList" resultType="com.kidgrow.oprationcenter.vo.ProductEndVo">
        SELECT
        id,
        pro_id,
        pro_begintime beginTime,
        MIN( T2.pro_endtime ) endTime,
        MIN( T2.ailight_count ) ailight_count,
        pro_type,
        pro_name,
        T2.hospital_id,
        hospital_name,
        T2.department_id,
        department_name
        FROM
        (
        SELECT
        details.id id,
        details.pro_id,
        details.pro_begintime pro_begintime,
        details.pro_endtime pro_endtime,
        details.ailight_count,
        details.pro_name pro_name,
        details.pro_type pro_type,
        orders.hospital_id hospital_id,
        orders.hospital_name hospital_name,
        orders.department_id department_id,
        orders.department_name department_name
        FROM
        product_order_detail details
        LEFT JOIN product_order orders ON orders.id = details.order_id
        WHERE
        details.is_del = 0
        AND details.enabled = 1
        AND orders.is_del = 0
        AND orders.enabled = 1
        AND pro_endtime BETWEEN now() AND DATE_ADD(NOW(), INTERVAL ${monthPar} MONTH)
        AND ailight_count BETWEEN 1 AND ${aiCountPar}
        AND pro_type=1
        ORDER BY
        ailight_count,
        pro_endtime
        ) AS T2
        GROUP BY
        department_id,
        hospital_id,
        department_name,
        hospital_name,
        id,
        pro_id,
        pro_type,
        pro_name,
        ailight_count,
        pro_endtime,
        pro_begintime
        ORDER BY
        ailight_count,
        pro_endtime,
        department_id
    </select>
</mapper>