feat(invoice): 添加发票分页查询权限过滤功能

- 移除未使用的Supplier导入
- 新增selectInvoicePage方法支持用户角色权限过滤
- 非管理员用户只能查看自己创建的发票
- 优化发票新增逻辑,使用count查询替代list查询提升性能
- 添加事务注解确保数据一致性
- 异常处理改进,抛出ServiceException替代返回null
```
This commit is contained in:
2025-12-27 22:53:39 +08:00
parent 0827ce2908
commit a080b4294c
2 changed files with 33 additions and 21 deletions

View File

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.openhis.administration.domain.Invoice;
import com.openhis.administration.domain.Supplier;
/**
* 发票管理Service接口
@@ -29,4 +28,14 @@ public interface IInvoiceService extends IService<Invoice> {
* @return
*/
Invoice getByPaymentId(Long id);
/**
* 分页查询发票列表(带用户角色权限过滤)
*
* @param page 分页参数
* @param isAdmin 是否为管理员
* @param userId 用户ID
* @return 分页结果
*/
IPage<Invoice> selectInvoicePage(Page<Invoice> page, boolean isAdmin, Long userId);
}

View File

@@ -1,18 +1,17 @@
package com.openhis.administration.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.core.common.enums.DelFlag;
import com.core.common.utils.SecurityUtils;
import com.core.common.exception.ServiceException;
import com.openhis.administration.domain.Invoice;
import com.openhis.administration.domain.Supplier;
import com.openhis.administration.mapper.InvoiceMapper;
import com.openhis.administration.service.IInvoiceService;
import com.openhis.common.enums.SupplyStatus;
import com.openhis.workflow.domain.SupplyRequest;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
@@ -29,20 +28,22 @@ public class InvoiceServiceImpl extends ServiceImpl<InvoiceMapper, Invoice> impl
* 新增发票
*
* @param invoice 发票实体
* @return
* @return 发票ID
* @throws ServiceException 当发票已存在或插入失败时抛出异常
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Long addInvoice(Invoice invoice) {
// 根据编码判断发票是否存在
List<Invoice> invoices
= baseMapper.selectList(new LambdaQueryWrapper<Invoice>().eq(Invoice::getBusNo, invoice.getBusNo()));
if (invoices.size() > 0) {
return null;
// 根据编码判断发票是否存在 - 使用count查询优化性能
long count = baseMapper.selectCount(new LambdaQueryWrapper<Invoice>().eq(Invoice::getBusNo, invoice.getBusNo()));
if (count > 0) {
throw new ServiceException("发票编码已存在: " + invoice.getBusNo());
}
// 新增发票
int insert = baseMapper.insert(invoice);
if (insert != 1) {
return null;
throw new ServiceException("发票新增失败,请检查输入数据");
}
return invoice.getId();
@@ -54,14 +55,16 @@ public class InvoiceServiceImpl extends ServiceImpl<InvoiceMapper, Invoice> impl
.eq(Invoice::getDeleteFlag, DelFlag.NO.getCode()));
}
/**
* 分页查询发票列表
*/
@Override
public Page<Invoice> selectInvoicePage(Page<Invoice> page, boolean isAdmin, Long userId) {
LambdaQueryWrapper<Invoice> queryWrapper = new LambdaQueryWrapper<>();
// 可以根据需要添加查询条件,目前按创建时间倒序排列
queryWrapper.orderByDesc(Invoice::getCreateDate);
public IPage<Invoice> selectInvoicePage(Page<Invoice> page, boolean isAdmin, Long userId) {
LambdaQueryWrapper<Invoice> queryWrapper = new LambdaQueryWrapper<Invoice>()
.eq(Invoice::getDeleteFlag, DelFlag.NO.getCode());
// 非管理员用户只能查看自己创建的发票
if (!isAdmin) {
queryWrapper.eq(Invoice::getInvoicingStaffId, userId);
}
return baseMapper.selectPage(page, queryWrapper);
}
}