diff --git a/src/com/engine/workflow/web/RequestFormAction.java b/src/com/engine/workflow/web/RequestFormAction.java new file mode 100644 index 000000000..037226d97 --- /dev/null +++ b/src/com/engine/workflow/web/RequestFormAction.java @@ -0,0 +1,1166 @@ +package com.engine.workflow.web; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.api.browser.bean.SearchConditionOption; +import com.cloudstore.dev.api.util.Util_DataCache; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.workflow.biz.freeNode.FreeNodeAsyncSubmitBiz; +import com.engine.workflow.biz.requestForm.DetailTemplateDownloadBiz; +import com.engine.workflow.biz.requestForm.RequestFormBiz; +import com.engine.workflow.biz.requestForm.RequestRemindBiz; +import com.engine.workflow.biz.requestList.RequestListBiz; +import com.engine.workflow.biz.requestSubmit.RequestBatchForwardBiz; +import com.engine.workflow.biz.requestSubmit.RequestBatchSubmitThread; +import com.engine.workflow.biz.requestSubmit.RequestSubmitThread; +import com.engine.workflow.constant.RemindTypeEnum; +import com.engine.workflow.constant.requestForm.RequestExecuteType; +import com.engine.workflow.entity.requestForm.RequestOperationResultBean; +import com.engine.workflow.service.*; +import com.engine.workflow.service.impl.*; +import com.google.common.base.Strings; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import weaver.filter.WeaverRequest; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; +import weaver.workflow.request.WFAutoApproveThreadPoolUtil; +import weaver.workflow.workflow.WorkflowConfigComInfo; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by jhy on 2018/2/23. + */ +public class RequestFormAction { + + private RequestFormService getLoadFormService(HttpServletRequest request, HttpServletResponse response) { + User user = RequestFormBiz.getFormUser(request, response, true); + return (RequestFormService) ServiceUtil.getService(RequestFormServiceImpl.class, user); + } + + private RequestFormServiceImpl getFormService(HttpServletRequest request, HttpServletResponse response) { + User user = RequestFormBiz.getFormUser(request, response, false); + return (RequestFormServiceImpl) ServiceUtil.getService(RequestFormServiceImpl.class, user); + } + + private RequestLogService getLogService(HttpServletRequest request, HttpServletResponse response) { + User user = RequestFormBiz.getFormUser(request, response, false); + return (RequestLogService) ServiceUtil.getService(RequestLogServiceImpl.class, user); + } + + private SignInputService getSignInputService(HttpServletRequest request, HttpServletResponse response) { + User user = RequestFormBiz.getFormUser(request, response, false); + return (SignInputService) ServiceUtil.getService(SignInputServiceImpl.class, user); + } + + + private WorkflowTransferSetService getWfTransferSetService(HttpServletRequest request, HttpServletResponse response) { + User user = RequestFormBiz.getFormUser(request, response, false); + return (WorkflowTransferSetService) ServiceUtil.getService(WorkflowTransferSetServiceImpl.class, user); + } + + private HtmlToPdfService getHtmlToPdfService(HttpServletRequest request, HttpServletResponse response){ + User user = RequestFormBiz.getFormUser(request, response, false); + return (HtmlToPdfService)ServiceUtil.getService(HtmlToPdfServiceImpl.class, user); + } + + /** + * 流程测试选择人员后判断用户是否有创建权限 + **/ + @POST + @Path("/judgeCreateRight") + @Produces(MediaType.TEXT_PLAIN) + public String judgeCreateRight(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getLoadFormService(request, response).judgeCreateRight(request); + return JSON.toJSONString(apidatas); + } + + /** + * 表单加载基础信息接口 + **/ + @POST + @Path("/loadForm") + @Produces(MediaType.TEXT_PLAIN) + public String loadForm(@Context HttpServletRequest request, @Context HttpServletResponse response) { +// response.setCharacterEncoding("utf-8"); + long start = System.currentTimeMillis(); + String result = getLoadFormService(request, response).loadForm(request); + long duration = System.currentTimeMillis() - start; + if (result.endsWith("}")) + result = result.substring(0, result.length() - 1) + ",\"durationTime\":" + duration + "}"; + return result; + } + + /** + * 模板预览接口 + **/ + @POST + @Path("/loadPreView") + @Produces(MediaType.TEXT_PLAIN) + public String loadPreView(@Context HttpServletRequest request, @Context HttpServletResponse response) { +// response.setCharacterEncoding("utf-8"); + String result = getFormService(request, response).loadPreView(ParamUtil.request2Map(request)); + return result; + } + + /** + * 加载明细数据接口 + **/ + @POST + @Path("/detailData") + @Produces(MediaType.TEXT_PLAIN) + public String detailData(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).loadDetailData(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas, SerializerFeature.DisableCircularReferenceDetect); + } + + /** 保存明细分页信息 **/ + @POST + @Path("/saveDetailPaging") + @Produces(MediaType.TEXT_PLAIN) + public String saveDetailPaging(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).saveDetailPaging(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + @POST + @Path("/updateReqInfo") + @Produces(MediaType.TEXT_PLAIN) + public String updateReqInfo(@Context HttpServletRequest request, @Context HttpServletResponse response) { + RequestFormServiceImpl formService = getFormService(request, response); + Map apidatas = formService.updateReqInfo(request); + FreeNodeAsyncSubmitBiz.execute(request,formService); + return JSON.toJSONString(apidatas); + } + + /** + * 右键菜单接口 + **/ + @POST + @Path("/rightMenu") + @Produces(MediaType.TEXT_PLAIN) + public String rightMenu(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).getRightMenu(request,ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 流程状态接口 + **/ + @POST + @Path("/wfstatusnew") + @Produces(MediaType.TEXT_PLAIN) + public String getStatusData(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map reqParams = ParamUtil.request2Map(request); + reqParams.put("request",request); + Map apidatas = getFormService(request, response).getStatusData(reqParams); + return JSONObject.toJSONString(apidatas); + } + + /** + * 流程状态计数接口 + **/ + @POST + @Path("/wfstatuscount") + @Produces(MediaType.TEXT_PLAIN) + public String getStatusCount(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map reqParams = ParamUtil.request2Map(request); + reqParams.put("request",request); + Map apidatas = getFormService(request, response).getStatusCount(reqParams); + return JSONObject.toJSONString(apidatas); + } + + /** + * 相关资源接口 + **/ + @GET + @Path("/resources") + @Produces(MediaType.TEXT_PLAIN) + public String getResourcesKey(@Context HttpServletRequest request, @Context HttpServletResponse response) throws Exception { + Map apidatas = getFormService(request, response).getResourcesKey(ParamUtil.request2Map(request)); + return JSONObject.toJSONString(apidatas); + } + + /** + * 表单修改日志接口 + **/ + @POST + @Path("/getModifyLog") + @Produces(MediaType.TEXT_PLAIN) + public String getModifyLog(@Context HttpServletRequest request, @Context HttpServletResponse response) { +// response.setCharacterEncoding("utf-8"); + Map apidatas = getFormService(request, response).getModifyLog(request); + return JSON.toJSONString(apidatas); + } + + @POST + @Path("/requestBatchSubmit") + @Produces(MediaType.TEXT_PLAIN) + public String requestBatchSubmit(@Context HttpServletRequest request, @Context HttpServletResponse response) { + RequestFormServiceImpl formService = getFormService(request, response); + Map apidatas = new HashMap (); + User user = formService.getUser(); + + WorkflowConfigComInfo configComInfo = new WorkflowConfigComInfo(); + boolean defaultAsyncSubmit = "1".equals(Util.null2String(configComInfo.getValue("request_batchsubmit_async"))); + //需要异步提交 + boolean needBatchSubmit = "1".equals(request.getParameter("needBatchSubmit")); + if (needBatchSubmit && defaultAsyncSubmit) { + WeaverRequest weaverRequest = new WeaverRequest(request); + weaverRequest.setSession(request.getSession()); + RequestBatchSubmitThread batchSubmitThread = new RequestBatchSubmitThread(weaverRequest, formService); + //更新流程状态, 从“待办”更新为“处理中”, 处理中的流程在待办、已办中均不显示(可通过查询流程进行查询到) + batchSubmitThread.executeSubmitBefore(); + //异步执行提交,在提交成功后, 将流程状态改为“已处理”,如发生异常,则更新为“待办”, 并发送错误提交消息到消息中心 + WFAutoApproveThreadPoolUtil.getFixedThreadPool().execute(batchSubmitThread); + } else { + apidatas = formService.requestBatchSubmit(request); + } + + String submitReqIds = Util.null2String(request.getParameter("multiSubIds")); + if(submitReqIds.endsWith(",")) + submitReqIds = submitReqIds.substring(0,submitReqIds.length()-1); + apidatas.put("submitReqIds",submitReqIds);//返回本次提交请求的requestid,用于reload走微搜时数据处理 + + return JSON.toJSONString(apidatas); + } + + /** + * loglist + **/ + @POST + @Path("/getRequestLogBaseInfo") + @Produces(MediaType.TEXT_PLAIN) + public String getRequestLogBaseInfo(@Context HttpServletRequest request, @Context HttpServletResponse response) { + return JSON.toJSONString(getLogService(request, response).getRequestLogBaseInfo(ParamUtil.request2Map(request))); + } + + @POST + @Path("/getRequestLogList") + @Produces(MediaType.TEXT_PLAIN) + public String getRequestLogList(@Context HttpServletRequest request, @Context HttpServletResponse response) { + return JSON.toJSONString(getLogService(request, response).getRequestLogList(request, ParamUtil.request2Map(request))); + } + + @POST + @Path("/updateUserTxStatus") + @Produces(MediaType.TEXT_PLAIN) + public String updateSignTXStatus(@Context HttpServletRequest request, @Context HttpServletResponse response) { + return JSON.toJSONString(getLogService(request, response).updateUserTxStatus(ParamUtil.request2Map(request))); + } + + @POST + @Path("/updateRequestLogPageSize") + @Produces(MediaType.TEXT_PLAIN) + public String updateRequestLogPageSize(@Context HttpServletRequest request, @Context HttpServletResponse response) { + return JSON.toJSONString(getLogService(request, response).updateRequestLogPageSize(ParamUtil.request2Map(request))); + } + + @GET + @Path("/addDocReadTag") + @Produces(MediaType.TEXT_PLAIN) + public String addDocReadTag(@Context HttpServletRequest request, @Context HttpServletResponse response) { + return JSON.toJSONString(getLogService(request, response).addDocReadLog(ParamUtil.request2Map(request))); + } + + /** + * 签字意见输入框 + **/ + @POST + @Path("/signInput") + @Produces(MediaType.TEXT_PLAIN) + public String signInput(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map reqParams = ParamUtil.request2Map(request); + reqParams.put("request",request); + return JSON.toJSONString(getSignInputService(request, response).getSignInputInfo(reqParams)); + } + + /** + * 判断退回方式 + **/ + @POST + @Path("/judgeRejectWay") + @Produces(MediaType.TEXT_PLAIN) + public String judgeRejectWay(@Context HttpServletRequest request, @Context HttpServletResponse response) { + RequestFormServiceImpl service = getFormService(request, response); + Map apidatas = service.judgeRejectWay(request); + int rejecttype = Util.getIntValue(apidatas.get("rejecttype")+""); + if(rejecttype == 2){ //选择退回节点时,直接算出弹窗所需信息 + Map params = (Map)apidatas.get("params"); + Map chooseInfo = service.getRejectOption(params); + List> rejectNodeList = (List>)chooseInfo.get("rejectNodeList"); + List> remindNodeList = (List>)chooseInfo.get("remindNodeList"); + List submitDirectNodeOptions = (List)chooseInfo.get("submitDirectNodeOptions"); + //当选择退回信息只有一个退回节点可选时,不弹窗直接退回 + if(rejectNodeList != null && remindNodeList !=null && submitDirectNodeOptions != null && rejectNodeList.size() == 1 && remindNodeList.size() == 0 && submitDirectNodeOptions.size() == 0){ + String nodeKey = Util.null2String(rejectNodeList.get(0).get("key")); + int isrejectremind = Util.getIntValue(Util.null2String(params.get("isrejectremind"))); + String directRejectNodeid = nodeKey.substring(0, nodeKey.indexOf("_")); + String directRemindNodeid = isrejectremind == 1 ? directRejectNodeid : ""; + apidatas.put("rejecttype", 1); + params.put("RejectNodes", directRemindNodeid); + params.put("RejectToNodeid", directRejectNodeid); + }else{ + apidatas.put("chooseInfo", chooseInfo); + } + } + return JSON.toJSONString(apidatas); + } + + /** + * 流程提交 + **/ + @POST + @Path("/requestOperation") + @Produces(MediaType.TEXT_PLAIN) + public String requestOperation(@Context HttpServletRequest request, @Context HttpServletResponse response) { + saveDomainCache(request, response); + + Map apidatas = null; + + RequestFormServiceImpl formService = getFormService(request, response); + String openByDefaultBrowser = Util.null2String(request.getParameter("openByDefaultBrowser")); + boolean isThrowThread = RequestSubmitThread.isThrowThread(request); + if (isThrowThread) { + WeaverRequest weaverRequest = new WeaverRequest(request); + weaverRequest.setSession(request.getSession()); + RequestSubmitThread submitThread = new RequestSubmitThread(formService, weaverRequest); + submitThread.initSubmitLog(); + WFAutoApproveThreadPoolUtil.getFixedThreadPool().execute(submitThread); + apidatas = new HashMap(); + RequestOperationResultBean resultBean = new RequestOperationResultBean(); + resultBean.setType(RequestExecuteType.ASYNC_SUBMIT); + apidatas.put("data", resultBean); + } else { + apidatas = formService.requestSubmit(request); + } + if("1".equals(openByDefaultBrowser)){//钉钉、企业微信pc客户端以默认浏览器打开流程,提交时保存客户端和浏览器交互数据 + User user = RequestFormBiz.getFormUser(request, response, true); + String requestid = Util.null2String(request.getParameter("requestid")); + if(isThrowThread || requestid.equals(new RequestListBiz().removeDoingReqId(requestid,user))){//抛线程处理流程,或者提交流程后状态变更,做记录保存 + RequestListBiz.putRecord(user,requestid); + } + RequestOperationResultBean resultBean = (RequestOperationResultBean) apidatas.get("data"); + if(resultBean != null){ + Map resultInfo = resultBean.getResultInfo(); + resultInfo.put("openByDefaultBrowser",openByDefaultBrowser);//下一个节点还是自己,防止参数丢失 + } + } + return JSON.toJSONString(apidatas); + } + + /** + * 缓存用户域名 qc1602252 + * @param request + * @param response + */ + private void saveDomainCache(HttpServletRequest request, HttpServletResponse response) { + BaseBean baseBean = new BaseBean(); + try{ + User cuser = HrmUserVarify.getUser(request, response); + String scheme = request.getScheme(); + String serverName= request.getServerName(); + String domain = scheme +"://"+ serverName ; + int port= request.getServerPort(); + if(port != 80){ + domain = domain +":" + port; + } + Util_DataCache.setObjVal("qc1602252"+cuser.getUID() , domain); + + //解决自动审批时,当前处理人获取不到,故将requestid与域名映射 + String requestid = request.getParameter("requestid"); + if(StringUtils.isNotBlank(requestid)&&!"-1".equals(requestid)){ + Util_DataCache.setObjVal("domain"+requestid , domain); + } + + }catch (Exception e){ + baseBean.writeLog("qc1602252---saveDomainCache---error"); + baseBean.writeLog(e); + } + } + + /** + * 转发、转办、意见征询等提交 + **/ + @POST + @Path("/remarkOperate") + @Produces(MediaType.TEXT_PLAIN) + public String remarkOperate(@Context HttpServletRequest request, @Context HttpServletResponse response) { + saveDomainCache(request, response); + Map apidatas = getFormService(request, response).forwardSubmit(request); + String openByDefaultBrowser = Util.null2String(request.getParameter("openByDefaultBrowser")); + int forwardflag = Util.getIntValue(request.getParameter("forwardflag")); + if((forwardflag == 2 || forwardflag == 3 || forwardflag == 5) && "1".equals(openByDefaultBrowser)){ + User user = RequestFormBiz.getFormUser(request, response, true); + String requestid = Util.null2String(request.getParameter("requestid")); + RequestListBiz.putRecord(user,requestid); + } + return JSON.toJSONString(apidatas); + } + + /** + * 流程撤回 + **/ + @POST + @Path("/requestWithdraw") + @Produces(MediaType.TEXT_PLAIN) + public String requestWithdraw(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).requestWithdraw(request); + return JSON.toJSONString(apidatas); + } + + /** + * 批注回复提交 + **/ + @POST + @Path("/remarkOperation") + @Produces(MediaType.TEXT_PLAIN) + public String remarkOperation(@Context HttpServletRequest request, @Context HttpServletResponse response) { + saveDomainCache(request, response); + Map apidatas = getFormService(request, response).remarkSubmit(request); + String openByDefaultBrowser = Util.null2String(request.getParameter("openByDefaultBrowser")); + if("1".equals(openByDefaultBrowser)){//钉钉、企业微信pc客户端以默认浏览器打开流程,提交时保存客户端和浏览器交互数据 + User user = RequestFormBiz.getFormUser(request, response, true); + String requestid = Util.null2String(request.getParameter("requestid")); + RequestListBiz.putRecord(user,requestid); + } + return JSON.toJSONString(apidatas); + } + + /** + * 功能管理相关 + **/ + @POST + @Path("/functionLink") + @Produces(MediaType.TEXT_PLAIN) + public String functionLink(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).functionManage(request, response); + String openByDefaultBrowser = Util.null2String(request.getParameter("openByDefaultBrowser")); + String flag = Util.null2String(request.getParameter("flag")); + if(("ov".equals(flag) || "rb".equals(flag) || "cancel".equals(flag) || "stop".equals(flag) || "restart".equals(flag)) && "1".equals(openByDefaultBrowser)){ + User user = RequestFormBiz.getFormUser(request, response, true); + String requestid = Util.null2String(request.getParameter("requestid")); + RequestListBiz.putRecord(user,requestid); + } + return JSON.toJSONString(apidatas); + } + + /** + * 触发子流程 + **/ + @POST + @Path("/triggerSubWf") + @Produces(MediaType.TEXT_PLAIN) + public String triggerSubWf(@Context HttpServletRequest request, @Context HttpServletResponse response) { + saveDomainCache(request, response); + Map apidatas = getFormService(request, response).triggerSubWf(request); + return JSON.toJSONString(apidatas); + } + + /** + * 附件上传 + **/ + @POST + @Path("/docUpload") + @Produces(MediaType.TEXT_PLAIN) + public String docUpload(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).uploadFile(request, response); + return JSONObject.toJSONString(apidatas); + } + + /** + * 获取附件字段信息 + **/ + @POST + @Path("/getUploadFileInfo") + @Produces(MediaType.TEXT_PLAIN) + public String getUploadFileInfo(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).getFileFieldObj(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 创建流程编号 + **/ + @POST + @Path("/createWfCode") + @Produces(MediaType.TEXT_PLAIN) + public String createWfCode(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).createWfCode(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 获取流程编号字段值 + **/ + @POST + @Path("/loadWfCodeFieldValueInfo") + @Produces(MediaType.TEXT_PLAIN) + public String loadWfCodeFieldValueInfo(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).getWfCodeFieldValue(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 添加常用批示语 + **/ + @POST + @Path("/addWfPhrase") + @Produces(MediaType.TEXT_PLAIN) + public String addWfPhrase(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getSignInputService(request, response).addWfPhrase(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 获取常用批示语 + **/ + @POST + @Path("/getPhrases") + @Produces(MediaType.TEXT_PLAIN) + public String getPhrases(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getSignInputService(request, response).getPhrases(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 流程导入 + **/ + @POST + @Path("/requestImport") + @Produces(MediaType.TEXT_PLAIN) + public String requestImport(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).requestImport(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 流程明细导入 + **/ + @POST + @Path("/doImportDetail") + @Produces(MediaType.TEXT_PLAIN) + public String requestDetailImport(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).requestDetailImport(request); + return JSON.toJSONString(apidatas); + } + + /** + * 明细导入触发字段联动 + **/ + @POST + @Path("/riggerFieldLinkageCfg") + @Produces(MediaType.TEXT_PLAIN) + public String importFieldLinkageCfg(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).importFieldLinkageCfg(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 明细导入导出excel模板可包含只读字段 + **/ + @POST + @Path("/exportFieldSet") + @Produces(MediaType.TEXT_PLAIN) + public String exportFieldSet(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).exportFieldSet(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 明细导入执行公式 + **/ + @POST + @Path("/riggerFormulaCfg") + @Produces(MediaType.TEXT_PLAIN) + public String importFormulaCfg(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).importFormulaCfg(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 异常处理选人 + **/ + @POST + @Path("/chooseExceptionOperator") + @Produces(MediaType.TEXT_PLAIN) + public String chooseExceptionOperator(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).chooseExceptionOperator(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 超时设置 + **/ + @POST + @Path("/overTimeSetting") + @Produces(MediaType.TEXT_PLAIN) + public String overTimeSetting(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).overTimeSetting(request); + return JSON.toJSONString(apidatas); + } + + /** + * 打印日志基础信息 + **/ + @POST + @Path("/getPrintLogBase") + @Produces(MediaType.TEXT_PLAIN) + public String getPrintLogBase(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).getPrintLogBase(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 打印日志数据信息 + **/ + @POST + @Path("/getPrintLogData") + @Produces(MediaType.TEXT_PLAIN) + public String getPrintLogData(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).getPrintLogData(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 自由流转读取数据 + **/ + @POST + @Path("/freeFlowRead") + @Produces(MediaType.TEXT_PLAIN) + public String freeFlowRead(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).freeFlowRead(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 自由流转保存数据 + **/ + @POST + @Path("/freeFlowSave") + @Produces(MediaType.TEXT_PLAIN) + public String freeFlowSave(@Context HttpServletRequest request, @Context HttpServletResponse response) { + saveDomainCache(request, response); + Map apidatas = getFormService(request, response).freeFlowSave(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 流转设定按钮-返回数据 + * add by jym + **/ + @POST + @Path("/getTransferCondition") + @Produces(MediaType.TEXT_PLAIN) + public String getTransferCondition(@Context HttpServletRequest request,@Context HttpServletResponse response){ + Map apidatas = new HashMap(); + apidatas = getWfTransferSetService(request, response).getTransferCondition(ParamUtil.request2Map(request)); + return JSONObject.toJSONString(apidatas); + } + + /** + * 流程编辑锁定相关操作 + **/ + @POST + @Path("/editLockOper") + @Produces(MediaType.TEXT_PLAIN) + public String editLockOper(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).editLockOper(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 获取节点打印模板信息 + **/ + @POST + @Path("/loadPrintTemplates") + @Produces(MediaType.TEXT_PLAIN) + public String loadPrintTemplates(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = null; + try { + User user = HrmUserVarify.getUser(request, response); + /*E9打印登录超时报错(QC:527424)*/ + if(user == null) { + response.sendRedirect("/wui/index.html"); + return null; + } + apidatas = getFormService(request, response).loadPrintTemplates(ParamUtil.request2Map(request)); + } catch (IOException e) { + e.printStackTrace(); + } + return JSON.toJSONString(apidatas); + } + + /** + * 运算表达式 + **/ + @POST + @Path("/doEvalExpression") + @Produces(MediaType.TEXT_PLAIN) + public String doEvalExpression(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).doEvalExpression(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 生成打印日志 + **/ + @POST + @Path("/generatePrintLog") + @Produces(MediaType.TEXT_PLAIN) + public String generatePrintLog(@Context HttpServletRequest request, @Context HttpServletResponse response) { + User user = HrmUserVarify.getUser(request, response); + /*E9打印登录超时报错(QC:527424)*/ + if(user == null) { + try { + response.sendRedirect("/wui/index.html"); + return null; + } catch (IOException e) { + e.printStackTrace(); + } + } + Map apidatas = getFormService(request, response).generatePrintLog(request); + return JSON.toJSONString(apidatas); + } + + /** + * 流程中当前操作者已转发信息 + * @param request + * @param response + * @return + */ + @GET + @Path("/getForwardDatas") + @Produces(MediaType.TEXT_PLAIN) + public String getForwardDatas(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).getForwardDatas(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 转发收回 + * @param request + * @param response + * @return + */ + @POST + @Path("/doBack") + @Produces(MediaType.TEXT_PLAIN) + public String doBack(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).doBack(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * form tab 扩展 + * @param request + * @param response + * @return + */ + @POST + @Path("/getFormTab") + @Produces("text/plain;charset=utf-8") + public String loadFormTab(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).getFormTab(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + @GET + @Path("/dowloadTemplate") + @Produces(MediaType.APPLICATION_OCTET_STREAM)//返回方式为流 + public Response exportExcel(@Context HttpServletRequest request, @Context HttpServletResponse response) { + ByteArrayOutputStream os = null; + InputStream input = null; + try { + User user = RequestFormBiz.getFormUser(request, response, false); + DetailTemplateDownloadBiz dtdBiz = new DetailTemplateDownloadBiz(user); + + os = new ByteArrayOutputStream(); + + HSSFWorkbook wb =dtdBiz.templateDownload(request, response); + wb.write(os); + input = new ByteArrayInputStream(os.toByteArray()); + + String filename = dtdBiz.getFilename(); + //filename = java.net.URLEncoder.encode(filename, "UTF-8"); + filename = StringUtils.replace(filename, "/", ""); + filename = StringUtils.replace(filename, "%2F", ""); + filename = StringUtils.replace(filename, "+", "%20"); + filename = Util.formatMultiLang(filename, "7"); + + return Response + .ok(input) + .header("Content-disposition", "attachment;filename=" + filename) + .header("Cache-Control", "no-cache").build(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try{ + input.close(); + os.close(); + }catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + + + @POST + @Path("/saveMobileSignAnnex") + @Produces("text/plain;charset=utf-8") + public String saveMobileSignAnnex(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getSignInputService(request, response).saveMobileSignAnnexCmd(request); + return JSON.toJSONString(apidatas); + } + + /** + * 获取指定下一节点流转condition + * @param request + * @param response + * @return + */ + @POST + @Path("/getSelectNextFlowCondition") + @Produces("text/plain;charset=utf-8") + public String getSelectNextFlowCondition(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).getSelectNextFlowCondition(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 获取指定下一节点流转节点信息 + * @param request + * @param response + * @return + */ + @POST + @Path("/getSelectFlowNodeInfo") + @Produces("text/plain;charset=utf-8") + public String getSelectFlowNodeInfo(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).getSelectNextFlowNodes(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 获取流程默认提醒方式及当前节点操作者 + * @param request + * @param response + * @return + */ + @GET + @Path("/getRemindData") + @Produces("text/plain;charset=utf-8") + public String getRemindData(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).getRemindData(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 提醒 + * @param request + * @param response + * @return + */ + @POST + @Path("/doRemind") + @Produces("text/plain;charset=utf-8") + public String requestRemind(@Context HttpServletRequest request, @Context HttpServletResponse response) { + saveDomainCache(request, response); + Map apidatas = new HashMap<>(); + + User user = RequestFormBiz.getFormUser(request, response, false); + RequestRemindService requestRemindService = (RequestRemindService) ServiceUtil.getService(RequestRemindServiceImpl.class, user); + + Map params = ParamUtil.request2Map(request); + String remindType = Util.null2String(params.get("remindTypes")); //提醒方式 + int requestId = Util.getIntValue(Util.null2String(params.get("requestId"))); + if(Strings.isNullOrEmpty(remindType)){ + return JSON.toJSONString(apidatas); + } + String[] remindTypeArr = remindType.split(","); + for(String t : remindTypeArr){ + if(RemindTypeEnum.SMS.getCode().equals(t)){ + apidatas = requestRemindService.remindBySMS(params); + } + if(RemindTypeEnum.EMAIL.getCode().equals(t)){ + apidatas = requestRemindService.remindByEmail(params); + } + if(RemindTypeEnum.WECHAT.getCode().equals(t)){ + apidatas = requestRemindService.remindByWeChat(params); + } + } + + RequestRemindBiz.updateRemindTypes("",requestId); + return JSON.toJSONString(apidatas); + } + + /** 判断当前流程状态 */ + @POST + @Path("/judgeRequestIsValid") + @Produces("text/plain;charset=utf-8") + public String judgeRequestIsValid(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).judgeRequestIsValid(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** 意见征询收回 */ + @POST + @Path("/doTakeBack") + @Produces("text/plain;charset=utf-8") + public String doTakeBack(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).takeBack(ParamUtil.request2Map(request)); + String openByDefaultBrowser = Util.null2String(request.getParameter("openByDefaultBrowser")); + if("1".equals(openByDefaultBrowser)){ + User user = RequestFormBiz.getFormUser(request, response, true); + String requestid = Util.null2String(request.getParameter("requestid")); + RequestListBiz.putRecord(user,requestid); + } + return JSON.toJSONString(apidatas); + } + + /** + * 获取自定义菜单设置 + **/ + @POST + @Path("/getCustomOperation") + @Produces("text/plain;charset=utf-8") + public String getCustomOperation(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).getCustomOperation(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 指定自定义动作 + **/ + @GET + @Path("/runCustomOperationAction") + @Produces("text/plain;charset=utf-8") + public String runCustomOperationAction(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).runCustomOperationAction(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 结束意见征询 + **/ + @POST + @Path("/doTakEnd") + @Produces("text/plain;charset=utf-8") + public String doTakEnd(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).doTakEnd(request, ParamUtil.request2Map(request)); + String openByDefaultBrowser = Util.null2String(request.getParameter("openByDefaultBrowser")); + if("1".equals(openByDefaultBrowser)){ + User user = RequestFormBiz.getFormUser(request, response, true); + String requestid = Util.null2String(request.getParameter("requestid")); + RequestListBiz.putRecord(user,requestid); + } + return JSON.toJSONString(apidatas); + } + + + /** + * 获取意见所有接收人 + **/ + @GET + @Path("/getLogAllReceiveUser") + @Produces("text/plain;charset=utf-8") + public String getLogAllReceiveUser(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getLogService(request, response).getLogAllReceiveUser(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + + /** + * 获取节点意见设置 + **/ + @GET + @Path("/getNodeSignSet") + @Produces("text/plain;charset=utf-8") + public String getNodeSignSet(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map reqParams = ParamUtil.request2Map(request); + reqParams.put("request", request); + + Map apidatas = getSignInputService(request, response).getNodeSignSet(reqParams); + return JSON.toJSONString(apidatas); + } + + /** + * 后台html转pdf + **/ + @GET + @Path("/getHtmlToPdf") + @Produces("text/plain;charset=utf-8") + public String gethtmltopdf(@Context HttpServletRequest request, @Context HttpServletResponse response) { +// response.setCharacterEncoding("utf-8"); + Map params = ParamUtil.request2Map(request); + Map apidatas = getHtmlToPdfService(request, response).getFormDatas(params); + return JSON.toJSONString(apidatas); + } + + /** + * 获取明细数据的keyid + **/ + @POST + @Path("/detailDataKeyId") + @Produces("text/plain;charset=utf-8") + public String getDetailDataKeyId(@Context HttpServletRequest request, @Context HttpServletResponse response) { +// response.setCharacterEncoding("utf-8"); + Map params = ParamUtil.request2Map(request); + Map apidatas = getFormService(request, response).getDetailDataKeyId(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + //获取套红预览地址 + @POST + @Path("/getThPreviewUrl") + @Produces("text/plain;charset=utf-8") + public String getThPreviewUrl(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = getFormService(request, response).getThPreviewUrl(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + //获取套红模板地址 + @POST + @Path("/getThMouldList") + @Produces("text/plain;charset=utf-8") + public String getThModuleList(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = getFormService(request, response).getThMouldList(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * Detail Export Settings + * 明细表导出设置。 + */ + @GET + @Path("/getDetailExpSet") + @Produces("text/plain;charset=utf-8") + public String getDetailExpSet(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = getFormService(request, response).getDetailExpSet(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + @POST + @Path("/saveDetailExpSet") + @Produces("text/plain;charset=utf-8") + public String saveDetailExpSet(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = getFormService(request, response).saveDetailExpSet(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 批量转发 + * @param request + * @param response + * @return + */ + @POST + @Path("/batchForward") + @Produces("text/plain;charset=utf-8") + public String batchForward(@Context HttpServletRequest request, @Context HttpServletResponse response){ + saveDomainCache(request, response); + User user = RequestFormBiz.getFormUser(request, response, false); + RequestBatchForwardBiz batchForwardBiz = new RequestBatchForwardBiz(); + WeaverRequest weaverRequest = new WeaverRequest(request); + weaverRequest.setSession(request.getSession()); + Map apidatas = batchForwardBiz.executeForward(weaverRequest,user); + return JSON.toJSONString(apidatas); + } + + /** + * 获取自动批准后的下一节点 + * @param request + * @param response + * @return + */ + @POST + @Path("/getNextNodeContent") + @Produces("text/plain;charset=utf-8") + public String getNextNodeContent(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = getFormService(request, response).getNextNodeContent(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + + /** + * 流程删除验证 + * @param request + * @param response + * @return + */ + @POST + @Path("/delRequestVerify") + @Produces("text/plain;charset=utf-8") + public String delRequestVerify(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = getFormService(request, response).delRequestVerify(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + + + /** + * 获取自由流程新建流程选择表单按钮 + * @param request + * @param response + * @return + */ + @GET + @Path("/getFreeNodeBrowserItem") + @Produces("text/plain;charset=utf-8") + public String getFreeNodeBrowserItem(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = getFormService(request, response).getFreeNodeBrowserItem(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 获取自由流程新建流程选择表单按钮 + * @param request + * @param response + * @return + */ + @POST + @Path("/saveFreeNodeFormConfig") + @Produces("text/plain;charset=utf-8") + public String saveFreeNodeFormConfig(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = getFormService(request, response).saveFreeNodeFormConfig(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + @POST + @Path("/conformCheck") + @Produces("text/plain;charset=utf-8") + public String conformCheck(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = getFormService(request, response).conformCheck(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + @POST + @Path("/getDetailByRequestId") + @Produces("text/plain;charset=utf-8") + public String getDetailByRequestId(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = getFormService(request, response).getDetailByRequestId(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + +}