gongchunyi
2026-04-27 0be02df3d287f802c76e5738916301a877dfaa0e
src/main/resources/mapper/production/ProductionProductMainMapper.xml
@@ -10,20 +10,55 @@
        <result property="tenantId" column="tenant_id"/>
        <result property="createTime" column="create_time"/>
        <result property="status" column="status"/>
        <result property="reportStartTime" column="report_start_time"/>
        <result property="reportEndTime" column="report_end_time"/>
        <result property="reportDurationMinutes" column="report_duration_minutes"/>
    </resultMap>
    <select id="listPageProductionProductMainDto" resultType="com.ruoyi.production.dto.ProductionProductMainDto">
        select ppm.*,
        pwo.work_order_no as workOrderNo,
        pwo.status as workOrderStatus,
        u.nick_name as nickName,
        p.product_name as productName,
        pp.name as process,
        pm.model as productModelName,
        ppo.quantity,
        ppo.scrap_qty,
        pm.unit,
        sl.sales_contract_no salesContractNo
        select
        min(ppm.id) as id,
        null as productNo,
        min(ppm.user_id) as userId,
        min(ppm.work_order_id) as workOrderId,
        min(ppm.status) as status,
        min(ppm.report_start_time) as reportStartTime,
        max(ppm.report_end_time) as reportEndTime,
        sum(ifnull(ppm.report_duration_minutes, 0)) as reportDurationMinutes,
        max(pwo.work_order_no) as workOrderNo,
        max(po.nps_no) as productOrderNpsNo,
        max(pwo.status) as workOrderStatus,
        max(u.nick_name) as nickName,
        max(p.product_name) as productName,
        max(CASE pp.type
            WHEN 1 THEN '加工'
            WHEN 2 THEN '刮板冷芯制作'
            WHEN 3 THEN '管路组对'
            WHEN 4 THEN '罐体连接及调试'
            WHEN 5 THEN '测试打压'
            WHEN 6 THEN '其他'
            ELSE pp.name
        END) as process,
        max(pm.model) as productModelName,
        sum(ifnull(ppo.quantity, 0)) as quantity,
        sum(ifnull(ppo.scrap_qty, 0)) as scrapQty,
        sum(ifnull(ppo.quantity, 0)) as outputTotalQuantity,
        sum(ifnull(ppo.scrap_qty, 0)) as scrapTotalQuantity,
        round(ifnull((
            select sum(ifnull(pri.planned_work_hours, 0))
            from product_process_route_item pri
            where pri.product_order_id = po.id
        ), 0), 2) as projectTotalHours,
        ifnull(max(pp.salary_quota), 0) as processStandardHours,
        round(sum(ifnull(ppm.report_duration_minutes, 0)) / 60, 2) as actualReportHours,
        round(ifnull((
            select sum(d.duration_minutes)
            from production_product_report_daily d
            where d.user_id = ppm.user_id
              and d.report_date = curdate()
        ), 0) / 60, 2) as dailyPersonHours,
        max(pm.unit) as unit,
        max(sl.sales_contract_no) as salesContractNo
        from
        production_product_main ppm
        left join product_work_order pwo on pwo.id = ppm.work_order_id
@@ -48,10 +83,155 @@
            <if test="c.status != null and c.status != ''">
                and ppm.status = #{c.status}
            </if>
            <if test="c.userId != null">
                and ppm.user_id = #{c.userId}
            </if>
        </where>
        order by ppm.id
        group by ppm.work_order_id, po.sales_ledger_id, po.sale_ledger_product_id, ppm.user_id
        order by max(ppm.id) desc
    </select>
    <select id="listPageProductionProductMainDailyDto" resultType="com.ruoyi.production.dto.ProductionProductMainDto">
        select
        min(ppm.id) as id,
        min(ppm.product_no) as productNo,
        d.user_id as userId,
        d.work_order_id as workOrderId,
        max(pwo.work_order_no) as workOrderNo,
        max(po.nps_no) as productOrderNpsNo,
        max(pwo.status) as workOrderStatus,
        max(u.nick_name) as nickName,
        max(p.product_name) as productName,
        max(CASE pp.type
            WHEN 1 THEN '加工'
            WHEN 2 THEN '刮板冷芯制作'
            WHEN 3 THEN '管路组对'
            WHEN 4 THEN '罐体连接及调试'
            WHEN 5 THEN '测试打压'
            WHEN 6 THEN '其他'
            ELSE pp.name
        END) as process,
        max(pm.model) as productModelName,
        max(pm.unit) as unit,
        max(sl.sales_contract_no) as salesContractNo,
        d.report_date as schedulingDate,
        sum(d.duration_minutes) as reportDurationMinutes,
        round(sum(d.duration_minutes) / 60, 2) as dailyPersonHours,
        round(sum(d.duration_minutes) / 60, 2) as actualReportHours,
        sum(ifnull(ppo.quantity, 0)) as quantity,
        sum(ifnull(ppo.scrap_qty, 0)) as scrapQty,
        sum(ifnull(ppo.quantity, 0)) as outputTotalQuantity,
        sum(ifnull(ppo.scrap_qty, 0)) as scrapTotalQuantity,
        round(ifnull((
            select sum(ifnull(pri.planned_work_hours, 0))
            from product_process_route_item pri
            where pri.product_order_id = po.id
        ), 0), 2) as projectTotalHours,
        ifnull(max(pp.salary_quota), 0) as processStandardHours
        from production_product_report_daily d
        left join production_product_main ppm on ppm.id = d.product_main_id
        left join product_work_order pwo on pwo.id = d.work_order_id
        left join product_process_route_item ppri on ppri.id = pwo.product_process_route_item_id
        left join product_process pp on pp.id = ppri.process_id
        left join product_order po on po.id = pwo.product_order_id
        left join production_product_output ppo
            on ppm.id = ppo.product_main_id
           and date(ppm.report_end_time) = d.report_date
        left join product_model pm on pm.id = ppo.product_model_id
        left join product p on p.id = pm.product_id
        left join sales_ledger sl on sl.id = po.sales_ledger_id
        left join sys_user u on u.user_id = d.user_id
        <where>
            <if test="c.workOrderId != null">
                and d.work_order_id = #{c.workOrderId}
            </if>
            <if test="c.nickName != null and c.nickName != ''">
                and u.nick_name like concat('%',#{c.nickName},'%')
            </if>
            <if test="c.workOrderNo != null and c.workOrderNo != ''">
                and pwo.work_order_no like concat('%',#{c.workOrderNo},'%')
            </if>
            <if test="c.workOrderStatus != null and c.workOrderStatus != ''">
                and pwo.status = #{c.workOrderStatus}
            </if>
            <if test="c.userId != null">
                and d.user_id = #{c.userId}
            </if>
            <if test="c.startDate != null">
                and d.report_date <![CDATA[ >= ]]> #{c.startDate}
            </if>
            <if test="c.endDate != null">
                and d.report_date <![CDATA[ <= ]]> #{c.endDate}
            </if>
        </where>
        group by d.work_order_id, d.user_id, d.report_date, po.sales_ledger_id, po.sale_ledger_product_id
        order by d.report_date desc, d.user_id
    </select>
    <select id="listPageProductionProductMainDetailDto" resultType="com.ruoyi.production.dto.ProductionProductMainDto">
        select
        ppm.*,
        pwo.work_order_no as workOrderNo,
        po.nps_no as productOrderNpsNo,
        pwo.status as workOrderStatus,
        u.nick_name as nickName,
        p.product_name as productName,
        CASE pp.type
            WHEN 1 THEN '加工'
            WHEN 2 THEN '刮板冷芯制作'
            WHEN 3 THEN '管路组对'
            WHEN 4 THEN '罐体连接及调试'
            WHEN 5 THEN '测试打压'
            WHEN 6 THEN '其他'
            ELSE pp.name
        END as process,
        pm.model as productModelName,
        ppo.quantity,
        ppo.scrap_qty as scrapQty,
        ppo.quantity as outputTotalQuantity,
        ppo.scrap_qty as scrapTotalQuantity,
        pm.unit,
        sl.sales_contract_no salesContractNo,
        round(ifnull((
            select sum(ifnull(pri.planned_work_hours, 0))
            from product_process_route_item pri
            where pri.product_order_id = po.id
        ), 0), 2) as projectTotalHours,
        ifnull(pp.salary_quota, 0) as processStandardHours,
        round(ifnull(ppm.report_duration_minutes, 0) / 60, 2) as actualReportHours,
        round(ifnull((
            select sum(d.duration_minutes)
            from production_product_report_daily d
            where d.user_id = ppm.user_id
              and d.report_date = curdate()
        ), 0) / 60, 2) as dailyPersonHours
        from production_product_main ppm
        left join product_work_order pwo on pwo.id = ppm.work_order_id
        left join product_process_route_item ppri on ppri.id = pwo.product_process_route_item_id
        left join product_process pp on pp.id = ppri.process_id
        left join product_order po on po.id = pwo.product_order_id
        left join production_product_output ppo on ppm.id = ppo.product_main_id
        left join product_model pm on pm.id = ppo.product_model_id
        left join product p on p.id = pm.product_id
        left join sales_ledger sl on sl.id = po.sales_ledger_id
        left join sys_user u on u.user_id = ppm.user_id
        <where>
            <if test="c.workOrderId != null">
                and ppm.work_order_id = #{c.workOrderId}
            </if>
            <if test="c.userId != null">
                and ppm.user_id = #{c.userId}
            </if>
            <if test="c.startDate != null">
                and date(ppm.report_end_time) <![CDATA[ >= ]]> #{c.startDate}
            </if>
            <if test="c.endDate != null">
                and date(ppm.report_end_time) <![CDATA[ <= ]]> #{c.endDate}
            </if>
        </where>
        order by ppm.id desc
    </select>
    <select id="getOrderByMainId" resultType="com.ruoyi.production.pojo.ProductOrder">
        select po.*
        from product_order po