package com.kingdee.eas.custom.esign.handler; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.kingdee.bos.BOSException; import com.kingdee.bos.Context; import com.kingdee.bos.dao.ormapping.ObjectUuidPK; import com.kingdee.bos.metadata.entity.*; import com.kingdee.bos.util.BOSUuid; import com.kingdee.eas.base.attachment.*; import com.kingdee.eas.base.attachment.common.AttachmentHelper; import com.kingdee.eas.basedata.person.PersonInfo; import com.kingdee.eas.common.EASBizException; import com.kingdee.eas.custom.esign.ESignGlobalStatusOverviewFactory; import com.kingdee.eas.custom.esign.ESignGlobalStatusOverviewInfo; import com.kingdee.eas.custom.esign.IESignGlobalStatusOverview; import com.kingdee.eas.custom.esign.bizEnum.EsignStatusEnum; import com.kingdee.eas.custom.esign.tsign.hz.comm.EsignHttpResponse; import com.kingdee.eas.custom.esign.tsign.hz.exception.EsignException; import com.kingdee.eas.custom.esign.util.DownloaderUtil; import com.kingdee.eas.custom.esign.util.EsignHttpUtil; import com.kingdee.eas.custom.esign.util.SyncSignedFilesUtil; import com.kingdee.eas.hr.base.app.util.SHRBizBillAttachmentReverseUtils; import com.kingdee.shr.attachment.*; import com.kingdee.shr.attachment.AttachmentTypeEnum; import com.kingdee.shr.base.syssetting.api.bean.BatchMessageTipsBody; import com.kingdee.shr.base.syssetting.api.bean.BatchMessageTipsHeader; import com.kingdee.shr.base.syssetting.context.SHRContext; import com.kingdee.shr.base.syssetting.exception.SHRWebException; import com.kingdee.shr.base.syssetting.exception.ShrWebBizException; import com.kingdee.shr.base.syssetting.ml.SHRWebResource; import com.kingdee.shr.base.syssetting.web.handler.ListHandler; import com.kingdee.shr.ml.util.MutilanUtils; import com.kingdee.util.LocaleUtils; import com.kingdee.util.STConverter; import org.apache.commons.lang3.StringUtils; import org.springframework.ui.ModelMap; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.text.MessageFormat; import java.util.Locale; import java.util.Map; import java.util.Set; /** * description: ESignGlobalStatusOverviewHandler
* date: 21/11/2025 下午 4:19
* author: lhbj
* version: 1.0
*/ public class ESignGlobalStatusOverviewListHandler extends ListHandler { public Context getCtx() { return SHRContext.getInstance().getContext(); } /** * 基于文件发起签署 * * @param request * @param response * @param modelMap * @return * @throws SHRWebException */ public String create_by_fileAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException { BatchMessageTipsHeader batchMessageTipsHeader = new BatchMessageTipsHeader(); String billId = this.getBillId(request); int failure = 0; int success = 0; try { if (billId.indexOf(",") >= 0) { throw new EsignException("请选择一行记录发起签署"); } IESignGlobalStatusOverview globalStatusOverview = ESignGlobalStatusOverviewFactory.getLocalInstance(this.getCtx()); SelectorItemCollection selectorItemCollection = new SelectorItemCollection(); selectorItemCollection.add(new SelectorItemInfo("*")); selectorItemCollection.add(new SelectorItemInfo("person.id")); selectorItemCollection.add(new SelectorItemInfo("operator.id")); ESignGlobalStatusOverviewInfo info = globalStatusOverview.getESignGlobalStatusOverviewInfo(new ObjectUuidPK(billId)); PersonInfo person = info.getPerson(); PersonInfo operator = info.getOperator(); String personId = null; if (null != person && null != person.getId()) { personId = person.getId().toString(); } String operatorId = null; if (null != operator && null != operator.getId()) { operatorId = operator.getId().toString(); } if (StringUtils.isNotBlank(info.getSignFlowId())) { BatchMessageTipsBody body = new BatchMessageTipsBody(); body.setMuitTipsState(Boolean.FALSE); body.setMuitTipsMessage("已经发起签署了,不能重复发起"); body.setId(billId); batchMessageTipsHeader.addResult(body); } else { EsignHttpResponse httpRes = EsignHttpUtil.create_by_file(this.getCtx(), personId, info.getFileName(), operatorId, info.getEfileId(), EsignStatusEnum.SIGNING, info.getRequestParams()); if (httpRes.getStatus() >= 200 && httpRes.getStatus() < 300) { JSONObject object = JSON.parseObject(httpRes.getBody()); if ("0".equals(String.valueOf(object.get("code")))) { BatchMessageTipsBody body = new BatchMessageTipsBody(); body.setMuitTipsState(Boolean.TRUE); body.setMuitTipsMessage(httpRes.getBody()); body.setId(billId); batchMessageTipsHeader.addResult(body); success++; } else { BatchMessageTipsBody body = new BatchMessageTipsBody(); body.setMuitTipsState(Boolean.FALSE); body.setMuitTipsMessage(httpRes.getBody()); body.setId(billId); batchMessageTipsHeader.addResult(body); } } else { BatchMessageTipsBody body = new BatchMessageTipsBody(); body.setMuitTipsState(Boolean.FALSE); body.setMuitTipsMessage(httpRes.getBody()); body.setId(billId); batchMessageTipsHeader.addResult(body); } } } catch (EsignException e) { e.printStackTrace(); throw new ShrWebBizException(e); } catch (Exception e) { e.printStackTrace(); throw new ShrWebBizException(e); } batchMessageTipsHeader.setBillId(billId); batchMessageTipsHeader.setFailureCount((success <= 0 ? 1 : 0)); batchMessageTipsHeader.setSuccessCount(success); this.writeSuccessData(batchMessageTipsHeader); return null; } /** * 撤销签署流程 * * @param request * @param response * @param modelMap * @return * @throws SHRWebException */ public String revoke_by_fileAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException { BatchMessageTipsHeader batchMessageTipsHeader = new BatchMessageTipsHeader(); String billId = this.getBillId(request); String revokeReason = request.getParameter("revokeReason"); int failure = 0; int success = 0; try { if (billId.indexOf(",") >= 0) { throw new EsignException("请选择一行记录发起签署"); } IESignGlobalStatusOverview globalStatusOverview = ESignGlobalStatusOverviewFactory.getLocalInstance(this.getCtx()); SelectorItemCollection selectorItemCollection = new SelectorItemCollection(); selectorItemCollection.add(new SelectorItemInfo("*")); selectorItemCollection.add(new SelectorItemInfo("person.id")); selectorItemCollection.add(new SelectorItemInfo("operator.id")); ESignGlobalStatusOverviewInfo info = globalStatusOverview.getESignGlobalStatusOverviewInfo(new ObjectUuidPK(billId)); PersonInfo person = info.getPerson(); PersonInfo operator = info.getOperator(); String personId = null; if (null != person && null != person.getId()) { personId = person.getId().toString(); } String operatorId = null; if (null != operator && null != operator.getId()) { operatorId = operator.getId().toString(); } if (StringUtils.isBlank(info.getSignFlowId())) { throw new EsignException("没有签署流程id"); } EsignHttpResponse httpRes = EsignHttpUtil.revoke_by_file(this.getCtx(), info.getSignFlowId(), revokeReason, info.getEfileId()); if (httpRes.getStatus() >= 200 && httpRes.getStatus() < 300) { JSONObject object = JSON.parseObject(httpRes.getBody()); if ("0".equals(String.valueOf(object.get("code")))) { BatchMessageTipsBody body = new BatchMessageTipsBody(); body.setMuitTipsState(Boolean.TRUE); body.setMuitTipsMessage(httpRes.getBody()); body.setId(billId); batchMessageTipsHeader.addResult(body); success++; } else { BatchMessageTipsBody body = new BatchMessageTipsBody(); body.setMuitTipsState(Boolean.FALSE); body.setMuitTipsMessage(httpRes.getBody()); body.setId(billId); batchMessageTipsHeader.addResult(body); } } else { BatchMessageTipsBody body = new BatchMessageTipsBody(); body.setMuitTipsState(Boolean.FALSE); body.setMuitTipsMessage(httpRes.getBody()); body.setId(billId); batchMessageTipsHeader.addResult(body); } } catch (EsignException e) { e.printStackTrace(); throw new ShrWebBizException(e); } catch (Exception e) { e.printStackTrace(); throw new ShrWebBizException(e); } batchMessageTipsHeader.setBillId(billId); batchMessageTipsHeader.setFailureCount((success <= 0 ? 1 : 0)); batchMessageTipsHeader.setSuccessCount(success); this.writeSuccessData(batchMessageTipsHeader); return null; } /** * 催签流程中签署人 * * @param request * @param response * @param modelMap * @return * @throws SHRWebException */ public String urge_by_fileAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException { BatchMessageTipsHeader batchMessageTipsHeader = new BatchMessageTipsHeader(); String billId = this.getBillId(request); int failure = 0; int success = 0; try { if (billId.indexOf(",") >= 0) { throw new EsignException("请选择一行记录发起签署"); } IESignGlobalStatusOverview globalStatusOverview = ESignGlobalStatusOverviewFactory.getLocalInstance(this.getCtx()); SelectorItemCollection selectorItemCollection = new SelectorItemCollection(); selectorItemCollection.add(new SelectorItemInfo("*")); selectorItemCollection.add(new SelectorItemInfo("person.id")); selectorItemCollection.add(new SelectorItemInfo("operator.id")); ESignGlobalStatusOverviewInfo info = globalStatusOverview.getESignGlobalStatusOverviewInfo(new ObjectUuidPK(billId)); PersonInfo person = info.getPerson(); PersonInfo operator = info.getOperator(); String personId = null; if (null != person && null != person.getId()) { personId = person.getId().toString(); } String operatorId = null; if (null != operator && null != operator.getId()) { operatorId = operator.getId().toString(); } if (StringUtils.isBlank(info.getSignFlowId())) { throw new EsignException("没有签署流程id"); } String json = info.getRequestParams(); JSONObject params = JSON.parseObject(json); Map jsonMap = Maps.newHashMap(); Set noticeSet = Sets.newHashSet(); JSONArray jsonArray = params.getJSONArray("signers"); for (int i = 0; i < jsonArray.size(); i++) { JSONObject param = jsonArray.getJSONObject(i); JSONObject noticeConfig = param.getJSONObject("noticeConfig"); if (null != noticeConfig) { String noticeTypeStr = noticeConfig.getString("noticeTypes"); if (StringUtils.isNotBlank(noticeTypeStr)) { String[] noticeTypes = noticeTypeStr.split(","); for (String nts : noticeTypes) { noticeSet.add(nts); } } } } jsonMap.put("noticeTypes", StringUtils.join(noticeSet.toArray(), ",")); EsignHttpResponse httpRes = EsignHttpUtil.urge_by_file(this.getCtx(), info.getSignFlowId(), JSON.toJSONString(jsonMap), info.getEfileId()); if (httpRes.getStatus() >= 200 && httpRes.getStatus() < 300) { JSONObject object = JSON.parseObject(httpRes.getBody()); if ("0".equals(String.valueOf(object.get("code")))) { BatchMessageTipsBody body = new BatchMessageTipsBody(); body.setMuitTipsState(Boolean.TRUE); body.setMuitTipsMessage(httpRes.getBody()); body.setId(billId); batchMessageTipsHeader.addResult(body); success++; } else { BatchMessageTipsBody body = new BatchMessageTipsBody(); body.setMuitTipsState(Boolean.FALSE); body.setMuitTipsMessage(httpRes.getBody()); body.setId(billId); batchMessageTipsHeader.addResult(body); } } else { BatchMessageTipsBody body = new BatchMessageTipsBody(); body.setMuitTipsState(Boolean.FALSE); body.setMuitTipsMessage(httpRes.getBody()); body.setId(billId); batchMessageTipsHeader.addResult(body); } } catch (EsignException e) { e.printStackTrace(); throw new ShrWebBizException(e); } catch (Exception e) { e.printStackTrace(); throw new ShrWebBizException(e); } batchMessageTipsHeader.setBillId(billId); batchMessageTipsHeader.setFailureCount((success <= 0 ? 1 : 0)); batchMessageTipsHeader.setSuccessCount(success); this.writeSuccessData(batchMessageTipsHeader); return null; } /** * 预览附件 * @param request * @param response * @param modelMap * @return * @throws SHRWebException */ public String previewAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException { BatchMessageTipsHeader batchMessageTipsHeader = new BatchMessageTipsHeader(); String billId = this.getBillId(request); String update = request.getParameter("upd"); int failure = 0; int success = 0; try { if (billId.indexOf(",") >= 0) { throw new EsignException("请选择一行记录发起签署"); } ISHRAttachmentExt SHRAttchExt = SHRAttachmentExtFactory.getLocalInstance(this.getCtx()); IESignGlobalStatusOverview globalStatusOverview = ESignGlobalStatusOverviewFactory.getLocalInstance(this.getCtx()); SelectorItemCollection selectorItemCollection = new SelectorItemCollection(); selectorItemCollection.add(new SelectorItemInfo("*")); selectorItemCollection.add(new SelectorItemInfo("person.id")); selectorItemCollection.add(new SelectorItemInfo("operator.id")); ESignGlobalStatusOverviewInfo info = globalStatusOverview.getESignGlobalStatusOverviewInfo(new ObjectUuidPK(billId)); if (StringUtils.isBlank(info.getSignFlowId())) { throw new EsignException("没有签署流程id"); } boolean canLive = false; //更新附件 if ("update".equals(update)) { this.delAttachment(this.getCtx(), info); canLive = true; } else if (EsignStatusEnum.COMPLETED.equals(info.getEsignStatus())) { //成功签署的附件 FilterInfo filterInfo = new FilterInfo(); filterInfo.getFilterItems().add(new FilterItemInfo("propertyName", "files")); String bunding = MessageFormat.format("{0}#{1}", EsignStatusEnum.COMPLETED_VALUE, info.getSignFlowId()); filterInfo.getFilterItems().add(new FilterItemInfo("bunding", bunding)); filterInfo.getFilterItems().add(new FilterItemInfo("boID", info.getId().toString())); boolean canCompleted = SHRAttchExt.exists(filterInfo); //没有成功签署的附件时,更新附件 if (!canCompleted) { this.delAttachment(this.getCtx(), info); canLive = true; } } else { //预览中文件会更新所以需要删除重新下载 this.delAttachment(this.getCtx(), info); canLive = true; } if (canLive) { EsignHttpResponse response1 = null; if (EsignStatusEnum.COMPLETED.equals(info.getEsignStatus())) { response1 = EsignHttpUtil.getFile_download_url(this.getCtx(), info.getSignFlowId(), 3600, info.getEfileId()); JSONObject jsonObject = JSON.parseObject(response1.getBody()); Integer code = (Integer) jsonObject.get("code"); if (code == 0) { JSONObject jsonData = jsonObject.getJSONObject("data"); JSONArray files = jsonData.getJSONArray("files"); for (int i = 0; i < files.size(); i++) { JSONObject fileMap = files.getJSONObject(i); this.saveAttachment(this.getCtx(), info, fileMap, "com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview.list", "files"); } JSONArray attachments = jsonData.getJSONArray("attachments"); for (int i = 0; i < attachments.size(); i++) { JSONObject fileMap = attachments.getJSONObject(i); this.saveAttachment(this.getCtx(), info, fileMap, "com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview.list", "attachments"); } } } else { String json = info.getRequestParams(); JSONObject params = JSON.parseObject(json); JSONArray docs = params.getJSONArray("docs"); for (int i = 0; i < docs.size(); i++) { JSONObject doc = docs.getJSONObject(i); String fileId = doc.getString("fileId"); response1 = EsignHttpUtil.getPreview_file_download_url(this.getCtx(), info.getSignFlowId(),fileId, info.getEfileId()); JSONObject jsonObject = JSON.parseObject(response1.getBody()); Integer code = (Integer) jsonObject.get("code"); if (code == 0) { JSONObject fileMap = jsonObject.getJSONObject("data"); this.saveAttachment(this.getCtx(), info, fileMap, "com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview.list", "files"); } } } } BatchMessageTipsBody body = new BatchMessageTipsBody(); body.setMuitTipsState(Boolean.TRUE); body.setMuitTipsMessage("成功"); body.setId(billId); batchMessageTipsHeader.addResult(body); success++; } catch (EsignException e) { e.printStackTrace(); throw new ShrWebBizException(e); } catch (Exception e) { e.printStackTrace(); throw new ShrWebBizException(e); } batchMessageTipsHeader.setBillId(billId); batchMessageTipsHeader.setFailureCount((success <= 0 ? 1 : 0)); batchMessageTipsHeader.setSuccessCount(success); this.writeSuccessData(batchMessageTipsHeader); return null; } /** * 同步签署状态信息 * @param request * @param response * @param modelMap * @return * @throws SHRWebException */ public String detail_sign_fieldsAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException { BatchMessageTipsHeader batchMessageTipsHeader = new BatchMessageTipsHeader(); String billId = this.getBillId(request); int failure = 0; int success = 0; try { if (billId.indexOf(",") >= 0) { throw new EsignException("请选择一行记录发起签署"); } IESignGlobalStatusOverview globalStatusOverview = ESignGlobalStatusOverviewFactory.getLocalInstance(this.getCtx()); SelectorItemCollection selectorItemCollection = new SelectorItemCollection(); selectorItemCollection.add(new SelectorItemInfo("*")); selectorItemCollection.add(new SelectorItemInfo("person.id")); selectorItemCollection.add(new SelectorItemInfo("operator.id")); ESignGlobalStatusOverviewInfo info = globalStatusOverview.getESignGlobalStatusOverviewInfo(new ObjectUuidPK(billId)); if (null!=info&&StringUtils.isBlank(info.getSignFlowId())) { throw new EsignException("没有签署流程id"); } EsignHttpResponse res = EsignHttpUtil.getSign_fields(this.getCtx(),info.getSignFlowId(),info.getEfileId()); if (res.getStatus() >= 200 && res.getStatus() < 300) { JSONObject jsonObject = JSON.parseObject(res.getBody()); Integer code = (Integer) jsonObject.get("code"); if (code == 0) { JSONObject jsonData = jsonObject.getJSONObject("data"); String signFlowStatus = jsonData.getString("signFlowStatus"); String signFlowId = jsonData.getString("signFlowId"); String statusDescription = jsonData.getString("statusDescription"); info.setEsignStatus(EsignStatusEnum.getEnum(Integer.parseInt(signFlowStatus))); info.setDescription(statusDescription); SelectorItemCollection selectorUpdatePartial = new SelectorItemCollection(); selectorUpdatePartial.add(new SelectorItemInfo("esignStatus")); selectorUpdatePartial.add(new SelectorItemInfo("description")); globalStatusOverview.updatePartial(info,selectorUpdatePartial); } } BatchMessageTipsBody body = new BatchMessageTipsBody(); body.setMuitTipsState(Boolean.TRUE); body.setMuitTipsMessage("同步状态成功"); body.setId(billId); batchMessageTipsHeader.addResult(body); success++; } catch (EsignException e) { e.printStackTrace(); throw new ShrWebBizException(e); } catch (Exception e) { e.printStackTrace(); throw new ShrWebBizException(e); } batchMessageTipsHeader.setBillId(billId); batchMessageTipsHeader.setFailureCount((success <= 0 ? 1 : 0)); batchMessageTipsHeader.setSuccessCount(success); this.writeSuccessData(batchMessageTipsHeader); return null; } /** * 同步签署完成附件 * @param request * @param response * @param modelMap * @return * @throws SHRWebException */ public String syncAttachmentsAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException { BatchMessageTipsHeader batchMessageTipsHeader = new BatchMessageTipsHeader(); String billId = this.getBillId(request); int failure = 0; int success = 0; try { if (billId.indexOf(",") >= 0) { throw new EsignException("请选择一行记录发起签署"); } IESignGlobalStatusOverview globalStatusOverview = ESignGlobalStatusOverviewFactory.getLocalInstance(this.getCtx()); SelectorItemCollection selectorItemCollection = new SelectorItemCollection(); selectorItemCollection.add(new SelectorItemInfo("*")); selectorItemCollection.add(new SelectorItemInfo("person.id")); selectorItemCollection.add(new SelectorItemInfo("operator.id")); ESignGlobalStatusOverviewInfo info = globalStatusOverview.getESignGlobalStatusOverviewInfo(new ObjectUuidPK(billId)); if (StringUtils.isBlank(info.getSignFlowId())) { throw new EsignException("没有签署流程id"); } // if (!info.isFivouchered()) { // throw new EsignException("电子签全域状态总览表 [{0}],签署文件已经同步,请勿重复同步"); // } SyncSignedFilesUtil.syncAttachmentsForEmpPage(this.getCtx(),billId); BatchMessageTipsBody body = new BatchMessageTipsBody(); body.setMuitTipsState(Boolean.TRUE); body.setMuitTipsMessage("触发同步成功"); body.setId(billId); batchMessageTipsHeader.addResult(body); success++; } catch (EsignException e) { e.printStackTrace(); throw new ShrWebBizException(e); } catch (Exception e) { e.printStackTrace(); throw new ShrWebBizException(e); } batchMessageTipsHeader.setBillId(billId); batchMessageTipsHeader.setFailureCount((success <= 0 ? 1 : 0)); batchMessageTipsHeader.setSuccessCount(success); this.writeSuccessData(batchMessageTipsHeader); return null; } private void delAttachment(Context ctx, ESignGlobalStatusOverviewInfo info) throws BOSException, EASBizException { ISHRAttachmentExt SHRAttchExt = SHRAttachmentExtFactory.getLocalInstance(ctx); IAttachment attachment = AttachmentFactory.getLocalInstance(ctx); IBoAttchAsso attchAsso = BoAttchAssoFactory.getLocalInstance(ctx); EntityViewInfo entityViewInfo = new EntityViewInfo(); FilterInfo filterInfo2 = new FilterInfo(); filterInfo2.getFilterItems().add(new FilterItemInfo("boID", info.getId().toString())); entityViewInfo.setFilter(filterInfo2); SHRAttachmentExtCollection collection = SHRAttchExt.getSHRAttachmentExtCollection(entityViewInfo); for (int i = 0; i < collection.size(); i++) { String attId = collection.get(i).getAttachment().getId().toString(); attchAsso.delete(MessageFormat.format(" where attachment = ''{0}''", attId)); attachment.delete(new ObjectUuidPK(attId)); } SHRAttchExt.delete(filterInfo2); } /** * 保存附件 * * @param ctx * @param info * @param fileMap * @param uipk * @param propertyName * @throws IOException * @throws ShrWebBizException * @throws BOSException * @throws EASBizException */ private void saveAttachment(Context ctx, ESignGlobalStatusOverviewInfo info, JSONObject fileMap, String uipk, String propertyName) throws IOException, ShrWebBizException, BOSException, EASBizException { String fileId = fileMap.getString("fileId"); String fileName = fileMap.getString("fileName"); System.out.println("saveAttachment:fileMap"+fileMap); if(StringUtils.isBlank(fileName)) { fileName = info.getFileName()+".pdf"; } String downloadUrl = fileMap.getString("downloadUrl"); if(StringUtils.isBlank(downloadUrl)) { downloadUrl = fileMap.getString("fileDownloadUrl"); } IAttachment attachment = AttachmentFactory.getLocalInstance(ctx); IBoAttchAsso attchAsso = BoAttchAssoFactory.getLocalInstance(ctx); ISHRAttachmentExt SHRAttchExt = SHRAttachmentExtFactory.getLocalInstance(ctx); byte[] content = DownloaderUtil.downloadFileToByteArray(downloadUrl); fileName = this.checkScriptAttack(fileName); if( fileName.lastIndexOf(46)<=0) { fileName +=".pdf"; } String mainname = fileName.substring(0, fileName.lastIndexOf(46)); String extname = fileName.substring(fileName.lastIndexOf(46) + 1, fileName.length()); extname = extname.toLowerCase(); SHRAttachmentExtInfo attchExt = new SHRAttachmentExtInfo(); AttachmentInfo ai = new AttachmentInfo(); this.setAttMulNameAndDesc(ctx, ai, mainname, fileId); ai.setSimpleName(extname); ai.setFile(content); ai.setIsShared(false); ai.setNumber(propertyName); ai.setSharedDesc(SHRWebResource.getString("com.kingdee.shr.base.syssetting.SHRSyssettingResource", "false")); int size = content.length; if (size < 1024) { ai.setSize(size + SHRWebResource.getString("com.kingdee.shr.base.syssetting.SHRSyssettingResource", "byte")); } else { ai.setSize(size / 1024 + "KB"); } ai.setSizeInByte(size); ai.setAttachID("" + System.currentTimeMillis()); ai.setType(this.getFileType(fileName)); ai.setBeizhu(uipk); attchExt.setAttachment(ai); this.setAttExtMulNameAndDesc(ctx, attchExt, fileName, fileId); attchExt.setPropertyName(propertyName); attchExt.setType(AttachmentTypeEnum.PROPERTY); attchExt.setState(AttachmentState.UNSAVE); String bunding = MessageFormat.format("{0}#{1}", info.getEsignStatus().getValue(), info.getSignFlowId()); attchExt.setBunding(bunding); attchExt.setBoID(info.getId().toString()); try { attachment.addnew(ai); } catch (Exception var20) { throw new ShrWebBizException(SHRWebResource.getString("com.kingdee.shr.base.syssetting.SHRSyssettingResource", "upload_error"), var20); } attchExt.setState(AttachmentState.SAVE); BoAttchAssoInfo boAttchAssoInfo = new BoAttchAssoInfo(); boAttchAssoInfo.setBoID(info.getId().toString()); boAttchAssoInfo.setAssoBusObjType(String.valueOf(info.getBOSType())); boAttchAssoInfo.setAssoType("Added Accessories", LocaleUtils.locale_l1); boAttchAssoInfo.setAssoType("Added Accessories", LocaleUtils.locale_l2); boAttchAssoInfo.setAssoType("Added Accessories", LocaleUtils.locale_l3); boAttchAssoInfo.setAttachment(ai); attchAsso.addnew(boAttchAssoInfo); SHRAttchExt.addnew(attchExt); } private String getFileType(String fullname) { String extname = fullname.substring(fullname.lastIndexOf(46) + 1, fullname.length()); if (!"doc".equalsIgnoreCase(extname) && !"docx".equalsIgnoreCase(extname)) { if (!"xls".equalsIgnoreCase(extname) && !"xlsx".equalsIgnoreCase(extname) && !"xlsm".equalsIgnoreCase(extname) && !"xlsb".equalsIgnoreCase(extname)) { if (!"ppt".equalsIgnoreCase(extname) && !"pptx".equalsIgnoreCase(extname) && !"pptm".equalsIgnoreCase(extname)) { return "txt".equalsIgnoreCase(extname) ? SHRWebResource.getString("com.kingdee.shr.base.syssetting.SHRSyssettingResource", "text") : MessageFormat.format(SHRWebResource.getString("com.kingdee.shr.base.syssetting.SHRSyssettingResource", "unknow_type"), extname); } else { return SHRWebResource.getString("com.kingdee.shr.base.syssetting.SHRSyssettingResource", "microsoft_ppt"); } } else { return SHRWebResource.getString("com.kingdee.shr.base.syssetting.SHRSyssettingResource", "microsoft_excel"); } } else { return SHRWebResource.getString("com.kingdee.shr.base.syssetting.SHRSyssettingResource", "microsoft_word"); } } private String checkScriptAttack(String str) { if (!StringUtils.isEmpty(str)) { if (str.contains("<")) { str.replaceAll("<", "<"); } if (str.contains(">")) { str.replaceAll(">", ">"); } } return str; } private void setAttMulNameAndDesc(Context ctx, AttachmentInfo att, String name, String desc) { if (att != null && !StringUtils.isEmpty(name)) { MutilanUtils.setMultiFieldValueToBean(ctx, "name", att, name); MutilanUtils.setMultiFieldValueToBean(ctx, "description", att, desc); } } private void setAttExtMulNameAndDesc(Context ctx, SHRAttachmentExtInfo info, String name, String desc) { if (info != null && !StringUtils.isEmpty(name)) { Locale locale = ctx.getLocale(); info.setName(name, LocaleUtils.locale_l1); info.setDescription(desc, LocaleUtils.locale_l1); if (LocaleUtils.locale_l1.getDisplayName().equals(LocaleUtils.getLocaleString(locale))) { info.setName(name, LocaleUtils.locale_l2); info.setName(name, LocaleUtils.locale_l3); info.setDescription(desc, LocaleUtils.locale_l2); info.setDescription(desc, LocaleUtils.locale_l3); } else if (LocaleUtils.locale_l2.getDisplayName().equals(LocaleUtils.getLocaleString(locale))) { info.setName(name, LocaleUtils.locale_l2); info.setName(STConverter.sc2tc(name), LocaleUtils.locale_l3); if (!StringUtils.isEmpty(desc)) { info.setDescription(desc, LocaleUtils.locale_l2); info.setDescription(STConverter.sc2tc(desc), LocaleUtils.locale_l3); } } else { info.setName(STConverter.tc2sc(name), LocaleUtils.locale_l2); info.setName(name, LocaleUtils.locale_l3); if (!StringUtils.isEmpty(desc)) { info.setDescription(STConverter.tc2sc(desc), LocaleUtils.locale_l2); info.setDescription(desc, LocaleUtils.locale_l3); } } } } }