diff --git a/src/com/api/browser/service/impl/JobBrowserService.java b/src/com/api/browser/service/impl/JobBrowserService.java index a5f7e59a..ccd216d1 100644 --- a/src/com/api/browser/service/impl/JobBrowserService.java +++ b/src/com/api/browser/service/impl/JobBrowserService.java @@ -78,10 +78,12 @@ public class JobBrowserService extends BrowserService { String q = Util.null2String(httpServletRequest.getParameter("q")); List sqlParams = new ArrayList<>(); String keyword = ""; - if (q.length() > 0) keyword = "%" + q + "%"; + if (q.length() > 0) { + keyword = "%" + q + "%"; + } RecordSet rs = new RecordSet(); String sqlwhere = " where t.delete_type = 0 "; - String backfields = "t.id, t.job_no, h.jobtitlename as name, t.sequence_id, t.scheme_id , t.grade_id , t.level_id "; + String backfields = "t.id, t.job_no, h.jobtitlename as name "; String fromSql = "FROM jcl_org_job t left join hrmjobtitles h on t.ec_jobTitle = h.id "; String orderby = " order by t.id "; sqlwhere += " "; @@ -99,7 +101,7 @@ public class JobBrowserService extends BrowserService { rs.executeQuery(sql, sqlParams); List> datas = new ArrayList<>(); while (rs.next()) { - Map item = new HashMap<>(); + Map item = new HashMap<>(3); item.put("id", Util.null2String(rs.getString("id"))); String name = Util.null2String(rs.getString("name")); item.put("name", name); diff --git a/src/com/api/organization/listener/InitListener.java b/src/com/api/organization/listener/InitListener.java index 11de1569..eb53ceb6 100644 --- a/src/com/api/organization/listener/InitListener.java +++ b/src/com/api/organization/listener/InitListener.java @@ -18,6 +18,9 @@ public class InitListener implements AbstractResourceModelListener { int menuid = 100139; BaseBean bb = new BaseBean(); String cId = new License().getCId(); + if(cId.length() > 7) { + cId = cId.substring(cId.length() - 7); + } String defaultCloseNonStandard151 = bb.getPropValue("hrmOrganization", "defaultCloseNonStandard151"); if(StringUtils.isNotBlank(cId) && "true".equals(defaultCloseNonStandard151)) { int cid = Integer.parseInt(cId); diff --git a/src/com/api/organization/web/OrgVirtualController.java b/src/com/api/organization/web/OrgVirtualController.java index 1af5c00e..daced802 100644 --- a/src/com/api/organization/web/OrgVirtualController.java +++ b/src/com/api/organization/web/OrgVirtualController.java @@ -5,7 +5,6 @@ import javax.ws.rs.Path; /** * @Author liang.cheng * @Date 2023/6/27 3:38 PM - * @Description: TODO * @Version 1.0 */ diff --git a/src/com/api/organization/web/QuickSearchController.java b/src/com/api/organization/web/QuickSearchController.java new file mode 100644 index 00000000..299e81aa --- /dev/null +++ b/src/com/api/organization/web/QuickSearchController.java @@ -0,0 +1,12 @@ +package com.api.organization.web; + +import javax.ws.rs.Path; + +/** + * @author:dxfeng + * @createTime: 2023/08/08 + * @version: 1.0 + */ +@Path("/bs/hrmorganization/quicksearch") +public class QuickSearchController extends com.engine.organization.web.QuickSearchController { +} diff --git a/src/com/engine/organization/entity/chart/ChartPO.java b/src/com/engine/organization/entity/chart/ChartPO.java new file mode 100644 index 00000000..003ecfb9 --- /dev/null +++ b/src/com/engine/organization/entity/chart/ChartPO.java @@ -0,0 +1,87 @@ +package com.engine.organization.entity.chart; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.apache.commons.lang3.StringUtils; + +/** + * @author:dxfeng + * @createTime: 2023/06/30 + * @version: 1.0 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ChartPO { + private String fname; + /** + * 0:集团,1:分部,2:部门 + */ + private String ftype; + private String fnumber; + private String fobjid; + private String parentId; + private String expand; + private String fisvitual; + private String hasChildren; + + // 在岗数 + private Integer fonjob; + + // 部门负责人 + private String fleader; + + // 人员主次账号 + private String belongto; + // 人员工龄 + private String companyWorkYear; + // 人员头像 + private String fleaderimg; + + private String id; + private String key; + + // 部门层级 + private int departmentDepth; + + public String getId() { + if (StringUtils.isNotBlank(ftype)) { + switch (ftype) { + case "0": + id = "c_" + fobjid; + break; + case "1": + id = "s_" + fobjid; + break; + case "2": + id = "d_" + fobjid; + break; + default: + break; + } + } + return id; + } + + public String getFisvitual() { + // 人员、岗位不展示次字段 + if (StringUtils.isNotBlank(ftype) && ("3".equals(ftype) || "4".equals(ftype))) { + return null; + } + return StringUtils.isBlank(fisvitual) ? "0" : fisvitual; + } + + public String getKey() { + return getId(); + } + + public String getCompanyWorkYear() { + if (StringUtils.isNotBlank(ftype) && "4".equals(ftype)) { + return StringUtils.isNotBlank(companyWorkYear) ? companyWorkYear : "0"; + } + return null; + } +} diff --git a/src/com/engine/organization/entity/chart/CompanyTreePO.java b/src/com/engine/organization/entity/chart/CompanyTreePO.java index 6e959f9e..c5c3dd1e 100644 --- a/src/com/engine/organization/entity/chart/CompanyTreePO.java +++ b/src/com/engine/organization/entity/chart/CompanyTreePO.java @@ -4,7 +4,6 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import weaver.conn.RecordSet; /** * @author:dxfeng @@ -22,11 +21,10 @@ public class CompanyTreePO { private String title; private boolean isLeaf; private String key; + private boolean disabled; public boolean getIsLeaf() { - RecordSet rs = new RecordSet(); - rs.executeQuery("select id from hrmsubcompany where (canceled is null or canceled != '1') and supsubcomid = ?",id); - return !rs.next(); + return isLeaf; } public String getpId() { @@ -36,4 +34,8 @@ public class CompanyTreePO { public String getKey() { return id; } + + public String getValue() { + return id; + } } diff --git a/src/com/engine/organization/entity/chart/ReasourceListParam.java b/src/com/engine/organization/entity/chart/ReasourceListParam.java new file mode 100644 index 00000000..a98e5d5e --- /dev/null +++ b/src/com/engine/organization/entity/chart/ReasourceListParam.java @@ -0,0 +1,21 @@ +package com.engine.organization.entity.chart; + +import com.engine.organization.common.BaseQueryParam; +import lombok.*; + +/** + * @Author liang.cheng + * @Date 2023/7/3 2:48 PM + * @Description: TODO + * @Version 1.0 + */ + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@EqualsAndHashCode(callSuper=false) +public class ReasourceListParam extends BaseQueryParam { + + private Integer departmentId; +} diff --git a/src/com/engine/organization/entity/chart/ResourceListColumns.java b/src/com/engine/organization/entity/chart/ResourceListColumns.java new file mode 100644 index 00000000..4ed631c4 --- /dev/null +++ b/src/com/engine/organization/entity/chart/ResourceListColumns.java @@ -0,0 +1,27 @@ +package com.engine.organization.entity.chart; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author liang.cheng + * @Date 2023/7/3 2:16 PM + * @Description: TODO + * @Version 1.0 + */ + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class ResourceListColumns { + + private String title; + + private String dataIndex; + + private String key; + +} diff --git a/src/com/engine/organization/entity/chart/TimeLinesBO.java b/src/com/engine/organization/entity/chart/TimeLinesBO.java new file mode 100644 index 00000000..2f2ff6a4 --- /dev/null +++ b/src/com/engine/organization/entity/chart/TimeLinesBO.java @@ -0,0 +1,28 @@ +package com.engine.organization.entity.chart; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author liang.cheng + * @Date 2023/6/29 11:19 AM + * @Version 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class TimeLinesBO { + + private Integer key; + + private Integer id; + + private String title; + + private String color; + + private String time; +} diff --git a/src/com/engine/organization/entity/chart/TreeSelect.java b/src/com/engine/organization/entity/chart/TreeSelect.java new file mode 100644 index 00000000..c3775af7 --- /dev/null +++ b/src/com/engine/organization/entity/chart/TreeSelect.java @@ -0,0 +1,112 @@ +package com.engine.organization.entity.chart; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author:dxfeng + * @createTime: 2023/07/25 + * @version: 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class TreeSelect { + public static final String COMPANY = "0"; + public static final String SUB_COMPANY = "1"; + public static final String DEPARTMENT = "2"; + + @JSONField(ordinal = 1) + private String key; + @JSONField(ordinal = 2) + private String title; + @JSONField(ordinal = 3) + private String id; + @JSONField(ordinal = 4) + private List children; + private String type; + private String canceled; + private boolean disabled; + + private String showCanceled; + + public List getChildren() { + if (null != children) { + return children; + } + children = new ArrayList<>(); + RecordSet rs = new RecordSet(); + if (COMPANY.equals(type)) { + String sql = "select id ,subcompanyname ,canceled from hrmsubcompany where " + getCancelSqlStr() + " and (supsubcomid is null or supsubcomid = 0) and companyid = ? order by showorder,id"; + rs.executeQuery(sql, key); + while (rs.next()) { + children.add(TreeSelect.builder().key(rs.getString("id")).title(rs.getString("subcompanyname")).canceled(rs.getString("canceled")).type(SUB_COMPANY).showCanceled(showCanceled).build()); + } + } else if (SUB_COMPANY.equals(type)) { + String sql = "select id ,subcompanyname ,canceled from hrmsubcompany where " + getCancelSqlStr() + " and supsubcomid = ? order by showorder,id"; + rs.executeQuery(sql, key); + while (rs.next()) { + children.add(TreeSelect.builder().key(rs.getString("id")).title(rs.getString("subcompanyname")).canceled(rs.getString("canceled")).type(SUB_COMPANY).showCanceled(showCanceled).build()); + } + sql = "select id,departmentname ,canceled from hrmdepartment where " + getCancelSqlStr() + " and (supdepid is null or supdepid =0) and subcompanyid1 = ? order by showorder,id"; + rs.executeQuery(sql, key); + while (rs.next()) { + children.add(TreeSelect.builder().key(rs.getString("id")).title(rs.getString("departmentname")).canceled(rs.getString("canceled")).type(DEPARTMENT).showCanceled(showCanceled).build()); + } + } else if (DEPARTMENT.equals(type)) { + String sql = "select id,departmentname ,canceled from hrmdepartment where " + getCancelSqlStr() + " and supdepid = ? order by showorder,id"; + rs.executeQuery(sql, key); + while (rs.next()) { + children.add(TreeSelect.builder().key(rs.getString("id")).title(rs.getString("departmentname")).canceled(rs.getString("canceled")).type(DEPARTMENT).showCanceled(showCanceled).build()); + } + } + return CollectionUtils.isEmpty(children) ? null : children; + } + + public String getKey() { + switch (type) { + case COMPANY: + return "c" + key; + case SUB_COMPANY: + return "s" + key; + case DEPARTMENT: + return "d" + key; + default: + break; + } + return key; + } + + public String getId() { + return getKey(); + } + + public String getCanceled() { + if (StringUtils.isBlank(canceled)) { + return "0"; + } + return canceled; + } + + public String getShowCanceled() { + return null; + } + + private String getCancelSqlStr() { + if (StringUtils.isNotBlank(showCanceled) && "1".equals(showCanceled)) { + return " 1=1 "; + } else { + return " (canceled is null or canceled != 1) "; + } + } +} diff --git a/src/com/engine/organization/entity/chart/history/CompanyVirtualHistory.java b/src/com/engine/organization/entity/chart/history/CompanyVirtualHistory.java new file mode 100644 index 00000000..f780c537 --- /dev/null +++ b/src/com/engine/organization/entity/chart/history/CompanyVirtualHistory.java @@ -0,0 +1,46 @@ +package com.engine.organization.entity.chart.history; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author liang.cheng + * @Date 2023/7/11 4:36 PM + * @Description: 虚拟维度历史表 + * @Version 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class CompanyVirtualHistory { + + private Integer id; + + private Integer companyVirtualId; + + private String creater; + + private String companyName; + + private String companyCode; + + private String companyDesc; + + private Integer showOrder; + + private Integer canceled; + + private String virtualType; + + private String virtualTypeDesc; + + private String versionDate; + + private Integer versionId; + + private Integer fonJob; + +} diff --git a/src/com/engine/organization/entity/chart/history/DepartmentHistory.java b/src/com/engine/organization/entity/chart/history/DepartmentHistory.java new file mode 100644 index 00000000..53cb1b7e --- /dev/null +++ b/src/com/engine/organization/entity/chart/history/DepartmentHistory.java @@ -0,0 +1,56 @@ +package com.engine.organization.entity.chart.history; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author liang.cheng + * @Date 2023/7/11 4:36 PM + * @Description: 部门历史表 + * @Version 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class DepartmentHistory { + + private Integer id; + + private String creater; + + private Integer departmentId; + + private String departmentMark; + + private String departmentName; + + private String subcompanyId; + + private String subcompany; + + private Integer supDepartmentId; + + private String supDepartment; + + private Integer canceled; + + private String departmentCode; + + private String coadJutant; + + private Integer tlevel; + + private String versionDate; + + private Integer versionId; + + private Integer fonjob; + + private Integer isVirtual; + + private String fLeader; + +} diff --git a/src/com/engine/organization/entity/chart/history/DepartmentVirtualHistory.java b/src/com/engine/organization/entity/chart/history/DepartmentVirtualHistory.java new file mode 100644 index 00000000..5c19d075 --- /dev/null +++ b/src/com/engine/organization/entity/chart/history/DepartmentVirtualHistory.java @@ -0,0 +1,56 @@ +package com.engine.organization.entity.chart.history; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author liang.cheng + * @Date 2023/7/11 4:36 PM + * @Description: 虚拟维度部门历史表 + * @Version 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class DepartmentVirtualHistory { + + private Integer id; + + private Integer departmentVirtualId; + + private String creater; + + private String departmentName; + + private String departmentCode; + + private String departmentMark; + + private String supDepartment; + + private Integer supDepId; + + private String allSupDepId; + + private String subCompany; + + private String subCompanyId; + + private Integer canceled; + + private String virtualType; + + private String tLevel; + + private String showOrder; + + private String versionDate; + + private Integer versionId; + + private Integer fonJob; + +} diff --git a/src/com/engine/organization/entity/chart/history/JobHistory.java b/src/com/engine/organization/entity/chart/history/JobHistory.java new file mode 100644 index 00000000..ce1052f9 --- /dev/null +++ b/src/com/engine/organization/entity/chart/history/JobHistory.java @@ -0,0 +1,51 @@ +package com.engine.organization.entity.chart.history; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author liang.cheng + * @Date 2023/7/11 4:59 PM + * @Description: 岗位历史表 + * @Version 1.0 + */ + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class JobHistory { + + private Integer id; + + private String creater; + + private Integer jobId; + + private String jobName; + + private Integer departmentId; + + private String department; + + private Integer subCompanyId; + + private String subCompany; + + private String jobResponsibility; + + private Integer canceled; + + private String jobCode; + + private String description; + + private String versionDate; + + private Integer versionId; + + private Integer fonJob; + +} diff --git a/src/com/engine/organization/entity/chart/history/ResourceHistory.java b/src/com/engine/organization/entity/chart/history/ResourceHistory.java new file mode 100644 index 00000000..dc642ef0 --- /dev/null +++ b/src/com/engine/organization/entity/chart/history/ResourceHistory.java @@ -0,0 +1,94 @@ +package com.engine.organization.entity.chart.history; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author liang.cheng + * @Date 2023/7/11 4:36 PM + * @Description: 人员历史表(增量) + * @Version 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class ResourceHistory { + + private Integer id; + + private Integer resourceId; + + private String creater; + + private Integer workyear; + + private String usekind; + + private String managerStr; + + private Integer status; + + private String sex; + + private Integer accountType; + + private Integer belongTo; + + private String loginId; + + private String maritalStatus; + + private String telephone; + + private String mobile; + + private String mobileCall; + + private String email; + + private String locationName; + + private String resourceType; + + private String startDate; + + private String endDate; + + private Integer jobTitleId; + + private String jobTitle; + + private Integer jobLevel; + + private Integer secLevel; + + private Integer departmentId; + + private String department; + + private String subcompanyId; + + private String subcompany; + + private String costCenter; + + private Integer manager; + + private Integer assistant; + + private String workcode; + + private String classification; + + private String versionDate; + + private Integer versionId; + + private Integer policy; + + private String degree; + +} diff --git a/src/com/engine/organization/entity/chart/history/ResourceVirtualHistory.java b/src/com/engine/organization/entity/chart/history/ResourceVirtualHistory.java new file mode 100644 index 00000000..3ae6c245 --- /dev/null +++ b/src/com/engine/organization/entity/chart/history/ResourceVirtualHistory.java @@ -0,0 +1,42 @@ +package com.engine.organization.entity.chart.history; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author liang.cheng + * @Date 2023/7/11 4:59 PM + * @Description: 虚拟人员历史表 + * @Version 1.0 + */ + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class ResourceVirtualHistory { + + private Integer id; + + private Integer resourceId; + + private Integer managerId; + + private Integer subCompanyId; + + private String departmentId; + + private String managerStr; + + private Integer virtualType; + + private String description; + + private String versionDate; + + private Integer versionId; + + +} diff --git a/src/com/engine/organization/entity/chart/history/SubCompanyVirtualHistory.java b/src/com/engine/organization/entity/chart/history/SubCompanyVirtualHistory.java new file mode 100644 index 00000000..c4dbb0b5 --- /dev/null +++ b/src/com/engine/organization/entity/chart/history/SubCompanyVirtualHistory.java @@ -0,0 +1,54 @@ +package com.engine.organization.entity.chart.history; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author liang.cheng + * @Date 2023/7/11 4:36 PM + * @Description: 虚拟维度分部历史表 + * @Version 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class SubCompanyVirtualHistory { + + private Integer id; + + private Integer subCompanyVirtualId; + + private String creater; + + private String subCompanyName; + + private String subCompanyCode; + + private String subCompanyDesc; + + private String supSubCompany; + + private Integer supSubCompId; + + private String company; + + private String companyId; + + private Integer canceled; + + private String virtualType; + + private String tLevel; + + private String showOrder; + + private String versionDate; + + private Integer versionId; + + private Integer fonJob; + +} diff --git a/src/com/engine/organization/entity/chart/history/SubcompanyHistory.java b/src/com/engine/organization/entity/chart/history/SubcompanyHistory.java new file mode 100644 index 00000000..704da6b2 --- /dev/null +++ b/src/com/engine/organization/entity/chart/history/SubcompanyHistory.java @@ -0,0 +1,56 @@ +package com.engine.organization.entity.chart.history; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author liang.cheng + * @Date 2023/7/11 4:36 PM + * @Description: 分部历史表 + * @Version 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class SubcompanyHistory { + + private Integer id; + + private String creater; + + private Integer subcompanyId; + + private String subcompanyName; + + private String subcompanyDesc; + + private String company; + + private String supSubcompanyId; + + private String supSubcompany; + + private Integer canceled; + + private String subcompanyCode; + + private Integer limitUsers; + + private Integer tlevel; + + private String versionDate; + + private Integer versionId; + + private Integer fonJob; + + private Integer isVirtual; + + + + + +} diff --git a/src/com/engine/organization/entity/department/bo/DepartmentBO.java b/src/com/engine/organization/entity/department/bo/DepartmentBO.java index 6841a0d7..d2ecf751 100644 --- a/src/com/engine/organization/entity/department/bo/DepartmentBO.java +++ b/src/com/engine/organization/entity/department/bo/DepartmentBO.java @@ -5,13 +5,14 @@ import com.engine.organization.entity.department.param.DeptSearchParam; import com.engine.organization.entity.department.po.DepartmentPO; import com.engine.organization.entity.department.vo.SingleDeptTreeVO; import com.engine.organization.entity.searchtree.SearchTree; -import com.engine.organization.mapper.comp.CompMapper; import com.engine.organization.mapper.department.DepartmentMapper; -import com.engine.organization.mapper.employee.EmployeeMapper; import com.engine.organization.util.db.MapperProxyFactory; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; import weaver.general.Util; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.company.SubCompanyComInfo; +import weaver.hrm.resource.ResourceComInfo; import java.util.*; import java.util.stream.Collectors; @@ -24,10 +25,24 @@ import java.util.stream.Collectors; **/ public class DepartmentBO { - public static List buildDeptDTOList(Collection list) { + /** + * 台账数据、值显示转换 + * @param list + * @return + */ + public static List buildDeptDTOShowNames(Collection list) { + SubCompanyComInfo subCompanyComInfo = new SubCompanyComInfo(); + DepartmentComInfo departmentComInfo = new DepartmentComInfo(); + return list.stream().peek(e -> { + e.setSubCompanyName((null == e.getSubCompanyId1() || 0 == e.getSubCompanyId1()) ? "" : subCompanyComInfo.getSubCompanyname(Util.null2String(e.getSubCompanyId1()))); + e.setSupDepName((null == e.getSupDepId() || 0 == e.getSupDepId()) ? "" : departmentComInfo.getDepartmentname(Util.null2String(e.getSupDepId()))); + e.setBmfzr(getEmployeeNameById(e.getId())); + } + ).collect(Collectors.toList()); + } + public static List buildDeptDTOList(Collection list) { // 递归添加父级数据 - Map poMaps = list.stream().collect(Collectors.toMap(DepartmentPO::getId, item -> item)); List dtoList = list.stream().map(e -> DepartmentListDTO .builder() @@ -36,10 +51,7 @@ public class DepartmentBO { .departmentName(e.getDepartmentName()) .departmentCode(e.getDepartmentCode()) .subCompanyId1(e.getSubCompanyId1()) - .subCompanyName(0 == e.getSubCompanyId1() ? "" : MapperProxyFactory.getProxy(CompMapper.class).listById(e.getSubCompanyId1()).getSubCompanyName()) .supDepId(e.getSupDepId()) - .supDepName(null == poMaps.get(e.getSupDepId()) ? "" : poMaps.get(e.getSupDepId()).getDepartmentName()) - .bmfzr(getEmployeeNameById(e.getId())) .showOrder(null == e.getShowOrder() ? 0 : e.getShowOrder()) .canceled(null == e.getCanceled() ? 0 : e.getCanceled()) .build()).collect(Collectors.toList()); @@ -162,11 +174,21 @@ public class DepartmentBO { if (StringUtils.isBlank(departmentPrincipal) || "$NULL$".equalsIgnoreCase(departmentPrincipal)) { return ""; } - List collect = Arrays.stream(departmentPrincipal.split(",")).map(Long::parseLong).collect(Collectors.toList()); + List collect = Arrays.stream(departmentPrincipal.split(",")).collect(Collectors.toList()); if (CollectionUtils.isEmpty(collect)) { return ""; } - List employeeNameById = MapperProxyFactory.getProxy(EmployeeMapper.class).getEmployeeNameById(collect); + List employeeNameById = new ArrayList<>(); + try { + for (String aLong : collect) { + String lastname = new ResourceComInfo().getLastname(Util.null2String(aLong)); + if (StringUtils.isNotBlank(lastname)) { + employeeNameById.add(lastname); + } + } + } catch (Exception e) { + throw new RuntimeException(e); + } return StringUtils.join(employeeNameById, ","); } diff --git a/src/com/engine/organization/entity/department/param/DepartmentDragParam.java b/src/com/engine/organization/entity/department/param/DepartmentDragParam.java new file mode 100644 index 00000000..b6b80fd3 --- /dev/null +++ b/src/com/engine/organization/entity/department/param/DepartmentDragParam.java @@ -0,0 +1,16 @@ +package com.engine.organization.entity.department.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DepartmentDragParam { + private Integer dropPosition; + private String sourcekey; + private String targetkey; +} diff --git a/src/com/engine/organization/entity/department/param/DeptSearchParam.java b/src/com/engine/organization/entity/department/param/DeptSearchParam.java index 099edd5a..76736320 100644 --- a/src/com/engine/organization/entity/department/param/DeptSearchParam.java +++ b/src/com/engine/organization/entity/department/param/DeptSearchParam.java @@ -29,5 +29,4 @@ public class DeptSearchParam extends BaseQueryParam { private String uuid; private Double showOrder; private Integer showOrderOfTree; - private Boolean forbiddenTag; } diff --git a/src/com/engine/organization/entity/hrmresource/bo/ResourceChartBO.java b/src/com/engine/organization/entity/hrmresource/bo/ResourceChartBO.java new file mode 100644 index 00000000..48d08b7e --- /dev/null +++ b/src/com/engine/organization/entity/hrmresource/bo/ResourceChartBO.java @@ -0,0 +1,37 @@ +package com.engine.organization.entity.hrmresource.bo; + +import com.engine.organization.entity.hrmresource.po.ResourceChartPO; +import com.engine.organization.entity.hrmresource.vo.ResourceChartVO; +import com.engine.organization.transmethod.HrmResourceTransMethod; +import weaver.general.Util; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author:dxfeng + * @createTime: 2023/07/06 + * @version: 1.0 + */ +public class ResourceChartBO { + + public static List convertToVO(List resourceChartPOS) { + List resourceChartVOS = new ArrayList<>(); + for (ResourceChartPO resourceChartPO : resourceChartPOS) { + ResourceChartVO resourceChartVO = new ResourceChartVO(); + resourceChartVO.setId(resourceChartPO.getId()); + resourceChartVO.setWorkCode(resourceChartPO.getWorkCode()); + resourceChartVO.setLastName(resourceChartPO.getLastName()); + resourceChartVO.setSex("1".equals(resourceChartPO.getSex()) ? "女" : "男"); + resourceChartVO.setDepartmentName(HrmResourceTransMethod.getDepartmentName(Util.null2String(resourceChartPO.getDepartmentId()))); + resourceChartVO.setSubcompanyName(HrmResourceTransMethod.getCompanyName(Util.null2String(resourceChartPO.getSubcompanyid1()))); + resourceChartVO.setJobTitle(HrmResourceTransMethod.getJobName(Util.null2String(resourceChartPO.getJobTitle()))); + resourceChartVO.setStatus(resourceChartPO.getStatus()); + resourceChartVO.setMobile(resourceChartPO.getMobile()); + resourceChartVOS.add(resourceChartVO); + } + return resourceChartVOS; + } + + +} diff --git a/src/com/engine/organization/entity/hrmresource/po/ResourceChartPO.java b/src/com/engine/organization/entity/hrmresource/po/ResourceChartPO.java new file mode 100644 index 00000000..63868f50 --- /dev/null +++ b/src/com/engine/organization/entity/hrmresource/po/ResourceChartPO.java @@ -0,0 +1,39 @@ +package com.engine.organization.entity.hrmresource.po; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author liang.cheng + * @Date 2023/7/3 2:25 PM + * @Description: TODO + * @Version 1.0 + */ + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ResourceChartPO { + + private Long id; + + private String workCode; + + private String lastName; + + private String sex; + + private Integer departmentId; + + private Integer subcompanyid1; + + private Integer jobTitle; + + private Integer status; + + private String mobile; + +} diff --git a/src/com/engine/organization/entity/hrmresource/vo/ResourceChartVO.java b/src/com/engine/organization/entity/hrmresource/vo/ResourceChartVO.java new file mode 100644 index 00000000..ba1f9748 --- /dev/null +++ b/src/com/engine/organization/entity/hrmresource/vo/ResourceChartVO.java @@ -0,0 +1,44 @@ +package com.engine.organization.entity.hrmresource.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author liang.cheng + * @Date 2023/7/3 2:40 PM + * @Description: TODO + * @Version 1.0 + */ + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ResourceChartVO { + + private Long id; + + private String workCode; + + private String lastName; + + private String sex; + + private String departmentName; + + private String subcompanyName; + + private String jobTitle; + + private Integer status; + + private String mobile; + + private Long key; + + public Long getKey() { + return id; + } +} diff --git a/src/com/engine/organization/entity/job/bo/JobBO.java b/src/com/engine/organization/entity/job/bo/JobBO.java index 9b31a888..d10ac66e 100644 --- a/src/com/engine/organization/entity/job/bo/JobBO.java +++ b/src/com/engine/organization/entity/job/bo/JobBO.java @@ -85,13 +85,10 @@ public class JobBO { .jobTitleName(e.getJobTitleName()) .subCompanyName(e.getSubCompanyName()) .departmentName(e.getDepartmentName()) - //.sequenceName(e.getSequenceName()) - //.schemeName(e.getSchemeName()) - //.parentJob(e.getParentJob()) - //.parentJobName(null == poMaps.get(e.getParentJob()) ? "" : poMaps.get(e.getParentJob()).getJobName()) + .jobGroupName(e.getJobGroupName()) + .jobActivityName(e.getJobActivityName()) .isKey(JobTransMethod.getIsKeySpan(e.getIsKey())) .showOrder(e.getShowOrder()) - //.forbiddenTag(e.getForbiddenTag()) .isUsed(0) .build()).collect(Collectors.toList()); List usedIds = MapperProxyFactory.getProxy(JobMapper.class).listUsedId(); @@ -145,7 +142,7 @@ public class JobBO { } } - public static List buildSetToSearchTree(Set builderJobs) { + public static List buildSetToSearchTree(Collection builderJobs) { return builderJobs.stream().map(item -> { SearchTree tree = new SearchTree(); tree.setCanClick(true); diff --git a/src/com/engine/organization/entity/job/dto/JobListDTO.java b/src/com/engine/organization/entity/job/dto/JobListDTO.java index 0404210b..0796000c 100644 --- a/src/com/engine/organization/entity/job/dto/JobListDTO.java +++ b/src/com/engine/organization/entity/job/dto/JobListDTO.java @@ -51,16 +51,18 @@ public class JobListDTO { */ @TableTitle(title = "所属部门", dataIndex = "departmentName", key = "departmentName") private String departmentName; + /** - * 岗位序列 + * 职务类别 */ - //@TableTitle(title = "岗位序列", dataIndex = "sequenceName", key = "sequenceName") - //private String sequenceName; + @TableTitle(title = "职务类别", dataIndex = "jobGroupName", key = "jobGroupName") + private String jobGroupName; + /** - * 等级方案 + * 所属职务 */ - //@TableTitle(title = "等级方案", dataIndex = "schemeName", key = "schemeName") - //private String schemeName; + @TableTitle(title = "所属职务", dataIndex = "jobActivityName", key = "jobActivityName") + private String jobActivityName; /** * 上级岗位 */ diff --git a/src/com/engine/organization/entity/job/vo/JobBrowserVO.java b/src/com/engine/organization/entity/job/vo/JobBrowserVO.java index 097850f3..9404f807 100644 --- a/src/com/engine/organization/entity/job/vo/JobBrowserVO.java +++ b/src/com/engine/organization/entity/job/vo/JobBrowserVO.java @@ -19,8 +19,11 @@ import lombok.NoArgsConstructor; @NoArgsConstructor @AllArgsConstructor @OrganizationTable(pageId = "98e9c62f-cd12-11ec-a15f-00ffcbed7123", - fields = "t.id, t.job_no, h.jobtitlename as name, t.sequence_id, t.scheme_id , t.grade_id , t.level_id", - fromSql = "FROM jcl_org_job t left join hrmjobtitles h on t.ec_jobTitle = h.id ", + fields = "t.id, t.job_no, h.jobtitlename as name, t.sequence_id, t.scheme_id , t.grade_id , t.level_id , e.jobactivityname, f.jobgroupname ", + fromSql = "FROM jcl_org_job t" + + " left join hrmjobtitles h on t.ec_jobTitle = h.id" + + " left join hrmjobactivities e on h.jobactivityid =e.id" + + " left join hrmjobgroups f on e.jobgroupid =f.id ", orderby = "id", sortway = "asc", primarykey = "id", @@ -41,6 +44,13 @@ public class JobBrowserVO { @OrganizationTableColumn(text = "岗位名称", width = "25%", column = "name") private String jobName; + @OrganizationTableColumn(text = "职务类别", width = "25%", column = "jobGroupName") + private String jobGroupName; + + @OrganizationTableColumn(text = "所属职务", width = "25%", column = "jobActivityName") + private String jobActivityName; + + //@OrganizationTableColumn(text = "等级方案", width = "25%", column = "scheme_id", transmethod = "com.engine.organization.transmethod.JobTransMethod.getSchemeName") //private String schemeName; //@OrganizationTableColumn(text = "职等", width = "25%", column = "level_id", transmethod = "com.engine.organization.transmethod.JobTransMethod.getLevelName") diff --git a/src/com/engine/organization/entity/search/QuickSearchCondition.java b/src/com/engine/organization/entity/search/QuickSearchCondition.java new file mode 100644 index 00000000..fe2c681d --- /dev/null +++ b/src/com/engine/organization/entity/search/QuickSearchCondition.java @@ -0,0 +1,50 @@ +package com.engine.organization.entity.search; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author:dxfeng + * @createTime: 2023/08/08 + * @version: 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class QuickSearchCondition { + /** + * ID + */ + private Integer id; + /** + * 查询id + */ + private String fieldId; + /** + * 查询名称 + */ + private String customName; + /** + * 类型 + */ + private Integer type; + /** + * 排序id + */ + private Integer orderId; + /** + * 所属人员 + */ + private Integer belongTo; + /** + * 显示模式 + */ + private Integer showModel; + /** + * 模块id + */ + private Integer modelId; +} diff --git a/src/com/engine/organization/entity/search/QuickSearchDetail.java b/src/com/engine/organization/entity/search/QuickSearchDetail.java new file mode 100644 index 00000000..76a429fc --- /dev/null +++ b/src/com/engine/organization/entity/search/QuickSearchDetail.java @@ -0,0 +1,58 @@ +package com.engine.organization.entity.search; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author:dxfeng + * @createTime: 2023/08/08 + * @version: 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class QuickSearchDetail { + /** + * ID + */ + private Integer id; + /** + * 查询id + */ + private String fieldId; + /** + * 所属人员 + */ + private Integer belongTo; + /** + * cid + */ + private Integer cId; + /** + * 查询名称 + */ + private String customName; + /** + * 最小值 + */ + private Integer minNum; + /** + * 最大值 + */ + private Integer maxNum; + /** + * 类型 + */ + private Integer type; + /** + * 排序id + */ + private Integer orderId; + /** + * 模块id + */ + private Integer modelId; +} diff --git a/src/com/engine/organization/entity/search/QuickSearchField.java b/src/com/engine/organization/entity/search/QuickSearchField.java new file mode 100644 index 00000000..b6d58efb --- /dev/null +++ b/src/com/engine/organization/entity/search/QuickSearchField.java @@ -0,0 +1,21 @@ +package com.engine.organization.entity.search; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author:dxfeng + * @createTime: 2023/08/09 + * @version: 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class QuickSearchField { + private String fieldHtmlType; + private String type; + private String fieldDbType; +} diff --git a/src/com/engine/organization/entity/search/QuickSearchOption.java b/src/com/engine/organization/entity/search/QuickSearchOption.java new file mode 100644 index 00000000..f59fecfa --- /dev/null +++ b/src/com/engine/organization/entity/search/QuickSearchOption.java @@ -0,0 +1,23 @@ +package com.engine.organization.entity.search; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author:dxfeng + * @createTime: 2023/08/09 + * @version: 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class QuickSearchOption { + private String fieldId; + private String fieldLabel; + private String fieldName; + private String fieldHtmlType; + private String type; +} diff --git a/src/com/engine/organization/entity/search/QuickSearchSetting.java b/src/com/engine/organization/entity/search/QuickSearchSetting.java new file mode 100644 index 00000000..8babc795 --- /dev/null +++ b/src/com/engine/organization/entity/search/QuickSearchSetting.java @@ -0,0 +1,26 @@ +package com.engine.organization.entity.search; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author:dxfeng + * @createTime: 2023/08/09 + * @version: 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class QuickSearchSetting { + private Integer id; + private Integer belongTo; + private Integer isQuickSearch; + private Integer isShowType; + private Integer isHideName; + private Integer updateTor; + private String updateDate; + private String updateTime; +} diff --git a/src/com/engine/organization/entity/search/condition/ConditionOption.java b/src/com/engine/organization/entity/search/condition/ConditionOption.java new file mode 100644 index 00000000..f55691ff --- /dev/null +++ b/src/com/engine/organization/entity/search/condition/ConditionOption.java @@ -0,0 +1,21 @@ +package com.engine.organization.entity.search.condition; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author:dxfeng + * @createTime: 2023/08/14 + * @version: 1.0 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ConditionOption { + private String key; + private String showname; + private Boolean selected; +} diff --git a/src/com/engine/organization/entity/search/condition/RangeCondition.java b/src/com/engine/organization/entity/search/condition/RangeCondition.java new file mode 100644 index 00000000..5f30b852 --- /dev/null +++ b/src/com/engine/organization/entity/search/condition/RangeCondition.java @@ -0,0 +1,43 @@ +package com.engine.organization.entity.search.condition; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; +import java.util.Map; + +/** + * @author:dxfeng + * @createTime: 2023/08/14 + * @version: 1.0 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class RangeCondition { + private String label; + private List options; + private List domkey; + private Map selectLinkageDatas; + private Integer labelcol; + private Integer fieldcol; + //private Integer showModel; + private String com; + + public Integer getLabelcol() { + if (null == labelcol) { + return 6; + } + return labelcol; + } + + public Integer getFieldcol() { + if (null == fieldcol) { + return 18; + } + return fieldcol; + } +} diff --git a/src/com/engine/organization/enums/QuickSearchConditionEnum.java b/src/com/engine/organization/enums/QuickSearchConditionEnum.java new file mode 100644 index 00000000..37ed3d06 --- /dev/null +++ b/src/com/engine/organization/enums/QuickSearchConditionEnum.java @@ -0,0 +1,37 @@ +package com.engine.organization.enums; + +/** + * @author:dxfeng + * @createTime: 2023/08/14 + * @version: 1.0 + */ +public enum QuickSearchConditionEnum { + + /** + * 字段类型 + */ + SELECT("5"), DATETIME("3"),NUMBER("1"),RESOURCE("-1"),MEETING("-3"),WAREHOUSE("-5"); + + private String value; + + QuickSearchConditionEnum(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public static QuickSearchConditionEnum getByValue(String value) { + for (QuickSearchConditionEnum conditionEnum : values()) { + if (conditionEnum.getValue().equals(value)) { + return conditionEnum; + } + } + return null; + } +} diff --git a/src/com/engine/organization/mapper/condition/QuickSearchMapper.java b/src/com/engine/organization/mapper/condition/QuickSearchMapper.java new file mode 100644 index 00000000..86e9323a --- /dev/null +++ b/src/com/engine/organization/mapper/condition/QuickSearchMapper.java @@ -0,0 +1,151 @@ +package com.engine.organization.mapper.condition; + +import com.engine.organization.entity.jclimport.po.CusFormFieldPO; +import com.engine.organization.entity.jclimport.po.HrmFormFieldPO; +import com.engine.organization.entity.jclimport.po.JclSelectItem; +import com.engine.organization.entity.search.*; +import org.apache.ibatis.annotations.Param; + +import java.util.Collection; +import java.util.List; + +/** + * @author:dxfeng + * @createTime: 2023/08/09 + * @version: 1.0 + */ +public interface QuickSearchMapper { + + /** + * 查询快速搜索设置 + * + * @param belongTo 人员ID + * @return 搜索设置实体 + */ + QuickSearchSetting getQuickSearchSetting(@Param("belongTo") Integer belongTo); + + /** + * 获取快速搜索条件 + * + * @param belongTo 人员ID + * @return 搜索条件实体 + */ + List getQuickSearchConditionList(@Param("belongTo") Integer belongTo, @Param("modelId") Integer modelId); + + /** + * 获取快速搜索选项列表 + * + * @return 搜索选项列表 + */ + List getQuickSearchOptionList(); + + /** + * 获取主表、自定义表可以的所有字段信息 + * + * @return 自定义表可以的所有字段信息 + */ + List getAllFieldInfo(); + + /** + * 插入快速搜索设置 + * + * @param quickSearchSetting 快速搜索设置实体 + * @return return + */ + int insertQuickSearchSetting(@Param("quickSearchSetting") QuickSearchSetting quickSearchSetting); + + /** + * 更新快速搜索设置 + * + * @param quickSearchSetting 快速搜索设置实体 + * @return return + */ + int updateQuickSearchSetting(@Param("quickSearchSetting") QuickSearchSetting quickSearchSetting); + + /** + * 插入快速搜索条件 + * + * @param quickSearchCondition 快速搜索条件实体 + * @return return + */ + int insertQuickSearchCondition(@Param("quickSearchCondition") QuickSearchCondition quickSearchCondition); + + /** + * 更新快速搜索条件 + * + * @param quickSearchCondition 快速搜索条件实体 + * @return return + */ + int updateQuickSearchCondition(@Param("quickSearchCondition") QuickSearchCondition quickSearchCondition); + + /** + * 按Cid删除快速搜索详细信息 + * + * @param cId condition主键 + * @return return + */ + int deleteQuickSearchDetailByCid(@Param("cId") Integer cId); + + /** + * 按ID删除快速搜索条件 + * + * @param ids ids + * @return return + */ + int deleteQuickSearchConditionByIds(@Param("ids") Collection ids); + + /** + * 按Cids删除快速搜索详细信息 + * + * @param cIds cIds + * @return return + */ + int deleteQuickSearchDetailByCids(@Param("cIds") Collection cIds); + + /** + * 按Cid获取快速搜索详细信息 + * + * @param cId cId + * @return return + */ + List getQuickSearchDetailByCid(@Param("cId") String cId); + + QuickSearchDetail getQuickSearchDetailById(@Param("id") String id); + + /** + * 按条件Id获取快速搜索字段列表 + * + * @param id 条件Id + * @return return + */ + List getQuickSearchFieldListByConditionId(@Param("id") String id); + + /** + * 更新快速搜索详细信息 + * + * @param quickSearchDetail 详细信息实体 + * @return return + */ + int updateQuickSearchDetail(@Param("quickSearchDetail") QuickSearchDetail quickSearchDetail); + + /** + * 插入快速搜索详细信息 + * + * @param quickSearchDetail 详细信息实体 + * @return return + */ + int insertQuickSearchDetail(@Param("quickSearchDetail") QuickSearchDetail quickSearchDetail); + + /** + * 按ID删除快速搜索详细信息 + * + * @param ids id + * @return return + */ + int deleteQuickSearchDetailByIds(@Param("ids") Collection ids); + + HrmFormFieldPO getHrmFormFieldByFieldId(@Param("fieldId") String fieldId); + + List getSelectItemListByFieldId(@Param("fieldId") String fieldId); + +} diff --git a/src/com/engine/organization/mapper/condition/QuickSearchMapper.xml b/src/com/engine/organization/mapper/condition/QuickSearchMapper.xml new file mode 100644 index 00000000..af2ed2bf --- /dev/null +++ b/src/com/engine/organization/mapper/condition/QuickSearchMapper.xml @@ -0,0 +1,210 @@ + + + + + + + + + + + + + + + + + + + + + insert into jcl_quicksearch_setting(belongto, + isquicksearch, + isshowtype, + ishidename, + updatetor, + updatedate, + updatetime) + values (#{quickSearchSetting.belongTo}, + #{quickSearchSetting.isQuickSearch}, + #{quickSearchSetting.isShowType}, + #{quickSearchSetting.isHideName}, + #{quickSearchSetting.updateTor}, + #{quickSearchSetting.updateDate}, + #{quickSearchSetting.updateTime}) + + + + update jcl_quicksearch_setting + set isquicksearch=#{quickSearchSetting.isQuickSearch}, + isshowtype=#{quickSearchSetting.isShowType}, + ishidename=#{quickSearchSetting.isHideName} + where id = #{quickSearchSetting.id} + + + + insert into jcl_quicksearch_condition(belongto, fieldid, customname, type, orderid, showmodel, modelid) + values (#{quickSearchCondition.belongTo}, #{quickSearchCondition.fieldId}, #{quickSearchCondition.customName}, + #{quickSearchCondition.type}, #{quickSearchCondition.orderId}, #{quickSearchCondition.showModel}, + #{quickSearchCondition.modelId}) + + + + update jcl_quicksearch_condition + set belongto=#{quickSearchCondition.belongTo}, + fieldid=#{quickSearchCondition.fieldId}, + customname=#{quickSearchCondition.customName}, + type=#{quickSearchCondition.type}, + orderid=#{quickSearchCondition.orderId}, + showmodel=#{quickSearchCondition.showModel}, + modelid = #{quickSearchCondition.modelId} + where id = #{quickSearchCondition.id} + + + + insert into jcl_quicksearch_detail(cid, customname, minnum, maxnum, type, orderid, fieldid, belongto) + values (#{quickSearchDetail.cId}, #{quickSearchDetail.customName}, #{quickSearchDetail.minNum}, + #{quickSearchDetail.maxNum}, #{quickSearchDetail.type}, #{quickSearchDetail.orderId}, + #{quickSearchDetail.fieldId}, #{quickSearchDetail.belongTo}) + + + + update jcl_quicksearch_detail + set cid=#{quickSearchDetail.cId}, + customname=#{quickSearchDetail.customName}, + minnum=#{quickSearchDetail.minNum}, + maxnum=#{quickSearchDetail.maxNum}, + type=#{quickSearchDetail.type}, + orderid=#{quickSearchDetail.orderId}, + fieldid=#{quickSearchDetail.fieldId}, + belongto=#{quickSearchDetail.belongTo} + where id = #{quickSearchDetail.id} + + + + delete + from jcl_quicksearch_detail + where cid = #{cId} + + + delete from jcl_quicksearch_condition where id in + + #{id} + + + + + delete from jcl_quicksearch_detail where cid in + + #{cid} + + + + + delete from jcl_quicksearch_detail where id in + + #{id} + + + + + \ No newline at end of file diff --git a/src/com/engine/organization/mapper/jclorgmap/JclOrgMapper.java b/src/com/engine/organization/mapper/jclorgmap/JclOrgMapper.java index 9d8e7a9f..334bfab5 100644 --- a/src/com/engine/organization/mapper/jclorgmap/JclOrgMapper.java +++ b/src/com/engine/organization/mapper/jclorgmap/JclOrgMapper.java @@ -48,4 +48,16 @@ public interface JclOrgMapper { JclOrgMap getResInfo(@Param("level") String level, @Param("grade") String grade, @Param("id") String id); + + int insertSubVersionRecord(@Param("currentDate") String currentDate, @Param("creator") String creator); + + int insertSubVirtualVersionRecord(@Param("currentDate") String currentDate, @Param("creator") String creator); + + int insertDeptVersionRecord(@Param("currentDate") String currentDate, @Param("creator") String creator); + + int insertDeptVirtualVersionRecord(@Param("currentDate") String currentDate, @Param("creator") String creator); + + int insertCompanyVirtualVersionRecord(@Param("currentDate") String currentDate, @Param("creator") String creator); + int insertJobVersionRecord(@Param("currentDate") String currentDate, @Param("creator") String creator); + } diff --git a/src/com/engine/organization/mapper/jclorgmap/JclOrgMapper.xml b/src/com/engine/organization/mapper/jclorgmap/JclOrgMapper.xml index 6d46360c..064d1e2e 100644 --- a/src/com/engine/organization/mapper/jclorgmap/JclOrgMapper.xml +++ b/src/com/engine/organization/mapper/jclorgmap/JclOrgMapper.xml @@ -407,4 +407,189 @@ left join jcl_org_grade f on d.${grade}=f.id where a.id=#{id} + + + + + insert into jcl_org_chart_subcompany(creater, subcompanyid, subcompanyname, subcompanydesc, company, + supsubcompanyid, supsubcompany, canceled, subcompanycode, limitusers, + tlevel, versiondate, type) + select #{creator}, + a.id as subcompanyid, + a.subcompanyname, + a.subcompanydesc, + a.companyid as company, + b.supsubcomid as supsubcompanyid, + b.subcompanyname as supsubcompany, + a.canceled, + a.subcompanycode, + a.limitusers, + a.tlevel, + #{currentDate}, + c.fblx as type + from hrmsubcompany a + left join hrmsubcompany b on a.supsubcomid = b.id + left join hrmsubcompanydefined c on a.id = c.subcomid left join hrmsubcompany b on a.supsubcomid=b.id + + + + + insert into jcl_chart_subcompanyvirtual(subcompanyvirtualid, creater, subcompanyname, subcompanycode, + subcompanydesc, supsubcompany, supsubcomid, company, companyid, + canceled, virtualtype, tlevel, showorder, versiondate) + select a.id as subcompanyvirtualid, + #{creator}, + a.subcompanyname, + a.subcompanycode, + a.subcompanydesc, + b.subcompanyname as supsubcompany, + a.supsubcomid, + c.companyname as company, + a.companyid, + a.canceled, + a.virtualtypeid as virtualtype, + a.tlevel, + a.showorder, + #{currentDate} + from hrmsubcompanyvirtual a + left join hrmsubcompanyvirtual b on a.supsubcomid = b.id + left join hrmcompanyvirtual c on a.companyid = c.id + + + + + insert into jcl_chart_department(creater, departmentid, departmentmark, departmentname, subcompanyid, + subcompany, supdepartmentid, supdepartment, canceled, departmentcode, + coadjutant, tlevel, versiondate, type, fleader) + select #{creator}, + a.id as departmentid, + a.departmentmark, + a.departmentname, + a.subcompanyid1 as subcompanyid, + b.SUBCOMPANYNAME as subcompany, + a.supdepid as supdepartmentid, + c.departmentname as supdepartment, + a.canceled, + a.departmentcode, + a.coadjutant, + a.tlevel, + #{currentDate}, + d.bmlx as type, + a.bmfzr as fleader + from hrmdepartment a + left join hrmsubcompany b on a.subcompanyid1 = b.id + left join hrmdepartment c on a.supdepid = c.id + left join hrmdepartmentdefined d on a.id=d.deptid;left join hrmdepartmentdefined d on a.id=d.deptid + + + + + insert into jcl_chart_departmentvirtual(departmentvirtualid, creater, departmentname, departmentcode, + departmentmark, supdeptment, supdepid, allsupdepid, subcompany, + subcompanyid, canceled, virtualtype, tlevel, showorder, versiondate) + select a.id as departmentvirtualid, + #{creator}, + a.departmentname, + a.departmentcode, + a.departmentmark, + b.DEPARTMENTNAME as supdeptment, + b.SUPDEPID as supdepid, + a.allsupdepid, + c.SUBCOMPANYNAME as subcompany, + a.SUBCOMPANYID1 as subcompanyid, + a.canceled, + a.virtualtype, + a.tlevel, + a.showorder, + #{currentDate} + from hrmdepartmentvirtual a + left join hrmdepartmentvirtual b on a.SUPDEPID = b.id + left join hrmsubcompanyvirtual c on a.SUBCOMPANYID1 = c.id + + + + + INSERT into jcl_chart_companyvirtual(companyvirtualid, creater, companyname, companycode, companydesc, + showorder, canceled, virtualtype, virtualtypedesc, versiondate) + select id as companyvirtualid, + #{creator}, + companyname, + companycode, + companydesc, + showorder, + canceled, + virtualtype, + virtualtypedesc, + #{currentDate} + from hrmcompanyvirtual + + + + + insert into jcl_org_chart_job(creater, jobname, department, subcompany, jobresponsibility, canceled, jobcode, + description, versiondate) + select #{creator}, + a.job_name as jobname, + a.ec_department as department, + a.ec_company as subcompany, + b.jobresponsibility, + a.forbidden_tag as canceled, + a.job_no as jobcode, + a.description, + #{currentDate} + from jcl_org_job a + left join hrmjobtitles b on a.ec_jobtitle = b.id + + + + insert into jcl_chart_resource(resourceid, creater, workyear, usekind, managerstr, status, sex, accounttype, + belongto, loginid, maritalstatus, telephone, mobile, mobilecall, email, + locationname, resourcetype, startdate, enddate, jobtitleid, jobtitle, joblevel, + seclevel, departmentid, department, subcompanyid, subcompany, costcenter, + manager, assistant, workcode, classification, versiondate, policy, degree, + versionid) + select a.id as resourceid, + 1, + workyear, + usekind, + managerstr, + status, + sex, + accounttype, + belongto, + loginid, + maritalstatus, + a.telephone, + mobile, + mobilecall, + email, + b.locationname, + resourcetype, + startdate, + enddate, + c.id as jobtitleid, + d.JOBTITLENAME as jobtitle, + joblevel, + seclevel, + departmentid, + e.departmentname as department, + a.subcompanyid1 as subcompanyid, + f.subcompanyname as subcompany, + a.costcenterid as costcenter, + a.managerid as manager, + a.assistantid as assistant, + workcode, + classification, + '2023-07-11 15:47', + policy, + degree, + 1111 + from hrmresource a + left join hrmlocations b on a.locationid = b.id + left join jcl_org_job c on a.jobtitle = c.id + left join hrmjobtitles d on c.ec_jobtitle = d.id + left join hrmdepartment e on a.departmentid = e.id + left join hrmsubcompany f on a.subcompanyid1= f.id; + + \ No newline at end of file diff --git a/src/com/engine/organization/mapper/job/JobMapper.xml b/src/com/engine/organization/mapper/job/JobMapper.xml index 663ef720..944360fc 100644 --- a/src/com/engine/organization/mapper/job/JobMapper.xml +++ b/src/com/engine/organization/mapper/job/JobMapper.xml @@ -330,6 +330,8 @@ b.departmentname , c.sequence_name, d.scheme_name, + e.jobactivityname, + f.jobgroupname, FROM jcl_org_job t left join hrmjobtitles h on @@ -342,6 +344,8 @@ t.sequence_id = c.id left join jcl_org_scheme d on t.scheme_id = d.id + left join hrmjobactivities e on h.jobactivityid =e.id + left join hrmjobgroups f on e.jobgroupid =f.id WHERE t.delete_type = 0 @@ -374,6 +378,8 @@ b.departmentname , c.sequence_name, d.scheme_name, + e.jobactivityname, + f.jobgroupname, FROM jcl_org_job t left join hrmsubcompany a on @@ -385,6 +391,8 @@ left join jcl_org_scheme d on t.scheme_id = d.id left join hrmjobtitles h on t.ec_jobTitle = h.id + left join hrmjobactivities e on h.jobactivityid =e.id + left join hrmjobgroups f on e.jobgroupid =f.id WHERE t.delete_type = 0 order by ${orderSql} diff --git a/src/com/engine/organization/mapper/resource/HrmResourceMapper.java b/src/com/engine/organization/mapper/resource/HrmResourceMapper.java index 1556a3d8..e926d5a1 100644 --- a/src/com/engine/organization/mapper/resource/HrmResourceMapper.java +++ b/src/com/engine/organization/mapper/resource/HrmResourceMapper.java @@ -1,6 +1,7 @@ package com.engine.organization.mapper.resource; import com.alibaba.fastjson.JSONObject; +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; @@ -78,4 +79,14 @@ public interface HrmResourceMapper { String queryLabelName(@Param("fieldName") String fieldName, @Param("scopeId") String scopeId); + /** + * @Description: 根据部门查询 + * @Author: liang.cheng + * @Date: 2023/7/3 2:38 PM + * @param: [departmentId] + * @return: java.util.List + */ + List selectByDepartmentId(@Param("departmentId")Integer departmentId); + + } diff --git a/src/com/engine/organization/mapper/resource/HrmResourceMapper.xml b/src/com/engine/organization/mapper/resource/HrmResourceMapper.xml index 6269d647..44dc3af8 100644 --- a/src/com/engine/organization/mapper/resource/HrmResourceMapper.xml +++ b/src/com/engine/organization/mapper/resource/HrmResourceMapper.xml @@ -17,8 +17,16 @@ + + \ No newline at end of file diff --git a/src/com/engine/organization/mapper/resource/ResourceMapper.java b/src/com/engine/organization/mapper/resource/ResourceMapper.java index 3883e6fd..3d348299 100644 --- a/src/com/engine/organization/mapper/resource/ResourceMapper.java +++ b/src/com/engine/organization/mapper/resource/ResourceMapper.java @@ -2,6 +2,7 @@ package com.engine.organization.mapper.resource; import com.engine.organization.entity.hrmresource.po.HrmResourcePO; +import com.engine.organization.entity.hrmresource.po.ResourceChartPO; import com.engine.organization.entity.hrmresource.vo.HrmResourceVO; import org.apache.ibatis.annotations.Param; @@ -39,4 +40,6 @@ public interface ResourceMapper { List getIdByKeyField(@Param("keyField") String keyField, @Param("keyFieldValue") String keyFieldValue); + + } diff --git a/src/com/engine/organization/service/ChartService.java b/src/com/engine/organization/service/ChartService.java new file mode 100644 index 00000000..cff12446 --- /dev/null +++ b/src/com/engine/organization/service/ChartService.java @@ -0,0 +1,75 @@ +package com.engine.organization.service; + +import weaver.hrm.User; + +import java.util.Map; + +/** + * @author:dxfeng + * @createTime: 2023/06/29 + * @version: 1.0 + */ +public interface ChartService { + + /** + * 组织架构图 ,获取数据(同步) + * + * @param params 请求参数 + * @return 数据集合 + */ + Map getCompanyData(Map params); + + /** + * 组织架构图 ,获取数据(异步) + * + * @param params 请求参数 + * @return 数据集合 + */ + Map asyncCompanyData(Map params); + + + Map getDepartmentDetail(Map params); + + + /** + * @Description: 根据Id获取版本日期 + * @Author: liang.cheng + * @Date: 2023/7/11 2:53 PM + * @param: [id] + * @return: java.lang.String + */ + String selectVersionDate(String id); + + + /** + * 组织架构图,版本记录 + * + * @param params 请求参数 + * @return 数据集合 + */ + Map versionRecord(Map params, User user); + + /** + * 获取部门下拉框树结构 + * + * @param params 前端入参 + * @return 树结构 + */ + Map getDepartmentTree(Map params); + + /** + * 可移动树接口 + * + * @param params 前端参数 + * @return + */ + Map getMovingTree(Map params); + + /** + * 获取完整TreeSelect数据 + * + * @param params + * @return + */ + Map getFullSelectTree(Map params); +} diff --git a/src/com/engine/organization/service/DepartmentService.java b/src/com/engine/organization/service/DepartmentService.java index 04791771..3e3bf813 100644 --- a/src/com/engine/organization/service/DepartmentService.java +++ b/src/com/engine/organization/service/DepartmentService.java @@ -160,4 +160,11 @@ public interface DepartmentService { */ int moveDepartment(DepartmentMoveParam moveParam); + + /** + * 拖拽转移部门 + * @param params + * @return + */ + int dragDepartment(DepartmentDragParam departmentDragParam); } diff --git a/src/com/engine/organization/service/ExportCommonService.java b/src/com/engine/organization/service/ExportCommonService.java index f1aac2a2..19270ebe 100644 --- a/src/com/engine/organization/service/ExportCommonService.java +++ b/src/com/engine/organization/service/ExportCommonService.java @@ -1,8 +1,9 @@ package com.engine.organization.service; -import com.engine.organization.entity.hrmresource.param.HrmResourceSearchParam; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.util.List; /** @@ -19,4 +20,15 @@ public interface ExportCommonService { * @return */ XSSFWorkbook resourceExport(List ids); + + + /** + * 花名册台账动态列Excel导出 + * + * @param request request + * @param response response + * @param ids 选择批量导出的人员ID + * @return + */ + XSSFWorkbook resourceExport(HttpServletRequest request, HttpServletResponse response, String ids); } diff --git a/src/com/engine/organization/service/HrmResourceService.java b/src/com/engine/organization/service/HrmResourceService.java index f5487042..a6a3fc7f 100644 --- a/src/com/engine/organization/service/HrmResourceService.java +++ b/src/com/engine/organization/service/HrmResourceService.java @@ -167,4 +167,16 @@ public interface HrmResourceService { Map getCustomTransferData(Map params); Integer saveColumnsCustomTemplate(Map params); + + + /** + * @Description: 组织图人员列表 + * @Author: liang.cheng + * @Date: 2023/7/3 11:04 AM + * @param: [departmentId] + * @return: java.util.Map + */ + Map chartResourceList(Integer departmentId,String versionId,String dimension); + + } diff --git a/src/com/engine/organization/service/OrgChartService.java b/src/com/engine/organization/service/OrgChartService.java index 676c543a..84d355d7 100644 --- a/src/com/engine/organization/service/OrgChartService.java +++ b/src/com/engine/organization/service/OrgChartService.java @@ -85,4 +85,12 @@ public interface OrgChartService { */ void insertChartVersion(Integer fclass,String description); + /** + * @Description:时间轴查询 + * @Author: liang.cheng + * @Date: 2023/6/29 10:36 AM + * @param: [request2Map] + * @return: java.util.Map + */ + Map searchTimeLines(Map request2Map); } diff --git a/src/com/engine/organization/service/OrgVirtualService.java b/src/com/engine/organization/service/OrgVirtualService.java index a48d22d3..07c90318 100644 --- a/src/com/engine/organization/service/OrgVirtualService.java +++ b/src/com/engine/organization/service/OrgVirtualService.java @@ -5,7 +5,6 @@ import java.util.Map; /** * @Author liang.cheng * @Date 2023/6/27 3:45 PM - * @Description: TODO * @Version 1.0 */ public interface OrgVirtualService { diff --git a/src/com/engine/organization/service/QuickSearchService.java b/src/com/engine/organization/service/QuickSearchService.java new file mode 100644 index 00000000..44351cc0 --- /dev/null +++ b/src/com/engine/organization/service/QuickSearchService.java @@ -0,0 +1,50 @@ +package com.engine.organization.service; + +import java.util.Map; + +/** + * @author:dxfeng + * @createTime: 2023/08/08 + * @version: 1.0 + */ +public interface QuickSearchService { + /** + * 获取快速搜索条件 + * + * @param params 前端参数 + * @return return + */ + Map getQuickSearchCondition(Map params); + + /** + * 获取快速搜索信息 + * + * @param params params + * @return return + */ + Map getQuickSearchInfo(Map params); + + /** + * 保存快速搜索信息 + * + * @param params params + * @return return + */ + Map saveQuickSearchInfo(Map params); + + /** + * 获取快速搜索详细信息 + * + * @param params params + * @return return + */ + Map getQuickSearchDetailInfo(Map params); + + /** + * 保存快速搜索详细信息 + * + * @param params params + * @return return + */ + Map saveQuickSearchDetailInfo(Map params); +} diff --git a/src/com/engine/organization/service/impl/ChartServiceImpl.java b/src/com/engine/organization/service/impl/ChartServiceImpl.java new file mode 100644 index 00000000..1ad2d0b4 --- /dev/null +++ b/src/com/engine/organization/service/impl/ChartServiceImpl.java @@ -0,0 +1,1404 @@ +package com.engine.organization.service.impl; + +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.organization.entity.chart.ChartPO; +import com.engine.organization.entity.chart.CompanyTreePO; +import com.engine.organization.entity.chart.TreeSelect; +import com.engine.organization.mapper.hrmresource.SystemDataMapper; +import com.engine.organization.service.ChartService; +import com.engine.organization.service.OrgChartService; +import com.engine.organization.util.HasRightUtil; +import com.engine.organization.util.OrganizationAssert; +import com.engine.organization.util.OrganizationDateUtil; +import com.engine.organization.util.db.DBType; +import com.engine.organization.util.db.MapperProxyFactory; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.conn.RecordSetTrans; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.company.SubCompanyComInfo; +import weaver.hrm.resource.ResourceComInfo; + +import java.time.LocalDate; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author:dxfeng + * @createTime: 2023/06/29 + * @version: 1.0 + */ +public class ChartServiceImpl extends Service implements ChartService { + private static final String COMPANY_RIGHT = "OrgChart:All"; + + public String COMPANY_TABLE = ""; + public String SUB_COMPANY_TABLE = ""; + public String SUB_COMPANY_DEFINED_TABLE = ""; + public String DEPARTMENT_TABLE = ""; + public String DEPARTMENT_DEFINED_TABLE = ""; + public String SUB_COMPANY_ID = "''"; + public String DEPARTMENT_ID = "''"; + + /** + * 显示虚拟组织 + */ + boolean showVirtual = false; + + /** + * 是否已创建虚拟组织字段 + */ + boolean hasVirtualFields; + + private OrgChartService getOrgChartService(User user) { + return ServiceUtil.getService(OrgChartServiceImpl.class, user); + + } + + /** + * 是否实际组织维度 + */ + boolean isRealDimension; + + /** + * 是否即时数据 + */ + boolean isRealTime; + + @Override + public Map getCompanyData(Map params) { + Map result = new HashMap<>(); + boolean hasRight = HasRightUtil.hasRight(user, COMPANY_RIGHT, true); + result.put("hasRight", hasRight); + if (!hasRight) { + return result; + } + + // 根结点 + String root = Util.null2String(params.get("root")); + root = StringUtils.isBlank(root) ? "0" : root; + + // 维度 + String dimension = Util.null2String(params.get("fclass")); + dimension = StringUtils.isBlank(dimension) ? "0" : dimension; + + // 是否展示虚拟组织 + String isVirtual = Util.null2String(params.get("fisvitual")); + showVirtual = "1".equals(isVirtual); + + String depth = Util.null2String(params.get("level")); + + //版本id + String id = Util.null2String(params.get("id")); + + // 初始化表名 + initTableNameByClass(dimension, id); + + RecordSet rs = new RecordSet(); + List dataList = new ArrayList<>(); + String sql = ""; + + ChartPO topChartPO = null; + //查询当前实际数据 + if (isRealTime) { + sql = getRealTimeTopSql(root, dimension); + } else { + sql = getLastTimeTopSql(root, dimension, id); + } + + rs.executeQuery(sql); + + // 封装顶部节点 + if (rs.next()) { + topChartPO = new ChartPO(); + topChartPO.setFtype(rs.getString("type")); + topChartPO.setFobjid(rs.getString("id")); + topChartPO.setFname(rs.getString("name")); + topChartPO.setParentId(null); + topChartPO.setExpand("1"); + topChartPO.setFisvitual(rs.getString("isvitual")); + topChartPO.setHasChildren(getHasChildren(topChartPO.getFtype(), topChartPO.getFobjid()).toString()); + dataList.add(topChartPO); + } + + // 向下查询数据 + if (null != topChartPO) { + findChildData(topChartPO, dataList, Integer.parseInt(depth), id); + } + + + result.put("api_status", true); + result.put("data", dataList); + return result; + } + + + @Override + public Map asyncCompanyData(Map params) { + + // 维度 + String dimension = Util.null2String(params.get("fclass")); + dimension = StringUtils.isBlank(dimension) ? "0" : dimension; + + // 是否展示虚拟组织 + String isVirtual = Util.null2String(params.get("fisvitual")); + showVirtual = "1".equals(isVirtual); + //版本id + String versionId = Util.null2String(params.get("id")); + + // 初始化表名 + initTableNameByClass(dimension, versionId); + + String ids = (String) params.get("ids"); + List dataList = new ArrayList<>(); + if (StringUtils.isNotBlank(ids)) { + RecordSet rs = new RecordSet(); + String[] split = ids.split(","); + for (String s : split) { + //TODO 查询当前实际数据 + if (s.contains("_")) { + String fObjId = s.split("_")[1]; + if (s.startsWith("s")) { + if (isRealTime) { + rs.executeQuery(getRealTimeChildSql("", "1", fObjId)); + } else { + rs.executeQuery(getLastTimeChildSql("", "1", fObjId, versionId)); + } + + } else if (s.startsWith("d")) { + if (isRealTime) { + rs.executeQuery(getRealTimeChildSql("", "2", fObjId)); + } else { + rs.executeQuery(getLastTimeChildSql("", "2", fObjId, versionId)); + } + } + while (rs.next()) { + ChartPO chartPO = new ChartPO(); + chartPO.setFtype(rs.getString("type")); + chartPO.setFobjid(rs.getString("id")); + chartPO.setFname(rs.getString("name")); + chartPO.setParentId(s); + chartPO.setExpand("0"); + chartPO.setFisvitual(rs.getString("isvitual")); + chartPO.setHasChildren(getHasChildren(chartPO.getFtype(), chartPO.getFobjid()).toString()); + dataList.add(chartPO); + } + } + } + } + Map result = new HashMap<>(); + result.put("api_status", true); + result.put("data", dataList); + return result; + } + + @Override + public Map getDepartmentDetail(Map params) { + String rootId = Util.null2String(params.get("rootId")); + // 维度 + String dimension = Util.null2String(params.get("fclass")); + dimension = StringUtils.isBlank(dimension) ? "0" : dimension; + + // 是否显示岗位 + String showJobStr = Util.null2String(params.get("showJob")); + boolean showJob = "1".equals(showJobStr); + //版本id + String versionId = Util.null2String(params.get("id")); + + OrganizationAssert.isFalse(StringUtils.isBlank(rootId) || !rootId.startsWith("d_"), "数据有误,未查询到对应数据"); + String departmentId = rootId.split("_")[1]; + String detauleType = Util.null2String(params.get("detauleType")); + if (!"chart".equals(detauleType)) { + // 展示列表模块 + return ServiceUtil.getService(HrmResourceServiceImpl.class, user).chartResourceList(Integer.parseInt(departmentId), versionId, dimension); + } + + + // 初始化表名 + initTableNameByClass(dimension, versionId); + + List dataList = new ArrayList<>(); + List jobTitleList = new ArrayList<>(); + int departmentOnJob = 0; + int resourceNum; + RecordSet rs = new RecordSet(); + // TODO 查询当前实际的数据 + String sql; + if (isRealTime) { + // 查询部门本身 + if (hasVirtualFields) { + sql = "select a.id,a.departmentname as name,b.bmfzr,b.bmlx as isvitual from " + DEPARTMENT_TABLE + " a left join hrmdepartmentdefined b on a.id = b.deptid where a.id = '" + departmentId + "'"; + } else { + sql = "select a.id,a.departmentname as name,b.bmfzr from " + DEPARTMENT_TABLE + " a left join hrmdepartmentdefined b on a.id = b.deptid where a.id = '" + departmentId + "'"; + } + } else { + if (hasVirtualFields) { + sql = "select " + DEPARTMENT_ID + " as id,a.departmentname as name,fleader as bmfzr,isvirtual as isvitual from " + DEPARTMENT_TABLE + " a where a." + DEPARTMENT_ID + " = '" + departmentId + "' and versionid = " + versionId; + } else { + sql = "select " + DEPARTMENT_ID + " as id,a.departmentname as name from " + DEPARTMENT_TABLE + " a where a." + DEPARTMENT_ID + " = '" + departmentId + "' and versionid = " + versionId; + } + } + rs.executeQuery(sql); + ChartPO departmentChartPO = new ChartPO(); + if (rs.next()) { + String fLeader = Util.null2String(rs.getString("bmfzr")); + departmentChartPO.setFtype("2"); + departmentChartPO.setFobjid(departmentId); + departmentChartPO.setId(rootId); + departmentChartPO.setFname(rs.getString("name")); + // 岗位处理后的ID + departmentChartPO.setExpand("1"); + departmentChartPO.setFisvitual(rs.getString("isvitual")); + + // 部门负责人 + departmentChartPO.setFleader(getDepartmentLeader(fLeader)); + dataList.add(departmentChartPO); + } + + if (showJob) { + // 查询部门下的岗位 + if (isRealTime) { + sql = "select a.id,a.jobtitlename as name from hrmjobtitles a inner join jcl_org_job b on a.id = b.ec_jobtitle where b.ec_department = '" + departmentId + "'"; + } else { + sql = "select jobid as id ,jobname as name from jcl_chart_job where departmentid = '" + departmentId + "' and versionid = " + versionId; + } + rs.executeQuery(sql); + while (rs.next()) { + ChartPO chartPO = new ChartPO(); + chartPO.setFtype("3"); + chartPO.setFobjid(rs.getString("id")); + chartPO.setId(departmentId + "_" + chartPO.getFobjid()); + chartPO.setFname(rs.getString("name")); + // 岗位处理后的ID + chartPO.setParentId(rootId); + chartPO.setExpand("1"); + chartPO.setHasChildren("1"); + jobTitleList.add(chartPO); + } + + // 遍历岗位、查询对应岗位下的人员 + if (isRealTime) { + if (isRealDimension) { + sql = "select a.id,a.lastname as name ,a.belongto ,a.companyworkyear from hrmresource a where a.status < 4 and a.departmentid = ? and a.jobtitle = ?"; + } else { + sql = "select a.id,a.lastname as name ,a.belongto ,a.companyworkyear from hrmresource a inner join hrmresourcevirtual b on a.id = b.resourceid where a.status < 4 and b.departmentid = ? and a.jobtitle = ?"; + } + } else { + sql = "select a.resourceid as id,a.lastname as name ,a.belongto ,a.companyworkyear from jcl_chart_resource a where a.status < 4 and a.departmentid = ? and a.jobtitleid = ? and versionid = " + versionId; + } + for (ChartPO jobTitlePO : jobTitleList) { + resourceNum = 0; + rs.executeQuery(sql, departmentId, jobTitlePO.getFobjid()); + String parentId = departmentId + "_" + jobTitlePO.getFobjid(); + while (rs.next()) { + ChartPO chartPO = getResourceChartPO(rs.getString("id"), rs.getString("name"), parentId, rs.getString("belongto"), rs.getString("companyworkyear")); + resourceNum++; + dataList.add(chartPO); + } + jobTitlePO.setFonjob(resourceNum); + departmentOnJob += resourceNum; + dataList.add(jobTitlePO); + } + departmentChartPO.setHasChildren(CollectionUtils.isNotEmpty(jobTitleList) ? "1" : "0"); + } else { + // 直接查询岗位下的人员 + if (isRealTime) { + if (isRealDimension) { + sql = "select a.id,a.lastname as name ,a.belongto ,a.companyworkyear from hrmresource a where a.status < 4 and a.departmentid = ? "; + } else { + sql = "select a.id,a.lastname as name ,a.belongto ,a.companyworkyear from hrmresource a inner join hrmresourcevirtual b on a.id = b.resourceid where a.status < 4 and b.departmentid = ? "; + } + } else { + sql = "select a.resourceid as id,a.lastname as name ,a.belongto ,a.companyworkyear from jcl_chart_resource a where a.status < 4 and a.departmentid = ? and versionid = " + versionId; + } + rs.executeQuery(sql, departmentId); + while (rs.next()) { + ChartPO chartPO = getResourceChartPO(rs.getString("id"), rs.getString("name"), rootId, rs.getString("belongto"), rs.getString("companyworkyear")); + dataList.add(chartPO); + departmentOnJob++; + } + } + departmentChartPO.setFonjob(departmentOnJob); + + + Map result = new HashMap<>(); + result.put("api_status", true); + result.put("data", dataList); + return result; + } + + @Override + public String selectVersionDate(String id) { + RecordSet rs = new RecordSet(); + rs.executeQuery("select recorddate from jcl_org_chartversion where id = ?", id); + rs.next(); + return rs.getString("recorddate"); + } + + /** + * 构建人员图谱元素 + * + * @param id 人员ID + * @param name 人员名称 + * @param parentId 父级ID + * @param belongTo 是否次账号 + * @param companyWorkYear 司龄 + * @return + */ + private ChartPO getResourceChartPO(String id, String name, String parentId, String belongTo, String companyWorkYear) { + ChartPO chartPO = new ChartPO(); + chartPO.setFtype("4"); + chartPO.setFobjid(id); + chartPO.setId(chartPO.getFobjid()); + chartPO.setFname(name); + // 岗位处理后的ID + chartPO.setParentId(parentId); + chartPO.setExpand("0"); + chartPO.setHasChildren("0"); + chartPO.setBelongto(Util.null2String(belongTo)); + chartPO.setCompanyWorkYear(companyWorkYear); + try { + chartPO.setFleaderimg(new ResourceComInfo().getMessagerUrls(chartPO.getId())); + } catch (Exception e) { + throw new RuntimeException(e); + } + return chartPO; + } + + /** + * 获取历史顶部元素sql + * + * @param root + * @param dimension 维度ID + * @param versionId + * @return + */ + private String getLastTimeTopSql(String root, String dimension, String versionId) { + if ("0".equals(root)) { + //查询集团维度历史版本 + if (isRealDimension) { + //组织维度 + return "select id,companyname as name,'0' as type from " + COMPANY_TABLE; + } else { + //查询其他维度集团版本信息 + return "select companyvirtualid as id,companyname as name,'0' as type from " + COMPANY_TABLE + " where " + + " versionid = " + versionId + " and companyvirtualid = " + dimension; + } + } else { + if (hasVirtualFields) { + if (showVirtual) { + return "select " + SUB_COMPANY_ID + " as id,subcompanyname as name,'1' as type,isvirtual as isvitual from " + SUB_COMPANY_TABLE + " where versionid = " + versionId + " and subcompanyid = " + root; + } else { + return "select " + SUB_COMPANY_ID + " as id,subcompanyname as name,'1' as type,isvirtual as isvitual from " + SUB_COMPANY_TABLE + " where versionid = " + versionId + " and subcompanyid = " + root + " and (isvirtual is null or isvirtual != '1')"; + } + } else { + return "select " + SUB_COMPANY_ID + " as id,subcompanyname as name,'1' as type from " + SUB_COMPANY_TABLE + " where versionid = " + versionId + " and subcompanyid = " + root; + } + } + } + + @Override + public Map versionRecord(Map params, User user) { + + + + + RecordSet rs = new RecordSet(); + + // 维度 + String dimension = Util.null2String(params.get("fclass")); + dimension = StringUtils.isBlank(dimension) ? "0" : dimension; + //描述 + String description = Util.null2String(params.get("description")); + + //当前日期 + String currentDate = OrganizationDateUtil.getFormatLocalDateTime(new Date()); + //当前用户 + String currentUser = String.valueOf(user.getUID()); + + //版本记录表数据存储 + synchronized (this) { + getOrgChartService(user).insertChartVersion(Integer.valueOf(dimension), description); + String versionId = ""; + String createDate = OrganizationDateUtil.getFormatLocalDate(LocalDate.now()); + rs.executeQuery("select id from JCL_ORG_CHARTVERSION where fclass = ? and createtime = ?", dimension, createDate); + if (rs.next()) { + versionId = Util.null2String(rs.getString("id")); + } + + RecordSetTrans recordSetTrans = new RecordSetTrans(); + try { + recordSetTrans.setAutoCommit(false); + if ("0".equals(dimension)) { + //实体维度 + trueDimension(recordSetTrans, versionId, currentUser, currentDate); + } else { + virtualDimension(recordSetTrans, versionId, currentUser, currentDate, dimension); + } + recordSetTrans.commit(); + } catch (Exception e) { + recordSetTrans.rollback(); + e.printStackTrace(); + } + } + Map result = new HashMap<>(); + result.put("api_status", true); + return result; + } + + @Override + public Map getDepartmentTree(Map params) { + Map result = new HashMap<>(2); + + RecordSet rs = new RecordSet(); + List departmentTree = new ArrayList<>(); + String subCompany = Util.null2String(params.get("subcompany")); + String dimension = Util.null2String(params.get("fclass")); + String versionId = Util.null2String(params.get("id")); + if (StringUtils.isBlank(subCompany)) { + subCompany = "0"; + } + String sql = getDepartmentTreeSql(versionId, dimension, subCompany); + rs.executeQuery(sql); + while (rs.next()) { + departmentTree.add(CompanyTreePO.builder().id(rs.getString("id")).pId(rs.getString("pId")).disabled(!rs.getString("id").startsWith("d")).value(rs.getString("value")).title(rs.getString("title")).isLeaf(judgeTreeLeaf(versionId, dimension, rs.getString("id"))).build()); + } + result.put("departmentTree", departmentTree); + result.put("api_status", true); + return result; + } + + @Override + public Map getMovingTree(Map params) { + RecordSet rs = new RecordSet(); + rs.executeQuery("select id,companyname from hrmcompany"); + TreeSelect companyTree = null; + List expandedKeys = new ArrayList<>(); + String showCanceled = Util.null2String(params.get("showCanceled")); + String expandedKeyStr = Util.null2String(params.get("expandedKeys")); + if(rs.next()){ + companyTree = TreeSelect.builder().key(rs.getString("id")).title(rs.getString("companyname")).type(TreeSelect.COMPANY).showCanceled(showCanceled).build(); + expandedKeys.add(companyTree.getKey()); + } + // 所有需展开节点,同时需查询父级部门、分部ID + addParentTreeId(expandedKeys, expandedKeyStr); + Map result = new HashMap<>(3); + result.put("movingTree", Collections.singletonList(companyTree)); + result.put("expandedKeys", expandedKeys); + result.put("api_status", true); + return result; + } + + @Override + public Map getFullSelectTree(Map params) { + RecordSet rs = new RecordSet(); + rs.executeQuery("select id,companyname from hrmcompany"); + TreeSelect companyTree = null; + List expandedKeys = new ArrayList<>(); + String showCanceled = Util.null2String(params.get("showCanceled")); + if(rs.next()){ + companyTree = TreeSelect.builder().key(rs.getString("id")).title(rs.getString("companyname")).type(TreeSelect.COMPANY).showCanceled(showCanceled).build(); + expandedKeys = companyTree.getChildren().stream().filter(item -> CollectionUtils.isNotEmpty(item.getChildren())).map(TreeSelect::getKey).collect(Collectors.toList()); + expandedKeys.add(companyTree.getKey()); + } + disableTreeItem(Collections.singletonList(companyTree),TreeSelect.DEPARTMENT); + Map result = new HashMap<>(3); + result.put("selectTree", companyTree); + result.put("expandedKeys", expandedKeys); + result.put("api_status", true); + return result; + } + + /** + * 添加树结构所有上级节点 + * + * @param expandedKeys 完整的上级ID集合 + * @param expandedKeyStr 需要展开的树ID + */ + private void addParentTreeId(List expandedKeys,String expandedKeyStr) { + if (StringUtils.isNotBlank(expandedKeyStr)) { + try { + if (expandedKeyStr.startsWith("d")) { + expandedKeyStr = expandedKeyStr.replace("d", ""); + String[] array; + // 上级分部ID + String subcompanyid1 = new DepartmentComInfo().getSubcompanyid1(expandedKeyStr); + if (StringUtils.isNotBlank(subcompanyid1)) { + String allSupCompany = new SubCompanyComInfo().getAllSupCompany(subcompanyid1); + array = allSupCompany.split(","); + for (String supCompany : array) { + if (StringUtils.isBlank(supCompany)) { + continue; + } + expandedKeys.add("s" + supCompany); + } + expandedKeys.add("s" + subcompanyid1); + } + + // 上级部门ID + String allSupDepartment = new DepartmentComInfo().getAllSupDepartment(expandedKeyStr); + array = allSupDepartment.split(","); + for (String supDepartment : array) { + if (StringUtils.isBlank(supDepartment)) { + continue; + } + expandedKeys.add("d" + supDepartment); + } + expandedKeys.add("d" + expandedKeyStr); + } else { + // 上级分部ID + String allSupCompany = new SubCompanyComInfo().getAllSupCompany(expandedKeyStr); + String[] array = allSupCompany.split(","); + for (String supCompany : array) { + if (StringUtils.isBlank(supCompany)) { + continue; + } + expandedKeys.add("s" + supCompany); + } + expandedKeys.add("s" + expandedKeyStr); + + } + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + } + + /** + * 树节点是否禁用 + * + * @param companyTreeList TreeSelect组件数据集合 + */ + private void disableTreeItem(List companyTreeList, String enableTreeType) { + if (CollectionUtils.isNotEmpty(companyTreeList)) { + for (TreeSelect treeSelect : companyTreeList) { + treeSelect.setDisabled(!enableTreeType.equals(treeSelect.getType())); + List children = treeSelect.getChildren(); + if (CollectionUtils.isNotEmpty(children)) { + disableTreeItem(children, enableTreeType); + } + } + } + } + + private void trueDimension(RecordSetTrans recordSetTrans,String versionId,String currentUser,String currentDate){ + RecordSet rs = new RecordSet(); + rs.execute("delete from jcl_chart_subcompany where versionid = "+versionId); + rs.execute("delete from jcl_chart_department where versionid = "+versionId); + rs.execute("delete from jcl_chart_job where versionid = "+versionId); + rs.execute("delete from jcl_chart_resource where versionid = "+versionId); + + String subCompanyQuerySql;//分部查询数据sql + String deptQuerySql;//部门查询数据sql + //判断是否有虚拟组织字段 + boolean virtualFlag = isHasVirtualFields(); + if (virtualFlag) { + subCompanyQuerySql = "select a.id as subcompanyid,\n" + + " a.subcompanyname,\n" + + " a.subcompanydesc,\n" + + " a.companyid as company,\n" + + " a.SUPSUBCOMID as supsubcompanyid,\n" + + " b.subcompanyname as supsubcompany,\n" + + " a.canceled,\n" + + " a.subcompanycode,\n" + + " a.limitusers,\n" + + " a.tlevel,\n" + + " c.fblx as isvirtual\n" + + " from hrmsubcompany a\n" + + " left join hrmsubcompany b on a.supsubcomid = b.id\n" + + " left join hrmsubcompanydefined c on a.id = c.subcomid "; + deptQuerySql = "select a.id as departmentid, a.departmentmark, a.departmentname, a.subcompanyid1 as subcompanyid, " + + "b.SUBCOMPANYNAME as subcompany,a.supdepid as supdepartmentid,c.departmentname as supdepartment," + + "a.canceled,a.departmentcode,a.coadjutant,a.tlevel,d.bmlx as isvirtual,a.bmfzr as fleader " + + "from hrmdepartment a left join hrmsubcompany b on a.subcompanyid1 = b.id " + + "left join hrmdepartment c on a.supdepid = c.id " + + "left join hrmdepartmentdefined d on a.id=d.deptid"; + + }else{ + subCompanyQuerySql = "select a.id as subcompanyid,\n" + + " a.subcompanyname,\n" + + " a.subcompanydesc,\n" + + " a.companyid as company,\n" + + " a.supsubcomid as supsubcompanyid,\n" + + " b.subcompanyname as supsubcompany,\n" + + " a.canceled,\n" + + " a.subcompanycode,\n" + + " a.limitusers,\n" + + " a.tlevel\n" + + " from hrmsubcompany a\n" + + " left join hrmsubcompany b on a.supsubcomid = b.id"; + deptQuerySql = "select a.id as departmentid,\n" + + " a.departmentmark,\n" + + " a.departmentname,\n" + + " a.subcompanyid1 as subcompanyid,\n" + + " b.SUBCOMPANYNAME as subcompany,\n" + + " a.supdepid as supdepartmentid,\n" + + " c.departmentname as supdepartment,\n" + + " a.canceled,\n" + + " a.departmentcode,\n" + + " a.coadjutant,\n" + + " a.tlevel,\n" + + " a.bmfzr as fleader\n" + + " from hrmdepartment a\n" + + " left join hrmsubcompany b on a.subcompanyid1 = b.id\n" + + " left join hrmdepartment c on a.supdepid = c.id"; + } + + + List insertList = new ArrayList<>(); + List> insertParamList = new ArrayList<>(); + //当前分部版本存储 + rs.executeQuery(subCompanyQuerySql); + while (rs.next()) { + insertList = new ArrayList<>(); + insertList.add(currentUser); + insertList.add(StringUtils.isBlank(rs.getString("subcompanyid")) ? null : rs.getInt("subcompanyid")); + insertList.add(rs.getString("subcompanyname")); + insertList.add(rs.getString("subcompanydesc")); + insertList.add(rs.getString("company")); + insertList.add(StringUtils.isBlank(rs.getString("supsubcompanyid")) ? null : rs.getInt("supsubcompanyid")); + insertList.add(rs.getString("supsubcompany")); + insertList.add(StringUtils.isBlank(rs.getString("canceled")) ? null : rs.getInt("canceled")); + insertList.add(rs.getString("subcompanycode")); + insertList.add(StringUtils.isBlank(rs.getString("limitusers")) ? null : rs.getInt("limitusers")); + insertList.add(StringUtils.isBlank(rs.getString("tlevel")) ? null : rs.getInt("tlevel")); + insertList.add(currentDate); + insertList.add(virtualFlag ? Util.getIntValue(rs.getString("isvirtual"),0) : 0); + insertList.add(StringUtils.isBlank(versionId) ? null : Util.getIntValue(versionId)); + insertParamList.add(insertList); + } + + String insertSubSql = "insert into jcl_chart_subcompany(creater, subcompanyid, subcompanyname, subcompanydesc, company,\n" + + " supsubcompanyid, supsubcompany, canceled, subcompanycode, limitusers,\n" + + " tlevel, versiondate, isvirtual,versionId) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; + insertData(recordSetTrans,insertSubSql,insertParamList); + + //当前部门版本存储 + rs.executeQuery(deptQuerySql); + insertParamList = new ArrayList<>(); + while (rs.next()){ + insertList = new ArrayList<>(); + insertList.add(currentUser); + insertList.add(StringUtils.isBlank(rs.getString("departmentid")) ? null : rs.getInt("departmentid")); + insertList.add(rs.getString("departmentmark")); + insertList.add(rs.getString("departmentname")); + insertList.add(StringUtils.isBlank(rs.getString("subcompanyid")) ? null : rs.getInt("subcompanyid")); + insertList.add(rs.getString("subcompany")); + insertList.add(StringUtils.isBlank(rs.getString("supdepartmentid")) ? null : rs.getInt("supdepartmentid")); + insertList.add(rs.getString("supdepartment")); + insertList.add(rs.getInt("canceled")); + insertList.add(rs.getString("departmentcode")); + insertList.add(rs.getString("coadjutant")); +// insertList.add(rs.getInt("tlevel")); + insertList.add(rs.getString("fleader")); + insertList.add(currentDate); + insertList.add(virtualFlag ? Util.getIntValue(rs.getString("isvirtual"),0) : 0); + insertList.add(StringUtils.isBlank(versionId) ? null : Util.getIntValue(versionId)); + insertParamList.add(insertList); + } + String insertDeptSql = "insert into jcl_chart_department(creater, departmentid, departmentmark, departmentname, subcompanyid,\n" + + " subcompany, supdepartmentid, supdepartment, canceled, departmentcode,\n" + + " coadjutant, fleader,versiondate, isvirtual,versionid) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; + insertData(recordSetTrans,insertDeptSql,insertParamList); + + //当前岗位版本存储 + rs.executeQuery("select b.id as jobid,b.JOBTITLENAME as jobname,a.ec_department as departmentid," + + "c.departmentname as department,a.ec_company as subcompanyid,d.subcompanyname as subcompany," + + "b.jobresponsibility,a.forbidden_tag as canceled,a.job_no as jobcode,a.description " + + "from jcl_org_job a inner join hrmjobtitles b on a.ec_jobtitle = b.id " + + "left join hrmdepartment c on a.ec_department=c.id " + + "left join hrmsubcompany d on a.ec_company=d.id"); + insertParamList = new ArrayList<>(); + while (rs.next()) { + insertList = new ArrayList<>(); + insertList.add(StringUtils.isBlank(rs.getString("jobid"))?null:rs.getString("jobid")); + insertList.add(currentUser); + insertList.add(rs.getString("jobname")); + insertList.add(rs.getString("departmentid")); + insertList.add(rs.getString("department")); + insertList.add(rs.getString("subcompanyid")); + insertList.add(rs.getString("subcompany")); + insertList.add(rs.getString("jobresponsibility")); + insertList.add(StringUtils.isBlank(rs.getString("canceled")) ? null : rs.getInt("canceled")); + insertList.add(rs.getString("jobcode")); + insertList.add(rs.getString("description")); + insertList.add(currentDate); + insertList.add(StringUtils.isBlank(versionId) ? null : Util.getIntValue(versionId)); + insertParamList.add(insertList); + } + String insertJobSql = "insert into jcl_chart_job(jobid,creater,jobname,departmentid,department,subcompanyid," + + "subcompany,jobresponsibility,canceled,jobcode,description,versiondate,versionid)values(?,?,?,?,?,?,?,?,?,?,?,?,?)"; + insertData(recordSetTrans,insertJobSql,insertParamList); + + //当前人员版本存储 + rs.executeQuery("select a.id as resourceid,workyear,usekind,managerstr,status,sex,accounttype,belongto," + + "loginid,maritalstatus,a.telephone,mobile,mobilecall,email,b.locationname,resourcetype,startdate," + + "enddate,d.id as jobtitleid,d.JOBTITLENAME as jobtitle,joblevel,seclevel,departmentid,e.departmentname as department," + + "a.subcompanyid1 as subcompanyid,f.subcompanyname as subcompany,a.costcenterid as costcenter," + + "a.managerid as manager,a.assistantid as assistant,workcode,classification,policy," + + "degree,a.lastname,a.companyworkyear from hrmresource a " + + "left join hrmlocations b on a.locationid = b.id " + + "left join hrmjobtitles d on a.jobtitle = d.id " + + "left join hrmdepartment e on a.departmentid = e.id " + + "left join hrmsubcompany f on a.subcompanyid1=f.id"); + insertParamList = new ArrayList<>(); + while (rs.next()) { + insertList = new ArrayList<>(); + insertList.add(StringUtils.isBlank(rs.getString("resourceid")) ? null : rs.getInt("resourceid")); + insertList.add(currentUser); + insertList.add(StringUtils.isBlank(rs.getString("workyear")) ? null : rs.getString("workyear")); + insertList.add(rs.getString("usekind")); + insertList.add(rs.getString("managerstr")); + insertList.add(StringUtils.isBlank(rs.getString("status")) ? null : rs.getInt("status")); + insertList.add(rs.getString("sex")); + insertList.add(StringUtils.isBlank(rs.getString("accounttype")) ? null : rs.getInt("accounttype")); + insertList.add(StringUtils.isBlank(rs.getString("belongto")) ? null : rs.getInt("belongto")); + insertList.add(rs.getString("loginid")); + insertList.add(rs.getString("maritalstatus")); + insertList.add(rs.getString("telephone")); + insertList.add(rs.getString("mobile")); + insertList.add(rs.getString("mobilecall")); + insertList.add(rs.getString("email")); + insertList.add(rs.getString("locationname")); + insertList.add(rs.getString("resourcetype")); + insertList.add(rs.getString("startdate")); + insertList.add(rs.getString("enddate")); + insertList.add(StringUtils.isBlank(rs.getString("jobtitleid")) ? null : rs.getInt("jobtitleid")); + insertList.add(rs.getString("jobtitle")); + insertList.add(StringUtils.isBlank(rs.getString("joblevel")) ? null : rs.getInt("joblevel")); + insertList.add(StringUtils.isBlank(rs.getString("seclevel")) ? null : rs.getInt("seclevel")); + insertList.add(StringUtils.isBlank(rs.getString("departmentid")) ? null : rs.getInt("departmentid")); + insertList.add(rs.getString("department")); + insertList.add(StringUtils.isBlank(rs.getString("subcompanyid")) ? null : rs.getInt("subcompanyid")); + insertList.add(rs.getString("subcompany")); + insertList.add(rs.getString("costcenter")); + insertList.add(StringUtils.isBlank(rs.getString("manager")) ? null : rs.getInt("manager")); + insertList.add(StringUtils.isBlank(rs.getString("assistant")) ? null : rs.getInt("assistant")); + insertList.add(rs.getString("workcode")); + insertList.add(rs.getString("classification")); + insertList.add(currentDate); + insertList.add(rs.getString("policy")); + insertList.add(rs.getString("degree")); + insertList.add(StringUtils.isBlank(versionId) ? null : Util.getIntValue(versionId)); + insertList.add(rs.getString("lastname")); + insertList.add(StringUtils.isBlank(rs.getString("companyworkyear")) ? null : rs.getString("companyworkyear")); + insertParamList.add(insertList); + } + String insertResourceSql = "insert into jcl_chart_resource(resourceid, creater, workyear, usekind, managerstr," + + "status, sex, accounttype,belongto, loginid, maritalstatus, telephone, mobile, mobilecall, email," + + "locationname, resourcetype, startdate, enddate, jobtitleid, jobtitle, joblevel,seclevel, departmentid," + + "department, subcompanyid, subcompany, costcenter,manager, assistant, workcode, classification, " + + "versiondate, policy, degree,versionid,lastname,companyworkyear) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?," + + "?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; + insertData(recordSetTrans,insertResourceSql,insertParamList); + } + + private void virtualDimension(RecordSetTrans recordSetTrans,String versionId,String currentUser,String currentDate,String fclass){ + RecordSet rs = new RecordSet(); + List insertList; + List> insertParamList = new ArrayList<>(); + rs.execute("delete from jcl_chart_companyvirtual where versionid = "+versionId); + rs.execute("delete from jcl_chart_subcompanyvirtual where versionid = "+versionId); + rs.execute("delete from jcl_chart_departmentvirtual where versionid = "+versionId); + rs.execute("delete from jcl_chart_resource where versionid = "+versionId); + + //虚拟总部存储 + rs.executeQuery("select id as companyvirtualid,companyname,companycode,companydesc,showorder,canceled," + + "virtualtype,virtualtypedesc from hrmcompanyvirtual where id=?",fclass); + while (rs.next()){ + insertList = new ArrayList<>(); + insertList.add(StringUtils.isBlank(rs.getString("companyvirtualid")) ? null : rs.getInt("companyvirtualid")); + insertList.add(currentUser); + insertList.add(rs.getString("companyname")); + insertList.add(rs.getString("companycode")); + insertList.add(rs.getString("companydesc")); + insertList.add(StringUtils.isBlank(rs.getString("showorder")) ? null : rs.getInt("showorder")); + insertList.add(StringUtils.isBlank(rs.getString("canceled")) ? null : rs.getInt("canceled")); + insertList.add(rs.getString("virtualtype")); + insertList.add(rs.getString("virtualtypedesc")); + insertList.add(currentDate); + insertList.add(StringUtils.isBlank(versionId) ? null : Util.getIntValue(versionId)); + insertParamList.add(insertList); + } + String insertVirtualComSql = "insert into jcl_chart_companyvirtual(companyvirtualid,creater,companyname,companycode,companydesc,showorder,\n" + + "canceled,virtualtype,virtualtypedesc,versiondate,versionid) values(?,?,?,?,?,?,?,?,?,?,?)"; + insertData(recordSetTrans,insertVirtualComSql,insertParamList); + + //虚拟分部版本存储 + rs.executeQuery("select a.id as subcompanyvirtualid,a.subcompanyname,a.subcompanycode,a.subcompanydesc," + + "b.subcompanyname as supsubcompany,a.supsubcomid,c.companyname as company,a.companyid,a.canceled," + + "a.virtualtypeid as virtualtype,a.tlevel,a.showorder from hrmsubcompanyvirtual a " + + "left join hrmsubcompanyvirtual b on a.supsubcomid = b.id\n" + + "left join hrmcompanyvirtual c on a.companyid = c.id where a.companyid=?",fclass); + insertParamList = new ArrayList<>(); + while (rs.next()) { + insertList = new ArrayList<>(); + insertList.add(StringUtils.isBlank(rs.getString("subcompanyvirtualid")) ? null : rs.getInt("subcompanyvirtualid")); + insertList.add(currentUser); + insertList.add(rs.getString("subcompanyname")); + insertList.add(rs.getString("subcompanycode")); + insertList.add(rs.getString("subcompanydesc")); + insertList.add(rs.getString("supsubcompany")); + insertList.add(StringUtils.isBlank(rs.getString("supsubcomid")) ? null : rs.getInt("supsubcomid")); + insertList.add(rs.getString("company")); + insertList.add(StringUtils.isBlank(rs.getString("companyid")) ? null : rs.getInt("companyid")); + insertList.add(StringUtils.isBlank(rs.getString("canceled")) ? null : rs.getInt("canceled")); + insertList.add(rs.getString("virtualtype")); + insertList.add(rs.getString("tlevel")); + insertList.add(StringUtils.isBlank(rs.getString("showorder")) ? null : rs.getInt("showorder")); + insertList.add(currentDate); + insertList.add(StringUtils.isBlank(versionId) ? null : Util.getIntValue(versionId)); + insertParamList.add(insertList); + } + String insertVirtualSubComSql = "insert into jcl_chart_subcompanyvirtual(subcompanyvirtualid, creater, " + + "subcompanyname, subcompanycode,subcompanydesc, supsubcompany, supsubcompanyid, company, companyid," + + "canceled, virtualtype, tlevel, showorder, versiondate,versionid) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; + insertData(recordSetTrans,insertVirtualSubComSql,insertParamList); + + //虚拟部门版本存储 + rs.executeQuery("select a.id as departmentvirtualid,a.departmentname,a.departmentcode,a.departmentmark," + + "b.DEPARTMENTNAME as supdeptment,b.SUPDEPID as supdepid,a.allsupdepid,c.SUBCOMPANYNAME as subcompany," + + "a.SUBCOMPANYID1 as subcompanyid,a.canceled,a.virtualtype,a.tlevel,a.showorder from hrmdepartmentvirtual a " + + "left join hrmdepartmentvirtual b on a.SUPDEPID = b.id " + + "left join hrmsubcompanyvirtual c on a.SUBCOMPANYID1 = c.id where a.virtualtype = ?",fclass); + insertParamList = new ArrayList<>(); + while (rs.next()){ + insertList = new ArrayList<>(); + insertList.add(StringUtils.isBlank(rs.getString("departmentvirtualid")) ? null : rs.getInt("departmentvirtualid")); + insertList.add(currentUser); + insertList.add(rs.getString("departmentname")); + insertList.add(rs.getString("departmentcode")); + insertList.add(rs.getString("departmentmark")); + insertList.add(rs.getString("supdeptment")); + insertList.add(StringUtils.isBlank(rs.getString("supdepid")) ? null : rs.getInt("supdepid")); + insertList.add(StringUtils.isBlank(rs.getString("allsupdepid")) ? null : rs.getInt("allsupdepid")); + insertList.add(rs.getString("subcompany")); + insertList.add(StringUtils.isBlank(rs.getString("subcompanyid")) ? null : rs.getInt("subcompanyid")); + insertList.add(StringUtils.isBlank(rs.getString("canceled")) ? null : rs.getInt("canceled")); + insertList.add(rs.getString("virtualtype")); + insertList.add(rs.getString("tlevel")); + insertList.add(StringUtils.isBlank(rs.getString("showorder")) ? null : rs.getInt("showorder")); + insertList.add(currentDate); + insertList.add(StringUtils.isBlank(versionId) ? null : Util.getIntValue(versionId)); + insertParamList.add(insertList); + } + String insertVirtualDeptSql = "insert into jcl_chart_departmentvirtual(departmentvirtualid, creater, " + + "departmentname, departmentcode,departmentmark, supdeptment, supdepid, allsupdepid, subcompany, " + + "subcompanyid, canceled, virtualtype, tlevel, showorder, versiondate,versionid) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; + insertData(recordSetTrans,insertVirtualDeptSql,insertParamList); + + //虚拟人员版本存储 + rs.executeQuery("select resourceid,workyear,usekind,a.managerstr,status,sex,accounttype,belongto,loginid," + + "maritalstatus,b.telephone,mobile,mobilecall,email,c.locationname,resourcetype,startdate,enddate," + + "d.id as jobtitleid,d.JOBTITLENAME as jobtitle,joblevel,seclevel,e.id as departmentid,e.departmentname as department," + + "f.id as subcompanyid,f.subcompanyname as subcompany,b.costcenterid as costcenter," + + "b.managerid as manager,b.assistantid as assistant,workcode,classification,policy,degree,b.lastname,b.companyworkyear," + + "a.virtualtype from hrmresourcevirtual a \n" + + "left join hrmresource b on a.RESOURCEID=b.ID\n" + + "left join hrmlocations c on b.locationid=c.id\n" + + "left join hrmjobtitles d on b.jobtitle=d.id\n" + + "left join hrmdepartmentvirtual e on a.DEPARTMENTID=e.id\n" + + "left join hrmsubcompanyvirtual f on a.SUBCOMPANYID=f.id where a.virtualtype=?",fclass); + insertParamList = new ArrayList<>(); + while (rs.next()) { + insertList = new ArrayList<>(); + insertList.add(StringUtils.isBlank(rs.getString("resourceid")) ? null : rs.getInt("resourceid")); + insertList.add(currentUser); + insertList.add(StringUtils.isBlank(rs.getString("workyear")) ? null : rs.getString("workyear")); + insertList.add(rs.getString("usekind")); + insertList.add(rs.getString("managerstr")); + insertList.add(StringUtils.isBlank(rs.getString("status")) ? null : rs.getInt("status")); + insertList.add(rs.getString("sex")); + insertList.add(StringUtils.isBlank(rs.getString("accounttype")) ? null : rs.getInt("accounttype")); + insertList.add(StringUtils.isBlank(rs.getString("belongto")) ? null : rs.getInt("belongto")); + insertList.add(rs.getString("loginid")); + insertList.add(rs.getString("maritalstatus")); + insertList.add(rs.getString("telephone")); + insertList.add(rs.getString("mobile")); + insertList.add(rs.getString("mobilecall")); + insertList.add(rs.getString("email")); + insertList.add(rs.getString("locationname")); + insertList.add(rs.getString("resourcetype")); + insertList.add(rs.getString("startdate")); + insertList.add(rs.getString("enddate")); + insertList.add(StringUtils.isBlank(rs.getString("jobtitleid")) ? null : rs.getInt("jobtitleid")); + insertList.add(rs.getString("jobtitle")); + insertList.add(StringUtils.isBlank(rs.getString("joblevel")) ? null : rs.getInt("joblevel")); + insertList.add(StringUtils.isBlank(rs.getString("seclevel")) ? null : rs.getInt("seclevel")); + insertList.add(StringUtils.isBlank(rs.getString("departmentid")) ? null : rs.getInt("departmentid")); + insertList.add(rs.getString("department")); + insertList.add(StringUtils.isBlank(rs.getString("subcompanyid")) ? null : rs.getInt("subcompanyid")); + insertList.add(rs.getString("subcompany")); + insertList.add(rs.getString("costcenter")); + insertList.add(StringUtils.isBlank(rs.getString("manager")) ? null : rs.getInt("manager")); + insertList.add(StringUtils.isBlank(rs.getString("assistant")) ? null : rs.getInt("assistant")); + insertList.add(rs.getString("workcode")); + insertList.add(rs.getString("classification")); + insertList.add(currentDate); + insertList.add(rs.getString("policy")); + insertList.add(rs.getString("degree")); + insertList.add(StringUtils.isBlank(versionId) ? null : Util.getIntValue(versionId)); + insertList.add(rs.getString("lastname")); + insertList.add(StringUtils.isBlank(rs.getString("companyworkyear")) ? null : rs.getString("companyworkyear")); + insertParamList.add(insertList); + } + String insertVirtualHrmSql = "insert into jcl_chart_resource(resourceid, creater, workyear, usekind, managerstr," + + "status, sex, accounttype,belongto, loginid, maritalstatus, telephone, mobile, mobilecall, email," + + "locationname, resourcetype, startdate, enddate, jobtitleid, jobtitle, joblevel,seclevel, departmentid," + + "department, subcompanyid, subcompany, costcenter,manager, assistant, workcode, classification, " + + "versiondate, policy, degree,versionid,lastname,companyworkyear) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?," + + "?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; +// while (rs.next()) { +// insertList = new ArrayList<>(); +// insertList.add(StringUtils.isBlank(rs.getString("resourceid")) ? null : rs.getInt("resourceid")); +// insertList.add(StringUtils.isBlank(rs.getString("managerid")) ? null : rs.getInt("managerid")); +// insertList.add(StringUtils.isBlank(rs.getString("subcompanyid")) ? null : rs.getInt("subcompanyid")); +// insertList.add(StringUtils.isBlank(rs.getString("departmentid")) ? null : rs.getInt("departmentid")); +// insertList.add(rs.getString("managerstr")); +// //insertList.add(rs.getString("virtualtype")); +// insertList.add(currentDate); +// insertList.add(StringUtils.isBlank(versionId) ? null : Util.getIntValue(versionId)); +// insertParamList.add(insertList); +// } +// String insertVirtualHrmSql = "insert into jcl_chart_resource(resourceid,MANAGER,subcompanyid," + +// "departmentid,managerstr," + +// //"virtualtype," + +// "versiondate,versionid) values (?,?,?,?,?,?,?)"; + insertData(recordSetTrans,insertVirtualHrmSql,insertParamList); + } + + private void insertData(RecordSetTrans recordSetTrans,String insertSql,List> insertParamList) { + try { + recordSetTrans.executeBatchSql(insertSql,insertParamList); + } catch (Exception e) { + recordSetTrans.rollback(); + e.printStackTrace(); + } + } + + private boolean isHasVirtualFields() { + RecordSet rs = new RecordSet(); + boolean flag = false; + rs.executeQuery("select count(1) as num from hrm_formfield where (GROUPID =6 and FIELDNAME = 'fblx') or (GROUPID =7 and FIELDNAME = 'bmlx')"); + if (rs.next()) { + String num = rs.getString("num"); + flag = "2".equals(num); + } + return flag; + } + + /** + * 查询实时数据,顶级元素SQL + * + * @param root 顶级元素ID + * @param dimension 维度ID + * @return 查询SQL + */ + private String getRealTimeTopSql(String root, String dimension) { + if ("0".equals(root)) { + // 查询集团数据 + if (isRealDimension) { + // 查询实际集团表 + return "select id,companyname as name,'0' as type from " + COMPANY_TABLE; + } else { + // 查询其他维度集团信息 + return "select id,companyname as name,'0' as type from " + COMPANY_TABLE + " where id = '" + dimension + "'"; + } + } else { + if (hasVirtualFields) { + if (showVirtual) { + return "select a.id,a.subcompanyname as name,'1' as type ,b.fblx as isvitual from " + SUB_COMPANY_TABLE + " a left join " + SUB_COMPANY_DEFINED_TABLE + " b on a.id = b.subcomid where a.id = '" + root + "' order by showorder,id"; + } else { + return "select a.id,a.subcompanyname as name,'1' as type ,b.fblx as isvitual from " + SUB_COMPANY_TABLE + " a left join " + SUB_COMPANY_DEFINED_TABLE + " b on a.id = b.subcomid where a.id = '" + root + "' and (b.fblx is null or b.fblx!='1') order by showorder,id"; + + } + } else { + return "select id,subcompanyname as name,'1' as type from " + SUB_COMPANY_TABLE + " where id = '" + root + "' order by showorder,id"; + } + } + } + + /** + * 查询实时数据,子元素SQL + * + * @param sql 查询SQL + * @param fType 上级元素类型 + * @param fObjId 上级元素ID + * @return 查询SQL + */ + private String getRealTimeChildSql(String sql, String fType, String fObjId) { + if (StringUtils.isNotBlank(fType)) { + switch (fType) { + case "0": + if (hasVirtualFields) { + if (showVirtual) { + sql = "select a.id,a.subcompanyname as name,'1' as type ,b.fblx as isvitual from " + SUB_COMPANY_TABLE + " a left join " + SUB_COMPANY_DEFINED_TABLE + " b on a.id = b.subcomid where (a.canceled is null or a.canceled != '1') and (a.supsubcomid is null or a.supsubcomid = '0') and a.companyid = '" + fObjId + "'"; + } else { + sql = "select a.id,a.subcompanyname as name,'1' as type ,b.fblx as isvitual from " + SUB_COMPANY_TABLE + " a left join " + SUB_COMPANY_DEFINED_TABLE + " b on a.id = b.subcomid where (a.canceled is null or a.canceled != '1') and (a.supsubcomid is null or a.supsubcomid = '0') and (b.fblx is null or b.fblx != '1') and a.companyid = '" + fObjId + "'"; + } + } else { + sql = "select a.id,a.subcompanyname as name,'1' as type from " + SUB_COMPANY_TABLE + " a where (a.canceled is null or a.canceled != '1') and (a.supsubcomid is null or a.supsubcomid = '0') and a.companyid = '" + fObjId + "'"; + } + break; + case "1": + if (hasVirtualFields) { + if (showVirtual) { + sql = "select a.id,a.subcompanyname as name,'1' as type ,b.fblx as isvitual,showorder from " + SUB_COMPANY_TABLE + " a left join " + SUB_COMPANY_DEFINED_TABLE + " b on a.id = b.subcomid where (a.canceled is null or a.canceled != '1') and a.supsubcomid = '" + fObjId + "'" + + " union select a.id,a.departmentname as name,'2' as type ,b.bmlx as isvitual,showorder from " + DEPARTMENT_TABLE + " a left join " + DEPARTMENT_DEFINED_TABLE + " b on a.id = b.deptid where (a.canceled is null or a.canceled != '1') and (a.supdepid is null or a.supdepid = '0') and subcompanyid1 = '" + fObjId + "'"; + } else { + sql = "select a.id,a.subcompanyname as name,'1' as type ,b.fblx as isvitual,showorder from " + SUB_COMPANY_TABLE + " a left join " + SUB_COMPANY_DEFINED_TABLE + " b on a.id = b.subcomid where (a.canceled is null or a.canceled != '1') and (b.fblx is null or b.fblx != '1') and a.supsubcomid = '" + fObjId + "'" + + " union select a.id,a.departmentname as name,'2' as type ,b.bmlx as isvitual,showorder from " + DEPARTMENT_TABLE + " a left join " + DEPARTMENT_DEFINED_TABLE + " b on a.id = b.deptid where (a.canceled is null or a.canceled != '1') and (a.supdepid is null or a.supdepid = '0') and (b.bmlx is null or b.bmlx != '1') and subcompanyid1 = '" + fObjId + "'"; + } + } else { + sql = "select a.id,a.subcompanyname as name,'1' as type,showorder from " + SUB_COMPANY_TABLE + " a where (canceled is null or canceled != '1') and supsubcomid = '" + fObjId + "'" + + " union select a.id,a.departmentname as name,'2' as type,showorder from " + DEPARTMENT_TABLE + " a where (canceled is null or canceled != '1') and (supdepid is null or supdepid = '0') and subcompanyid1 = '" + fObjId + "'"; + } + break; + case "2": + if (hasVirtualFields) { + if (showVirtual) { + sql = "select a.id,a.departmentname as name,'2' as type ,b.bmlx as isvitual from " + DEPARTMENT_TABLE + " a left join " + DEPARTMENT_DEFINED_TABLE + " b on a.id = b.deptid where (a.canceled is null or a.canceled != '1') and supdepid = '" + fObjId + "'"; + } else { + sql = "select a.id,a.departmentname as name,'2' as type ,b.bmlx as isvitual from " + DEPARTMENT_TABLE + " a left join hrmdepartmentdefined b on a.id = b.deptid where (canceled is null or canceled != '1') and (b.bmlx is null or b.bmlx != '1') and a.supdepid = '" + fObjId + "'"; + } + } else { + sql = "select a.id,a.departmentname as name,'2' as type from " + DEPARTMENT_TABLE + " a where (canceled is null or canceled != '1') and supdepid = '" + fObjId + "'"; + } + break; + default: + break; + } + sql += " order by showorder,id"; + } + return sql; + } + + /** + * 查询历史数据,子元素SQL + * + * @param sql 查询SQL + * @param fType 上级元素类型 + * @param fObjId 上级元素ID + * @return 查询SQL + */ + private String getLastTimeChildSql(String sql, String fType, String fObjId, String versionId) { + if (StringUtils.isNotBlank(fType)) { + switch (fType) { + case "0": + if (hasVirtualFields) { + if (showVirtual) { + sql = "select " + SUB_COMPANY_ID + " as id,a.subcompanyname as name,'1' as type ,isvirtual as isvitual from " + SUB_COMPANY_TABLE + " a where (a.canceled is null or a.canceled != '1') and (a.supsubcompanyid is null or a.supsubcompanyid = '0') and versionid = " + versionId; + } else { + sql = "select " + SUB_COMPANY_ID + " as id,a.subcompanyname as name,'1' as type ,isvirtual as isvitual from " + SUB_COMPANY_TABLE + " a where (a.canceled is null or a.canceled != '1') and (a.supsubcompanyid is null or a.supsubcompanyid = '0') and (isvirtual is null or isvirtual != '1') and versionid = " + versionId; + } + } else { + sql = "select " + SUB_COMPANY_ID + " as id,a.subcompanyname as name,'1' as type from " + SUB_COMPANY_TABLE + " a where (a.canceled is null or a.canceled != '1') and (a.supsubcompanyid is null or a.supsubcompanyid = '0') and versionid = " + versionId; + } + if (!isRealDimension) { + sql += " and companyid = " + fObjId; + } + break; + case "1": + if (hasVirtualFields) { + if (showVirtual) { + sql = "select " + SUB_COMPANY_ID + " as id,a.subcompanyname as name,'1' as type ,isvirtual as isvitual from " + SUB_COMPANY_TABLE + " a where (a.canceled is null or a.canceled != '1') and a.supsubcompanyid = '" + fObjId + "' and versionid = " + versionId + + " union select " + DEPARTMENT_ID + " as id,a.departmentname as name,'2' as type ,isvirtual as isvitual from " + DEPARTMENT_TABLE + " a where (a.canceled is null or a.canceled != '1') and (a.supdepartmentid is null or a.supdepartmentid = '0') and subcompanyid = '" + fObjId + "' and versionid = " + versionId; + } else { + sql = "select " + SUB_COMPANY_ID + " as id,a.subcompanyname as name,'1' as type ,isvirtual as isvitual from " + SUB_COMPANY_TABLE + " a where (a.canceled is null or a.canceled != '1') and (isvirtual is null or isvirtual != '1') and a.supsubcompanyid = '" + fObjId + "' and versionid = " + versionId + + " union select " + DEPARTMENT_ID + " as id,a.departmentname as name,'2' as type ,isvirtual as isvitual from " + DEPARTMENT_TABLE + " a where (a.canceled is null or a.canceled != '1') and (a.supdepartmentid is null or a.supdepartmentid = '0') and (isvirtual is null or isvirtual != '1') and subcompanyid = '" + fObjId + "' and versionid = " + versionId; + } + } else { + sql = "select " + SUB_COMPANY_ID + " as id,a.subcompanyname as name,'1' as type from " + SUB_COMPANY_TABLE + " a where (canceled is null or canceled != '1') and supsubcompanyid = '" + fObjId + "' and versionid = " + versionId + + " union select " + DEPARTMENT_ID + " as id,a.departmentname as name,'2' as type from " + DEPARTMENT_TABLE + " a where (canceled is null or canceled != '1') and (supdepid is null or supdepid = '0') and subcompanyid = '" + fObjId + "' and versionid = " + versionId; + } + break; + case "2": + if (hasVirtualFields) { + if (showVirtual) { + sql = "select " + DEPARTMENT_ID + " as id,a.departmentname as name,'2' as type ,isvirtual as isvitual from " + DEPARTMENT_TABLE + " a where (a.canceled is null or a.canceled != '1') and supdepartmentid = '" + fObjId + "' and versionid = " + versionId; + } else { + sql = "select " + DEPARTMENT_ID + " as id,a.departmentname as name,'2' as type ,isvirtual as isvitual from " + DEPARTMENT_TABLE + " a where (canceled is null or canceled != '1') and (isvirtual is null or isvirtual != '1') and a.supdepartmentid = '" + fObjId + "' and versionid = " + versionId; + } + } else { + sql = "select " + DEPARTMENT_ID + " as id,a.departmentname as name,'2' as type from " + DEPARTMENT_TABLE + " a where (canceled is null or canceled != '1') and supdepid = '" + fObjId + "' and versionid = " + versionId; + } + break; + default: + break; + } + } + return sql; + } + + /** + * 查询实时数据,子节点元素 + * + * @param topChartPO 父级元素 + * @param dataList 所有元素集合 + * @param selectDepth 所选部门层级 + */ + private void findChildData(ChartPO topChartPO, List dataList, Integer selectDepth, String versionId) { + String fType = topChartPO.getFtype(); + String fObjId = topChartPO.getFobjid(); + String sql = ""; + if (isRealTime) { + sql = getRealTimeChildSql(sql, fType, fObjId); + } else { + sql = getLastTimeChildSql(sql, fType, fObjId, versionId); + } + + if (StringUtils.isNotBlank(sql)) { + List currentList = new ArrayList<>(); + RecordSet recordSet = new RecordSet(); + recordSet.executeQuery(sql); + while (recordSet.next()) { + ChartPO chartPO = new ChartPO(); + chartPO.setFtype(recordSet.getString("type")); + chartPO.setFobjid(recordSet.getString("id")); + chartPO.setFname(recordSet.getString("name")); + chartPO.setParentId(topChartPO.getId()); + chartPO.setFisvitual(recordSet.getString("isvitual")); + chartPO.setHasChildren(getHasChildren(chartPO.getFtype(), chartPO.getFobjid()).toString()); + chartPO.setDepartmentDepth(getDepartmentDepth(chartPO, topChartPO)); + // 小于、等于所选层级元素展开 + chartPO.setExpand(inDepth(selectDepth, chartPO.getDepartmentDepth()) ? "1" : "0"); + currentList.add(chartPO); + } + for (ChartPO chartPO : currentList) { + if (inDepth(selectDepth, chartPO.getDepartmentDepth())) { + findChildData(chartPO, dataList, selectDepth, versionId); + } + } + dataList.addAll(currentList); + } + + + } + + + /** + * 根据维度初始化表名 + * + * @param dimension 所选维度 + */ + public void initTableNameByClass(String dimension, String id) { + isRealDimension = StringUtils.isBlank(dimension) || "0".equals(dimension); + isRealTime = StringUtils.isBlank(id) || "0".equals(id); + if (isRealTime) { + if (isRealDimension) { + COMPANY_TABLE = "hrmcompany"; + SUB_COMPANY_TABLE = "hrmsubcompany"; + SUB_COMPANY_DEFINED_TABLE = "hrmsubcompanydefined"; + DEPARTMENT_TABLE = "hrmdepartment"; + DEPARTMENT_DEFINED_TABLE = "hrmdepartmentdefined"; + RecordSet rs = new RecordSet(); + rs.executeQuery("select count(1) as num from hrm_formfield where (GROUPID =6 and FIELDNAME = 'fblx') or (GROUPID =7 and FIELDNAME = 'bmlx')"); + if (rs.next()) { + String num = rs.getString("num"); + hasVirtualFields = "2".equals(num); + + } else { + hasVirtualFields = false; + } + } else { + COMPANY_TABLE = "hrmcompanyvirtual"; + SUB_COMPANY_TABLE = "hrmsubcompanyvirtual"; + DEPARTMENT_TABLE = "hrmdepartmentvirtual"; + // 其他维度,无虚拟组织 + hasVirtualFields = false; + } + } else { + if (isRealDimension) { + COMPANY_TABLE = "hrmcompany"; + SUB_COMPANY_TABLE = "jcl_chart_subcompany"; + DEPARTMENT_TABLE = "jcl_chart_department"; + SUB_COMPANY_ID = "subcompanyid"; + DEPARTMENT_ID = "departmentid"; + hasVirtualFields = true; + } else { + COMPANY_TABLE = "jcl_chart_companyvirtual"; + SUB_COMPANY_TABLE = "jcl_chart_subcompanyvirtual"; + DEPARTMENT_TABLE = "jcl_chart_departmentvirtual"; + SUB_COMPANY_ID = "subcompanyvirtualid"; + DEPARTMENT_ID = "departmentvirtualid"; + // 其他维度,无虚拟组织 + hasVirtualFields = false; + } + } + } + + + /** + * 判断是否有子元素 + * + * @param fType 元素类型 + * @param fObjId 元素ID + * @return boolean 包含子元素:true,不包含子元素:false + */ + private Boolean getHasChildren(String fType, String fObjId) { + //String sql = ""; + //if (StringUtils.isNotBlank(fType)) { + // switch (fType) { + // case "0": + // sql = "select id from " + SUB_COMPANY_TABLE + " where (supsubcomid is null or supsubcomid = '0') and companyid = '" + fObjId + "'"; + // break; + // case "1": + // if (hasVirtualFields && !showVirtual) { + // sql = "select a.id from " + SUB_COMPANY_TABLE + " a left join " + SUB_COMPANY_DEFINED_TABLE + " b on a.id = b.subcomid where (a.canceled is null or a.canceled != '1') and (b.fblx is null or b.fblx != '1') and a.supsubcomid = '" + fObjId + "' union select a.id from " + DEPARTMENT_TABLE + " a left join " + DEPARTMENT_DEFINED_TABLE + " b on a.id = b.deptid where (a.canceled is null or a.canceled != '1') and (a.supdepid is null or a.supdepid = '0') and (b.bmlx is null or b.bmlx != '1') and subcompanyid1 = '" + fObjId + "'"; + // } else { + // sql = "select id from " + SUB_COMPANY_TABLE + " where (canceled is null or canceled != '1') and supsubcomid = '" + fObjId + "' union select id from " + DEPARTMENT_TABLE + " where (canceled is null or canceled != '1') and (supdepid is null or supdepid = '0') and subcompanyid1 = '" + fObjId + "'"; + // } + // break; + // case "2": + // if (hasVirtualFields && !showVirtual) { + // sql = "select a.id from " + DEPARTMENT_TABLE + " a left join hrmdepartmentdefined b on a.id = b.deptid where (canceled is null or canceled != '1') and (b.bmlx is null or b.bmlx != '1') and a.supdepid = '" + fObjId + "'"; + // } else { + // sql = "select id from " + DEPARTMENT_TABLE + " where (canceled is null or canceled != '1') and supdepid = '" + fObjId + "'"; + // } + // break; + // default: + // break; + // } + //} + //if (StringUtils.isNotBlank(sql)) { + // RecordSet rs = new RecordSet(); + // rs.executeQuery(sql); + // return rs.next(); + //} + return false; + } + + /** + * 获取部门负责人 + * + * @param ids 部门负责人ID + * @return 人员名称 + */ + private String getDepartmentLeader(String ids) { + if (!isRealTime) { + return ids; + } + if (StringUtils.isBlank(ids)) { + return ""; + } + List leaderList = new ArrayList<>(); + String[] split = ids.split(","); + for (String s : split) { + String lastName = MapperProxyFactory.getProxy(SystemDataMapper.class).getScHrmResourceNameById(s); + if (StringUtils.isNotBlank(lastName)) { + leaderList.add(lastName); + } + } + return StringUtils.join(leaderList, ","); + } + + /** + * 当前元素是否在展开层级内 + * + * @param selectDepth 所选部门层级 + * @param currentDepth 当前部门层级 + */ + private boolean inDepth(Integer selectDepth, Integer currentDepth) { + if (selectDepth == 1) { + return true; + } + return currentDepth < selectDepth + 1; + } + + /** + * 获取当前部门层级 + * + * @param chartPO 当前元素 + * @param parentChart 上级元素 + */ + private Integer getDepartmentDepth(ChartPO chartPO, ChartPO parentChart) { + if ("2".equals(chartPO.getFtype())) { + if ("1".equals(parentChart.getFtype())) { + return 2; + } + return parentChart.getDepartmentDepth() + 1; + } + return 0; + } + + + /** + * 获取部门树下拉框SQL + * + * @param versionId 版本ID + * @param dimension 维度 + * @param subCompany 上级Id + * @return SQL + */ + private String getDepartmentTreeSql(String versionId, String dimension, String subCompany) { + // 是否展示当前数据 + boolean isSearchCurrent = StringUtils.isBlank(versionId) || "0".equals(versionId); + boolean isCurrentDimension = StringUtils.isNotBlank(dimension) && !"0".equals(dimension); + boolean isDepartment = subCompany.startsWith("d"); + String sql; + DBType dbType = DBType.get(new RecordSet().getDBType()); + if (isDepartment) { + subCompany = subCompany.replace("d", ""); + if (isSearchCurrent) { + sql = "select " + dbType.concat("d", "id") + "as id, id as value, departmentname as title, " + dbType.concat("d", "supdepid") + " as pId from hrmdepartment where (canceled is null or canceled != '1') and " + dbType.ifNull("supdepid", "0") + " = " + subCompany; + if (isCurrentDimension) { + sql = "select " + dbType.concat("d", "id") + "as id, id as value, departmentname as title, " + dbType.concat("d", "supdepid") + " as pId from hrmdepartmentvirtual where (canceled is null or canceled != '1') and " + dbType.ifNull("supdepid", "0") + " = " + subCompany; + } + sql += " order by showorder,id "; + } else { + sql = "select " + dbType.concat("d", "departmentid") + "as id, departmentid as value, departmentname as title, " + dbType.concat("d", "supdepartmentid") + " as pId from jcl_chart_department where (canceled is null or canceled != '1') and " + dbType.ifNull("supdepartmentid", "0") + " = " + subCompany; + if (isCurrentDimension) { + sql = "select " + dbType.concat("d", "departmentvirtualid") + "as id, departmentvirtualid as value, departmentname as title, " + dbType.concat("d", "supdepid") + " as pId from jcl_chart_departmentvirtual where (canceled is null or canceled != '1') and " + dbType.ifNull("supdepid", "0") + " = " + subCompany; + } + // 添加时间轴条件 + sql += " and versionid = " + versionId; + } + } else { + if (isSearchCurrent) { + sql = "select " + dbType.concat("", "id") + " as id, id as value, subcompanyname as title, supsubcomid as pId, showorder from hrmsubcompany where (canceled is null or canceled != '1') and " + dbType.ifNull("supsubcomid", "0") + " = " + subCompany + + " union select " + dbType.concat("d", "id") + "as id, id as value, departmentname as title, subcompanyid1 as pId, showorder from hrmdepartment where (canceled is null or canceled != '1') and (supdepid is null or supdepid =0) and " + dbType.ifNull("subcompanyid1", "0") + " = " + subCompany; + if (isCurrentDimension) { + 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.ifNull("supsubcomid", "0") + " = " + subCompany + " and companyid = '" + dimension + "' " + + " union select " + dbType.concat("d", "id") + "as id, id as value, departmentname as title, subcompanyid1 as pId from hrmdepartmentvirtual where (canceled is null or canceled != '1') and (supdepid is null or supdepid =0) and" + dbType.ifNull("subcompanyid1", "0") + " = " + subCompany; + } + sql += " order by showorder,id "; + } else { + sql = "select " + dbType.concat("", "subcompanyid") + " as id, subcompanyid as value, subcompanyname as title, supsubcompanyid as pId from jcl_chart_subcompany where (canceled is null or canceled != '1') and " + dbType.ifNull("supsubcompanyid", "0") + " = " + subCompany + + " union select " + dbType.concat("d", "subcompanyid") + "as id, subcompanyid as value, departmentname as title, subcompanyid as pId from jcl_chart_department where (canceled is null or canceled != '1') and (supdepartmentid is null or supdepartmentid =0) and " + dbType.ifNull("subcompanyid", "0") + " = " + subCompany; + if (isCurrentDimension) { + sql = "select " + dbType.concat("", "subcompanyvirtualid") + " as id, subcompanyvirtualid as value, subcompanyname as title, supsubcompanyid as pId from jcl_chart_subcompanyvirtual where (canceled is null or canceled != '1') and " + dbType.ifNull("supsubcompanyid", "0") + " = " + subCompany + " and companyid = '" + dimension + "' " + + " union select " + dbType.concat("d", "departmentvirtualid") + "as id, departmentvirtualid as value, departmentname as title, subcompanyid as pId from jcl_chart_departmentvirtual where (canceled is null or canceled != '1') and (supdepid is null or supdepid =0) and" + dbType.ifNull("subcompanyid", "0") + " = " + subCompany; + } + // 添加时间轴条件 + sql += " and versionid = " + versionId; + } + } + return sql; + } + + /** + * 判断树是否为叶子节点 + * + * @param sql 查询下级元素SQL + * @param treeId 当前元素ID + * @return + */ + + /** + * 判断树是否为叶子节点 + * @param versionId 版本ID + * @param dimension 维度 + * @param subCompany 上级元素ID + * @return + */ + private boolean judgeTreeLeaf(String versionId, String dimension, String subCompany) { + RecordSet recordSet = new RecordSet(); + String sql = getDepartmentTreeSql(versionId, dimension, subCompany); + recordSet.executeQuery(sql); + return !recordSet.next(); + } +} diff --git a/src/com/engine/organization/service/impl/CompServiceImpl.java b/src/com/engine/organization/service/impl/CompServiceImpl.java index 94933d3d..2c7aabb4 100644 --- a/src/com/engine/organization/service/impl/CompServiceImpl.java +++ b/src/com/engine/organization/service/impl/CompServiceImpl.java @@ -153,6 +153,15 @@ public class CompServiceImpl extends Service implements CompService { @Override public Map deleteByIds(Map params) { HasRightUtil.hasRight(user, RIGHT_NAME, false); + RecordSet rs = new RecordSet(); + HashMap returnMap = new HashMap<>(2); + rs.executeQuery("select id from HrmDepartment where subcompanyid1 =" + Util.null2String(params.get("id"))); + if (rs.next()) { + returnMap.put("status", "-1"); + returnMap.put("message", SystemEnv.getHtmlLabelName(81683, user.getLanguage())); + return returnMap; + } + return ServiceUtil.getService(OrganizationServiceImpl.class, user).delSubCompany(params, user); } diff --git a/src/com/engine/organization/service/impl/DepartmentServiceImpl.java b/src/com/engine/organization/service/impl/DepartmentServiceImpl.java index 955c0b36..19c56008 100644 --- a/src/com/engine/organization/service/impl/DepartmentServiceImpl.java +++ b/src/com/engine/organization/service/impl/DepartmentServiceImpl.java @@ -142,13 +142,13 @@ public class DepartmentServiceImpl extends Service implements DepartmentService // 添加父级元素 List compListDTOS = DepartmentBO.buildDeptDTOList(allList, filterDeptPOs); List subList = PageUtil.subList(param.getCurrent(), param.getPageSize(), compListDTOS); - pageInfos = new PageInfo<>(subList, DepartmentListDTO.class); + pageInfos = new PageInfo<>(DepartmentBO.buildDeptDTOShowNames(subList), DepartmentListDTO.class); pageInfos.setTotal(compListDTOS.size()); } else { // 组合list List compListDTOS = DepartmentBO.buildDeptDTOList(allList); List subList = PageUtil.subList(param.getCurrent(), param.getPageSize(), compListDTOS); - pageInfos = new PageInfo<>(subList, DepartmentListDTO.class); + pageInfos = new PageInfo<>(DepartmentBO.buildDeptDTOShowNames(subList), DepartmentListDTO.class); pageInfos.setTotal(compListDTOS.size()); } @@ -182,7 +182,7 @@ public class DepartmentServiceImpl extends Service implements DepartmentService @Override public int updateForbiddenTagById(DeptSearchParam params) { HasRightUtil.hasRight(user, RIGHT_NAME, false); - DepartmentPO departmentPO = DepartmentPO.builder().id(params.getId()).canceled(params.getForbiddenTag() ? 0 : 1).build(); + DepartmentPO departmentPO = DepartmentPO.builder().id(params.getId()).canceled(params.getCanceled() ? 0 : 1).build(); Map map = new HashMap<>(); map.put("id", Util.null2String(departmentPO.getId())); map.put("forbiddenTag", Util.null2String(departmentPO.getCanceled())); @@ -469,7 +469,7 @@ public class DepartmentServiceImpl extends Service implements DepartmentService String ecDepartmentID = Util.null2String(syncMap.get("id")); OrganizationAssert.isTrue(StringUtils.isNotBlank(ecDepartmentID), syncMap.get("message").toString()); // 更新组织架构图 - //TODO new DepartmentTriggerRunnable(deptById.getId()).run(); + // new DepartmentTriggerRunnable(deptById.getId()).run(); // 复制当前部门岗位信息 //if ("1".equals(copyJob)) { @@ -540,7 +540,7 @@ public class DepartmentServiceImpl extends Service implements DepartmentService departmentPO.setSubCompanyId1(targetDepartment.getSubCompanyId1()); updateEcDepartment(departmentPO); // 更新组织架构图 - //TODO new DepartmentTriggerRunnable(departmentPO.getId()).run(); + // new DepartmentTriggerRunnable(departmentPO.getId()).run(); } // 查询该部门一级岗位、更新岗位所属分部、所属部门 //List firstChildJobList = getJobMapper().listJobsByDepartmentId(mergeParam.getId()); @@ -553,7 +553,7 @@ public class DepartmentServiceImpl extends Service implements DepartmentService // 更新岗位组织架构图 //for (JobPO jobPO : firstChildJobList) { // // 刷新组织架构图 - // TODO new JobTriggerRunnable(jobPO.getId()).run(); + // new JobTriggerRunnable(jobPO.getId()).run(); //} // 更新当前部门下的人员 rs.executeUpdate("update hrmresource set SUBCOMPANYID1 =?,DEPARTMENTID =? where DEPARTMENTID =?", targetDepartment.getSubCompanyId1(), targetEcDeptId, mergeEcDeptId); @@ -561,7 +561,7 @@ public class DepartmentServiceImpl extends Service implements DepartmentService //List hrmResourceIds = getSystemDataMapper().getHrmResourceIdsByDept(mergeParam.getId().toString()); //// 更新人员组织架构图 //for (Long hrmResourceId : hrmResourceIds) { - //TODO new HrmResourceTriggerRunnable(hrmResourceId).run(); + // new HrmResourceTriggerRunnable(hrmResourceId).run(); //} // 更新子部门下岗位的所属分部 for (DepartmentPO departmentPO : firstChildDeptList) { @@ -570,18 +570,25 @@ public class DepartmentServiceImpl extends Service implements DepartmentService } // 原部门删除 // DepartmentPO mergeDepartment = getDepartmentMapper().getDeptById(mergeParam.getId()); + // 删除部门(先更改原部门名称,释放原部门名称,然后删除) + DepartmentPO sourceDepartmentPO = getDepartmentMapper().getDeptById(mergeParam.getId()); + sourceDepartmentPO.setDepartmentName(sourceDepartmentPO.getDepartmentName() + "_被合并"); + sourceDepartmentPO.setDepartmentMark(sourceDepartmentPO.getDepartmentMark() + "_被合并"); + updateEcDepartment(sourceDepartmentPO); Map map = new HashMap<>(); map.put("id", Util.null2String(mergeParam.getId())); - // 删除部门 ServiceUtil.getService(OrganizationServiceImpl.class, user).doDepartmentCancel(map, user); + // 删除原部门下的岗位 + + // 更新组织架构图 - // TODO new DepartmentTriggerRunnable(mergeDepartment).run(); + // new DepartmentTriggerRunnable(mergeDepartment).run(); // 更新部门合并后名称 targetDepartment.setDepartmentName(mergeParam.getMergeName()); targetDepartment.setDepartmentMark(mergeParam.getMergeName()); updateEcDepartment(targetDepartment); // 更新组织架构图 - // TODO new DepartmentTriggerRunnable(oldFParentId, targetDepartment.getId()).run(); + // new DepartmentTriggerRunnable(oldFParentId, targetDepartment.getId()).run(); return 0; } @@ -622,7 +629,7 @@ public class DepartmentServiceImpl extends Service implements DepartmentService deptById.setSupDepId(null); // 更新组织架构图 - //TODO new DepartmentTriggerRunnable(company.toString(), deptById).run(); + // new DepartmentTriggerRunnable(company.toString(), deptById).run(); } else if ("1".equals(moveParam.getMoveType())) { Integer departmentId = moveParam.getDepartment(); OrganizationAssert.notNull(departmentId, "请选择要转移到的部门"); @@ -638,7 +645,7 @@ public class DepartmentServiceImpl extends Service implements DepartmentService deptById.setSubCompanyId1(parentDepartment.getSubCompanyId1()); // 更新组织架构图 - // TODO new DepartmentTriggerRunnable(Integer.toString(100000000 + department.intValue()), deptById).run(); + // new DepartmentTriggerRunnable(Integer.toString(100000000 + department.intValue()), deptById).run(); } // 更新EC部门 updateEcDepartment(deptById); @@ -651,13 +658,108 @@ public class DepartmentServiceImpl extends Service implements DepartmentService //// 更新人员组织架构图 //List hrmResourceIds = getSystemDataMapper().getHrmResourceIdsByDept(deptById.getId().toString()); //for (Long hrmResourceId : hrmResourceIds) { - //TODO new HrmResourceTriggerRunnable(hrmResourceId).run(); + // new HrmResourceTriggerRunnable(hrmResourceId).run(); //} forbiddenChildTag(deptById.getSubCompanyId1(), deptList); // 递归更新下级部门、岗位 return 1; } + @Override + public int dragDepartment(DepartmentDragParam departmentDragParam) { + + String sourceKey = Util.null2String(departmentDragParam.getSourcekey());// 原目标 + String targetKey = Util.null2String(departmentDragParam.getTargetkey());// 目的地 + String dragPostion = Util.null2String(departmentDragParam.getDropPosition());// 0:目的里面 1:目的外边 + DepartmentPO deptById = getDepartmentMapper().getDeptById(Util.getIntValue(sourceKey.substring(1))); + RecordSet recordSet = new RecordSet(); + + // 部门不能到集团下 + String sourceType = sourceKey.substring(0, 1); + String sourceId = sourceKey.substring(1); + String targetType = targetKey.substring(0, 1); + String targetId = targetKey.substring(1); + String supComId = ""; + String supId = ""; + String ftype = ""; + String querySupIdSql; +// OrganizationAssert.isFalse("s".equals(sourceType) && "d".equals(targetType), "分部不能转移到部门下"); + OrganizationAssert.isFalse("-1".equals(dragPostion), "分部、部门不能转移至与集团平级"); + if ("s".equals(targetType)) {// 分部 + querySupIdSql = "select companyId as supComId,supsubcomid as supId,'s' as ftype from hrmsubcompany where id = ?"; + } else { + querySupIdSql = "select subcompanyid1 as supComId,supdepid as supId,'d' as ftype from hrmdepartment where id = ?"; + } + + recordSet.executeQuery(querySupIdSql, targetId); + if (recordSet.next()) { + supId = Util.null2String(recordSet.getString("supId")); + supComId = Util.null2String(recordSet.getString("supComId")); + ftype = Util.null2String(recordSet.getString("ftype")); + } + if ("s".equals(sourceType)) {// 拖拽源是分部 + Map params = new HashMap<>(); + params.put("id", sourceId); + if ("0".equals(dragPostion)) {//内部 + OrganizationAssert.isFalse("d".equals(targetType), "分部不能拖拽至部门下"); + if ("c".equals(targetType)) {// 集团下(上级分部为0) + params.put("supsubcomid", "0"); + }else if ("s".equals(targetType)){ + params.put("supsubcomid", targetId);//上下级关系 + } + }else{//外部 + if("s".equals(targetType)){// 分部外(平级) + params.put("supsubcomid",supId); + }else{// 部门外(找上级) + OrganizationAssert.isFalse("d".equals(ftype), "分部不能拖拽至部门下"); + params.put("supsubcomid",supId); + } + } + new OrganizationSyncEc(user, LogModuleNameEnum.COMPANY, OperateTypeEnum.UPDATE, params).sync(); + } else {//拖拽源是部门 + List deptListByPId; + Set disableIds = new HashSet<>(); + if ("0".equals(dragPostion)) {//内部 + OrganizationAssert.isFalse("c".equals(targetType), "部门不能拖拽至集团下"); + if("s".equals(targetType)){ + deptById.setSubCompanyId1(Util.getIntValue(targetId)); + deptById.setSupDepId(null); + }else{ + deptListByPId = getDepartmentMapper().getDeptListByPId(Util.getIntValue(targetId)); + disableIds.add(Util.getIntValue(sourceKey.substring(1))); + if (CollectionUtils.isNotEmpty(deptListByPId)) { + addDisableIds(disableIds, deptListByPId); + } + OrganizationAssert.isFalse("d".equals(targetType) && disableIds.contains(Util.getIntValue(targetId)), "请勿选择当前部门本身及其子部门"); + deptById.setSupDepId(Util.getIntValue(targetId)); + DepartmentPO parentDepartment = getDepartmentMapper().getDeptById(Util.getIntValue(targetId)); + deptById.setSubCompanyId1(parentDepartment.getSubCompanyId1()); + } + }else{//外部 + if("s".equals(targetType)){ + OrganizationAssert.isFalse("0".equals(supId), "部门不能拖拽至集团下"); + deptById.setSubCompanyId1(Util.getIntValue(supId)); + deptById.setSupDepId(null); + }else{ + // 转移到部门外 + deptListByPId = getDepartmentMapper().getDeptListByPId(Util.getIntValue(supId)); + disableIds.add(Util.getIntValue(sourceKey.substring(1))); + if (CollectionUtils.isNotEmpty(deptListByPId)) { + addDisableIds(disableIds, deptListByPId); + } + deptById.setSupDepId(Util.getIntValue(supId)); + deptById.setSubCompanyId1(Util.getIntValue(supComId)); + } + } + // 更新EC部门 + updateEcDepartment(deptById); + // 刷新岗位分部 + List deptList = getDepartmentMapper().getDeptListByPId(deptById.getId()); + forbiddenChildTag(deptById.getSubCompanyId1(), deptList); + } + return 1; + } + /** * 获取所有子部门id * @@ -672,7 +774,7 @@ public class DepartmentServiceImpl extends Service implements DepartmentService updateEcDepartment(departmentPO); // 更新组织架构图 - // TODO new DepartmentTriggerRunnable(departmentPO.getId()).run(); + // new DepartmentTriggerRunnable(departmentPO.getId()).run(); // 刷新岗位所属分部 //refreshJobComp(departmentPO.getId(), subCompanyId1); // 更新当前部门下的人员 @@ -682,7 +784,7 @@ public class DepartmentServiceImpl extends Service implements DepartmentService //List hrmResourceIds = getSystemDataMapper().getHrmResourceIdsByDept(departmentPO.getId().toString()); //// 更新人员组织架构图 //for (Long hrmResourceId : hrmResourceIds) { - //TODO new HrmResourceTriggerRunnable(hrmResourceId).run(); + // new HrmResourceTriggerRunnable(hrmResourceId).run(); //} List childList = getDepartmentMapper().getDeptListByPId(departmentPO.getId()); forbiddenChildTag(subCompanyId1, childList); diff --git a/src/com/engine/organization/service/impl/ExportCommonServiceImpl.java b/src/com/engine/organization/service/impl/ExportCommonServiceImpl.java index 9e32e22e..d1134adf 100644 --- a/src/com/engine/organization/service/impl/ExportCommonServiceImpl.java +++ b/src/com/engine/organization/service/impl/ExportCommonServiceImpl.java @@ -1,7 +1,18 @@ package com.engine.organization.service.impl; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.api.browser.bean.SearchConditionGroup; +import com.api.browser.bean.SearchConditionItem; +import com.cloudstore.dev.api.service.Service_DevTable; +import com.cloudstore.eccom.constant.WeaBoolAttr; +import com.cloudstore.eccom.pc.table.WeaTableColumn; +import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.core.impl.Service; +import com.engine.organization.component.OrganizationWeaTable; +import com.engine.organization.entity.hrmresource.po.SearchTemplatePO; import com.engine.organization.entity.hrmresource.vo.HrmResourceVO; +import com.engine.organization.mapper.resource.HrmResourceMapper; import com.engine.organization.mapper.resource.ResourceMapper; import com.engine.organization.service.ExportCommonService; import com.engine.organization.util.HrmI18nUtil; @@ -10,11 +21,13 @@ import com.engine.organization.util.detach.DetachUtil; import com.engine.organization.util.excel.ExcelUtil; import org.apache.commons.lang.StringUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import weaver.general.Util; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.LinkedList; -import java.util.List; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; import java.util.stream.Collectors; /** @@ -74,5 +87,119 @@ public class ExportCommonServiceImpl extends Service implements ExportCommonServ return ExcelUtil.genWorkbookV2(excelSheetData, sheetName); } + @Override + public XSSFWorkbook resourceExport(HttpServletRequest request, HttpServletResponse response, String ids) { + List headerList = new ArrayList<>(); + List headerNameList = new ArrayList<>(); + OrganizationWeaTable table = new OrganizationWeaTable<>(user, HrmResourceVO.class); + String sqlWhere = " where 1 = 1 and t.status < 4 and (t.accounttype is null or t.accounttype != 1)"; + // 分权查询 + DetachUtil detachUtil = new DetachUtil(user); + String parentCompanyIds = detachUtil.getJclRoleLevels(); + if (detachUtil.isDETACH()) { + sqlWhere += " and t.subcompanyid1 in(" + parentCompanyIds + ")"; + } + + if(StringUtils.isNotBlank(ids)){ + sqlWhere += " and t.id in(" + ids + ")"; + } + + table.setSqlwhere(sqlWhere); + List weaTableColumnList = new ArrayList<>(); + List fields = new ArrayList<>(); + HrmResourceServiceImpl hrmResourceService = new HrmResourceServiceImpl(); + List allConditions = hrmResourceService.getAllConditions(); + + List columnList; + + // 查询当前台账定制列 + SearchTemplatePO usedCustomTemplate = MapperProxyFactory.getProxy(HrmResourceMapper.class).getUsedCustomTemplateByUser(user.getUID()); + if (null == usedCustomTemplate) { + // 默认列定制 + String selectKeys = "-1_hrm_lastname,-1_hrm_departmentid,-1_hrm_jobtitle,-1_hrm_mobile,-1_hrm_telephone,-1_hrm_managerid"; + columnList = Arrays.asList(selectKeys.split(",")); + } else { + columnList = hrmResourceService.getSelectKeys(usedCustomTemplate); + } + + + + BigDecimal decimal = new BigDecimal(100 / columnList.size()); + for (SearchConditionGroup allCondition : allConditions) { + List items = allCondition.getItems(); + for (SearchConditionItem item : items) { + String columnName = item.getDomkey()[0]; + fields.add(hrmResourceService.buildTableSql(columnName) + " as " + hrmResourceService.buildTableSql(columnName).replace(".", "_")); + + String scopeId = columnName.split("_")[0]; + String fieldName = columnName.substring(columnName.lastIndexOf("_") + 1); + WeaTableColumn weaTableColumn = new WeaTableColumn(); + weaTableColumn.setText(MapperProxyFactory.getProxy(HrmResourceMapper.class).queryLabelName(fieldName, scopeId)); + weaTableColumn.setColumn(hrmResourceService.buildTableSql(columnName).replace(".", "_")); + weaTableColumn.setDisplay(columnList.contains(columnName) ? WeaBoolAttr.TRUE : WeaBoolAttr.FALSE); + weaTableColumn.setTransmethod("com.engine.organization.transmethod.HrmResourceTransMethod.getFieldTrueValue"); + weaTableColumn.setOtherpara(columnName); + weaTableColumn.setWidth(decimal.setScale(2, RoundingMode.HALF_UP).doubleValue() + "%"); + if (weaTableColumn.getDisplay().getBoolVal()) { + weaTableColumnList.add(weaTableColumn); + headerList.add(weaTableColumn.getColumn()); + headerNameList.add(weaTableColumn.getText()); + } + } + } + // 增加id字段,跳转人员卡片 + WeaTableColumn weaTableColumn = new WeaTableColumn(); + weaTableColumn.setColumn("id"); + weaTableColumn.setDisplay(WeaBoolAttr.FALSE); + weaTableColumnList.add(weaTableColumn); + fields.add("t.id"); + + // 增加分部字段 + //WeaTableColumn weaTableColumn1 = new WeaTableColumn(); + //weaTableColumn1.setText("分部"); + //weaTableColumn1.setColumn("subcompanyid1"); + //weaTableColumn1.setDisplay(WeaBoolAttr.TRUE); + //weaTableColumn1.setTransmethod("com.engine.organization.transmethod.HrmResourceTransMethod.getCompanyName"); + //fields.add("t.subcompanyid1"); + //headerList.add(0, weaTableColumn1.getColumn()); + //headerNameList.add(0, weaTableColumn1.getText()); + //weaTableColumnList.add(0, weaTableColumn1); + + + table.setBackfields(StringUtils.join(fields, ",")); + table.setColumns(weaTableColumnList); + WeaResultMsg result = new WeaResultMsg(false); + result.putAll(table.makeDataResult()); + result.success(); + Map resultMap = result.getResultMap(); + String dataKey = Util.null2String(resultMap.get("datas")); + + String getcounts = new Service_DevTable().getcounts(request, response, dataKey); + JSONObject jsonObject = JSON.parseObject(getcounts); + String count = jsonObject.getString("count"); + + String datas = new Service_DevTable().datas(request, response, dataKey, count, "[]", "", "", "1", ""); + jsonObject = JSON.parseObject(datas); + List> datas1 = (List>) jsonObject.get("datas"); + + List> rows = new LinkedList<>(); + for (Map map : datas1) { + List row = new LinkedList<>(); + for (String s : headerList) { + JSONObject o = (JSONObject) map; + String value = o.getString(s + "span"); + row.add(Util.formatMultiLangForExpCustomLabel(value, String.valueOf(user.getLanguage()))); + } + rows.add(row); + } + List> excelSheetData = new ArrayList<>(); + + excelSheetData.add(headerNameList); + + excelSheetData.addAll(rows); + String sheetName = HrmI18nUtil.getI18nLabel(85368, "人员档案数据"); + return ExcelUtil.genWorkbookV2(excelSheetData, sheetName); + } + } diff --git a/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java b/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java index 273c9fd6..1aba4a21 100644 --- a/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java +++ b/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java @@ -13,6 +13,7 @@ import com.engine.core.impl.Service; import com.engine.hrm.util.face.HrmFaceCheckManager; import com.engine.organization.component.OrganizationWeaTable; import com.engine.organization.entity.DeleteParam; +import com.engine.organization.entity.chart.ResourceListColumns; import com.engine.organization.entity.company.bo.CompBO; import com.engine.organization.entity.company.po.CompPO; import com.engine.organization.entity.department.bo.DepartmentBO; @@ -20,20 +21,21 @@ import com.engine.organization.entity.department.po.DepartmentPO; import com.engine.organization.entity.extend.bo.ExtendInfoBO; import com.engine.organization.entity.extend.po.ExtendInfoPO; import com.engine.organization.entity.hrmresource.bo.HrmRelationBO; +import com.engine.organization.entity.hrmresource.bo.ResourceChartBO; import com.engine.organization.entity.hrmresource.param.HrmRelationSaveParam; import com.engine.organization.entity.hrmresource.param.SearchTemplateParam; -import com.engine.organization.entity.hrmresource.po.HrmRelationPO; -import com.engine.organization.entity.hrmresource.po.JclOrgCustomTemplatePO; -import com.engine.organization.entity.hrmresource.po.SearchTemplatePO; -import com.engine.organization.entity.hrmresource.po.TransferDataPO; +import com.engine.organization.entity.hrmresource.po.*; import com.engine.organization.entity.hrmresource.vo.HrmResourceVO; +import com.engine.organization.entity.hrmresource.vo.ResourceChartVO; import com.engine.organization.entity.jclimport.po.CusFormFieldPO; import com.engine.organization.entity.job.bo.JobBO; import com.engine.organization.entity.job.po.JobPO; +import com.engine.organization.entity.search.QuickSearchDetail; import com.engine.organization.entity.searchtree.SearchTree; import com.engine.organization.entity.searchtree.SearchTreeParams; import com.engine.organization.enums.HrmGroupEnum; import com.engine.organization.mapper.comp.CompMapper; +import com.engine.organization.mapper.condition.QuickSearchMapper; import com.engine.organization.mapper.department.DepartmentMapper; import com.engine.organization.mapper.hrmresource.HrmRelationMapper; import com.engine.organization.mapper.hrmresource.SystemDataMapper; @@ -57,6 +59,7 @@ import org.json.JSONObject; import weaver.common.DateUtil; import weaver.conn.RecordSet; import weaver.general.StringUtil; +import weaver.general.TimeUtil; import weaver.general.Util; import weaver.hrm.definedfield.HrmFieldManager; @@ -66,6 +69,8 @@ import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; +import static weaver.general.Util.getIntValue; + /** * @author:dxfeng * @createTime: 2022/06/20 @@ -115,6 +120,11 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic return MapperProxyFactory.getProxy(JclOrgCustomTemplateMapper.class); } + private QuickSearchMapper getQuickSearchMapper() { + return MapperProxyFactory.getProxy(QuickSearchMapper.class); + } + + // 所有满足条件的岗位ID private List jobTitleList = null; // 是否 @@ -308,7 +318,7 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic @Override public Integer updateCustomTemplate(Map params) { - int rowNum = Util.getIntValue((String) params.get("rownum")); + int rowNum = getIntValue((String) params.get("rownum")); int count = 0; List allIds = getJclOrgCustomTemplateMapper().listAllId(); String currentDate = OrganizationDateUtil.getFormatLocalDate(new java.util.Date()); @@ -423,6 +433,76 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic return jclOrgCustomTemplatePO.getId(); } + @Override + public Map chartResourceList(Integer departmentId, String versionId, String dimension) { + Map dataMap = new HashMap<>(); + List resourceListColumns = getTableColumns(); + List resourceChartPOS = new ArrayList<>(); + List resourceChartVOS = new ArrayList<>(); + RecordSet rs = new RecordSet(); + if ("0".equals(dimension)) { + if ("0".equals(versionId)) { + //当前数据 + resourceChartPOS = getHrmResourceMapper().selectByDepartmentId(departmentId); + resourceChartVOS = ResourceChartBO.convertToVO(resourceChartPOS); + } else { + rs.executeQuery("select resourceid,workcode,lastname,sex,department,subcompany,jobtitle,mobile from jcl_chart_resource where departmentid = ? and versionid = ?", departmentId, versionId); + while (rs.next()) { + ResourceChartVO build = ResourceChartVO.builder() + .id((long) Util.getIntValue(rs.getString("resourceid"))) + .workCode(Util.null2String(rs.getString("workcode"))) + .lastName(Util.null2String(rs.getString("lastname"))) + .sex("1".equals(Util.null2String(rs.getString("workcode"))) ? "女" : "男") + .departmentName(Util.null2String(rs.getString("department"))) + .subcompanyName(Util.null2String(rs.getString("subcompany"))) + .jobTitle(Util.null2String(rs.getString("jobtitle"))) + .mobile(Util.null2String(rs.getString("mobile"))) + .build(); + + resourceChartVOS.add(build); + } + } + } else { + rs.executeQuery("select h.id,h.workcode,h.lastname,h.sex,h.departmentid,h.subcompanyid1,h.jobtitle,h.status,h.mobile " + + " from hrmresourcevirtual v inner join hrmresource h on v.resourceid = h.id and v.virtualtype = ? and v.departmentid = ?", dimension, departmentId); + while (rs.next()) { + ResourceChartPO build = ResourceChartPO.builder() + .id((long) Util.getIntValue(rs.getString("id"))) + .workCode(Util.null2String(rs.getString("workcode"))) + .lastName(Util.null2String(rs.getString("lastname"))) + .sex(Util.null2String(rs.getString("sex"))) + .departmentId(Util.getIntValue(rs.getString("departmentid"))) + .subcompanyid1(Util.getIntValue(rs.getString("subcompanyid1"))) + .jobTitle(Util.getIntValue(rs.getString("jobtitle"))) + .status(Util.getIntValue(rs.getString("status"))) + .mobile(Util.null2String(rs.getString("mobile"))) + .build(); + resourceChartPOS.add(build); + } + resourceChartVOS = ResourceChartBO.convertToVO(resourceChartPOS); + } + + dataMap.put("columns", resourceListColumns); + dataMap.put("dataSource", resourceChartVOS); + return dataMap; + } + + private List getTableColumns() { + List list = new ArrayList<>(); + list.add(ResourceListColumns.builder().title("序号").dataIndex("id").key("id").build()); + list.add(ResourceListColumns.builder().title("工号").dataIndex("workCode").key("workCode").build()); + list.add(ResourceListColumns.builder().title("姓名").dataIndex("lastName").key("lastName").build()); + list.add(ResourceListColumns.builder().title("性别").dataIndex("sex").key("sex").build()); + list.add(ResourceListColumns.builder().title("部门").dataIndex("departmentName").key("departmentName").build()); + list.add(ResourceListColumns.builder().title("分部").dataIndex("subcompanyName").key("subcompanyName").build()); + list.add(ResourceListColumns.builder().title("岗位").dataIndex("jobTitle").key("jobTitle").build()); + //list.add(ResourceListColumns.builder().title("状态").dataIndex("status").key("status").build()); + list.add(ResourceListColumns.builder().title("手机号").dataIndex("mobile").key("mobile").build()); + + return list; + + } + @Override public Map getSearchCondition(Map params) { String templateId = Util.null2String(params.get("templateId")); @@ -632,11 +712,11 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic hrmFieldsByScopeId = getSystemDataMapper().getHrmFieldsByScopeId(HrmGroupEnum.HRM_WORK.getGroupType().toString()); createConditionItems(hrmFieldSearchConditionComInfo, hrmFieldsByScopeId, conditionItems); Map allFieldsMap = conditionItems.stream().collect(Collectors.toMap(item -> item.getDomkey()[0], item -> item, (k1, k2) -> k1)); - + boolean isQuickSearch = "true".equals(Util.null2String(params.get("isQuickSearch"))); DBType dbType = DBType.get(new RecordSet().getDBType()); StringBuilder sb = new StringBuilder(" where 1=1 "); - if (params.containsKey("lastName")) { + if (params.containsKey("lastName") || !params.containsKey("-1_hrm_status")) { // sb.append(" and t.status = 1"); sb.append(" and t.status < 4"); } @@ -667,7 +747,7 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic SearchConditionItem searchConditionItem = allFieldsMap.get(key); // 根据不同的类型,不同的查询方式 - buildDynamicSql(searchConditionItem, key, value, sb, dbType); + buildDynamicSql(searchConditionItem, key, value, sb, dbType, isQuickSearch, params); } if (searchJobTitle) { String jobTitleIds = StringUtils.join(jobTitleList, ","); @@ -703,12 +783,8 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic } else if (TYPE_JOB.equals(type)) { // 查询部门信息 - List filterDeparts = getJobMapper().listPOsByFilter(JobPO.builder().jobTitleName(keyword).parentJob(Long.parseLong(id)).forbiddenTag(0).build()); - Set builderJobs = new HashSet<>(); - for (JobPO departmentPO : filterDeparts) { - buildParentJobs(departmentPO, builderJobs); - } - searchTree = SearchTreeUtil.builderTreeMode(JobBO.buildSetToSearchTree(builderJobs)); + List filterJobs = getJobMapper().listPOsByFilter(JobPO.builder().jobTitleName(keyword).parentJob(Long.parseLong(id)).forbiddenTag(0).build()); + searchTree = SearchTreeUtil.builderTreeMode(JobBO.buildSetToSearchTree(filterJobs)); } return searchTree; } @@ -726,13 +802,8 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic new DetachUtil(user).filterJobList(jobPOS); List filterDeparts = getDepartmentMapper().listByFilter(departmentBuild, "showorder"); new DetachUtil(user).filterDepartmentList(filterDeparts); - // 添加父级岗位 - Set builderJobs = new HashSet<>(); - for (JobPO jobPO : jobPOS) { - buildParentJobs(jobPO, builderJobs); - } // 添加岗位的上级部门或分部 - List jobTrees = SearchTreeUtil.builderTreeMode(JobBO.buildSetToSearchTree(builderJobs)); + List jobTrees = SearchTreeUtil.builderTreeMode(JobBO.buildSetToSearchTree(jobPOS)); String parentDeptS = jobTrees.stream().map(SearchTree::getParentComp).collect(Collectors.joining(",")); if (!StringUtil.isEmpty(parentDeptS)) { // 兼容SQLServer每次最多in,2100条数据 @@ -757,8 +828,10 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic List filterComps = getCompMapper().listByFilter(compBuild, "showorder"); new DetachUtil(user).filterCompanyList(filterComps); Set builderDeparts = new HashSet<>(); + + Map departmentPOMap = getDepartmentMapper().listAll("showorder").stream().collect(Collectors.toMap(DepartmentPO::getId, item -> item)); for (DepartmentPO departmentPO : filterDeparts) { - buildParentDepts(departmentPO, builderDeparts); + buildParentDepts(departmentPO, builderDeparts, departmentPOMap); } List departmentList = DepartmentBO.buildSetToSearchTree(builderDeparts); List deptTrees = SearchTreeUtil.builderTreeMode(departmentList); @@ -784,13 +857,8 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic private List buildTreeByDeptAndJob(DepartmentPO departmentBuild, JobPO jobBuild) { List jobPOS = getJobMapper().listPOsByFilter(jobBuild); List filterDeparts = getDepartmentMapper().listByFilter(departmentBuild, "showorder"); - // 添加父级岗位 - Set builderJobs = new HashSet<>(); - for (JobPO jobPO : jobPOS) { - buildParentJobs(jobPO, builderJobs); - } // 添加岗位的上级部门或分部 - List jobTrees = SearchTreeUtil.builderTreeMode(JobBO.buildSetToSearchTree(builderJobs)); + List jobTrees = SearchTreeUtil.builderTreeMode(JobBO.buildSetToSearchTree(jobPOS)); String parentDeptS = jobTrees.stream().map(SearchTree::getParentComp).collect(Collectors.joining(",")); if (!StringUtil.isEmpty(parentDeptS)) { // 兼容SQLServer每次最多in,2100条数据 @@ -808,40 +876,30 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic filterDeparts.addAll(departmentsByIds); } } + Map departmentPOMap = getDepartmentMapper().listAll("showorder").stream().collect(Collectors.toMap(DepartmentPO::getId, item -> item)); // 查询分部信息 Set builderDeparts = new HashSet<>(); for (DepartmentPO departmentPO : filterDeparts) { - buildParentDepts(departmentPO, builderDeparts); + buildParentDepts(departmentPO, builderDeparts, departmentPOMap); } return SearchTreeUtil.builderTreeMode(DepartmentBO.buildSetToSearchTree(builderDeparts), jobTrees); } - private void buildParentJobs(JobPO jobPO, Set builderJobs) { - builderJobs.add(jobPO); - if (SearchTreeUtil.isTop(jobPO.getParentJob())) { - return; - } - JobPO parentJob = getJobMapper().getJobById(jobPO.getParentJob()); - if (null != parentJob) { - buildParentJobs(parentJob, builderJobs); - } - } - /** * 添加查询元素的父级元素 * * @param departmentPO * @param builderDeparts */ - private void buildParentDepts(DepartmentPO departmentPO, Set builderDeparts) { + private void buildParentDepts(DepartmentPO departmentPO, Set builderDeparts, Map departmentPOMap) { builderDeparts.add(departmentPO); if (SearchTreeUtil.isTop(departmentPO.getSupDepId())) { return; } - DepartmentPO parentDept = getDepartmentMapper().getDeptById(departmentPO.getSupDepId()); + DepartmentPO parentDept = departmentPOMap.get(departmentPO.getSupDepId()); if (null != parentDept) { - buildParentDepts(parentDept, builderDeparts); + buildParentDepts(parentDept, builderDeparts, departmentPOMap); } } @@ -1041,7 +1099,7 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic * @param sb * @param dbType */ - private void buildDynamicSql(SearchConditionItem conditionItem, String key, String value, StringBuilder sb, DBType dbType) { + private void buildDynamicSql(SearchConditionItem conditionItem, String key, String value, StringBuilder sb, DBType dbType, boolean isQuickSearch, Map params) { if (null == conditionItem) { return; } @@ -1094,6 +1152,19 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic break; case INPUTNUMBER:// 数字 + if (isQuickSearch) { + if ("-1".equals(value)){ + break; + } + QuickSearchDetail quickSearchDetailById = getQuickSearchMapper().getQuickSearchDetailById(value); + Integer maxNum = quickSearchDetailById.getMaxNum(); + Integer minNum = quickSearchDetailById.getMinNum(); + sb.append(" and ").append(dbType.ifNull(tableSql, "0")).append(" >= ").append(minNum); + sb.append(" and ").append(dbType.ifNull(tableSql, "0")).append(" <= ").append(maxNum); + } else { + sb.append(" and ").append(dbType.ifNull(tableSql, "0")).append(" = '").append(value).append("' "); + } + break; case CHECKBOX: case SWITCH: sb.append(" and ").append(dbType.ifNull(tableSql, "0")).append(" = '").append(value).append("' "); @@ -1111,8 +1182,27 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic case DATEPICKER: case TIMEPICKER: case RANGEPICKER: - // 精准搜索 - sb.append(" and ").append(tableSql).append(" = '").append(value).append("' "); + if (isQuickSearch) { + if (StringUtils.isNotBlank(value) && !"-1".equals(value) && !"0,,".equals(value) && !"0".equals(value)) { + if (!"6".equals(value)) { + sb.append(" and ").append(tableSql).append(" >= '").append(TimeUtil.getDateByOption(value, "0")).append(" 00:00:00'"); + sb.append(" and ").append(tableSql).append(" <= '").append(TimeUtil.getDateByOption(value, "")).append(" 23:59:59'"); + } else { + String startDate = Util.null2String(params.get(key + "_start")); + String endDate = Util.null2String(params.get(key + "_end")); + if (StringUtils.isNotBlank(startDate)) { + sb.append(" and ").append(tableSql).append(" >= '").append(startDate).append("' "); + + } + if (StringUtils.isNotBlank(endDate)) { + sb.append(" and ").append(tableSql).append(" <= '").append(endDate).append("' "); + } + } + } + } else { + // 精准搜索 + sb.append(" and ").append(tableSql).append(" = '").append(value).append("' "); + } break; default: break; @@ -1125,7 +1215,7 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic * @param key * @return */ - private String buildTableSql(String key) { + public String buildTableSql(String key) { StringBuilder sb = new StringBuilder(); String[] s = key.split("_"); if (s.length < 3) { @@ -1192,7 +1282,7 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic * @param searchTemplatePO * @return */ - private List getSelectKeys(SearchTemplatePO searchTemplatePO) { + public List getSelectKeys(SearchTemplatePO searchTemplatePO) { List selectKeys = new ArrayList<>(); String basicFields = searchTemplatePO.getBasicFields(); String personalFields = searchTemplatePO.getPersonalFields(); diff --git a/src/com/engine/organization/service/impl/JobServiceImpl.java b/src/com/engine/organization/service/impl/JobServiceImpl.java index 5fb5b489..167b4ac7 100644 --- a/src/com/engine/organization/service/impl/JobServiceImpl.java +++ b/src/com/engine/organization/service/impl/JobServiceImpl.java @@ -278,6 +278,15 @@ public class JobServiceImpl extends Service implements JobService { for (ExtendTitlePO extendTitle : extendTitles) { List items = getExtService(user).getExtSaveForm(user, EXTEND_TYPE + "", JCL_ORG_JOB, 2, extendTitle.getId().toString(), "job_no", RuleCodeType.JOBTITLES.getValue(), params, "scheme_id", "parent_comp"); if (CollectionUtils.isNotEmpty(items)) { + for (SearchConditionItem searchConditionItem : items) { + if ("ec_jobTitle".equals(searchConditionItem.getDomkey()[0])) { + BrowserBean browserBean = searchConditionItem.getBrowserConditionParam(); + String s = JSONObject.toJSONString(browserBean); + browserBean.setHasAddBtn(true); + searchConditionItem.setBrowserConditionParam(browserBean); + } + + } addGroups.add(new SearchConditionGroup(extendTitle.getTitle(), true, items)); } } @@ -446,7 +455,7 @@ public class JobServiceImpl extends Service implements JobService { jobById.setShowOrder(orderNum); insertCount += getJobMapper().insertIgnoreNull(jobById); // 更新组织架构图 - //TODO new JobTriggerRunnable(jobById.getId()).run(); + // new JobTriggerRunnable(jobById.getId()).run(); } return insertCount; @@ -567,27 +576,27 @@ public class JobServiceImpl extends Service implements JobService { // 更新合并后的岗位,更新组织架构图 // updateEcJob(targetJob, mergeParam.getMergeName()); - // TODO targetJob.setJobName(mergeParam.getMergeName()); + // targetJob.setJobName(mergeParam.getMergeName()); getJobMapper().updateBaseJob(targetJob); - //TODO new JobTriggerRunnable(jobById.getId(), targetJob.getId()).run(); + // new JobTriggerRunnable(jobById.getId(), targetJob.getId()).run(); // 原岗位删除 //new OrganizationSyncEc(user, LogModuleNameEnum.JOB, OperateTypeEnum.CANCELED, null, jobById).sync(); getJobMapper().deleteByIds(Collections.singletonList(jobById.getId())); // 更新组织架构图 - //TODO new JobTriggerRunnable(jobById).run(); + // new JobTriggerRunnable(jobById).run(); return updateCount; } @Override public void refresh() { - //1.人员表查询 - List resourcePOS = getHrmResourceMapper().selectFilterDatas(); - //2.数据过滤 - //3.数据插入 - resourcePOS.forEach(resourcePO -> { - if (Objects.nonNull(resourcePO) && null != resourcePO.getJobtitle() && resourcePO.getJobtitle() > 0) { - int count = getJobMapper().selectByConditions(resourcePO); - if (count == 0) { + // 解决并发情况下,岗位数据重复问题 + synchronized (JobServiceImpl.class) { + //1.人员表查询 + List resourcePOS = getHrmResourceMapper().selectFilterDatas(); + //2.数据过滤 + //3.数据插入 + resourcePOS.forEach(resourcePO -> { + if (Objects.nonNull(resourcePO) && null != resourcePO.getJobtitle() && resourcePO.getJobtitle() > 0) { JobPO jobPO = JobPO.builder() .ecCompany(resourcePO.getSubcompanyid1()) .ecDepartment(resourcePO.getDepartmentid()) @@ -599,8 +608,8 @@ public class JobServiceImpl extends Service implements JobService { .build(); getJobMapper().insertIgnoreNull(jobPO); } - } - }); + }); + } } @@ -614,7 +623,7 @@ public class JobServiceImpl extends Service implements JobService { // 更新人员信息 // updateResourceJob(job); // 更新组织架构图 - //TODO new JobTriggerRunnable(job.getId()).run(); + // new JobTriggerRunnable(job.getId()).run(); // 递归处理子级元素 List jobsByPid = getJobMapper().getJobsByPid(job.getId()); @@ -628,14 +637,14 @@ public class JobServiceImpl extends Service implements JobService { * @param departmentPO * @param builderDeparts */ - private void buildParentDepts(DepartmentPO departmentPO, Set builderDeparts) { + private void buildParentDepts(DepartmentPO departmentPO, Set builderDeparts,Map departmentPOMap) { builderDeparts.add(departmentPO); if (SearchTreeUtil.isTop(departmentPO.getSupDepId())) { return; } - DepartmentPO parentDept = getDepartmentMapper().getDeptById(departmentPO.getSupDepId()); + DepartmentPO parentDept = departmentPOMap.get(departmentPO.getSupDepId()); if (null != parentDept && (null == parentDept.getCanceled() || 0 == parentDept.getCanceled())) { - buildParentDepts(parentDept, builderDeparts); + buildParentDepts(parentDept, builderDeparts, departmentPOMap); } } @@ -673,9 +682,10 @@ public class JobServiceImpl extends Service implements JobService { // // 查询部门信息 List filterDeparts = getDepartmentMapper().listByFilter(DepartmentPO.builder().departmentName(keyword).canceled(0).supDepId(Integer.parseInt(id)).build(), "showorder"); + Map departmentPOMap = filterDeparts.stream().collect(Collectors.toMap(DepartmentPO::getId, item -> item)); Set builderDeparts = new HashSet<>(); for (DepartmentPO departmentPO : filterDeparts) { - buildParentDepts(departmentPO, builderDeparts); + buildParentDepts(departmentPO, builderDeparts, departmentPOMap); } searchTree = SearchTreeUtil.builderTreeMode(DepartmentBO.buildSetToSearchTree(builderDeparts)); @@ -692,13 +702,15 @@ public class JobServiceImpl extends Service implements JobService { */ private List buildTreeByCompAndDept(DepartmentPO departmentBuild, CompPO compBuild) { List filterDeparts = getDepartmentMapper().listByFilter(departmentBuild, "showorder"); + + Map departmentPOMap = getDepartmentMapper().listAll("showorder").stream().collect(Collectors.toMap(DepartmentPO::getId, item -> item)); new DetachUtil(user).filterDepartmentList(filterDeparts); // 查询分部信息 List filterComps = getCompMapper().listByFilter(compBuild, "showorder"); new DetachUtil(user).filterCompanyList(filterComps); Set builderDeparts = new HashSet<>(); for (DepartmentPO departmentPO : filterDeparts) { - buildParentDepts(departmentPO, builderDeparts); + buildParentDepts(departmentPO, builderDeparts,departmentPOMap); } List deptTrees = SearchTreeUtil.builderTreeMode(DepartmentBO.buildSetToSearchTree(builderDeparts)); // 添加部门的上级分部 diff --git a/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java b/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java index 717e9c8f..6d0f3808 100644 --- a/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java +++ b/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java @@ -25,6 +25,7 @@ import com.weaver.general.BaseBean; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import weaver.conn.RecordSet; +import weaver.general.Util; import java.util.*; import java.util.stream.Collectors; @@ -157,11 +158,11 @@ public class ManagerDetachServiceImpl extends Service implements ManagerDetachSe private String buildSqlWhere(Map params) { DBType dbType = DBType.get(new RecordSet().getDBType()); String sqlWhere = " where delete_type = 0"; - String lastName = (String) params.get("ecManager"); - List resourceIds = MapperProxyFactory.getProxy(EmployeeMapper.class).getResourceIds(lastName); - String ecManager = StringUtils.join(resourceIds,","); + String lastName = Util.null2String(params.get("ecManager")); if (StringUtils.isNotBlank(lastName)) { - sqlWhere += " AND ec_manager in ("+ecManager+") "; + List resourceIds = MapperProxyFactory.getProxy(EmployeeMapper.class).getResourceIds(lastName); + String ecManager = StringUtils.join(resourceIds, ","); + sqlWhere += " AND ec_manager in (" + (StringUtils.isBlank(ecManager) ? "''" : ecManager) + ") "; } String ecRolelevel = (String) params.get("ecRolelevel"); if (StringUtils.isNotBlank(ecRolelevel)) { diff --git a/src/com/engine/organization/service/impl/OrgChartServiceImpl.java b/src/com/engine/organization/service/impl/OrgChartServiceImpl.java index 6f7d7e97..8df27278 100644 --- a/src/com/engine/organization/service/impl/OrgChartServiceImpl.java +++ b/src/com/engine/organization/service/impl/OrgChartServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateUtil; import com.engine.core.impl.Service; import com.engine.organization.entity.chart.CompanyTreePO; +import com.engine.organization.entity.chart.TimeLinesBO; import com.engine.organization.entity.map.JclOrgMap; import com.engine.organization.entity.scheme.po.GradePO; import com.engine.organization.entity.scheme.po.LevelPO; @@ -17,7 +18,6 @@ import com.engine.organization.util.db.DBType; import com.engine.organization.util.db.MapperProxyFactory; import com.engine.organization.util.detach.DetachUtil; import org.apache.commons.lang3.StringUtils; -import tebie.applib.api.O; import weaver.conn.RecordSet; import weaver.general.Util; import weaver.hrm.User; @@ -83,10 +83,10 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { } List companyTree = new ArrayList<>(); - 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") + " = '0'"; + 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") + " = '0'"; rs.executeQuery(sql); while (rs.next()) { - companyTree.add(CompanyTreePO.builder().id(rs.getString("id")).pId(rs.getString("pId")).value(rs.getString("value")).title(rs.getString("title")).build()); + companyTree.add(CompanyTreePO.builder().id(rs.getString("id")).pId(rs.getString("pId")).value(rs.getString("value")).title(rs.getString("title")).isLeaf(judgeTreeLeaf("select id from hrmsubcompany where (canceled is null or canceled != '1') and supsubcomid = ?", rs.getString("id"))).build()); } result.put("api_status", true); result.put("fclasslist", fclasslist); @@ -106,13 +106,26 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { subcompany = "0"; } String fclass = Util.null2String(params.get("fclass")); - String 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") + " = '" + subcompany + "'"; - 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") + " = '" + subcompany + "' and companyid = '" + fclass + "'"; + String id = Util.null2String(params.get("id")); + // 是否展示当前数据 + boolean isSearchCurrent = StringUtils.isBlank(id) || "0".equals(id); + String sql; + 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") + " = ? "; + 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 + "'"; + } + } else { + sql = "select subcompanyid as id, id as value, subcompanyname as title, supsubcompanyid as pId from jcl_chart_subcompany where (canceled is null or canceled != '1') and " + DBType.get(new RecordSet().getDBType()).ifNull("supsubcompanyid", "0") + " = ? "; + if (StringUtils.isNotBlank(fclass) && !"0".equals(fclass)) { + sql = "select subcompanyvirtualid as id, id as value, subcompanyname as title, supsubcompanyid as pId from jcl_chart_subcompanyvirtual where (canceled is null or canceled != '1') and " + DBType.get(new RecordSet().getDBType()).ifNull("supsubcompanyid", "0") + " = ? and companyid = '" + fclass + "'"; + } + // 添加时间轴条件 + sql += " and versionid = " + id; } - rs.executeQuery(sql); + 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")).build()); + 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()); } result.put("companyTree", companyTree); return result; @@ -609,17 +622,39 @@ 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 createdate = ?",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 createdate = ?",recordDate,description,user.getUID(),fclass,createDate); + 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,createdate,fclass) values(?,?,?,?,?,?)",recordDate,description,user.getUID(),0,createDate,fclass); + 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<>(); + 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); + while (rs.next()) { + timeLinesBOList.add(TimeLinesBO.builder() + .key(rs.getInt("id")) + .id(rs.getInt("id")) + .title(Util.null2String(rs.getString("description"))) + .color("grey") + .time(Util.null2String(rs.getString("recorddate"))) + .build()); + } + + datas.put("timelineList",timeLinesBOList); + return datas; + } + /** * 刷新在岗、编制数 */ @@ -666,6 +701,19 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { return fieldname; } + /** + * 判断树是否为叶子节点 + * + * @param sql 查询下级元素SQL + * @param treeId 当前元素ID + * @return + */ + private boolean judgeTreeLeaf(String sql, String treeId) { + RecordSet recordSet = new RecordSet(); + recordSet.executeQuery(sql, treeId); + return !recordSet.next(); + } + static class OrgSelectItem { private Integer key; private String id; diff --git a/src/com/engine/organization/service/impl/OrgVirtualServiceImpl.java b/src/com/engine/organization/service/impl/OrgVirtualServiceImpl.java index 9cdbfa1c..efae055c 100644 --- a/src/com/engine/organization/service/impl/OrgVirtualServiceImpl.java +++ b/src/com/engine/organization/service/impl/OrgVirtualServiceImpl.java @@ -8,7 +8,6 @@ import java.util.Map; /** * @Author liang.cheng * @Date 2023/6/27 3:45 PM - * @Description: TODO * @Version 1.0 */ public class OrgVirtualServiceImpl extends Service implements OrgVirtualService { diff --git a/src/com/engine/organization/service/impl/PersonnelResumeServiceImpl.java b/src/com/engine/organization/service/impl/PersonnelResumeServiceImpl.java index 4a271a4e..5020590f 100644 --- a/src/com/engine/organization/service/impl/PersonnelResumeServiceImpl.java +++ b/src/com/engine/organization/service/impl/PersonnelResumeServiceImpl.java @@ -42,10 +42,8 @@ import weaver.general.GCONST; import weaver.general.StringUtil; import weaver.general.Util; - import javax.servlet.http.HttpServletResponse; import java.io.*; -import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; import java.util.zip.ZipEntry; @@ -641,8 +639,9 @@ public class PersonnelResumeServiceImpl extends Service implements PersonnelResu new DetachUtil(user).filterCompanyList(filterComps); Set builderDeparts = new HashSet<>(); + Map departmentPOMap = getDepartmentMapper().listAll("showorder").stream().collect(Collectors.toMap(DepartmentPO::getId, item -> item)); for (DepartmentPO departmentPO : filterDeparts) { - buildParentDepts(departmentPO, builderDeparts); + buildParentDepts(departmentPO, builderDeparts,departmentPOMap); } List departmentList = DepartmentBO.buildSetToSearchTree(builderDeparts); List deptTrees = SearchTreeUtil.builderTreeMode(departmentList); @@ -718,9 +717,11 @@ public class PersonnelResumeServiceImpl extends Service implements PersonnelResu } // 查询分部信息 + Map departmentPOMap = getDepartmentMapper().listAll("showorder").stream().collect(Collectors.toMap(DepartmentPO::getId, item -> item)); + Set builderDeparts = new HashSet<>(); for (DepartmentPO departmentPO : filterDeparts) { - buildParentDepts(departmentPO, builderDeparts); + buildParentDepts(departmentPO, builderDeparts,departmentPOMap); } return SearchTreeUtil.builderTreeMode(DepartmentBO.buildSetToSearchTree(builderDeparts), jobTrees); } @@ -732,14 +733,14 @@ public class PersonnelResumeServiceImpl extends Service implements PersonnelResu * @param departmentPO * @param builderDeparts */ - private void buildParentDepts(DepartmentPO departmentPO, Set builderDeparts) { + private void buildParentDepts(DepartmentPO departmentPO, Set builderDeparts,Map departmentPOMap) { builderDeparts.add(departmentPO); if (SearchTreeUtil.isTop(departmentPO.getSupDepId())) { return; } - DepartmentPO parentDept = getDepartmentMapper().getDeptById(departmentPO.getSupDepId()); + DepartmentPO parentDept = departmentPOMap.get(departmentPO.getSupDepId()); if (null != parentDept) { - buildParentDepts(parentDept, builderDeparts); + buildParentDepts(parentDept, builderDeparts,departmentPOMap); } } diff --git a/src/com/engine/organization/service/impl/QuickSearchServiceImpl.java b/src/com/engine/organization/service/impl/QuickSearchServiceImpl.java new file mode 100644 index 00000000..e67399ed --- /dev/null +++ b/src/com/engine/organization/service/impl/QuickSearchServiceImpl.java @@ -0,0 +1,470 @@ +package com.engine.organization.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.api.browser.bean.SearchConditionItem; +import com.api.browser.bean.SearchConditionOption; +import com.api.hrm.bean.HrmFieldBean; +import com.api.hrm.util.HrmFieldSearchConditionComInfo; +import com.cloudstore.dev.api.util.TextUtil; +import com.engine.core.impl.Service; +import com.engine.organization.entity.jclimport.po.CusFormFieldPO; +import com.engine.organization.entity.search.QuickSearchCondition; +import com.engine.organization.entity.search.QuickSearchDetail; +import com.engine.organization.entity.search.QuickSearchField; +import com.engine.organization.entity.search.QuickSearchSetting; +import com.engine.organization.entity.search.condition.ConditionOption; +import com.engine.organization.entity.search.condition.RangeCondition; +import com.engine.organization.enums.LogModuleNameEnum; +import com.engine.organization.mapper.condition.QuickSearchMapper; +import com.engine.organization.service.QuickSearchService; +import com.engine.organization.util.db.MapperProxyFactory; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.StringUtils; +import org.json.JSONException; +import weaver.formmode.exttools.impexp.common.DateUtils; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.definedfield.HrmFieldManager; +import weaver.systeminfo.SystemEnv; + +import java.util.*; +import java.util.stream.Collectors; + + +/** + * @author:dxfeng + * @createTime: 2023/08/08 + * @version: 1.0 + */ +public class QuickSearchServiceImpl extends Service implements QuickSearchService { + private QuickSearchMapper getQuickSearchMapper() { + return MapperProxyFactory.getProxy(QuickSearchMapper.class); + } + + + @Override + public Map getQuickSearchCondition(Map params) { + Map apiDatas = new HashMap<>(16); + + QuickSearchSetting quickSearchSetting = getQuickSearchMapper().getQuickSearchSetting(user.getUID()); + if (null != quickSearchSetting) { + apiDatas.put("enable", "1".equals(Util.null2String(quickSearchSetting.getIsQuickSearch()))); + } else { + apiDatas.put("enable", false); + } + + List rangeConditions = new ArrayList<>(); + + List quickSearchConditionList = getQuickSearchMapper().getQuickSearchConditionList(user.getUID(), LogModuleNameEnum.RESOURCE.getValue()); + for (QuickSearchCondition quickSearchCondition : quickSearchConditionList) { + + RangeCondition condition = new RangeCondition(); + condition.setLabel(quickSearchCondition.getCustomName()); + condition.setDomkey(Collections.singletonList(quickSearchCondition.getFieldId())); + // 根据条件字段类型,组装展示样式 + switch (quickSearchCondition.getType()) { + case 5: + List selectOptions = getSelectOptions(quickSearchCondition); + if (CollectionUtils.isEmpty(selectOptions)) { + condition.setCom("未设置选项"); + } else { + // 字段本身值、判断有无下拉框选项 + List options = selectOptions.stream().map(item -> ConditionOption.builder().key(item.getKey()).showname(item.getShowname()).build()).collect(Collectors.toList()); + options.add(0,ConditionOption.builder().key("-1").showname("全部").build()); + condition.setOptions(options); + } + rangeConditions.add(condition); + break; + case 3: + // 日期类型数据 + List options = new ArrayList<>(); + options.add(ConditionOption.builder().key("0").showname(SystemEnv.getHtmlLabelName(332, user.getLanguage())).build()); + options.add(ConditionOption.builder().key("1").showname(SystemEnv.getHtmlLabelName(15537, user.getLanguage())).build()); + options.add(ConditionOption.builder().key("2").showname(SystemEnv.getHtmlLabelName(15539, user.getLanguage())).build()); + options.add(ConditionOption.builder().key("3").showname(SystemEnv.getHtmlLabelName(15541, user.getLanguage())).build()); + options.add(ConditionOption.builder().key("7").showname(SystemEnv.getHtmlLabelName(27347, user.getLanguage())).build()); + options.add(ConditionOption.builder().key("4").showname(SystemEnv.getHtmlLabelName(21904, user.getLanguage())).build()); + options.add(ConditionOption.builder().key("5").showname(SystemEnv.getHtmlLabelName(15384, user.getLanguage())).build()); + options.add(ConditionOption.builder().key("8").showname(SystemEnv.getHtmlLabelName(81716, user.getLanguage())).build()); + options.add(ConditionOption.builder().key("6").showname(SystemEnv.getHtmlLabelName(32530, user.getLanguage())).build()); + condition.setOptions(options); + Map selectLinkageDataMap = new HashMap<>(1); + Map map = new HashMap<>(2); + map.put("conditionType", "RANGEPICKER"); + map.put("domkey", Arrays.asList(quickSearchCondition.getFieldId() + "_start", quickSearchCondition.getFieldId() + "_end")); + selectLinkageDataMap.put("6", map); + condition.setSelectLinkageDatas(selectLinkageDataMap); + rangeConditions.add(condition); + break; + case 1: + // 整数-浮点数 + List quickSearchDetailList = getQuickSearchMapper().getQuickSearchDetailByCid(quickSearchCondition.getId().toString()); + + if (CollectionUtils.isEmpty(quickSearchDetailList)) { + condition.setCom("未设置选项"); + } else { + List collect = quickSearchDetailList.stream().map(item -> ConditionOption.builder().key(item.getId().toString()).showname(item.getCustomName()).build()).collect(Collectors.toList()); + collect.add(0,ConditionOption.builder().key("-1").showname("全部").build()); + condition.setOptions(collect); + } + rangeConditions.add(condition); + break; + case -1: + case -3: + case -4: + default: + rangeConditions.add(condition); + break; + + } + } + + apiDatas.put("rangeConditions", rangeConditions); + return apiDatas; + } + + @Override + public Map getQuickSearchInfo(Map params) { + Map apiDatas = new HashMap<>(16); + //开关查询 + QuickSearchSetting quickSearchSetting = getQuickSearchMapper().getQuickSearchSetting(user.getUID()); + JSONObject json = new JSONObject(); + if (null != quickSearchSetting) { + json.put("isquicksearch", Util.null2String(quickSearchSetting.getIsQuickSearch())); + json.put("isshowtype", null != quickSearchSetting.getIsShowType() ? quickSearchSetting.getIsShowType() : "1"); + json.put("ishidename", null != quickSearchSetting.getIsHideName() ? quickSearchSetting.getIsHideName() : "0"); + json.put("id", Util.null2String(quickSearchSetting.getId())); + } else { + json.put("isquicksearch", "0"); + json.put("isshowtype", "0"); + json.put("ishidename", "0"); + json.put("id", "0"); + } + apiDatas.put("setting", json); + + //条件字段查询 + List quickSearchConditionList = getQuickSearchMapper().getQuickSearchConditionList(user.getUID(), LogModuleNameEnum.RESOURCE.getValue()); + JSONArray datas = new JSONArray(); + if (CollectionUtils.isNotEmpty(quickSearchConditionList)) { + for (QuickSearchCondition quickSearchCondition : quickSearchConditionList) { + JSONObject obj = new JSONObject(); + String id = Util.null2String(quickSearchCondition.getId()); + String fieldId = Util.null2String(quickSearchCondition.getFieldId()); + String customName = Util.null2String(quickSearchCondition.getCustomName()); + String type = Util.null2String(quickSearchCondition.getType()); + String orderId = Util.null2String(quickSearchCondition.getOrderId()); + String showModel = null != quickSearchCondition.getShowModel() ? quickSearchCondition.getShowModel().toString() : "0"; + obj.put("cid", id); + obj.put("key", id); + obj.put("fieldid", fieldId); + obj.put("orifieldid", fieldId); + obj.put("customname", TextUtil.toBase64ForMultilang(customName)); + obj.put("type", type); + obj.put("orderid", orderId); + obj.put("groupid", ""); + obj.put("showmodel", showModel); + datas.add(obj); + } + } + apiDatas.put("datas", datas); + + //字段下拉框查询 + List allFieldInfo = getQuickSearchMapper().getAllFieldInfo(); + //List quickSearchOptionList = getQuickSearchMapper().getQuickSearchOptionList(); + JSONArray options = new JSONArray(); + if (CollectionUtils.isNotEmpty(allFieldInfo)) { + for (CusFormFieldPO formFieldPO : allFieldInfo) { + JSONObject obj = new JSONObject(); + String fieldHtmlType = Util.null2String(formFieldPO.getFieldHtmlType()); + String fieldId = Util.null2String(formFieldPO.getScopeId() + "_" + formFieldPO.getTableName() + "_" + formFieldPO.getFieldName()); + // String fieldName = Util.null2String(quickSearchOption.getFieldName()); + String type = Util.null2String(formFieldPO.getType()); + int fieldLabel = Util.getIntValue(formFieldPO.getFieldLabel(), 0); + String labelName = SystemEnv.getHtmlLabelName(Util.getIntValue(formFieldPO.getFieldLabel()), user.getLanguage()); + String fieldType = "2"; + boolean isShowModel = false; + if ("1".equals(fieldHtmlType)) { + if ("1".equals(type)) { + //单行文本 + continue; + } else { + //整数或浮点数 + fieldType = "1"; + isShowModel = true; + } + } else if ("5".equals(fieldHtmlType) && "3".equals(type)) { + //选择框单选框 + fieldType = "5"; + isShowModel = true; + } else if ("5".equals(fieldHtmlType) && "2".equals(type)) { + //选择框多选框 + fieldType = "5"; + isShowModel = true; + } else if ("5".equals(fieldHtmlType) && "0".equals(type)) { + //选择框 + fieldType = "5"; + isShowModel = true; + } else if ("4".equals(fieldHtmlType) && "1".equals(type)) { + //check框 + fieldType = "5"; + isShowModel = true; + } else if ("3".equals(fieldHtmlType)) { + switch (type) { + case "2": + //日期 + fieldType = "3"; + break; + case "1": + case "3": + case "5": + default: + continue; + } + } else { + continue; + } + + if ("".equals(labelName)) { + labelName = SystemEnv.getHtmlLabelName(fieldLabel, user.getLanguage()); + } + + obj.put("key", fieldId); + obj.put("fieldid", fieldId); + obj.put("showname", labelName); + obj.put("isdetailtable", "0"); + obj.put("type", fieldType); + obj.put("isShowModel", isShowModel); + options.add(obj); + } + } + apiDatas.put("options", options); + apiDatas.put("groupidOptions", new JSONArray()); + return apiDatas; + } + + @Override + public Map saveQuickSearchInfo(Map params) { + Map apiDatas = new HashMap<>(16); + String isQuickSearch = Util.null2String(params.get("isquicksearch")); + String isShowType = Util.null2String(params.get("isshowtype")); + isShowType = StringUtils.isBlank(isShowType) ? "0" : isShowType; + String isHideName = Util.null2String(params.get("ishidename")); + isHideName = StringUtils.isBlank(isHideName) ? "0" : isHideName; + String id = Util.null2String(params.get("id")); + String data = Util.null2String(params.get("data")); + JSONArray datas = JSONArray.parseArray(data); + //配置信息更新 + if ("0".equals(id) || "".equals(id)) { + QuickSearchSetting quickSearchSetting = QuickSearchSetting.builder() + .belongTo(user.getUID()) + .isQuickSearch(Integer.parseInt(isQuickSearch)) + .isShowType(Integer.parseInt(isShowType)) + .isHideName(Integer.parseInt(isHideName)) + .updateTor(user.getUID()) + .updateDate(DateUtils.getCurrentDate()) + .updateTime(DateUtils.getCurrentTime()) + .build(); + //第一次修改配置 + getQuickSearchMapper().insertQuickSearchSetting(quickSearchSetting); + } else { + QuickSearchSetting quickSearchSetting = QuickSearchSetting.builder() + .id(Integer.parseInt(id)) + .isQuickSearch(Integer.parseInt(isQuickSearch)) + .isShowType(Integer.parseInt(isShowType)) + .isHideName(Integer.parseInt(isHideName)) + .build(); + getQuickSearchMapper().updateQuickSearchSetting(quickSearchSetting); + } + + List quickSearchConditionList = getQuickSearchMapper().getQuickSearchConditionList(user.getUID(), LogModuleNameEnum.RESOURCE.getValue()); + List list = quickSearchConditionList.stream().map(QuickSearchCondition::getId).collect(Collectors.toList()); + + for (int i = 0; i < datas.size(); i++) { + JSONObject obj = (JSONObject) datas.get(i); + String fieldId = obj.getString("fieldid"); + String oriFieldId = obj.getString("orifieldid"); + Integer cid = Util.getIntValue(obj.getString("cid")); + String customName = obj.getString("customname"); + String type = obj.getString("type"); + String orderId = obj.getString("orderid"); + String showModel = obj.getString("showmodel"); + if (cid > 0) { + list.remove(cid); + QuickSearchCondition quickSearchCondition = QuickSearchCondition.builder() + .belongTo(user.getUID()) + .fieldId(fieldId) + .customName(customName) + .type(StringUtils.isBlank(type) ? null : Integer.parseInt(type)) + .orderId(StringUtils.isBlank(orderId) ? null : Integer.parseInt(orderId)) + .showModel(StringUtils.isBlank(showModel) ? null : Integer.parseInt(showModel)) + .id(cid) + .modelId(LogModuleNameEnum.RESOURCE.getValue()) + .build(); + getQuickSearchMapper().updateQuickSearchCondition(quickSearchCondition); + if (!fieldId.equals(oriFieldId)) { + //改变了字段,将原先字段的明细删除 + getQuickSearchMapper().deleteQuickSearchDetailByCid(cid); + } + } else { + QuickSearchCondition quickSearchCondition = QuickSearchCondition.builder() + .belongTo(user.getUID()) + .fieldId(fieldId) + .customName(customName) + .type(StringUtils.isBlank(type) ? null : Integer.parseInt(type)) + .orderId(StringUtils.isBlank(orderId) ? null : Integer.parseInt(orderId)) + .showModel(StringUtils.isBlank(showModel) ? null : Integer.parseInt(showModel)) + .modelId(LogModuleNameEnum.RESOURCE.getValue()) + .build(); + getQuickSearchMapper().insertQuickSearchCondition(quickSearchCondition); + } + } + + if (CollectionUtils.isNotEmpty(list)) { + getQuickSearchMapper().deleteQuickSearchConditionByIds(list); + getQuickSearchMapper().deleteQuickSearchDetailByCids(list); + } + + return apiDatas; + } + + @Override + public Map getQuickSearchDetailInfo(Map params) { + Map apiDatas = new HashMap<>(16); + String cid = weaver.formmode.exttools.impexp.common.StringUtils.null2String(params.get("cid")); + //开关查询 + List quickSearchDetailList = getQuickSearchMapper().getQuickSearchDetailByCid(cid); + JSONArray datas = new JSONArray(); + for (QuickSearchDetail quickSearchDetail : quickSearchDetailList) { + JSONObject obj = new JSONObject(); + String id = Util.null2String(quickSearchDetail.getId()); + String customName = Util.null2String(quickSearchDetail.getCustomName()); + String minNum = Util.null2String(quickSearchDetail.getMinNum()); + minNum = minNum.startsWith("0E") ? "0" : minNum; + String maxNum = Util.null2String(quickSearchDetail.getMaxNum()); + maxNum = maxNum.startsWith("0E") ? "0" : maxNum; + String type = Util.null2String(quickSearchDetail.getType()); + String orderId = Util.null2String(quickSearchDetail.getOrderId()); + String fieldId = Util.null2String(quickSearchDetail.getFieldId()); + String belongTo = Util.null2String(quickSearchDetail.getBelongTo()); + obj.put("id", id); + obj.put("cid", cid); + obj.put("key", id); + obj.put("customname", customName); + obj.put("minnum", minNum); + obj.put("maxnum", maxNum); + obj.put("type", type); + obj.put("fieldid", fieldId); + obj.put("belongto", belongTo); + obj.put("orderid", orderId); + datas.add(obj); + } + List quickSearchFieldList = getQuickSearchMapper().getQuickSearchFieldListByConditionId(cid); + int precision = 0; + for (QuickSearchField quickSearchField : quickSearchFieldList) { + String fieldHtmlType = quickSearchField.getFieldHtmlType(); + String type = quickSearchField.getType(); + String fieldDbType = quickSearchField.getFieldDbType(); + if ("1".equals(fieldHtmlType) && !"1".equals(type)) { + int digitsIndex = fieldDbType.indexOf(","); + precision = Util.getIntValue(fieldDbType.substring(digitsIndex + 1, fieldDbType.length() - 1), 0); + } + } + apiDatas.put("datas", datas); + apiDatas.put("precision", precision); + return apiDatas; + } + + @Override + public Map saveQuickSearchDetailInfo(Map params) { + Map apiDatas = new HashMap<>(16); + String cid = Util.null2String(params.get("cid")); + String data = Util.null2String(params.get("data")); + JSONArray datas = JSONArray.parseArray(data); + List list = getQuickSearchMapper().getQuickSearchDetailByCid(cid).stream().map(QuickSearchDetail::getId).collect(Collectors.toList()); + + try { + for (int i = 0; i < datas.size(); i++) { + JSONObject obj = (JSONObject) datas.get(i); + String customName = obj.getString("customname"); + String fieldId = obj.getString("fieldid"); + String minNum = obj.getString("minnum"); + minNum = "".equals(minNum) ? null : minNum; + String maxNum = obj.getString("maxnum"); + maxNum = "".equals(maxNum) ? null : maxNum; + String type = obj.getString("type"); + String orderId = obj.getString("orderid"); + Integer id = Util.getIntValue(obj.getString("id")); + + QuickSearchDetail quickSearchDetail = QuickSearchDetail.builder() + .cId(StringUtils.isBlank(cid) ? null : Integer.parseInt(cid)) + .customName(customName) + .minNum(StringUtils.isBlank(minNum) ? null : Integer.parseInt(minNum)) + .maxNum(StringUtils.isBlank(maxNum) ? null : Integer.parseInt(maxNum)) + .type(StringUtils.isBlank(type) ? null : Integer.parseInt(type)) + .orderId(StringUtils.isBlank(orderId) ? null : Integer.parseInt(orderId)) + .fieldId(fieldId) + .belongTo(user.getUID()) + .build(); + + if (id > 0) { + list.remove(id); + quickSearchDetail.setId(id); + getQuickSearchMapper().updateQuickSearchDetail(quickSearchDetail); + } else { + getQuickSearchMapper().insertQuickSearchDetail(quickSearchDetail); + } + } + if (CollectionUtils.isNotEmpty(list)) { + getQuickSearchMapper().deleteQuickSearchDetailByIds(list); + } + } catch (Exception e) { + new BaseBean().writeLog(e); + e.printStackTrace(); + } + + return apiDatas; + } + + /** + * 获取人员自定义选择字段,所有选择选项 + * + * @param quickSearchCondition 快速搜索条件 + * @return 选择字段,所有选项列表 + */ + private List getSelectOptions(QuickSearchCondition quickSearchCondition) { + try { + String fieldId = quickSearchCondition.getFieldId(); + HrmFieldSearchConditionComInfo hrmFieldSearchConditionComInfo = new HrmFieldSearchConditionComInfo(); + int scopeid = Integer.parseInt(fieldId.split("_")[0]); + HrmFieldManager hfm = new HrmFieldManager("HrmCustomFieldByInfoType", scopeid); + String fieldName = fieldId.substring(fieldId.lastIndexOf("_") + 1); + + org.json.JSONObject hrmFieldConf = hfm.getHrmFieldConf(fieldName); + if (null == hrmFieldConf) { + return new ArrayList<>(); + } + boolean baseField = hfm.isBaseField(fieldName); + HrmFieldBean hrmFieldBean = new HrmFieldBean(); + hrmFieldBean.setFieldid(Util.null2String(hrmFieldConf.getString("id"))); + hrmFieldBean.setFieldname(scopeid + "_" + (baseField ? "hrm" : "cus") + "_" + fieldName); + hrmFieldBean.setFieldlabel(hrmFieldConf.getString("fieldlabel")); + hrmFieldBean.setFieldhtmltype(hrmFieldConf.getString("fieldhtmltype")); + hrmFieldBean.setType(hrmFieldConf.getString("type")); + hrmFieldBean.setDmlurl(hrmFieldConf.getString("dmlurl")); + hrmFieldBean.setIssystem(baseField ? "1" : "0"); + hrmFieldBean.setIsFormField(true); + hrmFieldBean.setIsQuickSearch(false); + hrmFieldBean.setIsScope(false); + if ("jobactivity".equals(fieldName)) { + // 职务:282 + hrmFieldBean.setType("282"); + } + SearchConditionItem searchConditionItem = hrmFieldSearchConditionComInfo.getSearchConditionItem(hrmFieldBean, user); + return searchConditionItem.getOptions(); + } catch (JSONException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/src/com/engine/organization/service/impl/StaffServiceImpl.java b/src/com/engine/organization/service/impl/StaffServiceImpl.java index 4e31de95..0da7379d 100644 --- a/src/com/engine/organization/service/impl/StaffServiceImpl.java +++ b/src/com/engine/organization/service/impl/StaffServiceImpl.java @@ -132,8 +132,8 @@ public class StaffServiceImpl extends Service implements StaffService { checkRequired(staffPO); int ignoreNull = getStaffMapper().insertIgnoreNull(staffPO); - // 同步组织架构图编制信息 - //new StaffTriggerRunnable(staffPO).run(); + // 初始化编制在编数 + initStaffInfo(staffPO); return ignoreNull; } @@ -458,4 +458,35 @@ public class StaffServiceImpl extends Service implements StaffService { } } + /** + * 初始化编制在编数 + * + * @param staffPO 编制信息实体列 + */ + public static void initStaffInfo(StaffPO staffPO) { + RecordSet rs = new RecordSet(); + String sql = "select count(1) as num from hrmresource where STATUS < 4"; + if (null != staffPO.getEcCompany() && 0 != staffPO.getEcCompany()) { + sql += " and subcompanyid1 = " + staffPO.getEcCompany(); + } + if (null != staffPO.getEcDepartment() && 0 != staffPO.getEcDepartment()) { + sql += " and departmentid = " + staffPO.getEcDepartment(); + } + if (null != staffPO.getJobId() && 0 != staffPO.getJobId()) { + JobPO jobById = MapperProxyFactory.getProxy(JobMapper.class).getJobById(staffPO.getJobId()); + if (null == jobById) { + return; + } + Integer ecJobTitle = jobById.getEcJobTitle(); + sql += " and jobtitle = " + ecJobTitle; + } + rs.executeQuery(sql); + if (rs.next()) { + staffPO.setPermanentNum(-1 == rs.getInt("num") ? 0 : rs.getInt("num")); + StaffBO.buildStaffDesc(staffPO); + MapperProxyFactory.getProxy(StaffMapper.class).updateStaff(staffPO); + } + + } + } diff --git a/src/com/engine/organization/thread/OrganizationSyncEc.java b/src/com/engine/organization/thread/OrganizationSyncEc.java index f6e47e88..a431a1a6 100644 --- a/src/com/engine/organization/thread/OrganizationSyncEc.java +++ b/src/com/engine/organization/thread/OrganizationSyncEc.java @@ -180,7 +180,6 @@ public class OrganizationSyncEc { * 封存、解封分部 */ private void cancelCompany() { - // TODO String forbiddenTag = Util.null2String(params.get("forbiddenTag")); if ("0".equals(forbiddenTag)) { // 解封 diff --git a/src/com/engine/organization/util/QueryObjUtil.java b/src/com/engine/organization/util/QueryObjUtil.java new file mode 100644 index 00000000..7af51219 --- /dev/null +++ b/src/com/engine/organization/util/QueryObjUtil.java @@ -0,0 +1,104 @@ +package com.engine.organization.util; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import weaver.conn.RecordSet; + +import java.lang.reflect.Method; +import java.sql.Blob; +import java.sql.Clob; +import java.util.ArrayList; +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class QueryObjUtil { + + /** + * 查询语句 + */ + private String querySQL; + + /** + * 要转换成的Bean对象 + */ + private Class cla; + private T obj; + @SuppressWarnings("unchecked") + public List query() { + RecordSet rs = new RecordSet(); + List list = null; + int cols; + try { + rs.executeQuery(querySQL); + cols = rs.getColCounts(); + list = new ArrayList(); + while (rs.next()) { + // 并实例化成对象 + obj = (T) cla.newInstance(); + for (int j = 1; j <= cols; j++) { + String colName = iniStr(rs.getColumnName(j).toLowerCase()); + try { + // 通过getter确定bean属性的数据类型 + Method met = cla.getMethod("get" + colName); + // 取得属性的数据类型 + Class p = met.getReturnType(); + // 获取set + met = obj.getClass().getMethod("set" + colName, p); + // 根据属性的数据类型来判断该用哪种数据类型取值,并将值存入对象属性中 + if (p == String.class) { + met.invoke(obj, rs.getString(j)); + } else if (p == Long.class || p == long.class) { + met.invoke(obj, rs.getInt(j));//rs未封装long + } else if (p == Double.class || p == double.class) { + met.invoke(obj, rs.getDouble(j)); + } else if (p == Integer.class || p == int.class) { + met.invoke(obj, rs.getInt(j)); + } else if (p == Blob.class) { + met.invoke(obj, rs.getBlobStr(j)); + } else if (p == Boolean.class || p == boolean.class) { + met.invoke(obj, rs.getBoolean(j)); + } +// else if (p == Byte.class || p == byte.class) { +// met.invoke(obj, rs.getByte(j)); +// } +// else if (p == Short.class || p == short.class) { +// met.invoke(obj, rs.getShort(j)); +// } + else if (p == Object.class) { + met.invoke(obj, rs.getString(j)); //未封装obj + } else if (p == Float.class || p == float.class) { + met.invoke(obj, rs.getFloat(j)); + } else if (p == java.sql.Date.class) { + met.invoke(obj, rs.getDate(j)); + } else if (p == java.util.Date.class) { + met.invoke(obj, rs.getDate(j)); + } else if (p == Clob.class) { + met.invoke(obj, rs.getString(j)); + } + } catch (NoSuchMethodException e) { + + } + } + list.add(obj); + } + }catch (Exception e){ + e.printStackTrace(); + } + return list; + } + + + /** + * 处理set属性方法名,首字母为大写 + * @param old + * @return + */ + public String iniStr(String old) { + return old.substring(0, 1).toUpperCase() + old.substring(1); + } +} diff --git a/src/com/engine/organization/util/db/DBOperateAdapter.java b/src/com/engine/organization/util/db/DBOperateAdapter.java index e9caa997..97fd62a9 100644 --- a/src/com/engine/organization/util/db/DBOperateAdapter.java +++ b/src/com/engine/organization/util/db/DBOperateAdapter.java @@ -5,6 +5,8 @@ public interface DBOperateAdapter { String concat(String some); + String concat(String concatStr, String fieldName); + String currentDate(); String ifNull(String some, String defaultValue); diff --git a/src/com/engine/organization/util/db/DBType.java b/src/com/engine/organization/util/db/DBType.java index 35fe3346..fae51acb 100644 --- a/src/com/engine/organization/util/db/DBType.java +++ b/src/com/engine/organization/util/db/DBType.java @@ -5,6 +5,9 @@ import com.engine.organization.exception.OrganizationRunTimeException; import weaver.conn.RecordSet; public enum DBType implements DBOperateAdapter { + /** + * 根据数据库类型,匹配不通的函数 + */ MYSQL("mysql") { @Override public String like(String some) { @@ -16,6 +19,11 @@ public enum DBType implements DBOperateAdapter { return " concat(','," + some + ",',') "; } + @Override + public String concat(String concatStr, String fieldName) { + return " concat('" + concatStr + "'," + fieldName + ") "; + } + @Override public String currentDate() { return "now()"; @@ -37,6 +45,11 @@ public enum DBType implements DBOperateAdapter { return " ','+" + some + "+',' "; } + @Override + public String concat(String concatStr, String fieldName) { + return " '" + concatStr + "' + cast(" + fieldName + " as varchar) "; + } + @Override public String currentDate() { return "GETDATE()"; @@ -58,6 +71,11 @@ public enum DBType implements DBOperateAdapter { return " ',' ||" + some + "|| ',' "; } + @Override + public String concat(String concatStr, String fieldName) { + return " '" + concatStr + "' ||" + fieldName + " "; + } + @Override public String currentDate() { return "SYSDATE"; @@ -79,6 +97,11 @@ public enum DBType implements DBOperateAdapter { return " ',' ||" + some + "|| ',' "; } + @Override + public String concat(String concatStr, String fieldName) { + return " '" + concatStr + "' ||" + fieldName + " "; + } + @Override public String currentDate() { return "now()"; diff --git a/src/com/engine/organization/util/saveimport/CompanyImport.java b/src/com/engine/organization/util/saveimport/CompanyImport.java index 66b8854d..ff03b819 100644 --- a/src/com/engine/organization/util/saveimport/CompanyImport.java +++ b/src/com/engine/organization/util/saveimport/CompanyImport.java @@ -251,7 +251,7 @@ public class CompanyImport { Map syncMap = new OrganizationSyncEc(user, LogModuleNameEnum.COMPANY, OperateTypeEnum.ADD, map, false).sync(); if (OrgImportUtil.isThrowError(syncMap)) { // 刷新组织架构图 - //TODO new CompanyTriggerRunnable(infoParams.getId()).run(); + // new CompanyTriggerRunnable(infoParams.getId()).run(); historyDetailPO.setOperateDetail("添加成功"); historyDetailPO.setStatus("1"); } else { @@ -274,7 +274,7 @@ public class CompanyImport { Map syncMap = new OrganizationSyncEc(user, LogModuleNameEnum.COMPANY, OperateTypeEnum.UPDATE, map, false).sync(); if (OrgImportUtil.isThrowError(syncMap)) { // 刷新组织架构图 - //TODO new CompanyTriggerRunnable(companyId).run(); + // new CompanyTriggerRunnable(companyId).run(); historyDetailPO.setOperateDetail("更新成功"); historyDetailPO.setStatus("1"); } else { diff --git a/src/com/engine/organization/util/saveimport/DepartmentImport.java b/src/com/engine/organization/util/saveimport/DepartmentImport.java index 6f05cd62..756741c7 100644 --- a/src/com/engine/organization/util/saveimport/DepartmentImport.java +++ b/src/com/engine/organization/util/saveimport/DepartmentImport.java @@ -311,7 +311,7 @@ public class DepartmentImport { Map syncMap = new OrganizationSyncEc(user, LogModuleNameEnum.DEPARTMENT, OperateTypeEnum.UPDATE, map, false).sync(); if (OrgImportUtil.isThrowError(syncMap)) { // 刷新组织架构图 - //TODO new DepartmentTriggerRunnable(departmentId).run(); + // new DepartmentTriggerRunnable(departmentId).run(); historyDetailPO.setOperateDetail("更新成功"); historyDetailPO.setStatus("1"); } else { diff --git a/src/com/engine/organization/util/saveimport/OrgImportUtil.java b/src/com/engine/organization/util/saveimport/OrgImportUtil.java index c13bbcf3..2408bc5e 100644 --- a/src/com/engine/organization/util/saveimport/OrgImportUtil.java +++ b/src/com/engine/organization/util/saveimport/OrgImportUtil.java @@ -81,6 +81,8 @@ public class OrgImportUtil { object = Integer.parseInt(cellValue); } else if ("float".equals(valueType)) { object = Float.parseFloat(cellValue); + }else if("text".equals(valueType)) { + object = cellValue; } else { try { object = new BigDecimal(cellValue).toPlainString(); diff --git a/src/com/engine/organization/util/saveimport/StaffInfoImportUtil.java b/src/com/engine/organization/util/saveimport/StaffInfoImportUtil.java index 4fc78a89..aedc24fd 100644 --- a/src/com/engine/organization/util/saveimport/StaffInfoImportUtil.java +++ b/src/com/engine/organization/util/saveimport/StaffInfoImportUtil.java @@ -15,6 +15,7 @@ import com.engine.organization.mapper.department.DepartmentMapper; import com.engine.organization.mapper.job.JobMapper; import com.engine.organization.mapper.staff.StaffMapper; import com.engine.organization.mapper.staff.StaffPlanMapper; +import com.engine.organization.service.impl.StaffServiceImpl; import com.engine.organization.util.OrganizationAssert; import com.engine.organization.util.db.MapperProxyFactory; import org.apache.commons.collections.CollectionUtils; @@ -296,6 +297,8 @@ public class StaffInfoImportUtil { staffPO.setControlPolicy(1); } MapperProxyFactory.getProxy(StaffMapper.class).insertIgnoreNull(staffPO); + // 初始化编制信息 + StaffServiceImpl.initStaffInfo(staffPO); historyDetailPO.setOperateDetail("添加成功"); historyDetailPO.setStatus("1"); diff --git a/src/com/engine/organization/web/DepartmentController.java b/src/com/engine/organization/web/DepartmentController.java index bba9f0c9..3e2dad8c 100644 --- a/src/com/engine/organization/web/DepartmentController.java +++ b/src/com/engine/organization/web/DepartmentController.java @@ -332,5 +332,17 @@ public class DepartmentController { return ReturnResult.exceptionHandle(e); } } + @POST + @Path("/dragDepartment") + @Produces(MediaType.APPLICATION_JSON) + public ReturnResult dragDepartment(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody DepartmentDragParam departmentDragParam) { + try { + User user = HrmUserVarify.getUser(request, response); + Map params = ParamUtil.request2Map(request); + return ReturnResult.successed(getDepartmentWrapper(user).dragDepartment(departmentDragParam)); + } catch (Exception e) { + return ReturnResult.exceptionHandle(e); + } + } } diff --git a/src/com/engine/organization/web/ExportCommonController.java b/src/com/engine/organization/web/ExportCommonController.java index f189547f..51ad74a6 100644 --- a/src/com/engine/organization/web/ExportCommonController.java +++ b/src/com/engine/organization/web/ExportCommonController.java @@ -21,10 +21,6 @@ import javax.ws.rs.core.StreamingOutput; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.time.LocalDate; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; /** * @Author weaver_cl @@ -43,13 +39,8 @@ public class ExportCommonController { @Produces(MediaType.APPLICATION_OCTET_STREAM) public Response resourceExport(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam("ids") String ids) { - //HrmResourceSearchParam param = buildResourceParam(request); - List idList = new ArrayList<>(); - if (StringUtils.isNotBlank(ids)){ - idList = Arrays.stream(ids.split(",")).map(Long::parseLong).collect(Collectors.toList()); - } User user = HrmUserVarify.getUser(request, response); - XSSFWorkbook workbook = getExportCommonWrapper(user).resourceExport(idList); + XSSFWorkbook workbook = getExportCommonWrapper(user).resourceExport(request, response, ids); String time = LocalDate.now().toString(); String fileName = "人员导出" + time; try { diff --git a/src/com/engine/organization/web/OrgChartController.java b/src/com/engine/organization/web/OrgChartController.java index c3bec336..86e1d17a 100644 --- a/src/com/engine/organization/web/OrgChartController.java +++ b/src/com/engine/organization/web/OrgChartController.java @@ -30,9 +30,8 @@ public class OrgChartController { @GET @Path("/getCondition") @Produces(MediaType.APPLICATION_JSON) - public String getCondition(@Context HttpServletRequest request, @Context HttpServletResponse - response) { - Map apidatas = new HashMap(); + public String getCondition(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = new HashMap<>(); try { User user = HrmUserVarify.getUser(request, response); //实例化Service 并调用业务类处理 @@ -47,7 +46,57 @@ public class OrgChartController { return JSONObject.toJSONString(apidatas); } - + @GET + @Path("/timeLines") + @Produces(MediaType.APPLICATION_JSON) + public String searchTimeLines(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = new HashMap<>(); + try { + User user = HrmUserVarify.getUser(request, response); + apidatas = getOrgChartWrapper(user).searchTimeLines(ParamUtil.request2Map(request), user); + } catch (Exception e) { + //异常处理 + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return JSONObject.toJSONString(apidatas); + } + + @GET + @Path("/getDepartmentDetail") + @Produces(MediaType.APPLICATION_JSON) + public String getDepartmentDetail(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = new HashMap<>(); + try { + User user = HrmUserVarify.getUser(request, response); + apidatas = getOrgChartWrapper(user).getDepartmentDetail(ParamUtil.request2Map(request), user); + } catch (Exception e) { + //异常处理 + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return JSONObject.toJSONString(apidatas); + } + + @GET + @Path("/versionRecord") + @Produces(MediaType.APPLICATION_JSON) + public String versionRecord(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = new HashMap<>(); + try { + User user = HrmUserVarify.getUser(request, response); + apidatas = getOrgChartWrapper(user).versionRecord(ParamUtil.request2Map(request), user); + } catch (Exception e) { + //异常处理 + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return JSONObject.toJSONString(apidatas); + } + @GET @Path("/getSubCompanyTree") @@ -69,6 +118,66 @@ public class OrgChartController { return JSONObject.toJSONString(apidatas); } + @GET + @Path("/getDepartmentTree") + @Produces(MediaType.APPLICATION_JSON) + public String getDepartmentTree(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = new HashMap<>(); + try { + User user = HrmUserVarify.getUser(request, response); + //实例化Service 并调用业务类处理 + apidatas = getOrgChartWrapper(user).getDepartmentTree(ParamUtil.request2Map(request), user); + apidatas.put("api_status", true); + } catch (Exception e) { + //异常处理 + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + //数据转换 + return JSONObject.toJSONString(apidatas); + } + + @GET + @Path("/getMovingTree") + @Produces(MediaType.APPLICATION_JSON) + public String getMovingTree(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = new HashMap<>(); + try { + User user = HrmUserVarify.getUser(request, response); + //实例化Service 并调用业务类处理 + apidatas = getOrgChartWrapper(user).getMovingTree(ParamUtil.request2Map(request), user); + apidatas.put("api_status", true); + } catch (Exception e) { + //异常处理 + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + //数据转换 + return JSONObject.toJSONString(apidatas); + } + + @GET + @Path("/getFullSelectTree") + @Produces(MediaType.APPLICATION_JSON) + public String getFullSelectTree(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = new HashMap<>(); + try { + User user = HrmUserVarify.getUser(request, response); + //实例化Service 并调用业务类处理 + apidatas = getOrgChartWrapper(user).getFullSelectTree(ParamUtil.request2Map(request), user); + apidatas.put("api_status", true); + } catch (Exception e) { + //异常处理 + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + //数据转换 + return JSONObject.toJSONString(apidatas); + } + /** * 组织架构数据 */ @@ -77,7 +186,7 @@ public class OrgChartController { @Produces(MediaType.APPLICATION_JSON) public String getCompanyData(@Context HttpServletRequest request, @Context HttpServletResponse response) { - Map apidatas = new HashMap(); + Map apidatas = new HashMap<>(); try { User user = HrmUserVarify.getUser(request, response); //实例化Service 并调用业务类处理 diff --git a/src/com/engine/organization/web/OrgVirtualController.java b/src/com/engine/organization/web/OrgVirtualController.java index 61ad0497..ccc89614 100644 --- a/src/com/engine/organization/web/OrgVirtualController.java +++ b/src/com/engine/organization/web/OrgVirtualController.java @@ -19,7 +19,6 @@ import java.util.Map; /** * @Author liang.cheng * @Date 2023/6/27 3:41 PM - * @Description: TODO * @Version 1.0 */ public class OrgVirtualController { diff --git a/src/com/engine/organization/web/QuickSearchController.java b/src/com/engine/organization/web/QuickSearchController.java new file mode 100644 index 00000000..a5bb2e14 --- /dev/null +++ b/src/com/engine/organization/web/QuickSearchController.java @@ -0,0 +1,94 @@ +package com.engine.organization.web; + +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.organization.util.response.ReturnResult; +import com.engine.organization.wrapper.QuickSearchWrapper; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.Map; + +/** + * @author:dxfeng + * @createTime: 2023/08/08 + * @version: 1.0 + */ +public class QuickSearchController { + public QuickSearchWrapper getQuickSearchWrapper(User user) { + return ServiceUtil.getService(QuickSearchWrapper.class, user); + } + + @GET + @Path("/getQuickSearchCondition") + @Produces(MediaType.APPLICATION_JSON) + public ReturnResult getQuickSearchCondition(@Context HttpServletRequest request, @Context HttpServletResponse response) { + try { + User user = HrmUserVarify.getUser(request, response); + Map map = ParamUtil.request2Map(request); + return ReturnResult.successed(getQuickSearchWrapper(user).getQuickSearchCondition(map)); + } catch (Exception e) { + return ReturnResult.exceptionHandle(e); + } + } + + @GET + @Path("/getQuickSearchInfo") + @Produces(MediaType.APPLICATION_JSON) + public ReturnResult getQuickSearchInfo(@Context HttpServletRequest request, @Context HttpServletResponse response) { + try { + User user = HrmUserVarify.getUser(request, response); + Map map = ParamUtil.request2Map(request); + return ReturnResult.successed(getQuickSearchWrapper(user).getQuickSearchInfo(map)); + } catch (Exception e) { + return ReturnResult.exceptionHandle(e); + } + } + + @POST + @Path("/saveQuickSearchInfo") + @Produces(MediaType.APPLICATION_JSON) + public ReturnResult saveQuickSearchInfo(@Context HttpServletRequest request, @Context HttpServletResponse response) { + try { + User user = HrmUserVarify.getUser(request, response); + Map map = ParamUtil.request2Map(request); + return ReturnResult.successed(getQuickSearchWrapper(user).saveQuickSearchInfo(map)); + } catch (Exception e) { + return ReturnResult.exceptionHandle(e); + } + } + + @GET + @Path("/getQuickSearchDetailInfo") + @Produces(MediaType.APPLICATION_JSON) + public ReturnResult getQuickSearchDetailInfo(@Context HttpServletRequest request, @Context HttpServletResponse response) { + try { + User user = HrmUserVarify.getUser(request, response); + Map map = ParamUtil.request2Map(request); + return ReturnResult.successed(getQuickSearchWrapper(user).getQuickSearchDetailInfo(map)); + } catch (Exception e) { + return ReturnResult.exceptionHandle(e); + } + } + + @POST + @Path("/saveQuickSearchDetailInfo") + @Produces(MediaType.APPLICATION_JSON) + public ReturnResult saveQuickSearchDetailInfo(@Context HttpServletRequest request, @Context HttpServletResponse response) { + try { + User user = HrmUserVarify.getUser(request, response); + Map map = ParamUtil.request2Map(request); + return ReturnResult.successed(getQuickSearchWrapper(user).saveQuickSearchDetailInfo(map)); + } catch (Exception e) { + return ReturnResult.exceptionHandle(e); + } + } +} diff --git a/src/com/engine/organization/wrapper/DepartmentWrapper.java b/src/com/engine/organization/wrapper/DepartmentWrapper.java index 0fb057db..061e9cca 100644 --- a/src/com/engine/organization/wrapper/DepartmentWrapper.java +++ b/src/com/engine/organization/wrapper/DepartmentWrapper.java @@ -5,6 +5,7 @@ import com.api.browser.bean.SearchConditionGroup; import com.engine.common.util.ServiceUtil; import com.engine.organization.annotation.Log; import com.engine.organization.entity.DeleteParam; +import com.engine.organization.entity.company.po.CompPO; import com.engine.organization.entity.department.param.*; import com.engine.organization.entity.department.po.DepartmentPO; import com.engine.organization.entity.department.vo.SingleDeptTreeVO; @@ -12,6 +13,7 @@ import com.engine.organization.entity.job.vo.SingleJobTreeVO; import com.engine.organization.entity.searchtree.SearchTreeParams; import com.engine.organization.enums.LogModuleNameEnum; import com.engine.organization.enums.OperateTypeEnum; +import com.engine.organization.mapper.comp.CompMapper; import com.engine.organization.mapper.department.DepartmentMapper; import com.engine.organization.service.DepartmentService; import com.engine.organization.service.impl.DepartmentServiceImpl; @@ -21,6 +23,7 @@ import com.engine.organization.util.db.MapperProxyFactory; import com.engine.organization.util.page.PageInfo; import com.engine.organization.util.response.ReturnResult; import org.apache.commons.lang.StringUtils; +import weaver.general.Util; import weaver.hrm.User; import java.util.Collection; @@ -43,6 +46,9 @@ public class DepartmentWrapper extends OrganizationWrapper { private DepartmentMapper getDepartmentMapper() { return MapperProxyFactory.getProxy(DepartmentMapper.class); } + private CompMapper getCompMapper() { + return MapperProxyFactory.getProxy(CompMapper.class); + } public ReturnResult getDeptListByPid(QuerySingleDeptListParam param) { PageInfo singleDeptTreeVOS = getDepartmentService(user).getDeptListByPid(param); @@ -259,4 +265,30 @@ public class DepartmentWrapper extends OrganizationWrapper { }.getClass(), departmentPO.getDepartmentName(), JSON.toJSONString(moveParam), departmentPO, getDepartmentMapper().getDeptById(departmentPO.getId())); return moveDepartment; } + + /** + * 拖拽转移到指定分部或部门 + * + * @param moveParam + * @return + */ + @Log(operateType = OperateTypeEnum.MOVE, operateDesc = "拖拽转移部门或分部", operateModule = LogModuleNameEnum.DEPARTMENT) + public int dragDepartment(DepartmentDragParam departmentDragParam) { + String type = departmentDragParam.getSourcekey().substring(0,1); + String sourceId = departmentDragParam.getSourcekey().substring(1); + int moveDepartment = 0; + if("d".equals(type)) { + DepartmentPO departmentPO = getDepartmentMapper().getDeptById(Integer.valueOf(sourceId)); + moveDepartment = getDepartmentService(user).dragDepartment(departmentDragParam); + writeOperateLog(new Object() { + }.getClass(), departmentPO.getDepartmentName(), JSON.toJSONString(departmentDragParam), departmentPO, getDepartmentMapper().getDeptById(departmentPO.getId())); + }else{ + CompPO compPO = getCompMapper().listById(Integer.valueOf(sourceId)); + moveDepartment = getDepartmentService(user).dragDepartment(departmentDragParam); + CompPO newcompPO = getCompMapper().listById(Integer.valueOf(sourceId)); + writeOperateLog(new Object() { + }.getClass(), compPO.getSubCompanyName(), JSON.toJSONString(departmentDragParam), compPO, newcompPO); + } + return moveDepartment; + } } diff --git a/src/com/engine/organization/wrapper/ExportCommonWrapper.java b/src/com/engine/organization/wrapper/ExportCommonWrapper.java index 0b40c757..ba7d65dc 100644 --- a/src/com/engine/organization/wrapper/ExportCommonWrapper.java +++ b/src/com/engine/organization/wrapper/ExportCommonWrapper.java @@ -7,6 +7,8 @@ import com.engine.organization.service.impl.ExportCommonServiceImpl; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.hrm.User; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.util.List; /** @@ -24,4 +26,8 @@ public class ExportCommonWrapper extends Service { public XSSFWorkbook resourceExport(List ids) { return getExportCommonService(user).resourceExport(ids); } + + public XSSFWorkbook resourceExport(HttpServletRequest request, HttpServletResponse response, String ids) { + return getExportCommonService(user).resourceExport(request, response, ids); + } } diff --git a/src/com/engine/organization/wrapper/JobWrapper.java b/src/com/engine/organization/wrapper/JobWrapper.java index 718ca48d..fecae1d5 100644 --- a/src/com/engine/organization/wrapper/JobWrapper.java +++ b/src/com/engine/organization/wrapper/JobWrapper.java @@ -167,7 +167,7 @@ public class JobWrapper extends OrganizationWrapper { }.getClass(), jobById.getJobNo(), JSON.toJSONString(params), jobById, newJobById); // 更新组织架构图 - //TODO new Thread(new JobTriggerRunnable(jobById, newJobById)).start(); + // new Thread(new JobTriggerRunnable(jobById, newJobById)).start(); return updateForbiddenTagById; } @@ -185,7 +185,7 @@ public class JobWrapper extends OrganizationWrapper { writeOperateLog(new Object() { }.getClass(), jobPO.getJobTitleName(), JSON.toJSONString(ids), "删除岗位"); // 更新组织架构图 - // TODO new JobTriggerRunnable(jobPO).run(); + // new JobTriggerRunnable(jobPO).run(); } return deleteByIds; } diff --git a/src/com/engine/organization/wrapper/OrgChartWrapper.java b/src/com/engine/organization/wrapper/OrgChartWrapper.java index 6388a796..6cb8fb97 100644 --- a/src/com/engine/organization/wrapper/OrgChartWrapper.java +++ b/src/com/engine/organization/wrapper/OrgChartWrapper.java @@ -2,7 +2,9 @@ package com.engine.organization.wrapper; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.organization.service.ChartService; import com.engine.organization.service.OrgChartService; +import com.engine.organization.service.impl.ChartServiceImpl; import com.engine.organization.service.impl.OrgChartServiceImpl; import weaver.hrm.User; @@ -17,6 +19,11 @@ import java.util.Map; public class OrgChartWrapper extends Service { private OrgChartService getOrgChartService(User user) { return ServiceUtil.getService(OrgChartServiceImpl.class, user); + + } + + private ChartService getChartService(User user) { + return ServiceUtil.getService(ChartServiceImpl.class, user); } @@ -29,7 +36,8 @@ public class OrgChartWrapper extends Service { } public Map getCompanyData(Map request2Map, User user) { - return getOrgChartService(user).getCompanyData(request2Map, user); + // return getOrgChartService(user).getCompanyData(request2Map, user); + return getChartService(user).getCompanyData(request2Map); } public Map getUserData(Map request2Map, User user) { @@ -41,11 +49,35 @@ public class OrgChartWrapper extends Service { } public Map asyncCompanyData(Map request2Map, User user) { - return getOrgChartService(user).asyncCompanyData(request2Map, user); + // return getOrgChartService(user).asyncCompanyData(request2Map, user); + return getChartService(user).asyncCompanyData(request2Map); } public String synchronousData(Map request2Map) { return getOrgChartService(user).synchronousData(request2Map, user); } + public Map searchTimeLines(Map request2Map, User user) { + return getOrgChartService(user).searchTimeLines(request2Map); + } + + public Map getDepartmentDetail(Map request2Map, User user) { + return getChartService(user).getDepartmentDetail(request2Map); + } + + public Map versionRecord(Map request2Map, User user) { + return getChartService(user).versionRecord(request2Map,user); + } + + public Map getDepartmentTree(Map request2Map, User user) { + return getChartService(user).getDepartmentTree(request2Map); + } + + public Map getMovingTree(Map request2Map, User user) { + return getChartService(user).getMovingTree(request2Map); + } + + public Map getFullSelectTree(Map request2Map, User user) { + return getChartService(user).getFullSelectTree(request2Map); + } } diff --git a/src/com/engine/organization/wrapper/OrgVirtualWrapper.java b/src/com/engine/organization/wrapper/OrgVirtualWrapper.java index 88e1e5e2..2b3c88b4 100644 --- a/src/com/engine/organization/wrapper/OrgVirtualWrapper.java +++ b/src/com/engine/organization/wrapper/OrgVirtualWrapper.java @@ -11,7 +11,6 @@ import java.util.Map; /** * @Author liang.cheng * @Date 2023/6/27 3:42 PM - * @Description: TODO * @Version 1.0 */ public class OrgVirtualWrapper extends Service { diff --git a/src/com/engine/organization/wrapper/QuickSearchWrapper.java b/src/com/engine/organization/wrapper/QuickSearchWrapper.java new file mode 100644 index 00000000..5720a506 --- /dev/null +++ b/src/com/engine/organization/wrapper/QuickSearchWrapper.java @@ -0,0 +1,40 @@ +package com.engine.organization.wrapper; + +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.organization.service.QuickSearchService; +import com.engine.organization.service.impl.QuickSearchServiceImpl; +import weaver.hrm.User; + +import java.util.Map; + +/** + * @author:dxfeng + * @createTime: 2023/08/08 + * @version: 1.0 + */ +public class QuickSearchWrapper extends Service { + private QuickSearchService getQuickSearchService(User user) { + return ServiceUtil.getService(QuickSearchServiceImpl.class, user); + } + + public Map getQuickSearchCondition(Map params) { + return getQuickSearchService(user).getQuickSearchCondition(params); + } + + public Map getQuickSearchInfo(Map params) { + return getQuickSearchService(user).getQuickSearchInfo(params); + } + + public Map saveQuickSearchInfo(Map params) { + return getQuickSearchService(user).saveQuickSearchInfo(params); + } + + public Map getQuickSearchDetailInfo(Map params) { + return getQuickSearchService(user).getQuickSearchDetailInfo(params); + } + + public Map saveQuickSearchDetailInfo(Map params) { + return getQuickSearchService(user).saveQuickSearchDetailInfo(params); + } +}