历史考勤推送问题

This commit is contained in:
fl 2024-12-20 15:08:28 +08:00
parent 097e271be9
commit 9ed3545405
14 changed files with 139 additions and 67 deletions

View File

@ -256,6 +256,19 @@ public class AttendanceDetailsController extends BaseController {
return getDataTableError(new ArrayList<>()); return getDataTableError(new ArrayList<>());
} }
@RequiresPermissions("att:public:list")
@GetMapping("/getOutCountList")
@Log(title = "考勤报表->考情明细->打卡次数记录", businessType = BusinessType.QUERY)
public TableDataInfo getAttCountList(AttDataDetailsBean bean) {
try{
startPage();
return getDataTable(attendanceDetailsService.getAttCountList(bean));
}catch (Exception e){
log.error(e.toString(),e);
}
return getDataTableError(new ArrayList<>());
}
/** /**
* 用户新增 * 用户新增
*/ */

View File

@ -88,4 +88,6 @@ public interface AttendanceDetailsDao {
List<AttDataDetailsBean> getAttDayList(AttDataDetailsBean bean); List<AttDataDetailsBean> getAttDayList(AttDataDetailsBean bean);
List<AttDataDetailsBean> getAttDayReportDetailsListData(AttDataDetailsBean bean); List<AttDataDetailsBean> getAttDayReportDetailsListData(AttDataDetailsBean bean);
List<AttDataDetailsBean> getAttCountList(AttDataDetailsBean bean);
} }

View File

@ -199,6 +199,9 @@ public class AttDataDetailsBean {
/** 上班时间外出次数 */ /** 上班时间外出次数 */
private Integer outCount; private Integer outCount;
/** 打卡次数 */
private Integer attCount;
/** /**
* 角色类型 1:人资专员和管理员;2:部门考勤员部门负责人 3普通人员 * 角色类型 1:人资专员和管理员;2:部门考勤员部门负责人 3普通人员
*/ */

View File

@ -103,4 +103,6 @@ public interface AttendanceDetailsService {
AjaxResult synchronous(AttDataDetailsBean bean); AjaxResult synchronous(AttDataDetailsBean bean);
List<AttDataDetailsBean> getAttDayList(AttDataDetailsBean bean); List<AttDataDetailsBean> getAttDayList(AttDataDetailsBean bean);
List<AttDataDetailsBean> getAttCountList(AttDataDetailsBean bean);
} }

View File

@ -5,6 +5,7 @@ import com.bonus.common.core.utils.poi.ExcelUtil;
import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.common.security.utils.SecurityUtils; import com.bonus.common.security.utils.SecurityUtils;
import com.bonus.system.api.domain.MapVo; import com.bonus.system.api.domain.MapVo;
import com.bonus.system.api.domain.SysUser;
import com.bonus.system.att.dao.AttendanceDetailsDao; import com.bonus.system.att.dao.AttendanceDetailsDao;
import com.bonus.system.att.entity.AttDataDetailsBean; import com.bonus.system.att.entity.AttDataDetailsBean;
import com.bonus.system.att.entity.AttDayReportBean; import com.bonus.system.att.entity.AttDayReportBean;
@ -111,16 +112,17 @@ public class AttendanceDetailsServiceImpl implements AttendanceDetailsService {
@Override @Override
public List<AttDataDetailsBean> selectAttUpdateList(AttDataDetailsBean bean) { public List<AttDataDetailsBean> selectAttUpdateList(AttDataDetailsBean bean) {
//只能查自己分公司的人 //只能查自己分公司的人
List<MapVo> orgList = SecurityUtils.getLoginUser().getSysUser().getOrgList(); SysUser sysUser = SecurityUtils.getLoginUser().getSysUser();
if(!orgList.isEmpty()){ List<String> roleId = sysUser.getRoleList();
ArrayList<String> ids = new ArrayList<>(); if (Collections.frequency(roleId, 1L)==0) {
for (MapVo mapVo : orgList) { List<MapVo> orgList = SecurityUtils.getLoginUser().getSysUser().getOrgList();
String id = proDeptRoleDao.getOrgChildById(mapVo.getId()); if(!orgList.isEmpty()){
// 使用 Arrays.asList() 将数组转换为 ArrayList ArrayList<String> ids = new ArrayList<>();
ArrayList<String> idList = new ArrayList<>(Arrays.asList(id.split(","))); for (MapVo mapVo : orgList) {
ids.addAll(idList); ids.add(String.valueOf(mapVo.getId()));
}
bean.setOrgList(ids);
} }
bean.setOrgList(ids);
} }
return attendanceDetailsDao.selectAttUpdateList(bean); return attendanceDetailsDao.selectAttUpdateList(bean);
} }
@ -193,6 +195,11 @@ public class AttendanceDetailsServiceImpl implements AttendanceDetailsService {
return attendanceDetailsDao.getAttDayList(bean); return attendanceDetailsDao.getAttDayList(bean);
} }
@Override
public List<AttDataDetailsBean> getAttCountList(AttDataDetailsBean bean) {
return attendanceDetailsDao.getAttCountList(bean);
}
public List<AttDayReportBean> getAttDayReportListAll(List<AttDayReportBean> list) { public List<AttDayReportBean> getAttDayReportListAll(List<AttDayReportBean> list) {
List<AttDayReportBean> allList = new ArrayList<>(); List<AttDayReportBean> allList = new ArrayList<>();
Map<String, AttDayReportBean> map = list.stream() Map<String, AttDayReportBean> map = list.stream()

View File

@ -21,10 +21,10 @@ public interface SysOrgDao {
/** /**
* 查询组织列表 * 查询组织列表
* *
* @param sysOrg 组织信息 * @param bean 组织信息
* @return 菜单列表 * @return 菜单列表
*/ */
List<SysOrg> selectOrgList(SysOrg sysOrg); List<SysOrg> selectOrgList(@Param("bean") SysOrg bean);
/** /**
* 根据组织编号获取详细信息 * 根据组织编号获取详细信息

View File

@ -105,4 +105,10 @@ public class SysOrg {
* *
*/ */
private String idNumber; private String idNumber;
/**
* 自己项目部所在分公司下的所有项目部id
*/
private List<String> orgList;
} }

View File

@ -10,6 +10,8 @@ import com.bonus.common.core.utils.poi.ExcelUtil;
import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.common.security.utils.SecurityUtils; import com.bonus.common.security.utils.SecurityUtils;
import com.bonus.common.security.utils.ValidatorsUtils; import com.bonus.common.security.utils.ValidatorsUtils;
import com.bonus.system.api.domain.MapVo;
import com.bonus.system.api.domain.SysUser;
import com.bonus.system.att.utils.AddressCoordinateFormatUtil; import com.bonus.system.att.utils.AddressCoordinateFormatUtil;
import com.bonus.system.att.utils.TreeUtils; import com.bonus.system.att.utils.TreeUtils;
import com.bonus.system.basic.dao.SysOrgDao; import com.bonus.system.basic.dao.SysOrgDao;
@ -61,6 +63,19 @@ public class SysOrgServiceImpl implements SysOrgService {
@Override @Override
public List<SysOrg> selectOrgList(SysOrg sysOrg) { public List<SysOrg> selectOrgList(SysOrg sysOrg) {
SysUser sysUser = SecurityUtils.getLoginUser().getSysUser();
List<String> roleId = sysUser.getRoleList();
//管理员与人资角色可以看到所有
if (Collections.frequency(roleId, 1L)==0 && Collections.frequency(roleId, 16L)==0) {
List<MapVo> orgList = sysUser.getOrgList();
if (!orgList.isEmpty()) {
ArrayList<String> ids = new ArrayList<>();
for (MapVo mapVo : orgList) {
ids.add(String.valueOf(mapVo.getId()));
}
sysOrg.setOrgList(ids);
}
}
return orgDao.selectOrgList(sysOrg); return orgDao.selectOrgList(sysOrg);
} }

View File

@ -43,18 +43,12 @@ public class ProDeptRoleServiceImpl implements ProDeptRoleService {
//只能查自己分公司的人 //只能查自己分公司的人
SysUser sysUser = SecurityUtils.getLoginUser().getSysUser(); SysUser sysUser = SecurityUtils.getLoginUser().getSysUser();
List<String> roleId = sysUser.getRoleList(); List<String> roleId = sysUser.getRoleList();
if (Collections.frequency(roleId, 1L)>0) { if (Collections.frequency(roleId, 1L)==0) {
List<MapVo> orgList = sysUser.getOrgList(); List<MapVo> orgList = sysUser.getOrgList();
if (!orgList.isEmpty()) { if (!orgList.isEmpty()) {
ArrayList<String> ids = new ArrayList<>(); ArrayList<String> ids = new ArrayList<>();
for (MapVo mapVo : orgList) { for (MapVo mapVo : orgList) {
// Long orgId = proDeptRoleDao.getParentOrgById(mapVo);
// String id = proDeptRoleDao.getOrgChildById(orgId);
// // 使用 Arrays.asList() 将数组转换为 ArrayList
// ArrayList<String> idList = new ArrayList<>(Arrays.asList(id.split(",")));
// ids.addAll(idList);
ids.add(String.valueOf(mapVo.getId())); ids.add(String.valueOf(mapVo.getId()));
} }
bean.setOrgList(ids); bean.setOrgList(ids);
} }
@ -67,7 +61,7 @@ public class ProDeptRoleServiceImpl implements ProDeptRoleService {
//只能查自己分公司的人 //只能查自己分公司的人
SysUser sysUser = SecurityUtils.getLoginUser().getSysUser(); SysUser sysUser = SecurityUtils.getLoginUser().getSysUser();
List<String> roleId = sysUser.getRoleList(); List<String> roleId = sysUser.getRoleList();
if (Collections.frequency(roleId, 1L)>0) { if (Collections.frequency(roleId, 1L) == 0) {
List<MapVo> orgList = sysUser.getOrgList(); List<MapVo> orgList = sysUser.getOrgList();
if (!orgList.isEmpty()) { if (!orgList.isEmpty()) {
ArrayList<String> ids = new ArrayList<>(); ArrayList<String> ids = new ArrayList<>();

View File

@ -4,6 +4,7 @@ import com.bonus.common.core.constant.UserConstants;
import com.bonus.common.core.utils.StringUtils; import com.bonus.common.core.utils.StringUtils;
import com.bonus.common.security.utils.SecurityUtils; import com.bonus.common.security.utils.SecurityUtils;
import com.bonus.system.api.domain.MapVo; import com.bonus.system.api.domain.MapVo;
import com.bonus.system.api.domain.SysUser;
import com.bonus.system.att.utils.AddressCoordinateFormatUtil; import com.bonus.system.att.utils.AddressCoordinateFormatUtil;
import com.bonus.system.basic.dao.SysOrgDao; import com.bonus.system.basic.dao.SysOrgDao;
import com.bonus.system.basic.domain.SysNotice; import com.bonus.system.basic.domain.SysNotice;
@ -18,10 +19,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.*;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -53,16 +51,17 @@ public class SubOrgServiceImpl implements SubOrgService {
@Override @Override
public List<SubOrgBean> selectSubOrgList(SubOrgBean subOrgBean) { public List<SubOrgBean> selectSubOrgList(SubOrgBean subOrgBean) {
//只能查自己分公司的人 //只能查自己分公司的人
List<MapVo> orgList = SecurityUtils.getLoginUser().getSysUser().getOrgList(); SysUser sysUser = SecurityUtils.getLoginUser().getSysUser();
if(!orgList.isEmpty()){ List<String> roleId = sysUser.getRoleList();
ArrayList<String> ids = new ArrayList<>(); if (Collections.frequency(roleId, 1L)==0) {
for (MapVo mapVo : orgList) { List<MapVo> orgList = SecurityUtils.getLoginUser().getSysUser().getOrgList();
String id = proDeptRoleDao.getOrgChildById(mapVo.getId()); if (!orgList.isEmpty()) {
// 使用 Arrays.asList() 将数组转换为 ArrayList ArrayList<String> ids = new ArrayList<>();
ArrayList<String> idList = new ArrayList<>(Arrays.asList(id.split(","))); for (MapVo mapVo : orgList) {
ids.addAll(idList); ids.add(String.valueOf(mapVo.getId()));
}
subOrgBean.setOrgList(ids);
} }
subOrgBean.setOrgList(ids);
} }
return orgDao.selectOrgList(subOrgBean); return orgDao.selectOrgList(subOrgBean);
} }

View File

@ -62,13 +62,17 @@ public class HolidayServiceImpl implements HolidayService {
@Override @Override
public List<HolidayBean> getHolidayListCheck(HolidayBean bean) { public List<HolidayBean> getHolidayListCheck(HolidayBean bean) {
//只能查自己部门的人 //只能查自己部门的人
List<MapVo> orgList = SecurityUtils.getLoginUser().getSysUser().getOrgList(); SysUser sysUser = SecurityUtils.getLoginUser().getSysUser();
if(!orgList.isEmpty()){ List<String> roleId = sysUser.getRoleList();
ArrayList<String> ids = new ArrayList<>(); if (Collections.frequency(roleId, 1L)==0) {
for (MapVo mapVo : orgList) { List<MapVo> orgList = SecurityUtils.getLoginUser().getSysUser().getOrgList();
ids.add(String.valueOf(mapVo.getId())); if (!orgList.isEmpty()) {
ArrayList<String> ids = new ArrayList<>();
for (MapVo mapVo : orgList) {
ids.add(String.valueOf(mapVo.getId()));
}
bean.setOrgList(ids);
} }
bean.setOrgList(ids);
} }
return holidayDao.getHolidayList(bean); return holidayDao.getHolidayList(bean);
} }

View File

@ -5,11 +5,14 @@
<mapper namespace="com.bonus.system.att.dao.AttendanceDetailsDao"> <mapper namespace="com.bonus.system.att.dao.AttendanceDetailsDao">
<select id="selectAttDetailsList" resultType="com.bonus.system.att.entity.AttDataDetailsBean"> <select id="selectAttDetailsList" resultType="com.bonus.system.att.entity.AttDataDetailsBean">
select su.user_name, so.org_name,COUNT( awa.user_id ) as outCount, v.* from v_att_update_data v select su.user_name, so.org_name,COUNT( awa.user_id ) as outCount,
COUNT(DISTINCT asd.att_current_time ) AS attCount,
v.* from v_att_update_data v
left join sys_user su on su.user_id = v.user_id left join sys_user su on su.user_id = v.user_id
left join sys_organization so on so.id = v.org_id left join sys_organization so on so.id = v.org_id
LEFT JOIN att_work_abnormal awa ON v.user_id = awa.user_id LEFT JOIN att_work_abnormal awa ON v.user_id = awa.user_id
AND v.att_current_day = awa.att_current_day AND v.att_current_day = awa.att_current_day
LEFT JOIN att_source_data asd ON su.user_name = asd.`name` and asd.att_current_day = v.att_current_day
where v.att_current_day BETWEEN #{startDate} AND #{endDate} where v.att_current_day BETWEEN #{startDate} AND #{endDate}
<if test="orgId != null and orgId != ''"> <if test="orgId != null and orgId != ''">
AND v.org_id = #{orgId} AND v.org_id = #{orgId}
@ -285,6 +288,22 @@
</where> </where>
ORDER BY att_current_day DESC ORDER BY att_current_day DESC
</select> </select>
<select id="getAttCountList" resultType="com.bonus.system.att.entity.AttDataDetailsBean">
SELECT
att_current_day,att_current_time,att_address
from
att_source_data
<where>
<if test="attCurrentDay != null and attCurrentDay != ''">
and awa.att_current_day = #{attCurrentDay}
</if>
<if test="userName != null and userName != ''">
and locate(#{userName},awa.user_name)
</if>
</where>
ORDER BY
att_current_time ASC
</select>
<update id="updateAttDetailsData"> <update id="updateAttDetailsData">

View File

@ -16,11 +16,18 @@
GROUP BY o.id GROUP BY o.id
) a ) a
where 1=1 where 1=1
<if test="orgName != null and orgName != ''"> <if test="bean.orgName != null and bean.orgName != ''">
AND a.org_name like concat('%', #{orgName}, '%') AND a.org_name like concat('%', #{bean.orgName}, '%')
</if> </if>
<if test="orgHeadUserName != null and orgHeadUserName != ''"> <if test="bean.orgHeadUserName != null and bean.orgHeadUserName != ''">
AND a.orgHeadUserName like concat('%', #{orgHeadUserName}, '%') AND a.orgHeadUserName like concat('%', #{bean.orgHeadUserName}, '%')
</if>
<if test='bean.orgList != null and bean.orgList.size() > 0'>
and a.id in (
<foreach collection="bean.orgList" item="item" separator=",">
#{item}
</foreach>
)
</if> </if>
</select> </select>

View File

@ -63,53 +63,54 @@
<select id="getHolidayList" resultType="com.bonus.system.holiday.entity.HolidayBean"> <select id="getHolidayList" resultType="com.bonus.system.holiday.entity.HolidayBean">
SELECT SELECT
id, la.id,
user_id, la.user_id,
user_name, la.user_name,
org_id, la.org_id,
org_name, la.org_name,
create_time, la.create_time,
leave_type, la.leave_type,
leave_reason, la.leave_reason,
leave_start_date, la.leave_start_date,
leave_start_interval, la.leave_start_interval,
leave_end_date, la.leave_end_date,
leave_end_interval, la.leave_end_interval,
leave_duration, la.leave_duration,
examine_status la.examine_status
FROM FROM
leave_apply leave_apply la
left join (select user_Id,GROUP_CONCAT( org_id ) AS org_id FROM sys_user_org where is_active = '1' group by user_id) suo on suo.user_id = la.user_id
WHERE WHERE
is_active = '1' is_active = '1'
<if test="bean.leaveDate != null and bean.leaveDate != '' "> <if test="bean.leaveDate != null and bean.leaveDate != '' ">
and locate(#{bean.leaveDate},create_time) and locate(#{bean.leaveDate},la.create_time)
</if> </if>
<if test="bean.examineStatus != null and bean.examineStatus != '' "> <if test="bean.examineStatus != null and bean.examineStatus != '' ">
and examine_status = #{bean.examineStatus} and la.examine_status = #{bean.examineStatus}
</if> </if>
<if test="bean.leaveType != null and bean.leaveType != '' "> <if test="bean.leaveType != null and bean.leaveType != '' ">
and locate(#{bean.leaveType},leave_type) and locate(#{bean.leaveType},la.leave_type)
</if> </if>
<if test="bean.type != null and bean.type != '' "> <if test="bean.type != null and bean.type != '' ">
and locate(#{bean.type},type) and locate(#{bean.type},la.type)
</if> </if>
<if test="bean.orgName != null and bean.orgName != '' "> <if test="bean.orgName != null and bean.orgName != '' ">
and locate(#{bean.orgName},org_name) and locate(#{bean.orgName},la.org_name)
</if> </if>
<if test="bean.userName != null and bean.userName != '' "> <if test="bean.userName != null and bean.userName != '' ">
and locate(#{bean.userName},user_name) and locate(#{bean.userName},la.user_name)
</if> </if>
<if test="bean.userId != null and bean.userId != '' "> <if test="bean.userId != null and bean.userId != '' ">
and (user_id = #{bean.userId} or create_user_id = #{bean.userId} ) and (la.user_id = #{bean.userId} or la.create_user_id = #{bean.userId} )
</if> </if>
<if test='bean.orgList != null and bean.orgList.size() > 0'> <if test='bean.orgList != null and bean.orgList.size() > 0'>
and org_id in ( and suo.org_id in (
<foreach collection="bean.orgList" item="item" separator=","> <foreach collection="bean.orgList" item="item" separator=",">
#{item} #{item}
</foreach> </foreach>
) )
</if> </if>
ORDER BY update_time DESC ORDER BY la.update_time DESC
</select> </select>
<select id="selectHolidayById" resultType="com.bonus.system.holiday.entity.HolidayBean"> <select id="selectHolidayById" resultType="com.bonus.system.holiday.entity.HolidayBean">