郑永安
2023-06-19 2fcd97552d16718cc7997629fd637a73a5a4483f
src/main/java/com/gk/firework/Mapper/mybatis/SaleOrderDetailInfoMapper.xml
对比新文件
@@ -0,0 +1,1533 @@
<?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.gk.firework.Mapper.SaleOrderDetailInfoMapper">
    <resultMap id="BaseResultMap" type="com.gk.firework.Domain.SaleOrderDetailInfo">
        <!--          -->
        <id column="id" property="id" jdbcType="BIGINT"/>
        <result column="ordercode" property="ordercode" jdbcType="VARCHAR"/>
        <result column="itemcode" property="itemcode" jdbcType="VARCHAR"/>
        <result column="itemname" property="itemname" jdbcType="VARCHAR"/>
        <result column="directioncode" property="directioncode" jdbcType="VARCHAR"/>
        <result column="createdat" property="createdat" jdbcType="TIMESTAMP"/>
        <result column="createdby" property="createdby" jdbcType="VARCHAR"/>
        <result column="price" property="price" jdbcType="DECIMAL"/>
        <result column="specification" property="specification" jdbcType="VARCHAR"/>
    </resultMap>
    <resultMap id="SaleDetailVo" type="com.gk.firework.Domain.Vo.SaleDetailVo">
        <!--          -->
        <id column="id" property="id" jdbcType="BIGINT"/>
        <result column="ordercode" property="ordercode" jdbcType="VARCHAR"/>
        <result column="itemcode" property="itemcode" jdbcType="VARCHAR"/>
        <result column="itemname" property="itemname" jdbcType="VARCHAR"/>
        <result column="directioncode" property="directioncode" jdbcType="VARCHAR"/>
        <result column="createdat" property="createdat" jdbcType="TIMESTAMP"/>
        <result column="createdby" property="createdby" jdbcType="VARCHAR"/>
        <result column="price" property="price" jdbcType="DECIMAL"/>
        <result column="specification" property="specification" jdbcType="VARCHAR"/>
        <result column="returnflag" property="returnflag" jdbcType="TINYINT"/>
        <association property="product" javaType="com.gk.firework.Domain.ProductInfo">
            <id column="id" property="id" jdbcType="BIGINT" />
            <result column="name" property="name" jdbcType="VARCHAR" />
            <result column="directioncode" property="directionCode" jdbcType="VARCHAR" />
            <result column="purchaseprice" property="purchasePrice" jdbcType="DECIMAL" />
            <result column="saleprice" property="salePrice" jdbcType="DECIMAL" />
            <result column="manufacturer" property="manufacturer" jdbcType="VARCHAR" />
            <result column="specification" property="specification" jdbcType="VARCHAR" />
            <result column="explosivecontent" property="explosiveContent" jdbcType="DECIMAL" />
            <result column="type" property="type" jdbcType="VARCHAR" />
            <result column="secondarytype" property="secondaryType" jdbcType="VARCHAR" />
            <result column="level" property="level" jdbcType="VARCHAR" />
            <result column="productdate" property="productDate" jdbcType="TIMESTAMP" />
            <result column="boxnumber" property="boxNumber" jdbcType="INTEGER" />
            <result column="packing" property="packing" jdbcType="VARCHAR" />
            <result column="companynumber" property="companyNumber" jdbcType="VARCHAR" />
        </association>
        <association property="saleOrderInfo" javaType="com.gk.firework.Domain.SaleOrderInfo">
            <id column="id" property="id" jdbcType="BIGINT"/>
            <result column="code" property="code" jdbcType="VARCHAR"/>
            <result column="createdat" property="createdat" jdbcType="TIMESTAMP"/>
            <result column="createdby" property="createdby" jdbcType="VARCHAR"/>
            <result column="customer" property="customer" jdbcType="BIGINT"/>
            <result column="idcardnum" property="idcardnum" jdbcType="VARCHAR"/>
            <result column="salesperson" property="salesperson" jdbcType="VARCHAR"/>
            <result column="shop" property="shop" jdbcType="VARCHAR"/>
            <result column="boxnum" property="boxnum" jdbcType="DECIMAL"/>
            <result column="totalprice" property="totalprice" jdbcType="DECIMAL"/>
            <result column="pay" property="pay" jdbcType="DECIMAL"/>
            <result column="change" property="change" jdbcType="DECIMAL"/>
            <result column="type" property="type" jdbcType="TINYINT"/>
            <result column="returnflag" property="returnflag" jdbcType="TINYINT"/>
        </association>
    </resultMap>
    <sql id="Base_Column_List">
        <!--          -->
        id, ordercode, itemcode, itemname, directioncode, createdat, createdby, price, specification, returnflag
    </sql>
    <insert id="saveBatchOrderDetailInfo">
        insert
        into saleorderdetail
        <trim prefix="(" suffix=") values" suffixOverrides=",">
           ordercode,
           itemcode,
           itemname,
           directioncode,
           createdat,
           createdby,
           price,
           specification,
           returnflag,
        </trim>
        <foreach collection="list" item="item" separator=",">
            <trim prefix="(" suffix=")" suffixOverrides=",">
                #{item.ordercode},
                #{item.itemcode},
                #{item.itemname},
                #{item.directioncode},
                #{item.createdat},
                #{item.createdby},
                #{item.price},
                #{item.specification},
                #{item.returnflag},
            </trim>
        </foreach>
    </insert>
    <select id="selectDetailByIdCardNum" resultMap="BaseResultMap">
        select
        detail.directioncode,
        detail.itemname,
        saleorder.createdat,
        detail.price,
        detail.specification,
        customer.idcardnum
        from saleorderdetail as detail
        left join saleorder as saleorder on saleorder.`code` = detail.ordercode
        LEFT JOIN customer as customer ON saleorder.customer = customer.id
        <where>
            customer.idcardnum = #{idCardNum}
        </where>
    </select>
    <select id="selectDetailByIdCardNumAndDire" resultMap="BaseResultMap">
        select
        detail.directioncode,
        detail.itemname,
        saleorder.createdat,
        detail.price,
        detail.specification,
        customer.idcardnum
        from saleorderdetail as detail
        left join saleorder as saleorder on saleorder.`code` = detail.ordercode
        LEFT JOIN customer as customer ON saleorder.customer = customer.id
        <where>
            customer.idcardnum = #{idCardNum}
            and detail.returnflag = 0
            <if test="directionCode != null and directionCode != ''">
                and detail.directioncode = #{directionCode}
            </if>
        </where>
    </select>
    <select id="selectOrderByDirectionAndCustomer" resultMap="BaseResultMap">
        select
        detail.id,
        detail.ordercode,
        detail.itemcode,
        detail.itemname,
        detail.directioncode,
        detail.createdat,
        detail.createdby,
        detail.price,
        detail.specification,
        detail.returnflag
        from saleorder as saleorder
        left join saleorderdetail as detail on detail.ordercode = saleorder.code
        <where>
            detail.directioncode = #{directionCode}
            and customer = #{customer}
        </where>
    </select>
    <select id="selectDetailDataGridByIdCardNum" resultMap="BaseResultMap">
        select
        detail.directioncode,
        detail.itemname,
        saleorder.createdat,
        detail.price,
        detail.specification,
        customer.idcardnum
        from saleorderdetail as detail
        left join saleorder as saleorder on saleorder.`code` = detail.ordercode
        LEFT JOIN customer as customer ON saleorder.customer = customer.id
        <where>
            customer.idcardnum = #{condition.idCardNum}
            and detail.returnflag = 0
            <if test="condition.directionCode != null and condition.directionCode != ''">
                and detail.directioncode = #{condition.directionCode}
            </if>
        </where>
    </select>
    <select id="selectByCustomId" resultType="com.gk.firework.Domain.Vo.SaleDetailVo">
        select
        detail.directioncode,
        detail.itemname,
        detail.createdat,
        detail.price,
        detail.specification,
        detail.createdby,
        saleorder.shop
        from saleorderdetail as detail
        left join saleorder as saleorder on saleorder.`code` = detail.ordercode
        LEFT JOIN customer as customer ON saleorder.customer = customer.id
        <where>
            1=1
            <if test="condition.customid != null">
                and saleorder.customer = #{condition.customid}
            </if>
            <if test="condition.starttime != null">
                and detail.createdat &gt;= #{condition.starttime}
            </if>
            <if test="condition.endtime != null">
                and detail.createdat &lt;= #{condition.endtime}
            </if>
        </where>
    </select>
    <select id="getSaleNumByCondition" resultType="decimal">
        select sum(num) from (
        select
        (count(1)/product.boxnumber)as num
        from
        saleorderdetail as detail
        left join saleorder as sale on sale.`code` = detail.ordercode
        left join product on detail.itemcode = product.directioncode and product.isdel = 0
        <where>
            sale.createdat &gt;= #{condition.beginDate}
            and sale.createdat &lt;= #{condition.endDate}
            and sale.companynumber = #{condition.companyNumber}
            <if test="condition.itemCode != null">
                and product.directioncode = #{condition.itemCode}
            </if>
        </where>
        group by sale.companynumber,
                 product.directioncode
        )temp
    </select>
    <select id="getSaleDataInDays" resultType="java.util.Map">
        select
        days.day,
        ifnull(info.salenum,0) salenum
        from
        <foreach collection="days" item="item" open="(" close=")" separator="union all">
            SELECT date_sub(curdate(), interval #{item} day) as day
        </foreach>
        as days
        left join (
            select
            date_format(detail.createdat,"%Y-%m-%d") saledate,
            count(0) salenum
            from
            saleorderdetail as detail
            <where>
                <if test="starttime !=null">
                   and  detail.createdat &gt; #{starttime}
                </if>
                <if test="endtime !=null">
                   and  detail.createdat &lt; #{endtime}
                </if>
            </where>
            group by DATE_FORMAT(detail.createdat,"%Y-%m-%d")
        ) as info on info.saledate = days.day
        order by days.day
    </select>
    <select id="getSaleDataAreaInDays" resultType="java.util.Map">
        select
        count(0) salenum,
        e.city
        from saleorder as saleorder
        LEFT JOIN saleorderdetail as detail on detail.ordercode = saleorder.code
        left join enterprise as e on e.enterprisenumber = saleorder.companynumber and e.validflag =1
        <where>
            e.province = #{params.province}
            <if test="starttime !=null">
                and  detail.createdat &gt; #{starttime}
            </if>
            <if test="endtime !=null">
                and  detail.createdat &lt; #{endtime}
            </if>
        </where>
        group by e.city
    </select>
    <select id="getSaleDataProductTypeInDays" resultType="java.util.Map">
        select
        count(0) salenum,
        product.type producttype
        from saleorderdetail as detail
        left join product as product on product.directioncode = detail.itemcode and  product.isdel = 0
        <if test="starttime !=null">
            and  detail.createdat &gt; #{starttime}
        </if>
        <if test="endtime !=null">
            and  detail.createdat &lt; #{endtime}
        </if>
        group by product.type
    </select>
    <select id="getSaleDataInYear" resultType="java.util.Map">
        select  months.month, count(detail.month) as salenum
        from
        (select 1 as month union all
        select 2 union all
        select 3 union all
        select 4 union all
        select 5 union all
        select 6 union all
        select 7 union all
        select 8 union all
        select 9 union all
        select 10 union all
        select 11 union all
        select 12) as months
        left join
        (SELECT
            month(detail.createdat) as month
            from saleorderdetail as detail
            left join saleorder as so on so.code = detail.ordercode
            left join enterprise as e on e.enterprisenumber = so.companynumber
            where year(detail.createdat) = #{year}
            <if test="province != null and province != ''">
                and e.province = #{province}
            </if>
            <if test="city != null and city != ''">
                and e.city = #{city}
            </if>
            ) as detail on months.month = detail.month
        group by months.month
        order by months.month
    </select>
    <select id="getInboundInYear" resultType="java.util.Map">
        select months.month,
        ifnull(detail.num,0) num
        from (
            select 1 as month union all
                    select 2 union all
                    select 3 union all
                    select 4 union all
                    select 5 union all
                    select 6 union all
                    select 7 union all
                    select 8 union all
                    select 9 union all
                    select 10 union all
                    select 11 union all
                    select 12) as months
         left join (
                    select
                    month(entryorder.entrydate) month,
                    sum(entryorder.num) num
                    from entryorder as entryorder
                    left join enterprise as e on e.enterprisenumber = entryorder.companynumber
                    where year(entryorder.entrydate) = #{year}
                    <if test="province != null and province != ''">
                        and e.province = #{province}
                    </if>
                    <if test="city != null and city != ''">
                        and e.city = #{city}
                    </if>
                    group by month(entryorder.entrydate) ) as detail  on  months.month = detail.month
        order by months.month
    </select>
    <select id="getSaleNumThisDay" resultType="java.lang.Integer">
        select count(0)
        from saleorderdetail as detail
        left join saleorder as so on so.code = detail.ordercode
        where
        so.createdat BETWEEN CONCAT(CURDATE(),' 00:00:00') AND CONCAT(CURDATE(),' 23:59:59')
    </select>
    <select id="getSaleNumThisYear" resultType="java.lang.Integer">
        select count(0)
        from saleorderdetail as detail
        left join saleorder as so on so.code = detail.ordercode
        where
        so.createdat &gt; STR_TO_DATE(CONCAT(year(now()),'-01-01 ','00:00:00'),'%Y-%m-%d %H:%i:%s')
        and so.createdat &lt; now()
    </select>
    <select id="getPurchasersNum" resultType="java.lang.Integer">
        select count(0)
        from (
            select so.customer
            from saleorder as so
            where so.createdat &gt; STR_TO_DATE(CONCAT(year(now()),'-01-01 ','00:00:00'),'%Y-%m-%d %H:%i:%s')
            and so.createdat &lt; now()
            group by so.customer)
        as tmp
    </select>
    <select id="selectCityInAndOut" resultType="java.util.Map">
        select
        indata.name,
        indata.innum,
        saledata.salenum,
        deliverydata.outnum,
        ifnull(salesdata.sales,0)/10000 sales
        from
        (
                select
                citys.name,round(sum(if(citysale.num is null,0,num)),2) salenum
                from (
                        select *
                        from district
                        where parentcode =(
                        select district.code
                        from district as  district
                        where district.name = #{params.province}
                        and type = 1)
                        and type =2
                    ) as citys
                left join (
                SELECT
                e.city,sod.itemcode ,count( 1 ) /p.boxnumber num
                FROM
                saleorderdetail AS sod
                LEFT JOIN saleorder AS so ON so.`code` = sod.ordercode
                LEFT JOIN product AS p ON p.directioncode = sod.itemcode and p.isdel = 0
                LEFT JOIN enterprise AS e ON so.companynumber = e.enterprisenumber
                where
                e.enterprisestatus = 'ON'
                and e.validflag = 1
                <if test="params.starttime != null and params.starttime != ''">
                    and sod.createdat &gt;= #{params.starttime}
                </if>
                <if test="params.endtime != null and params.endtime != ''">
                    and sod.createdat &lt; #{params.endtime}
                </if>
                <if test="params.safetysupervision != null and params.safetysupervision != ''">
                    and e.safetysupervision = #{params.safetysupervision }
                </if>
                GROUP BY
                so.companynumber,sod.itemcode
        ) as citysale
        on citys.name = citysale.city
        group by citys.name
        )
        as saledata
        left join (
                select
                citys.name,round(sum(if(cityentry.entrynum is null,0,cityentry.entrynum)),2) innum
                from (
                            select *
                            from district
                            where parentcode =(
                            select district.code
                            from district as  district
                            where district.name =  #{params.province}
                            and type = 1)
                            and type =2
                ) as citys
                left join (
                select
                e.city,SUM( ed.num )/ p.boxnumber AS entrynum
                FROM
                entrydetail AS ed
                LEFT JOIN entryorder AS eo ON eo.`code` = ed.entryorder
                LEFT JOIN product AS p ON p.directioncode = ed.itemcode and p.isdel = 0
                LEFT JOIN enterprise AS e ON eo.companynumber = e.enterprisenumber
                where
                e.enterprisestatus = 'ON'
                and e.validflag = 1
                <if test="params.starttime != null and params.starttime != ''">
                    and eo.createddate &gt;= #{params.starttime}
                </if>
                <if test="params.endtime != null and params.endtime != ''">
                    and eo.createddate &lt; #{params.endtime}
                </if>
                <if test="params.safetysupervision != null and params.safetysupervision != ''">
                    and e.safetysupervision = #{params.safetysupervision }
                </if>
                GROUP BY
                eo.companynumber,ed.itemcode
        )
        as cityentry
        on citys.name =  cityentry.city
        group by citys.name)
        as indata on indata.name = saledata.name
        left join (
        select
        citys.name,round(ifnull(sum(citydelivery.deliverynum),0),2) as outnum
        from    (
            select *
            from district
            where parentcode =(
            select district.code
            from district as  district
            where district.name =  #{params.province}
            and type = 1)
            and type =2
        ) as citys
        left join (
         select e.city,sum(detail.num)/product.boxnumber as deliverynum
         from deliverydetail as detail
         left join deliveryorder as deliveryorder on deliveryorder.ordercode =  detail.deliverycode
         left join product as product ON detail.itemcode = product.directioncode and product.isdel = 0
         left join enterprise as e on e.enterprisenumber = deliveryorder.companynumber
         where
           e.enterprisestatus = 'ON'
           and e.validflag = 1
        <if test="params.starttime != null and params.starttime != ''">
            and detail.createat &gt;= #{params.starttime}
        </if>
        <if test="params.endtime != null and params.endtime != ''">
            and detail.createat &lt; #{params.endtime}
        </if>
        <if test="params.safetysupervision != null and params.safetysupervision != ''">
            and e.safetysupervision = #{params.safetysupervision }
        </if>
        group by
        deliveryorder.companynumber,detail.itemcode
        ) as citydelivery on citydelivery.city = citys.name
        group by citys.name
        ) as deliverydata on deliverydata.name = indata.name
        left join
     (
          select e.city,sum(saleorder.totalprice)  sales
          from saleorder as saleorder
          left join enterprise as e on e.enterprisenumber = saleorder.companynumber
          where
            e.enterprisestatus = 'ON'
            and e.validflag = 1
            <if test="params.starttime != null and params.starttime != ''">
                and saleorder.createdat &gt;= #{params.starttime}
            </if>
            <if test="params.endtime != null and params.endtime != ''">
                and saleorder.createdat &lt; #{params.endtime}
            </if>
            <if test="params.safetysupervision != null and params.safetysupervision != ''">
                and e.safetysupervision = #{params.safetysupervision }
            </if>
            group by e.city
        ) as salesdata on salesdata.city = indata.name
   order by indata.innum desc,saledata.salenum desc
    </select>
    <select id="getGenderSale" resultType="java.util.Map">
        select
        genders.gender,
        ifnull(saleinfo.sum,0) sum
        from (
            select '男' as gender
            union
            select '女'
        )   as genders
        left join (
            select  case customer.gender when 1 then '男' else '女' end gender,count(0) sum
            from saleorder as so
            left join saleorderdetail as detail on  so.code = detail.ordercode
            left join customer as customer on customer.id = so.customer
            left join enterprise as e on e.enterprisenumber = so.companynumber
            left join product as product on product.directioncode = detail.itemcode and product.isdel = 0
            <where>
                e.validflag = 1
                and e.enterprisestatus = 'ON'
                and customer.gender != 0
                <if test="params.enterprisename != null and params.enterprisename != ''">
                    and e.enterprisename like concat("%",#{params.enterprisename},"%")
                </if>
                <if test="params.productname != null and params.productname != ''">
                    and detail.itemname like concat("%",#{params.productname},"%")
                </if>
                <if test="params.producttype != null and params.producttype != ''">
                    and product.type = #{params.producttype}
                </if>
                <if test="params.secondarytype != null and params.secondarytype != ''">
                    and product.secondarytype = #{params.secondarytype}
                </if>
                <if test="params.province != null and params.province != ''">
                    and e.province = #{params.province}
                </if>
                <if test="params.city != null and params.city != ''">
                    and e.city = #{params.city}
                </if>
                <if test="params.district != null and params.district != ''">
                    and e.district = #{params.district}
                </if>
                <if test="params.street!= null and params.street != ''">
                    and e.street = #{params.street}
                </if>
                <if test="params.committee != null and params.committee != ''">
                    and e.committee = #{params.committee}
                </if>
                <if test="params.starttime != null and params.starttime != ''">
                    and detail.createdat &gt;= #{params.starttime}
                </if>
                <if test="params.endtime != null and params.endtime != ''">
                    and detail.createdat &lt; #{params.endtime}
                </if>
            </where>
            group by customer.gender)  as saleinfo on saleinfo.gender = genders.gender
    </select>
    <select id="getRaceSale" resultType="java.util.Map">
        select
        customer.nation,
        count(0) sum
        from saleorder as so
        left join saleorderdetail as detail on  so.code = detail.ordercode
        left join customer as customer on customer.id = so.customer
        left join enterprise as e on e.enterprisenumber = so.companynumber
        left join product as product on product.directioncode = detail.itemcode and product.isdel = 0
        where 1 = 1
        and e.validflag = 1
        and e.enterprisestatus = 'ON'
        <choose>
            <when test="params.enterprisenumber != null and params.enterprisenumber !=''">
                and e.enterprisenumber = #{params.enterprisenumber}
            </when>
            <otherwise>
                <if test="params.province != null and params.province != ''">
                    and e.province = #{params.province}
                </if>
                <if test="params.city != null and params.city != ''">
                    and e.city = #{params.city}
                </if>
                <if test="params.district != null and params.district != ''">
                    and e.district = #{params.district}
                </if>
                <if test="params.street != null and params.street != ''">
                    and e.street = #{params.street}
                </if>
                <if test="params.committee != null and params.committee != ''">
                    and e.committee = #{params.committee}
                </if>
            </otherwise>
        </choose>
        <if test="params.enterprisename != null and params.enterprisename != ''">
            and e.enterprisename like concat("%",#{params.enterprisename},"%")
        </if>
        <if test="params.productname != null and params.productname != ''">
            and detail.itemname like concat("%",#{params.productname},"%")
        </if>
        <if test="params.producttype != null and params.producttype != ''">
            and product.type = #{params.producttype}
        </if>
        <if test="params.secondarytype != null and params.secondarytype != ''">
            and product.secondarytype = #{params.secondarytype}
        </if>
        <if test="params.provinceFilter != null and params.provinceFilter != ''">
            and e.province = #{params.province}
        </if>
        <if test="params.cityFilter != null and params.cityFilter != ''">
            and e.city = #{params.city}
        </if>
        <if test="params.districtFilter != null and params.districtFilter != ''">
            and e.district = #{params.district}
        </if>
        <if test="params.streetFilter!= null and params.streetFilter != ''">
            and e.street = #{params.street}
        </if>
        <if test="params.committeeFilter != null and params.committeeFilter != ''">
            and e.committee = #{params.committee}
        </if>
        <if test="params.starttime != null and params.starttime != ''">
            and detail.createdat &gt;= #{params.starttime}
        </if>
        <if test="params.endtime != null and params.endtime != ''">
            and detail.createdat &lt; #{params.endtime}
        </if>
        group by customer.nation
    </select>
    <select id="getSaleInfoByGeneration" resultType="java.lang.Integer">
        select  count(0)
         from saleorder as so
        left join saleorderdetail as detail on  so.code = detail.ordercode
        left join customer as customer on customer.id = so.customer
        left join enterprise as e on e.enterprisenumber = so.companynumber
        left join product as product on product.directioncode = detail.itemcode and product.isdel = 0
        where  1 = 1
        and e.validflag = 1
        and e.enterprisestatus = 'ON'
        <choose>
            <when test="params.enterprisenumber != null and params.enterprisenumber !=''">
                and e.enterprisenumber = #{params.enterprisenumber}
            </when>
            <otherwise>
                <if test="params.province != null and params.province != ''">
                    and e.province = #{params.province}
                </if>
                <if test="params.city != null and params.city != ''">
                    and e.city = #{params.city}
                </if>
                <if test="params.district != null and params.district != ''">
                    and e.district = #{params.district}
                </if>
                <if test="params.street != null and params.street != ''">
                    and e.street = #{params.street}
                </if>
                <if test="params.committee != null and params.committee != ''">
                    and e.committee = #{params.committee}
                </if>
            </otherwise>
        </choose>
        and (YEAR (now()) - YEAR (substring(customer.idcardnum, 7, 8))) &gt;= #{params.head}
        <if test="params.tail != null and params.tail != ''">
        and (YEAR (now()) - YEAR (substring(customer.idcardnum, 7, 8))) &lt; #{params.tail}
        </if>
        <if test="params.enterprisename != null and params.enterprisename != ''">
            and e.enterprisename like concat("%",#{params.enterprisename},"%")
        </if>
        <if test="params.productname != null and params.productname != ''">
            and detail.itemname like concat("%",#{params.productname},"%")
        </if>
        <if test="params.producttype != null and params.producttype != ''">
            and product.type = #{params.producttype}
        </if>
        <if test="params.secondarytype != null and params.secondarytype != ''">
            and product.secondarytype = #{params.secondarytype}
        </if>
        <if test="params.provinceFilter != null and params.provinceFilter != ''">
            and e.province = #{params.province}
        </if>
        <if test="params.cityFilter != null and params.cityFilter != ''">
            and e.city = #{params.city}
        </if>
        <if test="params.districtFilter != null and params.districtFilter != ''">
            and e.district = #{params.district}
        </if>
        <if test="params.streetFilter!= null and params.streetFilter != ''">
            and e.street = #{params.street}
        </if>
        <if test="params.committeeFilter != null and params.committeeFilter != ''">
            and e.committee = #{params.committee}
        </if>
        <if test="params.starttime != null and params.starttime != ''">
            and detail.createdat &gt;= #{params.starttime}
        </if>
        <if test="params.endtime != null and params.endtime != ''">
            and detail.createdat &lt; #{params.endtime}
        </if>
    </select>
    <select id="selectOneByDirectionCode" resultMap="SaleDetailVo">
        select detail.*,so.*,product.*
        from saleorderdetail as detail
        left join saleorder as so on so.code = detail.ordercode
        left join product as product on product.directioncode = detail.itemcode and product.isdel = 0
        where detail.directioncode = #{directionCode}
        and detail.returnflag = 0
    </select>
    <select id="selectOrderByDirectionReturnflag" resultType="com.gk.firework.Domain.SaleOrderDetailInfo">
        select
        detail.id,
        detail.ordercode,
        detail.itemcode,
        detail.itemname,
        detail.directioncode,
        detail.createdat,
        detail.createdby,
        detail.price,
        detail.specification,
        detail.returnflag
        from saleorder as saleorder
        left join saleorderdetail as detail on detail.ordercode = saleorder.code
        <where>
            detail.directioncode = #{directionCode}
            and detail.returnflag = #{returnflag}
            <if test="datetime != null">
                and saleorder.createdat &lt;#{datetime}
            </if>
        </where>
        group by createdat asc
        limit 1
    </select>
    <select id="selectSaleNumInfo" resultType="com.gk.firework.Domain.Vo.SaleNumVo">
        select
        ifnull(round(count(0)/product.boxnumber,2),0 )num,
        detail.itemcode,
        product.*,
        enterprise.enterprisenumber,
        enterprise.enterprisename
        from saleorderdetail as detail
        left join saleorder as saleorder on saleorder.code = detail.ordercode
        left join product as product on product.directioncode = detail.itemcode and product.isdel = 0
        left join enterprise as enterprise on enterprise.enterprisenumber = saleorder.companynumber
        <where>
            <if test="params.enterprisename != null and params.enterprisename != '' ">
                and enterprise.enterprisename = #{params.enterprisename}
            </if>
            <if test="params.enterprisenumber != null and params.enterprisenumber != '' ">
                and saleorder.companynumber = #{params.enterprisename}
            </if>
            <if test="params.starttime != null and params.starttime != '' ">
                and detail.createdat &gt;= #{params.starttime}
            </if>
            <if test="params.endtime != null and params.endtime != '' ">
                and detail.createdat &lt;= #{params.endtime}
            </if>
        </where>
        group by detail.itemcode
    </select>
    <select id="selectSaleNumInfoDetail" resultType="com.gk.firework.Domain.SaleOrderDetailInfo">
        select detail.*
        from saleorderdetail as detail
        left join saleorder as saleorder on saleorder.code= detail.ordercode
        left join enterprise as enterprise on enterprise.enterprisenumber = saleorder.companynumber
        <where>
            <if test="params.enterprisename != null and params.enterprisename != '' ">
                and enterprise.enterprisename = #{params.enterprisename}
            </if>
            <if test="params.enterprisenumber != null and params.enterprisenumber != '' ">
                and saleorder.companynumber = #{params.enterprisename}
            </if>
            <if test="params.starttime != null and params.starttime != '' ">
                and detail.createdat &gt;= #{params.starttime}
            </if>
            <if test="params.endtime != null and params.endtime != '' ">
                and detail.createdat &lt;= #{params.endtime}
            </if>
            <if test="params.itemcode != null and params.itemcode != '' ">
                and detail.itemcode = #{params.itemcode}
            </if>
        </where>
        order by detail.createdat desc
    </select>
    <select id="selectCityInAndOutDetail" resultType="java.util.Map">
        select
        e.enterprisename,
        round(ifnull(saledata.salenum ,0),2)   salenum,
        round(ifnull(entrydata.entrynum,0),2)  innum,
        round(ifnull(deliverydata.deliverynum ,0),2) outnum,
        ifnull(saleInfo.sales/10000,0)  sales
        from (
            select
            enterprisename,enterprisenumber
            from enterprise  as e
            where  e.validflag = 1
            and e.enterprisestatus = 'ON'
            and e.city = #{params.city}
            <if test="params.safetysupervision != null and params.safetysupervision != ''">
                and e.safetysupervision = #{params.safetysupervision }
            </if>
        ) as e
        left join (
        select
        saledata.enterprisename,sum(saledata.num) salenum
        from(
        SELECT
            e.enterprisename,so.companynumber ,sod.itemcode ,count( 1 ) /p.boxnumber num
            FROM
            saleorderdetail AS sod
            LEFT JOIN saleorder AS so ON so.`code` = sod.ordercode
            LEFT JOIN product AS p ON p.directioncode = sod.itemcode and p.isdel = 0
            LEFT JOIN enterprise AS e ON so.companynumber = e.enterprisenumber
            where
            e.enterprisestatus = 'ON'
            and e.validflag = 1
            and city = #{params.city}
            <if test="params.starttime != null and params.starttime != ''">
                and sod.createdat &gt;= #{params.starttime}
            </if>
            <if test="params.endtime != null and params.endtime != ''">
                and sod.createdat &lt; #{params.endtime}
            </if>
            <if test="params.safetysupervision != null and params.safetysupervision != ''">
                and e.safetysupervision = #{params.safetysupervision }
            </if>
            GROUP BY
            so.companynumber ,sod.itemcode
            ) as saledata
            group by saledata.companynumber
        ) as saledata on saledata.enterprisename = e.enterprisename
        left join (
        select
        entrydata.enterprisename , sum(entrydata.entrynum) entrynum
        from (
        select
        e.enterprisename,eo.companynumber,ed.itemcode,SUM( ed.num )/ p.boxnumber AS entrynum
        FROM
        entrydetail AS ed
        LEFT JOIN entryorder AS eo ON eo.`code` = ed.entryorder
        LEFT JOIN product AS p ON p.directioncode = ed.itemcode and p.isdel = 0
        LEFT JOIN enterprise AS e ON eo.companynumber = e.enterprisenumber
        where
        e.enterprisestatus = 'ON'
        and e.validflag = 1
        and city = #{params.city}
        <if test="params.starttime != null and params.starttime != ''">
            and eo.createddate &gt;= #{params.starttime}
        </if>
        <if test="params.endtime != null and params.endtime != ''">
            and eo.createddate &lt; #{params.endtime}
        </if>
        <if test="params.safetysupervision != null and params.safetysupervision != ''">
            and e.safetysupervision = #{params.safetysupervision }
        </if>
        GROUP BY
        eo.companynumber,ed.itemcode
        ) as entrydata
        group by entrydata.companynumber
        ) as entrydata  on entrydata.enterprisename = e.enterprisename
        left join (
        select
        deliverydata.enterprisename,sum(deliverydata.deliverynum) deliverynum
        from (
        select e.enterprisename,deliveryorder.companynumber,detail.itemcode,sum(detail.num)/product.boxnumber as deliverynum
        from deliverydetail as detail
        left join deliveryorder as deliveryorder on deliveryorder.ordercode =  detail.deliverycode
        left join product as product ON detail.itemcode = product.directioncode and product.isdel = 0
        left join enterprise as e on e.enterprisenumber = deliveryorder.companynumber
        where
        e.enterprisestatus = 'ON'
        and e.validflag = 1
        and e.city = #{params.city}
        <if test="params.starttime != null and params.starttime != ''">
            and detail.createat &gt;= #{params.starttime}
        </if>
        <if test="params.endtime != null and params.endtime != ''">
            and detail.createat &lt; #{params.endtime}
        </if>
        <if test="params.safetysupervision != null and params.safetysupervision != ''">
            and e.safetysupervision = #{params.safetysupervision }
        </if>
        group by
        deliveryorder.companynumber,detail.itemcode
        ) as deliverydata
        group by deliverydata.companynumber
        )  as  deliverydata on deliverydata.enterprisename = e.enterprisename
        left join (
        select e.enterprisename,sum(saleorder.totalprice)  sales
        from saleorder as saleorder
        left join enterprise as e on e.enterprisenumber = saleorder.companynumber
        where
        e.enterprisestatus = 'ON'
        and e.validflag = 1
        and e.city = #{params.city}
        <if test="params.starttime != null and params.starttime != ''">
            and saleorder.createdat &gt;= #{params.starttime}
        </if>
        <if test="params.endtime != null and params.endtime != ''">
            and saleorder.createdat &lt; #{params.endtime}
        </if>
        <if test="params.safetysupervision != null and params.safetysupervision != ''">
            and e.safetysupervision = #{params.safetysupervision }
        </if>
        group by saleorder.companynumber
        )  as saleInfo on saleInfo.enterprisename = e.enterprisename
    </select>
    <select id="selectCityTypeSale" resultType="java.util.Map">
            select
            citys.name,
            ifnull(allperson.num,0) personnum
            <foreach collection="list" item="item" index="index">
                ,round(ifnull(num_${item},0),2) num_${item}
            </foreach>,
            round(
            <trim suffixOverrides="+">
                <foreach collection="list" item="item" index="index">
                    ifnull(alldata.num_${item},0) +
                </foreach>
            </trim>
            ,2) totalcol
            from (
                select district.name
                from district
                where parentcode =(
                select district.code
                from district as district
                where district.name = #{params.province}
                and type = 1)
                and type =2
            ) as citys
            left join (
                    select
                    tmptmptmp.city
                    <foreach collection="list" item="item" index="index">
                        ,MAX(
                        CASE tmptmptmp.type
                        WHEN #{item} THEN
                        tmptmptmp.num
                        ELSE
                        0
                        END
                        ) num_${item}
                    </foreach>
                    from (
                    select
                    tmptmp.city,tmptmp.type,sum(tmptmp.num) num
                    from
                    (
                    SELECT
                    e.city,so.companynumber,p.type,count( 1 ) /p.
                    boxnumber num
                    FROM
                    saleorderdetail AS sod
                    LEFT JOIN
                    saleorder AS so ON so.`code` = sod.ordercode
                    LEFT JOIN product AS p ON p.directioncode = sod.itemcode
                    LEFT JOIN
                    enterprise AS e ON so.companynumber = e.enterprisenumber
                    where
                    e.
                    enterprisestatus = 'ON'
                    and e.validflag=1
                    and p.isdel = 0
                    and e.validflag = 1
                    <if test="params.starttime != null and params.starttime != ''">
                        and so.createdat &gt;= #{params.starttime}
                    </if>
                    <if test="params.endtime != null and params.endtime != ''">
                        and so.createdat &lt; #{params.endtime}
                    </if>
                    <if test="params.safetysupervision != null and params.safetysupervision != ''">
                        and e.safetysupervision = #{params.safetysupervision }
                    </if>
                    <if test="params.enterprisename != null and params.enterprisename != ''">
                        and e.enterprisename like concat("%",#{params.enterprisename },"%")
                    </if>
                    GROUP BY
                    so.companynumber,sod.itemcode
                    ) as tmptmp
                    group by tmptmp.city,tmptmp.type
                    ) as tmptmptmp
                    group by tmptmptmp.city
            ) as alldata
            on citys.name = alldata.city
            left join (
                select cc.city,count(0) num
                from (
                select e.city,so.customer
                from saleorder as so
                left join enterprise AS e ON so.companynumber = e.enterprisenumber
                where
                e.enterprisestatus = 'ON'
                AND e.validflag = 1
                <if test="params.starttime != null and params.starttime != ''">
                    and so.createdat &gt;= #{params.starttime}
                </if>
                <if test="params.endtime != null and params.endtime != ''">
                    and so.createdat &lt; #{params.endtime}
                </if>
                <if test="params.safetysupervision != null and params.safetysupervision != ''">
                    and e.safetysupervision = #{params.safetysupervision }
                </if>
                <if test="params.enterprisename != null and params.enterprisename != ''">
                    and e.enterprisename like concat("%",#{params.enterprisename },"%")
                </if>
                group by so.customer
                ) as cc
                group by cc.city
        ) as allperson on citys.name = allperson.city
    </select>
    <select id="selectEnterpriseTypeSale" resultType="java.util.Map">
        select
        alldata.*,
        ifnull(allperson.personnum,0) personnum,
        round(
        <trim suffixOverrides="+">
            <foreach collection="list" item="item" index="index">
                alldata.num_${item} +
            </foreach>
        </trim>
        ,2) totalcol
        from (
        select
        tmptmptmp.city name,
        tmptmptmp.enterprisename
        <foreach collection="list" item="item" index="index">
            ,MAX(
            CASE tmptmptmp.type
            WHEN #{item} THEN
            round(tmptmptmp.num,2)
            ELSE
            0
            END
            ) num_${item}
        </foreach>
        from (
        select
        tmptmp.city,tmptmp.enterprisename,tmptmp.type,sum(tmptmp.num) num
        from
        (
        SELECT
        e.city,e.enterprisename,so.companynumber,p.type,count( 1 ) /p.
        boxnumber num
        FROM
        saleorderdetail AS sod
        LEFT JOIN
        saleorder AS so ON so.`code` = sod.ordercode
        LEFT JOIN product AS p ON p.directioncode = sod.itemcode
        LEFT JOIN
        enterprise AS e ON so.companynumber = e.enterprisenumber
        where
        e.enterprisestatus = 'ON'
        and e.validflag=1
        and p.isdel = 0
        and e.validflag = 1
        <if test="params.starttime != null and params.starttime != ''">
            and so.createdat &gt;= #{params.starttime}
        </if>
        <if test="params.endtime != null and params.endtime != ''">
            and so.createdat &lt; #{params.endtime}
        </if>
        <if test="params.safetysupervision != null and params.safetysupervision != ''">
            and e.safetysupervision = #{params.safetysupervision }
        </if>
        <if test="params.enterprisename != null and params.enterprisename != ''">
            and e.enterprisename like concat("%",#{params.enterprisename },"%")
        </if>
        <if test="params.province != null and params.province != ''">
            and e.province = #{params.province }
        </if>
        <if test="params.city != null and params.city != ''">
            and e.city = #{params.city }
        </if>
        <if test="params.district != null and params.district != ''">
            and e.district = #{params.district }
        </if>
        GROUP BY
        so.companynumber,sod.itemcode
        ) as tmptmp
        group by tmptmp.companynumber,tmptmp.type
        ) as tmptmptmp
        group by tmptmptmp.enterprisename)
        as alldata
        left join (
            select cc.enterprisename,count(0) personnum
            from (
            select e.city,e.enterprisename,so.customer
            from saleorder as so
            left join enterprise AS e ON so.companynumber = e.enterprisenumber
            where
            e.enterprisestatus = 'ON'
            AND e.validflag = 1
            <if test="params.starttime != null and params.starttime != ''">
                and so.createdat &gt;= #{params.starttime}
            </if>
            <if test="params.endtime != null and params.endtime != ''">
                and so.createdat &lt; #{params.endtime}
            </if>
            <if test="params.safetysupervision != null and params.safetysupervision != ''">
                and e.safetysupervision = #{params.safetysupervision }
            </if>
            <if test="params.enterprisename != null and params.enterprisename != ''">
                and e.enterprisename like concat("%",#{params.enterprisename },"%")
            </if>
            <if test="params.province != null and params.province != ''">
                and e.province = #{params.province }
            </if>
            <if test="params.city != null and params.city != ''">
                and e.city = #{params.city }
            </if>
            <if test="params.district != null and params.district != ''">
                and e.district = #{params.district }
            </if>
            group by so.companynumber,so.customer
            ) as cc
            group by cc.enterprisename
        ) as allperson
        on allperson.enterprisename = alldata.enterprisename
    </select>
    <select id="selectAllType" resultType="java.util.Map">
        select
        lasttmp.*,
        othertmp.personnum,
        round(
        <trim suffixOverrides="+">
            <foreach collection="list" item="item" index="index">
                ifnull(lasttmp.num_${item},0) +
            </foreach>
        </trim>
        ,2) totalcol
        from (
        select
        '合计' name
        <foreach collection="list" item="item" index="index">
            ,MAX(
            CASE tmptmptmp.type
            WHEN #{item} THEN
            round(tmptmptmp.num,2)
            ELSE
            0
            END
            ) num_${item}
        </foreach>
        from (
        select
        tmptmp.type,sum(tmptmp.num) num
        from
        (
        SELECT
        e.city,so.companynumber,p.type,count( 1 ) /p.
        boxnumber num
        FROM
        saleorderdetail AS sod
        LEFT JOIN
        saleorder AS so ON so.`code` = sod.ordercode
        LEFT JOIN product AS p ON p.directioncode = sod.itemcode
        LEFT JOIN
        enterprise AS e ON so.companynumber = e.enterprisenumber
        where
        e.enterprisestatus = 'ON'
        and e.validflag=1
        and p.isdel = 0
        and e.validflag = 1
        <if test="params.starttime != null and params.starttime != ''">
            and so.createdat &gt;= #{params.starttime}
        </if>
        <if test="params.endtime != null and params.endtime != ''">
            and so.createdat &lt; #{params.endtime}
        </if>
        <if test="params.safetysupervision != null and params.safetysupervision != ''">
            and e.safetysupervision = #{params.safetysupervision }
        </if>
        <if test="params.enterprisename != null and params.enterprisename != ''">
            and e.enterprisename like concat("%",#{params.enterprisename },"%")
        </if>
        <if test="params.province != null and params.province != ''">
            and e.province = #{params.province }
        </if>
        <if test="params.city != null and params.city != ''">
            and e.city = #{params.city }
        </if>
        <if test="params.district != null and params.district != ''">
            and e.district = #{params.district }
        </if>
        GROUP BY
        so.companynumber,sod.itemcode
        ) as tmptmp
        group by tmptmp.type
        ) as tmptmptmp
        ) as lasttmp
        left join
        (
        select  '合计' name,sum(1) personnum
        from (
        select
        count(0) num
        from saleorder  as so
        left join enterprise AS e ON so.companynumber = e.enterprisenumber
        WHERE
        e.enterprisestatus = 'ON'
        AND e.validflag = 1
        <if test="params.starttime != null and params.starttime != ''">
            and so.createdat &gt;= #{params.starttime}
        </if>
        <if test="params.endtime != null and params.endtime != ''">
            and so.createdat &lt; #{params.endtime}
        </if>
        <if test="params.safetysupervision != null and params.safetysupervision != ''">
            and e.safetysupervision = #{params.safetysupervision }
        </if>
        <if test="params.enterprisename != null and params.enterprisename != ''">
            and e.enterprisename like concat("%",#{params.enterprisename },"%")
        </if>
        <if test="params.province != null and params.province != ''">
            and e.province = #{params.province }
        </if>
        <if test="params.city != null and params.city != ''">
            and e.city = #{params.city }
        </if>
        <if test="params.district != null and params.district != ''">
            and e.district = #{params.district }
        </if>
        group by so.customer
        )  as cc
        ) as othertmp
        on othertmp.name = lasttmp.name
    </select>
    <select id="selectDistrictTypeSale" resultType="java.util.Map">
        select
        citys.name,
        ifnull(allperson.num,0) personnum
        <foreach collection="list" item="item" index="index">
            ,round(ifnull(num_${item},0),2) num_${item}
        </foreach>,
        round(
        <trim suffixOverrides="+">
            <foreach collection="list" item="item" index="index">
                ifnull(alldata.num_${item},0)  +
            </foreach>
        </trim>
        ,2) totalcol
        from (
        select district.name
        from district
        where parentcode =(
        select district.code
        from district as district
        where district.name = #{params.city}
        and type = 2)
        and type =3
        ) as citys
        left join (
        select
        tmptmptmp.district
        <foreach collection="list" item="item" index="index">
            ,MAX(
            CASE tmptmptmp.type
            WHEN #{item} THEN
            tmptmptmp.num
            ELSE
            0
            END
            ) num_${item}
        </foreach>
        from (
        select
        tmptmp.district,tmptmp.type,sum(tmptmp.num) num
        from
        (
        SELECT
        e.district,so.companynumber,p.type,count( 1 ) /p.
        boxnumber num
        FROM
        saleorderdetail AS sod
        LEFT JOIN
        saleorder AS so ON so.`code` = sod.ordercode
        LEFT JOIN product AS p ON p.directioncode = sod.itemcode
        LEFT JOIN
        enterprise AS e ON so.companynumber = e.enterprisenumber
        where
        e.
        enterprisestatus = 'ON'
        and e.validflag=1
        and p.isdel = 0
        and e.validflag = 1
        <if test="params.starttime != null and params.starttime != ''">
            and so.createdat &gt;= #{params.starttime}
        </if>
        <if test="params.endtime != null and params.endtime != ''">
            and so.createdat &lt; #{params.endtime}
        </if>
        <if test="params.safetysupervision != null and params.safetysupervision != ''">
            and e.safetysupervision = #{params.safetysupervision }
        </if>
        <if test="params.enterprisename != null and params.enterprisename != ''">
            and e.enterprisename like concat("%",#{params.enterprisename },"%")
        </if>
        GROUP BY
        so.companynumber,sod.itemcode
        ) as tmptmp
        group by tmptmp.district,tmptmp.type
        ) as tmptmptmp
        group by tmptmptmp.district
        ) as alldata
        on citys.name = alldata.district
        left join (
        select cc.district,count(0) num
        from (
        select e.district,so.customer
        from saleorder as so
        left join enterprise AS e ON so.companynumber = e.enterprisenumber
        where
        e.enterprisestatus = 'ON'
        AND e.validflag = 1
        <if test="params.starttime != null and params.starttime != ''">
            and so.createdat &gt;= #{params.starttime}
        </if>
        <if test="params.endtime != null and params.endtime != ''">
            and so.createdat &lt; #{params.endtime}
        </if>
        <if test="params.safetysupervision != null and params.safetysupervision != ''">
            and e.safetysupervision = #{params.safetysupervision }
        </if>
        <if test="params.enterprisename != null and params.enterprisename != ''">
            and e.enterprisename like concat("%",#{params.enterprisename },"%")
        </if>
        group by so.customer
        ) as cc
        group by cc.district
        ) as allperson on citys.name = allperson.district
    </select>
    <select id="selectAllDistrictType" resultType="java.util.Map">
        select
        lasttmp.*,
        othertmp.personnum,
        round(
        <trim suffixOverrides="+">
            <foreach collection="list" item="item" index="index">
                ifnull(lasttmp.num_${item},0) +
            </foreach>
        </trim>
        ,2) totalcol
        from (
        select
        '合计' name
        <foreach collection="list" item="item" index="index">
            ,MAX(
            CASE tmptmptmp.type
            WHEN #{item} THEN
            round(tmptmptmp.num,2)
            ELSE
            0
            END
            ) num_${item}
        </foreach>
        from (
        select
        tmptmp.type,sum(tmptmp.num) num
        from
        (
        SELECT
        e.city,so.companynumber,p.type,count( 1 ) /p.
        boxnumber num
        FROM
        saleorderdetail AS sod
        LEFT JOIN
        saleorder AS so ON so.`code` = sod.ordercode
        LEFT JOIN product AS p ON p.directioncode = sod.itemcode
        LEFT JOIN
        enterprise AS e ON so.companynumber = e.enterprisenumber
        where
        e.enterprisestatus = 'ON'
        and e.validflag=1
        and p.isdel = 0
        and e.validflag = 1
        <if test="params.starttime != null and params.starttime != ''">
            and so.createdat &gt;= #{params.starttime}
        </if>
        <if test="params.endtime != null and params.endtime != ''">
            and so.createdat &lt; #{params.endtime}
        </if>
        <if test="params.safetysupervision != null and params.safetysupervision != ''">
            and e.safetysupervision = #{params.safetysupervision }
        </if>
        <if test="params.enterprisename != null and params.enterprisename != ''">
            and e.enterprisename like concat("%",#{params.enterprisename },"%")
        </if>
        <if test="params.province != null and params.province != ''">
            and e.province = #{params.province }
        </if>
        <if test="params.city != null and params.city != ''">
            and e.city = #{params.city }
        </if>
        <if test="params.district != null and params.district != ''">
            and e.district = #{params.district }
        </if>
        GROUP BY
        so.companynumber,sod.itemcode
        ) as tmptmp
        group by tmptmp.type
        ) as tmptmptmp
        ) as lasttmp
        left join
        (
        select  '合计' name,sum(1) personnum
        from (
        select
        e.city,
        e.district,
        count(0) num
        from saleorder  as so
        left join enterprise AS e ON so.companynumber = e.enterprisenumber
        WHERE
        e.enterprisestatus = 'ON'
        AND e.validflag = 1
        <if test="params.starttime != null and params.starttime != ''">
            and so.createdat &gt;= #{params.starttime}
        </if>
        <if test="params.endtime != null and params.endtime != ''">
            and so.createdat &lt; #{params.endtime}
        </if>
        <if test="params.safetysupervision != null and params.safetysupervision != ''">
            and e.safetysupervision = #{params.safetysupervision }
        </if>
        <if test="params.enterprisename != null and params.enterprisename != ''">
            and e.enterprisename like concat("%",#{params.enterprisename },"%")
        </if>
        <if test="params.province != null and params.province != ''">
            and e.province = #{params.province }
        </if>
        <if test="params.city != null and params.city != ''">
            and e.city = #{params.city }
        </if>
        <if test="params.district != null and params.district != ''">
            and e.district = #{params.district }
        </if>
        group by so.customer
        )  as cc
        <where>
            1=1
            <if test="params.city != null and params.city != ''">
                and cc.city = #{params.city }
            </if>
        </where>
        GROUP BY
        cc.city
        ) as othertmp
        on othertmp.name = lasttmp.name
    </select>
</mapper>