From 58f3cb5e52de9f80759caefbc5b5abc0df001f36 Mon Sep 17 00:00:00 2001 From: renzj Date: Thu, 23 Feb 2023 13:57:30 +0800 Subject: [PATCH] second commit --- .../com/customization/workflow/SaveFwLimitCmd.java | 57 + .../workflow/cmd/forward/GetFwLimitBrowserCmd.java | 446 ++++++ .../weaver/hrm/cachecenter/util/ObjtypeParser.java | 321 +++++ .../workflow/workflow/WfFwLimitTransMethod.java | 375 +++++ .../weaver/workflow/workflow/WfFwLimitUtil.java | 1222 +++++++++++++++++ 指定平行部门需求/sql.txt | 7 + ...定流转接收人可选范围设置添加选项-总部评估2人天.docx | Bin 0 -> 119522 bytes 7 files changed, 2428 insertions(+) create mode 100644 指定平行部门需求/ecology/com/customization/workflow/SaveFwLimitCmd.java create mode 100644 指定平行部门需求/ecology/com/engine/workflow/cmd/forward/GetFwLimitBrowserCmd.java create mode 100644 指定平行部门需求/ecology/weaver/hrm/cachecenter/util/ObjtypeParser.java create mode 100644 指定平行部门需求/ecology/weaver/workflow/workflow/WfFwLimitTransMethod.java create mode 100644 指定平行部门需求/ecology/weaver/workflow/workflow/WfFwLimitUtil.java create mode 100644 指定平行部门需求/sql.txt create mode 100644 指定平行部门需求/指定流转接收人可选范围设置添加选项-总部评估2人天.docx diff --git a/指定平行部门需求/ecology/com/customization/workflow/SaveFwLimitCmd.java b/指定平行部门需求/ecology/com/customization/workflow/SaveFwLimitCmd.java new file mode 100644 index 0000000..83f9fbd --- /dev/null +++ b/指定平行部门需求/ecology/com/customization/workflow/SaveFwLimitCmd.java @@ -0,0 +1,57 @@ +package com.customization.workflow; + +import com.engine.core.cfg.annotation.CommandDynamicProxy; +import com.engine.core.interceptor.AbstractCommandProxy; +import com.engine.core.interceptor.Command; +import com.engine.workflow.cmd.forward.SaveFwLimitSetCmd; +import weaver.conn.RecordSet; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author:CL + * @date:2023/2/11 14:00 + */ +@CommandDynamicProxy(target = SaveFwLimitSetCmd.class, desc = "指定流转") +public class SaveFwLimitCmd extends AbstractCommandProxy> { + + @Override + public Map execute(Command> command) { + + SaveFwLimitSetCmd cmd = (SaveFwLimitSetCmd) command; + int uid = cmd.getUser().getUID(); + + String objtype = (String) cmd.getParams().get("objtype"); + +// 如果选择平行部门 就对参数进行修改 选择其他则执行之前的逻辑 + if ("16".equals(objtype)) { +// 查询平行部门 + String sql = "select id,departmentname from hrmdepartment where supdepid=" + + "(select d.supdepid from HrmResource r join hrmdepartment d on r.departmentid=d.id where r.id=?)" + + "and subcompanyid1 = (select subcompanyid1 from HrmResource where id=?) "; + RecordSet recordSet = new RecordSet(); + boolean flag = recordSet.executeQuery(sql, uid, uid); + if (flag) { + List idList = new ArrayList<>(); + List nameList = new ArrayList<>(); + while (recordSet.next()) { + idList.add(recordSet.getString("id")); + nameList.add(recordSet.getString("departmentname")); + } +// 改造参数 放回command + String departmentid = idList.stream().map(String::valueOf).collect(Collectors.joining(",")); + String departmentidspan = nameList.stream().map(String::valueOf).collect(Collectors.joining(",")); + cmd.getParams().put("departmentid", departmentid); + cmd.getParams().put("departmentidspan", departmentidspan); + } + + } +// 执行原有的逻辑 + Map result = nextExecute(cmd); + + return result; + } +} diff --git a/指定平行部门需求/ecology/com/engine/workflow/cmd/forward/GetFwLimitBrowserCmd.java b/指定平行部门需求/ecology/com/engine/workflow/cmd/forward/GetFwLimitBrowserCmd.java new file mode 100644 index 0000000..0c7390e --- /dev/null +++ b/指定平行部门需求/ecology/com/engine/workflow/cmd/forward/GetFwLimitBrowserCmd.java @@ -0,0 +1,446 @@ +package com.engine.workflow.cmd.forward; + +import com.api.browser.bean.SearchConditionItem; +import com.api.browser.bean.SearchConditionOption; +import com.api.browser.util.ConditionType; +import com.api.hrm.bean.HrmFieldBean; +import com.api.hrm.bean.SelectOption; +import com.api.hrm.bean.WeaRadioGroup; +import com.api.hrm.util.HrmFieldSearchConditionComInfo; +import com.engine.core.interceptor.AbstractCommand; +import com.engine.core.interceptor.CommandContext; +import com.engine.workflow.biz.freeNode.FreeNodeBiz; +import com.engine.workflow.util.AuthorityUtil; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.hrm.moduledetach.ManageDetachComInfo; +import weaver.systeminfo.SystemEnv; +import weaver.workflow.workflow.WfFwLimitUtil; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class GetFwLimitBrowserCmd extends AbstractCommand> { + + public GetFwLimitBrowserCmd(User user, Map params) { + this.user = user; + this.params = params; + } + + @Override + public Map execute(CommandContext commandContext) { + Map apidatas = new HashMap(); + String type = Util.null2String(params.get("type")); + int wfid = Util.getIntValue(Util.null2String(params.get("wfid")),0); + if(!"canChoiceOperator".equals(type)){ + int operatelevel = AuthorityUtil.getWorkflowUserRight(user, wfid); + if (operatelevel < 0) { + apidatas.put("operatelevel", operatelevel); + return apidatas; + } + } + if("weaAuth".equals(type)){ //添加范围 + apidatas = getWeaAuthData(params,user); + }else if("baseSet".equals(type)){//基础数据、数据列表 + WfFwLimitUtil wfFwLimitUtil = new WfFwLimitUtil(); + apidatas = wfFwLimitUtil.getBaseSetData(params,user); + }else if("advanceList".equals(type)){ + WfFwLimitUtil wfFwLimitUtil = new WfFwLimitUtil(); + apidatas = wfFwLimitUtil.getAdvanceData(params,user);//高级模式下的 操作者、接收人范围列表 + }else if("canChoiceOperator".equals(type)){ + apidatas = canChoiceOperator(params,user);//允许选择节点参与人 作为 转发对象、意见征询对象 + } + return apidatas; + } + + public Map canChoiceOperator(Map params,User user){ + Map apidatas = new HashMap(); + int wfid = Util.getIntValue(Util.null2String(params.get("wfid")),0); + int nodeid = Util.getIntValue(Util.null2String(params.get("nodeid")),0); + nodeid = FreeNodeBiz.getExtendNodeId(nodeid); + String fwtype = Util.null2String(Util.null2String(params.get("fwtype"))); // 1、转发,2、意见征询,3、转办 + //征询转办取意见征询设置 + if ("5".equals(fwtype)) { + fwtype = "2"; + } + String isopen = "0"; + String choiceoperator = "0"; + RecordSet rs = new RecordSet(); + String sql = "select isopen,choiceoperator from workflow_FwLimitSet where fwtype='"+fwtype+"' and nodeid="+nodeid; + if(wfid>0){ + sql += " and wfid="+wfid; + } + rs.execute(sql); + if(rs.next()){ + isopen = rs.getString("isopen"); + choiceoperator = rs.getString("choiceoperator"); + } + apidatas.put("isopen", isopen); + apidatas.put("choiceoperator", choiceoperator); + apidatas.put("success", "1"); + return apidatas; + } + + /** + * 操作者、接收人范围 卡片数据 + * @return + */ + public Map getWeaAuthData(Map params,User user){ + Map apidatas = new HashMap(); + + int wfid = Util.getIntValue(Util.null2String(params.get("wfid")),0); + int nodeid = Util.getIntValue(Util.null2String(params.get("nodeid")),0); + nodeid = FreeNodeBiz.getExtendNodeId(nodeid); + String fwtype = Util.null2String(Util.null2String(params.get("fwtype"))); // 1、转发,2、意见征询,3、转办 + + String modetype = Util.null2String(params.get("modetype")); //0:普通模式 1:高级模式 + int tabid = Util.getIntValue(Util.null2String(params.get("tabid")),0); //0:添加操作者 1:添加接收人范围 + int mainid = Util.getIntValue(Util.null2String(params.get("mainid")),0); //高级模式-主ID + + //Map groupitem = null; + List itemlist = null; + + //供前台发送请求传递用 + Map hiddenMap = new HashMap(); + hiddenMap.put("wfid",wfid); + hiddenMap.put("nodeid",nodeid); + hiddenMap.put("fwtype",fwtype); + hiddenMap.put("modetype",modetype); + hiddenMap.put("tabid",tabid); + hiddenMap.put("mainid",mainid); + + try { + int objtype_labelid = (tabid==0&&"1".equals(modetype))?130470:386135; //操作者类型、接收人类型 + int relationship_labelid = ("1".equals(modetype) && tabid==0)?15364:386136; //条件、范围关系 + boolean isAdvanceOper = ("1".equals(modetype) && tabid==0); + + //接收人类型、内容、级别 + String[] fields = new String[]{"objtype,"+objtype_labelid+",5,1","userid,345,3,17","subids,345,3,194","departmentid,345,3,57", + "roleid,345,3,65", + "jobid,345,3,278","joblevel,28169,5,1","jobtitlesubcompany,19437,3,194","jobtitledepartment,19438,3,57", + "seclevel,683,1,scope","rolelevel,383129,5,1","relationship,"+relationship_labelid+",5,1"}; + HrmFieldSearchConditionComInfo hrmFieldSearchConditionComInfo = new HrmFieldSearchConditionComInfo(); + SearchConditionItem searchConditionItem = null; + HrmFieldBean hrmFieldBean = null; + itemlist = new ArrayList(); + //groupitem = new HashMap(); + //groupitem.put("title", "添加操作者"); + //groupitem.put("defaultshow", true); + + for(int i=0;i statusOptions = new ArrayList(); + if(hrmFieldBean.getFieldname().equals("objtype")){ + statusOptions = getObjTypeOption(user,tabid); + searchConditionItem.setOptions(statusOptions); + }else if(hrmFieldBean.getFieldname().equals("rolelevel")){ + statusOptions.add(new SearchConditionOption("0", SystemEnv.getHtmlLabelName(124,user.getLanguage()))); + statusOptions.add(new SearchConditionOption("1", SystemEnv.getHtmlLabelName(141,user.getLanguage()))); + statusOptions.add(new SearchConditionOption("2", SystemEnv.getHtmlLabelName(140,user.getLanguage()),true)); + searchConditionItem.setOptions(statusOptions); + }else if(hrmFieldBean.getFieldname().equals("joblevel")){ + statusOptions.add(new SearchConditionOption("2", SystemEnv.getHtmlLabelName(140,user.getLanguage()))); + statusOptions.add(new SearchConditionOption("0", SystemEnv.getHtmlLabelName(19438, Util.getIntValue(user.getLanguage())),true)); + statusOptions.add(new SearchConditionOption("1", SystemEnv.getHtmlLabelName(19437, Util.getIntValue(user.getLanguage())))); + searchConditionItem.setOptions(statusOptions); + }else if(hrmFieldBean.getFieldname().equals("relationship")){ + statusOptions.add(new SearchConditionOption("0", SystemEnv.getHtmlLabelName(346,user.getLanguage()),true)); + statusOptions.add(new SearchConditionOption("1", SystemEnv.getHtmlLabelName(386080,user.getLanguage()))); + searchConditionItem.setOptions(statusOptions); + } + } + + searchConditionItem.setLabelcol(6); + if(hrmFieldBean.getFieldname().equals("userid")||hrmFieldBean.getFieldname().equals("jobid") + ||hrmFieldBean.getFieldname().equals("subids") + ||hrmFieldBean.getFieldname().equals("departmentid")){ + searchConditionItem.setFieldcol(10); + }else{ + searchConditionItem.setFieldcol(18); + } + + if(!hrmFieldBean.getFieldname().equals("objtype")||!hrmFieldBean.getFieldname().equals("seclevel")){ + searchConditionItem.setViewAttr(3); + } + if(fieldinfo[2].equals("3")){ + searchConditionItem.getBrowserConditionParam().setViewAttr(3); + searchConditionItem.getBrowserConditionParam().setIsSingle(false); + } + + if(hrmFieldBean.getFieldname().equals("seclevel")){ + List value1 = new ArrayList(); + value1.add(0); + value1.add(100); + searchConditionItem.setValue(value1); + searchConditionItem.setConditionType(ConditionType.INPUT_INTERVAL); + } + itemlist.add(searchConditionItem); + } + + //下拉 - 类型 + List condition = new ArrayList(); + condition.add(itemlist.get(0)); + + + Map conditionMap = new HashMap(); + List conditionlist = new ArrayList(); + List conditionlist2 = new ArrayList(); + + if(tabid == 1) {//接收人类型 + //conditionlist = new ArrayList(); + //conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(11)); + conditionlist.add(conditionlist2); + + conditionMap.put("0",conditionlist);//本部门 + + conditionlist = new ArrayList(); + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(11)); + conditionlist.add(conditionlist2); + conditionMap.put("1",conditionlist); + + conditionlist = new ArrayList(); + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(11)); + conditionlist.add(conditionlist2); + conditionMap.put("2",conditionlist); + + conditionlist = new ArrayList(); + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(11)); + conditionlist.add(conditionlist2); + conditionMap.put("3",conditionlist); + + conditionlist = new ArrayList(); + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(11)); + conditionlist.add(conditionlist2); + conditionMap.put("4",conditionlist); + + conditionlist = new ArrayList(); + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(11)); + conditionlist.add(conditionlist2); + conditionMap.put("5",conditionlist); + + conditionlist = new ArrayList(); + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(11)); + conditionlist.add(conditionlist2); + conditionMap.put("6",conditionlist); + + conditionlist = new ArrayList(); + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(11)); + conditionlist.add(conditionlist2); + conditionMap.put("7",conditionlist); + + conditionlist = new ArrayList(); + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(11)); + conditionlist.add(conditionlist2); + conditionMap.put("8",conditionlist); + + conditionlist = new ArrayList(); + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(11)); + conditionlist.add(conditionlist2); + conditionMap.put("9",conditionlist);//所有下级分部 + } + + //指定部门 + conditionlist = new ArrayList(); + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(3));//部门 + conditionlist.add(conditionlist2); + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(9)); //安全级别 + conditionlist.add(conditionlist2); + if(!isAdvanceOper){ + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(11));//范围关系 + conditionlist.add(conditionlist2); + } + conditionMap.put("10",conditionlist); + + //平行部门 + conditionlist = new ArrayList(); +// conditionlist2 = new ArrayList(); +// conditionlist2.add(itemlist.get(3));//部门 +// conditionlist.add(conditionlist2); + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(9)); //安全级别 + conditionlist.add(conditionlist2); + if(!isAdvanceOper){ + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(11));//范围关系 + conditionlist.add(conditionlist2); + } + conditionMap.put("16",conditionlist); + + //指定分部 + conditionlist = new ArrayList(); + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(2));//分部 + conditionlist.add(conditionlist2); + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(9)); //安全级别 + conditionlist.add(conditionlist2); + if(!isAdvanceOper){ + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(11));//范围关系 + conditionlist.add(conditionlist2); + } + conditionMap.put("11",conditionlist); + + //指定人员 + conditionlist = new ArrayList(); + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(1));//人员 + conditionlist.add(conditionlist2); + if(!isAdvanceOper){ + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(11));//范围关系 + conditionlist.add(conditionlist2); + } + conditionMap.put("12",conditionlist); + + //指定角色 + conditionlist = new ArrayList(); + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(4));//角色 + conditionlist.add(conditionlist2); + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(10)); //角色级别 + conditionlist.add(conditionlist2); + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(9)); //安全级别 + conditionlist.add(conditionlist2); + if(!isAdvanceOper){ + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(11));//范围关系 + conditionlist.add(conditionlist2); + } + conditionMap.put("13",conditionlist); + + //指定岗位 + conditionlist = new ArrayList(); + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(5));//岗位 + conditionlist.add(conditionlist2); + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(6)); //岗位级别 + WeaRadioGroup wrg = new WeaRadioGroup(); + wrg.setLabel(SystemEnv.getHtmlLabelName(28169, user.getLanguage())); + List option = new ArrayList(); + Map selectLinkageDatas = new HashMap(); + selectLinkageDatas.put("0" ,itemlist.get(8)); + selectLinkageDatas.put("1" ,itemlist.get(7)); + wrg.setSelectLinkageDatas(selectLinkageDatas); + + conditionlist2 = new ArrayList(); + option.add(new SelectOption("2", SystemEnv.getHtmlLabelName(140, user.getLanguage()),true)); + option.add(new SelectOption("0", SystemEnv.getHtmlLabelName(19438, user.getLanguage()))); + option.add(new SelectOption("1", SystemEnv.getHtmlLabelName(19437, user.getLanguage()))); + + List domkey = new ArrayList(); + wrg.setOptions(option); + wrg.setConditionType("SELECT_LINKAGE"); + wrg.setFieldcol(18); + wrg.setLabelcol(6); + domkey.add("joblevel"); + wrg.setDomkey(domkey); + + conditionlist2 = new ArrayList(); + conditionlist2.add(wrg); + conditionlist.add(conditionlist2); + + if(!isAdvanceOper){ + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(11));//范围关系 + conditionlist.add(conditionlist2); + } + conditionMap.put("14",conditionlist); + + //所有人 + if(!new ManageDetachComInfo().appDetachDisableAll(user)){ + conditionlist = new ArrayList(); + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(9)); //安全级别 + conditionlist.add(conditionlist2); + } + + if(!isAdvanceOper){ + conditionlist2 = new ArrayList(); + conditionlist2.add(itemlist.get(11));//范围关系 + conditionlist.add(conditionlist2); + } + conditionMap.put("15",conditionlist); + + condition.add(conditionMap); + apidatas.put("conditions", condition); + apidatas.put("hidden",hiddenMap); + apidatas.put("success", "1"); + }catch (Exception e){ + e.printStackTrace(); + apidatas.put("success", "0"); + apidatas.put("msg", ""+ SystemEnv.getHtmlLabelName(126400,weaver.general.ThreadVarLanguage.getLang())+""); + } + return apidatas; + } + + /** + * 类型选项 + * @param user + * @param tabid + * @return + */ + public List getObjTypeOption(User user, int tabid){ + List options = new ArrayList(); + + if(tabid == 1){//接收人类型 + options.add(new SearchConditionOption("0", SystemEnv.getHtmlLabelName(21837,user.getLanguage()),true));//本部门 + options.add(new SearchConditionOption("1", SystemEnv.getHtmlLabelName(386081,user.getLanguage()),false));//直接上级部门 + options.add(new SearchConditionOption("2", SystemEnv.getHtmlLabelName(386082,user.getLanguage()),false));//所有上级部门 + options.add(new SearchConditionOption("3", SystemEnv.getHtmlLabelName(17587,user.getLanguage()),false));//下级部门 + options.add(new SearchConditionOption("4", SystemEnv.getHtmlLabelName(386083,user.getLanguage()),false));//所有下级部门 + options.add(new SearchConditionOption("5", SystemEnv.getHtmlLabelName(30792,user.getLanguage()),false));//本分部 + options.add(new SearchConditionOption("6", SystemEnv.getHtmlLabelName(386084,user.getLanguage()),false));//直接上级分部 + options.add(new SearchConditionOption("7", SystemEnv.getHtmlLabelName(386085,user.getLanguage()),false));//所有上级分部 + options.add(new SearchConditionOption("8", SystemEnv.getHtmlLabelName(17898,user.getLanguage()),false));//下级分部 + options.add(new SearchConditionOption("9", SystemEnv.getHtmlLabelName(386086,user.getLanguage()),false));//所有下级分部 + } + if(tabid==1){ //接收人类型 + options.add(new SearchConditionOption("10", SystemEnv.getHtmlLabelName(19438,user.getLanguage()),false));//指定部门 + options.add(new SearchConditionOption("16", SystemEnv.getHtmlLabelName(10006035,user.getLanguage()),false));//平行部门 + }else {//操作者类型 + options.add(new SearchConditionOption("10", SystemEnv.getHtmlLabelName(19438,user.getLanguage()),true));//指定部门 + options.add(new SearchConditionOption("16", SystemEnv.getHtmlLabelName(10006035,user.getLanguage()),true));//平行部门 + } + options.add(new SearchConditionOption("11", SystemEnv.getHtmlLabelName(19437,user.getLanguage()),false));//指定分部 + options.add(new SearchConditionOption("12", SystemEnv.getHtmlLabelName(81811,user.getLanguage()),false));//指定人员 + options.add(new SearchConditionOption("13", SystemEnv.getHtmlLabelName(382788,user.getLanguage()),false));//指定角色 + options.add(new SearchConditionOption("14", SystemEnv.getHtmlLabelName(382789,user.getLanguage()),false));//指定岗位 + if(!new ManageDetachComInfo().appDetachDisableAll(user)) { + options.add(new SearchConditionOption("15", SystemEnv.getHtmlLabelName(1340, user.getLanguage()), false));//所有人 + } + return options; + } + +} diff --git a/指定平行部门需求/ecology/weaver/hrm/cachecenter/util/ObjtypeParser.java b/指定平行部门需求/ecology/weaver/hrm/cachecenter/util/ObjtypeParser.java new file mode 100644 index 0000000..3262e30 --- /dev/null +++ b/指定平行部门需求/ecology/weaver/hrm/cachecenter/util/ObjtypeParser.java @@ -0,0 +1,321 @@ +package weaver.hrm.cachecenter.util; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.StringTokenizer; +import java.util.regex.Pattern; + +import org.apache.commons.lang3.StringUtils; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import weaver.conn.RecordSet; +import weaver.hrm.User; +import weaver.hrm.cachecenter.bean.LoadComInfo; +import weaver.hrm.cachecenter.bean.SuperDepartmentComInfo; +import weaver.hrm.cachecenter.bean.SuperSubCompanyComInfo; +import weaver.hrm.cachecenter.entry.ConstStyle; +import weaver.hrm.cachecenter.entry.HrmTypeStyle; +import weaver.hrm.cachecenter.entry.OrgUpOrDownTypeStyle; +import weaver.hrm.cachecenter.entry.OrgtypeInfo; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.company.SubCompanyComInfo; +import weaver.hrm.resource.ResourceComInfo; + +public class ObjtypeParser { + + private static final Logger log = LoggerFactory.getLogger("parallel"); + + private ResourceComInfo resourceInfo ; + private DepartmentComInfo deptInfo ; + private SuperDepartmentComInfo superDeptInfo ; + private SubCompanyComInfo subcompanyInfo ; + private SuperSubCompanyComInfo superSubcompanyInfo ; + + + private ObjtypeParser(){ + try { + resourceInfo = new ResourceComInfo() ; + deptInfo = new DepartmentComInfo() ; + superDeptInfo = LoadComInfo.getInstance(SuperDepartmentComInfo.class) ; + subcompanyInfo = new SubCompanyComInfo() ; + superSubcompanyInfo = LoadComInfo.getInstance(SuperSubCompanyComInfo.class) ; + } catch (Exception e) { + } + } ; + + public static ObjtypeParser getInstance(){ + return new ObjtypeParser() ; + } + + + + + /** + * 批量解析,以分号分隔 + * @param desc + * @param user + * @return + * @throws Exception + */ + public List parse(String desc,User user) { + + List list = new ArrayList() ; + if(StringUtils.isBlank(desc)) return list ; + for (String one : desc.split(";")) { + + OrgtypeInfo typeInfo = parseOne(one, user) ; + if(typeInfo != null) list.add(typeInfo) ; + } + + return list ; + } + + private static final Pattern SPLIT_PATTERN = Pattern.compile("[|]") ; + + /** + * 解析单个描述符 + * @param one + * @param user + * @return + */ + public OrgtypeInfo parseOne(String one,User user){ + String[] infos = SPLIT_PATTERN.split(one,-1) ; + if(infos.length != 8) return null ; + String objid = infos[0] ; + String objtype = infos[1] ; + String rolelevel = infos[2] ; + String joblevel = infos[3] ; + String jobobjid = infos[4] ; + String seclevel = infos[5] ; + String seclevelMax = infos[6] ; + String relationship = infos[7] ; + + if ("16".equals(objtype)){ + + int uid = user.getUID(); + + log.info("【uid】==========="+uid); + + String sql = "select id from hrmdepartment where supdepid=" + + "(select d.supdepid from HrmResource r join hrmdepartment d on r.departmentid=d.id where r.id='" + uid + "')" + + "and subcompanyid1 = (select subcompanyid1 from HrmResource where id='" + uid + "')"; + + log.info("【sql】==========="+sql); + + RecordSet recordSet = new RecordSet(); + boolean flag = recordSet.executeQuery(sql); + + String uids = ""; + if(flag){ + while (recordSet.next()) { + uids += recordSet.getString("id") + ","; + } + if (uids.endsWith(",")){ + objid = uids.substring(0,uids.length()-1); + } + } + + log.info("【objid】==========="+objid); + + objtype="10"; + } + + OrgtypeInfo typeInfo = new OrgtypeInfo() ; + HrmTypeStyle style = HrmTypeStyle.findById(objtype) ; + + typeInfo.setId(objid) ; + typeInfo.setType(style) ; + typeInfo.setRolelevel(rolelevel) ; + typeInfo.setJoblevel(joblevel) ; + typeInfo.setJobobjid(jobobjid) ; + typeInfo.setRolelevel(rolelevel) ; + typeInfo.setSeclevelBegin(seclevel) ; + typeInfo.setSeclevelEnd(seclevelMax) ; + typeInfo.setIn(StringUtils.isBlank(relationship) ||"0".equals(relationship)) ; + + switch (style) { + case SELF_DEPARTMENT: + resetSelfDepartment(typeInfo,user); + break; + case SELF_UPER_DEPARTMENT: + resetSelfUpperDepartment(typeInfo,user); + break; + case SELF_UPER_ALL_DEPARTMENT: + resetSelfUperAllDepartment(typeInfo,user) ; + break; + case SELF_DOWN_DEPARTMENT: + resetSelfDownDepartment(typeInfo,user) ; + break; + case SELF_DOWN_ALL_DEPARTMENT: + resetSelfDownAllDepartment(typeInfo,user) ; + break; + case SELF_SUBCOMPANY: + resetSelfSubcompany(typeInfo,user) ; + break; + case SELF_UPER_SUBCOMPANY: + resetSelfUperSubcompany(typeInfo,user) ; + break; + case SELF_UPER_ALL_SUBCOMPANY: + resetSelfUperAllSubCompany(typeInfo,user) ; + break; + case SELF_DOWN_SUBCOMPANY: + resetSelfDownSubcompany(typeInfo,user) ; + break; + case SELF_DOWN_ALL_SUBCOMPANY: + resetSelfDownAllSubcompany(typeInfo,user); + break; + default: + break; + } + + if(typeInfo.getId() == null) typeInfo.setId(StringUtils.EMPTY); + + return typeInfo ; + } + + // 所有下级分部 + private void resetSelfDownAllSubcompany(OrgtypeInfo typeInfo, User user) { + String id = resourceInfo.getSubCompanyID(Integer.toString(user.getUID())) ; + + //Set set = new HashSet() ; + //getLowerSubIdByCircle(id,set) ; + //String allLower = ListUtil.loopIds(set); + + typeInfo.setType(HrmTypeStyle.SUBCOMPANY) ; + typeInfo.setId(id) ; + typeInfo.setOrgUpOrDownType(OrgUpOrDownTypeStyle.ORG_ALL_DOWN) ; + + } + +// private void getLowerSubIdByCircle(String id, Set set) { +// if(StringUtils.isBlank(id)) return ; +// for(String superId : id.split(",")){ +// set.add(superId) ; +// String lowerIds = superSubcompanyInfo.getDownIdsBySuperId(superId) ; +// getLowerSubIdByCircle(lowerIds,set); +// } +// } + + // 直接下级分部 + private void resetSelfDownSubcompany(OrgtypeInfo typeInfo, User user) { + String id = resourceInfo.getSubCompanyID(Integer.toString(user.getUID())) ; + String lowerId = superSubcompanyInfo.getDownIdsBySuperId(id) ; + typeInfo.setType(HrmTypeStyle.SUBCOMPANY) ; + typeInfo.setId(lowerId) ; + } + + // 所有上级分部 + private void resetSelfUperAllSubCompany(OrgtypeInfo typeInfo, User user) { + String id = resourceInfo.getSubCompanyID(Integer.toString(user.getUID())) ; + //Set set = new HashSet() ; + //getSuperSubIdByCircle(id,set) ; + + //String allSuper = ListUtil.loopIds(set); + + typeInfo.setType(HrmTypeStyle.SUBCOMPANY) ; + typeInfo.setId(id) ; + typeInfo.setOrgUpOrDownType(OrgUpOrDownTypeStyle.ORG_ALL_UP) ; + } + + + + + + +// private void getSuperSubIdByCircle(String id,Set set){ +// String superId = subcompanyInfo.getSupsubcomid(id) ; +// if(!StringUtils.isBlank(superId) && !"0".equals(superId)){ +// set.add(superId) ; +// getSuperSubIdByCircle(superId,set) ; +// } +// } + + private void resetSelfUperSubcompany(OrgtypeInfo typeInfo, User user) { + String id = resourceInfo.getSubCompanyID(Integer.toString(user.getUID())) ; + String superId = subcompanyInfo.getSupsubcomid(id) ; + typeInfo.setType(HrmTypeStyle.SUBCOMPANY) ; + typeInfo.setId(superId) ; + } + + private void resetSelfSubcompany(OrgtypeInfo typeInfo, User user) { + String id = resourceInfo.getSubCompanyID(Integer.toString(user.getUID())) ; + typeInfo.setType(HrmTypeStyle.SUBCOMPANY) ; + typeInfo.setId(id) ; + } + + /** + * 含所有下级 + * @param typeInfo + * @param user + */ + private void resetSelfDownAllDepartment(OrgtypeInfo typeInfo, User user) { + String deptid = resourceInfo.getDepartmentID(Integer.toString(user.getUID())) ; + //String underDeptids = superDeptInfo.getDepartIdsBySuperId(deptid) ; + + //Set set = new HashSet() ; + //getLowerIdsByCicle(underDeptids,set); + + typeInfo.setType(HrmTypeStyle.DEPARTMENT) ; + //typeInfo.setId(ListUtil.loopIds(set)) ; + typeInfo.setId(deptid) ; + typeInfo.setOrgUpOrDownType(OrgUpOrDownTypeStyle.ORG_ALL_DOWN) ; + } + + private void resetSelfDownDepartment(OrgtypeInfo typeInfo, User user) { + String deptid = resourceInfo.getDepartmentID(Integer.toString(user.getUID())) ; + String lowerIds = superDeptInfo.getDepartIdsBySuperId(deptid) ; + typeInfo.setType(HrmTypeStyle.DEPARTMENT) ; + typeInfo.setId(lowerIds) ; + } + /** + * 含所有上级 + * @param typeInfo + * @param user + */ + private void resetSelfUperAllDepartment(OrgtypeInfo typeInfo, User user) { + String deptid = resourceInfo.getDepartmentID(Integer.toString(user.getUID())) ; + //Set set = new HashSet() ; + //getSuperDeptIdByCircle(deptid,set) ; + + typeInfo.setType(HrmTypeStyle.DEPARTMENT) ; + //typeInfo.setId(ListUtil.loopIds(set)) ; + typeInfo.setId(deptid) ; + typeInfo.setOrgUpOrDownType(OrgUpOrDownTypeStyle.ORG_ALL_UP) ; + + } + +// //获取所有下级 +// private void getLowerIdsByCicle(String ids,Set set){ +// if(StringUtils.isBlank(ids)) return ; +// for(String superId : ids.split(",")){ +// set.add(superId) ; +// String lowerIds = superDeptInfo.getDepartIdsBySuperId(superId) ; +// getLowerIdsByCicle(lowerIds,set); +// } +// } + +// // 获取全部上级 +// private void getSuperDeptIdByCircle(String id,Set set){ +// String superId = deptInfo.getDepartmentsupdepid(id) ; +// if(!StringUtils.isBlank(superId) && !"0".equals(superId)){ +// set.add(superId) ; +// getSuperDeptIdByCircle(superId,set) ; +// } +// } + + private void resetSelfUpperDepartment(OrgtypeInfo typeInfo, User user) { + String deptid = resourceInfo.getDepartmentID(Integer.toString(user.getUID())) ; + String superId = deptInfo.getDepartmentsupdepid(deptid) ; + typeInfo.setType(HrmTypeStyle.DEPARTMENT) ; + typeInfo.setId(superId) ; + } + + private void resetSelfDepartment(OrgtypeInfo info,User user){ + String deptid = resourceInfo.getDepartmentID(Integer.toString(user.getUID())) ; + info.setType(HrmTypeStyle.DEPARTMENT) ; + info.setId(deptid) ; + } +} diff --git a/指定平行部门需求/ecology/weaver/workflow/workflow/WfFwLimitTransMethod.java b/指定平行部门需求/ecology/weaver/workflow/workflow/WfFwLimitTransMethod.java new file mode 100644 index 0000000..b1c0805 --- /dev/null +++ b/指定平行部门需求/ecology/weaver/workflow/workflow/WfFwLimitTransMethod.java @@ -0,0 +1,375 @@ +package weaver.workflow.workflow; + +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.company.SubCompanyComInfo; +import weaver.hrm.job.JobTitlesComInfo; +import weaver.hrm.resource.ResourceComInfo; +import weaver.hrm.roles.RolesComInfo; +import weaver.systeminfo.SystemEnv; + +import java.util.List; + +/** + * 转发、意见征询、转办 接收人范围设置 + * @author Administrator + * + */ +public class WfFwLimitTransMethod extends BaseBean{ + + private ResourceComInfo rc = null; + private DepartmentComInfo dc = null; + private SubCompanyComInfo sc = null; + private JobTitlesComInfo jtc = null; + private RolesComInfo rolec = null; + + public WfFwLimitTransMethod(){ + try { + rc = new ResourceComInfo(); + dc = new DepartmentComInfo(); + sc = new SubCompanyComInfo(); + jtc = new JobTitlesComInfo(); + rolec = new RolesComInfo(); + } catch (Exception e) { + writeLog(e); + } + } + + public String getResultCheckBox(String param){ + return "true"; + } + + /** + * 类型 + * @param objtype + * @return + */ + public String getObjTypeShow(String objtype,String languageid){ + String result = ""; + int langu = Util.getIntValue(languageid, 7); + switch(Util.getIntValue(objtype)){ + case 0: + result = SystemEnv.getHtmlLabelName(21837, langu); //本部门 + break; + case 1: + result = SystemEnv.getHtmlLabelName(386081, langu); //直接上级部门 + break; + case 2: + result = SystemEnv.getHtmlLabelName(386082, langu); //所有上级部门 + break; + case 3: + result = SystemEnv.getHtmlLabelName(17587, langu); //下级部门 + break; + case 4: + result = SystemEnv.getHtmlLabelName(386083, langu); //所有下级部门 + break; + case 5: + result = SystemEnv.getHtmlLabelName(30792, langu); //本分部 + break; + case 6: + result = SystemEnv.getHtmlLabelName(386084, langu); //直接上级分部 + break; + case 7: + result = SystemEnv.getHtmlLabelName(386085, langu); //所有上级分部 + break; + case 8: + result = SystemEnv.getHtmlLabelName(17898, langu); //下级分部 + break; + case 9: + result = SystemEnv.getHtmlLabelName(386086, langu); //所有下级分部 + break; + case 10: + result = SystemEnv.getHtmlLabelName(19438, langu); //指定部门 + break; + case 11: + result = SystemEnv.getHtmlLabelName(19437, langu); //指定分部 + break; + case 12: + result = SystemEnv.getHtmlLabelName(81811, langu); //指定人员 + break; + case 13: + result = SystemEnv.getHtmlLabelName(382788, langu); //指定角色 + break; + case 14: + result = SystemEnv.getHtmlLabelName(382789, langu); //指定岗位 + break; + case 15: + result = SystemEnv.getHtmlLabelName(1340, langu); //所有人 + break; + case 16: + result = SystemEnv.getHtmlLabelName(10006035, langu); //所有人 + break; + } + return result; + } + + /** + * 安全级别 + * @param seclevel + * @param seclevelMax + * @return + */ + public String getSecLevelShow(int objtype ,String seclevel,String seclevelMax){ + String result = seclevel+"-"+seclevelMax; + + if("".equals(seclevel.trim()) && "".equals(seclevelMax.trim())){ + result = ""; + } + if(objtype<=9){ + result = ""; + } + + return result; + } + + /** + * 内容 + * @param objid + * @param parame + * @return + */ + public String getObjIdsShow(String objid,String param){ + String[] paramArray = Util.splitString(param, "+"); + int objtype = Util.getIntValue(paramArray[0]); + String rolelevel = paramArray[1]; + String joblevel = paramArray[2]; + String jobobjid = paramArray[3]; + int languageid = Util.getIntValue(paramArray[4],7); + String result = getObjidShowName(objtype, objid, rolelevel,joblevel, jobobjid, languageid); + return result; + } + + public String getObjidShowName(int objtype,String objid,String rolelevel,String joblevel,String jobobjid,int languageid){ + return getObjidShowName(objtype, objid, rolelevel, joblevel, jobobjid, languageid, "0"); + } + + public String getObjidShowName(int objtype,String objid,String rolelevel,String joblevel,String jobobjid,int languageid,String fromAdvance){ + String result = ""; + List list = Util.splitString2List(objid, ","); + switch(objtype){ + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 15: + if("1".equals(fromAdvance)){ + result = getObjTypeShow(objtype+"",languageid+""); + } + break; + case 10://指定部门 + for(int k=0;k list_depat = Util.splitString2List(jobobjid, ","); + for(int k=0;k list_subcom = Util.splitString2List(jobobjid, ","); + for(int k=0;k -1 && oldobjtype!=objtype){ + result += ";"; + } + if(oldobjtype > -1 && oldobjtype==objtype){ + result += ","; + } + String result0 = getObjidShowName(objtype, objid+"", rolelevel+"",joblevel+"", jobobjid+"", languageid,"1"); + + if(objtype == 12){//指定人员 + //String relas = getRelationshipShow(relationship, languageid+""); + //result0 = "("+relas+")"+result0; + } + + String seclevelStr = getSecLevelShow(objtype,seclevel,seclevelMax); + if(!"".equals(seclevelStr)){ + result0 += "("+SystemEnv.getHtmlLabelName(683, languageid)+seclevelStr+")"; + } + oldobjtype = objtype; + result += result0; + } + if(!"".equals(result)){ + //result += ";"; + } + //result =""+ result + ""; + return result; + } + + /** + * 高级模式-接收人范围 + * @param id + * @param param + * @return + */ + public String getRecLimitShow(String id,String param){ + String result = ""; + int languageid = Util.getIntValue(param,7); + String sql = ""; + int oldobjtype = -1; + RecordSet rs = new RecordSet(); + sql = "select * from workflow_FwRecAdvanced where mainid="+id+" order by id"; + rs.execute(sql); + while(rs.next()){ + int objtype = Util.getIntValue(rs.getString("objtype")); + int rolelevel = Util.getIntValue(rs.getString("rolelevel")); + int joblevel = Util.getIntValue(rs.getString("joblevel")); + String seclevel = Util.null2String(rs.getString("seclevel")); + String seclevelMax = Util.null2String(rs.getString("seclevelMax")); + String relationship = Util.null2String(rs.getString("relationship")); + + String objid = Util.null2String(rs.getString("objid")); + String jobobjid = Util.null2String(rs.getString("jobobjid")); + + if(oldobjtype > -1 && oldobjtype!=objtype){ + result += ";"; + } + if(oldobjtype > -1 && oldobjtype==objtype){ + result += ","; + } + String result0 = getObjidShowName(objtype, objid+"", rolelevel+"",joblevel+"", jobobjid+"", languageid,"1"); + String relas = getRelationshipShow(relationship, languageid+""); + result0 = "("+relas+")"+result0; + String seclevelStr = getSecLevelShow(objtype,seclevel,seclevelMax); + if(!"".equals(seclevelStr)){ + result0 += "("+SystemEnv.getHtmlLabelName(683, languageid)+seclevelStr+")"; + } + oldobjtype = objtype; + + result += result0; + } + if(!"".equals(result)){ + //result += ";"; + } + //result =""+ result + ""; + return result; + } +} diff --git a/指定平行部门需求/ecology/weaver/workflow/workflow/WfFwLimitUtil.java b/指定平行部门需求/ecology/weaver/workflow/workflow/WfFwLimitUtil.java new file mode 100644 index 0000000..43d4ba9 --- /dev/null +++ b/指定平行部门需求/ecology/weaver/workflow/workflow/WfFwLimitUtil.java @@ -0,0 +1,1222 @@ +package weaver.workflow.workflow; + +import com.api.browser.bean.SearchConditionGroup; +import com.api.browser.bean.SearchConditionItem; +import com.api.browser.bean.SearchConditionOption; +import com.api.browser.util.ConditionFactory; +import com.api.browser.util.ConditionType; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.TimeUtil; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.hrm.cachecenter.bean.WorkflowAdvancedComInfo; +import weaver.hrm.cachecenter.bean.WorkflowRecSimpleComInfo; +import weaver.systeminfo.SystemEnv; + +import java.util.*; + +/** + * 转发、意见征询、转办 接收人范围设置 + * @author Administrator + * + */ +public class WfFwLimitUtil extends BaseBean{ + + private boolean debug = true; + + public String generateID() { + UUID uuid = UUID.randomUUID(); + String id = uuid.toString().replaceAll("-", ""); + return id; + } + + /** + * 供人力资源组调用,true需要范围控制。 + * @param forwardflag //1:转发 2:意见征询 3:转办 4:传阅 5:征询转办 + * @return + */ + public static boolean checkForwardflag(String forwardflag){ + if("1".equals(forwardflag) || "2".equals(forwardflag) || "3".equals(forwardflag)|| + "4".equals(forwardflag) || "5".equals(forwardflag) || "6".equals(forwardflag)){ + return true; + } + return false; + } + + /** + * 是否开启了 限制接收人可选范围 + * @param wfid + * @param nodeid + * @param fwtype 1转发 2意见征询 3转办 + * @return 1 :已开启 + */ + public boolean isOpenLimit(int wfid,int nodeid,String fwtype){ + boolean flag = false; + RecordSet rs = new RecordSet(); + String sql = "select isopen from workflow_FwLimitSet where isopen='1' and fwtype='"+fwtype+"' and nodeid="+nodeid+" and wfid="+wfid; + rs.execute(sql); + if(rs.next()){ + flag = true; + } + if(debug)writeLog(">>>>>>>>>isOpenLimit>>>sql="+sql); + return flag; + } + + public boolean choiceOperator(int wfid,int nodeid,String fwtype){ + boolean flag = false; + RecordSet rs = new RecordSet(); + String sql = "select isopen from workflow_FwLimitSet where isopen='1' and fwtype='"+fwtype+"' and choiceoperator='1' and nodeid="+nodeid+" and wfid="+wfid; + rs.execute(sql); + if(rs.next()){ + flag = true; + } + if(debug)writeLog(">>>>>>>>>choiceOperator>>>sql="+sql); + return flag; + } + + /** + * 同步到所有节点 + * @param wfid + * @param nodeid + * @param fwtype 1转发 2意见征询 3转办 + * @param user + */ + public void syncAllNode(int wfid,int nodeid,String fwtype,User user){ + RecordSet rs = new RecordSet(); + String copy2nodeids = ""; + String sql = "select distinct f.nodeid from workflow_flownode f,workflow_nodebase n where (n.isfreenode is null or n.isfreenode !='1') and f.nodeid=n.id and f.nodeid !="+nodeid+" and f.workflowid="+wfid; + rs.execute(sql); + while(rs.next()){ + int tmpnodeid = rs.getInt("nodeid"); + copy2nodeids += ","+tmpnodeid; + } + if(!"".equals(copy2nodeids)){ + copy2nodeids = copy2nodeids.substring(1); + } + syncAllNode(wfid, nodeid, fwtype, user, copy2nodeids); + } + + /** + * 同步到其他节点 + * @param wfid + * @param nodeid + * @param fwtype 1转发 2意见征询 3转办 + * @param user + * @param copy2nodeids 同步到目标节点 格式:1,2,3 + */ + public void syncAllNode(int wfid,int nodeid,String fwtype,User user,String copy2nodeids){ + int id = 0; + String isopen = ""; + String modetype = ""; + String choiceoperator = ""; + RecordSet rs = new RecordSet(); + String sql = "select * from workflow_FwLimitSet where fwtype='"+fwtype+"' and nodeid="+nodeid+" and wfid="+wfid+" "; + rs.execute(sql); + if(rs.next()){ + id = rs.getInt("id"); + isopen = Util.null2String(rs.getString("isopen")); + modetype = Util.null2String(rs.getString("modetype")); + choiceoperator = Util.null2o(rs.getString("choiceoperator")); + } + + Map param = new HashMap(); + param.put("id", id+""); + param.put("isopen", isopen); + param.put("modetype", modetype); + param.put("choiceoperator",choiceoperator); + + if(id>0){ + //if("1".equals(modetype)){ //高级模式 + syncNodeAdvanced(param, wfid, nodeid, fwtype, user,copy2nodeids); + //}else{ //简单模式 + syncNodeSimple(param, wfid, nodeid, fwtype, user,copy2nodeids); + //} + } + } + + + /** + * 供 另存为新版本 使用 + * 转发、意见征询、转办 范围设置 + * @param newwfid + * @param newnodeid + * @param oldwfid + * @param oldnodeid + * @param fwtype + * @param user + */ + public void saveAsNewNode(int newwfid,int newnodeid,int oldwfid,int oldnodeid,String fwtype,int userid){ + int id = 0; + String isopen = ""; + String modetype = ""; + String choiceoperator = ""; + String copy2nodeids = newnodeid+""; + RecordSet rs = new RecordSet(); + String sql = "select * from workflow_FwLimitSet where fwtype='"+fwtype+"' and nodeid="+oldnodeid+" and wfid="+oldwfid+" "; + rs.execute(sql); + if(rs.next()){ + id = rs.getInt("id"); + isopen = Util.null2String(rs.getString("isopen")); + modetype = Util.null2String(rs.getString("modetype")); + choiceoperator = Util.null2String(rs.getString("choiceoperator")); + } + try { + User user = new User(); + user.setUid(userid); + + Map param = new HashMap(); + param.put("id", id+""); + param.put("isopen", isopen); + param.put("modetype", modetype); + param.put("choiceoperator",choiceoperator); + + param.put("oldwfid", oldwfid+""); + param.put("oldnodeid", oldnodeid+""); + param.put("fromNewnode", "1"); //节点是新创建的 + + if(id > 0){ + //if("1".equals(modetype)){ //高级模式 + syncNodeAdvanced(param, newwfid, newnodeid, fwtype, user,copy2nodeids); + //}else{ //简单模式 + syncNodeSimple(param, newwfid, newnodeid, fwtype, user,copy2nodeids); + //} + } + } catch (Exception e) { + writeLog(e); + } + } + + + /** + * 高级模式同步 + * @param param + * @param wfid + * @param nodeid + * @param fwtype 1转发 2意见征询 3转办 + * @param user + * @param copy2nodeids 同步到目标节点 格式:1,2,3 + */ + public void syncNodeAdvanced(Map param,int wfid,int nodeid,String fwtype,User user,String copy2nodeids){ + String currentdate = TimeUtil.getCurrentDateString(); + String currenttime = TimeUtil.getOnlyCurrentTimeString(); + RecordSet rs = new RecordSet(); + RecordSet rs1 = new RecordSet(); + String sql = ""; + String sqlwhere = ""; + String isopen = Util.null2String(param.get("isopen")); + String modetype= Util.null2String(param.get("modetype")); + String choiceoperator = Util.null2String(param.get("choiceoperator")); + + int oldwfid = Util.getIntValue(param.get("oldwfid"),-1); + int oldnodeid = Util.getIntValue(param.get("oldnodeid"),-1); + String fromNewnode = Util.null2String(param.get("fromNewnode")); + + if(debug)writeLog(">>>>>>syncNodeAdvanced>>>>0>>oldwfid="+oldwfid+" oldnodeid="+oldnodeid+" fromNewnode="+fromNewnode); + if(oldwfid<=0 && oldnodeid<=0){ + oldwfid = wfid; + oldnodeid = nodeid; + } + if(debug)writeLog(">>>>>>syncNodeAdvanced>>>>1>>oldwfid="+oldwfid+" oldnodeid="+oldnodeid); + + if(!"".equals(copy2nodeids)){ + sqlwhere = " and nodeid in ("+copy2nodeids+") "; + }else{ + sqlwhere = " and 1=2 "; + } + + if(debug)writeLog(">>>>>>syncNodeAdvanced>>>>>>sqlwhere="+sqlwhere); + + if(!"1".equals(fromNewnode)){ //新创建的节点 没有脏数据,不需要清除 + //操作者 + sql = "delete from workflow_FwOperAdvanced where mainid in (select id from workflow_FwAdvanced where fwtype='"+fwtype+"' "+sqlwhere+" and wfid="+wfid+" )"; + rs.execute(sql); + //接收人范围 + sql = "delete from workflow_FwRecAdvanced where mainid in (select id from workflow_FwAdvanced where fwtype='"+fwtype+"' "+sqlwhere+" and wfid="+wfid+" )"; + rs.execute(sql); + //操作者-接收人范围 组 + sql = "delete from workflow_FwAdvanced where fwtype='"+fwtype+"' "+sqlwhere+" and wfid="+wfid+" "; + rs.execute(sql); + //是否限制接收人可选范围设置。高级模式下该表谨慎删,高级模式与简单模式数据分开存放,但简单模式用到了该表的ID,如果直接删 会留下简单模式的脏数据 + //sql = "delete from workflow_FwLimitSet where fwtype='"+fwtype+"' "+" and wfid="+wfid+" "; + } + + if(debug)writeLog(sql); + + List ids = new ArrayList(); + sql = "select id from workflow_FwAdvanced where fwtype='"+fwtype+"' and nodeid="+oldnodeid+" and wfid="+oldwfid+" order by id "; + rs.execute(sql); + while(rs.next()){ + ids.add(rs.getInt("id")); + } + + if(debug)writeLog(sql); + + List nodeids = new ArrayList(); + List oldnodeids = Util.splitString2List(copy2nodeids, ","); + for (int i = 0; i < oldnodeids.size(); i++) { + int tmpnodeid = Util.getIntValue(oldnodeids.get(i)); + if(tmpnodeid<=0)continue; + nodeids.add(tmpnodeid); + } + + if(debug)writeLog(">>>>>>syncNodeAdvanced>>>>>>nodeids="+nodeids); + + for (int k = 0; k < nodeids.size(); k++) { + int tmpnodeid = nodeids.get(k); + + sql = "select id from workflow_FwLimitSet where fwtype='"+fwtype+"' and nodeid="+tmpnodeid+" and wfid="+wfid+" "; + rs1.execute(sql); + if(rs1.next()){ + sql = "update workflow_FwLimitSet set modetype=?,isopen=?,choiceoperator=?,lastoperator=?,lastoperatedate=?,lastoperatetime=? where fwtype='"+fwtype+"' and nodeid="+tmpnodeid+" and wfid="+wfid+" "; + rs1.executeUpdate(sql, modetype,isopen,choiceoperator,user.getUID(),currentdate,currenttime); + }else{ + sql = "insert into workflow_FwLimitSet(wfid,nodeid,fwtype,modetype,isopen,choiceoperator,lastoperator,lastoperatedate,lastoperatetime) values (?,?,?,?,?,?,?,?,?) "; + rs1.executeUpdate(sql,wfid,tmpnodeid,fwtype, modetype,isopen,choiceoperator,user.getUID(),currentdate,currenttime); + } + + for (int i = 0; i < ids.size(); i++) { + int currid = ids.get(i); + + int mainid = 0; + String uuid = generateID(); + sql = "insert into workflow_FwAdvanced (wfid,nodeid,fwtype,uuid) values ("+wfid+","+tmpnodeid+",'"+fwtype+"','"+uuid+"')"; + rs1.execute(sql); + + sql = "select id from workflow_FwAdvanced where uuid='"+uuid+"'"; + rs1.execute(sql); + if(rs1.next()){ + mainid = rs1.getInt("id"); + } + + sql = "insert into workflow_FwOperAdvanced (mainid,objtype,objid,rolelevel,joblevel,jobobjid,relationship,seclevel,seclevelMax) "; + sql += " select "+mainid+",objtype,objid,rolelevel,joblevel,jobobjid,relationship,seclevel,seclevelMax from workflow_FwOperAdvanced "; + sql += " where mainid = "+currid+" order by id"; + rs1.execute(sql); + + sql = "insert into workflow_FwRecAdvanced (mainid,objtype,objid,rolelevel,joblevel,jobobjid,relationship,seclevel,seclevelMax) "; + sql += " select "+mainid+",objtype,objid,rolelevel,joblevel,jobobjid,relationship,seclevel,seclevelMax from workflow_FwRecAdvanced "; + sql += " where mainid = "+currid+" order by id"; + rs1.execute(sql); + } + } + WorkflowAdvancedComInfo wfAdvancedComInfo = new WorkflowAdvancedComInfo(); + wfAdvancedComInfo.removeCache(); + } + + + /** + * 普通模式同步 + * @param param + * @param wfid + * @param nodeid + * @param fwtype 1转发 2意见征询 3转办 + * @param user + * @param copy2nodeids 同步到目标节点 格式:1,2,3 + */ + public void syncNodeSimple(Map param,int wfid,int nodeid,String fwtype,User user,String copy2nodeids){ + String currentdate = TimeUtil.getCurrentDateString(); + String currenttime = TimeUtil.getOnlyCurrentTimeString(); + RecordSet rs = new RecordSet(); + RecordSet rs1 = new RecordSet(); + String sql = ""; + String sqlwhere = ""; + int id = Util.getIntValue(param.get("id")); + String isopen = Util.null2String(param.get("isopen")); + String modetype= Util.null2String(param.get("modetype")); + String fromNewnode = Util.null2String(param.get("fromNewnode")); + String choiceoperator = Util.null2String(param.get("choiceoperator")); + + if(!"".equals(copy2nodeids)){ + sqlwhere = " and nodeid in ("+copy2nodeids+") "; + }else{ + sqlwhere = " and 1=2 "; + } + if(debug)writeLog(">>>>>>syncNodeSimple>>>>fromNewnode="+fromNewnode+" sqlwhere="+sqlwhere); + + if(!"1".equals(fromNewnode)){ //新创建的节点 没有脏数据,不需要清除 + //接收人范围 + sql = "delete from workflow_FwRecSimple where mainid in (select id from workflow_FwLimitSet where fwtype='"+fwtype+"' "+sqlwhere+" and wfid="+wfid+")"; + rs.execute(sql); + } + + if(debug)writeLog(">>>>>>syncNodeSimple>>>>sql="+sql); + + List nodeids = new ArrayList(); + List oldnodeids = Util.splitString2List(copy2nodeids, ","); + for (int i = 0; i < oldnodeids.size(); i++) { + int tmpnodeid = Util.getIntValue(oldnodeids.get(i)); + if(tmpnodeid<=0)continue; + nodeids.add(tmpnodeid); + } + + if(debug)writeLog(">>>>>>syncNodeSimple>>>>nodeids="+nodeids); + + for (int k = 0; k < nodeids.size(); k++) { + int tmpnodeid = nodeids.get(k); + int mainid = 0; + sql = "select id from workflow_FwLimitSet where fwtype='"+fwtype+"' and nodeid="+tmpnodeid+" and wfid="+wfid+" "; + rs1.execute(sql); + if(rs1.next()){ + mainid = rs1.getInt("id"); + sql = "update workflow_FwLimitSet set modetype=?,isopen=?,choiceoperator=?,lastoperator=?,lastoperatedate=?,lastoperatetime=? where id="+mainid; + rs1.executeUpdate(sql, modetype,isopen,choiceoperator,user.getUID(),currentdate,currenttime); + }else{ + sql = "insert into workflow_FwLimitSet(wfid,nodeid,fwtype,modetype,isopen,choiceoperator,lastoperator,lastoperatedate,lastoperatetime) values (?,?,?,?,?,?,?,?,?) "; + rs1.executeUpdate(sql,wfid,tmpnodeid,fwtype, modetype,isopen,choiceoperator,user.getUID(),currentdate,currenttime); + } + + if(mainid <= 0){ + sql = "select id from workflow_FwLimitSet where fwtype='"+fwtype+"' and nodeid="+tmpnodeid+" and wfid="+wfid+" "; + rs1.execute(sql); + if(rs1.next()){ + mainid = rs1.getInt("id"); + } + } + sql = "insert into workflow_FwRecSimple (mainid,objtype,objid,rolelevel,joblevel,jobobjid,relationship,seclevel,seclevelMax) "; + sql += " select "+mainid+",objtype,objid,rolelevel,joblevel,jobobjid,relationship,seclevel,seclevelMax from workflow_FwRecSimple where mainid="+id+" order by id"; + rs1.execute(sql); + } + WorkflowRecSimpleComInfo wfRecSimpleComInfo = new WorkflowRecSimpleComInfo(); + wfRecSimpleComInfo.removeCache(); + } + + /** + * 保存基础信息,包含同步到所有节点 + * @param user + * @param paramMap + * @return + */ + public Map saveFwLimitBaseSet(User user,Map paramMap){ + Map returnMap = new HashMap(); + int wfid = Util.getIntValue(Util.null2String(paramMap.get("wfid")),0); + int nodeid = Util.getIntValue(Util.null2String(paramMap.get("nodeid")),0); + String fwtype = Util.null2String(Util.null2String(paramMap.get("fwtype"))); // 1、转发,2、意见征询,3、转办 + int modetype = Util.getIntValue(Util.null2String(paramMap.get("modetype")),0); //1、高级模式,0或者其他 为普通模式 + String isopen = Util.null2o(Util.null2String( paramMap.get("isopen"))); // 1:开启 限制接收人可选范围 + int issynAll = Util.getIntValue(Util.null2String(paramMap.get("issynAll")),0);//1:同步到所有节点 + String choiceoperator = Util.null2o(Util.null2String(paramMap.get("choiceoperator"))); + + int mainid = 0; + String currentdate = TimeUtil.getCurrentDateString(); + String currenttime = TimeUtil.getOnlyCurrentTimeString(); + String sql = ""; + RecordSet rs = new RecordSet(); + sql = "select id from workflow_FwLimitSet where fwtype='"+fwtype+"' and nodeid="+nodeid+" and wfid="+wfid+" "; + rs.execute(sql); + if(rs.next()){ + mainid = rs.getInt("id"); + sql = "update workflow_FwLimitSet set modetype=?,isopen=?,choiceoperator=?,lastoperator=?,lastoperatedate=?,lastoperatetime=? where id="+mainid; + rs.executeUpdate(sql, modetype,isopen,choiceoperator,user.getUID(),currentdate,currenttime); + }else{ + sql = "insert into workflow_FwLimitSet(wfid,nodeid,fwtype,modetype,isopen,choiceoperator,lastoperator,lastoperatedate,lastoperatetime)"; + sql += " values ("+wfid+","+nodeid+",'"+fwtype+"','"+modetype+"','"+isopen+"','"+choiceoperator+"',"+user.getUID()+",'"+currentdate+"','"+currenttime+"') "; + rs.execute(sql); + + sql = "select id from workflow_FwLimitSet where fwtype='"+fwtype+"' and nodeid="+nodeid+" and wfid="+wfid+" "; + rs.execute(sql); + if(rs.next()){ + mainid = rs.getInt("id"); + } + } + + if(mainid>0 && issynAll==1){ + syncAllNode(wfid, nodeid, fwtype, user); + } + WorkflowRecSimpleComInfo wfRecSimpleComInfo = new WorkflowRecSimpleComInfo(); + wfRecSimpleComInfo.removeCache(); + + WorkflowAdvancedComInfo wfAdvancedComInfo = new WorkflowAdvancedComInfo(); + wfAdvancedComInfo.removeCache(); + + if(mainid>0){ + Map data = new HashMap(); + data.put("id",mainid); + + returnMap.put("success", "1"); + returnMap.put("msg", ""+ SystemEnv.getHtmlLabelName(18758,weaver.general.ThreadVarLanguage.getLang())+""); + returnMap.put("hidden",data); + + paramMap.put("mainid",mainid); + List conditions = new ArrayList(); + Map baseSetData = getBaseSetData(paramMap,user); + if(baseSetData.containsKey("conditions")){ + conditions = (List)baseSetData.get("conditions"); + } + if(baseSetData.containsKey("groupitems")){ + returnMap.put("groupitems",baseSetData.get("groupitems")); + } + if(baseSetData.containsKey("hidden")){ + Map hidden = (Map)baseSetData.get("hidden"); + data.putAll(hidden); + } + returnMap.put("hidden",data); + returnMap.put("conditions",conditions); + }else{ + returnMap.put("success", "0"); + returnMap.put("msg", ""+ SystemEnv.getHtmlLabelName(22620,weaver.general.ThreadVarLanguage.getLang())+""); + } + return returnMap; + } + + /** + * 获取基础信息 + * @param wfid + * @param nodeid + * @param fwtype + * @param user + * @return + */ + public Map getLimitBaseSet(int wfid,int nodeid,String fwtype,User user){ + Map returnMap = new HashMap(); + int mainid = 0; + int modetype = 0; + String isopen = "0"; + String choiceoperator = "0"; + + String currentdate = TimeUtil.getCurrentDateString(); + String currenttime = TimeUtil.getOnlyCurrentTimeString(); + String sql = ""; + RecordSet rs = new RecordSet(); + sql = "select * from workflow_FwLimitSet where fwtype='"+fwtype+"' and nodeid="+nodeid+" and wfid="+wfid+" "; + rs.execute(sql); + if(rs.next()){ + mainid = rs.getInt("id"); + modetype = Util.getIntValue(rs.getString("modetype")); + isopen = Util.null2o(rs.getString("isopen")); + choiceoperator = Util.null2o(rs.getString("choiceoperator")); + }else{ + sql = "insert into workflow_FwLimitSet(wfid,nodeid,fwtype,modetype,isopen,choiceoperator,lastoperator,lastoperatedate,lastoperatetime)"; + sql += " values ("+wfid+","+nodeid+",'"+fwtype+"','"+modetype+"','"+isopen+"','"+choiceoperator+"',"+user.getUID()+",'"+currentdate+"','"+currenttime+"') "; + rs.execute(sql); + + sql = "select * from workflow_FwLimitSet where fwtype='"+fwtype+"' and nodeid="+nodeid+" and wfid="+wfid+" "; + rs.execute(sql); + if(rs.next()){ + mainid = rs.getInt("id"); + modetype = Util.getIntValue(rs.getString("modetype")); + isopen = Util.null2o(rs.getString("isopen")); + choiceoperator = Util.null2o(rs.getString("choiceoperator")); + } + } + returnMap.put("mainid",mainid); + returnMap.put("modetype",modetype); + returnMap.put("isopen",isopen); + returnMap.put("choiceoperator",choiceoperator); + return returnMap; + } + + + /** + * 保存范围设置信息 + * @param user + * @param paramMap + * @return + */ + public Map saveFwLimitSet(User user,Map paramMap){ + Map returnMap = new HashMap(); + + int wfid = Util.getIntValue(Util.null2String(paramMap.get("wfid")),0); + int nodeid = Util.getIntValue(Util.null2String(paramMap.get("nodeid")),0); + String fwtype = Util.null2String(Util.null2String(paramMap.get("fwtype"))); // 1、转发,2、意见征询,3、转办 + + int mainid = Util.getIntValue(Util.null2String(paramMap.get("mainid")),0);//普通模式 workflow_FwLimitSet的ID,高级模式 workflow_FwAdvanced的ID + String modetype = Util.null2o(Util.null2String(paramMap.get("modetype"))); //1、高级模式,0或者其他 为普通模式 + int tabid = Util.getIntValue(Util.null2String(paramMap.get("tabid")),0); //高级模式--0、操作者 1、接收人范围 + + int objtype=Util.getIntValue(Util.null2String(paramMap.get("objtype"))); //类型 + String relationship = Util.null2o(Util.null2String(paramMap.get("relationship"))); //接收人关系 + int seclevel = Util.getIntValue(Util.null2String(paramMap.get("seclevel")), 0);//最小安全级别 + int seclevelMax = Util.getIntValue(Util.null2String(paramMap.get("seclevelto")), 100); //最大安全级别 + //指定部门 + String departmentid = Util.null2String(paramMap.get("departmentid")); + //指定分部 + String subids = Util.null2String(paramMap.get("subids")); + //指定人员 + String userid = Util.null2String(paramMap.get("userid")); + //指定角色 + String roleid = Util.null2String(paramMap.get("roleid")); + int rolelevel=Util.getIntValue(Util.null2String( paramMap.get("rolelevel"))); + //指定岗位 + String jobid = Util.null2String(paramMap.get("jobid")); + int joblevel=Util.getIntValue(Util.null2String( paramMap.get("joblevel"))); + String jobobjid = ""; + if(joblevel == 0){ + jobobjid = Util.null2String(Util.null2String( paramMap.get("jobtitledepartment"))); + }else if(joblevel == 1){ + jobobjid = Util.null2String(Util.null2String( paramMap.get("jobtitlesubcompany"))); + } + + RecordSet rs = new RecordSet(); + String sql = ""; + if("1".equals(modetype)) {//1、高级模式 + //没有数据,需要预先插入一条空的 + if(mainid<=0){ + String uuid = generateID(); + sql = "insert into workflow_FwAdvanced (wfid,nodeid,fwtype,uuid) values ("+wfid+","+nodeid+",'"+fwtype+"','"+uuid+"')"; + rs.execute(sql); + + sql = "select id from workflow_FwAdvanced where uuid='"+uuid+"'"; + rs.execute(sql); + if(rs.next()){ + mainid = rs.getInt("id"); + } + } + }else{//0、普通模式 + sql = "select id from workflow_FwLimitSet where fwtype='"+fwtype+"' and nodeid="+nodeid+" and wfid="+wfid+" "; + rs.execute(sql); + if(rs.next()){ + mainid = rs.getInt("id"); + } + } + + if(mainid<=0){ + returnMap.put("success", "0"); + returnMap.put("msg", ""+ SystemEnv.getHtmlLabelName(10004350,weaver.general.ThreadVarLanguage.getLang())+"mainid"+ SystemEnv.getHtmlLabelName(10004351,weaver.general.ThreadVarLanguage.getLang())+""); + return returnMap; + } + + if(objtype<=9 || objtype==15){ + if("1".equals(modetype)){//1、高级模式 + if(tabid == 1){//接收人范围 + sql = "insert into workflow_FwRecAdvanced (mainid,objtype,relationship,seclevel,seclevelMax) values (?,?,?,?,?) "; + rs.executeUpdate(sql, mainid,objtype,relationship,seclevel,seclevelMax); + }else{//操作者 + sql = "insert into workflow_FwOperAdvanced (mainid,objtype,seclevel,seclevelMax) values (?,?,?,?) "; + rs.executeUpdate(sql, mainid,objtype,seclevel,seclevelMax); + } + }else{//0或者其他 为普通模式 + sql = "insert into workflow_FwRecSimple (mainid,objtype,relationship,seclevel,seclevelMax) values (?,?,?,?,?) "; + rs.executeUpdate(sql, mainid,objtype,relationship,seclevel,seclevelMax); + } + + }else if(objtype == 10||objtype==16){ //指定部门 + if("1".equals(modetype)){//1、高级模式 + if(tabid == 1){//接收人范围 + sql = "insert into workflow_FwRecAdvanced (mainid,objtype,objid,relationship,seclevel,seclevelMax) values (?,?,?,?,?,?) "; + rs.executeUpdate(sql, mainid,objtype,departmentid,relationship,seclevel,seclevelMax); + }else{//操作者 + sql = "insert into workflow_FwOperAdvanced (mainid,objtype,objid,seclevel,seclevelMax) values (?,?,?,?,?) "; + rs.executeUpdate(sql, mainid,objtype,departmentid,seclevel,seclevelMax); + } + }else{//0或者其他 为普通模式 + sql = "insert into workflow_FwRecSimple (mainid,objtype,objid,relationship,seclevel,seclevelMax) values (?,?,?,?,?,?) "; + rs.executeUpdate(sql, mainid,objtype,departmentid,relationship,seclevel,seclevelMax); + } + }else if(objtype == 11){ //指定分部 + if("1".equals(modetype)){//1、高级模式 + if(tabid == 1){//接收人范围 + sql = "insert into workflow_FwRecAdvanced (mainid,objtype,objid,relationship,seclevel,seclevelMax) values (?,?,?,?,?,?) "; + rs.executeUpdate(sql, mainid,objtype,subids,relationship,seclevel,seclevelMax); + }else{//操作者 + sql = "insert into workflow_FwOperAdvanced (mainid,objtype,objid,seclevel,seclevelMax) values (?,?,?,?,?) "; + rs.executeUpdate(sql, mainid,objtype,subids,seclevel,seclevelMax); + } + }else{//0或者其他 为普通模式 + sql = "insert into workflow_FwRecSimple (mainid,objtype,objid,relationship,seclevel,seclevelMax) values (?,?,?,?,?,?) "; + rs.executeUpdate(sql, mainid,objtype,subids,relationship,seclevel,seclevelMax); + } + }else if(objtype == 12){ //指定人员 + if("1".equals(modetype)){//1、高级模式 + if(tabid == 1){//接收人范围 + sql = "insert into workflow_FwRecAdvanced (mainid,objtype,objid,relationship) values (?,?,?,?) "; + rs.executeUpdate(sql, mainid,objtype,userid,relationship); + }else{//操作者 + sql = "insert into workflow_FwOperAdvanced (mainid,objtype,objid,relationship) values (?,?,?,?) "; + rs.executeUpdate(sql, mainid,objtype,userid,relationship); + } + }else{//0或者其他 为普通模式 + sql = "insert into workflow_FwRecSimple (mainid,objtype,objid,relationship) values (?,?,?,?) "; + rs.executeUpdate(sql, mainid,objtype,userid,relationship); + } + }else if(objtype == 13){ //指定角色 + if("1".equals(modetype)){//1、高级模式 + if(tabid == 1){//接收人范围 + sql = "insert into workflow_FwRecAdvanced (mainid,objtype,objid,rolelevel,relationship,seclevel,seclevelMax) values (?,?,?,?,?,?,?) "; + rs.executeUpdate(sql, mainid,objtype,roleid,rolelevel,relationship,seclevel,seclevelMax); + }else{//操作者 + sql = "insert into workflow_FwOperAdvanced (mainid,objtype,objid,rolelevel,seclevel,seclevelMax) values (?,?,?,?,?,?) "; + rs.executeUpdate(sql, mainid,objtype,roleid,rolelevel,seclevel,seclevelMax); + } + }else{//0或者其他 为普通模式 + sql = "insert into workflow_FwRecSimple (mainid,objtype,objid,rolelevel,relationship,seclevel,seclevelMax) values (?,?,?,?,?,?,?) "; + rs.executeUpdate(sql, mainid,objtype,roleid,rolelevel,relationship,seclevel,seclevelMax); + } + }else if(objtype == 14){ //指定岗位 + if("1".equals(modetype)){//1、高级模式 + if(tabid == 1){//接收人范围 + sql = "insert into workflow_FwRecAdvanced (mainid,objtype,objid,joblevel,jobobjid,relationship) values (?,?,?,?,?,?) "; + rs.executeUpdate(sql, mainid,objtype,jobid,joblevel,jobobjid,relationship); + }else{//操作者 + sql = "insert into workflow_FwOperAdvanced (mainid,objtype,objid,joblevel,jobobjid) values (?,?,?,?,?) "; + rs.executeUpdate(sql, mainid,objtype,jobid,joblevel,jobobjid); + } + }else{//0或者其他 为普通模式 + sql = "insert into workflow_FwRecSimple (mainid,objtype,objid,joblevel,jobobjid,relationship) values (?,?,?,?,?,?) "; + rs.executeUpdate(sql, mainid,objtype,jobid,joblevel,jobobjid,relationship); + } + } + saveChangeLog(wfid, nodeid, fwtype, user); + + WorkflowRecSimpleComInfo wfRecSimpleComInfo = new WorkflowRecSimpleComInfo(); + wfRecSimpleComInfo.removeCache(); + + WorkflowAdvancedComInfo wfAdvancedComInfo = new WorkflowAdvancedComInfo(); + wfAdvancedComInfo.removeCache(); + + Map data = new HashMap(); + data.put("mainid",mainid); + data.put("wfid",wfid); + data.put("nodeid",nodeid); + data.put("fwtype",fwtype); + data.put("modetype",modetype);//1、高级模式,0或者其他 为普通模式 + data.put("tabid",tabid);//高级模式--0、操作者 1、接收人范围 + + returnMap.put("success", "1"); + returnMap.put("msg", ""+ SystemEnv.getHtmlLabelName(18758,weaver.general.ThreadVarLanguage.getLang())+""); + returnMap.put("hidden",data); + + paramMap.put("mainid",mainid); + List conditions = new ArrayList(); + if("1".equals(modetype)) {//1、高级模式 + Map advanceData = getAdvanceData(paramMap,user); + if(advanceData.containsKey("conditions")){ + conditions = (List)advanceData.get("conditions"); + } + }else{ + Map baseSetData = getBaseSetData(paramMap,user); + if(baseSetData.containsKey("conditions")){ + conditions = (List)baseSetData.get("conditions"); + } + if(baseSetData.containsKey("groupitems")){ + returnMap.put("groupitems",baseSetData.get("groupitems")); + } + if(baseSetData.containsKey("hidden")){ + Map hidden = (Map)baseSetData.get("hidden"); + data.putAll(hidden); + } + returnMap.put("hidden",data); + } + returnMap.put("conditions",conditions); + return returnMap; + } + + /** + * 根据普通模式的接收人范围ID 、高级模式的接收人范围ID和操作者范围ID 做删除 + * @param user 操作用户 + * @param paramMap 其他参数 + * @return + */ + public Map deleteFwLimitSet(User user,Map paramMap){ + Map returnMap = new HashMap(); + String ids = Util.null2String(Util.null2String(paramMap.get("ids"))); //接收人范围、操作者的ID,多个使用英文逗号隔开 + if(ids.startsWith(","))ids = ids.substring(1); + if(ids.endsWith(","))ids = ids.substring(0,ids.length()-1); + + int wfid = Util.getIntValue(Util.null2String(paramMap.get("wfid")),0); + int nodeid = Util.getIntValue(Util.null2String(paramMap.get("nodeid")),0); + String fwtype = Util.null2String(Util.null2String(paramMap.get("fwtype"))); // 1、转发,2、意见征询,3、转办 + String modetype = Util.null2o(Util.null2String(paramMap.get("modetype"))); //1、高级模式,0或者其他 为普通模式 + + //高级模式才需要的参数 + int mainid = Util.getIntValue(Util.null2String(paramMap.get("mainid")),0); + int tabid = Util.getIntValue(Util.null2String(paramMap.get("tabid")),0); //高级模式--0、操作者 1、接收人范围 + + if("".equals(ids)){ + returnMap.put("success", "0"); + returnMap.put("msg", ""+ SystemEnv.getHtmlLabelName(10004352,weaver.general.ThreadVarLanguage.getLang())+"ids"+ SystemEnv.getHtmlLabelName(18622,weaver.general.ThreadVarLanguage.getLang())+""); + return returnMap; + } + + RecordSet rs = new RecordSet(); + String sql = ""; + if("1".equals(modetype)){//1、高级模式 + if(tabid == 1){//接收人范围 + if(mainid<0){ + sql = "select mainid from workflow_FwRecAdvanced where id in ("+ids+") "; + rs.execute(sql); + if(rs.next()){ + mainid = rs.getInt("mainid"); + } + } + sql = "delete from workflow_FwRecAdvanced where id in ("+ids+") "; + rs.execute(sql); + }else{//操作者 + if(mainid<0){ + sql = "select mainid from workflow_FwOperAdvanced where id in ("+ids+") "; + rs.execute(sql); + if(rs.next()){ + mainid = rs.getInt("mainid"); + } + } + sql = "delete from workflow_FwOperAdvanced where id in ("+ids+") "; + rs.execute(sql); + } + //同组操作者和接收人范围 都删干净了,则主表 一并删掉 + sql = "select id from workflow_FwRecAdvanced where mainid="+mainid+" union select id from workflow_FwOperAdvanced where mainid="+mainid; + rs.execute(sql); + if(!rs.next()){ + sql = "delete from workflow_FwAdvanced where id="+mainid; + rs.execute(sql); + } + }else{//0或者其他 为普通模式 + sql = "delete from workflow_FwRecSimple where id in ("+ids+") "; + rs.execute(sql); + } + saveChangeLog(wfid, nodeid, fwtype, user); + + WorkflowRecSimpleComInfo wfRecSimpleComInfo = new WorkflowRecSimpleComInfo(); + wfRecSimpleComInfo.removeCache(); + + WorkflowAdvancedComInfo wfAdvancedComInfo = new WorkflowAdvancedComInfo(); + wfAdvancedComInfo.removeCache(); + + Map data = new HashMap(); + data.put("mainid",mainid); + data.put("wfid",wfid); + data.put("nodeid",nodeid); + data.put("fwtype",fwtype); + data.put("modetype",modetype);//1、高级模式,0或者其他 为普通模式 + data.put("tabid",tabid);//高级模式--0、操作者 1、接收人范围 + + returnMap.put("success", "1"); + returnMap.put("hidden",data); + returnMap.put("msg", ""+ SystemEnv.getHtmlLabelName(20461,weaver.general.ThreadVarLanguage.getLang())+""); + + paramMap.put("mainid",mainid); + List conditions = new ArrayList(); + if("1".equals(modetype)) {//1、高级模式 + Map advanceData = getAdvanceData(paramMap,user); + if(advanceData.containsKey("conditions")){ + conditions = (List)advanceData.get("conditions"); + } + }else{ + Map baseSetData = getBaseSetData(paramMap,user); + if(baseSetData.containsKey("conditions")){ + conditions = (List)baseSetData.get("conditions"); + } + if(baseSetData.containsKey("groupitems")){ + returnMap.put("groupitems",baseSetData.get("groupitems")); + } + if(baseSetData.containsKey("hidden")){ + Map hidden = (Map)baseSetData.get("hidden"); + data.putAll(hidden); + } + returnMap.put("hidden",data); + } + returnMap.put("conditions",conditions); + return returnMap; + } + + /** + * 高级模式,根据主表ID 删除对应的接收人范围、操作者范围以及主表 + * @param user 操作用户 + * @param paramMap 其他参数 + * @return + */ + public Map deleteFwLimitSetByFwAdvanceId(User user,Map paramMap) { + Map returnMap = new HashMap(); + String ids = Util.null2String(Util.null2String(paramMap.get("ids"))); //主表ID,多个使用英文逗号隔开 + if(ids.startsWith(","))ids = ids.substring(1); + if(ids.endsWith(","))ids = ids.substring(0,ids.length()-1); + + int wfid = Util.getIntValue(Util.null2String(paramMap.get("wfid")),0); + int nodeid = Util.getIntValue(Util.null2String(paramMap.get("nodeid")),0); + String fwtype = Util.null2String(Util.null2String(paramMap.get("fwtype"))); // 1、转发,2、意见征询,3、转办 + String modetype = Util.null2o(Util.null2String(paramMap.get("modetype"))); //1、高级模式,0或者其他 为普通模式 + + if("".equals(ids)){ + returnMap.put("success", "0"); + returnMap.put("msg", ""+ SystemEnv.getHtmlLabelName(10004352,weaver.general.ThreadVarLanguage.getLang())+"ids"+ SystemEnv.getHtmlLabelName(18622,weaver.general.ThreadVarLanguage.getLang())+""); + return returnMap; + } + String sql = ""; + RecordSet rs = new RecordSet(); + //操作者 + sql = "delete from workflow_FwOperAdvanced where mainid in ("+ids+") "; + rs.execute(sql); + + //接收人范围 + sql = "delete from workflow_FwRecAdvanced where mainid in ("+ids+") "; + rs.execute(sql); + + //操作者与接收人范围 同组 + sql = "delete from workflow_FwAdvanced where id in ("+ids+") "; + rs.execute(sql); + + saveChangeLog(wfid, nodeid, fwtype, user); + + WorkflowRecSimpleComInfo wfRecSimpleComInfo = new WorkflowRecSimpleComInfo(); + wfRecSimpleComInfo.removeCache(); + + WorkflowAdvancedComInfo wfAdvancedComInfo = new WorkflowAdvancedComInfo(); + wfAdvancedComInfo.removeCache(); + + Map data = new HashMap(); + data.put("wfid",wfid); + data.put("nodeid",nodeid); + data.put("fwtype",fwtype); + data.put("modetype",modetype);//1、高级模式,0或者其他 为普通模式 + + returnMap.put("success", "1"); + returnMap.put("msg", ""+ SystemEnv.getHtmlLabelName(20461,weaver.general.ThreadVarLanguage.getLang())+""); + + List conditions = new ArrayList(); + Map baseSetData = getBaseSetData(paramMap,user); + if(baseSetData.containsKey("conditions")){ + conditions = (List)baseSetData.get("conditions"); + } + if(baseSetData.containsKey("groupitems")){ + returnMap.put("groupitems",baseSetData.get("groupitems")); + } + if(baseSetData.containsKey("hidden")){ + Map hidden = (Map)baseSetData.get("hidden"); + data.putAll(hidden); + } + returnMap.put("hidden",data); + returnMap.put("conditions",conditions); + return returnMap; + } + + /** + * 记录最后修改日期 + * @param wfid + * @param nodeid + * @param fwtype + * @param user + */ + public void saveChangeLog(int wfid,int nodeid,String fwtype,User user){ + String currentdate = TimeUtil.getCurrentDateString(); + String currenttime = TimeUtil.getOnlyCurrentTimeString(); + RecordSet rs = new RecordSet(); + String sql = "update workflow_FwLimitSet set lastoperator=?,lastoperatedate=?,lastoperatetime=? where fwtype='"+fwtype+"' and nodeid="+nodeid+" and wfid="+wfid+" "; + rs.executeUpdate(sql,user.getUID(),currentdate,currenttime); + } + + + public Map getBaseSetData(Map params,User user){ + Map apidatas = new HashMap(); + + int wfid = Util.getIntValue(Util.null2String(params.get("wfid")),0); + int nodeid = Util.getIntValue(Util.null2String(params.get("nodeid")),0); + String fwtype = Util.null2String(Util.null2String(params.get("fwtype"))); // 1、转发,2、意见征询,3、转办 + String modetype = Util.null2String(Util.null2String(params.get("modetype"))); + int mainid = 0; + String isopen = "0"; + String choiceoperator = ""; + RecordSet rs = new RecordSet(); + WfFwLimitTransMethod transMethod = new WfFwLimitTransMethod(); + Map baseMap = getLimitBaseSet(wfid,nodeid,fwtype,user); + if("".equals(modetype)){ + modetype = Util.null2o(Util.null2String(baseMap.get("modetype"))); + } + mainid = Util.getIntValue(Util.null2String(baseMap.get("mainid"))); + isopen = Util.null2o(Util.null2String(baseMap.get("isopen"))); + choiceoperator = Util.null2o(Util.null2String(baseMap.get("choiceoperator"))); + + //供前台发送请求传递用 + Map hiddenMap = new HashMap(); + hiddenMap.put("wfid",wfid); + hiddenMap.put("nodeid",nodeid); + hiddenMap.put("fwtype",fwtype); + hiddenMap.put("modetype",modetype); + hiddenMap.put("isopen",isopen); + hiddenMap.put("mainid",mainid); + hiddenMap.put("modetypeTip", SystemEnv.getHtmlLabelName(386088, user.getLanguage())); + hiddenMap.put("choiceoperator",choiceoperator); + hiddenMap.put("choiceoperatorTip", SystemEnv.getHtmlLabelName(501043, user.getLanguage())); + if("6".equals(fwtype)) { + hiddenMap.put("choiceoperatorTip", SystemEnv.getHtmlLabelName(521995, user.getLanguage())); + } + + List condition = new ArrayList(); + List condition2 = new ArrayList(); + Map conditionMap = new HashMap(); + if("1".equals(modetype)){//高级模式 + + conditionMap.put("title", SystemEnv.getHtmlLabelName(99,user.getLanguage())); + conditionMap.put("dataIndex","id1"); + conditionMap.put("key","id1"); + condition2.add(conditionMap); + + conditionMap = new HashMap(); + conditionMap.put("title",SystemEnv.getHtmlLabelName(386137,user.getLanguage())); + conditionMap.put("dataIndex","id2"); + conditionMap.put("key","id2"); + condition2.add(conditionMap); + condition.add(condition2); + + condition2 = new ArrayList(); + String sql = "select * from workflow_FwAdvanced where fwtype='"+fwtype+"' and nodeid="+nodeid+" and wfid="+wfid+" ORDER BY id"; + rs.execute(sql); + while (rs.next()){ + String id= rs.getString("id"); + String id_show = transMethod.getOperatorShow(id,user.getLanguage()+""); + String id2_show = transMethod.getRecLimitShow(id,user.getLanguage()+""); + + conditionMap = new HashMap(); + conditionMap.put("key",id); + conditionMap.put("id1",id_show); + conditionMap.put("id2",id2_show); + condition2.add(conditionMap); + } + condition.add(condition2); + }else{ + conditionMap = new HashMap(); + conditionMap.put("title",SystemEnv.getHtmlLabelName(386135,user.getLanguage())); + conditionMap.put("dataIndex","objtype"); + conditionMap.put("key","objtype"); + condition2.add(conditionMap); + + conditionMap = new HashMap(); + conditionMap.put("title",SystemEnv.getHtmlLabelName(345,user.getLanguage())); + conditionMap.put("dataIndex","objid"); + conditionMap.put("key","objid"); + condition2.add(conditionMap); + + conditionMap = new HashMap(); + conditionMap.put("title",SystemEnv.getHtmlLabelName(683,user.getLanguage())); + conditionMap.put("dataIndex","seclevel"); + conditionMap.put("key","seclevel"); + condition2.add(conditionMap); + + conditionMap = new HashMap(); + conditionMap.put("title",SystemEnv.getHtmlLabelName(386136,user.getLanguage())); + conditionMap.put("dataIndex","relationship"); + conditionMap.put("key","relationship"); + condition2.add(conditionMap); + condition.add(condition2); + + condition2 = new ArrayList(); + String sql = "select * from workflow_FwRecSimple where mainid="+mainid+" ORDER BY id"; + rs.execute(sql); + while (rs.next()){ + String id = rs.getString("id"); + String objtype = rs.getString("objtype"); + String objid = rs.getString("objid"); + String seclevel = rs.getString("seclevel"); + String seclevelMax = rs.getString("seclevelMax"); + String relationship = rs.getString("relationship"); + String rolelevel = rs.getString("rolelevel"); + String joblevel = rs.getString("joblevel"); + String jobobjid = rs.getString("jobobjid"); + + String para = objtype+"+"+rolelevel+"+"+joblevel+"+"+jobobjid+"+"+user.getLanguage(); + String objtype_show = transMethod.getObjTypeShow(objtype,user.getLanguage()+""); + String objid_show = transMethod.getObjIdsShow(objid,para); + String seclevel_show = transMethod.getSecLevelShow(Util.getIntValue(objtype),seclevel,seclevelMax); + String relationship_show=transMethod.getRelationshipShow(relationship,user.getLanguage()+""); + + conditionMap = new HashMap(); + conditionMap.put("key",id); + conditionMap.put("objtype",objtype_show); + conditionMap.put("objid",objid_show); + conditionMap.put("seclevel",seclevel_show); + conditionMap.put("relationship",relationship_show); + condition2.add(conditionMap); + } + condition.add(condition2); + } + + ConditionFactory conditionFactory = new ConditionFactory(user); + List items = new ArrayList(); + SearchConditionItem item = conditionFactory.createCondition(ConditionType.CHECKBOX,21738,"issynAll"); + item.setColSpan(8); + item.setFieldcol(16); + item.setLabelcol(8); + if(!"6".equals(fwtype)) { + items.add(item); + } + item = conditionFactory.createCondition(ConditionType.SWITCH,386133,"isopen"); + item.setValue(isopen); + item.setColSpan(8); + item.setFieldcol(16); + item.setLabelcol(8); + items.add(item); + + //转发 意见征询 传阅 + if("1".equals(fwtype) || "2".equals(fwtype) || "4".equals(fwtype) || "6".equals(fwtype)){ + int _labelId = 500745; + if("2".equals(fwtype))_labelId = 501045; + if("4".equals(fwtype))_labelId = 504414; + if("6".equals(fwtype))_labelId = 521994; + item = conditionFactory.createCondition(ConditionType.SWITCH,_labelId,"choiceoperator"); + item.setValue(choiceoperator); + item.setColSpan(8); + item.setFieldcol(16); + item.setLabelcol(8); + items.add(item); + } + + List options = new ArrayList(); + options.add(new SearchConditionOption("0",SystemEnv.getHtmlLabelName(18016, user.getLanguage()),"1".equals(modetype)?false:true)); + options.add(new SearchConditionOption("1",SystemEnv.getHtmlLabelName(19048, user.getLanguage()),"1".equals(modetype)?true:false)); + SearchConditionItem modetypeItem = conditionFactory.createCondition(ConditionType.SELECT,384810,"modetype",options); + modetypeItem.setDetailtype(3); //3:radio单选 + modetypeItem.setColSpan(8); + modetypeItem.setFieldcol(16); + modetypeItem.setLabelcol(8); + items.add(modetypeItem); + + apidatas.put("hidden",hiddenMap); + apidatas.put("groupitems", new SearchConditionGroup(SystemEnv.getHtmlLabelName(387260, user.getLanguage()),true,items)); + apidatas.put("conditions", condition); + apidatas.put("success", "1"); + return apidatas; + } + + /** + * 获取高级模式下的 操作者和接收人范围列表 + * @param params + * @param user + * @return + */ + public Map getAdvanceData(Map params,User user){ + Map apidatas = new HashMap(); + + int wfid = Util.getIntValue(Util.null2String(params.get("wfid")),0); + int nodeid = Util.getIntValue(Util.null2String(params.get("nodeid")),0); + String fwtype = Util.null2String(Util.null2String(params.get("fwtype"))); // 1、转发,2、意见征询,3、转办 + + int mainid = Util.getIntValue(Util.null2String(params.get("mainid"))); //workflow_FwAdvanced表的id + + List condition = new ArrayList(); + List condition2 = new ArrayList(); + Map conditionMap = new HashMap(); + WfFwLimitTransMethod transMethod = new WfFwLimitTransMethod(); + + //供前台发送请求传递用 + Map hiddenMap = new HashMap(); + hiddenMap.put("wfid",wfid); + hiddenMap.put("nodeid",nodeid); + hiddenMap.put("fwtype",fwtype); + hiddenMap.put("mainid",mainid); + + //操作者范围数据 + conditionMap = new HashMap(); + conditionMap.put("title",SystemEnv.getHtmlLabelName(130470,user.getLanguage())); + conditionMap.put("dataIndex","objtype"); + conditionMap.put("key","objtype"); + condition2.add(conditionMap); + + conditionMap = new HashMap(); + conditionMap.put("title",SystemEnv.getHtmlLabelName(345,user.getLanguage())); + conditionMap.put("dataIndex","objid"); + conditionMap.put("key","objid"); + condition2.add(conditionMap); + + conditionMap = new HashMap(); + conditionMap.put("title",SystemEnv.getHtmlLabelName(683,user.getLanguage())); + conditionMap.put("dataIndex","seclevel"); + conditionMap.put("key","seclevel"); + condition2.add(conditionMap); + condition.add(condition2); + + condition2 = new ArrayList(); + String sql = "select * from workflow_FwOperAdvanced where mainid = "+mainid+" ORDER BY id"; + RecordSet rs = new RecordSet(); + rs.execute(sql); + while(rs.next()){ + int id = rs.getInt("id"); + String objtype = rs.getString("objtype"); + String objid = rs.getString("objid"); + String rolelevel = rs.getString("rolelevel"); + String joblevel = rs.getString("joblevel"); + String jobobjid = rs.getString("jobobjid"); + String seclevel = rs.getString("seclevel"); + String seclevelMax = rs.getString("seclevelMax"); + + String objtype_show = transMethod.getObjTypeShow(objtype,user.getLanguage()+""); + String para = objtype+"+"+rolelevel+"+"+joblevel+"+"+jobobjid+"+"+user.getLanguage(); + String objid_show = transMethod.getObjIdsShow(objid,para); + String seclevel_show = transMethod.getSecLevelShow(Util.getIntValue(objtype),seclevel,seclevelMax); + + conditionMap = new HashMap(); + conditionMap.put("key",id+""); + conditionMap.put("objtype",objtype_show); + conditionMap.put("objid",objid_show); + conditionMap.put("seclevel",seclevel_show); + condition2.add(conditionMap); + } + condition.add(condition2); + + //接收人范围数据 + condition2 = new ArrayList(); + conditionMap = new HashMap(); + conditionMap.put("title",SystemEnv.getHtmlLabelName(386135,user.getLanguage())); + conditionMap.put("dataIndex","objtype"); + conditionMap.put("key","objtype"); + condition2.add(conditionMap); + + conditionMap = new HashMap(); + conditionMap.put("title",SystemEnv.getHtmlLabelName(345,user.getLanguage())); + conditionMap.put("dataIndex","objid"); + conditionMap.put("key","objid"); + condition2.add(conditionMap); + + conditionMap = new HashMap(); + conditionMap.put("title",SystemEnv.getHtmlLabelName(683,user.getLanguage())); + conditionMap.put("dataIndex","seclevel"); + conditionMap.put("key","seclevel"); + condition2.add(conditionMap); + + conditionMap = new HashMap(); + conditionMap.put("title",SystemEnv.getHtmlLabelName(386136,user.getLanguage())); + conditionMap.put("dataIndex","relationship"); + conditionMap.put("key","relationship"); + condition2.add(conditionMap); + condition.add(condition2); + + condition2 = new ArrayList(); + sql = "select * from workflow_FwRecAdvanced where mainid = "+mainid+" ORDER BY id"; + rs.execute(sql); + while(rs.next()){ + int id = rs.getInt("id"); + String objtype = rs.getString("objtype"); + String objid = rs.getString("objid"); + String rolelevel = rs.getString("rolelevel"); + String joblevel = rs.getString("joblevel"); + String jobobjid = rs.getString("jobobjid"); + String seclevel = rs.getString("seclevel"); + String seclevelMax = rs.getString("seclevelMax"); + String relationship = rs.getString("relationship"); + + String objtype_show = transMethod.getObjTypeShow(objtype,user.getLanguage()+""); + String para = objtype+"+"+rolelevel+"+"+joblevel+"+"+jobobjid+"+"+user.getLanguage(); + String objid_show = transMethod.getObjIdsShow(objid,para); + String seclevel_show = transMethod.getSecLevelShow(Util.getIntValue(objtype),seclevel,seclevelMax); + String relationship_show = transMethod.getRelationshipShow(relationship,user.getLanguage()+""); + + conditionMap = new HashMap(); + conditionMap.put("key",id+""); + conditionMap.put("objtype",objtype_show); + conditionMap.put("objid",objid_show); + conditionMap.put("seclevel",seclevel_show); + conditionMap.put("relationship",relationship_show); + condition2.add(conditionMap); + } + condition.add(condition2); + apidatas.put("conditions", condition); + apidatas.put("hidden",hiddenMap); + apidatas.put("success", "1"); + return apidatas; + } + + /** + * 允许选择节点参与人 作为 转发对象、意见征询对象 + * @param params + * @param user + * @return + */ + public Map canChoiceOperator(Map params,User user){ + Map apidatas = new HashMap(); + int wfid = Util.getIntValue(Util.null2String(params.get("wfid")),0); + int nodeid = Util.getIntValue(Util.null2String(params.get("nodeid")),0); + String fwtype = Util.null2String(Util.null2String(params.get("fwtype"))); // 1、转发,2、意见征询,3、转办 + String choiceoperator = this.choiceOperator(wfid,nodeid,fwtype)?"1":"0"; + apidatas.put("choiceoperator", choiceoperator); + apidatas.put("success", "1"); + return apidatas; + } + +} diff --git a/指定平行部门需求/sql.txt b/指定平行部门需求/sql.txt new file mode 100644 index 0000000..6f017e9 --- /dev/null +++ b/指定平行部门需求/sql.txt @@ -0,0 +1,7 @@ +INSERT INTO HtmlLabelInfo ( indexid,labelname, languageid ) VALUES ( 10006035,'平行部门', 7 ),(10006035,'Parallel departments',8),(10006035,'平行部門',9) + + +select id,departmentname from hrmdepartment where supdepid= +(select d.supdepid from HrmResource r join hrmdepartment d on r.departmentid=d.id where r.id='8') +and subcompanyid1 = (select subcompanyid1 from HrmResource where id='8') +and id !=(select departmentid from HrmResource where id='8') \ No newline at end of file diff --git a/指定平行部门需求/指定流转接收人可选范围设置添加选项-总部评估2人天.docx b/指定平行部门需求/指定流转接收人可选范围设置添加选项-总部评估2人天.docx new file mode 100644 index 0000000000000000000000000000000000000000..d8a4108f5ae1d37caa39f08983fdebbcacf80095 GIT binary patch literal 119522 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

+Y?LX@7s!~q4*%7nQpNd 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%0AbN&}-*5443a%Z$~dRM~Aq1-m^IT_|d+Q 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
VFIlevu6`BFx$_-B2r5r+24($;ci*K=AhJp%b( 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 literal 0 HcmV?d00001