3.17优化

This commit is contained in:
2025-03-17 11:45:27 +08:00
parent c0fc2dc99f
commit 69c3106e2d
7 changed files with 48 additions and 23 deletions

View File

@ -304,8 +304,8 @@
@ApiOperation("【考勤打卡】【打卡日历】 打卡日历记录")
//@PreAuthorize("@ss.hasPermi('wgzApp:user:userPunchTheCalendarRecord')")
@GetMapping("/WgzAppUserPunchTheCalendarRecord")
public AjaxResult<WgzAppPunchTheCalendarRecordRes> userPunchTheCalendarRecord() {
return AjaxResult.success(iWgzAttendanceService.userPunchTheCalendarRecord());
public AjaxResult<WgzAppPunchTheCalendarRecordRes> userPunchTheCalendarRecord(@Validated WgzAppUserPunchTheCalendarRecordReq req) {
return AjaxResult.success(iWgzAttendanceService.userPunchTheCalendarRecord(req));
}
/**

View File

@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDate;
@ -21,5 +22,6 @@ public class WgzAppDailyRecordReq extends PageReq {
private String types;
@ApiModelProperty(value = "日期(格式:年-月-日)")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate rq;
}

View File

@ -0,0 +1,20 @@
package com.ruoyi.wgz.bo.req;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
@Data
@NoArgsConstructor
@Accessors(chain = true)
@ApiModel("务工者APP-打卡日历请求对象")
public class WgzAppUserPunchTheCalendarRecordReq implements Serializable {
@ApiModelProperty("年月日期2025-02")
@NotBlank(message = "年月不能为空")
private String yearMonth;
}

View File

@ -10,6 +10,7 @@ import com.ruoyi.common.core.mybatisplus.core.IServicePlus;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.wgz.bo.WgzAttendanceQueryBo;
import com.ruoyi.wgz.bo.req.WgzAppSubmitTheClockReq;
import com.ruoyi.wgz.bo.req.WgzAppUserPunchTheCalendarRecordReq;
import com.ruoyi.wgz.bo.res.WgzAppCardReplacementApplicationRes;
import com.ruoyi.wgz.bo.res.WgzAppPunchTheCalendarRecordRes;
import com.ruoyi.wgz.bo.res.WgzAppUserClockingConditionRes;
@ -86,7 +87,7 @@ public interface IWgzAttendanceService extends IServicePlus<WgzAttendance> {
/**
* 打卡日历记录
*/
WgzAppPunchTheCalendarRecordRes userPunchTheCalendarRecord();
WgzAppPunchTheCalendarRecordRes userPunchTheCalendarRecord(@Validated WgzAppUserPunchTheCalendarRecordReq req);
/**
* 根据id查询具体的打卡详情

View File

@ -25,6 +25,7 @@ import com.ruoyi.fbs.domain.FbsProjectTask;
import com.ruoyi.fbs.service.IFbsProjectTaskService;
import com.ruoyi.wgz.bo.WgzAttendanceQueryBo;
import com.ruoyi.wgz.bo.req.WgzAppSubmitTheClockReq;
import com.ruoyi.wgz.bo.req.WgzAppUserPunchTheCalendarRecordReq;
import com.ruoyi.wgz.bo.res.WgzAppCardReplacementApplicationRes;
import com.ruoyi.wgz.bo.res.WgzAppPunchTheCalendarRecordRes;
import com.ruoyi.wgz.bo.res.WgzAppUserClockingConditionRes;
@ -40,12 +41,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import java.text.DecimalFormat;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
@ -295,11 +294,13 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
}
@Override
public WgzAppPunchTheCalendarRecordRes userPunchTheCalendarRecord() {
public WgzAppPunchTheCalendarRecordRes userPunchTheCalendarRecord(WgzAppUserPunchTheCalendarRecordReq req) {
Long appUserId = SecurityUtils.getAppUserId();
BgtProjectRecruitApply by = iBgtProjectRecruitApplyService.selectByUserIdProjectRecruitApplyId(appUserId);
//1、获取当月的所有日期
LocalDate currentDate = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
YearMonth yearMonth = YearMonth.parse(req.getYearMonth(), formatter);
LocalDate currentDate = yearMonth.atDay(1);
LocalDate firstDayOfMonth = currentDate.with(TemporalAdjusters.firstDayOfMonth());
LocalDate lastDayOfMonth = currentDate.with(TemporalAdjusters.lastDayOfMonth());
List<LocalDate> dates = new ArrayList<>();
@ -308,35 +309,35 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
dates.add(tempDate);
tempDate = tempDate.plusDays(1);
}
String format = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM"));
//2、获取当前人、当前工地、当前月的所有考勤记录
LambdaQueryWrapper<WgzAttendance> apply = new LambdaQueryWrapper<WgzAttendance>().
eq(WgzAttendance::getUserId, appUserId).
eq(WgzAttendance::getRecruitId, by.getRecruitId()).
apply("DATE_FORMAT(date, '%Y-%m') = {0}", format);
apply("DATE_FORMAT(date, '%Y-%m') = {0}", req.getYearMonth());
List<WgzAttendance> wgzAttendances = baseMapper.selectList(apply);
//3、组装返回数据
Map<LocalDate, WgzAppPunchTheCalendarRecordTwo> mp = new HashMap<>();
Map<LocalDate, WgzAppPunchTheCalendarRecordTwo> mp = new LinkedHashMap <>();
for (LocalDate date : dates) {
for (WgzAttendance wa : wgzAttendances) {
WgzAppPunchTheCalendarRecordTwo two = new WgzAppPunchTheCalendarRecordTwo().setId(wa.getId());
LocalDate clockDate = wa.getDate();
if (clockDate.equals(date)) {
//上班
if (wa.getClockInTime() != null || wa.getMissedIn()== 1) {
if (wa.getClockInTime() != null || wa.getMissedIn() == 1 || wa.getLeaveMarkId() != 0) {
two.setNum(1);
two.setSb(sbOrXb(wa, 1));
}
//下班
if (wa.getClockOutTime() != null || wa.getMissedOut()== 1) {
if (wa.getClockOutTime() != null || wa.getMissedOut()== 1 || wa.getLeaveMarkId() != 0) {
two.setNum(2);
if (wa.getClockInTime() != null && wa.getClockOutTime() != null ) {
two.setManHour(calculateWorkingHours(wa.getClockInTime(), wa.getClockOutTime()));
}
two.setXb(sbOrXb(wa, 2));
}
mp.put(date, two);
break;
}
mp.put(date, two);
}
}
return new WgzAppPunchTheCalendarRecordRes().setMp(mp);

View File

@ -170,7 +170,6 @@ public class WgzDailyClockServiceImpl extends ServicePlusImpl<WgzDailyClockMappe
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
YearMonth yearMonth = YearMonth.parse(req.getYearMonth(), formatter);
LocalDate currentDate = yearMonth.atDay(1);
LocalDate firstDayOfMonth = currentDate.with(TemporalAdjusters.firstDayOfMonth());
LocalDate lastDayOfMonth = currentDate.with(TemporalAdjusters.lastDayOfMonth());
List<LocalDate> dates = new ArrayList<>();
@ -186,24 +185,24 @@ public class WgzDailyClockServiceImpl extends ServicePlusImpl<WgzDailyClockMappe
//3、查看当前人、当前项目、当前月是否有请假
Map<LocalDate, LocalDate> ll = iWgzLeaveService.selectByUserCancelLeave(req.getYearMonth());
//4、将获取的年月与数据库中的日期进行比对然后填充数据
Map<String, WgzAppAttachmentAcquisitionTwo> fh = new HashMap<>();
Map<String, WgzAppAttachmentAcquisitionTwo> fh = new LinkedHashMap<>();
dates.forEach(date -> {
wgzDailyClocks.forEach(wgzDailyClock -> {
for (WgzDailyClock wgzDailyClock : wgzDailyClocks) {
LocalDate clockDate = wgzDailyClock.getDilyTime().toLocalDate();
//两个时间一致就填充数据;如若有请假的日期需要将状态改为请假
if (clockDate.equals(date)) {
WgzAppAttachmentAcquisitionTwo wgzAppAttachmentAcquisitionTwo = new WgzAppAttachmentAcquisitionTwo().
setStatus("0").//正常上传日志
setId(wgzDailyClock.getId()).
setId(wgzDailyClock.getId()).
setDilyTime(wgzDailyClock.getDilyTime()).
setPnchOsition(wgzDailyClock.getPnchOsition());
if (ll.get(date) !=null && ll.get(date).equals(clockDate)) {
wgzAppAttachmentAcquisitionTwo.setStatus("2"); //全天请假
}
fh.put(date.toString(),wgzAppAttachmentAcquisitionTwo);
break;
}
});
}
});
//4、获取当前务工者的招工信息的主题及招工创建人的基本信息
BgtProjectRecruitApply by = iBgtProjectRecruitApplyService.selectByUserIdProjectRecruitApplyId(SecurityUtils.getAppUserId());

View File

@ -44,9 +44,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
LEFT JOIN wgz_user b ON (a.user_id = b.user_id and b.del_flag = 0)
WHERE
a.user_id = #{req.userId} and
DATE_FORMAT(dily_time, '%Y-%m-%d') = #{req.rq} and
<if test="req.rq!=null">
DATE_FORMAT(a.dily_time, '%Y-%m-%d') = #{req.rq} and
</if>
<if test="req.types != 2">
status = #{req.types} and
a.status = #{req.types} and
</if>
a.del_flag = 0
ORDER BY