|
@@ -1,204 +0,0 @@
|
|
|
-package nc.bs.arap.impl;
|
|
|
-
|
|
|
-import java.io.BufferedOutputStream;
|
|
|
-import java.io.ByteArrayInputStream;
|
|
|
-import java.io.File;
|
|
|
-import java.io.FileInputStream;
|
|
|
-import java.io.FileOutputStream;
|
|
|
-import java.io.IOException;
|
|
|
-import java.io.InputStream;
|
|
|
-import java.io.PrintWriter;
|
|
|
-import java.io.StringWriter;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
-
|
|
|
-import javax.servlet.ServletException;
|
|
|
-import javax.servlet.http.HttpServletRequest;
|
|
|
-import javax.servlet.http.HttpServletResponse;
|
|
|
-
|
|
|
-import nc.bs.framework.adaptor.IHttpServletAdaptor;
|
|
|
-import nc.bs.framework.common.InvocationInfoProxy;
|
|
|
-import nc.bs.framework.common.NCLocator;
|
|
|
-import nc.bs.framework.common.RuntimeEnv;
|
|
|
-import nc.bs.framework.server.ISecurityTokenCallback;
|
|
|
-import nc.bs.pub.filesystem.IFileSystemService;
|
|
|
-import nc.itf.uap.IUAPQueryBS;
|
|
|
-import nc.jdbc.framework.processor.MapProcessor;
|
|
|
-import nc.log.NcLog;
|
|
|
-
|
|
|
-import org.apache.commons.fileupload.FileItem;
|
|
|
-import org.apache.commons.fileupload.disk.DiskFileItemFactory;
|
|
|
-import org.apache.commons.fileupload.servlet.ServletFileUpload;
|
|
|
-import org.codehaus.jettison.json.JSONException;
|
|
|
-
|
|
|
-import com.alibaba.fastjson.JSONObject;
|
|
|
-
|
|
|
-/**
|
|
|
- * 附件上传接口
|
|
|
- */
|
|
|
-public class AttachmentUploadImpl implements IHttpServletAdaptor {
|
|
|
- private static IUAPQueryBS iuap = (IUAPQueryBS) NCLocator.getInstance().lookup(IUAPQueryBS.class.getName());
|
|
|
- private String filename = null;
|
|
|
- private InputStream inputstream = null;
|
|
|
- private String pk_zbresult = null;
|
|
|
- private String billmaker = null;
|
|
|
- private String vbillcode = null;
|
|
|
- private IFileSystemService service = NCLocator.getInstance().lookup(IFileSystemService.class);
|
|
|
-
|
|
|
- @Override
|
|
|
- public void doAction(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
|
|
|
- try {
|
|
|
- req.setCharacterEncoding("UTF-8");
|
|
|
- resp.setContentType("text/json");
|
|
|
- resp.setCharacterEncoding("UTF-8");
|
|
|
- // 检查是否是多部分请求
|
|
|
- String contentType = req.getContentType();
|
|
|
- if (!(contentType != null && contentType.startsWith("multipart/"))) {
|
|
|
- resp.getWriter().write(formatRSJsonData("失败", "Content type is not multipart/form-data", "").toString());
|
|
|
- return;
|
|
|
- }
|
|
|
- NCLocator.getInstance().lookup(ISecurityTokenCallback.class).token("NCSystem".getBytes(), "pfxx".getBytes());
|
|
|
-// InvocationInfoProxy.getInstance().setUserDataSource("NC6337");
|
|
|
- this.vbillcode = req.getParameter("vbillcode");
|
|
|
- String pk_tradetype = req.getParameter("pkTradetype");
|
|
|
- // 根据单据号单据类型查询单据主键、billmaker
|
|
|
- Map<String, String> billMap = getDataMap(pk_tradetype,this.vbillcode);
|
|
|
- this.pk_zbresult = billMap.get("pk_zbresult");
|
|
|
- this.billmaker = billMap.get("billmaker");
|
|
|
- // 配置上传参数
|
|
|
- DiskFileItemFactory factory = new DiskFileItemFactory();
|
|
|
- ServletFileUpload upload = new ServletFileUpload(factory);
|
|
|
- // 解析请求的内容提取文件数据
|
|
|
- List<FileItem> items = upload.parseRequest(req);
|
|
|
- for (FileItem item : items) {
|
|
|
- if (item.getFieldName().startsWith("file")) {
|
|
|
- this.filename = new File(item.getName()).getName();
|
|
|
- byte[] fileContent = item.get();
|
|
|
- this.inputstream = new ByteArrayInputStream(fileContent);
|
|
|
- // 将附件下载到本地
|
|
|
- String workpath = RuntimeEnv.getInstance().getNCHome() + File.separator + "tianhua" + File.separator + this.pk_zbresult + File.separator;
|
|
|
- File defaultDirectory = new File(workpath);
|
|
|
- if (!defaultDirectory.exists()) {
|
|
|
- // 不存在自动创建文件夹
|
|
|
- defaultDirectory.mkdirs();
|
|
|
- } else {
|
|
|
- // 清空缓存文件
|
|
|
- File[] oldfiles = defaultDirectory.listFiles();
|
|
|
- if (oldfiles.length > 0) {
|
|
|
- for (File file : oldfiles) {
|
|
|
- file.delete();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- String ouputpath = workpath + this.filename;
|
|
|
- File target = new File(ouputpath);
|
|
|
- FileOutputStream fileoutputstream = new FileOutputStream(target);
|
|
|
- BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileoutputstream);
|
|
|
- byte[] buffer = new byte[1024];
|
|
|
- int bytesRead;
|
|
|
- while ((bytesRead = this.inputstream.read(buffer)) != -1) {
|
|
|
- // 将读取到的数据写入输出流
|
|
|
- bufferedOutputStream.write(buffer, 0, bytesRead);
|
|
|
- }
|
|
|
- bufferedOutputStream.flush();
|
|
|
- //直接调用文件服务器接口 平台提供的默认本地上传方法,文件从客户端直接调用文件服务器插件上传。
|
|
|
- new FileInputStream(ouputpath);
|
|
|
- // 附加名称
|
|
|
- String fileName = new File(item.getName()).getName();
|
|
|
- InputStream inputStream = new ByteArrayInputStream(fileContent);
|
|
|
- // 调用附件保存接口
|
|
|
- service.createNewFileNodeWithStream(this.pk_zbresult, fileName, this.billmaker, inputStream, item.getSize());
|
|
|
- this.inputstream.close();
|
|
|
- }
|
|
|
- }
|
|
|
- resp.getWriter().write(formatRSJsonData("成功", "", this.vbillcode).toString());
|
|
|
- return;
|
|
|
- } catch (Exception e) {
|
|
|
- resp.getWriter().write(formatRSJsonData("失败", e.getMessage() == null ? "" : e.getMessage(), this.vbillcode).toString());
|
|
|
- StringWriter stringWriter = new StringWriter();
|
|
|
- e.printStackTrace(new PrintWriter(stringWriter));
|
|
|
- // 获取详细信息
|
|
|
- String msg = stringWriter.getBuffer().toString();
|
|
|
- NcLog.info("附件上传:" + msg);
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 格式返回json数据
|
|
|
- * @return
|
|
|
- * @throws JSONException
|
|
|
- * @throws Exception
|
|
|
- */
|
|
|
- public static JSONObject formatRSJsonData(String status, String error, String message) {
|
|
|
- JSONObject rs = new JSONObject();
|
|
|
- rs.put("status", status);
|
|
|
- rs.put("message", message);
|
|
|
- rs.put("error", error);
|
|
|
- return rs;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- public Map<String, String> getDataMap(String type, String vbillcode) throws Exception {
|
|
|
- if ("".equals(vbillcode)) {
|
|
|
- return null;
|
|
|
- }
|
|
|
- Map<String, String> map = new HashMap<String, String>();
|
|
|
- String sql = "";
|
|
|
- if ("F3-Cxx-04".equals(type)) {
|
|
|
- sql = "select pk_paybill as pk_zbresult ,billmaker from ap_paybill where billno = '" + vbillcode + "' and nvl(dr,0) = 0";
|
|
|
- map = (Map<String, String>) iuap.executeQuery(sql.toString(),new MapProcessor());
|
|
|
- if (map == null) {
|
|
|
- throw new Exception("获取对外预付款(非项目)信息失败,未找到与参数" + vbillcode + "有关的数据!");
|
|
|
- }
|
|
|
- } else if ("F3-Cxx-05".equals(type)) {
|
|
|
- sql = "select pk_paybill as pk_zbresult ,billmaker from ap_paybill where billno ='" + vbillcode + "' and nvl(dr,0) = 0";
|
|
|
- map = (Map<String, String>) iuap.executeQuery(sql.toString(), new MapProcessor());
|
|
|
- if (map == null) {
|
|
|
- throw new Exception("获取对外预付款(项目)信息失败,未找到与参数" + vbillcode + "有关的数据!");
|
|
|
- }
|
|
|
- }else if ("25".equals(type)) {
|
|
|
- sql = "select pk_invoice as pk_zbresult ,billmaker from po_invoice where vbillcode = '"+vbillcode+"' and nvl(dr,0) = 0";
|
|
|
- map = (Map<String, String>) iuap.executeQuery(sql.toString(), new MapProcessor());
|
|
|
- if (map == null) {
|
|
|
- throw new Exception("获取采购发票信息失败,未找到与参数" + vbillcode + "有关的数据!");
|
|
|
- }
|
|
|
- }else if ("21".equals(type)) {
|
|
|
- sql = "select pk_order as pk_zbresult ,billmaker from po_order where vbillcode = '"+vbillcode+"' and nvl(dr,0) = 0";
|
|
|
- map = (Map<String, String>) iuap.executeQuery(sql.toString(), new MapProcessor());
|
|
|
- if (map == null) {
|
|
|
- throw new Exception("获取采购订单信息失败,未找到与参数" + vbillcode + "有关的数据!");
|
|
|
- }
|
|
|
- }else if ("D1".equals(type)) {
|
|
|
- sql = "select pk_payablebill as pk_zbresult ,billmaker from ap_payablebill where billno = '"+vbillcode+"' and nvl(dr,0) = 0";
|
|
|
- map = (Map<String, String>) iuap.executeQuery(sql.toString(), new MapProcessor());
|
|
|
- if (map == null) {
|
|
|
- throw new Exception("获取应付单(非项目)信息失败,未找到与参数" + vbillcode + "有关的数据!");
|
|
|
- }
|
|
|
- }else if ("F1-Cxx-02".equals(type)) {
|
|
|
- sql = "select pk_payablebill as pk_zbresult ,billmaker from ap_payablebill where billno = '"+vbillcode+"' and nvl(dr,0) = 0";
|
|
|
- map = (Map<String, String>) iuap.executeQuery(sql.toString(), new MapProcessor());
|
|
|
- if (map == null) {
|
|
|
- throw new Exception("获取应付单(项目)信息失败,未找到与参数" + vbillcode + "有关的数据!");
|
|
|
- }
|
|
|
- }
|
|
|
- else if ("F1-Cxx-04".equals(type)) {
|
|
|
- sql = "select pk_payablebill as pk_zbresult ,billmaker from ap_payablebill where billno = '"+vbillcode+"' and nvl(dr,0) = 0";
|
|
|
- map = (Map<String, String>) iuap.executeQuery(sql.toString(), new MapProcessor());
|
|
|
- if (map == null) {
|
|
|
- throw new Exception("获取预付核销(非项目)信息失败,未找到与参数" + vbillcode + "有关的数据!");
|
|
|
- }
|
|
|
- }
|
|
|
- else if ("F1-Cxx-05".equals(type)) {
|
|
|
- sql = "select pk_payablebill as pk_zbresult ,billmaker from ap_payablebill where billno = '"+vbillcode+"' and nvl(dr,0) = 0";
|
|
|
- map = (Map<String, String>) iuap.executeQuery(sql.toString(), new MapProcessor());
|
|
|
- if (map == null) {
|
|
|
- throw new Exception("获取预付核销(项目)信息失败,未找到与参数" + vbillcode + "有关的数据!");
|
|
|
- }
|
|
|
- }
|
|
|
- return map;
|
|
|
- }
|
|
|
-
|
|
|
-}
|