Просмотр исходного кода

Merge branch 'feature/general_addResult' into 'wrdp'

【general】添加匿名下载附件方法

See merge request o2oa/o2oa!2148
o2null 5 лет назад
Родитель
Сommit
8313cdc586

+ 2 - 0
o2server/x_general_assemble_control/src/main/java/com/x/general/assemble/control/jaxrs/ActionApplication.java

@@ -8,6 +8,7 @@ import com.x.base.core.project.jaxrs.AbstractActionApplication;
 import com.x.general.assemble.control.jaxrs.area.AreaAction;
 import com.x.general.assemble.control.jaxrs.ecnet.EcnetAction;
 import com.x.general.assemble.control.jaxrs.office.OfficeAction;
+import com.x.general.assemble.control.jaxrs.file.GeneralFileAction;
 import com.x.general.assemble.control.jaxrs.worktime.WorkTimeAction;
 
 @ApplicationPath("jaxrs")
@@ -18,6 +19,7 @@ public class ActionApplication extends AbstractActionApplication {
 		classes.add(EcnetAction.class);
 		classes.add(OfficeAction.class);
 		classes.add(WorkTimeAction.class);
+		classes.add(GeneralFileAction.class);
 		return classes;
 	}
 

+ 10 - 0
o2server/x_general_assemble_control/src/main/java/com/x/general/assemble/control/jaxrs/FileJaxrsFilter.java

@@ -0,0 +1,10 @@
+package com.x.general.assemble.control.jaxrs;
+
+import com.x.base.core.project.jaxrs.AnonymousCipherManagerUserJaxrsFilter;
+
+import javax.servlet.annotation.WebFilter;
+
+@WebFilter(urlPatterns = "/jaxrs/generalfile/*", asyncSupported = true)
+public class FileJaxrsFilter extends AnonymousCipherManagerUserJaxrsFilter {
+
+}

+ 54 - 0
o2server/x_general_assemble_control/src/main/java/com/x/general/assemble/control/jaxrs/file/ActionGeneralFile.java

@@ -0,0 +1,54 @@
+package com.x.general.assemble.control.jaxrs.file;
+
+import com.x.base.core.container.EntityManagerContainer;
+import com.x.base.core.container.factory.EntityManagerContainerFactory;
+import com.x.base.core.project.config.StorageMapping;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.jaxrs.WoFile;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.general.assemble.control.ThisApplication;
+import com.x.general.core.entity.file.GeneralFile;
+
+
+public class ActionGeneralFile extends BaseAction {
+
+    private static Logger logger = LoggerFactory.getLogger(ActionGeneralFile.class);
+
+    protected ActionResult<Wo> execute(EffectivePerson effectivePerson, String flag) throws Exception {
+        logger.debug(effectivePerson, "flag:{}.", flag);
+        ActionResult<Wo> result = new ActionResult<>();
+        Wo wo = null;
+        try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+            GeneralFile generalFile = emc.find(flag, GeneralFile.class);
+            if(generalFile!=null){
+                StorageMapping gfMapping = ThisApplication.context().storageMappings().get(GeneralFile.class,
+                        generalFile.getStorage());
+                wo = new Wo(generalFile.readContent(gfMapping), this.contentType(false, generalFile.getName()),
+                        this.contentDisposition(false, generalFile.getName()));
+                result.setData(wo);
+
+                generalFile.deleteContent(gfMapping);
+                emc.beginTransaction(GeneralFile.class);
+                emc.delete(GeneralFile.class, generalFile.getId());
+                emc.commit();
+            } else {
+                throw new ExceptionInputFileObject(flag);
+            }
+
+        }
+        result.setData(wo);
+        return result;
+
+    }
+
+    public static class Wo extends WoFile {
+
+        public Wo(byte[] bytes, String contentType, String contentDisposition) {
+            super(bytes, contentType, contentDisposition);
+        }
+
+    }
+
+}

+ 7 - 0
o2server/x_general_assemble_control/src/main/java/com/x/general/assemble/control/jaxrs/file/BaseAction.java

@@ -0,0 +1,7 @@
+package com.x.general.assemble.control.jaxrs.file;
+
+import com.x.base.core.project.jaxrs.StandardJaxrsAction;
+
+abstract class BaseAction extends StandardJaxrsAction {
+
+}

+ 13 - 0
o2server/x_general_assemble_control/src/main/java/com/x/general/assemble/control/jaxrs/file/ExceptionInputFileObject.java

@@ -0,0 +1,13 @@
+package com.x.general.assemble.control.jaxrs.file;
+
+import com.x.base.core.project.exception.PromptException;
+
+public class ExceptionInputFileObject extends PromptException {
+
+    private static final long serialVersionUID = 9085364457175859374L;
+
+    ExceptionInputFileObject(String flag) {
+        super("对象不存在:{}.", flag);
+    }
+
+}

+ 43 - 0
o2server/x_general_assemble_control/src/main/java/com/x/general/assemble/control/jaxrs/file/GeneralFileAction.java

@@ -0,0 +1,43 @@
+package com.x.general.assemble.control.jaxrs.file;
+
+import com.x.base.core.project.annotation.JaxrsDescribe;
+import com.x.base.core.project.annotation.JaxrsMethodDescribe;
+import com.x.base.core.project.annotation.JaxrsParameterDescribe;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.jaxrs.ResponseFactory;
+import com.x.base.core.project.jaxrs.StandardJaxrsAction;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.*;
+import javax.ws.rs.container.AsyncResponse;
+import javax.ws.rs.container.Suspended;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+
+@Path("generalfile")
+@JaxrsDescribe("获取附件")
+public class GeneralFileAction extends StandardJaxrsAction {
+
+	private static Logger logger = LoggerFactory.getLogger(GeneralFileAction.class);
+
+	@JaxrsMethodDescribe(value = "获取附件.", action = ActionGeneralFile.class)
+	@GET
+	@Path("flag/{flag}")
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void getResult(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+						  @JaxrsParameterDescribe("附件标记") @PathParam("flag") String flag) {
+		ActionResult<ActionGeneralFile.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionGeneralFile().execute(effectivePerson, flag);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+
+}