Browse Source

fix:报表统计后端开发

master
“wangzihua” 4 months ago
parent
commit
7c018e4f1a
  1. 10
      .idea/.gitignore
  2. 1
      .idea/.name
  3. 15
      .idea/compiler.xml
  4. 14
      .idea/encodings.xml
  5. 20
      .idea/jarRepositories.xml
  6. 12
      .idea/misc.xml
  7. 6
      .idea/sqldialects.xml
  8. 6
      .idea/vcs.xml
  9. 92
      yun-admin/src/main/java/net/lab1024/sa/admin/common/enums/DateTimeEnum.java
  10. 10
      yun-admin/src/main/java/net/lab1024/sa/admin/module/service/controller/ServiceApplicationsController.java
  11. 24
      yun-admin/src/main/java/net/lab1024/sa/admin/module/service/dao/ServiceApplicationsDao.java
  12. 4
      yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/entity/ServiceApplicationsEntity.java
  13. 38
      yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/form/LawyerStatisticsQueryForm.java
  14. 37
      yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/vo/LawyerStatisticsVO.java
  15. 52
      yun-admin/src/main/java/net/lab1024/sa/admin/module/service/service/ServiceApplicationsService.java
  16. 90
      yun-admin/src/main/java/net/lab1024/sa/admin/util/DateTimeUtil.java
  17. 19
      yun-admin/src/main/java/net/lab1024/sa/admin/util/TimeVo.java
  18. 104
      yun-admin/src/main/resources/mapper/service/ServiceApplicationsMapper.xml
  19. 2
      yun-admin/target/classes/mapper/business/goods/GoodsMapper.xml
  20. 104
      yun-admin/target/classes/mapper/service/ServiceApplicationsMapper.xml
  21. BIN
      yun-admin/target/classes/net/lab1024/sa/admin/module/service/controller/ServiceApplicationsController.class
  22. BIN
      yun-admin/target/classes/net/lab1024/sa/admin/module/service/dao/ServiceApplicationsDao.class
  23. BIN
      yun-admin/target/classes/net/lab1024/sa/admin/module/service/service/ServiceApplicationsService$DropdownSheetWriteHandler.class
  24. BIN
      yun-admin/target/classes/net/lab1024/sa/admin/module/service/service/ServiceApplicationsService.class

10
.idea/.gitignore

@ -0,0 +1,10 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Environment-dependent path to Maven home directory
/mavenHomeManager.xml
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

1
.idea/.name

@ -0,0 +1 @@
yun-parent

15
.idea/compiler.xml

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile default="true" name="Default" enabled="true" />
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="yun-base" />
<module name="yun-admin" />
</profile>
</annotationProcessing>
</component>
</project>

14
.idea/encodings.xml

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources/dev" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/yun-admin/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/yun-admin/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/yun-admin/src/main/resources/dev" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/yun-base/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/yun-base/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/yun-base/src/main/resources/dev" charset="UTF-8" />
</component>
</project>

20
.idea/jarRepositories.xml

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="https://maven.aliyun.com/repository/central" />
</remote-repository>
</component>
</project>

12
.idea/misc.xml

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
</project>

6
.idea/sqldialects.xml

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="SqlDialectMappings">
<file url="file://$PROJECT_DIR$/yun-admin/src/main/java/net/lab1024/sa/admin/module/letter/sql/LetterMenu.sql" dialect="GenericSQL" />
</component>
</project>

6
.idea/vcs.xml

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

92
yun-admin/src/main/java/net/lab1024/sa/admin/common/enums/DateTimeEnum.java

@ -0,0 +1,92 @@
package net.lab1024.sa.admin.common.enums;
import lombok.Data;
import net.lab1024.sa.base.common.enumeration.BaseEnum;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
/**
* 时间枚举
*/
public enum DateTimeEnum implements BaseEnum {
Q1_START(1, "第一季度开始时间", "01-01 00:00:00"),
Q1_END(2, "第一季度结束时间", "03-31 23:59:59"),
Q2_START(3, "第二季度开始时间", "04-01 00:00:00"),
Q2_END(4, "第二季度结束时间", "06-30 23:59:59"),
Q3_START(5, "第三季度开始时间", "07-01 00:00:00"),
Q3_END(6, "第三季度结束时间", "09-30 23:59:59"),
Q4_START(7, "第四季度开始时间", "10-01 00:00:00"),
Q4_END(8, "第四季度结束时间", "12-31 23:59:59");
DateTimeEnum(Integer value, String desc, String timePattern) {
this.value = value;
this.desc = desc;
this.timePattern = timePattern;
}
private Integer value;
private String desc;
private String timePattern;
@Override
public Integer getValue() {
return value;
}
@Override
public String getDesc() {
return desc;
}
public String getTimePattern() {
return timePattern;
}
/**
* 获取指定年份的季度开始时间
*/
public LocalDateTime getQuarterStartDateTime(int year) {
String dateStr = year + "-" + this.timePattern.substring(0, 5) + " 00:00:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
return LocalDateTime.parse(dateStr, formatter);
}
/**
* 获取指定年份的季度结束时间
*/
public LocalDateTime getQuarterEndDateTime(int year) {
String dateStr = year + "-" + this.timePattern.substring(0, 5) + " 23:59:59";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
return LocalDateTime.parse(dateStr, formatter);
}
/**
* 根据季度编号获取开始时间
*/
public static LocalDateTime getQuarterStart(int year, int quarter) {
switch (quarter) {
case 1: return Q1_START.getQuarterStartDateTime(year);
case 2: return Q2_START.getQuarterStartDateTime(year);
case 3: return Q3_START.getQuarterStartDateTime(year);
case 4: return Q4_START.getQuarterStartDateTime(year);
default: throw new IllegalArgumentException("无效的季度: " + quarter);
}
}
/**
* 根据季度编号获取结束时间
*/
public static LocalDateTime getQuarterEnd(int year, int quarter) {
switch (quarter) {
case 1: return Q1_END.getQuarterEndDateTime(year);
case 2: return Q2_END.getQuarterEndDateTime(year);
case 3: return Q3_END.getQuarterEndDateTime(year);
case 4: return Q4_END.getQuarterEndDateTime(year);
default: throw new IllegalArgumentException("无效的季度: " + quarter);
}
}
}

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

@ -3,6 +3,8 @@ package net.lab1024.sa.admin.module.service.controller;
import net.lab1024.sa.admin.module.service.domain.form.ServiceApplicationsAddForm; import net.lab1024.sa.admin.module.service.domain.form.ServiceApplicationsAddForm;
import net.lab1024.sa.admin.module.service.domain.form.ServiceApplicationsQueryForm; import net.lab1024.sa.admin.module.service.domain.form.ServiceApplicationsQueryForm;
import net.lab1024.sa.admin.module.service.domain.form.ServiceApplicationsUpdateForm; import net.lab1024.sa.admin.module.service.domain.form.ServiceApplicationsUpdateForm;
import net.lab1024.sa.admin.module.service.domain.form.LawyerStatisticsQueryForm;
import net.lab1024.sa.admin.module.service.domain.vo.LawyerStatisticsVO;
import net.lab1024.sa.admin.module.service.domain.vo.ServiceApplicationsVO; import net.lab1024.sa.admin.module.service.domain.vo.ServiceApplicationsVO;
import net.lab1024.sa.admin.module.service.service.ServiceApplicationsService; import net.lab1024.sa.admin.module.service.service.ServiceApplicationsService;
import net.lab1024.sa.base.common.domain.ValidateList; import net.lab1024.sa.base.common.domain.ValidateList;
@ -16,6 +18,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.List;
/** /**
* 服务申报表 Controller * 服务申报表 Controller
@ -106,4 +109,11 @@ public class ServiceApplicationsController {
public void downloadTemplate(HttpServletResponse response) { public void downloadTemplate(HttpServletResponse response) {
serviceApplicationsService.downloadTemplate(response); serviceApplicationsService.downloadTemplate(response);
} }
@Operation(summary = "律师统计信息 @author wzh")
@PostMapping("/serviceApplications/statistics")
@SaCheckPermission("serviceApplications:statistics")
public ResponseDTO<PageResult<LawyerStatisticsVO>> getLawyerStatistics(@RequestBody @Valid LawyerStatisticsQueryForm queryForm) {
return ResponseDTO.ok(serviceApplicationsService.getLawyerStatistics(queryForm));
}
} }

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

@ -2,7 +2,9 @@ package net.lab1024.sa.admin.module.service.dao;
import java.util.List; import java.util.List;
import net.lab1024.sa.admin.module.service.domain.entity.ServiceApplicationsEntity; import net.lab1024.sa.admin.module.service.domain.entity.ServiceApplicationsEntity;
import net.lab1024.sa.admin.module.service.domain.form.LawyerStatisticsQueryForm;
import net.lab1024.sa.admin.module.service.domain.form.ServiceApplicationsQueryForm; import net.lab1024.sa.admin.module.service.domain.form.ServiceApplicationsQueryForm;
import net.lab1024.sa.admin.module.service.domain.vo.LawyerStatisticsVO;
import net.lab1024.sa.admin.module.service.domain.vo.ServiceApplicationsVO; import net.lab1024.sa.admin.module.service.domain.vo.ServiceApplicationsVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -41,4 +43,26 @@ public interface ServiceApplicationsDao extends BaseMapper<ServiceApplicationsEn
void batchUpdateDeleted(@Param("idList")List<Integer> idList,@Param("deletedFlag")boolean deletedFlag); void batchUpdateDeleted(@Param("idList")List<Integer> idList,@Param("deletedFlag")boolean deletedFlag);
void batchSubmit(@Param("idList")List<Integer> idList, @Param("deletedFlag")Integer b); void batchSubmit(@Param("idList")List<Integer> idList, @Param("deletedFlag")Integer b);
/**
* 律师统计查询无参数保持向后兼容
*/
List<LawyerStatisticsVO> getLawyerStatistics();
/**
* 律师统计查询带参数
*/
List<LawyerStatisticsVO> getLawyerStatisticsWithParam(Page page, @Param("queryForm") LawyerStatisticsQueryForm queryForm);
/**
* 年度律师统计查询带参数
*/
List<LawyerStatisticsVO> getLawyerStatisticsWithParamYear(Page page, @Param("queryForm") LawyerStatisticsQueryForm queryForm);
/**
* 月度统计
* @param queryForm
* @return
*/
LawyerStatisticsVO getLawyerStatistic(@Param("queryForm") LawyerStatisticsQueryForm queryForm);
} }

4
yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/entity/ServiceApplicationsEntity.java

@ -132,6 +132,10 @@ public class ServiceApplicationsEntity {
*/ */
private Integer recordStatus; private Integer recordStatus;
/**
* 上报时间
*/
private LocalDateTime reportTime;
/** /**
* 备案时间 * 备案时间
*/ */

38
yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/form/LawyerStatisticsQueryForm.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;
import javax.validation.constraints.Pattern;
import java.time.LocalDateTime;
/**
* 律师统计查询表单
*
* @author wzh
*/
@Data
@Schema(description = "律师统计查询表单")
public class LawyerStatisticsQueryForm extends PageParam {
@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 = "开始时间")
private String startTime;
@Schema(description = "结束时间")
private String endTime;
private Long userId;
}

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

@ -0,0 +1,37 @@
package net.lab1024.sa.admin.module.service.domain.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
/**
* 律师统计信息 VO
*
* @Author wzh
*/
@Data
@Schema(description = "律师统计信息")
public class LawyerStatisticsVO {
private Long userId;
@Schema(description = "执业律师姓名")
private String lawyerName;
@Schema(description = "执业证号")
private String certificateNumber;
@Schema(description = "季度累计服务时长")
private Double quarterlyServiceDuration;
@Schema(description = "季度累计服务成本")
private BigDecimal quarterlyServiceCost;
@Schema(description = "年度累计服务时长")
private Double annualServiceDuration;
@Schema(description = "年度累计服务成本")
private BigDecimal annualServiceCost;
}

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

@ -15,10 +15,13 @@ import net.lab1024.sa.admin.module.business.goods.service.GoodsService;
import net.lab1024.sa.admin.module.service.dao.ServiceApplicationsDao; import net.lab1024.sa.admin.module.service.dao.ServiceApplicationsDao;
import net.lab1024.sa.admin.module.service.domain.entity.ServiceApplicationsEntity; import net.lab1024.sa.admin.module.service.domain.entity.ServiceApplicationsEntity;
import net.lab1024.sa.admin.module.service.domain.form.*; import net.lab1024.sa.admin.module.service.domain.form.*;
import net.lab1024.sa.admin.module.service.domain.form.LawyerStatisticsQueryForm;
import net.lab1024.sa.admin.common.enums.DateTimeEnum;
import net.lab1024.sa.admin.module.service.domain.vo.ActivityCategoryConverter; import net.lab1024.sa.admin.module.service.domain.vo.ActivityCategoryConverter;
import net.lab1024.sa.admin.module.service.domain.vo.ActivityNameConverter; import net.lab1024.sa.admin.module.service.domain.vo.ActivityNameConverter;
import net.lab1024.sa.admin.module.service.domain.vo.EmployeeNameConverter; import net.lab1024.sa.admin.module.service.domain.vo.EmployeeNameConverter;
import net.lab1024.sa.admin.module.service.domain.vo.OrganizationNameConverter; import net.lab1024.sa.admin.module.service.domain.vo.OrganizationNameConverter;
import net.lab1024.sa.admin.module.service.domain.vo.LawyerStatisticsVO;
import net.lab1024.sa.admin.module.service.domain.vo.ServiceApplicationsTemplateVO; import net.lab1024.sa.admin.module.service.domain.vo.ServiceApplicationsTemplateVO;
import net.lab1024.sa.admin.module.service.domain.vo.ServiceApplicationsVO; import net.lab1024.sa.admin.module.service.domain.vo.ServiceApplicationsVO;
import net.lab1024.sa.admin.module.system.department.domain.entity.DepartmentEntity; import net.lab1024.sa.admin.module.system.department.domain.entity.DepartmentEntity;
@ -26,6 +29,7 @@ import net.lab1024.sa.admin.module.system.department.service.DepartmentService;
import net.lab1024.sa.admin.module.system.employee.domain.entity.EmployeeEntity; import net.lab1024.sa.admin.module.system.employee.domain.entity.EmployeeEntity;
import net.lab1024.sa.admin.module.system.employee.service.EmployeeService; import net.lab1024.sa.admin.module.system.employee.service.EmployeeService;
import net.lab1024.sa.admin.util.AdminRequestUtil; import net.lab1024.sa.admin.util.AdminRequestUtil;
import net.lab1024.sa.admin.util.DateTimeUtil;
import net.lab1024.sa.base.common.domain.PageResult; import net.lab1024.sa.base.common.domain.PageResult;
import net.lab1024.sa.base.common.domain.RequestUser; import net.lab1024.sa.base.common.domain.RequestUser;
import net.lab1024.sa.base.common.domain.ResponseDTO; import net.lab1024.sa.base.common.domain.ResponseDTO;
@ -578,4 +582,52 @@ public class ServiceApplicationsService {
// 在创建Sheet前执行的逻辑,这里不需要处理 // 在创建Sheet前执行的逻辑,这里不需要处理
} }
} }
/**
* 获取律师统计信息
*/
public List<LawyerStatisticsVO> getLawyerStatistics() {
return serviceApplicationsDao.getLawyerStatistics();
}
/**
* 获取律师统计信息带查询参数
*/
public PageResult<LawyerStatisticsVO> getLawyerStatistics(LawyerStatisticsQueryForm queryForm) {
Page<?> page = SmartPageUtil.convert2PageQuery(queryForm);
//根据year拼接年度的开始时间和结束时间
String yearStart = DateTimeUtil.getYearStartAndEnd().getStartTime();
String yearEnd = DateTimeUtil.getYearStartAndEnd().getEndTime();
queryForm.setStartTime(yearStart);
queryForm.setEndTime(yearEnd);
//统计当前年度的
List<LawyerStatisticsVO> lawyerStatisticsWithParamYear = serviceApplicationsDao.getLawyerStatisticsWithParamYear(page, queryForm);
PageResult<LawyerStatisticsVO> lawyerStatisticsVOPageResult = SmartPageUtil.convert2PageResult(page, lawyerStatisticsWithParamYear);
//在统计月度的
if (queryForm.getQuarter() == null) {
//获取当前月份上一季度的开始时间和结束时间
String quarterStart = DateTimeUtil.getStartQuarter().getStartTime();
String quarterEnd = DateTimeUtil.getStartQuarter().getEndTime();
queryForm.setStartTime(quarterStart.toString());
queryForm.setEndTime(quarterEnd.toString());
} else{
//根据季度获取季度的开发时间和
LocalDateTime quarterStart = DateTimeEnum.getQuarterStart(queryForm.getYear(), queryForm.getQuarter());
//结束时间
LocalDateTime quarterEnd = DateTimeEnum.getQuarterEnd(queryForm.getYear(), queryForm.getQuarter());
queryForm.setStartTime(quarterStart.toString());
queryForm.setEndTime(quarterEnd.toString());
}
if (!lawyerStatisticsVOPageResult.getList().isEmpty()) {
for (LawyerStatisticsVO statisticsVO : lawyerStatisticsVOPageResult.getList()) {
queryForm.setUserId(statisticsVO.getUserId());
//季度服务时间范围
LawyerStatisticsVO quarterStatisticsVO = serviceApplicationsDao.getLawyerStatistic(queryForm);
statisticsVO.setQuarterlyServiceDuration(quarterStatisticsVO.getQuarterlyServiceDuration());
}
}
return lawyerStatisticsVOPageResult;
}
} }

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

@ -0,0 +1,90 @@
package net.lab1024.sa.admin.util;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
/**
* @program: yun-parent
* @description: 时间工具
* @author: Mr.Wang
* @create: 2025-12-24 16:24
**/
public class DateTimeUtil {
/**
* 获取当前日期上一季度 开始时间
*
* @return
*/
public static TimeVo getStartQuarter() {
// 获取当前日期
LocalDate today = LocalDate.now();
TimeVo timeVo = new TimeVo();
// 计算上个季度的起始和结束日期
LocalDate startOfLastQuarter;
LocalDate endOfLastQuarter;
int month = today.getMonthValue();
int year = today.getYear();
if (month >= 1 && month <= 3) {
// 当前是第一季度,上个季度是上一年第四季度
startOfLastQuarter = LocalDate.of(year - 1, 10, 1);
endOfLastQuarter = LocalDate.of(year - 1, 12, 31);
} else if (month >= 4 && month <= 6) {
// 当前是第二季度,上个季度是上一年第一季度
startOfLastQuarter = LocalDate.of(year - 1, 1, 1);
endOfLastQuarter = LocalDate.of(year - 1, 3, 31);
} else if (month >= 7 && month <= 9) {
// 当前是第三季度,上个季度是本年第一季度
startOfLastQuarter = LocalDate.of(year, 1, 1);
endOfLastQuarter = LocalDate.of(year, 3, 31);
} else {
// 当前是第四季度,上个季度是本年第三季度
startOfLastQuarter = LocalDate.of(year, 7, 1);
endOfLastQuarter = LocalDate.of(year, 9, 30);
}
// 格式化日期以便输出
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// 输出上个季度的起始和结束日期
String startTime = startOfLastQuarter.format(formatter);
String endTime = endOfLastQuarter.format(formatter);
timeVo.setStartTime(startTime);
timeVo.setEndTime(endTime);
return timeVo;
}
/**
* 获取当前年度
*/
public static Integer getCurrentYear() {
// 获取当前日期
LocalDate today = LocalDate.now();
return today.getYear();
}
/**
* 当前年度的开始时间和结束时间
*/
public static TimeVo getYearStartAndEnd() {
TimeVo timeVo = new TimeVo();
LocalDate currentDate = LocalDate.now();
LocalDate beginOfYear = currentDate.withDayOfYear(1);
LocalDate endOfYear = currentDate.withDayOfYear(currentDate.lengthOfYear());
//格式化
//DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
// 输出上个季度的起始和结束日期
//String startTime = beginOfYear.format(formatter);
//String endTime = endOfYear.format(formatter);
timeVo.setYearStart(beginOfYear.toString());
timeVo.setYearEnd(endOfYear.toString());
return timeVo;
}
}

19
yun-admin/src/main/java/net/lab1024/sa/admin/util/TimeVo.java

@ -0,0 +1,19 @@
package net.lab1024.sa.admin.util;
import lombok.Data;
/**
* @program: yun-parent
* @description: 时间格式
* @author: Mr.Wang
* @create: 2025-12-25 09:03
**/
@Data
public class TimeVo {
private String startTime;
private String endTime;
private String yearStart;
private String yearEnd;
}

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

@ -33,7 +33,8 @@
t_service_applications.certificate_number, t_service_applications.certificate_number,
t_service_applications.activity_category_id, t_service_applications.activity_category_id,
t_service_applications.activity_name_id, t_service_applications.activity_name_id,
t_service_applications.attachment_ids t_service_applications.attachment_ids,
t_service_applications.report_time
</sql> </sql>
<!-- 分页查询 --> <!-- 分页查询 -->
@ -103,4 +104,105 @@
</foreach> </foreach>
</update> </update>
<!-- 律师统计查询(无参数,保持向后兼容) -->
<select id="getLawyerStatistics" resultType="net.lab1024.sa.admin.module.service.domain.vo.LawyerStatisticsVO">
SELECT
e.actual_name AS lawyerName,
tsa.certificate_number AS certificateNumber,
COALESCE(SUM(CASE WHEN tsa.service_start >= DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 3 MONTH), '%Y-%m-01') THEN tsa.service_duration ELSE 0 END), 0) AS quarterlyServiceDuration,
COALESCE(SUM(CASE WHEN tsa.service_start >= DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 3 MONTH), '%Y-%m-01') THEN tsa.workload_score ELSE 0 END), 0) AS quarterlyServiceCost,
COALESCE(SUM(CASE WHEN YEAR(tsa.service_start) = YEAR(NOW()) THEN tsa.service_duration ELSE 0 END), 0) AS annualServiceDuration,
COALESCE(SUM(CASE WHEN YEAR(tsa.service_start) = YEAR(NOW()) THEN tsa.workload_score ELSE 0 END), 0) AS annualServiceCost
FROM t_service_applications tsa
LEFT JOIN t_employee e ON tsa.user_id = e.employee_id
LEFT JOIN t_department d ON tsa.firm_id = d.department_id
WHERE tsa.deleted_flag = 0
GROUP BY tsa.user_id, tsa.certificate_number, e.actual_name
ORDER BY e.actual_name
</select>
<!-- 律师统计查询(带参数) -->
<select id="getLawyerStatisticsWithParam" resultType="net.lab1024.sa.admin.module.service.domain.vo.LawyerStatisticsVO">
SELECT
e.actual_name AS lawyerName,
e.employee_id as userId,
tsa.certificate_number AS certificateNumber,
COALESCE(SUM(tsa.service_duration), 0) AS quarterlyServiceDuration
FROM t_service_applications tsa
LEFT JOIN t_employee e ON tsa.user_id = e.employee_id
LEFT JOIN t_department d ON tsa.firm_id = d.department_id
<where>
tsa.deleted_flag = 0
<if test="queryForm.startTime != null and queryForm.startTime != ''">
AND tsa.report_time &gt;= #{queryForm.startTime}
</if>
<if test="queryForm.endTime != null and queryForm.endTime != ''">
AND tsa.report_time &lt;= #{queryForm.endTime}
</if>
<if test="queryForm.userId != null and queryForm.userId != ''">
and user_id = #{queryForm.userId}
</if>
<if test="queryForm.lawyerName != null and queryForm.lawyerName != ''">
AND e.actual_name LIKE CONCAT('%', #{queryForm.lawyerName}, '%')
</if>
<if test="queryForm.firmName != null and queryForm.firmName != ''">
AND d.department_name LIKE CONCAT('%', #{queryForm.firmName}, '%')
</if>
</where>
GROUP BY tsa.user_id
ORDER BY e.actual_name
</select>
<select id="getLawyerStatisticsWithParamYear"
resultType="net.lab1024.sa.admin.module.service.domain.vo.LawyerStatisticsVO">
SELECT
e.actual_name AS lawyerName,
e.employee_id as userId,
tsa.certificate_number AS certificateNumber,
COALESCE(SUM(tsa.service_duration), 0) AS annualServiceDuration
FROM t_service_applications tsa
LEFT JOIN t_employee e ON tsa.user_id = e.employee_id
LEFT JOIN t_department d ON tsa.firm_id = d.department_id
<where>
tsa.deleted_flag = 0
<if test="queryForm.startTime != null and queryForm.startTime != ''">
AND tsa.report_time &gt;= #{queryForm.startTime}
</if>
<if test="queryForm.endTime != null and queryForm.endTime != ''">
AND tsa.report_time &lt;= #{queryForm.endTime}
</if>
<if test="queryForm.userId != null and queryForm.userId != ''">
and tsa.user_id = #{queryForm.userId}
</if>
<if test="queryForm.lawyerName != null and queryForm.lawyerName != ''">
AND e.actual_name LIKE CONCAT('%', #{queryForm.lawyerName}, '%')
</if>
<if test="queryForm.firmName != null and queryForm.firmName != ''">
AND d.department_name LIKE CONCAT('%', #{queryForm.firmName}, '%')
</if>
</where>
GROUP BY tsa.user_id
</select>
<select id="getLawyerStatistic"
resultType="net.lab1024.sa.admin.module.service.domain.vo.LawyerStatisticsVO">
SELECT
e.actual_name AS lawyerName,
e.employee_id as userId,
tsa.certificate_number AS certificateNumber,
COALESCE(SUM(tsa.service_duration), 0) AS quarterlyServiceDuration
FROM t_service_applications tsa
LEFT JOIN t_employee e ON tsa.user_id = e.employee_id
<where>
tsa.deleted_flag = 0
<if test="queryForm.startTime != null and queryForm.startTime != ''">
AND tsa.report_time &gt;= #{queryForm.startTime}
</if>
<if test="queryForm.endTime != null and queryForm.endTime != ''">
AND tsa.report_time &lt;= #{queryForm.endTime}
</if>
<if test="queryForm.userId != null and queryForm.userId != ''">
and tsa.user_id = #{queryForm.userId}
</if>
</where>
</select>
</mapper> </mapper>

2
yun-admin/target/classes/mapper/business/goods/GoodsMapper.xml

@ -28,7 +28,7 @@
</if> </if>
</where> </where>
<if test="query.sortItemList == null or query.sortItemList.size == 0"> <if test="query.sortItemList == null or query.sortItemList.size == 0">
ORDER BY goods_id DESC ORDER BY create_time DESC
</if> </if>
</select> </select>
<select id="queryById" resultType="net.lab1024.sa.admin.module.business.goods.domain.entity.GoodsEntity"> <select id="queryById" resultType="net.lab1024.sa.admin.module.business.goods.domain.entity.GoodsEntity">

104
yun-admin/target/classes/mapper/service/ServiceApplicationsMapper.xml

@ -33,7 +33,8 @@
t_service_applications.certificate_number, t_service_applications.certificate_number,
t_service_applications.activity_category_id, t_service_applications.activity_category_id,
t_service_applications.activity_name_id, t_service_applications.activity_name_id,
t_service_applications.attachment_ids t_service_applications.attachment_ids,
t_service_applications.report_time
</sql> </sql>
<!-- 分页查询 --> <!-- 分页查询 -->
@ -103,4 +104,105 @@
</foreach> </foreach>
</update> </update>
<!-- 律师统计查询(无参数,保持向后兼容) -->
<select id="getLawyerStatistics" resultType="net.lab1024.sa.admin.module.service.domain.vo.LawyerStatisticsVO">
SELECT
e.actual_name AS lawyerName,
tsa.certificate_number AS certificateNumber,
COALESCE(SUM(CASE WHEN tsa.service_start >= DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 3 MONTH), '%Y-%m-01') THEN tsa.service_duration ELSE 0 END), 0) AS quarterlyServiceDuration,
COALESCE(SUM(CASE WHEN tsa.service_start >= DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 3 MONTH), '%Y-%m-01') THEN tsa.workload_score ELSE 0 END), 0) AS quarterlyServiceCost,
COALESCE(SUM(CASE WHEN YEAR(tsa.service_start) = YEAR(NOW()) THEN tsa.service_duration ELSE 0 END), 0) AS annualServiceDuration,
COALESCE(SUM(CASE WHEN YEAR(tsa.service_start) = YEAR(NOW()) THEN tsa.workload_score ELSE 0 END), 0) AS annualServiceCost
FROM t_service_applications tsa
LEFT JOIN t_employee e ON tsa.user_id = e.employee_id
LEFT JOIN t_department d ON tsa.firm_id = d.department_id
WHERE tsa.deleted_flag = 0
GROUP BY tsa.user_id, tsa.certificate_number, e.actual_name
ORDER BY e.actual_name
</select>
<!-- 律师统计查询(带参数) -->
<select id="getLawyerStatisticsWithParam" resultType="net.lab1024.sa.admin.module.service.domain.vo.LawyerStatisticsVO">
SELECT
e.actual_name AS lawyerName,
e.employee_id as userId,
tsa.certificate_number AS certificateNumber,
COALESCE(SUM(tsa.service_duration), 0) AS quarterlyServiceDuration
FROM t_service_applications tsa
LEFT JOIN t_employee e ON tsa.user_id = e.employee_id
LEFT JOIN t_department d ON tsa.firm_id = d.department_id
<where>
tsa.deleted_flag = 0
<if test="queryForm.startTime != null and queryForm.startTime != ''">
AND tsa.report_time &gt;= #{queryForm.startTime}
</if>
<if test="queryForm.endTime != null and queryForm.endTime != ''">
AND tsa.report_time &lt;= #{queryForm.endTime}
</if>
<if test="queryForm.userId != null and queryForm.userId != ''">
and user_id = #{queryForm.userId}
</if>
<if test="queryForm.lawyerName != null and queryForm.lawyerName != ''">
AND e.actual_name LIKE CONCAT('%', #{queryForm.lawyerName}, '%')
</if>
<if test="queryForm.firmName != null and queryForm.firmName != ''">
AND d.department_name LIKE CONCAT('%', #{queryForm.firmName}, '%')
</if>
</where>
GROUP BY tsa.user_id
ORDER BY e.actual_name
</select>
<select id="getLawyerStatisticsWithParamYear"
resultType="net.lab1024.sa.admin.module.service.domain.vo.LawyerStatisticsVO">
SELECT
e.actual_name AS lawyerName,
e.employee_id as userId,
tsa.certificate_number AS certificateNumber,
COALESCE(SUM(tsa.service_duration), 0) AS annualServiceDuration
FROM t_service_applications tsa
LEFT JOIN t_employee e ON tsa.user_id = e.employee_id
LEFT JOIN t_department d ON tsa.firm_id = d.department_id
<where>
tsa.deleted_flag = 0
<if test="queryForm.startTime != null and queryForm.startTime != ''">
AND tsa.report_time &gt;= #{queryForm.startTime}
</if>
<if test="queryForm.endTime != null and queryForm.endTime != ''">
AND tsa.report_time &lt;= #{queryForm.endTime}
</if>
<if test="queryForm.userId != null and queryForm.userId != ''">
and tsa.user_id = #{queryForm.userId}
</if>
<if test="queryForm.lawyerName != null and queryForm.lawyerName != ''">
AND e.actual_name LIKE CONCAT('%', #{queryForm.lawyerName}, '%')
</if>
<if test="queryForm.firmName != null and queryForm.firmName != ''">
AND d.department_name LIKE CONCAT('%', #{queryForm.firmName}, '%')
</if>
</where>
GROUP BY tsa.user_id
</select>
<select id="getLawyerStatistic"
resultType="net.lab1024.sa.admin.module.service.domain.vo.LawyerStatisticsVO">
SELECT
e.actual_name AS lawyerName,
e.employee_id as userId,
tsa.certificate_number AS certificateNumber,
COALESCE(SUM(tsa.service_duration), 0) AS quarterlyServiceDuration
FROM t_service_applications tsa
LEFT JOIN t_employee e ON tsa.user_id = e.employee_id
<where>
tsa.deleted_flag = 0
<if test="queryForm.startTime != null and queryForm.startTime != ''">
AND tsa.report_time &gt;= #{queryForm.startTime}
</if>
<if test="queryForm.endTime != null and queryForm.endTime != ''">
AND tsa.report_time &lt;= #{queryForm.endTime}
</if>
<if test="queryForm.userId != null and queryForm.userId != ''">
and tsa.user_id = #{queryForm.userId}
</if>
</where>
</select>
</mapper> </mapper>

BIN
yun-admin/target/classes/net/lab1024/sa/admin/module/service/controller/ServiceApplicationsController.class

Binary file not shown.

BIN
yun-admin/target/classes/net/lab1024/sa/admin/module/service/dao/ServiceApplicationsDao.class

Binary file not shown.

BIN
yun-admin/target/classes/net/lab1024/sa/admin/module/service/service/ServiceApplicationsService$DropdownSheetWriteHandler.class

Binary file not shown.

BIN
yun-admin/target/classes/net/lab1024/sa/admin/module/service/service/ServiceApplicationsService.class

Binary file not shown.
Loading…
Cancel
Save