package foundation.dao;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.Logger;
|
|
import foundation.action.ActionContext;
|
import foundation.dao.bizlogic.IActionProvider;
|
import foundation.data.entity.Entity;
|
import foundation.data.meta.property.MetaType;
|
import foundation.data.object.DataObject;
|
import foundation.data.rule.exists.ExistsValidator;
|
import foundation.json.JSONReader;
|
import foundation.json.JType;
|
import foundation.util.Util;
|
|
|
public class DataPipe implements IActionProvider {
|
|
protected static Logger logger;
|
private static DataPipe instance;
|
|
static {
|
logger = LogManager.getLogger(DataPipe.class);
|
}
|
|
private DataPipe() {
|
|
}
|
|
public static synchronized DataPipe getInstance() {
|
if (instance == null) {
|
instance = new DataPipe();
|
}
|
|
return instance;
|
}
|
|
@Override
|
public void exec(ActionContext meta, String method) throws Exception {
|
OperatorCode code = meta.getOperatorCode();
|
|
if (OperatorCode.GetBatch == code) {
|
processGetBatch(meta);
|
}
|
else if (OperatorCode.GetTree == code) {
|
processGetTree(meta);
|
}
|
else if (OperatorCode.NewOne == code) {
|
processNewOne(meta);
|
}
|
else if (OperatorCode.GetOne == code) {
|
processGetOne(meta);
|
}
|
else if (OperatorCode.Save == code) {
|
processSaveOne(meta);
|
}
|
else if (OperatorCode.UniqueSave == code) {
|
processSaveUniqueOne(meta);
|
}
|
else if (OperatorCode.Clone == code) {
|
processClone(meta);
|
}
|
else if (OperatorCode.Activate == code) {
|
processActivateOne(meta);
|
}
|
else if (OperatorCode.Fallback == code) {
|
processFallbackOne(meta);
|
}
|
else if (OperatorCode.Alter == code) {
|
processAlter(meta);
|
}
|
else if (OperatorCode.Delete == code) {
|
processDeleteOne(meta);
|
}
|
else if (OperatorCode.lockRecord == code) {
|
lockRecord(meta);
|
}
|
else if (OperatorCode.GetTotalCnt == code) {
|
processTotalCnt(meta);
|
}
|
else if (OperatorCode.GetSummary == code) {
|
processSummary(meta);
|
}
|
}
|
|
public void processGetBatch(ActionContext meta) throws Exception {
|
DataPackage dataPackage = meta.getDataPackage();
|
|
//1. load filter page order from JSON
|
dataPackage.loadFilterPageOrderByFromJSON();
|
|
//2. load data package from persist
|
dataPackage.loadBatchDataFromDB();
|
dataPackage.setResultData(DataSource.DB);
|
|
//3. set data to letter
|
DataWriter dataWriter = meta.getDataWriter();
|
dataWriter.setDataPackage(dataPackage);
|
}
|
|
private void processGetTree(ActionContext meta) throws Exception {
|
DataPackage dataPackage = meta.getDataPackage();
|
|
//1. load filter page order from JSON
|
dataPackage.loadFilterPageOrderByFromJSON();
|
|
//2. load data package from persist
|
dataPackage.loadTreeDataFromDB();
|
dataPackage.setResultData(DataSource.DB);
|
|
//3. set data to letter
|
DataWriter dataWriter = meta.getDataWriter();
|
dataWriter.setDataPackage(dataPackage);
|
}
|
|
public void processNewOne(ActionContext meta) throws Exception {
|
DataPackage dataPackage = meta.getDataPackage();
|
|
//1. 默认返回 meta
|
Domain domain = meta.getDataReader().getDomain();
|
domain.setMetaType(MetaType.Form);
|
|
//2. create default data
|
dataPackage.createDefaultOneData();
|
dataPackage.setResultData(DataSource.New);
|
|
//3. set data to letter
|
DataWriter dataWriter = meta.getDataWriter();
|
dataWriter.setDataPackage(dataPackage);
|
}
|
|
public void processGetOne(ActionContext meta) throws Exception {
|
DataPackage dataPackage = meta.getDataPackage();
|
|
//1. load id from JSON
|
dataPackage.loadFilterFromJSON();
|
|
//2. load data package from DB or cached
|
dataPackage.loadOneDataFromPersist();
|
dataPackage.setResultData(DataSource.DB);
|
|
//3. set data to letter
|
DataWriter dataWriter = meta.getDataWriter();
|
dataWriter.setDataPackage(dataPackage);
|
}
|
|
public void processSaveOne(ActionContext context) throws Exception {
|
DataReader dataReader = context.getDataReader();
|
DataWriter dataWriter = context.getDataWriter();
|
DataPackage dataPackage = context.getDataPackage();
|
|
//1. load data from JSON
|
dataPackage.loadDataFromRequest();
|
|
//2. validate
|
dataPackage.execValidateRules(dataWriter);
|
|
//3. save data to persist(包含数据本身和 Host)
|
dataPackage.saveOneDataToPersist(dataReader, dataWriter);
|
|
//4. 如果是insert,要将master id 回写到domain里面
|
writeBackMasterId(dataReader, dataPackage.getMasterId());
|
|
//5. set data to letter
|
dataWriter.setDataPackage(dataPackage);
|
}
|
|
public void processSaveUniqueOne(ActionContext context) throws Exception {
|
DataReader dataReader = context.getDataReader();
|
DataWriter dataWriter = context.getDataWriter();
|
DataPackage dataPackage = context.getDataPackage();
|
|
//1. load data from JSON
|
dataPackage.loadDataFromRequest();
|
|
//2. validate
|
dataPackage.execValidateRules(dataWriter);
|
|
ExistsValidator existsValidator = new ExistsValidator();
|
boolean existsEntity = existsValidator.checkExists(dataPackage, context);
|
|
if (existsEntity) {
|
return;
|
}
|
|
//3. save data to persist(包含数据本身和 Host)
|
dataPackage.saveOneDataToPersist(dataReader, dataWriter);
|
|
//4. 如果是insert,要将master id 回写到domain里面
|
writeBackMasterId(dataReader, dataPackage.getMasterId());
|
|
//5. set data to letter
|
dataWriter.setDataPackage(dataPackage);
|
}
|
|
public void processClone(ActionContext context) throws Exception {
|
DataReader dataReader = context.getDataReader();
|
DataWriter dataWriter = context.getDataWriter();
|
|
DataPackage dataPackage = context.getDataPackage();
|
dataPackage.loadOneDataFromDB();
|
|
//1. 如果是单条克隆
|
if (!dataPackage.isEmpty(DataSource.DB)) {
|
DataPackage target = dataPackage.cloneOneData(DataSource.DB);
|
target.saveOneDataToDB(DataSource.New, dataReader, dataWriter);
|
target.setResultData(DataSource.New);
|
|
dataWriter.setDataPackage(target);
|
return;
|
}
|
|
//2. 如果是多条克隆
|
JSONReader reader = dataReader.getReader("id", JType.Array);
|
|
if (reader != null) {
|
List<String> ids = reader.getStringList();
|
List<String> result = new ArrayList<String>();
|
|
for (String id: ids) {
|
dataPackage.setMasterId(id);
|
dataPackage.loadOneDataFromDB();
|
|
DataPackage target = dataPackage.cloneOneData(DataSource.DB);
|
target.saveOneDataToDB(DataSource.New);
|
|
result.add(target.getMasterId());
|
}
|
|
dataWriter.addValue(result);
|
return;
|
}
|
}
|
|
public void processActivateOne(ActionContext meta) throws Exception {
|
DataPackage dataPackage = meta.getDataPackage();
|
|
//1. load id from JSON
|
dataPackage.loadDataIdFromRequest();
|
|
//2. activate data from persist
|
dataPackage.loadHostIdFromDB();
|
|
//3. activate data from persist
|
DataPackage host = dataPackage.getHost();
|
|
if (host == null) {
|
host = dataPackage;
|
}
|
|
host.activateOneData();
|
|
//4. set data to letter
|
DataWriter dataWriter = meta.getDataWriter();
|
dataWriter.setDataPackage(dataPackage);
|
}
|
|
public void processFallbackOne(ActionContext meta) throws Exception {
|
DataPackage dataPackage = meta.getDataPackage();
|
|
//1. load id from JSON
|
dataPackage.loadDataIdFromRequest();
|
|
//2. fallback data from persist
|
DataPackage host = dataPackage.getHost();
|
|
if (host == null) {
|
host = dataPackage;
|
}
|
|
host.fallbackOneData();
|
|
//3. set data to letter
|
DataWriter dataWriter = meta.getDataWriter();
|
dataWriter.setDataPackage(dataPackage);
|
}
|
|
public void processAlter(ActionContext meta) throws Exception {
|
String dataName = meta.getDataName();
|
DataPackage dataPackage = meta.getDataPackage();
|
//1. load id from JSON
|
dataPackage.loadDataFromRequest();
|
dataPackage.loadFilterPageOrderByFromJSON();
|
|
Entity entity = dataPackage.getItemEntity(dataName, DataSource.Request);
|
Filter filter = dataPackage.getFilter();
|
DataObject dataObject = dataPackage.getDataObject(dataName);
|
|
//2. udpate data from persist
|
dataObject.updateByEntity(entity, filter);
|
|
DataWriter dataWriter = meta.getDataWriter();
|
dataWriter.setDataPackage(dataPackage);
|
}
|
|
public void processDeleteOne(ActionContext meta) throws Exception {
|
DataPackage dataPackage = meta.getDataPackage();
|
|
//1. load id from JSON
|
dataPackage.loadDataIdFromRequest();
|
|
//2. delete data from persist
|
dataPackage.deleteOneDataFromDB();
|
|
//3. set data to letter
|
DataWriter dataWriter = meta.getDataWriter();
|
dataWriter.setDataPackage(dataPackage);
|
}
|
|
private void lockRecord(ActionContext meta) throws Exception {
|
DataPackage dataPackage = meta.getDataPackage();
|
|
//1. load id from JSON
|
dataPackage.loadDataIdFromRequest();
|
|
//2. delete data from persist
|
dataPackage.lockMasterRecord();
|
}
|
|
public void processTotalCnt(ActionContext meta) throws Exception {
|
DataReader dataReader = meta.getDataReader();
|
DataPackage dataPackage = meta.getDataPackage();
|
|
//1. load filter page order from JSON
|
dataPackage.loadFilterFromJSON();
|
|
//2. load data package from persist
|
String dataName = dataReader.getDecodeString("dataName", "");
|
if (Util.isEmpty(dataName)) {
|
logger.error("dataName为空,无法执行processTotalCnt");
|
return;
|
}
|
|
DataObject dataObject = dataPackage.getDataObject(dataName);
|
Filter filter = dataPackage.filter;
|
int count = dataObject.getCount(filter, dataReader.getUser());
|
|
//3. set data
|
DataWriter dataWriter = meta.getDataWriter();
|
dataWriter.addValue(count);
|
}
|
|
private void processSummary(ActionContext meta) throws Exception {
|
DataReader dataReader = meta.getDataReader();
|
DataPackage dataPackage = meta.getDataPackage();
|
|
List<String> fields = dataReader.getStringList("sum");
|
SummaryFields sum = SummaryFields.getInstance(fields);
|
|
//1. load filter page order from JSON
|
dataPackage.loadFilterFromJSON();
|
dataPackage.loadUserLineFilter();
|
|
//2. load data package from persist
|
String dataName = dataReader.getDecodeString("dataName", "");
|
if (Util.isEmpty(dataName)) {
|
logger.error("dataName为空,无法执行processSummary");
|
return;
|
}
|
|
DataObject dataObject = dataPackage.getDataObject(dataName);
|
Filter filter = dataPackage.filter;
|
Entity entity = dataObject.getSummary(sum.getValue(), filter, dataReader.getUser());
|
|
//3. set data
|
DataWriter dataWriter = meta.getDataWriter();
|
dataWriter.addValue(entity);
|
}
|
|
private void writeBackMasterId(DataReader dataReader, String masterId) throws Exception {
|
Domain domain = dataReader.getDomain();
|
|
if (domain == null) {
|
return;
|
}
|
|
if (domain.isEmptyId()) {
|
domain.setId(masterId);
|
}
|
}
|
|
@Override
|
public void test(ActionContext context, String method) throws Exception {
|
}
|
|
}
|