From 76b7a4397591f27db812ec94152752ae157190e9 Mon Sep 17 00:00:00 2001 From: yuxueliang0813 <407010292@qq.com> Date: Fri, 11 Apr 2025 16:01:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=98=E6=AC=BE=E7=94=B5=E5=AD=90=E5=9B=9E?= =?UTF-8?q?=E5=8D=95=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../form/ClearDetailBillListPlugin.java | 33 +++- .../plugin/task/FundPlanCollectionTask.java | 5 +- .../fi/webapi/PayreceiptQueryControler.java | 173 ++++++++---------- .../fi/fi/webapi/model/ApiResultExt.java | 33 +++- .../fi/webapi/model/PayreceiptQueryModel.java | 20 ++ 5 files changed, 156 insertions(+), 108 deletions(-) diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/form/ClearDetailBillListPlugin.java b/main/java/shjh/jhzj7/fi/fi/plugin/form/ClearDetailBillListPlugin.java index ed307a9..eebbb5f 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/form/ClearDetailBillListPlugin.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/form/ClearDetailBillListPlugin.java @@ -1,15 +1,16 @@ package shjh.jhzj7.fi.fi.plugin.form; import kd.bos.context.RequestContext; +import kd.bos.dataentity.entity.DynamicObject; import kd.bos.form.events.SetFilterEvent; import kd.bos.list.plugin.AbstractListPlugin; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.permission.PermissionServiceHelper; import kd.sdk.plugin.Plugin; import java.util.EventObject; -import java.util.Set; /** * 列表插件-清账明细单-过滤创建人 @@ -17,7 +18,9 @@ import java.util.Set; */ public class ClearDetailBillListPlugin extends AbstractListPlugin implements Plugin { - private boolean isArRole = false;//是否应收角色 + private boolean isArRole = false;//是否属于应收组 + + private static final String entityName = "bos_usergroupstaff";//用户组职员关系 T_SEC_UserGroupStaff @Override public void setFilter(SetFilterEvent e) { @@ -29,12 +32,28 @@ public class ClearDetailBillListPlugin extends AbstractListPlugin implements Plu } private void setArRole(){ - //判断当前用户的角色是否是应收,是应收返回true -// PermissionServiceHelper.getUsersByRoleNum("source_quality_DJ");//根据角色编号查找下属所有用户 - Set roles = PermissionServiceHelper.getRolesByUser(RequestContext.get().getCurrUserId());//根据用户ID查找所属角色集合 - //TODO 再判断集合中是否包含应收角色 - if(roles.contains("ar000")){ + //如果是全功能用户返回true + if(PermissionServiceHelper.isSuperUser(RequestContext.get().getCurrUserId())){ isArRole = true; + return; + } +// PermissionServiceHelper.getUsersByRoleNum("source_quality_DJ");//根据角色编号查找下属所有用户 +// Set roles = PermissionServiceHelper.getRolesByUser(RequestContext.get().getCurrUserId());//根据用户ID查找所属角色集合 +// //再判断集合中是否包含应收角色 +// if(roles.contains("ar000")){ +// isArRole = true; +// } + + //判断当前用户的用户组是否是应收,是应收返回true + DynamicObject[] ddos = BusinessDataServiceHelper.load(entityName, "usergroup.id,usergroup.number,usergroup.name", + new QFilter[]{new QFilter("user", QCP.equals, RequestContext.get().getCurrUserId())}); + DynamicObject groupinfo; + for (DynamicObject ddo : ddos) { + groupinfo = ddo.getDynamicObject("usergroup"); + if("应收组".equals(groupinfo.getString("name"))){ + isArRole = true; + break; + } } } diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/task/FundPlanCollectionTask.java b/main/java/shjh/jhzj7/fi/fi/plugin/task/FundPlanCollectionTask.java index 0bf27d0..3fa9879 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/task/FundPlanCollectionTask.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/task/FundPlanCollectionTask.java @@ -239,10 +239,11 @@ public class FundPlanCollectionTask extends AbstractTask implements Plugin { QFilter startDateFilter = new QFilter("shjh_begindate", QCP.less_equals, currentDate); QFilter endDateFilter = new QFilter("shjh_enddate", QCP.large_equals, currentDate); QFilter newFilter = qFilter.and(startDateFilter).and(endDateFilter); - accounts = BusinessDataServiceHelper.load(payReceName, "id", newFilter.toArray()); + //多个条件时根据优先级排序,拿到优先级最高的 + accounts = BusinessDataServiceHelper.load(payReceName, "id", newFilter.toArray(),"shjh_priority"); } if (accounts.length > 0) { - // 处理找到符合条件的账户 + // 处理找到符合条件的资金科目 DynamicObject account = accounts[0]; account = BusinessDataServiceHelper.loadSingle(account.getPkValue(), payReceName); return account.getDynamicObject("shjh_membersubject").getString("number"); diff --git a/main/java/shjh/jhzj7/fi/fi/webapi/PayreceiptQueryControler.java b/main/java/shjh/jhzj7/fi/fi/webapi/PayreceiptQueryControler.java index 5815b66..7262ef5 100644 --- a/main/java/shjh/jhzj7/fi/fi/webapi/PayreceiptQueryControler.java +++ b/main/java/shjh/jhzj7/fi/fi/webapi/PayreceiptQueryControler.java @@ -6,8 +6,6 @@ import com.alibaba.fastjson.JSONObject; import com.drew.lang.annotations.NotNull; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; -import kd.bos.fileservice.FileService; -import kd.bos.fileservice.FileServiceFactory; import kd.bos.logging.Log; import kd.bos.logging.LogFactory; import kd.bos.openapi.common.custom.annotation.ApiController; @@ -17,14 +15,12 @@ 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.util.ExceptionUtils; -import kd.bos.util.StringUtils; +import kd.tmc.bei.common.helper.ReceiptPrintHelper; import shjh.jhzj7.fi.fi.utils.JhzjUtils; import shjh.jhzj7.fi.fi.webapi.model.ApiResultExt; import shjh.jhzj7.fi.fi.webapi.model.PayreceiptQueryModel; import javax.validation.Valid; -import java.io.*; import java.util.ArrayList; import java.util.List; @@ -37,8 +33,11 @@ import static shjh.jhzj7.fi.fi.webapi.ApplyAdjustBillControler.loadOrgByCompanyN public class PayreceiptQueryControler { private static final String Apimenthod = "付款电子回单查询接口"; - private static final Log log = LogFactory.getLog(PayreceiptQueryControler.class); + private static final Log logger = LogFactory.getLog(PayreceiptQueryControler.class); private static final String apimenthod = "/payreceipt_query"; + private static final String detailName = "bei_intelpay";//交易明细标识 + private static final String elecreceiptName = "bei_elecreceipt";//电子回单标识 + private static final String paybillName = "cas_paybill";//付款单标识 T_CAS_PaymentBill @ApiPostMapping(value = apimenthod, desc = "付款电子回单查询接口") public CustomApiResult paybill_vouchernum(@NotNull @Valid @ApiRequestBody(value = "入参json格式数据") PayreceiptQueryModel PayreceiptQuerybill) { @@ -47,7 +46,7 @@ public class PayreceiptQueryControler { //select * from T_CAS_PaymentBill where fbillno = 'FKZJ2025030006'; 2168985504052162560 //select * from t_org_org where fid = 2116753963226241024; JSONObject json_body; - String jsonBodyString = null; + String jsonBodyString; try { // 解析入参,如果格式不正确,日志记录,并反馈esb7.4.1 json_body = (JSONObject) JSON.toJSON(PayreceiptQuerybill); @@ -64,27 +63,35 @@ public class PayreceiptQueryControler { String fkBillID = item.getFkBillID();//费控单据主表ID String fkEntryID = item.getFkEntryID();//费控单据分录ID String fkBillNumber = item.getFkBillNumber();//费控单据编号 + String voucherNum = item.getVoucherNum();//付款凭证号 + String voucherYear = item.getVoucherYear();//付款凭证会计年度 DynamicObject org = loadOrgByCompanyNum(companyNum); if (org == null) { - return handleErrorAndReturn("同步失败,费控单据编号:" + fkBillNumber + "的组织编码不存在", fkBillNumber, jsonBodyString,apiResultExt); + return handleErrorAndReturn("查询失败,费控单据编号:" + fkBillNumber + "的组织编码不存在", fkBillNumber, jsonBodyString,apiResultExt); } - QFilter q1 = new QFilter("openorg.number", QCP.equals, companyNum); + QFilter q1 = new QFilter("openorg.number", QCP.equals, companyNum);//公司编号 if (kdPayBillID != null && !kdPayBillID.isEmpty()) { - q1 = addFilterIfNotNull(q1, "id", Long.valueOf(kdPayBillID)); + q1 = addFilterIfNotNull(q1, "id", Long.valueOf(kdPayBillID));//金蝶付款单ID } - q1 = addFilterIfNotEmpty(q1, "shjh_fkbillid", fkBillID); - q1 = addFilterIfNotEmpty(q1, "shjh_fkentryid", fkEntryID); - DynamicObject paybill = BusinessDataServiceHelper.loadSingle("cas_paybill", new QFilter[]{q1}); + q1 = addFilterIfNotEmpty(q1, "shjh_fkbillid", fkBillID);//费控单据主表ID + q1 = addFilterIfNotEmpty(q1, "shjh_fkentryid", fkEntryID);//费控单据分录ID + q1 = addFilterIfNotEmpty(q1, "entry.shjh_fkdjbh", fkBillNumber);//费控单据编号-外部系统单号 + q1 = addFilterIfNotEmpty(q1, "shjh_credentialnum", voucherNum);//付款凭证号 + DynamicObject paybill = BusinessDataServiceHelper.loadSingle(paybillName, new QFilter[]{q1}); if (null == paybill) { - return handleErrorAndReturn("同步失败:付款单不存在", fkEntryID, jsonBodyString,apiResultExt); + return handleErrorAndReturn("查询失败:付款单不存在", fkEntryID, jsonBodyString,apiResultExt); } + //申明此次查询的返回值 ApiResultExt.EntryBean entryBean = new ApiResultExt.EntryBean(); - entryBean.setCompanyNum(companyNum); - entryBean.setKdPayBillID(String.valueOf(paybill.getPkValue())); - entryBean.setFkBillID(paybill.getString("shjh_fkbillid")); - entryBean.setFkEntryID(paybill.getString("shjh_fkentryid")); + entryBean.setCompanyNum(companyNum);//公司编号 + entryBean.setKdPayBillID(String.valueOf(paybill.getPkValue()));//金蝶付款单ID + entryBean.setFkBillID(paybill.getString("shjh_fkbillid"));//费控单据主表ID + entryBean.setFkEntryID(paybill.getString("shjh_fkentryid"));//费控单据分录ID + entryBean.setFkBillNumber(fkBillNumber);//费控单据编号 + entryBean.setVoucherNum(voucherNum);//付款凭证号 + entryBean.setVoucherYear(voucherYear);//付款凭证会计年度 //查询电子回单,返回pdf url //1.付款单查询明细 DynamicObjectCollection bankcheckentity = paybill.getDynamicObjectCollection("bankcheckentity");//交易明细分录 @@ -92,95 +99,65 @@ public class PayreceiptQueryControler { for (DynamicObject dynamicObject : bankcheckentity) { String edetailbillno = dynamicObject.getString("edetailbillno");//交易明细编号 QFilter qFilter = new QFilter("billno", QCP.equals, edetailbillno); - //被动付款入账 - DynamicObject beiIntelpay = BusinessDataServiceHelper.loadSingle("bei_intelpay", + //被动付款入账-交易明细 + DynamicObject beiIntelpay = BusinessDataServiceHelper.loadSingle(detailName, "id,billno,matchreceiptentry,matchreceiptentry.e_receiptid", qFilter.toArray()); if (beiIntelpay != null) { //电子回单关联信息分录 - DynamicObjectCollection matchreceiptentry = beiIntelpay.getDynamicObjectCollection("matchreceiptentry"); - if (!matchreceiptentry.isEmpty()) { - for (DynamicObject object : matchreceiptentry) { - Long eReceiptid = object.getLong("e_receiptid");//电子回单ID - QFilter qFilter1 = new QFilter("id", QCP.equals, eReceiptid); - //电子回单信息 - DynamicObject receipt = BusinessDataServiceHelper.loadSingle("bei_elecreceipt", - "id,uploadfilename", qFilter1.toArray()); - if (null != receipt) { - - String realUploadUrl = getRealUploadUrl(receipt); - String[] split = realUploadUrl.split("/"); - String fileName = split[split.length - 1]; - String desPlace = "./".concat(fileName); - OutputStream out = downloadFile(desPlace, realUploadUrl); - File ofdFile = getFile(out, realUploadUrl, desPlace); - System.out.println(""); + DynamicObjectCollection mentrys = beiIntelpay.getDynamicObjectCollection("matchreceiptentry"); + if (!mentrys.isEmpty()) { +// for (DynamicObject object : matchreceiptentry) { +// } + Long eReceiptid = mentrys.get(0).getLong("e_receiptid");//电子回单ID + //电子回单信息 + DynamicObject receipt = BusinessDataServiceHelper.loadSingle(eReceiptid,elecreceiptName,"id,fileflag,receiptno,uploadfilename"); + if (null != receipt) { + String receiptNo = receipt.getString("receiptno"); + if (receipt.getBoolean("fileflag")) { + try { + String realUploadUrl = ReceiptPrintHelper.getRealUploadUrl(receipt);//电子回单真实路径 + realUploadUrl = ReceiptPrintHelper.getFilePreviewUrl(realUploadUrl); + entryBean.setReceipturl(realUploadUrl); + logger.info("电子回单预览URL: "+realUploadUrl); +// new ViewReceiptService().getElecByReceiptno();//可获得电子回单的查看URL kd.tmc.bei.business.opservice.elec +// byte[] stream = BeiHelper.getPdfPutStream(realUploadUrl);//电子回单字节数组 +// if (stream.length <= 1) { +// logger.warn(receiptNo + "下载回单文件流为空,请检查回单文件路径值。"); +// } else { +// entryBean.setFileName(realUploadUrl.substring(realUploadUrl.lastIndexOf("/")+1)); +// entryBean.setFileData(stream); +// logger.info("电子回单文件下载成功: "+entryBean.getFileName()); +// entryBean.setErrormsg(realUploadUrl); +// String[] split = realUploadUrl.split("\\."); +// resultMap.put(receiptNo, new OpenApiFile(realUploadUrl, split[split.length - 1], true, stream)); +// } + } catch (Exception var11) { + logger.error("电子回单获取文件路径异常: " + var11.getMessage()); + return handleErrorAndReturn("查询失败:电子回单获取文件路径异常", eReceiptid+"", jsonBodyString,apiResultExt); + } + } else { + logger.warn(receiptNo + "回单为非文件类回单"); + return handleErrorAndReturn("查询失败:回单为非文件类回单", eReceiptid+"", jsonBodyString,apiResultExt); } + }else{ + return handleErrorAndReturn("查询失败:电子回单不存在", eReceiptid+"", jsonBodyString,apiResultExt); } + }else{ + return handleErrorAndReturn("查询失败:交易明细未关联电子回单", edetailbillno, jsonBodyString,apiResultExt); } + }else{ + return handleErrorAndReturn("查询失败:交易明细编号不存在", edetailbillno, jsonBodyString,apiResultExt); } } + }else{ + return handleErrorAndReturn("查询失败:付款单未关联交易明细", fkEntryID, jsonBodyString,apiResultExt); } - - entryBean.setReceipturl("https://fm-test.jahwa.com.cn/ierp/?formId=home_page"); entryBeans.add(entryBean); } return handleSuccessAndReturn(apiResultExt, entryBeans); } - - /** - * 获取文件真实路径 - */ - public static String getRealUploadUrl(DynamicObject receipt) { - String uploadFilName = receipt.getString("uploadfilename"); - String realPath = ""; - if (StringUtils.isNotEmpty(uploadFilName)) { - realPath = uploadFilName; - if (!uploadFilName.contains(".") && !uploadFilName.contains("/")) { - //不是以路径结尾的, 作为查询条件去查实际路径 - try { - FileService attachmentFileService = FileServiceFactory.getAttachmentFileService(); - realPath = attachmentFileService.getFileServiceExt().getRealPath(uploadFilName); - }catch (Exception e) { - log.error("获取文件真实路径失败" + ExceptionUtils.getExceptionStackTraceMessage(e)); - } - } - } - return realPath; - } - - public static OutputStream downloadFile(String desPlace, String realUploadUrl) { - OutputStream out = null; - try { - FileService fs = FileServiceFactory.getAttachmentFileService(); - String userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"; - try { - out = new FileOutputStream(desPlace); - } catch (FileNotFoundException e) { - log.error("根据目标路径创建文件输出流出错 {}", e.getMessage()); - } - fs.download(realUploadUrl, out, userAgent); - } catch (Exception e) { - log.error("执行download下载操作出错 {}", e.getMessage()); - } - return out; - } - - public static File getFile(OutputStream outStream, String relativeUrl, String targetPdfRoute){ - FileService fileService = FileServiceFactory.getAttachmentFileService(); - try (InputStream inputStream = fileService.getInputStream(relativeUrl)){ - byte[] buffer = new byte[inputStream.available()]; - inputStream.read(buffer); - File targetFile = new File(targetPdfRoute); - outStream.write(buffer); - return targetFile; - }catch (Exception e) { - log.error("从容器获取电子回单pdf失败 {}", e.getMessage()); - return null; - } - } - - private static QFilter addFilterIfNotNull(QFilter baseFilter, String field, Long value) { + private QFilter addFilterIfNotNull(QFilter baseFilter, String field, Long value) { if (value != null) { QFilter newFilter = new QFilter(field, QCP.equals, value); return baseFilter.and(newFilter); @@ -188,7 +165,7 @@ public class PayreceiptQueryControler { return baseFilter; } - private static QFilter addFilterIfNotEmpty(QFilter baseFilter, String field, String value) { + private QFilter addFilterIfNotEmpty(QFilter baseFilter, String field, String value) { if (value != null && !value.isEmpty()) { QFilter newFilter = new QFilter(field, QCP.equals, value); return baseFilter.and(newFilter); @@ -204,7 +181,7 @@ public class PayreceiptQueryControler { * @param jsonBodyString 入参JSON字符串 * @return 失败的CustomApiResult对象 */ - public static CustomApiResult handleErrorAndReturn(String errorMessage, String fkBillNum, String jsonBodyString,ApiResultExt apiResultExt) { + public CustomApiResult handleErrorAndReturn(String errorMessage, String fkBillNum, String jsonBodyString,ApiResultExt apiResultExt) { handleError(errorMessage, fkBillNum, jsonBodyString); apiResultExt.setErrorCode("400"); apiResultExt.setStatus(false); @@ -217,7 +194,7 @@ public class PayreceiptQueryControler { * 处理成功并返回结果 * @return 成功的CustomApiResult对象 */ - public static CustomApiResult handleSuccessAndReturn(ApiResultExt apiResultExt, List entryBeans) { + public CustomApiResult handleSuccessAndReturn(ApiResultExt apiResultExt, List entryBeans) { apiResultExt.setErrorCode("0"); apiResultExt.setStatus(true); apiResultExt.setData(entryBeans); @@ -232,8 +209,8 @@ public class PayreceiptQueryControler { * @param fkBillNum 费控单据编号 * @param jsonBodyString 入参JSON字符串 */ - public static void handleError(String errorMessage, String fkBillNum, String jsonBodyString) { - log.error(errorMessage); + public void handleError(String errorMessage, String fkBillNum, String jsonBodyString) { + logger.error(errorMessage); // 可以添加更多的错误处理逻辑,如记录到数据库等 JhzjUtils.saveLog(fkBillNum, Apimenthod, jsonBodyString, errorMessage, false, "API"); } diff --git a/main/java/shjh/jhzj7/fi/fi/webapi/model/ApiResultExt.java b/main/java/shjh/jhzj7/fi/fi/webapi/model/ApiResultExt.java index 062dec5..ba87efb 100644 --- a/main/java/shjh/jhzj7/fi/fi/webapi/model/ApiResultExt.java +++ b/main/java/shjh/jhzj7/fi/fi/webapi/model/ApiResultExt.java @@ -30,7 +30,13 @@ public class ApiResultExt implements Serializable { private String fkBillID; @ApiParam("费控单据分录ID") private String fkEntryID; - @ApiParam("电子回单的URL,有可能为空") + @ApiParam("费控单据编号") + private String fkBillNumber; + @ApiParam("付款凭证号") + private String voucherNum; + @ApiParam("付款凭证会计年度") + private String voucherYear; + @ApiParam("电子回单的预览URL,有可能为空") private String receipturl; public String getCompanyNum() { @@ -65,6 +71,22 @@ public class ApiResultExt implements Serializable { this.fkEntryID = fkEntryID; } + public String getVoucherNum() { + return voucherNum; + } + + public void setVoucherNum(String voucherNum) { + this.voucherNum = voucherNum; + } + + public String getVoucherYear() { + return voucherYear; + } + + public void setVoucherYear(String voucherYear) { + this.voucherYear = voucherYear; + } + public String getReceipturl() { return receipturl; } @@ -72,6 +94,15 @@ public class ApiResultExt implements Serializable { public void setReceipturl(String receipturl) { this.receipturl = receipturl; } + + public String getFkBillNumber() { + return fkBillNumber; + } + + public void setFkBillNumber(String fkBillNumber) { + this.fkBillNumber = fkBillNumber; + } + } public Boolean getStatus() { diff --git a/main/java/shjh/jhzj7/fi/fi/webapi/model/PayreceiptQueryModel.java b/main/java/shjh/jhzj7/fi/fi/webapi/model/PayreceiptQueryModel.java index eee7f1d..84832b3 100644 --- a/main/java/shjh/jhzj7/fi/fi/webapi/model/PayreceiptQueryModel.java +++ b/main/java/shjh/jhzj7/fi/fi/webapi/model/PayreceiptQueryModel.java @@ -25,6 +25,26 @@ public class PayreceiptQueryModel implements Serializable{ private String fkEntryID; @ApiParam(value = "费控单据编号", required = false, position = 5) private String fkBillNumber; + @ApiParam(value = "付款凭证号", required = false, position = 6) + private String voucherNum; + @ApiParam(value = "付款凭证会计年度", required = false, position = 7) + private String voucherYear; + + public String getVoucherNum() { + return voucherNum; + } + + public void setVoucherNum(String voucherNum) { + this.voucherNum = voucherNum; + } + + public String getVoucherYear() { + return voucherYear; + } + + public void setVoucherYear(String voucherYear) { + this.voucherYear = voucherYear; + } public String getCompanyNum() { return companyNum;