From 6bf6c764c084dca4f175488b7d9532e9420768be Mon Sep 17 00:00:00 2001 From: yuxueliang0813 <407010292@qq.com> Date: Tue, 11 Mar 2025 14:22:59 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E6=8E=A5=E5=8F=A3=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repc/task/DobeContractAttachmentTask.java | 5 +- .../shkd/repc/task/DobeDWprojectTask.java | 20 +++--- main/java/shkd/utils/AttachmentFileUtil.java | 63 +++++++++++++++++++ 3 files changed, 74 insertions(+), 14 deletions(-) diff --git a/main/java/shkd/repc/task/DobeContractAttachmentTask.java b/main/java/shkd/repc/task/DobeContractAttachmentTask.java index cdc62f8..1bf7208 100644 --- a/main/java/shkd/repc/task/DobeContractAttachmentTask.java +++ b/main/java/shkd/repc/task/DobeContractAttachmentTask.java @@ -5,13 +5,11 @@ import kd.bos.context.RequestContext; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.db.DB; import kd.bos.db.DBRoute; -import kd.bos.entity.MainEntityType; import kd.bos.exception.KDException; import kd.bos.logging.Log; import kd.bos.logging.LogFactory; import kd.bos.orm.query.QFilter; import kd.bos.schedule.executor.AbstractTask; -import kd.bos.servicehelper.AttachmentServiceHelper; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.MetadataServiceHelper; import kd.bos.util.HttpClientUtils; @@ -46,7 +44,7 @@ public class DobeContractAttachmentTask extends AbstractTask implements Plugin { DynamicObject contractinfo; //先查出合同有附件oa id但是在金蝶中没有附件的记录 QFilter oaidFtr = QFilter.isNotNull("qeug_fjoaid");//合同的附件OAID不为空 - QFilter nofjFtr = new QFilter("qeug_nofj","=","1");//合同未上传附件的标记为true + QFilter nofjFtr = new QFilter("qeug_nofj","=","1");//合同未上传OA附件的标记为true String selectStr = "id,billno,qeug_fjoaid,qeug_fjzwid,qeug_nofj"; DynamicObject[] cons = BusinessDataServiceHelper.load(entityName,selectStr,new QFilter[]{oaidFtr.and(nofjFtr)}); if(cons.length == 0){ @@ -98,7 +96,6 @@ public class DobeContractAttachmentTask extends AbstractTask implements Plugin { DobeDWUtils.saveLog(contractno,"致远附件",requrl,e.getMessage(), false,"调用OA附件接口"); throw new RuntimeException(e); } - //访问NAS文件指定存放路径,拿到当前附件和正文目录下的所有文件对象,记录日志 //在nas路径里,需要供应链系统在/isc/prod/{code}/下继续组装相对地址: // /isc/prod/{code}/{summaryId}/下文件夹内为表单附件,/isc/prod/{code}/{subReference}/为合同正文附件 diff --git a/main/java/shkd/repc/task/DobeDWprojectTask.java b/main/java/shkd/repc/task/DobeDWprojectTask.java index ab1e37b..4966457 100644 --- a/main/java/shkd/repc/task/DobeDWprojectTask.java +++ b/main/java/shkd/repc/task/DobeDWprojectTask.java @@ -172,11 +172,11 @@ public class DobeDWprojectTask extends AbstractTask implements Plugin { if(projectinfo.getDynamicObject("account") == null){ projectinfo.set("account", accttableid);//会计科目表默认新准则会计科目表 } - //TODO 数仓新增两个面积字段 20250221 -// projectinfo.set("qeug_decimalfield1", json_body.getBigDecimal("addr"));//原始可出租面积 -// projectinfo.set("qeug_decimalfield3", json_body.getBigDecimal("addr"));//原始建筑面积 -// projectinfo.set("qeug_textfield2", calcDFL(json_body.getBigDecimal("addr"), -// json_body.getBigDecimal("addr")).toString());//原始得房率=可出租/建筑面积*100% + //数仓新增两个面积字段 20250221 + projectinfo.set("qeug_decimalfield1", json_body.getBigDecimal("rentale_area"));//原始可出租面积 + projectinfo.set("qeug_decimalfield3", json_body.getBigDecimal("building_area"));//原始建筑面积 + projectinfo.set("qeug_textfield2", calcDFL(json_body.getBigDecimal("rentale_area"), + json_body.getBigDecimal("building_area")).toString());//原始得房率=可出租/建筑面积*100% projectinfo.set("qeug_textfield1", json_body.getString("project_oriname"));//项目原名称 projectinfo.set("manageway", getManageway(json_body.getString("investment_model")));//投资模式 projectinfo.set("landusage", getLandusage(json_body.getString("land_usage")));//用地性质 @@ -226,11 +226,11 @@ public class DobeDWprojectTask extends AbstractTask implements Plugin { projectinfo.set("qeug_combofield", "CSYQ"); } projectinfo.set("qeug_ywlx", ywlx); - //TODO 数仓新增两个面积字段 20250221 -// projectinfo.set("qeug_decimalfield1", json_body.getBigDecimal("addr"));//原始可出租面积 -// projectinfo.set("qeug_decimalfield3", json_body.getBigDecimal("addr"));//原始建筑面积 -// projectinfo.set("qeug_textfield2", calcDFL(json_body.getBigDecimal("addr"), -// json_body.getBigDecimal("addr")).toString());//原始得房率=可出租/建筑面积*100% + //数仓新增两个面积字段 20250221 + projectinfo.set("qeug_decimalfield1", json_body.getBigDecimal("rentale_area"));//原始可出租面积 + projectinfo.set("qeug_decimalfield3", json_body.getBigDecimal("building_area"));//原始建筑面积 + projectinfo.set("qeug_textfield2", calcDFL(json_body.getBigDecimal("rentale_area"), + json_body.getBigDecimal("building_area")).toString());//原始得房率=可出租/建筑面积*100% projectinfo.set("qeug_textfield1", json_body.getString("project_oriname"));//项目原名称 projectinfo.set("manageway", getManageway(json_body.getString("investment_model")));//投资模式 projectinfo.set("landusage", getLandusage(json_body.getString("land_usage")));//用地性质 diff --git a/main/java/shkd/utils/AttachmentFileUtil.java b/main/java/shkd/utils/AttachmentFileUtil.java index 1b9a91f..2aa2986 100644 --- a/main/java/shkd/utils/AttachmentFileUtil.java +++ b/main/java/shkd/utils/AttachmentFileUtil.java @@ -163,4 +163,67 @@ public class AttachmentFileUtil { } return true; } + + /**将第三方提供的某个在线文件上传至星瀚对应单据附件上 + * @param entity 目标单据实体标识 + * @param pk 目标数据id + * @param fileUrl 待存入文件的url + * @param fileName 待存入文件名称 + * @param fileSize 待存入文件大小 + * @param attachKey 附件面板标识 + * @throws IOException + */ + public static boolean saveUrlFile2Attch(String entity,Object pk,String fileUrl,String fileName,String fileSize,String attachKey) throws IOException{ + List> attachments = new ArrayList<>(); + Map attachItem = new HashMap<>(); + //文件名称 + attachItem.put("name", fileName); + //将url文件转换成输入流 + InputStream inputStream = null; + HttpURLConnection conn = null; + String tempUrl = null; + try { + URL url = new URL(fileUrl); + conn = (HttpURLConnection)url.openConnection(); + //设置超时间为30秒 + conn.setConnectTimeout(30000); + //防止屏蔽程序抓取而返回403错误 + conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); + //得到输入流 + inputStream = conn.getInputStream(); + //文件大小 + attachItem.put("size", fileSize); + //获取临时文件缓存 + TempFileCache cache = CacheFactory.getCommonCacheFactory().getTempFileCache(); + //将文件流存入临时文件缓存(拷贝完成)(最后一个参数为缓存有效期,600秒) + tempUrl = cache.saveAsFullUrl(fileName, inputStream, 600); + + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(e); + } finally { + //关闭流 + try { + inputStream.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + //关闭连接 + conn.disconnect(); + } + //修改时间 + attachItem.put("lastModified",System.currentTimeMillis()); + //获取appId + MainEntityType dataEntityType = MetadataServiceHelper.getDataEntityType(entity); + String appId = dataEntityType.getAppId(); + //将文件缓存中的附件文件上传到正式文件服务器 + String actUrl = AttachmentServiceHelper.saveTempToFileService(tempUrl,appId,entity,pk,fileName); + //将新文件的物理路径存入map + attachItem.put("url", actUrl); + attachments.add(attachItem); + //维护单据和附件的关系(非文件上传) + AttachmentServiceHelper.upload(entity, pk, attachKey, attachments); + return true; + } + }