Browse Source

fix:补交

master
“wangzihua” 3 months ago
parent
commit
549bd81853
  1. 7
      yun-admin/src/main/java/net/lab1024/sa/admin/module/cost/controller/FirmReportsController.java
  2. 7
      yun-admin/src/main/java/net/lab1024/sa/admin/module/cost/dao/FirmReportsDao.java
  3. 5
      yun-admin/src/main/java/net/lab1024/sa/admin/module/cost/domain/form/FirmReportsQueryForm.java
  4. 31
      yun-admin/src/main/java/net/lab1024/sa/admin/module/cost/service/FirmReportsService.java
  5. 15
      yun-admin/src/main/java/net/lab1024/sa/admin/module/service/controller/ServiceApplicationsController.java
  6. 10
      yun-admin/src/main/java/net/lab1024/sa/admin/module/service/dao/ServiceApplicationsDao.java
  7. 38
      yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/form/LawyerStatisticsQueryFormList.java
  8. 6
      yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/form/ServiceApplicationsQueryForm.java
  9. 5
      yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/form/ServiceApplicationsUpdateForm.java
  10. 7
      yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/vo/LawyerStatisticsVO.java
  11. 3
      yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/vo/ServiceReportStatisticsVO.java
  12. 152
      yun-admin/src/main/java/net/lab1024/sa/admin/module/service/service/ServiceApplicationsService.java
  13. 11
      yun-admin/src/main/java/net/lab1024/sa/admin/util/DateTimeUtil.java
  14. 15
      yun-admin/src/main/resources/mapper/cost/FirmReportsMapper.xml
  15. 107
      yun-admin/src/main/resources/mapper/service/ServiceApplicationsMapper.xml
  16. 4
      yun-base/src/main/java/net/lab1024/sa/base/module/support/dict/service/DictService.java

7
yun-admin/src/main/java/net/lab1024/sa/admin/module/cost/controller/FirmReportsController.java

@ -69,4 +69,11 @@ public class FirmReportsController {
public ResponseDTO<String> batchDelete(@PathVariable Integer id) {
return firmReportsService.delete(id);
}
//提交
@Operation(summary = "提交 @author wzh")
@PostMapping("/firmReports/commit")
public ResponseDTO<String> commit(@RequestBody ValidateList<Integer> idList) {
return firmReportsService.commit(idList);
}
}

7
yun-admin/src/main/java/net/lab1024/sa/admin/module/cost/dao/FirmReportsDao.java

@ -6,6 +6,7 @@ import net.lab1024.sa.admin.module.cost.domain.form.FirmReportsQueryForm;
import net.lab1024.sa.admin.module.cost.domain.vo.FirmReportsVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import net.lab1024.sa.base.common.domain.ValidateList;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
@ -30,4 +31,10 @@ public interface FirmReportsDao extends BaseMapper<FirmReportsEntity> {
*/
List<FirmReportsVO> queryPage(Page page, @Param("queryForm") FirmReportsQueryForm queryForm);
/**
* 批量提交
*
* @param idList
*/
void commit(ValidateList<Integer> idList);
}

5
yun-admin/src/main/java/net/lab1024/sa/admin/module/cost/domain/form/FirmReportsQueryForm.java

@ -49,4 +49,9 @@ public class FirmReportsQueryForm extends PageParam {
*/
private LocalDateTime submissionTime;
/**
* 是否包含已提交的数据审批状态 >= 3
*/
private Boolean includeSubmitted;
}

31
yun-admin/src/main/java/net/lab1024/sa/admin/module/cost/service/FirmReportsService.java

@ -1,7 +1,6 @@
package net.lab1024.sa.admin.module.cost.service;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import net.lab1024.sa.admin.common.enums.ReviewEnum;
@ -12,8 +11,13 @@ import net.lab1024.sa.admin.module.cost.domain.form.FirmReportsQueryForm;
import net.lab1024.sa.admin.module.cost.domain.form.FirmReportsUpdateForm;
import net.lab1024.sa.admin.module.cost.domain.vo.FirmReportsVO;
import net.lab1024.sa.admin.module.system.department.service.DepartmentService;
import net.lab1024.sa.admin.module.system.login.domain.RequestEmployee;
import net.lab1024.sa.admin.module.system.role.domain.vo.RoleVO;
import net.lab1024.sa.admin.module.system.role.service.RoleEmployeeService;
import net.lab1024.sa.admin.util.AdminRequestUtil;
import net.lab1024.sa.admin.util.DateTimeUtil;
import net.lab1024.sa.base.common.domain.RequestUser;
import net.lab1024.sa.base.common.domain.ValidateList;
import net.lab1024.sa.base.common.enumeration.UserTypeEnum;
import net.lab1024.sa.base.common.util.SmartBeanUtil;
import net.lab1024.sa.base.common.util.SmartPageUtil;
import net.lab1024.sa.base.common.domain.ResponseDTO;
@ -42,11 +46,29 @@ public class FirmReportsService {
private DictService dictService;
@Resource
private DepartmentService departmentService;
@Resource
private RoleEmployeeService roleEmployeeService;
/**
* 分页查询
*/
public PageResult<FirmReportsVO> queryPage(FirmReportsQueryForm queryForm) {
Page<?> page = SmartPageUtil.convert2PageQuery(queryForm);
// 检查当前用户是否为CEO角色
RequestEmployee requestUser = AdminRequestUtil.getRequestUser();
List<RoleVO> roleIdList = roleEmployeeService.getRoleIdList(requestUser.getEmployeeId());
String roleCode = roleIdList.get(0).getRoleCode();
// 检查角色类型
boolean isCeo = UserTypeEnum.CEO.getDesc().equals(roleCode);
if (isCeo) {
// 如果是CEO角色,查询自己的数据和已经提交的数据(审批状态大于等于3的数据)
queryForm.setUserId(requestUser.getEmployeeId());
queryForm.setIncludeSubmitted(true); // 设置查询参数以包括已提交的数据
}else {
queryForm.setUserId(requestUser.getEmployeeId());
}
List<FirmReportsVO> list = firmReportsDao.queryPage(page, queryForm);
//查询字典值
@ -110,4 +132,9 @@ public class FirmReportsService {
firmReportsDao.deleteById(id);
return ResponseDTO.ok();
}
public ResponseDTO<String> commit(ValidateList<Integer> idList) {
firmReportsDao.commit(idList);
return ResponseDTO.ok();
}
}

15
yun-admin/src/main/java/net/lab1024/sa/admin/module/service/controller/ServiceApplicationsController.java

@ -139,7 +139,7 @@ public class ServiceApplicationsController {
@Operation(summary = "律所统计信息 @author wzh")
@PostMapping("/serviceApplications/statistics/department")
//@SaCheckPermission("serviceApplications:statistics")
public ResponseDTO<PageResult<LawyerStatisticsVO>> getLawyerStatisticsByDepartment(@RequestBody @Valid LawyerStatisticsQueryForm queryForm) {
public ResponseDTO<List<LawyerStatisticsVO>> getLawyerStatisticsByDepartment(@RequestBody @Valid LawyerStatisticsQueryFormList queryForm) {
return ResponseDTO.ok(serviceApplicationsService.getLawyerStatisticsByDepartment(queryForm));
}
@ -162,4 +162,17 @@ public class ServiceApplicationsController {
public ResponseDTO<PageResult<ServiceReportStatisticsVO>> getServiceReportStatistics(@RequestBody @Valid ServiceApplicationsQueryForm queryForm) {
return ResponseDTO.ok(serviceApplicationsService.getServiceReportStatistics(queryForm));
}
//统计当前机构的成本
@Operation(summary = "统计当前机构的公益成本 @author wzh")
@PostMapping("/serviceApplications/statistics/cost")
public ResponseDTO<Long> getServiceApplicationsCost(@RequestBody ServiceLawyerQueryForm queryForm) {
return ResponseDTO.ok(serviceApplicationsService.getServiceApplicationsCost(queryForm));
}
//部门id批量审核
@Operation(summary = "部门id批量审核部门下数据 @author wzh")
@PostMapping("/serviceApplications/batchReviewByDepartmentId")
public ResponseDTO<String> batchReviewByDepartmentId(@RequestBody @Valid ServiceApplicationsUpdateForm updateForm) {
return serviceApplicationsService.batchReviewByDepartmentId(updateForm);
}
}

10
yun-admin/src/main/java/net/lab1024/sa/admin/module/service/dao/ServiceApplicationsDao.java

@ -8,6 +8,7 @@ import net.lab1024.sa.admin.module.service.domain.vo.ServiceApplicationsVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import net.lab1024.sa.admin.module.service.domain.vo.ServiceReportStatisticsVO;
import net.lab1024.sa.base.common.domain.ResponseDTO;
import net.lab1024.sa.base.common.domain.ValidateList;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -54,7 +55,7 @@ public interface ServiceApplicationsDao extends BaseMapper<ServiceApplicationsEn
/**
* 批量提交协会审核
*/
void batchSubmitAsAssociation(@Param("idList")List<Long> idList, @Param("associationAuditStatus")Integer associationAuditStatus, @Param("userId")Long userId, @Param("submitTime")String submitTime);
void batchSubmitAsAssociation(@Param("idList")List<Long> idList, @Param("associationAuditStatus")Integer associationAuditStatus);
/**
* 律师统计查询无参数保持向后兼容
@ -80,11 +81,10 @@ public interface ServiceApplicationsDao extends BaseMapper<ServiceApplicationsEn
/**
* 律所统计
* @param page
* @param queryForm
* @return
*/
List<LawyerStatisticsVO> getdepartmentStatistics(Page page, @Param("queryForm") LawyerStatisticsQueryForm queryForm);
List<LawyerStatisticsVO> getdepartmentStatistics(@Param("queryForm") LawyerStatisticsQueryForm queryForm);
/**
* 月度统计
@ -117,4 +117,8 @@ public interface ServiceApplicationsDao extends BaseMapper<ServiceApplicationsEn
* @return
*/
List<ServiceReportStatisticsVO> getServiceReportStatistics(Page page, @Param("queryForm") ServiceApplicationsQueryForm queryForm);
Long getServiceApplicationsCost(@Param("queryForm") ServiceLawyerQueryForm queryForm);
void batchReviewByDepartmentId(@Param("queryForm") ServiceApplicationsUpdateForm updateForm);
}

38
yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/form/LawyerStatisticsQueryFormList.java

@ -0,0 +1,38 @@
package net.lab1024.sa.admin.module.service.domain.form;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import net.lab1024.sa.base.common.domain.PageParam;
/**
* 律师统计查询表单
*
* @author wzh
*/
@Data
@Schema(description = "律师统计查询表单")
public class LawyerStatisticsQueryFormList{
@Schema(description = "季度,1,2,3,4")
private Integer quarter;
@Schema(description = "年度,格式:yyyy")
private Integer year;
@Schema(description = "律师姓名")
private String lawyerName;
@Schema(description = "律所名称")
private String firmName;
@Schema(description = "律所id")
private Long firmId;
@Schema(description = "开始时间")
private String startTime;
@Schema(description = "结束时间")
private String endTime;
private Long userId;
}

6
yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/form/ServiceApplicationsQueryForm.java

@ -185,4 +185,10 @@ public class ServiceApplicationsQueryForm extends PageParam {
* 季度
*/
private Integer quarter;
@Schema(description = "开始时间")
private String startTime;
@Schema(description = "结束时间")
private String endTime;
}

5
yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/form/ServiceApplicationsUpdateForm.java

@ -68,7 +68,10 @@ public class ServiceApplicationsUpdateForm{
@Schema(description = "协会审核状态")
private Integer associationAuditStatus;
@Schema(description = "协会审核时间")
private LocalDateTime associationAuditTime;
@Schema(description = "协会审核人")
private Long associationAuditUser;
@Schema(description = "协会审核意见")
private String associationAuditOpinion;

7
yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/vo/LawyerStatisticsVO.java

@ -2,8 +2,10 @@ package net.lab1024.sa.admin.module.service.domain.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import net.lab1024.sa.admin.module.service.domain.form.ServiceLawyerImportForm;
import java.math.BigDecimal;
import java.util.List;
/**
* 律师统计信息 VO
@ -21,7 +23,7 @@ public class LawyerStatisticsVO {
private String lawyerName;
@Schema(description = "律所id")
private String firmId;
private Long firmId;
@Schema(description = "律所名称")
private String firmName;
@ -40,4 +42,7 @@ public class LawyerStatisticsVO {
@Schema(description = "年度累计服务成本")
private BigDecimal annualServiceCost;
@Schema(description = "律师服务信息列表")
private List<ServiceLawyerImportForm> lawyerServiceVOList;
}

3
yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/vo/ServiceReportStatisticsVO.java

@ -30,6 +30,9 @@ public class ServiceReportStatisticsVO {
@Schema(description = "未审批")
private Long pendingCount;
@Schema(description = "拒绝数")
private Long rejectCount = 0L;
@Schema(description = "总服务时长")
private Double totalServiceDuration;
}

152
yun-admin/src/main/java/net/lab1024/sa/admin/module/service/service/ServiceApplicationsService.java

@ -1,5 +1,6 @@
package net.lab1024.sa.admin.module.service.service;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
@ -42,6 +43,8 @@ import net.lab1024.sa.base.common.exception.BusinessException;
import net.lab1024.sa.base.common.util.SmartBeanUtil;
import net.lab1024.sa.base.common.util.SmartPageUtil;
import net.lab1024.sa.base.common.util.SmartResponseUtil;
import net.lab1024.sa.base.module.support.dict.domain.entity.DictEntity;
import net.lab1024.sa.base.module.support.dict.service.DictService;
import org.apache.catalina.util.RequestUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.ss.usermodel.*;
@ -92,6 +95,8 @@ public class ServiceApplicationsService {
private RoleEmployeeService roleEmployeeService;
@Resource
PositionService positionService;
@Resource
private DictService dictService;
//查看详情
public ServiceApplicationsVO queryDetail(Long applicationId) {
@ -138,25 +143,7 @@ public class ServiceApplicationsService {
if (isAssociationRole) {
// 协会用户(CEO):可以看到所有律所提交的数据,但只显示associationAuditStatus为待审核(1)、通过(3)和拒绝(4)的数据和自己创建的数据
Integer oneByRoleId = dataScopeViewService.getOneByRoleId(roleIdList.get(0).getRoleId());
// 获取自己部门范围内的数据
List<Long> departmentEmployees = new ArrayList<>();
if (DataScopeViewTypeEnum.ME.getValue().equals(oneByRoleId)) {
departmentEmployees = dataScopeViewService.getCanViewEmployeeId(DataScopeViewTypeEnum.ME, requestUser.getUserId());
} else if (DataScopeViewTypeEnum.DEPARTMENT.getValue().equals(oneByRoleId)) {
departmentEmployees = dataScopeViewService.getCanViewEmployeeId(DataScopeViewTypeEnum.DEPARTMENT, requestUser.getUserId());
}
// 确保包含当前用户ID,以便能看到自己创建的数据
if (departmentEmployees == null) {
departmentEmployees = new ArrayList<>();
}
if (!departmentEmployees.contains(requestUser.getUserId())) {
departmentEmployees.add(requestUser.getUserId());
}
queryForm.setEmployeeIdList(departmentEmployees);
// 设置只显示associationAuditStatus为待审核、通过、拒绝的数据
// CEO作为最高权限用户,不需要限制在特定部门范围内,直接设置includeAssociationReviewed即可
queryForm.setIncludeAssociationReviewed(true);
} else if (isFirmAdminRole) {
// 律所管理员(cto):能看到自己部门范围内的数据,但只显示firmAuditStatus为待审核、通过和拒绝的数据和自己创建的数据
@ -193,7 +180,7 @@ public class ServiceApplicationsService {
longs = new ArrayList<>();
}
if (!longs.contains(requestUser.getUserId())) {
longs.remove(requestUser.getUserId());
longs.add(requestUser.getUserId());
}
queryForm.setEmployeeIdList(longs);
// 普通用户不需要审核状态过滤,可以看到自己所有状态的数据
@ -264,7 +251,7 @@ public class ServiceApplicationsService {
ServiceApplicationsEntity serviceApplicationsEntity = serviceApplicationsDao.selectById(applicationId);
// 检查当前用户角色是否为CEO
RequestUser requestUser = AdminRequestUtil.getRequestUser();
/*RequestUser requestUser = AdminRequestUtil.getRequestUser();
List<RoleVO> roles = roleEmployeeService.getRoleIdList(requestUser.getUserId());
if (!roles.isEmpty()) {
String roleCode = roles.get(0).getRoleCode();
@ -277,10 +264,10 @@ public class ServiceApplicationsService {
serviceApplicationsEntity.setAssociationAuditUser(requestUser.getUserId());
serviceApplicationsEntity.setAssociationAuditTime(LocalDateTime.now());
}
}else {
}else {*/
serviceApplicationsEntity.setFirmAuditStatus(ReviewEnum.APPROVAL.getValue());
serviceApplicationsEntity.setReportTime(LocalDateTime.now());
}
//}
serviceApplicationsDao.updateById(serviceApplicationsEntity);
return ResponseDTO.ok();
}
@ -503,27 +490,27 @@ public class ServiceApplicationsService {
return ResponseDTO.ok();
}
RequestUser requestUser = AdminRequestUtil.getRequestUser();
// RequestUser requestUser = AdminRequestUtil.getRequestUser();
// 查询用户角色是律所管理员,则修改律所的审核状态
// 如果是ceo则修改协会审核状态
List<RoleVO> roles = roleEmployeeService.getRoleIdList(requestUser.getUserId());
if (roles.isEmpty()) {
return ResponseDTO.error(UserErrorCode.NO_PERMISSION);
}
// List<RoleVO> roles = roleEmployeeService.getRoleIdList(requestUser.getUserId());
// if (roles.isEmpty()) {
// return ResponseDTO.error(UserErrorCode.NO_PERMISSION);
// }
String roleCode = roles.get(0).getRoleCode();
// String roleCode = roles.get(0).getRoleCode();
// 设置审核时间
String reviewTime = LocalDateTime.now().toString();
// String reviewTime = LocalDateTime.now().toString();
// 根据不同角色执行不同的提交操作
if (UserTypeEnum.CEO.getDesc().equals(roleCode)) {
// if (UserTypeEnum.CEO.getDesc().equals(roleCode)) {
// CEO角色:修改协会审核状态
serviceApplicationsDao.batchSubmitAsAssociation(idList, ReviewEnum.PASS.getValue(), requestUser.getUserId(), reviewTime);
} else {
//serviceApplicationsDao.batchSubmitAsAssociation(idList, ReviewEnum.PASS.getValue());
// } else {
// 其他角色(如律所管理员):修改律所审核状态
serviceApplicationsDao.batchSubmitAsFirm(idList, ReviewEnum.REVIEW.getValue());
}
serviceApplicationsDao.batchSubmitAsAssociation(idList, ReviewEnum.APPROVAL.getValue());
// }
return ResponseDTO.ok();
}
@ -572,23 +559,11 @@ public class ServiceApplicationsService {
// 根据不同角色执行不同的审核操作
if (UserTypeEnum.CEO.getDesc().equals(roleCode)) {
//如果是CEO自己创建的数据
if (serviceApplicationsEntity.getUserId().equals(requestUser.getEmployeeId())) {
// 修改所有状态审核状态
serviceApplicationsEntity.setAssociationAuditStatus(updateForm.getAssociationAuditStatus());
serviceApplicationsEntity.setAssociationAuditUser(requestUser.getEmployeeId());
serviceApplicationsEntity.setAssociationAuditTime(LocalDateTime.now());
serviceApplicationsEntity.setAssociationAuditOpinion(updateForm.getAssociationAuditOpinion());
serviceApplicationsEntity.setFirmAuditStatus(updateForm.getAssociationAuditStatus());
serviceApplicationsEntity.setFirmAuditUser(requestUser.getEmployeeId());
serviceApplicationsEntity.setFirmAuditTime(LocalDateTime.now());
}else {
// CEO角色:修改协会审核状态
serviceApplicationsEntity.setAssociationAuditStatus(updateForm.getAssociationAuditStatus());
serviceApplicationsEntity.setAssociationAuditUser(requestUser.getEmployeeId());
serviceApplicationsEntity.setAssociationAuditTime(LocalDateTime.now());
serviceApplicationsEntity.setAssociationAuditOpinion(updateForm.getAssociationAuditOpinion());
}
} else {
// 其他角色(如律所管理员):修改律所审核状态
serviceApplicationsEntity.setFirmAuditStatus(updateForm.getFirmAuditStatus());
@ -602,12 +577,12 @@ public class ServiceApplicationsService {
/**
* 律所统计
* @param queryForm
* @param queryForms
* @return
*/
public PageResult<LawyerStatisticsVO> getLawyerStatisticsByDepartment(@Valid LawyerStatisticsQueryForm queryForm) {
Page<?> page = SmartPageUtil.convert2PageQuery(queryForm);
public List<LawyerStatisticsVO> getLawyerStatisticsByDepartment(@Valid LawyerStatisticsQueryFormList queryForms) {
LawyerStatisticsQueryForm queryForm = new LawyerStatisticsQueryForm();
BeanUtil.copyProperties(queryForms, queryForm);
// 如果没有指定季度,则使用年度范围,否则使用季度范围
if (queryForm.getQuarter() == null) {
// 如果用户指定了年份,则使用指定年份,否则使用当前年份
@ -625,18 +600,24 @@ public class ServiceApplicationsService {
queryForm.setEndTime(quarterEnd.toString());
}
//统计
List<LawyerStatisticsVO> lawyerStatisticsWithParamYear = serviceApplicationsDao.getdepartmentStatistics(page, queryForm);
PageResult<LawyerStatisticsVO> lawyerStatisticsVOPageResult = SmartPageUtil.convert2PageResult(page, lawyerStatisticsWithParamYear);
if (!lawyerStatisticsVOPageResult.getList().isEmpty()) {
monthStatisticsDepartment(queryForm, lawyerStatisticsVOPageResult.getList(),null);
List<LawyerStatisticsVO> lawyerStatisticsWithParamYear = serviceApplicationsDao.getdepartmentStatistics(queryForm);
monthStatisticsDepartment(queryForm, lawyerStatisticsWithParamYear,null);
//查询这个部门下面律师的统计信息
if (!lawyerStatisticsWithParamYear.isEmpty()) {
lawyerStatisticsWithParamYear.forEach(lawyerStatisticsVO -> {
ServiceLawyerQueryForm serviceLawyerQueryForm = new ServiceLawyerQueryForm();
serviceLawyerQueryForm.setFirmId(lawyerStatisticsVO.getFirmId());
List<ServiceLawyerImportForm> lawyerServiceVOList = serviceApplicationsDao.getLawyerStatisticsWithParam(serviceLawyerQueryForm);
lawyerStatisticsVO.setLawyerServiceVOList(lawyerServiceVOList);
});
}
return lawyerStatisticsVOPageResult;
return lawyerStatisticsWithParamYear;
}
public void exportLawyerByDepartment(ServiceLawyerQueryForm queryForm, HttpServletResponse response) {
// 如果没有指定季度,则使用年度范围,否则使用季度范围
if (queryForm.getQuarter() == null) {
TimeVo yearStartAndEnd = DateTimeUtil.getYearStartAndEnd();
TimeVo yearStartAndEnd = DateTimeUtil.getYearStartAndEnd(queryForm.getYear());
String yearStart = yearStartAndEnd.getStartTime();
String yearEnd = yearStartAndEnd.getEndTime();
queryForm.setStartTime(yearStart);
@ -691,6 +672,43 @@ public class ServiceApplicationsService {
return ResponseDTO.ok();
}
/**
* 获取服务上报费用
* @param queryForm
* @return
*/
public Long getServiceApplicationsCost(ServiceLawyerQueryForm queryForm) {
// 根据指定的季度设置时间范围
LocalDateTime quarterStart = DateTimeEnum.getQuarterStart(queryForm.getYear(), queryForm.getQuarter());
LocalDateTime quarterEnd = DateTimeEnum.getQuarterEnd(queryForm.getYear(), queryForm.getQuarter());
queryForm.setStartTime(quarterStart.toString());
queryForm.setEndTime(quarterEnd.toString());
//获取多少小时
Long time = serviceApplicationsDao.getServiceApplicationsCost(queryForm);
//获取字典表的设置
DictEntity dictItem = dictService.getOne(3);
if (dictItem == null){
return 0L;
}
//除1w
if (time != null && time != 0L) {
Long timeCost = time * Long.valueOf(dictItem.getRemark());
timeCost = timeCost / 10000;
return timeCost;
}
return 0l;
}
public ResponseDTO<String> batchReviewByDepartmentId(@Valid ServiceApplicationsUpdateForm updateForm) {
//根据部门id批量审核
RequestEmployee requestUser = AdminRequestUtil.getRequestUser();
updateForm.setAssociationAuditUser(requestUser.getEmployeeId());
updateForm.setAssociationAuditTime(LocalDateTime.now());
serviceApplicationsDao.batchReviewByDepartmentId(updateForm);
return ResponseDTO.ok();
}
/**
* Excel下拉列表处理器
*/
@ -922,7 +940,7 @@ public class ServiceApplicationsService {
*/
public PageResult<LawyerStatisticsVO> getLawyerStatistics(LawyerStatisticsQueryForm queryForm) {
Page<?> page = SmartPageUtil.convert2PageQuery(queryForm);
TimeVo yearStartAndEnd = DateTimeUtil.getYearStartAndEnd();
TimeVo yearStartAndEnd = DateTimeUtil.getYearStartAndEnd(queryForm.getYear());
//根据year拼接年度的开始时间和结束时间
String yearStart = yearStartAndEnd.getStartTime();
String yearEnd = yearStartAndEnd.getEndTime();
@ -944,7 +962,7 @@ public class ServiceApplicationsService {
public void exportLawyer(ServiceLawyerQueryForm queryForm, HttpServletResponse response) {
// 如果没有指定季度,则使用年度范围,否则使用季度范围
if (queryForm.getQuarter() == null) {
TimeVo yearStartAndEnd = DateTimeUtil.getYearStartAndEnd();
TimeVo yearStartAndEnd = DateTimeUtil.getYearStartAndEnd(queryForm.getYear());
String yearStart = yearStartAndEnd.getStartTime();
String yearEnd = yearStartAndEnd.getEndTime();
queryForm.setStartTime(yearStart);
@ -1118,6 +1136,22 @@ public class ServiceApplicationsService {
*/
public PageResult<ServiceReportStatisticsVO> getServiceReportStatistics(ServiceApplicationsQueryForm queryForm) {
Page<?> page = SmartPageUtil.convert2PageQuery(queryForm);
// 如果没有指定季度,则使用年度范围,否则使用季度范围
if (queryForm.getQuarter() == null ) {
// 如果用户指定了年份,则使用指定年份,否则使用当前年份
int targetYear = queryForm.getYear() != null ? queryForm.getYear() : DateTimeUtil.getCurrentYear();
String yearStart = targetYear + "-01-01";
String yearEnd = targetYear + "-12-31";
queryForm.setStartTime(yearStart);
queryForm.setEndTime(yearEnd);
} else {
// 根据指定的季度设置时间范围
int targetYear = queryForm.getYear() != null ? queryForm.getYear() : DateTimeUtil.getCurrentYear();
LocalDateTime quarterStart = DateTimeEnum.getQuarterStart(targetYear, queryForm.getQuarter());
LocalDateTime quarterEnd = DateTimeEnum.getQuarterEnd(targetYear, queryForm.getQuarter());
queryForm.setStartTime(quarterStart.toString());
queryForm.setEndTime(quarterEnd.toString());
}
List<ServiceReportStatisticsVO> list = serviceApplicationsDao.getServiceReportStatistics(page, queryForm);
return SmartPageUtil.convert2PageResult(page, list);
}

11
yun-admin/src/main/java/net/lab1024/sa/admin/util/DateTimeUtil.java

@ -80,4 +80,15 @@ public class DateTimeUtil {
timeVo.setYearEnd(endOfYear.toString());
return timeVo;
}
/**
* 根据年度获取年度的开始时间和结束时间
*/
public static TimeVo getYearStartAndEnd(Integer year) {
TimeVo timeVo = new TimeVo();
LocalDate beginOfYear = LocalDate.of(year, 1, 1);
LocalDate endOfYear = LocalDate.of(year, 12, 31);
timeVo.setStartTime(beginOfYear.toString());
timeVo.setEndTime(endOfYear.toString());
return timeVo;
}
}

15
yun-admin/src/main/resources/mapper/cost/FirmReportsMapper.xml

@ -20,6 +20,14 @@
t_firm_reports.update_time as updateTime,
t_firm_reports.del_flag as delFlag
</sql>
<update id="commit">
UPDATE t_firm_reports
SET approval_status = 3
WHERE id IN
<foreach item="item" collection="list" separator="," open="(" close=")" index="">
#{item}
</foreach>
</update>
<!-- 分页查询 -->
<select id="queryPage" resultType="net.lab1024.sa.admin.module.cost.domain.vo.FirmReportsVO">
@ -31,7 +39,12 @@
<if test="queryForm.firmId != null and queryForm.firmId != ''">
AND t_firm_reports.firm_id = #{queryForm.firmId}
</if>
<if test="queryForm.userId != null">
<if test="queryForm.includeSubmitted != null and queryForm.includeSubmitted">
<!-- 如果包含已提交的数据,则查询审批状态>=3的数据(已提交)或用户自己的数据,此时忽略queryForm.userId的单独筛选条件-->
AND (t_firm_reports.approval_status >= 3 OR t_firm_reports.user_id = #{queryForm.userId})
</if>
<if test="queryForm.userId != null and (queryForm.includeSubmitted == null or queryForm.includeSubmitted == false)">
<!-- 只有在未设置includeSubmitted时才使用userId作为过滤条件 -->
AND t_firm_reports.user_id = #{queryForm.userId}
</if>
<if test="queryForm.declareYear != null">

107
yun-admin/src/main/resources/mapper/service/ServiceApplicationsMapper.xml

@ -104,6 +104,13 @@
OR t_service_applications.user_id = #{queryForm.currentUserId} <!-- 对自己创建的数据不过滤 -->
)
</if>
<!-- 当用户指定了协会审核状态时,仍然允许查看自己创建的数据 -->
<if test="queryForm.includeAssociationReviewed != null and queryForm.includeAssociationReviewed and (queryForm.associationAuditStatus != null and queryForm.associationAuditStatus != '')">
AND (
(association_audit_status = #{queryForm.associationAuditStatus})
OR t_service_applications.user_id = #{queryForm.currentUserId} <!-- 对自己创建的数据不过滤 -->
)
</if>
<!-- 普通律所用户不过滤审核状态,当noStatusFilter为true时,不应用firm审核状态过滤 -->
<if test="queryForm.noStatusFilter != null and queryForm.noStatusFilter">
<!-- 普通律所用户:不过滤firm_audit_status,可以看到所有状态的数据 -->
@ -116,6 +123,13 @@
OR t_service_applications.user_id = #{queryForm.currentUserId} <!-- 对自己创建的数据不过滤 -->
)
</if>
<!-- 当用户指定了律所审核状态时,仍然允许查看自己创建的数据 -->
<if test="queryForm.includeFirmReviewed != null and queryForm.includeFirmReviewed and (queryForm.firmAuditStatus != null and queryForm.firmAuditStatus != '')">
AND (
(firm_audit_status = #{queryForm.firmAuditStatus})
OR t_service_applications.user_id = #{queryForm.currentUserId} <!-- 对自己创建的数据不过滤 -->
)
</if>
</where>
ORDER BY t_service_applications.firm_audit_status DESC,association_audit_status DESC
</select>
@ -142,7 +156,7 @@
<update id="batchSubmitAsFirm">
update t_service_applications set
firm_audit_status = #{firmAuditStatus},
association_audit_status = #{firmAuditStatus},
firm_audit_user = #{userId},
firm_audit_time = #{submitTime},
report_time = NOW()
@ -154,10 +168,7 @@
<update id="batchSubmitAsAssociation">
update t_service_applications set
association_audit_status = #{associationAuditStatus},
association_audit_user = #{userId},
association_audit_time = #{submitTime},
report_time = NOW()
association_audit_status = #{associationAuditStatus}
where application_id in
<foreach collection="idList" open="(" close=")" separator="," item="item">
#{item}
@ -195,6 +206,13 @@
#{item}
</foreach>
</update>
<update id="batchReviewByDepartmentId">
update t_service_applications set
association_audit_status = #{queryForm.associationAuditStatus},
association_audit_user = #{queryForm.associationAuditUser},
association_audit_time = #{queryForm.associationAuditTime}
where association_audit_status = 1 and firm_id = #{queryForm.firmId}
</update>
<!-- 律师统计查询(无参数,保持向后兼容) -->
<select id="getLawyerStatistics" resultType="net.lab1024.sa.admin.module.service.domain.vo.LawyerStatisticsVO">
@ -228,10 +246,10 @@
tsa.deleted_flag = 0
AND tsa.firm_audit_status = 3 <!-- PASS -->
<if test="queryForm.startTime != null and queryForm.startTime != ''">
AND tsa.report_time &gt;= #{queryForm.startTime}
AND tsa.firm_audit_time &gt;= #{queryForm.startTime}
</if>
<if test="queryForm.endTime != null and queryForm.endTime != ''">
AND tsa.report_time &lt;= #{queryForm.endTime}
AND tsa.firm_audit_time &lt;= #{queryForm.endTime}
</if>
<if test="queryForm.userId != null and queryForm.userId != ''">
and user_id = #{queryForm.userId}
@ -242,6 +260,9 @@
<if test="queryForm.firmName != null and queryForm.firmName != ''">
AND d.department_name LIKE CONCAT('%', #{queryForm.firmName}, '%')
</if>
<if test="queryForm.firmId != null and queryForm.firmId != ''">
AND tsa.firm_id = #{queryForm.firmId}
</if>
</where>
GROUP BY tsa.user_id
ORDER BY e.actual_name
@ -260,10 +281,10 @@
tsa.deleted_flag = 0
AND tsa.firm_audit_status = 3
<if test="queryForm.startTime != null and queryForm.startTime != ''">
AND tsa.report_time &gt;= #{queryForm.startTime}
AND tsa.firm_audit_time &gt;= #{queryForm.startTime}
</if>
<if test="queryForm.endTime != null and queryForm.endTime != ''">
AND tsa.report_time &lt;= #{queryForm.endTime}
AND tsa.firm_audit_time &lt;= #{queryForm.endTime}
</if>
<if test="queryForm.userId != null and queryForm.userId != ''">
and tsa.user_id = #{queryForm.userId}
@ -274,6 +295,9 @@
<if test="queryForm.firmName != null and queryForm.firmName != ''">
AND d.department_name LIKE CONCAT('%', #{queryForm.firmName}, '%')
</if>
<if test="queryForm.firmId != null and queryForm.firmId != ''">
AND d.department_id = #{queryForm.firmId}
</if>
</where>
GROUP BY tsa.user_id
</select>
@ -290,10 +314,10 @@
tsa.deleted_flag = 0
AND tsa.firm_audit_status = 3
<if test="queryForm.startTime != null and queryForm.startTime != ''">
AND tsa.report_time &gt;= #{queryForm.startTime}
AND tsa.firm_audit_time &gt;= #{queryForm.startTime}
</if>
<if test="queryForm.endTime != null and queryForm.endTime != ''">
AND tsa.report_time &lt;= #{queryForm.endTime}
AND tsa.firm_audit_time &lt;= #{queryForm.endTime}
</if>
<if test="queryForm.userId != null and queryForm.userId != ''">
and tsa.user_id = #{queryForm.userId}
@ -312,10 +336,10 @@
tsa.deleted_flag = 0
AND tsa.firm_audit_status = 3
<if test="queryForm.startTime != null and queryForm.startTime != ''">
AND tsa.report_time &gt;= #{queryForm.startTime}
AND tsa.association_audit_time &gt;= #{queryForm.startTime}
</if>
<if test="queryForm.endTime != null and queryForm.endTime != ''">
AND tsa.report_time &lt;= #{queryForm.endTime}
AND tsa.association_audit_time &lt;= #{queryForm.endTime}
</if>
<if test="queryForm.userId != null and queryForm.userId != ''">
and tsa.user_id = #{queryForm.userId}
@ -337,10 +361,10 @@
tsa.deleted_flag = 0
AND tsa.firm_audit_status = 3
<if test="queryForm.startTime != null and queryForm.startTime != ''">
AND tsa.report_time &gt;= #{queryForm.startTime}
AND tsa.association_audit_time &gt;= #{queryForm.startTime}
</if>
<if test="queryForm.endTime != null and queryForm.endTime != ''">
AND tsa.report_time &lt;= #{queryForm.endTime}
AND tsa.association_audit_time &lt;= #{queryForm.endTime}
</if>
<if test="queryForm.userId != null and queryForm.userId != ''">
and tsa.user_id = #{queryForm.userId}
@ -362,10 +386,10 @@
tsa.deleted_flag = 0
AND tsa.firm_audit_status = 3
<if test="queryForm.startTime != null and queryForm.startTime != ''">
AND tsa.report_time &gt;= #{queryForm.startTime}
AND tsa.association_audit_time &gt;= #{queryForm.startTime}
</if>
<if test="queryForm.endTime != null and queryForm.endTime != ''">
AND tsa.report_time &lt;= #{queryForm.endTime}
AND tsa.association_audit_time &lt;= #{queryForm.endTime}
</if>
<if test="queryForm.userId != null and queryForm.userId != ''">
and tsa.user_id = #{queryForm.userId}
@ -382,26 +406,47 @@
SELECT
d.department_id AS firmId,
d.department_name AS firmName,
COUNT(DISTINCT tsa.user_id) AS lawyerCount,
COUNT(tsa.application_id) AS reportCount,
COUNT(CASE WHEN tsa.firm_audit_status = 3 THEN 1 END) AS approvedCount, -- 3表示通过
COUNT(1) AS pendingCount, -- 1表示待审核, 2表示退回
COUNT(DISTINCT e.employee_id) AS lawyerCount,
COUNT(CASE WHEN tsa.association_audit_status != 0 THEN 1 END) AS reportCount,
COUNT(CASE WHEN tsa.association_audit_status = 3 THEN 1 END) AS approvedCount,
COUNT(CASE WHEN tsa.association_audit_status = 4 THEN 1 END) AS rejectCount,
COUNT(CASE WHEN tsa.association_audit_status !=0 THEN 1 END) - COUNT(CASE WHEN tsa.association_audit_status in (3,4) THEN 1 END )
AS pendingCount,
COALESCE(SUM(tsa.service_duration), 0) AS totalServiceDuration
FROM
t_department d
LEFT JOIN t_employee e ON e.department_id = d.department_id
LEFT JOIN t_service_applications tsa ON tsa.user_id = e.employee_id
AND tsa.deleted_flag = 0
<if test="queryForm.firmId != null">
AND tsa.firm_id = #{queryForm.firmId}
</if>
<if test="queryForm.startTime != null">
AND tsa.association_audit_time &gt;= #{queryForm.startTime}
</if>
<if test="queryForm.endTime != null">
AND tsa.association_audit_time &lt;= #{queryForm.endTime}
</if>
GROUP BY
d.department_id,
d.department_name
ORDER BY
approvedCount DESC,pendingCount DESC,lawyerCount DESC
</select>
<select id="getServiceApplicationsCost" resultType="java.lang.Long">
SELECT
SUM(tsa.service_duration) AS totalServiceCost
FROM t_service_applications tsa
LEFT JOIN t_department d ON tsa.firm_id = d.department_id
<where>
tsa.deleted_flag = 0
<if test="queryForm.year != null">
AND YEAR(tsa.service_start) = #{queryForm.year}
WHERE tsa.deleted_flag = 0
AND tsa.firm_audit_status = 3
<if test="queryForm.startTime != null and queryForm.startTime != ''">
AND tsa.association_audit_time &gt;= #{queryForm.startTime}
</if>
<if test="queryForm.quarter != null">
AND QUARTER(tsa.service_start) = #{queryForm.quarter}
<if test="queryForm.endTime != null and queryForm.endTime != ''">
AND tsa.association_audit_time &lt;= #{queryForm.endTime}
</if>
<if test="queryForm.firmId != null">
AND tsa.firm_id = #{queryForm.firmId}
</if>
</where>
GROUP BY tsa.firm_id, d.department_name
ORDER BY d.department_name
</select>
</mapper>

4
yun-base/src/main/java/net/lab1024/sa/base/module/support/dict/service/DictService.java

@ -287,4 +287,8 @@ public class DictService {
DictDataVO dictData = dictDataDao.selectByDictCodeAndValue(dictEntity.getDictId(), dataValue);
return dictData == null ? "" : dictData.getDataLabel();
}
public DictEntity getOne(int i) {
return dictDao.selectById(i);
}
}

Loading…
Cancel
Save