廖井涛
2024-08-29 07d08f8dc420ba47f66587fdc5038a59fc340c96
north-glass-erp/src/main/resources/mapper/pp/ProductionScheduling.xml
@@ -3,152 +3,296 @@
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.erp.mapper.pp.ProductionSchedulingMapper">
    <resultMap id="ProductionSchedulingMap" type="com.example.erp.entity.pp.ProductionScheduling">
    <resultMap id="productionSchedulingMap" type="com.example.erp.entity.pp.ProductionScheduling">
        <result column="processes" property="processes"/>
        <result column="scheduling_quantity" property="schedulingQuantity"/>
        <result column="order_number" property="orderNumber"/>
        <result column="scheduling_id" property="schedulingId"/>
        <result column="order_id" property="order.orderId"/>
        <result column="technology_number" property="technologyNumber"/>
        <result column="pendingProductionQuantity" property="pendingProductionQuantity"/>
        <result column="pendingProductionArea" property="pendingProductionArea"/>
        <result column="productionScheduledQuantity" property="productionScheduledQuantity"/>
        <result column="productionScheduledArea" property="productionScheduledArea"/>
        <result column="review_status" property="reviewStatus"/>
        <result column="scheduled_start_time" property="scheduledStartTime"/>
        <result column="plan_end_time" property="planEndTime"/>
        <result column="reviewer" property="reviewer"/>
        <!--接收其他外键实体类数据-->
        <association property="order" javaType="com.example.erp.entity.sd.Order">
            <result column="project" property="project"/>
            <result column="order_id" property="orderId"/>
            <result column="customer_name" property="customerName"/>
            <result column="batch" property="batch"/>
            <result column="other_remarks" property="otherRemarks"/>
            <result column="icon" property="icon"/>
            <result column="order_type" property="orderType"/>
            <result column="salesman" property="salesman"/>
            <result column="processing_note" property="processingNote"/>
            <result column="delivery_address" property="deliveryAddress"/>
        </association>
        <association property="orderDetail" javaType="com.example.erp.entity.sd.OrderDetail">
            <result column="order_id" property="orderId"/>
            <result column="product_id" property="productId"/>
            <result column="product_name" property="productName"/>
            <result column="compute_gross_area" property="computeGrossArea"/>
            <result column="processing_note" property="processingNote"/>
            <result column="quantity" property="quantity"/>
            <result column="compute_gross_area" property="computeGrossArea"/>
            <result column="perimeter" property="perimeter"/>
            <result column="order_number" property="orderNumber"/>
            <result column="width" property="width"/>
            <result column="height" property="height"/>
            <result column="shape" property="shape"/>
            <result column="weight" property="weight"/>
        </association>
        <result column="project" property="order.project"/>
        <result column="customer_name" property="order.customerName"/>
        <result column="batch" property="order.batch"/>
        <result column="other_remarks" property="order.otherRemarks"/>
        <result column="icon" property="order.icon"/>
        <result column="order_type" property="order.orderType"/>
        <result column="salesman" property="order.salesman"/>
        <result column="processing_note" property="order.processingNote"/>
        <result column="delivery_address" property="order.deliveryAddress"/>
        <result column="product_id" property="orderDetail.productId"/>
        <result column="product_name" property="orderDetail.productName"/>
        <result column="compute_gross_area" property="orderDetail.computeGrossArea"/>
        <result column="quantity" property="orderDetail.quantity"/>
        <result column="perimeter" property="orderDetail.perimeter"/>
        <result column="width" property="orderDetail.width"/>
        <result column="height" property="orderDetail.height"/>
        <result column="shape" property="orderDetail.shape"/>
        <result column="weight" property="orderDetail.weight"/>
        <result column="child_width" property="orderGlassDetail.childWidth"/>
        <result column="child_height" property="orderGlassDetail.childHeight"/>
        <result column="area" property="orderGlassDetail.area"/>
        <result column="glass_child" property="orderGlassDetail.glassChild"/>
    </resultMap>
<!--    查询已排版数据-->
    <select id="SelectOkSchedulingMp">
        select date(ps.scheduled_start_time) as scheduled_start_time,
               date(ps.plan_end_time) as plan_end_time,
               od.order_id,o.customer_name,o.project,od.order_number,od.width,od.height,od.quantity,
        round(od.width*od.height*od.quantity/1000000,2) as area,
        ps.scheduling_quantity,
#         (od.quantity-IFNULL(ps.scheduling_quantity,0)) as pendingProductionQuantity,
#         round(od.width*od.height*(od.quantity-IFNULL(ps.scheduling_quantity,0))/1000000,2) as pendingProductionArea,
        IFNULL(ps.scheduling_quantity,0) as productionScheduledQuantity,
        round(od.width*od.height*(IFNULL(ps.scheduling_quantity,0))/1000000,2) as productionScheduledArea,
        IF(ps.review_status=0,"未审核","已审核") as review_status,
        ps.reviewer,
        od.product_name,od.shape,ps.scheduling_id
        from sd.order_detail as od
            left join sd.order as o on od.order_id=o.order_id
            left join production_scheduling as ps on ps.order_id=od.order_id and ps.order_number=od.order_number
        where  ps.scheduling_id IS NOT NULL
           and od.create_time between #{selectTime1} and #{selectTime2}
          and position(#{processes} in ps.processes)
          and position(#{orderId} in ps.order_id)
    </select>
    <!--    查询已排产带订单编号的数据-->
    <select id="SelectSchedulingNotMp">
    <!--    查询已排版数据-->
    <select id="selectOkSchedulingMp" resultMap="productionSchedulingMap">
        select date(ps.scheduled_start_time) as scheduled_start_time,
        date(ps.plan_end_time) as plan_end_time,
        od.order_id,o.customer_name,o.project,od.order_number,od.width,od.height,od.quantity,
        round(od.width*od.height*od.quantity/1000000,2) as area,
        od.order_id,
        o.customer_name,
        o.project,
        ps.order_number,
        ps.technology_number,
        ogd.child_width,
        ogd.child_height,
        od.quantity,
        round(od.width * od.height * od.quantity / 1000000, 2) as area,
        ps.scheduling_quantity,
#         (od.quantity-IFNULL(ps.scheduling_quantity,0)) as pendingProductionQuantity,
#         round(od.width*od.height*(od.quantity-IFNULL(ps.scheduling_quantity,0))/1000000,2) as pendingProductionArea,
        IFNULL(ps.scheduling_quantity,0) as productionScheduledQuantity,
        round(od.width*od.height*(IFNULL(ps.scheduling_quantity,0))/1000000,2) as productionScheduledArea,
        IF(ps.review_status=0,"未审核","已审核") as review_status,
        (od.quantity - IFNULL(sum(ps.scheduling_quantity), 0)) as pendingProductionQuantity,
        round(od.width * od.height * (od.quantity - IFNULL(sum(ps.scheduling_quantity), 0)) / 1000000,
        2) as pendingProductionArea,
        IFNULL(ps.scheduling_quantity, 0) as productionScheduledQuantity,
        round(od.width * od.height * (IFNULL(ps.scheduling_quantity, 0)) / 1000000,
        2) as productionScheduledArea,
        IF(ps.review_status = 0, "未审核", "已审核") as review_status,
        ps.reviewer,
        od.product_name,od.shape,ps.scheduling_id
        od.product_name,
        if(od.shape=1,'普形',if(od.shape=2,'异形','')) as shape,
        ps.scheduling_id,
        ps.notes
        from sd.order_detail as od
        left join sd.order as o on od.order_id=o.order_id
        left join production_scheduling as ps on ps.order_id=od.order_id and ps.order_number=od.order_number
        where  (ps.scheduling_id IS NOT NULL )
          and position(#{processes} in ps.processes)
          and position(#{orderId} in ps.order_id)
        left join sd.order as o on od.order_id = o.order_id
        left join production_scheduling as ps
        on ps.order_id = od.order_id and ps.order_number = od.order_number
        left join sd.order_glass_detail as ogd on ogd.order_id=od.order_id and ogd.order_number=od.order_number and
        ogd.technology_number=ps.technology_number
        where ps.scheduling_id IS NOT NULL
          and o.create_order>0
        and od.create_time between #{selectTime1} and #{selectTime2}
        and position(#{processes} in ps.processes)
        and position(#{orderIds} in ps.order_id)
        <if test="productionScheduling.order.orderId != null and productionScheduling.order.orderId != ''">
            and ogd.order_id regexp #{productionScheduling.order.orderId}
        </if>
        <if test="productionScheduling.order.customerName != null and productionScheduling.order.customerName != ''">
            and o.customer_name regexp #{productionScheduling.order.customerName}
        </if>
        <if test="productionScheduling.order.project != null and productionScheduling.order.project != ''">
            and o.project regexp #{productionScheduling.order.project}
        </if>
        <if test="productionScheduling.orderNumber != null and productionScheduling.orderNumber != ''">
            and ogd.order_number regexp #{productionScheduling.orderNumber}
        </if>
        <if test="productionScheduling.technologyNumber != null and productionScheduling.technologyNumber != ''">
            and ogd.technology_number regexp #{productionScheduling.technologyNumber}
        </if>
        group by ps.id
        order by ps.id desc
        limit #{offset},#{pageSize};
    </select>
    </select>
<!--    查询未排产数据-->
    <select id="SelectNoSchedulingMp" >
        select od.order_id,o.customer_name,o.project,od.order_number,od.width,od.height,od.quantity,
        round(od.width*od.height*od.quantity/1000000,2) as area,
        (od.quantity-IFNULL(ps.scheduling_quantity,0)) as pendingProductionQuantity,
        round(od.width*od.height*(od.quantity-IFNULL(ps.scheduling_quantity,0))/1000000,2) as pendingProductionArea,
        IFNULL(ps.scheduling_quantity,0) as productionScheduledQuantity,
        round(od.width*od.height*(IFNULL(ps.scheduling_quantity,0))/1000000,2) as productionScheduledArea,
        od.product_name,od.shape
        from sd.order_detail as od left join sd.order as o on od.order_id=o.order_id
        left join production_scheduling as ps on ps.order_id=od.order_id and ps.order_number=od.order_number
        where   od.quantity-IFNULL(ps.scheduling_quantity,0)>0 and od.create_time between #{selectTime1} and #{selectTime2}
          and position(#{orderId} in ps.order_id)
    group by od.order_id,od.order_number
    <!--    查询未排产数据-->
    <select id="selectNoSchedulingMp" resultMap="productionSchedulingMap">
        select ogd.order_id,
        o.customer_name,
        o.project,
        ogd.order_number,
        ogd.technology_number,
        ogd.child_width,
        ogd.child_height,
        od.quantity,
        round(ogd.child_width * ogd.child_height * od.quantity / 1000000, 2) as area,
        (od.quantity - IFNULL((ps.schedulingQuantity), 0)) as schedulingQuantity,
        (od.quantity - IFNULL((ps.schedulingQuantity), 0)) as pendingProductionQuantity,
        round(ogd.child_width * ogd.child_height * (od.quantity - IFNULL((ps.schedulingQuantity), 0)) / 1000000,
        2)
        as pendingProductionArea,
        IFNULL(ps.schedulingQuantity, 0) as productionScheduledQuantity,
        round(ogd.child_width * ogd.child_height * (IFNULL(ps.schedulingQuantity, 0)) / 1000000,
        2) as productionScheduledArea,
        od.product_name,
        if(od.shape=1,'普形',if(od.shape=2,'异形','')) as shape
        from sd.order_glass_detail as ogd
        left join sd.order as o on ogd.order_id = o.order_id
        left join sd.order_detail as od on od.order_id = ogd.order_id and od.order_number = ogd.order_number
        left join sd.order_process_detail as opd
        on opd.order_id = ogd.order_id and opd.order_number = ogd.order_number and
        opd.technology_number = ogd.technology_number
        left join
        (select order_id, order_number, technology_number, SUM(scheduling_quantity) as schedulingQuantity
        from production_scheduling
        where processes = #{processes}
        group by order_id, order_number, technology_number) as ps
        on ps.order_id = ogd.order_id and ps.order_number = ogd.order_number and
        ps.technology_number = ogd.technology_number
        where (od.quantity - IFNULL((ps.schedulingQuantity), 0)) > 0
        and od.create_time between #{selectTime1} and #{selectTime2}
        and opd.reporting_work_num_count = 0
        and o.create_order>0
        and position(#{orderIds} in ogd.order_id)
        -- and position("切割" in ps.processes)
        <if test="productionScheduling.order.orderId != null and productionScheduling.order.orderId != ''">
            and ogd.order_id regexp #{productionScheduling.order.orderId}
        </if>
        <if test="productionScheduling.order.customerName != null and productionScheduling.order.customerName != ''">
            and o.customer_name regexp #{productionScheduling.order.customerName}
        </if>
        <if test="productionScheduling.order.project != null and productionScheduling.order.project != ''">
            and o.project regexp #{productionScheduling.order.project}
        </if>
        <if test="productionScheduling.orderNumber != null and productionScheduling.orderNumber != ''">
            and ogd.order_number regexp #{productionScheduling.orderNumber}
        </if>
        <if test="productionScheduling.technologyNumber != null and productionScheduling.technologyNumber != ''">
            and ogd.technology_number regexp #{productionScheduling.technologyNumber}
        </if>
        group by ogd.order_id, ogd.order_number, ogd.technology_number
        order by ogd.order_id desc
        limit #{offset},#{pageSize};
    </select>
<!--    首次查询排产数据-->
    <select id="selectLastSchedulingMp">
        select od.order_id,o.customer_name,o.project,od.order_number,od.width,od.height,od.quantity,
               round(od.width*od.height*od.quantity/1000000,2) as area,
               (od.quantity-IFNULL(ps.scheduling_quantity,0)) as pendingProductionQuantity,
               round(od.width*od.height*(od.quantity-IFNULL(ps.scheduling_quantity,0))/1000000,2) as pendingProductionArea,
               IFNULL(ps.scheduling_quantity,0) as productionScheduledQuantity,
               round(od.width*od.height*(IFNULL(ps.scheduling_quantity,0))/1000000,2) as productionScheduledArea,
               od.product_name,od.shape
        from sd.order_detail as od left join sd.order as o on od.order_id=o.order_id
                                   left join production_scheduling as ps on ps.order_id=od.order_id and ps.order_number=od.order_number
        where od.create_time between #{selectTime1} and #{selectTime2} and od.quantity-IFNULL(ps.scheduling_quantity,0)>0
    </select>
    <select id="selectMaxId">
        select
            COUNT(ps.scheduling_id)
        from
            `production_scheduling` as ps
        where
            date(ps.create_time) = curdate()
        select COUNT(ps.scheduling_id)
        from `production_scheduling` as ps
        where date(ps.create_time) = curdate()
    </select>
    <insert id="insertSelective">
        insert into production_scheduling(
               scheduling_id,
               order_id,
               order_number,
               processes,
               scheduling_quantity,
               scheduled_start_time,
               plan_end_time,
               notes,
               create_time
               )
        VALUES(
               #{schedulingId},
               #{orderId},
               #{orderNumber},
               #{processes},
               #{schedulingQuantity},
               #{scheduledStartTime},
               #{planEndTime},
               #{notes},
               now()
              )
        insert into production_scheduling(scheduling_id,
                                          order_id,
                                          order_number,
                                          technology_number,
                                          processes,
                                          scheduling_quantity,
                                          scheduled_start_time,
                                          plan_end_time,
                                          notes,
                                          create_time)
        VALUES (#{schedulingId},
                #{orderId},
                #{orderNumber},
                #{technologyNumber},
                #{processes},
                #{schedulingQuantity},
                #{scheduledStartTime},
                #{planEndTime},
                #{notes},
                now())
    </insert>
    <update id="examineSchedulingMp">
        update production_scheduling
        set review_status=1,
            reviewer=#{userName},
            scheduling_quantity=#{schedulingQuantity},
            notes=#{notes}
        where scheduling_id = #{schedulingId}
    </update>
    <delete id="deleteSchedulingMp">
        delete
        from production_scheduling
        where scheduling_id = #{schedulingId}
    </delete>
    <select id="selectProcess">
        SELECT *
        FROM sd.basic_data as bd
        where bd.basic_category = 'process'
          and bd.basic_type = 'product'
    </select>
    <select id="getPageTotal">
        select CEILING(count(ogd.id)/#{pageSize}) as 'pageTotal',
        count(distinct ogd.id) as 'total'
        from sd.order_glass_detail as ogd
        left join sd.order as o on ogd.order_id = o.order_id
        left join sd.order_detail as od on od.order_id = ogd.order_id and od.order_number = ogd.order_number
        left join sd.order_process_detail as opd
        on opd.order_id = ogd.order_id and opd.order_number = ogd.order_number and
        opd.technology_number = ogd.technology_number
        left join
        (select order_id, order_number, technology_number, SUM(scheduling_quantity) as schedulingQuantity
        from production_scheduling
        where processes = #{processes}
        group by order_id, order_number, technology_number) as ps
        on ps.order_id = ogd.order_id and ps.order_number = ogd.order_number and
        ps.technology_number = ogd.technology_number
        where (od.quantity - IFNULL((ps.schedulingQuantity), 0)) > 0
        and od.create_time between #{selectTime1} and #{selectTime2}
        and opd.reporting_work_num_count = 0
        and o.create_order>0
        and position(#{orderId} in ogd.order_id)
        -- and position("切割" in ps.processes)
        <if test="productionScheduling.orderId != null and productionScheduling.orderId != ''">
            and ogd.order_id regexp #{productionScheduling.orderId}
        </if>
        <if test="productionScheduling.order.customerName != null and productionScheduling.order.customerName != ''">
            and o.customer_name regexp #{productionScheduling.order.customerName}
        </if>
        <if test="productionScheduling.order.project != null and productionScheduling.order.project != ''">
            and o.project regexp #{productionScheduling.order.project}
        </if>
        <if test="productionScheduling.orderNumber != null and productionScheduling.orderNumber != ''">
            and ogd.order_number regexp #{productionScheduling.orderNumber}
        </if>
        <if test="productionScheduling.technologyNumber != null and productionScheduling.technologyNumber != ''">
            and ogd.technology_number regexp #{productionScheduling.technologyNumber}
        </if>
        order by ogd.order_id desc
        limit #{offset},#{pageSize};
    </select>
    <select id="getOkPageTotal">
        select CEILING(count(ps.id)/#{pageSize}) as 'pageTotal',
        count(distinct ps.id) as 'total'
        from sd.order_detail as od
        left join sd.order as o on od.order_id = o.order_id
        left join production_scheduling as ps
        on ps.order_id = od.order_id and ps.order_number = od.order_number
        left join sd.order_glass_detail as ogd on ogd.order_id=od.order_id and ogd.order_number=od.order_number and
        ogd.technology_number=ps.technology_number
        where ps.scheduling_id IS NOT NULL
        and od.create_time between #{selectTime1} and #{selectTime2}
        and o.create_order>0
        and position(#{processes} in ps.processes)
        and position(#{orderId} in ps.order_id)
        <if test="productionScheduling.orderId != null and productionScheduling.orderId != ''">
            and ogd.order_id regexp #{productionScheduling.orderId}
        </if>
        <if test="productionScheduling.order.customerName != null and productionScheduling.order.customerName != ''">
            and o.customer_name regexp #{productionScheduling.order.customerName}
        </if>
        <if test="productionScheduling.order.project != null and productionScheduling.order.project != ''">
            and o.project regexp #{productionScheduling.order.project}
        </if>
        <if test="productionScheduling.orderNumber != null and productionScheduling.orderNumber != ''">
            and ogd.order_number regexp #{productionScheduling.orderNumber}
        </if>
        <if test="productionScheduling.technologyNumber != null and productionScheduling.technologyNumber != ''">
            and ogd.technology_number regexp #{productionScheduling.technologyNumber}
        </if>
        order by ps.id desc
        limit #{offset},#{pageSize};
    </select>
    <update id="cancelReviewSchedulingMp">
        update production_scheduling set   review_status=0    where scheduling_id = #{schedulingId}
    </update>
</mapper>