优化
This commit is contained in:
@ -2,10 +2,14 @@ package com.ruoyi.web.controller.bgt;
|
|||||||
|
|
||||||
|
|
||||||
import com.ruoyi.bgt.domain.dto.BgtAttendanceDTO;
|
import com.ruoyi.bgt.domain.dto.BgtAttendanceDTO;
|
||||||
|
import com.ruoyi.bgt.domain.dto.BgtAttendanceDayDTO;
|
||||||
import com.ruoyi.bgt.domain.dto.BgtAttendanceDetailDTO;
|
import com.ruoyi.bgt.domain.dto.BgtAttendanceDetailDTO;
|
||||||
import com.ruoyi.bgt.domain.vo.BgtAttendanceDetailVO;
|
import com.ruoyi.bgt.domain.vo.BgtAttendanceDetailVO;
|
||||||
import com.ruoyi.bgt.domain.vo.BgtAttendanceVO;
|
import com.ruoyi.bgt.domain.vo.BgtAttendanceVO;
|
||||||
|
import com.ruoyi.bgt.domain.vo.BgtProjectRecruitApplyVO;
|
||||||
|
import com.ruoyi.bgt.service.IBgtProjectRecruitApplyService;
|
||||||
import com.ruoyi.common.core.domain.AjaxResult;
|
import com.ruoyi.common.core.domain.AjaxResult;
|
||||||
|
import com.ruoyi.common.core.page.TableDataInfo;
|
||||||
import com.ruoyi.wgz.service.IWgzAttendanceService;
|
import com.ruoyi.wgz.service.IWgzAttendanceService;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
@ -24,6 +28,9 @@ public class AppBgtAttendanceController {
|
|||||||
|
|
||||||
private final IWgzAttendanceService attendanceService;
|
private final IWgzAttendanceService attendanceService;
|
||||||
|
|
||||||
|
private final IBgtProjectRecruitApplyService iBgtProjectRecruitApplyService;
|
||||||
|
|
||||||
|
|
||||||
@ApiOperation("App包工头总体考勤情况")
|
@ApiOperation("App包工头总体考勤情况")
|
||||||
@GetMapping("attendance")
|
@GetMapping("attendance")
|
||||||
public AjaxResult<BgtAttendanceVO> attendanceDetail(@Validated BgtAttendanceDTO dto) {
|
public AjaxResult<BgtAttendanceVO> attendanceDetail(@Validated BgtAttendanceDTO dto) {
|
||||||
@ -36,5 +43,10 @@ public class AppBgtAttendanceController {
|
|||||||
return AjaxResult.success(attendanceService.bgtAttendanceDetail(dto));
|
return AjaxResult.success(attendanceService.bgtAttendanceDetail(dto));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiOperation("总体考勤情况-人员出勤情况")
|
||||||
|
@GetMapping("/todayAttendanceList")
|
||||||
|
public TableDataInfo<BgtProjectRecruitApplyVO> todayAttendanceList(@Validated BgtAttendanceDayDTO req) {
|
||||||
|
return iBgtProjectRecruitApplyService.dayAttendanceList(req);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package com.ruoyi.web.controller.bgt;
|
package com.ruoyi.web.controller.bgt;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.ruoyi.bgt.domain.BgtProjectRecruitApply;
|
import com.ruoyi.bgt.domain.BgtProjectRecruitApply;
|
||||||
import com.ruoyi.bgt.domain.dto.BgtAttendanceDayDTO;
|
|
||||||
import com.ruoyi.bgt.domain.dto.BgtProjectRecruitApplyConsentDTO;
|
import com.ruoyi.bgt.domain.dto.BgtProjectRecruitApplyConsentDTO;
|
||||||
import com.ruoyi.bgt.domain.dto.BgtProjectRecruitApplyQueryDTO;
|
import com.ruoyi.bgt.domain.dto.BgtProjectRecruitApplyQueryDTO;
|
||||||
import com.ruoyi.bgt.domain.dto.BgtScoreDTO;
|
import com.ruoyi.bgt.domain.dto.BgtScoreDTO;
|
||||||
@ -13,6 +13,7 @@ import com.ruoyi.common.core.controller.BaseController;
|
|||||||
import com.ruoyi.common.core.domain.AjaxResult;
|
import com.ruoyi.common.core.domain.AjaxResult;
|
||||||
import com.ruoyi.common.core.page.TableDataInfo;
|
import com.ruoyi.common.core.page.TableDataInfo;
|
||||||
import com.ruoyi.common.enums.BusinessType;
|
import com.ruoyi.common.enums.BusinessType;
|
||||||
|
import com.ruoyi.common.enums.RecruitApplyStatus;
|
||||||
import com.ruoyi.wgz.bo.req.WgzAppPersonalBasicInformationReq;
|
import com.ruoyi.wgz.bo.req.WgzAppPersonalBasicInformationReq;
|
||||||
import com.ruoyi.wgz.bo.res.WgzAppPersonalBasicInformationRes;
|
import com.ruoyi.wgz.bo.res.WgzAppPersonalBasicInformationRes;
|
||||||
import com.ruoyi.wgz.service.IWgzUserService;
|
import com.ruoyi.wgz.service.IWgzUserService;
|
||||||
@ -67,6 +68,19 @@ public class AppBgtProjectRecruitApplyController extends BaseController {
|
|||||||
return AjaxResult.success(wgzUserService.userPersonalBasicInformation(req));
|
return AjaxResult.success(wgzUserService.userPersonalBasicInformation(req));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiOperation("App务工者消息个人详情")
|
||||||
|
@GetMapping("/userMessageInfo")
|
||||||
|
public AjaxResult<WgzAppPersonalBasicInformationRes> wgzMessageInformation(Long userId,Long recruitId) {
|
||||||
|
WgzAppPersonalBasicInformationReq req = new WgzAppPersonalBasicInformationReq();
|
||||||
|
req.setUserId(userId);
|
||||||
|
WgzAppPersonalBasicInformationRes res = wgzUserService.userPersonalBasicInformation(req);
|
||||||
|
BgtProjectRecruitApply one = iBgtProjectRecruitApplyService.getOne(Wrappers.<BgtProjectRecruitApply>lambdaQuery()
|
||||||
|
.eq(BgtProjectRecruitApply::getUserId, userId)
|
||||||
|
.eq(BgtProjectRecruitApply::getRecruitId, recruitId));
|
||||||
|
res.setIsChoose(!one.getStatus().equals(RecruitApplyStatus.SIGN_UP.getCode()));
|
||||||
|
return AjaxResult.success(res);
|
||||||
|
}
|
||||||
|
|
||||||
@ApiOperation("App务工者招工报名")
|
@ApiOperation("App务工者招工报名")
|
||||||
@Log(title = "App务工者招工报名", businessType = BusinessType.INSERT)
|
@Log(title = "App务工者招工报名", businessType = BusinessType.INSERT)
|
||||||
@RepeatSubmit
|
@RepeatSubmit
|
||||||
@ -84,12 +98,6 @@ public class AppBgtProjectRecruitApplyController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ApiOperation("总体考勤情况-人员出勤情况")
|
|
||||||
@GetMapping("/todayAttendanceList")
|
|
||||||
public TableDataInfo<BgtProjectRecruitApplyVO> todayAttendanceList(@Validated BgtAttendanceDayDTO req) {
|
|
||||||
return iBgtProjectRecruitApplyService.dayAttendanceList(req);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@ApiOperation("App务工者退场")
|
@ApiOperation("App务工者退场")
|
||||||
@Log(title = "App务工者退场", businessType = BusinessType.UPDATE)
|
@Log(title = "App务工者退场", businessType = BusinessType.UPDATE)
|
||||||
|
@ -28,7 +28,7 @@ captcha:
|
|||||||
# 开发环境配置
|
# 开发环境配置
|
||||||
server:
|
server:
|
||||||
# 服务器的HTTP端口,默认为8080
|
# 服务器的HTTP端口,默认为8080
|
||||||
port: 9098
|
port: 9099
|
||||||
servlet:
|
servlet:
|
||||||
# 应用的访问路径
|
# 应用的访问路径
|
||||||
context-path: /ruoyi
|
context-path: /ruoyi
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package com.ruoyi.common.enums;
|
package com.ruoyi.common.enums;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户状态
|
* 招工申请状态
|
||||||
*
|
*
|
||||||
* @author ruoyi
|
* @author ruoyi
|
||||||
*/
|
*/
|
||||||
|
@ -0,0 +1,33 @@
|
|||||||
|
package com.ruoyi.common.enums;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 招工状态
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
*/
|
||||||
|
public enum RecruitStatus
|
||||||
|
{
|
||||||
|
PROGRESS("1", "进行中"),
|
||||||
|
FULL("2", "已招满"),
|
||||||
|
OVERDUE("3", "已过期"),
|
||||||
|
;
|
||||||
|
|
||||||
|
private final String code;
|
||||||
|
private final String info;
|
||||||
|
|
||||||
|
RecruitStatus(String code, String info)
|
||||||
|
{
|
||||||
|
this.code = code;
|
||||||
|
this.info = info;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCode()
|
||||||
|
{
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getInfo()
|
||||||
|
{
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
}
|
@ -1,11 +1,14 @@
|
|||||||
package com.ruoyi.bgt.domain.dto;
|
package com.ruoyi.bgt.domain.dto;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import com.ruoyi.common.core.domain.BaseEntity;
|
import com.ruoyi.common.core.domain.BaseEntity;
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@ -32,4 +35,15 @@ public class BgtProjectRecruitApplyQueryDTO extends BaseEntity {
|
|||||||
@ApiModelProperty("务工者名字")
|
@ApiModelProperty("务工者名字")
|
||||||
private String username;
|
private String username;
|
||||||
|
|
||||||
|
@ApiModelProperty("日期")
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||||
|
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||||
|
private LocalDate date;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "开始日期",hidden = true)
|
||||||
|
private LocalDate beginDate;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "开始日期",hidden = true)
|
||||||
|
private LocalDate endDate;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -37,5 +37,11 @@ public class BgtAttendanceCountVO implements Serializable {
|
|||||||
@ApiModelProperty("缺勤人数")
|
@ApiModelProperty("缺勤人数")
|
||||||
private Integer absenceDutyNum;
|
private Integer absenceDutyNum;
|
||||||
|
|
||||||
|
@ApiModelProperty("到岗率总和")
|
||||||
|
private Integer rateSum;
|
||||||
|
|
||||||
|
@ApiModelProperty("到岗率天数")
|
||||||
|
private Integer rateDay;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,9 @@ public class BgtMessageVO implements Serializable {
|
|||||||
@ApiModelProperty("表ID")
|
@ApiModelProperty("表ID")
|
||||||
private Long tableId;
|
private Long tableId;
|
||||||
|
|
||||||
|
@ApiModelProperty("发送人")
|
||||||
|
private Long senderId;
|
||||||
|
|
||||||
@ApiModelProperty("标题")
|
@ApiModelProperty("标题")
|
||||||
private String headline;
|
private String headline;
|
||||||
|
|
||||||
|
@ -60,6 +60,9 @@ public class BgtProjectRecruitApplyVO implements Serializable {
|
|||||||
@ApiModelProperty("招工主题")
|
@ApiModelProperty("招工主题")
|
||||||
private String recruitName;
|
private String recruitName;
|
||||||
|
|
||||||
|
@ApiModelProperty("任务Id")
|
||||||
|
private Long taskId;
|
||||||
|
|
||||||
@ApiModelProperty("任务名")
|
@ApiModelProperty("任务名")
|
||||||
private String taskName;
|
private String taskName;
|
||||||
|
|
||||||
|
@ -115,4 +115,7 @@ public class BgtProjectRecruitDetailVO implements Serializable {
|
|||||||
|
|
||||||
@ApiModelProperty("同意人数")
|
@ApiModelProperty("同意人数")
|
||||||
private Integer passNum;
|
private Integer passNum;
|
||||||
|
|
||||||
|
@ApiModelProperty("招工状态(1-进行中,2-已招满,3-已过期)")
|
||||||
|
private String status;
|
||||||
}
|
}
|
||||||
|
@ -55,6 +55,9 @@ public class BgtProjectRecruitVO implements Serializable {
|
|||||||
@ApiModelProperty("工种")
|
@ApiModelProperty("工种")
|
||||||
private String typeOfWork;
|
private String typeOfWork;
|
||||||
|
|
||||||
|
@ApiModelProperty("招工状态(1-进行中,2-已招满,3-已过期)")
|
||||||
|
private String status;
|
||||||
|
|
||||||
@ApiModelProperty("申请者列表")
|
@ApiModelProperty("申请者列表")
|
||||||
List<BgtProjectRecruitApplyVO> applyList;
|
List<BgtProjectRecruitApplyVO> applyList;
|
||||||
|
|
||||||
|
@ -129,4 +129,7 @@ public interface IBgtProjectRecruitApplyService extends IServicePlus<BgtProjectR
|
|||||||
* 项目详情·确认|拒绝报名
|
* 项目详情·确认|拒绝报名
|
||||||
*/
|
*/
|
||||||
Boolean userConfirmRegistration(@Validated WgzAppConfirmRegistrationReq req);
|
Boolean userConfirmRegistration(@Validated WgzAppConfirmRegistrationReq req);
|
||||||
|
|
||||||
|
|
||||||
|
BgtProjectRecruitApply getOne(Long recruitId,Long userId);
|
||||||
}
|
}
|
||||||
|
@ -170,6 +170,7 @@ public class BgtMessageServiceImpl extends ServicePlusImpl<BgtMessageMapper, Bgt
|
|||||||
public TableDataInfo<BgtMessageVO> queryMyPageList(BgtMessageMyListDTO dto) {
|
public TableDataInfo<BgtMessageVO> queryMyPageList(BgtMessageMyListDTO dto) {
|
||||||
LambdaQueryWrapper<BgtMessage> wrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<BgtMessage> wrapper = new LambdaQueryWrapper<>();
|
||||||
wrapper.eq(BgtMessage::getRecipientId, SecurityUtils.getAppUserId());
|
wrapper.eq(BgtMessage::getRecipientId, SecurityUtils.getAppUserId());
|
||||||
|
wrapper.orderByDesc(BgtMessage::getCreateTime);
|
||||||
Page<BgtMessage> result = page(PageUtils.buildPage(), wrapper);
|
Page<BgtMessage> result = page(PageUtils.buildPage(), wrapper);
|
||||||
Page<BgtMessageVO> bgtMessageVOPage = new Page<>();
|
Page<BgtMessageVO> bgtMessageVOPage = new Page<>();
|
||||||
bgtMessageVOPage.setTotal(result.getTotal());
|
bgtMessageVOPage.setTotal(result.getTotal());
|
||||||
|
@ -48,6 +48,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
|
import java.time.temporal.TemporalAdjusters;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static com.ruoyi.common.constants.BgtMessageConstant.*;
|
import static com.ruoyi.common.constants.BgtMessageConstant.*;
|
||||||
@ -145,7 +146,11 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl<BgtProjec
|
|||||||
dto.getRecruitIds().addAll(recruitIdsByTaskId);
|
dto.getRecruitIds().addAll(recruitIdsByTaskId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(dto.getDate()!=null){
|
||||||
|
LocalDate date = dto.getDate();
|
||||||
|
dto.setBeginDate(date.with(TemporalAdjusters.firstDayOfMonth()));
|
||||||
|
dto.setEndDate(date.with(TemporalAdjusters.lastDayOfMonth()));
|
||||||
|
}
|
||||||
Page<BgtProjectRecruitApplyQueryDTO> queryDTOPage = new Page<>();
|
Page<BgtProjectRecruitApplyQueryDTO> queryDTOPage = new Page<>();
|
||||||
queryDTOPage.setCurrent(dto.getPageNum());
|
queryDTOPage.setCurrent(dto.getPageNum());
|
||||||
queryDTOPage.setSize(dto.getPageSize());
|
queryDTOPage.setSize(dto.getPageSize());
|
||||||
@ -179,6 +184,12 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl<BgtProjec
|
|||||||
if (CollectionUtil.isNotEmpty(list)) {
|
if (CollectionUtil.isNotEmpty(list)) {
|
||||||
throw new BaseException("该务工者已进入其他工地");
|
throw new BaseException("该务工者已进入其他工地");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BgtProjectRecruit recruit = iBgtProjectRecruitService.getById(recruitApply.getRecruitId());
|
||||||
|
if(LocalDate.now().isAfter(recruit.getRecruitEndTime())){
|
||||||
|
throw new BaseException("该岗位已过期");
|
||||||
|
}
|
||||||
|
|
||||||
recruitApply.setEntryTime(dto.getEntryTime());
|
recruitApply.setEntryTime(dto.getEntryTime());
|
||||||
recruitApply.setStatus(RecruitApplyStatus.BGT_PASS.getCode());
|
recruitApply.setStatus(RecruitApplyStatus.BGT_PASS.getCode());
|
||||||
dto.getEntryMaterials().addAll(dto.getInsurances());
|
dto.getEntryMaterials().addAll(dto.getInsurances());
|
||||||
@ -411,6 +422,9 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl<BgtProjec
|
|||||||
double rawNewScore = wgzScoreRecords.stream()
|
double rawNewScore = wgzScoreRecords.stream()
|
||||||
.mapToDouble(WgzScoreRecord::getScore)
|
.mapToDouble(WgzScoreRecord::getScore)
|
||||||
.sum();
|
.sum();
|
||||||
|
if(!wgzScoreRecords.isEmpty()){
|
||||||
|
rawNewScore = rawNewScore/wgzScoreRecords.size();
|
||||||
|
}
|
||||||
// 使用 DecimalFormat 格式化结果
|
// 使用 DecimalFormat 格式化结果
|
||||||
DecimalFormat df = new DecimalFormat("#.0");
|
DecimalFormat df = new DecimalFormat("#.0");
|
||||||
String formatted = df.format(rawNewScore);
|
String formatted = df.format(rawNewScore);
|
||||||
@ -545,4 +559,11 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl<BgtProjec
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BgtProjectRecruitApply getOne(Long recruitId, Long userId) {
|
||||||
|
List<BgtProjectRecruitApply> list = baseMapper.selectList(Wrappers.<BgtProjectRecruitApply>lambdaQuery().eq(BgtProjectRecruitApply::getRecruitId, recruitId)
|
||||||
|
.eq(BgtProjectRecruitApply::getUserId, userId));
|
||||||
|
return list.get(0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -103,9 +103,8 @@ public class BgtWageApplicationServiceImpl extends ServicePlusImpl<BgtWageApplic
|
|||||||
.setSubheading(map.get(SUBHEADING))
|
.setSubheading(map.get(SUBHEADING))
|
||||||
.setTableId(task.getId())
|
.setTableId(task.getId())
|
||||||
.setTableName(SqlHelper.table(FbsProjectTask.class).getTableName())
|
.setTableName(SqlHelper.table(FbsProjectTask.class).getTableName())
|
||||||
.setMessageLargeType(BGT_LARGE_TASK);
|
.setMessageLargeType(BGT_LARGE_SETTLEMENT);
|
||||||
bgtMessageService.sendAMessage(bgtMessage);
|
bgtMessageService.sendAMessage(bgtMessage);
|
||||||
|
|
||||||
return save;
|
return save;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,6 +3,8 @@ package com.ruoyi.common.util;
|
|||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.ruoyi.bgt.domain.vo.BgtAttendanceCountVO;
|
import com.ruoyi.bgt.domain.vo.BgtAttendanceCountVO;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.RoundingMode;
|
||||||
import java.time.*;
|
import java.time.*;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@ -24,7 +26,7 @@ public class DataUtil {
|
|||||||
while (!currentDate.isAfter(endDate)) {
|
while (!currentDate.isAfter(endDate)) {
|
||||||
if (!existingDates.contains(currentDate)) {
|
if (!existingDates.contains(currentDate)) {
|
||||||
// 如果当前日期不在已有日期集合中,创建一个新的 BgtAttendanceCountVO 对象并添加到结果列表中
|
// 如果当前日期不在已有日期集合中,创建一个新的 BgtAttendanceCountVO 对象并添加到结果列表中
|
||||||
filledList.add(new BgtAttendanceCountVO(0,0,currentDate,0));
|
filledList.add(new BgtAttendanceCountVO(0,0,currentDate,0,0,0));
|
||||||
}
|
}
|
||||||
// 日期递增一天
|
// 日期递增一天
|
||||||
currentDate = currentDate.plusDays(1);
|
currentDate = currentDate.plusDays(1);
|
||||||
@ -50,11 +52,21 @@ public class DataUtil {
|
|||||||
if (monthMap.containsKey(yearMonth)) {
|
if (monthMap.containsKey(yearMonth)) {
|
||||||
BgtAttendanceCountVO existingVO = monthMap.get(yearMonth);
|
BgtAttendanceCountVO existingVO = monthMap.get(yearMonth);
|
||||||
existingVO.setReportToDutyNum(existingVO.getReportToDutyNum() + countVO.getReportToDutyNum());
|
existingVO.setReportToDutyNum(existingVO.getReportToDutyNum() + countVO.getReportToDutyNum());
|
||||||
existingVO.setTotalNum(existingVO.getTotalNum()>countVO.getTotalNum()?existingVO.getTotalNum():countVO.getTotalNum());
|
|
||||||
existingVO.setAbsenceDutyNum(existingVO.getAbsenceDutyNum() + countVO.getTotalNum()-countVO.getReportToDutyNum());
|
existingVO.setAbsenceDutyNum(existingVO.getAbsenceDutyNum() + countVO.getTotalNum()-countVO.getReportToDutyNum());
|
||||||
|
int rate = new BigDecimal(countVO.getReportToDutyNum()).divide(new BigDecimal(countVO.getTotalNum()), 2, RoundingMode.HALF_UP)
|
||||||
|
.multiply(new BigDecimal(100)).intValue();
|
||||||
|
existingVO.setRateSum(existingVO.getRateSum()+rate);
|
||||||
|
existingVO.setRateDay(existingVO.getRateDay()+1);
|
||||||
} else {
|
} else {
|
||||||
// 如果该月份不在 map 中,则创建一个新的 BgtAttendanceCountVO 对象
|
// 如果该月份不在 map 中,则创建一个新的 BgtAttendanceCountVO 对象
|
||||||
BgtAttendanceCountVO newVO = new BgtAttendanceCountVO(countVO.getReportToDutyNum(), countVO.getTotalNum(), date.withDayOfMonth(1),0);
|
BgtAttendanceCountVO newVO = new BgtAttendanceCountVO(countVO.getReportToDutyNum(), countVO.getTotalNum(), date.withDayOfMonth(1),0,0,0);
|
||||||
|
if(countVO.getTotalNum()>0){
|
||||||
|
newVO.setAbsenceDutyNum(countVO.getTotalNum()-countVO.getReportToDutyNum());
|
||||||
|
int rate = new BigDecimal(countVO.getReportToDutyNum()).divide(new BigDecimal(countVO.getTotalNum()), 2, RoundingMode.HALF_UP)
|
||||||
|
.multiply(new BigDecimal(100)).intValue();
|
||||||
|
newVO.setRateSum(rate);
|
||||||
|
newVO.setRateDay(1);
|
||||||
|
}
|
||||||
monthMap.put(yearMonth, newVO);
|
monthMap.put(yearMonth, newVO);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -73,7 +85,7 @@ public class DataUtil {
|
|||||||
result.add(monthMap.get(currentMonth));
|
result.add(monthMap.get(currentMonth));
|
||||||
} else {
|
} else {
|
||||||
// 如果该月份没有统计数据,则创建一个新的 BgtAttendanceCountVO 对象,将到岗人数和总人数都设置为 0
|
// 如果该月份没有统计数据,则创建一个新的 BgtAttendanceCountVO 对象,将到岗人数和总人数都设置为 0
|
||||||
BgtAttendanceCountVO emptyVO = new BgtAttendanceCountVO(0, 0, currentMonth.atDay(1),0);
|
BgtAttendanceCountVO emptyVO = new BgtAttendanceCountVO(0, 0, currentMonth.atDay(1),0,0,0);
|
||||||
result.add(emptyVO);
|
result.add(emptyVO);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import com.ruoyi.bgt.service.IBgtProjectRecruitApplyService;
|
|||||||
import com.ruoyi.bgt.service.IBgtProjectRecruitService;
|
import com.ruoyi.bgt.service.IBgtProjectRecruitService;
|
||||||
import com.ruoyi.common.constants.WgzAndBgtMessageConstant;
|
import com.ruoyi.common.constants.WgzAndBgtMessageConstant;
|
||||||
import com.ruoyi.common.enums.RecruitApplyStatus;
|
import com.ruoyi.common.enums.RecruitApplyStatus;
|
||||||
|
import com.ruoyi.common.enums.RecruitStatus;
|
||||||
import com.ruoyi.fbs.domain.FbsProjectTask;
|
import com.ruoyi.fbs.domain.FbsProjectTask;
|
||||||
import com.ruoyi.fbs.service.IFbsProjectTaskService;
|
import com.ruoyi.fbs.service.IFbsProjectTaskService;
|
||||||
import com.ruoyi.wgz.domain.WgzAttendance;
|
import com.ruoyi.wgz.domain.WgzAttendance;
|
||||||
@ -77,11 +78,13 @@ public class BusinessTask
|
|||||||
.lt(BgtProjectRecruit::getRecruitEndTime, LocalDate.now()));
|
.lt(BgtProjectRecruit::getRecruitEndTime, LocalDate.now()));
|
||||||
if(CollectionUtil.isNotEmpty(recruitList)){
|
if(CollectionUtil.isNotEmpty(recruitList)){
|
||||||
List<Long> recruitIds = recruitList.stream().map(BgtProjectRecruit::getId).collect(Collectors.toList());
|
List<Long> recruitIds = recruitList.stream().map(BgtProjectRecruit::getId).collect(Collectors.toList());
|
||||||
recruitApplyService.<BgtProjectRecruitApply>lambdaUpdate()
|
recruitApplyService.lambdaUpdate()
|
||||||
.in(BgtProjectRecruitApply::getRecruitId, recruitIds)
|
.in(BgtProjectRecruitApply::getRecruitId, recruitIds)
|
||||||
.in(BgtProjectRecruitApply::getStatus,status)
|
.in(BgtProjectRecruitApply::getStatus,status)
|
||||||
.set(BgtProjectRecruitApply::getStatus,RecruitApplyStatus.BGT_REFUSE.getCode())
|
.set(BgtProjectRecruitApply::getStatus,RecruitApplyStatus.BGT_REFUSE.getCode())
|
||||||
.update();
|
.update();
|
||||||
|
recruitService.lambdaUpdate().in(BgtProjectRecruit::getId, recruitIds)
|
||||||
|
.set(BgtProjectRecruit::getStatus,RecruitStatus.OVERDUE.getCode()).update();
|
||||||
}
|
}
|
||||||
Console.log("招工拒绝任务结束,此次拒绝任务个数:"+recruitList.size());
|
Console.log("招工拒绝任务结束,此次拒绝任务个数:"+recruitList.size());
|
||||||
}
|
}
|
||||||
@ -92,7 +95,7 @@ public class BusinessTask
|
|||||||
public void entry()
|
public void entry()
|
||||||
{
|
{
|
||||||
Console.log("开始招工进场任务");
|
Console.log("开始招工进场任务");
|
||||||
recruitApplyService.<BgtProjectRecruitApply>lambdaUpdate()
|
recruitApplyService.lambdaUpdate()
|
||||||
.eq(BgtProjectRecruitApply::getEntryTime, LocalDate.now())
|
.eq(BgtProjectRecruitApply::getEntryTime, LocalDate.now())
|
||||||
.eq(BgtProjectRecruitApply::getStatus,RecruitApplyStatus.WGZ_PASS.getCode())
|
.eq(BgtProjectRecruitApply::getStatus,RecruitApplyStatus.WGZ_PASS.getCode())
|
||||||
.set(BgtProjectRecruitApply::getStatus,RecruitApplyStatus.BGT_REFUSE.getCode())
|
.set(BgtProjectRecruitApply::getStatus,RecruitApplyStatus.BGT_REFUSE.getCode())
|
||||||
|
@ -75,4 +75,7 @@ public class WgzAppPersonalBasicInformationRes implements Serializable {
|
|||||||
|
|
||||||
@ApiModelProperty("工种名")
|
@ApiModelProperty("工种名")
|
||||||
private String typeOfWorkName;
|
private String typeOfWorkName;
|
||||||
|
|
||||||
|
@ApiModelProperty("是否被选择")
|
||||||
|
private Boolean isChoose;
|
||||||
}
|
}
|
||||||
|
@ -23,4 +23,9 @@ public interface WgzAttendanceMapper extends BaseMapperPlus<WgzAttendance> {
|
|||||||
|
|
||||||
List<BgtAttendanceCountVO> countByTaskId(@Param("taskId") Long taskId, @Param("beginDate")LocalDate beginDate
|
List<BgtAttendanceCountVO> countByTaskId(@Param("taskId") Long taskId, @Param("beginDate")LocalDate beginDate
|
||||||
, @Param("endDate")LocalDate endDate);
|
, @Param("endDate")LocalDate endDate);
|
||||||
|
|
||||||
|
Integer dayTotalNum(@Param("taskId") Long taskId, @Param("date")LocalDate date);
|
||||||
|
|
||||||
|
Integer monthTotalNum(@Param("taskId") Long taskId, @Param("beginDate")LocalDate beginDate
|
||||||
|
, @Param("endDate")LocalDate endDate);
|
||||||
}
|
}
|
||||||
|
@ -106,7 +106,12 @@ public interface IWgzAttendanceService extends IServicePlus<WgzAttendance> {
|
|||||||
*/
|
*/
|
||||||
List<BgtAttendanceCountVO> countByTaskId(Long taskId, LocalDate beginDate, LocalDate endDate);
|
List<BgtAttendanceCountVO> countByTaskId(Long taskId, LocalDate beginDate, LocalDate endDate);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 统计某天应打卡人数
|
||||||
|
*/
|
||||||
|
Integer dayTotalNum(Long taskId,LocalDate date);
|
||||||
|
|
||||||
|
Integer monthTotalNum(Long taskId,LocalDate beginDate, LocalDate endDate);
|
||||||
/**
|
/**
|
||||||
* 总体考勤情况
|
* 总体考勤情况
|
||||||
*/
|
*/
|
||||||
|
@ -45,7 +45,6 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.time.*;
|
import java.time.*;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.time.temporal.TemporalAdjusters;
|
import java.time.temporal.TemporalAdjusters;
|
||||||
@ -63,7 +62,7 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
|
|||||||
|
|
||||||
//上班打卡状态 0上 1下
|
//上班打卡状态 0上 1下
|
||||||
public static final String Clocking = "0";
|
public static final String Clocking = "0";
|
||||||
public static final String OffDuty= "1";
|
public static final String OffDuty = "1";
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private IBgtProjectRecruitApplyService iBgtProjectRecruitApplyService;
|
private IBgtProjectRecruitApplyService iBgtProjectRecruitApplyService;
|
||||||
@ -82,7 +81,7 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public WgzAttendance queryById(Long id){
|
public WgzAttendance queryById(Long id) {
|
||||||
return getById(id);
|
return getById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,13 +136,13 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
|
|||||||
*
|
*
|
||||||
* @param entity 实体类数据
|
* @param entity 实体类数据
|
||||||
*/
|
*/
|
||||||
private void validEntityBeforeSave(WgzAttendance entity){
|
private void validEntityBeforeSave(WgzAttendance entity) {
|
||||||
//TODO 做一些数据校验,如唯一约束
|
//TODO 做一些数据校验,如唯一约束
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||||
if(isValid){
|
if (isValid) {
|
||||||
//TODO 做一些业务上的校验,判断是否需要校验
|
//TODO 做一些业务上的校验,判断是否需要校验
|
||||||
}
|
}
|
||||||
return removeByIds(ids);
|
return removeByIds(ids);
|
||||||
@ -177,8 +176,8 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
|
|||||||
//5、查看当前人、当前工地、当天的打卡记录
|
//5、查看当前人、当前工地、当天的打卡记录
|
||||||
String formattedDate = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
String formattedDate = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
||||||
WgzAttendance we = publicFindByUserIdWait(appUserId, by.getRecruitId(), formattedDate);
|
WgzAttendance we = publicFindByUserIdWait(appUserId, by.getRecruitId(), formattedDate);
|
||||||
if (we !=null && we.getLeaveMarkId() != null && we.getLeaveMarkId()!= 0) {
|
if (we != null && we.getLeaveMarkId() != null && we.getLeaveMarkId() != 0) {
|
||||||
throw new RuntimeException("您有已通过的请假申请,请假时间为:"+formattedDate);
|
throw new RuntimeException("您有已通过的请假申请,请假时间为:" + formattedDate);
|
||||||
}
|
}
|
||||||
//6、组装完整的打卡信息
|
//6、组装完整的打卡信息
|
||||||
WgzAttendance wgzAttendance = new WgzAttendance().
|
WgzAttendance wgzAttendance = new WgzAttendance().
|
||||||
@ -188,10 +187,10 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
|
|||||||
setDate(LocalDate.now());
|
setDate(LocalDate.now());
|
||||||
LocalDateTime now = LocalDateTime.now(); //当前完整年月日时分秒
|
LocalDateTime now = LocalDateTime.now(); //当前完整年月日时分秒
|
||||||
LocalTime localTime = now.toLocalTime(); //获取时分秒
|
LocalTime localTime = now.toLocalTime(); //获取时分秒
|
||||||
if (we !=null) {
|
if (we != null) {
|
||||||
//获取上次打卡时间与这次打卡时间的间隔是否超过3分钟
|
//获取上次打卡时间与这次打卡时间的间隔是否超过3分钟
|
||||||
boolean flag = isMinutesDifferenceGreaterThanThree(we.getClockInTime(), now);
|
boolean flag = isMinutesDifferenceGreaterThanThree(we.getClockInTime(), now);
|
||||||
if (!flag){
|
if (!flag) {
|
||||||
throw new RuntimeException("打卡时间间隔不能少于3分钟");
|
throw new RuntimeException("打卡时间间隔不能少于3分钟");
|
||||||
}
|
}
|
||||||
wgzAttendance.setClockOutTime(now);
|
wgzAttendance.setClockOutTime(now);
|
||||||
@ -201,11 +200,11 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
|
|||||||
wgzAttendance.setId(we.getId());
|
wgzAttendance.setId(we.getId());
|
||||||
wgzAttendance.setEarlyLeave(1); //早退
|
wgzAttendance.setEarlyLeave(1); //早退
|
||||||
wgzAttendance.setEarlyLeaveTime(now);
|
wgzAttendance.setEarlyLeaveTime(now);
|
||||||
wgzAttendance.setExceptionType(exceptionType+"2,");
|
wgzAttendance.setExceptionType(exceptionType + "2,");
|
||||||
wgzAttendance.setPnchOsitionX(req.getPnchOsition());
|
wgzAttendance.setPnchOsitionX(req.getPnchOsition());
|
||||||
}
|
}
|
||||||
return baseMapper.updateById(wgzAttendance) > 0;
|
return baseMapper.updateById(wgzAttendance) > 0;
|
||||||
}else{
|
} else {
|
||||||
wgzAttendance.setClockInTime(now);
|
wgzAttendance.setClockInTime(now);
|
||||||
LocalTime beginWorkTime = appById.getBeginWorkTime(); //上班
|
LocalTime beginWorkTime = appById.getBeginWorkTime(); //上班
|
||||||
if (!localTime.isBefore(beginWorkTime)) {
|
if (!localTime.isBefore(beginWorkTime)) {
|
||||||
@ -220,6 +219,7 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 判断两个 LocalDateTime 之间的差值分钟数是否超过 3
|
* 判断两个 LocalDateTime 之间的差值分钟数是否超过 3
|
||||||
|
*
|
||||||
* @param startTime 开始时间
|
* @param startTime 开始时间
|
||||||
* @param endTime 结束时间
|
* @param endTime 结束时间
|
||||||
* @return 如果差值分钟数超过 3 返回 true,否则返回 false
|
* @return 如果差值分钟数超过 3 返回 true,否则返回 false
|
||||||
@ -244,17 +244,17 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
|
|||||||
//2、获取今日用户打卡状态
|
//2、获取今日用户打卡状态
|
||||||
if (wgzAttendance == null) {
|
if (wgzAttendance == null) {
|
||||||
res.setClockingCondition(0); //上班
|
res.setClockingCondition(0); //上班
|
||||||
}else{
|
} else {
|
||||||
res.setClockingCondition(1); //下班
|
res.setClockingCondition(1); //下班
|
||||||
if (wgzAttendance.getLeaveMarkId() == null && wgzAttendance.getClockInTime()!=null && wgzAttendance.getClockOutTime()!=null){
|
if (wgzAttendance.getLeaveMarkId() == null && wgzAttendance.getClockInTime() != null && wgzAttendance.getClockOutTime() != null) {
|
||||||
res.setClockingCondition(3); //已完成
|
res.setClockingCondition(3); //已完成
|
||||||
}
|
}
|
||||||
if (wgzAttendance.getLeaveMarkId() != null && wgzAttendance.getLeaveMarkId()!= 0) {
|
if (wgzAttendance.getLeaveMarkId() != null && wgzAttendance.getLeaveMarkId() != 0) {
|
||||||
res.setClockingCondition(2); //请假
|
res.setClockingCondition(2); //请假
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//3、获取上下班状态
|
//3、获取上下班状态
|
||||||
if (wgzAttendance!= null) {
|
if (wgzAttendance != null) {
|
||||||
String exceptionType = wgzAttendance.getExceptionType();
|
String exceptionType = wgzAttendance.getExceptionType();
|
||||||
if (exceptionType.contains("0")) {
|
if (exceptionType.contains("0")) {
|
||||||
res.setIn(0);
|
res.setIn(0);
|
||||||
@ -381,7 +381,7 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Integer attendanceDetail(Long userId,Long recruitId, Integer num){
|
public Integer attendanceDetail(Long userId, Long recruitId, Integer num) {
|
||||||
LambdaQueryWrapper<WgzAttendance> apply = new LambdaQueryWrapper<WgzAttendance>().
|
LambdaQueryWrapper<WgzAttendance> apply = new LambdaQueryWrapper<WgzAttendance>().
|
||||||
eq(WgzAttendance::getUserId, userId).
|
eq(WgzAttendance::getUserId, userId).
|
||||||
eq(WgzAttendance::getRecruitId, recruitId).and(wrapper -> wrapper
|
eq(WgzAttendance::getRecruitId, recruitId).and(wrapper -> wrapper
|
||||||
@ -390,7 +390,7 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
|
|||||||
.isNotNull(WgzAttendance::getClockOutTime)
|
.isNotNull(WgzAttendance::getClockOutTime)
|
||||||
);
|
);
|
||||||
apply.orderByAsc(WgzAttendance::getDate);
|
apply.orderByAsc(WgzAttendance::getDate);
|
||||||
if (num!=null && num>0) { //表示查询指定天数的打卡记录,否则查询所有
|
if (num != null && num > 0) { //表示查询指定天数的打卡记录,否则查询所有
|
||||||
apply.last("LIMIT " + num);
|
apply.last("LIMIT " + num);
|
||||||
}
|
}
|
||||||
return baseMapper.selectCount(apply);
|
return baseMapper.selectCount(apply);
|
||||||
@ -402,6 +402,16 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
|
|||||||
return baseMapper.countByTaskId(taskId, beginDate, endDate);
|
return baseMapper.countByTaskId(taskId, beginDate, endDate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Integer dayTotalNum(Long taskId,LocalDate date){
|
||||||
|
return baseMapper.dayTotalNum(taskId,date);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Integer monthTotalNum(Long taskId,LocalDate beginDate, LocalDate endDate){
|
||||||
|
return baseMapper.monthTotalNum(taskId,beginDate,endDate);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BgtAttendanceVO attendanceDetail(BgtAttendanceDTO dto) {
|
public BgtAttendanceVO attendanceDetail(BgtAttendanceDTO dto) {
|
||||||
BgtAttendanceVO bgtAttendanceVO = new BgtAttendanceVO();
|
BgtAttendanceVO bgtAttendanceVO = new BgtAttendanceVO();
|
||||||
@ -412,57 +422,94 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
|
|||||||
|
|
||||||
LocalDate startData = null;
|
LocalDate startData = null;
|
||||||
LocalDate endData = null;
|
LocalDate endData = null;
|
||||||
|
LocalDate now = LocalDate.now();
|
||||||
|
|
||||||
if(dto.getDateType().equals(DateUtils.DAY)){
|
if (dto.getDateType().equals(DateUtils.DAY)) {
|
||||||
// 获取本月开始日期
|
// 获取本月开始日期
|
||||||
startData = date.with(TemporalAdjusters.firstDayOfMonth());
|
startData = date.with(TemporalAdjusters.firstDayOfMonth());
|
||||||
endData = date;
|
endData = date;
|
||||||
|
|
||||||
List<BgtAttendanceCountVO> countVOS = countByTaskId(dto.getTaskId(), startData, endData);
|
List<BgtAttendanceCountVO> countVOS = countByTaskId(dto.getTaskId(), startData, endData);
|
||||||
bgtAttendanceVO.setCountVOs(DataUtil.fillMissingDates(countVOS, startData, endData));
|
List<BgtAttendanceCountVO> bgtAttendanceCountVOS = DataUtil.fillMissingDates(countVOS, startData, endData);
|
||||||
if(CollectionUtil.isNotEmpty(countVOS)){
|
|
||||||
BgtAttendanceCountVO countVO = countVOS.stream()
|
// 因为当天可能还没有生成所有人的考勤数据,所以应到的总人数需要单独查询
|
||||||
|
// 判断当天是否在开始日期和结束日期之间(包含开始和结束日期)
|
||||||
|
boolean isBetween = (now.isAfter(startData) || now.isEqual(startData))
|
||||||
|
&& (now.isBefore(endData) || now.isEqual(endData));
|
||||||
|
if (isBetween) {
|
||||||
|
Integer i = dayTotalNum(task.getId(), now);
|
||||||
|
BgtAttendanceCountVO countVO = bgtAttendanceCountVOS.stream()
|
||||||
|
.filter(vo -> vo.getDate().isEqual(now))
|
||||||
|
.findFirst().orElse(null);
|
||||||
|
countVO.setTotalNum(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
bgtAttendanceVO.setCountVOs(bgtAttendanceCountVOS);
|
||||||
|
// 找出查询日期的考勤数据
|
||||||
|
BgtAttendanceCountVO countVO = bgtAttendanceCountVOS.stream()
|
||||||
.filter(vo -> vo.getDate().isEqual(date))
|
.filter(vo -> vo.getDate().isEqual(date))
|
||||||
.findFirst().orElse(null);
|
.findFirst().orElse(null);
|
||||||
if (countVO != null) {
|
if (countVO != null) {
|
||||||
bgtAttendanceVO.setReportToDutyNum(countVO.getReportToDutyNum());
|
bgtAttendanceVO.setReportToDutyNum(countVO.getReportToDutyNum());
|
||||||
bgtAttendanceVO.setTotalNum(countVO.getTotalNum());
|
bgtAttendanceVO.setTotalNum(countVO.getTotalNum());
|
||||||
bgtAttendanceVO.setAbsenceDutyNum(countVO.getTotalNum()-countVO.getReportToDutyNum());
|
bgtAttendanceVO.setAbsenceDutyNum(countVO.getTotalNum() - countVO.getReportToDutyNum());
|
||||||
if(bgtAttendanceVO.getTotalNum()!=0){
|
if (bgtAttendanceVO.getTotalNum() != 0) {
|
||||||
int rate = new BigDecimal(bgtAttendanceVO.getReportToDutyNum()).divide(new BigDecimal(bgtAttendanceVO.getTotalNum()), 2, RoundingMode.HALF_UP)
|
int rate = new BigDecimal(bgtAttendanceVO.getReportToDutyNum()).divide(new BigDecimal(bgtAttendanceVO.getTotalNum()), 2, RoundingMode.HALF_UP)
|
||||||
.multiply(new BigDecimal(100)).intValue();
|
.multiply(new BigDecimal(100)).intValue();
|
||||||
bgtAttendanceVO.setReportToDutyRate(rate);
|
bgtAttendanceVO.setReportToDutyRate(rate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (dto.getDateType().equals(DateUtils.MONTH)) {
|
||||||
}
|
|
||||||
}else if(dto.getDateType().equals(DateUtils.MONTH)){
|
|
||||||
// 获取本年开始日期
|
// 获取本年开始日期
|
||||||
startData = date.with(TemporalAdjusters.firstDayOfYear());
|
startData = date.with(TemporalAdjusters.firstDayOfYear());
|
||||||
endData = date.with(TemporalAdjusters.lastDayOfMonth());
|
endData = date.with(TemporalAdjusters.lastDayOfMonth());
|
||||||
|
if(endData.isAfter(now)){
|
||||||
|
endData= now;
|
||||||
|
}
|
||||||
List<BgtAttendanceCountVO> countVOS = countByTaskId(dto.getTaskId(), startData, endData);
|
List<BgtAttendanceCountVO> countVOS = countByTaskId(dto.getTaskId(), startData, endData);
|
||||||
bgtAttendanceVO.setCountVOs(DataUtil.statisticsByMonth(countVOS,startData, endData));
|
|
||||||
|
// 因为当天可能还没有生成所有人的考勤数据,所以应到的总人数需要单独查询
|
||||||
|
// 判断当天是否在开始日期和结束日期之间(包含开始和结束日期)
|
||||||
|
boolean isBetween = (now.isAfter(startData) || now.isEqual(startData))
|
||||||
|
&& (now.isBefore(endData) || now.isEqual(endData));
|
||||||
|
if (isBetween) {
|
||||||
|
Integer i = dayTotalNum(task.getId(), now);
|
||||||
BgtAttendanceCountVO countVO = countVOS.stream()
|
BgtAttendanceCountVO countVO = countVOS.stream()
|
||||||
|
.filter(vo -> vo.getDate().isEqual(now))
|
||||||
|
.findFirst().orElse(null);
|
||||||
|
if (countVO != null) {
|
||||||
|
countVO.setTotalNum(i);
|
||||||
|
}else {
|
||||||
|
BgtAttendanceCountVO bgtAttendanceCountVO = new BgtAttendanceCountVO(0, i, now, 0, 0, 0);
|
||||||
|
countVOS.add(bgtAttendanceCountVO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List<BgtAttendanceCountVO> bgtAttendanceCountVOS = DataUtil.statisticsByMonth(countVOS, startData, endData);
|
||||||
|
bgtAttendanceVO.setCountVOs(bgtAttendanceCountVOS);
|
||||||
|
BgtAttendanceCountVO countVO = bgtAttendanceCountVOS.stream()
|
||||||
.filter(vo -> YearMonth.from(vo.getDate()).equals(YearMonth.from(date)))
|
.filter(vo -> YearMonth.from(vo.getDate()).equals(YearMonth.from(date)))
|
||||||
.findFirst().orElse(null);
|
.findFirst().orElse(null);
|
||||||
if (countVO != null) {
|
if (countVO != null) {
|
||||||
bgtAttendanceVO.setReportToDutyNum(countVO.getReportToDutyNum());
|
bgtAttendanceVO.setReportToDutyNum(countVO.getReportToDutyNum());
|
||||||
bgtAttendanceVO.setTotalNum(countVO.getTotalNum());
|
bgtAttendanceVO.setTotalNum(countVO.getTotalNum());
|
||||||
bgtAttendanceVO.setAbsenceDutyNum(countVO.getAbsenceDutyNum());
|
bgtAttendanceVO.setAbsenceDutyNum(countVO.getAbsenceDutyNum());
|
||||||
|
int rate = new BigDecimal(countVO.getRateSum()).divide(new BigDecimal(countVO.getRateDay()), 2, RoundingMode.HALF_UP).intValue();
|
||||||
|
bgtAttendanceVO.setReportToDutyRate(rate);
|
||||||
}
|
}
|
||||||
|
//设置本月的总人数
|
||||||
|
bgtAttendanceVO.setTotalNum(monthTotalNum(task.getId(), date.with(TemporalAdjusters.firstDayOfMonth()), endData));
|
||||||
}
|
}
|
||||||
getLateAndLeave(bgtAttendanceVO, startData, endData);
|
getLateAndLeave(bgtAttendanceVO, startData, endData);
|
||||||
return bgtAttendanceVO;
|
return bgtAttendanceVO;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void getLateAndLeave(BgtAttendanceVO vo,LocalDate startDate, LocalDate endDate){
|
public void getLateAndLeave(BgtAttendanceVO vo, LocalDate startDate, LocalDate endDate) {
|
||||||
List<BgtProjectRecruit> bgtProjectRecruits = iBgtProjectRecruitService.getBaseMapper().selectList(Wrappers.<BgtProjectRecruit>lambdaQuery()
|
List<BgtProjectRecruit> bgtProjectRecruits = iBgtProjectRecruitService.getBaseMapper().selectList(Wrappers.<BgtProjectRecruit>lambdaQuery()
|
||||||
.eq(BgtProjectRecruit::getTaskId, vo.getTaskId()));
|
.eq(BgtProjectRecruit::getTaskId, vo.getTaskId()));
|
||||||
List<Long> recruitIds = bgtProjectRecruits.stream().map(BgtProjectRecruit::getId).collect(Collectors.toList());
|
List<Long> recruitIds = bgtProjectRecruits.stream().map(BgtProjectRecruit::getId).collect(Collectors.toList());
|
||||||
if(CollectionUtil.isNotEmpty(recruitIds)){
|
if (CollectionUtil.isNotEmpty(recruitIds)) {
|
||||||
Integer late = baseMapper.selectCount(Wrappers.<WgzAttendance>lambdaQuery().eq(WgzAttendance::getLate, 1)
|
Integer late = baseMapper.selectCount(Wrappers.<WgzAttendance>lambdaQuery().eq(WgzAttendance::getLate, 1)
|
||||||
.in(WgzAttendance::getRecruitId, recruitIds).between(WgzAttendance::getDate, startDate, endDate));
|
.eq(WgzAttendance::getRecruitId, recruitIds).between(WgzAttendance::getDate, startDate, endDate));
|
||||||
Integer leave = baseMapper.selectCount(Wrappers.<WgzAttendance>lambdaQuery().isNotNull(WgzAttendance::getLeaveMarkId)
|
Integer leave = baseMapper.selectCount(Wrappers.<WgzAttendance>lambdaQuery().isNotNull(WgzAttendance::getLeaveMarkId)
|
||||||
.in(WgzAttendance::getRecruitId, recruitIds).between(WgzAttendance::getDate, startDate, endDate));
|
.in(WgzAttendance::getRecruitId, recruitIds).between(WgzAttendance::getDate, startDate, endDate));
|
||||||
vo.setLateNum(late);
|
vo.setLateNum(late);
|
||||||
@ -480,6 +527,7 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取指定人、指定工地、指定日期的打卡记录
|
* 获取指定人、指定工地、指定日期的打卡记录
|
||||||
|
*
|
||||||
* @param appUserId 务工者用户id
|
* @param appUserId 务工者用户id
|
||||||
* @param recruitId 工地id
|
* @param recruitId 工地id
|
||||||
* @param date 具体日期
|
* @param date 具体日期
|
||||||
@ -487,9 +535,9 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
|
|||||||
*/
|
*/
|
||||||
public WgzAttendance publicFindByUserIdWait(Long appUserId, Long recruitId, String date) {
|
public WgzAttendance publicFindByUserIdWait(Long appUserId, Long recruitId, String date) {
|
||||||
LambdaQueryWrapper<WgzAttendance> qw = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<WgzAttendance> qw = new LambdaQueryWrapper<>();
|
||||||
qw.eq(WgzAttendance::getRecruitId,recruitId);
|
qw.eq(WgzAttendance::getRecruitId, recruitId);
|
||||||
qw.eq(WgzAttendance::getUserId,appUserId);
|
qw.eq(WgzAttendance::getUserId, appUserId);
|
||||||
qw.eq(WgzAttendance::getDate,date);
|
qw.eq(WgzAttendance::getDate, date);
|
||||||
return baseMapper.selectOne(qw);
|
return baseMapper.selectOne(qw);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -520,21 +568,22 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 组装上班、下班打卡记录
|
* 组装上班、下班打卡记录
|
||||||
|
*
|
||||||
* @param wa 打卡记录
|
* @param wa 打卡记录
|
||||||
* @param num 1上班 2下班
|
* @param num 1上班 2下班
|
||||||
* @return WgzAppPunchTheCalendarRecordThree
|
* @return WgzAppPunchTheCalendarRecordThree
|
||||||
*/
|
*/
|
||||||
public WgzAppPunchTheCalendarRecordThree sbOrXb( WgzAttendance wa,int num) {
|
public WgzAppPunchTheCalendarRecordThree sbOrXb(WgzAttendance wa, int num) {
|
||||||
WgzAppPunchTheCalendarRecordThree sbb = new WgzAppPunchTheCalendarRecordThree().
|
WgzAppPunchTheCalendarRecordThree sbb = new WgzAppPunchTheCalendarRecordThree().
|
||||||
setClockingTime(wa.getClockInTime()).
|
setClockingTime(wa.getClockInTime()).
|
||||||
setPnchOsition(wa.getPnchOsition()).
|
setPnchOsition(wa.getPnchOsition()).
|
||||||
setPnchOsitionX(wa.getPnchOsitionX()).
|
setPnchOsitionX(wa.getPnchOsitionX()).
|
||||||
setClockingCondition(0); //正常
|
setClockingCondition(0); //正常
|
||||||
//判断是否请假
|
//判断是否请假
|
||||||
if (wa.getLeaveMarkId()!=null && wa.getLeaveMarkId()!=0) {
|
if (wa.getLeaveMarkId() != null && wa.getLeaveMarkId() != 0) {
|
||||||
sbb.setClockingCondition(7);
|
sbb.setClockingCondition(7);
|
||||||
}
|
}
|
||||||
if (num == 1){
|
if (num == 1) {
|
||||||
//判断上班迟到
|
//判断上班迟到
|
||||||
if (wa.getLate() == 1) {
|
if (wa.getLate() == 1) {
|
||||||
sbb.setClockingCondition(1);
|
sbb.setClockingCondition(1);
|
||||||
@ -544,7 +593,7 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
|
|||||||
sbb.setClockingCondition(5);
|
sbb.setClockingCondition(5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (num == 2){
|
if (num == 2) {
|
||||||
//判断下班早退
|
//判断下班早退
|
||||||
if (wa.getEarlyLeave() == 1) {
|
if (wa.getEarlyLeave() == 1) {
|
||||||
sbb.setClockingCondition(2);
|
sbb.setClockingCondition(2);
|
||||||
@ -559,6 +608,7 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 补卡
|
* 补卡
|
||||||
|
*
|
||||||
* @param wgzAttendance 打卡记录
|
* @param wgzAttendance 打卡记录
|
||||||
* @param type 1上班 2下班
|
* @param type 1上班 2下班
|
||||||
* @param fillingDataTime 补卡时间
|
* @param fillingDataTime 补卡时间
|
||||||
@ -581,7 +631,7 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
|
|||||||
public BgtAttendanceDetailVO bgtAttendanceDetail(BgtAttendanceDetailDTO dto) {
|
public BgtAttendanceDetailVO bgtAttendanceDetail(BgtAttendanceDetailDTO dto) {
|
||||||
BgtAttendanceDetailVO bgtAttendanceDetailVO = new BgtAttendanceDetailVO();
|
BgtAttendanceDetailVO bgtAttendanceDetailVO = new BgtAttendanceDetailVO();
|
||||||
|
|
||||||
WgzUser wgzUser = wgzUserService.getById(dto.getUserId());
|
WgzUser wgzUser = wgzUserService.findByUserId(dto.getUserId());
|
||||||
bgtAttendanceDetailVO.setUserId(wgzUser.getUserId());
|
bgtAttendanceDetailVO.setUserId(wgzUser.getUserId());
|
||||||
bgtAttendanceDetailVO.setUsername(wgzUser.getUsername());
|
bgtAttendanceDetailVO.setUsername(wgzUser.getUsername());
|
||||||
bgtAttendanceDetailVO.setAvatarName(wgzUser.getAvatarName());
|
bgtAttendanceDetailVO.setAvatarName(wgzUser.getAvatarName());
|
||||||
@ -590,43 +640,43 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
|
|||||||
.eq(BgtProjectRecruit::getTaskId, dto.getTaskId()));
|
.eq(BgtProjectRecruit::getTaskId, dto.getTaskId()));
|
||||||
List<Long> recruitIds = bgtProjectRecruits.stream().map(BgtProjectRecruit::getId).collect(Collectors.toList());
|
List<Long> recruitIds = bgtProjectRecruits.stream().map(BgtProjectRecruit::getId).collect(Collectors.toList());
|
||||||
|
|
||||||
BgtProjectRecruitApply recruitApply = iBgtProjectRecruitApplyService.getById(recruitIds.get(0));
|
BgtProjectRecruitApply recruitApply = iBgtProjectRecruitApplyService.getOne(recruitIds.get(0),wgzUser.getUserId());
|
||||||
bgtAttendanceDetailVO.setEntryTime(recruitApply.getEntryTime());
|
bgtAttendanceDetailVO.setEntryTime(recruitApply.getEntryTime());
|
||||||
bgtAttendanceDetailVO.setStatus(recruitApply.getStatus());
|
bgtAttendanceDetailVO.setStatus(recruitApply.getStatus());
|
||||||
|
|
||||||
LambdaQueryWrapper<WgzAttendance> wrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<WgzAttendance> wrapper = new LambdaQueryWrapper<>();
|
||||||
wrapper.eq(WgzAttendance::getUserId,dto.getUserId());
|
wrapper.eq(WgzAttendance::getUserId, dto.getUserId());
|
||||||
|
|
||||||
wrapper.in(WgzAttendance::getRecruitId,recruitIds);
|
wrapper.in(WgzAttendance::getRecruitId, recruitIds);
|
||||||
LocalDate date = dto.getDate();
|
LocalDate date = dto.getDate();
|
||||||
LocalDate startDate = date.with(TemporalAdjusters.firstDayOfMonth());
|
LocalDate startDate = date.with(TemporalAdjusters.firstDayOfMonth());
|
||||||
LocalDate endData = date.with(TemporalAdjusters.lastDayOfMonth());
|
LocalDate endData = date.with(TemporalAdjusters.lastDayOfMonth());
|
||||||
wrapper.between(WgzAttendance::getDate,startDate,endData);
|
wrapper.between(WgzAttendance::getDate, startDate, endData);
|
||||||
List<WgzAttendance> wgzAttendances = baseMapper.selectList(wrapper);
|
List<WgzAttendance> wgzAttendances = baseMapper.selectList(wrapper);
|
||||||
// 创建SimpleDateFormat对象,格式化日期为中文星期
|
// 创建SimpleDateFormat对象,格式化日期为中文星期
|
||||||
SimpleDateFormat sdf = new SimpleDateFormat("EEEE", java.util.Locale.CHINESE);
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE", Locale.CHINA);
|
||||||
|
|
||||||
//获取招工打卡时间
|
//获取招工打卡时间
|
||||||
List<BgtProjectRecruit> list = iBgtProjectRecruitService.list(Wrappers.<BgtProjectRecruit>lambdaQuery().in(BgtProjectRecruit::getId));
|
List<BgtProjectRecruit> list = iBgtProjectRecruitService.list(Wrappers.<BgtProjectRecruit>lambdaQuery().in(BgtProjectRecruit::getId,recruitIds));
|
||||||
Map<Long, BgtProjectRecruit> recruitMap = list.stream().collect(Collectors.toMap(BgtProjectRecruit::getId, recruit -> recruit));
|
Map<Long, BgtProjectRecruit> recruitMap = list.stream().collect(Collectors.toMap(BgtProjectRecruit::getId, recruit -> recruit));
|
||||||
|
|
||||||
|
|
||||||
List<WgzAttendanceRecordVO> lateRecords = new ArrayList<>();
|
List<WgzAttendanceRecordVO> lateRecords = new ArrayList<>();
|
||||||
List<WgzAttendanceRecordVO> earlyLeaveRecords= new ArrayList<>();
|
List<WgzAttendanceRecordVO> earlyLeaveRecords = new ArrayList<>();
|
||||||
List<WgzAttendanceRecordVO> missRecords= new ArrayList<>();
|
List<WgzAttendanceRecordVO> missRecords = new ArrayList<>();
|
||||||
List<WgzAttendanceRecordVO> records= new ArrayList<>();
|
List<WgzAttendanceRecordVO> records = new ArrayList<>();
|
||||||
|
|
||||||
|
|
||||||
for (WgzAttendance wgzAttendance:wgzAttendances){
|
for (WgzAttendance wgzAttendance : wgzAttendances) {
|
||||||
WgzAttendanceRecordVO recordVO = new WgzAttendanceRecordVO();
|
WgzAttendanceRecordVO recordVO = new WgzAttendanceRecordVO();
|
||||||
recordVO.setDate(wgzAttendance.getDate());
|
recordVO.setDate(wgzAttendance.getDate());
|
||||||
recordVO.setWeek(sdf.format(date));
|
recordVO.setWeek(wgzAttendance.getDate().format(formatter));
|
||||||
if(wgzAttendance.getMissedIn()==0 && wgzAttendance.getMissedOut()==0){
|
if (wgzAttendance.getMissedIn() == 0 && wgzAttendance.getMissedOut() == 0) {
|
||||||
recordVO.setDay(1D);
|
recordVO.setDay(1D);
|
||||||
records.add(recordVO);
|
records.add(recordVO);
|
||||||
}else if(wgzAttendance.getMissedIn()==1 && wgzAttendance.getMissedOut()==1){
|
} else if (wgzAttendance.getMissedIn() == 1 && wgzAttendance.getMissedOut() == 1) {
|
||||||
recordVO.setDay(0D);
|
recordVO.setDay(0D);
|
||||||
}else {
|
} else {
|
||||||
recordVO.setDay(0.5D);
|
recordVO.setDay(0.5D);
|
||||||
records.add(recordVO);
|
records.add(recordVO);
|
||||||
}
|
}
|
||||||
@ -638,13 +688,13 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
|
|||||||
if (wgzAttendance.getLate() == 1) {
|
if (wgzAttendance.getLate() == 1) {
|
||||||
WgzAttendanceRecordVO LateRecordVO = BeanUtil.copyProperties(recordVO, WgzAttendanceRecordVO.class);
|
WgzAttendanceRecordVO LateRecordVO = BeanUtil.copyProperties(recordVO, WgzAttendanceRecordVO.class);
|
||||||
LateRecordVO.setTime(clockInTime.toLocalTime());
|
LateRecordVO.setTime(clockInTime.toLocalTime());
|
||||||
LateRecordVO.setMinutes(DataUtil.getMinutes(clockInTime,beginWorkTime));
|
LateRecordVO.setMinutes(DataUtil.getMinutes(clockInTime, beginWorkTime));
|
||||||
lateRecords.add(LateRecordVO);
|
lateRecords.add(LateRecordVO);
|
||||||
}
|
}
|
||||||
if (wgzAttendance.getEarlyLeave() == 1) {
|
if (wgzAttendance.getEarlyLeave() == 1) {
|
||||||
WgzAttendanceRecordVO earlyLeaveRecordVO = BeanUtil.copyProperties(recordVO, WgzAttendanceRecordVO.class);
|
WgzAttendanceRecordVO earlyLeaveRecordVO = BeanUtil.copyProperties(recordVO, WgzAttendanceRecordVO.class);
|
||||||
earlyLeaveRecordVO.setTime(clockOutTime.toLocalTime());
|
earlyLeaveRecordVO.setTime(clockOutTime.toLocalTime());
|
||||||
earlyLeaveRecordVO.setMinutes(DataUtil.getMinutes(clockOutTime,endWorkTime));
|
earlyLeaveRecordVO.setMinutes(DataUtil.getMinutes(clockOutTime, endWorkTime));
|
||||||
earlyLeaveRecords.add(earlyLeaveRecordVO);
|
earlyLeaveRecords.add(earlyLeaveRecordVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -670,12 +720,11 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
|
|||||||
bgtAttendanceDetailVO.setEarlyLeaveMinute(earlyLeaveRecords.stream().mapToInt(WgzAttendanceRecordVO::getMinutes).sum());
|
bgtAttendanceDetailVO.setEarlyLeaveMinute(earlyLeaveRecords.stream().mapToInt(WgzAttendanceRecordVO::getMinutes).sum());
|
||||||
bgtAttendanceDetailVO.setEarlyLeaveRecords(earlyLeaveRecords);
|
bgtAttendanceDetailVO.setEarlyLeaveRecords(earlyLeaveRecords);
|
||||||
|
|
||||||
bgtAttendanceDetailVO.setMissNum(earlyLeaveRecords.size());
|
bgtAttendanceDetailVO.setMissNum(missRecords.size());
|
||||||
bgtAttendanceDetailVO.setMissRecords(earlyLeaveRecords);
|
bgtAttendanceDetailVO.setMissRecords(missRecords);
|
||||||
return bgtAttendanceDetailVO;
|
return bgtAttendanceDetailVO;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -686,12 +735,13 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取对应用户指定天数的工资结算日期
|
* 获取对应用户指定天数的工资结算日期
|
||||||
|
*
|
||||||
* @param userId
|
* @param userId
|
||||||
* @param recruitId
|
* @param recruitId
|
||||||
* @param num 结算天数
|
* @param num 结算天数
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public LocalDate findByNumGetDate(Long userId, Long recruitId,Integer num) {
|
public LocalDate findByNumGetDate(Long userId, Long recruitId, Integer num) {
|
||||||
LambdaQueryWrapper<WgzAttendance> wra = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<WgzAttendance> wra = new LambdaQueryWrapper<>();
|
||||||
wra.eq(WgzAttendance::getRecruitId, recruitId);
|
wra.eq(WgzAttendance::getRecruitId, recruitId);
|
||||||
wra.eq(WgzAttendance::getUserId, userId);
|
wra.eq(WgzAttendance::getUserId, userId);
|
||||||
|
@ -30,12 +30,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
wu.type_of_work,
|
wu.type_of_work,
|
||||||
bpr.recruit_name,
|
bpr.recruit_name,
|
||||||
fpt.task_name,
|
fpt.task_name,
|
||||||
|
bpr.task_id,
|
||||||
wsr.score as hasScore
|
wsr.score as hasScore
|
||||||
from bgt_project_recruit_apply bpra
|
from bgt_project_recruit_apply bpra
|
||||||
left join wgz_user wu on bpra.user_id = wu.user_id
|
left join wgz_user wu on bpra.user_id = wu.user_id
|
||||||
left join bgt_project_recruit bpr on bpr.id = bpra.recruit_id
|
left join bgt_project_recruit bpr on bpr.id = bpra.recruit_id
|
||||||
left join fbs_project_task fpt on fpt.id = bpr.task_id
|
left join fbs_project_task fpt on fpt.id = bpr.task_id
|
||||||
left join wgz_score_record wsr on bpra.user_id = wsr.user_id and bpra.id = wsr.recruit_id
|
left join wgz_score_record wsr on bpra.user_id = wsr.user_id and bpra.recruit_id = wsr.recruit_id
|
||||||
<where>
|
<where>
|
||||||
<if test="dto.username !=null and dto.username !='' ">
|
<if test="dto.username !=null and dto.username !='' ">
|
||||||
and wu.username like concat('%', #{dto.username}, '%')
|
and wu.username like concat('%', #{dto.username}, '%')
|
||||||
@ -52,6 +53,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
#{item}
|
#{item}
|
||||||
</foreach>
|
</foreach>
|
||||||
</if>
|
</if>
|
||||||
|
<if test="dto.date != null">
|
||||||
|
AND (entry_time between #{dto.beginDate} and #{dto.endDate}) or (leave_time between #{dto.beginDate} and #{dto.endDate})
|
||||||
|
</if>
|
||||||
</where>
|
</where>
|
||||||
order by bpra.create_time desc,bpra.status asc
|
order by bpra.create_time desc,bpra.status asc
|
||||||
</select>
|
</select>
|
||||||
|
@ -29,7 +29,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
|
|
||||||
<select id="appQueryPageList" resultType="com.ruoyi.bgt.domain.vo.BgtProjectRecruitVO">
|
<select id="appQueryPageList" resultType="com.ruoyi.bgt.domain.vo.BgtProjectRecruitVO">
|
||||||
select bpr.id,bpr.recruit_name,bpr.recruit_address,bpr.recruit_amount,bpr.recruit_staff_num,
|
select bpr.id,bpr.recruit_name,bpr.recruit_address,bpr.recruit_amount,bpr.recruit_staff_num,
|
||||||
bpr.recruit_requirement,bpr.create_time,fpt.task_name,bpr.type_of_work
|
bpr.recruit_requirement,bpr.create_time,fpt.task_name,bpr.type_of_work,bpr.status
|
||||||
from bgt_project_recruit bpr left join fbs_project_task fpt on bpr.task_id = fpt.id
|
from bgt_project_recruit bpr left join fbs_project_task fpt on bpr.task_id = fpt.id
|
||||||
<where>
|
<where>
|
||||||
<if test="dto.userId != null ">
|
<if test="dto.userId != null ">
|
||||||
|
@ -33,7 +33,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<select id="countByTaskId" resultType="com.ruoyi.bgt.domain.vo.BgtAttendanceCountVO">
|
<select id="countByTaskId" resultType="com.ruoyi.bgt.domain.vo.BgtAttendanceCountVO">
|
||||||
select count(1) as reportToDutyNum,
|
select count(1) as reportToDutyNum,
|
||||||
date,
|
date,
|
||||||
(select count(1) from bgt_project_recruit_apply where entry_time <= date and (leave_time is null or leave_time>date)
|
(select count(1) from bgt_project_recruit_apply where entry_time <= date and (leave_time is null or leave_time>=date)
|
||||||
and recruit_id in (select id from bgt_project_recruit where task_id = #{taskId} )) as totalNum
|
and recruit_id in (select id from bgt_project_recruit where task_id = #{taskId} )) as totalNum
|
||||||
from wgz_attendance
|
from wgz_attendance
|
||||||
where date between #{beginDate} and #{endDate}
|
where date between #{beginDate} and #{endDate}
|
||||||
@ -42,4 +42,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
group by date order by date
|
group by date order by date
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
<select id="dayTotalNum" resultType="Integer">
|
||||||
|
select count(1) from bgt_project_recruit_apply where entry_time <= #{date} and ((leave_time is null and status = '5')or leave_time>=#{date})
|
||||||
|
and recruit_id in (select id from bgt_project_recruit where task_id = #{taskId} )
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="monthTotalNum" resultType="Integer">
|
||||||
|
select count(1)
|
||||||
|
from bgt_project_recruit_apply
|
||||||
|
where ((entry_time between #{beginDate} and #{endDate}) or (leave_time between #{beginDate} and #{endDate}))
|
||||||
|
and status in (5, 6)
|
||||||
|
and recruit_id in (select id from bgt_project_recruit where task_id = #{taskId})
|
||||||
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
Reference in New Issue
Block a user