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 0000000..d8a4108 --- /dev/null +++ b/指定平行部门需求/指定流转接收人可选范围设置添加选项-总部评估2人天.docx @@ -0,0 +1,7 @@ + + + +需求如下: +指定流转 -- 接收人可选范围 -- 范围设置 +接收人类型添加:平行部门(直接上级部门的所有下级部门) +范围关系:包含或排除