From ed17924591f2cdf8f1274e2783946bce7c7dc001 Mon Sep 17 00:00:00 2001 From: Chengliang <1546584672@qq.com> Date: Fri, 13 Dec 2024 14:26:24 +0800 Subject: [PATCH] =?UTF-8?q?#QC3421143#=20=E5=9F=BA=E6=9C=AC=E7=8A=B6?= =?UTF-8?q?=E5=86=B5=E5=88=86=E6=9E=90=E6=98=8E=E7=BB=86=E5=9B=9B=E4=B8=AA?= =?UTF-8?q?tab=E6=98=8E=E7=BB=86table=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gainway/entity/EducationLevelPo.java | 24 +++ .../impl/BasicResourceTableServiceImpl.java | 175 +++++++++++++++++- .../transmethod/BasicResourceTrans.java | 70 +++++++ .../gainway/util/BasicResourceUtil.java | 90 +++++++++ src/test/MainTest.java | 20 ++ 5 files changed, 371 insertions(+), 8 deletions(-) create mode 100644 src/com/engine/gainway/entity/EducationLevelPo.java create mode 100644 src/com/engine/gainway/transmethod/BasicResourceTrans.java create mode 100644 src/com/engine/gainway/util/BasicResourceUtil.java diff --git a/src/com/engine/gainway/entity/EducationLevelPo.java b/src/com/engine/gainway/entity/EducationLevelPo.java new file mode 100644 index 0000000..1410a88 --- /dev/null +++ b/src/com/engine/gainway/entity/EducationLevelPo.java @@ -0,0 +1,24 @@ +package com.engine.gainway.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author liang.cheng + * @Date 2024/12/12 5:49 PM + * @Description: TODO + * @Version 1.0 + */ + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EducationLevelPo { + + private Integer id; + + private String levelName; +} diff --git a/src/com/engine/gainway/service/impl/BasicResourceTableServiceImpl.java b/src/com/engine/gainway/service/impl/BasicResourceTableServiceImpl.java index 903a1e9..b02bc8d 100644 --- a/src/com/engine/gainway/service/impl/BasicResourceTableServiceImpl.java +++ b/src/com/engine/gainway/service/impl/BasicResourceTableServiceImpl.java @@ -1,15 +1,25 @@ package com.engine.gainway.service.impl; +import com.api.hrm.util.HrmReportDetachUtil; import com.cloudstore.eccom.pc.table.WeaTable; import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.cloudstore.eccom.pc.table.WeaTableType; import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.core.impl.Service; +import com.engine.gainway.entity.EducationLevelPo; import com.engine.gainway.service.BasicResourceTableService; +import com.engine.gainway.util.BasicResourceUtil; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; import weaver.general.PageIdConst; +import weaver.general.TimeUtil; import weaver.general.Util; +import weaver.hrm.appdetach.AppDetachComInfo; +import weaver.systeminfo.SystemEnv; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -23,7 +33,32 @@ public class BasicResourceTableServiceImpl extends Service implements BasicResou @Override public Map linkTable(Map params) { Map resultMap = new HashMap<>(4); + BaseBean bb = new BaseBean(); + String cmd = Util.null2String(params.get("cmd")); + String name = Util.null2String(params.get("name")); + String dateselect = Util.null2String(params.get("dateselect")); + String fromdate = Util.null2String(params.get("fromdate")); + String enddate = Util.null2String(params.get("enddate")); + String department =Util.null2String(params.get("departmentid")); + String subcompany =Util.null2String(params.get("subcompanyid")); + String location =Util.null2String(params.get("location")); + String status =Util.null2String(params.get("workstatus")); + String agearea =Util.null2String(params.get("agearea")); + HrmReportDetachUtil hrmReportDetachUtil = new HrmReportDetachUtil(); + String startdateselect =Util.fromScreen(dateselect,user.getLanguage()); + if(!"".equals(startdateselect) && !"0".equals(startdateselect) && !"6".equals(startdateselect)){ + fromdate = TimeUtil.getDateByOption(startdateselect,"0"); + enddate = TimeUtil.getDateByOption(startdateselect,"1"); + } + + String field1 = bb.getPropValue("gwsecond", "deptOne"); + String field2 = bb.getPropValue("gwsecond", "deptTwo"); + String field3 = bb.getPropValue("gwsecond", "deptThree"); + String field4 = bb.getPropValue("gwsecond", "deptFour"); + String scopeId = bb.getPropValue("gwsecond", "scopeId"); + + WeaTable table = new WeaTable(); String pageId = "7036b679-029d-411f-b885-8e1720514f83"; table.setPageID(pageId); @@ -31,17 +66,81 @@ public class BasicResourceTableServiceImpl extends Service implements BasicResou String pageSize = PageIdConst.getPageSize(pageId, user.getUID()); table.setPagesize(pageSize); + String fields = "a.subcompanyid1,b."+field1+",b."+field2+",b."+field3+",b."+field4+",a.workcode,a.lastname,a.jobtitle,\n" + + " a.companystartdate,a.sex,a.birthday,a.birthday as age,a.educationlevel,a.companystartdate as companyworkyear"; + table.setBackfields(fields); + String fromSql = "from hrmresource a left join cus_fielddata b on a.id = b.id and b.scopeid = "+scopeId; + table.setSqlform(fromSql); + + String sqlWhere = "where (accounttype is null or accounttype = 0) "; + //查询条件筛选 + if (!"".equals(fromdate) && !"0".equals(fromdate)) { + sqlWhere += " and a.companystartdate>= '"+fromdate+"'"; + } + + if(!"".equals(enddate) && !"0".equals(enddate)) { + sqlWhere += " and (a.companystartdate<='"+enddate+"' or a.companystartdate is null)"; + } + + if(!"".equals(location) && !"0".equals(location)){ + sqlWhere += " and a.locationid ="+location; + } + + if(!"".equals(department) && !"0".equals(department)){ + sqlWhere += " and a.departmentid in ("+department+") "; + } + + if(!"".equals(subcompany) && !"0".equals(subcompany)){ + sqlWhere += " and a.subcompanyid1 in ("+subcompany+") "; + } + + if(!("".equals(status) || "9".equals(status))){ + if("8".equals(status)){ + sqlWhere += " and a.status <= 3"; + }else{ + sqlWhere += " and a.status ="+status; + } + } + + + String innerResourceSql = AppDetachComInfo.getInnerResourceSql(); + innerResourceSql = innerResourceSql.replace("hrmresource", "a"); + //只查询行政纬度人员 + sqlWhere += " and "+innerResourceSql; + //按照pie图点击查询 + String s = buildSqlwhere(cmd, name); + sqlWhere = sqlWhere+s; + // todo 分权暂时不做 + String detachSqlWhere = hrmReportDetachUtil.getDetachSqlWhere(user.getUID(), "hrmresource"); + + table.setSqlwhere(sqlWhere); + table.setSqlprimarykey("a.id"); + table.getColumns().add(new WeaTableColumn("10%", "分部", "subcompanyid1").setTransmethod("com.engine.gainway.transmethod.BasicResourceTrans.selectSubCompanyName")); + table.getColumns().add(new WeaTableColumn("10%", "一级部门", field1)); + table.getColumns().add(new WeaTableColumn("10%", "二级部门", field2)); + table.getColumns().add(new WeaTableColumn("10%", "三级部门", field3)); + table.getColumns().add(new WeaTableColumn("10%", "四级部门", field4)); + table.getColumns().add(new WeaTableColumn("10%", "编号", "workcode")); + table.getColumns().add(new WeaTableColumn("10%", "姓名", "lastname")); + table.getColumns().add(new WeaTableColumn("10%", "岗位", "jobtitle").setTransmethod("com.engine.gainway.transmethod.BasicResourceTrans.selectJobName")); + table.getColumns().add(new WeaTableColumn("10%", "入职日期", "companystartDate")); + table.getColumns().add(new WeaTableColumn("10%", "性别", "sex").setTransmethod("com.engine.gainway.transmethod.BasicResourceTrans.selectSexName")); + if ("AgeRp".equals(cmd)) { + table.getColumns().add(new WeaTableColumn("10%", "出生日期", "birthday")); + table.getColumns().add(new WeaTableColumn("10%", "年龄", "age").setTransmethod("com.engine.gainway.transmethod.BasicResourceTrans.selectAge")); + } + + if ("EduRp".equals(cmd)) { + table.getColumns().add(new WeaTableColumn("10%", "学历", "educationlevel").setTransmethod("com.engine.gainway.transmethod.BasicResourceTrans.selectEducation")); + } + + if ("SeniorityRp".equals(cmd)) { + table.getColumns().add(new WeaTableColumn("10%", "司龄", "companyworkyear").setTransmethod("com.engine.gainway.transmethod.BasicResourceTrans.selectCompanyYear")); + + } - table.getColumns().add(new WeaTableColumn("10%", "分部", "resourceid").setTransmethod("com.engine.kqsolution.util.ResourceSnipUtils.selectResourceName")); - table.getColumns().add(new WeaTableColumn("10%", "一级部门", "workcode")); - table.getColumns().add(new WeaTableColumn("10%", "二级部门", "subcompanyid1").setTransmethod("com.engine.kqsolution.util.ResourceSnipUtils.selectSubCompanyName")); - table.getColumns().add(new WeaTableColumn("10%", "三级部门", "departmentid").setTransmethod("com.engine.kqsolution.util.ResourceSnipUtils.selectDeptName")); - table.getColumns().add(new WeaTableColumn("10%", "四级部门", "jobtitle").setTransmethod("com.engine.kqsolution.util.ResourceSnipUtils.selectJobName")); - table.getColumns().add(new WeaTableColumn("10%", "考勤结果", "result").setTransmethod("com.engine.kqsolution.util.ResourceSnipUtils.selectKqResult")); - table.getColumns().add(new WeaTableColumn("10%", "考勤结果", "result").setTransmethod("com.engine.kqsolution.util.ResourceSnipUtils.selectKqResult")); - table.getColumns().add(new WeaTableColumn("10%", "考勤结果", "result").setTransmethod("com.engine.kqsolution.util.ResourceSnipUtils.selectKqResult")); table.setTableType(WeaTableType.NONE); WeaResultMsg result = new WeaResultMsg(false); result.putAll(table.makeDataResult()); @@ -49,4 +148,64 @@ public class BasicResourceTableServiceImpl extends Service implements BasicResou resultMap.putAll(result.getResultMap()); return resultMap; } + + private String buildSqlwhere(String cmd,String name) { + String sql = ""; + if ("AgeRp".equals(cmd)) { + if (SystemEnv.getHtmlLabelName(15863,user.getLanguage()).equals(name)) { + sql += " and (a.birthday is null or a.birthday ='')"; + }else { + Map map = BasicResourceUtil.selectRangeSet(name); + String fromDate = map.get("fromDate"); + String toDate = map.get("toDate"); + sql += " and a.birthday >'"+fromDate+"' and a.birthday <='"+toDate+"' and a.birthday is not null"; + } + }else if("SexRp".equals(cmd)) { + if (SystemEnv.getHtmlLabelName(15808,user.getLanguage()).equals(name)) { + sql += " and (a.sex is null or a.sex ='')"; + }else if (SystemEnv.getHtmlLabelName(28473,user.getLanguage()).equals(name)){ + sql += " and a.sex = 0"; + }else { + sql += " and a.sex = 1"; + } + }else if ("SeniorityRp".equals(cmd)) { + if (SystemEnv.getHtmlLabelName(15863,user.getLanguage()).equals(name)) { + sql += " and (a.companystartdate is null or a.companystartdate ='')"; + }else { + Map map = BasicResourceUtil.companyYearRangeSet(name); + String fromDate = map.get("fromDate"); + String toDate = map.get("toDate"); + sql += " and a.companystartdate >'"+fromDate+"' and a.companystartdate <='"+toDate+"' and a.companystartdate is not null"; + } + + } else if ("EduRp".equals(cmd)) { + if (SystemEnv.getHtmlLabelName(21381,user.getLanguage()).equals(name)) { + sql += " and (a.educationlevel is null or a.educationlevel < 2)"; + }else { + List educationLevel = new ArrayList<>(); + //获取学历数据 不带多语言 + getEduLevel(educationLevel); + Integer levelId = educationLevel.stream() + .filter(edu -> name.equals(edu.getLevelName())) + .map(EducationLevelPo::getId) + .findFirst() + .orElse(-1); + sql += " and a.educationlevel = "+levelId; + } + } + + + return sql; + } + + + private void getEduLevel(List educationLevel) { + RecordSet rs = new RecordSet(); + rs.executeQuery("select id,name from hrmeducationlevel"); + while (rs.next()) { + Integer id = Util.getIntValue(rs.getString("id")); + String name = Util.formatMultiLang(Util.null2String(rs.getString("name")),String.valueOf(user.getLanguage())); + educationLevel.add(EducationLevelPo.builder().id(id).levelName(name).build()); + } + } } diff --git a/src/com/engine/gainway/transmethod/BasicResourceTrans.java b/src/com/engine/gainway/transmethod/BasicResourceTrans.java new file mode 100644 index 0000000..a4f5d7d --- /dev/null +++ b/src/com/engine/gainway/transmethod/BasicResourceTrans.java @@ -0,0 +1,70 @@ +package com.engine.gainway.transmethod; + +import com.engine.gainway.util.BasicResourceUtil; +import org.apache.commons.lang.StringUtils; +import weaver.hrm.company.SubCompanyComInfo; +import weaver.hrm.job.EducationLevelComInfo; +import weaver.hrm.job.JobTitlesComInfo; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.Calendar; + +/** + * @Author liang.cheng + * @Date 2024/12/12 9:33 AM + * @Description: TODO + * @Version 1.0 + */ +public class BasicResourceTrans { + + public static String selectSubCompanyName(String subcompanyid) { + SubCompanyComInfo sub = new SubCompanyComInfo(); + return sub.getSubCompanyname(subcompanyid); + } + + public static String selectJobName(String jobId) { + JobTitlesComInfo jc = new JobTitlesComInfo(); + return jc.getJobTitlesname(jobId); + } + + public static String selectSexName(String sex) { + if (StringUtils.isEmpty(sex)) { + return "未设置"; + }else { + return "0".equals(sex) ? "男" : "女"; + } + } + + public static String selectAge(String birthday) { + String age = ""; + if (StringUtils.isNotEmpty(birthday)) { + age = String.valueOf(BasicResourceUtil.calculateAge(birthday)); + } + return age; + } + + public static String selectEducation(String educationlevel) { + EducationLevelComInfo edu = new EducationLevelComInfo(); + String eduName = edu.getEducationLevelname(educationlevel); + if (StringUtils.isEmpty(eduName)) { + eduName = "空"; + } + return eduName; + } + + public static String selectCompanyYear(String companydate) { + Calendar calendar = Calendar.getInstance(); + int currentYear = calendar.get(Calendar.YEAR); + String yearDifference = ""; + if (StringUtils.isNotEmpty(companydate)) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + LocalDate date = LocalDate.parse(companydate, formatter); + int dateYear = date.getYear(); + yearDifference = String.valueOf(currentYear - dateYear); + } + return yearDifference; + } + + +} diff --git a/src/com/engine/gainway/util/BasicResourceUtil.java b/src/com/engine/gainway/util/BasicResourceUtil.java new file mode 100644 index 0000000..135e653 --- /dev/null +++ b/src/com/engine/gainway/util/BasicResourceUtil.java @@ -0,0 +1,90 @@ +package com.engine.gainway.util; + +import java.time.LocalDate; +import java.time.Period; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @Author liang.cheng + * @Date 2024/12/12 10:19 AM + * @Description: TODO + * @Version 1.0 + */ +public class BasicResourceUtil { + + + public static int calculateAge(String birthday) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + LocalDate birthDate = LocalDate.parse(birthday, formatter); + LocalDate today = LocalDate.now(); + + int age = Period.between(birthDate, today).getYears(); + + if (today.getMonthValue() < birthDate.getMonthValue() || + (today.getMonthValue() == birthDate.getMonthValue() && today.getDayOfMonth() < birthDate.getDayOfMonth())) { + // 如果当前日期还没有到达生日日期,年龄减1 + age--; + } + return age; + } + + public static Map rangeExtractor(String name){ + + Pattern pattern = Pattern.compile("\\d{1,2}"); + Matcher matcher = pattern.matcher(name); + int from = 0; + int to = 0; + + if (matcher.find()) { + from = Integer.parseInt(matcher.group()); + } + if (matcher.find()) { + to = Integer.parseInt(matcher.group()); + } + + Map map = new HashMap<>(2); + map.put("from",from); + map.put("to",to); + return map; + } + + + public static String calculateDate(LocalDate today, int number) { + LocalDate birthDate = today.minusYears(number); + return birthDate.toString(); + } + + public static Map selectRangeSet(String name) { + Map map = new HashMap<>(2); + //提取范围 + Map extractor = rangeExtractor(name); + + int from = extractor.get("from"); + int to = extractor.get("to"); + LocalDate today = LocalDate.now(); + String fromDate = calculateDate(today, to+1); + String toDate = calculateDate(today, from); + map.put("fromDate",fromDate); + map.put("toDate",toDate); + return map; + } + + public static Map companyYearRangeSet(String name) { + Map map = new HashMap<>(2); + //提取范围 + Map extractor = rangeExtractor(name); + + int from = extractor.get("from"); + int to = extractor.get("to"); + LocalDate today = LocalDate.now(); + String fromDate = calculateDate(today, to); + String toDate = calculateDate(today, from); + map.put("fromDate",fromDate); + map.put("toDate",toDate); + return map; + } +} diff --git a/src/test/MainTest.java b/src/test/MainTest.java index 2bfc0b3..4fdf652 100644 --- a/src/test/MainTest.java +++ b/src/test/MainTest.java @@ -1,5 +1,8 @@ package test; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + /** * @Author weaver_cl * @Description: @@ -9,6 +12,23 @@ package test; public class MainTest { public static void main(String[] args) { + String ageRangeStr = "20-39 岁"; + + // 使用正则表达式提取数字 + Pattern pattern = Pattern.compile("\\d{1,2}"); + Matcher matcher = pattern.matcher(ageRangeStr); + + int ageFrom = 0; + int ageTo = 0; + + if (matcher.find()) { + ageFrom = Integer.parseInt(matcher.group()); + } + if (matcher.find()) { + ageTo = Integer.parseInt(matcher.group()); + } + System.out.println("Age From: " + ageFrom); + System.out.println("Age To: " + ageTo); } }