From 1b538f0c73fe88b038326d82b6ef7fb658deb9be Mon Sep 17 00:00:00 2001 From: zhongqy <18262099959@163.com> Date: Wed, 10 Dec 2025 17:12:08 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E5=95=86=E5=9F=8E=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E3=80=91--=E9=94=80=E5=94=AE=E5=8D=95=E5=87=BA=E5=BA=93?= =?UTF-8?q?=E6=8B=A6=E6=88=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SmDeliverNoticeController.java | 101 +++++++++++++----- 1 file changed, 75 insertions(+), 26 deletions(-) diff --git a/lc123/cloud/app/api/controller/SmDeliverNoticeController.java b/lc123/cloud/app/api/controller/SmDeliverNoticeController.java index 2e4d8b4..3f49bbe 100644 --- a/lc123/cloud/app/api/controller/SmDeliverNoticeController.java +++ b/lc123/cloud/app/api/controller/SmDeliverNoticeController.java @@ -11,9 +11,11 @@ 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.SaveServiceHelper; import kd.bos.util.StringUtils; import tqq9.lc123.cloud.app.api.utils.ApiResultExt; import tqq9.lc123.cloud.app.api.utils.Constants; +import tqq9.lc123.cloud.app.plugin.form.result.CloneBill; import tqq9.lc123.cloud.app.plugin.utils.BillCloseCancelUtils; import tqq9.lc123.cloud.app.plugin.utils.ConfigUtils; @@ -22,13 +24,20 @@ import java.util.HashSet; import java.util.List; import java.util.Map; -import static tqq9.lc123.cloud.app.plugin.form.result.CloneBill.cloneOperation; - /** * 发货通知单接口 */ @ApiController(value = "SmDeliverNoticeController", desc = "发货通知单接口") public class SmDeliverNoticeController { + /** + * 销售订单拦截状态:成功 + */ + private static final String LJ_SUCCESS = "1"; + + /** + * 销售订单拦截状态:失败 + */ + private static final String LJ_FAIL = "2"; @ApiPostMapping(value = "/closeSmDeliverNotice", desc = "根据销售订单编号关闭发货通知单") public CustomApiResult closeSmDeliverNotice(@NotNull @ApiParam(value = "销售订单编号", required = true) String orderBillNo) { @@ -51,37 +60,65 @@ public class SmDeliverNoticeController { resultBean.setNumber(orderBillNo); resultBean.setType(Constants.TYPE_CLOSE); - // 根据销售订单编码查询发货通知单 + // 查询销售订单 + DynamicObject saleOrder = BusinessDataServiceHelper.loadSingle(Constants.SM_SALORDER, + "id,tqq9_ljzt", + new QFilter[]{ + new QFilter("billno", QCP.equals, orderBillNo) + }); + if (null == saleOrder) { + errormsg = "传入参数订单编号:" + orderBillNo + " 未查询到对应的销售订单!"; + ApiResultExt.errorRetrun(Constants.SM_DELIVERNOTICE, errormsg, error, resultExt); + return CustomApiResult.success(resultExt); + } + // 判断销售订单是否已拦截成功,如果是拦截成功,直接返回成功 + if (LJ_SUCCESS.equals(saleOrder.getString("tqq9_ljzt"))) { + resultExt.setFailCount(0); + resultExt.setSuccessCount(1); + resultExt.setResult(results); + return CustomApiResult.success(resultExt); + } + // 关联查询销售订单下游单据 + Map> saleOrderTargetBills = BFTrackerServiceHelper.findTargetBills(Constants.SM_SALORDER, + new Long[]{saleOrder.getLong("id")}); + // 如果没有下游单据或者没有下游发货通知单,返回成功 + if (null == saleOrderTargetBills || saleOrderTargetBills.isEmpty() + || !saleOrderTargetBills.containsKey(Constants.SM_DELIVERNOTICE)) { + saveLjStatus(saleOrder, LJ_SUCCESS); + resultExt.setFailCount(0); + resultExt.setSuccessCount(1); + resultExt.setResult(results); + return CustomApiResult.success(resultExt); + } + // 发货通知单id + HashSet smDeliveryNoticeIdSet = saleOrderTargetBills.get(Constants.SM_DELIVERNOTICE); + + // 根据id集合查询发货通知单(一个销售订单只有一个发货通知单) DynamicObject smDeliverNotice = BusinessDataServiceHelper.loadSingle(Constants.SM_DELIVERNOTICE, "id,billno,org,tqq9_isclose,tqq9_gldjh,tqq9_ck", new QFilter[]{ - new QFilter("tqq9_gldjh", QCP.equals, orderBillNo) + new QFilter("id", QCP.equals, smDeliveryNoticeIdSet.iterator().next()) }); - if (null == smDeliverNotice) { - errormsg = "传入参数订单编号:" + orderBillNo + " 在金蝶系统中未查询到对应的发货通知单"; - ApiResultExt.errorRetrun(Constants.SM_DELIVERNOTICE, errormsg, error, resultExt); + + // 判断是否查询到发货通知单 或者已关闭 + if (null == smDeliverNotice || smDeliverNotice.getBoolean("tqq9_isclose")) { + saveLjStatus(saleOrder, LJ_SUCCESS); + resultExt.setFailCount(0); + resultExt.setSuccessCount(1); + resultExt.setResult(results); return CustomApiResult.success(resultExt); } - // 是否关闭 - boolean tqq9_isclose = smDeliverNotice.getBoolean("tqq9_isclose"); - if (tqq9_isclose) { - errormsg = "传入参数订单编号:" + orderBillNo + " 在金蝶系统中对应的发货通知单已关闭,无需再次关闭"; - ApiResultExt.errorRetrun(Constants.SM_DELIVERNOTICE, errormsg, error, resultExt); - return CustomApiResult.success(resultExt); - } - // 关联查询下游单据 - Map> targetBills = BFTrackerServiceHelper.findTargetBills(Constants.SM_DELIVERNOTICE, - new Long[]{smDeliverNotice.getLong("id")}); - //下游存在系统进行提示不允许后续操作 - if (null != targetBills && !targetBills.isEmpty() && targetBills.containsKey("im_saloutbill")) { + // 下游是否存在出库单,如果存在出库单,返回拦截失败 + if (saleOrderTargetBills.containsKey(Constants.IM_SALOUTBILL)) { errormsg = "传入参数订单编号:" + orderBillNo + " 在金蝶系统中已生成下游出库单据,无法关闭"; ApiResultExt.errorRetrun(Constants.SM_DELIVERNOTICE, errormsg, error, resultExt); + saveLjStatus(saleOrder, LJ_FAIL); return CustomApiResult.success(resultExt); } - // 收货组织 + // 销售组织 DynamicObject org = smDeliverNotice.getDynamicObject("org"); if (null != org) { - // 返回通知单编码 + // 发货通知单编码 String billNo = smDeliverNotice.getString("billno"); String entityName; String label = "tqq9_isclose"; @@ -108,20 +145,32 @@ public class SmDeliverNoticeController { } if (StringUtils.isNotEmpty(closeMessage) && closeMessage.contains("关闭成功")) { - cloneOperation(smDeliverNotice, "发货通知单", Constants.SM_SALORDER); + saveLjStatus(saleOrder, LJ_SUCCESS); + CloneBill.cloneOperation(smDeliverNotice, "发货通知单", Constants.SM_SALORDER); + } if (StringUtils.isNotEmpty(closeMessage)) { errormsg = "传入参数订单编号:" + orderBillNo + " 关闭发货通知单失败,失败信息:" + closeMessage; ApiResultExt.errorRetrun(Constants.SM_DELIVERNOTICE, errormsg, error, resultExt); + saveLjStatus(saleOrder, LJ_FAIL); return CustomApiResult.success(resultExt); } } //回传成功 - int failCount = 0;//失败数量 - int successCount = 1;//成功数量 - resultExt.setFailCount(failCount); - resultExt.setSuccessCount(successCount); + resultExt.setFailCount(0); + resultExt.setSuccessCount(1); resultExt.setResult(results); return CustomApiResult.success(resultExt); } + + /** + * 保存销售订单拦截状态 + * + * @param saleOrder 销售订单 + * @param status 0:正常 1:拦截成功 2:拦截失败 + */ + private void saveLjStatus(DynamicObject saleOrder, String status) { + saleOrder.set("tqq9_ljzt", status); + SaveServiceHelper.save(new DynamicObject[]{saleOrder}); + } }