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 getPropertyNameLanguage(DataTableEntity dtPropertyLanguage) throws BaseException { ListlistPropertyName=new ArrayList<>(); if (dtPropertyLanguage!=null && dtPropertyLanguage.getRows()>0) { //遍历获取语言代码和国际化值 forDtPropertyLanguage(dtPropertyLanguage,listPropertyName); } return listPropertyName; } private void forDtPropertyLanguage(DataTableEntity dtPropertyLanguage, List listPropertyName) { FieldMetaEntity meta = dtPropertyLanguage.getMeta(); Object[] fields12 = meta.getFields(); List asList = new ArrayList<>(); asList.addAll(Arrays.asList(fields12)); Iterator 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(); } } } } }