package com.product.org.admin.service; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.product.core.dao.BaseDao; import com.product.core.entity.DataTableEntity; import com.product.core.entity.FieldSetEntity; import com.product.core.exception.BaseException; import com.product.core.permission.PermissionService; import com.product.core.service.support.AbstractBaseService; import com.product.core.service.support.QueryFilterService; import com.product.core.spring.context.SpringMVCContextHolder; import com.product.core.transfer.Transactional; import com.product.module.sys.entity.SystemUser; import com.product.org.admin.config.CmnConst; import com.product.org.admin.config.SystemCode; import com.product.org.admin.service.idel.IEmployeeFileService; import com.product.util.BaseUtil; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.*; /** * Copyright LX * * @Title: EmployeeFileService * @Project: product-server * @date: 2021-08-21 16:05 * @author: ZhouJie * @Description: 员工档案 */ @Component public class EmployeeFileService extends AbstractBaseService implements IEmployeeFileService { @Autowired public BaseDao baseDao; @Autowired private PermissionService permissionService; @Autowired QueryFilterService queryFilterService; /** * 查询组织机构树 * @param fse * @return * @throws BaseException */ public JSONArray listOrgLevels(FieldSetEntity fse) throws BaseException { if (SpringMVCContextHolder.getCurrentUser() != null && SpringMVCContextHolder.getCurrentUser().getUuid() != null) { String sql = ""; String dept_parent = null; DataTableEntity data = new DataTableEntity(); Object[] objects; SystemUser user = SpringMVCContextHolder.getCurrentUser(); String clientUuid = fse.getString(CmnConst.CLIENT_UUID); Integer org_level_type = fse.getInteger(CmnConst.ORG_LEVEL_TYPE); if (1 == org_level_type) {// 部门 dept_parent = fse.getString(CmnConst.ORG_LEVEL_CODE); if (StringUtils.isEmpty(dept_parent)) { sql = "select a.*,(select count(*) from " + CmnConst.PRODUCT_SYS_STAFFS + " where dept_uuid=a.uuid) staff_number from " + CmnConst.PRODUCT_SYS_ORG_LEVELS + " a where " + CmnConst.ORG_LEVEL_TYPE + "=? " + " ORDER BY length(org_level_code),sequence asc,org_level_code"; objects = new Object[]{1}; data = baseDao.listInternationDataTable(baseDao.listTable(sql, objects), ""); } else { sql = "select a.*,(select count(*) from " + CmnConst.PRODUCT_SYS_STAFFS + " where dept_uuid=a.uuid) staff_number from " + CmnConst.PRODUCT_SYS_ORG_LEVELS + " a where " + CmnConst.ORG_LEVEL_CODE_PARENT + " like ? and " + CmnConst.ORG_LEVEL_TYPE + "=? " + " ORDER BY length(org_level_code),sequence asc,org_level_code"; objects = new Object[]{fse.getString(CmnConst.ORG_LEVEL_CODE) + "%", 1}; data = baseDao.listInternationDataTable(baseDao.listTable(sql, objects), ""); } } else if (user.getUserType() == 3 || user.getUserType() == 4) {// 公司 if(clientUuid==null){ clientUuid= user.getClientUuid(); } if (clientUuid==null) { return null; } //updatetime 2021年1月9日13:04:31 xupengcheng 修改隐藏管理员查看公司只能查看当前公司,加多单位过滤 String orgLevelFilter = permissionService.getDataFilter("uuid"); String filter = orgLevelFilter + " and " + CmnConst.ORG_LEVEL_TYPE + "=? and " + CmnConst.ORG_LEVEL_STATUS + "=? and (" + CmnConst.CLIENT_UUID + " = ?"; String[] clients_uuid = clientUuid.split(","); objects = new Object[2 + clients_uuid.length]; objects[0] = fse.getInteger(CmnConst.ORG_LEVEL_TYPE); objects[1] = 0; objects[2] = clients_uuid[0]; for (int i = 1; i < clients_uuid.length; i++) { filter += " or client_uuid=? "; objects[2 + i] = clients_uuid[i]; } filter += ")"; data = baseDao.listInternationDataTable( baseDao.listTable(CmnConst.PRODUCT_SYS_ORG_LEVELS, filter, objects), ""); } else if (user.getUserType() == 2) { sql = "select level.*," + " case when security_password_length then security_password_length else '' end security_password_length, " + " case when security_upper=1 then '是' else '' end security_upper, " + " case when security_lower=1 then '是' else '' end security_lower, " + " case when security_number=1 then '是' else '' end security_number, " + " case when security_other=1 then '是' else '' end security_other, " + " case when security_repeate_history_password=1 then '是' else '' end security_repeate_history_password, " + " case when security_update_frequency_day then security_update_frequency_day else '' end security_update_frequency_day " + " from " + CmnConst.PRODUCT_SYS_ORG_LEVELS + " level LEFT JOIN "+CmnConst.PRODUCT_SYS_PASSWORD_SECURITY+" secur ON level.uuid=secur.org_level_uuid " + " where level."+CmnConst.ORG_LEVEL_STATUS + "=? and ( level."+CmnConst.UUID + "=? or org_level_code_parent like CONCAT((select org_level_code FROM product_sys_org_levels where uuid=?),'%'))"; sql += " Order by level.org_level_code_parent,level.org_level_code,level.sequence"; String org_level = SpringMVCContextHolder.getCurrentUser().getOrg_level_uuid(); objects = new Object[]{0, org_level, org_level}; DataTableEntity data2 = baseDao.listInternationDataTable(baseDao.listTable(sql, objects), ""); if (data2.getRows() > 0) { for (int i = 0; i < data2.getRows(); i++) { data.addFieldSetEntity(data2.getFieldSetEntity(i)); } } } else if (user.getUserType() == 1) { sql = "select level.*," + " case when security_password_length then security_password_length else '' end security_password_length, " + " case when security_upper=1 then '是' else '' end security_upper, " + " case when security_lower=1 then '是' else '' end security_lower, " + " case when security_number=1 then '是' else '' end security_number, " + " case when security_other=1 then '是' else '' end security_other, " + " case when security_repeate_history_password=1 then '是' else '' end security_repeate_history_password, " + " case when security_update_frequency_day then security_update_frequency_day else '' end security_update_frequency_day " + " from " + CmnConst.PRODUCT_SYS_ORG_LEVELS + " level LEFT JOIN "+CmnConst.PRODUCT_SYS_PASSWORD_SECURITY+" secur ON level.uuid=secur.org_level_uuid " + " where " + CmnConst.ORG_LEVEL_STATUS + "=?"; sql += " Order by org_level_code_parent,org_level_code,sequence"; objects = new Object[]{ 0}; DataTableEntity data2 = baseDao.listInternationDataTable(baseDao.listTable(sql, objects), ""); if (data2.getRows() > 0) { for (int i = 0; i < data2.getRows(); i++) { data.addFieldSetEntity(data2.getFieldSetEntity(i)); } } } else { // 公司 sql = "select * from " + CmnConst.PRODUCT_SYS_ORG_LEVELS + " where " + CmnConst.ORG_LEVEL_TYPE + "=? and " + CmnConst.ORG_LEVEL_STATUS + "=? and ( " + CmnConst.CREATED_BY + " =? or " + CmnConst.ORG_LEVEL_MANAGER_UUID + "=? )"; sql += " Order by org_level_code_parent,org_level_code,sequence"; if (StringUtils.isEmpty(clientUuid)) { return null; } for (String s : clientUuid.split(",")) { objects = new Object[]{fse.getInteger(CmnConst.ORG_LEVEL_TYPE), 0, SpringMVCContextHolder.getCurrentUser().getUser_id(), s}; DataTableEntity data2 = baseDao.listInternationDataTable(baseDao.listTable(sql, objects), ""); if (data2.getRows() > 0) { for (int i = 0; i < data2.getRows(); i++) { data.addFieldSetEntity(data2.getFieldSetEntity(i)); } } } } for (int i = 0; i < data.getRows(); i++) { FieldSetEntity fieldSetEntity = data.getFieldSetEntity(i); DataTableEntity org_level_name = fieldSetEntity.getSubDataTable("org_level_name"); if (!BaseUtil.dataTableIsEmpty(org_level_name)) { List names = new ArrayList<>(); for (int j = 0; j < org_level_name.getRows(); j++) { Map name = new HashMap<>(); FieldSetEntity fieldSetEntity1 = org_level_name.getFieldSetEntity(j); name.put(fieldSetEntity1.getString(CmnConst.LANGUAGE_CODE), fieldSetEntity1.getString(fieldSetEntity1.getString(CmnConst.LANGUAGE_CODE))); names.add(name); } fieldSetEntity.setValue("org_level_name", names); } } if (!BaseUtil.dataTableIsEmpty(data)) {// 封装树 return OrgLevelsTree(data, fse.getInteger(CmnConst.ORG_LEVEL_TYPE), dept_parent); } return new JSONArray(); } // 用户获取失败 throw new BaseException(SystemCode.SYSTEM_USER_ACQUIRE_FAIL.getValue(), SystemCode.SYSTEM_USER_ACQUIRE_FAIL.getText(), this.getClass(), "listCompany"); } public JSONArray OrgLevelsTree(DataTableEntity data, Integer org_level_type, String dept_parent) throws BaseException { JSONArray menus = new JSONArray(); JSONObject parent_menu = new JSONObject(); if (data != null && data.getRows() > 0) { for (int i = 0; i < data.getRows(); i++) { FieldSetEntity fs = data.getFieldSetEntity(i); JSONObject menu = BaseUtil.fieldSetEntityToJson(fs); String pcode = fs.getString("org_level_code_parent"); if (StringUtils.isEmpty(pcode) || parent_menu.getString(pcode) == null) { menus.add(menu); } else {// 上级菜单 JSONObject pm = parent_menu.getJSONObject(pcode); JSONArray subs = pm.getJSONArray(CmnConst.CHILDREN); JSONArray submenus = null; if (subs == null) { submenus = new JSONArray(); pm.put(CmnConst.CHILDREN, submenus); } else { submenus = subs; } submenus.add(menu); } parent_menu.put(menu.getString(CmnConst.ORG_LEVEL_CODE), menu); } } return menus; } /** * 员工档案列表 * @param fse * @return * @throws BaseException */ public DataTableEntity listEmployee(FieldSetEntity fse) throws BaseException { String queryFilter; if(BaseUtil.dataTableIsEmpty(fse.getSubDataTable("systemSeniorQueryString"))){ queryFilter = ""; }else { queryFilter = queryFilterService.getQueryFilter(fse); } DataTableEntity dt = null; if(StringUtils.isEmpty(fse.getString("org_level_type"))){ if(!StringUtils.isEmpty(queryFilter)){ queryFilter += " AND client_uuid=? "; }else{ queryFilter = " client_uuid=? "; } String clientUuid = SpringMVCContextHolder.getCurrentUser().getClientUuid(); dt = baseDao.listTable(CmnConst.PRODUCT_SYS_STAFFS,queryFilter,new Object[]{clientUuid },null,null,fse.getInteger(CmnConst.PAGESIZE),fse.getInteger(CmnConst.CPAGE)); } if("0".equals(fse.getString("org_level_type")) ){ if(!StringUtils.isEmpty(queryFilter)){ queryFilter += " AND org_level_uuid=? "; }else{ queryFilter = " org_level_uuid=? "; } dt = baseDao.listTable(CmnConst.PRODUCT_SYS_STAFFS,queryFilter,new Object[]{ fse.getString("uuid") },null,null,fse.getInteger(com.product.admin.config.CmnConst.PAGESIZE), fse.getInteger(com.product.admin.config.CmnConst.CPAGE)); } if("1".equals(fse.getString("org_level_type"))){ if(!StringUtils.isEmpty(queryFilter)){ queryFilter += " AND dept_uuid=? "; }else{ queryFilter = " dept_uuid=? "; } dt = baseDao.listTable(CmnConst.PRODUCT_SYS_STAFFS,queryFilter,new Object[]{ fse.getString("uuid") },null,null,fse.getInteger(com.product.admin.config.CmnConst.PAGESIZE), fse.getInteger(com.product.admin.config.CmnConst.CPAGE)); } baseDao.loadPromptData(dt); return dt; } /** * 员工档案详情 * @param fs * @return * @throws BaseException */ public FieldSetEntity getEmployeeInfo(FieldSetEntity fs) throws BaseException { //FieldSetEntity fss = baseDao.getFieldSetEntity(CmnConst.PRODUCT_SYS_STAFFS,fs.getUUID(),true); String sql = " SELECT *,(SELECT user_account FROM product_sys_users WHERE user_id=a.user_id)user_account FROM product_sys_staffs a where a.uuid=? "; FieldSetEntity fss = baseDao.getFieldSetEntityBySQL(sql,new Object[]{fs.getUUID()},false); //baseDao.loadPromptData(fss); return fss; } /** * 修改员工档案信息 * @param fs * @return */ @Transactional public boolean updateEmployee(FieldSetEntity fs){ fs.setValue(CmnConst.UPDATED_BY, SpringMVCContextHolder.getCurrentUser().getUser_id()); fs.setValue(CmnConst.UPDATED_UTC_DATETIME, new Date()); return update(fs); } //员工档案子表 /** * 保存员工档案子表 * @param fs * @return */ @Transactional public String saveEmployeeSub(FieldSetEntity fs) { if(com.product.common.lang.StringUtils.isEmpty(fs.getString(CmnConst.UUID))){ fs.setValue("created_by", SpringMVCContextHolder.getCurrentUser().getUser_id()); fs.setValue("created_utc_datetime",new Date()); fs.setValue("org_level_uuid",SpringMVCContextHolder.getCurrentUser().getOrg_level_uuid()); return baseDao.add(fs); } else { fs.setValue("updated_by", SpringMVCContextHolder.getCurrentUser().getUser_id()); fs.setValue("updated_utc_datetime",new Date()); baseDao.update(fs); return fs.getString(CmnConst.UUID); } } /** * 删除员工档案子表 * @param fs * @return */ @Transactional public boolean delEmployeeSub(FieldSetEntity fs) { String uuid = fs.getUUID(); String[] uuids = uuid.split(","); return baseDao.delete(fs.getTableName(),BaseUtil.buildQuestionMarkFilter(CmnConst.UUID, uuids.length, true), uuids); } /** * 员工档案子表列表 * @param fs * @return */ public DataTableEntity EmployeeSublist(FieldSetEntity fs) { String queryFilter; if(BaseUtil.dataTableIsEmpty(fs.getSubDataTable("systemSeniorQueryString"))){ queryFilter = " staff_uuid=? "; }else { queryFilter = " staff_uuid=? and "+queryFilterService.getQueryFilter(fs); } DataTableEntity dt = baseDao.listTable(fs.getTableName(),queryFilter,new Object[]{fs.getString("staff_uuid")},null,null,fs.getInteger(CmnConst.PAGESIZE),fs.getInteger(CmnConst.CPAGE)); //is_valid 前端返回的是否有效合同标识 if(CmnConst.PRODUCT_SYS_STAFF_LABOR_CONTRACT.equals(fs.getTableName()) && "1".equals(fs.getString("is_valid")) ){ if("".equals(queryFilter)){ queryFilter = " TO_DAYS(end_time) >= TO_DAYS(NOW()) "; }else{ queryFilter += " AND TO_DAYS(end_time) >= TO_DAYS(NOW()) "; } dt = baseDao.listTable(CmnConst.PRODUCT_SYS_STAFF_LABOR_CONTRACT,queryFilter,new Object[]{fs.getString("staff_uuid")},null,null,fs.getInteger(CmnConst.PAGESIZE),fs.getInteger(CmnConst.CPAGE)); }else if(CmnConst.PRODUCT_SYS_STAFF_LABOR_CONTRACT.equals(fs.getTableName()) && "0".equals(fs.getString("is_valid"))){ if("".equals(queryFilter)){ queryFilter = " TO_DAYS(end_time) < TO_DAYS(NOW()) "; }else{ queryFilter += " AND TO_DAYS(end_time) < TO_DAYS(NOW()) "; } dt = baseDao.listTable(CmnConst.PRODUCT_SYS_STAFF_LABOR_CONTRACT,queryFilter,new Object[]{fs.getString("staff_uuid")},null,null,fs.getInteger(CmnConst.PAGESIZE),fs.getInteger(CmnConst.CPAGE)); } baseDao.loadPromptData(dt); return dt; } /** * 员工档案子表详情 * @param fs * @return * @throws BaseException */ public FieldSetEntity EmployeeSubInfo(FieldSetEntity fs) throws BaseException { return baseDao.getFieldSetEntity(fs.getTableName(),fs.getUUID(),true); } }