package weaver.hrm.excelimport; import com.engine.common.service.impl.HrmCommonServiceImpl; import com.engine.hrm.entity.RuleCodeType; import com.engine.hrm.util.CodeRuleManager; import com.engine.hrm.util.HrmTriggerUtil; import com.engine.hrm.util.face.HrmFaceCheckManager; import org.apache.commons.lang3.StringUtils; import weaver.conn.RecordSet; import weaver.general.BaseBean; import weaver.general.Util; import weaver.hrm.common.AjaxManager; import weaver.hrm.company.DepartmentComInfo; import weaver.hrm.company.SubCompanyComInfo; import weaver.matrix.MatrixUtil; import weaver.rtx.OrganisationCom; import weaver.systeminfo.SysMaintenanceLog; import weaver.systeminfo.SystemEnv; import weaver.hrm.common.DbFunctionUtil; /** * 分部部门信息类 * @author lvyi * */ public class HrmCompany extends BaseBean { private RecordSet recordSet=new RecordSet(); private OrganisationCom rtxService=new OrganisationCom();; //添加到rtx private int id; private String subcompanyname=""; private String departmentname=""; private String subcompanycode = ""; private Float subcompanyshoworder; private String departmentcode = ""; private Float departmentshoworder; private int userlanguage = 7; private int pid; private String operateType; private String message = ""; public void setPid(int pid) { this.pid = pid; } public void setUserLanguage(String userlanguage){ this.userlanguage = Util.getIntValue((String)userlanguage); } /** * 校验数据有效性 * @return */ public String valExcelData(){ String errorInfo = ""; if(Util.null2String(this.subcompanyname).length()==0){ errorInfo = SystemEnv.getHtmlLabelName(125704,userlanguage); return errorInfo; } if (StringUtils.isNotEmpty(operateType) && operateType.equals("add")) { if (!verifySubCompanyCode(subcompanycode)) return subcompanycode + "编号重复"; if (!verifyDeptCode(departmentcode)) return departmentcode + "编号重复"; } return errorInfo; } /** * 保存数据 */ public String save(){ boolean flag = false; try{ if(StringUtils.isNotEmpty(operateType)) { if (operateType.equals("add")) { int subcompanyid = 0; int departmentid = 0; if(Util.null2String(this.subcompanyname).length()>0){ //取分部 subcompanyid = getSubCompanyId(this.subcompanyname); } departmentid = getDeptId(this.departmentname,subcompanyid); if(Util.null2String(this.departmentname).length()>0){ if(departmentid!=0)flag=true; }else{ if(subcompanyid!=0)flag=true; } } else if (operateType.equals("update")) { int subcompanyid = updateSubCompany(); if (subcompanyid == -1) return String.valueOf(flag); int deptid = updateDept(subcompanyid); if (deptid == -1) return String.valueOf(flag); flag = true; } } }catch(Exception e){ writeLog(e); } return String.valueOf(flag); } private boolean verifySubCompanyCode(String code) { if (StringUtils.isEmpty(code)) return true; RecordSet recordSet = new RecordSet(); String sql = "select id from HrmSubCompany where subcompanycode = ?"; recordSet.executeQuery(sql, code); if (recordSet.getCounts() > 0) return false; return true; } private boolean verifySubCompanyCode(String code, String name, int supsubcomid) { if (StringUtils.isEmpty(code)) return true; RecordSet recordSet = new RecordSet(); String sql = "select id from HrmSubCompany where ltrim(rtrim(convToMultiLang(ltrim(rtrim(subcompanyname)),"+userlanguage+"))) = ? and supsubcomid = ?"; if("sqlserver".equalsIgnoreCase(recordSet.getDBType())){ sql = "select id from HrmSubCompany where ltrim(rtrim(dbo.convToMultiLang(ltrim(rtrim(subcompanyname)),"+userlanguage+"))) = ? and supsubcomid = ?"; } recordSet.executeQuery(sql, name, supsubcomid); if (recordSet.next()) { String id = recordSet.getString("id"); sql = "select id from HrmSubCompany where subcompanycode = ? and id != ?"; recordSet.executeQuery(sql, code, id); if (recordSet.getCounts() > 0) return false; return true; } return verifySubCompanyCode(code); } private boolean verifyDeptCode(String code) { if (StringUtils.isEmpty(code)) return true; RecordSet recordSet = new RecordSet(); String sql = "select id from HrmDepartment where departmentcode = ?"; recordSet.executeQuery(sql, code); if (recordSet.getCounts() > 0) return false; return true; } private boolean verifyDeptCode(String code, String name, int subcompanyid, int supdepid) { if (StringUtils.isEmpty(code)) return true; RecordSet recordSet = new RecordSet(); String sql = "select id from HrmDepartment where ltrim(rtrim(convToMultiLang(ltrim(rtrim(departmentname)),"+userlanguage+"))) = ? and subcompanyid1 = ? and supdepid = ?"; if("sqlserver".equalsIgnoreCase(recordSet.getDBType())){ sql = "select id from HrmDepartment where ltrim(rtrim(dbo.convToMultiLang(ltrim(rtrim(departmentname)),"+userlanguage+"))) = ? and subcompanyid1 = ? and supdepid = ?"; } recordSet.executeQuery(sql, name, subcompanyid, supdepid); if (recordSet.next()) { String id = recordSet.getString("id"); sql = "select id from HrmDepartment where departmentcode = ? and id != ?"; recordSet.executeQuery(sql, code, id); if (recordSet.getCounts() > 0) return false; return true; } return verifyDeptCode(code); } private int updateDept(int subcompanyid) { String deptNames[] = departmentname.split(">"); int currentId = 0; int parentId = 0; String departmentcode = ""; Float departmentshoworder = null; for (int i = 0; i < deptNames.length; i++) { if (StringUtils.isEmpty(deptNames[i])) continue; String sql = "select * from HrmDepartment where subcompanyid1="+ subcompanyid + " and ltrim(rtrim(convToMultiLang(ltrim(rtrim(departmentname)),"+userlanguage+")))='"+ deptNames[i].trim() + "' and supdepid=" + parentId +" and (canceled !=1 or canceled is null)"; if("sqlserver".equalsIgnoreCase(recordSet.getDBType())){ sql = "select * from HrmDepartment where subcompanyid1="+ subcompanyid + " and ltrim(rtrim(dbo.convToMultiLang(ltrim(rtrim(departmentname)),"+userlanguage+")))='"+ deptNames[i].trim() + "' and supdepid=" + parentId +" and (canceled !=1 or canceled is null)"; } currentId = getResultSetId(sql); if (currentId == 0) { // 部门不存在 // 不存在 this.setMessage("," + deptNames[i] + "部门不存在"); return -1; } if (i == deptNames.length - 1) { // 最后一层级 赋值编码和顺序 departmentcode = this.departmentcode; departmentshoworder = this.departmentshoworder; } if (StringUtils.isNotEmpty(departmentcode) || departmentshoworder != null) { recordSet.executeQuery(sql); recordSet.next(); if (departmentshoworder == null) departmentshoworder = Float.valueOf(Util.null2s(recordSet.getString("showorder"), "0")); if (StringUtils.isEmpty(departmentcode)) departmentcode = Util.null2String(recordSet.getString("departmentcode"), ""); if (verifyDeptCode(departmentcode, deptNames[i], subcompanyid, parentId)) { sql = "update hrmdepartment set departmentcode = ? , showorder = ? where ltrim(rtrim(convToMultiLang(ltrim(rtrim(departmentname)),"+userlanguage+"))) = ? and subcompanyid1 = ? and supdepid = ? and (canceled !=1 or canceled is null)"; if("sqlserver".equalsIgnoreCase(recordSet.getDBType())){ sql = "update hrmdepartment set departmentcode = ? , showorder = ? where ltrim(rtrim(dbo.convToMultiLang(ltrim(rtrim(departmentname)),"+userlanguage+"))) = ? and subcompanyid1 = ? and supdepid = ? and (canceled !=1 or canceled is null)"; } recordSet.executeUpdate(sql, departmentcode, departmentshoworder, deptNames[i], subcompanyid, parentId); } else { setMessage("," + departmentcode + "编号重复"); return -1; } } parentId = currentId; } return currentId; } private int updateSubCompany(){ String subcompanynames[] = subcompanyname.split(">"); int parentId = 0; int currentId = 0; String subcompanycode = ""; Float subcompanyshoworder = null; for (int i = 0; i < subcompanynames.length; i++) { if (StringUtils.isEmpty(subcompanynames[i])) continue; String sql = "select * from HrmSubCompany where ltrim(rtrim(convToMultiLang(ltrim(rtrim(subcompanyname)),"+userlanguage+")))='" + subcompanynames[i].trim() + "' and supsubcomid=" + parentId; if("sqlserver".equalsIgnoreCase(recordSet.getDBType())){ sql = "select * from HrmSubCompany where ltrim(rtrim(dbo.convToMultiLang(ltrim(rtrim(subcompanyname)),"+userlanguage+")))='" + subcompanynames[i].trim() + "' and supsubcomid=" + parentId; } currentId = getResultSetId(sql); if (currentId == 0) { // 不存在 this.setMessage("," + subcompanynames[i] + "分部不存在"); return -1; } if (i == subcompanynames.length - 1) { // 最后一层级 赋值编码和顺序 subcompanycode = this.subcompanycode; subcompanyshoworder = this.subcompanyshoworder; } // 如果编码和顺序不存在则不更新 if (StringUtils.isNotEmpty(subcompanycode) || subcompanyshoworder != null) { recordSet.executeQuery(sql); recordSet.next(); if (subcompanyshoworder == null) subcompanyshoworder = Float.valueOf(Util.null2s(recordSet.getString("showorder"), "0")); if (StringUtils.isEmpty(subcompanycode)) subcompanycode = Util.null2String(recordSet.getString("subcompanycode"), ""); if (verifySubCompanyCode(subcompanycode, subcompanynames[i], parentId)) { sql = "update HrmSubCompany set subcompanycode= ? , showorder = ? where ltrim(rtrim(convToMultiLang(ltrim(rtrim(subcompanyname)),"+userlanguage+"))) = ? and supsubcomid = ?"; if("sqlserver".equalsIgnoreCase(recordSet.getDBType())){ sql = "update HrmSubCompany set subcompanycode= ? , showorder = ? where ltrim(rtrim(dbo.convToMultiLang(ltrim(rtrim(subcompanyname)),"+userlanguage+"))) = ? and supsubcomid = ?"; } recordSet.executeUpdate(sql, subcompanycode, subcompanyshoworder, subcompanynames[i], parentId); } else { setMessage("," + subcompanycode + "编号重复"); return -1; } } parentId = currentId; } return currentId; } /** * 根据分部名称获取分部Id,不存在就创建 * @param subCompanyName 分部名称 eg:泛微广东>泛微深圳 * @return */ public int getSubCompanyId(String subcompanyname) { String subcompanynames[] = subcompanyname.split(">"); int currentId = 0; int parentId = 0; String sql = ""; String sqlInsert = ""; String subcompanycode = ""; Float subcompanyshoworder = null; for (int i = 0; i < subcompanynames.length; i++) { if(subcompanynames[i] ==null && subcompanynames[i].equals("")){ continue; } sql = "select id from HrmSubCompany where ltrim(rtrim(convToMultiLang(ltrim(rtrim(subcompanyname)),"+userlanguage+")))='" + subcompanynames[i].trim() + "' and supsubcomid=" + parentId; if("sqlserver".equalsIgnoreCase(recordSet.getDBType())){ sql = "select id from HrmSubCompany where ltrim(rtrim(dbo.convToMultiLang(ltrim(rtrim(subcompanyname)),"+userlanguage+")))='" + subcompanynames[i].trim() + "' and supsubcomid=" + parentId; } currentId = getResultSetId(sql); //added by wcd 2015-02-06 [限制分部数] if (currentId == 0) { if (i == subcompanynames.length - 1) { // 最后一层级 赋值编码和顺序 subcompanycode = this.subcompanycode; subcompanyshoworder = this.subcompanyshoworder; if (subcompanyshoworder == null) subcompanyshoworder = 0.00F; } if(AjaxManager.getData("", "getLnScCount;mf").equals("true")){ // 如果编码为空 自动生成编码 try { subcompanycode = CodeRuleManager.getCodeRuleManager().generateRuleCode(RuleCodeType.SUBCOMPANY, subcompanycode); } catch (Exception e) { setMessage("," + e.getMessage()); writeLog(e); return -1; } sqlInsert = "insert into HrmSubCompany(subcompanyname,subcompanydesc,companyid,supsubcomid,subcompanycode,showorder,"+DbFunctionUtil.getInsertColumnSql()+") values('" + subcompanynames[i] +"','"+subcompanynames[i]+"',1" + "," + parentId + ",'" + subcompanycode+ "'," + subcompanyshoworder + ","+DbFunctionUtil.getInsertColumnValueSql(new RecordSet().getDBType(), 1)+")"; // 创建 boolean isSuccess = execSql(sqlInsert); HrmTriggerUtil.generateSubcompanyPinyin(subcompanynames[i], null); currentId = getResultSetId(sql); HrmTriggerUtil.Tri_I_SubComKPICheckFlow(String.valueOf(currentId)); sql = "insert into leftmenuconfig (userid,infoid,visible,viewindex,resourceid,resourcetype,locked,lockedbyid,usecustomname,customname,customname_e) select distinct userid,infoid,visible,viewindex," + currentId + ",2,locked,lockedbyid,usecustomname,customname,customname_e from leftmenuconfig where resourcetype=1 and resourceid=1"; execSql(sql); sql = "insert into mainmenuconfig (userid,infoid,visible,viewindex,resourceid,resourcetype,locked,lockedbyid,usecustomname,customname,customname_e) select distinct userid,infoid,visible,viewindex," + currentId + ",2,locked,lockedbyid,usecustomname,customname,customname_e from mainmenuconfig where resourcetype=1 and resourceid=1"; execSql(sql); if(isSuccess){ //同步分部数据到矩阵 MatrixUtil.updateSubcompayData("" + currentId); HrmFaceCheckManager.sync(currentId+"",HrmFaceCheckManager.getOptInsert(),"hrm_import_subcompany",HrmFaceCheckManager.getOaSubcompany()); } insertSysLog(subcompanynames[i],"12"); } else { currentId = -1; } } parentId = currentId; if(currentId != -1) rtxService.addSubCompany(parentId); //同步RTX } return currentId; } /** * 获取部门id,不存在就创建 * @param deptNames 部门名称 * @param subCompanyId 所属分部id * @return */ public int getDeptId(String deptNames, int subCompanyId){ String deptName[] = deptNames.split(">"); int currentId = 0; int parentId = 0; String sql = ""; String sqlInsert = ""; String departmentcode = ""; Float departmentshoworder = null; for (int i = 0; i < deptName.length; i++) { if(deptName[i] == null || deptName[i].equals("")){ continue; } sql = "select id from HrmDepartment where subcompanyid1="+ subCompanyId + " and ltrim(rtrim(convToMultiLang(ltrim(rtrim(departmentname)),"+userlanguage+")))='"+ deptName[i].trim() + "' and supdepid=" + parentId +" and (canceled !=1 or canceled is null)"; if("sqlserver".equalsIgnoreCase(recordSet.getDBType())){ sql = "select id from HrmDepartment where subcompanyid1="+ subCompanyId + " and ltrim(rtrim(dbo.convToMultiLang(ltrim(rtrim(departmentname)),"+userlanguage+")))='"+ deptName[i].trim() + "' and supdepid=" + parentId +" and (canceled !=1 or canceled is null)"; } currentId = getResultSetId(sql); if (currentId == 0) { if (i == deptName.length -1) { departmentcode = this.departmentcode; departmentshoworder = this.departmentshoworder; if (departmentshoworder == null) departmentshoworder = 0.00F; } // 如果编码为空 自动生成编码 departmentcode = ""; try { departmentcode = CodeRuleManager.getCodeRuleManager().generateRuleCode(RuleCodeType.DEPARTMENT, String.valueOf(subCompanyId), departmentcode,String.valueOf(parentId)); } catch (Exception e) { setMessage("," + e.getMessage()); writeLog(e); return -1; } sqlInsert = "insert into HrmDepartment (departmentname,Departmentmark,subcompanyid1,supdepid,departmentcode,showorder,"+DbFunctionUtil.getInsertColumnSql()+") values('" + deptName[i]+"','"+deptName[i]+"',"+ subCompanyId+ ","+ parentId + ",'"+ departmentcode + "',"+ departmentshoworder + ","+DbFunctionUtil.getInsertColumnValueSql(new RecordSet().getDBType(), 1)+")"; // 创建 boolean isSuccess = execSql(sqlInsert); HrmTriggerUtil.generateDepartmentPinyin(deptName[i], null); currentId = getResultSetId(sql); HrmTriggerUtil.Tri_I_DeptKPICheckFlow(String.valueOf(currentId)); if(isSuccess){ //同步部门数据到矩阵 MatrixUtil.updateDepartmentData("" + currentId); HrmFaceCheckManager.sync(currentId+"",HrmFaceCheckManager.getOptInsert(),"hrm_import_deptment",HrmFaceCheckManager.getOaDepartment()); } insertSysLog(deptName[i],"12"); rtxService.addDepartment(currentId); //同步RTX } parentId = currentId; } return currentId; } /** * 获得查询结果Id * @param sql 查询语句 * @return */ public int getResultSetId(String sql) { int currentId = 0; recordSet.execute(sql); try { while (recordSet.next()) { currentId = recordSet.getInt("id"); } } catch (Exception e) { e.printStackTrace(); } return currentId; } /** * 执行插入操作 * @param sql * @return */ public boolean execSql(String sql) { if(recordSet.execute(sql)){ return true; } else{ return false; } } public void removeCache(){ try{ MatrixUtil.sysSubcompayData(); MatrixUtil.sysDepartmentData(); SubCompanyComInfo SubCompanyComInfo = new SubCompanyComInfo(); SubCompanyComInfo.removeCompanyCache(); DepartmentComInfo DepartmentComInfo = new DepartmentComInfo(); DepartmentComInfo.removeCompanyCache(); //初始化应用分权 new weaver.hrm.appdetach.AppDetachComInfo().initSubDepAppData(); }catch (Exception e) { writeLog(e); } } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getSubcompanyname() { return subcompanyname; } public void setSubcompanyname(String subcompanyname) { this.subcompanyname = subcompanyname; } public String getDepartmentname() { return departmentname; } public void setDepartmentname(String departmentname) { this.departmentname = departmentname; } public String getSubcompanycode() { return subcompanycode; } public void setSubcompanycode(String subcompanycode) { this.subcompanycode = subcompanycode; } public Float getSubcompanyshoworder() { return subcompanyshoworder; } public void setSubcompanyshoworder(Float subcompanyshoworder) { this.subcompanyshoworder = subcompanyshoworder; } public String getDepartmentcode() { return departmentcode; } public void setDepartmentcode(String departmentcode) { this.departmentcode = departmentcode; } public Float getDepartmentshoworder() { return departmentshoworder; } public void setDepartmentshoworder(Float departmentshoworder) { this.departmentshoworder = departmentshoworder; } public String getOperateType() { return operateType; } public void setOperateType(String operateType) { this.operateType = operateType; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } private void insertSysLog(String name, String operateItem) { SysMaintenanceLog syslog = new SysMaintenanceLog(); syslog.resetParameter(); syslog.setRelatedId(pid); syslog.setOperateType("-1"); syslog.setOperateItem(operateItem); syslog.setOperateUserid(0); syslog.setRelatedName(name); try { syslog.setSysLogInfo(); } catch (Exception e) { writeLog(e); } } }