package com.product.org.admin.service;
|
|
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
import java.util.Iterator;
|
import java.util.List;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.product.common.lang.StringUtils;
|
import com.product.core.dao.BaseDao;
|
import com.product.core.entity.DataTableEntity;
|
import com.product.core.entity.FieldMetaEntity;
|
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.transfer.Transactional;
|
import com.product.org.admin.config.CmnConst;
|
import com.product.org.admin.config.SystemCode;
|
import com.product.org.admin.service.idel.IStaffSysPropertyService;
|
import com.product.util.BaseUtil;
|
|
/**
|
*
|
* Copyright LX-BASE
|
* @Title: LX-BASE-
|
* @Project: StaffSysPropertyService
|
* @Date: 2020-06-20 14:20
|
* @Author: 杜洪波
|
* @Description:员工系统属性
|
*/
|
@Component
|
public class StaffSysPropertyService extends AbstractBaseService implements IStaffSysPropertyService{
|
|
@Autowired
|
private BaseDao baseDao;
|
|
@Autowired
|
PermissionService permissionService;
|
|
@Autowired
|
QueryFilterService queryFilterService;
|
|
/**
|
* 员工属性分组列表
|
* @param cpage
|
* @param pageSize
|
* @return
|
* @throws BaseException
|
*/
|
public DataTableEntity listPropertyGroup(Integer cpage,Integer pageSize, FieldSetEntity fse) throws BaseException {
|
|
//数据策略
|
String dataFilter=permissionService.getDataFilter(CmnConst.ORG_LEVEL_UUID) ;
|
|
//高级搜索
|
String searchFilter=queryFilterService.getQueryFilter(fse);
|
if (!StringUtils.isEmpty(dataFilter)) {
|
if (!StringUtils.isEmpty(searchFilter)) {
|
dataFilter+=" AND "+ searchFilter;
|
}
|
}else {
|
if (!StringUtils.isEmpty(searchFilter)) {
|
dataFilter=searchFilter;
|
}
|
}
|
|
return baseDao.listInternationDataTable(baseDao.listTable(CmnConst.PRODUCT_SYS_STAFF_PROPERTY_GROUP, dataFilter, null, null, null, pageSize, cpage),null);
|
}
|
|
/**
|
* 属性分组详情与属性列表
|
* @param uuid
|
* @return
|
* @throws BaseException
|
*/
|
public JSONObject findPropertyGroup(String uuid)throws BaseException{
|
FieldSetEntity fsePropertyGroup=baseDao.getFieldSetEntity(CmnConst.PRODUCT_SYS_STAFF_PROPERTY_GROUP, uuid, false);
|
if (fsePropertyGroup==null) {
|
throw new BaseException(SystemCode.STSTEM_STAFFS_PROPERTY_GROUP_NO_EXIST.getValue(), SystemCode.STSTEM_STAFFS_PROPERTY_GROUP_NO_EXIST.getText(), this.getClass(), "findPropertyGroup");
|
}
|
FieldSetEntity fsePropertyGroupLanguage=baseDao.listInternationDataTable(fsePropertyGroup, null);
|
JSONObject as= BaseUtil.fieldSetEntityToJson(fsePropertyGroupLanguage);
|
StringBuilder sqlCommon=new StringBuilder();
|
|
sqlCommon.append(" SELECT ");
|
sqlCommon.append(" d.staff_property_group_value_id,d.uuid,d.staff_property_group_uuid,e.uuid staff_property_master_uuid,e.staff_property_master_code,d.value,d.effective_utc_datetime,d.org_level_uuid,d.remarks,e.uuid,e.staff_property_master_name,e.prompt_name,e.data_type ");
|
sqlCommon.append(" FROM ( ");
|
|
sqlCommon.append(" SELECT ");
|
sqlCommon.append(" a.staff_property_group_value_id,a.uuid,a.staff_property_group_uuid,a.staff_property_master_uuid,a.staff_property_master_code,a.value,a.effective_utc_datetime,a.org_level_uuid,a.remarks, ");
|
sqlCommon.append(" CASE WHEN LOCATE( '|', a.staff_property_master_code) THEN REVERSE(SUBSTR(REVERSE(a.staff_property_master_code) FROM INSTR(REVERSE( a.staff_property_master_code ), '|' ) + 1 )) END AS parent_code ");
|
sqlCommon.append(" FROM product_sys_staff_property_group_default_value AS a, ");
|
sqlCommon.append(" ( ");
|
sqlCommon.append(" SELECT ");
|
sqlCommon.append(" staff_property_master_uuid, ");
|
sqlCommon.append(" MAX(effective_utc_datetime) AS effective_utc_datetime ");
|
sqlCommon.append(" FROM product_sys_staff_property_group_default_value ");
|
sqlCommon.append(" WHERE effective_utc_datetime <= NOW() AND staff_property_group_uuid = ? ");
|
sqlCommon.append(" GROUP BY staff_property_master_uuid ");
|
sqlCommon.append(" ) AS c ");
|
sqlCommon.append(" WHERE a.staff_property_master_uuid = c.staff_property_master_uuid AND a.effective_utc_datetime = c.effective_utc_datetime AND a.staff_property_group_uuid = ? ");
|
|
sqlCommon.append(" UNION ALL ");
|
sqlCommon.append(" SELECT ");
|
sqlCommon.append(" a.staff_property_group_value_id,a.uuid,a.staff_property_group_uuid,a.staff_property_master_uuid,a.staff_property_master_code,'',a.effective_utc_datetime,a.org_level_uuid,a.remarks, ");
|
sqlCommon.append(" CASE WHEN LOCATE( '|', a.staff_property_master_code) THEN REVERSE(SUBSTR(REVERSE(a.staff_property_master_code) FROM INSTR(REVERSE( a.staff_property_master_code ), '|' ) + 1 )) END AS parent_code");
|
sqlCommon.append(" FROM product_sys_staff_property_group_default_value AS a, ");
|
sqlCommon.append(" ( ");
|
sqlCommon.append(" SELECT ");
|
sqlCommon.append(" staff_property_master_uuid, ");
|
sqlCommon.append(" MIN(effective_utc_datetime) AS effective_utc_datetime ");
|
sqlCommon.append(" FROM product_sys_staff_property_group_default_value ");
|
sqlCommon.append(" WHERE staff_property_group_uuid= ? ");
|
sqlCommon.append(" GROUP BY staff_property_master_uuid ");
|
sqlCommon.append(" HAVING MIN(effective_utc_datetime) > NOW() ");
|
sqlCommon.append(" ) AS c ");
|
sqlCommon.append(" WHERE a.staff_property_master_uuid = c.staff_property_master_uuid AND a.effective_utc_datetime = c.effective_utc_datetime AND a.staff_property_group_uuid = ? ");
|
|
sqlCommon.append(" UNION ALL ");
|
sqlCommon.append(" SELECT ");
|
sqlCommon.append(" a.staff_property_group_value_id,a.uuid,a.staff_property_group_uuid,a.staff_property_master_uuid,a.staff_property_master_code,'',a.effective_utc_datetime,a.org_level_uuid,a.remarks, ");
|
sqlCommon.append(" CASE WHEN LOCATE( '|', a.staff_property_master_code) THEN REVERSE(SUBSTR(REVERSE(a.staff_property_master_code) FROM INSTR(REVERSE( a.staff_property_master_code ), '|' ) + 1 )) END AS parent_code");
|
sqlCommon.append(" FROM product_sys_staff_property_group_default_value AS a, ");
|
sqlCommon.append(" ( ");
|
sqlCommon.append(" SELECT ");
|
sqlCommon.append(" staff_property_master_uuid, ");
|
sqlCommon.append(" staff_property_master_code ");
|
sqlCommon.append(" FROM product_sys_staff_property_group_default_value ");
|
sqlCommon.append(" WHERE staff_property_group_uuid= ? AND effective_utc_datetime IS NULL AND value IS NULL ");
|
sqlCommon.append(" ) AS c ");
|
sqlCommon.append(" WHERE a.staff_property_master_uuid = c.staff_property_master_uuid AND a.staff_property_group_uuid = ? ");
|
|
sqlCommon.append(" ) AS d ");
|
sqlCommon.append(" RIGHT JOIN product_sys_staff_property_master AS e ON d.staff_property_master_uuid = e.uuid AND d.staff_property_master_code=e.staff_property_master_code"); //杜洪波 updateTime 2020-01-06 11:40:00 属性显示异常
|
|
String sqlParent=sqlCommon+" WHERE d.parent_code IS NULL ORDER BY e.sequence";
|
String sqlSub=sqlCommon+" WHERE d.parent_code IS NOT NULL ORDER BY e.sequence";
|
|
|
//根属性
|
DataTableEntity dtParent=baseDao.listTable(sqlParent.toString(), new Object[] {uuid,uuid,uuid,uuid,uuid,uuid});
|
//子属性
|
DataTableEntity dtSub=baseDao.listTable(sqlSub.toString(), new Object[] {uuid,uuid,uuid,uuid,uuid,uuid});
|
|
baseDao.listInternationDataTable(dtParent, null);
|
baseDao.listInternationDataTable(dtSub, null);
|
|
if (dtParent.getRows()>0) {
|
//装载属性
|
JSONArray json=sysPropertyGroup(dtParent,dtSub,2);
|
as.put(CmnConst.PRODUCT_SYS_STAFF_PROPERTY_GROUP_DEFALUT_VALUE, json);
|
}
|
return as;
|
}
|
|
/**
|
* 属性详情
|
* @param group_uuid 分组uuid
|
* @param master_uuid 属性uuid
|
* @return
|
* @throws BaseException
|
*/
|
public DataTableEntity findProperty(String group_uuid,String master_uuid) throws BaseException {
|
StringBuilder sql=new StringBuilder();
|
sql.append(" SELECT ");
|
sql.append(" a.uuid, ");
|
sql.append(" a.staff_property_group_value_id,a.staff_property_group_uuid,a.staff_property_master_uuid,a.staff_property_master_code,a.value, ");
|
sql.append(" a.effective_utc_datetime,a.org_level_uuid,b.prompt_name,b.data_type ");
|
sql.append(" FROM product_sys_staff_property_group_default_value a ");
|
sql.append(" LEFT JOIN product_sys_staff_property_master b ");
|
sql.append(" ON a.staff_property_master_uuid=b.uuid AND a.staff_property_master_code=b.staff_property_master_code ");
|
sql.append(" WHERE a.staff_property_group_uuid=? and a.staff_property_master_uuid=? ");
|
return baseDao.listInternationDataTable(baseDao.listTable(sql.toString(), new Object[] {group_uuid,master_uuid}),null);
|
}
|
|
/**
|
* 新增属性分组
|
* @param fse 业务数据
|
* @return
|
* @throws BaseException
|
*/
|
@Transactional
|
public String addPropertyGroup(FieldSetEntity fse)throws BaseException{
|
return baseDao.add(fse);
|
}
|
|
/**
|
* 修改属性分组
|
* @param fse
|
* @return
|
* @throws BaseException
|
*/
|
@Transactional
|
public boolean updatePropertyGroup(FieldSetEntity fse)throws BaseException{
|
DataTableEntity dtDefaultProperty=fse.getSubDataTable(CmnConst.PRODUCT_SYS_STAFF_PROPERTY_GROUP_DEFALUT_VALUE);
|
if (dtDefaultProperty!=null && dtDefaultProperty.getRows()>0) {
|
int delCount=0;
|
int rowCount=dtDefaultProperty.getRows();
|
for (int i = 0; i < rowCount; i++) {
|
FieldSetEntity fseDefaultProperty=dtDefaultProperty.getFieldSetEntity(i);
|
String doMethod=fseDefaultProperty.getString("~type~");
|
if (doMethod!=null && "del".equals(doMethod)) {
|
delCount++;
|
}
|
}
|
if (delCount==rowCount) {
|
FieldSetEntity fseSaveDefaultProperty=dtDefaultProperty.getFieldSetEntity(0);
|
baseDao.executeUpdate("update product_sys_staff_property_group_default_value set effective_utc_datetime = NULL,value=NULL where uuid=?", new Object[] {fseSaveDefaultProperty.getUUID()});
|
dtDefaultProperty.removeFieldSetEntity(0);
|
}
|
if (dtDefaultProperty.getRows()==0) {
|
return true;
|
}else {
|
return baseDao.update(fse, true);
|
}
|
}else {
|
return baseDao.update(fse,true);
|
}
|
}
|
|
/**
|
* 删除属性分组
|
* @param uuid
|
* @return
|
* @throws BaseException
|
*/
|
@Transactional
|
public boolean deletePropertyGroup(String uuid)throws BaseException{
|
return baseDao.delete(CmnConst.PRODUCT_SYS_STAFF_PROPERTY_GROUP, "uuid=?", new String[] {uuid});
|
}
|
|
/**
|
* 系统分组属性封装
|
* @param dataParent 根属性
|
* @param dataSub 子属性
|
* @param type 封装类型 1.从master表获取 2.从业务表获取
|
* @return
|
* @throws BaseException
|
*/
|
public JSONArray sysPropertyGroup(DataTableEntity dataParent,DataTableEntity dataSub,int type) throws BaseException {
|
JSONArray propertyArray=new JSONArray();
|
//遍历根属性
|
for (int i = 0; i < dataParent.getRows(); i++) {
|
JSONObject sysProperty=new JSONObject();
|
FieldSetEntity fs=dataParent.getFieldSetEntity(i);
|
if (!StringUtils.isEmpty(fs.getString(CmnConst.STAFF_PROPERTY_MASTER_CODE))) { //杜洪波 updateTime 2020-12-17 15:16:00
|
if (type==1) {
|
sysProperty.put(CmnConst.STAFF_PROPERTY_MASTER_UUID, dataParent.getString(i, "uuid")); //uuid
|
}else {
|
sysProperty.put(CmnConst.VALUE, dataParent.getString(i, CmnConst.VALUE)); //默认值
|
sysProperty.put(CmnConst.STAFF_PROPERTY_MASTER_UUID, dataParent.getString(i, CmnConst.STAFF_PROPERTY_MASTER_UUID)); //uuid
|
}
|
sysProperty.put(CmnConst.DATA_TYPE, dataParent.getString(i, CmnConst.DATA_TYPE)); //数据类型
|
sysProperty.put(CmnConst.STAFF_PROPERTY_MASTER_CODE, dataParent.getString(i, CmnConst.STAFF_PROPERTY_MASTER_CODE)); //编码code
|
sysProperty.put(CmnConst.PARENT_CODE, dataParent.getString(i, CmnConst.PARENT_CODE)); //父级编码code
|
sysProperty.put(CmnConst.PROMPT_NAME, dataParent.getString(i, CmnConst.PROMPT_NAME)); //参照名
|
sysProperty.put(CmnConst.STAFF_PROPERTY_MASTER_NAME, getPropertyNameLanguage(fs.getSubDataTable(CmnConst.STAFF_PROPERTY_MASTER_NAME))); //属性名称
|
//获取当前根属性的子属性
|
if (dataSub!=null && dataSub.getRows()>0) {
|
JSONArray moduleChild = sysPropertyGroupSub(dataSub,fs.getString(CmnConst.STAFF_PROPERTY_MASTER_CODE),type);
|
sysProperty.put("children", moduleChild);
|
}
|
propertyArray.add(sysProperty);
|
}
|
}
|
return propertyArray;
|
}
|
|
/**
|
* 系统属性分组子属性封装
|
* @param data
|
* @param tricode_parent 父级属性节点编码
|
* @param type 封装类型
|
* @return
|
* @throws BaseException
|
*/
|
public JSONArray sysPropertyGroupSub(DataTableEntity dataSub,String tricode_parent,int type) throws BaseException {
|
JSONArray propertyArray=new JSONArray();
|
//遍历子属性
|
for (int i = 0; i < dataSub.getRows(); i++) {
|
|
JSONObject sysProperty=new JSONObject();
|
FieldSetEntity fs=dataSub.getFieldSetEntity(i);
|
//匹配子属性
|
if(tricode_parent.equals(dataSub.getString(i, CmnConst.PARENT_CODE))) {
|
//装载属性
|
if (type==1) {
|
sysProperty.put(CmnConst.STAFF_PROPERTY_MASTER_UUID, dataSub.getString(i, "uuid")); //uuid
|
|
}else {
|
sysProperty.put(CmnConst.VALUE, dataSub.getString(i, CmnConst.VALUE));
|
sysProperty.put(CmnConst.STAFF_PROPERTY_MASTER_UUID, dataSub.getString(i, CmnConst.STAFF_PROPERTY_MASTER_UUID)); //uuid
|
}
|
sysProperty.put(CmnConst.DATA_TYPE, dataSub.getString(i, CmnConst.DATA_TYPE)); //数据类型
|
sysProperty.put(CmnConst.STAFF_PROPERTY_MASTER_CODE, dataSub.getString(i, CmnConst.STAFF_PROPERTY_MASTER_CODE)); //属性编码
|
sysProperty.put(CmnConst.PARENT_CODE, dataSub.getString(i, CmnConst.PARENT_CODE)); //父级属性编码
|
sysProperty.put(CmnConst.PROMPT_NAME, dataSub.getString(i, CmnConst.PROMPT_NAME)); //参照名
|
sysProperty.put(CmnConst.STAFF_PROPERTY_MASTER_NAME, getPropertyNameLanguage(fs.getSubDataTable(CmnConst.STAFF_PROPERTY_MASTER_NAME))); //属性名称
|
//封装后代属性
|
JSONArray jsonSub=sysPropertyGroupSub(dataSub, dataSub.getString(i, CmnConst.STAFF_PROPERTY_MASTER_CODE),type);
|
|
if (!jsonSub.isEmpty()) {
|
sysProperty.put("children", jsonSub);
|
}
|
propertyArray.add(sysProperty);
|
}
|
}
|
return propertyArray;
|
}
|
|
/**
|
* 新增属性组,获取所有系统属性
|
* @return
|
* @throws BaseException
|
*/
|
public JSONArray getAllSysProperty() throws BaseException {
|
|
StringBuilder sqlCommon=new StringBuilder();
|
sqlCommon.append(" SELECT uuid,staff_property_master_code,staff_property_master_name,prompt_name,data_type,parent_code FROM ( ");
|
sqlCommon.append(" SELECT ");
|
sqlCommon.append(" a.*, ");
|
sqlCommon.append(" CASE WHEN LOCATE( '|', a.staff_property_master_code ) THEN REVERSE( SUBSTR( REVERSE( a.staff_property_master_code )FROM INSTR( REVERSE( a.staff_property_master_code ), '|' ) + 1 ) ) END AS parent_code ");
|
sqlCommon.append(" FROM (SELECT * FROM product_sys_staff_property_master)a ");
|
sqlCommon.append(" )b ");
|
|
//第一层系统属性
|
String sqlParent =sqlCommon.toString() + " where b.parent_code is NULL ";
|
//后代系统属性
|
String sqlSub=sqlCommon.toString() + " where b.parent_code is not NULL ";
|
|
DataTableEntity dtParentProperty=baseDao.listTable(sqlParent, new Object[] {});
|
DataTableEntity dtSubProperty=baseDao.listTable(sqlSub, new Object[] {});
|
|
baseDao.listInternationDataTable(dtParentProperty, null);
|
baseDao.listInternationDataTable(dtSubProperty, null);
|
|
JSONArray json=null;
|
if (dtParentProperty.getRows()>0) {
|
//装载属性
|
json=sysPropertyGroup(dtParentProperty,dtSubProperty,1);
|
}
|
|
return json;
|
}
|
|
/**
|
* 封装系统属性名称国际化
|
* @return
|
* @throws BaseException
|
*/
|
public List<JSONObject> getPropertyNameLanguage(DataTableEntity dtPropertyLanguage) throws BaseException {
|
|
List<JSONObject>listPropertyName=new ArrayList<JSONObject>();
|
|
if (dtPropertyLanguage!=null && dtPropertyLanguage.getRows()>0) {
|
|
//遍历获取语言代码和国际化值
|
FieldMetaEntity meta = dtPropertyLanguage.getMeta();
|
Object[] fields12 = meta.getFields();
|
List<Object> asList =new ArrayList<>();
|
asList.addAll(Arrays.asList(fields12));
|
Iterator<Object> iterator = asList.iterator();
|
for (int i = 0; i < dtPropertyLanguage.getRows(); i++) {
|
while (iterator.hasNext()) {
|
Object next = iterator.next();
|
if(!next.toString().equals("uuid") &&!next.toString().equals("language_code")) {
|
String string = dtPropertyLanguage.getString(i, next.toString());
|
if(!StringUtils.isEmpty(string)) {
|
JSONObject propertyName=new JSONObject();
|
propertyName.put(next.toString(), string);
|
listPropertyName.add(propertyName);
|
iterator.remove();
|
break;
|
}
|
}else {
|
iterator.remove();
|
}
|
}
|
}
|
|
}
|
return listPropertyName;
|
}
|
}
|