lc/lc123/cloud/app/api/controller/SmDeliverNoticeController.java

177 lines
8.2 KiB
Java
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package tqq9.lc123.cloud.app.api.controller;
import com.alibaba.fastjson.JSONObject;
import com.drew.lang.annotations.NotNull;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.openapi.common.custom.annotation.ApiController;
import kd.bos.openapi.common.custom.annotation.ApiParam;
import kd.bos.openapi.common.custom.annotation.ApiPostMapping;
import kd.bos.openapi.common.result.CustomApiResult;
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;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
/**
* 发货通知单接口
*/
@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) {
//返回值初始化
ApiResultExt resultExt = new ApiResultExt();
List<ApiResultExt.ResultBean> results = new ArrayList<>();
resultExt.setResult(results);
ApiResultExt.ResultBean resultBean = new ApiResultExt.ResultBean();
results.add(resultBean);
JSONObject key = new JSONObject();
key.put("billno", orderBillNo);
resultBean.setKeys(key);
ApiResultExt.Error error = new ApiResultExt.Error();
resultBean.setErrors(error);
ArrayList<String> rowmsg = new ArrayList<>();
error.setRowMsg(rowmsg);
String errormsg = null;
resultBean.setBillIndex(0);
resultBean.setKeys(key);
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("id", QCP.equals, smDeliveryNoticeIdSet.iterator().next())
});
// 判断是否查询到发货通知单 或者已关闭
if (null == smDeliverNotice || smDeliverNotice.getBoolean("tqq9_isclose")) {
saveLjStatus(saleOrder, LJ_SUCCESS);
resultExt.setFailCount(0);
resultExt.setSuccessCount(1);
resultExt.setResult(results);
return CustomApiResult.success(resultExt);
}
// 下游是否存在出库单,如果存在出库单,返回拦截失败
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";
String closeMessage = "";
String number = org.getString("number");
if ("SHLC".equals(number)) {
String warehouseCode = null;
DynamicObject warehouse = smDeliverNotice.getDynamicObject("tqq9_ck");
if (null != warehouse) {
warehouseCode = warehouse.getString("number");
}
String orderType = "PTCK";
entityName = "WMS-SH-发货通知单取消";
closeMessage = BillCloseCancelUtils.wmsCancel(orderType, warehouseCode, billNo, Constants.SM_DELIVERNOTICE, entityName, label);
} else if ("BJLC".equals(number)) {
String BJ_URL = ConfigUtils.getThirdConfigByNumber("BJ_POSTURL");
entityName = "WMS-BJ-发货通知单取消";
closeMessage = BillCloseCancelUtils.BGSaCancelSalesOrder(billNo, BJ_URL, Constants.SM_DELIVERNOTICE, entityName, label);
} else if ("GZLC".equals(number)) {
String GZURL = ConfigUtils.getThirdConfigByNumber("GZ_POSTURL");
entityName = "WMS-GZ-发货通知单取消";
closeMessage = BillCloseCancelUtils.BGSaCancelSalesOrder(billNo, GZURL, Constants.SM_DELIVERNOTICE, entityName, label);
}
if (StringUtils.isNotEmpty(closeMessage) && closeMessage.contains("关闭成功")) {
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);
}
}
//回传成功
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});
}
}