/*
*
* Copyright (c) 2001-2006 泛微软件.
* 泛微协同商务系统,版权所有.
*
*/
package weaver.workflow.mode;
import weaver.log4j.Module;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.api.browser.bean.BrowserBean;
import com.api.browser.bean.BrowserValueInfo;
import com.api.browser.service.BrowserValueInfoService;
import com.api.browser.util.BrowserInitUtil;
import com.api.doc.detail.util.DocDownloadCheckUtil;
import com.api.odoc.util.OdocFileUtil;
import com.engine.fnaMulDimensions.util.BudgetBearerComInfo;
import com.engine.fnaMulDimensions.util.BudgetPeriodComInfo;
import com.engine.fnaMulDimensions.util.BudgetSubjectComInfo;
import com.engine.hrm.biz.OrganizationShowSetBiz;
import com.engine.workflow.biz.FieldInfo.FieldInfoBiz;
import com.engine.workflow.biz.NewReportBiz;
import com.engine.workflow.biz.SecondAuthBiz;
import com.engine.workflow.biz.RobotNode.RobotNodeBiz;
import com.engine.workflow.biz.RobotNode.RobotNodeServiceBiz;
import com.engine.workflow.biz.WorkflowBaseBiz;
import com.engine.workflow.biz.customizeBrowser.BrowserFieldUtil;
import com.engine.workflow.biz.customizeBrowser.BrowserFieldValueComInfo;
import com.engine.workflow.biz.customizeBrowser.CustomBrowserBiz;
import com.engine.workflow.biz.customizeBrowser.CustomizeBrowserRefreshCacheThread;
import com.engine.workflow.biz.excelDesign.DoSaveFreeExcelDesignBiz;
import com.engine.workflow.biz.excelDesign.MainSubWfSignBiz;
import com.engine.workflow.biz.freeNode.FreeNodeBiz;
import com.engine.workflow.cmd.workflowPath.node.form.GetShowDescCmd;
import com.engine.workflow.constant.ShowType;
import com.engine.workflow.constant.node.NodeType;
import com.engine.workflow.constant.ShowTypeEnum;
import com.engine.workflow.constant.SignSource;
import com.engine.workflow.constant.requestForm.RequestConstant;
import com.engine.workflow.entity.NodeSignInputSetEntity;
import com.engine.workflow.entity.core.*;
import com.engine.workflow.entity.excelDesign.MainSubSignEntity;
import com.engine.workflow.entity.nodeForm.NodeFormDesc;
import com.engine.workflow.util.CollectionUtil;
import com.engine.workflow.util.ListUtil;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import weaver.conn.RecordSet;
import weaver.cpt.capital.CapitalComInfo;
import weaver.crm.Maint.CustomerInfoComInfo;
import weaver.dateformat.DateTransformer;
import weaver.dateformat.UnifiedConversionInterface;
import weaver.docs.docs.DocComInfo;
import weaver.docs.senddoc.DocReceiveUnitComInfo;
import weaver.docs.webservices.DocAttachment;
import weaver.fna.general.RequestDetailImportUtil;
import weaver.fna.maintenance.BudgetfeeTypeComInfo;
import weaver.fna.maintenance.FnaSystemSetComInfo;
import weaver.formmode.tree.CustomTreeUtil;
import weaver.general.BaseBean;
import weaver.general.Util;
import weaver.hrm.User;
import weaver.hrm.check.JobComInfo;
import weaver.hrm.company.SubCompanyComInfo;
import weaver.hrm.companyvirtual.DepartmentVirtualComInfo;
import weaver.hrm.companyvirtual.SubCompanyVirtualComInfo;
import weaver.hrm.job.JobTitlesComInfo;
import weaver.hrm.resource.ResourceComInfo;
import weaver.proj.Maint.ProjectInfoComInfo;
import weaver.systeminfo.SystemEnv;
import weaver.workflow.exceldesign.DetailOrderManager;
import weaver.workflow.field.BrowserComInfo;
import weaver.workflow.request.*;
import weaver.workflow.workflow.*;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static weaver.general.Util.getIntValue;
import static weaver.general.Util.null2String;
/**
* Description: 表单字段信息类.
*
* @author mackjoe
* @version 1.0 04/07/06
*/
public class FieldInfo implements Cloneable {
private static final Log log = LogFactory.getLog(FieldInfo.class);
String hr = getHr();
private HttpServletRequest request;
//键为主表字段Id号,值为该字段值。
private Map mapMainTblFields = new HashMap();
//存储多个明细中的数据。第一级元素为单个明细数据,一个明细数据是一个Arraylist。
//有多行数据,每行数据是一个Map,其中一个字段ID号为键,字段值为值。
private List lstDetailTblFields = new ArrayList();
private ArrayList ManTableFields;
private ArrayList ManTableFieldValues;
private ArrayList ManTableFieldNames;
private ArrayList ManTableFieldFieldNames;
private ArrayList ManTableFieldDBTypes;
private ArrayList ManTableChildFields;
private ArrayList DetailTableFields;
private ArrayList DetailTableFieldValues;
private ArrayList DetailFieldIsViews;
private ArrayList DetailTableFieldIds;
private ArrayList DetailTableIds;
private ArrayList DetailTableFieldNames;
private ArrayList DetailFieldDBTypes;
private ArrayList DetailDBFieldNames;
private ArrayList DetailTableChildFields;
private ArrayList Nodes;
private ArrayList NodeNames;
private ArrayList ManUrlList;
private ArrayList ManUrlLinkList;
private ArrayList DetailUrlList;
private ArrayList DetailUrlLinkList;
private ArrayList DetailTableNames;
private ArrayList DetailTableKeys;
private ArrayList SelectItemValues;
private ArrayList SelectItems;
private ArrayList SelectDefaults;
private BrowserComInfo urlcominfo;
private ResourceComInfo resourcecominfo;
private JobTitlesComInfo jobComInfo;
private WorkflowNodeComInfo workflowNodeComInfo;
private ProjectInfoComInfo prjcominfo;
private CustomerInfoComInfo crmcominfo;
private OrganizationShowSetBiz orgShowBiz;
private DepartmentVirtualComInfo deptVirComInfo;
private SubCompanyComInfo subcomcominfo;
private SubCompanyVirtualComInfo subCompVirComInfo;
private DocComInfo docominfo;
private CapitalComInfo capitalcominfo;
private WorkflowRequestComInfo wfrequestcominfo;
private DocReceiveUnitComInfo docReceiveUnitComInfo;
private int Requestid;
private int Isprint;
private String iswfshare;
private User user;
private ArrayList SelectCancelValues;
private BaseBean wfsbean;
private DocComInfo docinf;
private int isfromMobile;
private int printModeId;
private List> nodeMarkContent;
private int layoutNodeid = 0;
private int viewNodeidScope = 0;
private boolean isTableShow = false;//签字意见是否表格显示
private String tableContent = "";//表格内签字意见内容(除去表头和表尾)
private String lastTableContent = "";//多个签字意见放同一个单元格时,上一个单元格的tableContent,共用同一个表格
private MainSubSignEntity mainSubSignEntity;
private int remarkRequestid;// 签字意见的流程requestid
public FieldInfo() {
ManTableFields = new ArrayList();
ManTableFieldValues = new ArrayList();
ManTableFieldNames = new ArrayList();
ManTableFieldFieldNames = new ArrayList();
ManTableFieldDBTypes = new ArrayList();
DetailTableFields = new ArrayList();
DetailTableFieldValues = new ArrayList();
DetailFieldIsViews = new ArrayList();
DetailTableFieldNames = new ArrayList();
DetailTableFieldIds = new ArrayList();
DetailTableIds = new ArrayList();
DetailFieldDBTypes = new ArrayList();
DetailDBFieldNames = new ArrayList();
ManTableChildFields = new ArrayList();
DetailTableChildFields = new ArrayList();
Nodes = new ArrayList();
NodeNames = new ArrayList();
ManUrlList = new ArrayList();
ManUrlLinkList = new ArrayList();
DetailUrlList = new ArrayList();
DetailUrlLinkList = new ArrayList();
DetailTableNames = new ArrayList();
DetailTableKeys = new ArrayList();
SelectItems = new ArrayList();
SelectItemValues = new ArrayList();
SelectDefaults = new ArrayList();
user = null;
SelectCancelValues = new ArrayList();
workflowNodeComInfo = new WorkflowNodeComInfo();
try {
urlcominfo = new BrowserComInfo();
resourcecominfo = new ResourceComInfo();
jobComInfo = new JobTitlesComInfo();
prjcominfo = new ProjectInfoComInfo();
crmcominfo = new CustomerInfoComInfo();
orgShowBiz = new OrganizationShowSetBiz();
deptVirComInfo = new DepartmentVirtualComInfo();
subcomcominfo = new SubCompanyComInfo();
subCompVirComInfo = new SubCompanyVirtualComInfo();
docominfo = new DocComInfo();
capitalcominfo = new CapitalComInfo();
wfrequestcominfo = new WorkflowRequestComInfo();
docReceiveUnitComInfo = new DocReceiveUnitComInfo();
wfsbean = new BaseBean();
docinf = new DocComInfo();
mainSubSignEntity = new MainSubSignEntity();
} catch (Exception e) {
}
Requestid = 0;
iswfshare = "";
isfromMobile = 0;
}
public void initMainSubCfg(String efieldid) throws Exception{
//新增平行流程意见
if(efieldid.endsWith("_2") || efieldid.endsWith("_3") || efieldid.endsWith("_4")){ //标识是取主子流程意见
String[] arr = efieldid.split("_");
new BaseBean().writeLog("主子流程和平行流程efieldid:"+efieldid+" arr:"+JSON.toJSONString(arr));
if(arr.length == 3){
this.mainSubSignEntity.setWfid(Util.getIntValue(arr[0], 0));
this.mainSubSignEntity.setNodeid(Util.getIntValue(arr[1], 0));
this.mainSubSignEntity.setType(Util.getIntValue(arr[2], 0));
}else{
throw new Exception("主子流程节点设置存在异常");
}
}else{
this.mainSubSignEntity.setWfid(0);
this.mainSubSignEntity.setNodeid(0);
this.mainSubSignEntity.setType(0);
}
}
public MainSubSignEntity getMainSubSignEntity() {
return mainSubSignEntity;
}
public int getIsfromMobile() {
return isfromMobile;
}
public void setIsfromMobile(int isfromMobile) {
this.isfromMobile = isfromMobile;
}
public boolean isTableShow() {
return isTableShow;
}
public void setTableShow(boolean tableShow) {
isTableShow = tableShow;
}
public String getTableContent() {
return tableContent;
}
public void setTableContent(String tableContent) {
this.tableContent = tableContent;
}
public String getLastTableContent() {
return lastTableContent;
}
public void setLastTableContent(String lastTableContent) {
this.lastTableContent = lastTableContent;
}
/**
* 得到封存选项
*
* @return 得到封存选项
*/
public ArrayList getSelectCancelValues() {
return SelectCancelValues;
}
/**
* 获得BaseBean
*
* @return
*/
public BaseBean getWfsbean() {
if (wfsbean == null) {
wfsbean = new BaseBean();
}
return wfsbean;
}
/**
* 得到缺省被选项
*
* @return 缺省被选项
*/
public ArrayList getSelectDefaults() {
return SelectDefaults;
}
/**
* 得到选择下拉框的值
*
* @return 选择下拉框的值
*/
public ArrayList getSelectItemValues() {
return SelectItemValues;
}
/**
* 得到下拉框选择项
*
* @return 下拉框选择项
*/
public ArrayList getSelectItems() {
return SelectItems;
}
/**
* 得到明细单据的和主表的关联字段
*
* @return 明细单据的和主表的关联字段
*/
public ArrayList getDetailTableKeys() {
return DetailTableKeys;
}
/**
* 得到明细单据表名
*
* @return 明细单据表名
*/
public ArrayList getDetailTableNames() {
return DetailTableNames;
}
/**
* 得到明细单据的字段名
*
* @return 明细单据的字段名
*/
public ArrayList getDetailDBFieldNames() {
return DetailDBFieldNames;
}
/**
* 得到明细单据的字段数据类型
*
* @return 明细单据的字段数据类型
*/
public ArrayList getDetailFieldDBTypes() {
return DetailFieldDBTypes;
}
/**
* 得到明细单据的字段ID
*
* @return 字段ID
*/
public ArrayList getDetailTableFieldIds() {
return DetailTableFieldIds;
}
public HttpServletRequest getRequest() {
return request;
}
public void setRequest(HttpServletRequest request) {
this.request = request;
}
/**
* 得到明细单据的明细行ID
*
* @return 明细行ID
*/
public ArrayList getDetailTableIds() {
return DetailTableIds;
}
/**
* 得到请求ID
*
* @return 请求ID
*/
public int getRequestid() {
return Requestid;
}
/**
* 设置请求ID
*
* @param requestid 请求ID
*/
public void setRequestid(int requestid) {
Requestid = requestid;
}
/**
* 设置用户对象
*
* @param paraValue 请求ID
*/
public void setUser(User paraValue) {
user = paraValue;
}
/**
* 得到主字段值
*
* @return 主字段值
*/
public ArrayList getManTableFieldValues() {
return ManTableFieldValues;
}
/**
* 得到明细表字段值
*
* @return 明细表字段值
*/
public ArrayList getDetailTableFieldValues() {
return DetailTableFieldValues;
}
/**
* 得到明细表字段值
*
* @return 明细表字段值
*/
public ArrayList getDetailFieldIsViews() {
return DetailFieldIsViews;
}
/**
* 得到主表BROSWER字段的选择框页面地址
*
* @return 主表BROSWER字段的选择框页面地址
*/
public ArrayList getManUrlList() {
return ManUrlList;
}
/**
* 得到主表BROSWER字段的内容浏览页面地址
*
* @return 主表BROSWER字段的内容浏览页面地址
*/
public ArrayList getManUrlLinkList() {
return ManUrlLinkList;
}
/**
* 得到明细表BROSWER字段的选择框页面地址
*
* @return 主表BROSWER字段的选择框页面地址
*/
public ArrayList getDetailUrlList() {
return DetailUrlList;
}
/**
* 得到明细表BROSWER字段的内容浏览页面地址
*
* @return 主表BROSWER字段的内容浏览页面地址
*/
public ArrayList getDetailUrlLinkList() {
return DetailUrlLinkList;
}
/**
* 得到明细表字段集合
*
* @return 明细表字段集合
*/
public ArrayList getDetailTableFields() {
return DetailTableFields;
}
/**
* 得到明细表字段名称集合
*
* @return 明细表字段名称集合
*/
public ArrayList getDetailTableFieldNames() {
return DetailTableFieldNames;
}
/**
* 得到节点集合
*
* @return 节点集合
*/
public ArrayList getNodes() {
return Nodes;
}
/**
* 得到节点名称集合
*
* @return 节点名称集合
*/
public ArrayList getNodeNames() {
return NodeNames;
}
/**
* 得到主表字段集合
*
* @return 主表字段集合
*/
public ArrayList getManTableFields() {
return ManTableFields;
}
public Map getMainFieldValues() {
return mapMainTblFields;
}
public List getDetailFieldValues() {
return lstDetailTblFields;
}
/**
* 得到主表字段名称集合
*
* @return 主表字段名称集合
*/
public ArrayList getManTableFieldNames() {
return ManTableFieldNames;
}
/**
* 得到主表字段字段名称集合
*
* @return 主表字段字段名称集合
*/
public ArrayList getManTableFieldFieldNames() {
return ManTableFieldFieldNames;
}
/**
* 得到主字段的数据类型集合
*
* @return 主字段的数据类型集合
*/
public ArrayList getManTableFieldDBTypes() {
return ManTableFieldDBTypes;
}
public int getIsprint() {
return Isprint;
}
public void setIsprint(int print) {
Isprint = print;
}
public int getPrintModeId() {
return printModeId;
}
public void setPrintModeId(int printModeId) {
this.printModeId = printModeId;
}
/**
* 取得主表的字段信息
*
* @param formid 表单/单据ID
* @param isbill 是否单据
* @param languageid 显示语言
*/
public void GetManTableField(int formid, int isbill, int languageid) {
String linkaddress = "";
String id = "";
String fieldvalue = "";
String type = "";
String fielddbtype = "";
int htmltype = 1;
int childfieldid = 0;
RecordSet rs1 = new RecordSet();
RecordSet rs = new RecordSet();
String sql = "";
String fieldnames = "";
//表单
if (isbill == 0) {
rs.executeSql("select b.id,b.fieldhtmltype,b.type,b.fielddbtype,c.fieldlable,b.fieldname,b.childfieldid from workflow_formfield a,workflow_formdict b,workflow_fieldlable c where a.formid=c.formid and a.fieldid=c.fieldid and c.langurageid=" + languageid + " and a.formid=" + formid + " and a.fieldid=b.id and a.isdetail is null order by a.fieldorder");
List lstFieldIds = new ArrayList();
while (rs.next()) {
fieldvalue = "";
linkaddress = "";
id = rs.getString("id");
type = rs.getString("type");
htmltype = rs.getInt("fieldhtmltype");
fielddbtype = rs.getString("fielddbtype");
String fieldname = rs.getString("fieldname");
childfieldid = Util.getIntValue(rs.getString("childfieldid"), 0);
if (htmltype == 7) {
sql = "select * from workflow_specialfield where fieldid = " + id + " and isform = 1";
rs1.executeSql(sql);
if (rs1.next()) {
if (type.equals("2")) fieldvalue = rs1.getString("descriptivetext");
if (type.equals("1")) fieldvalue = rs1.getString("displayname");
linkaddress = Util.null2String(rs1.getString("linkaddress"));
}
} else {
if (fieldnames.equals("")) {
fieldnames = fieldname;
} else {
fieldnames += "," + fieldname;
}
}
if (htmltype == 3) {
if (type.equals("161") || type.equals("162") || type.equals("224") || type.equals("225"))
ManUrlList.add(urlcominfo.getBrowserurl(type) + "?type=" + fielddbtype);
else if (type.equals("256") || type.equals("257"))
ManUrlList.add(urlcominfo.getBrowserurl(type) + "?type=" + fielddbtype + "_" + type);
else
ManUrlList.add(urlcominfo.getBrowserurl(type));
ManUrlLinkList.add(urlcominfo.getLinkurl(type));
} else if (htmltype == 7 && type.equals("1")) {
ManUrlList.add("");
ManUrlLinkList.add(linkaddress);
} else {
ManUrlList.add("");
ManUrlLinkList.add("");
}
if (htmltype == 3 && (type.equals("224") || type.equals("225"))) { // sap自定义浏览按钮
fielddbtype = "varchar2(1000)";
if (type.equals("225")) {
fielddbtype = "varchar2(4000)";
}
}
ManTableFieldValues.add(fieldvalue);
ManTableFields.add("field" + id + "_" + type + "_" + htmltype);
ManTableFieldNames.add(rs.getString("fieldlable"));
ManTableFieldFieldNames.add(fieldname);
ManTableFieldDBTypes.add(fielddbtype);
ManTableChildFields.add("" + childfieldid);
lstFieldIds.add(id);
}
if (Requestid > 0 && !fieldnames.equals("")) {
sql = "select " + fieldnames + " from workflow_form where Requestid=" + Requestid;
rs1.executeSql(sql);
String[] colnames = rs1.getColumnName();
if (rs1.next()) {
for (int i = 0; i < colnames.length; i++) {
//int indx=ManTableFieldFieldNames.indexOf(colnames[i]);
int indx = Util.getListIndex(ManTableFieldFieldNames, colnames[i]);
if (indx > -1) {
fieldvalue = rs1.getString(colnames[i]);
ManTableFieldValues.set(indx, fieldvalue);
String fieldID = lstFieldIds.get(indx);
mapMainTblFields.put(fieldID, fieldvalue);
}
}
}
}
}
//单据
if (isbill == 1) {
rs.executeSql("select id,labelname,fieldhtmltype,type,fielddbtype,fieldname,childfieldid from workflow_billfield,HtmlLabelInfo where fieldlabel=indexid and languageid=" + languageid + " and billid=" + formid + " and viewtype=0 order by dsporder");
List lstFieldIds = new ArrayList();
while (rs.next()) {
fieldvalue = "";
linkaddress = "";
id = rs.getString("id");
type = rs.getString("type");
fielddbtype = rs.getString("fielddbtype");
htmltype = rs.getInt("fieldhtmltype");
String fieldname = rs.getString("fieldname");
childfieldid = Util.getIntValue(rs.getString("childfieldid"), 0);
if (htmltype == 7) {
sql = "select * from workflow_specialfield where fieldid = " + id + " and isbill = 1";
rs1.executeSql(sql);
if (rs1.next()) {
if (type.equals("2")) fieldvalue = rs1.getString("descriptivetext");
if (type.equals("1")) fieldvalue = rs1.getString("displayname");
linkaddress = Util.null2String(rs1.getString("linkaddress"));
}
} else {
if (fieldnames.equals("")) {
fieldnames = fieldname;
} else {
fieldnames += "," + fieldname;
}
}
if (htmltype == 3) {
if (type.equals("161") || type.equals("162") || type.equals("224") || type.equals("225"))
ManUrlList.add(urlcominfo.getBrowserurl(type) + "?type=" + fielddbtype);
else if (type.equals("256") || type.equals("257"))
ManUrlList.add(urlcominfo.getBrowserurl(type) + "?type=" + fielddbtype + "_" + type);
else
ManUrlList.add(urlcominfo.getBrowserurl(type));
ManUrlLinkList.add(urlcominfo.getLinkurl(type));
} else if (htmltype == 7 && type.equals("1")) {
ManUrlList.add("");
ManUrlLinkList.add(linkaddress);
} else {
ManUrlList.add("");
ManUrlLinkList.add("");
}
if (htmltype == 3 && (type.equals("224") || type.equals("225"))) { // sap自定义浏览按钮
fielddbtype = "varchar2(1000)";
if (type.equals("225")) {
fielddbtype = "varchar2(4000)";
}
}
ManTableFieldValues.add(fieldvalue);
ManTableFields.add("field" + id + "_" + type + "_" + htmltype);
ManTableFieldNames.add(rs.getString("labelname"));
ManTableFieldFieldNames.add(fieldname);
ManTableFieldDBTypes.add(fielddbtype);
ManTableChildFields.add("" + childfieldid);
lstFieldIds.add(id);
}
if (Requestid > 0) {
String tablename = "";
sql = "select tablename from workflow_bill where id=" + formid;
rs1.executeSql(sql);
if (rs1.next()) {
tablename = rs1.getString("tablename");
sql = "select " + fieldnames + " from " + tablename + " where requestid = " + Requestid;
rs1.executeSql(sql);
String[] colnames = rs1.getColumnName();
if (rs1.next()) {
for (int i = 0; i < colnames.length; i++) {
//int indx = ManTableFieldFieldNames.indexOf(colnames[i]);
//Linux+Oarcle下,colnames[i]全大写
int indx = Util.getListIndex(ManTableFieldFieldNames, colnames[i]);
if (indx > -1) {
fieldvalue = rs1.getString(colnames[i]);
ManTableFieldValues.set(indx, fieldvalue);
String fieldID = lstFieldIds.get(indx);
mapMainTblFields.put(fieldID, fieldvalue);
}
}
}
}
}
}
}
/**
* 取得明细表的字段信息
*
* @param formid 表单/单据ID
* @param isbill 是否单据
* @param languageid 显示语言
*/
public void GetDetailTableField(int formid, int isbill, int languageid){
GetDetailTableField(formid, isbill, languageid, false);
}
/**
* 获取明细表数据,支持排序
* @param formid
* @param isbill
* @param languageid
*/
public void getDetailTableFieldWithSort(int formid, int isbill, int languageid,String workflowId,String nodeId){
getDetailTableFieldWithSort(formid, isbill, languageid, false,workflowId,nodeId);
}
/**
* 获取明细表数据,支持排序
* @param formid
* @param isbill
* @param languageid
*/
public void getDetailTableFieldWithSort(int formid, int isbill, int languageid, boolean buildEmptyDetail,String workflowid,String nodeid) {
DetailOrderManager detailOrderManager = new DetailOrderManager();
RecordSet rs1 = new RecordSet();
RecordSet rs = new RecordSet();
String id = "";
String type = "";
int htmltype = 1;
String fieldvalue = "";
String fielddbtype = "";
String isview = "";
int childfieldid = 0;
RecordSet rs2 = new RecordSet();
String sql = "";
WFLinkInfo wfinf = new WFLinkInfo();
int userid = 0;
int logintype = 1;
if (user != null) {
userid = user.getUID();
logintype = Util.getIntValue(user.getLogintype(), 1);
}
int currentnodeid = wfinf.getCurrentNodeid(Requestid, userid, logintype);
//表单
if (isbill == 0) {
int groupId =1;
rs2.execute("select distinct groupId from workflow_formfield where formid=" + formid + " and isdetail='1' order by groupId");
while (rs2.next()) {
String orderSql = detailOrderManager.getOrderSql(workflowid, nodeid, formid+"", isbill+"", String.valueOf(languageid), groupId + "", " ", "b","id");
ArrayList detailfieldtypes = new ArrayList();
ArrayList detaildbfnames = new ArrayList();
ArrayList detailfields = new ArrayList();
ArrayList detialfieldnames = new ArrayList();
ArrayList detailurls = new ArrayList();
ArrayList detailurllinks = new ArrayList();
ArrayList detailfieldvalues = new ArrayList();
ArrayList detailfieldids = new ArrayList();
ArrayList detailids = new ArrayList();
ArrayList detailisviews = new ArrayList();
ArrayList detailchildfieldids = new ArrayList();
rs.executeSql("select b.id from Workflow_formdetail b where b.Requestid=" + Requestid + " and b.groupId=" + rs2.getInt(1) + " order by " + orderSql);
while (rs.next()) {
detailids.add(rs.getString("id"));
}
String fieldnames = "";
rs.executeSql("select b.id,b.fieldhtmltype,c.fieldlable,b.type,b.fieldname,b.fielddbtype,b.childfieldid from workflow_formfield a,workflow_formdictdetail b,workflow_fieldlable c where a.formid=c.formid and a.fieldid=c.fieldid and c.langurageid=" + languageid + " and a.formid=" + formid + " and a.groupId=" + rs2.getInt(1) + " and a.fieldid=b.id and a.isdetail='1' order by a.fieldorder");
while (rs.next()) {
id = rs.getString("id");
type = rs.getString("type");
htmltype = rs.getInt("fieldhtmltype");
String fieldname = rs.getString("fieldname");
fielddbtype = rs.getString("fielddbtype");
childfieldid = Util.getIntValue(rs.getString("childfieldid"), 0);
sql = "select isview from workflow_modeview where nodeid=" + currentnodeid + " and formid=" + formid + " and isbill=0 and fieldid=" + id;
rs1.execute(sql);
if (rs1.next() && rs1.getInt("isview") == 1) {
isview = "1";
} else {
isview = "";
}
if (fieldnames.equals("")) {
fieldnames = "b." + fieldname;
} else {
fieldnames += "," + "b." + fieldname;
}
if (htmltype == 3) {
if (type.equals("161") || type.equals("162") || type.equals("224") || type.equals("225"))
detailurls.add(urlcominfo.getBrowserurl(type) + "?type=" + fielddbtype);
else if (type.equals("256") || type.equals("257"))
detailurls.add(urlcominfo.getBrowserurl(type) + "?type=" + fielddbtype + "_" + type);
else
detailurls.add(urlcominfo.getBrowserurl(type));
detailurllinks.add(urlcominfo.getLinkurl(type));
} else {
detailurls.add("");
detailurllinks.add("");
}
if (htmltype == 3 && (type.equals("224") || type.equals("225"))) { // sap自定义浏览按钮
fielddbtype = "varchar2(1000)";
if (type.equals("225")) {
fielddbtype = "varchar2(4000)";
}
}
detailfieldids.add(new ArrayList());
detailfieldvalues.add(new ArrayList());
detailfieldtypes.add(fielddbtype);
detaildbfnames.add(fieldname);
detailisviews.add(isview);
detailfields.add("field" + id + "_0_" + type + "_" + htmltype);
detialfieldnames.add(rs.getString("fieldlable"));
detailchildfieldids.add("" + childfieldid);
}
if (Requestid > 0) {
sql = "select " + fieldnames + " from Workflow_formdetail b where b.Requestid=" + Requestid + " and b.groupId=" + rs2.getInt(1) + " order by " + orderSql;
rs1.executeSql(sql);
String[] colnames = rs1.getColumnName();
for (int k = 0; k < colnames.length; k++) {
int indx = Util.getListIndex(detaildbfnames, colnames[k]);
if (indx > -1) {
ArrayList detailvalues = new ArrayList();
ArrayList detailfieldid = new ArrayList();
String detailfield = (String) detailfields.get(indx);
rs1.beforFirst();
int i = 0;
while (rs1.next()) {
fieldvalue = rs1.getString(colnames[k]);
detailvalues.add(fieldvalue);
detailfieldid.add(Util.StringReplaceOnce(detailfield, "_0_", "_" + i + "_"));
i++;
}
detailfieldids.set(indx, detailfieldid);
detailfieldvalues.set(indx, detailvalues);
}
}
}
if (detailfields.size() > 0) {
DetailTableFields.add(detailfields);
DetailTableFieldValues.add(detailfieldvalues);
DetailTableFieldNames.add(detialfieldnames);
DetailTableFieldIds.add(detailfieldids);
DetailFieldIsViews.add(detailisviews);
DetailTableIds.add(detailids);
DetailUrlList.add(detailurls);
DetailUrlLinkList.add(detailurllinks);
DetailFieldDBTypes.add(detailfieldtypes);
DetailDBFieldNames.add(detaildbfnames);
DetailTableChildFields.add(detailchildfieldids);
}
groupId ++;
}
}
//单据
if (isbill == 1) {
String detailtable = "";
String maintable = "";
String keyfield = "";
String tempdetailtable = "";
rs.executeSql(" select tablename,detailkeyfield,detailtablename from Workflow_bill where id=" + formid);
if (rs.next()) {
maintable = rs.getString("tablename");
keyfield = rs.getString("detailkeyfield");
tempdetailtable = rs.getString("detailtablename");
if (keyfield == null || keyfield.trim().equals("")) {
keyfield = "mainid";
}
}
if (maintable != null && !maintable.trim().equals("")) {
ArrayList detailtablelist = new ArrayList();
String detailtables = "";
rs1.executeSql("select detailtable from workflow_billfield where billid=" + formid + " and viewtype=1 group by detailtable");
while (rs1.next()) {
String detailtemp = rs1.getString("detailtable");
if (detailtables.equals("")) {
if (detailtemp == null || detailtemp.trim().equals("")) {
detailtables = "null,''";
} else {
detailtables = "'" + detailtemp + "'";
}
} else {
if (detailtemp == null || detailtemp.trim().equals("")) {
detailtables += ",null,''";
} else {
detailtables += ",'" + detailtemp + "'";
}
}
}
if (detailtables.length() > 0) {
String emptySqlStr = buildEmptyDetail ? "" : " and tablename in(" + detailtables + ")";
rs1.executeSql("select tablename from WORKFLOW_BILLDETAILTABLE where billid=" + formid + " "+emptySqlStr+" order by orderid");
while (rs1.next()) {
detailtablelist.add(rs1.getString("tablename"));
}
}
if (detailtablelist.size() < 1 && tempdetailtable.length() > 0) {
detailtablelist.add("");
}
int groupId = 1;
for (int deno = 0; deno < detailtablelist.size(); deno++) {
String fieldnames = "";
detailtable = (String) detailtablelist.get(deno);
if (detailtable == null || detailtable.trim().equals("")) {
sql = "select id,labelname,fieldhtmltype,type,fieldname,fielddbtype,childfieldid from workflow_billfield,HtmlLabelInfo where fieldlabel=indexid and languageid=" + languageid + " and billid=" + formid + " and (detailtable is null or detailtable='" + detailtable + "') and viewtype=1 order by dsporder";
detailtable = tempdetailtable;
} else {
sql = "select id,labelname,fieldhtmltype,type,fieldname,fielddbtype,childfieldid from workflow_billfield,HtmlLabelInfo where fieldlabel=indexid and languageid=" + languageid + " and billid=" + formid + " and detailtable='" + detailtable + "' and viewtype=1 order by dsporder";
}
String orderSql = detailOrderManager.getOrderSql(workflowid, nodeid, formid+"", isbill+"", String.valueOf(languageid), groupId + "", detailtable, "b","id");
ArrayList detailfieldtypes = new ArrayList();
ArrayList detaildbfnames = new ArrayList();
ArrayList detailfields = new ArrayList();
ArrayList detialfieldnames = new ArrayList();
ArrayList detailurls = new ArrayList();
ArrayList detailurllinks = new ArrayList();
ArrayList detailfieldvalues = new ArrayList();
ArrayList detailisviews = new ArrayList();
ArrayList detailfieldids = new ArrayList();
ArrayList detailids = new ArrayList();
ArrayList detailchildfieldids = new ArrayList();
/* if (formid == 201) {
sql = "select id,labelname,fieldhtmltype,type,fieldname,fielddbtype,childfieldid from workflow_billfield ,HtmlLabelInfo where fieldlabel=indexid and languageid=" + languageid + " and billid=" + formid + " and viewtype=1 order by dsporder";
}*/
rs.executeSql(sql);
while (rs.next()) {
id = rs.getString("id");
type = rs.getString("type");
htmltype = rs.getInt("fieldhtmltype");
String fieldname = rs.getString("fieldname");
fielddbtype = rs.getString("fielddbtype");
childfieldid = Util.getIntValue(rs.getString("childfieldid"), 0);
sql = "select isview from workflow_modeview where nodeid=" + currentnodeid + " and formid=" + formid + " and isbill=1 and fieldid=" + id;
rs1.execute(sql);
if (rs1.next() && rs1.getInt("isview") == 1) {
isview = "1";
} else {
isview = "";
}
if (fieldnames.equals("")) {
fieldnames = "b." + fieldname;
} else {
fieldnames += ",b." + fieldname;
}
if (htmltype == 3) {
if (type.equals("161") || type.equals("162") || type.equals("224") || type.equals("225"))
detailurls.add(urlcominfo.getBrowserurl(type) + "?type=" + fielddbtype);
else if (type.equals("256") || type.equals("257"))
detailurls.add(urlcominfo.getBrowserurl(type) + "?type=" + fielddbtype + "_" + type);
else
detailurls.add(urlcominfo.getBrowserurl(type));
detailurllinks.add(urlcominfo.getLinkurl(type));
} else {
detailurls.add("");
detailurllinks.add("");
}
if (htmltype == 3 && (type.equals("224") || type.equals("225"))) { // sap自定义浏览按钮
fielddbtype = "varchar2(1000)";
if (type.equals("225")) {
fielddbtype = "varchar2(4000)";
}
}
detailfieldids.add(new ArrayList());
detailfieldvalues.add(new ArrayList());
detailfieldtypes.add(fielddbtype);
detaildbfnames.add(fieldname);
detailisviews.add(isview);
detailfields.add("field" + id + "_0_" + type + "_" + htmltype);
detialfieldnames.add(rs.getString("labelname"));
detailchildfieldids.add("" + childfieldid);
}
if (Requestid > 0) {
String detailid = "";
if (formid == 156 || formid == 157 || formid == 158 || formid == 159) {
detailid = "dsporder";
sql = "select b.dsporder";
if (!fieldnames.equals("")) sql += "," + fieldnames;
sql += " from " + maintable + " a," + detailtable + " b where a.id=b." + keyfield + " and a.requestid = " + Requestid + " order by b.dsporder";
} else if (formid == 7 || formid == 14 || formid == 18 || formid == 19 || formid == 201) {//费用报销单。 资产调拨单据
detailid = "id";
sql = "select b.* from " + maintable + " a," + detailtable + " b where a.id=b." + keyfield + " and a.requestid = " + Requestid + " order by b.id";
/*if (formid == 201) {
sql = "select b.* from bill_Discard_Detail b,bill_Discard a where a.requestid=b.detailrequestid and a.requestid=" + Requestid + " order by b.id ";
}*/
} else if ((maintable.indexOf("formtable_main_") == 0 || maintable.indexOf("uf_") == 0)
&& (detailtable.indexOf("formtable_main_") == 0 || detailtable.indexOf("uf_") == 0)) {//新表单,formid<0,所以与上面的不会冲突。
detailid = "id";
sql = "select b.id";
if (!fieldnames.equals("")) sql += "," + fieldnames;
sql += " from " + maintable + " a," + detailtable + " b where a.id=b." + keyfield + " and a.requestid = " + Requestid + " order by " + orderSql;
} else if (formid < 0) { //数据中心模块创建的明细报表
detailid = "inputid";
sql = "select b.inputid";
if (!fieldnames.equals("")) sql += "," + fieldnames;
sql += " from " + maintable + " a," + detailtable + " b where a.id=b." + keyfield + " and a.requestid = " + Requestid + " order by b.inputid";
} else {
detailid = "id";
sql = "select b.* from " + maintable + " a," + detailtable + " b where a.id=b." + keyfield + " and a.requestid = " + Requestid;
}
rs1.executeSql(sql);
String[] colnames = rs1.getColumnName();
for (int k = 0; k < colnames.length; k++) {
if (detailid.equalsIgnoreCase(colnames[k])) {
rs1.beforFirst();
while (rs1.next()) {
fieldvalue = rs1.getString(colnames[k]);
detailids.add(fieldvalue);
}
} else {
//int indx = detaildbfnames.indexOf(colnames[k]);
int indx = Util.getListIndex(detaildbfnames, colnames[k]);
if (indx > -1) {
ArrayList detailvalues = new ArrayList();
ArrayList detailfieldid = new ArrayList();
String detailfield = (String) detailfields.get(indx);
rs1.beforFirst();
int i = 0;
while (rs1.next()) {
fieldvalue = rs1.getString(colnames[k]);
detailvalues.add(fieldvalue);
detailfieldid.add(Util.StringReplaceOnce(detailfield, "_0_", "_" + i + "_"));
i++;
}
detailfieldids.set(indx, detailfieldid);
detailfieldvalues.set(indx, detailvalues);
}
}
}
}
if (detailfields.size() > 0 || buildEmptyDetail) {
DetailTableFields.add(detailfields);
DetailTableFieldValues.add(detailfieldvalues);
DetailTableFieldNames.add(detialfieldnames);
DetailTableFieldIds.add(detailfieldids);
DetailFieldIsViews.add(detailisviews);
DetailTableIds.add(detailids);
DetailUrlList.add(detailurls);
DetailUrlLinkList.add(detailurllinks);
DetailFieldDBTypes.add(detailfieldtypes);
DetailDBFieldNames.add(detaildbfnames);
DetailTableNames.add(detailtable);
DetailTableKeys.add(keyfield);
DetailTableChildFields.add(detailchildfieldids);
}
groupId ++;
}
}
}
}
public void GetDetailTableField(int formid, int isbill, int languageid, boolean buildEmptyDetail) {
RecordSet rs1 = new RecordSet();
RecordSet rs = new RecordSet();
String id = "";
String type = "";
int htmltype = 1;
String fieldvalue = "";
String fielddbtype = "";
String isview = "";
int childfieldid = 0;
RecordSet rs2 = new RecordSet();
String sql = "";
WFLinkInfo wfinf = new WFLinkInfo();
int userid = 0;
int logintype = 1;
if (user != null) {
userid = user.getUID();
logintype = Util.getIntValue(user.getLogintype(), 1);
}
int currentnodeid = wfinf.getCurrentNodeid(Requestid, userid, logintype);
//表单
if (isbill == 0) {
rs2.execute("select distinct groupId from workflow_formfield where formid=" + formid + " and isdetail='1' order by groupId");
while (rs2.next()) {
ArrayList detailfieldtypes = new ArrayList();
ArrayList detaildbfnames = new ArrayList();
ArrayList detailfields = new ArrayList();
ArrayList detialfieldnames = new ArrayList();
ArrayList detailurls = new ArrayList();
ArrayList detailurllinks = new ArrayList();
ArrayList detailfieldvalues = new ArrayList();
ArrayList detailfieldids = new ArrayList();
ArrayList detailids = new ArrayList();
ArrayList detailisviews = new ArrayList();
ArrayList detailchildfieldids = new ArrayList();
rs.executeSql("select id from Workflow_formdetail where Requestid=" + Requestid + " and groupId=" + rs2.getInt(1) + " order by id");
while (rs.next()) {
detailids.add(rs.getString("id"));
}
String fieldnames = "";
rs.executeSql("select b.id,b.fieldhtmltype,c.fieldlable,b.type,b.fieldname,b.fielddbtype,b.childfieldid from workflow_formfield a,workflow_formdictdetail b,workflow_fieldlable c where a.formid=c.formid and a.fieldid=c.fieldid and c.langurageid=" + languageid + " and a.formid=" + formid + " and a.groupId=" + rs2.getInt(1) + " and a.fieldid=b.id and a.isdetail='1' order by a.fieldorder");
while (rs.next()) {
id = rs.getString("id");
type = rs.getString("type");
htmltype = rs.getInt("fieldhtmltype");
String fieldname = rs.getString("fieldname");
fielddbtype = rs.getString("fielddbtype");
childfieldid = Util.getIntValue(rs.getString("childfieldid"), 0);
sql = "select isview from workflow_modeview where nodeid=" + currentnodeid + " and formid=" + formid + " and isbill=0 and fieldid=" + id;
rs1.execute(sql);
if (rs1.next() && rs1.getInt("isview") == 1) {
isview = "1";
} else {
isview = "";
}
if (fieldnames.equals("")) {
fieldnames = fieldname;
} else {
fieldnames += "," + fieldname;
}
if (htmltype == 3) {
if (type.equals("161") || type.equals("162") || type.equals("224") || type.equals("225"))
detailurls.add(urlcominfo.getBrowserurl(type) + "?type=" + fielddbtype);
else if (type.equals("256") || type.equals("257"))
detailurls.add(urlcominfo.getBrowserurl(type) + "?type=" + fielddbtype + "_" + type);
else
detailurls.add(urlcominfo.getBrowserurl(type));
detailurllinks.add(urlcominfo.getLinkurl(type));
} else {
detailurls.add("");
detailurllinks.add("");
}
if (htmltype == 3 && (type.equals("224") || type.equals("225"))) { // sap自定义浏览按钮
fielddbtype = "varchar2(1000)";
if (type.equals("225")) {
fielddbtype = "varchar2(4000)";
}
}
detailfieldids.add(new ArrayList());
detailfieldvalues.add(new ArrayList());
detailfieldtypes.add(fielddbtype);
detaildbfnames.add(fieldname);
detailisviews.add(isview);
detailfields.add("field" + id + "_0_" + type + "_" + htmltype);
detialfieldnames.add(rs.getString("fieldlable"));
detailchildfieldids.add("" + childfieldid);
}
if (Requestid > 0) {
sql = "select " + fieldnames + " from Workflow_formdetail where Requestid=" + Requestid + " and groupId=" + rs2.getInt(1) + " order by id";
rs1.executeSql(sql);
String[] colnames = rs1.getColumnName();
for (int k = 0; k < colnames.length; k++) {
int indx = Util.getListIndex(detaildbfnames, colnames[k]);
if (indx > -1) {
ArrayList detailvalues = new ArrayList();
ArrayList detailfieldid = new ArrayList();
String detailfield = (String) detailfields.get(indx);
rs1.beforFirst();
int i = 0;
while (rs1.next()) {
fieldvalue = rs1.getString(colnames[k]);
detailvalues.add(fieldvalue);
detailfieldid.add(Util.StringReplaceOnce(detailfield, "_0_", "_" + i + "_"));
i++;
}
detailfieldids.set(indx, detailfieldid);
detailfieldvalues.set(indx, detailvalues);
}
}
}
if (detailfields.size() > 0) {
DetailTableFields.add(detailfields);
DetailTableFieldValues.add(detailfieldvalues);
DetailTableFieldNames.add(detialfieldnames);
DetailTableFieldIds.add(detailfieldids);
DetailFieldIsViews.add(detailisviews);
DetailTableIds.add(detailids);
DetailUrlList.add(detailurls);
DetailUrlLinkList.add(detailurllinks);
DetailFieldDBTypes.add(detailfieldtypes);
DetailDBFieldNames.add(detaildbfnames);
DetailTableChildFields.add(detailchildfieldids);
}
}
}
//单据
if (isbill == 1) {
String detailtable = "";
String maintable = "";
String keyfield = "";
String tempdetailtable = "";
rs.executeSql(" select tablename,detailkeyfield,detailtablename from Workflow_bill where id=" + formid);
if (rs.next()) {
maintable = rs.getString("tablename");
keyfield = rs.getString("detailkeyfield");
tempdetailtable = rs.getString("detailtablename");
if (keyfield == null || keyfield.trim().equals("")) {
keyfield = "mainid";
}
}
if (maintable != null && !maintable.trim().equals("")) {
ArrayList detailtablelist = new ArrayList();
String detailtables = "";
rs1.executeSql("select detailtable from workflow_billfield where billid=" + formid + " and viewtype=1 group by detailtable");
while (rs1.next()) {
String detailtemp = rs1.getString("detailtable");
if (detailtables.equals("")) {
if (detailtemp == null || detailtemp.trim().equals("")) {
detailtables = "null,''";
} else {
detailtables = "'" + detailtemp + "'";
}
} else {
if (detailtemp == null || detailtemp.trim().equals("")) {
detailtables += ",null,''";
} else {
detailtables += ",'" + detailtemp + "'";
}
}
}
if (detailtables.length() > 0) {
String emptySqlStr = buildEmptyDetail ? "" : " and tablename in(" + detailtables + ")";
rs1.executeSql("select tablename from WORKFLOW_BILLDETAILTABLE where billid=" + formid + " "+emptySqlStr+" order by orderid");
while (rs1.next()) {
detailtablelist.add(rs1.getString("tablename"));
}
}
if (detailtablelist.size() < 1 && tempdetailtable.length() > 0) {
detailtablelist.add("");
}
for (int deno = 0; deno < detailtablelist.size(); deno++) {
String fieldnames = "";
detailtable = (String) detailtablelist.get(deno);
if (detailtable == null || detailtable.trim().equals("")) {
sql = "select id,labelname,fieldhtmltype,type,fieldname,fielddbtype,childfieldid from workflow_billfield,HtmlLabelInfo where fieldlabel=indexid and languageid=" + languageid + " and billid=" + formid + " and (detailtable is null or detailtable='" + detailtable + "') and viewtype=1 order by dsporder";
detailtable = tempdetailtable;
} else {
sql = "select id,labelname,fieldhtmltype,type,fieldname,fielddbtype,childfieldid from workflow_billfield,HtmlLabelInfo where fieldlabel=indexid and languageid=" + languageid + " and billid=" + formid + " and detailtable='" + detailtable + "' and viewtype=1 order by dsporder";
}
ArrayList detailfieldtypes = new ArrayList();
ArrayList detaildbfnames = new ArrayList();
ArrayList detailfields = new ArrayList();
ArrayList detialfieldnames = new ArrayList();
ArrayList detailurls = new ArrayList();
ArrayList detailurllinks = new ArrayList();
ArrayList detailfieldvalues = new ArrayList();
ArrayList detailisviews = new ArrayList();
ArrayList detailfieldids = new ArrayList();
ArrayList detailids = new ArrayList();
ArrayList detailchildfieldids = new ArrayList();
/* if (formid == 201) {
sql = "select id,labelname,fieldhtmltype,type,fieldname,fielddbtype,childfieldid from workflow_billfield ,HtmlLabelInfo where fieldlabel=indexid and languageid=" + languageid + " and billid=" + formid + " and viewtype=1 order by dsporder";
}*/
rs.executeSql(sql);
while (rs.next()) {
id = rs.getString("id");
type = rs.getString("type");
htmltype = rs.getInt("fieldhtmltype");
String fieldname = rs.getString("fieldname");
fielddbtype = rs.getString("fielddbtype");
childfieldid = Util.getIntValue(rs.getString("childfieldid"), 0);
sql = "select isview from workflow_modeview where nodeid=" + currentnodeid + " and formid=" + formid + " and isbill=1 and fieldid=" + id;
rs1.execute(sql);
if (rs1.next() && rs1.getInt("isview") == 1) {
isview = "1";
} else {
isview = "";
}
if (fieldnames.equals("")) {
fieldnames = "b." + fieldname;
} else {
fieldnames += ",b." + fieldname;
}
if (htmltype == 3) {
if (type.equals("161") || type.equals("162") || type.equals("224") || type.equals("225"))
detailurls.add(urlcominfo.getBrowserurl(type) + "?type=" + fielddbtype);
else if (type.equals("256") || type.equals("257"))
detailurls.add(urlcominfo.getBrowserurl(type) + "?type=" + fielddbtype + "_" + type);
else
detailurls.add(urlcominfo.getBrowserurl(type));
detailurllinks.add(urlcominfo.getLinkurl(type));
} else {
detailurls.add("");
detailurllinks.add("");
}
if (htmltype == 3 && (type.equals("224") || type.equals("225"))) { // sap自定义浏览按钮
fielddbtype = "varchar2(1000)";
if (type.equals("225")) {
fielddbtype = "varchar2(4000)";
}
}
detailfieldids.add(new ArrayList());
detailfieldvalues.add(new ArrayList());
detailfieldtypes.add(fielddbtype);
detaildbfnames.add(fieldname);
detailisviews.add(isview);
detailfields.add("field" + id + "_0_" + type + "_" + htmltype);
detialfieldnames.add(rs.getString("labelname"));
detailchildfieldids.add("" + childfieldid);
}
if (Requestid > 0) {
String detailid = "";
if (formid == 156 || formid == 157 || formid == 158 || formid == 159) {
detailid = "dsporder";
sql = "select b.dsporder";
if (!fieldnames.equals("")) sql += "," + fieldnames;
sql += " from " + maintable + " a," + detailtable + " b where a.id=b." + keyfield + " and a.requestid = " + Requestid + " order by b.dsporder";
} else if (formid == 7 || formid == 14 || formid == 18 || formid == 19 || formid == 201) {//费用报销单。 资产调拨单据
detailid = "id";
sql = "select b.* from " + maintable + " a," + detailtable + " b where a.id=b." + keyfield + " and a.requestid = " + Requestid + " order by b.id";
/*if (formid == 201) {
sql = "select b.* from bill_Discard_Detail b,bill_Discard a where a.requestid=b.detailrequestid and a.requestid=" + Requestid + " order by b.id ";
}*/
} else if ((maintable.indexOf("formtable_main_") == 0 || maintable.indexOf("uf_") == 0)
&& (detailtable.indexOf("formtable_main_") == 0 || detailtable.indexOf("uf_") == 0)) {//新表单,formid<0,所以与上面的不会冲突。
detailid = "id";
sql = "select b.id";
if (!fieldnames.equals("")) sql += "," + fieldnames;
sql += " from " + maintable + " a," + detailtable + " b where a.id=b." + keyfield + " and a.requestid = " + Requestid + " order by b.id";
} else if (formid < 0) { //数据中心模块创建的明细报表
detailid = "inputid";
sql = "select b.inputid";
if (!fieldnames.equals("")) sql += "," + fieldnames;
sql += " from " + maintable + " a," + detailtable + " b where a.id=b." + keyfield + " and a.requestid = " + Requestid + " order by b.inputid";
} else {
detailid = "id";
sql = "select b.* from " + maintable + " a," + detailtable + " b where a.id=b." + keyfield + " and a.requestid = " + Requestid;
}
rs1.executeSql(sql);
String[] colnames = rs1.getColumnName();
for (int k = 0; k < colnames.length; k++) {
if (detailid.equalsIgnoreCase(colnames[k])) {
rs1.beforFirst();
while (rs1.next()) {
fieldvalue = rs1.getString(colnames[k]);
detailids.add(fieldvalue);
}
} else {
//int indx = detaildbfnames.indexOf(colnames[k]);
int indx = Util.getListIndex(detaildbfnames, colnames[k]);
if (indx > -1) {
ArrayList detailvalues = new ArrayList();
ArrayList detailfieldid = new ArrayList();
String detailfield = (String) detailfields.get(indx);
rs1.beforFirst();
int i = 0;
while (rs1.next()) {
fieldvalue = rs1.getString(colnames[k]);
detailvalues.add(fieldvalue);
detailfieldid.add(Util.StringReplaceOnce(detailfield, "_0_", "_" + i + "_"));
i++;
}
detailfieldids.set(indx, detailfieldid);
detailfieldvalues.set(indx, detailvalues);
}
}
}
}
if (detailfields.size() > 0 || buildEmptyDetail) {
DetailTableFields.add(detailfields);
DetailTableFieldValues.add(detailfieldvalues);
DetailTableFieldNames.add(detialfieldnames);
DetailTableFieldIds.add(detailfieldids);
DetailFieldIsViews.add(detailisviews);
DetailTableIds.add(detailids);
DetailUrlList.add(detailurls);
DetailUrlLinkList.add(detailurllinks);
DetailFieldDBTypes.add(detailfieldtypes);
DetailDBFieldNames.add(detaildbfnames);
DetailTableNames.add(detailtable);
DetailTableKeys.add(keyfield);
DetailTableChildFields.add(detailchildfieldids);
}
}
}
}
}
/**
* 取得明细表的字段信息
*
* @param formid 表单/单据ID
* @param isbill 是否单据
* @param languageid 显示语言
*/
public void GetDetailTblFields(int formid, int isbill, int languageid){
this.GetDetailTblFields(formid, isbill, languageid, true, false);
}
public void GetDetailTblFields(int formid, int isbill, int languageid, boolean isAutoDecrypt, boolean isReturnDecryptData) {
RecordSet rs1 = new RecordSet();
RecordSet rs2 = new RecordSet();
RecordSet rs = new RecordSet();
String id = "";
String type = "";
int htmltype = 1;
String fieldvalue = "";
String fielddbtype = "";
String sql = "";
//表单
if (isbill == 0) {
rs2.execute("select distinct groupId from workflow_formfield where formid=" + formid + " and isdetail='1' order by groupId");
while (rs2.next()) {
ArrayList detaildbfnames = new ArrayList();
ArrayList detailfields = new ArrayList();
ArrayList detailurls = new ArrayList();
ArrayList detailurllinks = new ArrayList();
ArrayList detailids = new ArrayList();
List tmpDetailValues = new ArrayList();
List lstFieldIds = new ArrayList();
rs.executeSql("select id from Workflow_formdetail where Requestid=" + Requestid + " and groupId=" + rs2.getInt(1) + " order by id");
while (rs.next()) {
detailids.add(rs.getString("id"));
}
String fieldnames = "";
rs.executeSql("select b.id,b.fieldhtmltype,c.fieldlable,b.type,b.fieldname,b.fielddbtype,b.childfieldid from workflow_formfield a,workflow_formdictdetail b,workflow_fieldlable c where a.formid=c.formid and a.fieldid=c.fieldid and c.langurageid=" + languageid + " and a.formid=" + formid + " and a.groupId=" + rs2.getInt(1) + " and a.fieldid=b.id and a.isdetail='1' order by a.fieldorder");
while (rs.next()) {
id = rs.getString("id");
type = rs.getString("type");
htmltype = rs.getInt("fieldhtmltype");
String fieldname = rs.getString("fieldname");
fielddbtype = rs.getString("fielddbtype");
if (fieldnames.equals("")) {
fieldnames = fieldname;
} else {
fieldnames += "," + fieldname;
}
if (htmltype == 3) {
if (type.equals("161") || type.equals("162") || type.equals("224") || type.equals("225"))
detailurls.add(urlcominfo.getBrowserurl(type) + "?type=" + fielddbtype);
else if (type.equals("256") || type.equals("257"))
detailurls.add(urlcominfo.getBrowserurl(type) + "?type=" + fielddbtype + "_" + type);
else
detailurls.add(urlcominfo.getBrowserurl(type));
detailurllinks.add(urlcominfo.getLinkurl(type));
} else {
detailurls.add("");
detailurllinks.add("");
}
if (htmltype == 3 && (type.equals("224") || type.equals("225"))) { // sap自定义浏览按钮
fielddbtype = "varchar2(1000)";
if (type.equals("225")) {
fielddbtype = "varchar2(4000)";
}
}
detaildbfnames.add(fieldname);
detailfields.add("field" + id + "_0_" + type + "_" + htmltype);
lstFieldIds.add(id);
}
if (Requestid > 0) {
sql = "select " + fieldnames + " from Workflow_formdetail where Requestid=" + Requestid + " and groupId=" + rs2.getInt(1) + " order by id";
rs1.executeSql(sql);
String[] colNames = rs1.getColumnName();
while (rs1.next()) {
Map mapDetailField = new HashMap();
for (String colName : colNames) {
int indx = Util.getListIndex(detaildbfnames, colName);
if (indx > -1) {
fieldvalue = Util.null2String(rs1.getString(colName));
String fieldID = lstFieldIds.get(indx);
mapDetailField.put(fieldID, fieldvalue);
}
}
tmpDetailValues.add(mapDetailField);
}
}
if (detailfields.size() > 0) {
DetailTableFields.add(detailfields);
DetailTableIds.add(detailids);
DetailUrlList.add(detailurls);
DetailUrlLinkList.add(detailurllinks);
DetailDBFieldNames.add(detaildbfnames);
lstDetailTblFields.add(tmpDetailValues);
}
}
}
//单据
if (isbill == 1) {
String detailtable = "";
String maintable = "";
String keyfield = "";
String tempdetailtable = "";
rs.executeSql(" select tablename,detailkeyfield,detailtablename from Workflow_bill where id=" + formid);
if (rs.next()) {
maintable = rs.getString("tablename");
keyfield = rs.getString("detailkeyfield");
tempdetailtable = rs.getString("detailtablename");
if (keyfield == null || keyfield.trim().equals("")) {
keyfield = "mainid";
}
}
if (maintable != null && !maintable.trim().equals("")) {
ArrayList detailtablelist = new ArrayList();
String detailtables = "";
rs1.executeSql("select detailtable from workflow_billfield where billid=" + formid + " and viewtype=1 group by detailtable");
while (rs1.next()) {
String detailtemp = rs1.getString("detailtable");
if (detailtables.equals("")) {
if (detailtemp == null || detailtemp.trim().equals("")) {
detailtables = "null,''";
} else {
detailtables = "'" + detailtemp + "'";
}
} else {
if (detailtemp == null || detailtemp.trim().equals("")) {
detailtables += ",null,''";
} else {
detailtables += ",'" + detailtemp + "'";
}
}
}
if (detailtables.length() > 0) {
rs1.executeSql("select tablename from WORKFLOW_BILLDETAILTABLE where billid=" + formid + " and tablename in(" + detailtables + ") order by orderid");
while (rs1.next()) {
detailtablelist.add(rs1.getString("tablename"));
}
}
if (detailtablelist.size() < 1 && tempdetailtable.length() > 0) {
detailtablelist.add("");
}
for (int deno = 0; deno < detailtablelist.size(); deno++) {
String fieldnames = "";
detailtable = (String) detailtablelist.get(deno);
if (detailtable == null || detailtable.trim().equals("")) {
sql = "select id,labelname,fieldhtmltype,type,fieldname,fielddbtype,childfieldid from workflow_billfield,HtmlLabelInfo where fieldlabel=indexid and languageid=" + languageid + " and billid=" + formid + " and (detailtable is null or detailtable='" + detailtable + "') and viewtype=1 order by dsporder";
detailtable = tempdetailtable;
} else {
sql = "select id,labelname,fieldhtmltype,type,fieldname,fielddbtype,childfieldid from workflow_billfield,HtmlLabelInfo where fieldlabel=indexid and languageid=" + languageid + " and billid=" + formid + " and detailtable='" + detailtable + "' and viewtype=1 order by dsporder";
}
ArrayList detaildbfnames = new ArrayList();
ArrayList detailfields = new ArrayList();
ArrayList detailurls = new ArrayList();
ArrayList detailurllinks = new ArrayList();
ArrayList detailids = new ArrayList();
List tmpDetailValues = new ArrayList();
List lstFieldIds = new ArrayList();
rs.executeSql(sql);
while (rs.next()) {
id = rs.getString("id");
type = rs.getString("type");
htmltype = rs.getInt("fieldhtmltype");
String fieldname = rs.getString("fieldname");
fielddbtype = rs.getString("fielddbtype");
if (fieldnames.equals("")) {
fieldnames = "b." + fieldname;
} else {
fieldnames += ",b." + fieldname;
}
if (htmltype == 3) {
if (type.equals("161") || type.equals("162") || type.equals("224") || type.equals("225"))
detailurls.add(urlcominfo.getBrowserurl(type) + "?type=" + fielddbtype);
else if (type.equals("256") || type.equals("257"))
detailurls.add(urlcominfo.getBrowserurl(type) + "?type=" + fielddbtype + "_" + type);
else
detailurls.add(urlcominfo.getBrowserurl(type));
detailurllinks.add(urlcominfo.getLinkurl(type));
} else {
detailurls.add("");
detailurllinks.add("");
}
if (htmltype == 3 && (type.equals("224") || type.equals("225"))) { // sap自定义浏览按钮
fielddbtype = "varchar2(1000)";
if (type.equals("225")) {
fielddbtype = "varchar2(4000)";
}
}
detaildbfnames.add(fieldname);
detailfields.add("field" + id + "_0_" + type + "_" + htmltype);
lstFieldIds.add(id);
}
if (Requestid > 0) {
String detailid = "";
if (formid == 156 || formid == 157 || formid == 158 || formid == 159) {
detailid = "dsporder";
sql = "select b.dsporder";
if (!fieldnames.equals("")) sql += "," + fieldnames;
sql += " from " + maintable + " a," + detailtable + " b where a.id=b." + keyfield + " and a.requestid = " + Requestid + " order by b.dsporder";
} else if (formid == 7 || formid == 14 || formid == 18) {//费用报销单。 资产调拨单据
detailid = "id";
sql = "select b.* from " + maintable + " a," + detailtable + " b where a.id=b." + keyfield + " and a.requestid = " + Requestid + " order by b.id";
} else if ((maintable.indexOf("formtable_main_") == 0 || maintable.indexOf("uf_") == 0)
&& (detailtable.indexOf("formtable_main_") == 0 || detailtable.indexOf("uf_") == 0)) {//新表单,formid<0,所以与上面的不会冲突。
detailid = "id";
sql = "select b.id";
if (!fieldnames.equals("")) sql += "," + fieldnames;
sql += " from " + maintable + " a," + detailtable + " b where a.id=b." + keyfield + " and a.requestid = " + Requestid + " order by b.id";
} else if (formid < 0) { //数据中心模块创建的明细报表
detailid = "inputid";
sql = "select b.inputid";
if (!fieldnames.equals("")) sql += "," + fieldnames;
sql += " from " + maintable + " a," + detailtable + " b where a.id=b." + keyfield + " and a.requestid = " + Requestid + " order by b.inputid";
} else {
detailid = "id";
sql = "select b.* from " + maintable + " a," + detailtable + " b where a.id=b." + keyfield + " and a.requestid = " + Requestid;
}
rs1.executeSql(sql);
String[] colNames = rs1.getColumnName();
while (rs1.next()) {
Map mapDetailField = new HashMap();
for (String colName : colNames) {
if (detailid.equalsIgnoreCase(colName)) {
fieldvalue = rs1.getString(colName);
detailids.add(fieldvalue);
} else {
int indx = Util.getListIndex(detaildbfnames, colName);
if (indx > -1) {
String fieldID = lstFieldIds.get(indx);
fieldvalue = Util.null2String(rs1.getString(detailtable, colName, isAutoDecrypt, isReturnDecryptData));
mapDetailField.put(fieldID, fieldvalue);
}
}
}
tmpDetailValues.add(mapDetailField);
}
}
if (detailfields.size() > 0) {
DetailTableFields.add(detailfields);
DetailTableIds.add(detailids);
DetailUrlList.add(detailurls);
DetailUrlLinkList.add(detailurllinks);
DetailDBFieldNames.add(detaildbfnames);
DetailTableNames.add(detailtable);
DetailTableKeys.add(keyfield);
lstDetailTblFields.add(tmpDetailValues);
}
}
}
}
}
/**
* 支持排序
* @param formid
* @param isbill
* @param languageid
* @param isAutoDecrypt
* @param isReturnDecryptData
*/
public void GetDetailTblFieldsWithSort(int formid, int isbill, int languageid, boolean isAutoDecrypt, boolean isReturnDecryptData,String workflowId,String nodeId) {
DetailOrderManager detailOrderManager = new DetailOrderManager();
RecordSet rs1 = new RecordSet();
RecordSet rs2 = new RecordSet();
RecordSet rs = new RecordSet();
String id = "";
String type = "";
int htmltype = 1;
String fieldvalue = "";
String fielddbtype = "";
String sql = "";
//表单
if (isbill == 0) {
int groupId =1;
rs2.execute("select distinct groupId from workflow_formfield where formid=" + formid + " and isdetail='1' order by groupId");
while (rs2.next()) {
String orderSql = detailOrderManager.getOrderSql(workflowId, nodeId, formid+"", isbill+"", String.valueOf(languageid), groupId + "", " ", "b","id");
ArrayList detaildbfnames = new ArrayList();
ArrayList detailfields = new ArrayList();
ArrayList detailurls = new ArrayList();
ArrayList detailurllinks = new ArrayList();
ArrayList detailids = new ArrayList();
List tmpDetailValues = new ArrayList();
List lstFieldIds = new ArrayList();
rs.executeSql("select b.id from Workflow_formdetail b where b.Requestid=" + Requestid + " and b.groupId=" + rs2.getInt(1) + " order by " + orderSql);
while (rs.next()) {
detailids.add(rs.getString("id"));
}
String fieldnames = "";
rs.executeSql("select b.id,b.fieldhtmltype,c.fieldlable,b.type,b.fieldname,b.fielddbtype,b.childfieldid from workflow_formfield a,workflow_formdictdetail b,workflow_fieldlable c where a.formid=c.formid and a.fieldid=c.fieldid and c.langurageid=" + languageid + " and a.formid=" + formid + " and a.groupId=" + rs2.getInt(1) + " and a.fieldid=b.id and a.isdetail='1' order by a.fieldorder");
while (rs.next()) {
id = rs.getString("id");
type = rs.getString("type");
htmltype = rs.getInt("fieldhtmltype");
String fieldname = rs.getString("fieldname");
fielddbtype = rs.getString("fielddbtype");
if (fieldnames.equals("")) {
fieldnames = "b." + fieldname;
} else {
fieldnames += "," + "b." + fieldname;
}
if (htmltype == 3) {
if (type.equals("161") || type.equals("162") || type.equals("224") || type.equals("225"))
detailurls.add(urlcominfo.getBrowserurl(type) + "?type=" + fielddbtype);
else if (type.equals("256") || type.equals("257"))
detailurls.add(urlcominfo.getBrowserurl(type) + "?type=" + fielddbtype + "_" + type);
else
detailurls.add(urlcominfo.getBrowserurl(type));
detailurllinks.add(urlcominfo.getLinkurl(type));
} else {
detailurls.add("");
detailurllinks.add("");
}
if (htmltype == 3 && (type.equals("224") || type.equals("225"))) { // sap自定义浏览按钮
fielddbtype = "varchar2(1000)";
if (type.equals("225")) {
fielddbtype = "varchar2(4000)";
}
}
detaildbfnames.add(fieldname);
detailfields.add("field" + id + "_0_" + type + "_" + htmltype);
lstFieldIds.add(id);
}
if (Requestid > 0) {
sql = "select " + fieldnames + " from Workflow_formdetail b where b.Requestid=" + Requestid + " and b.groupId=" + rs2.getInt(1) + " order by " + orderSql;
rs1.executeSql(sql);
String[] colNames = rs1.getColumnName();
while (rs1.next()) {
Map mapDetailField = new HashMap();
for (String colName : colNames) {
int indx = Util.getListIndex(detaildbfnames, colName);
if (indx > -1) {
fieldvalue = Util.null2String(rs1.getString(colName));
String fieldID = lstFieldIds.get(indx);
mapDetailField.put(fieldID, fieldvalue);
}
}
tmpDetailValues.add(mapDetailField);
}
}
if (detailfields.size() > 0) {
DetailTableFields.add(detailfields);
DetailTableIds.add(detailids);
DetailUrlList.add(detailurls);
DetailUrlLinkList.add(detailurllinks);
DetailDBFieldNames.add(detaildbfnames);
lstDetailTblFields.add(tmpDetailValues);
}
groupId ++;
}
}
//单据
if (isbill == 1) {
String detailtable = "";
String maintable = "";
String keyfield = "";
String tempdetailtable = "";
rs.executeSql(" select tablename,detailkeyfield,detailtablename from Workflow_bill where id=" + formid);
if (rs.next()) {
maintable = rs.getString("tablename");
keyfield = rs.getString("detailkeyfield");
tempdetailtable = rs.getString("detailtablename");
if (keyfield == null || keyfield.trim().equals("")) {
keyfield = "mainid";
}
}
if (maintable != null && !maintable.trim().equals("")) {
ArrayList detailtablelist = new ArrayList();
String detailtables = "";
rs1.executeSql("select detailtable from workflow_billfield where billid=" + formid + " and viewtype=1 group by detailtable");
while (rs1.next()) {
String detailtemp = rs1.getString("detailtable");
if (detailtables.equals("")) {
if (detailtemp == null || detailtemp.trim().equals("")) {
detailtables = "null,''";
} else {
detailtables = "'" + detailtemp + "'";
}
} else {
if (detailtemp == null || detailtemp.trim().equals("")) {
detailtables += ",null,''";
} else {
detailtables += ",'" + detailtemp + "'";
}
}
}
if (detailtables.length() > 0) {
rs1.executeSql("select tablename from WORKFLOW_BILLDETAILTABLE where billid=" + formid + " and tablename in(" + detailtables + ") order by orderid");
while (rs1.next()) {
detailtablelist.add(rs1.getString("tablename"));
}
}
if (detailtablelist.size() < 1 && tempdetailtable.length() > 0) {
detailtablelist.add("");
}
int groupId = 1;
for (int deno = 0; deno < detailtablelist.size(); deno++) {
String fieldnames = "";
detailtable = (String) detailtablelist.get(deno);
if (detailtable == null || detailtable.trim().equals("")) {
sql = "select id,labelname,fieldhtmltype,type,fieldname,fielddbtype,childfieldid from workflow_billfield,HtmlLabelInfo where fieldlabel=indexid and languageid=" + languageid + " and billid=" + formid + " and (detailtable is null or detailtable='" + detailtable + "') and viewtype=1 order by dsporder";
detailtable = tempdetailtable;
} else {
sql = "select id,labelname,fieldhtmltype,type,fieldname,fielddbtype,childfieldid from workflow_billfield,HtmlLabelInfo where fieldlabel=indexid and languageid=" + languageid + " and billid=" + formid + " and detailtable='" + detailtable + "' and viewtype=1 order by dsporder";
}
String orderSql = detailOrderManager.getOrderSql(workflowId, nodeId, formid+"", isbill+"", String.valueOf(languageid), groupId + "", detailtable, "b","id");
ArrayList detaildbfnames = new ArrayList();
ArrayList detailfields = new ArrayList();
ArrayList detailurls = new ArrayList();
ArrayList detailurllinks = new ArrayList();
ArrayList detailids = new ArrayList();
List tmpDetailValues = new ArrayList();
List lstFieldIds = new ArrayList();
rs.executeSql(sql);
while (rs.next()) {
id = rs.getString("id");
type = rs.getString("type");
htmltype = rs.getInt("fieldhtmltype");
String fieldname = rs.getString("fieldname");
fielddbtype = rs.getString("fielddbtype");
if (fieldnames.equals("")) {
fieldnames = "b." + fieldname;
} else {
fieldnames += ",b." + fieldname;
}
if (htmltype == 3) {
if (type.equals("161") || type.equals("162") || type.equals("224") || type.equals("225"))
detailurls.add(urlcominfo.getBrowserurl(type) + "?type=" + fielddbtype);
else if (type.equals("256") || type.equals("257"))
detailurls.add(urlcominfo.getBrowserurl(type) + "?type=" + fielddbtype + "_" + type);
else
detailurls.add(urlcominfo.getBrowserurl(type));
detailurllinks.add(urlcominfo.getLinkurl(type));
} else {
detailurls.add("");
detailurllinks.add("");
}
if (htmltype == 3 && (type.equals("224") || type.equals("225"))) { // sap自定义浏览按钮
fielddbtype = "varchar2(1000)";
if (type.equals("225")) {
fielddbtype = "varchar2(4000)";
}
}
detaildbfnames.add(fieldname);
detailfields.add("field" + id + "_0_" + type + "_" + htmltype);
lstFieldIds.add(id);
}
if (Requestid > 0) {
String detailid = "";
if (formid == 156 || formid == 157 || formid == 158 || formid == 159) {
detailid = "dsporder";
sql = "select b.dsporder";
if (!fieldnames.equals("")) sql += "," + fieldnames;
sql += " from " + maintable + " a," + detailtable + " b where a.id=b." + keyfield + " and a.requestid = " + Requestid + " order by b.dsporder";
} else if (formid == 7 || formid == 14 || formid == 18) {//费用报销单。 资产调拨单据
detailid = "id";
sql = "select b.* from " + maintable + " a," + detailtable + " b where a.id=b." + keyfield + " and a.requestid = " + Requestid + " order by b.id";
} else if ((maintable.indexOf("formtable_main_") == 0 || maintable.indexOf("uf_") == 0)
&& (detailtable.indexOf("formtable_main_") == 0 || detailtable.indexOf("uf_") == 0)) {//新表单,formid<0,所以与上面的不会冲突。
detailid = "id";
sql = "select b.id";
if (!fieldnames.equals("")) sql += "," + fieldnames;
sql += " from " + maintable + " a," + detailtable + " b where a.id=b." + keyfield + " and a.requestid = " + Requestid + " order by " + orderSql;
} else if (formid < 0) { //数据中心模块创建的明细报表
detailid = "inputid";
sql = "select b.inputid";
if (!fieldnames.equals("")) sql += "," + fieldnames;
sql += " from " + maintable + " a," + detailtable + " b where a.id=b." + keyfield + " and a.requestid = " + Requestid + " order by b.inputid";
} else {
detailid = "id";
sql = "select b.* from " + maintable + " a," + detailtable + " b where a.id=b." + keyfield + " and a.requestid = " + Requestid;
}
rs1.executeSql(sql);
String[] colNames = rs1.getColumnName();
while (rs1.next()) {
Map mapDetailField = new HashMap();
for (String colName : colNames) {
if (detailid.equalsIgnoreCase(colName)) {
fieldvalue = rs1.getString(colName);
detailids.add(fieldvalue);
} else {
int indx = Util.getListIndex(detaildbfnames, colName);
if (indx > -1) {
String fieldID = lstFieldIds.get(indx);
fieldvalue = Util.null2String(rs1.getString(detailtable, colName, isAutoDecrypt, isReturnDecryptData));
mapDetailField.put(fieldID, fieldvalue);
}
}
}
tmpDetailValues.add(mapDetailField);
}
}
if (detailfields.size() > 0) {
DetailTableFields.add(detailfields);
DetailTableIds.add(detailids);
DetailUrlList.add(detailurls);
DetailUrlLinkList.add(detailurllinks);
DetailDBFieldNames.add(detaildbfnames);
DetailTableNames.add(detailtable);
DetailTableKeys.add(keyfield);
lstDetailTblFields.add(tmpDetailValues);
}
}
}
}
}
/**
* 获得manager字段的ID
*
* @param formid
* @param isbill
* @return
*/
public int getManagerFieldID(int formid, int isbill) {
RecordSet rs = new RecordSet();
int managerfieldid = -1;
//表单
if (isbill == 0) {
rs.executeSql("select b.id from workflow_formfield a,workflow_formdict b where a.fieldid=b.id and a.isdetail is null and a.formid=" + formid + " and b.fieldname='manager'");
if (rs.next()) {
managerfieldid = Util.getIntValue(rs.getString("id"));
}
}
//单据
if (isbill == 1) {
rs.executeSql("select id from workflow_billfield where billid=" + formid + " and viewtype=0 and fieldname='manager'");
if (rs.next()) {
managerfieldid = Util.getIntValue(rs.getString("id"));
}
}
return managerfieldid;
}
/**
* 取得工作流的节点信息
*
* @param workflowid 工作流ID
*/
public void GetWorkflowNode(int workflowid) {
RecordSet rs = new RecordSet();
if (!"1".equals(iswfshare)) {
rs.executeSql("select nodeid,nodename from workflow_flownode,workflow_nodebase where (workflow_nodebase.IsFreeNode is null or workflow_nodebase.IsFreeNode!='1') and nodeid=id and workflowid=" + workflowid + " order by nodetype,nodeid");
while (rs.next()) {
Nodes.add("wfl" + workflowid + "_" + rs.getString("nodeid"));
NodeNames.add(rs.getString("nodename"));
}
Nodes.add("wfl" + workflowid + "_999999999");
NodeNames.add(""+ SystemEnv.getHtmlLabelName(84441,weaver.general.ThreadVarLanguage.getLang())+"");
} else {
try {
String userids = "";
String viewNodeId = "";
String singleViewLogIds = "";
String tempNodeId = "";
RecordSet rs1 = new RecordSet();
RecordSet rs2 = new RecordSet();
RecordSet rs3 = new RecordSet();
WFShareAuthorization wfShareAuthorization = new WFShareAuthorization();
WFManager wfManager = new WFManager();
userids = wfShareAuthorization.getSignByrstUser(String.valueOf(Requestid), user);
//流程共享的签字意见查看权限与共享人权限一致
if (!"".equals(userids)) {
rs1.executeSql("select workflowid from workflow_requestbase where requestid = " + Requestid);
if (rs1.next()) {
wfManager.setWfid(rs1.getInt("workflowid"));
wfManager.getWfInfo();
}
String issignview = wfManager.getIssignview();
if ("1".equals(issignview)) {
rs2.executeSql("select a.nodeid from workflow_currentoperator a where a.requestid=" + Requestid + " and exists (select 1 from workflow_currentoperator b where b.isremark in ('0','2','4') and b.requestid=" + Requestid + " and a.userid=b.userid) and userid in (" + userids + ") order by receivedate desc ,receivetime desc");
if (rs2.next()) {
viewNodeId = rs2.getString("nodeid");
rs3.executeSql("select viewnodeids from workflow_flownode where workflowid=" + workflowid + " and nodeid=" + viewNodeId);
if (rs3.next()) {
singleViewLogIds = rs3.getString("viewnodeids");
}
if ("-1".equals(singleViewLogIds)) {//全部查看
rs3.executeSql("select nodeid from workflow_flownode where workflowid= " + workflowid + " and exists(select 1 from workflow_nodebase where id=workflow_flownode.nodeid and (requestid is null or requestid=" + Requestid + "))");
while (rs3.next()) {
tempNodeId = rs3.getString("nodeid");
if (!Nodes.contains("wfl" + workflowid + "_" + tempNodeId)) {
Nodes.add("wfl" + workflowid + "_" + tempNodeId);
}
}
} else if (singleViewLogIds == null || "".equals(singleViewLogIds)) {//全部不能查看
} else {//查看部分
String tempidstrs[] = Util.TokenizerString2(singleViewLogIds, ",");
for (int i = 0; i < tempidstrs.length; i++) {
if (!Nodes.contains("wfl" + workflowid + "_" + tempidstrs[i])) {
Nodes.add("wfl" + workflowid + "_" + tempidstrs[i]);
}
}
}
}
} else {
rs2.executeSql("select distinct a.nodeid from workflow_currentoperator a where a.requestid=" + Requestid + " and exists (select 1 from workflow_currentoperator b where b.isremark in ('0','2','4') and b.requestid=" + Requestid + " and a.userid=b.userid) and userid in (" + userids + ") ");
while (rs2.next()) {
viewNodeId = rs2.getString("nodeid");
rs3.executeSql("select viewnodeids from workflow_flownode where workflowid=" + workflowid + " and nodeid=" + viewNodeId);
if (rs3.next()) {
singleViewLogIds = rs3.getString("viewnodeids");
}
if ("-1".equals(singleViewLogIds)) {//全部查看
rs3.executeSql("select nodeid from workflow_flownode where workflowid= " + workflowid + " and exists(select 1 from workflow_nodebase where id=workflow_flownode.nodeid and (requestid is null or requestid=" + Requestid + "))");
while (rs3.next()) {
tempNodeId = rs3.getString("nodeid");
if (!Nodes.contains("wfl" + workflowid + "_" + tempNodeId)) {
Nodes.add("wfl" + workflowid + "_" + tempNodeId);
}
}
} else if (singleViewLogIds == null || "".equals(singleViewLogIds)) {//全部不能查看
} else {//查看部分
String tempidstrs[] = Util.TokenizerString2(singleViewLogIds, ",");
for (int i = 0; i < tempidstrs.length; i++) {
if (!Nodes.contains("wfl" + workflowid + "_" + tempidstrs[i])) {
Nodes.add("wfl" + workflowid + "_" + tempidstrs[i]);
}
}
}
}
}
/////////////////////////////////
Nodes.add("wfl" + workflowid + "_999999999");
NodeNames.add(""+ SystemEnv.getHtmlLabelName(84441,weaver.general.ThreadVarLanguage.getLang())+"");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* 获取自由流程的签字意见
*/
public String GetfreeNodeRemark(int workflowid, int currentnodeid, int ismode,NodeSignInputSetEntity entity) {
if (ismode == 1)
ismode = 0;
//-9999表示自由节点
String str = GetNodeRemarkInner(workflowid, -9999, currentnodeid, ismode,entity);
return str;
}
public String GetfreeNodeRemark(int workflowid, int currentnodeid, int ismode){
return GetfreeNodeRemark(workflowid,currentnodeid,ismode,null);
}
/**
* 得到节点的批注,这个是最原始的方法,现有的调用地方都基本调用这个方法,大多是图形化模式的
*
* @param workflowid 工作流
* @param nodeid 节点ID
* @param currentnodeid 流程当前节点
* @return 节点的批注
*/
public String GetNodeRemark(int workflowid, int nodeid, int currentnodeid) {
try {
return GetNodeRemarkInner(workflowid, nodeid, currentnodeid, 0);
} catch (Exception e) {
log.info("Catch a exception.", e);
return "";
}
}
/**
* 得到节点的批注,这个是新写的方法,用来Html模式下调用,主要为了适应6.0中把签字意见填写模式改成Html控件的了
*
* @param workflowid 工作流
* @param nodeid 节点ID
* @param currentnodeid 流程当前节点
* @param ismode 流程模式;1,图形化模式;2,Html模式;0,一般模式。但是一般模式好像用不到这个方法
* @return 节点的批注
*/
public String GetNodeRemark(int workflowid, int nodeid, int currentnodeid, int ismode) {
try {
return GetNodeRemarkInner(workflowid, nodeid, currentnodeid, ismode,null);
} catch (Exception e) {
log.info("Catch a exception.", e);
return "";
}
}
public String GetNodeRemark(int workflowid, int nodeid, int currentnodeid, int ismode, NodeSignInputSetEntity entity) {
try {
return GetNodeRemarkInner(workflowid, nodeid, currentnodeid, ismode,entity);
} catch (Exception e) {
log.info("Catch a exception.", e);
return "";
}
}
private String checkNodemark(String nodemark){
// if(!"1".equals(this.wfinfo.get("isprint")))
// nodemark = RequestFormBiz.manageImgLazyLoad(nodemark);
// 去掉多余分隔符
nodemark = nodemark.replace(String.valueOf(FieldInfo.getNodeSeparator()), "").replace(String.valueOf(Util.getSeparator()), "");
if (nodemark.indexOf(" ") == 0)
nodemark = nodemark.substring(4, nodemark.length());
if (nodemark.endsWith(" "))
nodemark = nodemark.substring(0, nodemark.length() - 4);
return convertChar(nodemark);
}
private String convertChar(String str){
str = str.replaceAll("\\\t", "");
return str;
}
public List> GetGroupNodeRemark(int workflowid, int nodeid, int currentnodeid, int ismode, NodeSignInputSetEntity entity) {
try {
GetNodeRemarkInner(workflowid, nodeid, currentnodeid, ismode,entity);
} catch (Exception e) {
log.info("Catch a exception.", e);
}
return nodeMarkContent;
}
public String GetNodeRemarkInner(int workflowid, int nodeid, int currentnodeid, int ismode){
return GetNodeRemarkInner(workflowid,nodeid,currentnodeid,ismode,null);
}
/**
* 得到节点的批注,这个方法具体用来该类中自己使用,为了兼容系统中很多调用原GetNodeRemark(int workflowid,int nodeid,int currentnodeid)的方法,而复写的方法
*
* @param workflowid 作流
* @param nodeid 节点ID
* @param currentnodeid 流程当前节点
* @param ismode 流程模式;1,图形化模式;2,Html模式;0,一般模式。但是一般模式好像用不到这个方法
* 0才是模板模式.......
* @return 节点的批注
*/
public String GetNodeRemarkInner(int workflowid, int nodeid, int currentnodeid, int ismode,NodeSignInputSetEntity entity) {
String NodeRemark = "";
this.layoutNodeid = nodeid;
this.viewNodeidScope = currentnodeid;
nodeMarkContent = new ArrayList<>();
int showimg = Util.getIntValue(getWfsbean().getPropValue("WFSignatureImg", "showimg"), 0);
RecordSet rs1 = new RecordSet();
String orderby = "desc";
WFLinkInfo wfLinkInfo = new WFLinkInfo();
String isshowSrc = wfLinkInfo.getIsshowSrc(workflowid);
RecordSet rs = new RecordSet();
boolean belongGroup = nodeid == -1 || nodeid == -2 || nodeid == -3;
if (workflowid > 0 && (nodeid > 0 || nodeid == -9999 || nodeid == RequestConstant.ALL_NODE_SIGN_MARK || belongGroup)) {
ArrayList preoperators = new ArrayList();
String username = "";
String departmentname = "";
WFManager wfManager = new WFManager();
wfManager.reset();
wfManager.setWfid(workflowid);
try {
wfManager.getWfInfo();
String orderbytype = Util.null2String(wfManager.getOrderbytype());
if ("2".equals(orderbytype)) {
orderby = "asc";
}
} catch (Exception e) {
}
WFLinkInfo wfinf = new WFLinkInfo();
int nodeattribute = 0;
if (nodeid > 0)
nodeattribute = wfinf.getNodeAttribute(nodeid);
int viewtypeall = 0;
int viewdescall = 0;
int showtype = 0;
int vtapprove = 0;
int vtrealize = 0;
int vtforward = 0;
int vtTakingOpinions = 0;
int vtHandleForward = 0;
int vtpostil = 0;
int vttpostil = 0;
int vtrecipient = 0;
int vtrpostil = 0;
int vtreject = 0;
int vtsuperintend = 0;
int vtover = 0;
int vtintervenor = 0;
int vtChuanyue = 0;
int vtChuanyueRec = 0;
int vtTakForward = 0;
int vtTakEnd = 0;
int vtWithdraw = 0;
int vdcomments = 0;
int vddeptname = 0;
int vdoperator = 0;
int vddate = 0;
int vdtime = 0;
int stnull = 0;
int vsignupload = 0;
int vmobilesource = 0;
int vsigndoc = 0;
int vsignworkflow = 0;
int remarkcolumn = 1;
int languageid = 7;
int selectformat = 0;
int vdposition = 0;
int vdsub = 0;
int vdjob = 0;
int vdnodename = 0;
int vdaction = 0;
String showDesc = "";
String signShowDesc = "";
String printviewdesc = "";
String viewtypeallValue = "";
if (user != null) {
languageid = user.getLanguage();
}
String ORwhere = "";
String appendORwhere = "";
Set logTypeSet = new HashSet<>();
Set logIdSet = null;
Map postilMap = new HashMap<>();//批注的类型
//判断当前节点是否是自由节点
int node_temp = currentnodeid;
rs.execute("select isfreenode,startnodeid from workflow_nodebase where id = " + currentnodeid);
if (rs.next()) {
int isfreenode = rs.getInt(1);
if (isfreenode == 1) {
node_temp = rs.getInt(2);//当前节点是自由节点,取自由节点发起节点的配置
}
}
node_temp = FreeNodeBiz.getExtendNodeId(node_temp);
String sql = "select * from workflow_flownode where workflowid=" + workflowid + " and nodeid=" + node_temp;
rs.executeSql(sql);
if (rs.next()) {
viewtypeall = Util.getIntValue(rs.getString("viewtypeall"), 0);
viewdescall = Util.getIntValue(rs.getString("viewdescall"), 0);
showtype = Util.getIntValue(rs.getString("showtype"), 0);
vtapprove = Util.getIntValue(rs.getString("vtapprove"), 0);
vtrealize = Util.getIntValue(rs.getString("vtrealize"), 0);
vtforward = Util.getIntValue(rs.getString("vtforward"), 0);
vtTakingOpinions = Util.getIntValue(rs.getString("vtTakingOpinions"), 0); //征求意见
vtHandleForward = Util.getIntValue(rs.getString("vtHandleForward"), 0); // 转办
vttpostil = Util.getIntValue(Util.null2String(rs.getString("vttpostil")), 0);
vtrpostil = Util.getIntValue(Util.null2String(rs.getString("vtrpostil")), 0);
vtpostil = Util.getIntValue(rs.getString("vtpostil"), 0);
vtrecipient = Util.getIntValue(rs.getString("vtrecipient"), 0);
vtreject = Util.getIntValue(rs.getString("vtreject"), 0);
vtsuperintend = Util.getIntValue(rs.getString("vtsuperintend"), 0);
vtover = Util.getIntValue(rs.getString("vtover"), 0);
vtintervenor = Util.getIntValue(rs.getString("vtintervenor"), 0);
vtChuanyue = Util.getIntValue(rs.getString("vtChuanyue"), 0);
vtChuanyueRec = Util.getIntValue(rs.getString("vtChuanyueRec"), 0);
vtTakForward = Util.getIntValue(rs.getString("vttakforward"), 0);
vtTakEnd = Util.getIntValue(rs.getString("vttakend"), 0);
vtWithdraw = Util.getIntValue(rs.getString("vtWithdraw"), 0);
vdcomments = Util.getIntValue(rs.getString("vdcomments"), 0);
vddeptname = Util.getIntValue(rs.getString("vddeptname"), 0);
vdoperator = Util.getIntValue(rs.getString("vdoperator"), 0);
vddate = Util.getIntValue(rs.getString("vddate"), 0);
vdtime = Util.getIntValue(rs.getString("vdtime"), 0);
stnull = Util.getIntValue(rs.getString("stnull"), 0);
vsignupload = Util.getIntValue(rs.getString("vsignupload"), 0);
vmobilesource = Util.getIntValue(rs.getString("vmobilesource"), -1);
vsigndoc = Util.getIntValue(rs.getString("vsigndoc"), 0);
vsignworkflow = Util.getIntValue(rs.getString("vsignworkflow"), 0);
remarkcolumn = Util.getIntValue(rs.getString("remarkcolumn"), 1);
selectformat = Util.getIntValue(rs.getString("selectformat"), 0);
vdsub = Util.getIntValue(rs.getString("vdsub"), 0);
vdjob = Util.getIntValue(rs.getString("vdjob"), 0);
vdnodename = Util.getIntValue(rs.getString("vdnodename"), 0);
vdposition = Util.getIntValue(rs.getString("vdposition"), 0);
vdaction = Util.getIntValue(rs.getString("vdaction"), 0);
showDesc = Util.null2String(rs.getString("showdesc"));
signShowDesc = Util.null2String(rs.getString("signshowdesc"));
//如果是打印获取签字意见
if (Isprint == 1) {
showDesc = Util.null2String(rs.getString("printshowdesc"));
signShowDesc = Util.null2String(rs.getString("printsignshowdesc"));
selectformat = Util.getIntValue(rs.getString("printselectformat"), 0);
printviewdesc = Util.null2String(rs.getString("printviewdesc"));
remarkcolumn = Util.getIntValue(rs.getString("PRINTREMARKCOLUMN"), 1);
viewtypeallValue = Util.null2String(rs.getString("printviewtype"));
showtype = Util.getIntValue(rs.getString("printshowtype"), 0);
stnull = Util.getIntValue(rs.getString("printstnull"), 0);
int nodesignset = 0;
RecordSet rszz = new RecordSet();
rszz.executeQuery("select * from workflow_printset where type=? and modeid=?", ismode == 0 ? 2 : 1, printModeId);
while (rszz.next()) {
nodesignset = ListUtil.ToZero(rszz.getInt("nodesignset"));
//如果此模板有进行设置
if (nodesignset == 1) {
selectformat = ListUtil.ToZero(rszz.getInt("selectformat"));
remarkcolumn = Util.getIntValue(rszz.getString("REMARKCOLUMN"), 1);
viewtypeallValue = Util.null2String(rszz.getString("viewtype"));
showtype = Util.getIntValue(rszz.getString("showtype"), 0);
stnull = Util.getIntValue(rszz.getString("stnull"), 0);
//如果是模板模式 没有自定义的签字意见 只能是普通
if (ismode == 0) {
selectformat = 0;
}
//并且是自定义设置
if (selectformat == 1) {
showDesc = rszz.getString("showdesc");
signShowDesc = rszz.getString("signShowDesc");
} else {
//如果是默认设置 那么也应该取模板上面的设置
printviewdesc = rszz.getString("viewdesc");
}
}
}
//使用默认格式
if (selectformat != 1&&!ShowTypeEnum.OLDVALUE.equals(printviewdesc)) {
vdcomments = 0;
vddeptname = 0;
vdoperator = 0;
vddate = 0;
vdtime = 0;
vsigndoc = 0;
vsignworkflow = 0;
vmobilesource = 0;
vsignupload = 0;
vdaction = 0;
vdposition = 0;
viewdescall=0;
vdsub = 0;
vdjob = 0;
vdnodename = 0;
if ("1".equals(printviewdesc) || "all".equals(printviewdesc)) {
viewdescall = 1;
vmobilesource=1;
} else {
List valueList = Util.splitString2List(printviewdesc, ",");
if (valueList.size() == ShowTypeEnum.values().length) {
viewdescall = 1;
vmobilesource=1;
} else {
if (printviewdesc.indexOf("viewdesc_comments") > -1) {
vdcomments = 1;
}
if (printviewdesc.indexOf("viewdesc_deptname") > -1) {
vddeptname = 1;
}
if (printviewdesc.indexOf("viewdesc_operator") > -1) {
vdoperator = 1;
}
if (printviewdesc.indexOf("viewdesc_date") > -1) {
vddate = 1;
}
if (printviewdesc.indexOf("viewdesc_time") > -1) {
vdtime = 1;
}
if (printviewdesc.indexOf("viewdesc_signdoc") > -1) {
vsigndoc = 1;
}
if (printviewdesc.indexOf("viewdesc_signworkflow") > -1) {
vsignworkflow = 1;
}
if (printviewdesc.indexOf("viewdesc_mobilesource") > -1) {
vmobilesource = 1;
}
if (printviewdesc.indexOf("viewdesc_signupload") > -1) {
vsignupload = 1;
}
if (printviewdesc.indexOf("viewdesc_action") > -1) {
vdaction = 1;
}
if (printviewdesc.indexOf("viewdesc_position") > -1) {
vdposition = 1;
}
if (printviewdesc.indexOf("viewdesc_subname") > -1) {
vdsub = 1;
}
if (printviewdesc.indexOf("viewdesc_jobname") > -1) {
vdjob = 1;
}
if (printviewdesc.indexOf("viewdesc_nodename") > -1) {
vdnodename = 1;
}
}
}
}
if (!ShowTypeEnum.OLDVALUE.equals(viewtypeallValue)) {
viewtypeall = 0;
vtapprove = 0;
vtrealize = 0;
vtforward = 0;
vtpostil = 0;
vtHandleForward = 0;
vtTakingOpinions = 0;
vttpostil = 0;
vtrecipient = 0;
vtrpostil = 0;
vtreject = 0;
vtsuperintend = 0;
vtover = 0;
vtintervenor = 0;
vtWithdraw = 0;
if (viewtypeallValue.indexOf("viewtype_all") != -1 || viewtypeallValue.equals("1") || "all".equals(viewtypeallValue)) {
viewtypeall = 1;
} else {
if (viewtypeallValue.indexOf("viewtype_approve") != -1)
vtapprove = 1;
if (viewtypeallValue.indexOf("viewtype_realize") != -1)
vtrealize = 1;
if (viewtypeallValue.indexOf("viewtype_forward") != -1)
vtforward = 1;
if (viewtypeallValue.indexOf("viewtype_postil") != -1)
vtpostil = 1;
if (viewtypeallValue.indexOf("view_handleForward") != -1)
vtHandleForward = 1;
if (viewtypeallValue.indexOf("view_takingOpinions") != -1)
vtTakingOpinions = 1;
if (viewtypeallValue.indexOf("viewtype_tpostil") != -1)
vttpostil = 1;
if (viewtypeallValue.indexOf("viewtype_recipient") != -1)
vtrecipient = 1;
if (viewtypeallValue.indexOf("viewtype_rpostil") != -1)
vtrpostil = 1;
if (viewtypeallValue.indexOf("viewtype_reject") != -1)
vtreject = 1;
if (viewtypeallValue.indexOf("viewtype_superintend") != -1)
vtsuperintend = 1;
if (viewtypeallValue.indexOf("viewtype_over") != -1)
vtover = 1;
if (viewtypeallValue.indexOf("viewtype_intervenor") != -1)
vtintervenor = 1;
if (viewtypeallValue.indexOf("viewtype_withdraw") != -1)
vtWithdraw = 1;
}
}
}
}
if (viewtypeall != 1) {
if (vtapprove == 1) { //提交
ORwhere += " or logtype='2'";
}
if (vtrealize == 1) { //批准
ORwhere += " or logtype='0'";
}
if (vtforward == 1) { //转发
ORwhere += " or logtype='7'";
}
if (vtTakingOpinions == 1) { //征求意见
ORwhere += " or logtype='a'";
}
if (vtHandleForward == 1) { //转办
ORwhere += " or logtype='h'";
}
if (vttpostil == 1) { //回复
ORwhere += " or logtype='b'";
}
if (vtrpostil == 1) { //抄送批注----这里之前应该是搞错了,导致现在如果设置只显示抄送批注签字意见,会导致转办反馈的签字意见也跟着显示出来
ORwhere += " or logtype='9'";
}
if (vtpostil == 1) { //批注
ORwhere += " or logtype='9'";
postilMap.put("viewtype_postil","9");
}
if (vtrecipient == 1) { //抄送
ORwhere += " or logtype='t'";
}
if (vtreject == 1) { //退回
ORwhere += " or logtype='3'";
}
if (vtsuperintend == 1) { //督办
ORwhere += " or logtype='s'";
}
if (vtover == 1) { //强制归档
ORwhere += " or logtype='e'";
}
if (vtintervenor == 1) { //流程干预
ORwhere += " or logtype='i'";
}
if (vtChuanyue == 1) { //传阅
ORwhere += " or logtype='c'";
}
if (vtChuanyueRec == 1) { //传阅批示
ORwhere += " or logtype='y'";
}
if (vtTakForward == 1) {//征询转办
ORwhere += " or logtype='z'";
}
if (vtTakEnd == 1) {//结束征询
ORwhere += " or logtype='x'";
}
if (vtWithdraw == 1) {//结束征询
ORwhere += " or logtype='r'";
}
ORwhere = ORwhere.trim();
if ("".equals(ORwhere))
ORwhere = " 1=2";
else
ORwhere = ORwhere.substring(2);
}
if(vtrpostil == 1){
postilMap.put("viewtype_rpostil","9");
}
if(entity != null){
ORwhere = "";
Map showTypes = entity.getShowType();
postilMap.clear();
postilMap.putAll(showTypes);
Collection values = showTypes.values();
Iterator iterator = values.iterator();
Map signInputMap = ShowType.getSignInputMap();
Map valueMap = new HashMap<>();
for(Map.Entry entry : signInputMap.entrySet()){
String key = entry.getValue();
String value = entry.getKey();
valueMap.put(value,key);
if("1".equals(entity.getIsGroup())){
appendORwhere += " or logtype='"+value+"'";
}
}
while(iterator.hasNext()){
String next = Util.null2String(iterator.next());
String logtype = Util.null2String(valueMap.get(next));
if("1".equals(entity.getIsGroup())){
if(signInputMap.values().contains(next) && !"".equals(logtype) && values.contains(logtype)){
//doto 可能需要做其他事情
} else {
ORwhere += " or logtype='"+next+"'";
}
logTypeSet.add(next);
} else {
ORwhere += " or logtype='"+next+"'";
}
}
ORwhere = ORwhere.trim();
if ("".equals(ORwhere))
ORwhere = " 1=2";
else
ORwhere = ORwhere.substring(2);
}
//二次认证,数据保护的验证
Map checkMap = SecondAuthBiz.getProtectedLogs(Requestid);
Map logIdMap = (HashMap) checkMap.get("logIdMap");
//批量获取契约锁认证的信息
Map qysSignInfoMap = SecondAuthBiz.getMultiQYSSignInfo(Requestid,nodeid);
//拼接查询SQL,区分当前请求意见、还是主子流程意见
String backfields="", fromSql="", sqlWhere="";
boolean siblingOtherType = false;
if(this.mainSubSignEntity.getType() > 10) {
//判断是否平行流程其他类型
String sibling = "select distinct WORKFLOWID from workflow_requestlog where nodeid = "+nodeid;
RecordSet rs2 = new RecordSet();
rs2.executeQuery(sibling);
rs2.next();
String thisworkflowid = rs2.getString(1);
if(!thisworkflowid.equals(workflowid+"")){
siblingOtherType = true;
}
//平行流程意见
backfields = " a.* ";
fromSql = " workflow_requestlog a,hrmsubcompany b,hrmdepartment c,HRMRESOURCE d ";
sqlWhere = " where a.OPERATORDEPT = c.ID and a.OPERATORSUB = b.id and a.operator = d.id and a.nodeid in ( \n" + nodeid +
" ) and a.requestid in (select requestid from workflow_requestbase where MAINREQUESTID = \n" +
" (select mainrequestid from workflow_requestbase where requestid = " + Requestid + ")) ";
new BaseBean().writeLog("fieldinfo---fromSql----->" + fromSql + fromSql + sqlWhere);
}else if(this.mainSubSignEntity.getType() > 0){
//主子流程意见
MainSubWfSignBiz biz = new MainSubWfSignBiz();
biz.generateSqlInfo(this.mainSubSignEntity, this.Requestid);
backfields = this.mainSubSignEntity.getBackfields();
fromSql = this.mainSubSignEntity.getFromSql();
sqlWhere = this.mainSubSignEntity.getSqlWhere();
}else{
//当前流程意见
backfields = " t1.* ";
fromSql = " workflow_requestlog t1 left join hrmresource t2 on t1.operator = t2.id ";
fromSql += " left join (" +
"select nodeid,nodeorder,0 as isfreenode from workflow_flownode where workflowid="+workflowid+" " +
" union select a.id, b.nodeorder, 1 as isfreenode from workflow_freenode a " +
"left join workflow_flownode b on a.extendnodeid = b.nodeid where a.requestid = "+Requestid+" and b.workflowid = " + workflowid +
") t3 on t1.nodeid=t3.nodeid ";
if (nodeid == -2) {
fromSql += " left join hrmdepartment t4 on t2.departmentid=t4.id ";
} else if (nodeid == -3) {
fromSql += " left join hrmsubcompany t4 on t2.subcompanyid1=t4.id ";
}
sqlWhere = "where t1.workflowid=" + workflowid + " and t1.requestid=" + Requestid + " and t1.logtype!='1' ";
if (nodeid > 0) {
sqlWhere += " and t1.nodeid = " + nodeid;
} else if (belongGroup || nodeid == RequestConstant.ALL_NODE_SIGN_MARK){
sqlWhere += "";
} else {
sqlWhere += " and t1.nodeid in ("+getAllFreeNodeIds()+")";
}
//排除已删除的节点签字意见
rs.executeQuery("select a.nodeid from workflow_flownode_dellog a ,workflow_requestbase b where a.workflowid = b.workflowid and b.requestid = ?",Requestid);
List delnode = new ArrayList<>();
while (rs.next()){
delnode.add(rs.getString("nodeid"));
}
if(delnode.size() > 0){
sqlWhere += " and "+Util.getSubINClause(String.join(",",delnode),"t1.nodeid","not in");
}
//添加权限判断
RequestRemarkRight remarkRight = new RequestRemarkRight();
String sqlcondition = remarkRight.getRightCondition(Requestid, workflowid, user.getUID());
sqlWhere += sqlcondition;
if (nodeattribute == 1 && nodeid > 0) {
sqlWhere += " and logid in(select max(logid) from workflow_requestlog where workflowid=" + workflowid + " and requestid=" + Requestid + " and logtype!='1' and nodeid=" + nodeid
+ " group by operator,operatortype,operatedate,operatetime,logid)";
}
ArrayList forklogids = wfinf.ForkStartLogids(Requestid, workflowid);
if (forklogids.size() > 0) {
sqlWhere += " and " + Util.getSubINClause(StringUtils.join(forklogids, ","), "t1.logid", "not in");
}
}
String groupOrder = " ASC ";
String orderBy = " operatedate desc,operatetime desc, logid";
int groupOrderType = 0;
if(entity != null){
// if(entity.getShowScope() == 2){ //暂时注释
// sqlWhere += " and t2.seclevel >=" + entity.getMinLevel() + " and t2.seclevel <= " + entity.getMaxLevel();
// }
String orderByTemp = "";
groupOrderType = entity.getGroupOrderType();
Iterator> iterator = entity.getShowOrder().iterator();
while(iterator.hasNext()){
Map next = iterator.next();
int id = Util.getIntValue(Util.null2String(next.get("id")),0);
String order = Util.null2String(next.get("order"));
if(id == 1){//人员显示顺序
orderByTemp += ",t2.dsporder " + order;
} else if(id == 2){//安全级别
orderByTemp += ",t2.seclevel " + order;
} else if(id == 3){//操作类型
orderByTemp += ",t1.logtype " + order;
} else if(id == 4){//操作时间
orderByTemp += ",t1.operatedate "+order+", t1.operatetime " + order;
} else if(id == 5){//节点
orderByTemp += ",t3.nodeorder " + order;
}
}
if(!"".equals(orderByTemp)){
orderByTemp = orderByTemp.substring(1);
}
if(showtype == 0){//处理显示最后一次签字意见设置,下方循环意见代码先处理空意见再处理最后一次意见,签字意见框没有单独保存过走默认排序下无需处理
//showtype---显示类型 0:显示最后一次意见 1:显示全部
//stnull---是否显示空意见 0:显示空意见 1:不显示空意见
logIdSet = new HashSet<>();
String logIds = "";
Set operators_nodeidtmp = new HashSet<>();
//Set nodeids = new HashSet<>();
String sqlTemp = "select t1.logid,t1.operator,t1.nodeid,t1.logtype,t1.agenttype,t1.agentorbyagentid from " + fromSql + " " + sqlWhere;
if (!ORwhere.equals(""))
sqlTemp += " and (" + ORwhere + ") ";
if(stnull == 1){//不显示空意见,排除空意见后再按照时间倒序取最后一次节点签字意见
String dbType = rs.getOrgindbtype();
if("oracle".equals(dbType)){
sqlTemp += " and t1.remark is not null and DBMS_LOB.GETLENGTH(t1.remark) > 0 ";
}else if("sqlserver".equals(dbType)){
sqlTemp += " and t1.remark is not null and datalength(t1.remark) >0 ";
}else if("mysql".equals(dbType)){
sqlTemp += " and t1.remark is not null and t1.remark <>'' ";
}else{
sqlTemp += " and t1.remark is not null ";
}
}
sqlTemp += " order by operatedate desc,operatetime desc ";
Map signInputMap = ShowType.getSignInputMap();
rs.executeQuery(sqlTemp);
while(rs.next()){
Integer operator = rs.getInt("operator");
String logType = rs.getString("logType");
String logId = rs.getString("logId");
Integer nodeidtmp = rs.getInt("nodeid");//仅按照节点意见分组时,区分意见节点
int agenttype = Util.getIntValue(rs.getString("agenttype"));
int agentorByAgentId = rs.getInt("agentorbyagentid");
if (agenttype > 0) {
if(!operators_nodeidtmp.contains(agentorByAgentId + "_" + nodeidtmp)) {
operators_nodeidtmp.add(agentorByAgentId + "_" + nodeidtmp);
logIds += "," + logId;
logIdSet.add(logId);
}
} else {
if (!operators_nodeidtmp.contains(operator+"_"+nodeidtmp)) {
operators_nodeidtmp.add(operator + "_" + nodeidtmp);
logIds += "," + logId;
logIdSet.add(logId);
}
}
/*if(!nodeids.contains(nodeid1)) {
nodeids.add(nodeid1);
}*/
if(signInputMap.get(logType) != null){
logIds += "," + logId;
}
}
if(!"".equals(logIds)){
logIds = logIds.substring(1);
// sqlWhere += " and logid in ("+logIds+")";
}
}
orderBy = ("".equals(orderByTemp) ? "t1.operatedate desc,t1.operatetime desc" : orderByTemp) + ",t1.logid";
}
if(groupOrderType == 2 || groupOrderType == 3){//2.时间正序 3.时间倒序
}else{
groupOrder = groupOrderType==1?" DESC ":" ASC ";
//添加分组排序
if (nodeid == -1) {//节点
orderBy = " t3.nodeorder " + groupOrder + ", t3.isfreenode, " + orderBy;
} else if(nodeid == -2 || nodeid == -3) {//部门、分部
orderBy = " t4.showorder " + groupOrder + ", t4.id " + groupOrder + "," + orderBy;
}
}
orderBy = " order by " + orderBy;
ORwhere += appendORwhere;
List> dataArr = getRemarkList(backfields,fromSql,sqlWhere,ORwhere,orderBy,workflowid,Requestid,logTypeSet,logIdSet,true);
boolean postil = (postilMap.containsKey("viewtype_postil") && !postilMap.containsKey("viewtype_rpostil")) || (!postilMap.containsKey("viewtype_postil") && postilMap.containsKey("viewtype_rpostil"));
Set logIdFielters = new HashSet<>();
Map> remarkListMap = new HashMap<>();
List remarkKeys = new ArrayList<>();
List> remarkList_date = new ArrayList<>();
Map freeNodeNameMap = getFreeNodeName(Requestid);
RobotNodeServiceBiz robotNodeServiceBiz = new RobotNodeServiceBiz(languageid);
if (ismode == 2) {//html模式
List remarkList = new ArrayList();
for(Map params : dataArr){
int currequestid = param2Integer(params,"requestid");
remarkRequestid = currequestid;
int agenttype = param2Integer(params,"agenttype");
int agentorbyagentid = param2Integer(params,"agentorbyagentid");
int operator = param2Integer(params,"operator");
String seclevellog = param2String(params, "seclevel");
int logId = param2Integer(params,"logId");
int operatortype = param2Integer(params,"operatortype");
int requestLogId = param2Integer(params,"requestLogId");
int nodeid_temp = param2Integer(params,"nodeid");
String isRobotNode = params.get("isrobotnode");
//机器人节点
NodeInfoEntity nodeInfoEntity = com.engine.workflow.biz.workflowCore.WorkflowBaseBiz.getNodeInfo(nodeid_temp);
if((operator+"").equals(RobotNodeBiz.operatorid) && (NodeType.WAIT.getValue().equals(nodeInfoEntity.getNodetype()+"") || NodeType.AUTOPROCESS.getValue().equals(nodeInfoEntity.getNodetype()+""))){
//机器人节点
String remarkOperation = new RobotNodeServiceBiz().getRobotNodeSet(nodeid_temp).getRemarkOperation();
if("0".equals(remarkOperation) && "1".equals(isRobotNode)){
continue;
}
}
String annexdocids = param2String(params,"annexdocids");
String signdocids = param2String(params,"signdocids");
String signworkflowids = param2String(params,"signworkflowids");
int operatorDept = param2Integer(params,"operatorDept");
int operatorSub = param2Integer(params,"operatorSub");
int operatorJob = param2Integer(params,"operatorJob");
int operatorNodeId = param2Integer(params,"nodeid");
String logtype = param2String(params,"logtype");
String remark = param2String(params,"remark");
String operatedate = param2String(params,"operatedate");
String operatetime = param2String(params,"operatetime");
String appHandWrittenSignID = param2String(params,"HandWrittenSign");
int appSpeechAttahmentID = param2Integer(params,"SpeechAttachment");
String speechAttachmente9 = param2String (params,"speechAttachmente9");
String remarkLocation = param2String(params,"remarkLocation");
String isMobile = param2String(params,"isMobile");
String fulltextannotation = param2String(params,"fulltextannotation");
String remarkSrc = "";
//去除默认签字意见大小的div
remark = processDefaultFontSizeDiv(remark);
//去除重复的记录
if(logIdFielters.contains(logId)){
continue;
}
logIdFielters.add(logId);
if(entity != null){
//意见显示范围
if(entity.getShowScope() == 2) {
int seclevel = 0;
if (seclevellog.equals("")) {
seclevel = Util.getIntValue(resourcecominfo.getSeclevel(operator+""),0);
if (agenttype == 2 && agentorbyagentid > 0) {
seclevel = Util.getIntValue(resourcecominfo.getSeclevel(agentorbyagentid+""),0);
}
//外部用户
if(operatortype == 1){
seclevel = Util.getIntValue(crmcominfo.getSeclevel(operator+""),0);
}
} else {
seclevel = Util.getIntValue(seclevellog, 0);
}
if(!(seclevel >= entity.getMinLevel() && seclevel <= entity.getMaxLevel())){
continue;
}
}
int checkNodeId = nodeid_temp;
//自由节点,作为发起节点来过滤
if(FreeNodeBiz.isFreeNode(checkNodeId)) {
rs.executeQuery("select extendnodeid from workflow_freenode where id = ?", checkNodeId);
if (rs.next()) {
checkNodeId = Util.getIntValue(rs.getString(1));
}
}
//显示意见节点范围
String nodeScopeIds = "," + entity.getNodeScopeIds() + ",";
if (entity.getNodeScopeType() == 1 && nodeScopeIds.indexOf("," + checkNodeId + ",") == -1) {//在节点中选择
continue;
}
if(entity.getNodeScopeType() == 2 && nodeScopeIds.indexOf("," + checkNodeId + ",") != -1) {//在节点中排除选择
continue;
}
}
if(logtype.equals("9") && postil){//批注:被转发人批注或被抄送人提交 这种方式每次去查询性能很低
int calPreRemarkNodeid = nodeid == RequestConstant.ALL_NODE_SIGN_MARK ? nodeid_temp : nodeid;
if(calPreRemarkNodeid < 0) {
calPreRemarkNodeid = nodeid_temp;
}
Map isRemarkMap = getIsRemark(currequestid, calPreRemarkNodeid, operator);
String preisremark = Util.null2String(isRemarkMap.get("preisremark"));
int takisremark = Util.getIntValue(Util.null2String(isRemarkMap.get("takisremark")));
if(postilMap.containsKey("viewtype_rpostil")) {//被转发人批注
if(preisremark.equals("1") && takisremark !=2){
continue;
}
}else if(postilMap.containsKey("viewtype_postil")){//被抄送人提交
if(preisremark.equals("9")){
continue;
}
}
}
if (operatorDept <= 0) {
operatorDept = Util.getIntValue(resourcecominfo.getDepartmentID("" + operator));
}
if (operatorSub <= 0) {
operatorSub = Util.getIntValue(resourcecominfo.getSubCompanyID("" + operator));
}
if (operatorJob <= 0) {
operatorJob = Util.getIntValue(resourcecominfo.getJobTitle("" + operator));
}
if ("t".equals(logtype)) {
remark = "";
} else {
if (requestLogId > 0) {//表单签章
rs1.executeSql(" select imageFileId from Workflow_FormSignRemark where requestLogId=" + requestLogId);
if (rs1.next()) {
int imageFileId = Util.getIntValue(rs1.getString("imageFileId"), -1);
if (imageFileId > -1) {
remark = " ";
}
}
} else {
SignSource signSource = SignSource.getSignSource(isMobile);
if(signSource != null) {
if ("1".equals(isshowSrc)) {
remarkSrc = SignSource.getSignSourceNoHtml(signSource,languageid);
}
} else {
if ("1".equals(isshowSrc))
remarkSrc = wfinf.getRemarkSource2(remark);
else
remarkSrc = wfinf.getRemarkSource_WfAutoApprove(remark);
remark = wfinf.removeRemarkSource2(remark);
}
remark = checkRemark(remark, ismode);
}
}
remark = appendSomeContent(remark, appHandWrittenSignID, appSpeechAttahmentID, ismode, remarkLocation,speechAttachmente9);
//签字意见添加全文批注
remark = appendFullTextAnnotation(remark, fulltextannotation);
if (stnull == 1 && "".equals(Util.encodeJS(toExcel(dropScript(remark))))) {//不显示空意见
continue;
}
//添加平行流程其他类型判断
if(siblingOtherType){
preoperators.clear();
}
//最后一次签字意见
if (preoperators.indexOf(operator + "_" + nodeid_temp) == -1 || belongGroup) {
if (showtype == 0) {
if(agenttype > 0){
if(preoperators.indexOf(agentorbyagentid + "_" + nodeid_temp) != -1) continue;
preoperators.add(agentorbyagentid + "_" + nodeid_temp);
}else{
preoperators.add(operator + "_" + nodeid_temp);
}
}
//姓名
String username_tmep = "";
String img = "";
String signatureImg = SecondAuthBiz.getQYSSignatureImg(logId + "", operator + "", user, logIdMap, qysSignInfoMap);
if (!"".equals(signatureImg)) { //优先显示契约锁数据保护或者认证时选择的章
img = signatureImg;
username_tmep = signatureImg;
}else {
if (showimg == 1) {
img = getNameImg(operator, ismode);
username_tmep = img;
}
}
if ("".equals(username_tmep))
username_tmep = resourcecominfo.getResourcename(operator + "");
if (operatortype == 1)
username_tmep = crmcominfo.getCustomerInfoname("" + operator);
if (operatortype == 2)
username_tmep = robotNodeServiceBiz.getRobotNodeSet(nodeid_temp).getOperatorName();
//操作类型
RequestLogOperateName requestLogOperateName = new RequestLogOperateName();
String operateName = "";
if("y".equals(logtype)) {//传阅批示
operateName = requestLogOperateName.getOperateName(workflowid + "", currequestid + "", nodeid_temp + "", logtype, operator + "", languageid,operatedate,operatetime);
}else {
operateName = requestLogOperateName.getOperateName(workflowid + "", currequestid + "", nodeid_temp + "", logtype, operator + "", languageid,operatedate,operatetime);
}
String[] datas = remarkLocation.split(",");
String locationText = "";
if (!remarkLocation.equals("") && datas.length == 4) {
String addr = datas[3];
String lng = datas[1];
String lat = datas[2];
if (Isprint == 1) {
locationText = SystemEnv.getHtmlLabelName(22981, user.getLanguage()) + ":" + addr;
} else {
locationText = SystemEnv.getHtmlLabelName(22981, user.getLanguage()) + ":" + "" + addr + " ";
}
}
RemarkInfoDTO remarkInfoDTO = new RemarkInfoDTO();
remarkInfoDTO.setOperatedate(operatedate);
remarkInfoDTO.setOperatetime(operatetime);
if (remark.contains("/workflow/request/ViewRequestForwardSPA.jsp")) {
remark = remark.replace("ViewRequestForwardSPA.jsp?", "ViewRequestForwardSPA.jsp?desrequestid=" + remarkRequestid + "&");
}
remarkInfoDTO.setRemark(remark);
remarkInfoDTO.setRemarkSrc(remarkSrc);
remarkInfoDTO.setSignDocs(getSignDocs(signdocids, languageid));
remarkInfoDTO.setSignFlows(getSignFlows(signworkflowids, languageid));
remarkInfoDTO.setSignUploads(getSignUploads(annexdocids, languageid));
remarkInfoDTO.setUsername(username_tmep);
remarkInfoDTO.setOperateName(operateName);
remarkInfoDTO.setPosition(locationText);
String depname = "";
String subname = "";
String jobtitle = "";
remarkInfoDTO.setDeptid(operatorDept);//qc1679821 增加部门id字段
if(operatortype != 1){
depname = orgShowBiz.getDepartmentShow("workflow", operatorDept + "");
subname = orgShowBiz.getSubcompanyShow("workflow", operatorSub + "");
jobtitle = jobComInfo.getJobTitlesname(operatorJob + "");
}
remarkInfoDTO.setDepartment(depname);
remarkInfoDTO.setSubcompany(subname);
remarkInfoDTO.setJobTitle(jobtitle);
remarkInfoDTO.setLanguage(languageid);
remarkInfoDTO.setNameImg(img);
if (FreeNodeBiz.isFreeNode(operatorNodeId)) {
remarkInfoDTO.setOperatorNodeName(freeNodeNameMap.get(operatorNodeId));
} else {
remarkInfoDTO.setOperatorNodeName(workflowNodeComInfo.getNodename(operatorNodeId+""));
}
//代理信息
if (agenttype == 2 && agentorbyagentid > 0) {
remarkInfoDTO.setAgentUser(resourcecominfo.getResourcename(agentorbyagentid + ""));
remarkInfoDTO.setAgentDepartment(orgShowBiz.getDepartmentShow("workflow", resourcecominfo.getDepartmentID(agentorbyagentid + "")));
// remarkInfoDTO.setSubcompany(orgShowBiz.getSubcompanyShow("workflow", resourcecominfo.getSubCompanyID(agentorbyagentid + "")));
// remarkInfoDTO.setJobTitle(jobComInfo.getJobName(resourcecominfo.getJobTitle(agentorbyagentid + "")));
}
remarkList.add(remarkInfoDTO);
//分部
if(belongGroup){
String key = nodeid_temp + "";
if(nodeid == -2){
if(operatorDept >= 0) {//优先取签字意见中的部门
key = operatorDept + "";
} else {
key = resourcecominfo.getDepartmentID(operator+"");
}
} else if(nodeid == -3){
if (operatorSub >= 0) {//优先取签字意见中的分部
key = operatorSub + "";
} else {
key = resourcecominfo.getSubCompanyID(operator+"");
}
}
if(preoperators.indexOf(operator + "_" + nodeid_temp + "_" + key) == -1) {
if (showtype == 0)
preoperators.add(operator + "_" + nodeid_temp + "_" + key);
if(!remarkListMap.containsKey(key)){
remarkListMap.put(key,new ArrayList<>());
remarkKeys.add(Util.getIntValue(key));
}
remarkListMap.get(key).add(remarkInfoDTO);
String keytmp = key;
remarkList_date.add(new HashMap(){{put(keytmp,operatedate+" "+operatetime);}});
}
}
}
}
if ("asc".equals(orderby)) {
remarkList = reverseList(remarkList);
}
//手机版只显示一列
if (isfromMobile == 1 || remarkcolumn == 0)
remarkcolumn = 1;
List showdescByDTO = ShowType.getDisplayList();
//初始化显示模板remarkDispaly的数据
//如果不是默认的话 不需要showdescByDTO 只有是默认的情况下才需要这个list
if (selectformat != 1) {
//默认的需要构建dto实体类
for (RemarkDisplayDTO dto : showdescByDTO) {
dto.setIsshow(0);
dto.setShowtypename(getShowtypeName(dto.getShowtype(), languageid));
if (viewdescall == 1) {
dto.setIsshow(1);
continue;
}
if (vdcomments == 1 && dto.getShowtype() == ShowTypeEnum.COMMENTS.getId()) {
dto.setIsshow(1);
}
if (vmobilesource == 1 && dto.getShowtype() == ShowTypeEnum.MOBILESOURCE.getId()) {
dto.setIsshow(1);
}
if (vdposition == 1 && dto.getShowtype() == ShowTypeEnum.POSITION.getId()) {
dto.setIsshow(1);
}
if (vdsub == 1 && dto.getShowtype() == ShowTypeEnum.SUB.getId()) {
dto.setIsshow(1);
}
if (vdjob == 1 && dto.getShowtype() == ShowTypeEnum.JOB.getId()) {
dto.setIsshow(1);
}
if (vdnodename == 1 && dto.getShowtype() == ShowTypeEnum.NODE.getId()) {
dto.setIsshow(1);
}
if (vsigndoc == 1 && dto.getShowtype() == ShowTypeEnum.DOC.getId()) {
dto.setIsshow(1);
}
if (vsignworkflow == 1 && dto.getShowtype() == ShowTypeEnum.WORKFLOW.getId()) {
dto.setIsshow(1);
}
if (vsignupload == 1 && dto.getShowtype() == ShowTypeEnum.UPLOAD.getId()) {
dto.setIsshow(1);
}
if (vddeptname == 1 && dto.getShowtype() == ShowTypeEnum.DEPTNAME.getId()) {
dto.setIsshow(1);
}
if (vdoperator == 1 && dto.getShowtype() == ShowTypeEnum.OPERATOR.getId()) {
dto.setIsshow(1);
}
if (vddate == 1 && dto.getShowtype() == ShowTypeEnum.DATE.getId()) {
dto.setIsshow(1);
}
if (vdtime == 1 && dto.getShowtype() == ShowTypeEnum.TIME.getId()) {
dto.setIsshow(1);
}
if (vdaction == 1 && dto.getShowtype() == ShowTypeEnum.ACTION.getId()) {
dto.setIsshow(1);
}
// 操作部门和操作人同时存在时, 操作部门和操作人中间显示符号 /
if (vddeptname == 1 && vdoperator == 1 && dto.getShowtype() == 0) {
dto.setIsshow(1);
}
}
}
if (isfromMobile == 1)
remarkcolumn = 1;
//如果业务需求需要对节点、部门、分部按照大小排序,那么在这个循环之前对remarkKeys进行排序即可
if(belongGroup){
if(groupOrderType == 2 || groupOrderType == 3){
remarkKeys = remarksort(remarkList_date,groupOrderType);
}
for (Integer remarkKey : remarkKeys) {
String key = remarkKey + "";
List value = remarkListMap.get(key);
String name = "";
if(nodeid == -1){
name = WorkflowBaseBiz.getWorkflowNodeName(remarkKey);
} else if(nodeid == -2){
name = orgShowBiz.getDepartmentShow("workflow", key);
} else if(nodeid == -3){
name = orgShowBiz.getSubcompanyShow("workflow", key);
}
String content = calcRemark(value, workflowid, node_temp, remarkcolumn, languageid, showdescByDTO, selectformat, showDesc, signShowDesc);
Map nodeMark = new HashMap<>();
nodeMark.put("name",name);
nodeMark.put("content",content);
nodeMarkContent.add(nodeMark);
}
} else {
NodeRemark = calcRemark(remarkList, workflowid, node_temp, remarkcolumn, languageid, showdescByDTO, selectformat, showDesc, signShowDesc);
}
}
else if (ismode == 0) {//模版模式
for(Map params : dataArr) {
int logId = param2Integer(params,"logId");
int agenttype = param2Integer(params, "agenttype");
int agentorbyagentid = param2Integer(params, "agentorbyagentid");
int operator = param2Integer(params, "operator");
int operatortype = param2Integer(params, "operatortype");
int requestLogId = param2Integer(params, "requestLogId");
int nodeid_temp = param2Integer(params, "nodeid");
String annexdocids = param2String(params, "annexdocids");
String signdocids = param2String(params, "signdocids");
String signworkflowids = param2String(params, "signworkflowids");
int operatorDept = param2Integer(params, "operatorDept");
String logtype = param2String(params, "logtype");
String remark_db = param2String(params, "remark");
//获取手写签批和语音附件 附件ID号
String appHandWrittenSignID = param2String(params, "HandWrittenSign");
int appSpeechAttahmentID = param2Integer(params, "SpeechAttachment");
String remarkLocation = param2String(params, "remarkLocation");
if (vmobilesource == 0 || !"1".equals(isshowSrc)) { //删除签字意见中的 来源信息
remark_db = wfLinkInfo.removeRemarkSource(remark_db);
}
//只是控制html模板中自动提交批准签字意见来源是否显示
if (vmobilesource == 0) {
remark_db = wfLinkInfo.removeRemarkFromAutoApprove(remark_db);
}
if (operatorDept <= 0) {//只能记录下操作人的,如果有代理的情况,那被代理人的部门,只能是当前的部门了
operatorDept = Util.getIntValue(resourcecominfo.getDepartmentID("" + operator));
}
String remark = "";
String remark_check = "";//用于判断原始签字意见是否为空
String formsignremarkimage = "";
int imageFileId = -1;
if (!logtype.equals("t")) {
if (requestLogId > 0) {
//如果使用表单签章,则 设置表单签章内容
rs1.executeSql(" select imageFileId from Workflow_FormSignRemark where requestLogId=" + requestLogId);
if (rs1.next()) {
imageFileId = Util.getIntValue(rs1.getString("imageFileId"), -1);
}
//模板模式下不使用标签
if (imageFileId > -1) {
remark_check = getSeparator2() +weaver.general.GCONST.getContextPath()+ "/weaver/weaver.file.FileDownload?fileid=" + DocDownloadCheckUtil.checkPermission(imageFileId+"",user) + getSeparator2();
if (viewdescall == 1 || vdcomments == 1) {
remark = getSeparator2() +weaver.general.GCONST.getContextPath()+ "/weaver/weaver.file.FileDownload?fileid=" + DocDownloadCheckUtil.checkPermission(imageFileId+"",user) + getSeparator2();
}
} else {
remark_check = "" + Util.getSeparator();
if (viewdescall == 1 || vdcomments == 1) {
remark = "" + Util.getSeparator();
}
}
} else {
//未使用表单签章,则 获取手写输入签字意见内容
remark_check = param2String(params, "remark");
remark_check = wfLinkInfo.removeRemarkSource(remark_check);
if (viewdescall == 1 || vdcomments == 1)
remark = remark_db;
}
}
remark = checkImage(remark);
remark = checkNetImg(remark);
String reamrk_others = "";
//相关文档
if ((viewdescall == 1 || vsigndoc == 1) && !signdocids.trim().equals("")) {
String tempname = getSignDocs(signdocids, languageid);
if (!"".equals(tempname))
reamrk_others += " " + tempname;
}
//相关流程
if ((viewdescall == 1 || vsignworkflow == 1) && !signworkflowids.trim().equals("")) {
String tempname = getSignFlows(signworkflowids, languageid);
if (!"".equals(tempname))
reamrk_others += " " + tempname;
}
//相关附件
if ((viewdescall == 1 || vsignupload == 1) && !annexdocids.trim().equals("")) {
String tempname = getSignUploads(annexdocids, languageid);
if (!"".equals(tempname))
reamrk_others += " " + tempname;
}
username = "";
departmentname = "";
if (!logtype.equals("t")) {
remark = appendSomeContent(remark, appHandWrittenSignID, appSpeechAttahmentID, ismode, remarkLocation,"");
remark = checkRemark(remark, ismode);
}
//判断是否为空意见
boolean isnull_remark = false;
remark_check = appendSomeContent(remark_check, appHandWrittenSignID, appSpeechAttahmentID, ismode, remarkLocation,"");
remark_check = Util.encodeJS(toExcel(dropScript(remark_check)));
if ("".equals(remark_check))
isnull_remark = true;
//不显示空的意见
if (stnull == 1 && isnull_remark) continue;
//读取配置信息,判断当前是否显示全部签字意见,还是显示最一次提交签字意见。
if (preoperators.indexOf(operator + "_" + nodeid_temp) == -1) {
if (!NodeRemark.trim().equals("")) {
//Remark+=" ";
if (orderby.equals("asc")) {
NodeRemark = " " + NodeRemark;
} else {
NodeRemark += " ";
}
}
String userimg = "";
String agentstr = "";
if (operatortype == 0) {
String signatureImg = SecondAuthBiz.getQYSSignatureImg(logId + "", operator + "", user, logIdMap, qysSignInfoMap);
if (!"".equals(signatureImg)) { //优先显示契约锁数据保护或者认证时选择的章
userimg = signatureImg;
} else {
if (showimg == 1) {//个性化签章
if (viewdescall == 1 || vdoperator == 1) {
userimg = getNameImg(operator, ismode);
}
}
}
if ((viewdescall == 1 || vdoperator == 1))
username = resourcecominfo.getResourcename("" + operator);
if (viewdescall == 1 || vddeptname == 1)
departmentname = orgShowBiz.getDepartmentShow("workflow","" + operatorDept);
//被代理
if (agenttype == 2 && agentorbyagentid > 0) {
String tdepartmentname = orgShowBiz.getDepartmentShow("workflow", resourcecominfo.getDepartmentID("" + agentorbyagentid));
if (viewdescall == 1 || (vddeptname == 1 && vdoperator == 1)) {
if (!"".equals(tdepartmentname)) {
agentstr = "(" + SystemEnv.getHtmlLabelName(26241, languageid) + " " + tdepartmentname + "/" + resourcecominfo.getResourcename("" + agentorbyagentid) + ")";
} else {
agentstr = "(" + SystemEnv.getHtmlLabelName(26241, languageid) + " " + resourcecominfo.getResourcename("" + agentorbyagentid) + SystemEnv.getHtmlLabelName(24214, languageid) + ")";
}
} else {
if (vddeptname == 1 && !"".equals(tdepartmentname))
agentstr = "(" + SystemEnv.getHtmlLabelName(26241, languageid) + " " + tdepartmentname + ")";
if (vdoperator == 1)
agentstr = "(" + SystemEnv.getHtmlLabelName(26241, languageid) + " " + resourcecominfo.getResourcename("" + agentorbyagentid) + ")";
}
}
//}
}
if (operatortype == 1) {
if (viewdescall == 1 || vdoperator == 1)
username = crmcominfo.getCustomerInfoname("" + operator);
}
if (operatortype == 2) {
if (viewdescall == 1 || vdoperator == 1)
username = robotNodeServiceBiz.getRobotNodeSet(nodeid_temp).getOperatorName();
}
if (!"".equals(agentstr))
agentstr = " " + agentstr;
if (viewdescall == 1 || (vddeptname == 1 && vdoperator == 1)) {//操作人、部门都显示
if ("".equals(userimg)) {//没签章
if (!"".equals(departmentname))
username = departmentname + "/" + username + agentstr;
else
username = departmentname + username + agentstr;
} else {
if (!"".equals(userimg))//模版模式下签章
username = departmentname + agentstr;
}
} else {
if (vddeptname == 1) {//只显示部门
if ("".equals(userimg)) {//没签章
username = departmentname + agentstr;
} else {
if (!"".equals(userimg))//模版模式下签章
username = departmentname + agentstr;
}
}
if (vdoperator == 1) {//只显示操作人
if ("".equals(userimg)) {//没签章
username += agentstr;
} else {
if (!"".equals(userimg))//模版模式下签章
username = agentstr;
}
}
}
if (viewdescall == 1 || vddate == 1) if (username.equals(""))
username += param2String(params, "operatedate");
else username += " " + param2String(params, "operatedate");
if (viewdescall == 1 || vdtime == 1) if (username.equals(""))
username += param2String(params, "operatetime");
else username += " " + param2String(params, "operatetime");
if (showtype == 0)
preoperators.add(operator + "_" + nodeid_temp);
if (viewdescall == 1 || vdcomments == 1 || !"".equals(reamrk_others.trim())) {
remark += reamrk_others;
String spt = "";
if (ismode == 0) {
if (!"".equals(userimg))
spt = getSeparator2();
}
if (remark != null && (remark.endsWith("
") || remark.endsWith(""))) {
username = remark + spt + username;
} else {
if (remark.endsWith(" "))
username = remark + spt + username;
else
username = remark + spt + " " + username;
}
} else {
if (!"".equals(userimg))
username = getSeparator2() + username;
}
if (!userimg.equals("")) {
username += Util.getSeparator() + userimg;
}
if(viewdescall == 1 ||vdaction==1){
RequestLogOperateName requestLogOperateName = new RequestLogOperateName();
String operateName = requestLogOperateName.getOperateName(workflowid + "", Requestid + "", nodeid_temp + "", logtype, operator + "", languageid);
//zzw
username+=" "+operateName;
}
if (orderby.equals("asc")) {
NodeRemark = username + NodeRemark;
NodeRemark = " " + NodeRemark;
} else {
NodeRemark += username;
NodeRemark += " ";
}
NodeRemark += getNodeSeparator();
}
}
if (orderby.equals("asc")) {
if (NodeRemark.startsWith(" ")) {
NodeRemark = NodeRemark.substring(" ".length());
}
} else {
String tempEndStr = " " + getNodeSeparator();
if (NodeRemark.endsWith(tempEndStr)) {
NodeRemark = NodeRemark.substring(0, NodeRemark.length() - tempEndStr.length());
}
}
NodeRemark = Util.StringReplace(NodeRemark, "<br>", " ");
NodeRemark = NodeRemark.replaceAll(getSeparator2() + " ", getSeparator2());
NodeRemark = NodeRemark.replaceAll(" " + getSeparator2(), getSeparator2());
NodeRemark = NodeRemark.replaceAll(getSeparator2() + " ", getSeparator2());
NodeRemark = NodeRemark.replaceAll(" " + Util.getSeparator(), getSeparator2());
NodeRemark = NodeRemark.replaceAll(" " + getNodeSeparator() + " ", " ");
}
}
//处理完成后还原,下一个重新判断
this.needHide = false;
return NodeRemark;
}
private String getAllFreeNodeIds(){
RecordSet rs = new RecordSet();
rs.executeQuery("select id from workflow_nodebase where IsFreeNode = 1 and requestid = " + Requestid);
List freeNodeIds = new ArrayList <>();
while (rs.next()) {
freeNodeIds.add(rs.getInt("id"));
}
freeNodeIds.addAll(FreeNodeBiz.getRequestAllFreeNodeIds(Requestid));
String nodeids = "";
if(freeNodeIds.size() > 0) {
nodeids = CollectionUtil.list2String(freeNodeIds,",");
}
if("".equals(nodeids)) nodeids = "-1";
return nodeids;
}
private String param2String(Map params,String key){
return Util.null2String(params.get(key.toLowerCase()));
}
private int param2Integer(Map params,String key){
return Util.getIntValue(Util.null2String(params.get(key.toLowerCase())),0);
}
private Map getIsRemark(int requestid,int nodeid,int operator){
String preisremark = "";
int takisremark= 1;
Map map = new HashMap<>();
RecordSet recordset = new RecordSet();
recordset.executeQuery("select preisremark,takisremark from workflow_currentoperator where userid="+operator+" and nodeid="+nodeid+" and isremark=2 and (preisremark=9 or preisremark=1) and requestid="+requestid+" order by preisremark");
if(recordset.next()){
preisremark = Util.null2String(recordset.getString("preisremark"));
takisremark = Util.getIntValue(recordset.getString("takisremark"));
}
map.put("preisremark",preisremark);
map.put("takisremark",takisremark+"");
return map;
}
/**
*
* @param backfields
* @param fromSql
* @param sqlWhere
* @param ORwhere
* @param orderBy
* @param workflowid
* @param logTypeSet
* @return
*/
private List> getRemarkList(String backfields,String fromSql,String sqlWhere,String ORwhere,String orderBy,int workflowid,int requestid,Set logTypeSet,Set logIdSet,boolean recursive){
RecordSet rs = new RecordSet();
String sql = "select " + backfields + " from " + fromSql + " " + sqlWhere;
// System.out.println(requestid+"--getRemarkList sql--"+sql);
if(layoutNodeid == -1 || layoutNodeid == -2 || layoutNodeid == -3 || layoutNodeid == -9999 || layoutNodeid == RequestConstant.ALL_NODE_SIGN_MARK){//签字意见范围控制
rs.writeLog("节点签字意见设置范围:viewNodeidScope:"+viewNodeidScope+";layoutNodeid:"+layoutNodeid + ";sql:"+sql);
rs.executeQuery("select viewnodeids from workflow_flownode where nodeid = ?",viewNodeidScope);
if(rs.next()){
List viewnodeidsList = Util.TokenizerString(Util.null2String(rs.getString("viewnodeids")),",");
FreeNodeBiz.loadViewLogFreeNodeIds(requestid, viewnodeidsList);
String viewnodeids = "";
for(String nodeid : viewnodeidsList){
viewnodeids += nodeid + ",";
}
if(!"".equals(viewnodeids)){
viewnodeids = viewnodeids.substring(0,viewnodeids.length()-1);
}
sql += ("".equals(viewnodeids) || "-1".equals(viewnodeids)) ? "" : (" and (t1.nodeid in("+viewnodeids+")) ");
rs.writeLog("节点签字意见设置范围:viewnodeids:"+viewnodeids+";sql:"+sql);
}
}
if (!ORwhere.equals(""))
sql += " and (" + ORwhere + ") ";
sql += orderBy;
List> dataArr = new ArrayList<>();
rs.execute(sql);
Map signInputMap = ShowType.getSignInputMap();
RecordSet rs1 = new RecordSet();
boolean isNew = true;
DateTransformer dft = new DateTransformer();
UnifiedConversionInterface uci = new UnifiedConversionInterface();
while (rs.next()) {
Map map = new HashMap<>();
String[] columnNames = rs.getColumnName();
String operatedate = Util.null2String(rs.getString("operatedate"));
String operatetime = Util.null2String(rs.getString("operatetime"));
if(uci.getTimeZoneStatus()) {
//开启多时区
String[] tempoperatetime = dft.getLocaleDateAndTime(operatedate,operatetime);
operatedate = tempoperatetime[0];
operatetime = tempoperatetime[1];
}
for(String columnName : columnNames){
if("operatedate".equals(columnName.toLowerCase())){
map.put(columnName.toLowerCase(),operatedate);
}else if("operatetime".equals(columnName.toLowerCase())){
map.put(columnName.toLowerCase(),operatetime);
}else{
map.put(columnName.toLowerCase(),rs.getString(columnName));
}
}
String logId = Util.null2String(rs.getString("logId"));
String uuid = Util.null2String(rs.getString("uuid"));
String logtype = Util.null2String(rs.getString("logtype"));
String belongLogtype = signInputMap.get(logtype);
boolean flag = logTypeSet.size() > 0 && (!logTypeSet.contains(logtype) || (logTypeSet.contains(logtype) && recursive && signInputMap.values().contains(logtype)));
if(!flag){
if(logIdSet != null && logIdSet.size() > 0){
if(logIdSet.contains(logId)){
flag = false;
} else {
flag = true;
}
}
}
if("9".equals(logtype) && flag){
String s = "select distinct a.uuid,b.userid,b.operatedate,b.operatetime from workflow_Forward a,workflow_currentoperator b where a.BeForwardid = b.id and b.workflowid = "+workflowid+" and b.requestid = "+requestid+" and b.operatedate = '"+operatedate+"' and b.operatetime = '"+operatetime+"'";
rs1.executeQuery(s);
if(!rs1.next()){
flag = false;
}
}
if(!flag){
dataArr.add(map);
}
if(belongLogtype != null && logTypeSet.contains(belongLogtype) && !"".equals(uuid) && recursive){
String newbackfields = "t1.*";
String newfromSql = fromSql;
String newsqlWhere = "";
if(isNew){
if("9".equals(belongLogtype)){
newfromSql += " inner join (select distinct a.uuid,b.userid,b.operatedate,b.operatetime from workflow_Forward a,workflow_currentoperator b where a.BeForwardid = b.id and b.workflowid = "+workflowid+" and b.requestid = "+requestid+" and b.receivedate = '"+operatedate+"' and b.receivetime = '"+operatetime+"') tt3 on tt3.userid = t1.operator and t1.operatedate = tt3.operatedate and t1.operatetime = tt3.operatetime ";
} else if("y".equals(belongLogtype)){
newfromSql += " inner join workflow_chuanyue tt3 on tt3.userid = t1.operator " +
" inner join workflow_currentoperator tt4 on tt3.userid = tt4.userid and t1.operatedate = tt4.operatedate and t1.operatetime = tt4.operatetime " +
" and t1.requestid = tt4.requestid and t1.nodeid = tt4.nodeid and tt4.receivedate = '"+operatedate+"' and tt4.receivetime = '"+operatetime+"'";
}
} else {
if("9".equals(belongLogtype)){
newfromSql += " inner join (select distinct a.uuid,b.userid from workflow_Forward a,workflow_currentoperator b where a.BeForwardid = b.id and b.workflowid = "+workflowid+" and b.requestid = "+requestid+") tt3 on tt3.userid = t1.operator ";
} else if("y".equals(belongLogtype)){
newfromSql += " inner join workflow_chuanyue tt3 on tt3.userid = t1.operator";
}
}
newsqlWhere += sqlWhere;
newsqlWhere += " and tt3.uuid = '" + uuid + "'";
newsqlWhere += " and (t1.operatedate >= '" + operatedate + "' or (t1.operatedate = '" + operatedate + "' and t1.operatetime >= '" + operatetime + "'))";
String newORwhere = " 1=1 and logtype = '"+belongLogtype+"' ";
dataArr.addAll(getRemarkList(newbackfields,newfromSql,newsqlWhere,newORwhere,orderBy,workflowid,requestid,logTypeSet,logIdSet,false));
}
}
return dataArr;
}
/**
* 生成模版内签字意见
*
* @param list
* @param workflowid
* @param nodeid
* @param remarkcolumn 显示列数
* @param language
* @return
*/
private String calcRemark(List list, int workflowid, int nodeid, int remarkcolumn, int language, List displayList, int selectformat, String showdesc, String signShowDesc) {
// 保存showDesc 以便当使用个性签章时 showDesc值变为signShowDesc ,但循环判断时需要先把showDesc还原
String showDescBak = showdesc;
if("".equals(lastTableContent) && (list == null || list.size() == 0))
return ""; //节点无意见的不返回table布局,避免占空间
StringBuffer result = new StringBuffer();
isTableShow = false;
String contentBefore = "";
String contentAfter = "";
//存在表头表尾标识,按照表格显示
if(selectformat == 1 && showdesc != null && showdesc.indexOf("$viewdesc_table_start$") > -1 && showdesc.indexOf("$viewdesc_table_end$") > -1) {
try {
String json = JSON.parseObject(showdesc).getString("json");
List nodeFormDescList = JSON.parseArray(json, NodeFormDesc.class);
if (nodeFormDescList.size() > 0) {
NodeFormDesc nodeFormDesc = nodeFormDescList.get(0);
contentBefore = Util.null2String(nodeFormDesc.getTableHtml(0, user));
contentAfter = nodeFormDesc.getTableHtml(2, user);
}
} catch (Exception e) {
e.printStackTrace();
}
if(!"".equals(contentBefore.trim()) && contentBefore.toLowerCase().indexOf(" -1) {
isTableShow = true;
}
}
//签章意见是否设置为表格显示
boolean isSignTableShow = false;
if(selectformat == 1 && signShowDesc != null && signShowDesc.indexOf("$viewdesc_table_start$") > -1 && signShowDesc.indexOf("$viewdesc_table_end$") > -1) {
String signShowContentBefore = "";
try {
String json = JSON.parseObject(signShowDesc).getString("json");
List nodeFormDescList = JSON.parseArray(json, NodeFormDesc.class);
if (nodeFormDescList.size() > 0) {
NodeFormDesc nodeFormDesc = nodeFormDescList.get(0);
signShowContentBefore = nodeFormDesc.getTableHtml(0, user);
}
} catch (Exception e) {
e.printStackTrace();
}
if(!"".equals(signShowContentBefore.trim())) {
isSignTableShow = true;
}
}
//表格形式显示, 不分栏
if(isTableShow) {
remarkcolumn = 1;
}
List> columnList = new ArrayList>(remarkcolumn);//用于存储每一列的签字意见
for (int i = 0; i < remarkcolumn; i++) {
List column = new ArrayList();
columnList.add(column);
}
for (int i = 0; i < list.size(); i++) {
if(showdesc!=null && showdesc.equals(signShowDesc)){
showdesc = showDescBak; // 恢复原本的默认格式
}
//每一条意见
RemarkInfoDTO dto = list.get(i);
//2023.02.15查询上级部门ID
String deptSql = "select supdepid from hrmdepartment where id = '"+dto.getDeptid()+"'";
RecordSet rsd = new RecordSet();
rsd.executeQuery(deptSql);
String supdepId="";
if(rsd.next()){
supdepId = rsd.getString("supdepid");
}
if ("0".equals(supdepId)){
supdepId=String.valueOf(dto.getDeptid());
}
log.info("【查询部门supdepId========】:"+supdepId);
String temp_remark = "";
if (selectformat != 1) {
//安装默认格式读取
temp_remark = getRemarkBySetting(dto, displayList, language);
} else {
//有签章,且不是表格显示,取签章设置
if (!"".equals(dto.getNameImg()) && !isTableShow && !isSignTableShow) {
showdesc = signShowDesc;
}
temp_remark = ShowType.doReplaceDesc(dto, showdesc, user, i+1);
}
//qc1679821 将部门id加到html中 用于后面处理分类
temp_remark += ""+supdepId+" ";
// temp_remark += ""+dto.getDeptid()+" ";
int columlIndex = i % remarkcolumn;
columnList.get(columlIndex).add(temp_remark);//把数据加入指定列
}
int remarkSize = list.size();
if (remarkSize == 0)
remarkSize = 1;
int width_percent = 0;
if (remarkSize < remarkcolumn) {//如果意见数量小于列数,则按照实际意见数平分列宽
width_percent = 100 / remarkSize;
remarkcolumn = remarkSize;
} else
width_percent = 100 / remarkcolumn;
//form_sign_cellbr 2: 签字意见不换行显示
boolean needBr = !"2".equals(new WorkflowConfigComInfo().getValue("form_sign_cellbr"));
//按照表格形式显示
if (isTableShow) {
result.append("");
} else {
//普通模式显示
result.append("");
}
return result.toString();
}
/**
* 生成每一列的签字意见
*
* @param list
* @return
*/
private String getColumnString(List list) {
return this.getColumnString(list, true);
}
/**
* 生成每一列的签字意见
*
* @param list
* @return
*/
private String getColumnString(List list, boolean needBr) {
String result = "";
for (int i = 0; i < list.size(); i++) {
String s = list.get(i);
if (i > 0 && needBr)
result += hr;
result += s;
}
return result;
}
/**
* 根据配置格式生成签字意见
*
* @param remarkInfoDTO
* @param displayList
* @return
*/
public String getRemarkBySetting(RemarkInfoDTO remarkInfoDTO, List displayList, int language) {
String result = "";
int enter = 0;
int i = 0;
int lastShowtype = -1;
int isShowTemp = 0;
//是否显示部门
boolean isshowDepartment = false;
boolean isshowOperator = false;
int departMentIndex = -1;
int operatorIndex = -1;
int index = 0;
for (RemarkDisplayDTO displayDTO : displayList) {
if (displayDTO.getShowtype() == 6) {//部门
if (displayDTO.getIsshow() == 1) {
isshowDepartment = true;
departMentIndex = index;
}
} else if (displayDTO.getShowtype() == 7) {
if (displayDTO.getIsshow() == 1) {
isshowOperator = true;
operatorIndex = index;
}
}
//有签章
if (!"".equals(remarkInfoDTO.getNameImg())) {
if (displayDTO.getShowtype() == 0) {
isShowTemp = displayDTO.getIsshow();
displayDTO.setIsshow(0);
}
//操作人应该在操作部门前面
if (displayDTO.getShowtype() == 7 && isshowDepartment) {
RemarkDisplayDTO departmentDTO = displayList.get(departMentIndex);
if (departmentDTO != null && departmentDTO.getShowtype() == 6 && departmentDTO.getIsshow() == 1) {
RemarkDisplayDTO temp = departmentDTO;
displayList.set(departMentIndex, displayDTO);
displayList.set(index, temp);
}
}
}else{ // 非签章
// 部门在操作人前面
if(displayDTO.getShowtype() == 6 && isshowDepartment && operatorIndex > -1){
RemarkDisplayDTO operatorDTO = displayList.get(operatorIndex);
if(operatorDTO!=null && operatorDTO.getShowtype() == 7 && operatorDTO.getIsshow() == 1){
RemarkDisplayDTO temp = operatorDTO;
displayList.set(index,temp);
displayList.set(operatorIndex,displayDTO);
}
}
}
index++;
}
//拼装签字意见信息
for (RemarkDisplayDTO displayDTO : displayList) {
//显示项内容
int showtype = displayDTO.getShowtype();
if (displayDTO.getIsshow() != 1)
continue;
String showText = "";
if (showtype == 0) {//文本内容
if (!isshowDepartment || !isshowOperator) {
continue;
}
showText = displayDTO.getTextvalue();
if (showText == null || "".equals(showText))
showText = " ";
showText = showText.replaceAll(" ", " ");
} else if (showtype == 1) {//处理意见
showText = remarkInfoDTO.getRemark();
} else if (showtype == 2) {//意见来源
showText = remarkInfoDTO.getRemarkSrc();
} else if (showtype == 3) {//相关文档
showText = remarkInfoDTO.getSignDocs();
} else if (showtype == 4) {//相关流程
showText = remarkInfoDTO.getSignFlows();
} else if (showtype == 5) {//相关附件
showText = remarkInfoDTO.getSignUploads();
} else if (showtype == 6) {//操作部门
showText = remarkInfoDTO.getDepartment();
} else if (showtype == 7) {//操作人
//有签章需要回车
if (!"".equals(remarkInfoDTO.getNameImg())) {
displayDTO.setEnter(1);
}else{
displayDTO.setEnter(0);
}
showText = remarkInfoDTO.getUsername();
String agentUser = Util.null2String(remarkInfoDTO.getAgentUser());
if (!"".equals(agentUser)) { //拼装代理信息
showText += "(" + SystemEnv.getHtmlLabelName(26241, language) + " ";
String agentDepartment = Util.null2String(remarkInfoDTO.getAgentDepartment());
if (isshowDepartment && !"".equals(agentDepartment)) {
showText += agentDepartment + "/";
}
showText += agentUser + ")";
}
} else if (showtype == 8) {//操作日期
showText = remarkInfoDTO.getOperatedate();
} else if (showtype == 9) {//操作时间
showText = remarkInfoDTO.getOperatetime();
} else if (showtype == 10) {//操作
showText = remarkInfoDTO.getOperateName();
} else if (showtype == 11) {//位置
showText = remarkInfoDTO.getPosition();
} else if(showtype == 12) {//分部
showText = remarkInfoDTO.getSubcompany();
} else if (showtype == 13) {//岗位
showText = remarkInfoDTO.getJobTitle();
} else if (showtype == 16) {
showText = remarkInfoDTO.getOperatorNodeName();
}
if (showText == null || "".equals(showText))
continue;
if (i == 0 || enter == 1) {
if (displayDTO.getAlign() == 0)
//text-align:left;
result += "";
else
//text-align:right;
result += "
";
}
if (showtype == 0) {
if (i != 0 && enter != 1 && lastShowtype != 0)
result = result.substring(0, result.length() - 1); //如果是自定义文本,则去掉默认增加的空格
result += showText;
} else
result += showText + " ";
enter = displayDTO.getEnter();
if (enter == 1)
result += "
";
i++;
lastShowtype = showtype;
}
if (i > 0)
result += "
";
// 还原有签章格式 showtype==0 isShow改为原本的isshow的值
for (RemarkDisplayDTO displayDTO : displayList){
if(displayDTO.getShowtype() == 0 && displayDTO.getIsshow() == 0){
if(0 !=isShowTemp ){
displayDTO.setIsshow(isShowTemp);
}
}
}
return result;
}
public static void main(String[] args) {
String abc = " ";
String s = abc.replaceAll(" ", " ");
System.out.println(s);
}
/**
* 给一个list取反
*
* @param in
* @return
*/
public List reverseList(List in) {
List out = new ArrayList();
int size = in.size();
if (size > 0) {
for (int i = size - 1; i >= 0; i--) {
out.add(in.get(i));
}
}
return out;
}
/**
* 获取个性签章图片路径
*
* @param userid
* @param ismode
* @return
*/
public String getNameImg(int userid, int ismode) {
String filepath = "";
RecordSet recordSet = new RecordSet();
recordSet.executeSql("select * from DocSignature where hrmresid=" + userid + " and sealType=1 order by case when isdefault is null then ' ' else isdefault end desc,markid ");
if (recordSet.next()) {
filepath = Util.null2String(recordSet.getString(1));
}
if (!filepath.equals("")) {
OdocFileUtil odocfileutil = new OdocFileUtil();
String imgheight = recordSet.getPropValue("WFSignatureImg", "imgheight");
if (ismode == 2) {
if (StringUtils.isEmpty(imgheight)){
filepath = " ";
}else {
String useridrandom = odocfileutil.changeParamToBase64Str(userid+"");
filepath = " ";
}
} else {
String useridrandom = odocfileutil.changeParamToBase64Str(userid+"");
filepath = weaver.general.GCONST.getContextPath()+"/weaver/weaver.file.ImgFileDownload?userid=" + useridrandom + "&sealType=1" + getSeparator2();
}
}
return filepath;
}
/**
* 处理remark
*
* @param remark
* @return
*/
private String checkRemark(String remark, int ismode) {
if (ismode == 2) {
try {
//Html模式下,要考虑去掉最后一个
if (remark.indexOf("initFlashVideo") > -1 && remark.indexOf("") > -1) {
int index_1 = remark.lastIndexOf("");
remark = remark.substring(0, index_1) + remark.substring(index_1 + 4);
}
} catch (Exception e) {
}
}
remark = remark.replaceAll("\n", "");
remark = remark.replaceAll(" ", "");
remark = remark.replaceAll("换行的,加上
remark = remark.replaceAll("", "");
remark = remark.replaceAll("", "");
remark = remark.replaceAll("", "
");
remark = remark.replaceAll("
", " ");
remark = remark.replaceAll("\r\n", "");
remark = remark.replaceAll("name=\".*?\"", "");
remark = remark.replaceAll("id=\".*?\"", "");
remark = remark.replaceAll(" ", "");
remark = remark.replaceAll("", "");
return remark;
}
/**
* 获取相关文档
*
* @param docids
* @param languageid
* @return
*/
private String getSignDocs(String docids, int languageid) {
String tempname = "";
ArrayList templist = Util.TokenizerString(docids, ",");
for (int i = 0; i < templist.size(); i++) {
String _docid = (String) templist.get(i);
if (Util.getIntValue(_docid) <= 0) {
continue;
}
String tempdocname = docinf.getDocname(_docid);
if (0 == Isprint) {
tempdocname = "" + tempdocname + " ";
} else {
tempdocname = tempdocname;
}
if (tempdocname != null && !tempdocname.trim().equals("")) {
if (tempname.equals("")) {
tempname = tempdocname;
} else {
tempname += "," + tempdocname;
}
}
}
tempname = tempname.trim();
if (!"".equals(tempname))
tempname = SystemEnv.getHtmlLabelName(857, languageid) + ":" + tempname;
return tempname;
}
/**
* 获取相关流程
*
* @param signworkflowids
* @param languageid
* @return
*/
private String getSignFlows(String signworkflowids, int languageid) {
ArrayList templist = Util.TokenizerString(signworkflowids, ",");
String tempname = "";
int tempnum = request == null ? 0 : Util.getIntValue(String.valueOf(request.getSession().getAttribute("slinkwfnum")));
for (int i = 0; i < templist.size(); i++) {
String temprequestname = wfrequestcominfo.getRequestName((String) templist.get(i));
//处理相关流程
tempnum++;
if (request != null)
request.getSession().setAttribute("resrequestid" + tempnum, "" + templist.get(i));
String temprequestnameL = "";
if (0 == Isprint)
temprequestnameL = "" + temprequestname + " ";
else
temprequestnameL = temprequestname;
if (temprequestname != null && !temprequestname.trim().equals("")) {
if (tempname.equals("")) {
tempname = temprequestnameL;
} else {
tempname += "," + temprequestnameL;
}
}
}
if (request != null) {
request.getSession().setAttribute("slinkwfnum", "" + tempnum);
request.getSession().setAttribute("haslinkworkflow", "1");
}
tempname = tempname.trim();
if (!"".equals(tempname))
tempname = SystemEnv.getHtmlLabelName(1044, languageid) + ":" + tempname;
return tempname;
}
/**
* 获取附件信息
*
* @param annexdocids
* @param languageid
* @return
*/
private String getSignUploads(String annexdocids, int languageid) {
ArrayList templist = Util.TokenizerString(annexdocids, ",");
String _tempdocids = ""; //记录已经添加的id
String tempname = "";
String _docid = "";
for (int i = 0; i < templist.size(); i++) {
_docid = (String) templist.get(i);
//过滤重复docid
if (("," + _tempdocids + ",").indexOf("," + _docid + ",") != -1) {
continue;
}
String tempdocname = docinf.getDocname((String) templist.get(i));
if (0 == Isprint) {
tempdocname = "" + tempdocname + " ";
} else {
tempdocname = tempdocname;
}
if (tempdocname != null && !tempdocname.trim().equals("")) {
if (tempname.equals("")) {
tempname = tempdocname;
} else {
tempname += "," + tempdocname;
}
}
_tempdocids += "," + _docid;
}
tempname = tempname.trim();
if (!"".equals(tempname))
tempname = SystemEnv.getHtmlLabelName(22194, languageid) + ":" + tempname;
return tempname;
}
/**
* 查询签字意见显示设置列表
*
* @param workflowid
* @param nodeid
* @return
*/
public List getDisplayList(int workflowid, int nodeid, int language) {
RecordSet rs = new RecordSet();
List result = new ArrayList();
rs.execute("select isfreenode,startnodeid from workflow_nodebase where id = " + nodeid);
int isprint = 0;
if (rs.next()) {
int isfreenode = rs.getInt(1);
if (isfreenode == 1) {
nodeid = rs.getInt(2);
}
String sql = "select * from workflow_remarkdisplay where workflowid = " + workflowid + " and nodeid = " + nodeid + " order by listorder asc";
RecordSetExtend recordSetExtend = new RecordSetExtend();
result = recordSetExtend.queryList(sql, RemarkDisplayDTO.class);
if (result.size() > 0) {
for (RemarkDisplayDTO dto : result) {
dto.setShowtypename(getShowtypeName(dto.getShowtype(), language));
}
} else {//如果之前没有设置,则返回初始设置
/* *****默认显示格式****
签字意见
意见来源
位置
相关文档
相关流程
相关附件
部门/姓名 日期 时间*/
for (int i = 1; i <= 10; i++) {
RemarkDisplayDTO remarkDisplayDTO = new RemarkDisplayDTO();
remarkDisplayDTO.setShowtype(i);
remarkDisplayDTO.setShowtypename(getShowtypeName(i, language));
remarkDisplayDTO.setAlign(0);//左对齐
int enter = 1;
if (i >= 6) //部门,人员,日期,时间 后不需要换行
enter = 0;
remarkDisplayDTO.setEnter(enter);
int isshow = 1;
if (i == 10)
isshow = 0;//操作默认不显示
remarkDisplayDTO.setIsshow(isshow);
result.add(remarkDisplayDTO);
if (i == 2) {//意见来源后面增加个 位置
RemarkDisplayDTO remarkDisplayDTO2 = new RemarkDisplayDTO();
remarkDisplayDTO2.setShowtype(11);
remarkDisplayDTO2.setAlign(0);//左对齐
remarkDisplayDTO2.setEnter(1);
remarkDisplayDTO2.setIsshow(1);
remarkDisplayDTO2.setShowtypename(getShowtypeName(11, language));
result.add(remarkDisplayDTO2);
}
if (i == 6) {//部门后面默认增加字符 /
RemarkDisplayDTO remarkDisplayDTO2 = new RemarkDisplayDTO();
remarkDisplayDTO2.setShowtype(0);
remarkDisplayDTO2.setAlign(0);//左对齐
remarkDisplayDTO2.setEnter(0);
remarkDisplayDTO2.setIsshow(1);
remarkDisplayDTO2.setTextvalue("/");
result.add(remarkDisplayDTO2);
}
}
}
}
return result;
}
/**
* 获取显示类型名称(处理意见-1 ,意见来源-2, 相关文档-3, 相关流程-4, 相关附件-5 ,操作部门-6 ,操作人-7 ,操作日期-8 ,操作时间-9, 操作-10 ,11-位置,文本-0)
*
* @param showtype
* @param language
* @return
*/
public String getShowtypeName(int showtype, int language) {
String result = "";
if (showtype == 1)
result = SystemEnv.getHtmlLabelName(21662, language);
else if (showtype == 2)
result = SystemEnv.getHtmlLabelName(129021, language);
else if (showtype == 3)
result = SystemEnv.getHtmlLabelName(857, language);
else if (showtype == 4)
result = SystemEnv.getHtmlLabelName(1044, language);
else if (showtype == 5)
result = SystemEnv.getHtmlLabelName(22194, language);
else if (showtype == 6)
result = SystemEnv.getHtmlLabelName(33826, language);
else if (showtype == 7)
result = SystemEnv.getHtmlLabelName(17482, language);
else if (showtype == 8)
result = SystemEnv.getHtmlLabelName(21663, language);
else if (showtype == 9)
result = SystemEnv.getHtmlLabelName(15502, language);
else if (showtype == 10)
result = SystemEnv.getHtmlLabelName(129022, language);
else if (showtype == 11)
result = SystemEnv.getHtmlLabelName(22981, language);
return result;
}
/**
* @param appHandWrittenSignID
* @param appSpeechAttahmentID
* @param remark
* @param mode 2表示HTML模式,0表示模式。
* @return
*/
private String appendSomeContent(String remark, int appHandWrittenSignID, int appSpeechAttahmentID, int mode, String remarkLocation) {
return appendSomeContent(remark,String.valueOf(appHandWrittenSignID),appSpeechAttahmentID,mode, remarkLocation,"");
}
private String appendSomeContent(String remark, String appHandWrittenSignID, int appSpeechAttahmentID, int mode, String remarkLocation,String speechAttachmente9) {
//处理手机版中所添加的来源的后缀。
String mobileSuffix = WorkflowSpeechAppend.getMobileSuffix(remark);
if (mobileSuffix != null) {
remark = remark.substring(0, remark.lastIndexOf(mobileSuffix));
}
if (mobileSuffix == null) {
String autoapprovsuffix = "";
if (remark.indexOf(autoapprovsuffix) > 0) {
mobileSuffix = remark.substring(remark.indexOf(autoapprovsuffix));
remark = remark.substring(0, remark.indexOf(autoapprovsuffix));
}
}
//获取签字意见中的电子签章部分。
String eletriSignature = WorkflowSpeechAppend.getElectrSignatrue(remark);
if (eletriSignature != null) {
remark = remark.substring(0, remark.lastIndexOf(eletriSignature));
}
if (mode == 2) {
//HTML模式下,追加手写签批、语音附件内容和电子签章图片
if(appHandWrittenSignID!=null && !"".equals(appHandWrittenSignID)) {
String[] appHandWrittenSignIds = appHandWrittenSignID.split(",");
for(int i = 0;i < appHandWrittenSignIds.length;i++) {
int appHandWrittenSignId = Util.getIntValue(appHandWrittenSignIds[i]);
if (appHandWrittenSignId > 0) {
remark += " ";
}
}
}
if(appSpeechAttahmentID > 0) {
remark += "";
}
if(!"".equals(speechAttachmente9)) {
String[] speechIds = Util.splitString(speechAttachmente9,",");
for(String speechid : speechIds) {
int _speechid = Util.getIntValue(speechid);
if (_speechid > 0) {
DocAttachment attenchmentDoc = WorkflowSpeechAppend.getAttachment(_speechid);
String fileType = attenchmentDoc.getFiletype();
if (fileType.indexOf("/") >= 0) {
fileType = fileType.substring(fileType.indexOf("/") + 1);
String audioSrc = "data:audio/" + fileType + ";base64," + WorkflowSpeechAppend.getAppend(_speechid);
remark += " ";
}
}
}
}
if (eletriSignature != null) {
remark += eletriSignature;
}
} else if (mode == 0) {
//模板模式下,只显示手写签批 电子签单,不显示语音附件
if(appHandWrittenSignID!=null && !"".equals(appHandWrittenSignID)) {
String[] appHandWrittenSignIds = appHandWrittenSignID.split(",");
for (int i = 0; i < appHandWrittenSignIds.length; i++) {
int appHandWrittenSignId = Util.getIntValue(appHandWrittenSignIds[i]);
if (appHandWrittenSignId > 0) {
remark += getSeparator2() + weaver.general.GCONST.getContextPath()+"/weaver/weaver.file.FileDownload?fileid=" + DocDownloadCheckUtil.checkPermission(appHandWrittenSignId+"",user) + getSeparator2();
}
}
}
//处理电子签章
if (eletriSignature != null) {
Document docObj = Jsoup.parse(eletriSignature, weaver.general.GCONST.XML_UTF8);
Elements elementObjs = docObj.getElementsByTag("img");
if (elementObjs.size() > 0) {
String imgURL = elementObjs.get(0).attr("src");
remark += getSeparator2() + imgURL;
}
}
}
//追加来源信息。
if (mobileSuffix != null) {
if(appHandWrittenSignID!=null && !"".equals(appHandWrittenSignID)) {
String[] appHandWrittenSignIds = appHandWrittenSignID.split(",");
for (int i = 0; i < appHandWrittenSignIds.length; i++) {
int appHandWrittenSignId = Util.getIntValue(appHandWrittenSignIds[i]);
if (appHandWrittenSignId > 0 && mode == 0)
remark += mobileSuffix.replaceAll(" ", "");
else
remark += " " + mobileSuffix.replaceAll(" ", "");
}
}
}
return remark;
}
/**
* 解析签字意见中的图片,图片前后用分隔符分隔
*
* @param remarkContent
* @return
*/
private String checkImage(String remarkContent) {
String result = "";
BaseBean baseBean = new BaseBean();
Matcher slashMatcher = Pattern.compile(" ").matcher(remarkContent);
String separator = (char) 3 + "";
int start = 0;
int end = 0;
while (slashMatcher.find()) {
start = slashMatcher.start();
if (start > 0)
result += separator + remarkContent.substring(end, start);
boolean flag = true;
while (flag) {
slashMatcher2.find();
end = slashMatcher2.end();
if (end > start)
flag = false;
}
if (end > 0)
result += separator + remarkContent.substring(start, end);
}
result += separator + remarkContent.substring(end);
if ("".equals(result))
result = remarkContent;
else
result = result.substring(1);
return result;
}
/**
* 将img中地址http开头的地址改成 /weaver/weaver.file.FileDownload?fileid=&type=netimag&urlstr=。。。
*
* @param remarkContent
* @return
*/
private String checkNetImg(String remarkContent) {
String result = "";
Matcher slashMatcher = Pattern.compile(" ").matcher(remarkContent);
String separator = (char) 3 + "";
int start = 0;
int end = 0;
while (slashMatcher.find()) {
start = slashMatcher.start();
if (start > 0)
result += remarkContent.substring(end, start);
boolean flag = true;
while (flag) {
slashMatcher2.find();
end = slashMatcher2.end();
if (end > start)
flag = false;
}
String img = remarkContent.substring(start, end);
String temp_img = "";
if (img.indexOf("src=\"http://") > -1) {
int ss = img.indexOf("src=\"http://") + 5;
int ee = img.lastIndexOf("\"");
String imgurl = img.substring(ss, ee);
temp_img += img.substring(0, ss);
int indexOf = imgurl.indexOf("/weaver/weaver.file.FileDownload");
if (indexOf >= 0)
temp_img += imgurl.substring(indexOf);
else
temp_img += weaver.general.GCONST.getContextPath()+"/weaver/weaver.file.FileDownload?fileid=&type=netimag&urlstr=" + URLEncoder.encode(imgurl);
temp_img += img.substring(ee);
} else
temp_img = img;
if (end > 0)
result += temp_img;
}
result += remarkContent.substring(end);
return result;
}
/**
* 一个节点可能有多个人提交的签字意见,用该特别字符来分割。
*
* @return
*/
public static char getNodeSeparator() {
return 3;
}
public static String getSeparator2() {
String result = (char) 1 + "";
return result;
}
/**
* 取得下拉选择框的信息
*
* @param fieldname 字段名称
* @param isbill 是否单据
*/
public void getSelectItem(String fieldname, String isbill) {
RecordSet rs = new RecordSet();
String item = "";
String itemvalue = "";
String isdefault = "n";
String cancel = "";
int fieldid = 0;
int indx = fieldname.indexOf("_");
if (indx > 0) {
fieldname = fieldname.substring(0, indx);
}
fieldid = Util.getIntValue(Util.StringReplace(fieldname, "field", ""), 0);
SelectDefaults = new ArrayList();
SelectItems = new ArrayList();
SelectItemValues = new ArrayList();
SelectCancelValues = new ArrayList();
rs.executeSql("select selectname, selectvalue,isdefault,cancel from workflow_SelectItem where fieldid=" + fieldid + " and isbill=" + isbill + " ORDER BY listorder");
while (rs.next()) {
item = Util.toHtmlMode(rs.getString("selectname"));
cancel = Util.null2String(rs.getString("cancel"));
itemvalue = Util.null2String(rs.getString("selectvalue"));
isdefault = Util.null2String(rs.getString("isdefault"));
SelectItems.add(item);
SelectCancelValues.add(cancel);
SelectItemValues.add(itemvalue);
SelectDefaults.add(isdefault);
}
}
/**
* 取得BROWSER字段显示类型
*
* @param fieldvalue 字段
* @param fieldtype 字段类型
* @return
*/
public String getFieldName(String fieldvalue, int fieldtype) {
return getFieldName(fieldvalue, fieldtype, "");
}
/**
* 取得BROWSER字段显示类型
*
* @param fieldvalue 字段
* @param fieldtype 字段类型
* @param fielddbtype 数据类型
* @return
*/
public String getFieldName(String fieldvalue, int fieldtype, String fielddbtype){
return this.getFieldName(fieldvalue, fieldtype, fielddbtype, new HashMap<>());
}
public String getFieldName(String fieldvalue, int fieldtype, String fielddbtype, Map otherparams) {
RecordSet rs = new RecordSet();
String fieldname = "";
if (fieldtype != 2 && fieldtype != 290 && fieldtype != 19 && fieldtype != 402 && fieldtype != 403 && fieldvalue != null && !fieldvalue.trim().equals("") && fieldtype != 226) {
fieldvalue = fieldvalue.trim();
if (fieldvalue.substring(fieldvalue.length() - 1).equals(","))
fieldvalue = fieldvalue.substring(0, fieldvalue.length() - 1);
ArrayList tempshowidlist = Util.TokenizerString(fieldvalue, ",");
if (fieldtype == 8 || fieldtype == 135) {
//项目,多项目
for (int k = 0; k < tempshowidlist.size(); k++) {
fieldname += Util.StringReplace(prjcominfo.getProjectInfoname((String) tempshowidlist.get(k)), ",", ",") + ",";
}
} else if (fieldtype == 1 || fieldtype == 17 || fieldtype == 160 || fieldtype == 165 || fieldtype == 166) {
//人员,多人员
for (int k = 0; k < tempshowidlist.size(); k++) {
fieldname += resourcecominfo.getLastname((String) tempshowidlist.get(k)) + ",";
}
} else if (fieldtype == 7 || fieldtype == 18) {
//客户,多客户
for (int k = 0; k < tempshowidlist.size(); k++) {
fieldname += Util.StringReplace(crmcominfo.getCustomerInfoname((String) tempshowidlist.get(k)), ",", ",") + ",";
}
} else if (fieldtype == 4 || fieldtype == 57 || fieldtype == 167 || fieldtype == 168) {
//部门,多部门
for (int k = 0; k < tempshowidlist.size(); k++) {
String showdeptname = "";
String showdeptid = (String) tempshowidlist.get(k);
if (!"".equals(showdeptid)) {
showdeptname = orgShowBiz.getDepartmentShow("workflow", showdeptid);
}
fieldname += Util.StringReplace(showdeptname, ",", ",") + ",";
}
} else if (fieldtype == 164 || fieldtype == 194 || fieldtype == 169 || fieldtype == 170) {
//分部,多分部
for (int k = 0; k < tempshowidlist.size(); k++) {
String showsubcompname = "";
String showsubcompid = (String) tempshowidlist.get(k);
if (!"".equals(showsubcompid)) {
showsubcompname = orgShowBiz.getSubcompanyShow("workflow", showsubcompid);
}
fieldname += Util.StringReplace(showsubcompname, ",", ",") + ",";
}
} else if (fieldtype == 9 || fieldtype == 37) {
//文档,多文档
for (int k = 0; k < tempshowidlist.size(); k++) {
fieldname += Util.StringReplace(docominfo.getDocname((String) tempshowidlist.get(k)), ",", ",") + ",";
}
} else if (fieldtype == 23) {
//资产
for (int k = 0; k < tempshowidlist.size(); k++) {
fieldname += Util.StringReplace(capitalcominfo.getCapitalname((String) tempshowidlist.get(k)), ",", ",") + ",";
}
} else if (fieldtype == 16 || fieldtype == 152 || fieldtype == 171) {
//相关请求
for (int k = 0; k < tempshowidlist.size(); k++) {
fieldname += Util.StringReplace(wfrequestcominfo.getRequestName((String) tempshowidlist.get(k)), ",", ",") + ",";
}
} else if (fieldtype == 161 || fieldtype == 162) {
boolean hasRowKey = otherparams.containsKey("detailRecordId");
int detailRecordId = hasRowKey ? Util.getIntValue(otherparams.get("detailRecordId")+"") : -1;
int rowIndex = otherparams.containsKey("rowIndex") ? Util.getIntValue(otherparams.get("rowIndex")+"") : -1;
int fieldid = Util.getIntValue(otherparams.get("fieldid")+"");
// String cacheKey = hasRowKey && fieldid>0 ? this.Requestid + "_field" + fieldid + "_" + detailRecordId : "";
// BrowserFieldValueComInfo valueComInfo = new BrowserFieldValueComInfo();
// String fieldValueCache = "".equals(cacheKey) ? "" : Util.null2String(valueComInfo.getFieldValue(cacheKey));
// String fieldValueShowNameCache = "".equals(cacheKey) ? "" : valueComInfo.getFieldValueShowName(cacheKey);
// List fieldvalspanarr = Util.splitString2List(fieldValueShowNameCache, BrowserFieldUtil.BROWSER_SHOW_NAME_SPLITER);
// boolean isUseCache = !"".equals(fieldValueCache) && fieldValueCache.equals(fieldvalue) && fieldvalspanarr.size() == tempshowidlist.size();
if (false) { //走缓存
// for (int j = 0; j < tempshowidlist.size(); j++) {
// fieldname += Util.null2String(fieldvalspanarr.get(j)) + ",";
// }
} else {
int languageId = this.user != null ? user.getLanguage() : 7;
List browserInfo;
try {
BrowserValueInfoService browserValueInfoService = new BrowserValueInfoService();
Map customizeBrowserValueCache = new HashMap<>();
if (this.Requestid > 0)
customizeBrowserValueCache = BrowserFieldUtil.loadRequestCustomizeBrowserValues(this.Requestid);
browserValueInfoService.setParams(customizeBrowserValueCache);
HashMap cusDependFieldValues = this.calculateCusBrowserFieldValue(fieldid,String.valueOf(fieldtype),fielddbtype,String.valueOf(this.Requestid),detailRecordId);
Map browserOtherParams = new HashMap<>();
browserOtherParams.put("cusDependFieldValues", cusDependFieldValues);
browserOtherParams.put("detailRecordId", detailRecordId);
browserOtherParams.put("moduleName4Org", "workflow");
browserInfo = browserValueInfoService.getBrowserValueInfo(fieldtype, fielddbtype, fieldid, fieldvalue, languageId, this.Requestid, browserOtherParams);
for(Object value:browserInfo){
BrowserValueInfo browserValueInfo = (BrowserValueInfo)value;
String browserValue = browserValueInfo!=null?browserValueInfo.getName():"";
fieldname+=browserValue+",";
}
if(fieldname.endsWith(",")){
fieldname = fieldname.substring(0,fieldname.length()-1);
}
// fieldname = new CustomBrowserBiz().calculateBrowserName(fieldvalue, fielddbtype, fieldtype, this.Requestid, ",", rowIndex, detailRecordId);
// if (fieldtype == 161 && fieldname.length() > 0) {
// String fieldValName= fieldname;
// if(fieldname.endsWith(",")){
// fieldValName = fieldname.substring(0, fieldname.length()-1);
// }
// CustomizeBrowserRefreshCacheThread.addParaInQueue("field" + fieldid, fieldvalue, fieldValName, this.Requestid, detailRecordId);
// }
}catch (Exception e){
e.printStackTrace();
}
}
} else if (fieldtype == 256 || fieldtype == 257) {//自定义多选
for (int k = 0; k < tempshowidlist.size(); k++) {
try {
CustomTreeUtil customTreeUtil = new CustomTreeUtil();
String name = customTreeUtil.getTreeFieldShowName((String) tempshowidlist.get(k), fielddbtype, "onlyname");
fieldname += Util.StringReplace(name, ",", ",") + ",";
} catch (Exception e) {
System.out.println(e);
}
}
} else if (fieldtype == 142) {
//收发文单位
for (int k = 0; k < tempshowidlist.size(); k++) {
fieldname += Util.StringReplace(docReceiveUnitComInfo.getReceiveUnitName("" + tempshowidlist.get(k)), ",", ",") + ",";
}
} else if (fieldtype == 141) {
int languageId = this.user != null ? user.getLanguage() : 7;
ResourceConditionManager resourceConditionManager = new ResourceConditionManager();
fieldname = resourceConditionManager.getFormShowNameOfNoLink(fieldvalue, languageId);
} else if (fieldtype == 296) { //多维度预算周期
BudgetPeriodComInfo budgetPeriodComInfo = new BudgetPeriodComInfo();
fieldname = budgetPeriodComInfo.getPeriodName(fieldvalue);
} else if (fieldtype == 295) {// 多维度承担主体
BudgetBearerComInfo budgetBearerComInfo = new BudgetBearerComInfo();
fieldname = budgetBearerComInfo.getBudgetBearerName(fieldvalue);
} else if (fieldtype == 294) {//多维度预算科目
BudgetSubjectComInfo budgetSubjectComInfo = new BudgetSubjectComInfo();
fieldname = budgetSubjectComInfo.getSubjectname(fieldvalue);
} else if(fieldtype ==22){ //报销费用类型
FnaSystemSetComInfo fnaSystemSetComInfo = new FnaSystemSetComInfo();
RecordSet recordSet = new RecordSet();
String separator = Util.null2String(fnaSystemSetComInfo.get_separator()).trim();
int enableDispalyAll = Util.getIntValue(fnaSystemSetComInfo.get_enableDispalyAll());
String fullName = "";
if (enableDispalyAll == 1) {
BudgetfeeTypeComInfo budgetfeeTypeComInfo = new BudgetfeeTypeComInfo();
fullName = budgetfeeTypeComInfo.getSubjectFullName(fieldvalue, separator);
} else {
BrowserComInfo bci = new BrowserComInfo();
String tablename = bci.getBrowsertablename(fieldtype + ""); // 浏览框对应的表,比如人力资源表
String columname = bci.getBrowsercolumname(fieldtype + ""); // 浏览框对应的表名称字段
String keycolumname = bci.getBrowserkeycolumname(fieldtype + ""); // 浏览框对应的表值字段
recordSet.execute("select " + columname + " from " + tablename + " where " + keycolumname + " in (" + fieldvalue + ")");
if (recordSet.next()) {
fullName = recordSet.getString(1);
}
}
fieldname = fullName;
}else {
String tablename = urlcominfo.getBrowsertablename("" + fieldtype); //浏览框对应的表,比如人力资源表
String columname = urlcominfo.getBrowsercolumname("" + fieldtype); //浏览框对应的表名称字段
String keycolumname = urlcominfo.getBrowserkeycolumname("" + fieldtype); //浏览框对应的表值字段
String dbtype = urlcominfo.getBrowserdbtype("" + fieldtype); //浏览框对应的数据类型
// 多人力资源,多客户,多会议,多文档
//安全检查
if (tablename != null && !tablename.equals("")
&& columname != null && !columname.equals("")
&& keycolumname != null && !keycolumname.equals("")
) {
String sql = "";
if (fieldvalue.indexOf(",") != -1) {
String[] fieldvalues = fieldvalue.split(",");
for (int f = 0; f < fieldvalues.length; f++) {
if (dbtype != null && dbtype.indexOf("varchar") >= 0) {
sql = "select " + keycolumname + "," + columname + " from " + tablename + " where " + keycolumname + "='" + fieldvalues[f] + "'";
} else {
sql = "select " + keycolumname + "," + columname + " from " + tablename + " where " + keycolumname + "=" + fieldvalues[f];
}
rs.executeSql(sql);
while (rs.next()) {
fieldname += Util.StringReplace(rs.getString(2), ",", ",") + ",";
}
}
} else {
if (dbtype != null && dbtype.indexOf("varchar") >= 0) {
sql = "select " + keycolumname + "," + columname + " from " + tablename + " where " + keycolumname + "='" + fieldvalue + "'";
} else {
sql = "select " + keycolumname + "," + columname + " from " + tablename + " where " + keycolumname + "=" + fieldvalue;
}
rs.executeSql(sql);
while (rs.next()) {
fieldname += Util.StringReplace(rs.getString(2), ",", ",") + ",";
}
}
}
}
if (fieldname.length() > 0 && fieldname.endsWith(",")) {
fieldname = fieldname.substring(0, fieldname.length() - 1);
}
} else {
fieldname = fieldvalue;
}
return fieldname;
}
private HashMap calculateCusBrowserFieldValue(int fieldid, String detailtype, String fielddbtype, String requestId, int detailRecordId) {
RecordSet rs = new RecordSet();
int workflowid = -1;
rs.executeQuery("select mainrequestid,requestid,requestname,requestlevel,mainrequestid,creater,creatertype,createdate,createtime,workflowId,currentstatus,currentnodeid,currentnodetype,status,remindTypes,docids,crmids,prjids,cptids , lastnodeid from workflow_requestbase where requestid=?", requestId);
if (rs.next()) {
workflowid = (rs.getInt("workflowId"));
} else {
return null;
}
WorkflowAllComInfo comInfo = new WorkflowAllComInfo();
String isbill = comInfo.getIsBill(workflowid + "");
String formid = comInfo.getFormId(workflowid + "");
List> fieldinfos = this.getFieldNameMapId(requestId,isbill,formid);
HashMap mainfieldinfomap = fieldinfos.get(0);
HashMap detailfieldinfomap = fieldinfos.get(1);
HashMap fieldNameMapId = fieldinfos.get(2);
BrowserInitUtil browserInitUtil = new BrowserInitUtil();
List fieldList = null;
List> cusDependShip= new ArrayList<>();
BrowserBean browserbean = new BrowserBean(detailtype+"");
weaver.interfaces.workflow.browser.Browser browser = null;
if(user==null){
user=new User();
}
browser = browserInitUtil.initCustomizeBrow(browserbean, fielddbtype, Util.getIntValue(detailtype), user.getUID());
if (browser.getRequestFieldMap() != null) {
fieldList = new ArrayList<>(browser.getRequestFieldMap());
List relateFieldid = new ArrayList();
for (String fieldKey : fieldList) {
String dependfieldid = (String) fieldNameMapId.get(Util.null2String(fieldKey).toLowerCase());
if(dependfieldid == null)
continue;
boolean isMainField = mainfieldinfomap != null && mainfieldinfomap.containsKey(dependfieldid);
relateFieldid.add(dependfieldid + (isMainField ? "_0" : "_1"));
Map dependShip = new HashMap<>();
dependShip.put("key", fieldKey);
dependShip.put("fieldid", dependfieldid);
dependShip.put("isDetail", isMainField ? "0" : "1");
cusDependShip.add(dependShip);
}
browserbean.setRelateFieldid(relateFieldid);
}
HashMap dependFieldValues = new HashMap<>();
boolean isCalDetailField = detailfieldinfomap != null && detailfieldinfomap.containsKey(fieldid);
if(cusDependShip != null && cusDependShip.size() > 0){
for(Map item: cusDependShip){
boolean isDetail = "1".equals(item.get("isDetail"));
String key = item.get("key");
String fieldidDep = item.get("fieldid");
String dTableName = "";
if(isDetail){
HashMap fieldmap = (HashMap) detailfieldinfomap.get(fieldidDep);
dTableName = (String)fieldmap.get("tablename");
}
// String replaceStr = Util.null2String(isbill.equals("0") ? "detail" : dTableName);
// String fieldname = isDetail && !"".equals(replaceStr) ? key.replace(replaceStr+"_", "") : key;
RequestInfoEntity requestInfoEntity = FieldInfoBiz.getRequestinfo(requestId);
Map maindata = requestInfoEntity.getLazyMainTableInfoEntity().get().getDatas();
List detailTableInfoEntities = requestInfoEntity.getLazyDetailTableInfos().get();
String fieldValue = "";
if(!isDetail){ //明细字段取主字段依赖
if(maindata.containsKey(fieldidDep))
fieldValue = (String)maindata.get(fieldidDep);
}else{
String detailtablename = key.substring(0, key.lastIndexOf("_"));
for (DetailTableInfoEntity dtinfo : detailTableInfoEntities) {
if (dtinfo.getTableDbName().equals(detailtablename)) {
if (dtinfo != null) {
for (DetailRowInfoEntity detailRowInfoEntity : dtinfo.getDetailRowInfos()) {
if (detailRowInfoEntity.getId() == detailRecordId) {
fieldValue = detailRowInfoEntity.getDatas() != null ? (String) detailRowInfoEntity.getDatas().get(fieldidDep) : "";
}
}
}
}
}
}
dependFieldValues.put(key, fieldValue);
}
}
return dependFieldValues;
}
private List> getFieldNameMapId(String requestId,String isbill,String formid) {
HashMap fieldNameMapId = new HashMap<>();
HashMap mainfieldinfomap = new HashMap<>();
HashMap detailfieldinfomap = new HashMap<>();
String queryFormFieldSQL = NewReportBiz.getQueryFormFieldSQL(getIntValue(formid), getIntValue(isbill));
RecordSet rsform = new RecordSet();
rsform.executeQuery(queryFormFieldSQL);
List> fieldInfos = new ArrayList<>();
while (rsform.next()) {
String fieldname = null2String(rsform.getString("name"));
String fieldid = null2String(rsform.getString("id"));
String dbtype = null2String(rsform.getString("dbtype"));
String htmltype = null2String(rsform.getString("httype"));
String filetype = null2String(rsform.getString("type"));
int viewtype = getIntValue(rsform.getString("viewtype"));
String maintablename = null2String(rsform.getString("maintablename"));
String detailtablename = null2String(rsform.getString("detailtable"));
if(viewtype==1){
HashMap fieldmap = new HashMap<>();
fieldmap.put("fieldname",fieldname);
fieldmap.put("tablename",detailtablename);
detailfieldinfomap.put(fieldid,fieldmap);
}else {
HashMap fieldmap = new HashMap<>();
fieldmap.put("fieldname",fieldname);
fieldmap.put("tablename",maintablename);
mainfieldinfomap.put(fieldid,fieldmap);
}
fieldNameMapId.put(((viewtype == 1 ? (detailtablename+"_") : "") + fieldname).toLowerCase() , fieldid+"");
}
fieldInfos.add(mainfieldinfomap);
fieldInfos.add(detailfieldinfomap);
fieldInfos.add(fieldNameMapId);
return fieldInfos;
}
/**
* 取得相关文挡内容
*
* @param fieldvalue 相关文挡字段值
* @return 相关文挡内容
*/
public String getFileName(String fieldvalue) {
RecordSet rs = new RecordSet();
String filename = "";
if (fieldvalue != null && !fieldvalue.trim().equals("")) {
fieldvalue = fieldvalue.trim();
if (fieldvalue.substring(fieldvalue.length() - 1).equals(","))
fieldvalue = fieldvalue.substring(0, fieldvalue.length() - 1);
//String sql="select docsubject from docdetail where id in ("+fieldvalue+")";
String sql = "select t1.imageFileName as docsubject from DocImageFile t1,"
+ "(select docid,max(versionid) versionid from DocImageFile group by docid) t2"
+ " where t1.docid=t2.docid and t1.versionid=t2.versionid "
+ " and t1.docId in (" + fieldvalue + ") order by t1.id asc ";
rs.executeSql(sql);
while (rs.next()) {
if (!filename.equals("")) {
filename += ",";
}
filename += Util.StringReplace(rs.getString("docsubject"), ",", ",");
}
}
return filename;
}
/**
* 替换特殊字符
*
* @param s 要替换特殊的字符串
* @return 替换完成的字符串
*/
public String toScreen(String s) {
char c[] = s.toCharArray();
char ch;
int i = 0;
StringBuffer buf = new StringBuffer();
while (i < c.length) {
ch = c[i++];
if (ch == '\r')
buf.append("");
else if (ch == '\n')
buf.append("");
else
buf.append(ch);
}
return buf.toString();
}
/**
* 替换特殊字符
*
* @param s 要替换特殊的字符串
* @return 替换完成的字符串
*/
public String toExcel(String s) {
if (s == null) return "";
//因本方法会将字符串 &符号转换,故先将欧元符号转义符转换为其Unicode码
s = s.replaceAll("€", "\u20AC");
String str = toScreen(s);
str = Util.StringReplace(str, "∠", "∠");
str = Util.StringReplace(str, "φ", "φ");
str = Util.StringReplace(str, """, "\"");
str = Util.StringReplace(str, " ", "%nbsp");
//str=Util.StringReplace(str,"'","‘");
str = Util.StringReplace(str, "<", "<");
str = Util.StringReplace(str, ">", ">");
str = Util.StringReplace(str, "&dt;&at;", " ");
str = Util.StringReplace(str, "&", "&");
str = Util.StringReplace(str, " ", "&dt;&at;");
if ("&dt;&at;".equals(str)) {
str = "";
}
//在方法最后,又将欧元符号置换为转义符
str = str.replaceAll("\u20AC", "€");
return str;
}
/**
*
*/
public String dropScript(String s) {
String retStr = "";
while (s.toLowerCase().indexOf("