@ -2,6 +2,8 @@ package com.engine.organization.service.impl;
import com.api.browser.bean.SearchConditionGroup ;
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.util.HrmFieldSearchConditionComInfo ;
import com.cloudstore.eccom.result.WeaResultMsg ;
@ -13,10 +15,8 @@ import com.engine.organization.entity.company.bo.CompBO;
import com.engine.organization.entity.company.po.CompPO ;
import com.engine.organization.entity.department.bo.DepartmentBO ;
import com.engine.organization.entity.department.po.DepartmentPO ;
import com.engine.organization.entity.fieldset.param.TransferDataParam ;
import com.engine.organization.entity.hrmresource.bo.HrmRelationBO ;
import com.engine.organization.entity.hrmresource.param.HrmRelationSaveParam ;
import com.engine.organization.entity.hrmresource.param.HrmResourceSearchParam ;
import com.engine.organization.entity.hrmresource.param.SearchTemplateParam ;
import com.engine.organization.entity.hrmresource.po.HrmRelationPO ;
import com.engine.organization.entity.hrmresource.po.SearchTemplatePO ;
@ -26,6 +26,7 @@ import com.engine.organization.entity.job.bo.JobBO;
import com.engine.organization.entity.job.po.JobPO ;
import com.engine.organization.entity.searchtree.SearchTree ;
import com.engine.organization.entity.searchtree.SearchTreeParams ;
import com.engine.organization.enums.HrmGroupEnum ;
import com.engine.organization.mapper.comp.CompMapper ;
import com.engine.organization.mapper.department.DepartmentMapper ;
import com.engine.organization.mapper.hrmresource.HrmRelationMapper ;
@ -49,7 +50,6 @@ import weaver.conn.RecordSet;
import weaver.general.StringUtil ;
import weaver.general.Util ;
import weaver.hrm.definedfield.HrmFieldManager ;
import weaver.systeminfo.SystemEnv ;
import java.util.* ;
import java.util.stream.Collectors ;
@ -109,10 +109,9 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic
}
@Override
public Map < String , Object > listPage ( HrmResourceSearchParam params ) {
public Map < String , Object > listPage ( Map< String , Object > params ) {
OrganizationWeaTable < HrmResourceVO > table = new OrganizationWeaTable < > ( user , HrmResourceVO . class ) ;
Map < String , Object > searchParams = new HashMap < > ( ) ;
String sqlWhere = buildSqlWhere ( searchParams ) ;
String sqlWhere = buildSqlWhere ( params ) ;
table . setSqlwhere ( sqlWhere ) ;
WeaResultMsg result = new WeaResultMsg ( false ) ;
result . putAll ( table . makeDataResult ( ) ) ;
@ -151,11 +150,11 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic
List < String > personalFieldsBuilder = new ArrayList < > ( ) ;
List < String > workFieldsBuilder = new ArrayList < > ( ) ;
for ( String fieldName : split ) {
if ( fieldName . startsWith ( "-1" ) ) {
if ( fieldName . startsWith ( HrmGroupEnum . HRM_BASIC . getGroupType ( ) . toString ( ) ) ) {
basicFieldsBuilder . add ( fieldName . substring ( fieldName . lastIndexOf ( "_" ) + 1 ) ) ;
} else if ( fieldName . startsWith ( "1" ) ) {
} else if ( fieldName . startsWith ( HrmGroupEnum . HRM_PERSONAL . getGroupType ( ) . toString ( ) ) ) {
personalFieldsBuilder . add ( fieldName . substring ( fieldName . lastIndexOf ( "_" ) + 1 ) ) ;
} else if ( fieldName . startsWith ( "3" ) ) {
} else if ( fieldName . startsWith ( HrmGroupEnum . HRM_WORK . getGroupType ( ) . toString ( ) ) ) {
workFieldsBuilder . add ( fieldName . substring ( fieldName . lastIndexOf ( "_" ) + 1 ) ) ;
}
}
@ -173,6 +172,7 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic
@Override
public Map < String , Object > getSearchCondition ( Map < String , Object > params ) {
String templateId = Util . null2String ( params . get ( "templateId" ) ) ;
String selectKeys = Util . null2String ( params . get ( "selectKeys" ) ) ;
if ( StringUtils . isBlank ( templateId ) ) {
templateId = "-1" ;
}
@ -182,30 +182,19 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic
// 穿梭框ID, 展示所选字段信息
HrmFieldSearchConditionComInfo hrmFieldSearchConditionComInfo = new HrmFieldSearchConditionComInfo ( ) ;
if ( "-1" . equals ( templateId ) ) {
if ( StringUtils . isNotBlank ( selectKeys ) ) {
SearchTemplatePO templatePO = buildSearchTemplateByFields ( selectKeys ) ;
buildSearchConditionGroup ( templatePO , hrmFieldSearchConditionComInfo , addGroups ) ;
} else {
// 未选择模板展示默认模板搜索条件
List < SearchConditionItem > searchConditionItems = new ArrayList < > ( ) ;
List < CusFormFieldPO > hrmFieldsByScopeId = getSystemDataMapper ( ) . getHrmFieldsByScopeId ( "-1" ) ;
createConditionItems ( hrmFieldSearchConditionComInfo , hrmFieldsByScopeId , searchConditionItems ) ;
if ( CollectionUtils . isNotEmpty ( searchConditionItems ) ) {
addGroups . add ( new SearchConditionGroup ( "基本信息" , true , searchConditionItems ) ) ;
if ( CollectionUtils . isNotEmpty ( allConditions ) ) {
addGroups . add ( allConditions . get ( 0 ) ) ;
}
}
} else {
// 选择模板则遍历所选模板所选字段
SearchTemplatePO searchTemplateById = getHrmResourceMapper ( ) . getSearchTemplateById ( templateId ) ;
String [ ] basicFields = Util . null2String ( searchTemplateById . getBasicFields ( ) ) . split ( "," ) ;
if ( basicFields . length > 0 ) {
getTemplateItems ( hrmFieldSearchConditionComInfo , addGroups , "基本信息" , - 1 , basicFields ) ;
}
String [ ] personalFields = Util . null2String ( searchTemplateById . getPersonalFields ( ) ) . split ( "," ) ;
if ( personalFields . length > 0 ) {
getTemplateItems ( hrmFieldSearchConditionComInfo , addGroups , "个人信息" , 1 , personalFields ) ;
}
String [ ] workFields = Util . null2String ( searchTemplateById . getWorkFields ( ) ) . split ( "," ) ;
if ( workFields . length > 0 ) {
getTemplateItems ( hrmFieldSearchConditionComInfo , addGroups , "工作信息" , 3 , workFields ) ;
}
buildSearchConditionGroup ( searchTemplateById , hrmFieldSearchConditionComInfo , addGroups ) ;
}
apiDatas . put ( "defaultcondition" , addGroups ) ;
apiDatas . put ( "conditions" , allConditions ) ;
@ -342,61 +331,39 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic
* @return
* /
private String buildSqlWhere ( Map < String , Object > params ) {
HrmFieldSearchConditionComInfo hrmFieldSearchConditionComInfo = new HrmFieldSearchConditionComInfo ( ) ;
List < SearchConditionItem > conditionItems = new ArrayList < > ( ) ;
List < CusFormFieldPO > hrmFieldsByScopeId = getSystemDataMapper ( ) . getHrmFieldsByScopeId ( HrmGroupEnum . HRM_BASIC . getGroupType ( ) . toString ( ) ) ;
createConditionItems ( hrmFieldSearchConditionComInfo , hrmFieldsByScopeId , conditionItems ) ;
hrmFieldsByScopeId = getSystemDataMapper ( ) . getHrmFieldsByScopeId ( HrmGroupEnum . HRM_PERSONAL . getGroupType ( ) . toString ( ) ) ;
createConditionItems ( hrmFieldSearchConditionComInfo , hrmFieldsByScopeId , conditionItems ) ;
hrmFieldsByScopeId = getSystemDataMapper ( ) . getHrmFieldsByScopeId ( HrmGroupEnum . HRM_WORK . getGroupType ( ) . toString ( ) ) ;
createConditionItems ( hrmFieldSearchConditionComInfo , hrmFieldsByScopeId , conditionItems ) ;
Map < String , SearchConditionItem > allFieldsMap = conditionItems . stream ( ) . collect ( Collectors . toMap ( item - > item . getDomkey ( ) [ 0 ] , item - > item , ( k1 , k2 ) - > k1 ) ) ;
DBType dbType = DBType . get ( new RecordSet ( ) . getDBType ( ) ) ;
String sqlWhere = " where 1=1 " ;
//String sqlWhere = "";
StringBuilder sb = new StringBuilder ( " where 1=1 " ) ;
for ( Map . Entry < String , Object > entry : params . entrySet ( ) ) {
String value = Util . null2String ( entry . getValue ( ) ) ;
if ( StringUtils . isBlank ( value ) ) {
continue ;
}
String key = entry . getKey ( ) ;
Object value = entry . getValue ( ) ;
SearchConditionItem searchConditionItem = allFieldsMap . get ( key ) ;
buildDynamicSql ( searchConditionItem , key , value , sb , dbType ) ;
// 根据不同的类型,不同的查询方式
}
//String lastName = params.getLastName();
//if (StringUtils.isNotBlank(lastName)) {
// sqlWhere += " AND t.lastname " + dbType.like(lastName);
//}
//Long companyId = params.getCompanyId();
//if (null != companyId) {
// sqlWhere += " AND t.subcompanyid1 = '" + companyId + "'";
//}
//Long departmentId = params.getDepartmentId();
//if (null != departmentId) {
// sqlWhere += " AND t.departmentid = '" + departmentId + "'";
//}
//Long ecCompany = params.getEcCompany();
//if (null != ecCompany) {
// sqlWhere += " AND t.subcompanyid1 = '" + ecCompany + "'";
//}
//Long ecDepartment = params.getEcDepartment();
//if (null != ecDepartment) {
// sqlWhere += " AND t.departmentid = '" + ecDepartment + "'";
//}
//String telephone = params.getTelephone();
//if (StringUtils.isNotBlank(telephone)) {
// sqlWhere += " AND t.telephone " + dbType.like(telephone);
//}
//String mobile = params.getMobile();
//if (StringUtils.isNotBlank(mobile)) {
// sqlWhere += " AND t.mobile " + dbType.like(mobile);
//}
//Long jobTitle = params.getJobTitle();
//if (null != jobTitle) {
// JobPO ecJobTitleByJobId = JobBO.getEcJobTitleByJobId(jobTitle);
// if (null != ecJobTitleByJobId) {
// sqlWhere += " AND t.subcompanyid1 = '" + ecJobTitleByJobId.getEcCompany() + "'";
// sqlWhere += " AND t.departmentid = '" + ecJobTitleByJobId.getEcDepartment() + "'";
// sqlWhere += " AND t.jobtitle = '" + ecJobTitleByJobId.getEcJobTitle() + "'";
// } else {
// sqlWhere = " where 1 = 2 ";
// }
//}
// 分权查询
DetachUtil detachUtil = new DetachUtil ( user ) ;
String parentCompanyIds = detachUtil . getJclRoleLevels ( ) ;
if ( detachUtil . isDETACH ( ) ) {
s qlWhere + = " And t.subcompanyid1 in(" + parentCompanyIds + ")" ;
sb . append ( " And t.subcompanyid1 in(" ) . append ( parentCompanyIds ) . append ( ")" ) ;
}
return s qlWhere ;
return sb . toString ( ) ;
}
public List < SearchTree > getFilterCompany ( String id , String type , String keyword ) {
@ -588,6 +555,11 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic
return templates ;
}
/ * *
* 获 取 所 有 搜 索 字 段 信 息 构 建 的 高 级 搜 索 表 单
*
* @return
* /
public List < SearchConditionGroup > getAllConditions ( ) {
HrmFieldSearchConditionComInfo hrmFieldSearchConditionComInfo = new HrmFieldSearchConditionComInfo ( ) ;
List < SearchConditionGroup > addGroups = new ArrayList < > ( ) ;
@ -596,21 +568,21 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic
List < SearchConditionItem > workConditionItems = new ArrayList < > ( ) ;
// 基本信息:-1
List < CusFormFieldPO > hrmFieldsByScopeId = getSystemDataMapper ( ) . getHrmFieldsByScopeId ( "-1" ) ;
List < CusFormFieldPO > hrmFieldsByScopeId = getSystemDataMapper ( ) . getHrmFieldsByScopeId ( HrmGroupEnum . HRM_BASIC . getGroupType ( ) . toString ( ) ) ;
createConditionItems ( hrmFieldSearchConditionComInfo , hrmFieldsByScopeId , basicConditionItems ) ;
if ( CollectionUtils . isNotEmpty ( basicConditionItems ) ) {
addGroups . add ( new SearchConditionGroup ( "基本信息" , true , basicConditionItems ) ) ;
}
// 个人信息: 1
hrmFieldsByScopeId = getSystemDataMapper ( ) . getHrmFieldsByScopeId ( "1" ) ;
hrmFieldsByScopeId = getSystemDataMapper ( ) . getHrmFieldsByScopeId ( HrmGroupEnum . HRM_PERSONAL . getGroupType ( ) . toString ( ) ) ;
createConditionItems ( hrmFieldSearchConditionComInfo , hrmFieldsByScopeId , personalConditionItems ) ;
if ( CollectionUtils . isNotEmpty ( personalConditionItems ) ) {
addGroups . add ( new SearchConditionGroup ( "个人信息" , true , personalConditionItems ) ) ;
}
// 工作信息: 3
hrmFieldsByScopeId = getSystemDataMapper ( ) . getHrmFieldsByScopeId ( "3" ) ;
hrmFieldsByScopeId = getSystemDataMapper ( ) . getHrmFieldsByScopeId ( HrmGroupEnum . HRM_WORK . getGroupType ( ) . toString ( ) ) ;
createConditionItems ( hrmFieldSearchConditionComInfo , hrmFieldsByScopeId , workConditionItems ) ;
if ( CollectionUtils . isNotEmpty ( workConditionItems ) ) {
addGroups . add ( new SearchConditionGroup ( "工作信息" , true , workConditionItems ) ) ;
@ -640,21 +612,11 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic
hrmFieldBean . setIsFormField ( true ) ;
SearchConditionItem searchConditionItem = hrmFieldSearchConditionComInfo . getSearchConditionItem ( hrmFieldBean , user ) ;
conditionItems . add ( searchConditionItem ) ;
}
// 如果为下拉框,添加一条空选项
if ( searchConditionItem . getConditionType ( ) . equals ( ConditionType . SELECT ) ) {
addEmptyForSelect ( searchConditionItem ) ;
}
/ * *
* 构 建 穿 梭 框 字 段
*
* @param formFields
* @param dataParamList
* @param title
* /
private void createTransferData ( List < CusFormFieldPO > formFields , List < TransferDataParam > dataParamList , String title ) {
for ( CusFormFieldPO cusFormFieldPO : formFields ) {
String id = cusFormFieldPO . getTableName ( ) + "_" + cusFormFieldPO . getScopeId ( ) + "_" + cusFormFieldPO . getFieldId ( ) ;
String label = Util . toScreen ( SystemEnv . getHtmlLabelName ( Integer . parseInt ( cusFormFieldPO . getFieldLabel ( ) ) , user . getLanguage ( ) ) , user . getLanguage ( ) ) ;
dataParamList . add ( TransferDataParam . builder ( ) . id ( id ) . label ( label ) . title ( title ) . build ( ) ) ;
}
}
@ -691,6 +653,10 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic
hrmFieldBean . setIsScope ( false ) ;
SearchConditionItem searchConditionItem = hrmFieldSearchConditionComInfo . getSearchConditionItem ( hrmFieldBean , user ) ;
conditionItems . add ( searchConditionItem ) ;
// 如果为下拉框,添加一条空选项
if ( searchConditionItem . getConditionType ( ) . equals ( ConditionType . SELECT ) ) {
addEmptyForSelect ( searchConditionItem ) ;
}
}
if ( CollectionUtils . isNotEmpty ( conditionItems ) ) {
addGroups . add ( new SearchConditionGroup ( title , true , conditionItems ) ) ;
@ -699,4 +665,153 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic
throw new RuntimeException ( e ) ;
}
}
/ * *
* 根 据 所 选 字 段 信 息 , 构 建 搜 素 模 板 对 象
*
* @param fields
* @return
* /
private SearchTemplatePO buildSearchTemplateByFields ( String fields ) {
SearchTemplatePO templatePO = new SearchTemplatePO ( ) ;
String [ ] split = fields . split ( "," ) ;
if ( split . length > 0 ) {
List < String > basicFieldsBuilder = new ArrayList < > ( ) ;
List < String > personalFieldsBuilder = new ArrayList < > ( ) ;
List < String > workFieldsBuilder = new ArrayList < > ( ) ;
for ( String fieldName : split ) {
if ( fieldName . startsWith ( HrmGroupEnum . HRM_BASIC . getGroupType ( ) . toString ( ) ) ) {
basicFieldsBuilder . add ( fieldName . substring ( fieldName . lastIndexOf ( "_" ) + 1 ) ) ;
} else if ( fieldName . startsWith ( HrmGroupEnum . HRM_PERSONAL . getGroupType ( ) . toString ( ) ) ) {
personalFieldsBuilder . add ( fieldName . substring ( fieldName . lastIndexOf ( "_" ) + 1 ) ) ;
} else if ( fieldName . startsWith ( HrmGroupEnum . HRM_WORK . getGroupType ( ) . toString ( ) ) ) {
workFieldsBuilder . add ( fieldName . substring ( fieldName . lastIndexOf ( "_" ) + 1 ) ) ;
}
}
templatePO . setBasicFields ( basicFieldsBuilder . toString ( ) ) ;
templatePO . setPersonalFields ( personalFieldsBuilder . toString ( ) ) ;
templatePO . setWorkFields ( workFieldsBuilder . toString ( ) ) ;
}
return templatePO ;
}
/ * *
* 根 据 搜 索 模 板 对 象 , 构 建 搜 索 条 件 表 单
*
* @param templatePO
* @param hrmFieldSearchConditionComInfo
* @param addGroups
* /
private void buildSearchConditionGroup ( SearchTemplatePO templatePO , HrmFieldSearchConditionComInfo hrmFieldSearchConditionComInfo , List < SearchConditionGroup > addGroups ) {
String [ ] basicFields = Util . null2String ( templatePO . getBasicFields ( ) ) . split ( "," ) ;
if ( basicFields . length > 0 ) {
getTemplateItems ( hrmFieldSearchConditionComInfo , addGroups , "基本信息" , HrmGroupEnum . HRM_BASIC . getGroupType ( ) , basicFields ) ;
}
String [ ] personalFields = Util . null2String ( templatePO . getPersonalFields ( ) ) . split ( "," ) ;
if ( personalFields . length > 0 ) {
getTemplateItems ( hrmFieldSearchConditionComInfo , addGroups , "个人信息" , HrmGroupEnum . HRM_PERSONAL . getGroupType ( ) , personalFields ) ;
}
String [ ] workFields = Util . null2String ( templatePO . getWorkFields ( ) ) . split ( "," ) ;
if ( workFields . length > 0 ) {
getTemplateItems ( hrmFieldSearchConditionComInfo , addGroups , "工作信息" , HrmGroupEnum . HRM_WORK . getGroupType ( ) , workFields ) ;
}
}
/ * *
* 根 据 字 段 信 息 , 动 态 拼 接 where 条 件 SQL
*
* @param conditionItem
* @param key
* @param value
* @param sb
* @param dbType
* /
private void buildDynamicSql ( SearchConditionItem conditionItem , String key , String value , StringBuilder sb , DBType dbType ) {
if ( null = = conditionItem ) {
return ;
}
if ( key . endsWith ( "workyear" ) | | key . endsWith ( "companyworkyear" ) ) {
conditionItem . setConditionType ( ConditionType . INPUTNUMBER ) ;
}
String tableSql = buildTableSql ( key ) ;
if ( StringUtils . isBlank ( tableSql ) ) {
return ;
}
switch ( conditionItem . getConditionType ( ) ) {
case INPUT : // 单行文本框
case TEXTAREA : // 多行文本框
sb . append ( " and " ) . append ( tableSql ) . append ( dbType . like ( value ) ) ;
// 模糊搜索
break ;
case INPUTNUMBER : // 数字
case SELECT : //选择框
case BROWSER : //浏览按钮
case CHECKBOX :
case SWITCH :
sb . append ( " and " ) . append ( dbType . ifNull ( tableSql , "0" ) ) . append ( " = '" ) . append ( value ) . append ( "' " ) ;
break ;
case DATE :
case DATEPICKER :
case TIMEPICKER :
case RANGEPICKER :
// 精准搜索
sb . append ( " and " ) . append ( tableSql ) . append ( " = '" ) . append ( value ) . append ( "' " ) ;
break ;
default :
break ;
}
}
/ * *
* 处 理 当 前 字 段 所 在 表 关 系
*
* @param key
* @return
* /
private String buildTableSql ( String key ) {
StringBuilder sb = new StringBuilder ( ) ;
String [ ] s = key . split ( "_" ) ;
if ( s . length < 3 ) {
return "" ;
}
String scopeId = s [ 0 ] ;
String tableName = s [ 1 ] ;
String fieldName = s [ 2 ] ;
if ( "hrm" . equals ( tableName ) ) {
sb . append ( "t." ) . append ( fieldName ) ;
} else {
switch ( scopeId ) {
case "-1" :
sb . append ( "t0." ) . append ( fieldName ) ;
break ;
case "1" :
sb . append ( "t1." ) . append ( fieldName ) ;
break ;
case "3" :
sb . append ( "t2." ) . append ( fieldName ) ;
break ;
default :
return "" ;
}
}
return sb . toString ( ) ;
}
private void addEmptyForSelect ( SearchConditionItem searchConditionItem ) {
searchConditionItem . setValue ( "" ) ;
List < SearchConditionOption > options = searchConditionItem . getOptions ( ) ;
options . forEach ( item - > {
item . setSelected ( false ) ;
} ) ;
SearchConditionOption searchConditionOption = new SearchConditionOption ( ) ;
searchConditionOption . setSelected ( true ) ;
searchConditionOption . setKey ( "" ) ;
options . add ( 0 , searchConditionOption ) ;
}
}