From efe7b8f511fad28e4c885a122bf736e23716848e Mon Sep 17 00:00:00 2001 From: dxfeng Date: Tue, 17 Oct 2023 15:18:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=83=E9=87=8C=E8=81=86=E7=AE=80=E5=8E=86?= =?UTF-8?q?=E6=94=B6=E5=8F=96=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WEB-INF/prop/jclRecruit.properties | 14 +- .../engine/recruit/constant/ModeTable.java | 25 ++ .../recruit/enums/CommonBrowserTypeEnum.java | 38 ++++ .../recruit/enums/HighestDegreeEnum.java | 59 +++++ .../impl/ApplicantResumeServiceImpl.java | 80 +------ .../engine/recruit/util/RecruitFlowUtil.java | 24 ++ .../position/ReleasePositionModeExpand.java | 6 +- .../position/ResumeSavedThread.java | 214 ++++++++++++++++++ .../modeexpand/util/ApplicantCommonInfo.java | 40 ++++ .../modeexpand/util/RecruitModeUtil.java | 111 +++++++++ 10 files changed, 528 insertions(+), 83 deletions(-) create mode 100644 src/com/engine/recruit/constant/ModeTable.java create mode 100644 src/com/engine/recruit/enums/CommonBrowserTypeEnum.java create mode 100644 src/com/engine/recruit/enums/HighestDegreeEnum.java create mode 100644 src/weaver/formmode/recruit/modeexpand/position/ResumeSavedThread.java diff --git a/WEB-INF/prop/jclRecruit.properties b/WEB-INF/prop/jclRecruit.properties index 92a968d..ccb5d66 100644 --- a/WEB-INF/prop/jclRecruit.properties +++ b/WEB-INF/prop/jclRecruit.properties @@ -1,6 +1,10 @@ -#面试相关消息提醒,消息来源 +#\u9762\u8BD5\u76F8\u5173\u6D88\u606F\u63D0\u9192\uFF0C\u6D88\u606F\u6765\u6E90 INTERVIEW_MESSAGE_TYPE=85 -#添加面试消息提醒表弟 -INTERVIEW_ADD_MESSAGE_TITLE=面试安排提醒 -#取消面试消息提醒表弟 -INTERVIEW_CANCEL_MESSAGE_TITLE=取消面试提醒 \ No newline at end of file +#\u6DFB\u52A0\u9762\u8BD5\u6D88\u606F\u63D0\u9192\u8868\u5F1F +INTERVIEW_ADD_MESSAGE_TITLE=\u9762\u8BD5\u5B89\u6392\u63D0\u9192 +#\u53D6\u6D88\u9762\u8BD5\u6D88\u606F\u63D0\u9192\u8868\u5F1F +INTERVIEW_CANCEL_MESSAGE_TITLE=\u53D6\u6D88\u9762\u8BD5\u63D0\u9192 + + +#\u5E94\u8058\u8005\u7B80\u5386\u5B58\u653E\u76EE\u5F55ID +APPLICANTS_RESUMES_CATEGORY=110 \ No newline at end of file diff --git a/src/com/engine/recruit/constant/ModeTable.java b/src/com/engine/recruit/constant/ModeTable.java new file mode 100644 index 0000000..eb9dfe6 --- /dev/null +++ b/src/com/engine/recruit/constant/ModeTable.java @@ -0,0 +1,25 @@ +package com.engine.recruit.constant; + +/** + * @author:dxfeng + * @createTime: 2023/10/17 + * @version: 1.0 + */ +public class ModeTable { + /** + * JCL_应聘批次简历 + */ + public static final String UF_JCL_YPPC = "uf_jcl_yppc"; + + + /** + * 获取明细表表名 + * + * @param mainTableName 主表表名 + * @param detailNum 明细表序号 + * @return 明细表表名 + */ + public static String getDetailTableName(String mainTableName, int detailNum) { + return mainTableName + "_dt" + detailNum; + } +} diff --git a/src/com/engine/recruit/enums/CommonBrowserTypeEnum.java b/src/com/engine/recruit/enums/CommonBrowserTypeEnum.java new file mode 100644 index 0000000..7688da8 --- /dev/null +++ b/src/com/engine/recruit/enums/CommonBrowserTypeEnum.java @@ -0,0 +1,38 @@ +package com.engine.recruit.enums; + +/** + * @author:dxfeng + * @createTime: 2023/10/16 + * @version: 1.0 + */ +public enum CommonBrowserTypeEnum { + /** + * 聚才林招聘常用浏览按钮类型 + */ + GENDER("性别"), + RESUME_SOURCE("简历来源"), + RECRUITMENT_CHANNELS("招聘渠道"), + JOB_NATURE("职位性质"), + JOB_EDUCATION_REQUIREMENTS("职位学历要求"), + MARITAL_STATUS("婚姻状况"), + ON_JOB_STATUS("在职状态"), + RECRUITMENT_REASONS("招聘原因"), + YEARS_OF_WORK("工作年限"), + WORK_EXPERIENCE("工作经验"), + POLITICAL_LANDSCAPE("政治面貌"), + DEGREE("学位"); + + CommonBrowserTypeEnum(String desc) { + this.desc = desc; + } + + private String desc; + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } +} diff --git a/src/com/engine/recruit/enums/HighestDegreeEnum.java b/src/com/engine/recruit/enums/HighestDegreeEnum.java new file mode 100644 index 0000000..c49e8e9 --- /dev/null +++ b/src/com/engine/recruit/enums/HighestDegreeEnum.java @@ -0,0 +1,59 @@ +package com.engine.recruit.enums; + +/** + * 学历浏览按钮枚举类 + * + * @author:dxfeng + * @createTime: 2023/10/17 + * @version: 1.0 + */ +public enum HighestDegreeEnum { + /** + * 学历浏览按钮枚举类 + */ + OTHER(1, "其他"), + JUNIOR_MIDDLE_SCHOOL(2, "初中"), + HIGH_SCHOOL(2, "高中"), + SECONDARY_TECHNOLOGY(2, "中技"), + SECONDARY_SPECIALIZED_SCHOOL(2, "中专"), + JUNIOR_COLLEGE(2, "大专"), + UNDERGRADUATE(2, "本科"), + MASTER_DEGREE(2, "硕士研究生"), + DOCTORAL_STUDENTS(2, "博士研究生"), + MBA(2, "MBA"), + EMBA(2, "EMBA"), + POST_DOCTORAL(2, "博士后"); + + HighestDegreeEnum(Integer id, String name) { + this.id = id; + this.name = name; + } + + public static HighestDegreeEnum getDegreeId(String name) { + for (HighestDegreeEnum item : HighestDegreeEnum.values()) { + if (item.name.equalsIgnoreCase(name)) { + return item; + } + } + return HighestDegreeEnum.OTHER; + } + + private Integer id; + private String name; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/src/com/engine/recruit/service/impl/ApplicantResumeServiceImpl.java b/src/com/engine/recruit/service/impl/ApplicantResumeServiceImpl.java index 1d2c889..249957d 100644 --- a/src/com/engine/recruit/service/impl/ApplicantResumeServiceImpl.java +++ b/src/com/engine/recruit/service/impl/ApplicantResumeServiceImpl.java @@ -7,14 +7,8 @@ import com.engine.recruit.enums.ApplicationStatusEnum; import com.engine.recruit.service.ApplicantResumeService; import org.apache.commons.lang3.StringUtils; import weaver.conn.RecordSet; -import weaver.docs.docs.DocCoder; -import weaver.docs.docs.DocComInfo; -import weaver.docs.docs.DocImageManager; -import weaver.docs.docs.DocManager; -import weaver.file.ImageFileManager; -import weaver.general.TimeUtil; +import weaver.formmode.recruit.modeexpand.util.RecruitModeUtil; import weaver.general.Util; -import weaver.hrm.User; import weaver.hrm.resource.ResourceComInfo; import java.util.ArrayList; @@ -169,10 +163,10 @@ public class ApplicantResumeServiceImpl extends Service implements ApplicantResu public Map fullOriginalResumeId(Map params) { int imageFileId = Convert.toInt(params.get("imageFileId")); int resumeId = Convert.toInt(params.get("resumeId")); - int secCategory = Convert.toInt(params.get("secCategory")); + int secCategory = Convert.toInt(RecruitModeUtil.getRecruitPropValue("APPLICANTS_RESUMES_CATEGORY")); RecordSet rs = new RecordSet(); try { - int docId = createDocId(secCategory, imageFileId, user); + int docId = RecruitModeUtil.createDocId(secCategory, imageFileId, user); // 更新原始简历信息,设置应聘状态未待分配 rs.executeUpdate("update uf_jcl_yppc set ysjl=?,zt=? where id = ?", docId, 0, resumeId); @@ -274,72 +268,4 @@ public class ApplicantResumeServiceImpl extends Service implements ApplicantResu return browserMap; } - - /** - * 原始简历imageFieldId生成docId - * - * @param secCategory - * @param imageFieldId - * @param user - * @return - * @throws Exception - */ - public int createDocId(int secCategory, int imageFieldId, User user) throws Exception { - ImageFileManager manager = new ImageFileManager(); - manager.getImageFileInfoById(imageFieldId); - String filenameqc = manager.getImageFileName(); - String filenamebc = filenameqc.substring(0, filenameqc.lastIndexOf(".")); - RecordSet rs = new RecordSet(); - DocManager dm = new DocManager(); - DocImageManager imgManger = new DocImageManager(); - - imgManger.setDocfiletype("2"); - - int docId = dm.getNextDocId(rs); - imgManger.setDocid(docId); - imgManger.setImagefileid(imageFieldId); - imgManger.setImagefilename(filenameqc); - imgManger.setIsextfile("1"); - imgManger.AddDocImageInfo(); - - String date = TimeUtil.getCurrentDateString(); - String time = TimeUtil.getOnlyCurrentTimeString(); - dm.setId(docId); - dm.setMaincategory(0); - dm.setSubcategory(0); - dm.setSeccategory(secCategory); - dm.setLanguageid(user.getLanguage()); - - dm.setDocstatus("1"); - dm.setDocsubject(filenamebc); - 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(date); - dm.setDoclastmoddate(date); - dm.setDoccreatetime(time); - dm.setDoclastmodtime(time); - dm.setDoclangurage(user.getLanguage()); - dm.setKeyword(filenameqc); - dm.setIsapprover("0"); - dm.setIsreply(""); - dm.setDocdepartmentid(user.getUserDepartment()); - dm.setDocreplyable("1"); - dm.setAccessorycount(1); - dm.setParentids("" + docId); - dm.setUserid(user.getUID()); - DocCoder docCoder = new DocCoder(); - dm.setDocCode(docCoder.getDocCoder("" + secCategory)); - dm.setDocEditionId(dm.getNextEditionId(rs)); - dm.setDocEdition(1); - dm.AddDocInfo(); - dm.AddShareInfo(); - DocComInfo dc = new DocComInfo(); - dc.addDocInfoCache("" + docId); - return docId; - } } diff --git a/src/com/engine/recruit/util/RecruitFlowUtil.java b/src/com/engine/recruit/util/RecruitFlowUtil.java index 5eaed3e..0f91bbf 100644 --- a/src/com/engine/recruit/util/RecruitFlowUtil.java +++ b/src/com/engine/recruit/util/RecruitFlowUtil.java @@ -1,12 +1,18 @@ package com.engine.recruit.util; import com.engine.recruit.exception.CustomizeRunTimeException; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; import weaver.general.BaseBean; import java.net.URLDecoder; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * @author:dxfeng @@ -14,6 +20,8 @@ import java.util.Map; * @version: 1.0 */ public class RecruitFlowUtil { + private static final Pattern URL_REG = Pattern.compile("\\$(.*?)\\$"); + /** * 解析url中参数信息 @@ -52,6 +60,22 @@ public class RecruitFlowUtil { * @return */ public static String replaceURL(String urlString, String billId) { + Matcher matcher = URL_REG.matcher(urlString); + Set matches = new HashSet<>(); + while (matcher.find()) { + matches.add(matcher.group(1)); + } + matches.remove("parentid"); + if (CollectionUtils.isNotEmpty(matches)) { + String fields = StringUtils.join(matches, ","); + RecordSet rs = new RecordSet(); + rs.executeQuery("select " + fields + " from uf_jcl_yppc where id = ? ", billId); + if (rs.next()) { + for (String match : matches) { + urlString = urlString.replaceAll("\\$" + match + "\\$", rs.getString(match)); + } + } + } return urlString.replaceAll("\\$parentid\\$", billId); } } diff --git a/src/weaver/formmode/recruit/modeexpand/position/ReleasePositionModeExpand.java b/src/weaver/formmode/recruit/modeexpand/position/ReleasePositionModeExpand.java index 7ebdcd1..29b5d82 100644 --- a/src/weaver/formmode/recruit/modeexpand/position/ReleasePositionModeExpand.java +++ b/src/weaver/formmode/recruit/modeexpand/position/ReleasePositionModeExpand.java @@ -77,9 +77,13 @@ public class ReleasePositionModeExpand extends AbstractModeExpandJavaCodeNew { // 在启动监听前需要配置好简历接收回调 client.addResumeSavedListener(resumeMqMessage -> { - new BaseBean().writeLog(JSON.toJSONString(resumeMqMessage)); + // 处理获取到的简历信息 + new BaseBean().writeLog("【简历接收回调】:" + JSON.toJSONString(resumeMqMessage)); + Thread thread = new Thread(new ResumeSavedThread(resumeMqMessage)); + thread.start(); }); + client.start(); List platformIds; platformIds = resumeJobDto.getPlatformIds(); diff --git a/src/weaver/formmode/recruit/modeexpand/position/ResumeSavedThread.java b/src/weaver/formmode/recruit/modeexpand/position/ResumeSavedThread.java new file mode 100644 index 0000000..63002ac --- /dev/null +++ b/src/weaver/formmode/recruit/modeexpand/position/ResumeSavedThread.java @@ -0,0 +1,214 @@ +package weaver.formmode.recruit.modeexpand.position; + +import cn.hutool.core.convert.Convert; +import com.engine.recruit.constant.ModeTable; +import com.engine.recruit.enums.CommonBrowserTypeEnum; +import com.engine.recruit.enums.HighestDegreeEnum; +import com.weaver.rpa.sdk.clients.application.resume.ERPAResumeSDKClient; +import com.weaver.rpa.sdk.clients.core.ERPASDKClients; +import com.weaver.util.threadPool.entity.LocalRunnable; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import weaver.common.DateUtil; +import weaver.conn.RecordSet; +import weaver.erpa.apps.entity.application.resume.dto.*; +import weaver.formmode.recruit.modeexpand.util.ApplicantCommonInfo; +import weaver.formmode.recruit.modeexpand.util.RecruitModeUtil; +import weaver.hrm.User; + +import java.util.*; + + +/** + * @author:dxfeng + * @createTime: 2023/10/16 + * @version: 1.0 + */ +public class ResumeSavedThread extends LocalRunnable { + + private ResumeMqMessage resumeMqMessage; + private static final int SEC_CATEGORY = Convert.toInt(RecruitModeUtil.getRecruitPropValue("APPLICANTS_RESUMES_CATEGORY")); + + public ResumeSavedThread(ResumeMqMessage resumeMqMessage) { + this.resumeMqMessage = resumeMqMessage; + } + + @Override + public void execute() throws Exception { + parseResume(resumeMqMessage); + } + + /** + * 解析建立,并入库 + * + * @param resumeMqMessage + * @throws Exception + */ + private void parseResume(ResumeMqMessage resumeMqMessage) throws Exception { + String userId = resumeMqMessage.getUserId(); + User user = new User(); + if (StringUtils.isNotBlank(userId)) { + user.setUid(Convert.toInt(userId)); + } else { + user.setUid(1); + } + // 千里聆简历ID + Long resumeId = resumeMqMessage.getResumeId(); + + ResumeInfoDto resumeInfoDto = resumeMqMessage.getResumeInfoDto(); + Map params = new HashMap<>(); + // 姓名 + params.put("xm", resumeInfoDto.getName()); + // 性别 + params.put("xb", resumeInfoDto.getSex()); + // 年龄 + params.put("nl", resumeInfoDto.getAge()); + // 工作经验 + params.put("gzjy", getCommonBrowserKey(getExperienceText(resumeInfoDto.getExperience()), CommonBrowserTypeEnum.WORK_EXPERIENCE.getDesc())); + // 手机号码 + params.put("sjhm", resumeInfoDto.getPhone()); + // 电子邮箱 + params.put("dzyx", resumeInfoDto.getEmail()); + // 期望税前月薪 + params.put("qwsqyxk", resumeInfoDto.getExpectSalaryStart()); + // 最高学历 + params.put("zgxl", HighestDegreeEnum.getDegreeId(resumeInfoDto.getHighestDegree()).getId()); + // 原始简历 + params.put("ysjl", convertStreamToE9DocId(resumeMqMessage.getResumeInfoDto().getResumeFileId(), user)); + // 千里聆简历ID + params.put("qlljl", resumeId); + // 状态,指定待分配 + params.put("zt", "0"); + + // 填充建模数据基本信息 + int formModeId = ApplicantCommonInfo.getModeIdByTableName(ModeTable.UF_JCL_YPPC); + params.put("formmodeid", formModeId); + params.put("modedatacreater", user.getUID()); + String dateTime = DateUtil.getFullDate(); + String[] split = dateTime.split(" "); + params.put("modedatacreatedate", split[0]); + params.put("modedatacreatetime", split[1]); + params.put("modedatamodifier", user.getUID()); + params.put("modedatamodifydatetime", dateTime); + params.put("modedatacreatertype", "0"); + String uuid = UUID.randomUUID().toString(); + params.put("modeuuid", uuid); + // 插入主表 + RecordSet rs = new RecordSet(); + List fieldList = new ArrayList<>(); + List fieldValueList = new ArrayList<>(); + params.forEach((key, value) -> { + fieldList.add(key); + fieldValueList.add(RecruitModeUtil.parseBlankToNull(value)); + }); + rs.executeUpdate("insert into " + ModeTable.UF_JCL_YPPC + " (" + StringUtils.join(fieldList, ",") + ") values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); + Thread.sleep(1000); + int mainId = ApplicantCommonInfo.refreshRight(rs, uuid, ModeTable.UF_JCL_YPPC, formModeId); + + // 插入明细表数据 + List educationExperience = resumeInfoDto.getEducationExperience(); + String sql = "insert into " + ModeTable.getDetailTableName(ModeTable.UF_JCL_YPPC, 1) + " (mainId,xxmc,xl,zy,kssj,jssj) values (?,?,?,?,?,?) "; + for (ResumeInfoEducationExperienceDto educationExperienceDto : educationExperience) { + List data = new ArrayList<>(); + data.add(mainId); + data.add(educationExperienceDto.getSchoolName()); + data.add(HighestDegreeEnum.getDegreeId(educationExperienceDto.getDegree()).getId()); + data.add(educationExperienceDto.getMajor()); + data.add(DateUtil.getDate(educationExperienceDto.getBeginTime())); + data.add(DateUtil.getDate(educationExperienceDto.getEndTime())); + rs.executeUpdate(sql, data); + } + sql = "insert into " + ModeTable.getDetailTableName(ModeTable.UF_JCL_YPPC, 2) + " (mainId,gsmc,gw,gzzz,kssj,jssj) values (?,?,?,?,?,?) "; + List workExperience = resumeInfoDto.getWorkExperience(); + for (ResumeInfoWorkExperienceDto workExperienceDto : workExperience) { + List data = new ArrayList<>(); + data.add(mainId); + data.add(workExperienceDto.getCompanyName()); + data.add(workExperienceDto.getJobName()); + data.add(workExperienceDto.getContent()); + data.add(DateUtil.getDate(workExperienceDto.getBeginTime())); + data.add(DateUtil.getDate(workExperienceDto.getEndTime())); + rs.executeUpdate(sql, data); + } + sql = "insert into " + ModeTable.getDetailTableName(ModeTable.UF_JCL_YPPC, 3) + " (mainId,xmmc,xmms,kssj,jssj) values (?,?,?,?,?) "; + List projectExperience = resumeInfoDto.getProjectExperience(); + for (ResumeInfoProjectExperienceDto projectExperienceDto : projectExperience) { + List data = new ArrayList<>(); + data.add(mainId); + data.add(projectExperienceDto.getProjectName()); + data.add(projectExperienceDto.getContent()); + data.add(DateUtil.getDate(projectExperienceDto.getBeginTime())); + data.add(DateUtil.getDate(projectExperienceDto.getEndTime())); + rs.executeUpdate(sql, data); + } + } + + + private String getCommonBrowserKey(String value, String commonBrowserType) { + RecordSet rs = new RecordSet(); + rs.executeQuery("select id from uf_sjzd where zdlxmc = (select id from uf_zdlx where zdmc = ?) and xxnr =?", commonBrowserType, value); + if (rs.next()) { + return rs.getString("id"); + } + return ""; + } + + private String getExperienceText(Integer experience) { + String experienceText = "不限"; + switch (experience) { + case -1: + experienceText = "不限"; + break; + case 1: + experienceText = "1年以内"; + break; + case 2: + experienceText = "1-3年"; + break; + case 3: + experienceText = "3-5年"; + break; + case 5: + experienceText = "5-10年"; + break; + case 6: + experienceText = "10年以上"; + break; + default: + break; + } + return experienceText; + } + + /** + * 将文件流转换为文档ID + * + * @param resumeFileId + * @param user + * @return + */ + private String convertStreamToE9DocId(Long resumeFileId, User user) { + List docIdList = new ArrayList<>(); + ERPAResumeSDKClient client = ERPASDKClients.getResumeSDKClient(); + client.start(); + client.downloadResumeFile(resumeFileId, (fileName, stream) -> { + try { + int imageFileId = RecruitModeUtil.generateImageFileId(stream, fileName); + docIdList.add(RecruitModeUtil.createDocId(SEC_CATEGORY, imageFileId, user)); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + + return CollectionUtils.isNotEmpty(docIdList) ? Integer.toString(docIdList.get(0)) : ""; + } + + + public ResumeMqMessage getResumeMqMessage() { + return this.resumeMqMessage; + } + + public void setResumeMqMessage(ResumeMqMessage resumeMqMessage) { + this.resumeMqMessage = resumeMqMessage; + } +} diff --git a/src/weaver/formmode/recruit/modeexpand/util/ApplicantCommonInfo.java b/src/weaver/formmode/recruit/modeexpand/util/ApplicantCommonInfo.java index 366eaeb..c159607 100644 --- a/src/weaver/formmode/recruit/modeexpand/util/ApplicantCommonInfo.java +++ b/src/weaver/formmode/recruit/modeexpand/util/ApplicantCommonInfo.java @@ -2,6 +2,8 @@ package weaver.formmode.recruit.modeexpand.util; import org.apache.commons.lang3.StringUtils; import weaver.conn.RecordSet; +import weaver.formmode.setup.ModeRightInfo; +import weaver.general.Util; import java.util.ArrayList; import java.util.List; @@ -83,4 +85,42 @@ public class ApplicantCommonInfo { } return StringUtils.join(value, ","); } + + /** + * 根据建模表名,获取建模ID + * + * @param modeTable + * @return + */ + public static int getModeIdByTableName(String modeTable) { + int formModeId = -1; + RecordSet rs = new RecordSet(); + rs.executeQuery("select id from modeinfo where formid =( select id from workflow_bill where tablename = ? )", modeTable); + if (rs.next()) { + formModeId = rs.getInt("id"); + } + return formModeId; + } + + /** + * 建模表数据权限重构 + * + * @param rs + * @param uuid + * @param modeTable + * @param formModeId + */ + public static int refreshRight(RecordSet rs, String uuid, String modeTable, int formModeId) { + rs.executeQuery("select id from " + modeTable + " where modeuuid='" + uuid + "'"); + if (rs.next()) { + //建模数据的id + int bid = Util.getIntValue(rs.getString("id")); + ModeRightInfo modeRightInfo = new ModeRightInfo(); + modeRightInfo.setNewRight(true); + //新建的时候添加共享 + modeRightInfo.editModeDataShare(1, formModeId, bid); + return bid; + } + return -1; + } } diff --git a/src/weaver/formmode/recruit/modeexpand/util/RecruitModeUtil.java b/src/weaver/formmode/recruit/modeexpand/util/RecruitModeUtil.java index 687da4e..f193a90 100644 --- a/src/weaver/formmode/recruit/modeexpand/util/RecruitModeUtil.java +++ b/src/weaver/formmode/recruit/modeexpand/util/RecruitModeUtil.java @@ -4,11 +4,22 @@ import com.cloudstore.dev.api.bean.MessageBean; import com.cloudstore.dev.api.bean.MessageType; import com.cloudstore.dev.api.util.Util_Message; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.util.IOUtils; +import weaver.conn.RecordSet; +import weaver.docs.docs.DocCoder; +import weaver.docs.docs.DocComInfo; +import weaver.docs.docs.DocImageManager; +import weaver.docs.docs.DocManager; +import weaver.file.ImageFileManager; import weaver.general.BaseBean; +import weaver.general.TimeUtil; +import weaver.hrm.User; import weaver.hrm.resource.ResourceComInfo; +import java.io.BufferedInputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; +import java.util.Objects; import java.util.Set; /** @@ -75,4 +86,104 @@ public class RecruitModeUtil { return StringUtils.isBlank(str) ? null : str; } + /** + * 转换空字符串为null + * + * @param obj 对象 + * @return 转换后的字符串 + */ + public static String parseBlankToNull(Object obj) { + return Objects.isNull(obj) ? null : StringUtils.isBlank(obj.toString()) ? null : obj.toString(); + } + + + /** + * 生成附件ID + * + * @param inputStream + * @param filename + * @return + */ + public static int generateImageFileId(BufferedInputStream inputStream, String filename) { + int imageFileId; + try { + byte[] bytes = IOUtils.toByteArray(inputStream); + ImageFileManager ifm = new ImageFileManager(); + ifm.setData(bytes); + ifm.setImagFileName(filename); + imageFileId = ifm.saveImageFile(); + } catch (IOException e) { + throw new RuntimeException(e); + } + return imageFileId; + } + + /** + * 附件imageFieldId生成docId + * + * @param secCategory + * @param imageFieldId + * @param user + * @return + * @throws Exception + */ + public static int createDocId(int secCategory, int imageFieldId, User user) throws Exception { + ImageFileManager manager = new ImageFileManager(); + manager.getImageFileInfoById(imageFieldId); + String filenameqc = manager.getImageFileName(); + String filenamebc = filenameqc.substring(0, filenameqc.lastIndexOf(".")); + RecordSet rs = new RecordSet(); + DocManager dm = new DocManager(); + DocImageManager imgManger = new DocImageManager(); + + imgManger.setDocfiletype("2"); + + int docId = dm.getNextDocId(rs); + imgManger.setDocid(docId); + imgManger.setImagefileid(imageFieldId); + imgManger.setImagefilename(filenameqc); + imgManger.setIsextfile("1"); + imgManger.AddDocImageInfo(); + + String date = TimeUtil.getCurrentDateString(); + String time = TimeUtil.getOnlyCurrentTimeString(); + dm.setId(docId); + dm.setMaincategory(0); + dm.setSubcategory(0); + dm.setSeccategory(secCategory); + dm.setLanguageid(user.getLanguage()); + + dm.setDocstatus("1"); + dm.setDocsubject(filenamebc); + 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(date); + dm.setDoclastmoddate(date); + dm.setDoccreatetime(time); + dm.setDoclastmodtime(time); + dm.setDoclangurage(user.getLanguage()); + dm.setKeyword(filenameqc); + dm.setIsapprover("0"); + dm.setIsreply(""); + dm.setDocdepartmentid(user.getUserDepartment()); + dm.setDocreplyable("1"); + dm.setAccessorycount(1); + dm.setParentids("" + docId); + dm.setUserid(user.getUID()); + DocCoder docCoder = new DocCoder(); + dm.setDocCode(docCoder.getDocCoder("" + secCategory)); + dm.setDocEditionId(dm.getNextEditionId(rs)); + dm.setDocEdition(1); + dm.AddDocInfo(); + dm.AddShareInfo(); + DocComInfo dc = new DocComInfo(); + dc.addDocInfoCache("" + docId); + return docId; + } + }