############################## ##@author:gong.chengbo ## ##@createdate:2023-08-10 ## ############################## #用于归档完结工单的产量时间等信息 drop procedure if exists UpdateMesMoDailyYield; CREATE DEFINER = CURRENT_USER PROCEDURE UpdateMesMoDailyYield() BEGIN ###建立临时表处理数据 DROP TABLE IF EXISTS mesmodailyyieldtemp; CREATE TABLE mesmodailyyieldtemp ( mesmoname varchar(255) not null comment 'MES工单/炉次号', erpmoname varchar(255) null comment 'ERP工单号', eqpid varchar(255) not null comment '炉台号', area varchar(255) null comment '车间', area1 varchar(255) null comment '片区', mfgdate datetime null comment '归档时间-以完结出炉时间', finishdate datetime null comment '完结时间', moprod varchar(255) null comment '工单产品', moprodname varchar(255) null comment '工单产品物料编码', moproddesc varchar(255) null comment '工单物料描述', stovetime datetime null comment '初投时间', crusize varchar(255) null comment '热场尺寸', crucible varchar(255) null comment '坩埚厂商', cruciblesn varchar(255) null comment '坩埚编码', adjustcruciblecode varchar(255) null comment '修正后的坩埚简称编码', adjustcrucible varchar(255) null comment '修正后的坩埚简称', totalstoveweight decimal(10, 3) null comment '投炉总重', totaloutweight decimal(10, 3) null comment '出炉总重', totallength int null comment '出炉长度', totalqclength int null comment '出炉检验有效长度', rod decimal(10, 3) null comment '圆棒折重系数', totalqcweight decimal(10, 3) null comment '总出炉有效重量-圆棒', totaldays decimal(10, 3) null comment '工单运行时长', mostatus varchar(5) null comment 'MES中工单状态' ); ##拉取MES工单的清单,剔除已关闭和待排产的部分 replace into mesmodailyyieldtemp(mesmoname, eqpid, erpmoname, mostatus, moprodname, moproddesc) select distinct order_no, stove_no, job_code, status, material_code, material_name from mes_sync.mes_crystal_order where 1 = 1 and status <> '2' ##已关闭 and status <> '0' ##待排产 order by order_no; ###更新初投日期及片区信息 update mesmodailyyieldtemp mmd inner join reportdata.mostatus mo on mmd.mesmoname = mo.MESmoname inner join reportdata.equipment eq on mmd.eqpid = eq.eqpid set mmd.stovetime = mo.stovetime, mmd.moprod = mo.subprod, mmd.area = eq.area, mmd.area1 = eq.area1, mmd.finishdate = mo.finish_time where 1=1; ### 从投炉表中更新坩埚等信息 update mesmodailyyieldtemp mmd left join (SELECT distinct ft.order_no mesmoname, fd.factory crucible, fd.serial_no cruciblesn, replace(substring(material_name, 1, 3), '吋', '') crusize from mes_sync.mes_furnace_task ft right join mes_sync.mes_feeding_detail fd on (ft.feeding_task_id = fd.feeding_task_id and fd.material_type = '1')) cru on (mmd.mesmoname = cru.mesmoname) set mmd.cruciblesn = cru.cruciblesn, mmd.crucible = cru.crucible, mmd.crusize = cru.crusize where 1=1; ###更新工单运行时间 update mesmodailyyieldtemp mmd set mmd.totaldays = datediff(finishdate, stovetime) where 1 = 1 and mmd.finishdate is not null and mmd.stovetime is not null; ###更新完结计产时间 update mesmodailyyieldtemp mmd set mmd.mfgdate = DATE_FORMAT(DATE_add(mmd.finishdate, interval -510 MINUTE), '%Y-%m-%d') where mfgdate is null; ##处理坩埚厂商乱码 update mesmodailyyieldtemp mmd INNER JOIN reportdata.adjustcruc ac on (mmd.mesmoname = ac.mesmoname) set mmd.adjustcrucible = ac.crucible where mmd.adjustcrucible is null; ##根据坩埚 update mesmodailyyieldtemp mmd INNER JOIN reportdata.dict d on (mmd.adjustcrucible = d.dictkey and d.cate = 'cruccode') set mmd.adjustcruciblecode = d.value where 1=1; update mesmodailyyieldtemp mmd INNER JOIN reportdata.dict d on (mmd.crucible = d.dictkey and d.cate = 'crucname') set mmd.adjustcruciblecode = d.value, mmd.adjustcrucible = d.value1 where 1=1; ####修正部分佑鑫坩埚 update mesmodailyyieldtemp mmd set adjustcrucible = '佑鑫', adjustcruciblecode = 'YX' where 1 = 1 and cruciblesn like 'D%' and adjustcruciblecode is null; ####修正部分硕日坩埚 update mesmodailyyieldtemp mmd set adjustcrucible = '硕日', adjustcruciblecode = 'SR' where 1 = 1 and cruciblesn like 'SR%' and adjustcruciblecode is null; update mesmodailyyieldtemp mmd left join (SELECT ft.order_no mesmoname, sum(fd.weight) stoveweight from mes_sync.mes_furnace_task ft right join mes_sync.mes_feeding_detail fd on (ft.feeding_task_id = fd.feeding_task_id and fd.material_type = '2') group by ft.order_no) d on (mmd.mesmoname = d.mesmoname) set mmd.totalstoveweight = d.stoveweight where 1=1; update mesmodailyyieldtemp mmd left join (select order_no mesmoname, sum(weight) outweight, sum(length) 'length' from mes_sync.mes_production group by order_no) t on (mmd.mesmoname = t.mesmoname) set mmd.totallength = t.length, mmd.totaloutweight = t.outweight where 1=1; ###更新圆棒有效长度 update mesmodailyyieldtemp mmd INNER JOIN (select substring(production_code, 1, 10) mesmoname, sum(draw_length) qclength FROM mes_sync.mes_round_bar where right(code, 1) = '0' group by substring(production_code, 1, 10)) ps on (mmd.mesmoname = ps.mesmoname) set mmd.totalqclength = ps.qclength where mmd.totalqclength is null; ###更新折重系数 update mesmodailyyieldtemp mmd INNER JOIN mes_sync.yz_mes_spec yms on (mmd.moprod = yms.spec_code) set mmd.rod = yms.hair_rod_coefficient where mmd.rod is null; ###更新折重系数——MES中未维护的使用自己维护的补充 update mesmodailyyieldtemp mmd INNER JOIN reportdata.prod p on (mmd.moprod = p.code) set mmd.rod = p.round where mmd.rod is null; ###WFSY技术实验规格 update mesmodailyyieldtemp mmd INNER JOIN ( select distinct substring(moprodname, 1, 5) subprod, rod from mesmodailyyieldtemp where rod is not null ) p on (substring(mmd.moprodname,1,5) = p.subprod) set mmd.rod = p.rod where mmd.moprod = 'WFSY' and mmd.rod is null; ###折算圆棒有效重量 update mesmodailyyieldtemp mmd set mmd.totalqcweight = mmd.totalqclength / mmd.rod where totalqcweight is null; ##从临时表查出来更新到完结工单产量表 replace into reportdata.mesmodailyyield select * from mesmodailyyieldtemp order by mfgdate desc; DROP TABLE mesmodailyyieldtemp; END;