|
@@ -0,0 +1,204 @@
|
|
|
+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());
|
|
|
+
|
|
|
+ this.vbillcode = req.getParameter("vbillcode");
|
|
|
+ String pk_tradetype = req.getParameter("pkTradetype");
|
|
|
+
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|