优化
This commit is contained in:
@ -0,0 +1,46 @@
|
||||
package com.ruoyi.bgt.domain.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@Accessors(chain = true)
|
||||
@ApiModel("总体考勤情况-工资结算-基础信息")
|
||||
public class BgtPayCalculationDetailBaseVO {
|
||||
|
||||
@ApiModelProperty("姓名")
|
||||
private String username;
|
||||
|
||||
@ApiModelProperty("评分")
|
||||
private Double score;
|
||||
|
||||
@ApiModelProperty("头像")
|
||||
private String avatarName;
|
||||
|
||||
@ApiModelProperty("招工主题")
|
||||
private String recruitName;
|
||||
|
||||
@ApiModelProperty("任务名")
|
||||
private String taskName;
|
||||
|
||||
@ApiModelProperty("进场时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
private LocalDate entryTime;
|
||||
|
||||
@ApiModelProperty("总工资")
|
||||
private BigDecimal allAmount;
|
||||
|
||||
@ApiModelProperty("已付工资")
|
||||
private BigDecimal payAmount;
|
||||
|
||||
@ApiModelProperty("剩余工资")
|
||||
private BigDecimal residueAmount;
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
package com.ruoyi.bgt.domain.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@Accessors(chain = true)
|
||||
@ApiModel("总体考勤情况-工资结算-结算记录")
|
||||
public class BgtPayCalculationDetailListVO {
|
||||
|
||||
@ApiModelProperty("主键自增ID")
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty("工资金额")
|
||||
private BigDecimal recruitAmount;
|
||||
|
||||
@ApiModelProperty("出勤天数")
|
||||
private Long num;
|
||||
|
||||
@ApiModelProperty("创建时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@ApiModelProperty("同意|拒绝时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime auditorTime;
|
||||
|
||||
@ApiModelProperty("审核状态(0未读 1待审核 2已同意 3已拒绝)")
|
||||
private String auditorType;
|
||||
}
|
@ -14,6 +14,13 @@ import java.util.List;
|
||||
@ApiModel("包工头招工申请列表查询对象")
|
||||
public class BgtProjectRecruitApplyQueryDTO extends BaseEntity {
|
||||
|
||||
|
||||
@ApiModelProperty("分页大小")
|
||||
private Integer pageSize;
|
||||
/** 当前页数 */
|
||||
@ApiModelProperty("当前页数")
|
||||
private Integer pageNum;
|
||||
|
||||
@ApiModelProperty("招工ID列表")
|
||||
@NotEmpty(message = "招工ID列表不能为空")
|
||||
private List<Long> recruitIds;
|
||||
|
@ -32,6 +32,7 @@ public class BgtProjectRecruitApplyVO implements Serializable {
|
||||
private LocalDate entryTime;
|
||||
|
||||
@ApiModelProperty("务工者用户ID")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING)
|
||||
private Long userId;
|
||||
|
||||
@ApiModelProperty("姓名")
|
||||
|
@ -6,10 +6,12 @@ import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@ -96,6 +98,14 @@ public class BgtProjectRecruitDetailVO implements Serializable {
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty("上班时间")
|
||||
@DateTimeFormat(pattern = "HH:mm:ss")
|
||||
private LocalTime beginWorkTime;
|
||||
|
||||
@ApiModelProperty("下班时间")
|
||||
@DateTimeFormat(pattern = "HH:mm:ss")
|
||||
private LocalTime endWorkTime;
|
||||
|
||||
@ApiModelProperty("申请者列表")
|
||||
List<BgtProjectRecruitApplyVO> applylist;
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.bgt.domain.BgtProjectRecruitApply;
|
||||
import com.ruoyi.bgt.domain.dto.BgtAttendanceDayDTO;
|
||||
import com.ruoyi.bgt.domain.dto.BgtProjectRecruitApplyQueryDTO;
|
||||
import com.ruoyi.bgt.domain.dto.BgtProjectTaskProgressQueryDTO;
|
||||
import com.ruoyi.bgt.domain.vo.BgtProjectRecruitApplyVO;
|
||||
import com.ruoyi.common.core.mybatisplus.cache.MybatisPlusRedisCache;
|
||||
import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
|
||||
@ -24,6 +25,8 @@ import java.util.List;
|
||||
@CacheNamespace(implementation = MybatisPlusRedisCache.class, eviction = MybatisPlusRedisCache.class)
|
||||
public interface BgtProjectRecruitApplyMapper extends BaseMapperPlus<BgtProjectRecruitApply> {
|
||||
|
||||
Page<BgtProjectRecruitApplyVO> appQueryList(@Param("page")Page<BgtProjectTaskProgressQueryDTO> queryDTOPage,@Param("dto") BgtProjectRecruitApplyQueryDTO dto);
|
||||
|
||||
List<BgtProjectRecruitApplyVO> appQueryList(@Param("dto") BgtProjectRecruitApplyQueryDTO dto);
|
||||
|
||||
List<BgtProjectRecruitApplyVO> todayAttendanceList(@Param("dto") BgtAttendanceDayDTO dto);
|
||||
|
@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.RequestBody;
|
||||
import com.ruoyi.wgz.bo.req.WgzAppUnderwayReq;
|
||||
import com.ruoyi.wgz.bo.res.WgzAppUnderwayRes;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
@ -64,6 +65,11 @@ public interface IBgtProjectRecruitApplyService extends IServicePlus<BgtProjectR
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
/**
|
||||
* 查询列表
|
||||
*/
|
||||
TableDataInfo<BgtProjectRecruitApplyVO> appQueryPageList(BgtProjectRecruitApplyQueryDTO dto);
|
||||
|
||||
/**
|
||||
* 查询列表
|
||||
*/
|
||||
|
@ -10,10 +10,7 @@ import com.ruoyi.bgt.bo.BgtProjectRecruitApplyQueryBo;
|
||||
import com.ruoyi.bgt.domain.BgtMessage;
|
||||
import com.ruoyi.bgt.domain.BgtProjectRecruit;
|
||||
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.BgtProjectRecruitApplyQueryDTO;
|
||||
import com.ruoyi.bgt.domain.dto.BgtScoreDTO;
|
||||
import com.ruoyi.bgt.domain.dto.*;
|
||||
import com.ruoyi.bgt.domain.vo.BgtProjectRecruitApplyVO;
|
||||
import com.ruoyi.bgt.mapper.BgtProjectRecruitApplyMapper;
|
||||
import com.ruoyi.bgt.service.IBgtMessageService;
|
||||
@ -125,6 +122,15 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl<BgtProjec
|
||||
return removeByIds(ids);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TableDataInfo<BgtProjectRecruitApplyVO> appQueryPageList(BgtProjectRecruitApplyQueryDTO dto) {
|
||||
Page<BgtProjectTaskProgressQueryDTO> queryDTOPage = new Page<>();
|
||||
queryDTOPage.setCurrent(dto.getPageNum());
|
||||
queryDTOPage.setSize(dto.getPageSize());
|
||||
Page<BgtProjectRecruitApplyVO> queryVOPage = baseMapper.appQueryList(queryDTOPage, dto);
|
||||
return PageUtils.buildDataInfo(queryVOPage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BgtProjectRecruitApplyVO> appQueryList(BgtProjectRecruitApplyQueryDTO dto) {
|
||||
return baseMapper.appQueryList(dto);
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.ruoyi.common.constants;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class WgzAndBgtMessageConstant {
|
||||
@ -50,19 +51,46 @@ public class WgzAndBgtMessageConstant {
|
||||
* =====================================================包工头=====================================================
|
||||
*/
|
||||
|
||||
public static final String BGT_HEADLINE_APPLY = "您申请的【%s】项目,已得到回复!";
|
||||
public static final String BGT_SUBHEADING_APPLY = "您申请的【%s】项目,已经过审核人【%s】同意!";
|
||||
//模板
|
||||
public static final String BGT_SIGN_UP_APPLY_HEADLINE = "您申请的【%s】项目,已得到回复!";
|
||||
public static final String BGT_SIGN_UP_APPLY_SUBHEADING = "您申请的【%s】项目,审核人【%s】已%s!";
|
||||
public static final String BGT_PAY_APPLY_HEADLINE = "【%s】项目工资已审批!";
|
||||
public static final String BGT_PAY_APPLY_SUBHEADING = "您申请的【%s】项目工资,审核人【%s】已%s!";
|
||||
public static final String BGT_LEAVE_APPLY_HEADLINE = "您【%s】项目的请假申请,审核人【%s】已%s!";
|
||||
public static final String BGT_LEAVE_APPLY_SUBHEADING = "您【%s】项目的请假申请,审核人【%s】已%s!";
|
||||
|
||||
//主副标志
|
||||
public static final String HEADLINE = "headline"; //主标题
|
||||
public static final String SUBHEADING = "subheading"; //副标题
|
||||
|
||||
//消息类型
|
||||
public static final String BGT_TYPE_SIGN_UP = "1"; //务工者报名
|
||||
public static final String BGT_TYPE_PAY = "2"; //付款
|
||||
public static final String BGT_TYPE_LEAVE = "3"; //请假
|
||||
public static final String BGT_TYPE_MAKE_UP = "4"; //补卡
|
||||
public static final String BGT_TYPE_EXIT = "5"; //退场
|
||||
|
||||
//包工头消息返回
|
||||
public static String bgtMessage(Map<String, String> mp, String type) {
|
||||
public static Map<String,String> bgtMessage(Map<String, String> mp, String type,Boolean isPass) {
|
||||
Map<String, String> map = new HashMap<>();
|
||||
String pass = isPass ? "通过" : "拒绝";
|
||||
switch (type){
|
||||
case "1":
|
||||
return String.format(BGT_HEADLINE_APPLY, mp.get("projectName"));
|
||||
map.put(HEADLINE, String.format(BGT_SIGN_UP_APPLY_HEADLINE, mp.get("projectName")));
|
||||
map.put(SUBHEADING, String.format(BGT_SIGN_UP_APPLY_SUBHEADING, mp.get("projectName"),mp.get("auditor"),pass));
|
||||
break;
|
||||
case "2":
|
||||
return String.format(BGT_SUBHEADING_APPLY, mp.get("projectName"),mp.get("auditor"));
|
||||
map.put(HEADLINE, String.format(BGT_PAY_APPLY_HEADLINE, mp.get("projectName")));
|
||||
map.put(SUBHEADING, String.format(BGT_PAY_APPLY_SUBHEADING, mp.get("projectName"),mp.get("auditor"),pass));
|
||||
break;
|
||||
// case "3":
|
||||
// return String.format(BGT_PAY_APPLY, mp.get("projectName"),mp.get("auditor"));
|
||||
// case "4":
|
||||
// return String.format(BGT_LEAVE_APPLY, mp.get("projectName"),mp.get("auditor"));
|
||||
default:
|
||||
return "未知类型";
|
||||
break;
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
|
||||
|
@ -0,0 +1,36 @@
|
||||
package com.ruoyi.fbs.domain.vo;
|
||||
|
||||
import com.ruoyi.bgt.domain.vo.BgtAttendanceCountVO;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@Data
|
||||
@ApiModel("包工头项目任务详情-考勤")
|
||||
public class AppTaskDetailAttendanceVO {
|
||||
|
||||
@ApiModelProperty("主键ID")
|
||||
private Long id;
|
||||
|
||||
//总体考勤情况
|
||||
|
||||
@ApiModelProperty("总人数")
|
||||
private Integer totalNum = 0;
|
||||
|
||||
@ApiModelProperty("今日到岗人数")
|
||||
private Integer reportToDutyNum= 0;
|
||||
|
||||
@ApiModelProperty("今日到岗率")
|
||||
private Integer reportToDutyRate= 0;
|
||||
|
||||
@ApiModelProperty("考勤列表")
|
||||
List<BgtAttendanceCountVO> countVOS;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
package com.ruoyi.fbs.domain.vo;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
@Data
|
||||
@ApiModel("包工头项目任务详情-进度")
|
||||
public class AppTaskDetailProgressVO {
|
||||
|
||||
@ApiModelProperty("主键ID")
|
||||
private Long id;
|
||||
|
||||
//任务进度
|
||||
@ApiModelProperty("任务进度")
|
||||
private Integer progress;
|
||||
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package com.ruoyi.fbs.domain.vo;
|
||||
|
||||
import com.ruoyi.bgt.domain.vo.BgtProjectRecruitApplyVO;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@Data
|
||||
@ApiModel("包工头项目任务详情-务工者")
|
||||
public class AppTaskDetailRecruitVO {
|
||||
|
||||
@ApiModelProperty("主键ID")
|
||||
private Long id;
|
||||
//务工者数量列表
|
||||
@ApiModelProperty("申请者列表")
|
||||
List<BgtProjectRecruitApplyVO> applyList;
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
@ -98,8 +98,8 @@ public class AppTaskDetailVO {
|
||||
@ApiModelProperty("任务付款金额")
|
||||
private BigDecimal taskPaymentAmount;
|
||||
|
||||
@ApiModelProperty("收款申请列表")
|
||||
private List<BgtWageApplicationListVO> wageApplicationList;
|
||||
@ApiModelProperty("最新一条收款申请")
|
||||
private BgtWageApplicationListVO wageApplication;
|
||||
|
||||
|
||||
//总体考勤情况
|
||||
|
@ -0,0 +1,29 @@
|
||||
package com.ruoyi.fbs.domain.vo;
|
||||
|
||||
import com.ruoyi.bgt.domain.vo.BgtWageApplicationListVO;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
|
||||
@Data
|
||||
@ApiModel("包工头项目任务详情-结算情况")
|
||||
public class AppTaskDetailWageVO {
|
||||
|
||||
@ApiModelProperty("主键ID")
|
||||
private Long id;
|
||||
|
||||
//结算情况
|
||||
@ApiModelProperty("任务收款金额")
|
||||
private Integer taskReceiveAmount;
|
||||
|
||||
@ApiModelProperty("任务付款金额")
|
||||
private BigDecimal taskPaymentAmount;
|
||||
|
||||
@ApiModelProperty("最新一条收款申请")
|
||||
private BgtWageApplicationListVO wageApplication;
|
||||
|
||||
|
||||
}
|
@ -6,8 +6,7 @@ import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.fbs.bo.FbsProjectTaskQueryBo;
|
||||
import com.ruoyi.fbs.domain.FbsProjectTask;
|
||||
import com.ruoyi.fbs.domain.dto.AppTaskDTO;
|
||||
import com.ruoyi.fbs.domain.vo.AppTaskDetailVO;
|
||||
import com.ruoyi.fbs.domain.vo.AppTaskVO;
|
||||
import com.ruoyi.fbs.domain.vo.*;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
@ -69,4 +68,24 @@ public interface IFbsProjectTaskService extends IServicePlus<FbsProjectTask> {
|
||||
* 任务详情
|
||||
*/
|
||||
AppTaskDetailVO appQueryById(Long id);
|
||||
|
||||
/**
|
||||
* 任务详情-考勤
|
||||
*/
|
||||
AppTaskDetailAttendanceVO attendance(Long id);
|
||||
|
||||
/**
|
||||
* 任务详情-进度
|
||||
*/
|
||||
AppTaskDetailProgressVO progress(Long id);
|
||||
|
||||
/**
|
||||
* 任务详情-结算
|
||||
*/
|
||||
AppTaskDetailWageVO wage(Long id);
|
||||
|
||||
/**
|
||||
* 任务详情-务工人员
|
||||
*/
|
||||
AppTaskDetailRecruitVO recruit(Long id);
|
||||
}
|
||||
|
@ -27,8 +27,7 @@ import com.ruoyi.common.utils.SecurityUtils;
|
||||
import com.ruoyi.fbs.bo.FbsProjectTaskQueryBo;
|
||||
import com.ruoyi.fbs.domain.FbsProjectTask;
|
||||
import com.ruoyi.fbs.domain.dto.AppTaskDTO;
|
||||
import com.ruoyi.fbs.domain.vo.AppTaskDetailVO;
|
||||
import com.ruoyi.fbs.domain.vo.AppTaskVO;
|
||||
import com.ruoyi.fbs.domain.vo.*;
|
||||
import com.ruoyi.fbs.mapper.FbsProjectTaskMapper;
|
||||
import com.ruoyi.fbs.service.IFbsProjectTaskApplyService;
|
||||
import com.ruoyi.fbs.service.IFbsProjectTaskService;
|
||||
@ -180,15 +179,6 @@ public class FbsProjectTaskServiceImpl extends ServicePlusImpl<FbsProjectTaskMap
|
||||
|
||||
if(ProjectTaskStatus.PROGRESS.getCode().equals(byId.getStatus())
|
||||
|| ProjectTaskStatus.COMPLETE.getCode().equals(byId.getStatus())){
|
||||
//务工者数量列表
|
||||
BgtProjectRecruitQueryBo bgtProjectRecruitQueryBo = new BgtProjectRecruitQueryBo();
|
||||
bgtProjectRecruitQueryBo.setTaskId(id);
|
||||
List<Long> recruitIds = recruitService.queryList(bgtProjectRecruitQueryBo).stream().map(BgtProjectRecruit::getId).collect(Collectors.toList());
|
||||
|
||||
BgtProjectRecruitApplyQueryDTO bgtProjectRecruitApplyQueryDTO = new BgtProjectRecruitApplyQueryDTO();
|
||||
bgtProjectRecruitApplyQueryDTO.setRecruitIds(recruitIds);
|
||||
bgtProjectRecruitApplyQueryDTO.setStatus(Collections.singletonList(RecruitApplyStatus.WORKING.getCode()));
|
||||
appTaskDetailVO.setApplyList(recruitApplyService.appQueryList(bgtProjectRecruitApplyQueryDTO));
|
||||
//任务进度
|
||||
appTaskDetailVO.setProgress(progressService.getLastProgress(id));
|
||||
|
||||
@ -197,7 +187,7 @@ public class FbsProjectTaskServiceImpl extends ServicePlusImpl<FbsProjectTaskMap
|
||||
BgtWageApplicationQueryDTO wageDTO = new BgtWageApplicationQueryDTO();
|
||||
wageDTO.setTaskId(id);
|
||||
List<BgtWageApplicationListVO> wageList = wageApplicationService.appQueryList(wageDTO);
|
||||
appTaskDetailVO.setWageApplicationList(wageList);
|
||||
appTaskDetailVO.setWageApplication(CollectionUtil.isEmpty(wageList)?null:wageList.get(0));
|
||||
//收款金额
|
||||
Integer taskReceiveAmount = wageList.stream().filter(wage -> AuditStatus.PASS.getCode().equals(wage.getAuditStatus()))
|
||||
.mapToInt(BgtWageApplicationListVO::getApplicantAmount)
|
||||
@ -206,20 +196,72 @@ public class FbsProjectTaskServiceImpl extends ServicePlusImpl<FbsProjectTaskMap
|
||||
//付款金额
|
||||
BigDecimal payByTaskAndBgt = payCalculationService.getPayByTaskAndBgt(byId.getId(), byId.getUserId());
|
||||
appTaskDetailVO.setTaskPaymentAmount(payByTaskAndBgt);
|
||||
//考勤情况
|
||||
LocalDate date = LocalDate.now();
|
||||
LocalDate startOfMonth = date.withDayOfMonth(1);
|
||||
List<BgtAttendanceCountVO> countVOS = attendanceService.countByTaskId(id, startOfMonth, date);
|
||||
if(CollectionUtil.isNotEmpty(countVOS)){
|
||||
BgtAttendanceCountVO vo = countVOS.get(0);
|
||||
appTaskDetailVO.setCountVOS(DataUtil.fillMissingDates(countVOS, startOfMonth, date));
|
||||
appTaskDetailVO.setTotalNum(vo.getTotalNum());
|
||||
appTaskDetailVO.setReportToDutyNum(vo.getReportToDutyNum());
|
||||
appTaskDetailVO.setReportToDutyRate(vo.getReportToDutyNum()/vo.getTotalNum()*100);
|
||||
}
|
||||
|
||||
}
|
||||
return appTaskDetailVO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AppTaskDetailAttendanceVO attendance(Long id) {
|
||||
//考勤情况
|
||||
AppTaskDetailAttendanceVO appTaskDetailVO = new AppTaskDetailAttendanceVO();
|
||||
appTaskDetailVO.setId(id);
|
||||
LocalDate date = LocalDate.now();
|
||||
LocalDate startOfMonth = date.withDayOfMonth(1);
|
||||
List<BgtAttendanceCountVO> countVOS = attendanceService.countByTaskId(id, startOfMonth, date);
|
||||
if(CollectionUtil.isNotEmpty(countVOS)){
|
||||
BgtAttendanceCountVO vo = countVOS.get(0);
|
||||
appTaskDetailVO.setCountVOS(DataUtil.fillMissingDates(countVOS, startOfMonth, date));
|
||||
appTaskDetailVO.setTotalNum(vo.getTotalNum());
|
||||
appTaskDetailVO.setReportToDutyNum(vo.getReportToDutyNum());
|
||||
appTaskDetailVO.setReportToDutyRate(vo.getReportToDutyNum()/vo.getTotalNum()*100);
|
||||
}
|
||||
return appTaskDetailVO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AppTaskDetailProgressVO progress(Long id) {
|
||||
AppTaskDetailProgressVO appTaskDetailVO = new AppTaskDetailProgressVO();
|
||||
appTaskDetailVO.setId(id);
|
||||
//任务进度
|
||||
appTaskDetailVO.setProgress(progressService.getLastProgress(id));
|
||||
return appTaskDetailVO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AppTaskDetailWageVO wage(Long id) {
|
||||
AppTaskDetailWageVO appTaskDetailVO = new AppTaskDetailWageVO();
|
||||
appTaskDetailVO.setId(id);
|
||||
//结算情况
|
||||
//收款申请列表
|
||||
BgtWageApplicationQueryDTO wageDTO = new BgtWageApplicationQueryDTO();
|
||||
wageDTO.setTaskId(id);
|
||||
List<BgtWageApplicationListVO> wageList = wageApplicationService.appQueryList(wageDTO);
|
||||
appTaskDetailVO.setWageApplication(CollectionUtil.isEmpty(wageList)?null:wageList.get(0));
|
||||
//收款金额
|
||||
Integer taskReceiveAmount = wageList.stream().filter(wage -> AuditStatus.PASS.getCode().equals(wage.getAuditStatus()))
|
||||
.mapToInt(BgtWageApplicationListVO::getApplicantAmount)
|
||||
.sum();
|
||||
appTaskDetailVO.setTaskReceiveAmount(taskReceiveAmount);
|
||||
//付款金额
|
||||
BigDecimal payByTaskAndBgt = payCalculationService.getPayByTaskAndBgt(id, SecurityUtils.getAppUserId());
|
||||
appTaskDetailVO.setTaskPaymentAmount(payByTaskAndBgt);
|
||||
return appTaskDetailVO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AppTaskDetailRecruitVO recruit(Long id) {
|
||||
AppTaskDetailRecruitVO appTaskDetailVO = new AppTaskDetailRecruitVO();
|
||||
appTaskDetailVO.setId(id);
|
||||
//务工者数量列表
|
||||
BgtProjectRecruitQueryBo bgtProjectRecruitQueryBo = new BgtProjectRecruitQueryBo();
|
||||
bgtProjectRecruitQueryBo.setTaskId(id);
|
||||
List<Long> recruitIds = recruitService.queryList(bgtProjectRecruitQueryBo).stream().map(BgtProjectRecruit::getId).collect(Collectors.toList());
|
||||
|
||||
BgtProjectRecruitApplyQueryDTO bgtProjectRecruitApplyQueryDTO = new BgtProjectRecruitApplyQueryDTO();
|
||||
bgtProjectRecruitApplyQueryDTO.setRecruitIds(recruitIds);
|
||||
bgtProjectRecruitApplyQueryDTO.setStatus(Collections.singletonList(RecruitApplyStatus.WORKING.getCode()));
|
||||
appTaskDetailVO.setApplyList(recruitApplyService.appQueryList(bgtProjectRecruitApplyQueryDTO));
|
||||
return appTaskDetailVO;
|
||||
}
|
||||
}
|
||||
|
@ -6,7 +6,7 @@ import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@ -15,6 +15,6 @@ import java.io.Serializable;
|
||||
@ApiModel("务工者APP-查询个人基本信息对象")
|
||||
public class WgzAppPersonalBasicInformationReq implements Serializable {
|
||||
@ApiModelProperty("唯一标识")
|
||||
@NotBlank(message = "唯一标识不能为空")
|
||||
@NotNull(message = "唯一标识不能为空")
|
||||
private Long userId;
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
package com.ruoyi.wgz.service;
|
||||
|
||||
import com.ruoyi.bgt.domain.dto.BgtPayCalculationDetailBaseVO;
|
||||
import com.ruoyi.bgt.domain.dto.BgtPayCalculationDetailListVO;
|
||||
import com.ruoyi.bgt.domain.dto.BgtPayCalculationListDTO;
|
||||
import com.ruoyi.bgt.domain.dto.BgtPayCalculationUpdateDTO;
|
||||
import com.ruoyi.common.core.mybatisplus.core.IServicePlus;
|
||||
@ -103,4 +105,14 @@ public interface IWgzPayCalculationService extends IServicePlus<WgzPayCalculatio
|
||||
*/
|
||||
BigDecimal getPayByTaskAndBgt(Long taskId, Long auditorUserId);
|
||||
|
||||
/**
|
||||
* 总体考勤情况-工资结算-基础信息
|
||||
*/
|
||||
BgtPayCalculationDetailBaseVO baseInfo(Long userId, Long recruitId);
|
||||
|
||||
/**
|
||||
* 总体考勤情况-工资结算-结算记录
|
||||
*/
|
||||
List<BgtPayCalculationDetailListVO> record(Long userId, Long recruitId);
|
||||
|
||||
}
|
||||
|
@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.bgt.domain.BgtProjectRecruit;
|
||||
import com.ruoyi.bgt.domain.BgtProjectRecruitApply;
|
||||
import com.ruoyi.bgt.domain.dto.BgtPayCalculationDetailBaseVO;
|
||||
import com.ruoyi.bgt.domain.dto.BgtPayCalculationDetailListVO;
|
||||
import com.ruoyi.bgt.domain.dto.BgtPayCalculationListDTO;
|
||||
import com.ruoyi.bgt.domain.dto.BgtPayCalculationUpdateDTO;
|
||||
import com.ruoyi.bgt.service.IBgtProjectRecruitApplyService;
|
||||
@ -16,15 +18,20 @@ import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.utils.PageUtils;
|
||||
import com.ruoyi.common.utils.SecurityUtils;
|
||||
import com.ruoyi.fbs.domain.FbsProjectTask;
|
||||
import com.ruoyi.fbs.service.IFbsProjectTaskService;
|
||||
import com.ruoyi.wgz.bo.WgzPayCalculationQueryBo;
|
||||
import com.ruoyi.wgz.bo.req.WgzAppApplyForPayrollSettlementListReq;
|
||||
import com.ruoyi.wgz.bo.req.WgzApplyForPayrollSettlementAddReq;
|
||||
import com.ruoyi.wgz.bo.res.WgzAppApplyForPayrollSettlementListRes;
|
||||
import com.ruoyi.wgz.domain.WgzPayCalculation;
|
||||
import com.ruoyi.wgz.domain.WgzPayCalculationFiles;
|
||||
import com.ruoyi.wgz.domain.WgzUser;
|
||||
import com.ruoyi.wgz.mapper.WgzPayCalculationMapper;
|
||||
import com.ruoyi.wgz.service.IWgzAttendanceService;
|
||||
import com.ruoyi.wgz.service.IWgzPayCalculationFilesService;
|
||||
import com.ruoyi.wgz.service.IWgzPayCalculationService;
|
||||
import com.ruoyi.wgz.service.IWgzUserService;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -54,6 +61,14 @@ public class WgzPayCalculationServiceImpl extends ServicePlusImpl<WgzPayCalculat
|
||||
@Autowired
|
||||
private IWgzPayCalculationFilesService iWgzPayCalculationFilesService;
|
||||
|
||||
@Autowired
|
||||
private IWgzUserService wgzUserService;
|
||||
|
||||
@Autowired
|
||||
private IFbsProjectTaskService taskService;
|
||||
|
||||
@Autowired
|
||||
private IWgzAttendanceService attendanceService;
|
||||
|
||||
@Override
|
||||
public WgzPayCalculation queryById(Long id){
|
||||
@ -201,4 +216,48 @@ public class WgzPayCalculationServiceImpl extends ServicePlusImpl<WgzPayCalculat
|
||||
.eq(WgzPayCalculation::getAuditorUserId, auditorUserId));
|
||||
return list.stream().map(WgzPayCalculation::getRecruitAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BgtPayCalculationDetailBaseVO baseInfo(Long userId, Long recruitId) {
|
||||
BgtPayCalculationDetailBaseVO vo = new BgtPayCalculationDetailBaseVO();
|
||||
WgzUser wgzUser = wgzUserService.getById(userId);
|
||||
vo.setScore(wgzUser.getScore());
|
||||
vo.setUsername(wgzUser.getUsername());
|
||||
vo.setAvatarName(wgzUser.getAvatarName());
|
||||
|
||||
BgtProjectRecruit recruit = iBgtProjectRecruitService.getById(recruitId);
|
||||
vo.setRecruitName(recruit.getRecruitName());
|
||||
|
||||
FbsProjectTask task = taskService.getById(recruit.getTaskId());
|
||||
vo.setTaskName(task.getTaskName());
|
||||
|
||||
BgtProjectRecruitApply apply = iBgtProjectRecruitApplyService.getOne(Wrappers.<BgtProjectRecruitApply>lambdaQuery()
|
||||
.eq(BgtProjectRecruitApply::getRecruitId, recruitId).eq(BgtProjectRecruitApply::getUserId, userId)
|
||||
.last("limit 1"));
|
||||
vo.setEntryTime(apply.getEntryTime());
|
||||
|
||||
Integer i = attendanceService.attendanceDetail(userId, apply.getId(), null);
|
||||
BigDecimal totalAmount = recruit.getRecruitAmount().multiply(BigDecimal.valueOf(i));
|
||||
vo.setAllAmount(totalAmount);
|
||||
|
||||
List<WgzPayCalculation> gzs = findByUserIdRecruitIdNewestData(userId, apply.getId());
|
||||
BigDecimal addSum = new BigDecimal(0);
|
||||
for (WgzPayCalculation gz : gzs) {
|
||||
//金额*天数=实际工资
|
||||
BigDecimal multiply = gz.getRecruitAmount().multiply(BigDecimal.valueOf(gz.getNum()));
|
||||
addSum = addSum.add(multiply);
|
||||
}
|
||||
vo.setPayAmount(totalAmount);
|
||||
|
||||
vo.setResidueAmount(vo.getAllAmount().subtract(vo.getPayAmount()));
|
||||
return vo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BgtPayCalculationDetailListVO> record(Long userId, Long recruitId) {
|
||||
List<WgzPayCalculation> wgzPayCalculations = baseMapper.selectList(Wrappers.<WgzPayCalculation>lambdaQuery()
|
||||
.eq(WgzPayCalculation::getUserId, userId)
|
||||
.eq(WgzPayCalculation::getRecruitId, recruitId));
|
||||
return BeanUtil.copyToList(wgzPayCalculations, BgtPayCalculationDetailListVO.class);
|
||||
}
|
||||
}
|
||||
|
@ -66,7 +66,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
left join bgt_project_recruit_apply bpra on wa.recruit_id = bpra.recruit_id and bpra.user_id = wa.user_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
|
||||
where wa.date = #{dto.date}'
|
||||
where wa.date = #{dto.date}
|
||||
<if test="dto.attendanceType !=null and dto.attendanceType ==1 ">
|
||||
and (wa.missed_in =0 or missed_out = 0 )
|
||||
</if>
|
||||
|
@ -39,6 +39,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
and bpr.recruit_name like concat('%', #{dto.recruitName}, '%')
|
||||
</if>
|
||||
</where>
|
||||
order by bpr.create_time desc
|
||||
</select>
|
||||
|
||||
<select id="userProjectDetails" resultType="com.ruoyi.wgz.bo.res.WgzAppProjectDetailsRes">
|
||||
|
@ -69,6 +69,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
and bwa.audit_status = #{dto.auditStatus}
|
||||
</if>
|
||||
</where>
|
||||
order by bwa.create_time desc
|
||||
</select>
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user