```
feat(invoice): 添加发票分页查询权限过滤功能 - 移除未使用的Supplier导入 - 新增selectInvoicePage方法支持用户角色权限过滤 - 非管理员用户只能查看自己创建的发票 - 优化发票新增逻辑,使用count查询替代list查询提升性能 - 添加事务注解确保数据一致性 - 异常处理改进,抛出ServiceException替代返回null ```
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user