177 lines
8.2 KiB
Java
177 lines
8.2 KiB
Java
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});
|
||
}
|
||
}
|