千里聆简历收取功能开发

This commit is contained in:
dxfeng 2023-10-17 15:18:53 +08:00
parent 409688724d
commit efe7b8f511
10 changed files with 528 additions and 83 deletions

View File

@ -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=取消面试提醒
#\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

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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<String, Object> fullOriginalResumeId(Map<String, Object> 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;
}
}

View File

@ -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<String> 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);
}
}

View File

@ -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<Integer> platformIds;
platformIds = resumeJobDto.getPlatformIds();

View File

@ -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<String, Object> 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<String> fieldList = new ArrayList<>();
List<String> 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<ResumeInfoEducationExperienceDto> 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<Object> 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<ResumeInfoWorkExperienceDto> workExperience = resumeInfoDto.getWorkExperience();
for (ResumeInfoWorkExperienceDto workExperienceDto : workExperience) {
List<Object> 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<ResumeInfoProjectExperienceDto> projectExperience = resumeInfoDto.getProjectExperience();
for (ResumeInfoProjectExperienceDto projectExperienceDto : projectExperience) {
List<Object> 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<Integer> 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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}