代码合并-Lee

This commit is contained in:
dxfeng 2025-08-26 16:46:48 +08:00
parent 9c077137fd
commit 77e5d9d367
13 changed files with 391 additions and 44 deletions

View File

@ -21,7 +21,7 @@ import java.util.Map;
*/
@Slf4j
@RestController
@RequestMapping("/api/secondev/portal/manager")
@RequestMapping("/api/secondev/portal/manager")
@WeaPermission(publicPermission = true)
public class ManagerPortalController {

View File

@ -29,10 +29,10 @@ public class BaseParam {
* 请假表单
*/
private String leaveFormCus = "ft_1151420254779654145";
///**
// * 员工自定义表
// */
//private String table_emp_cus = "ft_1152026012537184302";
/**
* 员工自定义表
*/
private String table_emp_cus = "ft_1152026012537184302";
/**
* 人事档案-个人信息表

View File

@ -3,6 +3,7 @@ package com.weaver.seconddev.portal.entity.param;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import java.util.Set;
/**
@ -21,6 +22,7 @@ public class BasicPersonnelParam extends BaseParam {
private Integer startIndex;
private Integer endIndex;
private String belongYear;
private Date paramDate;
/*分页查询*/

View File

@ -3,6 +3,7 @@ package com.weaver.seconddev.portal.entity.param;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import java.util.Set;
/**
@ -12,9 +13,10 @@ import java.util.Set;
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class HrbpParam extends com.weaver.seconddev.portal.entity.param.BaseParam {
public class HrbpParam extends BaseParam {
private Set<Long> departmentIdList;
private Long matrixId;
private Long matrixValueConfigId;
private Long userId;
private String userId;
private Date paramDate;
}

View File

@ -29,6 +29,7 @@ public class EmployeeBasicInfoPo {
*/
private String companyName;
private String departmentName;
private String positionName;
/**
* 入职日期
*/

View File

@ -130,4 +130,26 @@ public interface HrbpPortalMapper {
*/
int getKqRequireByBp(HrbpParam param);
/**
* 部门矩阵可查看的所有今日有打卡人数
* @param param
* @return
*/
int getTodayAllSignByBp(HrbpParam param);
/**
* 部门矩阵可查看的某日迟到人数
* @param param
* @return
*/
int getTotalLateByBp(HrbpParam param);
int getTodayNoSign(HrbpParam hrbpParam);
/**
* 部门矩阵可查看的某日休假人数
* @param param
* @return
*/
int getTotalVacationByBp(HrbpParam param);
}

View File

@ -65,7 +65,7 @@ public interface ManagerPortalMapper {
* @param emdId
* @return
*/
List<Long> getManageDeptIds(@Param("param") BasicPersonnelParam param, @Param("empId") Long emdId);
List<Long> getManageDeptIds(@Param("param") BasicPersonnelParam param, @Param("empId") String emdId);
/**
* 获取生日人数
@ -178,4 +178,14 @@ public interface ManagerPortalMapper {
//Integer sumAnnualLeaveCount(@Param("param") BasicPersonnelParam param,@Param("holidayIds") Collection<Long> holidayIds);
Integer sumAnnualLeaveDuration(BasicPersonnelParam param);
Integer getKqRequire(@Param("param") BasicPersonnelParam param, @Param("userId") String userId);
Integer getTodayAllSign(@Param("param") BasicPersonnelParam param, @Param("userId") String userId);
Integer getTotalLate(@Param("param") BasicPersonnelParam param, @Param("userId") String userId);
Integer getTotalVacation(@Param("param") BasicPersonnelParam param, @Param("userId") String userId);
Integer getTodayNoSign(@Param("param") BasicPersonnelParam param, @Param("userId") String userId);
}

View File

@ -5,7 +5,10 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.weaver.common.base.entity.result.WeaResult;
import com.weaver.common.cache.tablecache.impl.ComInfoCache;
import com.weaver.common.hr.util.Util;
import com.weaver.common.hrm.cache.HrmEmployeeComInfo;
import com.weaver.common.hrm.cache.HrmPositionComInfo;
import com.weaver.common.hrm.dao.HrmCommonEmployeeDao;
import com.weaver.seconddev.portal.entity.po.EmployeeBasicInfoPo;
import com.weaver.seconddev.portal.entity.po.PortalUrlDetail;
@ -45,6 +48,8 @@ public class EmployeePortalServiceImpl implements EmployeePortalService {
@Autowired
DepartMentService departMentService;
@Autowired
private ComInfoCache comInfoCache;
@Autowired
PortalMapper portalMapper;
@ -77,7 +82,13 @@ public class EmployeePortalServiceImpl implements EmployeePortalService {
employeeBasicInfoPo.setWorkCode(byId.getJobNum());
//WeaDepartMent departmentById = departMentService.getDepartMentById(byId.getDepartmentId());
//employeeBasicInfoPo.setCompanyName(null != departmentById ? departmentById.getDepartMentName() : "");
employeeBasicInfoPo.setDepartmentName(null==department?"":department.getName());
HrmEmployeeComInfo hrmEmployeeInfo =
comInfoCache.getCacheById(HrmEmployeeComInfo.class, currentUser.getEmployeeId());
HrmPositionComInfo positionComInfo = comInfoCache.getCacheById(HrmPositionComInfo.class, hrmEmployeeInfo.getPosition());
employeeBasicInfoPo.setPositionName(positionComInfo != null ? positionComInfo.getName() : "");
employeeBasicInfoPo.setDepartmentName(null == department ? "" : department.getName());
employeeBasicInfoPo.setHireDate(cn.hutool.core.date.DateUtil.formatDate(byId.getHiredate()));
employeeBasicInfoPo.setEmployeeStatus(PersonnelStatusEnum.getShowNameByValue(byId.getPersonnelStatus()));

View File

@ -1,17 +1,19 @@
package com.weaver.seconddev.portal.service.impl;
import com.weaver.common.base.entity.result.WeaResult;
import com.weaver.eb.common.util.TimeUtils;
import com.weaver.seconddev.portal.entity.param.HrbpParam;
import com.weaver.seconddev.portal.entity.po.PortalUrlDetail;
import com.weaver.seconddev.portal.mapper.portal.HrbpPortalMapper;
import com.weaver.seconddev.portal.mapper.portal.PortalMapper;
import com.weaver.seconddev.portal.service.HrbpPortalService;
import com.weaver.teams.security.context.UserContext;
import org.springframework.beans.factory.annotation.Value;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -120,16 +122,47 @@ public class HrbpPortalServiceImpl implements HrbpPortalService {
@Override
public WeaResult<Map<String, Object>> getTodayOverview(Map<String, String> params) {
Map<String, Object> resultMap = new HashMap<>();
Date todayDate = TimeUtils.getString2Date(TimeUtils.getCurrentDateString(), "yyyy-MM-dd");
if (params.get("date") != null) {
String date = params.get("date");
todayDate = TimeUtils.getString2Date(date, "yyyy-MM-dd");
}
//部门矩阵中hrbp负责的部门
//应出勤人数部门在职人数
HrbpParam hrbpParam = new HrbpParam();
hrbpParam.setTenantKey(UserContext.getCurrentUser().getTenantKey());
hrbpParam.setMatrixId(Long.valueOf(matrixId));
hrbpParam.setMatrixValueConfigId(Long.valueOf(matrixValueConfigId));
hrbpParam.setUserId(UserContext.getCurrentUser().getUserId());
hrbpParam.setUserId(String.valueOf(UserContext.getCurrentUser().getEmployeeId()));
List<PortalUrlDetail> portalUrlDetails = portalMapper.getPortalUrlDetail(UserContext.getCurrentUser().getTenantKey(), PORTAL_KEY, "getTodayOverview");
Map<String, String> urlMap = portalUrlDetails.stream().collect(Collectors.toMap(PortalUrlDetail::getDetailKey, PortalUrlDetail::getUrlAddress));
//应出勤人数
int totalRequire = hrbpPortalMapper.getKqRequireByBp(hrbpParam);
resultMap.put("totalRequire", totalRequire);
resultMap.put("totalRequireUrl", urlMap.get("totalRequire"));
//今日实际打卡人数
int todayAllSignByBp = hrbpPortalMapper.getTodayAllSignByBp(hrbpParam);
resultMap.put("totalSign", todayAllSignByBp);
resultMap.put("totalSignUrl", urlMap.get("totalSign"));
//今日未打卡人数
int todayNoSign = hrbpPortalMapper.getTodayNoSign(hrbpParam);
resultMap.put("totalNoSign", todayNoSign);
resultMap.put("totalNoSignUrl", urlMap.get("totalNoSign"));
//今日迟到人数
hrbpParam.setParamDate(todayDate);
int totalLate = hrbpPortalMapper.getTotalLateByBp(hrbpParam);
resultMap.put("totalLate", totalLate);
resultMap.put("totalLateUrl", urlMap.get("totalLate"));
//今日休假人数
int totalVacation = hrbpPortalMapper.getTotalVacationByBp(hrbpParam);
resultMap.put("totalVacation", totalVacation);
resultMap.put("totalVacationUrl", urlMap.get("totalVacation"));
return WeaResult.success(resultMap);
}
}

View File

@ -10,6 +10,7 @@ import com.weaver.common.hrm.cache.HrmDepartmentComInfo;
import com.weaver.common.hrm.dao.HrmCommonDepartmentDao;
import com.weaver.common.hrm.dao.HrmCommonEmployeeDao;
import com.weaver.common.hrm.manage.HrmComInfoCacheHandler;
import com.weaver.eb.common.util.TimeUtils;
import com.weaver.seconddev.portal.entity.component.Option;
import com.weaver.seconddev.portal.entity.param.BasicPersonnelParam;
import com.weaver.seconddev.portal.entity.po.*;
@ -91,8 +92,47 @@ public class ManagerPortalServiceImpl implements ManagerPortalService {
@Override
public WeaResult<Map<String, Object>> getTodayOverview(Map<String, String> params) {
HashMap<String, Object> resultMap = new HashMap<>();
return null;
Date todayDate = TimeUtils.getString2Date(TimeUtils.getCurrentDateString(), "yyyy-MM-dd");
if (params.get("date") != null) {
String date = params.get("date");
todayDate = TimeUtils.getString2Date(date, "yyyy-MM-dd");
}
User currentUser = UserContext.getCurrentUser();
BasicPersonnelParam basicPersonnelParam = new BasicPersonnelParam();
basicPersonnelParam.setTenantKey(currentUser.getTenantKey());
List<PortalUrlDetail> portalUrlDetails = portalMapper.getPortalUrlDetail(currentUser.getTenantKey(), PORTAL_KEY, "getTodayOverview");
Map<String, String> urlMap = portalUrlDetails.stream().collect(Collectors.toMap(PortalUrlDetail::getDetailKey, PortalUrlDetail::getUrlAddress));
//应出勤人数
Integer totalRequire = managerPortalMapper.getKqRequire(basicPersonnelParam, String.valueOf(currentUser.getEmployeeId()));
resultMap.put("totalRequire", totalRequire);
resultMap.put("totalRequireUrl", urlMap.get("totalRequire"));
//今日实际打卡人数
Integer todayAllSign = managerPortalMapper.getTodayAllSign(basicPersonnelParam, String.valueOf(currentUser.getEmployeeId()));
resultMap.put("totalSign", todayAllSign);
resultMap.put("totalSignUrl", urlMap.get("totalSign"));
//今日未打卡人数
Integer todayNoSign = managerPortalMapper.getTodayNoSign(basicPersonnelParam, String.valueOf(currentUser.getEmployeeId()));
resultMap.put("totalNoSign", todayNoSign);
resultMap.put("totalNoSignUrl", urlMap.get("totalNoSign"));
//今日迟到人数
basicPersonnelParam.setParamDate(todayDate);
Integer totalLate = managerPortalMapper.getTotalLate(basicPersonnelParam, String.valueOf(currentUser.getEmployeeId()));
resultMap.put("totalLate", totalLate);
resultMap.put("totalLateUrl", urlMap.get("totalLate"));
//今日休假人数
int totalVacation = managerPortalMapper.getTotalVacation(basicPersonnelParam, String.valueOf(currentUser.getEmployeeId()));
resultMap.put("totalVacation", totalVacation);
resultMap.put("totalVacationUrl", urlMap.get("totalVacation"));
return WeaResult.success(resultMap);
}
@Override
@ -230,6 +270,7 @@ public class ManagerPortalServiceImpl implements ManagerPortalService {
// 设置部门范围ID集合
basicPersonnelParam.setDepartmentIdList(allDepartmentIdList);
log.error("getTeamMemorialDay:{}", JSON.toJSONString(allDepartmentIdList));
int birthdayNum = managerPortalMapper.getBirthdayNum(basicPersonnelParam);
int regularEmployeeNum = managerPortalMapper.getRegularEmployeeNum(basicPersonnelParam);
@ -392,7 +433,7 @@ public class ManagerPortalServiceImpl implements ManagerPortalService {
map3.put("url", urlMap.get("leaveType"));
return WeaResult.success(map3);
default:
return WeaResult.fail("不支持的统计类型",true);
return WeaResult.fail("不支持的统计类型", true);
}
}
@ -637,7 +678,6 @@ public class ManagerPortalServiceImpl implements ManagerPortalService {
}
/**
* 获取用户当前所负责的所有的部门以及下级部门
*
@ -645,7 +685,7 @@ public class ManagerPortalServiceImpl implements ManagerPortalService {
*/
private Set<Long> getAllDepartmentIdList(BasicPersonnelParam basicPersonnelParam, Long employeeId) {
// 查询所负责的部门
List<Long> manageDeptIds = managerPortalMapper.getManageDeptIds(basicPersonnelParam, employeeId);
List<Long> manageDeptIds = managerPortalMapper.getManageDeptIds(basicPersonnelParam, String.valueOf(employeeId));
// 查询所有的部门子部门信息
Set<WeaDepartMent> allDepartmentList = new HashSet<>();
for (Long manageDeptId : manageDeptIds) {
@ -655,6 +695,11 @@ public class ManagerPortalServiceImpl implements ManagerPortalService {
allDepartmentList.addAll(beLongDeps);
}
// TODO 判断集合如果为空不展示数据
if(CollectionUtils.isEmpty(allDepartmentList)){
Set<Long> set = new HashSet<>();
set.add(-1L);
return set;
}
return allDepartmentList.stream().map(WeaDepartMent::getDepartMentId).collect(Collectors.toSet());
}
}

View File

@ -217,7 +217,7 @@ public class DateUtil {
if (date == null) {
return null;
}
return date.toInstant().atZone(java.time.ZoneId.systemDefault()).toLocalDate();
return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
}
public static LocalDateTime toLocalDateTime(Date date) {

View File

@ -176,20 +176,94 @@
</select>
<select id="getKqRequireByBp" resultType="java.lang.Integer">
SELECT
COUNT(DISTINCT b.ID )
FROM
${eteams}.hrm_matrix_value_data a
LEFT JOIN ${eteams}.employee b ON b.DEPARTMENT = a.matrix_data_id
WHERE
<!-- 部门矩阵id -->
a.matrix_id = #{matrixId}
<!-- 矩阵配置id(hrbp字段id) hrbpId -->
AND a.matrix_value_config_id = #{matrixValueConfigId}
<!-- 当前人员id -->
AND a.relate_id=#{userId}
AND a.delete_type = 0
AND b.accounttype = 0
AND b.STATUS = 'normal'
SELECT COUNT(*)
FROM ${e10_other_business}.ATTEND_STATUS_DETAIL a
JOIN ${eteams}.employee b ON a.employee = b.id
JOIN (SELECT id
FROM ${eteams}.department
WHERE formdata IN (SELECT CAST(id AS CHAR)
FROM ${eteams}.${table_dept_cus}
WHERE hrbp = #{userId})) alias ON alias.id = b.department
WHERE a.attend_date = CURDATE()
AND a.DAY_TYPE = 'WORK'
AND a.delete_type = 0
</select>
<select id="getTodayAllSignByBp" resultType="java.lang.Integer">
SELECT COUNT(*)
FROM ${e10_other_business}.ATTEND_STATUS_DETAIL a
INNER JOIN ${eteams}.employee b ON a.employee = b.id
INNER JOIN (SELECT id
FROM ${eteams}.department
WHERE formdata IN (SELECT CAST(id AS CHAR)
FROM ${eteams}.${table_dept_cus}
WHERE hrbp = #{userId})) alias ON alias.id = b.department
LEFT JOIN ${eteams}.${table_emp_cus} c ON c.form_data_id = b.formdata
LEFT JOIN ${e10_other_business}.timecard d ON d.id = a.SIGN_IN_RECORD
LEFT JOIN ${e10_other_business}.timecard e ON e.id = a.SIGN_OUT_RECORD
WHERE a.attend_date = CURDATE()
AND a.DAY_TYPE = 'WORK'
AND a.delete_type = 0
AND (a.SIGN_RANGE_START IS NOT NULL OR a.SIGN_RANGE_END IS NOT NULL)
</select>
<select id="getTotalLateByBp" resultType="java.lang.Integer">
SELECT COUNT(0)
FROM ${e10_other_business}.ATTEND_STATUS_DETAIL a
INNER JOIN ${eteams}.employee b ON a.employee = b.id
INNER JOIN (SELECT id
FROM ${eteams}.department
WHERE formdata IN (SELECT CAST(id AS CHAR)
FROM ${eteams}.${table_dept_cus}
WHERE hrbp = #{userId})) alias ON alias.id = b.department
LEFT JOIN ${eteams}.${table_emp_cus} c ON c.form_data_id = b.formdata
LEFT JOIN ${e10_other_business}.timecard d ON d.id = a.SIGN_IN_RECORD
LEFT JOIN ${e10_other_business}.timecard e ON e.id = a.SIGN_OUT_RECORD
LEFT JOIN ${e10_other_business}.attend_status_detail_link f
ON f.employee = a.employee AND f.attend_date = a.attend_date
WHERE a.attend_date = CURDATE()
AND a.SIGN_IN_RECORD IS NOT NULL
AND a.PERIOD_RANGE_START &lt; a.SIGN_RANGE_START
AND a.DAY_TYPE = 'WORK'
AND a.delete_type = 0
</select>
<select id="getTodayNoSign" resultType="java.lang.Integer">
SELECT COUNT( DISTINCT a.EMPLOYEE)
FROM ${e10_other_business}.ATTEND_STATUS_DETAIL a
INNER JOIN ${eteams}.employee b ON a.employee = b.id
INNER JOIN (SELECT id
FROM ${eteams}.department
WHERE formdata IN (SELECT CAST(id AS CHAR)
FROM ${eteams}.${table_dept_cus}
WHERE hrbp = #{userId})) alias ON alias.id = b.department
LEFT JOIN ${eteams}.${table_emp_cus} c ON c.form_data_id = b.formdata
LEFT JOIN ${e10_other_business}.timecard d ON d.id = a.SIGN_IN_RECORD
LEFT JOIN ${e10_other_business}.timecard e ON e.id = a.SIGN_OUT_RECORD
LEFT JOIN ${e10_other_business}.attend_status_detail_link f
ON f.employee = a.employee AND f.attend_date = a.attend_date
WHERE a.attend_date = CURDATE()
AND a.SIGN_IN_RECORD IS NULL
AND a.DAY_TYPE = 'WORK'
AND a.delete_type = 0
</select>
<select id="getTotalVacationByBp" resultType="java.lang.Integer">
SELECT COUNT(DISTINCT a.EMPLOYEE)
FROM ${e10_other_business}.ATTEND_STATUS_DETAIL a
JOIN ${eteams}.employee b ON a.employee = b.id
JOIN ${eteams}.${table_emp_cus} c ON c.form_data_id = b.formdata
JOIN ${e10_other_business}.attend_status_detail_link d
ON d.employee = a.employee AND d.attend_date = a.attend_date
JOIN ${e10_other_business}.attend_vacation_setting e ON e.id = d.VACATION_TYPE
JOIN (SELECT id
FROM ${eteams}.department
WHERE formdata IN (SELECT CAST(id AS CHAR)
FROM ${eteams}.${table_dept_cus}
WHERE hrbp = #{userId})
) alias ON alias.id = b.department
WHERE a.attend_date = CURDATE()
AND a.DAY_TYPE = 'WORK'
AND a.delete_type = 0
AND d.APPEAL_TYPE = 'leave'
</select>
</mapper>

View File

@ -86,14 +86,14 @@
<select id="getManageDeptIds" resultType="java.lang.Long">
select t.id
from ${param.eteams}.department t
inner join ${param.eteams}.${param.table_dept_cus} t2 on t.formdata = t2.id
inner join ${param.eteams}.${param.table_dept_cus} t2 on t.formdata = t2.id
where t.type = 'department'
and t.delete_type = 0
and t.status = 1
and t.tenant_key = #{param.tenantKey}
and t2.tenant_key = #{param.tenantKey}
and t2.delete_type = 0
and t2.bmfzr = #{empId}
and t.delete_type = 0
and t.status = 1
and t.tenant_key = #{param.tenantKey}
and t2.tenant_key = #{param.tenantKey}
and t2.delete_type = 0
and t2.bmfzr = #{empId}
</select>
<select id="getBirthdayNum" resultType="java.lang.Integer">
@ -181,11 +181,18 @@
</select>
<select id="getPieTypeConfig" resultType="com.weaver.seconddev.portal.entity.po.PieChartConfig">
select t.lx as type,t.flmc as name,t.xlfl as educationIds,
t.qsw as startIndex,t.jzw as endIndex,t.zj as gradeIds,t.zssx as orderNum
select t.lx as type,
t.flmc as name,
t.xlfl as educationIds,
t.qsw as startIndex,
t.jzw as endIndex,
t.zj as gradeIds,
t.zssx as orderNum
from ${e10_common}.uf_xlfb t
where t.delete_type = 0 and t.tenant_key = #{tenantKey}
and t.lx = #{pieType} order by t.zssx
where t.delete_type = 0
and t.tenant_key = #{tenantKey}
and t.lx = #{pieType}
order by t.zssx
</select>
<select id="getAgeCount" resultType="java.lang.Integer">
@ -336,7 +343,8 @@
</select>
<select id="getLateAndEarlyRankList" resultType="com.weaver.seconddev.portal.entity.po.LateAndEarlyRankPo">
select t1.xm as empId,sum(ifnull(t1.cdcs,0) + ifnull(t1.ztcs,0)) as times,sum(ifnull(t1.cdfzs,0) + ifnull(t1.ztfzs,0)) as minutes
select t1.xm as empId,sum(ifnull(t1.cdcs,0) + ifnull(t1.ztcs,0)) as times,sum(ifnull(t1.cdfzs,0) +
ifnull(t1.ztfzs,0)) as minutes
from ${e10_common}.uf_attend_day_report t1
where t1.delete_type = 0 and t1.tenant_key = #{tenantKey}
<if test="departmentIdList != null and departmentIdList.size() > 0">
@ -443,5 +451,144 @@
and t1.zt = 1
</select>
<select id="getKqRequire" resultType="java.lang.Integer">
SELECT COUNT(*)
FROM ${param.e10_other_business}.ATTEND_STATUS_DETAIL a
JOIN ${param.eteams}.employee b ON a.employee = b.id
JOIN (WITH RECURSIVE SubDepartments AS (SELECT id
FROM ${param.eteams}.department
WHERE formdata IN (SELECT CAST(id AS CHAR)
FROM ${param.eteams}.${param.table_dept_cus}
WHERE bmfzr = #{userId})
UNION ALL
SELECT d.id
FROM ${param.eteams}.department d
JOIN SubDepartments sd ON d.parent = sd.id
WHERE d.IS_DELETE = 0
AND d.`type` = 'department'
AND d.STATUS = 1)
SELECT id
FROM SubDepartments) alias ON alias.id = b.department
WHERE a.attend_date = CURDATE()
AND a.DAY_TYPE = 'WORK'
AND a.delete_type = 0
</select>
<select id="getTodayAllSign" resultType="java.lang.Integer">
SELECT COUNT(*)
FROM ${param.e10_other_business}.ATTEND_STATUS_DETAIL a
INNER JOIN ${param.eteams}.employee b ON a.employee = b.id
INNER JOIN (SELECT DISTINCT id
FROM (WITH RECURSIVE SubDepartments AS (SELECT id
FROM ${param.eteams}.department
WHERE formdata IN (SELECT CAST(id AS CHAR)
FROM ${param.eteams}.${param.table_dept_cus}
WHERE bmfzr = #{userId})
UNION ALL
SELECT d.id
FROM ${param.eteams}.department d
INNER JOIN SubDepartments sd ON d.parent = sd.id
WHERE d.IS_DELETE = 0
AND d.`type` = 'department'
AND d.STATUS = 1)
SELECT id
FROM SubDepartments) depts) alias ON alias.id = b.department
LEFT JOIN ${param.eteams}.${param.table_emp_cus} c ON c.form_data_id = b.formdata
LEFT JOIN ${param.e10_other_business}.timecard d ON d.id = a.SIGN_IN_RECORD
LEFT JOIN ${param.e10_other_business}.timecard e ON e.id = a.SIGN_OUT_RECORD
WHERE a.attend_date = CURDATE()
AND a.DAY_TYPE = 'WORK'
AND a.delete_type = 0
AND (a.SIGN_RANGE_START IS NOT NULL OR a.SIGN_RANGE_END IS NOT NULL)
</select>
<select id="getTotalLate" resultType="java.lang.Integer">
SELECT COUNT(0)
FROM ${param.e10_other_business}.ATTEND_STATUS_DETAIL a
INNER JOIN ${param.eteams}.employee b ON a.employee = b.id
INNER JOIN (SELECT DISTINCT id
FROM (WITH RECURSIVE SubDepartments AS (SELECT id
FROM ${param.eteams}.department
WHERE formdata IN (SELECT CAST(id AS CHAR)
FROM ${param.eteams}.${param.table_dept_cus}
WHERE bmfzr = #{userId})
UNION ALL
SELECT d.id
FROM ${param.eteams}.department d
INNER JOIN SubDepartments sd ON d.parent = sd.id
WHERE d.IS_DELETE = 0
AND d.`type` = 'department'
AND d.STATUS = 1)
SELECT id
FROM SubDepartments) depts) alias ON alias.id = b.department
LEFT JOIN ${param.eteams}.${param.table_emp_cus} c ON c.form_data_id = b.formdata
LEFT JOIN ${param.e10_other_business}.timecard d ON d.id = a.SIGN_IN_RECORD
LEFT JOIN ${param.e10_other_business}.timecard e ON e.id = a.SIGN_OUT_RECORD
LEFT JOIN ${param.e10_other_business}.attend_status_detail_link f
ON f.employee = a.employee AND f.attend_date = a.attend_date
WHERE a.attend_date = CURDATE()
AND a.SIGN_IN_RECORD IS NOT NULL
AND a.PERIOD_RANGE_START &lt; a.SIGN_RANGE_START
AND a.DAY_TYPE = 'WORK'
AND a.delete_type = 0
</select>
<select id="getTodayNoSign" resultType="java.lang.Integer">
SELECT COUNT( DISTINCT a.EMPLOYEE)
FROM ${param.e10_other_business}.ATTEND_STATUS_DETAIL a
INNER JOIN ${param.eteams}.employee b ON a.employee = b.id
INNER JOIN (SELECT DISTINCT id
FROM (WITH RECURSIVE SubDepartments AS (SELECT id
FROM ${param.eteams}.department
WHERE formdata IN (SELECT CAST(id AS CHAR)
FROM ${param.eteams}.${param.table_dept_cus}
WHERE bmfzr = #{userId})
UNION ALL
SELECT d.id
FROM ${param.eteams}.department d
INNER JOIN SubDepartments sd ON d.parent = sd.id
WHERE d.IS_DELETE = 0
AND d.`type` = 'department'
AND d.STATUS = 1)
SELECT id
FROM SubDepartments) depts) alias ON alias.id = b.department
LEFT JOIN ${param.eteams}.${param.table_emp_cus} c ON c.form_data_id = b.formdata
LEFT JOIN ${param.e10_other_business}.timecard d ON d.id = a.SIGN_IN_RECORD
LEFT JOIN ${param.e10_other_business}.timecard e ON e.id = a.SIGN_OUT_RECORD
LEFT JOIN ${param.e10_other_business}.attend_status_detail_link f
ON f.employee = a.employee AND f.attend_date = a.attend_date
WHERE a.attend_date = CURDATE()
AND a.SIGN_IN_RECORD IS NULL
AND a.DAY_TYPE = 'WORK'
AND a.delete_type = 0
</select>
<select id="getTotalVacation" resultType="java.lang.Integer">
SELECT COUNT(DISTINCT a.EMPLOYEE)
FROM ${param.e10_other_business}.ATTEND_STATUS_DETAIL a
JOIN ${param.eteams}.employee b ON a.employee = b.id
JOIN ${param.eteams}.${param.table_emp_cus} c ON c.form_data_id = b.formdata
JOIN ${param.e10_other_business}.attend_status_detail_link d
ON d.employee = a.employee AND d.attend_date = a.attend_date
JOIN ${param.e10_other_business}.attend_vacation_setting e ON e.id = d.VACATION_TYPE
JOIN (SELECT DISTINCT id
FROM (WITH RECURSIVE SubDepartments AS (SELECT id
FROM ${param.eteams}.department
WHERE formdata IN (SELECT CAST(id AS CHAR)
FROM ${param.eteams}.${param.table_dept_cus}
WHERE bmfzr = #{userId})
UNION ALL
SELECT d.id
FROM ${param.eteams}.department d
INNER JOIN SubDepartments sd ON d.parent = sd.id
WHERE d.IS_DELETE = 0
AND d.`type` = 'department'
AND d.STATUS = 1)
SELECT id
FROM SubDepartments) AS subquery_alias) alias ON alias.id = b.department
WHERE a.attend_date = CURDATE()
AND a.DAY_TYPE = 'WORK'
AND a.delete_type = 0
AND d.APPEAL_TYPE = 'leave'
</select>
</mapper>