总包方

This commit is contained in:
zt
2025-04-08 10:41:50 +08:00
parent 7aa7db4d37
commit 069529f78c
52 changed files with 1180 additions and 88 deletions

View File

@ -7,15 +7,17 @@ import com.ruoyi.bgt.domain.dto.BgtProjectTaskProgressQueryDTO;
import com.ruoyi.bgt.domain.vo.BgtProjectTaskProgressDetailVO;
import com.ruoyi.bgt.domain.vo.BgtProjectTaskProgressVO;
import com.ruoyi.bgt.service.IBgtProjectTaskProgressService;
import com.ruoyi.bgt.service.IBgtUserService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.BgtUser;
import com.ruoyi.common.core.domain.entity.FbsUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.fbs.domain.FbsProjectTask;
import com.ruoyi.fbs.service.IFbsProjectTaskService;
import com.ruoyi.fbs.service.IFbsUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
@ -39,7 +41,9 @@ public class AppBgtProjectTaskProgressController extends BaseController {
private final IBgtProjectTaskProgressService iBgtProjectTaskProgressService;
private final IBgtUserService iBgtUserService;
private final IFbsUserService iFbsUserService;
private final IFbsProjectTaskService iFbsProjectTaskService;
/**
* 查询包工头项目任务进度列表
@ -70,9 +74,12 @@ public class AppBgtProjectTaskProgressController extends BaseController {
@RepeatSubmit
@PostMapping()
public AjaxResult<Boolean> add(@Validated @RequestBody BgtProjectTaskProgressDTO dto) {
BgtUser bgtUser = iBgtUserService.selectUserByUserId(dto.getReviewerId());
FbsProjectTask task = iFbsProjectTaskService.getById(dto.getTaskId());
FbsUser fbsUser = iFbsUserService.selectUserByUserId(task.getCreateId());
BgtProjectTaskProgress bgtProjectTaskProgress = BeanUtil.copyProperties(dto, BgtProjectTaskProgress.class);
bgtProjectTaskProgress.setReviewerName(bgtUser.getUsername());
bgtProjectTaskProgress.setReviewerName(fbsUser.getUsername());
bgtProjectTaskProgress.setReviewerId(fbsUser.getUserId());
return AjaxResult.success(iBgtProjectTaskProgressService.insert(bgtProjectTaskProgress));
}

View File

@ -69,28 +69,6 @@ public class AppFbsProjectController extends BaseController {
}
}
// @ApiOperation("分包商查看可报名项目详情")
// @GetMapping("/signUp/{id}")
// public AjaxResult<FbsProjectDetailVO> signUpDetail(@NotNull(message = "主键不能为空")
// @PathVariable("id") Long id) {
// return AjaxResult.success(zbfProjectService.signUpDetail(id));
// }
//
// @ApiOperation("分包商查看已申请项目详情")
// @GetMapping("/apply/{id}")
// public AjaxResult<FbsProjectDetailVO> applyDetail(@NotNull(message = "主键不能为空")
// @PathVariable("id") Long id) {
// return AjaxResult.success(zbfProjectService.applyDetail(id));
// }
//
// @ApiOperation("分包商查看已加入或已竣工项目详情")
// @GetMapping("/joinOrComplete/{id}")
// public AjaxResult<FbsProjectDetailVO> joinOrCompleteDetail(@NotNull(message = "主键不能为空")
// @PathVariable("id") Long id) {
// return AjaxResult.success(zbfProjectService.joinOrCompleteDetail(id));
// }
@ApiOperation("分包商查询我的项目列表-项目切换")
@GetMapping("/switchList")
public TableDataInfo<FbsProjectListVO> switchList(FbsProjectListDTO dto) {

View File

@ -6,10 +6,12 @@ import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.zbf.domain.ZbfProject;
import com.ruoyi.zbf.domain.dto.ZbfProgressListDTO;
import com.ruoyi.zbf.domain.dto.ZbfProjectAddDTO;
import com.ruoyi.zbf.domain.dto.ZbfProjectListDTO;
import com.ruoyi.zbf.domain.vo.ZbfProjectCountVO;
import com.ruoyi.zbf.domain.vo.ZbfProjectListVO;
import com.ruoyi.zbf.domain.dto.ZbfProjectSwitchListDTO;
import com.ruoyi.zbf.domain.vo.*;
import com.ruoyi.zbf.service.IZbfProjectService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -18,6 +20,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotNull;
/**
* 总包方项目Controller
*
@ -47,11 +51,83 @@ public class AppZbfProjectController extends BaseController {
return iZbfProjectService.queryZbfList(dto);
}
@ApiOperation("总包方查询自建项目统计")
@ApiOperation("总包方项目统计")
@GetMapping("/count")
public AjaxResult<ZbfProjectCountVO> projectCount() {
return AjaxResult.success(iZbfProjectService.projectCount());
}
@ApiOperation("总包方项目列表(精简)")
@GetMapping("/conciseList")
public TableDataInfo<ZbfProject> conciseList(@Validated ZbfProjectListDTO dto) {
return iZbfProjectService.conciseList(dto);
}
@ApiOperation("总包方项目详情-项目信息")
@GetMapping("/{id}")
public AjaxResult<ZbfProjectDetailVO> zbfInfo(@NotNull(message = "主键不能为空")
@PathVariable("id") Long id) {
return AjaxResult.success(iZbfProjectService.zbfInfo(id));
}
@ApiOperation("总包方项目详情-项目标段信息")
@GetMapping("/sectionInfo/{id}")
public AjaxResult<ZbfProjectDetailSectionVO> sectionInfo(@NotNull(message = "主键不能为空")
@PathVariable("id") Long id) {
return AjaxResult.success(iZbfProjectService.sectionInfo(id));
}
@ApiOperation("总包方项目详情-用工数量")
@GetMapping("/personCount/{id}")
public AjaxResult<ZbfPersonCountVO> personCount(@NotNull(message = "主键不能为空")
@PathVariable("id") Long id) {
return AjaxResult.success(iZbfProjectService.personCount(id));
}
@ApiOperation("总包方项目详情-考勤情况")
@GetMapping("/attendanceCount/{id}")
public AjaxResult<ZbfAttendanceCountVO> attendanceCount(@NotNull(message = "主键不能为空")
@PathVariable("id") Long id) {
return AjaxResult.success(iZbfProjectService.attendanceCount(id));
}
@ApiOperation("总包方项目详情-用工进度")
@GetMapping("/progress")
public AjaxResult<ZbfProjectDetailProgressVO> zbfProgress(Long projectId) {
return AjaxResult.success(iZbfProjectService.zbfProgress(projectId));
}
@ApiOperation("总包方项目详情-用工进度列表")
@GetMapping("/progressList")
public TableDataInfo<ZbfProgressListVO> zbfProgressList(ZbfProgressListDTO dto) {
return iZbfProjectService.zbfProgressList(dto);
}
@ApiOperation("总包方项目详情-付款情况")
@GetMapping("/wage")
public AjaxResult<ZbfProjectDetailWageVO> zbfWage(Long projectId) {
return AjaxResult.success(iZbfProjectService.zbfWage(projectId));
}
@ApiOperation("总包方项目详情-付款情况查看更多")
@GetMapping("/wageList")
public TableDataInfo<ZbfWageApplicationVO> zbfWageList(Long projectId) {
return iZbfProjectService.zbfWageList(projectId);
}
@ApiOperation("总包方项目详情-项目切换")
@GetMapping("/switchList")
public TableDataInfo<ZbfProject> zbfSwitchList(ZbfProjectSwitchListDTO dto) {
return iZbfProjectService.zbfSwitchList(dto);
}
}

View File

@ -0,0 +1,39 @@
package com.ruoyi.web.controller.zbf;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.zbf.domain.dto.ZbfSubSwitchListDTO;
import com.ruoyi.zbf.domain.vo.ZbfProjectSectionListVO;
import com.ruoyi.zbf.service.IZbfProjectSectionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 总包方项目标段Controller
*
* @author ruoyi
* @date 2025-02-17
*/
@Api(value = "App总包方总包方项目标段控制器", tags = {"App总包方"})
@RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
@RequestMapping("/app/zbf/section")
public class AppZbfProjectSectionController extends BaseController {
private final IZbfProjectSectionService iZbfProjectSectionService;
@ApiOperation("总包方查询分包切换列表")
@GetMapping("/zbfSubSwitchList")
public TableDataInfo<ZbfProjectSectionListVO> zbfSubSwitchList(@Validated ZbfSubSwitchListDTO dto) {
return iZbfProjectSectionService.zbfSubSwitchList(dto);
}
}

View File

@ -4,16 +4,16 @@ import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.zbf.domain.dto.ZbfProjectSubApplyListDTO;
import com.ruoyi.zbf.domain.vo.ZbfProjectSubcontractingApplyListVO;
import com.ruoyi.zbf.service.IZbfProjectSubcontractingApplyService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotNull;
@ -41,5 +41,10 @@ public class AppZbfProjectSubcontractingApplyController extends BaseController {
return toAjax(iZbfProjectSubcontractingApplyService.choose(id));
}
@ApiOperation("总包方项目分包详情-申请列表")
@GetMapping("/fbsList/{subId}")
public TableDataInfo<ZbfProjectSubcontractingApplyListVO> getFbsList(ZbfProjectSubApplyListDTO dto) {
return iZbfProjectSubcontractingApplyService.getFbsList(dto);
}
}

View File

@ -0,0 +1,48 @@
package com.ruoyi.web.controller.zbf;
import cn.hutool.core.bean.BeanUtil;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.zbf.domain.ZbfProjectSubcontracting;
import com.ruoyi.zbf.domain.vo.ZbfProjectSubcontractingDetailVO;
import com.ruoyi.zbf.service.IZbfProjectSectionService;
import com.ruoyi.zbf.service.IZbfProjectSubcontractingService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotNull;
/**
* 总包方项目分包Controller
*
* @author ruoyi
* @date 2025-02-17
*/
@Api(value = "App总包方项目分包控制器", tags = {"App总包方"})
@RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
@RequestMapping("/app/zbf/subcontracting")
public class AppZbfProjectSubcontractingController extends BaseController {
private final IZbfProjectSubcontractingService iZbfProjectSubcontractingService;
private final IZbfProjectSectionService iZbfProjectSectionService;
@ApiOperation("总包方项目分包详情-分包信息")
@GetMapping("/info/{id}")
public AjaxResult<ZbfProjectSubcontractingDetailVO> getInfo(@NotNull(message = "主键不能为空")
@PathVariable("id") Long id) {
ZbfProjectSubcontracting zbfProjectSubcontracting = iZbfProjectSubcontractingService.queryById(id);
ZbfProjectSubcontractingDetailVO vo = BeanUtil.copyProperties(zbfProjectSubcontracting, ZbfProjectSubcontractingDetailVO.class);
vo.setSectionName(iZbfProjectSectionService.getById(vo.getSectionId()).getSectionName());
return AjaxResult.success(vo);
}
}

View File

@ -0,0 +1,41 @@
package com.ruoyi.web.controller.zbf;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.domain.dto.CompanyAuthenticateDTO;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.zbf.service.IZbfUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* APP总包方用户Controller
*
* @author ruoyi
* @date 2025-03-31
*/
@Api(value = "App总包方用户控制器", tags = {"App总包方"})
@RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
@RequestMapping("/app/zbf/user")
public class AppZbfUserController extends BaseController {
private final IZbfUserService iZbfUserService;
@ApiOperation("总包方企业认证")
@Log(title = "总包方企业认证", businessType = BusinessType.UPDATE)
@RepeatSubmit
@PutMapping()
public AjaxResult<Long> edit(@Validated @RequestBody CompanyAuthenticateDTO dto) {
return AjaxResult.success(iZbfUserService.authenticate(dto));
}
}

View File

@ -1,26 +1,27 @@
package com.ruoyi.zbf.controller;
package com.ruoyi.web.controller.zbf;
import java.util.List;
import java.util.Arrays;
import com.ruoyi.zbf.domain.ZbfMessage;
import lombok.RequiredArgsConstructor;
import javax.validation.constraints.*;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.zbf.bo.ZbfMessageQueryBo;
import com.ruoyi.zbf.service.IZbfMessageService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.zbf.bo.ZbfMessageQueryBo;
import com.ruoyi.zbf.domain.ZbfMessage;
import com.ruoyi.zbf.service.IZbfMessageService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Arrays;
import java.util.List;
/**
* 消息Controller

View File

@ -48,6 +48,15 @@ public class BgtWageApplicationVO {
@ApiModelProperty("任务地址")
private String taskAddress;
@ApiModelProperty("用工情况")
private String employmentSituation;
@ApiModelProperty("完工情况")
private String completionSituation;
@ApiModelProperty("任务情况")
private String taskSituation;
@ApiModelProperty("审核状态1审核中 2已审核 3未审核")
private String auditStatus;
}

View File

@ -76,7 +76,7 @@ public interface IBgtProjectTaskProgressService extends IServicePlus<BgtProjectT
Boolean fbsAudit(BgtProjectTaskProgress bo);
/**
* 根据任务Id查询任务最新进度-列表
* 根据任务Id查询各个任务最新进度-列表
*/
List<BgtProjectTaskProgress> getProgressByTaskIds(List<Long> taskIds);

View File

@ -3,6 +3,7 @@ package com.ruoyi.common.util;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.bgt.domain.vo.BgtAttendanceCountVO;
import com.ruoyi.bgt.domain.vo.BgtDayAttendanceCountVO;
import com.ruoyi.zbf.domain.vo.ZbfDayAttendanceCountVO;
import java.math.BigDecimal;
import java.math.RoundingMode;
@ -123,4 +124,39 @@ public class DataUtil {
Period period = Period.between(birth, now);
return period.getYears();
}
//--------------------------------------------------------总包方-----------------------------------------------------
public static List<ZbfDayAttendanceCountVO> zbfFillMissingDates(List<ZbfDayAttendanceCountVO> countVOS, LocalDate startDate, LocalDate endDate) {
// 使用 HashSet 存储已有的日期,方便快速查找
Set<LocalDate> existingDates = new HashSet<>();
for (ZbfDayAttendanceCountVO vo : countVOS) {
existingDates.add(vo.getDate());
}
// 创建一个新的列表,用于存储补充后的结果
List<ZbfDayAttendanceCountVO> filledList = new ArrayList<>(countVOS);
// 遍历日期范围,补充缺失的日期
LocalDate currentDate = startDate;
while (!currentDate.isAfter(endDate)) {
if (!existingDates.contains(currentDate)) {
// 如果当前日期不在已有日期集合中,创建一个新的 BgtAttendanceCountVO 对象并添加到结果列表中
filledList.add(new ZbfDayAttendanceCountVO(0,currentDate));
}
// 日期递增一天
currentDate = currentDate.plusDays(1);
}
// 对结果列表按日期排序
filledList.sort(Comparator.comparing(ZbfDayAttendanceCountVO::getDate));
return filledList;
}
}

View File

@ -7,7 +7,7 @@ import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
@ApiModel("分包商任务进度列表图对象")
@ApiModel("分包商任务进度列表图对象")
public class FbsProgressListVO {
@ApiModelProperty("主键ID")

View File

@ -10,7 +10,6 @@ import java.math.BigDecimal;
@ApiModel("分包商项目分包列表")
public class FbsProjectSubcontractingListVO {
@ApiModelProperty("主键ID")
private Long id;
@ -20,19 +19,18 @@ public class FbsProjectSubcontractingListVO {
@ApiModelProperty("项目地址")
private String projectAddress;
/** 标段ID */
@ApiModelProperty("标段ID")
private Long sectionId;
/** 分包主题 */
@ApiModelProperty("分包主题")
private String subName;
/** 分包描述 */
@ApiModelProperty("分包描述")
private String subDescribe;
/** 分包金额 */
@ApiModelProperty("分包金额")
private BigDecimal subAmount;
/** 资质要求 */
@ApiModelProperty("资质要求")
private String qualification;

View File

@ -15,7 +15,7 @@ import lombok.experimental.Accessors;
@Data
@NoArgsConstructor
@Accessors(chain = true)
@ApiModel("App包工头项目详情-任务进度视图对象")
@ApiModel("App分包商项目详情-任务进度视图对象")
public class FbsProjectTaskDetailProgressVO{
@ApiModelProperty("总进度")

View File

@ -17,7 +17,7 @@ import java.math.BigDecimal;
@Data
@NoArgsConstructor
@Accessors(chain = true)
@ApiModel("App包工头项目详情-结算情况视图对象")
@ApiModel("App分包商项目详情-结算情况视图对象")
public class FbsProjectTaskDetailWageVO {
@ApiModelProperty("总金额")

View File

@ -1,10 +1,11 @@
package com.ruoyi.wgz.mapper;
import com.ruoyi.bgt.domain.vo.BgtDayAttendanceCountVO;
import com.ruoyi.wgz.domain.WgzAttendance;
import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
import com.ruoyi.common.core.mybatisplus.cache.MybatisPlusRedisCache;
import com.ruoyi.bgt.domain.vo.BgtAttendanceCountVO;
import com.ruoyi.bgt.domain.vo.BgtDayAttendanceCountVO;
import com.ruoyi.common.core.mybatisplus.cache.MybatisPlusRedisCache;
import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
import com.ruoyi.wgz.domain.WgzAttendance;
import com.ruoyi.zbf.domain.vo.ZbfDayAttendanceCountVO;
import org.apache.ibatis.annotations.CacheNamespace;
import org.apache.ibatis.annotations.Param;
@ -28,8 +29,13 @@ public interface WgzAttendanceMapper extends BaseMapperPlus<WgzAttendance> {
List<BgtDayAttendanceCountVO> countDayByTaskId(@Param("taskId") Long taskId, @Param("beginDate")LocalDate beginDate
, @Param("endDate")LocalDate endDate);
List<ZbfDayAttendanceCountVO> countDayByProjectId(@Param("projectId") Long projectId, @Param("beginDate")LocalDate beginDate
, @Param("endDate")LocalDate endDate);
Integer dayTotalNum(@Param("taskId") Long taskId, @Param("date")LocalDate date);
Integer dayTotalNumByProjectId(@Param("projectId") Long projectId, @Param("date")LocalDate date);
Integer monthTotalNum(@Param("taskId") Long taskId, @Param("beginDate")LocalDate beginDate
, @Param("endDate")LocalDate endDate);
}

View File

@ -15,6 +15,7 @@ import com.ruoyi.wgz.bo.res.WgzAppCardReplacementApplicationRes;
import com.ruoyi.wgz.bo.res.WgzAppPunchTheCalendarRecordRes;
import com.ruoyi.wgz.bo.res.WgzAppUserClockingConditionRes;
import com.ruoyi.wgz.domain.WgzAttendance;
import com.ruoyi.zbf.domain.vo.ZbfDayAttendanceCountVO;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
@ -115,10 +116,20 @@ public interface IWgzAttendanceService extends IServicePlus<WgzAttendance> {
List<BgtDayAttendanceCountVO> countDayByTaskId(Long taskId, LocalDate beginDate, LocalDate endDate);
/**
* 统计某天应打卡人数
* 统计项目每天打卡情况
*/
List<ZbfDayAttendanceCountVO> countDayByProjectId(Long projectId, LocalDate beginDate, LocalDate endDate);
/**
* 统计任务某天应打卡人数
*/
Integer dayTotalNum(Long taskId,LocalDate date);
/**
* 统计项目某天应打卡人数
*/
Integer dayTotalNumByProjectId(Long projectId,LocalDate date);
Integer monthTotalNum(Long taskId,LocalDate beginDate, LocalDate endDate);
/**
* 总体考勤情况-统计

View File

@ -37,6 +37,7 @@ import com.ruoyi.wgz.domain.WgzReissueacard;
import com.ruoyi.wgz.mapper.WgzAttendanceMapper;
import com.ruoyi.wgz.service.IWgzAttendanceService;
import com.ruoyi.wgz.service.IWgzReissueacardService;
import com.ruoyi.zbf.domain.vo.ZbfDayAttendanceCountVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@ -459,11 +460,21 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
return baseMapper.countDayByTaskId(taskId, beginDate, endDate);
}
@Override
public List<ZbfDayAttendanceCountVO> countDayByProjectId(Long projectId, LocalDate beginDate, LocalDate endDate) {
return baseMapper.countDayByProjectId(projectId, beginDate, endDate);
}
@Override
public Integer dayTotalNum(Long taskId,LocalDate date){
return baseMapper.dayTotalNum(taskId,date);
}
@Override
public Integer dayTotalNumByProjectId(Long projectId, LocalDate date) {
return baseMapper.dayTotalNumByProjectId(projectId,date);
}
@Override
public Integer monthTotalNum(Long taskId,LocalDate beginDate, LocalDate endDate){
return baseMapper.monthTotalNum(taskId,beginDate,endDate);

View File

@ -0,0 +1,21 @@
package com.ruoyi.zbf.domain.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
@ApiModel("总包方任务进度列表查询对象")
public class ZbfProgressListDTO {
/** 分页大小 */
@ApiModelProperty("分页大小")
private Integer pageSize;
/** 当前页数 */
@ApiModelProperty("当前页数")
private Integer pageNum;
@ApiModelProperty("项目ID")
private Long projectId;
}

View File

@ -0,0 +1,25 @@
package com.ruoyi.zbf.domain.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
@Data
@ApiModel("分包商项目分包申请列表查询条件")
public class ZbfProjectSubApplyListDTO {
@ApiModelProperty("分页大小")
private Integer pageSize;
/** 当前页数 */
@ApiModelProperty("当前页数")
private Integer pageNum;
@ApiModelProperty("分包ID")
@NotNull(message = "分包ID不能为空")
private Long subId;
@ApiModelProperty("名字")
private String username;
}

View File

@ -0,0 +1,19 @@
package com.ruoyi.zbf.domain.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("分包商项目切换列表查询条件")
public class ZbfProjectSwitchListDTO {
@ApiModelProperty("分页大小")
private Integer pageSize;
/** 当前页数 */
@ApiModelProperty("当前页数")
private Integer pageNum;
@ApiModelProperty("项目名称")
private String projectName;
}

View File

@ -0,0 +1,19 @@
package com.ruoyi.zbf.domain.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("分包商项目分包切换列表查询条件")
public class ZbfSubSwitchListDTO {
@ApiModelProperty("分页大小")
private Integer pageSize;
/** 当前页数 */
@ApiModelProperty("当前页数")
private Integer pageNum;
@ApiModelProperty("总包方用户")
private Long zbfUserId;
}

View File

@ -0,0 +1,26 @@
package com.ruoyi.zbf.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel("总包方考勤统计")
public class ZbfAttendanceCountVO {
@ApiModelProperty("人员总数")
private Integer totalCount;
@ApiModelProperty("到岗人数")
private Integer reportToDutyNum;
@ApiModelProperty("到岗率")
private Integer rate;
@ApiModelProperty("列表")
List<ZbfDayAttendanceCountVO> countList;
}

View File

@ -0,0 +1,33 @@
package com.ruoyi.zbf.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.time.LocalDate;
/**
* 考勤打卡对象 wgz_attendance
*
* @author ruoyi
* @date 2025-02-20
*/
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("务工者每天考勤打卡统计对象")
public class ZbfDayAttendanceCountVO {
@ApiModelProperty("到岗人数")
private Integer reportToDutyNum;
@ApiModelProperty("日期")
private LocalDate date;
}

View File

@ -0,0 +1,23 @@
package com.ruoyi.zbf.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("总包方用工数量统计")
public class ZbfPersonCountVO {
@ApiModelProperty("人员总数")
private Integer totalCount;
@ApiModelProperty("班组长")
private Integer bgtCount;
@ApiModelProperty("务工者")
private Integer wgzCount;
}

View File

@ -0,0 +1,21 @@
package com.ruoyi.zbf.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
@ApiModel("总包方项目进度列表视图对象")
public class ZbfProgressListVO {
@ApiModelProperty("主键ID")
private Long id;
@ApiModelProperty("进度")
private Integer progress;
@ApiModelProperty("项目名称")
private String taskName;
}

View File

@ -0,0 +1,27 @@
package com.ruoyi.zbf.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
/**
* 包工头项目任务进度对象 bgt_project_task_progress
*
* @author ruoyi
* @date 2025-02-18
*/
@Data
@NoArgsConstructor
@Accessors(chain = true)
@ApiModel("App总包方项目详情-任务进度视图对象")
public class ZbfProjectDetailProgressVO {
@ApiModelProperty("总进度")
private Integer totalProgress = 0;
@ApiModelProperty("进度")
private Integer progress = 0;
}

View File

@ -0,0 +1,21 @@
package com.ruoyi.zbf.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel("总包方项目详情-标段信息")
public class ZbfProjectDetailSectionVO {
@ApiModelProperty("包总数")
private Integer subNumber;
@ApiModelProperty("标段列表")
private List<ZbfProjectSectionListVO> sectionList;
}

View File

@ -0,0 +1,29 @@
package com.ruoyi.zbf.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("总包方项目详情")
public class ZbfProjectDetailVO {
@ApiModelProperty("主键ID")
private Long id;
@ApiModelProperty("项目名称")
private String projectName;
@ApiModelProperty("单位名称")
private String unitName;
@ApiModelProperty("项目地址")
private String projectAddress;
@ApiModelProperty("项目图片")
private String projectImg;
@ApiModelProperty("项目状态(0-未开工1-已开工2已竣工3已停工)")
private String projectStatus;
}

View File

@ -0,0 +1,33 @@
package com.ruoyi.zbf.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
/**
* 包工头项目任务进度对象 bgt_project_task_progress
*
* @author ruoyi
* @date 2025-02-18
*/
@Data
@NoArgsConstructor
@Accessors(chain = true)
@ApiModel("App总包方项目详情-付款情况视图对象")
public class ZbfProjectDetailWageVO {
@ApiModelProperty("总金额")
private BigDecimal totalAmount;
@ApiModelProperty("已结算金额")
private BigDecimal payAmount;
@ApiModelProperty("劳务工资")
private BigDecimal wgzAmount;
}

View File

@ -7,7 +7,7 @@ import lombok.Data;
import java.util.List;
@Data
@ApiModel("分包商项目列表")
@ApiModel("总包方项目列表")
public class ZbfProjectListVO {
@ApiModelProperty("主键ID")

View File

@ -7,7 +7,7 @@ import lombok.Data;
import java.util.List;
@Data
@ApiModel("分包商项目标段列表")
@ApiModel("总包方项目标段列表")
public class ZbfProjectSectionListVO {
@ApiModelProperty("主键ID")

View File

@ -0,0 +1,40 @@
package com.ruoyi.zbf.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("总包方项目分包申请列表")
public class ZbfProjectSubcontractingApplyListVO {
@ApiModelProperty("主键ID")
private Long id;
@ApiModelProperty("项目ID")
private Long projectId;
@ApiModelProperty("标段ID")
private Long sectionId;
@ApiModelProperty("分包ID")
private Long subId;
@ApiModelProperty("分包商用户ID")
@JsonFormat(shape = JsonFormat.Shape.STRING)
private Long fbsUserId;
@ApiModelProperty("姓名")
private String username;
@ApiModelProperty("电话")
private String phone;
@ApiModelProperty("电话")
private String avatarName;
@ApiModelProperty("申请状态0申请中 1已同意 2已拒绝 3 已取消)")
private String applyStatus;
}

View File

@ -0,0 +1,53 @@
package com.ruoyi.zbf.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
/**
* 总包方项目分包对象 zbf_project_subcontracting
*
* @author ruoyi
* @date 2025-02-17
*/
@Data
@Accessors(chain = true)
@ApiModel("总包方项目分包详情视图对象")
public class ZbfProjectSubcontractingDetailVO {
/** 主键ID */
@ApiModelProperty("主键ID")
private Long id;
@ApiModelProperty("项目ID")
private Long projectId;
@ApiModelProperty("标段ID")
private Long sectionId;
@ApiModelProperty("标段名")
private String sectionName;
@ApiModelProperty("分包主题")
private String subName;
@ApiModelProperty("分包描述")
private String subDescribe;
@ApiModelProperty("分包金额")
private BigDecimal subAmount;
@ApiModelProperty("资质要求")
private String qualification;
@ApiModelProperty("分包商用户ID")
private Long userId;
@ApiModelProperty("备注")
private String remark;
}

View File

@ -1,5 +1,6 @@
package com.ruoyi.zbf.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -7,7 +8,7 @@ import lombok.Data;
import java.math.BigDecimal;
@Data
@ApiModel("分包商项目分包列表")
@ApiModel("总包方项目分包列表")
public class ZbfProjectSubcontractingListVO {
@ -36,6 +37,10 @@ public class ZbfProjectSubcontractingListVO {
@ApiModelProperty("资质要求")
private String qualification;
@ApiModelProperty("用户Id")
@JsonFormat(shape = JsonFormat.Shape.STRING)
private Long userId;
@ApiModelProperty("申请状态0=申请中,1=已同意,2=已拒绝,3=已取消)")
private String applyStatus;

View File

@ -0,0 +1,89 @@
package com.ruoyi.zbf.domain.vo;
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;
/**
* 分包商工资申请对象 fbs_wage_application
*
* @author ruoyi
* @date 2025-03-26
*/
@Data
@NoArgsConstructor
@Accessors(chain = true)
@ApiModel("总包方工资申请审核视图对象")
public class ZbfWageApplicationVO {
@ApiModelProperty("主键ID")
private Long id;
@ApiModelProperty("项目ID")
private Long projectId;
@ApiModelProperty("项目名称")
private String projectName;
@ApiModelProperty("标段ID")
private Long sectionId;
@ApiModelProperty("分包ID")
private Long subId;
@ApiModelProperty("分包主题")
private String subName;
@ApiModelProperty("任务地址(项目地址)")
private String projectAddress;
@ApiModelProperty("申请人ID")
private Long userId;
@ApiModelProperty("申请人")
private String username;
@ApiModelProperty("银行")
private String bank;
@ApiModelProperty("银行卡号")
private String cardNo;
@ApiModelProperty("联系电话")
private String phone;
@ApiModelProperty("申请金额")
private BigDecimal applicantAmount;
@ApiModelProperty("申请时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
private LocalDateTime applyTime;
@ApiModelProperty("用工情况")
private String employmentSituation;
@ApiModelProperty("完工情况")
private String completionSituation;
@ApiModelProperty("任务情况")
private String taskSituation;
@ApiModelProperty("审核状态1审核中 2已审核 3未通过")
private String auditStatus;
@ApiModelProperty("审核人Id")
private Long reviewerId;
@ApiModelProperty("审核人名字")
private String reviewerName;
@ApiModelProperty("备注")
private String remark;
}

View File

@ -7,6 +7,8 @@ import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
import com.ruoyi.fbs.domain.dto.FbsProjectSectionListDTO;
import com.ruoyi.fbs.domain.vo.FbsProjectSectionListVO;
import com.ruoyi.zbf.domain.ZbfProjectSection;
import com.ruoyi.zbf.domain.dto.ZbfSubSwitchListDTO;
import com.ruoyi.zbf.domain.vo.ZbfProjectSectionListVO;
import org.apache.ibatis.annotations.CacheNamespace;
import org.apache.ibatis.annotations.Param;
@ -23,4 +25,7 @@ public interface ZbfProjectSectionMapper extends BaseMapperPlus<ZbfProjectSectio
// 查询分包商已加入的项目标段
Page<FbsProjectSectionListVO> joinSectionList(@Param("page") Page<FbsProjectSectionListDTO> page, @Param("dto") FbsProjectSectionListDTO dto);
// 总包方分包切换列表
Page<ZbfProjectSectionListVO> zbfSubSwitchList(@Param("page") Page<ZbfSubSwitchListDTO> page, @Param("dto") ZbfSubSwitchListDTO dto);
}

View File

@ -1,9 +1,13 @@
package com.ruoyi.zbf.mapper;
import com.ruoyi.zbf.domain.ZbfProjectSubcontractingApply;
import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.mybatisplus.cache.MybatisPlusRedisCache;
import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
import com.ruoyi.zbf.domain.ZbfProjectSubcontractingApply;
import com.ruoyi.zbf.domain.dto.ZbfProjectSubApplyListDTO;
import com.ruoyi.zbf.domain.vo.ZbfProjectSubcontractingApplyListVO;
import org.apache.ibatis.annotations.CacheNamespace;
import org.apache.ibatis.annotations.Param;
/**
* 总包方项目分包申请Mapper接口
@ -15,4 +19,7 @@ import org.apache.ibatis.annotations.CacheNamespace;
@CacheNamespace(implementation = MybatisPlusRedisCache.class, eviction = MybatisPlusRedisCache.class)
public interface ZbfProjectSubcontractingApplyMapper extends BaseMapperPlus<ZbfProjectSubcontractingApply> {
//总包方获取分包商申请列表
Page<ZbfProjectSubcontractingApplyListVO> getFbsList(@Param("page") Page<ZbfProjectSubApplyListDTO> page, @Param("dto") ZbfProjectSubApplyListDTO dto);
}

View File

@ -7,6 +7,8 @@ import com.ruoyi.fbs.domain.dto.FbsProjectSectionListDTO;
import com.ruoyi.fbs.domain.vo.FbsProjectSectionListVO;
import com.ruoyi.zbf.bo.ZbfProjectSectionQueryBo;
import com.ruoyi.zbf.domain.ZbfProjectSection;
import com.ruoyi.zbf.domain.dto.ZbfSubSwitchListDTO;
import com.ruoyi.zbf.domain.vo.ZbfProjectSectionListVO;
import java.util.Collection;
import java.util.List;
@ -61,4 +63,10 @@ public interface IZbfProjectSectionService extends IServicePlus<ZbfProjectSectio
* 分包商查询自己的项目分包列表
*/
TableDataInfo<FbsProjectSectionListVO> fbsSubList(FbsProjectSectionListDTO dto) ;
/**
* 总包方分包切换列表
*/
TableDataInfo<ZbfProjectSectionListVO> zbfSubSwitchList(ZbfSubSwitchListDTO dto);
}

View File

@ -8,10 +8,11 @@ import com.ruoyi.fbs.domain.dto.FbsProjectListDTO;
import com.ruoyi.fbs.domain.vo.*;
import com.ruoyi.zbf.bo.ZbfProjectQueryBo;
import com.ruoyi.zbf.domain.ZbfProject;
import com.ruoyi.zbf.domain.dto.ZbfProgressListDTO;
import com.ruoyi.zbf.domain.dto.ZbfProjectAddDTO;
import com.ruoyi.zbf.domain.dto.ZbfProjectListDTO;
import com.ruoyi.zbf.domain.vo.ZbfProjectCountVO;
import com.ruoyi.zbf.domain.vo.ZbfProjectListVO;
import com.ruoyi.zbf.domain.dto.ZbfProjectSwitchListDTO;
import com.ruoyi.zbf.domain.vo.*;
import java.util.Collection;
import java.util.List;
@ -139,10 +140,57 @@ public interface IZbfProjectService extends IServicePlus<ZbfProject> {
TableDataInfo<ZbfProjectListVO> queryZbfList(ZbfProjectListDTO dto);
/**
* 总包方查询自建项目统计
* 总包方项目统计
*/
ZbfProjectCountVO projectCount();
/**
* 总包方项目列表(精简)
*/
TableDataInfo<ZbfProject> conciseList(ZbfProjectListDTO dto);
/**
* 总包方项目信息
*/
ZbfProjectDetailVO zbfInfo(Long id);
/**
* 总包方项目详情-标段信息
*/
ZbfProjectDetailSectionVO sectionInfo(Long id);
/**
* 总包方项目详情-用工数量
*/
ZbfPersonCountVO personCount(Long id);
/**
* 总包方项目详情-考勤情况
*/
ZbfAttendanceCountVO attendanceCount(Long id);
/**
* 总包方项目详情-用工进度
*/
ZbfProjectDetailProgressVO zbfProgress(Long projectId);
/**
* 总包方项目详情-用工进度列表
*/
TableDataInfo<ZbfProgressListVO> zbfProgressList(ZbfProgressListDTO dto);
/**
* 总包方项目详情-付款情况
*/
ZbfProjectDetailWageVO zbfWage(Long projectId);
/**
* 总包方项目详情-付款情况查看更多
*/
TableDataInfo<ZbfWageApplicationVO> zbfWageList(Long projectId);
/**
* 总包方项目详情-项目切换
*/
TableDataInfo<ZbfProject> zbfSwitchList(ZbfProjectSwitchListDTO dto);
}

View File

@ -1,9 +1,11 @@
package com.ruoyi.zbf.service;
import com.ruoyi.zbf.domain.ZbfProjectSubcontractingApply;
import com.ruoyi.zbf.bo.ZbfProjectSubcontractingApplyQueryBo;
import com.ruoyi.common.core.mybatisplus.core.IServicePlus;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.zbf.bo.ZbfProjectSubcontractingApplyQueryBo;
import com.ruoyi.zbf.domain.ZbfProjectSubcontractingApply;
import com.ruoyi.zbf.domain.dto.ZbfProjectSubApplyListDTO;
import com.ruoyi.zbf.domain.vo.ZbfProjectSubcontractingApplyListVO;
import java.util.Collection;
import java.util.List;
@ -57,4 +59,11 @@ public interface IZbfProjectSubcontractingApplyService extends IServicePlus<ZbfP
* 总包方选择分包商
*/
Boolean choose(Long id);
/**
* 总包方查看分包商申请列表
*/
TableDataInfo<ZbfProjectSubcontractingApplyListVO> getFbsList(ZbfProjectSubApplyListDTO dto);
}

View File

@ -53,4 +53,5 @@ public interface IZbfProjectSubcontractingService extends IServicePlus<ZbfProjec
* @return
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -3,6 +3,7 @@ package com.ruoyi.zbf.service;
import com.ruoyi.common.core.domain.entity.ZbfUser;
import com.ruoyi.common.core.mybatisplus.core.IServicePlus;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.domain.dto.CompanyAuthenticateDTO;
import com.ruoyi.zbf.bo.ZbfUserQueryBo;
import java.util.Collection;
@ -62,4 +63,9 @@ public interface IZbfUserService extends IServicePlus<ZbfUser> {
* 通过userId查询用户
*/
ZbfUser selectUserByUserId(Long userId);
/**
* 企业认证
*/
Long authenticate(CompanyAuthenticateDTO dto);
}

View File

@ -15,6 +15,9 @@ import com.ruoyi.fbs.domain.vo.FbsProjectSubcontractingListVO;
import com.ruoyi.zbf.bo.ZbfProjectSectionQueryBo;
import com.ruoyi.zbf.domain.ZbfProjectSection;
import com.ruoyi.zbf.domain.ZbfProjectSubcontracting;
import com.ruoyi.zbf.domain.dto.ZbfSubSwitchListDTO;
import com.ruoyi.zbf.domain.vo.ZbfProjectSectionListVO;
import com.ruoyi.zbf.domain.vo.ZbfProjectSubcontractingListVO;
import com.ruoyi.zbf.mapper.ZbfProjectSectionMapper;
import com.ruoyi.zbf.service.IZbfProjectSectionService;
import com.ruoyi.zbf.service.IZbfProjectSubcontractingService;
@ -121,4 +124,31 @@ public class ZbfProjectSectionServiceImpl extends ServicePlusImpl<ZbfProjectSect
return PageUtils.buildDataInfo(queryVOPage);
}
@Override
public TableDataInfo<ZbfProjectSectionListVO> zbfSubSwitchList(ZbfSubSwitchListDTO dto) {
Page<ZbfSubSwitchListDTO> queryDTOPage = new Page<>();
queryDTOPage.setCurrent(dto.getPageNum());
queryDTOPage.setSize(dto.getPageSize());
dto.setZbfUserId(SecurityUtils.getAppUserId());
Page<ZbfProjectSectionListVO> queryVOPage = baseMapper.zbfSubSwitchList(queryDTOPage, dto);
for (ZbfProjectSectionListVO sectionListVO : queryVOPage.getRecords()){
//分包处理
List<ZbfProjectSubcontractingListVO> subListVO = new ArrayList<>();
//查询标段下的所有的分包
List<ZbfProjectSubcontracting> subList = zbfProjectSubcontractingService.list(Wrappers.<ZbfProjectSubcontracting>lambdaQuery()
.eq(ZbfProjectSubcontracting::getSectionId, sectionListVO.getId())
);
for (ZbfProjectSubcontracting sub : subList){
ZbfProjectSubcontractingListVO zbfProjectSubcontractingListVO = new ZbfProjectSubcontractingListVO();
BeanUtil.copyProperties(sub, zbfProjectSubcontractingListVO);
zbfProjectSubcontractingListVO.setProjectAddress(sectionListVO.getProjectAddress());
subListVO.add(zbfProjectSubcontractingListVO);
}
sectionListVO.setSubList(subListVO);
}
return PageUtils.buildDataInfo(queryVOPage);
}
}

View File

@ -6,14 +6,18 @@ import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.bgt.domain.BgtProjectRecruitApply;
import com.ruoyi.bgt.domain.BgtProjectTaskProgress;
import com.ruoyi.bgt.domain.BgtWageApplication;
import com.ruoyi.bgt.service.IBgtProjectRecruitApplyService;
import com.ruoyi.bgt.service.IBgtProjectTaskProgressService;
import com.ruoyi.bgt.service.IBgtWageApplicationService;
import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.ProjectStatus;
import com.ruoyi.common.enums.RecruitApplyStatus;
import com.ruoyi.common.enums.SubcontractingApplyStatus;
import com.ruoyi.common.util.DataUtil;
import com.ruoyi.common.utils.PageUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.fbs.domain.FbsProjectTask;
@ -23,19 +27,14 @@ import com.ruoyi.fbs.domain.dto.FbsProjectListDTO;
import com.ruoyi.fbs.domain.vo.*;
import com.ruoyi.fbs.service.IFbsProjectTaskService;
import com.ruoyi.fbs.service.IFbsWageApplicationService;
import com.ruoyi.wgz.service.IWgzAttendanceService;
import com.ruoyi.zbf.bo.ZbfProjectQueryBo;
import com.ruoyi.zbf.domain.ZbfProject;
import com.ruoyi.zbf.domain.ZbfProjectSection;
import com.ruoyi.zbf.domain.ZbfProjectSubcontracting;
import com.ruoyi.zbf.domain.ZbfProjectSubcontractingApply;
import com.ruoyi.zbf.domain.dto.ZbfProjectAddDTO;
import com.ruoyi.zbf.domain.dto.ZbfProjectListDTO;
import com.ruoyi.zbf.domain.dto.ZbfProjectSectionAddDTO;
import com.ruoyi.zbf.domain.dto.ZbfProjectSubcontractingAddDTO;
import com.ruoyi.zbf.domain.vo.ZbfProjectCountVO;
import com.ruoyi.zbf.domain.vo.ZbfProjectListVO;
import com.ruoyi.zbf.domain.vo.ZbfProjectSectionListVO;
import com.ruoyi.zbf.domain.vo.ZbfProjectSubcontractingListVO;
import com.ruoyi.zbf.domain.dto.*;
import com.ruoyi.zbf.domain.vo.*;
import com.ruoyi.zbf.mapper.ZbfProjectMapper;
import com.ruoyi.zbf.service.IZbfProjectSectionService;
import com.ruoyi.zbf.service.IZbfProjectService;
@ -46,6 +45,8 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
@ -72,6 +73,11 @@ public class ZbfProjectServiceImpl extends ServicePlusImpl<ZbfProjectMapper, Zbf
private IFbsWageApplicationService fbsWageApplicationService;
@Autowired
private IBgtWageApplicationService bgtWageApplicationService;
@Autowired
private IBgtProjectRecruitApplyService bgtProjectRecruitApplyService;
@Autowired
private IWgzAttendanceService wgzAttendanceService;
@Override
public ZbfProject queryById(Long id) {
@ -632,9 +638,161 @@ public class ZbfProjectServiceImpl extends ServicePlusImpl<ZbfProjectMapper, Zbf
List<ZbfProject> list = list(wrapper);
zbfProjectCountVO.setAllCount(list.size());
long startCount = list.stream().filter(zbfProject -> StrUtil.equals(zbfProject.getProjectStatus(), ProjectStatus.START.getCode())).count();
long completeCcount = list.stream().filter(zbfProject -> StrUtil.equals(zbfProject.getProjectStatus(), ProjectStatus.COMPLETE.getCode())).count();
long completeCount = list.stream().filter(zbfProject -> StrUtil.equals(zbfProject.getProjectStatus(), ProjectStatus.COMPLETE.getCode())).count();
zbfProjectCountVO.setStartCount((int) startCount);
zbfProjectCountVO.setCompleteCount((int) completeCcount);
zbfProjectCountVO.setCompleteCount((int) completeCount);
return zbfProjectCountVO;
}
@Override
public TableDataInfo<ZbfProject> conciseList(ZbfProjectListDTO dto) {
LambdaQueryWrapper<ZbfProject> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ZbfProject::getUserId, SecurityUtils.getAppUserId());
wrapper.like(StrUtil.isNotBlank(dto.getProjectName()), ZbfProject::getProjectName, dto.getProjectName());
wrapper.eq(StrUtil.isNotBlank(dto.getProjectStatus()), ZbfProject::getProjectStatus, dto.getProjectStatus());
Page<ZbfProject> result = page(PageUtils.buildPage(), wrapper);
return PageUtils.buildDataInfo(result);
}
@Override
public ZbfProjectDetailVO zbfInfo(Long id) {
ZbfProject project = getById(id);
return BeanUtil.copyProperties(project, ZbfProjectDetailVO.class);
}
@Override
public ZbfProjectDetailSectionVO sectionInfo(Long id) {
ZbfProjectDetailSectionVO zbfProjectDetailSectionVO = new ZbfProjectDetailSectionVO();
//标段处理
List<ZbfProjectSectionListVO> sectionListVO = new ArrayList<>();
int subNumber = 0;
//查询项目下的所有标段
List<ZbfProjectSection> sectionList = zbfProjectSectionService.list(Wrappers.<ZbfProjectSection>lambdaQuery()
.eq(ZbfProjectSection::getProjectId, id));
for (ZbfProjectSection zbfProjectSection : sectionList) {
//查询标段下的所有的分包
List<ZbfProjectSubcontracting> subList = zbfProjectSubcontractingService.list(Wrappers.<ZbfProjectSubcontracting>lambdaQuery()
.eq(ZbfProjectSubcontracting::getSectionId, zbfProjectSection.getId()));
ZbfProjectSectionListVO zbfProjectSectionListVO = new ZbfProjectSectionListVO();
BeanUtil.copyProperties(zbfProjectSection, zbfProjectSectionListVO);
zbfProjectSectionListVO.setSubList(BeanUtil.copyToList(subList, ZbfProjectSubcontractingListVO.class));
subNumber += subList.size();
sectionListVO.add(zbfProjectSectionListVO);
}
zbfProjectDetailSectionVO.setSectionList(sectionListVO);
zbfProjectDetailSectionVO.setSubNumber(subNumber);
return zbfProjectDetailSectionVO;
}
@Override
public ZbfPersonCountVO personCount(Long id) {
ZbfPersonCountVO zbfPersonCountVO = new ZbfPersonCountVO();
List<FbsProjectTask> list = fbsProjectTaskService.list(Wrappers.<FbsProjectTask>lambdaQuery()
.eq(FbsProjectTask::getProjectId, id)
.isNotNull(FbsProjectTask::getUserId)
);
zbfPersonCountVO.setBgtCount(list.size());
List<Long> taskIds = list.stream().map(FbsProjectTask::getId).collect(Collectors.toList());
zbfPersonCountVO.setWgzCount(0);
if(CollectionUtil.isNotEmpty(taskIds)){
//任务下的招工
List<BgtProjectRecruitApply> recruitApplyList = bgtProjectRecruitApplyService.list(Wrappers.<BgtProjectRecruitApply>lambdaQuery()
.in(BgtProjectRecruitApply::getTaskId, taskIds)
.in(BgtProjectRecruitApply::getStatus, RecruitApplyStatus.getWorkStatus())
);
zbfPersonCountVO.setWgzCount(recruitApplyList.size());
}
zbfPersonCountVO.setTotalCount(zbfPersonCountVO.getBgtCount()+zbfPersonCountVO.getWgzCount());
return zbfPersonCountVO;
}
@Override
public ZbfAttendanceCountVO attendanceCount(Long id) {
ZbfAttendanceCountVO vo = new ZbfAttendanceCountVO();
LocalDate now = LocalDate.now();
LocalDate previousDate = now.minusDays(7);
List<ZbfDayAttendanceCountVO> zbfDayAttendanceCountVOS = wgzAttendanceService.countDayByProjectId(id, previousDate, now);
List<ZbfDayAttendanceCountVO> countList = DataUtil.zbfFillMissingDates(zbfDayAttendanceCountVOS, previousDate, now);
ZbfDayAttendanceCountVO zbfDayAttendanceCountVO = countList.get(countList.size() - 1);
vo.setReportToDutyNum(zbfDayAttendanceCountVO.getReportToDutyNum());
vo.setCountList(countList);
Integer total = wgzAttendanceService.dayTotalNumByProjectId(id, now);
vo.setTotalCount(total);
vo.setRate(0);
if(total!=null && total>0){
int rate = new BigDecimal(vo.getReportToDutyNum()).divide(new BigDecimal(total), 2, RoundingMode.HALF_UP)
.multiply(new BigDecimal(100)).intValue();
vo.setRate(rate);
}
return vo;
}
@Override
public ZbfProjectDetailProgressVO zbfProgress(Long projectId) {
//查询所有创建的任务
List<FbsProjectTask> taskList = fbsProjectTaskService.list(Wrappers.<FbsProjectTask>lambdaQuery()
.eq(FbsProjectTask::getProjectId, projectId)
);
ZbfProjectDetailProgressVO vo = new ZbfProjectDetailProgressVO();
List<Long> taskIds = taskList.stream().map(FbsProjectTask::getId).collect(Collectors.toList());
if(CollectionUtil.isNotEmpty(taskIds)){
List<BgtProjectTaskProgress> progressByTaskIds = bgtProjectTaskProgressService.getProgressByTaskIds(taskIds);
vo.setProgress(progressByTaskIds.stream().mapToInt(BgtProjectTaskProgress::getProgress).sum());
vo.setTotalProgress(taskList.size() * 100);
}
return vo;
}
@Override
public TableDataInfo<ZbfProgressListVO> zbfProgressList(ZbfProgressListDTO dto) {
Page<ZbfProgressListVO> voPage = new Page<>();
//查询所有创建的任务
List<FbsProjectTask> taskList = fbsProjectTaskService.list(Wrappers.<FbsProjectTask>lambdaQuery()
.eq(FbsProjectTask::getProjectId, dto)
);
List<Long> taskIds = taskList.stream().map(FbsProjectTask::getId).collect(Collectors.toList());
if(CollectionUtil.isNotEmpty(taskIds)){
TableDataInfo<BgtProjectTaskProgress> progressByTaskIds = bgtProjectTaskProgressService.getProgressByTaskIds(dto.getPageSize(), dto.getPageNum(), taskIds);
voPage.setTotal(progressByTaskIds.getTotal());
voPage.setRecords(BeanUtil.copyToList(progressByTaskIds.getRows(), ZbfProgressListVO.class));
}
return PageUtils.buildDataInfo(voPage);
}
@Override
public ZbfProjectDetailWageVO zbfWage(Long projectId) {
ZbfProjectDetailWageVO vo = new ZbfProjectDetailWageVO();
List<ZbfProjectSubcontracting> subList = zbfProjectSubcontractingService.list(Wrappers.<ZbfProjectSubcontracting>lambdaQuery()
.eq(ZbfProjectSubcontracting::getProjectId, projectId)
);
List<Long> subIds = subList.stream().map(ZbfProjectSubcontracting::getId).collect(Collectors.toList());
//总金额
BigDecimal totalAmount = subList.stream().map(ZbfProjectSubcontracting::getSubAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
vo.setTotalAmount(totalAmount);
//接收金额
vo.setPayAmount(BigDecimal.ZERO);
if(CollectionUtil.isNotEmpty(subIds)){
List<FbsWageApplication> passList= fbsWageApplicationService.getPassListBySubIds(subIds);
BigDecimal payAmount = passList.stream().map(FbsWageApplication::getApplicantAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
vo.setPayAmount(payAmount);
}
return vo;
}
@Override
public TableDataInfo<ZbfWageApplicationVO> zbfWageList(Long projectId) {
return null;
}
@Override
public TableDataInfo<ZbfProject> zbfSwitchList(ZbfProjectSwitchListDTO dto) {
LambdaQueryWrapper<ZbfProject> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ZbfProject::getUserId, SecurityUtils.getAppUserId());
wrapper.like(StrUtil.isNotBlank(dto.getProjectName()), ZbfProject::getProjectName, dto.getProjectName());
Page<ZbfProject> result = page(PageUtils.buildPage(), wrapper);
return PageUtils.buildDataInfo(result);
}
}

View File

@ -22,6 +22,8 @@ import com.ruoyi.zbf.domain.ZbfMessage;
import com.ruoyi.zbf.domain.ZbfProject;
import com.ruoyi.zbf.domain.ZbfProjectSubcontracting;
import com.ruoyi.zbf.domain.ZbfProjectSubcontractingApply;
import com.ruoyi.zbf.domain.dto.ZbfProjectSubApplyListDTO;
import com.ruoyi.zbf.domain.vo.ZbfProjectSubcontractingApplyListVO;
import com.ruoyi.zbf.mapper.ZbfProjectSubcontractingApplyMapper;
import com.ruoyi.zbf.service.IZbfMessageService;
import com.ruoyi.zbf.service.IZbfProjectService;
@ -231,4 +233,13 @@ public class ZbfProjectSubcontractingApplyServiceImpl extends ServicePlusImpl<Zb
// fbsMessageService.operationBatch(USERTYPE_FBS,SecurityUtils.getAppUserId(),list.stream().map(FbsProjectTaskApply::getId).collect(Collectors.toList()),SqlHelper.table(FbsProjectTaskApply.class).getTableName());
return super.updateBatchById(list);
}
@Override
public TableDataInfo<ZbfProjectSubcontractingApplyListVO> getFbsList(ZbfProjectSubApplyListDTO dto) {
Page<ZbfProjectSubApplyListDTO> queryDTOPage = new Page<>();
queryDTOPage.setCurrent(dto.getPageNum());
queryDTOPage.setSize(dto.getPageSize());
Page<ZbfProjectSubcontractingApplyListVO> fbsList = baseMapper.getFbsList(queryDTOPage, dto);
return PageUtils.buildDataInfo(fbsList);
}
}

View File

@ -8,10 +8,15 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.entity.ZbfUser;
import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.domain.Company;
import com.ruoyi.common.domain.dto.CompanyAuthenticateDTO;
import com.ruoyi.common.service.ICompanyService;
import com.ruoyi.common.utils.PageUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.zbf.bo.ZbfUserQueryBo;
import com.ruoyi.zbf.mapper.ZbfUserMapper;
import com.ruoyi.zbf.service.IZbfUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Collection;
@ -27,6 +32,9 @@ import java.util.Map;
@Service
public class ZbfUserServiceImpl extends ServicePlusImpl<ZbfUserMapper, ZbfUser> implements IZbfUserService {
@Autowired
private ICompanyService companyService;
@Override
public ZbfUser queryById(Long id){
return getById(id);
@ -107,4 +115,14 @@ public class ZbfUserServiceImpl extends ServicePlusImpl<ZbfUserMapper, ZbfUser>
public ZbfUser selectUserByUserId(Long userId) {
return baseMapper.selectOne(new LambdaQueryWrapper<ZbfUser>().eq(ZbfUser::getUserId, userId));
}
@Override
public Long authenticate(CompanyAuthenticateDTO dto) {
Company company = BeanUtil.copyProperties(dto, Company.class);
companyService.save(company);
ZbfUser zbfUser = selectUserByUserId(SecurityUtils.getAppUserId());
zbfUser.setCompanyId(company.getId());
updateById(zbfUser);
return company.getId();
}
}

View File

@ -288,7 +288,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
bpra.task_id
from bgt_project_recruit_apply bpra
left join wgz_user wu on bpra.user_id = wu.user_id
left join fbs_project_task fpt on fpt.id = bpr.task_id
left join fbs_project_task fpt on fpt.id = bpra.task_id
<where>
<if test="dto.username !=null and dto.username !='' ">
and wu.username like concat('%', #{dto.username}, '%')
@ -303,7 +303,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
AND bpra.status in ('5','6')
</if>
</where>
order by bpra.create_time desc
order by bpra.id desc
</select>

View File

@ -82,7 +82,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
bwa.id,
bwa.username,
bwa.project_name,
bwa.audit_status
bwa.audit_status,
bwa.employment_situation,
bwa.completion_situation,
bwa.task_situation
from bgt_wage_application bwa
<where>
<if test="dto.reviewerId != null ">

View File

@ -52,12 +52,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
group by date order by date
</select>
<select id="countDayByProjectId" resultType="com.ruoyi.zbf.domain.vo.ZbfDayAttendanceCountVO">
select count(1) as reportToDutyNum,
date
from wgz_attendance
where date between #{beginDate} and #{endDate}
and (clock_in_time is not null or clock_out_time is not null)
and recruit_id in (select id from bgt_project_recruit where project_id = #{projectId} )
group by date order by date
</select>
<select id="dayTotalNum" resultType="Integer">
select count(1) from bgt_project_recruit_apply where entry_time &lt;= #{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="dayTotalNumByProjectId" resultType="Integer">
select count(1) from bgt_project_recruit_apply where entry_time &lt;= #{date} and ((leave_time is null and status = '5')or leave_time>=#{date})
and recruit_id in (select id from bgt_project_recruit where project_id = #{projectId} )
</select>
<select id="monthTotalNum" resultType="Integer">
select count(1)
from bgt_project_recruit_apply

View File

@ -31,4 +31,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="zbfSubSwitchList" resultType="com.ruoyi.zbf.domain.vo.ZbfProjectSectionListVO">
SELECT zps.id,zps.project_id,zps.section_name
FROM zbf_project_section zps
left JOIN zbf_project zp ON zps.project_id = zp.id
WHERE zp.user_id = #{dto.zbfUserId}
</select>
</mapper>

View File

@ -19,5 +19,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="remark" column="remark"/>
</resultMap>
<select id="getFbsList" resultType="com.ruoyi.zbf.domain.vo.ZbfProjectSubcontractingApplyListVO">
select zpsa.id,
zpsa.project_id,
zpsa.section_id,
zpsa.sub_id,
zpsa.fbs_user_id,
zpsa.apply_status,
fu.username,
fu.phone,
fu.avatar_name
from zbf_project_subcontracting_apply zpsa left join fbs_user fu on zpsa.fbs_user_id = fu.user_id
where zpsa.sub_id = #{dto.subId}
<if test="dto.username != null and dto.username != ''">
and fu.username like concat('%', #{dto.username}, '%')
</if>
</select>
</mapper>