【商城接口】--销售单出库拦截

This commit is contained in:
zhongqy 2025-12-10 17:12:08 +08:00
parent b5c6660495
commit 1b538f0c73
1 changed files with 75 additions and 26 deletions

View File

@ -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<ApiResultExt> 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<String, HashSet<Long>> 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<Long> 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<String, HashSet<Long>> 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});
}
}