package com.engine.workflow.cmd.codeMaintenance; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Map; import weaver.conn.RecordSet; import weaver.general.Util; import weaver.hrm.User; import weaver.hrm.company.DepartmentComInfo; import weaver.hrm.company.SubCompanyComInfo; import weaver.system.code.CodeBuild; import weaver.system.code.CoderBean; import weaver.systeminfo.SystemEnv; 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 com.engine.core.interceptor.Command; import com.engine.core.interceptor.CommandContext; /** * 预留编号新建页面信息 * @author longxx * */ public class GetReserveCodeNewInfosCmd implements Command>{ private Map params; private User user; protected String formId; protected String isBill; protected ConditionFactory conditionFactory; public GetReserveCodeNewInfosCmd(Map params,User user) { this.params = params; this.user = user; conditionFactory = new ConditionFactory(user); } @Override public Map execute(CommandContext commandContext) { return getReserveCodeNewInfos(); } /** * 获取预留编号新建页面信息 * */ public Map getReserveCodeNewInfos(){ Map finalReturnMap = new HashMap(); Map conditionInfos = new HashMap(); String workflowId = Util.null2String(params.get("workflowid")); boolean isFromForm = "1".equals(Util.null2String(params.get("isFromForm")));//是否由表单中进来 if(!isFromForm) { int subCompanyId = Util.getIntValue(Util.null2String(params.get("subCompanyId")),-1); subCompanyId = WorkflowCodeUtil.getSubComIdByWfId(workflowId,subCompanyId); String isFromPathSet = Util.null2String(params.get("isFromPathSet")); String codeType = "1"; //编号设置进来,校验流程编号权限 if ("1".equals(isFromPathSet)) { codeType = "2"; } int operateLevel = WorkflowCodeUtil.getCodeOperateLevel(user, subCompanyId, codeType); if (operateLevel < 0) { conditionInfos.put("newInfo_state", "noright"); return conditionInfos; } } //从表单过来的参数 String form_yearId = Util.null2String(params.get("yearId")); String form_monthId = Util.null2String(params.get("monthId")); String form_dateId = Util.null2String(params.get("dateId")); String form_fieldId = Util.null2String(params.get("fieldId")); String form_fieldValue = Util.null2String(params.get("fieldValue")); String form_supSubCompanyId = Util.null2String(params.get("supSubCompanyId")); String form_subCompanyId = Util.null2String(params.get("subCompanyId")); String form_departmentId = Util.null2String(params.get("departmentId")); List formYearIdList = Util.splitString2List(form_yearId, ","); List formMonthIdList = Util.splitString2List(form_monthId, ","); List formDateIdList = Util.splitString2List(form_dateId, ","); List formFieldIdList = Util.splitString2List(form_fieldId, ","); List formFieldValueList = Util.splitString2List(form_fieldValue, ","); List formSupSubcompanyIdList = Util.splitString2List(form_supSubCompanyId, ","); List formSubcompanyIdList = Util.splitString2List(form_subCompanyId, ","); List formDepartmentIdList = Util.splitString2List(form_departmentId, ","); int yearIndex = 0; int monthIndex = 0; int dateIndex = 0; int supSubCompanyIndex = 0; int subCompanyIndex = 0; int departmentIndex = 0; Map formInfo = WorkflowCodeUtil.getFormInfo(workflowId); isBill = Util.null2String(formInfo.get("isbill")); formId = Util.null2String(formInfo.get("formid")); Map> codeInfos = getCodeRegulateInfo(workflowId); List conCreteFieldList = codeInfos.get("concreteFields"); List codeValueList = codeInfos.get("codeValues"); List> groupList = new ArrayList>(); Map codeSetGroupItem = new HashMap(); Map seqSetGroupItem = new HashMap(); List codeSetItemList = new ArrayList(); List seqSetItemList = new ArrayList(); codeSetGroupItem.put("defaultshow", true); codeSetGroupItem.put("items", codeSetItemList); codeSetGroupItem.put("title", SystemEnv.getHtmlLabelName(83549, user.getLanguage())); seqSetGroupItem.put("defaultshow", true); seqSetGroupItem.put("items", seqSetItemList); seqSetGroupItem.put("title", SystemEnv.getHtmlLabelName(10000891, Util.getIntValue(user.getLanguage()))); groupList.add(codeSetGroupItem); groupList.add(seqSetGroupItem); //当前流水号 SearchConditionItem currentSeqId = conditionFactory.createCondition(ConditionType.INPUT, 125356, "currentSeqId"); currentSeqId.setViewAttr(1); currentSeqId.setFieldcol(16); currentSeqId.setLabelcol(6); Map cruuentSeqIdOtherParams = new HashMap(); cruuentSeqIdOtherParams.put("hasBorder", true); currentSeqId.setOtherParams(cruuentSeqIdOtherParams); seqSetItemList.add(currentSeqId); int strNum = 0;//记录字符串个数 int selectedMonthId = 0; int selectedYearId = 0; CodeBuild cbuild = new CodeBuild(Util.getIntValue(formId),isBill,Util.getIntValue(workflowId)); CoderBean cbean = cbuild.getFlowCBuild(); String dateSeqAlone = cbean.getDateSeqAlone();//1:日期单独流水 String dateSeqSelect = cbean.getDateSeqSelect();//获取日期单独流水方式 String dateSeqFieldId = cbean.getCorrespondDate();//获取日期单独流水字段 boolean seqYearExists = false; boolean seqMonthExists = false; //先遍历一遍,查看日期单独流水字段年月日,是否都存在编号组成中 for(int i = 0;i < conCreteFieldList.size();i++) { String conCreteField = conCreteFieldList.get(i); String codeValue = codeValueList.get(i); if(Util.null2String(dateSeqFieldId).equals(codeValue)) { if(conCreteField.equals("4")) { seqYearExists = true; }else if(conCreteField.equals("5")) { seqMonthExists = true; } } } for(int i = 0;i < conCreteFieldList.size();i++){ String conCreteField = conCreteFieldList.get(i); String codeValue = codeValueList.get(i);//codevalue存放的是字段的id,如果是文本类型,就是字符串或者流水号位数,如果是选择框,则为value Calendar today = Calendar.getInstance(); int yearIdToday = today.get(Calendar.YEAR); int monthIdToday = today.get(Calendar.MONTH) + 1; int dateIdToday = today.get(Calendar.DAY_OF_MONTH); if(conCreteField.equals("0")){//选择框 Map> selectInfos = getSelectInfos(codeValue, isBill);//这里的codevalue为字段id String selectItemName = "selectValue" + codeValue;//前端name组成为selectValue+字段id String selectValue = ""; if(isFromForm) { int index = formFieldIdList.indexOf(codeValue); if(index != -1) { selectValue = formFieldValueList.get(index); } } if(selectValue.equals("")){ selectValue = "0"; } SearchConditionItem selectItem = conditionFactory.createCondition(ConditionType.SELECT, 22755, selectItemName,getSelectOptions(selectInfos,selectValue)); Map otherParams = new HashMap(); otherParams.put("hasBorder", true); selectItem.setFieldcol(16); selectItem.setLabelcol(6); selectItem.setOtherParams(otherParams); if(isFromForm) selectItem.setViewAttr(1); codeSetItemList.add(selectItem); }else if(conCreteField.equals("1")){//部门 String deptItemName = "deptId"; if(codeValue.equals("-2")) deptItemName += "_2";//创建人部门 else deptItemName += codeValue;//来自表单字段,codeValue为deptid String deptId = ""; if(isFromForm) { deptId = formDepartmentIdList.get(departmentIndex); departmentIndex++; } SearchConditionItem deptItem = conditionFactory.createCondition(ConditionType.BROWSER, 124, deptItemName,"4"); deptItem.setViewAttr(isFromForm ? 1 : 3); deptItem.setRules("required|string"); deptItem.setFieldcol(16); deptItem.setLabelcol(6); if(!deptId.equals("")){ List> replaceDatas = new ArrayList>(); Map datas = getDefaultDept(deptId); replaceDatas.add(datas);//用于页面浏览框默认显示 deptItem.getBrowserConditionParam().setReplaceDatas(replaceDatas); } deptItem.getBrowserConditionParam().setHasBorder(true); codeSetItemList.add(deptItem); }else if(conCreteField.equals("2")){//分部 String subComItemName = "subComId"; if(codeValue.equals("-2")) subComItemName += "_2";//创建人分部 else subComItemName += codeValue;//来自表单字段 String subComId = ""; if(isFromForm) { subComId = formSubcompanyIdList.get(subCompanyIndex); subCompanyIndex++; } SearchConditionItem subComItem = conditionFactory.createCondition(ConditionType.BROWSER, 141, subComItemName,"164"); subComItem.setViewAttr(isFromForm ? 1 : 3); subComItem.setFieldcol(16); subComItem.setLabelcol(6); subComItem.setRules("required|string"); if(!subComId.equals("")){ List> replaceDatas = new ArrayList>(); Map datas = getDefaultSubCom(subComId); replaceDatas.add(datas); subComItem.getBrowserConditionParam().setReplaceDatas(replaceDatas); } subComItem.getBrowserConditionParam().setHasBorder(true); codeSetItemList.add(subComItem); }else if(conCreteField.equals("3")){//上级分部 String supSubComItemName = "supSubComId"; if(codeValue.equals("-2")) supSubComItemName += "_2";//创建人分部 else supSubComItemName += codeValue;//来自表单字段 String supSubComId = ""; if(isFromForm) { supSubComId = formSupSubcompanyIdList.get(supSubCompanyIndex); supSubCompanyIndex++; } SearchConditionItem supSubComItem = conditionFactory.createCondition(ConditionType.BROWSER, 22753, supSubComItemName,"164"); supSubComItem.setViewAttr(isFromForm ? 1 : 3); supSubComItem.setFieldcol(16); supSubComItem.setLabelcol(6); supSubComItem.setRules("required|string"); if(!supSubComId.equals("")){ List> replaceDatas = new ArrayList>(); Map datas = getDefaultSubCom(supSubComId); replaceDatas.add(datas); supSubComItem.getBrowserConditionParam().setReplaceDatas(replaceDatas); } supSubComItem.getBrowserConditionParam().setHasBorder(true); codeSetItemList.add(supSubComItem); }else if(conCreteField.equals("4")){//年 String yearItemName = getFieldMark("yearId", codeValue); String yearId = ""; if(isFromForm) { if(codeValue.equals("-2")) { yearId = yearIdToday + ""; } else { String fieldValue = Util.null2String(params.get("field" + codeValue)); yearId = fieldValue.split("-").length > 1 ? fieldValue.split("-")[0] : fieldValue; } } //获取默认选中值 String yearValue = getYearDefaultValue(yearId); selectedYearId = Util.getIntValue(yearValue); codeSetItemList.add(getYearItem(yearItemName, yearValue, isFromForm)); } if(conCreteField.equals("5")){//月 String yearItemName = getFieldMark("yearId", codeValue); String monthItemName = getFieldMark("monthId", codeValue); String yearId = ""; String monthId = ""; if(isFromForm) { if(codeValue.equals("-2")) { yearId = yearIdToday + ""; monthId = monthIdToday + ""; } else { String fieldValue = Util.null2String(params.get("field" + codeValue)); yearId = fieldValue.split("-").length > 1 ? fieldValue.split("-")[0] : fieldValue; monthId = fieldValue.split("-").length > 1 ? fieldValue.split("-")[1] : fieldValue; } } //获取默认选中月 String defaultSelectMonth = getMonthDefaultValue(monthId); //按月单独流水,当前字段为单独流水字段,且未设置年编号组成,补充一个年选择框,让用户选择年份 if("1".equals(dateSeqAlone) && dateSeqSelect.equals("2") && codeValue.equals(dateSeqFieldId) && !seqYearExists) { codeSetItemList.add(getYearItem(yearItemName, getYearDefaultValue(yearId), isFromForm)); } selectedMonthId = Util.getIntValue(defaultSelectMonth);//用户选中的月份 codeSetItemList.add(getMonthItem(monthItemName, defaultSelectMonth, isFromForm)); } if(conCreteField.equals("6")){//日 String yearItemName = getFieldMark("yearId", codeValue); String monthItemName = getFieldMark("monthId", codeValue); String dateItemName = getFieldMark("dateId", codeValue); String yearId = ""; String monthId = ""; String dateId = ""; if(isFromForm) { if(codeValue.equals("-2")) { yearId = yearIdToday + ""; monthId = monthIdToday + ""; dateId = dateIdToday + ""; } else { String fieldValue = Util.null2String(params.get("field" + codeValue)); yearId = fieldValue.split("-").length == 3 ? fieldValue.split("-")[0] : fieldValue; monthId = fieldValue.split("-").length == 3 ? fieldValue.split("-")[1] : fieldValue; dateId = fieldValue.split("-").length == 3 ? fieldValue.split("-")[2] : fieldValue; } } String defaultSelectDate = ""; if(!dateId.equals("")){ defaultSelectDate = dateId; }else{ String dateIdStr = ""; if(dateIdToday < 10) dateIdStr = "0" + dateIdToday; else dateIdStr = "" + dateIdToday; defaultSelectDate = dateIdStr; } //按日单独流水,当前字段为单独流水字段 if("1".equals(dateSeqAlone) && dateSeqSelect.equals("3") && codeValue.equals(dateSeqFieldId)) { //未设置年编号组成,补充一个年选择框,让用户选择年份 if(!seqYearExists) { codeSetItemList.add(getYearItem(yearItemName, getYearDefaultValue(yearId), isFromForm)); } if (!seqMonthExists) { codeSetItemList.add(getMonthItem(monthItemName, getMonthDefaultValue(monthId), isFromForm)); } } codeSetItemList.add(getDateItem(dateItemName, selectedYearId, selectedMonthId, defaultSelectDate, isFromForm)); }else if(conCreteField.equals("7")){//字符串 strNum++; Map otherParams = new HashMap(); String strItemName = "str_" + strNum; String labelName = SystemEnv.getHtmlLabelName(27903, user.getLanguage()) + strNum; otherParams.put("hasBorder", true); SearchConditionItem strItem = conditionFactory.createCondition(ConditionType.INPUT, 0, strItemName); strItem.setValue(codeValue); strItem.setLabel(labelName); strItem.setViewAttr(1); strItem.setOtherParams(otherParams); strItem.setFieldcol(16); strItem.setLabelcol(6); codeSetItemList.add(strItem); }else if(conCreteField.equals("8")){//这里获取流水号 //流水号 SearchConditionItem codeItem = conditionFactory.createCondition(ConditionType.INPUT, 383362, "flowcode"); codeItem.setViewAttr(3); codeItem.setFieldcol(16); codeItem.setLabelcol(6); codeItem.setRules("required|string"); seqSetItemList.add(codeItem); }else if(conCreteField.equals("9")){//字母 SearchConditionItem strItem = conditionFactory.createCondition(ConditionType.INPUT, 27903, "letter"); strItem.setValue(codeValue); strItem.setViewAttr(1); strItem.setFieldcol(16); strItem.setLabelcol(6); codeSetItemList.add(strItem); } } //描述,可编辑 SearchConditionItem descItem = conditionFactory.createCondition(ConditionType.TEXTAREA, 433, "desc"); descItem.setFieldcol(16); descItem.setLabelcol(6); seqSetItemList.add(descItem); conditionInfos.put("conditioninfo", groupList); finalReturnMap = conditionInfos; return finalReturnMap; } public String getFieldMark(String typeMark, String codeValue) { if(codeValue.equals("-2")) typeMark += "_2"; else typeMark += codeValue;//来自表单字段 return typeMark; } /** * 获取年默认选中值,未设置则选中当前日期 * @param yearId * @return */ public String getYearDefaultValue(String yearId) { Calendar today = Calendar.getInstance(); int yearIdToday = today.get(Calendar.YEAR); String yearValue = ""; if(!yearId.equals("")){ yearValue = yearId; }else{ yearValue = yearIdToday + ""; } return yearValue; } /** * 获取年组件 */ public SearchConditionItem getYearItem(String yearItemName, String yearValue, boolean isFromForm) { Map otherParamMap = new HashMap<>(); otherParamMap.put("format", "yyyy"); otherParamMap.put("hasBorder", true); SearchConditionItem yearItem = conditionFactory.createCondition(ConditionType.DATEPICKER, 445, yearItemName); yearItem.setValue(yearValue); yearItem.setFieldcol(10); yearItem.setLabelcol(6); yearItem.setOtherParams(otherParamMap); //if(isFromForm) yearItem.setViewAttr(1); return yearItem; } /** * 获取月默认选中值,未设置则选中当前月 * @param monthId * @return */ public String getMonthDefaultValue(String monthId) { Calendar today = Calendar.getInstance(); int monthIdToday = today.get(Calendar.MONTH) + 1; String defaultSelectMonth = ""; if(!monthId.equals("")){ defaultSelectMonth = monthId; }else{ defaultSelectMonth = monthIdToday + ""; } if (defaultSelectMonth.length() == 1) { defaultSelectMonth = "0" + defaultSelectMonth; } return defaultSelectMonth; } /** * 获取月组件 */ public SearchConditionItem getMonthItem(String monthItemName, String defaultSelectMonth, boolean isFromForm) { SearchConditionItem monthItem = conditionFactory.createCondition(ConditionType.SELECT, 6076, monthItemName,WorkflowCodeUtil.getMonthOptions(defaultSelectMonth)); monthItem.setFieldcol(8); monthItem.setLabelcol(6); Map otherParams = new HashMap(); otherParams.put("hasBorder", true); monthItem.setOtherParams(otherParams); monthItem.setValue(defaultSelectMonth); if(isFromForm) monthItem.setViewAttr(1); return monthItem; } /** * 获取日组件 * @param dateItemName * @param selectedYearId * @param selectedMonthId * @param defaultSelectDate * @param isFromForm * @return */ public SearchConditionItem getDateItem(String dateItemName, int selectedYearId, int selectedMonthId, String defaultSelectDate, boolean isFromForm) { if (selectedYearId <= 0) { selectedYearId = Util.getIntValue(getYearDefaultValue("")); } //月份未设置,取为31天的月 if (selectedMonthId <= 0) { selectedMonthId = 1; } SearchConditionItem dateItem = conditionFactory.createCondition(ConditionType.SELECT, 390, dateItemName,WorkflowCodeUtil.getDateOptions(defaultSelectDate,selectedYearId,selectedMonthId)); dateItem.setFieldcol(8); dateItem.setLabelcol(6); Map otherParams = new HashMap(); otherParams.put("hasBorder", true); dateItem.setOtherParams(otherParams); //只有一位,前面添加一个0 if (Util.null2String(defaultSelectDate).length() == 1) { defaultSelectDate = "0" + defaultSelectDate; } dateItem.setValue(defaultSelectDate); //if(isFromForm) dateItem.setViewAttr(1); return dateItem; } //获取下拉框选项 public static Map> getSelectInfos(String fieldId,String isBill){ Map> selectInfos = new HashMap>(); List selectNames = new ArrayList(); List selectValues = new ArrayList(); String sql = "select selectvalue,selectname from workflow_selectitem where fieldid=? and isbill=? order by listorder"; RecordSet rs = new RecordSet(); rs.executeQuery(sql, fieldId, isBill); while(rs.next()){ String selectValue = Util.null2String(rs.getString("selectvalue")); String selectName = Util.null2String(rs.getString("selectname")); selectNames.add(selectName); selectValues.add(selectValue); } selectInfos.put("selectNames", selectNames); selectInfos.put("selectValues", selectValues); return selectInfos; } //获取选择框流水的选项 public List getSelectOptions(Map> selectInfos,String defaultSelectValue){ List options = new ArrayList(); SearchConditionOption optionItem = null; List selectNames = selectInfos.get("selectNames"); List selectValues = selectInfos.get("selectValues"); String selectName = ""; String selectValue = ""; for(int i = 0;i < selectValues.size();i++){ selectName = selectNames.get(i); selectValue = selectValues.get(i); optionItem = new SearchConditionOption(selectValue,selectName,(selectValue.equals(defaultSelectValue)) ? true : false ); options.add(optionItem); } return options; } //得到编号组成 public Map> getCodeRegulateInfo(String workflowId){ Map> codeInfos = new HashMap>(); List conCreteFieldList = new ArrayList(); List codeValueList = new ArrayList(); List enableCodeList = new ArrayList(); CodeBuild cb = new CodeBuild(); boolean isWorkflowSeqAlone = cb.isWorkflowSeqAlone(new RecordSet(), Util.getIntValue(workflowId)); RecordSet rs = new RecordSet(); if(isWorkflowSeqAlone) { rs.executeQuery("select * from workflow_coderegulate where workflowId = ? order by codeorder", workflowId); } else { rs.executeQuery("select * from workflow_coderegulate where formid = ? and isbill = ? order by codeorder", formId, isBill); } while(rs.next()){ conCreteFieldList.add(rs.getString("concreteField")); codeValueList.add(rs.getString("codeValue")); enableCodeList.add(rs.getString("enablecode")); } codeInfos.put("concreteFields", conCreteFieldList); codeInfos.put("codeValues", codeValueList); codeInfos.put("enableCodes", enableCodeList); return codeInfos; } //获取选中选择框预览选项 public static String getSelectDefaultPreView(Map> selectInfos,String selectValue){ String returnStr = ""; List selectValues = selectInfos.get("selectValues"); List selectNames = selectInfos.get("selectNames"); for(int i = 0;i < selectValues.size();i++){ if(selectValues.get(i).equals(selectValue)){ returnStr = selectNames.get(i); } } return returnStr; } //用于默认显示部门 public Map getDefaultDept(String deptId){ Map deptInfoMap = new HashMap(); DepartmentComInfo depCom = new DepartmentComInfo(); String deptName = depCom.getDepartmentname(deptId); deptInfoMap.put("id", deptId); deptInfoMap.put("name", deptName); return deptInfoMap; } //获取默认分部,用于默认显示 public Map getDefaultSubCom(String subComId){ Map subComInfoMap = new HashMap(); SubCompanyComInfo subCom = new SubCompanyComInfo(); String subName = subCom.getSubCompanyname(subComId); subComInfoMap.put("id", subComId); subComInfoMap.put("name", subName); return subComInfoMap; } /** * 校验流水号,只能输入数字和-范围分隔符 * */ public String validateFlowCode(String flowCode){ String returnCode = ""; //1 判断有没有-字符 if(flowCode.indexOf("-") == -1){//没有 //判断字符串里面是否有非数字 int flowCodeNum = Util.getIntValue(flowCode,-1); if(flowCodeNum != -1){ if(flowCodeNum !=0 && flowCode.matches("^[0-9]+")){ returnCode = flowCodeNum + ""; } } }else{//有 String[] values = flowCode.split("-");// -5这样的解析成["","5"],也存在05-06这样的情况啊,这个时候需要解析 if(values.length == 2){ if(values[0].trim().matches("^[0-9]+")){ if(values[1].trim().matches("^[0-9]+")){ returnCode = Util.getIntValue(values[0].trim()) + "-" + Util.getIntValue(values[1].trim()); } } } if(values.length == 1){ if(values[0].trim().matches("^[0-9]+")){ returnCode = Util.getIntValue(values[0].trim()) + "-"; } } } return returnCode; } public Map getParams() { return params; } public void setParams(Map params) { this.params = params; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }