添加项目、材料、机械删除校验;添加联表查询
This commit is contained in:
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -29,6 +29,11 @@ public class MaterialsInventoryQueryReq extends PageRequest implements Serializa
|
||||
*/
|
||||
private Long materialsId;
|
||||
|
||||
/**
|
||||
* 材料名称
|
||||
*/
|
||||
private String materialsName;
|
||||
|
||||
/**
|
||||
* 项目id
|
||||
*/
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -38,6 +38,11 @@ public class ProjectTeamMemberQueryReq extends PageRequest implements Serializab
|
||||
*/
|
||||
private Long memberId;
|
||||
|
||||
/**
|
||||
* 施工人员名称
|
||||
*/
|
||||
private String memberName;
|
||||
|
||||
/**
|
||||
* 岗位(默认为0普通员工,1组长)
|
||||
*/
|
||||
|
@ -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);
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
// 精确查询
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -78,6 +78,11 @@ export interface ProjectTeamMemberQuery extends PageRequest {
|
||||
*/
|
||||
memberId?: string | number;
|
||||
|
||||
/**
|
||||
* 施工人员姓名
|
||||
*/
|
||||
memberName?: string;
|
||||
|
||||
/**
|
||||
* 岗位(默认为0普通员工,1组长)
|
||||
*/
|
||||
|
@ -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 });
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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="请选择岗位">
|
||||
|
Reference in New Issue
Block a user