Merge remote-tracking branch 'origin/main' into main

This commit is contained in:
陈绍鑫 2025-05-29 11:38:03 +08:00
commit 1f9e9e43fd
8 changed files with 126 additions and 53 deletions

View File

@ -220,8 +220,14 @@ public class ToDoResendTack extends AbstractTask {
form.append("\"").append(pcUrl).append("&userName=").append(userName).append("\",");
form.append("\"appHandleUrl\":");
form.append("\"").append(pcUrl).append("&userName=").append(userName).append("\",");
// appUrl移动端查看模式
form.append("\"appViewUrl\":");
form.append("\"").append(pcUrl).append("&userName=").append(userName).append("&ado=view").append("\",");
form.append("\"appName\":");
form.append("\"").append(next.getString("fentityname")).append("\",");
//pc端查看模式
form.append("\"viewUrl\":");
form.append("\"").append(pcUrl).append("&userName=").append(userName).append("&ado=view").append("\",");
form.append("\"pendingId\":");
form.append("\"").append(next.getLong("fid")).append("\",");
form.append("\"pendingAttr\":");

View File

@ -201,8 +201,14 @@ public class BacklogServiceHandle extends AbstractServiceHandler {
form.append("\"").append(url).append("&userName=").append(userName).append("\",");
form.append("\"appHandleUrl\":");
form.append("\"").append(url).append("&userName=").append(userName).append("\",");
// appUrl移动端查看模式
form.append("\"appViewUrl\":");
form.append("\"").append(url).append("&userName=").append(userName).append("&ado=view").append("\",");
form.append("\"appName\":");
form.append("\"").append(ctx.getEntityName()).append("\",");
//pc端查看模式
form.append("\"viewUrl\":");
form.append("\"").append(url).append("&userName=").append(userName).append("&ado=view").append("\",");
form.append("\"pendingId\":");
form.append("\"").append(todoInfo.getTaskId()).append("\",");
form.append("\"pendingAttr\":");
@ -295,8 +301,14 @@ public class BacklogServiceHandle extends AbstractServiceHandler {
form.append("\"").append(url).append("&userName=").append(userName).append("\",");
form.append("\"appHandleUrl\":");
form.append("\"").append(url).append("&userName=").append(userName).append("\",");
// appUrl移动端查看模式
form.append("\"appViewUrl\":");
form.append("\"").append(url).append("&userName=").append(userName).append("&ado=view").append("\",");
form.append("\"appName\":");
form.append("\"").append(ctx.getEntityName()).append("\",");
//pc端查看模式
form.append("\"viewUrl\":");
form.append("\"").append(url).append("&userName=").append(userName).append("&ado=view").append("\",");
form.append("\"pendingId\":");
form.append("\"").append(todoInfo.getTaskId()).append("\",");
form.append("\"pendingAttr\":");

View File

@ -16,9 +16,6 @@ import kd.bos.dataentity.resource.ResManager;
import kd.bos.dataentity.utils.StringUtils;
import kd.bos.entity.MainEntityType;
import kd.bos.exception.KDBizException;
import kd.bos.fileservice.FileItem;
import kd.bos.fileservice.FileService;
import kd.bos.fileservice.FileServiceFactory;
import kd.bos.form.IFormView;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
@ -30,16 +27,13 @@ import kd.bos.orm.query.QFilter;
import kd.bos.print.core.service.PrtAttach;
import kd.bos.print.matchtpl.MatcherTpl;
import kd.bos.print.matchtpl.ViewType;
import kd.bos.print.service.BosPrintServiceHelper;
import kd.bos.servicehelper.*;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.bos.servicehelper.print.NotePrintService;
import kd.bos.util.FileNameUtils;
import kd.bos.util.ExceptionUtils;
import kd.tmc.bei.business.ocr.impl.ScanServiceImpl;
import kd.tmc.bei.business.ocr.invoke.ScanSystemFactory;
import kd.tmc.bei.common.helper.BeiHelper;
import kd.tmc.bei.common.helper.ReceiptPrintHelper;
import kd.bos.util.ExceptionUtils;
import kd.tmc.bei.common.resource.BeiBizResource;
import kd.tmc.fbp.common.ofd.OfdConvertUtil;
import kd.tmc.fbp.common.util.EmptyUtil;
@ -48,12 +42,6 @@ import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
import shkd.sys.sys.common.PaymentRequest;
import java.net.URLConnection;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.Files;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
@ -62,8 +50,12 @@ import java.io.*;
import java.math.BigDecimal;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.security.cert.X509Certificate;
import java.text.SimpleDateFormat;
import java.util.*;
@ -251,7 +243,6 @@ public class ApiService {
jsonObject = JSON.parseObject(saveResponseBody);
code = jsonObject.getString("code");
if ("200".equals(code)) {
// LogService.newLog("INFO", "付款单", dynamic.getString("billno"), "付款处理 → BIP保存接口 → 成功", "请求数据:" + saveRequestBody + "\n推送成功接口返回数据" + saveResponseBody);
logger.info("付款处理 → BIP保存接口 → 成功\n失败单据编号{}\n推送失败接口返回数据{}", dynamic.getString("billno"), saveResponseBody);
data = jsonObject.getJSONObject("data");
dynamic.set("shkd_businessnumber", data.getString("code"));
@ -268,7 +259,6 @@ public class ApiService {
logger.info("付款处理 → BIP提交接口 → 返回结果:{}", submitResponseBody);
result = "推送 → 付款处理单 → 成功";
} else {
// LogService.newLog("ERROR", "付款单", dynamic.getString("billno"), "付款处理 → BIP保存接口 → 失败", "请求数据:" + saveRequestBody + "\n推送失败接口返回数据" + saveResponseBody);
logger.info("付款处理 → BIP保存接口 → 失败\n失败单据编号{}\n推送失败接口返回数据{}", dynamic.getString("billno"), saveResponseBody);
result = "推送 → 付款处理单 → 失败";
}
@ -281,8 +271,6 @@ public class ApiService {
jsonObject = JSON.parseObject(saveResponseBody);
code = jsonObject.getString("code");
if ("200".equals(code)) {
// LogService.newLog("INFO", "收款单", dynamic.getString("billno"), "收款处理 → BIP保存接口 → 成功", "请求数据:" + saveRequestBody + "\n推送成功接口返回数据" + saveResponseBody);
logger.info("收款处理 → BIP保存接口 → 成功\n失败单据编号{}\n推送失败接口返回数据{}", dynamic.getString("billno"), saveResponseBody);
data = jsonObject.getJSONObject("data");
dynamic.set("shkd_businessnumber", data.getString("code"));
@ -298,8 +286,6 @@ public class ApiService {
logger.info("收款处理 → BIP提交接口 → 返回结果:{}", submitResponseBody);
result = "推送 → 收款处理 → 成功";
} else {
// LogService.newLog("ERROR", "收款单", dynamic.getString("billno"), "收款处理 → BIP保存接口 → 失败", "请求数据:" + saveRequestBody + "\n推送失败接口返回数据" + saveResponseBody);
logger.info("收款处理 → BIP保存接口 → 失败\n失败单据编号{}\n推送失败接口返回数据{}", dynamic.getString("billno"), saveResponseBody);
result = "推送 → 收款处理 → 失败";
}
@ -309,18 +295,14 @@ public class ApiService {
case "https://10.1.9.43/iuap-api-auth/yonbip/ctm/cmp/bankReconciliationBatchSave":
saveResponseBody = pushBill(token, saveUrl, saveRequestBody);
jsonObject = JSON.parseObject(saveResponseBody);
code = jsonObject.getString("code");
if ("200".equals(code)) {
int successnum = jsonObject.getJSONObject("data").getIntValue("successnum");
if (successnum > 0) {
dynamic.set("shkd_pushstatus", "已推送");
dynamic.set("shkd_businessname", "共享系统");
dynamicObjects.add(dynamic);
// LogService.newLog("INFO", "银行收付处理", dynamic.getString("billno"), "银行收付处理 → BIP推送接口 → 成功", "请求数据:" + saveRequestBody + "\n推送成功接口返回数据" + saveResponseBody);
logger.info("银行收付处理 → BIP推送接口 → 成功\n成功单据编号{}\n成功请求体{}\n推送成功接口返回数据{}", dynamic.getString("billno"), saveRequestBody, saveResponseBody);
result = "推送 → 银行收付处理 → 成功";
} else {
// LogService.newLog("ERROR", "银行收付处理", dynamic.getString("billno"), "银行收付处理 → BIP推送接口 → 失败", "请求数据:" + saveRequestBody + "\n推送失败接口返回数据" + saveResponseBody);
logger.info("银行收付处理 → BIP推送接口 → 失败\n失败单据编号{}\n失败请求体{}\n推送失败接口返回数据{}", dynamic.getString("billno"), saveRequestBody, saveResponseBody);
result = "推送 → 银行收付处理 → 失败";
}

View File

@ -5,6 +5,9 @@ import com.alibaba.fastjson.JSONObject;
import kd.bos.dataentity.entity.DynamicObject;
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.SaveServiceHelper;
import kd.sdk.tmc.bei.extpoint.balance.IFillBankBalance;
@ -17,16 +20,27 @@ import java.math.BigDecimal;
*/
public class BalanceExpansion implements IFillBankBalance {
private static final Log logger = LogFactory.getLog(BalanceExpansion.class);
@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");
if (balance != null && !"".equals(balance)) {
bankBalance.set("shkd_depositbalance", new BigDecimal(String.valueOf(balance)));
} else {
bankBalance.set("shkd_depositbalance", BigDecimal.ZERO);
}
SaveServiceHelper.save(new DynamicObject[]{bankBalance});
BigDecimal depositBalance = BigDecimal.ZERO;
if (balance != null) {
if (!"".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

@ -36,6 +36,7 @@ public class InterfacePracticePlug extends AbstractListPlugin implements Seriali
/**
* 计划编制写入
*
* @param arrHashMap
* @return
*/
@ -54,7 +55,7 @@ public class InterfacePracticePlug extends AbstractListPlugin implements Seriali
stringBuffer.append("").append(i + 1).append("条数据写入").append(voidFpmResponse.isSuccess() ? "成功" : "失败")
.append(",返回信息:").append(voidFpmResponse.getMessage()).append("\n");
}
return CustomApiResult.success(stringBuffer.toString());
return CustomApiResult.fail("404", stringBuffer.toString());
}
/**
@ -63,7 +64,7 @@ public class InterfacePracticePlug extends AbstractListPlugin implements Seriali
* @param arrHashMap
* @return
*/
@ApiPostMapping(value = "planAdjustment_save", desc = "计划编制写入")
@ApiPostMapping(value = "planAdjustment_save", desc = "计划编制调整写入")
public CustomApiResult<@ApiResponseBody("返回参数") String> planAdjustment_save(@ApiParam(value = "查询字段值") ArrayList<HashMap<String, Object>> arrHashMap) {
logger.info("planAdjustment_save请求参数{}", arrHashMap.get(0));
StringBuilder stringBuffer = new StringBuilder();
@ -92,7 +93,7 @@ public class InterfacePracticePlug extends AbstractListPlugin implements Seriali
stringBuffer.append("").append(i + 1).append("条数据写入").append("成功,").append("单据编号:").append(adjustBillNoList).append("\n");
}
}
return CustomApiResult.success(stringBuffer.toString());
return CustomApiResult.fail("404", stringBuffer.toString());
}
@ -102,11 +103,11 @@ public class InterfacePracticePlug extends AbstractListPlugin implements Seriali
* @param hashMap
* @return
*/
@ApiPostMapping(value = "planAdjustment_save", desc = "计划编制查询")
@ApiPostMapping(value = "planAdjustment_query", desc = "计划编制查询")
public CustomApiResult<@ApiResponseBody("返回参数") String> planAdjustment_query(@ApiParam(value = "查询字段值") HashMap<String, Object> hashMap) {
String reportPeriodName = hashMap.get("reportPeriodName").toString();// 编报期间ID
String reportOrgName = hashMap.get("reportOrgName").toString();// 编报主体ID
String queryPlanning = queryPlanning(reportPeriodName, reportOrgName);
return CustomApiResult.success(queryPlanning);
return CustomApiResult.fail("404", queryPlanning);
}
}

View File

@ -25,6 +25,7 @@ public class TicketRegistration implements Serializable, ApiSavePlugin {
@Override
public List<Map<String, Object>> preHandleRequestData(List<Map<String, Object>> reqData) {
logger.info("进入TicketRegistration");
for (Map<String, Object> map : reqData) {
String payeetype = map.get("payeetype").toString();
/**
@ -35,15 +36,28 @@ public class TicketRegistration implements Serializable, ApiSavePlugin {
* other
*/
if ("bd_supplier".equals(payeetype) || "bd_customer".equals(payeetype)) {
logger.info("进入判断客商if方法");
if (map.get("deliver") != null) {
logger.info("进入收票登记");
Map<String, Object> deliver = (Map<String, Object>) map.get("deliver");
String deliveraccountbase = map.get("deliveraccountbase").toString();// 交票人账号
String deliver_number = deliver.get("number").toString();
DynamicObject[] objects = BusinessDataServiceHelper.load(payeetype, "id,number," +
"name,societycreditcode,entry_bank,entry_bank.bankaccount,entry_bank.accountname,entry_bank.bank",
new QFilter("societycreditcode", QCP.equals, deliver_number).toArray());
if (objects.length > 0) {
logger.info("进入收票登记→objects.length > 0");
DynamicObjectCollection dynamicObjectCollection = objects[0].getDynamicObjectCollection("entry_bank");
dynamicObjectCollection.forEach(dynamicObject -> {
if (dynamicObject.getString("bankaccount").equals(deliveraccountbase)) {
Object bank = dynamicObject.get("bank");
DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load("bd_bebank", "id,number", new QFilter("id", QCP.equals, bank).toArray());
Map<String, Object> deliveropenbank = new HashMap<>();
deliveropenbank.put("number", dynamicObjects[0].getString("number"));
map.put("deliveropenbank", deliveropenbank);
map.put("deliveropenbanknum", dynamicObjects[0].getString("number"));
}
});
Map<String, Object> societycreditcode = new HashMap<>();
societycreditcode.put("number", objects[0].getString("number"));
map.put("deliver", societycreditcode);
@ -53,12 +67,24 @@ public class TicketRegistration implements Serializable, ApiSavePlugin {
if (map.get("receiver") != null) {//receiver_number
logger.info("进入开票登记");
Map<String, Object> deliver = (Map<String, Object>) map.get("receiver");
String receiveraccount = map.get("receiveraccount").toString();// 收款人账号
String receiver_number = deliver.get("number").toString();
DynamicObject[] objects = BusinessDataServiceHelper.load(payeetype, "id,number," +
"name,societycreditcode,entry_bank,entry_bank.bankaccount,entry_bank.accountname,entry_bank.bank",
new QFilter("societycreditcode", QCP.equals, receiver_number).toArray());
if (objects.length > 0) {
logger.info("进入开票登记→objects.length > 0");
DynamicObjectCollection dynamicObjectCollection = objects[0].getDynamicObjectCollection("entry_bank");
dynamicObjectCollection.forEach(dynamicObject -> {
if (dynamicObject.getString("bankaccount").equals(receiveraccount)) {
Object bank = dynamicObject.get("bank");
DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load("bd_bebank", "id,number", new QFilter("id", QCP.equals, bank).toArray());
Map<String, Object> receiverbank = new HashMap<>();
receiverbank.put("number", dynamicObjects[0].getString("number"));
map.put("receiverbank", receiverbank);
map.put("receiverbankno", dynamicObjects[0].getString("number"));
}
});
Map<String, Object> societycreditcode = new HashMap<>();
societycreditcode.put("number", objects[0].getString("number"));
map.put("receiver", societycreditcode);

View File

@ -24,6 +24,7 @@ import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.ParseException;
import java.time.LocalDate;
import java.time.Month;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
@ -72,6 +73,13 @@ public class PushTaskPlugin extends AbstractTask implements Plugin {
* 供应链融资 SCF
*/
case "cas_paybill":
ArrayList<String> bizdates = new ArrayList<>();
bizdates.add("FCA");//1
bizdates.add("CFM");//2
bizdates.add("CIM");//3
bizdates.add("LC");//4
bizdates.add("CDM");//5
bizdates.add("FL");//6
DynamicObject[] objects1 = BusinessDataServiceHelper.load("cas_paybill",
"id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,entry.e_actamt,settletype," +
"payeebanknum,payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype," +
@ -79,7 +87,7 @@ public class PushTaskPlugin extends AbstractTask implements Plugin {
"billstatus,bankpaystatus,sourcetype"
, new QFilter("bizdate", QCP.large_equals, getFirstDayOfMonth(3))
.and("billstatus", QCP.equals, "D")
.and("sourcetype", QCP.in, "FCA,CFM,CIM,LC,CDM,FL").toArray());
.and("sourcetype", QCP.in, bizdates).toArray());
Arrays.stream(objects1).forEach(dynamicObject -> {
DynamicObject org = dynamicObject.getDynamicObject("org");
@ -142,8 +150,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, getFirstDayOfMonth(3))
.and("bizdate", QCP.less_equals, calculateTheDate(1))
, new QFilter("bizdate", QCP.large_equals, getFirstDayOfCurrentMonth())
.and("shkd_pushstatus", QCP.not_equals, "已推送").toArray());
Arrays.stream(objects3).forEach(dynamicObject -> {
@ -379,6 +386,11 @@ public class PushTaskPlugin extends AbstractTask implements Plugin {
return date;
}
/**
* 获取指定月份的第一天
* @param month
* @return
*/
private static Date getFirstDayOfMonth(int month) {
// 获取当前年份
int currentYear = LocalDate.now().getYear();
@ -389,4 +401,19 @@ public class PushTaskPlugin extends AbstractTask implements Plugin {
// 将LocalDate转换为Date
return Date.from(firstDayOfMonth.atStartOfDay(ZoneId.systemDefault()).toInstant());
}
/**
* 获取当前月份的第一天
* @return
*/
private static Date getFirstDayOfCurrentMonth() {
// 获取当前日期
LocalDate currentDate = LocalDate.now();
// 获取当前月份的第一天
LocalDate firstDayOfMonth = currentDate.withDayOfMonth(1);
// 将LocalDate转换为Date
return Date.from(firstDayOfMonth.atStartOfDay(ZoneId.systemDefault()).toInstant());
}
}

View File

@ -17,6 +17,7 @@ import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.fi.bcm.common.util.CollectionUtil;
import kd.fi.cal.business.datacheck.ExceptionObj;
import kd.sdk.plugin.Plugin;
import java.util.*;
@ -36,9 +37,8 @@ public class LoancontractF7Plugin extends AbstractBillPlugIn implements Plugin,
e_underwriter.addBeforeF7SelectListener(this);
//监听占用注册额度F7数据选择
BasedataEdit shkd_occupybondlimit;
try{
shkd_occupybondlimit = view.getControl("shkd_occupybondlimit");
}catch (Exception ept){
if(shkd_occupybondlimit == null){
shkd_occupybondlimit = view.getControl("occupybondlimit");
}
shkd_occupybondlimit.addBeforeF7SelectListener(this);
@ -62,12 +62,12 @@ public class LoancontractF7Plugin extends AbstractBillPlugIn implements Plugin,
shkd_bondlimit= (DynamicObject)this.getModel().getValue("occupybondlimit");
}catch(Exception e){
shkd_bondlimit= (DynamicObject)this.getModel().getValue("shkd_occupybondlimit");
}
if(shkd_bondlimit == null){
evt.setCancel(true);
this.getView().showTipNotification("请先选择占用注册额度。");
return;
}
}
DynamicObject bdim_bond_limit = BusinessDataServiceHelper.loadSingle(shkd_bondlimit.get("id"), "bdim_bond_limit");
DynamicObjectCollection shkd_underwriterentry = bdim_bond_limit.getDynamicObjectCollection("shkd_underwriterentry");
@ -94,7 +94,12 @@ public class LoancontractF7Plugin extends AbstractBillPlugIn implements Plugin,
}
Long finproductID = (Long)finproduct.get("id");
//发行日期
Date startdate = (Date)this.getModel().getValue("startdate");
Date startdate;
try {
startdate = (Date)this.getModel().getValue("startdate");
}catch (Exception e){
startdate = (Date)this.getModel().getValue("bizdate");
}
if(startdate == null){
this.getView().showTipNotification("请先选择发行日期。");
evt.setCancel(true);
@ -138,12 +143,12 @@ public class LoancontractF7Plugin extends AbstractBillPlugIn implements Plugin,
shkd_bondlimit= (DynamicObject)this.getModel().getValue("occupybondlimit");
}catch(Exception e){
shkd_bondlimit= (DynamicObject)this.getModel().getValue("shkd_occupybondlimit");
}
if(shkd_bondlimit == null){
evt.setCancel(true);
this.getView().showTipNotification("请先选择占用注册额度。");
return;
}
}
Long occupybondlimitId = (Long) shkd_bondlimit.getPkValue();
//找到注册额度中的招标遴选ID
DynamicObject intermediaryselectID = BusinessDataServiceHelper.loadSingle(occupybondlimitId,"bdim_bond_limit", "shkd_intermediaryselect");