parent
f1fa766615
commit
4186bd47ae
|
|
@ -27,6 +27,8 @@ import kd.bos.orm.query.QFilter;
|
|||
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
||||
import kd.bos.servicehelper.operation.OperationServiceHelper;
|
||||
import shjh.jhzj7.fi.fi.utils.JhzjUtils;
|
||||
import shjh.jhzj7.fi.fi.webapi.model.ApiResultPayAdjustExt;
|
||||
import shjh.jhzj7.fi.fi.webapi.model.ApiResultPayApplyExt;
|
||||
import shjh.jhzj7.fi.fi.webapi.model.ApplyAdjustBillModel;
|
||||
|
||||
import javax.validation.Valid;
|
||||
|
|
@ -52,16 +54,20 @@ public class ApplyAdjustBillControler {
|
|||
private static final Log log = LogFactory.getLog(ApplyAdjustBillControler.class);
|
||||
|
||||
@ApiPostMapping(value = apimenthod, desc = "应付付款调整单接口")
|
||||
public CustomApiResult<ApiResult> applybill_adjust(@NotNull @Valid @ApiRequestBody(value = "入参json格式数据") ApplyAdjustBillModel applyAdjustbill) {
|
||||
public CustomApiResult<ApiResultPayAdjustExt> applybill_adjust(@NotNull @Valid @ApiRequestBody(value = "入参json格式数据") ApplyAdjustBillModel applyAdjustbill) {
|
||||
|
||||
JSONObject json_body;
|
||||
String jsonBodyString = null;
|
||||
|
||||
//返回值
|
||||
ApiResultPayAdjustExt apiResultExt = new ApiResultPayAdjustExt();
|
||||
try {
|
||||
// 解析入参,如果格式不正确,日志记录,并反馈esb7.4.1
|
||||
json_body = (JSONObject) JSON.toJSON(applyAdjustbill);
|
||||
jsonBodyString = JSON.toJSONString(json_body);
|
||||
} catch (JSONException e) {
|
||||
return handleErrorAndReturn("应付付款调整单接口入参异常:" + e.getMessage(), "费控", null);
|
||||
handleError("应付付款调整单接口入参异常:" + e.getMessage(), "费控", jsonBodyString);
|
||||
handleErrorAndReturn(apiResultExt, "应付付款调整单接口入参异常:" + e.getMessage(), "费控", jsonBodyString);
|
||||
}
|
||||
|
||||
// 公司编号+会计年度+SAP凭证号+凭证行号
|
||||
|
|
@ -73,7 +79,7 @@ public class ApplyAdjustBillControler {
|
|||
|
||||
DynamicObject org = loadOrgByCompanyNum(companyNum);
|
||||
if (org == null) {
|
||||
return handleErrorAndReturn("同步失败,调整单号:" + fkBillNum + "的组织编码不存在", fkBillNum, jsonBodyString);
|
||||
return handleErrorAndReturn(apiResultExt, "同步失败,调整单号:" + fkBillNum + "的组织编码不存在", fkBillNum, jsonBodyString);
|
||||
}
|
||||
|
||||
String sapuniquevalue = companyNum + year + voucherNum + voucherLineNum; // SAP应付凭证ID
|
||||
|
|
@ -83,37 +89,47 @@ public class ApplyAdjustBillControler {
|
|||
if (ap_payapply == null) {
|
||||
log.info("不存在,从SAP获取应付凭证,生成付款申请单");
|
||||
JSONArray sappzs = querySapPz(applyAdjustbill);
|
||||
if (null != sappzs) {
|
||||
if (null == sappzs) {
|
||||
return handleErrorAndReturn(apiResultExt, "同步失败, 调整单号:" + fkBillNum + ",SAP返回:没有满足条件的记录",
|
||||
fkBillNum, jsonBodyString);
|
||||
}
|
||||
log.info("SAP查询凭证接口存在凭证,准备生成付款申请单");
|
||||
// 存在凭证,生成付款申请单
|
||||
for (Object sappz : sappzs) {
|
||||
JSONObject it_list = (JSONObject) sappz;
|
||||
ap_payapply = createOrUpdatePayApply(it_list,fkBillNum);
|
||||
ap_payapply = createOrUpdatePayApply(it_list, fkBillNum);
|
||||
if (ap_payapply == null) {
|
||||
return CustomApiResult.fail("400", "创建或更新付款申请单失败,详情查看日志");
|
||||
return handleErrorAndReturn(apiResultExt, "创建或更新付款申请单失败,详情查看日志", fkBillNum,
|
||||
jsonBodyString +"\n" + sappzs.toJSONString());
|
||||
}
|
||||
|
||||
// 将生成的付款申请单拆分明细
|
||||
BigDecimal amounts = applyAdjustbill.getAmount();
|
||||
if (amounts == null || amounts.toString().trim().isEmpty()) {
|
||||
return handleErrorAndReturn("同步失败, 调整单号:" + fkBillNum + "的调整金额为空", fkBillNum, null);
|
||||
return handleErrorAndReturn(apiResultExt, "同步失败, 调整单号:" + fkBillNum + "的调整金额为空",
|
||||
fkBillNum, jsonBodyString +"\n" + sappzs.toJSONString());
|
||||
}
|
||||
try {
|
||||
amounts = amounts.setScale(2, RoundingMode.HALF_UP);
|
||||
} catch (NumberFormatException e) {
|
||||
return handleErrorAndReturn("同步失败, 调整单号:" + fkBillNum + "的金额格式不正确: " + amounts, fkBillNum, null);
|
||||
return handleErrorAndReturn(apiResultExt, "同步失败, 调整单号:" + fkBillNum + "的金额格式不正确: " + amounts,
|
||||
fkBillNum, jsonBodyString +"\n" + sappzs.toJSONString());
|
||||
}
|
||||
|
||||
DynamicObjectCollection collection = ap_payapply.getDynamicObjectCollection("entry");
|
||||
if (collection.isEmpty()) {
|
||||
return handleErrorAndReturn("同步失败, 调整单号:" + fkBillNum + "无明细信息", fkBillNum, null);
|
||||
return handleErrorAndReturn(apiResultExt, "同步失败, 调整单号:" + fkBillNum + "无明细信息",
|
||||
fkBillNum, jsonBodyString +"\n" + sappzs.toJSONString());
|
||||
}
|
||||
|
||||
DynamicObject add = collection.get(0);
|
||||
BigDecimal amount = add.getBigDecimal("e_applyamount");
|
||||
int comparisonResult = amount.compareTo(amounts);
|
||||
|
||||
if (comparisonResult > 0) {
|
||||
if (comparisonResult <= 0) {
|
||||
return handleErrorAndReturn(apiResultExt, "同步失败, 调整单号:" + fkBillNum +
|
||||
"的调整金额大于等于分录未调整过的申请金额", fkBillNum, jsonBodyString +"\n" + sappzs.toJSONString());
|
||||
}
|
||||
// 分录申请金额大于调整金额,可拆 由于新增,所以不需要考虑状态直接拆 difference(拆完剩余金额)
|
||||
BigDecimal difference = amount.subtract(amounts);
|
||||
add.set("e_applyamount", difference); // 拆完剩余金额
|
||||
|
|
@ -127,31 +143,28 @@ public class ApplyAdjustBillControler {
|
|||
|
||||
// 保存、提交和审核付款申请单
|
||||
if (!processPayApply(ap_payapply, fkBillNum, jsonBodyString)) {
|
||||
return CustomApiResult.fail("400", "处理付款申请单失败,详情查看日志");
|
||||
return handleErrorAndReturn(apiResultExt, "处理付款申请单失败,详情查看日志(136)",
|
||||
fkBillNum, jsonBodyString +"\n" + sappzs.toJSONString());
|
||||
}
|
||||
|
||||
log.error("审核成功,费控调整单号:" + fkBillNum);
|
||||
JhzjUtils.saveLog(fkBillNum, Apimenthod, jsonBodyString, null, true, "API");
|
||||
//成功
|
||||
return handleSuccessAndReturn(ap_payapply, apiResultExt,fkBillNum, jsonBodyString +"\n" + sappzs.toJSONString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
// 存在
|
||||
DynamicObjectCollection collection = ap_payapply.getDynamicObjectCollection("entry");
|
||||
if (collection.isEmpty()) {
|
||||
return handleErrorAndReturn("同步失败, 调整单号:" + fkBillNum + "无明细信息", fkBillNum, null);
|
||||
return handleErrorAndReturn(apiResultExt, "同步失败, 调整单号:" + fkBillNum + "无明细信息", fkBillNum, jsonBodyString);
|
||||
}
|
||||
|
||||
// 拆分明细
|
||||
BigDecimal amounts = applyAdjustbill.getAmount();
|
||||
if (amounts == null || amounts.toString().trim().isEmpty()) {
|
||||
return handleErrorAndReturn("同步失败, 调整单号:" + fkBillNum + "的调整金额为空", fkBillNum, null);
|
||||
return handleErrorAndReturn(apiResultExt, "同步失败, 调整单号:" + fkBillNum + "的调整金额为空", fkBillNum, jsonBodyString);
|
||||
}
|
||||
try {
|
||||
amounts = amounts.setScale(2, RoundingMode.HALF_UP);
|
||||
} catch (NumberFormatException e) {
|
||||
return handleErrorAndReturn("同步失败, 调整单号:" + fkBillNum + "的金额格式不正确: " + amounts, fkBillNum, null);
|
||||
return handleErrorAndReturn(apiResultExt, "同步失败, 调整单号:" + fkBillNum + "的金额格式不正确: " + amounts, fkBillNum, jsonBodyString);
|
||||
}
|
||||
|
||||
// 付款申请单有无标记?
|
||||
|
|
@ -163,7 +176,7 @@ public class ApplyAdjustBillControler {
|
|||
QCP.equals, ap_payapply.getString("billno"))});
|
||||
if (null != psd_schedulebill) {
|
||||
// 存在排程,返回日志,终止
|
||||
return handleErrorAndReturn("同步失败, 调整单号:" + fkBillNum + "已进入排程处理", fkBillNum, jsonBodyString);
|
||||
return handleErrorAndReturn(apiResultExt, "同步失败, 调整单号:" + fkBillNum + "已进入排程处理", fkBillNum, jsonBodyString);
|
||||
}
|
||||
|
||||
// 不存在排程,更新拆分明细和标记(CNY20+CNY80)
|
||||
|
|
@ -185,19 +198,18 @@ public class ApplyAdjustBillControler {
|
|||
|
||||
// 保存付款申请单
|
||||
if (!processPayApplys(ap_payapply, fkBillNum, jsonBodyString)) {
|
||||
return CustomApiResult.fail("400", "处理付款申请单失败,详情查看日志");
|
||||
return handleErrorAndReturn(apiResultExt, "处理付款申请单失败,详情查看日志(194)", fkBillNum, jsonBodyString);
|
||||
|
||||
}
|
||||
|
||||
log.error("审核成功,费控调整单号:" + fkBillNum);
|
||||
JhzjUtils.saveLog(fkBillNum, Apimenthod, jsonBodyString, null, true, "API");
|
||||
return CustomApiResult.success(null);
|
||||
}else {
|
||||
//成功
|
||||
return handleSuccessAndReturn(ap_payapply, apiResultExt,fkBillNum, jsonBodyString);
|
||||
} else {
|
||||
// 调整金额大于分录未调整过的申请金额,反馈无法处理
|
||||
return handleErrorAndReturn("同步失败, 调整单号:" + fkBillNum + "的调整金额大于分录未调整过的申请金额", fkBillNum, jsonBodyString);
|
||||
return handleErrorAndReturn(apiResultExt, "同步失败, 调整单号:" + fkBillNum + "的调整金额大于等于分录未调整过的申请金额", fkBillNum, jsonBodyString);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// 已标记 付款申请单剩余未调整金额? seq根据size优化,根据单号为空的分录行进行拆分
|
||||
} else {
|
||||
// 已标记 付款申请单剩余未调整金额? seq根据size优化,根据单号为空的分录行进行拆分(根据首行拆分)
|
||||
// CNY20>剩余未调整,反馈无法处理
|
||||
// CNY20<=剩余未调整(假设CNY50) 更新拆分明细(CNY20+CNY30)
|
||||
// 不存在排程,更新拆分明细和标记(CNY20+CNY80)
|
||||
|
|
@ -225,33 +237,27 @@ public class ApplyAdjustBillControler {
|
|||
|
||||
// 保存付款申请单
|
||||
if (!processPayApplys(ap_payapply, fkBillNum, jsonBodyString)) {
|
||||
return CustomApiResult.fail("400", "处理付款申请单失败,详情查看日志");
|
||||
return handleErrorAndReturn(apiResultExt, "处理付款申请单失败,详情查看日志(235)", fkBillNum, jsonBodyString);
|
||||
}
|
||||
|
||||
log.error("审核成功,费控调整单号:" + fkBillNum);
|
||||
JhzjUtils.saveLog(fkBillNum, Apimenthod, jsonBodyString, null, true, "API");
|
||||
ApiResult customApiResult = new ApiResult("");
|
||||
HashMap<String, String> map = new HashMap<>();
|
||||
customApiResult.setHeaders(map);
|
||||
customApiResult.getHeaders().put("billno",fkBillNum);
|
||||
customApiResult.getHeaders().put("billid",""+ap_payapply.getPkValue());
|
||||
return CustomApiResult.success(customApiResult);
|
||||
}else {
|
||||
//成功
|
||||
return handleSuccessAndReturn(ap_payapply, apiResultExt,fkBillNum, jsonBodyString);
|
||||
} else {
|
||||
// 调整金额大于分录未调整过的申请金额,反馈无法处理
|
||||
return handleErrorAndReturn("同步失败, 调整单号:" + fkBillNum + "的调整金额大于分录未调整过的申请金额", fkBillNum, jsonBodyString);
|
||||
return handleErrorAndReturn(apiResultExt, "同步失败, 调整单号:" + fkBillNum + "的调整金额大于分录未调整过的申请金额", fkBillNum, jsonBodyString);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return CustomApiResult.success(null);
|
||||
return handleErrorAndReturn(apiResultExt, "同步失败(250), 调整单号:" + fkBillNum , fkBillNum, jsonBodyString);
|
||||
}
|
||||
|
||||
/**
|
||||
* 调取SAP凭证接口
|
||||
*/
|
||||
private static JSONArray querySapPz(ApplyAdjustBillModel applyAdjustbill){
|
||||
private static JSONArray querySapPz(ApplyAdjustBillModel applyAdjustbill) {
|
||||
JSONArray IT_LIST = new JSONArray();
|
||||
// 添加公司过滤条件
|
||||
addFilterCondition(IT_LIST, "BUKRS", applyAdjustbill.getCompanyNum(), applyAdjustbill.getCompanyNum());
|
||||
|
|
@ -276,6 +282,7 @@ public class ApplyAdjustBillControler {
|
|||
|
||||
/**
|
||||
* 处理付款申请单的保存、提交和审核操作
|
||||
*
|
||||
* @param ap_payapply 付款申请单对象
|
||||
* @param fkBillNum 费控单据编号
|
||||
* @param jsonBodyString 入参JSON字符串
|
||||
|
|
@ -311,6 +318,7 @@ public class ApplyAdjustBillControler {
|
|||
|
||||
/**
|
||||
* 处理付款申请单的保存操作
|
||||
*
|
||||
* @param ap_payapply 付款申请单对象
|
||||
* @param fkBillNum 费控单据编号
|
||||
* @param jsonBodyString 入参JSON字符串
|
||||
|
|
@ -356,7 +364,7 @@ public class ApplyAdjustBillControler {
|
|||
newRow.set("e_closestatus", source.get("e_closestatus"));
|
||||
|
||||
// 设置特定属性
|
||||
newRow.set("seq", size+1);
|
||||
newRow.set("seq", size + 1);
|
||||
newRow.set("e_applyamount", amounts); // 调整金额
|
||||
newRow.set("e_approvedamt", amounts); // 核准金额
|
||||
newRow.set("shjh_applyadjustcode", fkBillNum); // 付款调整单号
|
||||
|
|
@ -366,6 +374,7 @@ public class ApplyAdjustBillControler {
|
|||
|
||||
/**
|
||||
* 根据公司编号加载组织信息
|
||||
*
|
||||
* @param companyNum 公司编号
|
||||
* @return 组织信息的动态对象
|
||||
*/
|
||||
|
|
@ -380,7 +389,7 @@ public class ApplyAdjustBillControler {
|
|||
* @param it_list SAP查到的凭证信息
|
||||
* @return 付款申请单的动态对象
|
||||
*/
|
||||
private DynamicObject createOrUpdatePayApply(JSONObject it_list,String fkBillNum) {
|
||||
private DynamicObject createOrUpdatePayApply(JSONObject it_list, String fkBillNum) {
|
||||
String orgNum = it_list.getString("BUKRS");//公司编号,"公司代码
|
||||
String voucheryear = it_list.getString("GJAHR");//会计年度,会计年度
|
||||
String voucherentrynum = it_list.getString("BUZEI");//会计科目行项目号,行编号
|
||||
|
|
@ -419,7 +428,7 @@ public class ApplyAdjustBillControler {
|
|||
if (StringUtils.isNotEmpty(kunnr)) {
|
||||
asstacttype = "客户";
|
||||
asstact = kunnr;
|
||||
}else {
|
||||
} else {
|
||||
asstacttype = "供应商";
|
||||
asstact = lifnr;
|
||||
}
|
||||
|
|
@ -807,16 +816,24 @@ public class ApplyAdjustBillControler {
|
|||
}
|
||||
|
||||
/**
|
||||
* 处理错误并返回失败结果
|
||||
*
|
||||
* 处理错误日志
|
||||
* @param errorMessage 错误信息
|
||||
* @param fkBillNum 费控单据编号
|
||||
* @param jsonBodyString 入参JSON字符串
|
||||
* @return 失败的CustomApiResult对象
|
||||
*/
|
||||
private CustomApiResult<ApiResult> handleErrorAndReturn(String errorMessage, String fkBillNum, String jsonBodyString) {
|
||||
handleError(errorMessage, fkBillNum, jsonBodyString);
|
||||
return CustomApiResult.fail("400", errorMessage);
|
||||
private static void handleError(String errorMessage, String fkBillNum, String jsonBodyString) {
|
||||
log.error(errorMessage);
|
||||
// 可以添加更多的错误处理逻辑,如记录到数据库等
|
||||
JhzjUtils.saveLog(fkBillNum, Apimenthod, jsonBodyString, errorMessage, false, "API");
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理成功日志
|
||||
*/
|
||||
private static void handleSuccess(String successMessage, String fkBillNum, String jsonBodyString) {
|
||||
log.error(successMessage);
|
||||
// 可以添加更多的错误处理逻辑,如记录到数据库等
|
||||
JhzjUtils.saveLog(fkBillNum, Apimenthod, jsonBodyString, successMessage, true, "API");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -833,19 +850,6 @@ public class ApplyAdjustBillControler {
|
|||
CustomApiResult.fail("400", errorMessage);
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理错误日志
|
||||
*
|
||||
* @param errorMessage 错误信息
|
||||
* @param fkBillNum 费控单据编号
|
||||
* @param jsonBodyString 入参JSON字符串
|
||||
*/
|
||||
private void handleError(String errorMessage, String fkBillNum, String jsonBodyString) {
|
||||
log.error(errorMessage);
|
||||
// 可以添加更多的错误处理逻辑,如记录到数据库等
|
||||
JhzjUtils.saveLog(fkBillNum, Apimenthod, jsonBodyString, errorMessage, false, "API");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取第一个错误信息
|
||||
*
|
||||
|
|
@ -863,4 +867,32 @@ public class ApplyAdjustBillControler {
|
|||
}
|
||||
return "未知错误";
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理错误并返回失败结果
|
||||
*
|
||||
* @return 失败的CustomApiResult对象
|
||||
*/
|
||||
public static CustomApiResult<ApiResultPayAdjustExt> handleErrorAndReturn(ApiResultPayAdjustExt apiResultExt, String errorMessage, String fkBillNum, String jsonBodyString) {
|
||||
handleError(errorMessage, fkBillNum, jsonBodyString);
|
||||
apiResultExt.setErrorCode("400");
|
||||
apiResultExt.setStatus(false);
|
||||
apiResultExt.setMessage(errorMessage);
|
||||
return CustomApiResult.success(apiResultExt);
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理成功并返回成功结果
|
||||
*
|
||||
* @return 成功的CustomApiResult对象
|
||||
*/
|
||||
public static CustomApiResult<ApiResultPayAdjustExt> handleSuccessAndReturn(DynamicObject ap_payapply, ApiResultPayAdjustExt apiResultExt,String fkBillNum, String jsonBodyString) {
|
||||
handleSuccess("费控调整单号:" + fkBillNum,fkBillNum, jsonBodyString);
|
||||
apiResultExt.setErrorCode("0");
|
||||
apiResultExt.setStatus(true);
|
||||
apiResultExt.setMessage(null);
|
||||
apiResultExt.setKdPayBillID("" + ap_payapply.getPkValue());
|
||||
apiResultExt.setKdPayBillNo(ap_payapply.getString("billno"));
|
||||
return CustomApiResult.success(apiResultExt);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
package shjh.jhzj7.fi.fi.webapi.model;
|
||||
|
||||
import kd.bos.openapi.common.custom.annotation.ApiModel;
|
||||
import kd.bos.openapi.common.custom.annotation.ApiParam;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 付款调整接口返回模型
|
||||
*/
|
||||
@ApiModel
|
||||
public class ApiResultPayAdjustExt implements Serializable {
|
||||
|
||||
@ApiParam("接口访问是否成功")
|
||||
private Boolean status;
|
||||
@ApiParam("错误码")
|
||||
private String errorCode;
|
||||
@ApiParam("接口调用错误信息")
|
||||
private String message;
|
||||
@ApiParam("金蝶付款单ID")
|
||||
private String kdPayBillID;
|
||||
@ApiParam("金蝶付款单号")
|
||||
private String kdPayBillNo;
|
||||
|
||||
public Boolean getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public void setStatus(Boolean status) {
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
public String getErrorCode() {
|
||||
return errorCode;
|
||||
}
|
||||
|
||||
public void setErrorCode(String errorCode) {
|
||||
this.errorCode = errorCode;
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public void setMessage(String message) {
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public String getKdPayBillID() {
|
||||
return kdPayBillID;
|
||||
}
|
||||
|
||||
public void setKdPayBillID(String kdPayBillID) {
|
||||
this.kdPayBillID = kdPayBillID;
|
||||
}
|
||||
|
||||
public String getKdPayBillNo() {
|
||||
return kdPayBillNo;
|
||||
}
|
||||
|
||||
public void setKdPayBillNo(String kdPayBillNo) {
|
||||
this.kdPayBillNo = kdPayBillNo;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue