编写示例代码
This commit is contained in:
@@ -0,0 +1,272 @@
|
||||
package com.seeyon.apps.src_receiveFVFlow.handler;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.seeyon.apps.src_receiveFVFlow.constans.ReceiveFVFlowConstans;
|
||||
import com.seeyon.apps.src_receiveFVFlow.org.OrgManagerDirectFacade;
|
||||
import com.seeyon.apps.src_receiveFVFlow.util.*;
|
||||
import com.seeyon.cap4.form.api.FormApi4Cap4;
|
||||
import com.seeyon.cap4.form.bean.FormBean;
|
||||
import com.seeyon.cap4.form.bean.FormFieldBean;
|
||||
import com.seeyon.cap4.form.bean.FormTableBean;
|
||||
import com.seeyon.ctp.common.AppContext;
|
||||
import com.seeyon.ctp.common.exceptions.BusinessException;
|
||||
import com.seeyon.ctp.organization.bo.V3xOrgDepartment;
|
||||
import com.seeyon.ctp.organization.bo.V3xOrgMember;
|
||||
import com.seeyon.ctp.organization.bo.V3xOrgPrincipal;
|
||||
import com.seeyon.ctp.organization.manager.OrgManager;
|
||||
import com.seeyon.v3x.services.form.bean.FormExport;
|
||||
import com.seeyon.v3x.services.form.bean.ValueExport;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class BatchTransferDemoHandler extends FlowDataSyncHandler{
|
||||
|
||||
@Autowired
|
||||
private OrgManager orgManager; //用于查询组织架构信息的api
|
||||
@Autowired
|
||||
private OrgManagerDirectFacade orgManagerDirect; //用于对组织架构信息进行crud的api
|
||||
private String updateLoginName = configProvider.getBizConfigByKey(ReceiveFVFlowConstans.updateLoginName);
|
||||
private String updateAccountName = configProvider.getBizConfigByKey(ReceiveFVFlowConstans.updateAccountName);
|
||||
|
||||
@Override
|
||||
public void process(Map source) throws Exception {
|
||||
Map map = buildParamsMap(source); //获取格式化后的参数
|
||||
//具体要执行的逻辑
|
||||
//获取格式化后的主表入参
|
||||
Map<String,Object> mainFormData = (Map<String, Object>) source.get("主表数据");
|
||||
mainFormData.get("json映射配置中字段对照键值对的值,如: 身份证号");
|
||||
//获取明细表数据
|
||||
List<Map<String,Object>> subFormDatas = (List<Map<String,Object>>) source.get("从表数据");
|
||||
//遍历每一个明细表
|
||||
for (Map<String, Object> subFormData : subFormDatas) {
|
||||
List<Map<String,Object>> subTableDatas = (List<Map<String, Object>>) subFormData.get("subTable1"); //获取某个明细表的多行数据
|
||||
//对多列数据进行遍历
|
||||
for (Map<String, Object> rowData : subTableDatas) {
|
||||
//获取某一行的某哥字段的值
|
||||
rowData.get("json映射配置中从表映射配置键值对的值,如: 父母离职日期");
|
||||
}
|
||||
}
|
||||
|
||||
//新增组织架构账号信息,步骤为获取参数,构建V3xOrgMember,构建V3xOrgPrincipal对象并进行赋值,最后调用orgManagerDirect.addMember方法完成人员账号的添加
|
||||
//从主表中获取数据
|
||||
String uName = (String) mainFormData.get("姓名") ;
|
||||
Long dept = getLong(mainFormData.get("部门")) ;
|
||||
Long orgLevel = getLong(mainFormData.get("职务级别"));
|
||||
Long unit = getLong(mainFormData.get("单位"));
|
||||
Long post = getLong(mainFormData.get("岗位"));
|
||||
String telNumber = (String)mainFormData.get("手机号");
|
||||
String loginAccount = (String)mainFormData.get("登录账号");
|
||||
String emNo = (String)mainFormData.get("员工编号");
|
||||
String pwd = (String)mainFormData.get("初始密码");
|
||||
//新建OA人员对象,根据登录名查询
|
||||
V3xOrgMember member = orgManager.getMemberByLoginName(loginAccount);
|
||||
if(member != null){
|
||||
mainFormData.put("姓名",member.getId());
|
||||
log.warn("该人员账号已存在 :" + uName + "_" + telNumber);
|
||||
return;
|
||||
}
|
||||
V3xOrgMember orgMember = new V3xOrgMember();
|
||||
orgMember.setState(1);
|
||||
orgMember.setOrgLevelId(orgLevel); //设置职务级别
|
||||
orgMember.setOrgDepartmentId(dept); //设置部门
|
||||
orgMember.setName(uName); //设置姓名
|
||||
orgMember.setOrgPostId(post); //设置岗位
|
||||
orgMember.setIdIfNew(); //设置ID
|
||||
orgMember.setEnabled(true); //设置是否启用
|
||||
orgMember.setTelNumber(telNumber); //设置手机号
|
||||
orgMember.setSortId(1L); //设置排序号
|
||||
orgMember.setCode(emNo); //设置员工编号
|
||||
orgMember.setIsValid(true); //设置是否有效
|
||||
orgMember.setOrgAccountId(unit); //设置单位
|
||||
V3xOrgPrincipal v3xOrgPrincipal = new V3xOrgPrincipal();
|
||||
v3xOrgPrincipal.setLoginName(loginAccount); //设置登录名
|
||||
v3xOrgPrincipal.setMemberId(orgMember.getId()); //设置人员ID
|
||||
v3xOrgPrincipal.setPassword(pwd); //设置密码
|
||||
orgMember.setV3xOrgPrincipal(v3xOrgPrincipal);
|
||||
orgManagerDirect.addMember(orgMember);
|
||||
mainFormData.put("姓名",orgMember.getId()); //将人员ID作为入参向后传递
|
||||
|
||||
//以下是修改组织架构信息的示例,步骤为获取参数,然后根据人员ID去查询,查询到后进行赋值,最后调用 orgManagerDirect.updateMember进行更新
|
||||
String uid = (String) mainFormData.get("姓名"); //人员ID
|
||||
Long dept2 = getLong(mainFormData.get("部门")) ;
|
||||
Long orgLevel2 = getLong(mainFormData.get("职务级别"));
|
||||
Long unit2 = getLong(mainFormData.get("单位"));
|
||||
Long post2 = getLong(mainFormData.get("岗位"));
|
||||
//根据人员ID获取账号信息
|
||||
V3xOrgMember member2 = orgManager.getMemberById(Long.parseLong(uid));
|
||||
if(member2 == null) {
|
||||
throw new RuntimeException("组织架构人员信息不存在");
|
||||
}
|
||||
member2.setOrgDepartmentId(dept);
|
||||
if(orgLevel != null) {
|
||||
member.setOrgLevelId(orgLevel);
|
||||
}
|
||||
member2.setOrgAccountId(unit);
|
||||
member2.setOrgPostId(post);
|
||||
orgManagerDirect.updateMember(member2);
|
||||
|
||||
//进行表单操作的api
|
||||
FormDataOperator formDataOperator = new FormDataOperator();
|
||||
//对某档案底表主表进行新增操作(客户服务平台主表数据对主数据表单主表数据)
|
||||
String formCode = (String) source.get("formNo"); //获取表单编码
|
||||
String loginName = getConfigProvider().getBizConfigByKey(ReceiveFVFlowConstans.formDataLoginName);
|
||||
//塞入一个冗余值为了之后处理附件
|
||||
mainFormData.put("泛微请求ID",source.get("泛微请求ID"));
|
||||
//实例化FormExport对象
|
||||
FormExport formExport = new FormExport();
|
||||
//实例化 FormExportUtil对象
|
||||
FormExportUtil formExportUtil = new FormExportUtil();
|
||||
//设置主表数据,参数必须是Map<String, Object> 类型的键值对,key为主数据表单显示名称
|
||||
List<ValueExport> valueExport = formExportUtil.setFormValue(mainFormData);
|
||||
formExport.setValues(valueExport);
|
||||
//设置明细表数据
|
||||
formExport.setSubordinateForms(formExportUtil.setAllSubordinateFormValue(subFormDatas));
|
||||
//从主表中获取显示名称与附件地址的键值对
|
||||
Map<String, List<Object>> mainFormTableAttachments = formDataOperator.getMainFormTableAttachments(formCode,mainFormData);
|
||||
//新增档案表数据
|
||||
getFormFactory().importBusinessFormData(loginName, formCode,
|
||||
formExport, new String[] {});
|
||||
//处理附件,思路就是先新增档案表记录,然后想办法获取倒新增的记录的id,然后根据id去更新附件引用
|
||||
bindAttachmentInfo(mainFormTableAttachments,formCode,(String)source.get("泛微请求ID"));
|
||||
|
||||
//更新档案表单操作;
|
||||
//实例化更新字段数组
|
||||
List<FormUpdateField> updateFields = new ArrayList<>();
|
||||
//前置处理枚举值
|
||||
formDataOperator.handleEnumDeptEtc(mainFormData,formCode);
|
||||
//对要更新的字段赋值并加入到数组中
|
||||
updateFields.add(FormUpdateField.build().value(mainFormData.get("部门")).display("部门"));
|
||||
updateFields.add(FormUpdateField.build().value(mainFormData.get("岗位")).display("岗位"));
|
||||
updateFields.add(FormUpdateField.build().value(mainFormData.get("单位")).display("单位"));
|
||||
updateFields.add(FormUpdateField.build().value(mainFormData.get("服务客户")).display("服务客户"));
|
||||
updateFields.add(FormUpdateField.build().value(mainFormData.get("所属区域")).display("所属区域"));
|
||||
if(mainFormData.get("职务级别") != null) {
|
||||
updateFields.add(FormUpdateField.build().value(mainFormData.get("职务级别")).display("职务级别"));
|
||||
}
|
||||
//实例化条件匹配字段数组
|
||||
List<FormWhereCondition> whereClause = new ArrayList<>();
|
||||
//对要匹配的字段赋值并加入到数组中
|
||||
whereClause.add(FormWhereCondition.build().value(mainFormData.get("姓名")).display("姓名"));
|
||||
//调用api方法进行更新操作
|
||||
formDataOperator.updateMasterForm(formCode, updateFields, whereClause);
|
||||
//如果明细表需要插入什么数据的话
|
||||
//获取第一个明细表的数据
|
||||
Map<String, Object> subDataMap = subFormDatas.get(0);
|
||||
//获取到明细表表名
|
||||
String subTableName = subDataMap.keySet().iterator().next();
|
||||
//查询主表记录获取ID
|
||||
List<FormColumn> formColumns = formDataOperator.queryFormDataCondition(formCode, null, whereClause);
|
||||
if(formColumns != null && formColumns.size() > 0) {
|
||||
formDataOperator.addSubTableRecord(subTableName,(List<Object>)subDataMap.get(subTableName),formCode,formColumns.get(0).getId());
|
||||
}
|
||||
|
||||
|
||||
//关于档案表再新增时要判断数据是否存在的示例
|
||||
|
||||
//先根据身份证号查询是否已有
|
||||
List<FormWhereCondition> condiitonVo = new ArrayList<>();
|
||||
//构建查询条件
|
||||
condiitonVo.add(FormWhereCondition.build().display("身份证号码").value(mainFormData.get("身份证号码")));
|
||||
mainFormData.put("员工状态","试用");
|
||||
//转换主表
|
||||
formDataOperator.handleEnumDeptEtc(mainFormData,formCode);
|
||||
//转换明细表的枚举
|
||||
for (Map<String, Object> subFormData : subFormDatas) {
|
||||
formDataOperator.handleSubTableEnumDeptEtc(subFormData,formCode);
|
||||
}
|
||||
//查询
|
||||
List<FormColumn> formColumns2 = formDataOperator.queryFormDataCondition(formCode, null,condiitonVo);
|
||||
//如果已存在记录则进行更新
|
||||
if(formColumns2 != null && formColumns2.size() > 0) {
|
||||
List<FormUpdateField> updateFields2 = new ArrayList<>();
|
||||
FormColumn formColumn = formColumns2.get(0);
|
||||
String formId = formColumn.getId();
|
||||
FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4");
|
||||
FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formCode);
|
||||
FormTableBean masterTableBean = cap4FormBean.getMasterTableBean();
|
||||
mainFormData.put("业代人员岗位",null);
|
||||
//对入参主表数据进行遍历并填入到更新字段数组中
|
||||
for (String key : mainFormData.keySet()) {
|
||||
FormFieldBean beanByDisplay = masterTableBean.getFieldBeanByDisplay(key);
|
||||
if(beanByDisplay == null) {
|
||||
continue;
|
||||
}
|
||||
if(beanByDisplay.getInputType().equals("image") || beanByDisplay.getInputType().equals("attachment")) {
|
||||
try {
|
||||
List<Object> attachments = (List<Object>) mainFormData.get(key);
|
||||
//处理附件操作
|
||||
String refId = FileUtils.uploadFilesToOA(attachments, formId, updateLoginName, updateAccountName);
|
||||
if(refId == null) {
|
||||
continue;
|
||||
}
|
||||
updateFields2.add(FormUpdateField.build().value(refId).display(key));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
log.error("写入附件信息失败,"+e.getMessage());
|
||||
}
|
||||
}else {
|
||||
updateFields2.add(FormUpdateField.build().value(mainFormData.get(key)).display(key));
|
||||
}
|
||||
}
|
||||
List<FormWhereCondition> whereClause3 = new ArrayList<>();
|
||||
whereClause3.add(FormWhereCondition.build().display("ID").value(Long.parseLong(formId)));
|
||||
//更新操作
|
||||
formDataOperator.updateMasterForm(formCode,updateFields2,whereClause3);
|
||||
//追加从表数据(如在人员档案明细表中追加记录)
|
||||
Map<String, Object> subDataMap3 = subFormDatas.get(0);
|
||||
String subTableName3 = subDataMap3.keySet().iterator().next();
|
||||
if(formColumns != null) {
|
||||
formDataOperator.addSubTableRecord(subTableName3,(List<Object>)subDataMap3.get(subTableName),formCode,formId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Map buildParamsMap(Map source) throws BusinessException {
|
||||
Map<String,String> resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode(getFormCode()); //拿客户服务平台表名去查询字段映射json配置
|
||||
Map<String,Object> templateMap = JSONObject.parseObject(resMap.get("templateJson"),Map.class); //通过json配置格式化入参
|
||||
Map<String,Object> formatMap = WeaverJsonUtils.getDisplayMap(source,templateMap);
|
||||
String formNo = resMap.get("formCode"); //要操纵的主数据表单的调单编码
|
||||
formatMap.put("formNo",formNo);
|
||||
return formatMap;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getFormCode() {
|
||||
return "要映射处理的客户服务平台数据库表名";
|
||||
}
|
||||
|
||||
private void bindAttachmentInfo(Map<String, List<Object>> mainFormTableAttachments,String formNo,String requestId) {
|
||||
FormDataOperator formDataOperator = new FormDataOperator();
|
||||
List<FormWhereCondition> condiitonVo = new ArrayList<>();
|
||||
List<FormUpdateField> updateFields = new ArrayList<>();
|
||||
//根据之前设置的冗余值来查询新增后的记录
|
||||
condiitonVo.add(FormWhereCondition.build().display("泛微请求ID").value(requestId));
|
||||
try {
|
||||
List<FormColumn> formColumns = formDataOperator.queryFormDataCondition(formNo, null, condiitonVo);
|
||||
if(formColumns == null || formColumns.size() == 0 ){
|
||||
throw new RuntimeException("未查询到员工档案记录");
|
||||
}
|
||||
String formId = formColumns.get(0).getId();
|
||||
for (String fieldDisplay : mainFormTableAttachments.keySet()) {
|
||||
List<Object> attachments = mainFormTableAttachments.get(fieldDisplay);
|
||||
if(attachments == null || attachments.size() == 0) {
|
||||
continue;
|
||||
}
|
||||
String refId = FileUtils.uploadFilesToOA(attachments,formId,updateLoginName,updateAccountName);
|
||||
if(refId == null) {
|
||||
continue;
|
||||
}
|
||||
updateFields.add(FormUpdateField.build().value(refId).display(fieldDisplay));
|
||||
}
|
||||
List<FormWhereCondition> whereClause = new ArrayList<>();
|
||||
whereClause.add(FormWhereCondition.build().display("ID").value(Long.parseLong(formId)));
|
||||
formDataOperator.updateMasterForm(formNo,updateFields,whereClause);
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(),e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14,7 +14,9 @@ import java.util.Map;
|
||||
|
||||
public abstract class FlowDataSyncHandler {
|
||||
protected Log log = Log.get(FlowDataSyncHandler.class);
|
||||
public abstract boolean support(String flowName);
|
||||
public boolean support(String flowName){
|
||||
return getFormCode().equals(flowName);
|
||||
}
|
||||
public abstract void process(Map source) throws Exception;
|
||||
protected abstract Map buildParamsMap(Map source) throws BusinessException;
|
||||
protected RfvfPluginConfigProvider configProvider = (RfvfPluginConfigProvider) AppContext.getBean("rfvfPluginConfigProvider");
|
||||
|
||||
@@ -21,6 +21,13 @@ import java.util.stream.Collectors;
|
||||
|
||||
public class FormDataOperator {
|
||||
|
||||
/**
|
||||
* 更新主表数据
|
||||
* @param formNo 主表表单编码
|
||||
* @param updateFieldVos 要更新的字段数组
|
||||
* @param conditionVos 用于匹配的条件数组
|
||||
* @throws BusinessException
|
||||
*/
|
||||
public void updateMasterForm(String formNo, List<FormUpdateField> updateFieldVos, List<FormWhereCondition> conditionVos) throws BusinessException {
|
||||
FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4");
|
||||
FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo);
|
||||
@@ -61,7 +68,14 @@ public class FormDataOperator {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 根据条件查询主表数据
|
||||
* @param formNo 主表表单编码
|
||||
* @param queryColumnVos 查询要返回的字段数组
|
||||
* @param conditionVos 匹配条件数组
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
public List<FormColumn> queryFormDataCondition(String formNo, List<String> queryColumnVos, List<FormWhereCondition> conditionVos) throws Exception {
|
||||
FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4");
|
||||
FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo);
|
||||
@@ -245,6 +259,13 @@ public class FormDataOperator {
|
||||
return attachmentTempMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 插入明细表数据
|
||||
* @param subTableName
|
||||
* @param data
|
||||
* @param formNo
|
||||
* @param formId
|
||||
*/
|
||||
public void addSubTableRecord(String subTableName,List<Object> data,String formNo,String formId) {
|
||||
JDBCAgent agent = new JDBCAgent();
|
||||
try {
|
||||
@@ -279,6 +300,13 @@ public class FormDataOperator {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 清空旧的明细表数据并构建新的后插入
|
||||
* @param subTableName
|
||||
* @param data
|
||||
* @param formNo
|
||||
* @param formId
|
||||
*/
|
||||
public void rebuildSubTableRecord(String subTableName,List<Object> data,String formNo,String formId) {
|
||||
String deleteSql = "delete from " + subTableName + " where formmain_id = ? ";
|
||||
JDBCAgent agent = new JDBCAgent();
|
||||
@@ -315,6 +343,12 @@ public class FormDataOperator {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理主表枚举类型的参数
|
||||
* @param map
|
||||
* @param formNo
|
||||
* @throws BusinessException
|
||||
*/
|
||||
public void handleEnumDeptEtc(Map<String,Object> map,String formNo) throws BusinessException {
|
||||
FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4");
|
||||
FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo);
|
||||
@@ -344,6 +378,12 @@ public class FormDataOperator {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理明细表枚举类型的参数
|
||||
* @param map
|
||||
* @param formNo
|
||||
* @throws BusinessException
|
||||
*/
|
||||
public void handleSubTableEnumDeptEtc(Map<String,Object> map,String formNo) throws BusinessException {
|
||||
FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4");
|
||||
FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo);
|
||||
@@ -385,6 +425,12 @@ public class FormDataOperator {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否是主表的文件
|
||||
* @param displayName
|
||||
* @param formNo
|
||||
* @return
|
||||
*/
|
||||
public boolean isMasterTableFile(String displayName,String formNo) {
|
||||
FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4");
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user