This commit is contained in:
zt
2025-04-24 14:18:04 +08:00
parent a2e8712808
commit 2c15d26bcc
16 changed files with 182 additions and 13 deletions

View File

@ -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<String> AUDIT_TYPE = Arrays.asList("2", "3");
/**

View File

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

View File

@ -440,8 +440,10 @@ public class FbsProjectTaskServiceImpl extends ServicePlusImpl<FbsProjectTaskMap
List<BgtWageApplication> wageList = wageApplicationService.list(Wrappers.<BgtWageApplication>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) {

View File

@ -150,8 +150,10 @@ public class FbsUserServiceImpl extends ServicePlusImpl<FbsUserMapper, FbsUser>
@Override
public FbsUser selectUserByUserId(Long userId) {
FbsUser fbsUser = baseMapper.selectOne(new LambdaQueryWrapper<FbsUser>().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;
}

View File

@ -173,6 +173,9 @@ public class BusinessTask
public void workCardShortage(){
//1、获取所有正在进行中的任务
List<FbsProjectTask> ongoingTask = iFbsProjectTaskService.findOngoingTask();
if(CollectionUtil.isEmpty(ongoingTask)){
return;
}
//2、获取所有招工信息
List<Long> taskIds = new ArrayList<>();
for (FbsProjectTask fbsProjectTask : ongoingTask) {
@ -247,6 +250,9 @@ public class BusinessTask
public void missingCard(){
//1、获取所有正在进行中的任务
List<FbsProjectTask> ongoingTask = iFbsProjectTaskService.findOngoingTask();
if(CollectionUtil.isEmpty(ongoingTask)){
return;
}
//2、获取所有招工信息
List<Long> taskIds = new ArrayList<>();
for (FbsProjectTask fbsProjectTask : ongoingTask) {

View File

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

View File

@ -197,4 +197,13 @@ public interface IZbfProjectService extends IServicePlus<ZbfProject> {
*/
TableDataInfo<ZbfProject> zbfSwitchList(ZbfProjectSwitchListDTO dto);
/**
* 总包方完成项目前检查
*/
Boolean checkBeforeComplete(Long projectId);
/**
* 总包方完成项目提醒消息
*/
Boolean sendRemindMessage(Long projectId);
}

View File

@ -79,4 +79,9 @@ public interface IZbfProjectSubcontractingApplyService extends IServicePlus<ZbfP
* 分包商取消项目分包申请
*/
Boolean cancel(Long subId);
/**
* 总包方获取分包申请人数
*/
Integer getApplyNum(Long subId);
}

View File

@ -6,6 +6,7 @@ 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.BgtProjectRecruitApply;
import com.ruoyi.bgt.domain.BgtProjectTaskProgress;
import com.ruoyi.bgt.domain.BgtWageApplication;
@ -20,13 +21,16 @@ import com.ruoyi.common.enums.RecruitApplyStatus;
import com.ruoyi.common.enums.SubcontractingApplyStatus;
import com.ruoyi.common.exception.BaseException;
import com.ruoyi.common.util.DataUtil;
import com.ruoyi.common.util.ValidUtil;
import com.ruoyi.common.utils.PageUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.fbs.domain.FbsMessage;
import com.ruoyi.fbs.domain.FbsProjectTask;
import com.ruoyi.fbs.domain.FbsWageApplication;
import com.ruoyi.fbs.domain.dto.FbsProgressListDTO;
import com.ruoyi.fbs.domain.dto.FbsProjectListDTO;
import com.ruoyi.fbs.domain.vo.*;
import com.ruoyi.fbs.service.IFbsMessageService;
import com.ruoyi.fbs.service.IFbsProjectTaskService;
import com.ruoyi.fbs.service.IFbsWageApplicationService;
import com.ruoyi.wgz.domain.WgzPayCalculation;
@ -51,6 +55,14 @@ import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
import static com.ruoyi.common.constants.BgtMessageConstant.HEADLINE;
import static com.ruoyi.common.constants.BgtMessageConstant.SUBHEADING;
import static com.ruoyi.common.constants.FbsMessageConstant.FBS_LARGE_OTHER;
import static com.ruoyi.common.constants.FbsMessageConstant.FBS_SMALL_SYSTEM;
import static com.ruoyi.common.constants.WgzAndBgtMessageConstant.*;
import static com.ruoyi.common.constants.ZbfMessageConstant.ZBF_REMIND;
import static com.ruoyi.common.constants.ZbfMessageConstant.zbfMessage;
/**
* 总包方项目Service业务层处理
*
@ -82,6 +94,8 @@ public class ZbfProjectServiceImpl extends ServicePlusImpl<ZbfProjectMapper, Zbf
private IWgzPayCalculationService wgzPayCalculationService;
@Autowired
private IZbfUserService zbfUserService;
@Autowired
private IFbsMessageService fbsMessageService;
@Override
public ZbfProject queryById(Long id) {
@ -584,6 +598,12 @@ public class ZbfProjectServiceImpl extends ServicePlusImpl<ZbfProjectMapper, Zbf
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean add(ZbfProjectAddDTO dto) {
if (!ValidUtil.verifyCreditCode(dto.getCreditCode())) {
throw new BaseException("统一社会信用代码格式不正确");
}
if (!ValidUtil.isValidChineseMobile(dto.getContactPhone())) {
throw new BaseException("手机号格式不正确");
}
//校验
Long appUserId = SecurityUtils.getAppUserId();
@ -615,6 +635,12 @@ public class ZbfProjectServiceImpl extends ServicePlusImpl<ZbfProjectMapper, Zbf
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean edit(ZbfProjectAddDTO dto) {
if (!ValidUtil.verifyCreditCode(dto.getCreditCode())) {
throw new BaseException("统一社会信用代码格式不正确");
}
if (!ValidUtil.isValidChineseMobile(dto.getContactPhone())) {
throw new BaseException("手机号格式不正确");
}
//校验
//获取项目下的所有有人申请的分包
@ -647,7 +673,7 @@ public class ZbfProjectServiceImpl extends ServicePlusImpl<ZbfProjectMapper, Zbf
sectionUpdateIds.add(section.getId());
}
for (ZbfProjectSubcontractingAddDTO sub : section.getSubList()) {
ZbfProjectSubcontracting projectSubcontracting = BeanUtil.copyProperties(sub, ZbfProjectSubcontracting.class, "id");
ZbfProjectSubcontracting projectSubcontracting = BeanUtil.copyProperties(sub, ZbfProjectSubcontracting.class);
projectSubcontracting.setProjectId(dto.getId());
projectSubcontracting.setSectionId(projectSection.getId());
if (sub.getId() == null) {
@ -781,10 +807,9 @@ public class ZbfProjectServiceImpl extends ServicePlusImpl<ZbfProjectMapper, Zbf
wrapper.eq(ZbfProject::getUserId, SecurityUtils.getAppUserId());
List<ZbfProject> 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<ZbfProjectMapper, Zbf
Page<ZbfProject> result = page(PageUtils.buildPage(), wrapper);
return PageUtils.buildDataInfo(result);
}
@Override
public Boolean checkBeforeComplete(Long projectId) {
List<FbsProjectTask> list = fbsProjectTaskService.list(Wrappers.<FbsProjectTask>lambdaQuery()
.eq(FbsProjectTask::getProjectId, projectId)
.ne(FbsProjectTask::getStatus,ProjectStatus.COMPLETE.getCode())
);
return CollectionUtil.isEmpty(list);
}
@Override
public Boolean sendRemindMessage(Long projectId) {
List<FbsProjectTask> list = fbsProjectTaskService.list(Wrappers.<FbsProjectTask>lambdaQuery()
.eq(FbsProjectTask::getProjectId, projectId)
.ne(FbsProjectTask::getStatus,ProjectStatus.COMPLETE.getCode())
);
if (CollectionUtil.isEmpty(list)) {
return true;
}
ArrayList<FbsMessage> messages = new ArrayList<>();
for (FbsProjectTask task : list) {
//总包方发消息到分包商
HashMap<String, String> zmp = new HashMap<>();
zmp.put("projectName", task.getTaskName());
zmp.put("auditor", SecurityUtils.getUsername());
Map<String, String> 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);
}
}

View File

@ -289,4 +289,13 @@ public class ZbfProjectSubcontractingApplyServiceImpl extends ServicePlusImpl<Zb
zbfMessageService.operation(USERTYPE_FBS, SecurityUtils.getAppUserId(), USERTYPE_ZBF, project.getUserId(), zbfProjectSubcontractingApply.getId(),SqlHelper.table(ZbfProjectSubcontractingApply.class).getTableName());
return updateById(zbfProjectSubcontractingApply);
}
@Override
public Integer getApplyNum(Long subId) {
LambdaUpdateWrapper<ZbfProjectSubcontractingApply> wrapper = Wrappers.<ZbfProjectSubcontractingApply>lambdaUpdate()
.eq(ZbfProjectSubcontractingApply::getSubId, subId)
.eq(ZbfProjectSubcontractingApply::getApplyStatus, SubcontractingApplyStatus.APPLY.getCode());
List<ZbfProjectSubcontractingApply> list = list(wrapper);
return list.size();
}
}

View File

@ -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
</select>