package tqq9.lc123.cloud.app.plugin.form.result; import kd.bos.bill.AbstractBillPlugIn; import kd.bos.dataentity.OperateOption; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.entity.operate.result.OperationResult; import kd.bos.form.control.events.BeforeItemClickEvent; import kd.bos.form.control.events.ItemClickEvent; 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.util.StringUtils; import tqq9.lc123.cloud.app.plugin.utils.BillCloseCancelUtils; import tqq9.lc123.cloud.app.plugin.utils.ConfigUtils; import java.util.EventObject; import java.util.HashSet; import java.util.Map; import static tqq9.lc123.cloud.app.plugin.form.result.CloneBill.cloneOperation; //收货通知单(单据取消) public class PmReceiptNoticeFormPlugin extends AbstractBillPlugIn { private final static Log logger = LogFactory.getLog(PmReceiptNoticeFormPlugin.class); @Override public void registerListener(EventObject e) { super.registerListener(e); this.addItemClickListeners("tbmain"); } @Override public void beforeItemClick(BeforeItemClickEvent evt) { super.beforeItemClick(evt); String itemKey = evt.getItemKey(); if ("tqq9_close".equals(itemKey)) { boolean tqq9_isclose = (boolean) this.getModel().getValue("tqq9_isclose"); if (tqq9_isclose) { this.getView().showMessage("该单据已关闭"); evt.setCancel(true); } } /*String operationKey = evt.getOperationKey(); if ("unaudit".equals(operationKey)) { boolean tqq9_isclose = (boolean) this.getModel().getValue("tqq9_isclose"); if (!tqq9_isclose) { this.getView().showMessage("请先关闭该单据,然后进行反审核"); evt.setCancel(true); } }*/ } @Override public void itemClick(ItemClickEvent evt) { super.itemClick(evt); String itemKey = evt.getItemKey(); if ("tqq9_close".equals(itemKey)) { String billNo = (String) this.getModel().getValue("billno"); String message = null; DynamicObject dataEntity = BusinessDataServiceHelper.loadSingle("pm_receiptnotice", new QFilter[]{new QFilter("billno", QCP.equals, billNo)}); String entityType = "pm_receiptnotice"; String entityName; String label = "tqq9_isclose"; DynamicObject receiveorg = dataEntity.getDynamicObject("receiveorg");//收货组织 if (null != receiveorg) { String number = receiveorg.getString("number"); if ("SHLC".equals(number)) { DynamicObjectCollection billentry = dataEntity.getDynamicObjectCollection("billentry"); String warehouseCode = null; for (DynamicObject dynamicObject : billentry) { DynamicObject warehouse = dynamicObject.getDynamicObject("warehouse"); if (null != warehouse) { warehouseCode = warehouse.getString("number"); } } String orderType = "CGRK"; entityName = "WMS-SH-收货通知单取消"; message = BillCloseCancelUtils.wmsPartClose(orderType, warehouseCode, billNo, entityType, entityName, label); } else if ("BJLC".equals(number)) { String BJ_URL = ConfigUtils.getThirdConfigByNumber("BJ_POSTURL"); entityName = "WMS-BJ-收货通知单取消"; message = BillCloseCancelUtils.BGPurOrderCancel(billNo, BJ_URL, entityType, entityName, label); } else if ("GZLC".equals(number)) { String GZURL = ConfigUtils.getThirdConfigByNumber("GZ_POSTURL"); entityName = "WMS-GZ-收货通知单取消"; message = BillCloseCancelUtils.BGPurOrderCancel(billNo, GZURL, entityType, entityName, label); } if (StringUtils.isNotEmpty(message)) { this.getView().showMessage(String.valueOf(message)); } if (StringUtils.isNotEmpty(message) && message.contains("关闭成功")) { Map> targetBills = BFTrackerServiceHelper.findTargetBills("pm_receiptnotice", new Long[]{dataEntity.getLong("id")}); //如果下游没有采购入库单,就克隆单据原单删除 if (null == targetBills || targetBills.size() == 0) { cloneOperation(dataEntity, "收货通知单", "pm_purorderbill"); } StringBuilder stringBuilder = new StringBuilder(); //下游存在采购入库单,调用系统标准关闭 if (null != targetBills && targetBills.size() > 0 && targetBills.containsKey("im_purinbill")) { OperationResult bizcloseResult = OperationServiceHelper.executeOperate("bizclose", "pm_receiptnotice", new DynamicObject[]{dataEntity}, OperateOption.create()); if (!bizcloseResult.isSuccess()) { bizcloseResult.getAllErrorOrValidateInfo().forEach((error) -> { stringBuilder.append(error.getMessage()); }); if (stringBuilder.length() > 0) { logger.info("收货通知单:" + dataEntity.getString("billno") + "调用bizclose失败:" + stringBuilder); } } } } } } else if ("tqq9_partclose".equals(itemKey)) { String billNo = (String) this.getModel().getValue("billno"); String message = null; DynamicObject dataEntity = BusinessDataServiceHelper.loadSingle("pm_receiptnotice", new QFilter[]{new QFilter("billno", QCP.equals, billNo)}); String entityType = "pm_receiptnotice"; String entityName; String label = "tqq9_ispartclose"; DynamicObject receiveorg = dataEntity.getDynamicObject("receiveorg");//收货组织 if (null != receiveorg) { String number = receiveorg.getString("number"); if ("SHLC".equals(number)) { DynamicObjectCollection billentry = dataEntity.getDynamicObjectCollection("billentry"); String warehouseCode = null; for (DynamicObject dynamicObject : billentry) { DynamicObject warehouse = dynamicObject.getDynamicObject("warehouse"); if (null != warehouse) { warehouseCode = warehouse.getString("number"); } } String orderType = "CGRK"; entityName = "WMS-SH-收货通知单部分取消"; message = BillCloseCancelUtils.wmsPartClose(orderType, warehouseCode, billNo, entityType, entityName, label); } if (StringUtils.isNotEmpty(message)) { this.getView().showMessage(String.valueOf(message)); } } } } }