2025-11-26 03:43:27 +00:00
|
|
|
|
package tqq9.lc123.cloud.app.plugin.operate.sys;
|
|
|
|
|
|
|
|
|
|
|
|
import kd.bos.dataentity.OperateOption;
|
|
|
|
|
|
import kd.bos.dataentity.entity.CloneUtils;
|
|
|
|
|
|
import kd.bos.dataentity.entity.DynamicObject;
|
|
|
|
|
|
import kd.bos.entity.botp.runtime.ConvertOperationResult;
|
|
|
|
|
|
import kd.bos.entity.botp.runtime.PushArgs;
|
|
|
|
|
|
import kd.bos.entity.datamodel.ListSelectedRow;
|
|
|
|
|
|
import kd.bos.entity.operate.OperateOptionConst;
|
2025-11-26 09:01:17 +00:00
|
|
|
|
import kd.bos.entity.operate.result.OperationResult;
|
2025-11-26 03:43:27 +00:00
|
|
|
|
import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
|
|
|
|
|
|
import kd.bos.entity.plugin.AddValidatorsEventArgs;
|
|
|
|
|
|
import kd.bos.entity.plugin.args.AfterOperationArgs;
|
|
|
|
|
|
import kd.bos.entity.validate.AbstractValidator;
|
|
|
|
|
|
import kd.bos.logging.Log;
|
|
|
|
|
|
import kd.bos.logging.LogFactory;
|
|
|
|
|
|
import kd.bos.orm.query.QCP;
|
|
|
|
|
|
import kd.bos.orm.query.QFilter;
|
|
|
|
|
|
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
|
|
|
|
|
import kd.bos.servicehelper.basedata.BaseDataServiceHelper;
|
|
|
|
|
|
import kd.bos.servicehelper.botp.ConvertServiceHelper;
|
2025-11-26 09:01:17 +00:00
|
|
|
|
import kd.bos.servicehelper.operation.OperationServiceHelper;
|
2025-11-26 03:43:27 +00:00
|
|
|
|
import kd.bos.servicehelper.operation.SaveServiceHelper;
|
2025-12-01 10:34:35 +00:00
|
|
|
|
import kd.bos.util.StringUtils;
|
2025-11-26 03:43:27 +00:00
|
|
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
import java.util.Set;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
|
|
|
|
|
public class MaterialManualAssignOpPlugin extends AbstractOperationServicePlugIn {
|
|
|
|
|
|
private static final Log logger = LogFactory.getLog(MaterialManualAssignOpPlugin.class);
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public void onAddValidators(AddValidatorsEventArgs e) {
|
|
|
|
|
|
super.onAddValidators(e);
|
|
|
|
|
|
e.addValidator(new AbstractValidator() {
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public void validate() {
|
|
|
|
|
|
/*ExtendedDataEntity[] dataEntities1 =this.getDataEntities();
|
|
|
|
|
|
for (ExtendedDataEntity extendedDataEntity : dataEntities1) {
|
|
|
|
|
|
DynamicObject dataEntity = extendedDataEntity.getDataEntity();
|
|
|
|
|
|
dataEntity=BusinessDataServiceHelper.loadSingle(dataEntity.getPkValue(),"bd_material");
|
|
|
|
|
|
String ctrlStrategy = dataEntity.getString("ctrlstrategy");
|
|
|
|
|
|
if ("5".equals(ctrlStrategy) || "6".equals(ctrlStrategy) || "7".equals(ctrlStrategy)) {
|
|
|
|
|
|
this.addErrorMessage(extendedDataEntity,"控制策略为“自由分配”或“逐级分配”的基础数据才能分配");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Item-00000008:“自由分配”的基础数据只能由创建组织分配,组织“上海励齿”不是基础资料的创建组织
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public void afterExecuteOperationTransaction(AfterOperationArgs e) {
|
|
|
|
|
|
super.afterExecuteOperationTransaction(e);
|
|
|
|
|
|
|
|
|
|
|
|
DynamicObject[] dataEntities1 = e.getDataEntities();
|
|
|
|
|
|
for (DynamicObject dynamicObject : dataEntities1) {
|
|
|
|
|
|
dynamicObject = BusinessDataServiceHelper.loadSingle(dynamicObject.getPkValue(), "bd_material");
|
2025-12-01 10:34:35 +00:00
|
|
|
|
String tqq9_srcnumber = dynamicObject.getString("tqq9_srcnumber");
|
|
|
|
|
|
if (StringUtils.isNotEmpty(tqq9_srcnumber)) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-11-26 03:43:27 +00:00
|
|
|
|
PushArgs pushArgs = new PushArgs();
|
|
|
|
|
|
//源单标识
|
|
|
|
|
|
pushArgs.setSourceEntityNumber("bd_material");
|
|
|
|
|
|
String targetEntityNumber = "bd_materialinventoryinfo";//物料库存信息
|
|
|
|
|
|
//目标单标识
|
|
|
|
|
|
pushArgs.setTargetEntityNumber(targetEntityNumber);
|
|
|
|
|
|
//生成转换结果报告
|
|
|
|
|
|
pushArgs.setBuildConvReport(true);
|
|
|
|
|
|
//不检查目标单新增权限
|
|
|
|
|
|
pushArgs.setHasRight(true);
|
|
|
|
|
|
String tqq9_sfqyxqgl1 = dynamicObject.getString("tqq9_sfqyxqgl1");//是否启用有效期管理
|
|
|
|
|
|
String ruleId = "2352399500154269696";
|
|
|
|
|
|
if (!"true".equals(tqq9_sfqyxqgl1)) {
|
|
|
|
|
|
ruleId = "2352962432307067904";
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//传入转换规则id
|
|
|
|
|
|
pushArgs.setRuleId(ruleId);
|
|
|
|
|
|
//
|
|
|
|
|
|
//下推自动保存
|
|
|
|
|
|
pushArgs.setAutoSave(true);
|
|
|
|
|
|
//设置源单选中的数据包
|
|
|
|
|
|
List<ListSelectedRow> selectedRowList = new ArrayList<>();
|
|
|
|
|
|
ListSelectedRow row = new ListSelectedRow();
|
|
|
|
|
|
row.setPrimaryKeyValue(dynamicObject.getPkValue());
|
|
|
|
|
|
selectedRowList.add(row);
|
|
|
|
|
|
pushArgs.setSelectedRows(selectedRowList);
|
|
|
|
|
|
//执行下推
|
|
|
|
|
|
ConvertOperationResult result = ConvertServiceHelper.pushAndSave(pushArgs);
|
|
|
|
|
|
//获取下推目标单id
|
|
|
|
|
|
Set<Object> targetBillIds = result.getTargetBillIds();
|
|
|
|
|
|
|
|
|
|
|
|
boolean success = result.isSuccess();
|
|
|
|
|
|
DynamicObject bjlc = BusinessDataServiceHelper.loadSingle("bos_adminorg", new QFilter[]{new QFilter("number", QCP.equals, "BJLC")});
|
|
|
|
|
|
DynamicObject gzlc = BusinessDataServiceHelper.loadSingle("bos_adminorg", new QFilter[]{new QFilter("number", QCP.equals, "GZLC")});
|
|
|
|
|
|
DynamicObject shlc = BusinessDataServiceHelper.loadSingle("bos_adminorg", new QFilter[]{new QFilter("number", QCP.equals, "SHLC")});
|
|
|
|
|
|
|
2025-11-26 09:01:17 +00:00
|
|
|
|
generateMaterialInfo(targetEntityNumber, targetBillIds, success, bjlc, gzlc, shlc);
|
2025-11-26 03:43:27 +00:00
|
|
|
|
targetEntityNumber = "bd_materialpurchaseinfo";//物料采购信息
|
|
|
|
|
|
//目标单标识
|
|
|
|
|
|
pushArgs.setTargetEntityNumber(targetEntityNumber);
|
|
|
|
|
|
ruleId = "2350906360427737088";
|
|
|
|
|
|
//传入转换规则id
|
|
|
|
|
|
pushArgs.setRuleId(ruleId);
|
|
|
|
|
|
|
|
|
|
|
|
//执行下推
|
|
|
|
|
|
result = ConvertServiceHelper.pushAndSave(pushArgs);
|
|
|
|
|
|
//获取下推目标单id
|
|
|
|
|
|
targetBillIds = result.getTargetBillIds();
|
|
|
|
|
|
success = result.isSuccess();
|
2025-11-26 09:01:17 +00:00
|
|
|
|
generateMaterialInfo(targetEntityNumber, targetBillIds, success, bjlc, gzlc, shlc);
|
2025-11-26 03:43:27 +00:00
|
|
|
|
|
|
|
|
|
|
ruleId = "2352406985778951168";
|
|
|
|
|
|
targetEntityNumber = "bd_materialsalinfo";//物料销售信息
|
|
|
|
|
|
//目标单标识
|
|
|
|
|
|
pushArgs.setTargetEntityNumber(targetEntityNumber);
|
|
|
|
|
|
//传入转换规则id
|
|
|
|
|
|
pushArgs.setRuleId(ruleId);
|
|
|
|
|
|
|
|
|
|
|
|
//执行下推
|
|
|
|
|
|
result = ConvertServiceHelper.pushAndSave(pushArgs);
|
|
|
|
|
|
//获取下推目标单id
|
|
|
|
|
|
targetBillIds = result.getTargetBillIds();
|
|
|
|
|
|
success = result.isSuccess();
|
2025-11-26 09:01:17 +00:00
|
|
|
|
generateMaterialInfo(targetEntityNumber, targetBillIds, success, bjlc, gzlc, shlc);
|
2025-11-26 03:43:27 +00:00
|
|
|
|
|
2025-11-27 06:07:30 +00:00
|
|
|
|
ruleId = "2352399204346786816";
|
|
|
|
|
|
targetEntityNumber = "bd_materialcalinfo";//物料核算信息
|
|
|
|
|
|
//目标单标识
|
|
|
|
|
|
pushArgs.setTargetEntityNumber(targetEntityNumber);
|
|
|
|
|
|
//传入转换规则id
|
|
|
|
|
|
pushArgs.setRuleId(ruleId);
|
|
|
|
|
|
|
|
|
|
|
|
//执行下推
|
|
|
|
|
|
result = ConvertServiceHelper.pushAndSave(pushArgs);
|
|
|
|
|
|
//获取下推目标单id
|
|
|
|
|
|
targetBillIds = result.getTargetBillIds();
|
|
|
|
|
|
success = result.isSuccess();
|
|
|
|
|
|
generateMaterialInfo(targetEntityNumber, targetBillIds, success, bjlc, gzlc, shlc);
|
2025-11-26 03:43:27 +00:00
|
|
|
|
|
|
|
|
|
|
/*Set<Long> dataIds = new HashSet();
|
|
|
|
|
|
|
|
|
|
|
|
long id = dynamicObject.getLong("id");
|
|
|
|
|
|
dataIds.add(id);
|
|
|
|
|
|
String useOrgId = "100000";
|
|
|
|
|
|
// String bd_ctrl_strategy = "2";
|
|
|
|
|
|
String entityNumber = "bd_material";
|
|
|
|
|
|
String appId = "basedata";
|
|
|
|
|
|
// String assign_data = "id";
|
|
|
|
|
|
Set<Long> orgIds = new HashSet(3);
|
|
|
|
|
|
//北上广的组织id
|
|
|
|
|
|
DynamicObject[] orgs = BusinessDataServiceHelper.load("bos_adminorg", "id",
|
|
|
|
|
|
new QFilter[]{new QFilter("number", QCP.in, new String[]{"SHLC", "BJLC", "GZLC"})});
|
|
|
|
|
|
for (DynamicObject org : orgs) {
|
|
|
|
|
|
orgIds.add(org.getLong("id"));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BaseDataResponse response = (new AssignService(entityNumber)).assign(Long.valueOf(useOrgId), appId, dataIds, orgIds, true);
|
|
|
|
|
|
if (!response.isSuccess()) {
|
|
|
|
|
|
LCLogServiceImpl lcLogService = new LCLogServiceImpl();
|
|
|
|
|
|
lcLogService.savelog("物料手动分配失败", "", true, false, "", response.getResult().toString());
|
|
|
|
|
|
}*/
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-11-26 09:01:17 +00:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 生成对应的物料业务信息(库存、采购、销售)
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param targetEntityNumber 目标单据标识
|
|
|
|
|
|
* @param targetBillIds 下推成功的目标单据id
|
|
|
|
|
|
* @param success 是否下推成功
|
|
|
|
|
|
* @param bjlc 北京组织
|
|
|
|
|
|
* @param gzlc 广州组织
|
|
|
|
|
|
* @param shlc 上海组织
|
|
|
|
|
|
*/
|
|
|
|
|
|
private void generateMaterialInfo(String targetEntityNumber, Set<Object> targetBillIds, boolean success, DynamicObject bjlc, DynamicObject gzlc, DynamicObject shlc) {
|
|
|
|
|
|
if (success) {
|
|
|
|
|
|
if (targetBillIds.size() > 0) {
|
|
|
|
|
|
for (Object targetBillId : targetBillIds) {
|
|
|
|
|
|
OperateOption option = OperateOption.create();
|
|
|
|
|
|
option.setVariableValue(OperateOptionConst.ISHASRIGHT, "true");
|
|
|
|
|
|
option.setVariableValue(OperateOptionConst.ORM_SAVEOP_REMOVECACHE, "true");
|
|
|
|
|
|
DynamicObject sh = BusinessDataServiceHelper.loadSingle(targetBillId, targetEntityNumber);
|
|
|
|
|
|
sh.set("createorg", shlc);
|
|
|
|
|
|
sh.set("srccreateorg", shlc);
|
|
|
|
|
|
|
|
|
|
|
|
List<Long> ids = new ArrayList<>();
|
|
|
|
|
|
ids.add((Long) targetBillId);
|
|
|
|
|
|
BaseDataServiceHelper.managePermChange(targetEntityNumber, ids, shlc.getLong("id"));
|
|
|
|
|
|
|
|
|
|
|
|
DynamicObject bj = (DynamicObject) new CloneUtils(false, true).clone(sh);
|
|
|
|
|
|
DynamicObject gz = (DynamicObject) new CloneUtils(false, true).clone(sh);
|
|
|
|
|
|
|
|
|
|
|
|
OperationResult submitResult = OperationServiceHelper.executeOperate("submit", targetEntityNumber, new DynamicObject[]{sh}, OperateOption.create());
|
|
|
|
|
|
if (submitResult.isSuccess()) {
|
|
|
|
|
|
OperationResult auditResult = OperationServiceHelper.executeOperate("audit", targetEntityNumber, new DynamicObject[]{sh}, OperateOption.create());
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bj.set("createorg", bjlc);
|
|
|
|
|
|
bj.set("srccreateorg", bjlc);
|
|
|
|
|
|
SaveServiceHelper.saveOperate(targetEntityNumber, new DynamicObject[]{bj}, OperateOption.create());
|
|
|
|
|
|
bj.set("mbdmasterid", bj.getLong("id"));
|
|
|
|
|
|
SaveServiceHelper.saveOperate(targetEntityNumber, new DynamicObject[]{bj}, OperateOption.create());
|
|
|
|
|
|
submitResult = OperationServiceHelper.executeOperate("submit", targetEntityNumber, new DynamicObject[]{bj}, OperateOption.create());
|
|
|
|
|
|
if (submitResult.isSuccess()) {
|
|
|
|
|
|
OperationResult auditResult = OperationServiceHelper.executeOperate("audit", targetEntityNumber, new DynamicObject[]{bj}, OperateOption.create());
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gz.set("createorg", gzlc);
|
|
|
|
|
|
gz.set("srccreateorg", gzlc);
|
|
|
|
|
|
SaveServiceHelper.saveOperate(targetEntityNumber, new DynamicObject[]{gz}, OperateOption.create());
|
|
|
|
|
|
gz.set("mbdmasterid", gz.getLong("id"));
|
|
|
|
|
|
SaveServiceHelper.saveOperate(targetEntityNumber, new DynamicObject[]{gz}, OperateOption.create());
|
|
|
|
|
|
submitResult = OperationServiceHelper.executeOperate("submit", targetEntityNumber, new DynamicObject[]{gz}, OperateOption.create());
|
|
|
|
|
|
if (submitResult.isSuccess()) {
|
|
|
|
|
|
OperationResult auditResult = OperationServiceHelper.executeOperate("audit", targetEntityNumber, new DynamicObject[]{gz}, OperateOption.create());
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-11-26 03:43:27 +00:00
|
|
|
|
}
|