<?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.aps.core.mapper.mainPlan.ApsWeldSeamStatisticsV2Mapper">
|
|
<resultMap type="com.aps.core.domain.mainPlan.ApsWeldSeamStatisticsV2" id="ApsWeldSeamStatisticsV2Result">
|
<id property="id" column="id"/>
|
<result property="year" column="year"/>
|
<result property="month" column="month"/>
|
<result property="productionBase" column="production_base"/>
|
<result property="pipingOrderRequirement" column="piping_order_requirement"/>
|
<result property="gasOrderRequirement" column="gas_order_requirement"/>
|
<result property="pipingPredictionRequirement" column="piping_prediction_requirement"/>
|
<result property="gasPredictionRequirement" column="gas_prediction_requirement"/>
|
<result property="reserveEmergencyOrderOutput" column="reserve_emergency_order_output"/>
|
<result property="total" column="total"/>
|
<result property="days" column="days"/>
|
<result property="requirementDayWeldSeam" column="requirement_day_weld_seam"/>
|
<result property="productionDayWeldSeam" column="production_day_weld_seam"/>
|
<result property="isSatisfy" column="is_satisfy"/>
|
<result property="createBy" column="create_by"/>
|
<result property="createTime" column="create_time"/>
|
<result property="updateBy" column="update_by"/>
|
<result property="updateTime" column="update_time"/>
|
</resultMap>
|
|
<sql id="selectApsWeldSeamStatisticsV2Vo">
|
select id, year, month, production_base, piping_order_requirement, gas_order_requirement,
|
piping_prediction_requirement, gas_prediction_requirement, reserve_emergency_order_output,
|
total, days, requirement_day_weld_seam, production_day_weld_seam, is_satisfy,
|
create_by, create_time, update_by, update_time
|
from aps_weld_seam_statistics_v2
|
</sql>
|
|
<select id="selectApsWeldSeamStatisticsV2ById" parameterType="String" resultMap="ApsWeldSeamStatisticsV2Result">
|
<include refid="selectApsWeldSeamStatisticsV2Vo"/>
|
where id = #{id}
|
</select>
|
|
<select id="selectApsWeldSeamStatisticsV2List" parameterType="com.aps.core.domain.mainPlan.ApsWeldSeamStatisticsV2" resultMap="ApsWeldSeamStatisticsV2Result">
|
<include refid="selectApsWeldSeamStatisticsV2Vo"/>
|
<where>
|
<if test="params.beginYear != null and params.beginYear != '' and params.endYear != null and params.endYear != ''"> and year between #{params.beginYear} and #{params.endYear}</if>
|
<if test="params.beginMonth != null and params.beginMonth != '' and params.endMonth != null and params.endMonth != ''"> and month between #{params.beginMonth} and #{params.endMonth}</if>
|
<if test="productionBase != null and productionBase != ''"> and production_base like '%'|| #{productionBase}|| '%'</if>
|
</where>
|
order by year, month, production_base
|
</select>
|
|
<insert id="insertApsWeldSeamStatisticsV2" parameterType="com.aps.core.domain.mainPlan.ApsWeldSeamStatisticsV2">
|
insert into aps_weld_seam_statistics_v2
|
<trim prefix="(" suffix=")" suffixOverrides=",">
|
<if test="id != null">id,</if>
|
<if test="year != null">year,</if>
|
<if test="month != null">month,</if>
|
<if test="productionBase != null">production_base,</if>
|
<if test="pipingOrderRequirement != null">piping_order_requirement,</if>
|
<if test="gasOrderRequirement != null">gas_order_requirement,</if>
|
<if test="pipingPredictionRequirement != null">piping_prediction_requirement,</if>
|
<if test="gasPredictionRequirement != null">gas_prediction_requirement,</if>
|
<if test="reserveEmergencyOrderOutput != null">reserve_emergency_order_output,</if>
|
<if test="total != null">total,</if>
|
<if test="days != null">days,</if>
|
<if test="requirementDayWeldSeam != null">requirement_day_weld_seam,</if>
|
<if test="productionDayWeldSeam != null">production_day_weld_seam,</if>
|
<if test="isSatisfy != null">is_satisfy,</if>
|
<if test="createBy != null">create_by,</if>
|
<if test="createTime != null">create_time,</if>
|
<if test="updateBy != null">update_by,</if>
|
<if test="updateTime != null">update_time,</if>
|
</trim>
|
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
<if test="id != null">#{id},</if>
|
<if test="year != null">#{year},</if>
|
<if test="month != null">#{month},</if>
|
<if test="productionBase != null">#{productionBase},</if>
|
<if test="pipingOrderRequirement != null">#{pipingOrderRequirement},</if>
|
<if test="gasOrderRequirement != null">#{gasOrderRequirement},</if>
|
<if test="pipingPredictionRequirement != null">#{pipingPredictionRequirement},</if>
|
<if test="gasPredictionRequirement != null">#{gasPredictionRequirement},</if>
|
<if test="reserveEmergencyOrderOutput != null">#{reserveEmergencyOrderOutput},</if>
|
<if test="total != null">#{total},</if>
|
<if test="days != null">#{days},</if>
|
<if test="requirementDayWeldSeam != null">#{requirementDayWeldSeam},</if>
|
<if test="productionDayWeldSeam != null">#{productionDayWeldSeam},</if>
|
<if test="isSatisfy != null">#{isSatisfy},</if>
|
<if test="createBy != null">#{createBy},</if>
|
<if test="createTime != null">#{createTime},</if>
|
<if test="updateBy != null">#{updateBy},</if>
|
<if test="updateTime != null">#{updateTime},</if>
|
</trim>
|
</insert>
|
|
<update id="updateApsWeldSeamStatisticsV2" parameterType="com.aps.core.domain.mainPlan.ApsWeldSeamStatisticsV2">
|
update aps_weld_seam_statistics_v2
|
<trim prefix="SET" suffixOverrides=",">
|
<if test="year != null">year = #{year},</if>
|
<if test="month != null">month = #{month},</if>
|
<if test="productionBase != null">production_base = #{productionBase},</if>
|
<if test="pipingOrderRequirement != null">piping_order_requirement = #{pipingOrderRequirement},</if>
|
<if test="gasOrderRequirement != null">gas_order_requirement = #{gasOrderRequirement},</if>
|
<if test="pipingPredictionRequirement != null">piping_prediction_requirement = #{pipingPredictionRequirement},</if>
|
<if test="gasPredictionRequirement != null">gas_prediction_requirement = #{gasPredictionRequirement},</if>
|
<if test="reserveEmergencyOrderOutput != null">reserve_emergency_order_output = #{reserveEmergencyOrderOutput},</if>
|
<if test="total != null">total = #{total},</if>
|
<if test="days != null">days = #{days},</if>
|
<if test="requirementDayWeldSeam != null">requirement_day_weld_seam = #{requirementDayWeldSeam},</if>
|
<if test="productionDayWeldSeam != null">production_day_weld_seam = #{productionDayWeldSeam},</if>
|
<if test="isSatisfy != null">is_satisfy = #{isSatisfy},</if>
|
<if test="createBy != null">create_by = #{createBy},</if>
|
<if test="createTime != null">create_time = #{createTime},</if>
|
<if test="updateBy != null">update_by = #{updateBy},</if>
|
<if test="updateTime != null">update_time = #{updateTime},</if>
|
</trim>
|
where id = #{id}
|
</update>
|
|
<delete id="deleteApsWeldSeamStatisticsV2ById" parameterType="String">
|
delete from aps_weld_seam_statistics_v2 where id = #{id}
|
</delete>
|
|
<delete id="deleteApsWeldSeamStatisticsV2ByIds" parameterType="String">
|
delete from aps_weld_seam_statistics_v2 where id in
|
<foreach item="id" collection="array" open="(" separator="," close=")">
|
#{id}
|
</foreach>
|
</delete>
|
|
<update id="truncateTable">
|
TRUNCATE TABLE aps_weld_seam_statistics_v2
|
</update>
|
|
<insert id="batchInsert" parameterType="java.util.List">
|
INSERT INTO aps_weld_seam_statistics_v2 (
|
id, year, month, production_base,
|
piping_order_requirement, gas_order_requirement,
|
piping_prediction_requirement, gas_prediction_requirement,
|
reserve_emergency_order_output, total, days,
|
requirement_day_weld_seam, production_day_weld_seam,
|
is_satisfy, create_by, create_time
|
) VALUES
|
<foreach collection="list" item="item" separator=",">
|
(
|
#{item.id}, #{item.year}, #{item.month}, #{item.productionBase},
|
#{item.pipingOrderRequirement}, #{item.gasOrderRequirement},
|
#{item.pipingPredictionRequirement}, #{item.gasPredictionRequirement},
|
#{item.reserveEmergencyOrderOutput}, #{item.total}, #{item.days},
|
#{item.requirementDayWeldSeam}, #{item.productionDayWeldSeam},
|
#{item.isSatisfy}, #{item.createBy}, #{item.createTime}
|
)
|
</foreach>
|
</insert>
|
|
<select id="queryWeldSeamStatistics" resultMap="ApsWeldSeamStatisticsV2Result">
|
WITH order_weld_calc AS (
|
-- 计算工单的焊缝数量
|
SELECT
|
mo.factory as production_base,
|
mo.material_code as material_no,
|
EXTRACT(YEAR FROM mo.plan_end) as year,
|
EXTRACT(MONTH FROM mo.plan_end) as month,
|
mo.quantity * COALESCE(ws.hup_qty, 0) as order_weld_count,
|
mgm.domain as domain
|
FROM aps_gas_pipeline_mo mo
|
LEFT JOIN aps_weld_seam_standard ws ON mo.material_code = ws.item_code AND ws.del_flag = 0
|
LEFT JOIN aps_material_product_group_management mgm ON mo.material_code = mgm.material_code AND mo.factory = mgm.factory
|
),
|
predict_weld_calc AS (
|
-- 计算预测的焊缝数量
|
SELECT
|
gp.factory as production_base,
|
gp.material_code as material_no,
|
EXTRACT(YEAR FROM gp.predict_date) as year,
|
EXTRACT(MONTH FROM gp.predict_date) as month,
|
gp.predict_quantity * COALESCE(ws.hup_qty, 0) as predict_weld_count,
|
mgm.domain as domain
|
FROM aps_gas_pipeline_prediction gp
|
LEFT JOIN aps_weld_seam_standard ws ON gp.material_code = ws.item_code AND ws.del_flag = 0
|
LEFT JOIN aps_material_product_group_management mgm ON gp.material_code = mgm.material_code AND gp.factory = mgm.factory
|
),
|
summary_data AS (
|
SELECT
|
year,
|
month,
|
production_base,
|
-- 管路订单需求
|
COALESCE(SUM(CASE
|
WHEN domain = 'GL' AND type = 'order'
|
THEN weld_count ELSE 0
|
END), 0) as piping_order_requirement,
|
-- 气柜订单需求
|
COALESCE(SUM(CASE
|
WHEN domain = 'QG' AND type = 'order'
|
THEN weld_count ELSE 0
|
END), 0) as gas_order_requirement,
|
-- 管路预测需求
|
COALESCE(SUM(CASE
|
WHEN domain = 'GL' AND type = 'predict'
|
THEN weld_count ELSE 0
|
END), 0) as piping_predict_requirement,
|
-- 气柜预测需求
|
COALESCE(SUM(CASE
|
WHEN domain = 'QG' AND type = 'predict'
|
THEN weld_count ELSE 0
|
END), 0) as gas_predict_requirement
|
FROM (
|
SELECT
|
year,
|
month,
|
production_base,
|
order_weld_count as weld_count,
|
'order' as type,
|
domain
|
FROM order_weld_calc
|
UNION ALL
|
SELECT
|
year,
|
month,
|
production_base,
|
predict_weld_count as weld_count,
|
'predict' as type,
|
domain
|
FROM predict_weld_calc
|
) merged_data
|
GROUP BY year, month, production_base
|
)
|
SELECT
|
s.year as "year",
|
s.month as "month",
|
s.production_base as "production_base",
|
ROUND(s.piping_order_requirement, 4) as "piping_order_requirement",
|
ROUND(s.gas_order_requirement, 4) as "gas_order_requirement",
|
ROUND(s.piping_predict_requirement, 4) as "piping_prediction_requirement",
|
ROUND(s.gas_predict_requirement, 4) as "gas_prediction_requirement",
|
0 as "reserve_emergency_order_output",
|
ROUND(s.piping_order_requirement + s.gas_order_requirement + s.piping_predict_requirement + s.gas_predict_requirement, 4) as "total",
|
0 as "days",
|
0 as "requirement_day_weld_seam",
|
0 as "production_day_weld_seam",
|
'0' as "is_satisfy",
|
'system' as "create_by",
|
CURRENT_TIMESTAMP as "create_time"
|
FROM summary_data s
|
ORDER BY s.year, s.month, s.production_base
|
</select>
|
</mapper>
|