package com.miniframe.bisiness.system; import java.util.*; import com.miniframe.core.ExecProcessFlow; import com.miniframe.core.exception.BusinessException; import com.miniframe.core.ext.UtilTools; import com.miniframe.generate.business.system.model.M00002BaseModel; import com.miniframe.model.system.*; import com.miniframe.model.system.dao.*; import com.miniframe.ptdj.AllPahtsDFS; import javax.rmi.CORBA.Util; /** * 基础系统,“平台对接预设路径”逻辑处理(重新生成不覆盖)。 */ public class M00002Service extends M00002BaseModel implements ExecProcessFlow { private static final long serialVersionUID = -7051358269847459502L; /** * 基础系统,“平台对接预设路径”业务核心处理 */ public void transExecute() throws Exception { Integer aid =this.getA_m00002().getAid(); String lname =this.getA_m00002().getLname(); String lnodes =this.getA_m00002().getLnodes(); String personsites=this.getA_m00002().getPersonsites(); // String[] persons = personsites.split(";"); // for (String p:persons) { // String[] st =p.split(","); // if(st.length!=3){ // throw new BusinessException("EMB00003"); // } // } DMwayMapper wdao = UtilTools.getBean(DMwayMapper.class); DAccidentMapper accDao = UtilTools.getBean(DAccidentMapper.class); DAccident da =accDao.selectByPrimaryKey(aid); if(da==null){ throw new BusinessException("EB3000002"); } DMwaySQLBuilder wsb =new DMwaySQLBuilder(); DMwaySQLBuilder.Criteria wsc =wsb.createCriteria(); wsc.andAidEqualTo(aid); wsc.andLnameEqualTo(lname); List ways= wdao.selectByExample(wsb); if(ways.isEmpty()){ DMway mway =new DMway(); mway.setAid(aid); mway.setLname(lname); mway.setLnodes(lnodes); mway.setLevel("0"); // mway.setPersonsites(personsites); wdao.insertSelective(mway); }else{ DMway mway =ways.get(0); mway.setLnodes(lnodes); mway.setLevel("0"); // mway.setPersonsites(personsites); wdao.updateByPrimaryKey(mway); } List ways2= wdao.selectByExample(wsb); DMway mway =ways2.get(0); //作业地点,pipes88,pipes185,pipes184,pipes183,pipes168,pipes165,pipes166,pipes165,pipes163,pipes159,pipes162,pipes159,pipes161,pipes159,pipes160,pipes131,pipes8,主井,地面 saveMayNodes(lnodes,mway); } //根据映射生成路径信息 private void saveMayNodes(String lnodes,DMway way) throws BusinessException { DPtpipeassMapper ptDao = UtilTools.getBean(DPtpipeassMapper.class); DPtpipeassSQLBuilder ptsb = new DPtpipeassSQLBuilder(); DPipeMapper pDao = UtilTools.getBean(DPipeMapper.class); DPipeSQLBuilder psb =new DPipeSQLBuilder(); String[] lnode_s = lnodes.split(","); List lnode_sl = new ArrayList<>(); for (int i = 1; i < lnode_s.length-2; i++) { lnode_sl.add(lnode_s[i]); } List pList = getdPipes(ptDao, ptsb, pDao, lnode_sl); DPipe genp=pList.get(0); updateWayPerson(way, genp); AllPahtsDFS pathFinder = new AllPahtsDFS(); DPipeSQLBuilder.Criteria psc = psb.createCriteria(); DPipe genPipe = pList.get(0); List pids = getPids(pList, pathFinder, genPipe); List ps = new ArrayList<>(); for (Integer pid: pids) { ps.add(pDao.selectByPrimaryKey(pid)); } List nids = getNids(ps); insetWayNodes(way, nids); } /** * 更新人员定位数据 * @param way * @param genp */ private void updateWayPerson(DMway way, DPipe genp) { DMwayMapper wdao = UtilTools.getBean(DMwayMapper.class); way.setPersonsites(genp.getCode()); wdao.updateByPrimaryKey(way); } /** * 根据平台映射关系 获取 管道 * @param ptDao * @param ptsb * @param pDao * @param lnode_sl * @return * @throws BusinessException */ private List getdPipes(DPtpipeassMapper ptDao, DPtpipeassSQLBuilder ptsb, DPipeMapper pDao, List lnode_sl) throws BusinessException { List ptpList = new ArrayList<>(); for (String ptcode : lnode_sl) { ptsb.clear(); DPtpipeassSQLBuilder.Criteria ptsc = ptsb.createCriteria(); ptsc.andPtcodeEqualTo(ptcode); List ptpsonList = new ArrayList<>(); ptpsonList= ptDao.selectByExample(ptsb); if(!ptpsonList.isEmpty()){ ptpList.addAll(ptpsonList); } } List pList= new ArrayList<>(); System.out.println("------------------"); for (DPtpipeass pt: ptpList) { DPipe p = pDao.selectByPrimaryKey(pt.getPid()); if(p !=null){ System.out.println(p.getId()); pList.add(p); } } if(pList.isEmpty()){ throw new BusinessException("EMB00004"); } return pList; } /** * 根据DFS 规则 获取路径 * @param pList * @param pathFinder * @param genPipe * @return * @throws BusinessException */ private List getPids(List pList, AllPahtsDFS pathFinder, DPipe genPipe) throws BusinessException { //结果队列 Queue queue = new LinkedList<>(); queue.add(genPipe); List notids = new ArrayList<>(); notids.add(genPipe.getId()); while (!queue.isEmpty()){ DPipe fpipe = queue.poll(); List sonList = getSonPipes(fpipe,notids); for (DPipe sonPipe: sonList) { pathFinder.addEdge(fpipe.getId(),sonPipe.getId()); notids.add(sonPipe.getId());//已经查询的数据排除 // System.out.println(fpipe.getId()+","+sonPipe.getId()); } if(sonList.isEmpty()){ continue; } for (DPipe sonPipe: sonList) { queue.add(sonPipe); } } System.out.println("------------------"); //获取所有路径 List> paths= pathFinder.findAllPaths(pList.get(0).getId(), pList.get(pList.size()-1).getId()); if(paths.isEmpty()){ throw new BusinessException("EMB00004"); } List pids = paths.get(0); return pids; } /** * 根据节点编号保存 DMwayNode * @param way * @param nids */ private void insetWayNodes(DMway way, List nids) { //删除历史 DMwaynodeMapper mwnDao =UtilTools.getBean(DMwaynodeMapper.class); DMwaynodeSQLBuilder mwnSb = new DMwaynodeSQLBuilder(); DMwaynodeSQLBuilder.Criteria mwnsc = mwnSb.createCriteria(); mwnsc.andMwidEqualTo(way.getId()); mwnDao.deleteByExample(mwnSb); //新增 DNodeMapper nodeDao =UtilTools.getBean(DNodeMapper.class); int seq =0; for (Integer nid: nids) { DNode n = nodeDao.selectByPrimaryKey(nid); DMwaynode mwaynode = new DMwaynode(); mwaynode.setMwid(way.getId()); mwaynode.setNcode(n.getCode()); mwaynode.setNid(n.getId()); mwaynode.setNname(n.getName()); mwaynode.setSeq(seq++); mwnDao.insertSelective(mwaynode); } } /** * 按顺序获取 节点编号 * @param ps * @return */ private List getNids(List ps) { List nids = new ArrayList<>(); DPipe temp =null; for (int i = 0; i< ps.size(); i++) { DPipe p = ps.get(i); if(temp==null){ temp =p; }else { int x1 = temp.getSnid(); int x2 = temp.getEnid(); int y1 = p.getSnid(); int y2 = p.getEnid(); if(x1 ==y1){ nids.add(x2); nids.add(x1); nids.add(y2); }else if (x1==y2){ nids.add(x2); nids.add(x1); nids.add(y1); }else if(x2==y1){ nids.add(x1); nids.add(x2); nids.add(y2); }else if(x2==y2){ nids.add(x1); nids.add(x2); nids.add(y1); } } temp= p; } System.out.println(nids); LinkedHashSet set = new LinkedHashSet<>(nids); nids = new ArrayList<>(set); System.out.println("------------------"); System.out.println(nids); return nids; } private List getSonPipes(DPipe fPipe,List notids){ DPipeMapper pDao = UtilTools.getBean(DPipeMapper.class); DPipeSQLBuilder psb =new DPipeSQLBuilder(); DPipeSQLBuilder.Criteria psc = psb.createCriteria(); List nids = new ArrayList<>(); nids.add(fPipe.getSnid()); nids.add(fPipe.getEnid()); psc.andSnidIn(nids); psc.andIdNotIn(notids); List s1List = pDao.selectByExample(psb); psb.clear(); psc = psb.createCriteria(); psc.andEnidIn(nids); psc.andIdNotIn(notids); List s2List = pDao.selectByExample(psb); s1List.addAll(s2List); return s1List; } /** * 基础系统,“平台对接预设路径”业务前处理 */ public void preTransFlow() throws Exception { this.validater(); } /** * 基础系统,“平台对接预设路径”业务后处理 */ public void afterTransFlow() throws Exception { } /** * 基础系统,“平台对接预设路径”逻辑入口处理方法 */ @SuppressWarnings("rawtypes") @Override public Map execute(Map vars) throws Exception { this.setTransMap(vars); preTransFlow();// 执行业务开始的规则检查和校验 transExecute();// 执行核心业务段 afterTransFlow();// 执行核心逻辑完成后的收尾逻辑 return this.getTransMap(); } }