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<Object> names = new ArrayList<>();
|
for (int j = 0; j < org_level_name.getRows(); j++) {
|
Map<String, Object> 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);
|
}
|
|
|
|
|
|
|
|
}
|