diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/bgt/AppBgtMessageController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/bgt/AppBgtMessageController.java index e2149eb..376551e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/bgt/AppBgtMessageController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/bgt/AppBgtMessageController.java @@ -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 detail(@PathVariable(value = "id") Long id) { + return AjaxResult.success(iBgtMessageService.getById(id)); + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/fbs/AppFbsProjectSubcontractingController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/fbs/AppFbsProjectSubcontractingController.java index 88f4009..357ee70 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/fbs/AppFbsProjectSubcontractingController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/fbs/AppFbsProjectSubcontractingController.java @@ -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); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/fbs/AppFbsProjectTaskController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/fbs/AppFbsProjectTaskController.java index 63e3ebf..3d2387c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/fbs/AppFbsProjectTaskController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/fbs/AppFbsProjectTaskController.java @@ -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 complete(@NotNull(message = "主键不能为空") + @PathVariable("taskId") Long taskId) { + return AjaxResult.success(iFbsProjectTaskService.complete(taskId)); + } + + @ApiOperation("分包商完成任务前检查") + @GetMapping("/checkBeforeComplete/{taskId}") + public AjaxResult checkBeforeComplete(@NotNull(message = "主键不能为空") + @PathVariable("taskId") Long taskId) { + return AjaxResult.success(iFbsProjectTaskService.checkBeforeComplete(taskId)); + } + + @ApiOperation("分包商完成任务提醒消息") + @PostMapping("/sendRemindMessage/{taskId}") + public AjaxResult sendRemindMessage(@NotNull(message = "主键不能为空") + @PathVariable("taskId") Long taskId) { + return AjaxResult.success(iFbsProjectTaskService.sendRemindMessage(taskId)); + } + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/bgt/service/IBgtProjectRecruitApplyService.java b/ruoyi-system/src/main/java/com/ruoyi/bgt/service/IBgtProjectRecruitApplyService.java index b112122..b87f1f1 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/bgt/service/IBgtProjectRecruitApplyService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/bgt/service/IBgtProjectRecruitApplyService.java @@ -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 wgzMessages = new ArrayList<>(); List ids = new ArrayList<>(); for (BgtProjectRecruitApplyVO vo : bgtProjectRecruitApplyVOS) { +// if(quitCheck(vo.getId())){ +// throw new BaseException("务工者还有未审批的申请,无法完成!"); +// } ids.add(vo.getId()); HashMap mp = new HashMap<>(); mp.put("projectName", vo.getRecruitName()); - mp.put("auditor", "系统"); + mp.put("auditor", SecurityUtils.getUsername()); Map map = bgtMessage(mp, BGT_TYPE_EXIT, false); WgzMessage wgzMessage = new WgzMessage() .setSenderType(USERTYPE_BGT) @@ -601,7 +603,7 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl 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); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/bgt/service/impl/BgtProjectTaskProgressServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/bgt/service/impl/BgtProjectTaskProgressServiceImpl.java index 28c6c4c..b263645 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/bgt/service/impl/BgtProjectTaskProgressServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/bgt/service/impl/BgtProjectTaskProgressServiceImpl.java @@ -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 mp = new HashMap<>(); @@ -203,9 +199,7 @@ public class BgtProjectTaskProgressServiceImpl extends ServicePlusImpl 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"; //结算 + //提醒 /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/common/constants/FbsMessageConstant.java b/ruoyi-system/src/main/java/com/ruoyi/common/constants/FbsMessageConstant.java index 2126839..a64b457 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/common/constants/FbsMessageConstant.java +++ b/ruoyi-system/src/main/java/com/ruoyi/common/constants/FbsMessageConstant.java @@ -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; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/common/service/IAsyncService.java b/ruoyi-system/src/main/java/com/ruoyi/common/service/IAsyncService.java index abe7c8f..36106fe 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/common/service/IAsyncService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/common/service/IAsyncService.java @@ -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); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/common/service/impl/AsyncServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/common/service/impl/AsyncServiceImpl.java index 516041f..a0bdccf 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/common/service/impl/AsyncServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/common/service/impl/AsyncServiceImpl.java @@ -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) { + + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/fbs/domain/vo/FbsProjectSubcontractingDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/fbs/domain/vo/FbsProjectSubcontractingDetailVO.java index 2bf9b63..10861bd 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/fbs/domain/vo/FbsProjectSubcontractingDetailVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/fbs/domain/vo/FbsProjectSubcontractingDetailVO.java @@ -71,4 +71,7 @@ public class FbsProjectSubcontractingDetailVO { @ApiModelProperty("备注") private String remark; + @ApiModelProperty("申请状态(0=申请中,1=已同意,2=已拒绝,3=已取消)") + private String applyStatus; + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/fbs/service/IFbsProjectTaskService.java b/ruoyi-system/src/main/java/com/ruoyi/fbs/service/IFbsProjectTaskService.java index 6e0c62c..ed15912 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/fbs/service/IFbsProjectTaskService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/fbs/service/IFbsProjectTaskService.java @@ -149,5 +149,18 @@ public interface IFbsProjectTaskService extends IServicePlus { */ TableDataInfo bgtTaskList(ZbfProjectTaskDTO dto); + /** + * 分包商完成任务 + */ + Boolean complete(Long taskId); + /** + * 分包商完成任务前检查 + */ + Boolean checkBeforeComplete(Long taskId); + + /** + * 分包商完成任务提醒消息 + */ + Boolean sendRemindMessage( Long taskId); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/fbs/service/impl/FbsProjectTaskServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/fbs/service/impl/FbsProjectTaskServiceImpl.java index 5075c37..3938f75 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/fbs/service/impl/FbsProjectTaskServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/fbs/service/impl/FbsProjectTaskServiceImpl.java @@ -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 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 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 mp = new HashMap<>(); + mp.put("projectName", task.getTaskName()); + mp.put("auditor", SecurityUtils.getUsername()); + Map 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); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/zbf/service/IZbfProjectSubcontractingApplyService.java b/ruoyi-system/src/main/java/com/ruoyi/zbf/service/IZbfProjectSubcontractingApplyService.java index b114b34..997e17a 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/zbf/service/IZbfProjectSubcontractingApplyService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/zbf/service/IZbfProjectSubcontractingApplyService.java @@ -65,5 +65,9 @@ public interface IZbfProjectSubcontractingApplyService extends IServicePlus getFbsList(ZbfProjectSubApplyListDTO dto); + /** + * 根据分包商Id和分包ID查询申请 + */ + ZbfProjectSubcontractingApply queryBySubIdAndFbsUserId(Long subId, Long fbsUserId); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/zbf/service/impl/ZbfProjectServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/zbf/service/impl/ZbfProjectServiceImpl.java index 87ffe17..eefc585 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/zbf/service/impl/ZbfProjectServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/zbf/service/impl/ZbfProjectServiceImpl.java @@ -220,7 +220,8 @@ public class ZbfProjectServiceImpl extends ServicePlusImpl applyIds = applyList.stream().map(ZbfProjectSubcontractingApply::getSubId).collect(Collectors.toList()); + Map map = applyList.stream().collect(Collectors.toMap(ZbfProjectSubcontractingApply::getSubId, ZbfProjectSubcontractingApply::getApplyStatus)); + //标段处理 List sectionListVO = new ArrayList<>(); @@ -235,11 +236,12 @@ public class ZbfProjectServiceImpl extends ServicePlusImpl subListVO = new ArrayList<>(); //查询标段下的所有的分包 List subList = zbfProjectSubcontractingService.list(Wrappers.lambdaQuery() .eq(ZbfProjectSubcontracting::getSectionId, zbfProjectSection.getId())); + List 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); diff --git a/ruoyi-system/src/main/java/com/ruoyi/zbf/service/impl/ZbfProjectSubcontractingApplyServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/zbf/service/impl/ZbfProjectSubcontractingApplyServiceImpl.java index 53f5ab5..3abc751 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/zbf/service/impl/ZbfProjectSubcontractingApplyServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/zbf/service/impl/ZbfProjectSubcontractingApplyServiceImpl.java @@ -251,4 +251,14 @@ public class ZbfProjectSubcontractingApplyServiceImpl extends ServicePlusImpl fbsList = baseMapper.getFbsList(queryDTOPage, dto); return PageUtils.buildDataInfo(fbsList); } + + @Override + public ZbfProjectSubcontractingApply queryBySubIdAndFbsUserId(Long subId, Long fbsUserId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ZbfProjectSubcontractingApply::getSubId, subId); + wrapper.eq(ZbfProjectSubcontractingApply::getFbsUserId, fbsUserId); + wrapper.orderByDesc(ZbfProjectSubcontractingApply::getId); + List list = baseMapper.selectList(wrapper); + return CollectionUtil.getFirst(list); + } }