提交内容:计划编制调整接口修改代码/列表打回/推送BIP流水日期条件修改

时间:2025-06-06 16:00
提交人:邹江涛
This commit is contained in:
zoujiangtao 2025-06-06 16:00:27 +08:00
parent 54b4c50091
commit 780f98a501
7 changed files with 176 additions and 99 deletions

View File

@ -315,8 +315,7 @@ public class ApiService {
case "https://10.1.9.43/iuap-api-auth/yonbip/ctm/api/settlement/feedback":
saveResponseBody = pushBill(token, saveUrl, saveRequestBody);
jsonObject = JSON.parseObject(saveResponseBody);
code = jsonObject.getString("code");
if ("200".equals(code)) {
if (jsonObject.getJSONObject("data").getIntValue("successnum") > 0) {
if ("TS".equals(dynamic.getString("bankpaystatus"))) {
dynamic.set("shkd_pushstatus", "已结算");
} else {

View File

@ -119,7 +119,7 @@ public class PlanningService {
* @param amount 调整金额
* @return
*/
public static ReportAdjustBillBatchSaveResDTO planAdjustment(String adjustReason, String orgCode, String periodCode, String subjectCode, String entryPeriodCode, String amount) {
public static FpmResponse<ReportAdjustBillBatchSaveResDTO> planAdjustment(String adjustReason, String orgCode, String periodCode, String subjectCode, String entryPeriodCode, String amount) {
logger.info("计划调整服务入参adjustReason={},orgCode={},periodCode={},subjectCode={},entryPeriodCode={},amount={}", adjustReason, orgCode, periodCode, subjectCode, entryPeriodCode, amount);
ReportAdjustBillBatchSaveDTO reportAdjustBillBatchSaveDTO = new ReportAdjustBillBatchSaveDTO();
reportAdjustBillBatchSaveDTO.setSystemCode("SYS-005");// 体系编码
@ -159,8 +159,10 @@ public class PlanningService {
String qParam = SerializationUtils.serializeToBase64(reportAdjustBillBatchSaveDTO);
// 3. 调用SDK接口
ReportDataSDKService reportDataSDKService = new ReportDataSDKService();
reportDataSDKService.batchSaveAdjustReport(qParam);
String result = reportDataSDKService.batchSaveReportData(qParam);
String result = reportDataSDKService.batchSaveAdjustReport(qParam);
logger.info("获取result{}", result);
// 4. 反序列化响应结果
FpmResponse<ReportAdjustBillBatchSaveResDTO> responseObject = SerializationUtils.deSerializeFromBase64(result);
ReportAdjustBillBatchSaveResDTO reportAdjustBillBatchSaveResDTO = responseObject.getData();
@ -171,8 +173,10 @@ public class PlanningService {
logger.info("是否成功:{}\n消息列表{}", responseObject.isSuccess(), responseObject.getMessage());
if (responseObject.isSuccess()) {
logger.info("调整单据编号列表:{}", adjustBillNoList);
}else {
logger.info("失败原因:{}", responseObject.getMessage());
}
return reportAdjustBillBatchSaveResDTO;
return responseObject;
}
/**

View File

@ -23,24 +23,14 @@ public class BalanceExpansion implements IFillBankBalance {
@Override
public void fillExtBankBalance(DynamicObject bankBalance, String balanceString) {
DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(bankBalance.getDynamicObjectType().getName(), "id,billno,shkd_depositbalance", new QFilter("id", QCP.equals, bankBalance.getPkValue()).toArray());
JSONObject jsonObject = JSON.parseObject(balanceString);
logger.info("bankBalance数据{}balanceString数据{}", bankBalance, jsonObject);
Object balance = jsonObject.get("depositBalance");
BigDecimal depositBalance = BigDecimal.ZERO;
if (balance != null) {
if (!"".equals(balance.toString())) {
if (balance != null && !"".equals(balance.toString())) {
depositBalance = new BigDecimal(balance.toString());
}
}
// 只有当新值与旧值不同时才设置并更新
BigDecimal currentBalance = dynamicObject.getBigDecimal("shkd_depositbalance");
if (depositBalance.compareTo(currentBalance) != 0) {
bankBalance.set("shkd_depositbalance", depositBalance);
logger.info("新值与旧值不同,新值上存余额为:{},旧值上存余额为:{}", depositBalance, currentBalance);
}
}
}

View File

@ -53,10 +53,15 @@ public class InterfacePracticePlug extends AbstractListPlugin implements Seriali
jsonObject.getString("amount");// 金额
FpmResponse<Void> voidFpmResponse = planningWrite(jsonObject.getString("periodCode"), jsonObject.getString("orgCode"), jsonObject.getString("subjectCode"), jsonObject.getString("entryPeriodCode"), jsonObject.getString("amount"));
stringBuffer.append("").append(i + 1).append("条数据写入").append(voidFpmResponse.isSuccess() ? "成功" : "失败")
.append(",返回信息:").append(voidFpmResponse.getMessage()).append("\n");
.append(",返回信息:").append(voidFpmResponse.getMessage() == null ? "写入计划编制成功" : voidFpmResponse.getMessage()).append("\n");
}
if (stringBuffer.toString().contains("成功")) {
return CustomApiResult.success(stringBuffer.toString());
} else {
return CustomApiResult.fail("404", stringBuffer.toString());
}
}
/**
* 计划编制调整
@ -77,7 +82,7 @@ public class InterfacePracticePlug extends AbstractListPlugin implements Seriali
jsonObject.getString("subjectCode");// 计划科目
jsonObject.getString("entryPeriodCode");// 主维度数据分录期间code
jsonObject.getString("amount");// 金额
ReportAdjustBillBatchSaveResDTO resDTO = planAdjustment(
FpmResponse<ReportAdjustBillBatchSaveResDTO> fpmResponse = planAdjustment(
jsonObject.getString("adjustReason"),
jsonObject.getString("orgCode"),
jsonObject.getString("periodCode"),
@ -86,15 +91,24 @@ public class InterfacePracticePlug extends AbstractListPlugin implements Seriali
jsonObject.getString("amount")
);
List<String> adjustBillNoList = resDTO.getAdjustBillNoList();// 调整单据编号列表
if (adjustBillNoList.isEmpty()) {
stringBuffer.append("").append(i + 1).append("条数据写入").append("失败").append("\n");
}else {
if (fpmResponse.isSuccess()) {
ReportAdjustBillBatchSaveResDTO data = fpmResponse.getData();
List<String> adjustBillNoList = data.getAdjustBillNoList();
stringBuffer.append("").append(i + 1).append("条数据写入").append("成功,").append("单据编号:").append(adjustBillNoList).append("\n");
}else {
stringBuffer.append("").append(i + 1).append("条数据写入").append("失败,失败原因:").append(fpmResponse.getMessage()).append("\n");
}
}
logger.info("调整单信息:{}", stringBuffer.toString());
if (stringBuffer.toString().contains("成功")) {
return CustomApiResult.success(stringBuffer.toString());
} else {
return CustomApiResult.fail("404", stringBuffer.toString());
}
}
/**

View File

@ -1,46 +1,113 @@
package shkd.sys.sys.plugin.list;
import kd.bos.dataentity.OperateOption;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.entity.datamodel.ListSelectedRow;
import kd.bos.entity.datamodel.ListSelectedRowCollection;
import kd.bos.entity.operate.result.IOperateInfo;
import kd.bos.entity.operate.result.OperationResult;
import kd.bos.form.control.events.ItemClickEvent;
import kd.bos.form.events.AfterDoOperationEventArgs;
import kd.bos.list.BillList;
import kd.bos.list.plugin.AbstractListPlugin;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.OperationServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.sdk.plugin.Plugin;
import shkd.sys.sys.mservice.ApiService;
import java.util.ArrayList;
import java.util.List;
import static kd.bos.servicehelper.workflow.WorkflowServiceHelper.abandonByBusienssKey;
/**
* 标准单据列表插件
*/
public class PaymentProcessingListPlugin extends AbstractListPlugin implements Plugin {
private static final Log logger = LogFactory.getLog(PaymentProcessingListPlugin.class);
@Override
public void itemClick(ItemClickEvent evt) {
String itemKey = evt.getItemKey();
if ("shkd_hitback".equals(itemKey)) {
List<String> billnos = new ArrayList<>();
}
@Override
public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) {
String operateKey = afterDoOperationEventArgs.getOperateKey();
//获取列表
BillList list = this.getControl("billlistap");
//获取列表选中的行数据
ListSelectedRowCollection selectedRows = list.getSelectedRows();
if (selectedRows.isEmpty()) this.getView().showTipNotification("请至少选择一条数据");
if (selectedRows.size() > 1000) this.getView().showTipNotification("请至少选择一条数据");
for (ListSelectedRow listSelectedRow : selectedRows) {
billnos.add(listSelectedRow.getBillNo());
if ("hitback".equals(operateKey)) {
logger.info("进入打回操作 → hitback");
if (selectedRows.isEmpty()) {
this.getView().showTipNotification("请选择一条数据");
return;
} else if (selectedRows.size() > 1) {
this.getView().showTipNotification("涉及流程中断,只能选择一条数据打回");
return;
} else {
ListSelectedRow listSelectedRow = selectedRows.get(0);
Object primaryKeyValue = listSelectedRow.getPrimaryKeyValue();
DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(primaryKeyValue, "cas_paybill");
DynamicObject loadSingle = BusinessDataServiceHelper.loadSingle(dynamicObject.getDynamicObjectType().getName(), "id,billno,name,billstatus,shkd_businessname", new QFilter("id", QCP.equals, dynamicObject.getPkValue()).toArray());
Object businessname = loadSingle.get("shkd_businessname");
String billstatus = loadSingle.getString("billstatus");
if (businessname != null) {
String shkd_businessname = businessname.toString();
if (("共享系统".equals(shkd_businessname) || "XK".equals(shkd_businessname)) && (("B".equals(billstatus) || "C".equals(billstatus)))) {
try {
abandonByBusienssKey(loadSingle.getPkValue().toString());
} catch (Exception ignored) {
}
OperationResult operation;
if ("共享系统".equals(shkd_businessname)) {
DynamicObject[] objects = BusinessDataServiceHelper.load("cas_paybill",
"id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype,acttradedate," +
"payeebanknum,payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype," +
"org,bizdate,description,shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname," +
"billstatus,bankpaystatus", new QFilter("billno", QCP.equals, loadSingle.getString("billno")).toArray());
List<DynamicObject> dynamicObjects = new ArrayList<>();
String pushResult = ApiService.paymentSlipsJson(objects[0], "BIPRE", dynamicObjects, null);
logger.info("result信息{}", pushResult);
if (pushResult.contains("成功")) {
SaveServiceHelper.save(dynamicObjects.toArray(new DynamicObject[0]));
} else {
this.getView().showTipNotification("打回失败失败原因调用BIP打回接口失败");
return;
}
}
/* DynamicObject[] objects1 = BusinessDataServiceHelper.load("cas_paybill",
"id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype,payeebanknum," +
"payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype,org,bizdate,description," +
"shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname,billstatus,bankpaystatus"
, new QFilter("bizdate", QCP.large_equals, date).and("shkd_pushstatus", QCP.not_equals, "已推送")
.and("billstatus", QCP.equals, "D").toArray());*/
if ("B".equals(dynamicObject.getString("billstatus"))) {
operation = OperationServiceHelper.executeOperate("unsubmit", "cas_paybill", new DynamicObject[]{dynamicObject}, OperateOption.create());
} else if ("C".equals(dynamicObject.getString("billstatus"))) {
operation = OperationServiceHelper.executeOperate("unaudit", "cas_paybill", new DynamicObject[]{dynamicObject}, OperateOption.create());
} else {
this.getView().showTipNotification("单据不为已提交或已审核状态,无法打回");
return;
}
List<IOperateInfo> allErrorOrValidateInfo = operation.getAllErrorOrValidateInfo();
if (!allErrorOrValidateInfo.isEmpty()) {
this.getView().showTipNotification("打回失败,失败原因:撤销(反审核)操作失败 → " + allErrorOrValidateInfo.get(0).getMessage());
return;
} else {
this.getView().showSuccessNotification("打回成功");
list.refresh();
}
} else {
this.getView().showTipNotification("来源系统为BIP或星空且单据状态为提交或审核才允许打回");
return;
}
} else {
this.getView().showTipNotification("来源系统为BIP或星空且单据状态为提交或审核才允许打回");
}
}
}
}
}

View File

@ -40,60 +40,58 @@ public class HitBackOperationServicePlugin extends AbstractOperationServicePlugI
public void beforeExecuteOperationTransaction(BeforeOperationArgs args) {
super.beforeExecuteOperationTransaction(args);
DynamicObject[] entities = args.getDataEntities();
List<Object> pkValue = new ArrayList<>();
Arrays.stream(entities).forEach(dynamicObject -> {
pkValue.add(dynamicObject.getPkValue());
});
DynamicObject[] objects = BusinessDataServiceHelper.load("cas_paybill",
"id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype," +
"payeebanknum,payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype," +
"org,bizdate,description,shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname," +
"billstatus,bankpaystatus"
, new QFilter("id", QCP.in, pkValue)
.and("billstatus", QCP.in, "B、C")
.and("shkd_businessname", QCP.equals, "共享系统").toArray());
if (objects == null || objects.length == 0) {
args.setCancelMessage("打回失败\n" +
"1、选择打回单据必须为BIP推送单据\n" +
"2、只能打回提交、已审核的单据\n" +
"(若有其他问题,可找业务老师咨询)"
);
if (entities.length > 1) {
args.setCancelMessage("涉及流程中断,只能选择一条数据打回");
args.setCancel(true);
} else {
StringBuilder stringBuilder = new StringBuilder();
for (DynamicObject dynamicObject : objects) {
if (!"未结算".equals(dynamicObject.getString("shkd_pushstatus"))) {
stringBuilder.append("单据编号:" + dynamicObject.get("billno") + " 打回失败,该单据结算结果已被推送\n");
continue;
DynamicObject loadSingle = BusinessDataServiceHelper.loadSingle(entities[0].getDynamicObjectType().getName(), "id,billno,name,billstatus,shkd_businessname", new QFilter("id", QCP.equals, entities[0].getPkValue()).toArray());
Object businessname = loadSingle.get("shkd_businessname");
String billstatus = loadSingle.getString("billstatus");
if (businessname != null) {
String shkd_businessname = businessname.toString();
if (("共享系统".equals(shkd_businessname) || "XK".equals(shkd_businessname)) && (("B".equals(billstatus) || "C".equals(billstatus)))) {
try {
abandonByBusienssKey(loadSingle.getPkValue().toString());
} catch (Exception ignored) {
}
OperationResult operation;
if ("B".equals(dynamicObject.getString("billstatus"))) {
operation = OperationServiceHelper.executeOperate("unsubmit", "cas_paybill", new DynamicObject[]{dynamicObject}, OperateOption.create());
}else{
operation = OperationServiceHelper.executeOperate("unaudit", "cas_paybill", new DynamicObject[]{dynamicObject}, OperateOption.create());
}
List<IOperateInfo> allErrorOrValidateInfo = operation.getAllErrorOrValidateInfo();
if (allErrorOrValidateInfo.isEmpty()) {
if ("共享系统".equals(shkd_businessname)) {
DynamicObject[] objects = BusinessDataServiceHelper.load("cas_paybill",
"id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype,acttradedate," +
"payeebanknum,payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype," +
"org,bizdate,description,shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname," +
"billstatus,bankpaystatus", new QFilter("billno", QCP.equals, loadSingle.getString("billno")).toArray());
List<DynamicObject> dynamicObjects = new ArrayList<>();
String result = ApiService.paymentSlipsJson(dynamicObject, "BIPRE", dynamicObjects, null);
logger.info("result信息{}", result);
if (result.contains("成功")) {
String pushResult = ApiService.paymentSlipsJson(objects[0], "BIPRE", dynamicObjects, null);
logger.info("result信息{}", pushResult);
if (pushResult.contains("成功")) {
SaveServiceHelper.save(dynamicObjects.toArray(new DynamicObject[0]));
} else {
stringBuilder.append("单据编号:" + dynamicObject.get("billno") + " 打回失败调用BIP接口失败\n");
}
} else {
allErrorOrValidateInfo.forEach(operateInfo -> {
DynamicObject object = BusinessDataServiceHelper.loadSingle(operateInfo.getPkValue(), "cas_paybill");
stringBuilder.append("单据编号:" + object.get("billno") + "" + operateInfo.getMessage() + "\n");
});
args.setCancelMessage("打回失败失败原因调用BIP打回接口失败");
args.setCancel(true);
return;
}
}
if (!stringBuilder.isEmpty()) {
args.setCancelMessage(stringBuilder.toString());
if ("B".equals(loadSingle.getString("billstatus"))) {
operation = OperationServiceHelper.executeOperate("unsubmit", "cas_paybill", new DynamicObject[]{loadSingle}, OperateOption.create());
} else if ("C".equals(loadSingle.getString("billstatus"))) {
operation = OperationServiceHelper.executeOperate("unaudit", "cas_paybill", new DynamicObject[]{loadSingle}, OperateOption.create());
} else {
args.setCancelMessage("单据不为已提交或已审核状态,无法打回");
args.setCancel(true);
return;
}
List<IOperateInfo> allErrorOrValidateInfo = operation.getAllErrorOrValidateInfo();
if (!allErrorOrValidateInfo.isEmpty()) {
args.setCancelMessage("打回失败,失败原因:撤销(反审核)操作失败 → " + allErrorOrValidateInfo.get(0).getMessage());
args.setCancel(true);
}
} else {
args.setCancelMessage("来源系统为BIP或星空且单据状态为提交或审核才允许打回");
args.setCancel(true);
}
}
}
}
}

View File

@ -27,6 +27,7 @@ import java.time.LocalDate;
import java.time.Month;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
import static shkd.sys.sys.mservice.ApiService.*;
@ -36,6 +37,7 @@ import static shkd.sys.sys.mservice.ApiService.*;
*/
public class PushTaskPlugin extends AbstractTask implements Plugin {
private static final Log logger = LogFactory.getLog(PushTaskPlugin.class);
private static final ZoneId DEFAULT_ZONE = ZoneId.systemDefault();
@Override
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
@ -150,7 +152,7 @@ public class PushTaskPlugin extends AbstractTask implements Plugin {
*/
case "bei_transdetail_cas":
DynamicObject[] objects3 = BusinessDataServiceHelper.load("bei_transdetail_cas", "id,bizdate,billno,detailid,oppbank,oppunit,accountbank,description,company,oppbanknumber,bankdetailno,transbalance,description,debitamount,creditamount,shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname,recedbillentry,receiptno,recedbillentry.e_recedbilltype,recedbillentry.e_recedbillnumber,recedbillentry.e_recedbillid"
, new QFilter("bizdate", QCP.large_equals, getFirstDayOfCurrentMonth())
, new QFilter("bizdate", QCP.large_equals, getAdjustedFirstDayOfCurrentMonth())
.and("shkd_pushstatus", QCP.not_equals, "已推送").toArray());
Arrays.stream(objects3).forEach(dynamicObject -> {
@ -406,14 +408,17 @@ public class PushTaskPlugin extends AbstractTask implements Plugin {
* 获取当前月份的第一天
* @return
*/
private static Date getFirstDayOfCurrentMonth() {
// 获取当前日期
private static Date getAdjustedFirstDayOfCurrentMonth() {
LocalDate currentDate = LocalDate.now();
// 获取当前月份的第一天
if (currentDate.getDayOfMonth() == 1) {
// 返回上个月最后一天
LocalDate lastDayOfPreviousMonth = currentDate.minusMonths(1).with(TemporalAdjusters.lastDayOfMonth());
return Date.from(lastDayOfPreviousMonth.atStartOfDay(DEFAULT_ZONE).toInstant());
} else {
// 返回当前月份第一天
LocalDate firstDayOfMonth = currentDate.withDayOfMonth(1);
// 将LocalDate转换为Date
return Date.from(firstDayOfMonth.atStartOfDay(ZoneId.systemDefault()).toInstant());
return Date.from(firstDayOfMonth.atStartOfDay(DEFAULT_ZONE).toInstant());
}
}
}