diff --git a/src/weaver/interfaces/gsjrkg/action/SyncCertificateAction.java b/src/weaver/interfaces/gsjrkg/action/SyncCertificateAction.java new file mode 100644 index 0000000..42ba2de --- /dev/null +++ b/src/weaver/interfaces/gsjrkg/action/SyncCertificateAction.java @@ -0,0 +1,135 @@ +package weaver.interfaces.gsjrkg.action; + +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.interfaces.workflow.action.Action; +import weaver.soa.workflow.request.MainTableInfo; +import weaver.soa.workflow.request.Property; +import weaver.soa.workflow.request.RequestInfo; + +import java.util.*; + +/** + * @Description: 同步证书到人员卡片个人信息 + * @author:dxfeng + * @createTime: 2023/02/20 + * @version: 1.0 + */ +public class SyncCertificateAction implements Action { + /** + * 建模表表名 + */ + private String modeTableName; + + /** + * 参数名称:建模表字段名:人员表字段名 + */ + private String params; + + private String resourceFieldGroup; + + @Override + public String execute(RequestInfo requestInfo) { + if (StringUtils.isBlank(params)) { + requestInfo.getRequestManager().setMessagecontent("自定义接口参数值配置错误"); + return Action.FAILURE_AND_CONTINUE; + } + if (StringUtils.isBlank(resourceFieldGroup)) { + // -1:基本信息,1:个人信息,3:工作信息 + resourceFieldGroup = "1"; + } + Map fieldMap = new HashMap<>(); + String[] fieldsArray = params.split(";"); + for (String fields : fieldsArray) { + String[] field = fields.split(":"); + if (field.length == 2) { + fieldMap.put(field[0], field[1]); + } + } + if (fieldMap.size() != fieldsArray.length) { + requestInfo.getRequestManager().setMessagecontent("自定义接口参数值格式错误,请检查"); + return Action.FAILURE_AND_CONTINUE; + } + Set modeFields = fieldMap.keySet(); + Map> modeMap = new HashMap<>(); + + RecordSet rs = new RecordSet(); + String resourceId = ""; + MainTableInfo mainTableInfo = requestInfo.getMainTableInfo(); + Property[] property = mainTableInfo.getProperty(); + for (Property item : property) { + String name = item.getName(); + String value = Util.null2String(item.getValue()); + if (StringUtils.isNotBlank(name) && StringUtils.isNotBlank(value)) { + if ("xm".equals(name)) { + resourceId = value; + } + } + } + // 查询当前人员的所有数据 + StringBuilder sqlBuilder = new StringBuilder("select ").append(StringUtils.join(modeFields, ",")).append(" from ").append(modeTableName).append(" where xm = ").append(resourceId).append(" order by id"); + rs.executeQuery(sqlBuilder.toString()); + while (rs.next()) { + appendIds(modeFields, rs, modeMap); + } + // 判断有无数据,没有的话插入数据 + sqlBuilder = new StringBuilder("SELECT id FROM CUS_FIELDDATA where scope ='HrmCustomFieldByInfoType' and scopeid = '").append(resourceFieldGroup).append("' and id =? "); + rs.executeQuery(sqlBuilder.toString(), resourceId); + if (!rs.next()) { + // 插入人员信息数据 + rs.executeUpdate("insert into cus_fielddata (scope,scopeid,id) values ('HrmCustomFieldByInfoType','" + resourceFieldGroup + "',?)", resourceId); + } + // 组装更新SQL语句 + sqlBuilder = new StringBuilder("update cus_fielddata set "); + for (Map.Entry entry : fieldMap.entrySet()) { + Set valueSet = modeMap.get(entry.getKey()); + String values = CollectionUtils.isEmpty(valueSet) ? "" : StringUtils.join(valueSet, ","); + sqlBuilder.append(" ").append(entry.getValue()).append(" = '").append(values).append("',"); + } + sqlBuilder.deleteCharAt(sqlBuilder.length() - 1); + sqlBuilder.append(" where scope ='HrmCustomFieldByInfoType' and scopeid = ").append(resourceFieldGroup).append(" and id = ").append(resourceId); + rs.executeUpdate(sqlBuilder.toString()); + + return Action.SUCCESS; + } + + + private void appendIds(Set modeFields, RecordSet rs, Map> modeMap) { + for (String modeField : modeFields) { + String ids = rs.getString(modeField); + if (StringUtils.isBlank(ids)) { + return; + } + if (CollectionUtils.isEmpty(modeMap.get(modeField))) { + modeMap.put(modeField, new HashSet<>()); + } + modeMap.get(modeField).addAll(Arrays.asList(ids.split(","))); + } + } + + public String getParams() { + return params; + } + + public void setParams(String params) { + this.params = params; + } + + public String getModeTableName() { + return modeTableName; + } + + public void setModeTableName(String modeTableName) { + this.modeTableName = modeTableName; + } + + public String getResourceFieldGroup() { + return resourceFieldGroup; + } + + public void setResourceFieldGroup(String resourceFieldGroup) { + this.resourceFieldGroup = resourceFieldGroup; + } +}