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.org.admin.config.CmnConst;
|
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.service.support.AbstractBaseService;
|
import com.product.core.transfer.Transactional;
|
import com.product.org.admin.service.idel.ICompanyPropertyService;
|
|
/**
|
* Copyright LX-BASE
|
*
|
* @Title: CompanyPropertyService
|
* @Project: LX-BASE-SERVER
|
* @Date: 2020年5月29日 上午11:07:26
|
* @Author:
|
* @Description:公司属性配置,对应公司属性表
|
*/
|
@Component
|
public class CompanyPropertyService extends AbstractBaseService implements ICompanyPropertyService {
|
|
@Autowired
|
public BaseDao baseDao;
|
|
/**
|
* 公司属性列表
|
*
|
* @param uuid
|
* @return
|
* @throws BaseException
|
*/
|
public JSONObject lisCompanytPropperty(String uuid) throws BaseException {
|
DataTableEntity dtCompanyProperty = baseDao.listTable(CmnConst.PRODUCT_SYS_COMPANY_PROPERTY, "org_level_uuid=?",
|
new Object[] { uuid });
|
if (dtCompanyProperty == null || dtCompanyProperty.getRows() == 0) {
|
|
FieldSetEntity fseCompany = baseDao.getFieldSetEntity(CmnConst.PRODUCT_SYS_ORG_LEVELS, uuid, false);
|
if (fseCompany == null) {
|
throw new BaseException("", "");
|
}
|
|
DataTableEntity dtCompanyPropertyMaster = baseDao.listTable(CmnConst.PRODUCT_SYS_COMPANY_PROPERTY_MASTER);
|
DataTableEntity dtNew = new DataTableEntity();
|
FieldMetaEntity fseMate = new FieldMetaEntity();
|
dtNew.setMeta(fseMate);
|
fseMate.setTableName(new Object[] { CmnConst.PRODUCT_SYS_COMPANY_PROPERTY });
|
|
for (int i = 0; i < dtCompanyPropertyMaster.getRows(); i++) {
|
FieldSetEntity fseCOmpanyPropertyMaster = dtCompanyPropertyMaster.getFieldSetEntity(i);
|
FieldSetEntity fseNew = new FieldSetEntity();
|
fseNew.setMeta(fseMate);
|
fseNew.setValue(CmnConst.ORG_LEVEL_UUID, uuid);
|
fseNew.setValue(CmnConst.COMPANY_PROPERTY_MASTER_UUID, fseCOmpanyPropertyMaster.getString("uuid"));
|
fseNew.setValue(CmnConst.COMPANY_PROPERTY_MASTER_CODE,
|
fseCOmpanyPropertyMaster.getString(CmnConst.COMPANY_PROPERTY_MASTER_CODE));
|
dtNew.addFieldSetEntity(fseNew);
|
}
|
if (dtCompanyPropertyMaster.getRows()>0) {
|
baseDao.add(dtNew);
|
}
|
}
|
|
JSONObject jsonStaffProperty = new JSONObject();
|
StringBuilder sqlCommon = new StringBuilder();
|
|
sqlCommon.append(" SELECT ");
|
sqlCommon.append(" d.uuid,d.company_property_id,d.org_level_uuid,e.uuid company_property_master_uuid,e.company_property_master_code,d.value,d.effective_utc_datetime, ");
|
sqlCommon.append(" e.uuid,e.company_property_master_name,e.prompt_name,e.data_type ");
|
sqlCommon.append(" FROM ( ");
|
sqlCommon.append(" SELECT a.company_property_id,a.uuid,a.org_level_uuid,a.company_property_master_uuid,a.company_property_master_code,a.value,a.effective_utc_datetime, ");
|
sqlCommon.append(" CASE WHEN LOCATE( '|', a.company_property_master_code) THEN REVERSE(SUBSTR(REVERSE(a.company_property_master_code) FROM INSTR(REVERSE( a.company_property_master_code ), '|' ) + 1 )) END AS parent_code ");
|
sqlCommon.append(" FROM product_sys_company_property AS a,( ");
|
sqlCommon.append(" SELECT company_property_master_uuid,MAX(effective_utc_datetime) AS effective_utc_datetime ");
|
sqlCommon.append(" FROM product_sys_company_property WHERE effective_utc_datetime <= NOW() AND org_level_uuid = ? GROUP BY company_property_master_uuid ");
|
sqlCommon.append(" UNION ALL ");
|
sqlCommon.append(" SELECT company_property_master_uuid,MIN(effective_utc_datetime) AS effective_utc_datetime ");
|
sqlCommon.append(" FROM product_sys_company_property WHERE org_level_uuid= ? ");
|
sqlCommon.append(" GROUP BY company_property_master_uuid ");
|
sqlCommon.append(" HAVING MIN(effective_utc_datetime) > NOW() ");
|
sqlCommon.append(" UNION ALL ");
|
sqlCommon.append(" SELECT company_property_master_uuid,NULL ");
|
sqlCommon.append(" FROM product_sys_company_property WHERE effective_utc_datetime IS NULL AND value IS NULL AND org_level_uuid=? ");
|
sqlCommon.append(" GROUP BY company_property_master_uuid ");
|
|
sqlCommon.append(" ) AS c ");
|
sqlCommon.append(" WHERE a.company_property_master_uuid = c.company_property_master_uuid AND (a.effective_utc_datetime=c.effective_utc_datetime OR c.effective_utc_datetime IS NULL) AND a.org_level_uuid = ? ");
|
sqlCommon.append(" ) AS d ");
|
sqlCommon.append(" RIGHT JOIN product_sys_company_property_master AS e ON d.company_property_master_uuid = e.uuid AND d.company_property_master_code=e.company_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, new Object[] { uuid, uuid, uuid, uuid });
|
// 子属性
|
DataTableEntity dtSub = baseDao.listTable(sqlSub, new Object[] { uuid, uuid, uuid, uuid });
|
|
baseDao.listInternationDataTable(dtParent, null);
|
baseDao.listInternationDataTable(dtSub, null);
|
|
if (dtParent.getRows() > 0) {
|
// 装载属性
|
JSONArray json = sysPropertyParent(dtParent, dtSub);
|
jsonStaffProperty.put(CmnConst.PRODUCT_SYS_STAFF_PROPERTY, json);
|
}
|
return jsonStaffProperty;
|
}
|
|
/**
|
* 公司属性详情
|
*
|
* @param org_level_uuid
|
* @param master_uuid
|
* @return
|
* @throws BaseException
|
*/
|
public DataTableEntity findCompanyProperty(String org_level_uuid, String master_uuid) throws BaseException {
|
|
StringBuilder sql = new StringBuilder();
|
sql.append(" SELECT a.uuid, ");
|
sql.append(
|
" a.company_property_id,a.company_uuid,a.company_property_master_uuid,a.company_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_company_property a ");
|
sql.append(" LEFT JOIN product_sys_company_property_master b ");
|
sql.append(
|
" ON a.company_property_master_uuid=b.uuid AND a.company_property_master_code=b.company_property_master_code ");
|
sql.append(" WHERE a.org_level_uuid=? and a.company_property_master_uuid=? ");
|
return baseDao.listInternationDataTable(
|
baseDao.listTable(sql.toString(), new Object[] { org_level_uuid, master_uuid }), null);
|
}
|
|
/**
|
* 公司属性修改
|
*
|
* @param fse
|
* @return
|
* @throws BaseException
|
*/
|
@Transactional
|
public boolean updateCompanyProperty(FieldSetEntity fse) throws BaseException {
|
DataTableEntity dtCompanyProperty = fse.getSubDataTable(CmnConst.PRODUCT_SYS_COMPANY_PROPERTY);
|
if (dtCompanyProperty != null && dtCompanyProperty.getRows() > 0) {
|
int delCount = 0;
|
int rowCount = dtCompanyProperty.getRows();
|
for (int i = 0; i < rowCount; i++) {
|
FieldSetEntity fseDefaultProperty = dtCompanyProperty.getFieldSetEntity(i);
|
String doMethod = fseDefaultProperty.getString("~type~");
|
if (doMethod != null && "del".equals(doMethod)) {
|
delCount++;
|
}
|
}
|
if (delCount == rowCount) {
|
FieldSetEntity fseSaveDefaultProperty = dtCompanyProperty.getFieldSetEntity(0);
|
baseDao.executeUpdate(
|
"update product_sys_company_property set effective_utc_datetime = NULL,value=NULL where uuid=?",
|
new Object[] { fseSaveDefaultProperty.getUUID() });
|
dtCompanyProperty.removeFieldSetEntity(0);
|
}
|
if (dtCompanyProperty.getRows() == 0) {
|
return true;
|
} else {
|
return baseDao.update(dtCompanyProperty);
|
}
|
} else {
|
return true;
|
}
|
}
|
|
/**
|
* 属性封装根属性
|
*
|
* @param dataParent
|
* @param dataSub
|
* @return
|
* @throws BaseException
|
*/
|
|
public JSONArray sysPropertyParent(DataTableEntity dataParent, DataTableEntity dataSub) 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("company_property_master_code"))) { // 杜洪波 updateTime 2020-01-05
|
// 14:43:00 树形 列表显示错误
|
sysProperty.put("uuid", dataParent.getString(i, "uuid"));
|
sysProperty.put(CmnConst.COMPANY_PROPERTY_MASTER_UUID,
|
dataParent.getString(i, CmnConst.COMPANY_PROPERTY_MASTER_UUID)); // uuid
|
sysProperty.put(CmnConst.COMPANY_PROPERTY_MASTER_CODE,
|
dataParent.getString(i, CmnConst.COMPANY_PROPERTY_MASTER_CODE)); // 编码code
|
sysProperty.put(CmnConst.VALUE, dataParent.getString(i, CmnConst.VALUE)); // 默认值
|
sysProperty.put(CmnConst.EFFECTIVE_UTC_DATETIME,
|
dataParent.getString(i, CmnConst.EFFECTIVE_UTC_DATETIME));
|
sysProperty.put(CmnConst.ORG_LEVEL_UUID, dataParent.getString(i, CmnConst.ORG_LEVEL_UUID));
|
sysProperty.put(CmnConst.DATA_TYPE, dataParent.getString(i, CmnConst.DATA_TYPE)); // 数据类型
|
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.COMPANY_PROPERTY_MASTER_NAME,
|
fs.getString(CmnConst.COMPANY_PROPERTY_MASTER_NAME)); // 属性名称
|
|
// 获取当前根属性的子属性
|
JSONArray moduleChild = sysPropertySub(dataSub, fs.getString(CmnConst.COMPANY_PROPERTY_MASTER_CODE));
|
sysProperty.put("children", moduleChild);
|
propertyArray.add(sysProperty);
|
}
|
}
|
return propertyArray;
|
}
|
|
/**
|
* 属性封装后代属性
|
*
|
* @param dataSub
|
* @param tricode_parent
|
* @return
|
* @throws BaseException
|
*/
|
public JSONArray sysPropertySub(DataTableEntity dataSub, String tricode_parent) 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))) {
|
// 装载属性
|
sysProperty.put("uuid", dataSub.getString(i, "uuid"));
|
sysProperty.put(CmnConst.COMPANY_PROPERTY_MASTER_UUID,
|
dataSub.getString(i, CmnConst.COMPANY_PROPERTY_MASTER_UUID)); // uuid
|
sysProperty.put(CmnConst.COMPANY_PROPERTY_MASTER_CODE,
|
dataSub.getString(i, CmnConst.COMPANY_PROPERTY_MASTER_CODE)); // 编码code
|
sysProperty.put(CmnConst.VALUE, dataSub.getString(i, CmnConst.VALUE)); // 默认值
|
sysProperty.put(CmnConst.EFFECTIVE_UTC_DATETIME, dataSub.getString(i, CmnConst.EFFECTIVE_UTC_DATETIME));
|
sysProperty.put(CmnConst.ORG_LEVEL_UUID, dataSub.getString(i, CmnConst.ORG_LEVEL_UUID));
|
sysProperty.put(CmnConst.DATA_TYPE, dataSub.getString(i, CmnConst.DATA_TYPE)); // 数据类型
|
sysProperty.put(CmnConst.PARENT_CODE, dataSub.getString(i, CmnConst.PARENT_CODE)); // 父级编码code
|
sysProperty.put(CmnConst.PROMPT_NAME, dataSub.getString(i, CmnConst.PROMPT_NAME)); // 参照名
|
// sysProperty.put("company_property_master_name", getPropertyNameLanguage(fs.getSubDataTable("company_property_master_name"))); //属性名称
|
sysProperty.put(CmnConst.COMPANY_PROPERTY_MASTER_NAME,
|
fs.getString(CmnConst.COMPANY_PROPERTY_MASTER_NAME)); // 属性名称
|
|
JSONArray jsonSub = sysPropertySub(dataSub,
|
dataSub.getString(i, CmnConst.COMPANY_PROPERTY_MASTER_CODE));
|
if (!jsonSub.isEmpty()) {
|
sysProperty.put("children", jsonSub);
|
}
|
propertyArray.add(sysProperty);
|
}
|
}
|
return propertyArray;
|
}
|
|
/**
|
* 获取属性名称国际化
|
* @param dtPropertyLanguage
|
* @return
|
* @throws BaseException
|
*/
|
public List<JSONObject> getPropertyNameLanguage(DataTableEntity dtPropertyLanguage) throws BaseException {
|
List<JSONObject>listPropertyName=new ArrayList<>();
|
if (dtPropertyLanguage!=null && dtPropertyLanguage.getRows()>0) {
|
//遍历获取语言代码和国际化值
|
forDtPropertyLanguage(dtPropertyLanguage,listPropertyName);
|
}
|
return listPropertyName;
|
}
|
|
private void forDtPropertyLanguage(DataTableEntity dtPropertyLanguage, List<JSONObject> listPropertyName) {
|
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();
|
}
|
}
|
}
|
}
|
}
|