总包方

This commit is contained in:
zt
2025-04-14 16:06:50 +08:00
parent b52be6eeab
commit f80a9b6e39
16 changed files with 184 additions and 31 deletions

View File

@ -104,7 +104,7 @@ public class AppBgtMessageController extends BaseController {
BigDecimal allPay = iWgzAttendanceService.getAllPay(userId, recruitApplyId, recruit.getRecruitAmount());
//获取个人已结算工资
BigDecimal alreadyPay = iWgzPayCalculationService.getAlreadyPay(userId, recruitApplyId);
res.setIsPay(allPay.equals(alreadyPay));
res.setIsPay(allPay.compareTo(alreadyPay)==0);
}
return AjaxResult.success(res);
}
@ -115,5 +115,9 @@ public class AppBgtMessageController extends BaseController {
return iBgtMessageService.unAuditList(dto);
}
@ApiOperation("消息详情")
@GetMapping("/detail/{id}")
public AjaxResult<BgtMessage> detail(@PathVariable(value = "id") Long id) {
return AjaxResult.success(iBgtMessageService.getById(id));
}
}

View File

@ -3,10 +3,13 @@ package com.ruoyi.web.controller.fbs;
import cn.hutool.core.bean.BeanUtil;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.fbs.domain.vo.FbsProjectSubcontractingDetailVO;
import com.ruoyi.zbf.domain.ZbfProjectSubcontracting;
import com.ruoyi.zbf.domain.ZbfProjectSubcontractingApply;
import com.ruoyi.zbf.service.IZbfProjectSectionService;
import com.ruoyi.zbf.service.IZbfProjectService;
import com.ruoyi.zbf.service.IZbfProjectSubcontractingApplyService;
import com.ruoyi.zbf.service.IZbfProjectSubcontractingService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -34,6 +37,7 @@ public class AppFbsProjectSubcontractingController extends BaseController {
private final IZbfProjectSubcontractingService iZbfProjectSubcontractingService;
private final IZbfProjectSectionService zbfProjectSectionService;
private final IZbfProjectService zbfProjectService;
private final IZbfProjectSubcontractingApplyService iZbfProjectSubcontractingApplyService;
@ApiOperation("分包商查询项目分包详细信息")
@GetMapping("/{id}")
@ -43,6 +47,10 @@ public class AppFbsProjectSubcontractingController extends BaseController {
FbsProjectSubcontractingDetailVO vo = BeanUtil.copyProperties(zbfProjectSubcontracting, FbsProjectSubcontractingDetailVO.class);
vo.setSectionName(zbfProjectSectionService.getById(vo.getSectionId()).getSectionName());
vo.setProjectImg(zbfProjectService.getById(vo.getProjectId()).getProjectImg());
ZbfProjectSubcontractingApply subcontractingApply = iZbfProjectSubcontractingApplyService.queryBySubIdAndFbsUserId(id, SecurityUtils.getAppUserId());
if (subcontractingApply != null) {
vo.setApplyStatus(subcontractingApply.getApplyStatus());
}
return AjaxResult.success(vo);
}

View File

@ -175,4 +175,27 @@ public class AppFbsProjectTaskController extends BaseController {
return AjaxResult.success(vo);
}
@ApiOperation("分包商完成任务")
@Log(title = "分包商完成任务", businessType = BusinessType.UPDATE)
@RepeatSubmit
@PutMapping("/complete/{taskId}")
public AjaxResult<Boolean> complete(@NotNull(message = "主键不能为空")
@PathVariable("taskId") Long taskId) {
return AjaxResult.success(iFbsProjectTaskService.complete(taskId));
}
@ApiOperation("分包商完成任务前检查")
@GetMapping("/checkBeforeComplete/{taskId}")
public AjaxResult<Boolean> checkBeforeComplete(@NotNull(message = "主键不能为空")
@PathVariable("taskId") Long taskId) {
return AjaxResult.success(iFbsProjectTaskService.checkBeforeComplete(taskId));
}
@ApiOperation("分包商完成任务提醒消息")
@PostMapping("/sendRemindMessage/{taskId}")
public AjaxResult<Boolean> sendRemindMessage(@NotNull(message = "主键不能为空")
@PathVariable("taskId") Long taskId) {
return AjaxResult.success(iFbsProjectTaskService.sendRemindMessage(taskId));
}
}

View File

@ -14,6 +14,7 @@ import com.ruoyi.wgz.bo.rests.WgzAppUserAllRecruitmentTwo;
import com.ruoyi.zbf.domain.dto.ZbfProjectTaskUserDTO;
import org.springframework.validation.annotation.Validated;
import java.time.LocalDate;
import java.util.Collection;
import java.util.List;
@ -156,7 +157,7 @@ public interface IBgtProjectRecruitApplyService extends IServicePlus<BgtProjectR
/**
* 批量退场
*/
void quitBatch(Long taskId);
void quitBatch(Long taskId, LocalDate leaveTime);
/**
* 评分

View File

@ -42,7 +42,6 @@ import com.ruoyi.wgz.service.*;
import com.ruoyi.zbf.domain.dto.ZbfProjectTaskUserDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -567,9 +566,9 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl<BgtProjec
return updateById(recruitApply);
}
@Async
@Override
public void quitBatch(Long taskId) {
@Transactional(rollbackFor = Exception.class)
public void quitBatch(Long taskId, LocalDate leaveTime) {
BgtProjectRecruitApplyQueryDTO dto = new BgtProjectRecruitApplyQueryDTO();
dto.setTaskId(taskId);
dto.setStatus(Collections.singletonList(RecruitApplyStatus.WORKING.getCode()));
@ -580,10 +579,13 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl<BgtProjec
List<WgzMessage> wgzMessages = new ArrayList<>();
List<Long> ids = new ArrayList<>();
for (BgtProjectRecruitApplyVO vo : bgtProjectRecruitApplyVOS) {
// if(quitCheck(vo.getId())){
// throw new BaseException("务工者还有未审批的申请,无法完成!");
// }
ids.add(vo.getId());
HashMap<String, String> mp = new HashMap<>();
mp.put("projectName", vo.getRecruitName());
mp.put("auditor", "系统");
mp.put("auditor", SecurityUtils.getUsername());
Map<String, String> map = bgtMessage(mp, BGT_TYPE_EXIT, false);
WgzMessage wgzMessage = new WgzMessage()
.setSenderType(USERTYPE_BGT)
@ -601,7 +603,7 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl<BgtProjec
iWgzMessageService.saveBatch(wgzMessages);
LambdaUpdateWrapper<BgtProjectRecruitApply> wrapper = new LambdaUpdateWrapper<>();
wrapper.in(BgtProjectRecruitApply::getId, ids)
.set(BgtProjectRecruitApply::getLeaveTime, LocalDate.now())
.set(BgtProjectRecruitApply::getLeaveTime, leaveTime)
.set(BgtProjectRecruitApply::getStatus, RecruitApplyStatus.OUT_WORK.getCode());
update(wrapper);
}

View File

@ -15,11 +15,11 @@ import com.ruoyi.bgt.domain.vo.BgtProjectTaskProgressDetailVO;
import com.ruoyi.bgt.domain.vo.BgtProjectTaskProgressVO;
import com.ruoyi.bgt.mapper.BgtProjectTaskProgressMapper;
import com.ruoyi.bgt.service.IBgtMessageService;
import com.ruoyi.bgt.service.IBgtProjectRecruitApplyService;
import com.ruoyi.bgt.service.IBgtProjectTaskProgressService;
import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.AuditStatus;
import com.ruoyi.common.enums.ProjectTaskStatus;
import com.ruoyi.common.exception.BaseException;
import com.ruoyi.common.utils.PageUtils;
import com.ruoyi.common.utils.SecurityUtils;
@ -54,6 +54,8 @@ public class BgtProjectTaskProgressServiceImpl extends ServicePlusImpl<BgtProjec
private IFbsMessageService fbsMessageService;
@Autowired
private IBgtMessageService bgtMessageService;
@Autowired
private IBgtProjectRecruitApplyService recruitApplyService;
@Override
public BgtProjectTaskProgress queryById(Long id){
@ -176,14 +178,8 @@ public class BgtProjectTaskProgressServiceImpl extends ServicePlusImpl<BgtProjec
@Override
public Boolean fbsAudit(BgtProjectTaskProgress bo) {
boolean b = updateById(bo);
FbsProjectTask task = taskService.getById(bo.getTaskId());
if(bo.getProgress() == 100){
//更改任务状态
taskService.lambdaUpdate().set(FbsProjectTask::getStatus, ProjectTaskStatus.COMPLETE.getCode())
.eq(FbsProjectTask::getId, bo.getTaskId()).update();
}
boolean b = updateById(bo);
//分包商发消息到包工头
HashMap<String, String> mp = new HashMap<>();
@ -203,9 +199,7 @@ public class BgtProjectTaskProgressServiceImpl extends ServicePlusImpl<BgtProjec
.setMessageSmallType(BGT_SMALL_PROGRESS)
.setIsOperation(OPERATION_NO);
bgtMessageService.sendAMessage(bgtMessage);
fbsMessageService.operation(USERTYPE_BGT, bo.getUploaderId(), USERTYPE_FBS, SecurityUtils.getAppUserId(), bo.getId(), SqlHelper.table(BgtProjectTaskProgress.class).getTableName());
return b;
}

View File

@ -18,6 +18,7 @@ public class BgtMessageConstant {
public static final String BGT_SMALL_MAKE_UP = "4"; //小类型-补卡
public static final String BGT_SMALL_REPORT_MAKE_UP = "5"; //小类型-日报补卡
public static final String BGT_SMALL_PROGRESS = "6"; //小类型-任务进度
public static final String BGT_SMALL_SYSTEM = "7"; //小类型-系统
public static final List<String> AUDIT_TYPE = Arrays.asList("2", "3", "4", "5");
/**
@ -75,11 +76,11 @@ public class BgtMessageConstant {
public static final String BGT_SETTLEMENT_APPLY_HEADLINE = "您正在申请【%s】任务,总共【%s】元的工资结算操作";
public static final String BGT_SETTLEMENT_APPLY_SUBHEADING = "您已成功发起金额为【%s】元的工资结算操作请耐心等待回复";
//系统->包工头 消息类型
public static final String BGT_TYPE_TASK = "6"; //任务报名
public static final String BGT_TYPE_TASK_CANCEL = "7"; //任务取消
public static final String BGT_TYPE_SETTLEMENT = "8"; //结算
//提醒
/**

View File

@ -35,12 +35,16 @@ public class FbsMessageConstant {
//进度审批
public static final String FBS_PROGRESS_HEADLINE = "您【%s】任务的上传进度已审批";
public static final String FBS_PROGRESS_SUBHEADING = "您【%s】任务的上传进度,审核人【%s】已%s";
//审批提醒
public static final String FBS_REMIND_HEADLINE = "请尽快完成【%s】任务下的所有审批";
public static final String FBS_REMIND_SUBHEADING = "分包商【%s】提醒您完成【%s】任务的所有审批";
//分包商->包工头 消息类型
public static final String FBS_TYPE_SIGN_UP = "1"; //包工头报名
public static final String FBS_TYPE_PAY = "2"; //付款
public static final String FBS_TYPE_PROGRESS = "3"; //进度
public static final String FBS_TYPE_PROGRESS = "3"; //进度
public static final String FBS_TYPE_REMIND = "9"; //提醒
@ -130,6 +134,10 @@ public class FbsMessageConstant {
map.put(HEADLINE, String.format(FBS_TO_ZBF_SETTLEMENT_APPLY_HEADLINE, auditor));
map.put(SUBHEADING, String.format(FBS_TO_ZBF_SETTLEMENT_APPLY_SUBHEADING, auditor,amount));
break;
case "9":
map.put(HEADLINE, String.format(FBS_REMIND_HEADLINE, projectName));
map.put(SUBHEADING, String.format(FBS_REMIND_SUBHEADING, auditor,projectName));
break;
default:
break;
}

View File

@ -1,8 +1,12 @@
package com.ruoyi.common.service;
import com.ruoyi.bgt.domain.BgtMessage;
import com.ruoyi.bgt.domain.BgtProjectRecruit;
public interface IAsyncService {
//异步修改招工状态为招满
void updateRecruitStatus(BgtProjectRecruit recruit);
//异步发送提醒消息
void sendMessageToBgt(BgtMessage bgtMessage);
}

View File

@ -1,11 +1,10 @@
package com.ruoyi.common.service.impl;
import com.ruoyi.bgt.domain.BgtMessage;
import com.ruoyi.bgt.domain.BgtProjectRecruit;
import com.ruoyi.bgt.service.IBgtProjectRecruitService;
import com.ruoyi.common.service.IAsyncService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@Service
@ -19,4 +18,9 @@ public class AsyncServiceImpl implements IAsyncService {
recruit.setStatus("2");
iBgtProjectRecruitService.updateById(recruit);
}
@Override
public void sendMessageToBgt(BgtMessage bgtMessage) {
}
}

View File

@ -71,4 +71,7 @@ public class FbsProjectSubcontractingDetailVO {
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("申请状态0=申请中,1=已同意,2=已拒绝,3=已取消)")
private String applyStatus;
}

View File

@ -149,5 +149,18 @@ public interface IFbsProjectTaskService extends IServicePlus<FbsProjectTask> {
*/
TableDataInfo<FbsProjectTask> bgtTaskList(ZbfProjectTaskDTO dto);
/**
* 分包商完成任务
*/
Boolean complete(Long taskId);
/**
* 分包商完成任务前检查
*/
Boolean checkBeforeComplete(Long taskId);
/**
* 分包商完成任务提醒消息
*/
Boolean sendRemindMessage( Long taskId);
}

View File

@ -6,13 +6,17 @@ 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.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.ruoyi.bgt.domain.BgtMessage;
import com.ruoyi.bgt.domain.BgtProjectRecruitApply;
import com.ruoyi.bgt.domain.BgtProjectTaskProgress;
import com.ruoyi.bgt.domain.BgtWageApplication;
import com.ruoyi.bgt.domain.dto.BgtProjectRecruitApplyQueryDTO;
import com.ruoyi.bgt.domain.dto.BgtProjectTaskUserDTO;
import com.ruoyi.bgt.domain.dto.BgtTaskDTO;
import com.ruoyi.bgt.domain.dto.BgtWageApplicationQueryDTO;
import com.ruoyi.bgt.domain.vo.*;
import com.ruoyi.bgt.service.IBgtMessageService;
import com.ruoyi.bgt.service.IBgtProjectRecruitApplyService;
import com.ruoyi.bgt.service.IBgtProjectTaskProgressService;
import com.ruoyi.bgt.service.IBgtWageApplicationService;
@ -46,16 +50,20 @@ import com.ruoyi.zbf.service.IZbfProjectSectionService;
import com.ruoyi.zbf.service.IZbfProjectService;
import org.springframework.beans.factory.annotation.Autowired;
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.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
import static com.ruoyi.common.constants.BgtMessageConstant.*;
import static com.ruoyi.common.constants.FbsMessageConstant.FBS_TYPE_REMIND;
import static com.ruoyi.common.constants.FbsMessageConstant.fbsMessage;
import static com.ruoyi.common.constants.WgzAndBgtMessageConstant.USERTYPE_BGT;
import static com.ruoyi.common.constants.WgzAndBgtMessageConstant.USERTYPE_FBS;
/**
* 分包商项目任务Service业务层处理
*
@ -83,6 +91,8 @@ public class FbsProjectTaskServiceImpl extends ServicePlusImpl<FbsProjectTaskMap
private IZbfProjectSectionService zbfProjectSectionService;
@Autowired
private IFbsProjectTaskService fbsProjectTaskService;
@Autowired
private IBgtMessageService bgtMessageService;
@Override
public FbsProjectTask queryById(Long id){
@ -121,10 +131,18 @@ public class FbsProjectTaskServiceImpl extends ServicePlusImpl<FbsProjectTaskMap
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean insert(FbsProjectTask bo) {
FbsProjectTask add = BeanUtil.toBean(bo, FbsProjectTask.class);
validEntityBeforeSave(add);
return save(add);
//修改项目状态
ZbfProject byId = zbfProjectService.getById(add.getProjectId());
if(byId.getProjectStatus().equals(ProjectTaskStatus.COMPLETE.getCode())){
byId.setProjectStatus(ProjectTaskStatus.PROGRESS.getCode());
zbfProjectService.updateById(byId);
}
return save(add);
}
@Override
@ -454,4 +472,56 @@ public class FbsProjectTaskServiceImpl extends ServicePlusImpl<FbsProjectTaskMap
Page<FbsProjectTask> page = page(PageUtils.buildPage(), wrapper);
return PageUtils.buildDataInfo(page);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean complete(Long taskId) {
//更改任务状态
FbsProjectTask task = getById(taskId);
task.setStatus(ProjectTaskStatus.COMPLETE.getCode());
//批量退场
recruitApplyService.quitBatch(taskId,LocalDate.now());
return updateById(task);
}
@Override
public Boolean checkBeforeComplete(Long taskId) {
boolean result = true;
BgtProjectRecruitApplyQueryDTO dto = new BgtProjectRecruitApplyQueryDTO();
dto.setTaskId(taskId);
dto.setStatus(Collections.singletonList(RecruitApplyStatus.WORKING.getCode()));
List<BgtProjectRecruitApplyVO> bgtProjectRecruitApplyVOS = recruitApplyService.appAllList(dto);
if (CollectionUtil.isNotEmpty(bgtProjectRecruitApplyVOS)) {
for (BgtProjectRecruitApplyVO vo : bgtProjectRecruitApplyVOS) {
if (recruitApplyService.quitCheck(vo.getId())) {
result= false;
break;
}
}
}
return result;
}
@Override
public Boolean sendRemindMessage(Long taskId) {
FbsProjectTask task = getById(taskId);
HashMap<String, String> mp = new HashMap<>();
mp.put("projectName", task.getTaskName());
mp.put("auditor", SecurityUtils.getUsername());
Map<String, String> map = fbsMessage(mp, FBS_TYPE_REMIND, true);
BgtMessage bgtMessage = new BgtMessage()
.setSenderId(SecurityUtils.getAppUserId())
.setSenderType(USERTYPE_FBS)
.setRecipientType(USERTYPE_BGT)
.setRecipientId(task.getUserId())
.setHeadline(map.get(HEADLINE))
.setSubheading(map.get(SUBHEADING))
.setTableId(task.getId())
.setTableName(SqlHelper.table(FbsProjectTask.class).getTableName())
.setMessageLargeType(BGT_LARGE_OTHER)
.setMessageSmallType(BGT_SMALL_SYSTEM);
return bgtMessageService.sendAMessage(bgtMessage);
}
}

View File

@ -65,5 +65,9 @@ public interface IZbfProjectSubcontractingApplyService extends IServicePlus<ZbfP
*/
TableDataInfo<ZbfProjectSubcontractingApplyListVO> getFbsList(ZbfProjectSubApplyListDTO dto);
/**
* 根据分包商Id和分包ID查询申请
*/
ZbfProjectSubcontractingApply queryBySubIdAndFbsUserId(Long subId, Long fbsUserId);
}

View File

@ -220,7 +220,8 @@ public class ZbfProjectServiceImpl extends ServicePlusImpl<ZbfProjectMapper, Zbf
.eq(ZbfProjectSubcontractingApply::getProjectId, projectId)
.eq(ZbfProjectSubcontractingApply::getFbsUserId, SecurityUtils.getAppUserId())
.in(ZbfProjectSubcontractingApply::getApplyStatus, SubcontractingApplyStatus.getApplyStatus()));
List<Long> applyIds = applyList.stream().map(ZbfProjectSubcontractingApply::getSubId).collect(Collectors.toList());
Map<Long, String> map = applyList.stream().collect(Collectors.toMap(ZbfProjectSubcontractingApply::getSubId, ZbfProjectSubcontractingApply::getApplyStatus));
//标段处理
List<FbsProjectSectionListVO> sectionListVO = new ArrayList<>();
@ -235,11 +236,12 @@ public class ZbfProjectServiceImpl extends ServicePlusImpl<ZbfProjectMapper, Zbf
.eq(ZbfProjectSubcontracting::getSectionId, zbfProjectSection.getId()));
//排除掉未申请和已同意的分包
for (ZbfProjectSubcontracting sub : subList) {
if (!applyIds.contains(sub.getId())) {
if (map.get(sub.getId()) == null) {
continue;
}
FbsProjectSubcontractingListVO fbsProjectSubcontractingListVO = new FbsProjectSubcontractingListVO();
BeanUtil.copyProperties(sub, fbsProjectSubcontractingListVO);
fbsProjectSubcontractingListVO.setApplyStatus(map.get(sub.getId()));
subListVO.add(fbsProjectSubcontractingListVO);
}
if (CollectionUtil.isEmpty(subListVO)) {
@ -485,6 +487,8 @@ public class ZbfProjectServiceImpl extends ServicePlusImpl<ZbfProjectMapper, Zbf
for (ZbfProjectSubcontracting sub : subList) {
FbsProjectSubcontractingListVO fbsProjectSubcontractingListVO = new FbsProjectSubcontractingListVO();
BeanUtil.copyProperties(sub, fbsProjectSubcontractingListVO);
//写死 已加入和已竣工的申请状态都是已同意
fbsProjectSubcontractingListVO.setApplyStatus(SubcontractingApplyStatus.PASS.getCode());
subListVO.add(fbsProjectSubcontractingListVO);
}
if (CollectionUtil.isEmpty(subListVO)) {
@ -617,14 +621,14 @@ public class ZbfProjectServiceImpl extends ServicePlusImpl<ZbfProjectMapper, Zbf
.eq(ZbfProjectSection::getProjectId, zbfProjectListVO.getId()));
for (ZbfProjectSection zbfProjectSection : sectionList) {
//分包处理
List<ZbfProjectSubcontractingListVO> subListVO = new ArrayList<>();
//查询标段下的所有的分包
List<ZbfProjectSubcontracting> subList = zbfProjectSubcontractingService.list(Wrappers.<ZbfProjectSubcontracting>lambdaQuery()
.eq(ZbfProjectSubcontracting::getSectionId, zbfProjectSection.getId()));
List<ZbfProjectSubcontractingListVO> zbfProjectSubcontractingListVOS = BeanUtil.copyToList(subList, ZbfProjectSubcontractingListVO.class);
ZbfProjectSectionListVO zbfProjectSectionListVO = new ZbfProjectSectionListVO();
BeanUtil.copyProperties(zbfProjectSection, zbfProjectSectionListVO);
zbfProjectSectionListVO.setSubList(subListVO);
zbfProjectSectionListVO.setSubList(zbfProjectSubcontractingListVOS);
sectionListVO.add(zbfProjectSectionListVO);
}
zbfProjectListVO.setSectionList(sectionListVO);

View File

@ -251,4 +251,14 @@ public class ZbfProjectSubcontractingApplyServiceImpl extends ServicePlusImpl<Zb
Page<ZbfProjectSubcontractingApplyListVO> fbsList = baseMapper.getFbsList(queryDTOPage, dto);
return PageUtils.buildDataInfo(fbsList);
}
@Override
public ZbfProjectSubcontractingApply queryBySubIdAndFbsUserId(Long subId, Long fbsUserId) {
LambdaQueryWrapper<ZbfProjectSubcontractingApply> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ZbfProjectSubcontractingApply::getSubId, subId);
wrapper.eq(ZbfProjectSubcontractingApply::getFbsUserId, fbsUserId);
wrapper.orderByDesc(ZbfProjectSubcontractingApply::getId);
List<ZbfProjectSubcontractingApply> list = baseMapper.selectList(wrapper);
return CollectionUtil.getFirst(list);
}
}