package com.engine.organization.service.impl;
import com.api.browser.bean.SearchConditionGroup;
import com.api.browser.bean.SearchConditionItem;
import com.api.hrm.bean.HrmFieldBean;
import com.api.hrm.util.HrmFieldSearchConditionComInfo;
import com.cloudstore.eccom.result.WeaResultMsg;
import com.engine.core.impl.Service;
import com.engine.hrm.util.face.HrmFaceCheckManager;
import com.engine.organization.component.OrganizationWeaTable;
import com.engine.organization.entity.DeleteParam;
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;
import com.engine.organization.entity.hrmresource.vo.HrmResourceVO;
import com.engine.organization.entity.jclimport.po.CusFormFieldPO;
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.mapper.comp.CompMapper;
import com.engine.organization.mapper.department.DepartmentMapper;
import com.engine.organization.mapper.hrmresource.HrmRelationMapper;
import com.engine.organization.mapper.hrmresource.SystemDataMapper;
import com.engine.organization.mapper.job.JobMapper;
import com.engine.organization.mapper.resource.HrmResourceMapper;
import com.engine.organization.service.HrmResourceService;
import com.engine.organization.util.HasRightUtil;
import com.engine.organization.util.MenuBtn;
import com.engine.organization.util.OrganizationAssert;
import com.engine.organization.util.db.DBType;
import com.engine.organization.util.db.MapperProxyFactory;
import com.engine.organization.util.detach.DetachUtil;
import com.engine.organization.util.page.PageUtil;
import com.engine.organization.util.tree.SearchTreeUtil;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONException;
import org.json.JSONObject;
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;
/**
* @author:dxfeng
* @createTime: 2022/06/20
* @version: 1.0
*/
public class HrmResourceServiceImpl extends Service implements HrmResourceService {
/**
* 左侧树 类型表示
*
* 0:集团
* 1:分部
* 2:部门
* 3:岗位
*/
private static final String TYPE_COMP = "1";
private static final String TYPE_DEPT = "2";
private static final String TYPE_JOB = "3";
private static final String RIGHT_NAME = "Roster:All";
private HrmRelationMapper getHrmRelationMapper() {
return MapperProxyFactory.getProxy(HrmRelationMapper.class);
}
private DepartmentMapper getDepartmentMapper() {
return MapperProxyFactory.getProxy(DepartmentMapper.class);
}
private CompMapper getCompMapper() {
return MapperProxyFactory.getProxy(CompMapper.class);
}
private JobMapper getJobMapper() {
return MapperProxyFactory.getProxy(JobMapper.class);
}
private HrmResourceMapper getHrmResourceMapper() {
return MapperProxyFactory.getProxy(HrmResourceMapper.class);
}
private SystemDataMapper getSystemDataMapper() {
return MapperProxyFactory.getProxy(SystemDataMapper.class);
}
@Override
public Map getSearchTree(SearchTreeParams params) {
String keyword = params.getKeyword();
String id = params.getId();
String type = Util.null2String(params.getType());
List treeList = getFilterCompany(id, type, keyword);
return SearchTreeUtil.getSearchTree(type, treeList);
}
@Override
public Map listPage(HrmResourceSearchParam params) {
OrganizationWeaTable table = new OrganizationWeaTable<>(user, HrmResourceVO.class);
String sqlWhere = buildSqlWhere(params);
table.setSqlwhere(sqlWhere);
WeaResultMsg result = new WeaResultMsg(false);
result.putAll(table.makeDataResult());
result.success();
return new HashMap<>(result.getResultMap());
}
@Override
public Map getSaveForm() {
Map apiDatas = new HashMap<>();
List addGroups = new ArrayList<>();
//List extendTitles = getExtendTitleMapper().getTitlesByGroupID(GROUP_ID, "1");
//if (CollectionUtils.isNotEmpty(extendTitles)) {
// for (ExtendTitlePO extendTitle : extendTitles) {
// List items = getExtService(user).getExtSaveForm(user, EXTEND_TYPE + "", JCL_ORG_HRM, 2, extendTitle.getId().toString(), null, null, null);
// if (CollectionUtils.isNotEmpty(items)) {
// addGroups.add(new SearchConditionGroup(extendTitle.getTitle(), true, items));
// }
// }
//}
apiDatas.put("condition", addGroups);
return apiDatas;
}
@Override
public Long saveBaseForm(Map params) {
//HasRightUtil.hasRight(user, RIGHT_NAME, false);
//String workCode = (String) params.get("work_code");
//// 判断是否开启自动编号
//workCode = repeatDetermine(workCode);
//params.put("work_code", workCode);
//// 完善新增参数
//completeParams(params);
//
//// 新增EC人员,新增成功后,新增到聚才林人员表
//Map syncMap = new OrganizationSyncEc(user, LogModuleNameEnum.RESOURCE, OperateTypeEnum.ADD, params).sync();
//String ecResourceId = Util.null2String(syncMap.get("id"));
//OrganizationAssert.isTrue(StringUtils.isNotBlank(ecResourceId), Util.null2String(syncMap.get("message")));
//// 获取人员UUID
//RecordInfo recordInfo = getSystemDataMapper().getHrmObjectByID(HRM_RESOURCE, ecResourceId);
//params.put("uuid", recordInfo.getUuid());
//Long resourceId = getExtService(user).updateExtForm(user, EXTEND_TYPE, JCL_ORG_HRM, params, "", null);
// TODO new HrmResourceTriggerRunnable(resourceId).run();
//return resourceId;
return 0L;
}
@Override
public Map getBaseForm(Map params) {
//OrganizationAssert.notNull(params.get("viewAttr"), "请标识操作类型");
//// 2编辑 1查看
//int viewAttr = Integer.parseInt((String) params.get("viewAttr"));
//long id = Long.parseLong((String) params.get("id"));
//String groupId = (String) params.get("viewCondition");
//
//HashMap buttonsMap = new HashMap<>();
//buttonsMap.put("hasEdit", true);
//buttonsMap.put("hasSave", true);
//
//List addGroups = new ArrayList<>();
//if ("0".equals(groupId)) {
// groupId = GROUP_ID.toString();
//}
//List extendTitles = getExtendTitleMapper().getTitlesByGroupID(Long.parseLong(groupId), "1");
//
//if (CollectionUtils.isNotEmpty(extendTitles)) {
// for (ExtendTitlePO extendTitle : extendTitles) {
// List items = getExtService(user).getExtForm(user, EXTEND_TYPE + "", GROUP_ID.equals(Long.parseLong(groupId)) ? JCL_ORG_HRM : JCL_ORG_HRMEXT, viewAttr, id, extendTitle.getId() + "", "");
// if (CollectionUtils.isNotEmpty(items)) {
// addGroups.add(new SearchConditionGroup(extendTitle.getTitle(), true, items));
// }
// }
//}
//
//HashMap resultMap = new HashMap<>();
//resultMap.put("buttons", buttonsMap);
//resultMap.put("conditions", addGroups);
//resultMap.put("id", id);
//// 拓展页面分组
//resultMap.put("tabInfo", getExtService(user).getTabInfo(EXTEND_TYPE, JCL_ORG_HRMEXT));
//// 处理明细表
//resultMap.put("tables", getExtService(user).getExtendTables(user, EXTEND_TYPE, Long.parseLong(groupId), JCL_ORG_HRMEXT_DT1, id, viewAttr, false));
//Map apiDatas = new HashMap<>();
//
//apiDatas.put("result", resultMap);
//
//return apiDatas;
return new HashMap<>();
}
@Override
public int updateForm(Map params) {
//Long id = Long.parseLong((String) params.get("id"));
//String groupId = (String) params.get("viewCondition");
//int updateCount = 0;
//if ("0".equals(groupId) || GROUP_ID.toString().equals(groupId)) {
// // 判断编号是否重复
// String workCode = Util.null2String(params.get("work_code"));
// HrmResourcePO resourceById = getResourceMapper().getResourceById(id.toString());
// if (!workCode.equals(resourceById.getWorkCode())) {
// workCode = repeatDetermine(workCode);
// params.put("work_code", workCode);
// }
//
// // 完善更新参数
// completeParams(params);
//
// // 更新EC人员,更新成功后,更新聚才林人员表
// Map syncMap = new OrganizationSyncEc(user, LogModuleNameEnum.RESOURCE, OperateTypeEnum.UPDATE, params).sync();
// String ecResourceId = Util.null2String(syncMap.get("id"));
// OrganizationAssert.isTrue(StringUtils.isNotBlank(ecResourceId), Util.null2String(syncMap.get("message")));
//
// // 更新主表数据
// updateCount += getExtService(user).updateExtForm(user, EXTEND_TYPE, JCL_ORG_HRM, params, "", id);
//
// // TODO new HrmResourceTriggerRunnable(id).run();
//} else {
// // 更新主表拓展表
// getExtService(user).updateExtForm(user, EXTEND_TYPE, JCL_ORG_HRMEXT, params, "", id);
//}
////更新明细表
//getExtService(user).updateExtDT(user, EXTEND_TYPE, JCL_ORG_HRMEXT_DT1, params, id);
//
//return updateCount;
return 0;
}
@Override
public List getSearchTemplate() {
int userUID = user.getUID();
// 根据ID查询所存储的模板
List templates = getHrmResourceMapper().getSearchTemplatesByUser(userUID);
templates.add(0, SearchTemplateParam.builder().key("-1").selected(false).showName("默认模板").build());
return templates;
}
@Override
public List getAllConditions() {
HrmFieldSearchConditionComInfo hrmFieldSearchConditionComInfo = new HrmFieldSearchConditionComInfo();
List addGroups = new ArrayList<>();
List basicConditionItems = new ArrayList<>();
List personalConditionItems = new ArrayList<>();
List workConditionItems = new ArrayList<>();
// 基本信息:-1
List hrmFieldsByScopeId = getSystemDataMapper().getHrmFieldsByScopeId("-1");
createConditionItems(hrmFieldSearchConditionComInfo, hrmFieldsByScopeId, basicConditionItems);
if (CollectionUtils.isNotEmpty(basicConditionItems)) {
addGroups.add(new SearchConditionGroup("基本信息", true, basicConditionItems));
}
// 个人信息:1
hrmFieldsByScopeId = getSystemDataMapper().getHrmFieldsByScopeId("1");
createConditionItems(hrmFieldSearchConditionComInfo, hrmFieldsByScopeId, personalConditionItems);
if (CollectionUtils.isNotEmpty(personalConditionItems)) {
addGroups.add(new SearchConditionGroup("个人信息", true, personalConditionItems));
}
// 工作信息:3
hrmFieldsByScopeId = getSystemDataMapper().getHrmFieldsByScopeId("3");
createConditionItems(hrmFieldSearchConditionComInfo, hrmFieldsByScopeId, workConditionItems);
if (CollectionUtils.isNotEmpty(workConditionItems)) {
addGroups.add(new SearchConditionGroup("工作信息", true, workConditionItems));
}
return addGroups;
}
@Override
public void saveSearchTemplate(SearchTemplateParam params) {
String[] split = params.getFields().split(",");
if (split.length > 0) {
List basicFieldsBuilder = new ArrayList<>();
List personalFieldsBuilder = new ArrayList<>();
List workFieldsBuilder = new ArrayList<>();
for (String fieldName : split) {
if (fieldName.startsWith("-1")) {
basicFieldsBuilder.add(fieldName.substring(fieldName.lastIndexOf("_") + 1));
} else if (fieldName.startsWith("1")) {
personalFieldsBuilder.add(fieldName.substring(fieldName.lastIndexOf("_") + 1));
} else if (fieldName.startsWith("3")) {
workFieldsBuilder.add(fieldName.substring(fieldName.lastIndexOf("_") + 1));
}
}
SearchTemplatePO searchTemplatePO = SearchTemplatePO.builder().name(params.getShowName()).basicFields(StringUtils.join(basicFieldsBuilder, ",")).personalFields(StringUtils.join(personalFieldsBuilder, ",")).workFields(StringUtils.join(workFieldsBuilder, ",")).creator(user.getUID()).createTime(new Date()).updateTime(new Date()).build();
getHrmResourceMapper().insertSearchTemplate(searchTemplatePO);
// 保存模板
}
}
@Override
public Map getSearchCondition(Map params) {
String templateId = Util.null2String(params.get("templateId"));
if (StringUtils.isBlank(templateId)) {
templateId = "-1";
}
Map apiDatas = new HashMap<>();
List addGroups = new ArrayList<>();
List allConditions = getAllConditions();
// 穿梭框ID,展示所选字段信息
HrmFieldSearchConditionComInfo hrmFieldSearchConditionComInfo = new HrmFieldSearchConditionComInfo();
if ("-1".equals(templateId)) {
// 未选择模板展示默认模板搜索条件
List searchConditionItems = new ArrayList<>();
List hrmFieldsByScopeId = getSystemDataMapper().getHrmFieldsByScopeId("-1");
createConditionItems(hrmFieldSearchConditionComInfo, hrmFieldsByScopeId, searchConditionItems);
if (CollectionUtils.isNotEmpty(searchConditionItems)) {
addGroups.add(new SearchConditionGroup("基本信息", true, searchConditionItems));
}
} 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);
}
}
apiDatas.put("defaultcondition", addGroups);
apiDatas.put("conditions", allConditions);
List searchTemplate = getSearchTemplate();
String finalTemplateId = templateId;
searchTemplate.forEach(item -> {
if (finalTemplateId.equals(item.getKey())) {
item.setSelected(true);
}
});
apiDatas.put("templates", searchTemplate);
return apiDatas;
}
@Override
public Map getHasRight() {
Map btnDatas = new HashMap<>();
if (HasRightUtil.hasRight(user, RIGHT_NAME, true)) {
ArrayList topMenuList = new ArrayList<>();
ArrayList rightMenuList = new ArrayList<>();
topMenuList.add(MenuBtn.builder().isBatch("1").isTop("1").menuFun("new").menuIcon("icon-coms-New-Flow").menuName("新建人员").type("BTN_Addnew").build());
btnDatas.put("topMenu", topMenuList);
rightMenuList.add(MenuBtn.builder().isBatch("1").isTop("1").menuFun("new").menuIcon("icon-coms-New-Flow").menuName("新建人员").type("BTN_Addnew").build());
rightMenuList.add(MenuBtn.builder().isBatch("0").isTop("0").menuFun("custom").menuIcon("icon-coms-task-list").menuName("显示列定制").type("BTN_COLUMN").build());
rightMenuList.add(MenuBtn.rightMenu_btnLog());
btnDatas.put("rightMenu", rightMenuList);
}
btnDatas.put("hasRight", true);
return btnDatas;
}
@Override
public Map getTabForm(Map params) {
String viewAttrStr = (String) params.get("viewAttr");
OrganizationAssert.notBlank(viewAttrStr, "未指定操作类型,请确认");
String id = Util.null2String(params.get("id"));
OrganizationAssert.notBlank(id, "数据有误,请确认");
int viewAttr = Integer.parseInt(viewAttrStr);
Map apiDatas = new HashMap<>();
//List addGroups = new ArrayList<>();
//SearchConditionItem schemeId = OrganizationFormItemUtil.browserItem(user, 2, 17, viewAttr, false, "等级方案", "161", "schemeId", "schemeBrowser");
//schemeId.setRules("required");
//SearchConditionItem gradeId = OrganizationFormItemUtil.browserItem(user, 2, 17, viewAttr, false, "职级", "161", "gradeId", "gradeBrowser");
//gradeId.setRules("required");
//SearchConditionItem levelId = OrganizationFormItemUtil.browserItem(user, 2, 17, viewAttr, false, "职等", "162", "levelId", "levelBrowser");
//levelId.setRules("required");
//SearchConditionItem sequenceId = OrganizationFormItemUtil.browserItem(user, 2, 17, viewAttr, false, "岗位序列", "161", "sequenceId", "sequenceBrowser");
//sequenceId.setRules("required");
//SearchConditionItem postId = OrganizationFormItemUtil.browserItem(user, 2, 17, viewAttr, false, "职务分类", "161", "postId", "postBrowser");
//postId.setRules("required");
//SearchConditionItem postInfoId = OrganizationFormItemUtil.browserItem(user, 2, 17, viewAttr, false, "职务信息", "161", "postInfoId", "postInfoBrowser");
//postInfoId.setRules("required");
//SearchConditionItem companyId = OrganizationFormItemUtil.browserItem(user, 2, 17, viewAttr, false, "分部", "164", "companyId", "");
//companyId.setRules("required");
//SearchConditionItem departmentId = OrganizationFormItemUtil.browserItem(user, 2, 17, viewAttr, false, "部门", "4", "departmentId", "");
//departmentId.setRules("required");
//SearchConditionItem jobId = OrganizationFormItemUtil.browserItem(user, 2, 17, viewAttr, false, "岗位", "161", "jobId", "jobBrowser");
//jobId.setRules("required");
//
//
//// 编辑状态下赋值操作
//HrmRelationPO relationPO = getHrmRelationMapper().getRelationById(Long.parseLong(id));
//if (null != relationPO) {
// setBrowserValue(schemeId, relationPO.getSchemeId(), getSchemeMapper().listSchemesByIds(Stream.of(relationPO.getSchemeId()).collect(Collectors.toList())), null, null);
// setBrowserValue(gradeId, relationPO.getGradeId(), getGradeMapper().listGradessByIds(Stream.of(relationPO.getGradeId()).collect(Collectors.toList())), "scheme_id", relationPO.getSchemeId());
// setBrowserValue(levelId, relationPO.getLevelId(), getLevelMapper().listLevelsByIds(DeleteParam.builder().ids(relationPO.getLevelId()).build().getIds()), "grade_id", relationPO.getGradeId());
// setBrowserValue(sequenceId, relationPO.getSequenceId(), getSequenceMapper().listSequencesByIds(Stream.of(relationPO.getSequenceId()).collect(Collectors.toList())), "scheme_id", relationPO.getSchemeId());
// setBrowserValue(postId, relationPO.getPostId(), getPostMapper().listPostsByIds(Stream.of(relationPO.getPostId()).collect(Collectors.toList())), null, null);
// setBrowserValue(postInfoId, relationPO.getPostInfoId(), getPostInfoMapper().listPostInfosByIds(Stream.of(relationPO.getPostInfoId()).collect(Collectors.toList())), "post_id", relationPO.getPostId());
//
// List