diff --git a/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/controller/EmployeeRelationController.java b/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/controller/EmployeeRelationController.java index 8a42385..1645454 100644 --- a/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/controller/EmployeeRelationController.java +++ b/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/controller/EmployeeRelationController.java @@ -4,6 +4,7 @@ import com.weaver.common.authority.annotation.WeaPermission; import com.weaver.ebuilder.form.client.entity.field.ModuleField; import com.weaver.seconddev.jcl.organization.service.EmployeeRelationService; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -126,4 +127,31 @@ public class EmployeeRelationController { return actionMap; } + /** + * 员工管理-查询对应表的fieldId + * @return + */ + @GetMapping("/getFormField") + @WeaPermission(publicPermission = true) + public Map getFormField( + @RequestParam("formId") String formId, + @RequestParam("fieldId") String fieldId, + @RequestParam("title") String title){ + log.error("getFormField.formId:{},fieldId:{},title:{}", formId,fieldId,title); + Map actionMap = new HashMap<>(); + // 根据表名查询所有字段 + String formField = employeeRelationService.getFormField(formId, fieldId, title); + if(StringUtils.isNotBlank(formField)){ + log.error("getFormField.formField:{}", formField); + actionMap.put("code","200"); + actionMap.put("msg","接口调用成功!"); + }else{ + actionMap.put("code","201"); + actionMap.put("msg","返回数据为空!"); + } + actionMap.put("formField",formField); + log.error("getFormField.actionMap:{}", actionMap); + return actionMap; + } + } \ No newline at end of file diff --git a/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/esb/SynAllEmployeeInfoAction.java b/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/esb/SynAllEmployeeInfoAction.java new file mode 100644 index 0000000..0afb29a --- /dev/null +++ b/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/esb/SynAllEmployeeInfoAction.java @@ -0,0 +1,111 @@ +package com.weaver.seconddev.jcl.organization.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.jcl.organization.util.DatabaseUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.time.Period; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @use:定时同步所有人员主表信息 + * @date 2025年3月27日 + * @author xuxy + */ +@Service("synAllEmployeeInfo_jcl") +public class SynAllEmployeeInfoAction implements EsbServerlessRpcRemoteInterface { + + @Autowired + private DatabaseUtils databaseUtils; + + private static final Logger log = LoggerFactory.getLogger(SynAllEmployeeInfoAction.class); + + @Override + public WeaResult> execute(Map params) { + Map rs =new HashMap<>(); + //查询员工全量信息 + List> list = queryEmployeesInfo(); + //遍历更新日期不为空的人员:年龄、工龄、司龄 + Map result = updateEmployeesInfo(list); + log.error("SynEmployeeAgeGlSlInfoAction.flowV3:"+result); + rs.put("flowV3",result); + return WeaResult.success(rs); + } + + public List> queryEmployeesInfo() { + String sql=" SELECT id,birthDate,first_work_date,hiredate,age,work_year,sl from uf_jcl_employee_information where delete_type=0 and TENANT_KEY='t7n9jpeaoa' " ; + log.error("queryEmployeesInfo.sql:{}",sql); + Map rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + List> recordList = databaseUtils.getDataSourceList(rs); + log.error("queryEmployeesInfo.recordList:{}",recordList); + return recordList; + } + + public Map updateEmployeesInfo(List> list) { + Map rs = new HashMap<>(); + //判断调动生效日期是否为当天或者当天之前 + LocalDate currentDate = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + for (Map employee : list) { + String birthDateString = (String) employee.get("birthDate"); + String firstWorkDateString = (String) employee.get("first_work_date"); + String joinDateString = (String) employee.get("hiredate"); + log.error("updateEmployeesInfo.birthDateString:{},firstWorkDateString:{},joinDateString:{}",birthDateString,firstWorkDateString,joinDateString); + if (birthDateString != null && !birthDateString.isEmpty()) { + LocalDate birthDate = LocalDate.parse(birthDateString, formatter); + int age = calculateFullYears(birthDate, currentDate); + employee.put("age", age); + } else { + employee.put("age", null); // 或者可以选择不放入 Map 中 + } + + if (firstWorkDateString != null && !firstWorkDateString.isEmpty()) { + LocalDate firstWorkDate = LocalDate.parse(firstWorkDateString, formatter); + Double workYears = calculateYears(firstWorkDate, currentDate); + employee.put("work_year", workYears); + } else { + employee.put("work_year", null); // 或者可以选择不放入 Map 中 + } + + if (joinDateString != null && !joinDateString.isEmpty()) { + LocalDate joinDate = LocalDate.parse(joinDateString, formatter); + Double companyYears = calculateYears(joinDate, currentDate); + employee.put("sl", companyYears); + } else { + employee.put("sl", null); // 或者可以选择不放入 Map 中 + } + } + //再全量更新 + for (Map objectMap : list) { + String id = (String) objectMap.get("id"); + String birthDateString = (String) objectMap.get("age"); + String firstWorkDateString = (String) objectMap.get("work_year"); + String joinDateString = (String) objectMap.get("sl"); + String sql = "update uf_jcl_employee_information set age = '" + birthDateString + "',work_year = '" + firstWorkDateString + "',sl = '" + joinDateString + "'" + + " where id = '" + id + "' and TENANT_KEY = 't7n9jpeaoa' and delete_type=0 "; + log.error("updateEmployeesInfo.sql:{}", sql); + rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + log.error("updateEmployeesInfo.rs:{}", rs); + } + return rs; + } + private int calculateFullYears(LocalDate startDate, LocalDate endDate) { + return Period.between(startDate, endDate).getYears(); + } + + private Double calculateYears(LocalDate startDate, LocalDate endDate) { + Period period = Period.between(startDate, endDate); + double years = period.getYears() + (period.getMonths() / 12.0) + (period.getDays() / 365.0); + return Math.round(years * 100.0) / 100.0; // 保留两位小数 + } + + +} diff --git a/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/esb/SynEmployeeAgeGlSlInfoAction.java b/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/esb/SynEmployeeAgeGlSlInfoAction.java new file mode 100644 index 0000000..d15ca78 --- /dev/null +++ b/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/esb/SynEmployeeAgeGlSlInfoAction.java @@ -0,0 +1,108 @@ +package com.weaver.seconddev.jcl.organization.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.jcl.organization.util.DatabaseUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.time.LocalDate; +import java.time.Period; +import java.time.format.DateTimeFormatter; +import java.util.*; + +/** + * @use:定时同步人员年龄、工龄、司龄 + * @date 2025年3月26日 + * @author xuxy + */ +@Service("updateEmployeeAgeGlSlInfo_jcl") +public class SynEmployeeAgeGlSlInfoAction implements EsbServerlessRpcRemoteInterface { + + @Autowired + private DatabaseUtils databaseUtils; + + private static final Logger log = LoggerFactory.getLogger(SynEmployeeAgeGlSlInfoAction.class); + + @Override + public WeaResult> execute(Map params) { + Map rs =new HashMap<>(); + //查询员工全量信息 + List> list = queryEmployeesInfo(); + //遍历更新日期不为空的人员:年龄、工龄、司龄 + Map result = updateEmployeesInfo(list); + log.error("SynEmployeeAgeGlSlInfoAction.flowV3:"+result); + rs.put("flowV3",result); + return WeaResult.success(rs); + } + + public List> queryEmployeesInfo() { + String sql=" SELECT id,birthDate,first_work_date,hiredate,age,work_year,sl from uf_jcl_employee_information where delete_type=0 and TENANT_KEY='t7n9jpeaoa' " ; + log.error("queryEmployeesInfo.sql:{}",sql); + Map rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + List> recordList = databaseUtils.getDataSourceList(rs); + log.error("queryEmployeesInfo.recordList:{}",recordList); + return recordList; + } + + public Map updateEmployeesInfo(List> list) { + Map rs = new HashMap<>(); + //判断调动生效日期是否为当天或者当天之前 + LocalDate currentDate = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + for (Map employee : list) { + String birthDateString = (String) employee.get("birthDate"); + String firstWorkDateString = (String) employee.get("first_work_date"); + String joinDateString = (String) employee.get("hiredate"); + log.error("updateEmployeesInfo.birthDateString:{},firstWorkDateString:{},joinDateString:{}",birthDateString,firstWorkDateString,joinDateString); + if (birthDateString != null && !birthDateString.isEmpty()) { + LocalDate birthDate = LocalDate.parse(birthDateString, formatter); + int age = calculateFullYears(birthDate, currentDate); + employee.put("age", age); + } else { + employee.put("age", null); // 或者可以选择不放入 Map 中 + } + + if (firstWorkDateString != null && !firstWorkDateString.isEmpty()) { + LocalDate firstWorkDate = LocalDate.parse(firstWorkDateString, formatter); + Double workYears = calculateYears(firstWorkDate, currentDate); + employee.put("work_year", workYears); + } else { + employee.put("work_year", null); // 或者可以选择不放入 Map 中 + } + + if (joinDateString != null && !joinDateString.isEmpty()) { + LocalDate joinDate = LocalDate.parse(joinDateString, formatter); + Double companyYears = calculateYears(joinDate, currentDate); + employee.put("sl", companyYears); + } else { + employee.put("sl", null); // 或者可以选择不放入 Map 中 + } + } + //再全量更新 + for (Map objectMap : list) { + String id = (String) objectMap.get("id"); + String birthDateString = (String) objectMap.get("age"); + String firstWorkDateString = (String) objectMap.get("work_year"); + String joinDateString = (String) objectMap.get("sl"); + String sql = "update uf_jcl_employee_information set age = '" + birthDateString + "',work_year = '" + firstWorkDateString + "',sl = '" + joinDateString + "'" + + " where id = '" + id + "' and TENANT_KEY = 't7n9jpeaoa' and delete_type=0 "; + log.error("updateEmployeesInfo.sql:{}", sql); + rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + log.error("updateEmployeesInfo.rs:{}", rs); + } + return rs; + } + private int calculateFullYears(LocalDate startDate, LocalDate endDate) { + return Period.between(startDate, endDate).getYears(); + } + + private Double calculateYears(LocalDate startDate, LocalDate endDate) { + Period period = Period.between(startDate, endDate); + double years = period.getYears() + (period.getMonths() / 12.0) + (period.getDays() / 365.0); + return Math.round(years * 100.0) / 100.0; // 保留两位小数 + } + + +} diff --git a/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/service/EmployeeRelationService.java b/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/service/EmployeeRelationService.java index 180eacb..a37b389 100644 --- a/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/service/EmployeeRelationService.java +++ b/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/service/EmployeeRelationService.java @@ -14,4 +14,6 @@ public interface EmployeeRelationService { List> getTableColumnsOfTableName(String tableSchema,String tableName); List getTableColumns(String tableName); + + String getFormField(String formId,String fieldId,String title); } diff --git a/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/service/impl/EmployeeRelationServiceImpl.java b/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/service/impl/EmployeeRelationServiceImpl.java index a1736bd..c50b03e 100644 --- a/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/service/impl/EmployeeRelationServiceImpl.java +++ b/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/service/impl/EmployeeRelationServiceImpl.java @@ -75,7 +75,7 @@ public class EmployeeRelationServiceImpl implements EmployeeRelationService { @Override public List> getTableColumnsOfTableName(String tableSchema,String tableName) { - String sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS\n" + + String sql = "SELECT COLUMN_NAME,DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS\n" + "WHERE TABLE_SCHEMA = '" + tableSchema + "' AND TABLE_NAME = '" + tableName + "' "; log.error("getTableColumnsOfTableName.sql:{}", sql); Map rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); @@ -85,7 +85,10 @@ public class EmployeeRelationServiceImpl implements EmployeeRelationService { } @Override public List getTableColumns(String tableName) { + //saveFormFieldNew //todo (500报错) + //// SQL语句:向表A添加一个新字段 + // String sql = "ALTER TABLE A ADD COLUMN new_column_name VARCHAR(255)"; // 替换为你的字段名和类型 Long aLong = Long.valueOf(tableName); FieldsQueryDto fieldsQueryDto = new FieldsQueryDto(); fieldsQueryDto.setObjId(aLong); @@ -98,6 +101,31 @@ public class EmployeeRelationServiceImpl implements EmployeeRelationService { return fields; } + @Override + public String getFormField(String formId, String fieldId, String title) { + //1.先根据id查询title + String sql = "select title from form_field where id = '" + fieldId + "' "; + log.error("getFormField.sql:{}", sql); + Map rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + List> recordList = databaseUtils.getDataSourceList(rs); + log.error("getFormField.recordList:{}", recordList); + String titleNew = ""; + if(CollectionUtils.isNotEmpty(recordList)){ + titleNew = String.valueOf(recordList.get(0)); + } + //2.根据titleNew和formId查询id + String sql2 = "select id from form_field where form_id = '" + fieldId + "' and title = '" + titleNew + "'"; + log.error("getFormField.sql2:{}", sql2); + Map rs2 = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql2); + List> recordList2 = databaseUtils.getDataSourceList(rs2); + log.error("getFormField.recordList2:{}", recordList2); + String fieldIdNew = ""; + if(CollectionUtils.isNotEmpty(recordList2)){ + fieldIdNew = String.valueOf(recordList2.get(0)); + } + return fieldIdNew; + } + private void GetTableAlterStatements() { //1.获取连接池实例