Commit 2fe57eed authored by 赵啸非's avatar 赵啸非

Merge remote-tracking branch 'origin/master'

parents e6d90c2c 5a42b658
......@@ -2,6 +2,8 @@ package com.mortals.xhx.module.attendance.dao;
import com.mortals.framework.dao.ICRUDDao;
import com.mortals.xhx.module.attendance.model.AttendanceStaffStatEntity;
import com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery;
import java.util.List;
/**
* 考勤人员汇总信息Dao
......@@ -13,5 +15,5 @@ import java.util.List;
public interface AttendanceStaffStatDao extends ICRUDDao<AttendanceStaffStatEntity,Long>{
List<AttendanceStaffStatEntity> getListExt(AttendanceSummaryQuery params);
}
package com.mortals.xhx.module.attendance.dao;
import com.mortals.framework.dao.ICRUDDao;
import com.mortals.framework.model.PageInfo;
import com.mortals.framework.model.Result;
import com.mortals.xhx.module.attendance.model.AttendanceStatEntity;
import com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery;
/**
* 考勤汇总信息Dao
......@@ -17,4 +20,6 @@ public interface AttendanceStatDao extends ICRUDDao<AttendanceStatEntity,Long>{
* */
AttendanceStatEntity queryEntity(Long staffId);
Result<AttendanceStatEntity> getListExt(AttendanceSummaryQuery params, PageInfo pageInfo);
}
package com.mortals.xhx.module.attendance.dao.ibatis;
import com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery;
import org.springframework.stereotype.Repository;
import com.mortals.xhx.module.attendance.dao.AttendanceStaffStatDao;
import com.mortals.xhx.module.attendance.model.AttendanceStaffStatEntity;
......@@ -17,5 +18,8 @@ import java.util.List;
public class AttendanceStaffStatDaoImpl extends BaseCRUDDaoMybatis<AttendanceStaffStatEntity,Long> implements AttendanceStaffStatDao {
@Override
public List<AttendanceStaffStatEntity> getListExt(AttendanceSummaryQuery params) {
return this.getSqlSession().selectList(this.getSqlId("getListExt"), params);
}
}
......@@ -2,9 +2,18 @@ package com.mortals.xhx.module.attendance.dao.ibatis;
import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
import com.mortals.framework.model.PageInfo;
import com.mortals.framework.model.ParamDto;
import com.mortals.framework.model.Result;
import com.mortals.xhx.module.attendance.dao.AttendanceStatDao;
import com.mortals.xhx.module.attendance.model.AttendanceStatEntity;
import com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery;
import org.apache.ibatis.session.RowBounds;
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.List;
/**
* 考勤汇总信息DaoImpl DAO接口
*
......@@ -19,4 +28,41 @@ public class AttendanceStatDaoImpl extends BaseCRUDDaoMybatis<AttendanceStatEnti
public AttendanceStatEntity queryEntity(Long staffId) {
return getSqlSession().selectOne(getSqlId("queryEntity"),staffId);
}
@Override
public Result<AttendanceStatEntity> getListExt(AttendanceSummaryQuery params, PageInfo pageInfo) {
Result result = new Result();
List list = null;
if (pageInfo.isCountPage()) {
int count = this.getCountExt(params);
if (count == 0) {
list = new ArrayList();
} else if (pageInfo.getPrePageResult() == -1) {
list = this.getSqlSession().selectList(this.getSqlId("getListExt"), params);
} else {
RowBounds rowBounds = new RowBounds(pageInfo.getBeginIndex(), pageInfo.getPrePageResult());
list = this.getSqlSession().selectList(this.getSqlId("getListExt"), params, rowBounds);
}
pageInfo.setTotalResult(count);
result.setPageInfo(pageInfo);
result.setList((List)list);
} else {
if (pageInfo.getPrePageResult() == -1) {
list = this.getSqlSession().selectList(this.getSqlId("getListExt"), params);
} else {
RowBounds rowBounds = new RowBounds(pageInfo.getBeginIndex(), pageInfo.getPrePageResult());
list = this.getSqlSession().selectList(this.getSqlId("getListExt"), params, rowBounds);
}
pageInfo.setTotalResult(-1);
result.setPageInfo(pageInfo);
result.setList(list);
}
return result;
}
public int getCountExt(AttendanceSummaryQuery paramDto) {
return (Integer)this.getSqlSession().selectOne(this.getSqlId("getListCountExt"), paramDto);
}
}
......@@ -13,6 +13,11 @@ public class AttendanceSummaryQuery {
private String summaryTimeStart;
private String summaryTimeEnd;
private Long staffId;
private Integer page;
private Integer size;
public AttendanceSummaryQuery(String summaryTime){
this.summaryTime = summaryTime;
}
......
package com.mortals.xhx.module.attendance.service;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
import com.mortals.framework.model.PageInfo;
import com.mortals.framework.model.Result;
import com.mortals.framework.service.ICRUDService;
import com.mortals.xhx.module.attendance.model.AttendanceStaffStatEntity;
import com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery;
import java.util.List;
/**
* AttendanceStaffStatService
*
......@@ -11,4 +19,6 @@ import com.mortals.xhx.module.attendance.model.AttendanceStaffStatEntity;
*/
public interface AttendanceStaffStatService extends ICRUDService<AttendanceStaffStatEntity,Long>{
List<AttendanceStaffStatEntity> getListExt(AttendanceSummaryQuery params) throws AppException;
}
\ No newline at end of file
package com.mortals.xhx.module.attendance.service;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
import com.mortals.framework.model.PageInfo;
import com.mortals.framework.model.Result;
import com.mortals.framework.service.ICRUDService;
import com.mortals.xhx.module.attendance.model.AttendanceStatEntity;
import com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery;
......@@ -18,4 +22,6 @@ public interface AttendanceStatService extends ICRUDService<AttendanceStatEntity
* @param query
*/
void doAttendanceSummary(AttendanceSummaryQuery query);
Result<AttendanceStatEntity> findExt(AttendanceSummaryQuery params, PageInfo pageInfo, Context context) throws AppException;
}
\ No newline at end of file
package com.mortals.xhx.module.attendance.service.impl;
import com.mortals.framework.util.StringUtils;
import com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery;
import org.springframework.stereotype.Service;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
import com.mortals.framework.exception.AppException;
......@@ -6,6 +8,9 @@ import com.mortals.framework.model.Context;
import com.mortals.xhx.module.attendance.dao.AttendanceStaffStatDao;
import com.mortals.xhx.module.attendance.model.AttendanceStaffStatEntity;
import com.mortals.xhx.module.attendance.service.AttendanceStaffStatService;
import java.util.List;
/**
* AttendanceStaffStatService
* 考勤人员汇总信息 service实现
......@@ -15,5 +20,18 @@ import com.mortals.xhx.module.attendance.service.AttendanceStaffStatService;
*/
@Service("attendanceStaffStatService")
public class AttendanceStaffStatServiceImpl extends AbstractCRUDServiceImpl<AttendanceStaffStatDao, AttendanceStaffStatEntity, Long> implements AttendanceStaffStatService {
@Override
public List<AttendanceStaffStatEntity> getListExt(AttendanceSummaryQuery params) throws AppException {
if(params==null){
throw new AppException("查询条件对象不能为空");
}
if(params.getStaffId()==null){
throw new AppException("人员信息id不能为空");
}
if(StringUtils.isEmpty(params.getSummaryTimeStart())||StringUtils.isEmpty(params.getSummaryTimeEnd())){
throw new AppException("查询日期范围不能为空");
}
return dao.getListExt(params);
}
}
\ No newline at end of file
package com.mortals.xhx.module.attendance.service.impl;
import com.mortals.framework.model.PageInfo;
import com.mortals.framework.model.Result;
import com.mortals.framework.util.DateUtils;
import com.mortals.framework.util.StringUtils;
import com.mortals.xhx.common.code.LeaveTypeEnum;
......@@ -26,6 +27,7 @@ import com.mortals.xhx.module.attendance.model.AttendanceStatEntity;
import com.mortals.xhx.module.attendance.service.AttendanceStatService;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
......@@ -161,9 +163,11 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc
BeanUtils.copyProperties(item, attendanceStatEntity, BeanUtil.getNullPropertyNames(item));
attendanceStatEntity.setCreateTime(new Date());
attendanceStatEntity.setCreateUserId(1l);
attendanceStatEntity.setGoTimes(1); //默认当天全勤
this.dao.insert(attendanceStatEntity);
} else {
BeanUtils.copyProperties(item, temp, BeanUtil.getNullPropertyNames(item));
temp.setUpdateTime(new Date());
this.dao.update(temp);
}
}
......@@ -174,10 +178,16 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc
if (CollectionUtils.isNotEmpty(leaveSummaryVoList)) {
BigDecimal hour = new BigDecimal(3600);
for (LeaveSummaryVo item : leaveSummaryVoList) {
String attendanceSummary = "";
AttendanceStatEntity temp = this.selectOne(new AttendanceStatQuery().staffId(item.getStaffId()).year(item.getYear()).month(item.getMonth()).day(item.getDay()));
if (temp != null) {
BigDecimal leaveTime = new BigDecimal(item.getDuration()).divide(hour, 1, BigDecimal.ROUND_HALF_DOWN);
temp.setGoTimes(0); //默认只要有请假,当天就不算全勤
LeaveTypeEnum leaveTypeEnum = LeaveTypeEnum.getByValue(item.getLeaveType());
if(leaveTypeEnum == null){
leaveTypeEnum = LeaveTypeEnum.事假; //默认为事假
}
attendanceSummary = leaveTypeEnum.getDesc()+"*1";
switch (leaveTypeEnum) {
case 事假:
temp.setPersonalLeave(leaveTime);
......@@ -215,6 +225,21 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc
}
this.dao.update(temp);
}
AttendanceStaffStatEntity staffStat = new AttendanceStaffStatEntity();
staffStat.initAttrValue();
BeanUtils.copyProperties(item, staffStat, BeanUtil.getNullPropertyNames(item));
staffStat.setAttendanceSummary(attendanceSummary);
AttendanceStaffStatEntity staffStatTemp = attendanceStaffStatService.selectOne(new AttendanceStaffStatQuery().staffId(item.getStaffId()).year(item.getYear()).month(item.getMonth()).day(item.getDay()));
if(staffStatTemp!=null){
staffStat.setId(staffStatTemp.getId());
staffStat.setUpdateTime(new Date());
attendanceStaffStatService.update(staffStat);
}else {
staffStat.setCreateTime(new Date());
staffStat.setCreateUserId(1l);
attendanceStaffStatService.save(staffStat);
}
}
}
log.info("完成汇总当前日期请假情况.....");
......@@ -225,8 +250,33 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc
AttendanceStatEntity temp = this.selectOne(new AttendanceStatQuery().staffId(item.getStaffId()).year(item.getYear()).month(item.getMonth()).day(item.getDay()));
if (temp != null) {
BeanUtils.copyProperties(item, temp, BeanUtil.getNullPropertyNames(item));
temp.setGoTimes(0); //默认只要有异常考勤,当天就不算全勤
this.dao.update(temp);
}
String attendanceSummary = "";
if(item.getMorningTimes()>0){
attendanceSummary+="缺卡*"+item.getMorningTimes()+"次;";
}
if(item.getLateTimes()>0){
attendanceSummary+="迟到*"+item.getLateTimes()+"次;";
}
if(item.getOvertimeTimes()>0){
attendanceSummary+="早退*"+item.getOvertimeTimes()+"次;";
}
AttendanceStaffStatEntity staffStat = new AttendanceStaffStatEntity();
staffStat.initAttrValue();
BeanUtils.copyProperties(item, staffStat, BeanUtil.getNullPropertyNames(item));
staffStat.setAttendanceSummary(attendanceSummary);
AttendanceStaffStatEntity staffStatTemp = attendanceStaffStatService.selectOne(new AttendanceStaffStatQuery().staffId(item.getStaffId()).year(item.getYear()).month(item.getMonth()).day(item.getDay()));
if(staffStatTemp!=null){
staffStat.setId(staffStatTemp.getId());
staffStat.setUpdateTime(new Date());
attendanceStaffStatService.update(staffStat);
}else {
staffStat.setCreateTime(new Date());
staffStat.setCreateUserId(1l);
attendanceStaffStatService.save(staffStat);
}
}
}
log.info("完成汇总当前日期异常考勤.....");
......@@ -235,4 +285,30 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc
log.error("考勤汇总出错",e);
}
}
@Override
public Result<AttendanceStatEntity> findExt(AttendanceSummaryQuery params, PageInfo pageInfo, Context context) throws AppException {
if(params==null){
params = new AttendanceSummaryQuery();
Calendar now = Calendar.getInstance();
now.setTime(new Date());
now.add(Calendar.DAY_OF_MONTH, -30); //默认查最近30天数据
params.setSummaryTimeStart(DateUtils.getStrDate(now.getTime()));
params.setSummaryTimeEnd(DateUtils.getCurrStrDate());
}
if(pageInfo == null){
pageInfo = new PageInfo(10);
}
Result<AttendanceStatEntity> result = dao.getListExt(params,pageInfo);
if(CollectionUtils.isNotEmpty(result.getList())){
for(AttendanceStatEntity item:result.getList()){
params.setStaffId(item.getStaffId());
List<AttendanceStaffStatEntity> statEntities = attendanceStaffStatService.getListExt(params);
if(CollectionUtils.isNotEmpty(statEntities)){
item.setAttendanceStaffStatEntities(statEntities);
}
}
}
return result;
}
}
\ No newline at end of file
......@@ -133,8 +133,47 @@ public class AttendanceStatController extends BaseCRUDJsonBodyMappingController<
return dates;
}
public static void main(String[] args){
List<String> sss = getDatesBetween("2023-07-28","2023-08-04");
System.out.println(sss);
@PostMapping({"listExt"})
@UnAuth
public Rest<Object> listExt(@RequestBody AttendanceSummaryQuery query) {
Rest<Object> ret = new Rest();
Map<String, Object> model = new HashMap();
Context context = this.getContext();
String busiDesc = "查询" + this.getModuleDesc();
int code=1;
try {
PageInfo pageInfo = this.buildPageInfoExt(query);
Result<AttendanceStatEntity> result = this.getService().findExt(query, pageInfo, context);
model.put("data", result.getList());
model.put("pageInfo", result.getPageInfo());
this.parsePageInfo(model, result.getPageInfo());
model.put("message_info", busiDesc + "成功");
if (!ObjectUtils.isEmpty(context) && !ObjectUtils.isEmpty(context.getUser())) {
this.recordSysLog(this.request, busiDesc + " 【成功】");
}
} catch (Exception var9) {
code = -1;
this.doException(this.request, busiDesc, model, var9);
}
this.init(model, context);
ret.setCode(code);
ret.setData(model);
ret.setDict(model.get("dict"));
ret.setMsg(model.get("message_info") == null ? "" : model.remove("message_info").toString());
return ret;
}
protected PageInfo buildPageInfoExt(AttendanceSummaryQuery query) {
PageInfo pageInfo = new PageInfo();
if (!ObjectUtils.isEmpty(query) && !ObjectUtils.isEmpty(query.getPage())) {
pageInfo.setCurrPage(query.getPage());
}
if (!ObjectUtils.isEmpty(query) && !ObjectUtils.isEmpty(query.getSize())) {
pageInfo.setPrePageResult(query.getSize());
}
return pageInfo;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"mybatis-3-mapper.dtd">
<mapper namespace="com.mortals.xhx.module.attendance.dao.ibatis.AttendanceStaffStatDaoImpl">
<select id="getListExt" parameterType="com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery" resultMap="AttendanceStaffStatEntity-Map">
select s.*
from mortals_xhx_attendance_staff_stat as s
where s.staffId=#{staffId}
AND STR_TO_DATE(CONCAT(s.`year`,'-',s.`month`,'-',s.`day`),'%Y-%m-%d') <![CDATA[ >= ]]> STR_TO_DATE(#{summaryTimeStart},'%Y-%m-%d')
AND STR_TO_DATE(CONCAT(s.`year`,'-',s.`month`,'-',s.`day`),'%Y-%m-%d') <![CDATA[ <= ]]> STR_TO_DATE(#{summaryTimeEnd},'%Y-%m-%d')
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"mybatis-3-mapper.dtd">
<mapper namespace="com.mortals.xhx.module.attendance.dao.ibatis.AttendanceStatDaoImpl">
<select id="getListExt" parameterType="com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery" resultMap="AttendanceStatEntity-Map">
SELECT * FROM (
SELECT
s.staffId,
s.staffName,
s.deptId,
s.deptName,
s.phoneNumer,
ROUND(IFNULL(sum(s.goTimes),0)/count(1),4) as attendanceRate,
sum(s.goTimes) AS goTimes,
sum(s.morningTimes) AS morningTimes,
sum(s.afternoonTimes) AS afternoonTimes,
sum(s.backToUnit) AS backToUnit,
sum(s.onDutyLeave) AS onDutyLeave,
sum(s.outOfOffice) AS outOfOffice,
sum(s.shiftCompensation) AS shiftCompensation,
sum(s.physicalExamination) AS physicalExamination,
sum(s.quarantine) AS quarantine,
sum(s.businessTrip) AS businessTrip,
sum(s.publicHoliday) AS publicHoliday,
sum(s.sickLeave) AS sickLeave,
sum(s.funeralLeave) AS funeralLeave,
sum(s.marriageLeave) AS marriageLeave,
sum(s.childRearingLeave) AS childRearingLeave,
sum(s.maternityLeave) AS maternityLeave,
sum(s.transferBack) AS transferBack,
sum(s.homeLeave) AS homeLeave,
sum(s.breastfeedingLeaveDays) AS breastfeedingLeaveDays,
sum(s.personalLeave) AS personalLeave,
sum(s.compensatedLeaveDays) AS compensatedLeaveDays,
sum(s.annualLeaveDays) AS annualLeaveDays,
sum(s.menstrualLeaveDays) AS menstrualLeaveDays,
sum(s.paternityLeaveDays) AS paternityLeaveDays,
sum(s.absenteeismDays) AS absenteeismDays,
sum(s.otherDays) AS otherDays,
sum(s.nonCompliancePunch) AS nonCompliancePunch,
sum(s.surfingMobileTimes) AS surfingMobileTimes,
sum(s.overtimeTimes) AS overtimeTimes,
sum(s.vacancy) AS vacancy,
sum(s.nonStandardDressTimes) AS nonStandardDressTimes,
sum(s.unexcusedMeetingAbsence) AS unexcusedMeetingAbsence,
sum(s.earlyLeaveMeeting) AS earlyLeaveMeeting
FROM
mortals_xhx_attendance_stat s
WHERE
STR_TO_DATE(CONCAT(s.`year`,'-',s.`month`,'-',s.`day`),'%Y-%m-%d') <![CDATA[ >= ]]> STR_TO_DATE(#{summaryTimeStart},'%Y-%m-%d')
AND STR_TO_DATE(CONCAT(s.`year`,'-',s.`month`,'-',s.`day`),'%Y-%m-%d') <![CDATA[ <= ]]> STR_TO_DATE(#{summaryTimeEnd},'%Y-%m-%d')
GROUP BY
s.staffId,
s.staffName,
s.deptId,
s.deptName,
s.phoneNumer
) AS a
</select>
<select id="getListCountExt" parameterType="com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery" resultType="int">
SELECT count(1) FROM (
SELECT
s.staffId,
s.staffName,
s.deptId,
s.deptName,
s.phoneNumer,
ROUND(IFNULL(sum(s.goTimes),0)/count(1),4) as attendanceRate,
sum(s.goTimes) AS goTimes,
sum(s.morningTimes) AS morningTimes,
sum(s.afternoonTimes) AS afternoonTimes,
sum(s.backToUnit) AS backToUnit,
sum(s.onDutyLeave) AS onDutyLeave,
sum(s.outOfOffice) AS outOfOffice,
sum(s.shiftCompensation) AS shiftCompensation,
sum(s.physicalExamination) AS physicalExamination,
sum(s.quarantine) AS quarantine,
sum(s.businessTrip) AS businessTrip,
sum(s.publicHoliday) AS publicHoliday,
sum(s.sickLeave) AS sickLeave,
sum(s.funeralLeave) AS funeralLeave,
sum(s.marriageLeave) AS marriageLeave,
sum(s.childRearingLeave) AS childRearingLeave,
sum(s.maternityLeave) AS maternityLeave,
sum(s.transferBack) AS transferBack,
sum(s.homeLeave) AS homeLeave,
sum(s.breastfeedingLeaveDays) AS breastfeedingLeaveDays,
sum(s.personalLeave) AS personalLeave,
sum(s.compensatedLeaveDays) AS compensatedLeaveDays,
sum(s.annualLeaveDays) AS annualLeaveDays,
sum(s.menstrualLeaveDays) AS menstrualLeaveDays,
sum(s.paternityLeaveDays) AS paternityLeaveDays,
sum(s.absenteeismDays) AS absenteeismDays,
sum(s.otherDays) AS otherDays,
sum(s.nonCompliancePunch) AS nonCompliancePunch,
sum(s.surfingMobileTimes) AS surfingMobileTimes,
sum(s.overtimeTimes) AS overtimeTimes,
sum(s.vacancy) AS vacancy,
sum(s.nonStandardDressTimes) AS nonStandardDressTimes,
sum(s.unexcusedMeetingAbsence) AS unexcusedMeetingAbsence,
sum(s.earlyLeaveMeeting) AS earlyLeaveMeeting
FROM
mortals_xhx_attendance_stat s
WHERE
STR_TO_DATE(CONCAT(s.`year`,'-',s.`month`,'-',s.`day`),'%Y-%m-%d') <![CDATA[ >= ]]> STR_TO_DATE(#{summaryTimeStart},'%Y-%m-%d')
AND STR_TO_DATE(CONCAT(s.`year`,'-',s.`month`,'-',s.`day`),'%Y-%m-%d') <![CDATA[ <= ]]> STR_TO_DATE(#{summaryTimeEnd},'%Y-%m-%d')
GROUP BY
s.staffId,
s.staffName,
s.deptId,
s.deptName,
s.phoneNumer
) AS a
</select>
</mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment