这个代码我用LS调用成功了,但是没有进行联调,所以可能还存在其他的问题。话不多说,先上代码。
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Vector;
import lotus.domino.*;
import lotus.domino.types.*;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class EleSealToOAnew{
// This is a template implementation class for your web service. It
// becomes extraneous if you import a WSDL document. Consumers of this
// web service can call any public method in the implementation class.
//
// To obtain a Session object use this code:
// Session s = WebServiceBase.getCurrentSession();
//参数解析:
//1、加密后的文本内容
//2、业务文档唯一标识符
//3、附件名称
//如果上传成功。返回200,成功返回201和报错
public String ReceiveFile(String FileDetail,String unid,String attachname){
System.out.println("---开始执行生成pdf文件代码----");
//先判断文本内容是否为空,为空则返回false
String returnstr = "";
if(FileDetail == null){
System.out.println("用印审批模块获取盖章附件接口错误:文本内容为空");
returnstr = "{\"code\":\"201\",\"msg\":\"用印审批模块获取盖章附件接口错误:文本内容为空\"}";
return returnstr;
}
if(unid == null || unid.equals("")){
System.out.println("用印审批模块获取盖章附件接口错误:文件标识符为空");
returnstr = "{\"code\":\"201\",\"msg\":\"用印审批模块获取盖章附件接口错误:文件标识符为空\"}";
return returnstr;
}
if(attachname == null || attachname.equals("")){
System.out.println("用印审批模块获取盖章附件接口错误:附件名称为空");
returnstr = "{\"code\":\"201\",\"msg\":\"用印审批模块获取盖章附件接口错误:附件名称为空\"}";
return returnstr;
}
//定义参数
Session session = null;
//当前数据库参数
Database db = null;
Document doc = null;
//附件数据库参数
Database attadb = null;
View attaview = null;
Document attadoc = null;
RichTextItem attartf = null;
String outFilePath = null;
try {
session = WebServiceBase.getCurrentSession();
//获取当前数据库
db = session.getCurrentDatabase();
if(db!=null){
//根据unid获取业务文档
//获取对应的业务文档
doc = db.getDocumentByUNID(unid);
if(doc!=null)
{
//获取附件数据库
attadb = session.getDatabase(session.getServerName(), "attach/"+doc.getItemValueString("attachDb"));
System.out.println("1、执行到这里啦-------------");
if(attadb!=null)
{
attaview = attadb.getView("vws_AttachByUNIDandName");
System.out.println("2、执行到这里啦-------------");
//获取对应的附件文档
Vector keys = new Vector();
keys.addElement(unid);
keys.addElement(attachname);
attadoc = attaview.getDocumentByKey(keys, true);
if(attadoc!=null)
{
System.out.println("------附件文档已存在------");
//如果存在,则替换附件
outFilePath = "/home/notesdata/temp/"+attachname;
if(CreateFile(FileDetail,outFilePath))
{
//如果有该字段,则将该字段删除,重新创建一次
if(attadoc.hasItem("fld_Body"))
{
attartf = (RichTextItem) attadoc.getFirstItem("fld_Body");
attartf.remove();
}
System.out.println("3、执行到这里啦-------------");
attartf = attadoc.createRichTextItem("fld_Body");
attartf.embedObject(EmbeddedObject.EMBED_ATTACHMENT, null, outFilePath, null);
attadoc.save(true,false);
//删除文件夹附件
File file = new File(outFilePath);
file.delete();
System.out.println("附件已成功上传");
//修改业务文档的附件字段
String temname = doc.getItemValueString("Tattament")+","+attachname;
doc.replaceItemValue("Tattament", temname);
doc.save(true,false);
returnstr = "{\"code\":\"200\",\"msg\":\"附件已成功上传\"}";
}
}else{
System.out.println("------附件?牡挡淮嬖?-----");
outFilePath = "/home/notesdata/temp/"+attachname;
if(CreateFile(FileDetail, outFilePath))
{
//创建附件文档
attadoc = attadb.createDocument();
attartf = attadoc.createRichTextItem("fld_Body");
attartf.embedObject(EmbeddedObject.EMBED_ATTACHMENT, null, outFilePath, null);
attadoc.appendItemValue("fld_ID", attadoc.getUniversalID());
attadoc.appendItemValue("fld_CurLocker", "");
attadoc.appendItemValue("fld_CurLockUser", "");
attadoc.appendItemValue("fld_Editor", "");
attadoc.appendItemValue("fld_IsCanEdit", "1");
attadoc.appendItemValue("fld_IsEdited", "0");
attadoc.appendItemValue("fld_IsQG", "0");
attadoc.appendItemValue("fld_isRemove", "1");
attadoc.appendItemValue("fld_Name", attachname);
attadoc.appendItemValue("fld_ParentID", unid);
//创建时间
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
attadoc.appendItemValue("fld_Time", df.format(new Date()).toString());
attadoc.appendItemValue("fld_type", "1");
attadoc.appendItemValue("fld_UrlMainID", "1");
attadoc.appendItemValue("fld_UserName", doc.getItemValueString("Sauthor"));
attadoc.appendItemValue("FORM", "frm_Attach");
attadoc.save(true,false);
//删除文件夹附件
File file = new File(outFilePath);
file.delete();
System.out.println("附件已成功上传,创建附件文档完成");
//修改业务文档的附件字段
String temname = doc.getItemValueString("Tattament")+","+attachname;
doc.replaceItemValue("Tattament", attachname);
doc.save(true,false);
returnstr = "{\"code\":\"200\",\"msg\":\"附件已成功上传,创建附件文档完成\"}";
}
}
}else{
System.out.println("用印审批模块获取盖章附件接口错误:无法找到对应的附件数据库");
returnstr = "{\"code\":\"201\",\"msg\":\"用印审批模块获取盖章附件接口错误:无法找到对应的附件数据库\"}";
}
}else{
System.out.println("用印审批模块获取盖章附件接口错误:无法找到对应的业务文档");
returnstr = "{\"code\":\"201\",\"msg\":\"用印审批模块获取盖章附件接口错误:无法找到对应的业务文档\"}";
}
}else{
System.out.println("用印审批模块获取盖章附件接口错误:无法找到对应数据库");
returnstr = "{\"code\":\"201\",\"msg\":\"用印审批模块获取盖章附件接口错误:无法找到对应数据库\"}";
}
} catch (Exception e) {
// TODO: handle exception
System.out.println("用印审批模块获取盖章附件接口错误:");
e.printStackTrace();
returnstr = "{\"code\":\"201\",\"msg\":\"用印审批模块获取盖章附件接口错误\"}";
}finally{
//释放资源
try {
if(session!=null)
{
session.recycle();
}
if(db!=null)
{
db.recycle();
}
if(doc!=null)
{
doc.recycle();
}
if(attadb!=null)
{
attadb.recycle();
}
if(attaview!=null)
{
attaview.recycle();
}
if(attadoc!=null)
{
attadoc.recycle();
}
if(attartf!=null)
{
attartf.recycle();
}
}catch (Exception e2) {
// TODO: handle exception
System.out.println("用印审批模块获取盖章附件接口释放资源错误:");
e2.printStackTrace();
returnstr = "{\"code\":\"201\",\"msg\":\"用印审批模块获取盖章附件接口释放资源错误\"}";
}
}
System.out.println("---结束执行生成pdf文件代码----");
return returnstr;
}
//根据加密流文件生成文件并存放在相关位置
public boolean CreateFile(String FileDetail,String outFilePath)
{
boolean flag = false;
//定义解密对象
BASE64Decoder decoder = new BASE64Decoder();
File file = null;
FileOutputStream fos = null;
try {
System.out.println("创建附件文件开始-----------");
//创建输出流
System.out.println(outFilePath);
file = new File(outFilePath);
if(file.isDirectory()){
System.out.println("CreateFile函数错误:该路径为文件夹,不能创建文件");
return false;
}
fos = new FileOutputStream(file);
//解密文本内容
byte[] b = decoder.decodeBuffer(FileDetail);
for(int i = 0;i<b.length;++i){
if(b[i]<0)
{
//调整异常数据
b[i]+=256;
}
}
fos.write(b);
fos.flush();
flag = true;
System.out.println("创建附件文件结束-----------");
} catch (Exception e) {
// TODO: handle exception
System.out.println("CreateFile函数错误");
e.printStackTrace();
}finally{
//释放资源
if(fos!=null){
try {
fos.close();
} catch (Exception e2) {
// TODO: handle exception
System.out.println("CreateFile函数释放文件流错误");
e2.printStackTrace();
}
}
}
return flag;
}
}