This commit is contained in:
zt
2025-02-25 17:13:38 +08:00
parent cffc1422b0
commit 293560e4a3
25 changed files with 482 additions and 44 deletions

View File

@ -1,5 +1,7 @@
package com.ruoyi.web.controller.bgt; package com.ruoyi.web.controller.bgt;
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.BgtPayCalculationListDTO;
import com.ruoyi.bgt.domain.dto.BgtPayCalculationUpdateDTO; import com.ruoyi.bgt.domain.dto.BgtPayCalculationUpdateDTO;
import com.ruoyi.common.annotation.Log; import com.ruoyi.common.annotation.Log;
@ -18,6 +20,7 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.util.List;
/** /**
* 工资结算Controller * 工资结算Controller
@ -64,4 +67,16 @@ public class AppBgtPayCalculationController extends BaseController {
} }
@ApiOperation("总体考勤情况-工资结算-基础信息")
@GetMapping("/baseInfo")
public AjaxResult<BgtPayCalculationDetailBaseVO> baseInfo(Long id, Long recruitId) {
return AjaxResult.success(iWgzPayCalculationService.baseInfo(id,recruitId));
}
@ApiOperation("总体考勤情况-工资结算-结算记录")
@GetMapping("/{id}")
public AjaxResult<List<BgtPayCalculationDetailListVO>> getInfo(Long id, Long recruitId) {
return AjaxResult.success(iWgzPayCalculationService.record(id,recruitId));
}
} }

View File

@ -11,6 +11,7 @@ import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.annotation.RepeatSubmit; import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.core.controller.BaseController; 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.enums.BusinessType; import com.ruoyi.common.enums.BusinessType;
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;
@ -41,8 +42,14 @@ public class AppBgtProjectRecruitApplyController extends BaseController {
private final IWgzUserService wgzUserService; private final IWgzUserService wgzUserService;
@ApiOperation("App务工者列表") @ApiOperation("App务工者列表(分页)")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo<BgtProjectRecruitApplyVO> listPage(@Validated BgtProjectRecruitApplyQueryDTO dto) {
return iBgtProjectRecruitApplyService.appQueryPageList(dto);
}
@ApiOperation("App务工者列表")
@GetMapping("/listAll")
public AjaxResult<List<BgtProjectRecruitApplyVO>> list(@Validated BgtProjectRecruitApplyQueryDTO dto) { public AjaxResult<List<BgtProjectRecruitApplyVO>> list(@Validated BgtProjectRecruitApplyQueryDTO dto) {
return AjaxResult.success(iBgtProjectRecruitApplyService.appQueryList(dto)); return AjaxResult.success(iBgtProjectRecruitApplyService.appQueryList(dto));
} }
@ -70,7 +77,7 @@ public class AppBgtProjectRecruitApplyController extends BaseController {
} }
@ApiOperation("指定日期打卡记录") @ApiOperation("人员出勤情况")
@GetMapping("/todayAttendanceList") @GetMapping("/todayAttendanceList")
public AjaxResult<List<BgtProjectRecruitApplyVO>> todayAttendanceList(@Validated BgtAttendanceDayDTO req) { public AjaxResult<List<BgtProjectRecruitApplyVO>> todayAttendanceList(@Validated BgtAttendanceDayDTO req) {
return AjaxResult.success(iBgtProjectRecruitApplyService.todayAttendanceList(req)); return AjaxResult.success(iBgtProjectRecruitApplyService.todayAttendanceList(req));

View File

@ -4,8 +4,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.fbs.domain.dto.AppTaskDTO; import com.ruoyi.fbs.domain.dto.AppTaskDTO;
import com.ruoyi.fbs.domain.vo.AppTaskDetailVO; import com.ruoyi.fbs.domain.vo.*;
import com.ruoyi.fbs.domain.vo.AppTaskVO;
import com.ruoyi.fbs.service.IFbsProjectTaskService; import com.ruoyi.fbs.service.IFbsProjectTaskService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@ -57,4 +56,34 @@ public class AppFbsProjectTaskController extends BaseController {
return AjaxResult.success(iFbsProjectTaskService.appQueryById(id)); return AjaxResult.success(iFbsProjectTaskService.appQueryById(id));
} }
@ApiOperation("项目任务详细信息-考勤")
@GetMapping("/attendance/{id}")
public AjaxResult<AppTaskDetailAttendanceVO> getInfoAttendance(@NotNull(message = "主键不能为空")
@PathVariable("id") Long id) {
return AjaxResult.success(iFbsProjectTaskService.attendance(id));
}
@ApiOperation("项目任务详细信息-进度")
@GetMapping("/progress/{id}")
public AjaxResult<AppTaskDetailProgressVO> getInfoProgress(@NotNull(message = "主键不能为空")
@PathVariable("id") Long id) {
return AjaxResult.success(iFbsProjectTaskService.progress(id));
}
@ApiOperation("项目任务详细信息-结算")
@GetMapping("/wage/{id}")
public AjaxResult<AppTaskDetailWageVO> getInfoWage(@NotNull(message = "主键不能为空")
@PathVariable("id") Long id) {
return AjaxResult.success(iFbsProjectTaskService.wage(id));
}
@ApiOperation("项目任务详细信息-务工人员")
@GetMapping("/recruit/{id}")
public AjaxResult<AppTaskDetailRecruitVO> getInfoRecruit(@NotNull(message = "主键不能为空")
@PathVariable("id") Long id) {
return AjaxResult.success(iFbsProjectTaskService.recruit(id));
}
} }

View File

@ -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;
}

View File

@ -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;
}

View File

@ -14,6 +14,13 @@ import java.util.List;
@ApiModel("包工头招工申请列表查询对象") @ApiModel("包工头招工申请列表查询对象")
public class BgtProjectRecruitApplyQueryDTO extends BaseEntity { public class BgtProjectRecruitApplyQueryDTO extends BaseEntity {
@ApiModelProperty("分页大小")
private Integer pageSize;
/** 当前页数 */
@ApiModelProperty("当前页数")
private Integer pageNum;
@ApiModelProperty("招工ID列表") @ApiModelProperty("招工ID列表")
@NotEmpty(message = "招工ID列表不能为空") @NotEmpty(message = "招工ID列表不能为空")
private List<Long> recruitIds; private List<Long> recruitIds;

View File

@ -32,6 +32,7 @@ public class BgtProjectRecruitApplyVO implements Serializable {
private LocalDate entryTime; private LocalDate entryTime;
@ApiModelProperty("务工者用户ID") @ApiModelProperty("务工者用户ID")
@JsonFormat(shape = JsonFormat.Shape.STRING)
private Long userId; private Long userId;
@ApiModelProperty("姓名") @ApiModelProperty("姓名")

View File

@ -6,10 +6,12 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.List; import java.util.List;
/** /**
@ -96,6 +98,14 @@ public class BgtProjectRecruitDetailVO implements Serializable {
@ApiModelProperty("备注") @ApiModelProperty("备注")
private String remark; private String remark;
@ApiModelProperty("上班时间")
@DateTimeFormat(pattern = "HH:mm:ss")
private LocalTime beginWorkTime;
@ApiModelProperty("下班时间")
@DateTimeFormat(pattern = "HH:mm:ss")
private LocalTime endWorkTime;
@ApiModelProperty("申请者列表") @ApiModelProperty("申请者列表")
List<BgtProjectRecruitApplyVO> applylist; List<BgtProjectRecruitApplyVO> applylist;
} }

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.BgtAttendanceDayDTO;
import com.ruoyi.bgt.domain.dto.BgtProjectRecruitApplyQueryDTO; import com.ruoyi.bgt.domain.dto.BgtProjectRecruitApplyQueryDTO;
import com.ruoyi.bgt.domain.dto.BgtProjectTaskProgressQueryDTO;
import com.ruoyi.bgt.domain.vo.BgtProjectRecruitApplyVO; import com.ruoyi.bgt.domain.vo.BgtProjectRecruitApplyVO;
import com.ruoyi.common.core.mybatisplus.cache.MybatisPlusRedisCache; import com.ruoyi.common.core.mybatisplus.cache.MybatisPlusRedisCache;
import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus; import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
@ -24,6 +25,8 @@ import java.util.List;
@CacheNamespace(implementation = MybatisPlusRedisCache.class, eviction = MybatisPlusRedisCache.class) @CacheNamespace(implementation = MybatisPlusRedisCache.class, eviction = MybatisPlusRedisCache.class)
public interface BgtProjectRecruitApplyMapper extends BaseMapperPlus<BgtProjectRecruitApply> { 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> appQueryList(@Param("dto") BgtProjectRecruitApplyQueryDTO dto);
List<BgtProjectRecruitApplyVO> todayAttendanceList(@Param("dto") BgtAttendanceDayDTO dto); List<BgtProjectRecruitApplyVO> todayAttendanceList(@Param("dto") BgtAttendanceDayDTO dto);

View File

@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import com.ruoyi.wgz.bo.req.WgzAppUnderwayReq; import com.ruoyi.wgz.bo.req.WgzAppUnderwayReq;
import com.ruoyi.wgz.bo.res.WgzAppUnderwayRes; import com.ruoyi.wgz.bo.res.WgzAppUnderwayRes;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@ -64,6 +65,11 @@ public interface IBgtProjectRecruitApplyService extends IServicePlus<BgtProjectR
*/ */
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 查询列表
*/
TableDataInfo<BgtProjectRecruitApplyVO> appQueryPageList(BgtProjectRecruitApplyQueryDTO dto);
/** /**
* 查询列表 * 查询列表
*/ */

View File

@ -10,10 +10,7 @@ import com.ruoyi.bgt.bo.BgtProjectRecruitApplyQueryBo;
import com.ruoyi.bgt.domain.BgtMessage; import com.ruoyi.bgt.domain.BgtMessage;
import com.ruoyi.bgt.domain.BgtProjectRecruit; import com.ruoyi.bgt.domain.BgtProjectRecruit;
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.*;
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.vo.BgtProjectRecruitApplyVO; import com.ruoyi.bgt.domain.vo.BgtProjectRecruitApplyVO;
import com.ruoyi.bgt.mapper.BgtProjectRecruitApplyMapper; import com.ruoyi.bgt.mapper.BgtProjectRecruitApplyMapper;
import com.ruoyi.bgt.service.IBgtMessageService; import com.ruoyi.bgt.service.IBgtMessageService;
@ -125,6 +122,15 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl<BgtProjec
return removeByIds(ids); 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 @Override
public List<BgtProjectRecruitApplyVO> appQueryList(BgtProjectRecruitApplyQueryDTO dto) { public List<BgtProjectRecruitApplyVO> appQueryList(BgtProjectRecruitApplyQueryDTO dto) {
return baseMapper.appQueryList(dto); return baseMapper.appQueryList(dto);

View File

@ -1,5 +1,6 @@
package com.ruoyi.common.constants; package com.ruoyi.common.constants;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
public class WgzAndBgtMessageConstant { 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){ switch (type){
case "1": 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": 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: default:
return "未知类型"; break;
} }
return map;
} }

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -98,8 +98,8 @@ public class AppTaskDetailVO {
@ApiModelProperty("任务付款金额") @ApiModelProperty("任务付款金额")
private BigDecimal taskPaymentAmount; private BigDecimal taskPaymentAmount;
@ApiModelProperty("收款申请列表") @ApiModelProperty("最新一条收款申请")
private List<BgtWageApplicationListVO> wageApplicationList; private BgtWageApplicationListVO wageApplication;
//总体考勤情况 //总体考勤情况

View File

@ -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;
}

View File

@ -6,8 +6,7 @@ import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.fbs.bo.FbsProjectTaskQueryBo; import com.ruoyi.fbs.bo.FbsProjectTaskQueryBo;
import com.ruoyi.fbs.domain.FbsProjectTask; import com.ruoyi.fbs.domain.FbsProjectTask;
import com.ruoyi.fbs.domain.dto.AppTaskDTO; import com.ruoyi.fbs.domain.dto.AppTaskDTO;
import com.ruoyi.fbs.domain.vo.AppTaskDetailVO; import com.ruoyi.fbs.domain.vo.*;
import com.ruoyi.fbs.domain.vo.AppTaskVO;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@ -69,4 +68,24 @@ public interface IFbsProjectTaskService extends IServicePlus<FbsProjectTask> {
* 任务详情 * 任务详情
*/ */
AppTaskDetailVO appQueryById(Long id); AppTaskDetailVO appQueryById(Long id);
/**
* 任务详情-考勤
*/
AppTaskDetailAttendanceVO attendance(Long id);
/**
* 任务详情-进度
*/
AppTaskDetailProgressVO progress(Long id);
/**
* 任务详情-结算
*/
AppTaskDetailWageVO wage(Long id);
/**
* 任务详情-务工人员
*/
AppTaskDetailRecruitVO recruit(Long id);
} }

View File

@ -27,8 +27,7 @@ import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.fbs.bo.FbsProjectTaskQueryBo; import com.ruoyi.fbs.bo.FbsProjectTaskQueryBo;
import com.ruoyi.fbs.domain.FbsProjectTask; import com.ruoyi.fbs.domain.FbsProjectTask;
import com.ruoyi.fbs.domain.dto.AppTaskDTO; import com.ruoyi.fbs.domain.dto.AppTaskDTO;
import com.ruoyi.fbs.domain.vo.AppTaskDetailVO; import com.ruoyi.fbs.domain.vo.*;
import com.ruoyi.fbs.domain.vo.AppTaskVO;
import com.ruoyi.fbs.mapper.FbsProjectTaskMapper; import com.ruoyi.fbs.mapper.FbsProjectTaskMapper;
import com.ruoyi.fbs.service.IFbsProjectTaskApplyService; import com.ruoyi.fbs.service.IFbsProjectTaskApplyService;
import com.ruoyi.fbs.service.IFbsProjectTaskService; import com.ruoyi.fbs.service.IFbsProjectTaskService;
@ -180,15 +179,6 @@ public class FbsProjectTaskServiceImpl extends ServicePlusImpl<FbsProjectTaskMap
if(ProjectTaskStatus.PROGRESS.getCode().equals(byId.getStatus()) if(ProjectTaskStatus.PROGRESS.getCode().equals(byId.getStatus())
|| ProjectTaskStatus.COMPLETE.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)); appTaskDetailVO.setProgress(progressService.getLastProgress(id));
@ -197,7 +187,7 @@ public class FbsProjectTaskServiceImpl extends ServicePlusImpl<FbsProjectTaskMap
BgtWageApplicationQueryDTO wageDTO = new BgtWageApplicationQueryDTO(); BgtWageApplicationQueryDTO wageDTO = new BgtWageApplicationQueryDTO();
wageDTO.setTaskId(id); wageDTO.setTaskId(id);
List<BgtWageApplicationListVO> wageList = wageApplicationService.appQueryList(wageDTO); 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())) Integer taskReceiveAmount = wageList.stream().filter(wage -> AuditStatus.PASS.getCode().equals(wage.getAuditStatus()))
.mapToInt(BgtWageApplicationListVO::getApplicantAmount) .mapToInt(BgtWageApplicationListVO::getApplicantAmount)
@ -206,7 +196,16 @@ public class FbsProjectTaskServiceImpl extends ServicePlusImpl<FbsProjectTaskMap
//付款金额 //付款金额
BigDecimal payByTaskAndBgt = payCalculationService.getPayByTaskAndBgt(byId.getId(), byId.getUserId()); BigDecimal payByTaskAndBgt = payCalculationService.getPayByTaskAndBgt(byId.getId(), byId.getUserId());
appTaskDetailVO.setTaskPaymentAmount(payByTaskAndBgt); appTaskDetailVO.setTaskPaymentAmount(payByTaskAndBgt);
}
return appTaskDetailVO;
}
@Override
public AppTaskDetailAttendanceVO attendance(Long id) {
//考勤情况 //考勤情况
AppTaskDetailAttendanceVO appTaskDetailVO = new AppTaskDetailAttendanceVO();
appTaskDetailVO.setId(id);
LocalDate date = LocalDate.now(); LocalDate date = LocalDate.now();
LocalDate startOfMonth = date.withDayOfMonth(1); LocalDate startOfMonth = date.withDayOfMonth(1);
List<BgtAttendanceCountVO> countVOS = attendanceService.countByTaskId(id, startOfMonth, date); List<BgtAttendanceCountVO> countVOS = attendanceService.countByTaskId(id, startOfMonth, date);
@ -217,9 +216,52 @@ public class FbsProjectTaskServiceImpl extends ServicePlusImpl<FbsProjectTaskMap
appTaskDetailVO.setReportToDutyNum(vo.getReportToDutyNum()); appTaskDetailVO.setReportToDutyNum(vo.getReportToDutyNum());
appTaskDetailVO.setReportToDutyRate(vo.getReportToDutyNum()/vo.getTotalNum()*100); appTaskDetailVO.setReportToDutyRate(vo.getReportToDutyNum()/vo.getTotalNum()*100);
} }
}
return appTaskDetailVO; 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;
}
} }

View File

@ -6,7 +6,7 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull;
import java.io.Serializable; import java.io.Serializable;
@Data @Data
@ -15,6 +15,6 @@ import java.io.Serializable;
@ApiModel("务工者APP-查询个人基本信息对象") @ApiModel("务工者APP-查询个人基本信息对象")
public class WgzAppPersonalBasicInformationReq implements Serializable { public class WgzAppPersonalBasicInformationReq implements Serializable {
@ApiModelProperty("唯一标识") @ApiModelProperty("唯一标识")
@NotBlank(message = "唯一标识不能为空") @NotNull(message = "唯一标识不能为空")
private Long userId; private Long userId;
} }

View File

@ -1,5 +1,7 @@
package com.ruoyi.wgz.service; 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.BgtPayCalculationListDTO;
import com.ruoyi.bgt.domain.dto.BgtPayCalculationUpdateDTO; import com.ruoyi.bgt.domain.dto.BgtPayCalculationUpdateDTO;
import com.ruoyi.common.core.mybatisplus.core.IServicePlus; import com.ruoyi.common.core.mybatisplus.core.IServicePlus;
@ -103,4 +105,14 @@ public interface IWgzPayCalculationService extends IServicePlus<WgzPayCalculatio
*/ */
BigDecimal getPayByTaskAndBgt(Long taskId, Long auditorUserId); BigDecimal getPayByTaskAndBgt(Long taskId, Long auditorUserId);
/**
* 总体考勤情况-工资结算-基础信息
*/
BgtPayCalculationDetailBaseVO baseInfo(Long userId, Long recruitId);
/**
* 总体考勤情况-工资结算-结算记录
*/
List<BgtPayCalculationDetailListVO> record(Long userId, Long recruitId);
} }

View File

@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.bgt.domain.BgtProjectRecruit; import com.ruoyi.bgt.domain.BgtProjectRecruit;
import com.ruoyi.bgt.domain.BgtProjectRecruitApply; 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.BgtPayCalculationListDTO;
import com.ruoyi.bgt.domain.dto.BgtPayCalculationUpdateDTO; import com.ruoyi.bgt.domain.dto.BgtPayCalculationUpdateDTO;
import com.ruoyi.bgt.service.IBgtProjectRecruitApplyService; 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.core.page.TableDataInfo;
import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.PageUtils;
import com.ruoyi.common.utils.SecurityUtils; 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.WgzPayCalculationQueryBo;
import com.ruoyi.wgz.bo.req.WgzAppApplyForPayrollSettlementListReq; import com.ruoyi.wgz.bo.req.WgzAppApplyForPayrollSettlementListReq;
import com.ruoyi.wgz.bo.req.WgzApplyForPayrollSettlementAddReq; import com.ruoyi.wgz.bo.req.WgzApplyForPayrollSettlementAddReq;
import com.ruoyi.wgz.bo.res.WgzAppApplyForPayrollSettlementListRes; import com.ruoyi.wgz.bo.res.WgzAppApplyForPayrollSettlementListRes;
import com.ruoyi.wgz.domain.WgzPayCalculation; import com.ruoyi.wgz.domain.WgzPayCalculation;
import com.ruoyi.wgz.domain.WgzPayCalculationFiles; import com.ruoyi.wgz.domain.WgzPayCalculationFiles;
import com.ruoyi.wgz.domain.WgzUser;
import com.ruoyi.wgz.mapper.WgzPayCalculationMapper; import com.ruoyi.wgz.mapper.WgzPayCalculationMapper;
import com.ruoyi.wgz.service.IWgzAttendanceService;
import com.ruoyi.wgz.service.IWgzPayCalculationFilesService; import com.ruoyi.wgz.service.IWgzPayCalculationFilesService;
import com.ruoyi.wgz.service.IWgzPayCalculationService; import com.ruoyi.wgz.service.IWgzPayCalculationService;
import com.ruoyi.wgz.service.IWgzUserService;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -54,6 +61,14 @@ public class WgzPayCalculationServiceImpl extends ServicePlusImpl<WgzPayCalculat
@Autowired @Autowired
private IWgzPayCalculationFilesService iWgzPayCalculationFilesService; private IWgzPayCalculationFilesService iWgzPayCalculationFilesService;
@Autowired
private IWgzUserService wgzUserService;
@Autowired
private IFbsProjectTaskService taskService;
@Autowired
private IWgzAttendanceService attendanceService;
@Override @Override
public WgzPayCalculation queryById(Long id){ public WgzPayCalculation queryById(Long id){
@ -201,4 +216,48 @@ public class WgzPayCalculationServiceImpl extends ServicePlusImpl<WgzPayCalculat
.eq(WgzPayCalculation::getAuditorUserId, auditorUserId)); .eq(WgzPayCalculation::getAuditorUserId, auditorUserId));
return list.stream().map(WgzPayCalculation::getRecruitAmount).reduce(BigDecimal.ZERO, BigDecimal::add); 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);
}
} }

View File

@ -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_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 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
where wa.date = #{dto.date}' where wa.date = #{dto.date}
<if test="dto.attendanceType !=null and dto.attendanceType ==1 "> <if test="dto.attendanceType !=null and dto.attendanceType ==1 ">
and (wa.missed_in =0 or missed_out = 0 ) and (wa.missed_in =0 or missed_out = 0 )
</if> </if>

View File

@ -39,6 +39,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and bpr.recruit_name like concat('%', #{dto.recruitName}, '%') and bpr.recruit_name like concat('%', #{dto.recruitName}, '%')
</if> </if>
</where> </where>
order by bpr.create_time desc
</select> </select>
<select id="userProjectDetails" resultType="com.ruoyi.wgz.bo.res.WgzAppProjectDetailsRes"> <select id="userProjectDetails" resultType="com.ruoyi.wgz.bo.res.WgzAppProjectDetailsRes">

View File

@ -69,6 +69,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and bwa.audit_status = #{dto.auditStatus} and bwa.audit_status = #{dto.auditStatus}
</if> </if>
</where> </where>
order by bwa.create_time desc
</select> </select>