package tqq9.lc123.cloud.app.plugin.form.result; import kd.bos.dataentity.OperateOption; import kd.bos.dataentity.entity.CloneUtils; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.entity.botp.runtime.BFRow; import kd.bos.entity.operate.result.OperationResult; import kd.bos.entity.plugin.AbstractOperationServicePlugIn; 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.botp.BFTrackerServiceHelper; import kd.bos.servicehelper.operation.OperationServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; import java.util.List; import java.util.Map; public class CloneBill extends AbstractOperationServicePlugIn { private final static Log logger = LogFactory.getLog(CloneBill.class); public static String cloneOperation(DynamicObject dynamicObject, String entityName, String sourceEntityNumber) { String entityNumber = dynamicObject.getDataEntityType().getName(); StringBuilder billnoSet = new StringBuilder(); //找直接上游单据,将上游单据编号存在复制的单据上面 Map> sourceBillsMap = BFTrackerServiceHelper.findDirtSourceBills(entityNumber, new Long[]{dynamicObject.getLong("id")}); if (null != sourceBillsMap && sourceBillsMap.size() > 0) { List bfRows = sourceBillsMap.get(dynamicObject.getLong("id")); if (null != bfRows) { for (BFRow bfRow : bfRows) { Long billId = bfRow.getSId().getBillId();//获取到采购退货申请id DynamicObject[] pm_purrefundapplybill = BusinessDataServiceHelper.load(sourceEntityNumber, "billno", new QFilter[]{new QFilter("id", "=", billId)}); for (int i = 0; i < pm_purrefundapplybill.length; i++) { DynamicObject object = pm_purrefundapplybill[i]; String billno = object.getString("billno"); billnoSet.append(billno); if (i < pm_purrefundapplybill.length - 1) { billnoSet.append("、"); } } } } } dynamicObject = BusinessDataServiceHelper.loadSingle(entityNumber, new QFilter[]{new QFilter("id", QCP.equals, dynamicObject.getLong("id"))}); StringBuilder message = new StringBuilder(); OperationResult unauditResult = OperationServiceHelper.executeOperate("unaudit", entityNumber, new DynamicObject[]{dynamicObject}, OperateOption.create()); if (unauditResult.isSuccess()) { OperationResult deleteResult = OperationServiceHelper.executeOperate("delete", entityNumber, new DynamicObject[]{dynamicObject}, OperateOption.create()); if (!deleteResult.isSuccess()) { deleteResult.getAllErrorOrValidateInfo().forEach((error) -> { message.append(error.getMessage()); }); logger.info(entityName + dynamicObject.getString("billno") + "删除失败:" + message); } else { DynamicObject newData = (DynamicObject) new CloneUtils(false, true).clone(dynamicObject); newData.set("billno", dynamicObject.getString("billno")); newData.set("billstatus", "C"); newData.set("tqq9_sourcebillno", billnoSet); switch (entityNumber) { case "sm_delivernotice": case "pm_receiptnotice": case "pm_purrefundapplybill": newData.set("closestatus", "B"); break; } SaveServiceHelper.save(new DynamicObject[]{newData}); } } else { unauditResult.getAllErrorOrValidateInfo().forEach((error) -> { message.append(error.getMessage()); }); logger.info(entityName + dynamicObject.getString("billno") + "反审核失败:" + message); } return message.toString(); } }