FTPC AT表(表对象)前端工具类,批量保存,删除,更新,表关联,强制Dependent子表查询
package com.mes.util.common;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import java.util.stream.Collectors;
import com.datasweep.compatibility.client.*;
import com.datasweep.compatibility.client.Error;
import com.datasweep.compatibility.manager.ServerImpl;
import com.datasweep.compatibility.ui.Time;
import com.datasweep.plantops.common.constants.filtering.IFilterComparisonOperators;
import com.datasweep.plantops.common.dataobjects.DATRow;
import com.datasweep.plantops.common.dataobjects.DReadInfo;
import com.ftpc.common.utilities.ATRowUtility;
import com.rockwell.mes.commons.base.ifc.objects.IMESATObject;
import com.rockwell.mes.commons.base.ifc.objects.MESATObject;
import com.rockwell.mes.commons.base.ifc.objects.MESATObjectManager;
import com.rockwell.mes.commons.base.ifc.services.IFunctionsEx;
import com.rockwell.mes.commons.base.ifc.services.PCContext;
import com.rockwell.mes.commons.base.ifc.utility.CollectionUtility;
/**
* AT表(对象)工具类
*
* @author xuweijun
* @date 2022/5/23
*/
public class ATUtils extends ATRowUtility{
//private constructor
private ATUtils() {
}
public static void joinInFilter(ATRowFilter parentFilter, ATRowFilter dependentFilter) {
parentFilter.addSearchForSubFilter(null,ATRowFilter.KEY,
IFilterComparisonOperators.IN,null,ATRowFilter.PARENT_KEY,dependentFilter);
}
/**
* ATRow 转 java 对象
* @author xuweijun
* @date 2022/5/23 09:32
* @param atRows 集合
* @param clazz 类型
* @return java.util.List<T>
*/
public <T extends IMESATObject> List<T> convert(List<ATRow> atRows, Class<T> clazz) {
if(CollectionUtility.isEmpty(atRows))
return null;
return atRows.stream().map(item -> convert(item, clazz)).collect(Collectors.toList());
}
/**
* ATRow 转 java 对象
* @author xuweijun
* @date 2022/5/23 09:38
* @param atRow atRow
* @param clazz 类型
* @return T
*/
public <T extends IMESATObject> T convert(ATRow atRow, Class<T> clazz) {
return MESATObjectManager.getSynchronizedInstance(clazz, atRow);
}
/**
* 按子表filter过滤子表结果
* @author xuweijun
* @date 2022/5/23 09:01
* @param atRowFilter 子表过滤器
* @return java.util.Vector<com.datasweep.compatibility.client.ATRow>
*/
public static Vector<ATRow> getDenpendentAtrows(ATRowFilter atRowFilter) throws Exception {
DATRow[] var4 = ServerImpl.getDefaultServer().getProxyFactory().getObjectRetrievalProxy().getATRows(FilterSupport.getData(atRowFilter), true, (DReadInfo) null);
Vector<ATRow> atRows = new Vector<>();
if (var4 != null) {
for (int var5 = 0; var5 < var4.length; ++var5) {
Class<ATRow> atRowClass = ATRow.class;
Class[] parameterTypes = {
DATRow.class, Server.class};
Constructor<ATRow> constructor = atRowClass.getDeclaredConstructor(parameterTypes);
constructor.setAccessible(true);
ATRow atRow1 = constructor.newInstance(var4[var5], ServerImpl.getDefaultServer());
atRows.add(atRow1);
}
}
return atRows;
}
/**
* 通过子ATRow获取ParentATRow
* @author xuweijun
* @date 2022/5/23 09:03
* @param dependentATrow 子ATRow
* @return com.datasweep.compatibility.client.ParentATRow
*/
public static ParentATRow getParentAtRowByDependentAtRow(ATRow dependentATrow) throws DatasweepException {
ATDefinition atDefinition = dependentATrow.getATDefinition();
if (!atDefinition.isDependent())
return null;
ATDefinition parentATDefinition = atDefinition.getParentATDefinition();
Object datRow = ReflectUtilsEx.getObjByField(dependentATrow, dependentATrow.getClass(), "datRow");
DATRow datRow1 = ReflectUtilsEx.convertValue(datRow, DATRow.class);
ATRow atRow1 = ServerImpl.getDefaultServer().getATManager(parentATDefinition).getATRow(datRow1.getParentKey(), true);
return (ParentATRow) atRow1;
}
/**
* 方法说明
* 测试
* @param args
* @return void
* @author xuweijun
* @date 2022/5/23 09:01
*/
public static void main(String[] args) throws Exception {
IFunctionsEx functions = PCContext.getFunctions();
ServerImpl defaultServer = ServerImpl.getDefaultServer();
ATHandler atHandler = functions.createATHandler("MAH_Product_Test");
ATRowFilter atRowFilter = functions.createATRowFilter("MAH_SolutionDetail");
Vector atRowsByFilter = atHandler.getATRowsByFilter(atRowFilter, true);
ATRow atRow = atHandler.createATRow();
ATDefinition atDefinition = functions.createATDefinition("123");
ATRowFilter atRowFilter_ = atDefinition.createATRowFilter_();
ATRow atRow_ = atDefinition.createATRow_();
atRow_.setValue("123", new Object());
ATRow atRow1 = atHandler.createATRow();
Response save = atRow1.save(null, null, null);
ATDefinition mah_solutionMain = functions.getATDefinition("MAH_SolutionMain");
ATRowFilter atRowFilter_1 = mah_solutionMain.createATRowFilter_();
// ATRowFilter atRowFilter_1 = atDefinition.createATRowFilter_();//鏃犳硶寰楀埌ParentATRow
ATRowFilter mah_solutionDetail = functions.createATRowFilter("MAH_SolutionDetail");
ATUtils.joinInFilter(atRowFilter_1, mah_solutionDetail);
Vector<ParentATRow> exec = atRowFilter_1.exec();
ParentATRow parentATRow = exec.get(0);
Vector<DependentATRow> dependentATRows = parentATRow.getDependentATRows();
Vector<ATRow> denpendentAtrows = ATUtils.getDenpendentAtrows(mah_solutionDetail);
ATRow atRowDepent = denpendentAtrows.get(0);
ParentATRow parentATRow1 = ATUtils.getParentAtRowByDependentAtRow(atRowDepent);
}
/**
* 批量保存ATrows
* @author xuweijun
* @date 2022/6/11 16:57
* @param atRows
* @return com.datasweep.compatibility.client.Response
*/
public static Response saveAtRows(List<ATRow> atRows){
if(CollectionUtility.isEmpty(atRows))return new Response(new Error(new Exception("保存失败,传入List为"),PCContext.getServerImpl()));
ATHandler atHandler = PCContext.getFunctions().createATHandler(atRows.get(0).getATDefinition().getName());
// 创建ATRowMap
Object atRowCache = ReflectUtilsEx.getObjByField(atHandler, atHandler.getClass(), "atRowCache");
Map map = ReflectUtilsEx.convertValue(atRowCache, Map.class);
atRows.forEach(item->map.put(new Long(item.getKey()), item));
return atHandler.save();
}
/**
* 批量保存ATObjects
* @author xuweijun
* @date 2022/6/11 16:57
* @param atObjects
* @return com.datasweep.compatibility.client.Response
*/
public static Response saveAtObjects(List<? extends MESATObject> atObjects){
if(CollectionUtility.isEmpty(atObjects))return new Response(new Error(new Exception("保存失败,传入List为空"),PCContext.getServerImpl()));
List<ATRow> atRows = atObjects.stream().map(item -> item.getATRow()).collect(Collectors.toList());
return saveAtRows(atRows);
}
/**
* 批量删除
* @author xuweijun
* @date 2022/8/10 10:48
* @param atRows
* @return com.datasweep.compatibility.client.Response
*/
public static Response deleteAtRows(List<ATRow> atRows){
if(CollectionUtility.isEmpty(atRows))return new Response(new Error(new Exception("删除失败,传入List为空"),PCContext.getServerImpl()));
atRows.forEach(item -> {
item.markAsDeleted();
});
return saveAtRows(atRows);
}
/**
* 批量删除
* @author xuweijun
* @date 2022/8/10 10:48
* @param atObjects
* @return com.datasweep.compatibility.client.Response
*/
public static Response deleteAtObjects(List<? extends MESATObject> atObjects){
if(CollectionUtility.isEmpty(atObjects))return new Response(new Error(new Exception("删除失败,传入List为空"),PCContext.getServerImpl()));
atObjects.forEach(item -> {
item.getATRow().markAsDeleted();
});
return saveAtObjects(atObjects);
}
}