添加项目、材料、机械删除校验;添加联表查询

This commit is contained in:
lcj
2025-03-13 10:39:17 +08:00
parent 3e0036e06c
commit db4742e606
20 changed files with 314 additions and 53 deletions

View File

@ -12,6 +12,8 @@ import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.ObjectUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.sql.SqlUtil;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.machinery.domain.BusMachinery;
import org.dromara.machinery.domain.BusMachineryDetail;
import org.dromara.machinery.domain.req.machinerydetail.MachineryDetailCreateReq;
import org.dromara.machinery.domain.req.machinerydetail.MachineryDetailQueryReq;
@ -20,6 +22,7 @@ import org.dromara.machinery.domain.vo.BusMachineryDetailVo;
import org.dromara.machinery.mapper.BusMachineryDetailMapper;
import org.dromara.machinery.service.IBusMachineryDetailService;
import org.dromara.machinery.service.IBusMachineryService;
import org.dromara.project.service.IBusProjectService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -41,6 +44,9 @@ public class BusMachineryDetailServiceImpl extends ServiceImpl<BusMachineryDetai
@Resource
private IBusMachineryService machineryService;
@Resource
private IBusProjectService projectService;
/**
* 查询机械详情
*
@ -131,7 +137,7 @@ public class BusMachineryDetailServiceImpl extends ServiceImpl<BusMachineryDetai
* 保存前的数据校验
*/
private void validEntityBeforeSave(BusMachineryDetail entity) {
// TODO 做一些数据校验,如唯一约束
// 做一些数据校验,如唯一约束
Long machineryId = entity.getMachineryId();
if (machineryId == null) {
throw new ServiceException("机械 id 不能为空", HttpStatus.BAD_REQUEST);
@ -155,8 +161,19 @@ public class BusMachineryDetailServiceImpl extends ServiceImpl<BusMachineryDetai
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
Long userId = LoginHelper.getUserId();
List<BusMachineryDetail> machineryDetailList = this.listByIds(ids);
// 做一些业务上的校验,判断是否需要校验
if (isValid) {
// TODO 做一些业务上的校验,判断是否需要校验
// 获取机械id列表
List<Long> machineryIdList = machineryDetailList.stream().map(BusMachineryDetail::getMachineryId).toList();
List<BusMachinery> machineryList = machineryService.listByIds(machineryIdList);
// 获取对应项目id列表
List<Long> projectIdList = machineryList.stream().map(BusMachinery::getProjectId).toList();
projectService.validAuth(projectIdList, userId);
}
if (machineryDetailList.size() != ids.size()) {
throw new ServiceException("删除机械详情失败,数据缺失", HttpStatus.BAD_REQUEST);
}
return this.removeBatchByIds(ids);
}

View File

@ -14,14 +14,17 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.sql.SqlUtil;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.machinery.domain.BusMachinery;
import org.dromara.machinery.domain.BusMachineryDetail;
import org.dromara.machinery.domain.req.machinery.MachineryCreateReq;
import org.dromara.machinery.domain.req.machinery.MachineryQueryReq;
import org.dromara.machinery.domain.req.machinery.MachineryUpdateReq;
import org.dromara.machinery.domain.vo.BusMachineryVo;
import org.dromara.machinery.mapper.BusMachineryMapper;
import org.dromara.machinery.service.IBusMachineryDetailService;
import org.dromara.machinery.service.IBusMachineryService;
import org.dromara.project.service.IBusProjectService;
import org.springframework.beans.BeanUtils;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -41,6 +44,10 @@ public class BusMachineryServiceImpl extends ServiceImpl<BusMachineryMapper, Bus
@Resource
private IBusProjectService projectService;
@Lazy
@Resource
private IBusMachineryDetailService machineryDetailService;
/**
* 查询机械
*
@ -131,7 +138,7 @@ public class BusMachineryServiceImpl extends ServiceImpl<BusMachineryMapper, Bus
* 保存前的数据校验
*/
private void validEntityBeforeSave(BusMachinery entity) {
// TODO 做一些数据校验,如唯一约束
// 做一些数据校验,如唯一约束
Long projectId = entity.getProjectId();
if (projectId == null) {
throw new ServiceException("项目 id 不能为空", HttpStatus.BAD_REQUEST);
@ -158,8 +165,23 @@ public class BusMachineryServiceImpl extends ServiceImpl<BusMachineryMapper, Bus
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
Long userId = LoginHelper.getUserId();
List<BusMachinery> machineryList = this.listByIds(ids);
if (isValid) {
// TODO 做一些业务上的校验,判断是否需要校验
// 做一些业务上的校验,判断是否需要校验
// 获取项目id列表
List<Long> projectIdList = machineryList.stream().map(BusMachinery::getProjectId).toList();
// 判断是否有权限操作对应项目下的内容
projectService.validAuth(projectIdList, userId);
// 判断是否还存在机械详情信息
QueryWrapper<BusMachineryDetail> queryWrapper = new QueryWrapper<>();
queryWrapper.in("machinery_id", ids);
if (machineryDetailService.count(queryWrapper) > 0) {
throw new ServiceException("删除机械失败,机械存在机械详情信息", HttpStatus.BAD_REQUEST);
}
}
if (machineryList.size() != ids.size()) {
throw new ServiceException("删除机械失败,数据缺失", HttpStatus.BAD_REQUEST);
}
return this.removeBatchByIds(ids);
}

View File

@ -29,6 +29,11 @@ public class MaterialsInventoryQueryReq extends PageRequest implements Serializa
*/
private Long materialsId;
/**
* 材料名称
*/
private String materialsName;
/**
* 项目id
*/

View File

@ -13,7 +13,9 @@ import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.ObjectUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.sql.SqlUtil;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.materials.domain.BusCompany;
import org.dromara.materials.domain.BusMaterials;
import org.dromara.materials.domain.req.company.CompanyCreateReq;
import org.dromara.materials.domain.req.company.CompanyQueryReq;
import org.dromara.materials.domain.req.company.CompanyUpdateReq;
@ -22,6 +24,7 @@ import org.dromara.materials.mapper.BusCompanyMapper;
import org.dromara.materials.service.IBusCompanyService;
import org.dromara.project.service.IBusProjectService;
import org.springframework.beans.BeanUtils;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import java.util.Collection;
@ -43,6 +46,10 @@ public class BusCompanyServiceImpl extends ServiceImpl<BusCompanyMapper, BusComp
@Resource
private IBusProjectService projectService;
@Lazy
@Resource
private BusMaterialsServiceImpl materialService;
/**
* 查询公司
*
@ -128,7 +135,7 @@ public class BusCompanyServiceImpl extends ServiceImpl<BusCompanyMapper, BusComp
* 保存前的数据校验
*/
private void validEntityBeforeSave(BusCompany entity) {
// TODO 做一些数据校验,如唯一约束
// 做一些数据校验,如唯一约束
String companyName = entity.getCompanyName();
Long projectId = entity.getProjectId();
if (StringUtils.isBlank(companyName)) {
@ -159,8 +166,25 @@ public class BusCompanyServiceImpl extends ServiceImpl<BusCompanyMapper, BusComp
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
// 获取当前登录用户
Long userId = LoginHelper.getUserId();
List<BusCompany> companyList = this.listByIds(ids);
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
// 做一些业务上的校验,判断是否需要校验
// 获取项目id列表
List<Long> projectIdList = companyList.stream().map(BusCompany::getProjectId).toList();
// 判断是否有权限操作对应项目下的内容
projectService.validAuth(projectIdList, userId);
// 判断公司中是否还存在材料信息
QueryWrapper<BusMaterials> queryWrapper = new QueryWrapper<>();
queryWrapper.in("company_id", ids);
if (materialService.count(queryWrapper) > 0) {
throw new ServiceException("删除公司失败,公司中存在材料信息", HttpStatus.BAD_REQUEST);
}
}
// 判断对应数据是否都存在
if (companyList.size() != ids.size()) {
throw new ServiceException("删除公司失败,数据缺失", HttpStatus.BAD_REQUEST);
}
return baseMapper.deleteByIds(ids) > 0;
}

View File

@ -12,6 +12,8 @@ import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.ObjectUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.sql.SqlUtil;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.materials.domain.BusMaterials;
import org.dromara.materials.domain.BusMaterialsInventory;
import org.dromara.materials.domain.req.materialsinventory.MaterialsInventoryCreateReq;
import org.dromara.materials.domain.req.materialsinventory.MaterialsInventoryQueryReq;
@ -137,7 +139,6 @@ public class BusMaterialsInventoryServiceImpl extends ServiceImpl<BusMaterialsIn
* 保存前的数据校验
*/
private void validEntityBeforeSave(BusMaterialsInventory entity) {
// TODO 做一些数据校验,如唯一约束
Long materialsId = entity.getMaterialsId();
Long projectId = entity.getProjectId();
String outPut = entity.getOutPut();
@ -167,8 +168,19 @@ public class BusMaterialsInventoryServiceImpl extends ServiceImpl<BusMaterialsIn
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
// 获取当前登录用户
Long userId = LoginHelper.getUserId();
List<BusMaterialsInventory> materialsInventoryList = this.listByIds(ids);
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
// 做一些业务上的校验,判断是否需要校验
// 获取项目id列表
List<Long> projectIdList = materialsInventoryList.stream().map(BusMaterialsInventory::getProjectId).toList();
// 判断是否有权限操作对应项目下的内容
projectService.validAuth(projectIdList, userId);
}
// 判断对应数据是否都存在
if (materialsInventoryList.size() != ids.size()) {
throw new ServiceException("删除材料出/入库失败,数据缺失", HttpStatus.BAD_REQUEST);
}
return baseMapper.deleteByIds(ids) > 0;
}
@ -210,6 +222,7 @@ public class BusMaterialsInventoryServiceImpl extends ServiceImpl<BusMaterialsIn
// 从对象中取值
Long id = req.getId();
Long materialsId = req.getMaterialsId();
String materialsName = req.getMaterialsName();
Long projectId = req.getProjectId();
String outPut = req.getOutPut();
Long number = req.getNumber();
@ -223,12 +236,20 @@ public class BusMaterialsInventoryServiceImpl extends ServiceImpl<BusMaterialsIn
String sortField = req.getSortField();
String sortOrder = req.getSortOrder();
String underlineSortField = StrUtil.toUnderlineCase(sortField);
// 联表查询
if (StringUtils.isNotBlank(materialsName)) {
QueryWrapper<BusMaterials> materialsQueryWrapper = new QueryWrapper<>();
materialsQueryWrapper.select("id");
materialsQueryWrapper.like("materials_name", materialsName);
List<Long> materialsIdList = materialsService.listObjs(materialsQueryWrapper, obj -> (Long) obj);
queryWrapper.in("materials_id", materialsIdList);
}
// 模糊查询
queryWrapper.like(StringUtils.isNotBlank(operator), "operator", operator);
queryWrapper.like(StringUtils.isNotBlank(remark), "remark", remark);
queryWrapper.like(StringUtils.isNotBlank(disposition), "disposition", disposition);
queryWrapper.like(StringUtils.isNotBlank(recipient), recipient, recipient);
queryWrapper.like(StringUtils.isNotBlank(shipper), shipper, shipper);
queryWrapper.like(StringUtils.isNotBlank(recipient), "recipient", recipient);
queryWrapper.like(StringUtils.isNotBlank(shipper), "shipper", shipper);
// 精确查询
queryWrapper.eq(ObjectUtils.isNotEmpty(id), "id", id);
queryWrapper.eq(ObjectUtils.isNotEmpty(projectId), "project_id", projectId);

View File

@ -13,16 +13,20 @@ import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.ObjectUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.sql.SqlUtil;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.materials.domain.BusMaterials;
import org.dromara.materials.domain.BusMaterialsInventory;
import org.dromara.materials.domain.req.materials.MaterialsCreateReq;
import org.dromara.materials.domain.req.materials.MaterialsQueryReq;
import org.dromara.materials.domain.req.materials.MaterialsUpdateReq;
import org.dromara.materials.domain.vo.BusMaterialsVo;
import org.dromara.materials.mapper.BusMaterialsMapper;
import org.dromara.materials.service.IBusCompanyService;
import org.dromara.materials.service.IBusMaterialsInventoryService;
import org.dromara.materials.service.IBusMaterialsService;
import org.dromara.project.service.IBusProjectService;
import org.springframework.beans.BeanUtils;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import java.util.Collection;
@ -48,6 +52,10 @@ public class BusMaterialsServiceImpl extends ServiceImpl<BusMaterialsMapper, Bus
@Resource
private IBusProjectService projectService;
@Lazy
@Resource
private IBusMaterialsInventoryService materialsInventoryService;
/**
* 查询材料名称
*
@ -134,7 +142,7 @@ public class BusMaterialsServiceImpl extends ServiceImpl<BusMaterialsMapper, Bus
* 保存前的数据校验
*/
private void validEntityBeforeSave(BusMaterials entity) {
// TODO 做一些数据校验,如唯一约束
// 做一些数据校验,如唯一约束
String materialsName = entity.getMaterialsName();
Long companyId = entity.getCompanyId();
Long projectId = entity.getProjectId();
@ -164,8 +172,23 @@ public class BusMaterialsServiceImpl extends ServiceImpl<BusMaterialsMapper, Bus
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
Long userId = LoginHelper.getUserId();
List<BusMaterials> materialsList = this.listByIds(ids);
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
// 做一些业务上的校验,判断是否需要校验
// 获取项目id列表
List<Long> projectIdList = materialsList.stream().map(BusMaterials::getProjectId).toList();
// 判断是否有权限操作对应项目下的内容
projectService.validAuth(projectIdList, userId);
// 判断公司中是否还存在材料信息
QueryWrapper<BusMaterialsInventory> queryWrapper = new QueryWrapper<>();
queryWrapper.in("materials", ids);
if (materialsInventoryService.count(queryWrapper) > 0) {
throw new ServiceException("删除材料失败,材料存在库存信息", HttpStatus.BAD_REQUEST);
}
}
if (materialsList.size() != ids.size()) {
throw new ServiceException("删除材料信息失败,数据缺失", HttpStatus.BAD_REQUEST);
}
return baseMapper.deleteByIds(ids) > 0;
}

View File

@ -38,6 +38,11 @@ public class ProjectTeamMemberQueryReq extends PageRequest implements Serializab
*/
private Long memberId;
/**
* 施工人员名称
*/
private String memberName;
/**
* 岗位默认为0普通员工1组长
*/

View File

@ -101,4 +101,12 @@ public interface IBusProjectService extends IService<BusProject> {
*/
void validAuth(Long projectId, Long userId);
/**
* 校验用户是否拥有操作项目的权限
*
* @param projectIdList 项目id列表
* @param userId 需要鉴权的用户id
*/
void validAuth(Collection<Long> projectIdList, Long userId);
}

View File

@ -12,8 +12,10 @@ import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.ObjectUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.sql.SqlUtil;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.project.domain.BusConstructionUser;
import org.dromara.project.domain.BusContractor;
import org.dromara.project.domain.BusProjectTeamMember;
import org.dromara.project.domain.req.constructionuser.ConstructionUserCreateReq;
import org.dromara.project.domain.req.constructionuser.ConstructionUserQueryReq;
import org.dromara.project.domain.req.constructionuser.ConstructionUserUpdateReq;
@ -23,7 +25,9 @@ import org.dromara.project.mapper.BusConstructionUserMapper;
import org.dromara.project.service.IBusConstructionUserService;
import org.dromara.project.service.IBusContractorService;
import org.dromara.project.service.IBusProjectService;
import org.dromara.project.service.IBusProjectTeamMemberService;
import org.springframework.beans.BeanUtils;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -46,9 +50,14 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
@Resource
private IBusProjectService projectService;
@Lazy
@Resource
private IBusContractorService contractorService;
@Lazy
@Resource
private IBusProjectTeamMemberService projectTeamMemberService;
/**
* 查询施工人员
*
@ -168,8 +177,24 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
Long userId = LoginHelper.getUserId();
List<BusConstructionUser> constructionUserList = this.listByIds(ids);
if (isValid) {
// TODO 做一些业务上的校验,判断是否需要校验
// 做一些业务上的校验,判断是否需要校验
// 获取项目id列表
List<Long> projectIdList = constructionUserList.stream().map(BusConstructionUser::getProjectId).toList();
// 判断是否有权限操作对应项目下的内容
projectService.validAuth(projectIdList, userId);
// 判断待删除的人员是否存在于班组
QueryWrapper<BusProjectTeamMember> queryWrapper = new QueryWrapper<>();
queryWrapper.in("member_id", ids);
if (projectTeamMemberService.count(queryWrapper) > 0) {
throw new ServiceException("删除施工人员失败,施工人员存在于班组中", HttpStatus.BAD_REQUEST);
}
}
// 判断对应数据是否都存在
if (constructionUserList.size() != ids.size()) {
throw new ServiceException("删除施工人员信息失败,数据缺失", HttpStatus.BAD_REQUEST);
}
return this.removeBatchByIds(ids);
}

View File

@ -5,18 +5,22 @@ import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import org.dromara.common.core.constant.CommonConstant;
import org.dromara.common.core.constant.HttpStatus;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.ObjectUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.sql.SqlUtil;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.project.domain.BusConstructionUser;
import org.dromara.project.domain.BusContractor;
import org.dromara.project.domain.req.contractor.ContractorCreateReq;
import org.dromara.project.domain.req.contractor.ContractorQueryReq;
import org.dromara.project.domain.req.contractor.ContractorUpdateReq;
import org.dromara.project.domain.vo.BusContractorVo;
import org.dromara.project.mapper.BusContractorMapper;
import org.dromara.project.service.IBusConstructionUserService;
import org.dromara.project.service.IBusContractorService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
@ -35,6 +39,9 @@ import java.util.List;
public class BusContractorServiceImpl extends ServiceImpl<BusContractorMapper, BusContractor>
implements IBusContractorService {
@Resource
private IBusConstructionUserService constructionUserService;
/**
* 查询分包单位
*
@ -125,7 +132,7 @@ public class BusContractorServiceImpl extends ServiceImpl<BusContractorMapper, B
* 保存前的数据校验
*/
private void validEntityBeforeSave(BusContractor entity) {
// TODO 做一些数据校验,如唯一约束
// 做一些数据校验,如唯一约束
String name = entity.getName();
if (StringUtils.isBlank(name)) {
throw new ServiceException("分包单位名称不能为空", HttpStatus.BAD_REQUEST);
@ -146,8 +153,26 @@ public class BusContractorServiceImpl extends ServiceImpl<BusContractorMapper, B
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
Long userId = LoginHelper.getUserId();
List<BusContractor> contractorList = this.listByIds(ids);
// 做一些业务上的校验,判断是否需要校验
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
// 仅创建用户可以删除
contractorList.forEach(contractor -> {
if (!contractor.getCreateBy().equals(userId)) {
throw new ServiceException("您无权删除该分包单位", HttpStatus.FORBIDDEN);
}
});
// 判断当前分包公司下是否还包含施工人员
QueryWrapper<BusConstructionUser> queryWrapper = new QueryWrapper<>();
queryWrapper.in("contractor_id", ids);
if (constructionUserService.count(queryWrapper) > 0) {
throw new ServiceException("删除分包单位失败,删除分包单位下存在施工人员", HttpStatus.BAD_REQUEST);
}
}
// 判断对应数据是否都存在
if (contractorList.size() != ids.size()) {
throw new ServiceException("删除分包单位失败,数据缺失", HttpStatus.BAD_REQUEST);
}
return this.removeBatchByIds(ids);
}

View File

@ -2,6 +2,7 @@ package org.dromara.project.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -25,9 +26,12 @@ import org.dromara.project.service.IBusUserProjectRelevancyService;
import org.springframework.beans.BeanUtils;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* 项目Service业务层处理
@ -175,12 +179,27 @@ public class BusProjectServiceImpl extends ServiceImpl<BusProjectMapper, BusProj
* @return 是否删除成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
Long userId = LoginHelper.getUserId();
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
// 做一些业务上的校验,判断是否需要校验
this.validAuth(ids, userId);
}
return baseMapper.deleteByIds(ids) > 0;
// 删除项目
boolean removeProjectList = this.removeBatchByIds(ids);
if (!removeProjectList) {
throw new ServiceException("删除项目失败,数据库异常", HttpStatus.ERROR);
}
// 删除用户与项目关联表
QueryWrapper<BusUserProjectRelevancy> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("user_id", userId);
queryWrapper.in("project_id", ids);
boolean removeRelevancyList = userProjectRelevancyService.remove(queryWrapper);
if (!removeRelevancyList) {
throw new ServiceException("删除项目与用户关联失败,数据库异常", HttpStatus.ERROR);
}
return true;
}
/**
@ -285,7 +304,32 @@ public class BusProjectServiceImpl extends ServiceImpl<BusProjectMapper, BusProj
queryWrapper.eq("project_id", projectId);
queryWrapper.eq("user_id", userId);
if (userProjectRelevancyService.count(queryWrapper) <= 0) {
throw new ServiceException("当前用户无权限操作", HttpStatus.UNAUTHORIZED);
throw new ServiceException("当前用户无权限操作", HttpStatus.FORBIDDEN);
}
}
/**
* 校验用户是否拥有操作项目的权限
*
* @param projectIdList 项目id列表
* @param userId 需要鉴权的用户id
*/
@Override
public void validAuth(Collection<Long> projectIdList, Long userId) {
// 查询关联表返回和用户关联的项目ID列表
Set<Long> collect = userProjectRelevancyService.listObjs(
new LambdaQueryWrapper<BusUserProjectRelevancy>()
.select(BusUserProjectRelevancy::getProjectId)
.in(BusUserProjectRelevancy::getProjectId, projectIdList)
.eq(BusUserProjectRelevancy::getUserId, userId)
.groupBy(BusUserProjectRelevancy::getProjectId)
).stream().map(obj -> (Long) obj).collect(Collectors.toSet());
// 找出没有关联数据的项目ID
List<Long> invalidIds = projectIdList.stream()
.filter(id -> !collect.contains(id))
.toList();
if (!invalidIds.isEmpty()) {
throw new ServiceException("删除失败,项目编号为:" + invalidIds + ",没有操作权限", HttpStatus.FORBIDDEN);
}
}

View File

@ -14,6 +14,7 @@ import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.ObjectUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.sql.SqlUtil;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.project.domain.BusConstructionUser;
import org.dromara.project.domain.BusProjectTeamMember;
import org.dromara.project.domain.req.projectteammember.ProjectTeamMemberCreateReq;
@ -199,12 +200,18 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
Long userId = LoginHelper.getUserId();
List<BusProjectTeamMember> projectTeamMemberList = this.listByIds(ids);
if (isValid) {
// 做一些业务上的校验,判断是否需要校验
// 获取项目id列表
List<Long> projectIdList = projectTeamMemberList.stream().map(BusProjectTeamMember::getProjectId).toList();
// 判断是否有权限操作对应项目下的内容
projectService.validAuth(projectIdList, userId);
}
// 判断对应数据是否都存在
if (projectTeamMemberList.size() != ids.size()) {
throw new ServiceException("删除项目班组下的成员失败,数据缺失", HttpStatus.NOT_FOUND);
throw new ServiceException("删除项目班组下的成员失败,数据缺失", HttpStatus.BAD_REQUEST);
}
List<Long> memberIds = projectTeamMemberList.stream().map(BusProjectTeamMember::getMemberId).toList();
LambdaUpdateWrapper<BusConstructionUser> queryWrapper = new LambdaUpdateWrapper<>();
@ -252,11 +259,20 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM
Long teamId = req.getTeamId();
Long projectId = req.getProjectId();
Long memberId = req.getMemberId();
String memberName = req.getMemberName();
String postId = req.getPostId();
String remark = req.getRemark();
String sortField = req.getSortField();
String sortOrder = req.getSortOrder();
String underlineSortField = StrUtil.toUnderlineCase(sortField);
// 联表查询
if (StringUtils.isNotBlank(memberName)) {
QueryWrapper<BusConstructionUser> constructionUserQueryWrapper = new QueryWrapper<>();
constructionUserQueryWrapper.select("id");
constructionUserQueryWrapper.like("user_name", memberName);
List<Long> constructionUserIdList = constructionUserService.listObjs(constructionUserQueryWrapper, obj -> (Long) obj);
queryWrapper.in("member_id", constructionUserIdList);
}
// 模糊查询
queryWrapper.like(StringUtils.isNotBlank(remark), "remark", remark);
// 精确查询

View File

@ -164,8 +164,20 @@ public class BusProjectTeamServiceImpl extends ServiceImpl<BusProjectTeamMapper,
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
// 获取当前登录用户
Long userId = LoginHelper.getUserId();
// 获取待删除数据详情
List<BusProjectTeam> projectTeamList = this.listByIds(ids);
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
// 做一些业务上的校验,判断是否需要校验
// 获取项目id列表
List<Long> projectIdList = projectTeamList.stream().map(BusProjectTeam::getProjectId).toList();
// 判断是否有权限操作对应项目下的内容
projectService.validAuth(projectIdList, userId);
}
// 判断对应数据是否都存在
if (projectTeamList.size() != ids.size()) {
throw new ServiceException("删除项目班组失败,数据缺失", HttpStatus.BAD_REQUEST);
}
return this.removeBatchByIds(ids);
}

View File

@ -13,6 +13,7 @@ import org.dromara.common.core.constant.HttpStatus;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.ObjectUtils;
import org.dromara.common.core.utils.sql.SqlUtil;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.project.domain.BusProject;
import org.dromara.project.domain.BusUserProjectRelevancy;
import org.dromara.project.domain.req.project.ProjectBatchByProjectListReq;
@ -79,7 +80,7 @@ public class BusUserProjectRelevancyServiceImpl extends ServiceImpl<BusUserProje
long size = req.getPageSize();
QueryWrapper<BusUserProjectRelevancy> queryWrapper = this.getQueryWrapper(req);
// 查询数据库
Page<BusUserProjectRelevancy> result = this.page(new Page<>(current, size), this.getQueryWrapper(req));
Page<BusUserProjectRelevancy> result = this.page(new Page<>(current, size), queryWrapper);
return this.getVoPage(result);
}
@ -177,8 +178,20 @@ public class BusUserProjectRelevancyServiceImpl extends ServiceImpl<BusUserProje
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
// 获取当前登录用户
Long userId = LoginHelper.getUserId();
// 获取待删除数据详情
List<BusUserProjectRelevancy> busUserProjectRelevancyList = this.listByIds(ids);
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
// 做一些业务上的校验,判断是否需要校验
// 获取项目id列表
List<Long> projectIdList = busUserProjectRelevancyList.stream().map(BusUserProjectRelevancy::getProjectId).toList();
// 判断是否有权限操作对应项目下的内容
projectService.validAuth(projectIdList, userId);
}
// 判断对应数据是否都存在
if (busUserProjectRelevancyList.size() != ids.size()) {
throw new ServiceException("删除系统用户与项目关联失败,数据缺失", HttpStatus.BAD_REQUEST);
}
return baseMapper.deleteByIds(ids) > 0;
}

View File

@ -1,3 +1,5 @@
import { MaterialsVO } from '@/api/materials/materials/types';
export interface MaterialsInventoryVO {
/**
* 主键id
@ -63,6 +65,11 @@ export interface MaterialsInventoryVO {
* 备注
*/
remark: string;
/**
* 材料封装
*/
materialsVo: MaterialsVO;
}
export interface MaterialsInventoryForm extends BaseEntity {
@ -138,6 +145,11 @@ export interface MaterialsInventoryQuery extends PageRequest {
*/
materialsId?: string | number;
/**
* 材料名称
*/
materialsName?: string;
/**
* 项目id
*/

View File

@ -78,6 +78,11 @@ export interface ProjectTeamMemberQuery extends PageRequest {
*/
memberId?: string | number;
/**
* 施工人员姓名
*/
memberName?: string;
/**
* 岗位默认为0普通员工1组长
*/

View File

@ -4,10 +4,8 @@
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="材料名称" prop="materialsId">
<el-select v-model="queryParams.materialsId" clearable placeholder="请选择材料名称">
<el-option v-for="item in materialsOptions" :key="item.id" :label="item.materialsName" :value="item.id" />
</el-select>
<el-form-item label="材料名称" prop="materialsName">
<el-input v-model="queryParams.materialsName" placeholder="请输入材料名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
@ -194,18 +192,15 @@ const initFormData: MaterialsInventoryForm = {
disposition: undefined,
recipient: undefined,
shipper: undefined,
remark: undefined,
materialsVo: {
id: undefined,
materialsName: undefined,
materialsCode: undefined
}
remark: undefined
};
const data = reactive<PageData<MaterialsInventoryForm, MaterialsInventoryQuery>>({
form: { ...initFormData },
queryParams: {
current: 1,
pageSize: 10,
sortField: 'createTime',
sortOrder: 'descend',
materialsId: undefined,
projectId: currentProject.value.id,
outPut: undefined,
@ -217,12 +212,7 @@ const data = reactive<PageData<MaterialsInventoryForm, MaterialsInventoryQuery>>
disposition: undefined,
recipient: undefined,
shipper: undefined,
params: {},
materialsVo: {
id: undefined,
materialsName: undefined,
materialsCode: undefined
}
params: {}
},
rules: {
id: [{ required: true, message: '主键id不能为空', trigger: 'blur' }],
@ -240,7 +230,7 @@ const getList = async () => {
materialsInventoryList.value = res.data.records;
total.value = res.data.total;
const materialsMap = new Map();
res.data.records.forEach((record) => {
res.data.records.forEach((record: MaterialsInventoryVO) => {
const { id, materialsName } = record.materialsVo;
if (!materialsMap.has(id)) {
materialsMap.set(id, { id, materialsName });

View File

@ -76,7 +76,7 @@
</el-card>
<!-- 添加或修改分包单位对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="contractorFormRef" :model="form" :rules="rules" label-width="80px">
<el-form ref="contractorFormRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="公司名称" prop="name">
<el-input v-model="form.name" placeholder="请输入公司名称" />
</el-form-item>

View File

@ -86,19 +86,13 @@
</el-card>
<!-- 添加或修改项目对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="projectFormRef" :model="form" :rules="rules" label-width="80px">
<el-form ref="projectFormRef" :model="form" :rules="rules" label-width="100px">
<el-form-item label="项目名称" prop="projectName">
<el-input v-model="form.projectName" placeholder="请输入项目名称" />
</el-form-item>
<el-form-item label="项目简称" prop="shortName">
<el-input v-model="form.shortName" placeholder="请输入项目简称" />
</el-form-item>
<!-- <el-form-item label="父项目id" prop="pId">
<el-input v-model="form.pId" placeholder="请输入父项目id" />
</el-form-item> -->
<el-form-item label="项目图片" prop="picUrl">
<el-input v-model="form.picUrl" placeholder="请输入项目图片" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>

View File

@ -5,8 +5,8 @@
{{ props.projectTeamVo.teamName }}
</template>
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="施工人员" prop="memberId">
<el-input v-model="queryParams.memberId" placeholder="请输入施工人员" clearable @keyup.enter="handleQuery" />
<el-form-item label="施工人员" prop="memberName">
<el-input v-model="queryParams.memberName" placeholder="请输入施工人员" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="岗位" prop="postId">
<el-select v-model="queryParams.postId" clearable placeholder="请选择岗位">