package com.shlanbao.tzsc.base.interceptor; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import com.shlanbao.tzsc.base.dao.QualityCheckMesDataDaoI; import com.shlanbao.tzsc.base.dao.QualityCheckMesDataParamsDaoI; import com.shlanbao.tzsc.base.mapping.QualityCheckInfo; import com.shlanbao.tzsc.base.mapping.QualityCheckInfoParams; import com.shlanbao.tzsc.utils.tools.ApplicationContextUtil; import com.shlanbao.tzsc.utils.tools.DateUtil; import com.shlanbao.tzsc.utils.tools.MESConvertToJB; import com.shlanbao.tzsc.utils.tools.StringUtil; /** * 解析MES关于质检xml数据 * @author TRAVLER * */ public class AlalyQualityXML { private static AlalyQualityXML alalyQualityXML=null; private AlalyQualityXML() { } public static AlalyQualityXML getInstance(){ if(alalyQualityXML==null){ alalyQualityXML=new AlalyQualityXML(); } return alalyQualityXML; } /** * 解析保存xml * @param root * @param fileName * @return * TRAVLER * 20152015年12月24日上午10:02:38 */ public boolean handleQCXML(Document doc){ boolean flag=false; /*HashMap> map=null; Element node=doc.getRootElement(); Element fnode= node.element("messageCode"); try { map = alalyQZXML(root,fileName); } catch (Exception e) { e.printStackTrace(); return flag; } flag=saveQZ(map);*/ //return flag; return false; } /** * 解析质检xml,并封装成map * @param root * @param fileName 文件名 * @return */ @SuppressWarnings("rawtypes") public HashMap> alalyQZXML(Element root,String fileName) throws Exception{ HashMap> map=new HashMap>(); List ps=new ArrayList(); List info=new ArrayList(); QualityCheckInfo qzbean = null; QualityCheckInfoParams params = null; for (Iterator i = root.elementIterator(); i.hasNext();) { Element e = (Element) i.next(); String pNs = e.getName();//获取节点名 // 遍历SegmentItem if (pNs.equals("segmentItem")) { qzbean = new QualityCheckInfo(); qzbean.setFileInfo(fileName); for (Iterator i3 = e.elementIterator(); i3.hasNext();) { Element e4 = (Element) i3.next(); String tagName = e4.getName(); if (tagName.equals("sc")) { qzbean.setSc(getNodeStringVal(e4)); } else if (tagName.equals("st")) { qzbean.setSt(getNodeStringVal(e4)); } else if (tagName.equals("checkType")) { qzbean.setCheckType(getNodeStringVal(e4)); } else if (tagName.equals("sc_score")) { qzbean.setScScore(getNodeDoubleVal(e4)); } else if (tagName.equals("st_version")) { qzbean.setStVersion(getNodeStringVal(e4)); } else if (tagName.equals("description")) { qzbean.setMatDes(getNodeStringVal(e4)); } else if (tagName.equals("creation_date")) { //xml生成日期 需要转化 qzbean.setCreateDate(DateUtil.formatStringToDate(getNodeStringVal(e4), "yyyy-MM-dd HH:mm:ss")); } else if (tagName.equals("sampleInfo")) { // 解析班次班组牌号等信息 for (Iterator i4 = e4.elementIterator(); i4.hasNext();) { Element e5 =(Element) i4.next(); Element e6 = e5.element("value");// 值 String val = getNodeStringVal(e6); Element e7 = e5.element("code");// code值 String code = getNodeStringVal(e7); Element e8 = e5.element("ii");// 值的类型 String vp = getNodeStringVal(e8); if (vp.equals("ii_brand")) { // 牌号 qzbean.setMatName(val); } else if (vp.equals("ii_lot")) { // 生产批次 qzbean.setIiLot(val); } else if (vp.equals("ii_team")) { // 班组 qzbean.setTeamId(code); qzbean.setTeamName(val); } else if (vp.equals("ii_shift")) { // 班次 需要转换 qzbean.setShiftId(transShift(code)); qzbean.setShiftName(val); } else if (vp.equals("ii_chk")) { // 检验员 qzbean.setIiChk(val); } else if (vp.equals("ii_adt")) { // 审核人 qzbean.setIiAdk(val); } else if (vp.equals("ii_remark")) { // 备注 qzbean.setRemark(val); } else if (vp.equals("ii_coil_tz")) { // 卷烟机 qzbean.setRollerCode(transEqpCode(code)); qzbean.setRollerName(val); } else if (vp.equals("ii_pack_jb_tz")) { // 包装机 qzbean.setPackerCode(transEqpCode(code)); qzbean.setPackerName(val); } else if (vp.equals("ii_sealer_tz")) { // 封箱机 qzbean.setSealerCode(transEqpCode(code)); qzbean.setSealerName(val); } else if (vp.equals("ii_order")) { // 订单号 qzbean.setOrderNum(val); } else if (vp.equals("ii_samsequence")) { // 取样序号 qzbean.setSamSequence(val); } else if (vp.equals("ii_season_cpsh_tz")) { // 季度 qzbean.setSeasonCpsh(val); } else if (vp.equals("ii_chk_time_cpsh")) { // 检验日期 qzbean.setCheckTime(DateUtil.formatStringToDate(val, "yyyy-MM-dd HH:mm:ss")); } else if (vp.equals("ii_shift_tz")) { // 滕州班次 qzbean.setShiftTz(val); qzbean.setShiftTzCode(code); } } } else if (tagName.equals("sampleResults")) { // 质检详细信息 for (Iterator i5 = e4.elementIterator(); i5.hasNext();) { params =new QualityCheckInfoParams(); Element e9 = (Element) i5.next(); Element pg = e9.element("pg"); String pgv = this.getNodeStringVal(pg); params.setPgDes(pgv); Element pa = e9.element("pa"); String pav = this.getNodeStringVal(pa); params.setPaDes(pav); Element value_f = e9.element("value_f"); String vf = this.getNodeStringVal(value_f); params.setValueF(vf); Element sc_deduct = e9.element("sc_deduct"); Double scv=this.getNodeDoubleVal(sc_deduct); params.setScDeduct(scv); Element unit = e9.element("unit"); String uv = this.getNodeStringVal(unit); params.setUnit(uv); Element code = e9.element("code"); String cv =this.getNodeStringVal(code); params.setPaTypeCode(cv);//abc类别,当cell有节点时说明是物理指标 List cls = e9.elements("cell"); if (cls != null && cls.size() > 0) { // 物理指标 for (int k = 0; k < cls.size(); k++) { Element ce = (Element) cls.get(k); Element id = ce.element("id"); String t = this.getNodeStringVal(id); Element val = ce.element("value"); String va = this.getNodeStringVal(val); if (t.equals("c_mean")) { // 均值 params.setcMean(va); } else if (t.equals("c_sd")) { // 标偏 params.setcSd(va); } else if (t.equals("c_min")) { // 最小 params.setcMin(va); } else if (t.equals("c_max")) { // 最大 params.setcMax(va); } else if (t.equals("c_cv")) { // 变异系数 params.setcCv(va); } else if (t.equals("c_result")) { // 不合格支数 params.setcResult(va); } } } ps.add(params); } } } } } info.add(qzbean); map.put("QZParams", ps); map.put("QZInfo", info); return map; } /** * 保存质检数据到数据库 * 保存有异常,返回false * TODO * @param map * TRAVLER *2015年12月14日下午4:10:27 */ @SuppressWarnings("unchecked") public boolean saveQZ(HashMap> map) { boolean flag=false; QualityCheckInfo info=(QualityCheckInfo) map.get("QZInfo").get(0);//质检概要信息 List pls= (List) map.get("QZParams");//该质检的详细信息 QualityCheckMesDataDaoI infoDao=ApplicationContextUtil.getBean(QualityCheckMesDataDaoI.class); QualityCheckMesDataParamsDaoI InfoParamsDao=ApplicationContextUtil.getBean(QualityCheckMesDataParamsDaoI.class); QualityCheckInfo info2=null; try { //保存质检概述 info2 = infoDao.saveAndReturn(info); } catch (Exception e) { e.printStackTrace(); return flag; } if(info2!=null){ for (QualityCheckInfoParams qualityCheckInfoParams : pls) { qualityCheckInfoParams.setqId(info2.getId()); } //保存质检详细 flag=InfoParamsDao.batchInsertAndReturn(pls, QualityCheckInfoParams.class); } return flag; } /** * 获取节点的String 值 * TODO * @param e * @return * TRAVLER *2015年12月14日下午3:54:36 */ private String getNodeStringVal(Element e){ String r=null; if(null!=e){ r=e.getTextTrim(); } return r; } /** * 获取节点的double值 * TODO * @param e * @return * TRAVLER *2015年12月14日下午3:54:18 */ private Double getNodeDoubleVal(Element e){ Double r=0.0; if(null!=e){ String r2=e.getTextTrim(); if(StringUtil.isDouble(r2)){ r=Double.parseDouble(r2); } } return r; } /** * 这个不是滕州班次, * 滕州班次与数据库一致 * @param st * @return * TRAVLER * 20152015年12月24日上午9:17:50 */ private String transShift(String st){ String shift=""; if(st.equals("1")){ shift="3"; }else if(st.equals("2")){ shift="1"; }else if(st.equals("3")){ shift="2"; } return shift; } /** * 转换设备code * @param code * 1#到12#卷烟机 编码分别2101 --- 2112 数据库 1----12 计算:-2100 * * 1#到12#包装机 编码分别2201 --- 2212 数据库 31----42 计算:-2170 * * 1#到3#封箱机 编码分别2301 --- 2303 数据库 61----64 计算:-2240 * * @return * TRAVLER * 20152015年12月24日上午9:22:35 */ private String transEqpCode(String code) throws Exception{ return MESConvertToJB.transEqpCode(code); } }