fs-danaus
2022-05-13 2e60c6034fdfbcfbc4d7a91f0a84926688a50009
提交 | 用户 | age
a6a76f 1 package com.yc.ionic.build;
F 2
3 import com.google.gson.Gson;
4 import com.google.gson.GsonBuilder;
5 import com.yc.action.grid.GridUtils;
6 import com.yc.ionic.control.*;
7 import com.yc.service.grid.GridServiceIfc;
8 import com.yc.service.panel.GetDataTypeIfc;
9 import com.yc.service.panel.GformFilterIfc;
10 import com.yc.service.panel.SystemSettingsDao;
11 import com.yc.service.panel.TypeControlDao;
12 import com.yc.utils.Body;
13 import com.yc.utils.Cfg;
14 import com.yc.utils.Fields;
15 import com.yc.utils.PageInfo;
16 import org.apache.commons.io.FileUtils;
17 import org.springframework.beans.factory.annotation.Autowired;
18 import org.springframework.jdbc.support.rowset.SqlRowSet;
19 import org.springframework.stereotype.Service;
20
21 import java.io.File;
22 import java.io.IOException;
23 import java.sql.SQLException;
24 import java.util.ArrayList;
25 import java.util.HashMap;
26 import java.util.List;
27 import java.util.Map;
28
29 /**
30  *  
31  * 根据9802设置生成各个控件
32  * */
33 @Service
34 public class BuildListPage implements BuildListPageIfc{
35     @Autowired
36     SystemSettingsDao systemSettingsBo;
37     @Autowired
38     TypeControlDao typeControlDao;
39     @Autowired
40     private GformFilterIfc filterIfc;
41     @Autowired
42     GetDataTypeIfc getDataTypeIfc;
43     @Autowired
44     private GridServiceIfc gridService;//表格处理的业务类
45
46    private int winType=0;
47     private PostVo vo=new PostVo();
48     @Override
49     public PostVo getVo() {
50         return vo;
51     }
52     public void setVo(PostVo vo) {
53         this.vo = vo;
54     }
55     private  List<Map<String,String>> fillFT(int type, String ft,String sql) {
56
57     SqlRowSet rst=gridService.getFTData("".equalsIgnoreCase(ft)?0:Integer.valueOf(ft));
58
59     boolean flag=false;
60     List<Map<String,String>> list=new ArrayList<Map<String,String>>();
61     Map<String,String> map1=new HashMap<String,String>();
62     map1.put("fieldid", "");
63     map1.put("fieldname", "");
64     list.add(map1);
65     if(type==31||type==2||type==35||type==43||type==30||type==32){//2,类型,31类型下拉列表控件时,为三种情况,一个是静态sql,一个是动态sql,需要用页面的值替换再用ajax提交返回,另一个就是表号生成
66         
67         try{
68             if(sql!=null&&sql!=""&&sql.length()>0){//有sql参数
69                       // if(type==2){
70                         SqlRowSet set=  gridService.getJdbcTemplate().queryForRowSet(sql);
71                         if (!set.wasNull()) {
72                             while (set.next()) {
73                             Map<String,String> map=new HashMap<String,String>();
74                             map.put("fieldid", set.getString(1));
75                             map.put("fieldname", set.getString(2));
76                             list.add(map);
77                             }
78                             set=null;
79                         }
80                      //  }
81                 
82                    flag=true;
83             }
84         if(!flag){
85         if(!rst.wasNull()){
86         while(rst.next()){
87             Map<String,String> map=new HashMap<String,String>();
88             map.put("fieldid", rst.getString("interValue"));
89             map.put("fieldname", rst.getString("dictvalue"));
90             list.add(map);
91             }
92         }
93         }
94             
95         }catch(Exception e){
96         }finally{
97             rst=null;
98         }
99     }
100 return list;
101 }
102     private String getFirstField(String table,PageInfo page,String firstID) {
103     String field="";
104     //2,只取主表,主从表情况 及18,19类型,三表暂时不考虑
105     List<String> keys;
106     try {
107         keys = gridService.getPrimaryKey(table);
108         for(String str:keys){
109         if("".equals(field))
110             field+=str;
111         else
112             field+=";"+str;
113     }
114     } catch (SQLException e) {
115         // TODO Auto-generated catch block
116         e.printStackTrace();
117     }
118     if(field==null||"".equalsIgnoreCase(field)){
119         field=firstID;
120        // throw new ApplicationException(table+"-错误:未定义主键!");
121     }
122     page.setPrimeKey(field+";");
123     return field;
124 }
125     /**
126      * 根据不同类型决定不同的排序规则
127      *     //1,读取9801设置,
128         //2,根据不同类型再进行不同的设置(单据清单desc,明细 以docitem asc,)
129         //3,对于不是上面的二种情况不用排序
130      * */    
131 private  void setOrderBy(int order,String index1,String index2,String field,String orderFiled,PageInfo page){
132         String temp="";
133         if(order==1&&index1!=null&&!index1.isEmpty()){ //9801 主表
134             temp=setSqlOrderBy(index1," asc");
135         }else if(order==2&&index2!=null&&!index2.isEmpty()){//明细表
136             temp=setSqlOrderBy(index2," asc");
137         }
138         else{
139             if(orderFiled.isEmpty())
140             temp=setSqlOrderBy(field,order==1?" desc":" asc");
141             else
142              temp=orderFiled;
143             
144         }
145         String[] s=temp.replaceAll(",", " ").split("\\s+");//
146         String cols="";
147         String types="";
148         for(int j=0;j<s.length;j+=2){
149          if(j>0){
150                cols+=",";
151                types+=",";
152              }
153          cols+=s[j].equalsIgnoreCase("_ycid_")?"id":s[j];
154          types+="asc".equalsIgnoreCase(s[j+1])?"0":"1";
155         }
156         Cfg cfg=new Cfg();
157         
158                 cfg.setSortCols(cols);
159                cfg.setSortTypes(types);
160                Body body=new Body();
161                body.setPos(0);
162                List<Body> bodys=new ArrayList<Body>();
163                bodys.add(body);
164                page.setBody(bodys);
165                page.setCfg(cfg);
166             
167     }
168     private String setSqlOrderBy(String index22,String x) {//x为desc,asc
169         String temp="";
170         if("".equalsIgnoreCase(index22)||index22==null||"null".equalsIgnoreCase(index22)) return "";
171         index22=index22.replaceAll(";", ",");
172         String[] sorts=index22.split(",");
173         int index=0;
174         for(String s:sorts){
175          String[] str=s.split("\\s");
176          if(str.length==2){
177              if(index>0)
178                  temp+=","+str[0]+" "+str[1];
179                  else
180                  temp+=str[0]+" "+str[1]; 
181          }else{
182              if(index>0)
183              temp+=","+str[0]+" "+x;
184              else
185              temp+=str[0]+" "+x; 
186          }
187          index++;
188         }
189         return temp;
190     }
191     @Override
192     /**
193      * 是否为单据类型,
194      * **/
195     public boolean isDanJun(){
196         if(this.winType==15||this.winType==9||this.winType==17||this.winType==499||this.winType==497) 
197             return true;
198         else
199             return false;
200     }
201        
202     /* (non-Javadoc)
203      * @see com.yc.ionic.build.BuildListPageIfc1#createPageInfo(java.lang.String, int)
204      */
205     @Override
206     public PageInfo createPageInfo(String formid,int headflag,int type){//生成TGData相关的配置信息
207     this.winType=type;
208     PageInfo page=new PageInfo();
209     Map<String, Object>  gform=gridService.getSimpleJdbcTemplate().queryForMap("select * from gform where formid = ?",formid);
210     List<Map<String,Object>> gfield=null;
211     prossGform(gform);//生成提交URL所需要的参数
212     String tablename="";
213     String orderFiled="";
214     StringBuffer strFiled=new StringBuffer();
215     if(headflag==0||headflag==2){
216         tablename=gform.get("hdtable")+"";
217         gfield=gridService.getSimpleJdbcTemplate().queryForList("select "+gridService.getGET_GFIELD9().toLowerCase()+" from gfield where formid=? and HeadFlag=?  and DataLink=1 and isload=1 order by statisid asc",formid, 0);
218     }
219     else if(headflag==1||headflag==3){
220         tablename=gform.get("dttable")+"";
221         gfield=gridService.getSimpleJdbcTemplate().queryForList("select "+gridService.getGET_GFIELD9().toLowerCase()+" from gfield where formid=? and HeadFlag=?   and DataLink=1 and isload=1 order by statisid asc",formid, 1);
222         
223     }
224     int ind=0;
225     //处理生成查询字段
226     String firstID="";//第一个字段名称
227     for(Map<String,Object> map:gfield){
228         String id=(map.get("fieldid")+"");
229         if(ind>0) strFiled.append(",");
230             strFiled.append(id);
231             if(firstID=="") firstID=id;
232             if(headflag==0&&orderFiled==""){//排序字段
233             if(id.equalsIgnoreCase("doccode")){ 
234                 orderFiled=id+" desc";
235             }
236             if(id.equalsIgnoreCase("docdate")) {
237                 orderFiled=orderFiled.length()==0?id+" desc":","+id+" desc";
238             }
239         }
240         else if(headflag==1&&orderFiled==""){
241             if(id.equalsIgnoreCase("docitem")) 
242                 orderFiled=id+" asc";
243         }
244             ind++;
245     }
246     Fields fieds=new Fields();
247     fieds.setFieldsName(strFiled.toString().toLowerCase());
248     page.setFields(fieds);
249     if("".equalsIgnoreCase(orderFiled)) orderFiled=firstID+" desc";
250     setOrderBy(setOrderName(headflag), gform.get("index1")==null?null:gform.get("index1")+"", gform.get("index2")==null?null:gform.get("index2")+"", getFirstField(tablename,page,firstID), orderFiled, page);    
251     return page;
252     }
253     /**
254      * 根据类型选用不同的字段作为排序
255      * @return 1表示清单,2表示明细
256      * **/
257     private  int setOrderName(int connum){
258
259             switch (this.winType){            
260             case 9:
261             case 15:
262             case 17:
263             case 499:    
264             case 497:
265                 if(connum==0){ 
266                     //isList=t
267                     return 1;
268                 }
269                 else
270                     return 2;
271             case 1:    
272                 //if(dto.b497||dto.b499)
273                 //return 2;
274                 //else
275                     return 1 ;
276             default:
277                 return 1;
278             }
279         }
280     private void prossGform(Map<String, Object> gform) {
281     vo.dataformid=(gform.get("dataformid")==null||(gform.get("dataformid")+"").length()==0||(gform.get("dataformid")+"").equalsIgnoreCase("0"))?"":(gform.get("dataformid")+(!this.isDanJun()?"":"|"+gform.get("predocstatus")+""));
282     vo.tranformid=(gform.get("dataformid")==null||(gform.get("dataformid")+"").length()==0||(gform.get("dataformid")+"").equalsIgnoreCase("0"))?"":(gform.get("dataformid")+"");
283     vo.formdatafilters=gform.get("formdatafilters")==null?"":GridUtils.replaceBlank(gform.get("formdatafilters")+"");
284     vo.ProcGroupafterSavedoc=gform.get("ProcGroupafterSavedoc")==null?"":GridUtils.replaceBlank(gform.get("ProcGroupafterSavedoc")+"");
285     vo.trangroup=gform.get("transgroupcode")==null?"":gform.get("transgroupcode")+"";
286     vo.DealAfterDocSave=gform.get("DealAfterDocSave")==null?"":GridUtils.replaceBlank(gform.get("DealAfterDocSave")+"");
287     vo.revokeProc=gform.get("RevokeBtnProcName")==null?"":GridUtils.replaceBlank(gform.get("RevokeBtnProcName")+"");
288     vo.autopaging=(gform.get("autopaging")==null||"0".equalsIgnoreCase(gform.get("autopaging")+""))?"3":"1";
289     vo.cancelProc=gform.get("CancelBtnProcName")==null?"":GridUtils.replaceBlank(gform.get("CancelBtnProcName")+"");
290     vo.cancelisSave=gform.get("CancelIsSave")+"";
291     }
292     /* 生成控件代码
293      */
294     @Override
295     public Info create(int formId,int otype,String root,String dbid,String path,List<Map<String, Object> > gfList, int headflag,List<String> pop_list,boolean isearch){
296
297     StringBuffer html = new StringBuffer();
298     StringBuffer js = new StringBuffer();
299     StringBuffer pop_js = new StringBuffer();
300     String pic="";
301     int index=0;
302     try{
303     for(Map<String, Object> map:gfList){
304         String dec=map.get("gridcaption")==null?"":map.get("gridcaption")+"";//表格描述
305         String fieldname=map.get("fieldname")==null?"":map.get("fieldname")+"";//字段描述
306         String temp=(dec==null||"".equalsIgnoreCase(dec))?fieldname:dec;//如果没定义表描述就取字段名称作为表格显示字段
307         map.put("fieldname",temp);
308         if(index==0) html.append("<div class=\"list\">\n");//增加行的html
309        int type=0;
310        if(headflag==0) {
311            if("1".equalsIgnoreCase(map.get("ControlType")+"")
312                &&GridUtils.prossRowSetDataType_Int(map, "HeightNum")>1) {//1类型控件 但设置大于1的行高,表示需要换成7类型
313             
314             type=7;
315         }else
316            type=Integer.valueOf(map.get("controltype")+"");
317             
318         if(GridUtils.prossRowSetDataType_Int(map, "ControlType")==1
319             &&!GridUtils.prossRowSetDataType_String(map, "hyperlinkft").equalsIgnoreCase("")) {//有超链接情况
320         type=-1;
321         }
322        }
323        else
324            type=Integer.valueOf(map.get("gridcontroltype")+"");
325       // map.put("_headflag", headflag);//把当前是读主表还是从表的信标记加进去
326        //处理增加扫码功能
327        if(GridUtils.prossRowSetDataType_Int(map, "scancodefield")==1) {type=-3;}
328        //如果勾选了排除则不生成控件
329        if(GridUtils.prossRowSetDataType_Int(map, "isAPPExcludeField")==1) {continue;}
330         switch(type){
331         case 5:
332             map.put("mobType", 1);
333             Type_5 t5=new Type_5(map, path,5);
334             t5.create();
335             html.append(t5.getInfo().getHtml());
336             js.append(t5.getInfo().getJs());
337             break;
338         case 33:
339             Type_33 t33=new Type_33(map, null, null,path, 33);//TODO 未完善
340             t33.create();
341             html.append(t33.getInfo().getHtml());
342             js.append(t33.getInfo().getJs());
343             break;
344         case 42:
345             //map.put("_headflag", headflag);//把当前是读主表还是从表的信标记加进去
346             Type_42 t42=new Type_42(map, path,42);
347             t42.create();
348             html.append(t42.getInfo().getHtml());
349             js.append(t42.getInfo().getJs());
350             break;
351             case 3:
352                 //map.put("_headflag", headflag);//把当前是读主表还是从表的信标记加进去
353             Type_3 t3=new Type_3(map, path,3);
354             t3.create();
355             html.append(t3.getInfo().getHtml());
356             String temp1=t3.getInfo().getJs();
357             temp1=temp1.replaceAll("@_popformid_@", map.get("ft")+"").replaceAll("@_poptype_@", map.get("ftformtype")+"");
358             t3.getInfo().setJs(temp1);
359             js.append(t3.getInfo().getJs());
360 //           if( !pop_list.contains(map.get("ft")+"")){//不存在才生成
361 //               pop_js.append( copyPoP(dbid,map.get("ft")+"",map.get("ftformtype")+"",root));
362 //               pop_list.add(map.get("ft")+"");
363 //           }
364             break;
365         case -3:        
366             Type_3 t31=new Type_3(map, path,-3);
367             t31.create();
368             html.append(t31.getInfo().getHtml());
369             String temp11=t31.getInfo().getJs();
370             temp11=temp11.replaceAll("@_popformid_@", map.get("ft")+"").replaceAll("@_poptype_@", map.get("ftformtype")+"");
371             t31.getInfo().setJs(temp11);
372             js.append(t31.getInfo().getJs());
373             break;
374         case 1:
375             Type_1 t1=new Type_1(map, path,1);
376             t1.create();
377             html.append(t1.getInfo().getHtml());
378             js.append(t1.getInfo().getJs());
379             break;
380         case -1://转换成超链接输出
381             Type_1_ t_1=new Type_1_(map, path,-1);
382             t_1.create();
383             html.append(t_1.getInfo().getHtml());
384             js.append(t_1.getInfo().getJs());
385             break;
386         case 7:
387             Type_7 t7=new Type_7(map, path,7);
388             t7.create();
389             html.append(t7.getInfo().getHtml());
390             js.append(t7.getInfo().getJs());
391             break;
392         case 2:
393         case 31:
394         case 35:
395               Type_2 t2=new Type_2(map, path, 2);
396               t2.create();
397               String js2= t2.getInfo().getJs();
398               String h2=t2.getInfo().getHtml();
399             processType2(html, js, map, type, t2, js2, h2);
400             break;
401             case 43:
402                 if(!isearch) {
403                     Type_43 t43 = new Type_43(map, path, 43);
404                     t43.create();
405                     String js43 = t43.getInfo().getJs();
406                     String h43 = t43.getInfo().getHtml();
407                     //动态sql
408                     String sql43 = map.get("SqlScript") == null ? "" : map.get("SqlScript") + "";
409                     String ft43 = map.get("ft") == null ? "" : map.get("ft") + "";
410                     //存在这种情况,是需要执行动态sql
411                     if ((sql43.indexOf("&") > -1 || sql43.indexOf("@") > -1) || "".equals(ft43)) {
412                         js43 = js43.replaceAll("@_list_@", "[]").replaceAll("@_ft_@", ft43);
413                         //因为参数需要替换,不能用这个指令,
414                         h43 = h43.replaceAll("@_dysql_@", sql43).replaceAll("@_ft_@", ft43)
415                                 .replaceAll("@_yc-dysql-select_@", "");
416                         js43 += " $scope.dysql.push('" + GridUtils.prossRowSetDataType_String(map,"fieldid").toLowerCase() + "_select" + "');";
417                     } else {//事先取数据到页面
418                         js43 = js43.replaceAll("@_list_@", GridUtils.toJson(this.fillFT(type, ft43, sql43)));
419                         h43 = h43.replaceAll("@_dysql_@", "").replaceAll("@_ft_@", "")
420                                 .replaceAll("@_yc-dysql-select_@", "yc-dysql-select");
421                         js43 += " $scope.dysql.push('" + GridUtils.prossRowSetDataType_String(map,"fieldid").toLowerCase() + "_select" + "');";
422                     }
423                     String newId = GridUtils.prossRowSetDataType_String(map, "fieldid").toLowerCase() + "_select";
424                     js43 = js43.replaceAll("@_fieldidselect_@", newId);
425
426                     h43 = h43.replaceAll("@_fieldidselect_@", newId);
427                     t43.getInfo().setJs(js43);
428                     t43.getInfo().setHtml(h43);
429                     html.append(t43.getInfo().getHtml());
430                     js.append(t43.getInfo().getJs());
431                 }
432                 break;
433          case 6:
434              Type_6 t6=new Type_6(map, path,6);
435              t6.create();
436              html.append(t6.getInfo().getHtml());
437              js.append(t6.getInfo().getJs());
438             break;
439          case 9://单个附件
440              Type_9 t9=new Type_9(map, path,9);
441              t9.create();
442              html.append(t9.getInfo().getHtml());
443              js.append(t9.getInfo().getJs());
444              pic+=(map.get("fieldid")+"").toLowerCase()+";";
445             break;
446          case 19://多附件 图片字段
447              Type_19 t19=new Type_19(map, path,19);
448              t19.create();
449              html.append(t19.getInfo().getHtml());
450              js.append(t19.getInfo().getJs());
451              pic+=(map.get("fieldid")+"").toLowerCase()+";";
452             break;
453          case 38:
454              break;
455         default:
456             Type_1 t11=new Type_1(map, path,1);
457             t11.create();
458             html.append(t11.getInfo().getHtml());
459             js.append(t11.getInfo().getJs());
460             break;
461         }
462         index++;
463     }
464     }catch(Exception e){
465         e.printStackTrace();
466     }
467     if(index>0) html.append("\n</div>\n");
468     Info info=new Info();
469     info.setHtml(html.toString());
470     info.setJs(js.toString());
471     info.setPop_js(pop_js.toString());
472     info.setPicField(pic);
473     return info;
474     }
475
476     public void processType2(StringBuffer html, StringBuffer js, Map<String, Object> map, int type, Type_2 t2, String js2, String h2) {
477         Gson gs=new GsonBuilder().disableHtmlEscaping().create();
478         String sql=map.get("SqlScript")==null?"":map.get("SqlScript")+"";//动态sql
479         String ft=map.get("ft")==null?"":map.get("ft")+"";
480         if((sql.indexOf("&")>-1||sql.indexOf("@")>-1)||(type==31||type==35)){//存在这种情况,是需要执行动态sql
481         js2=js2.replaceAll("@_list_@","[]").replaceAll("@_ft_@",ft).replaceAll("@_dysql_@", sql).replaceAll("@_ft_@",ft)
482                 .replaceAll("@_yc-dysql-select_@","");
483         h2=h2.replaceAll("@_dysql_@", sql).replaceAll("@_ft_@",ft)
484             .replaceAll("@_yc-dysql-select_@","");//因为参数需要替换,不能用这个指令,
485         }else{//事先取数据到页面
486         js2=js2.replaceAll("@_list_@", gs.toJson(this.fillFT(type, ft, sql))).replaceAll("@_dysql_@", sql).replaceAll("@_ft_@",ft)
487                 .replaceAll("@_yc-dysql-select_@","");
488         h2=h2.replaceAll( "@_dysql_@", "").replaceAll("@_ft_@","")
489             .replaceAll("@_yc-dysql-select_@","yc-dysql-select");
490         }
491 //            if(GridUtils.prossRowSetDataType_Int(map,"calcufield")>0){
492 //                js2.replaceAll("@_calcu_@", "calcufield('" + (map.get("fieldid") + "").toLowerCase() + "');");
493 //            }else{
494 //                js2.replaceAll("@_calcu_@", "");
495 //            }
496         js2+=" $scope.dysql.push('"+(map.get("fieldid")+"_select").toLowerCase()+"');";
497         t2.getInfo().setJs(js2);
498         t2.getInfo().setHtml(h2);
499         html.append( t2.getInfo().getHtml());
500         js.append(t2.getInfo().getJs());
501     }
502
503     /**
504      * copy 对应的3点弹出js代码到当前功能号的app.js里面
505      * */
506     private String copyPoP(String dbid, String pformid, String ptype,String root) {
507     String s="";
508     try {
509         s = FileUtils.readFileToString(new File(root+ File.separator + "app" + File.separator +"ionic"+ File.separator+dbid+File.separator+pformid+"/"+ptype+"/pop_app.js"));
510     } catch (IOException e) {
511         // TODO Auto-generated catch block
512         e.printStackTrace();
513     }
514     return s;
515     }
516     @Override
517     public String checkOA(String formid) {
518     String sql="declare @s varchar(max) select @s='' select   @s=@s+fieldid+';' from gfieldApprovedButton where  formid=? select @s";
519     return gridService.getSimpleJdbcTemplate().queryForObject(sql, new Object[]{formid},String.class);
520     }
521
522 }