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 ) ;
}
}
}