diff --git a/src/com/engine/organization/entity/DeleteParam.java b/src/com/engine/organization/entity/DeleteParam.java index 6583844b..a201954b 100644 --- a/src/com/engine/organization/entity/DeleteParam.java +++ b/src/com/engine/organization/entity/DeleteParam.java @@ -4,11 +4,10 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.apache.commons.collections.CollectionUtils; import weaver.general.StringUtil; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -22,13 +21,18 @@ import java.util.stream.Collectors; @NoArgsConstructor @AllArgsConstructor public class DeleteParam { - private String ids; + private String ids; - public List getIds() { - if(StringUtil.isEmpty(ids)){ - return new ArrayList<>(); - } - return Arrays.stream(ids.split(",")).map(Long::parseLong).collect(Collectors.toList()); - } + public List getIds() { + if (StringUtil.isEmpty(ids)) { + return new ArrayList<>(); + } + ArrayList list = new ArrayList<>(); + Set collect = Arrays.stream(ids.split(",")).map(Long::parseLong).collect(Collectors.toSet()); + if (CollectionUtils.isNotEmpty(collect)) { + list.addAll(collect); + } + return list; + } } diff --git a/src/com/engine/organization/enums/OrgImportEnum.java b/src/com/engine/organization/enums/OrgImportEnum.java index a4fe57b5..0662f434 100644 --- a/src/com/engine/organization/enums/OrgImportEnum.java +++ b/src/com/engine/organization/enums/OrgImportEnum.java @@ -2,6 +2,7 @@ package com.engine.organization.enums; import com.engine.organization.exception.OrganizationRunTimeException; import com.engine.organization.util.saveimport.PostInfoImportUtil; +import com.engine.organization.util.saveimport.SequenceImportUtil; import com.engine.organization.util.saveimport.StaffInfoImportUtil; import weaver.hrm.User; @@ -29,6 +30,20 @@ public enum OrgImportEnum implements OrgImportAdapter { return StaffInfoImportUtil.importForm(user); } }, + SEQUENCE("sequence"){ + @Override + public Map orgImport(Map params, User user) { + Map resultMap = new HashMap<>(); + String excelFile = (String) params.get("excelfile"); + resultMap.put("pId", SequenceImportUtil.saveImport("add", excelFile, user)); + return resultMap; + } + + @Override + public List> orgForm(User user) { + return SequenceImportUtil.importForm(user); + } + }, POSTINFO("postInfo"){ @Override public Map orgImport(Map params, User user) { @@ -45,6 +60,7 @@ public enum OrgImportEnum implements OrgImportAdapter { }; + private String tableName; OrgImportEnum(String tableName) { diff --git a/src/com/engine/organization/mapper/comp/CompMapper.xml b/src/com/engine/organization/mapper/comp/CompMapper.xml index 75381ec0..d6f7cec9 100644 --- a/src/com/engine/organization/mapper/comp/CompMapper.xml +++ b/src/com/engine/organization/mapper/comp/CompMapper.xml @@ -107,8 +107,8 @@ from hrmsubcompany t WHERE id IN - - #{id} + + NULL) OR id IN(#{id} diff --git a/src/com/engine/organization/mapper/resource/HrmResourceMapper.java b/src/com/engine/organization/mapper/resource/HrmResourceMapper.java index e926d5a1..53e8ea16 100644 --- a/src/com/engine/organization/mapper/resource/HrmResourceMapper.java +++ b/src/com/engine/organization/mapper/resource/HrmResourceMapper.java @@ -1,9 +1,9 @@ package com.engine.organization.mapper.resource; import com.alibaba.fastjson.JSONObject; +import com.engine.organization.entity.hrmresource.param.SearchTemplateParam; import com.engine.organization.entity.hrmresource.po.ResourceChartPO; import com.engine.organization.entity.hrmresource.po.ResourcePO; -import com.engine.organization.entity.hrmresource.param.SearchTemplateParam; import com.engine.organization.entity.hrmresource.po.SearchTemplatePO; import com.engine.organization.entity.resume.po.HrmFamilyInfoPO; import com.engine.organization.entity.resume.po.PersonnelResumePO; diff --git a/src/com/engine/organization/mapper/scheme/SchemeMapper.java b/src/com/engine/organization/mapper/scheme/SchemeMapper.java index 00296be1..8e7da1ee 100644 --- a/src/com/engine/organization/mapper/scheme/SchemeMapper.java +++ b/src/com/engine/organization/mapper/scheme/SchemeMapper.java @@ -99,6 +99,7 @@ public interface SchemeMapper { List getSchemesByIds(@Param("ids")Collection ids); - List selectBySubcompanyId(@Param("subCompanyIds") Collection subCompanyIds); + + List selectByParams(@Param("subCompanyId") Integer subCompanyId,@Param("schemeName") String schemeName); } diff --git a/src/com/engine/organization/mapper/scheme/SchemeMapper.xml b/src/com/engine/organization/mapper/scheme/SchemeMapper.xml index 648ff88a..3b9380c9 100644 --- a/src/com/engine/organization/mapper/scheme/SchemeMapper.xml +++ b/src/com/engine/organization/mapper/scheme/SchemeMapper.xml @@ -276,4 +276,10 @@ + + \ No newline at end of file diff --git a/src/com/engine/organization/service/ImportCommonService.java b/src/com/engine/organization/service/ImportCommonService.java index 6aa80deb..4627691b 100644 --- a/src/com/engine/organization/service/ImportCommonService.java +++ b/src/com/engine/organization/service/ImportCommonService.java @@ -45,6 +45,13 @@ public interface ImportCommonService { Map saveCommonImport(Map params); + /** + * @Description: 通用导入表单模板 + * @Author: liang.cheng + * @Date: 2024/3/11 4:05 PM + * @param: [importModule] + * @return: java.util.Map + */ Map getCommonForm(String importModule); } diff --git a/src/com/engine/organization/service/impl/ChartServiceImpl.java b/src/com/engine/organization/service/impl/ChartServiceImpl.java index f123915a..bb9755b2 100644 --- a/src/com/engine/organization/service/impl/ChartServiceImpl.java +++ b/src/com/engine/organization/service/impl/ChartServiceImpl.java @@ -197,6 +197,8 @@ public class ChartServiceImpl extends Service implements ChartService { chartPO.setExpand("0"); chartPO.setFisvitual(rs.getString("isvitual")); chartPO.setHasChildren(getHasChildren(chartPO.getFtype(), chartPO.getFobjid()).toString()); + chartPO.setOnJobNum(isRealTime ? Util.getIntValue(rs.getString("on_job_num"),0) : Util.getIntValue(rs.getString("job_num"),0)); + chartPO.setStaffNum(Util.getIntValue(rs.getString("staff_num"),0)); filterAndAddData(dataList, chartPO, hideDepartment); //dataList.add(chartPO); @@ -1308,8 +1310,10 @@ public class ChartServiceImpl extends Service implements ChartService { // 一级分部数据分权处理 if (isRealTime && user.getUID() != 1 && isRealDimension) { DetachUtil detachUtil = new DetachUtil(user); - String ids = detachUtil.getJclRoleLevels(); - sql = sql + " and a.id in ("+ids+")"; + if(detachUtil.isDETACH()) { + String ids = detachUtil.getJclRoleLevels(); + sql = sql + " and a.id in (" + ids + ")"; + } } break; case "1": diff --git a/src/com/engine/organization/service/impl/ExtServiceImpl.java b/src/com/engine/organization/service/impl/ExtServiceImpl.java index 7c1db295..cc52d564 100644 --- a/src/com/engine/organization/service/impl/ExtServiceImpl.java +++ b/src/com/engine/organization/service/impl/ExtServiceImpl.java @@ -296,14 +296,11 @@ public class ExtServiceImpl extends Service implements ExtService { List groupIds = dtInfoPOList.stream().map(ExtendInfoPO::getExtendGroupId).distinct().collect(Collectors.toList()); Map> poMaps = dtInfoPOList.stream().collect(Collectors.groupingBy(ExtendInfoPO::getExtendGroupId)); - boolean deleteFlag = true; for (Long groupId : groupIds) { int rowNum = Util.getIntValue((String) params.get("rownum" + groupId)); - if (deleteFlag && rowNum > 0) { - // 删除原有明细表数据 - getExtDTMapper().deleteByMainID(tableName, id, groupId); - deleteFlag = false; - } + // 删除原有明细表数据 + getExtDTMapper().deleteByMainID(tableName, id, groupId); + List filterS = poMaps.get(groupId); for (int i = 0; i < rowNum; i++) { Map map = new HashMap<>(); @@ -319,6 +316,9 @@ public class ExtServiceImpl extends Service implements ExtService { map.put("delete_type", 0); map.put("create_time", new Date()); map.put("update_time", new Date()); + // 去除value为null的元素 + map.entrySet().removeIf(entry -> entry.getValue() == null); + getExtDTMapper().insertCompExtDT(tableName, map); } } diff --git a/src/com/engine/organization/service/impl/ImportCommonServiceImpl.java b/src/com/engine/organization/service/impl/ImportCommonServiceImpl.java index 8390babb..269302d1 100644 --- a/src/com/engine/organization/service/impl/ImportCommonServiceImpl.java +++ b/src/com/engine/organization/service/impl/ImportCommonServiceImpl.java @@ -27,6 +27,7 @@ import com.engine.organization.util.HasRightUtil; import com.engine.organization.util.OrganizationAssert; import com.engine.organization.util.db.MapperProxyFactory; import com.engine.organization.util.excel.ExcelUtil; +import com.engine.organization.util.field.StaticFieldName; import com.engine.organization.util.saveimport.CompanyImport; import com.engine.organization.util.saveimport.DepartmentImport; import com.engine.organization.util.saveimport.OrgImportUtil; @@ -117,6 +118,8 @@ public class ImportCommonServiceImpl extends Service implements ImportCommonServ excludeFields.add("companyworkyear"); excludeFields.add("textfield1"); excludeFields.add("textfield2"); + // 职等职级 + excludeFields.add("3" + StaticFieldName.zdzjFieldName); return ResourceImport.getImportFields(user, excludeFields); case "joblevel": @@ -329,10 +332,17 @@ public class ImportCommonServiceImpl extends Service implements ImportCommonServ item.put("value", value); itemList.add(item); } - Map item = new HashMap<>(); - item.put("index", 3); - item.put("value", "多个职等之间使用英文状态下逗号”,“隔开"); + Map item = new HashMap(2){{ + put("index", 3); + put("value", "多个职等之间使用英文状态下逗号”,“隔开"); + }}; + Map item1 = new HashMap(2){{ + put("index", 4); + put("value", "《等级方案、职等、职级》名称存在重复情况下暂时不支持导入功能"); + }}; itemList.add(item); + itemList.add(item1); + groupItem.put("items", itemList); lsGroup.add(groupItem); return lsGroup; diff --git a/src/com/engine/organization/service/impl/OrgChartServiceImpl.java b/src/com/engine/organization/service/impl/OrgChartServiceImpl.java index 8bb6e732..53ca2237 100644 --- a/src/com/engine/organization/service/impl/OrgChartServiceImpl.java +++ b/src/com/engine/organization/service/impl/OrgChartServiceImpl.java @@ -69,8 +69,10 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { boolean isRealTime = StringUtils.isBlank(id) || "0".equals(id); if (isRealTime && user.getUID() != 1 && isRealDimension) { DetachUtil detachUtil = new DetachUtil(user); - String ids = detachUtil.getJclRoleLevels(); - sql = sql + " and id in ("+ids+")"; + if(detachUtil.isDETACH()) { + String ids = detachUtil.getJclRoleLevels(); + sql = sql + " and id in (" + ids + ")"; + } } rs.executeQuery(sql); @@ -98,14 +100,20 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { // 是否展示当前数据 boolean isSearchCurrent = StringUtils.isBlank(id) || "0".equals(id); String sql; + String judgeTreeLeafSql; if (isSearchCurrent) { sql = "select id as id, id as value, subcompanyname as title, supsubcomid as pId from hrmsubcompany where (canceled is null or canceled != '1') and " + DBType.get(new RecordSet().getDBType()).ifNull("supsubcomid", "0") + " = ? "; boolean isRealDimension = StringUtils.isBlank(fclass) || "0".equals(fclass); boolean isRealTime = StringUtils.isBlank(id) || "0".equals(id); + judgeTreeLeafSql = sql; if (isRealTime && user.getUID() != 1 && isRealDimension) { DetachUtil detachUtil = new DetachUtil(user); - String ids = detachUtil.getJclRoleLevels(); - sql = sql + " and id in ("+ids+")"; + if (detachUtil.isDETACH()) { + String ids = detachUtil.getJclRoleLevels(); + if ("0".equals(subcompany)) { + sql = sql + " and id in (" + ids + ")"; + } + } } if (StringUtils.isNotBlank(fclass) && !"0".equals(fclass)) { sql = "select id as id, id as value, subcompanyname as title, supsubcomid as pId from hrmsubcompanyvirtual where (canceled is null or canceled != '1') and " + DBType.get(new RecordSet().getDBType()).ifNull("supsubcomid", "0") + " = ? and companyid = '" + fclass + "'"; @@ -117,10 +125,11 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { } // 添加时间轴条件 sql += " and versionid = " + id; + judgeTreeLeafSql = sql; } - rs.executeQuery(sql,subcompany); + rs.executeQuery(sql, subcompany); while (rs.next()) { - companyTree.add(CompanyTreePO.builder().id(rs.getString("id")).pId(rs.getString("pId")).value(rs.getString("value")).title(rs.getString("title")).isLeaf(judgeTreeLeaf(sql, rs.getString("id"))).build()); + companyTree.add(CompanyTreePO.builder().id(rs.getString("id")).pId(rs.getString("pId")).value(rs.getString("value")).title(rs.getString("title")).isLeaf(judgeTreeLeaf(judgeTreeLeafSql, rs.getString("id"))).build()); } result.put("companyTree", companyTree); return result; @@ -617,25 +626,25 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { RecordSet rs = new RecordSet(); String recordDate = OrganizationDateUtil.getFormatLocalDateTime(LocalDateTime.now()); String createDate = OrganizationDateUtil.getFormatLocalDate(LocalDate.now()); - rs.executeQuery("select id from JCL_ORG_CHARTVERSION where fclass = ? and createtime = ?",fclass,createDate); + rs.executeQuery("select id from JCL_ORG_CHARTVERSION where fclass = ? and createtime = ?", fclass, createDate); rs.next(); String id = Util.null2String(rs.getString("id")); - if(StringUtils.isNotEmpty(id)){ - rs.executeUpdate("update JCL_ORG_CHARTVERSION set recorddate = ?,description = ?,creator = ? where fclass = ? and createtime = ?",recordDate,description,user.getUID(),fclass,createDate); - }else { - rs.executeUpdate("insert into JCL_ORG_CHARTVERSION (recorddate,description,creator,deletetype,createtime,fclass) values(?,?,?,?,?,?)",recordDate,description,user.getUID(),0,createDate,fclass); + if (StringUtils.isNotEmpty(id)) { + rs.executeUpdate("update JCL_ORG_CHARTVERSION set recorddate = ?,description = ?,creator = ? where fclass = ? and createtime = ?", recordDate, description, user.getUID(), fclass, createDate); + } else { + rs.executeUpdate("insert into JCL_ORG_CHARTVERSION (recorddate,description,creator,deletetype,createtime,fclass) values(?,?,?,?,?,?)", recordDate, description, user.getUID(), 0, createDate, fclass); } } @Override public Map searchTimeLines(Map params) { - Map datas = new HashMap<>(); + Map datas = new HashMap<>(); RecordSet rs = new RecordSet(); String fclass = Util.null2String(params.get("fclass")); List timeLinesBOList = new ArrayList<>(); timeLinesBOList.add(TimeLinesBO.builder().key(0).id(0).title("当前版本").color("blue").time("").build()); - rs.executeQuery("SELECT id,recorddate,description from JCL_ORG_CHARTVERSION where fclass = ? and deletetype = ? order by id desc",fclass,0); + rs.executeQuery("SELECT id,recorddate,description from JCL_ORG_CHARTVERSION where fclass = ? and deletetype = ? order by id desc", fclass, 0); while (rs.next()) { timeLinesBOList.add(TimeLinesBO.builder() .key(rs.getInt("id")) @@ -646,7 +655,7 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { .build()); } - datas.put("timelineList",timeLinesBOList); + datas.put("timelineList", timeLinesBOList); return datas; } diff --git a/src/com/engine/organization/service/impl/PersonnelResumeServiceImpl.java b/src/com/engine/organization/service/impl/PersonnelResumeServiceImpl.java index 5020590f..0ac98225 100644 --- a/src/com/engine/organization/service/impl/PersonnelResumeServiceImpl.java +++ b/src/com/engine/organization/service/impl/PersonnelResumeServiceImpl.java @@ -33,11 +33,13 @@ import com.engine.organization.util.tree.SearchTreeUtil; import com.engine.organization.util.word.CustomXWPFDocument; import com.engine.organization.util.word.WordUtil; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.poi.xwpf.usermodel.Document; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFPictureData; import org.apache.xmlbeans.XmlOptions; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody; +import weaver.conn.RecordSet; import weaver.general.GCONST; import weaver.general.StringUtil; import weaver.general.Util; @@ -587,7 +589,10 @@ public class PersonnelResumeServiceImpl extends Service implements PersonnelResu // 补充人员所有岗位,关联人员及聚才林岗位 for (ResourcePO resource : resourcePOS) { - JobPO jobByResource = getJobMapper().getJobByResource(resource); + if (null == resource) { + continue; + } + JobPO jobByResource = getJobByResource(resource); if (null != jobByResource) { resource.setJobId(jobByResource.getId()); builderJobs.add(jobByResource); @@ -676,7 +681,10 @@ public class PersonnelResumeServiceImpl extends Service implements PersonnelResu // 补充人员所有岗位,关联人员及聚才林岗位 for (ResourcePO resource : resourcePOS) { - JobPO jobByResource = getJobMapper().getJobByResource(resource); + if (null == resource) { + continue; + } + JobPO jobByResource = getJobByResource(resource); if (null != jobByResource) { resource.setJobId(jobByResource.getId()); builderJobs.add(jobByResource); @@ -760,4 +768,87 @@ public class PersonnelResumeServiceImpl extends Service implements PersonnelResu buildParentComps(parentComp, builderComps, allMaps); } } + + private JobPO getJobByResource(ResourcePO resourcePO) { + RecordSet rs = new RecordSet(); + String sql = "select\n" + + " t.id,\n" + + " t.job_no,\n" + + " h.jobtitlename,\n" + + " t.ec_jobTitle,\n" + + " t.ec_company,\n" + + " t.ec_department,\n" + + " t.sequence_id,\n" + + " t.scheme_id,\n" + + " t.parent_job,\n" + + " t.is_key,\n" + + " t.workplace,\n" + + " t.description,\n" + + " t.work_duty,\n" + + " t.work_authority,\n" + + " t.show_order,\n" + + " t.forbidden_tag,\n" + + " t.grade_id,\n" + + " t.level_id\n" + + " from jcl_org_job t\n" + + " left join hrmjobtitles h on t.ec_jobTitle = h.id\n" + + " where t.delete_type = 0 "; + if (null != resourcePO.getSubcompanyid1()) { + sql += " and t.ec_company = '" + resourcePO.getSubcompanyid1() + "'"; + } + if (null == resourcePO.getSubcompanyid1()) { + sql += " and t.ec_company is null"; + } + if (null != resourcePO.getDepartmentid()) { + sql += " and t.ec_department = '" + resourcePO.getDepartmentid() + "'"; + } + if (null != resourcePO.getDepartmentid()) { + sql += " and t.ec_department is null"; + } + if (null != resourcePO.getJobtitle()) { + sql += " and t.ec_jobTitle = '" + resourcePO.getJobtitle() + "'"; + } + rs.executeQuery(sql); + if (rs.next()) { + String id = rs.getString("id"); + String job_no = rs.getString("job_no"); + String jobtitlename = rs.getString("jobtitlename"); + String ec_jobTitle = rs.getString("ec_jobTitle"); + String ec_company = rs.getString("ec_company"); + String ec_department = rs.getString("ec_department"); + String sequence_id = rs.getString("sequence_id"); + String scheme_id = rs.getString("scheme_id"); + String parent_job = rs.getString("parent_job"); + String is_key = rs.getString("is_key"); + String workplace = rs.getString("workplace"); + String description = rs.getString("description"); + String work_duty = rs.getString("work_duty"); + String work_authority = rs.getString("work_authority"); + String show_order = rs.getString("show_order"); + String forbidden_tag = rs.getString("forbidden_tag"); + String grade_id = rs.getString("grade_id"); + String level_id = rs.getString("level_id"); + JobPO jobPO = new JobPO(); + jobPO.setId(StringUtils.isBlank(id) ? null : Long.parseLong(id)); + jobPO.setJobNo(job_no); + jobPO.setJobTitleName(jobtitlename); + jobPO.setEcJobTitle(StringUtils.isBlank(ec_jobTitle) ? null : Integer.parseInt(ec_jobTitle)); + jobPO.setEcCompany(StringUtils.isBlank(ec_company) ? null : Integer.parseInt(ec_company)); + jobPO.setEcDepartment(StringUtils.isBlank(ec_department) ? null : Integer.parseInt(ec_department)); + jobPO.setSequenceId(StringUtils.isBlank(sequence_id) ? null : Long.parseLong(sequence_id)); + jobPO.setSchemeId(StringUtils.isBlank(scheme_id) ? null : Long.parseLong(scheme_id)); + jobPO.setParentJob(StringUtils.isBlank(parent_job) ? null : Long.parseLong(parent_job)); + jobPO.setIsKey(StringUtils.isBlank(is_key) ? null : Integer.parseInt(is_key)); + jobPO.setWorkplace(workplace); + jobPO.setDescription(description); + jobPO.setWorkDuty(work_duty); + jobPO.setWorkAuthority(work_authority); + jobPO.setShowOrder(StringUtils.isBlank(show_order) ? null : Integer.parseInt(show_order)); + jobPO.setForbiddenTag(StringUtils.isBlank(forbidden_tag) ? null : Integer.parseInt(forbidden_tag)); + jobPO.setGradeId(grade_id); + jobPO.setLevelId(level_id); + return jobPO; + } + return null; + } } diff --git a/src/com/engine/organization/service/impl/SchemeServiceImpl.java b/src/com/engine/organization/service/impl/SchemeServiceImpl.java index 76269ff5..4b94e182 100644 --- a/src/com/engine/organization/service/impl/SchemeServiceImpl.java +++ b/src/com/engine/organization/service/impl/SchemeServiceImpl.java @@ -66,6 +66,8 @@ public class SchemeServiceImpl extends Service implements SchemeService { HasRightUtil.hasRight(user, RIGHT_NAME, false); List list = getSchemeMapper().listByNo(Util.null2String(param.getSchemeNo())); OrganizationAssert.isEmpty(list, "编号不允许重复"); + List schemePOS = getSchemeMapper().selectByParams(param.getSubcompanyid(), param.getSchemeName()); + OrganizationAssert.isEmpty(schemePOS, "同一分部下方案名称不允许重复"); SchemePO schemePO = SchemeDTO.convertParamToPO(param, (long) user.getUID()); return getSchemeMapper().insertIgnoreNull(schemePO); } @@ -80,6 +82,8 @@ public class SchemeServiceImpl extends Service implements SchemeService { List list = getSchemeMapper().listByNo(Util.null2String(schemePO.getSchemeNo())); OrganizationAssert.isEmpty(list, "编号不允许重复"); } + List schemePOS = getSchemeMapper().selectByParams(param.getSubcompanyid(), param.getSchemeName()); + OrganizationAssert.isEmpty(schemePOS, "同一分部下方案名称不允许重复"); return getSchemeMapper().updateScheme(schemePO); } @@ -124,7 +128,7 @@ public class SchemeServiceImpl extends Service implements SchemeService { schemeNameCondition.setRules("required|string"); SearchConditionItem schemeNoCondition = OrganizationFormItemUtil.inputItem(user, 2, 17, 3, 50, "方案编号", "schemeNo"); schemeNoCondition.setRules("required|string"); - SearchConditionItem subCompanyIdItem = OrganizationFormItemUtil.browserItem(user, 2, 17, 2, false, "所属分部", "164", "subCompanyId", ""); + SearchConditionItem subCompanyIdItem = OrganizationFormItemUtil.browserItem(user, 2, 17, 3, false, "所属分部", "164", "subCompanyId", ""); SearchConditionItem textareaItem = OrganizationFormItemUtil.textareaItem(user, 2, 17, true, 2, 200, "方案说明", "schemeDescription"); // 编辑状态下赋值操作 diff --git a/src/com/engine/organization/service/impl/SequenceServiceImpl.java b/src/com/engine/organization/service/impl/SequenceServiceImpl.java index 2a0a9271..2caa8e67 100644 --- a/src/com/engine/organization/service/impl/SequenceServiceImpl.java +++ b/src/com/engine/organization/service/impl/SequenceServiceImpl.java @@ -19,11 +19,18 @@ import com.engine.organization.util.*; import com.engine.organization.util.db.DBType; import com.engine.organization.util.db.MapperProxyFactory; import com.engine.organization.util.detach.DetachUtil; +import com.engine.organization.util.excel.ExcelUtil; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.GCONST; import weaver.general.StringUtil; import weaver.general.Util; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; import java.util.*; @@ -35,6 +42,40 @@ import java.util.*; */ public class SequenceServiceImpl extends Service implements SequenceService { + // 判断岗位序列导入模板是否存在,不存在则创建该文件 + static { + try { + String outPutPath = GCONST.getRootPath() + File.separator + "hrm" + File.separator + "import" + File.separator + "template" + File.separator + "sequence.xls"; + File excelPathFile = new File(outPutPath); + if (!excelPathFile.exists()) { + String columns = "编号,名称,等级方案,方案所属分部,描述说明"; + String[] split = columns.split(","); + List columnList = new ArrayList<>(Arrays.asList(split)); + // 创建导入模板 + List> excelSheetData = new ArrayList<>(); + excelSheetData.add(columnList); + XSSFWorkbook sheets = ExcelUtil.genWorkbookV2(excelSheetData, "sequence"); + File excelFile = new File(outPutPath); + if (!excelFile.exists()) { + String substring = outPutPath.substring(0, outPutPath.lastIndexOf(File.separator)); + File file = new File(substring); + if (file.mkdirs()) { + boolean newFile = excelPathFile.createNewFile(); + if (!newFile) { + throw new IOException(outPutPath + "文件创建失败"); + } + } + } + FileOutputStream out = new FileOutputStream(excelPathFile); + sheets.write(out); + out.flush(); + } + } catch (IOException e) { + new BaseBean().writeLog(e); + throw new RuntimeException(e); + } + } + private static final String RIGHT_NAME = "Sequence:All"; private SequenceMapper getSequenceMapper() { @@ -162,7 +203,10 @@ public class SequenceServiceImpl extends Service implements SequenceService { @Override public Map> getHasRight() { - return MenuBtn.getCommonBtnDatas(); + Map> commonBtnDatas = MenuBtn.getCommonBtnDatas(); + commonBtnDatas.get("topMenu").add(MenuBtn.builder().isBatch("1").isTop("1").menuFun("importFile").menuIcon("icon-coms-leading-in").menuName("批量导入").type("BTN_BatchImport").build()); + commonBtnDatas.get("rightMenu").add(MenuBtn.builder().isBatch("1").isTop("0").menuFun("importFile").menuIcon("icon-coms-leading-in").menuName("批量导入").type("BTN_BatchImport").build()); + return commonBtnDatas; } @Override diff --git a/src/com/engine/organization/util/saveimport/CompanyImport.java b/src/com/engine/organization/util/saveimport/CompanyImport.java index ff03b819..3de252d4 100644 --- a/src/com/engine/organization/util/saveimport/CompanyImport.java +++ b/src/com/engine/organization/util/saveimport/CompanyImport.java @@ -198,7 +198,7 @@ public class CompanyImport { } else if (StringUtils.isBlank(cellValue)) { reallyValue = ""; } else { - reallyValue = HrmFieldManagerForService.getReallyFieldvalue(infoPO.getJsonObject(cellValue), null != infoPO.getIsSystem() && 1 == infoPO.getIsSystem()); + reallyValue = HrmFieldManagerForService.getReallyFieldvalue(infoPO.getJsonObject(cellValue), true); } } catch (Exception e) { historyDetailPO.setOperateDetail(cellValue + "转换失败"); diff --git a/src/com/engine/organization/util/saveimport/DepartmentImport.java b/src/com/engine/organization/util/saveimport/DepartmentImport.java index 756741c7..33aebf4c 100644 --- a/src/com/engine/organization/util/saveimport/DepartmentImport.java +++ b/src/com/engine/organization/util/saveimport/DepartmentImport.java @@ -209,7 +209,7 @@ public class DepartmentImport { } else if (StringUtils.isBlank(cellValue)) { reallyValue = ""; } else { - reallyValue = HrmFieldManagerForService.getReallyFieldvalue(infoPO.getJsonObject(cellValue), null != infoPO.getIsSystem() && 1 == infoPO.getIsSystem()); + reallyValue = HrmFieldManagerForService.getReallyFieldvalue(infoPO.getJsonObject(cellValue), true); } } catch (Exception e) { historyDetailPO.setOperateDetail(cellValue + "转换失败"); diff --git a/src/com/engine/organization/util/saveimport/PostInfoImportUtil.java b/src/com/engine/organization/util/saveimport/PostInfoImportUtil.java index 1aaca042..efccb424 100644 --- a/src/com/engine/organization/util/saveimport/PostInfoImportUtil.java +++ b/src/com/engine/organization/util/saveimport/PostInfoImportUtil.java @@ -41,7 +41,7 @@ public class PostInfoImportUtil { } public static Long saveImport(String operateType, String excelFile, User user) { - Long importHistoryId = OrgImportUtil.saveImportLog("staff_info", operateType, user); + Long importHistoryId = OrgImportUtil.saveImportLog("post_info", operateType, user); JclImportHistoryDetailPO historyDetailPO; ImageFileManager manager = new ImageFileManager(); diff --git a/src/com/engine/organization/util/saveimport/SequenceImportUtil.java b/src/com/engine/organization/util/saveimport/SequenceImportUtil.java new file mode 100644 index 00000000..17d8903b --- /dev/null +++ b/src/com/engine/organization/util/saveimport/SequenceImportUtil.java @@ -0,0 +1,202 @@ +package com.engine.organization.util.saveimport; + + +import com.engine.organization.entity.extend.po.ExtendInfoPO; +import com.engine.organization.entity.jclimport.po.JclImportHistoryDetailPO; + +import com.engine.organization.entity.scheme.po.SchemePO; +import com.engine.organization.entity.sequence.po.SequencePO; +import com.engine.organization.mapper.comp.CompMapper; +import com.engine.organization.mapper.scheme.SchemeMapper; +import com.engine.organization.mapper.sequence.SequenceMapper; +import com.engine.organization.util.OrganizationAssert; +import com.engine.organization.util.db.MapperProxyFactory; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.xssf.usermodel.XSSFCell; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import weaver.file.ImageFileManager; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.systeminfo.SystemEnv; + +import java.io.IOException; +import java.util.*; + +/** + * @Description: 岗位序列 + * @Author: liang.cheng + * @Date: 2024/3/12 2:17 PM + * @param: + * @return: + */ +public class SequenceImportUtil { + static Map importFieldsMap; + + static { + importFieldsMap = new HashMap<>(); + importFieldsMap.put("编号", ExtendInfoPO.builder().tableName("jcl_org_sequence").fieldName("sequence_no").fieldNameDesc("编号").isrequired(1).controlType(1).browserType("1").customValue("[\"input\",\"text\",\"100\"]").build()); + importFieldsMap.put("名称", ExtendInfoPO.builder().tableName("jcl_org_sequence").fieldName("sequence_name").fieldNameDesc("名称").isrequired(1).controlType(1).browserType("1").customValue("[\"input\",\"text\",\"100\"]").build()); + importFieldsMap.put("等级方案", ExtendInfoPO.builder().tableName("jcl_org_sequence").fieldName("scheme_name").fieldNameDesc("等级方案").isrequired(1).controlType(1).browserType("3").customValue("[\"input\",\"text\",\"100\"]").build()); + importFieldsMap.put("方案所属分部", ExtendInfoPO.builder().tableName("jcl_org_sequence").fieldName("subcompanyname").fieldNameDesc("方案所属分部").isrequired(1).controlType(1).browserType("3").customValue("[\"input\",\"text\",\"100\"]").build()); + importFieldsMap.put("描述说明", ExtendInfoPO.builder().tableName("jcl_org_sequence").fieldName("description").fieldNameDesc("描述说明").isrequired(0).controlType(1).browserType("1").customValue("[\"input\",\"text\",\"100\"]").build()); + + } + + + + public static Long saveImport(String operateType, String excelFile, User user) { + Long importHistoryId = OrgImportUtil.saveImportLog("sequence_info", operateType, user); + JclImportHistoryDetailPO historyDetailPO; + + ImageFileManager manager = new ImageFileManager(); + manager.getImageFileInfoById(Util.getIntValue(excelFile)); + XSSFWorkbook workbook; + try { + workbook = new XSSFWorkbook(manager.getInputStream()); + } catch (IOException e) { + throw new RuntimeException(e); + } + // 当前sheet + XSSFSheet sheetAt = workbook.getSheetAt(0); + int lastRow = sheetAt.getLastRowNum(); + OrganizationAssert.isTrue(lastRow > 0, "文件数据为空"); + short lastCellNum = sheetAt.getRow(0).getLastCellNum(); + List extendInfoPOS = new ArrayList<>(); + Date currDate = new Date(); + // 遍历每一行数据 + nextRow: + for (int i = 0; i <= lastRow; i++) { + historyDetailPO = new JclImportHistoryDetailPO(); + historyDetailPO.setPid(importHistoryId); + XSSFRow row = sheetAt.getRow(i); + if (null == row) { + continue; + } + + // 组装待处理数据 + Map map = new HashMap<>(16); + Integer parentCompanyId = null; + + historyDetailPO.setRowNums(String.valueOf(i + 1)); + for (int cellIndex = 0; cellIndex < lastCellNum; cellIndex++) { + XSSFCell cell = row.getCell((short) cellIndex); + String cellValue = OrgImportUtil.getCellValue(cell).trim(); + if (i == 0) { + // 首行 初始化字段信息 + ExtendInfoPO extendInfoPO = importFieldsMap.get(cellValue); + extendInfoPOS.add(extendInfoPO); + } else { + ExtendInfoPO infoPO = extendInfoPOS.get(cellIndex); + // 数据校验 + if (infoPO.getIsrequired() == 1 && StringUtils.isBlank(cellValue)) { + historyDetailPO.setRelatedName(""); + historyDetailPO.setOperateDetail(infoPO.getFieldNameDesc() + "为必填项"); + historyDetailPO.setStatus("0"); + OrgImportUtil.saveImportDetailLog(historyDetailPO); + continue nextRow; + } + + Object reallyValue = cellValue; + + if ("subcompanyname".equalsIgnoreCase(infoPO.getFieldName())) { + historyDetailPO.setRelatedName(cellValue); + String[] split = cellValue.split(">"); + if (split.length > 0) { + if (split.length > 8) { + historyDetailPO.setOperateDetail("分部层级不能大于10"); + historyDetailPO.setStatus("0"); + OrgImportUtil.saveImportDetailLog(historyDetailPO); + continue nextRow; + } + for (int index = 0; index < split.length - 1; index++) { + parentCompanyId = MapperProxyFactory.getProxy(CompMapper.class).getIdByNameAndPid(split[index], parentCompanyId == null ? 0 : parentCompanyId); + if (null == parentCompanyId) { + historyDetailPO.setOperateDetail(split[index] + "分部未找到对应数据"); + historyDetailPO.setStatus("0"); + OrgImportUtil.saveImportDetailLog(historyDetailPO); + continue nextRow; + } + } + } + map.put("subcompanyid", Util.null2String(parentCompanyId)); + } + + // 编号是否重复 + if ("sequence_no".equals(infoPO.getFieldName())){ + List sequencePOS = MapperProxyFactory.getProxy(SequenceMapper.class).listByNo(Util.null2String(reallyValue)); + if(sequencePOS.size()>0){ + historyDetailPO.setRelatedName(""); + historyDetailPO.setOperateDetail("编号:" + reallyValue + ",编号不允许重复"); + historyDetailPO.setStatus("0"); + OrgImportUtil.saveImportDetailLog(historyDetailPO); + continue nextRow; + } + } + + map.put(infoPO.getFieldName(), reallyValue); + + } + } + + String subCompanyName = (String) map.get("scheme_name"); + String subCompanyId = (String) map.get("subcompanyid"); + + List schemePOS = MapperProxyFactory.getProxy(SchemeMapper.class).selectByParams(Integer.parseInt(subCompanyId), subCompanyName); + if (schemePOS.size() == 0){ + historyDetailPO.setRelatedName(""); + historyDetailPO.setOperateDetail("第"+i+"行,所属分部下的等级方案不存在"); + historyDetailPO.setStatus("0"); + OrgImportUtil.saveImportDetailLog(historyDetailPO); + continue nextRow; + } + + SequencePO build = SequencePO.builder() + .sequenceNo((String) map.get("sequence_no")) + .sequenceName((String) map.get("sequence_name")) + .schemeId(schemePOS.get(0).getId()) + .description((String) map.get("description")) + .build(); + MapperProxyFactory.getProxy(SequenceMapper.class).insertIgnoreNull(build); + historyDetailPO.setOperateDetail("添加成功"); + historyDetailPO.setStatus("1"); + OrgImportUtil.saveImportDetailLog(historyDetailPO); + } + + return importHistoryId; + } + + + public static List> importForm(User user) { + // 返回导入数据 + List> lsGroup = new ArrayList<>(); + Map groupItem = new HashMap<>(3); + List itemList = new ArrayList<>(); + groupItem.put("title", SystemEnv.getHtmlLabelName(33803, Util.getIntValue(user.getLanguage()))); + groupItem.put("defaultshow", true); + List lsPromptLabel = new ArrayList<>(); + lsPromptLabel.add(34275); + lsPromptLabel.add(125452); + + for (int i = 0; i < lsPromptLabel.size(); i++) { + Map item = new HashMap<>(); + item.put("index", (i + 1)); + String value = Util.toScreen(SystemEnv.getHtmlLabelName(lsPromptLabel.get(i), user.getLanguage()), user.getLanguage()); + if (i == 0) { + value += SystemEnv.getHtmlLabelName(28576, user.getLanguage()); + item.put("link", "/hrm/import/template/sequence.xls"); + } + item.put("value", value); + itemList.add(item); + } + Map map = new HashMap(2){{ + put("index",3); + put("value","分部的层级关系用字符>分割。"); + }}; + itemList.add(map); + groupItem.put("items", itemList); + lsGroup.add(groupItem); + return lsGroup; + } +} diff --git a/src/com/engine/organization/web/SequenceController.java b/src/com/engine/organization/web/SequenceController.java index 0552c5ab..0ba3f426 100644 --- a/src/com/engine/organization/web/SequenceController.java +++ b/src/com/engine/organization/web/SequenceController.java @@ -21,7 +21,7 @@ import javax.ws.rs.core.MediaType; import java.util.Map; /** - * @description: + * @description: 岗位序列 * @author:dxfeng * @createTime: 2022/05/12 * @version: 1.0 diff --git a/src/weaver/interfaces/organization/cronjob/JobAndPlanCron.java b/src/weaver/interfaces/organization/cronjob/JobAndPlanCron.java index 0c7b88c7..c53edac5 100644 --- a/src/weaver/interfaces/organization/cronjob/JobAndPlanCron.java +++ b/src/weaver/interfaces/organization/cronjob/JobAndPlanCron.java @@ -18,6 +18,7 @@ import java.util.List; /** * 定时任务刷新在岗数、编制数 */ +@Deprecated public class JobAndPlanCron extends BaseCronJob { private static final Logger LOGGER = LoggerFactory.getLogger("chartDataLog");