diff --git a/src/com/api/fssecond/web/EleEctronVoucherAction.java b/src/com/api/fssecond/web/EleEctronVoucherAction.java new file mode 100644 index 0000000..4cdba03 --- /dev/null +++ b/src/com/api/fssecond/web/EleEctronVoucherAction.java @@ -0,0 +1,13 @@ +package com.api.fssecond.web; + +import javax.ws.rs.Path; + +/** + * @Author liang.cheng + * @Date 2025/4/9 14:46 + * @Description: 获取电子凭证 + * @Version 1.0 + */ +@Path("/fssecond/workflow") +public class EleEctronVoucherAction extends com.engine.fssecond.web.EleEctronVoucherAction { +} diff --git a/src/com/engine/fssecond/entity/GenerateDocParams.java b/src/com/engine/fssecond/entity/GenerateDocParams.java new file mode 100644 index 0000000..e5534c9 --- /dev/null +++ b/src/com/engine/fssecond/entity/GenerateDocParams.java @@ -0,0 +1,40 @@ +package com.engine.fssecond.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class GenerateDocParams { + + private int imageFileid; + + private String fileName; + + private String docContent; + + private String workflowid; + + private int creater; + + private String docCreateDate; + + private String docCreateTime; + + private int maincategory; + + private int subcategory; + + private int seccategory; + + private int docType; + + private String docExtendname; + + private String clientAddress; +} diff --git a/src/com/engine/fssecond/service/EleEctronVoucherService.java b/src/com/engine/fssecond/service/EleEctronVoucherService.java new file mode 100644 index 0000000..59aef3a --- /dev/null +++ b/src/com/engine/fssecond/service/EleEctronVoucherService.java @@ -0,0 +1,15 @@ +package com.engine.fssecond.service; + +import java.util.Map; + +/** + * @Author liang.cheng + * @Date 2025/4/9 14:46 + * @Description: + * @Version 1.0 + */ +public interface EleEctronVoucherService { + + + Map generateFile(Map params); +} diff --git a/src/com/engine/fssecond/service/impl/EleEctronVoucherServiceImpl.java b/src/com/engine/fssecond/service/impl/EleEctronVoucherServiceImpl.java new file mode 100644 index 0000000..525946e --- /dev/null +++ b/src/com/engine/fssecond/service/impl/EleEctronVoucherServiceImpl.java @@ -0,0 +1,228 @@ +package com.engine.fssecond.service.impl; + + +import com.api.formmode.page.util.Util; +import com.engine.core.impl.Service; +import com.engine.fssecond.entity.GenerateDocParams; +import com.engine.fssecond.service.EleEctronVoucherService; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.weaver.general.TimeUtil; +import weaver.conn.RecordSet; +import weaver.docs.category.SecCategoryComInfo; +import weaver.docs.docs.DocComInfo; +import weaver.docs.docs.DocImageManager; +import weaver.docs.docs.DocManager; +import weaver.docs.docs.DocViewer; +import weaver.file.ImageFileManager; +import weaver.hrm.User; +import weaver.workflow.request.RequestDoc; + +import java.io.*; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +/** + * @Author liang.cheng + * @Date 2025/4/9 14:47 + * @Description: TODO + * @Version 1.0 + */ +public class EleEctronVoucherServiceImpl extends Service implements EleEctronVoucherService { + + + @Override + public Map generateFile(Map params) { + + String billId = Util.null2String(params.get("billId")); + String host = Util.null2String(params.get("host")); + String maincategory = Util.null2String(params.get("maincategory")); + String subcategory = Util.null2String(params.get("subcategory")); + String seccategory = Util.null2String(params.get("seccategory")); + String workflowid = Util.null2String(params.get("workflowid")); + + Map fileMap = new HashMap<>(2); + String apiUrl = host + "/uapws/rest/gl/voucherout/voucheroutpdf"; + + String fileName = "凭证" + billId + ".pdf"; + + // 1. 发送 POST 请求,获取 InputStream + try (HttpResponse response = HttpRequest.post(apiUrl) + .header("Content-Type", "application/json") + .body("{\"billId\": \"" + billId + "\"}") + .execute()) { + + // 2. 检查响应状态码 + if (response.isOk()) { + + InputStream inputStream = response.bodyStream(); + //附件生成 + int imageFileid = generateImageFileid(inputStream, fileName); + GenerateDocParams generateDocParams = GenerateDocParams.builder() + .imageFileid(imageFileid) + .fileName(fileName) + .creater(user.getUID()) + .docCreateDate(TimeUtil.getCurrentDateString()) + .docCreateTime(TimeUtil.getOnlyCurrentTimeString()) + .maincategory(Integer.parseInt(maincategory)) + .subcategory(Integer.parseInt(subcategory)) + .seccategory(Integer.parseInt(seccategory)) + .docType(1) + .docExtendname(".pdf") + .build(); + + fileMap.put("imageFileid", imageFileid); + fileMap.put("fileName", fileName); + + int docId = generateDocId(user, generateDocParams); + fileMap.put("docId", docId); + + } else { + fileMap.put("msg","接口调用失败 ->"+response.toString()); + } + + } catch (Exception e) { + e.printStackTrace(); + } + return fileMap; + } + + + private int generateImageFileid(InputStream inputStream, String filename) { + int imagefileid = -1; + try { + ByteArrayOutputStream bos = null; + byte[] data = null; + try { + byte[] buffer = new byte[1024]; + int len = 0; + bos = new ByteArrayOutputStream(); + while ((len = inputStream.read(buffer)) != -1) { + bos.write(buffer, 0, len); + } + data = bos.toByteArray(); + bos.flush(); + } catch (Exception e) { + } finally { + if (bos != null) { + try { + bos.close(); + } catch (Exception e) { + } + } + try { + inputStream.close(); + } catch (Exception e) { + } + } + + if (data == null || data.length == 0) { + return -2; + } + ImageFileManager ifm = new ImageFileManager(); + ifm.setData(data); + + ifm.setImagFileName(filename); + imagefileid = ifm.saveImageFile();// 文件存储及更新imagefile表 + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + inputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return imagefileid; + } + + private int generateDocId(User user, GenerateDocParams gdp){ + + DocManager dm = new DocManager(); + DocImageManager imgManger = new DocImageManager(); + SecCategoryComInfo scc = new SecCategoryComInfo(); + DocComInfo dc = new DocComInfo(); + DocViewer dv = new DocViewer(); + + try { + RecordSet rs = new RecordSet(); + int docId = dm.getNextDocId(rs); + String filename = gdp.getFileName(); + imgManger.resetParameter(); + String docSubject = getFileMainName(filename); + imgManger.setImagefilename(filename); + imgManger.setDocfiletype(weaver.general.Util.null2String(gdp.getDocType())); + imgManger.setDocid(docId); + imgManger.setImagefileid(gdp.getImageFileid()); + imgManger.setIsextfile("1");//1附件 + imgManger.AddDocImageInfo(); + imgManger.setOperateuserid(1); //默认管理员 + imgManger.setDocfiletype("2"); + + int workflowid= weaver.general.Util.getIntValue(gdp.getWorkflowid(),0); + String isWorkflowDraft = "0"; + if(workflowid > 0){ + RequestDoc requestDoc=new RequestDoc(); + ArrayList docFiledList = requestDoc.getDocFiled(""+workflowid); + if(docFiledList != null && docFiledList.size() > 6){ + isWorkflowDraft = "" +docFiledList.get(6); + } + } + String docStatus = "1"; //生效正常 + if("1".equals(isWorkflowDraft)){ + docStatus = "9"; //流程草稿 + } + + dm.setId(docId); + dm.setMaincategory(gdp.getMaincategory()); + dm.setSubcategory(gdp.getSubcategory()); + dm.setSeccategory(gdp.getSeccategory()); + dm.setLanguageid(user.getLanguage()); + dm.setDoccontent(weaver.general.Util.null2String(gdp.getDocContent())); + dm.setDocstatus(docStatus); + dm.setDocsubject(docSubject); + dm.setDoccreaterid(user.getUID()); + dm.setDocCreaterType(user.getLogintype()); + dm.setUsertype(user.getLogintype()); + dm.setOwnerid(user.getUID()); + dm.setOwnerType(user.getLogintype()); + dm.setDoclastmoduserid(user.getUID()); + dm.setDocLastModUserType(user.getLogintype()); + dm.setDoccreatedate(gdp.getDocCreateDate()); + dm.setDoclastmoddate(gdp.getDocCreateDate()); + dm.setDoccreatetime(gdp.getDocCreateTime()); + dm.setDoclastmodtime(gdp.getDocCreateTime()); + dm.setDoclangurage(user.getLanguage()); + dm.setKeyword(docSubject); + dm.setIsapprover("0"); //批复意见 + dm.setIsreply(""); //是否回复文档 + dm.setDocdepartmentid(user.getUserDepartment()); + dm.setDocreplyable("1"); //是否可回复 + dm.setAccessorycount(1); //附件总数 + dm.setParentids("" + docId); //文档父节点 + dm.setOrderable("" + scc.getSecOrderable(gdp.getSeccategory())); //得到此分录下文是否可订阅 + dm.setClientAddress(gdp.getClientAddress()); + dm.setUserid(user.getUID()); + dm.AddDocInfo(); + dm.AddShareInfo(); + dc.addDocInfoCache("" + docId); + dv.setDocShareByDoc("" + docId); + return docId; + }catch (Exception ex) { + return -1; + } + } + + private String getFileMainName(String fileName) { + if (fileName == null){ + return ""; + } + int pos = fileName.lastIndexOf("."); + if (pos != -1) { + fileName = fileName.substring(0, pos); + } + return fileName; + } +} diff --git a/src/com/engine/fssecond/web/EleEctronVoucherAction.java b/src/com/engine/fssecond/web/EleEctronVoucherAction.java new file mode 100644 index 0000000..d4c1984 --- /dev/null +++ b/src/com/engine/fssecond/web/EleEctronVoucherAction.java @@ -0,0 +1,51 @@ +package com.engine.fssecond.web; + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.fssecond.service.EleEctronVoucherService; +import com.engine.fssecond.service.impl.EleEctronVoucherServiceImpl; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +/** + * @Author liang.cheng + * @Date 2025/4/9 14:46 + * @Description: + * @Version 1.0 + */ +public class EleEctronVoucherAction { + + private EleEctronVoucherService getService(User user) { + return ServiceUtil.getService(EleEctronVoucherServiceImpl.class, user); + } + + + @GET + @Path("/generateFile") + @Produces(MediaType.TEXT_PLAIN) + public String generateFile(@Context HttpServletRequest request, @Context HttpServletResponse response, + @QueryParam("billId") String billId,@QueryParam("host") String host){ + Map data = new HashMap<>(8); + try { + User user = HrmUserVarify.getUser(request, response); + Map params = ParamUtil.request2Map(request); + data.putAll(getService(user).generateFile(params)); + } catch (Exception e) { + data.put("msg", "catch exception : " + e.getMessage()); + } + return JSONObject.toJSONString(data, SerializerFeature.DisableCircularReferenceDetect); + } +}