diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/AppLoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/AppLoginController.java index e20c608..692048b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/AppLoginController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/AppLoginController.java @@ -7,6 +7,7 @@ import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.*; import com.ruoyi.common.core.domain.model.BgtLoginBody; import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.domain.Company; import com.ruoyi.common.service.ICompanyService; import com.ruoyi.common.util.DataUtil; import com.ruoyi.common.utils.SecurityUtils; @@ -114,12 +115,20 @@ public class AppLoginController break; case Constants.FBS: FbsUser fbsUser = fbsUserService.selectUserByPhone(user.getPhonenumber()); - fbsUser.setCompanyName(companyService.getCompanyNameById(fbsUser.getCompanyId())); + Company fbsCompany = companyService.getById(fbsUser.getCompanyId()); + if(fbsCompany != null){ + fbsUser.setCompanyName(fbsCompany.getCompanyName()); + fbsUser.setCreditCode(fbsCompany.getCreditCode()); + } ajax.put("user", fbsUser); break; case Constants.ZBF: ZbfUser zbfUser = zbfUserService.selectUserByPhone(user.getPhonenumber()); - zbfUser.setCompanyName(companyService.getCompanyNameById(zbfUser.getCompanyId())); + Company zbfCompany = companyService.getById(zbfUser.getCompanyId()); + if(zbfCompany != null){ + zbfUser.setCompanyName(zbfCompany.getCompanyName()); + zbfUser.setCreditCode(zbfCompany.getCreditCode()); + } ajax.put("user", zbfUser); break; default: diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/zbf/AppZbfProjectController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/zbf/AppZbfProjectController.java index d1c8a40..4994f6e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/zbf/AppZbfProjectController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/zbf/AppZbfProjectController.java @@ -1,11 +1,13 @@ package com.ruoyi.web.controller.zbf; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; 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.common.enums.ProjectStatus; import com.ruoyi.fbs.domain.FbsWageApplication; import com.ruoyi.fbs.service.IFbsWageApplicationService; import com.ruoyi.wgz.service.IWgzAttendanceService; @@ -153,4 +155,29 @@ public class AppZbfProjectController extends BaseController { return AjaxResult.success(attendanceService.zbfHistogram(dto)); } + @ApiOperation("总包方完成项目前检查") + @GetMapping("/checkBeforeComplete/{projectId}") + public AjaxResult checkBeforeComplete(@NotNull(message = "主键不能为空") + @PathVariable("projectId") Long projectId) { + return AjaxResult.success(iZbfProjectService.checkBeforeComplete(projectId)); + } + + @ApiOperation("总包方完成项目提醒消息") + @PostMapping("/sendRemindMessage/{projectId}") + public AjaxResult sendRemindMessage(@NotNull(message = "主键不能为空") + @PathVariable("projectId") Long projectId) { + return AjaxResult.success(iZbfProjectService.sendRemindMessage(projectId)); + } + + @ApiOperation("总包方完成项目") + @PutMapping("/complete/{projectId}") + public AjaxResult complete(@NotNull(message = "主键不能为空") + @PathVariable("projectId") Long projectId) { + boolean update = iZbfProjectService.update(Wrappers.lambdaUpdate() + .eq(ZbfProject::getId, projectId) + .set(ZbfProject::getProjectStatus, ProjectStatus.COMPLETE.getCode()) + ); + return AjaxResult.success(update); + } + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/zbf/AppZbfProjectSubcontractingApplyController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/zbf/AppZbfProjectSubcontractingApplyController.java index 55ba9bc..268477e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/zbf/AppZbfProjectSubcontractingApplyController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/zbf/AppZbfProjectSubcontractingApplyController.java @@ -37,9 +37,9 @@ public class AppZbfProjectSubcontractingApplyController extends BaseController { @Log(title = "总包方选择分包商", businessType = BusinessType.UPDATE) @RepeatSubmit @PutMapping("/{id}") - public AjaxResult choose(@NotNull(message = "主键不能为空") + public AjaxResult choose(@NotNull(message = "主键不能为空") @PathVariable("id") Long id) { - return toAjax(iZbfProjectSubcontractingApplyService.choose(id)); + return AjaxResult.success(iZbfProjectSubcontractingApplyService.choose(id)); } @ApiOperation("总包方项目分包详情-分包商申请列表") @@ -48,6 +48,13 @@ public class AppZbfProjectSubcontractingApplyController extends BaseController { return iZbfProjectSubcontractingApplyService.getFbsList(dto); } + @ApiOperation("总包方项目分包详情-分包商申请人数") + @GetMapping("/applyNum/{subId}") + public AjaxResult getApplyNum(@NotNull(message = "主键不能为空") + @PathVariable("subId") Long subId) { + return AjaxResult.success(iZbfProjectSubcontractingApplyService.getApplyNum(subId)); + } + @ApiOperation("总包方消息-分包商申请列表") @GetMapping("/message/fbsList") public TableDataInfo getFbsListByApplyId(ZbfProjectSubApplyListDTO dto) { diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/FbsUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/FbsUser.java index e662c16..149d816 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/FbsUser.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/FbsUser.java @@ -160,4 +160,7 @@ public class FbsUser implements Serializable { @TableField(exist = false) private String companyName; + @ApiModelProperty("统一社会信用代码") + @TableField(exist = false) + private String creditCode; } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/ZbfUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/ZbfUser.java index ec48d1f..304346b 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/ZbfUser.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/ZbfUser.java @@ -160,4 +160,8 @@ public class ZbfUser implements Serializable { @TableField(exist = false) private String companyName; + @ApiModelProperty("统一社会信用代码") + @TableField(exist = false) + private String creditCode; + } 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 a64b457..40b9035 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 @@ -17,7 +17,8 @@ public class FbsMessageConstant { public static final String FBS_SMALL_SIGN_UP = "1"; //小类型-包工头报名 public static final String FBS_SMALL_PAY = "2"; //小类型-付款 - public static final String FBS_SMALL_PROGRESS = "3"; //小类型-进度 + public static final String FBS_SMALL_PROGRESS = "3"; //小类型-进度 + public static final String FBS_SMALL_SYSTEM = "4"; //小类型-系统 public static final List AUDIT_TYPE = Arrays.asList("2", "3"); /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/common/constants/ZbfMessageConstant.java b/ruoyi-system/src/main/java/com/ruoyi/common/constants/ZbfMessageConstant.java index 3623e8c..13f2a8f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/common/constants/ZbfMessageConstant.java +++ b/ruoyi-system/src/main/java/com/ruoyi/common/constants/ZbfMessageConstant.java @@ -33,11 +33,14 @@ public class ZbfMessageConstant { //工资审批 public static final String ZBF_PAY_APPLY_HEADLINE = "您【%s】项目【%s】分包工资申请已审批!"; public static final String ZBF_PAY_APPLY_SUBHEADING = "您申请的【%s】项目【%s】分包工资,审核人【%s】已%s!"; - + //任务提醒 + public static final String ZBF_REMIND_HEADLINE = "请尽快完成【%s】任务!"; + public static final String ZBF_REMIND_SUBHEADING = "总包方【%s】提醒您完成【%s】任务!"; //分包商->包工头 消息类型 public static final String ZBF_TYPE_SIGN_UP = "1"; //包工头报名 public static final String ZBF_TYPE_PAY = "2"; //付款 + public static final String ZBF_REMIND = "3"; //提醒 /** * ============================================系统->分包商 模板================================================== @@ -84,6 +87,10 @@ public class ZbfMessageConstant { map.put(HEADLINE, String.format(ZBF_PAY_APPLY_HEADLINE, projectName,subName)); map.put(SUBHEADING, String.format(ZBF_PAY_APPLY_SUBHEADING, projectName,subName, auditor, pass)); break; + case "3": + map.put(HEADLINE, String.format(ZBF_REMIND_HEADLINE, projectName)); + map.put(SUBHEADING, String.format(ZBF_REMIND_SUBHEADING, auditor,projectName)); + break; default: break; } 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 bff2fd6..ac84507 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 @@ -440,8 +440,10 @@ public class FbsProjectTaskServiceImpl extends ServicePlusImpl wageList = wageApplicationService.list(Wrappers.lambdaQuery() .in(BgtWageApplication::getTaskId, taskIds).orderByDesc(BgtWageApplication::getId)); + if (CollectionUtil.isNotEmpty(wageList)){ + vo.setWageApplication(BeanUtil.copyProperties(wageList.get(0), BgtWageApplicationListVO.class)); + } - vo.setWageApplication(BeanUtil.copyProperties(wageList.get(0), BgtWageApplicationListVO.class)); BigDecimal taskAuditAmount = BigDecimal.ZERO; BigDecimal taskApplyAmount= BigDecimal.ZERO; for (BgtWageApplication wage : wageList) { diff --git a/ruoyi-system/src/main/java/com/ruoyi/fbs/service/impl/FbsUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/fbs/service/impl/FbsUserServiceImpl.java index 1d30e20..f4f7618 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/fbs/service/impl/FbsUserServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/fbs/service/impl/FbsUserServiceImpl.java @@ -150,8 +150,10 @@ public class FbsUserServiceImpl extends ServicePlusImpl @Override public FbsUser selectUserByUserId(Long userId) { FbsUser fbsUser = baseMapper.selectOne(new LambdaQueryWrapper().eq(FbsUser::getUserId, userId)); - Company byId = companyService.getById(fbsUser.getCompanyId()); - fbsUser.setCompanyName(byId.getCompanyName()); + if(fbsUser.getCompanyId() !=null){ + Company byId = companyService.getById(fbsUser.getCompanyId()); + fbsUser.setCompanyName(byId.getCompanyName()); + } return fbsUser; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/task/BusinessTask.java b/ruoyi-system/src/main/java/com/ruoyi/task/BusinessTask.java index 714df23..2c32a1e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/task/BusinessTask.java +++ b/ruoyi-system/src/main/java/com/ruoyi/task/BusinessTask.java @@ -173,6 +173,9 @@ public class BusinessTask public void workCardShortage(){ //1、获取所有正在进行中的任务 List ongoingTask = iFbsProjectTaskService.findOngoingTask(); + if(CollectionUtil.isEmpty(ongoingTask)){ + return; + } //2、获取所有招工信息 List taskIds = new ArrayList<>(); for (FbsProjectTask fbsProjectTask : ongoingTask) { @@ -247,6 +250,9 @@ public class BusinessTask public void missingCard(){ //1、获取所有正在进行中的任务 List ongoingTask = iFbsProjectTaskService.findOngoingTask(); + if(CollectionUtil.isEmpty(ongoingTask)){ + return; + } //2、获取所有招工信息 List taskIds = new ArrayList<>(); for (FbsProjectTask fbsProjectTask : ongoingTask) { diff --git a/ruoyi-system/src/main/java/com/ruoyi/zbf/domain/vo/ZbfProjectDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/zbf/domain/vo/ZbfProjectDetailVO.java index bdee448..a9e8232 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/zbf/domain/vo/ZbfProjectDetailVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/zbf/domain/vo/ZbfProjectDetailVO.java @@ -1,9 +1,12 @@ 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 java.time.LocalDateTime; + @Data @ApiModel("总包方项目详情") public class ZbfProjectDetailVO { @@ -35,4 +38,10 @@ public class ZbfProjectDetailVO { @ApiModelProperty("项目状态(0-未开工,1-已开工,2已竣工,3已停工)") private String projectStatus; + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDateTime createTime; + + @ApiModelProperty("备注") + private String remark; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/zbf/service/IZbfProjectService.java b/ruoyi-system/src/main/java/com/ruoyi/zbf/service/IZbfProjectService.java index 3ec928f..7d9256c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/zbf/service/IZbfProjectService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/zbf/service/IZbfProjectService.java @@ -197,4 +197,13 @@ public interface IZbfProjectService extends IServicePlus { */ TableDataInfo zbfSwitchList(ZbfProjectSwitchListDTO dto); + /** + * 总包方完成项目前检查 + */ + Boolean checkBeforeComplete(Long projectId); + + /** + * 总包方完成项目提醒消息 + */ + Boolean sendRemindMessage(Long projectId); } 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 cb91cb3..e904bc7 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 @@ -79,4 +79,9 @@ public interface IZbfProjectSubcontractingApplyService extends IServicePlus list = list(wrapper); zbfProjectCountVO.setAllCount(list.size()); - long startCount = list.stream().filter(zbfProject -> StrUtil.equals(zbfProject.getProjectStatus(), ProjectStatus.START.getCode())).count(); long completeCount = list.stream().filter(zbfProject -> StrUtil.equals(zbfProject.getProjectStatus(), ProjectStatus.COMPLETE.getCode())).count(); - zbfProjectCountVO.setStartCount((int) startCount); zbfProjectCountVO.setCompleteCount((int) completeCount); + zbfProjectCountVO.setStartCount(zbfProjectCountVO.getAllCount()-zbfProjectCountVO.getCompleteCount()); return zbfProjectCountVO; } @@ -958,4 +983,47 @@ public class ZbfProjectServiceImpl extends ServicePlusImpl result = page(PageUtils.buildPage(), wrapper); return PageUtils.buildDataInfo(result); } + + @Override + public Boolean checkBeforeComplete(Long projectId) { + List list = fbsProjectTaskService.list(Wrappers.lambdaQuery() + .eq(FbsProjectTask::getProjectId, projectId) + .ne(FbsProjectTask::getStatus,ProjectStatus.COMPLETE.getCode()) + ); + return CollectionUtil.isEmpty(list); + } + + @Override + public Boolean sendRemindMessage(Long projectId) { + List list = fbsProjectTaskService.list(Wrappers.lambdaQuery() + .eq(FbsProjectTask::getProjectId, projectId) + .ne(FbsProjectTask::getStatus,ProjectStatus.COMPLETE.getCode()) + ); + if (CollectionUtil.isEmpty(list)) { + return true; + } + + ArrayList messages = new ArrayList<>(); + for (FbsProjectTask task : list) { + //总包方发消息到分包商 + HashMap zmp = new HashMap<>(); + zmp.put("projectName", task.getTaskName()); + zmp.put("auditor", SecurityUtils.getUsername()); + Map zmap = zbfMessage(zmp, ZBF_REMIND, true); + FbsMessage fbsMessage = new FbsMessage() + .setSenderType(USERTYPE_ZBF) + .setSenderId(SecurityUtils.getAppUserId()) + .setRecipientType(USERTYPE_FBS) + .setRecipientId(task.getCreateId()) + .setHeadline(zmap.get(HEADLINE)) + .setSubheading(zmap.get(SUBHEADING)) + .setTableId(task.getId()) + .setTableName(SqlHelper.table(FbsProjectTask.class).getTableName()) + .setMessageLargeType(FBS_LARGE_OTHER) + .setMessageSmallType(FBS_SMALL_SYSTEM) + .setIsOperation(OPERATION_NO); + messages.add(fbsMessage); + } + return fbsMessageService.saveBatch(messages); + } } 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 2885a65..914ea66 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 @@ -289,4 +289,13 @@ public class ZbfProjectSubcontractingApplyServiceImpl extends ServicePlusImpl wrapper = Wrappers.lambdaUpdate() + .eq(ZbfProjectSubcontractingApply::getSubId, subId) + .eq(ZbfProjectSubcontractingApply::getApplyStatus, SubcontractingApplyStatus.APPLY.getCode()); + List list = list(wrapper); + return list.size(); + } } diff --git a/ruoyi-system/src/main/resources/mapper/zbf/ZbfProjectMapper.xml b/ruoyi-system/src/main/resources/mapper/zbf/ZbfProjectMapper.xml index 8a8fe17..f543b5b 100644 --- a/ruoyi-system/src/main/resources/mapper/zbf/ZbfProjectMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/zbf/ZbfProjectMapper.xml @@ -96,7 +96,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" project_img, project_status FROM zbf_project zp - where zp.id in (select zpsa.project_id from zbf_project_subcontracting_apply zpsa where zpsa.fbs_user_id = #{dto.fbsUserId}) + where zp.id in (select zpsa.project_id from zbf_project_subcontracting_apply zpsa + where zpsa.fbs_user_id = #{dto.fbsUserId} and zpsa.apply_status !='3') order by zp.id desc