Browse Source

fix:批量上报,成本

master
wang 2 months ago
parent
commit
6980ad1b0b
  1. 37
      yun-admin/src/main/java/net/lab1024/sa/admin/common/enums/DateTimeEnum.java
  2. 2
      yun-admin/src/main/java/net/lab1024/sa/admin/common/enums/ReviewEnum.java
  3. 113
      yun-admin/src/main/java/net/lab1024/sa/admin/module/cost/controller/FirmReportsController.java
  4. 14
      yun-admin/src/main/java/net/lab1024/sa/admin/module/cost/dao/FirmReportsDao.java
  5. 5
      yun-admin/src/main/java/net/lab1024/sa/admin/module/cost/domain/entity/FirmReportsEntity.java
  6. 2
      yun-admin/src/main/java/net/lab1024/sa/admin/module/cost/domain/form/FirmReportsAddForm.java
  7. 2
      yun-admin/src/main/java/net/lab1024/sa/admin/module/cost/domain/form/FirmReportsQueryForm.java
  8. 27
      yun-admin/src/main/java/net/lab1024/sa/admin/module/cost/domain/vo/FirmReportsCountVO.java
  9. 2
      yun-admin/src/main/java/net/lab1024/sa/admin/module/cost/domain/vo/FirmReportsVO.java
  10. 39
      yun-admin/src/main/java/net/lab1024/sa/admin/module/cost/service/FirmReportsService.java
  11. 5
      yun-admin/src/main/java/net/lab1024/sa/admin/module/letter/controller/LetterController.java
  12. 37
      yun-admin/src/main/java/net/lab1024/sa/admin/module/letter/service/LetterService.java
  13. 2
      yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/dao/PenaltyLawyerDao.java
  14. 4
      yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/entity/PenaltyApplyEntity.java
  15. 2
      yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/form/PenaltyApplyAddForm.java
  16. 1
      yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/form/PenaltyApplyQueryForm.java
  17. 2
      yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/form/PenaltyApplyUpdateForm.java
  18. 1
      yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/vo/PenaltyApplyVO.java
  19. 19
      yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/service/PenaltyApplyService.java
  20. 8
      yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/service/PenaltyLawyerService.java
  21. 3
      yun-admin/src/main/java/net/lab1024/sa/admin/module/service/controller/ServiceApplicationsController.java
  22. 10
      yun-admin/src/main/java/net/lab1024/sa/admin/module/service/dao/ServiceApplicationsDao.java
  23. 2
      yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/form/LawyerStatisticsQueryForm.java
  24. 2
      yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/form/ServiceLawyerQueryForm.java
  25. 3
      yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/vo/ServiceApplicationsVO.java
  26. 749
      yun-admin/src/main/java/net/lab1024/sa/admin/module/service/service/ServiceApplicationsService.java
  27. 9
      yun-admin/src/main/java/net/lab1024/sa/admin/module/system/login/domain/LoginResultVO.java
  28. 6
      yun-admin/src/main/java/net/lab1024/sa/admin/module/system/login/manager/LoginManager.java
  29. 2
      yun-admin/src/main/java/net/lab1024/sa/admin/module/system/login/service/LoginService.java
  30. 21
      yun-admin/src/main/java/net/lab1024/sa/admin/module/word/WordApplicationsController.java
  31. 1
      yun-admin/src/main/java/net/lab1024/sa/admin/module/word/WordCertificateService.java
  32. 38
      yun-admin/src/main/java/net/lab1024/sa/admin/util/DateTimeUtil.java
  33. 35
      yun-admin/src/main/resources/mapper/cost/FirmReportsMapper.xml
  34. 4
      yun-admin/src/main/resources/mapper/penaltyapply/PenaltyApplyMapper.xml
  35. 5
      yun-admin/src/main/resources/mapper/penaltyapply/PenaltyLawyerMapper.xml
  36. 70
      yun-admin/src/main/resources/mapper/service/ServiceApplicationsMapper.xml
  37. 1
      yun-admin/src/main/resources/mapper/system/PositionMapper.xml
  38. 8
      yun-base/src/main/java/net/lab1024/sa/base/common/code/UnexpectedErrorCode.java

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

@ -32,6 +32,43 @@ public enum DateTimeEnum implements BaseEnum {
private String desc;
private String timePattern;
/**
* 获取指定年月的第一天开始时间
* @param year 年份
* @param month 月份 (1-12)
* @return 该月第一天的00:00:00
*/
public static LocalDateTime getMonthStart(Integer year, Integer month) {
if (year == null || month == null) {
throw new IllegalArgumentException("年份和月份不能为空");
}
if (month < 1 || month > 12) {
throw new IllegalArgumentException("月份必须在1-12之间");
}
return LocalDateTime.of(year, month, 1, 0, 0, 0);
}
/**
* 获取指定年月的最后一天结束时间
* @param year 年份
* @param month 月份 (1-12)
* @return 该月最后一天的23:59:59
*/
public static LocalDateTime getMonthEnd(Integer year, Integer month) {
if (year == null || month == null) {
throw new IllegalArgumentException("年份和月份不能为空");
}
if (month < 1 || month > 12) {
throw new IllegalArgumentException("月份必须在1-12之间");
}
// 获取下个月的第一天,然后减去1秒就是本月的最后时刻
if (month == 12) {
return LocalDateTime.of(year + 1, 1, 1, 0, 0, 0).minusSeconds(1);
} else {
return LocalDateTime.of(year, month + 1, 1, 0, 0, 0).minusSeconds(1);
}
}
@Override
public Integer getValue() {
return value;

2
yun-admin/src/main/java/net/lab1024/sa/admin/common/enums/ReviewEnum.java

@ -7,8 +7,6 @@ public enum ReviewEnum implements BaseEnum {
APPROVAL(1, "待审核"),
REVIEW(2, "审核中"),
PASS(3, "已通过"),
REFUSE(4, "拒绝");

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

@ -3,22 +3,22 @@ package net.lab1024.sa.admin.module.cost.controller;
import net.lab1024.sa.admin.module.cost.domain.form.FirmReportsAddForm;
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.FirmReportsCountVO;
import net.lab1024.sa.admin.module.cost.domain.vo.FirmReportsVO;
import net.lab1024.sa.admin.module.cost.service.FirmReportsService;
import net.lab1024.sa.admin.util.DateTimeUtil;
import net.lab1024.sa.base.common.domain.ValidateList;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import net.lab1024.sa.base.common.domain.ResponseDTO;
import net.lab1024.sa.base.common.domain.PageResult;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.time.LocalDate;
import java.time.Month;
/**
* 律师事务所年度经营报表 Controller
@ -34,6 +34,19 @@ public class FirmReportsController {
@Resource
private FirmReportsService firmReportsService;
@Operation(summary = "查询有无填报 @author wzh")
@GetMapping("/firmReports/query")
public ResponseDTO<Boolean> query() {
//根据当前时间去推理去上一个月的月份和年度,考虑到跨年情况
LocalDate now = LocalDate.now();
LocalDate previousMonth = now.minusMonths(1);
int previousYear = previousMonth.getYear();
int previousMonthValue = previousMonth.getMonthValue();
return firmReportsService.query(previousMonthValue, previousYear);
}
@Operation(summary = "分页查询 @author wzh")
@PostMapping("/firmReports/queryPage")
@ -76,4 +89,94 @@ public class FirmReportsController {
public ResponseDTO<String> commit(@RequestBody ValidateList<Integer> idList) {
return firmReportsService.commit(idList);
}
//查询本年度已经提交的收入和成本
@Operation(summary = "查询本年度已经提交的收入 @author wzh")
@PostMapping("/firmReports/income")
public ResponseDTO<FirmReportsCountVO> income() {
return ResponseDTO.ok(firmReportsService.income());
}
//查询本年度已经提交的成本
@Operation(summary = "查询本年度已经提交的成本 @author wzh")
@PostMapping("/firmReports/cost")
public ResponseDTO<Long> firmReportsCost() {
return ResponseDTO.ok(firmReportsService.firmReportsCost());
}
/**
* 根据指定年月判断所属季度已考虑跨年情况
* @param year 年份
* @param month 月份 (1-12)
* @return 季度编号(1-4)
*/
private int getQuarterByYearMonth(Integer year, Integer month) {
// 参数验证
if (year == null || month == null) {
throw new IllegalArgumentException("年份和月份参数不能为空");
}
if (month < 1 || month > 12) {
throw new IllegalArgumentException("月份必须在1-12之间");
}
// 使用指定的年月创建日期对象进行判断
Month targetMonth = Month.of(month);
int dayOfMonth = 1; // 默认使用月份第一天进行判断
// 第一季度:1月-3月,或4月1日-4月4日
if (targetMonth.getValue() < 4 || (targetMonth.getValue() == 4 && dayOfMonth < 5)) {
return 1;
}
// 第二季度:4月5日-6月30日,或7月1日-7月4日
else if ((targetMonth.getValue() == 4 && dayOfMonth >= 5) ||
(targetMonth.getValue() > 4 && targetMonth.getValue() < 7) ||
(targetMonth.getValue() == 7 && dayOfMonth < 5)) {
return 2;
}
// 第三季度:7月5日-9月30日,或10月1日-10月4日
else if ((targetMonth.getValue() == 7 && dayOfMonth >= 5) ||
(targetMonth.getValue() > 7 && targetMonth.getValue() < 10) ||
(targetMonth.getValue() == 10 && dayOfMonth < 5)) {
return 3;
}
// 第四季度:10月5日-12月31日(包含跨年情况)
else {
return 4;
}
}
/**
* 根据当前日期判断所属季度已考虑跨年情况
* 第一季度1月1日-4月4日
* 第二季度4月5日-7月4日
* 第三季度7月5日-10月4日
* 第四季度10月5日-12月31日
* @return 季度编号(1-4)
*/
private int getCurrentQuarter() {
LocalDate today = LocalDate.now();
Month month = today.getMonth();
int dayOfMonth = today.getDayOfMonth();
// 第一季度:1月-3月,或4月1日-4月4日
if (month.getValue() < 4 || (month.getValue() == 4 && dayOfMonth < 5)) {
return 1;
}
// 第二季度:4月5日-6月30日,或7月1日-7月4日
else if ((month.getValue() == 4 && dayOfMonth >= 5) ||
(month.getValue() > 4 && month.getValue() < 7) ||
(month.getValue() == 7 && dayOfMonth < 5)) {
return 2;
}
// 第三季度:7月5日-9月30日,或10月1日-10月4日
else if ((month.getValue() == 7 && dayOfMonth >= 5) ||
(month.getValue() > 7 && month.getValue() < 10) ||
(month.getValue() == 10 && dayOfMonth < 5)) {
return 3;
}
// 第四季度:10月5日-12月31日(包含跨年情况)
else {
return 4;
}
}
}

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

@ -3,9 +3,11 @@ package net.lab1024.sa.admin.module.cost.dao;
import java.util.List;
import net.lab1024.sa.admin.module.cost.domain.entity.FirmReportsEntity;
import net.lab1024.sa.admin.module.cost.domain.form.FirmReportsQueryForm;
import net.lab1024.sa.admin.module.cost.domain.vo.FirmReportsCountVO;
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.ResponseDTO;
import net.lab1024.sa.base.common.domain.ValidateList;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -49,4 +51,16 @@ public interface FirmReportsDao extends BaseMapper<FirmReportsEntity> {
FirmReportsEntity selectList(@Param("declareQuarter") String declareQuarter,
@Param("declareYear") Integer declareYear,
@Param("firmId") Integer firmId);
/*
* 查询当前律所有没有填报的报表
*/
boolean query(@Param("currentQuarter")Integer currentQuarter,
@Param("currentYear")Integer currentYear,
@Param("departmentId") Long departmentId);
FirmReportsCountVO income(@Param("departmentId") Long departmentId, @Param("currentYear") Integer currentYear);
Long firmReportsCost(@Param("departmentId") Long departmentId,@Param("currentYear") Integer currentYear);
}

5
yun-admin/src/main/java/net/lab1024/sa/admin/module/cost/domain/entity/FirmReportsEntity.java

@ -46,7 +46,10 @@ public class FirmReportsEntity {
* 报表所属季度
*/
private String declareQuarter;
/**
* 所属月份
*/
private Integer declareMonth;
/**
* 营业收入单位万元
*/

2
yun-admin/src/main/java/net/lab1024/sa/admin/module/cost/domain/form/FirmReportsAddForm.java

@ -31,7 +31,7 @@ public class FirmReportsAddForm {
* 报表所属季度
*/
private String declareQuarter;
private Integer declareMonth;
/**
* 营业收入单位万元
*/

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

@ -38,7 +38,7 @@ public class FirmReportsQueryForm extends PageParam {
*/
private String declareQuarter;
private Integer declareMonth;
/**
* 审批状态存储当前审批人姓名"-"表示待审批
*/

27
yun-admin/src/main/java/net/lab1024/sa/admin/module/cost/domain/vo/FirmReportsCountVO.java

@ -0,0 +1,27 @@
package net.lab1024.sa.admin.module.cost.domain.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 成本列表VO
*
* @Author wzh
* @Date 2026-01-07 15:57:43
* @Copyright 1.0
*/
@Data
public class FirmReportsCountVO {
@Schema(description = "营业收入(单位:万元)")
private BigDecimal revenue;
@Schema(description = "总成本支出(单位:万元)")
private BigDecimal totalCost;
}

2
yun-admin/src/main/java/net/lab1024/sa/admin/module/cost/domain/vo/FirmReportsVO.java

@ -30,7 +30,7 @@ public class FirmReportsVO {
@Schema(description = "报表所属年份")
private Integer declareYear;
private Integer declareMonth;
@Schema(description = "报表所属季度")
private String declareQuarter;

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

@ -10,12 +10,14 @@ import net.lab1024.sa.admin.module.cost.domain.entity.FirmReportsEntity;
import net.lab1024.sa.admin.module.cost.domain.form.FirmReportsAddForm;
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.FirmReportsCountVO;
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.code.UnexpectedErrorCode;
import net.lab1024.sa.base.common.code.UserErrorCode;
import net.lab1024.sa.base.common.domain.RequestUser;
@ -96,7 +98,7 @@ public class FirmReportsService {
*/
public ResponseDTO<String> add(FirmReportsAddForm addForm) {
// 使用lambda表达式和Optional来检查重复数据
FirmReportsEntity existing = firmReportsDao.selectList(addForm.getDeclareQuarter(), addForm.getDeclareYear(), addForm.getFirmId());
FirmReportsEntity existing = firmReportsDao.selectList(String.valueOf(addForm.getDeclareMonth()), addForm.getDeclareYear(), addForm.getFirmId());
if (existing != null ) {
return ResponseDTO.userErrorParam(UnexpectedErrorCode.DATA_EXIST.getMsg());
}
@ -116,7 +118,7 @@ public class FirmReportsService {
*/
public ResponseDTO<String> update(FirmReportsUpdateForm updateForm) {
// 检查除当前记录外是否还存在相同季度、年度、律所的记录
FirmReportsEntity existing = firmReportsDao.selectList(updateForm.getDeclareQuarter(), updateForm.getDeclareYear(), updateForm.getFirmId());
FirmReportsEntity existing = firmReportsDao.selectList(String.valueOf(updateForm.getDeclareMonth()), updateForm.getDeclareYear(), updateForm.getFirmId());
if (existing != null && !existing.getId().equals(updateForm.getId())) {
return ResponseDTO.userErrorParam(UnexpectedErrorCode.DATA_EXIST.getMsg());
}
@ -154,4 +156,37 @@ public class FirmReportsService {
firmReportsDao.commit(idList);
return ResponseDTO.ok();
}
/**
* 查询当前用户是否可以填报报表
* @return true-可以填报false-不可以填报
*/
public ResponseDTO<Boolean> query(Integer month, Integer Year) {
RequestEmployee requestUser = AdminRequestUtil.getRequestUser();
List<RoleVO> roleIdList = roleEmployeeService.getRoleIdList(requestUser.getEmployeeId());
String roleCode = roleIdList.get(0).getRoleCode();
// 只有律所管理员(CTO)可以填报
boolean canReport = UserTypeEnum.CTO.getDesc().equals(roleCode);
if (canReport){
canReport = firmReportsDao.query(month, Year, requestUser.getDepartmentId());
}
return ResponseDTO.ok(canReport);
}
public FirmReportsCountVO income() {
// 获取当前用户
RequestEmployee requestUser = AdminRequestUtil.getRequestUser();
//本年度
Integer currentYear = DateTimeUtil.getCurrentYear();
return firmReportsDao.income(requestUser.getDepartmentId(), currentYear);
}
public Long firmReportsCost() {
// 获取当前用户
RequestEmployee requestUser = AdminRequestUtil.getRequestUser();
//本年度
Integer currentYear = DateTimeUtil.getCurrentYear();
return firmReportsDao.firmReportsCost(requestUser.getDepartmentId(), currentYear);
}
}

5
yun-admin/src/main/java/net/lab1024/sa/admin/module/letter/controller/LetterController.java

@ -44,6 +44,11 @@ public class LetterController {
public ResponseDTO<Boolean> isLetter(@PathVariable Long userId) {
return ResponseDTO.ok(letterService.isLetter(userId));
}
@Operation(summary = "是否签署律所承诺书 @author wzh")
@GetMapping("/letter/isLetterDept/{userId}")
public ResponseDTO<Boolean> isLetterDept(@PathVariable Long userId) {
return ResponseDTO.ok(letterService.isLetterDept(userId));
}
@Operation(summary = "签署承诺书 @author wzh")
@PostMapping("/letter/add")

37
yun-admin/src/main/java/net/lab1024/sa/admin/module/letter/service/LetterService.java

@ -86,7 +86,7 @@ public class LetterService {
/**
* 是否签署承诺书
* 是否签署律师承诺书
* @param userId
* @return
*/
@ -100,14 +100,15 @@ public class LetterService {
//构建查询条件:按用户ID和当前年份查询
LambdaQueryWrapper<LetterEntity> queryWrapper = new LambdaQueryWrapper<LetterEntity>()
.eq(LetterEntity::getUserId, userId)
.eq(LetterEntity::getLetterType, UserTypeEnum.USER.getDesc())
.apply("YEAR(create_time) = {0}", currentYear);
if (UserTypeEnum.USER.getDesc().equals(roleCode)) {
//普通律师:只需要签署一份承诺书
if (!UserTypeEnum.CEO.getDesc().equals(roleCode)) {
//只需要签署一份承诺书
List<LetterEntity> letterList = letterDao.selectList(queryWrapper);
return !letterList.isEmpty();
} else if (UserTypeEnum.CTO.getDesc().equals(roleCode)) {
} /*else if (UserTypeEnum.CTO.getDesc().equals(roleCode)) {
//律所主任:需要签署两份承诺书(USER类型和CTO类型各一份)
List<LetterEntity> letterList = letterDao.selectList(queryWrapper);
@ -122,13 +123,39 @@ public class LetterService {
//两种类型都需要至少一份才能算签约成功
return userTypeCount > 0 && ctoTypeCount > 0;
} else {
}*/ else {
//其他角色使用原有逻辑
int letterCount = letterDao.isLetter(userId);
return letterCount > 0;
}
}
/**
* 是否签署律协承诺书
* @param userId
* @return
*/
public Boolean isLetterDept(Long userId) {
//获取当前年份
Calendar cal = Calendar.getInstance();
int currentYear = cal.get(Calendar.YEAR);
String roleCode = getRoleCode();
//构建查询条件:按用户ID和当前年份查询
LambdaQueryWrapper<LetterEntity> queryWrapper = new LambdaQueryWrapper<LetterEntity>()
.eq(LetterEntity::getUserId, userId)
.eq(LetterEntity::getLetterType, UserTypeEnum.CTO.getDesc())
.apply("YEAR(create_time) = {0}", currentYear);
if (!UserTypeEnum.CEO.getDesc().equals(roleCode)) {
//只需要签署一份承诺书
List<LetterEntity> letterList = letterDao.selectList(queryWrapper);
return !letterList.isEmpty();
}
return false;
}
/**
* 新增
*/

2
yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/dao/PenaltyLawyerDao.java

@ -34,4 +34,6 @@ public interface PenaltyLawyerDao extends BaseMapper<PenaltyLawyerEntity> {
List<PenaltyLawyerVO> queryPage(Page page, @Param("queryForm") PenaltyLawyerQueryForm queryForm);
List<JSONObject> selectLawyerPunishList(@Param("licenseNo") String licenseNo);
List<JSONObject> queryNoName(@Param("departmentName") String departmentName);
}

4
yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/entity/PenaltyApplyEntity.java

@ -74,4 +74,8 @@ public class PenaltyApplyEntity {
*/
private Integer deletedFlag;
/**
* 类型
*/
private String type;
}

2
yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/form/PenaltyApplyAddForm.java

@ -20,4 +20,6 @@ public class PenaltyApplyAddForm {
@Schema(description = "申请人用途", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "申请人用途 不能为空")
private String usePurpose;
private String type;
}

1
yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/form/PenaltyApplyQueryForm.java

@ -49,4 +49,5 @@ public class PenaltyApplyQueryForm extends PageParam {
private String userType;
private Long userId;
private String type;
}

2
yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/form/PenaltyApplyUpdateForm.java

@ -24,4 +24,6 @@ public class PenaltyApplyUpdateForm {
@Schema(description = "律协审批状态(0-未提交,1-已提交,2-审核中,3-已批准,5-已驳回)")
private Integer auditStatus;
private String type;
}

1
yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/vo/PenaltyApplyVO.java

@ -50,4 +50,5 @@ public class PenaltyApplyVO {
@Schema(description = "删除标志(0-正常,1-已删除)")
private Integer deletedFlag;
private String type;
}

19
yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/service/PenaltyApplyService.java

@ -11,6 +11,7 @@ import net.lab1024.sa.admin.module.penalty.domain.form.PenaltyApplyAddForm;
import net.lab1024.sa.admin.module.penalty.domain.form.PenaltyApplyQueryForm;
import net.lab1024.sa.admin.module.penalty.domain.form.PenaltyApplyUpdateForm;
import net.lab1024.sa.admin.module.penalty.domain.vo.PenaltyApplyVO;
import net.lab1024.sa.admin.module.system.department.domain.vo.DepartmentVO;
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.service.EmployeeService;
@ -55,6 +56,8 @@ public class PenaltyApplyService {
private RoleEmployeeService roleEmployeeService;
@Resource
private LetterService letterService;
@Resource
private DepartmentService departmentService;
/**
* 分页查询
*/
@ -84,10 +87,20 @@ public class PenaltyApplyService {
Long userId = AdminRequestUtil.getRequestUser().getUserId();
EmployeeEntity entity = employeeService.getById(userId);
//判断有没有处罚
Boolean query = penaltyLawyerService.query(entity.getActualName());
if (query){
return ResponseDTO.error(UserErrorCode.FORM_REPEAT_SUBMIT_PENALTY);
if (UserTypeEnum.USER.getDesc().equals(addForm.getType())){
Boolean query = penaltyLawyerService.query(entity.getActualName());
if (query){
return ResponseDTO.error(UserErrorCode.FORM_REPEAT_SUBMIT_PENALTY);
}
}else {
//查询机构名称
DepartmentVO departmentById = departmentService.getDepartmentById(entity.getDepartmentId());
Boolean query = penaltyLawyerService.queryNoName(departmentById.getDepartmentName());
if (query){
return ResponseDTO.error(UserErrorCode.FORM_REPEAT_SUBMIT_PENALTY);
}
}
PenaltyApplyEntity penaltyApplyEntity = SmartBeanUtil.copy(addForm, PenaltyApplyEntity.class);
penaltyApplyEntity.setUserId(userId);
String roleCode = letterService.getRoleCode();

8
yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/service/PenaltyLawyerService.java

@ -95,4 +95,12 @@ public class PenaltyLawyerService {
}
return false;
}
public Boolean queryNoName(String departmentName) {
List<JSONObject> penaltyLawyerEntities = penaltyLawyerDao.queryNoName(departmentName);
if (CollectionUtils.isNotEmpty(penaltyLawyerEntities)) {
return true;
}
return false;
}
}

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

@ -138,7 +138,7 @@ public class ServiceApplicationsController {
@Operation(summary = "律师统计信息 @author wzh")
@PostMapping("/serviceApplications/statistics")
//@SaCheckPermission("serviceApplications:statistics")
public ResponseDTO<PageResult<LawyerStatisticsVO>> getLawyerStatistics(@RequestBody @Valid LawyerStatisticsQueryForm queryForm) {
public ResponseDTO<List<LawyerStatisticsVO>> getLawyerStatistics(@RequestBody @Valid LawyerStatisticsQueryForm queryForm) {
return ResponseDTO.ok(serviceApplicationsService.getLawyerStatistics(queryForm));
}
@ -175,6 +175,7 @@ public class ServiceApplicationsController {
public ResponseDTO<BigDecimal> getServiceApplicationsCost(@RequestBody ServiceLawyerQueryForm queryForm) {
return ResponseDTO.ok(serviceApplicationsService.getServiceApplicationsCost(queryForm));
}
//部门id批量审核
@Operation(summary = "部门id批量审核部门下数据 @author wzh")
@PostMapping("/serviceApplications/batchReviewByDepartmentId")

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

@ -139,5 +139,15 @@ public interface ServiceApplicationsDao extends BaseMapper<ServiceApplicationsEn
BigDecimal getServiceAmount(@Param("queryForm") LawyerStatisticsQueryForm queryForm);
/**
* 统计金额列表无用户ID过滤
*/
BigDecimal getServiceAmountList(@Param("queryForm") LawyerStatisticsQueryForm queryForm);
/**
* 按律师统计金额数据
*/
List<LawyerStatisticsVO> getLawyerAmountStatistics(@Param("queryForm") LawyerStatisticsQueryForm queryForm);
List<ServiceApplicationsVO> selectByRecordNoNotMy(@Param("userId") Long userId, @Param("recordNo") String recordNo);
}

2
yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/form/LawyerStatisticsQueryForm.java

@ -14,7 +14,7 @@ import java.time.LocalDateTime;
*/
@Data
@Schema(description = "律师统计查询表单")
public class LawyerStatisticsQueryForm extends PageParam {
public class LawyerStatisticsQueryForm{
@Schema(description = "季度,1,2,3,4")
private Integer quarter;

2
yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/form/ServiceLawyerQueryForm.java

@ -15,7 +15,7 @@ public class ServiceLawyerQueryForm {
@Schema(description = "季度,Q1,Q2,Q3,Q4")
private Integer quarter;
private Integer month;
@Schema(description = "年度,格式:yyyy")
private Integer year;

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

@ -98,6 +98,9 @@ public class ServiceApplicationsVO {
@Schema(description = "更新时间")
private LocalDateTime updateTime;
@Schema(description = "提交时间")
private LocalDateTime reportTime;
@Schema(description = "职业证号")
private String certificateNumber;

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

@ -7,7 +7,19 @@ import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import net.lab1024.sa.base.common.code.UserErrorCode;
import net.lab1024.sa.base.common.domain.PageResult;
import net.lab1024.sa.base.common.domain.RequestUser;
import net.lab1024.sa.base.common.domain.ResponseDTO;
import net.lab1024.sa.base.common.enumeration.UserTypeEnum;
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 net.lab1024.sa.admin.common.enums.ReviewEnum;
import net.lab1024.sa.admin.common.enums.DateTimeEnum;
import net.lab1024.sa.admin.module.business.category.domain.entity.CategoryEntity;
import net.lab1024.sa.admin.module.business.category.service.CategoryService;
import net.lab1024.sa.admin.module.business.goods.domain.entity.GoodsEntity;
@ -15,8 +27,6 @@ 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.domain.entity.ServiceApplicationsEntity;
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.*;
import net.lab1024.sa.admin.module.system.datascope.constant.DataScopeViewTypeEnum;
import net.lab1024.sa.admin.module.system.datascope.service.DataScopeViewService;
@ -34,17 +44,6 @@ import net.lab1024.sa.admin.util.AdminRequestUtil;
import net.lab1024.sa.admin.util.CellStyleStrategy;
import net.lab1024.sa.admin.util.DateTimeUtil;
import net.lab1024.sa.admin.util.TimeVo;
import net.lab1024.sa.base.common.code.UserErrorCode;
import net.lab1024.sa.base.common.domain.PageResult;
import net.lab1024.sa.base.common.domain.RequestUser;
import net.lab1024.sa.base.common.domain.ResponseDTO;
import net.lab1024.sa.base.common.enumeration.UserTypeEnum;
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 net.sf.jsqlparser.expression.LongValue;
import org.apache.catalina.util.RequestUtil;
import org.apache.commons.collections4.CollectionUtils;
@ -776,154 +775,346 @@ public class ServiceApplicationsService {
/**
* 律所统计
* @param queryForms
* @return
*/
public List<LawyerStatisticsVO> getLawyerStatisticsByDepartment(@Valid LawyerStatisticsQueryFormList queryForms) {
LawyerStatisticsQueryForm queryForm = getQueryForm(queryForms);
DictEntity dictItem = dictService.getOne("FILECOST");
// 第一步:先查询年度统计数据(有条件)
// 获取年度统计数据
List<LawyerStatisticsVO> annualStatistics = getAnnualStatistics(queryForm);
if (!annualStatistics.isEmpty()) {
// 处理统计数据
processStatistics(annualStatistics, queryForm, dictItem);
}
// 屏蔽成本数据
maskCostDataForUser(annualStatistics);
return annualStatistics;
}
/**
* 获取年度统计数据
*/
private List<LawyerStatisticsVO> getAnnualStatistics(LawyerStatisticsQueryForm queryForm) {
LawyerStatisticsQueryForm annualQueryForm = createAnnualQueryForm(queryForm);
return serviceApplicationsDao.getdepartmentStatistics(annualQueryForm);
}
/**
* 创建年度查询表单
*/
private LawyerStatisticsQueryForm createAnnualQueryForm(LawyerStatisticsQueryForm queryForm) {
LawyerStatisticsQueryForm annualQueryForm = new LawyerStatisticsQueryForm();
annualQueryForm.setYear(queryForm.getYear());
// 如果指定了机构ID,则应用过滤条件
if (queryForm.getFirmId() != null) {
annualQueryForm.setFirmId(queryForm.getFirmId());
}
// 设置年度时间范围
String yearStart = queryForm.getYear() + "-01-01";
String yearEnd = queryForm.getYear() + "-12-31";
annualQueryForm.setStartTime(yearStart);
annualQueryForm.setEndTime(yearEnd);
// 初始化季度时间变量
LocalDateTime quarterStart = null;
LocalDateTime quarterEnd = null;
return annualQueryForm;
}
/**
* 处理统计数据
*/
private void processStatistics(List<LawyerStatisticsVO> annualStatistics,
LawyerStatisticsQueryForm queryForm,
DictEntity dictItem) {
// 获取季度统计数据(如果有季度条件)
List<LawyerStatisticsVO> quarterlyStatistics = getQuarterlyStatistics(queryForm);
List<LawyerStatisticsVO> annualStatistics = serviceApplicationsDao.getdepartmentStatistics(annualQueryForm);
// 处理每个律所的统计数据
for (LawyerStatisticsVO annualStat : annualStatistics) {
processDepartmentStatistics(annualStat, queryForm, dictItem, quarterlyStatistics);
}
}
/**
* 获取季度统计数据
*/
private List<LawyerStatisticsVO> getQuarterlyStatistics(LawyerStatisticsQueryForm queryForm) {
if (queryForm.getQuarter() == null) {
return new ArrayList<>();
}
if (!annualStatistics.isEmpty()) {
// 第二步:如果有季度条件,查询季度统计数据
List<LawyerStatisticsVO> quarterlyStatistics = new ArrayList<>();
if (queryForm.getQuarter() != null) {
// 设置季度时间范围
quarterStart = DateTimeEnum.getQuarterStart(queryForm.getYear(), queryForm.getQuarter());
quarterEnd = DateTimeEnum.getQuarterEnd(queryForm.getYear(), queryForm.getQuarter());
annualQueryForm.setStartTime(quarterStart.toString());
annualQueryForm.setEndTime(quarterEnd.toString());
quarterlyStatistics = serviceApplicationsDao.getdepartmentStatistics(annualQueryForm);
}
LawyerStatisticsQueryForm quarterlyQueryForm = createQuarterlyQueryForm(queryForm);
return serviceApplicationsDao.getdepartmentStatistics(quarterlyQueryForm);
}
/**
* 创建季度查询表单
*/
private LawyerStatisticsQueryForm createQuarterlyQueryForm(LawyerStatisticsQueryForm queryForm) {
LawyerStatisticsQueryForm quarterlyQueryForm = new LawyerStatisticsQueryForm();
quarterlyQueryForm.setYear(queryForm.getYear());
quarterlyQueryForm.setFirmId(queryForm.getFirmId());
// 设置季度时间范围
LocalDateTime quarterStart = DateTimeEnum.getQuarterStart(queryForm.getYear(), queryForm.getQuarter());
LocalDateTime quarterEnd = DateTimeEnum.getQuarterEnd(queryForm.getYear(), queryForm.getQuarter());
quarterlyQueryForm.setStartTime(quarterStart.toString());
quarterlyQueryForm.setEndTime(quarterEnd.toString());
return quarterlyQueryForm;
}
/**
* 处理单个律所的统计数据
*/
private void processDepartmentStatistics(LawyerStatisticsVO annualStat,
LawyerStatisticsQueryForm queryForm,
DictEntity dictItem,
List<LawyerStatisticsVO> quarterlyStatistics) {
// 处理年度数据
processAnnualData(annualStat, queryForm, dictItem);
// 处理季度数据
processQuarterlyData(annualStat, queryForm, dictItem, quarterlyStatistics);
// 处理律师详细数据
processLawyerDetails(annualStat, queryForm, dictItem);
}
/**
* 处理年度数据
*/
private void processAnnualData(LawyerStatisticsVO annualStat,
LawyerStatisticsQueryForm queryForm,
DictEntity dictItem) {
// 计算年度成本
calculateAnnualCost(annualStat, dictItem);
// 添加金额类型数据
addAmountDataToAnnualCost(annualStat, queryForm);
}
/**
* 计算年度成本
*/
private void calculateAnnualCost(LawyerStatisticsVO annualStat, DictEntity dictItem) {
BigDecimal annualCost = BigDecimal.valueOf(annualStat.getAnnualServiceDuration() * Long.valueOf(dictItem.getRemark()));
annualStat.setAnnualServiceCost(annualCost);
}
/**
* 添加金额类型数据到年度成本
*/
private void addAmountDataToAnnualCost(LawyerStatisticsVO annualStat, LawyerStatisticsQueryForm queryForm) {
LawyerStatisticsQueryForm amountQueryForm = new LawyerStatisticsQueryForm();
amountQueryForm.setFirmId(annualStat.getFirmId());
// 设置年度时间范围
String yearStart = queryForm.getYear() + "-01-01";
String yearEnd = queryForm.getYear() + "-12-31";
amountQueryForm.setStartTime(yearStart);
amountQueryForm.setEndTime(yearEnd);
BigDecimal annualAmount = serviceApplicationsDao.getServiceAmount(amountQueryForm);
if (annualAmount != null && annualAmount.compareTo(BigDecimal.ZERO) > 0) {
annualStat.setAnnualServiceCost(annualStat.getAnnualServiceCost().add(annualAmount));
}
}
/**
* 处理季度数据
*/
private void processQuarterlyData(LawyerStatisticsVO annualStat,
LawyerStatisticsQueryForm queryForm,
DictEntity dictItem,
List<LawyerStatisticsVO> quarterlyStatistics) {
if (queryForm.getQuarter() == null) {
annualStat.setQuarterlyServiceDuration(0.00);
annualStat.setQuarterlyServiceCost(BigDecimal.ZERO);
return;
}
// 查找对应的季度数据
LawyerStatisticsVO quarterlyStat = findQuarterlyStatByFirmId(quarterlyStatistics, annualStat.getFirmId());
if (quarterlyStat != null) {
annualStat.setQuarterlyServiceDuration(quarterlyStat.getAnnualServiceDuration());
calculateQuarterlyCost(annualStat, dictItem);
addQuarterlyAmountData(annualStat, queryForm);
} else {
annualStat.setQuarterlyServiceDuration(0.00);
annualStat.setQuarterlyServiceCost(BigDecimal.ZERO);
}
}
/**
* 根据律所ID查找季度数据
*/
private LawyerStatisticsVO findQuarterlyStatByFirmId(List<LawyerStatisticsVO> quarterlyStatistics, Long firmId) {
return quarterlyStatistics.stream()
.filter(stat -> firmId.equals(stat.getFirmId()))
.findFirst()
.orElse(null);
}
/**
* 计算季度成本
*/
private void calculateQuarterlyCost(LawyerStatisticsVO annualStat, DictEntity dictItem) {
BigDecimal quarterlyCost = BigDecimal.valueOf(annualStat.getQuarterlyServiceDuration() * Long.valueOf(dictItem.getRemark()));
annualStat.setQuarterlyServiceCost(quarterlyCost);
}
/**
* 添加季度金额数据
*/
private void addQuarterlyAmountData(LawyerStatisticsVO annualStat, LawyerStatisticsQueryForm queryForm) {
LawyerStatisticsQueryForm quarterlyAmountQueryForm = new LawyerStatisticsQueryForm();
quarterlyAmountQueryForm.setFirmId(annualStat.getFirmId());
// 设置季度时间范围
LocalDateTime quarterStart = DateTimeEnum.getQuarterStart(queryForm.getYear(), queryForm.getQuarter());
LocalDateTime quarterEnd = DateTimeEnum.getQuarterEnd(queryForm.getYear(), queryForm.getQuarter());
quarterlyAmountQueryForm.setStartTime(quarterStart.toString());
quarterlyAmountQueryForm.setEndTime(quarterEnd.toString());
BigDecimal quarterlyAmount = serviceApplicationsDao.getServiceAmount(quarterlyAmountQueryForm);
if (quarterlyAmount != null && quarterlyAmount.compareTo(BigDecimal.ZERO) > 0) {
annualStat.setQuarterlyServiceCost(annualStat.getQuarterlyServiceCost().add(quarterlyAmount));
}
}
/**
* 处理律师详细数据
*/
private void processLawyerDetails(LawyerStatisticsVO annualStat,
LawyerStatisticsQueryForm queryForm,
DictEntity dictItem) {
// 查询律师年度统计信息
List<ServiceLawyerImportForm> lawyerAnnualStats = getLawyerAnnualStats(annualStat.getFirmId(), queryForm);
// 查询律师季度统计信息(如果有季度条件)
List<ServiceLawyerImportForm> lawyerQuarterlyStats = getLawyerQuarterlyStats(annualStat.getFirmId(), queryForm);
// 处理律师统计数据
processLawyerStats(lawyerAnnualStats, lawyerQuarterlyStats, queryForm, dictItem);
annualStat.setLawyerServiceVOList(lawyerAnnualStats);
}
/**
* 查询律师年度统计信息
*/
private List<ServiceLawyerImportForm> getLawyerAnnualStats(Long firmId, LawyerStatisticsQueryForm queryForm) {
ServiceLawyerQueryForm serviceLawyerQueryForm = new ServiceLawyerQueryForm();
serviceLawyerQueryForm.setFirmId(firmId);
serviceLawyerQueryForm.setYear(queryForm.getYear());
// 设置年度时间范围
String yearStart = queryForm.getYear() + "-01-01";
String yearEnd = queryForm.getYear() + "-12-31";
serviceLawyerQueryForm.setStartTime(yearStart);
serviceLawyerQueryForm.setEndTime(yearEnd);
return serviceApplicationsDao.getLawyerStatisticsWithParam(serviceLawyerQueryForm);
}
/**
* 查询律师季度统计信息
*/
private List<ServiceLawyerImportForm> getLawyerQuarterlyStats(Long firmId, LawyerStatisticsQueryForm queryForm) {
if (queryForm.getQuarter() == null) {
return new ArrayList<>();
}
ServiceLawyerQueryForm lawyerQuarterlyQueryForm = new ServiceLawyerQueryForm();
lawyerQuarterlyQueryForm.setFirmId(firmId);
lawyerQuarterlyQueryForm.setYear(queryForm.getYear());
// 设置季度时间范围
LocalDateTime quarterStart = DateTimeEnum.getQuarterStart(queryForm.getYear(), queryForm.getQuarter());
LocalDateTime quarterEnd = DateTimeEnum.getQuarterEnd(queryForm.getYear(), queryForm.getQuarter());
lawyerQuarterlyQueryForm.setStartTime(quarterStart.toString());
lawyerQuarterlyQueryForm.setEndTime(quarterEnd.toString());
return serviceApplicationsDao.getLawyerStatisticsWithParam(lawyerQuarterlyQueryForm);
}
/**
* 处理律师统计数据
*/
private void processLawyerStats(List<ServiceLawyerImportForm> lawyerAnnualStats,
List<ServiceLawyerImportForm> lawyerQuarterlyStats,
LawyerStatisticsQueryForm queryForm,
DictEntity dictItem) {
Map<Long, ServiceLawyerImportForm> lawyerQuarterlyMap = lawyerQuarterlyStats.stream()
.collect(Collectors.toMap(ServiceLawyerImportForm::getUserId, Function.identity()));
for (ServiceLawyerImportForm lawyerAnnual : lawyerAnnualStats) {
// 计算律师年度成本
calculateLawyerAnnualCost(lawyerAnnual, dictItem, queryForm);
// 设置律师季度数据
setLawyerQuarterlyData(lawyerAnnual, lawyerQuarterlyMap, queryForm, dictItem);
}
}
/**
* 计算律师年度成本
*/
private void calculateLawyerAnnualCost(ServiceLawyerImportForm lawyerAnnual,
DictEntity dictItem,
LawyerStatisticsQueryForm queryForm) {
BigDecimal lawyerAnnualCost = BigDecimal.valueOf(lawyerAnnual.getAnnualServiceDuration() * Long.valueOf(dictItem.getRemark()));
lawyerAnnual.setAnnualServiceCost(lawyerAnnualCost);
// 查询律师年度amount类型金额
LawyerStatisticsQueryForm lawyerAmountQueryForm = new LawyerStatisticsQueryForm();
lawyerAmountQueryForm.setUserId(lawyerAnnual.getUserId());
// 设置年度时间范围
String yearStart = queryForm.getYear() + "-01-01";
String yearEnd = queryForm.getYear() + "-12-31";
lawyerAmountQueryForm.setStartTime(yearStart);
lawyerAmountQueryForm.setEndTime(yearEnd);
BigDecimal lawyerAnnualAmount = serviceApplicationsDao.getServiceAmount(lawyerAmountQueryForm);
if (lawyerAnnualAmount != null && lawyerAnnualAmount.compareTo(BigDecimal.ZERO) > 0) {
lawyerAnnual.setAnnualServiceCost(lawyerAnnual.getAnnualServiceCost().add(lawyerAnnualAmount));
}
}
/**
* 设置律师季度数据
*/
private void setLawyerQuarterlyData(ServiceLawyerImportForm lawyerAnnual,
Map<Long, ServiceLawyerImportForm> lawyerQuarterlyMap,
LawyerStatisticsQueryForm queryForm,
DictEntity dictItem) {
ServiceLawyerImportForm lawyerQuarterly = lawyerQuarterlyMap.get(lawyerAnnual.getUserId());
if (lawyerQuarterly != null && queryForm.getQuarter() != null) {
lawyerAnnual.setQuarterlyServiceDuration(lawyerQuarterly.getAnnualServiceDuration());
// 第三步:合并年度和季度数据
Map<Long, LawyerStatisticsVO> quarterlyMap = quarterlyStatistics.stream()
.collect(Collectors.toMap(LawyerStatisticsVO::getFirmId, Function.identity()));
BigDecimal lawyerQuarterlyCost = BigDecimal.valueOf(lawyerQuarterly.getAnnualServiceDuration() * Long.valueOf(dictItem.getRemark()));
lawyerAnnual.setQuarterlyServiceCost(lawyerQuarterlyCost);
for (LawyerStatisticsVO annualStat : annualStatistics) {
// 计算年度成本
BigDecimal annualCost = BigDecimal.valueOf(annualStat.getAnnualServiceDuration() * Long.valueOf(dictItem.getRemark()));
annualStat.setAnnualServiceCost(annualCost);
// 查询amount类型的金额并添加到年度成本
LawyerStatisticsQueryForm amountQueryForm = new LawyerStatisticsQueryForm();
amountQueryForm.setFirmId(annualStat.getFirmId());
amountQueryForm.setStartTime(yearStart);
amountQueryForm.setEndTime(yearEnd);
BigDecimal annualAmount = serviceApplicationsDao.getServiceAmount(amountQueryForm);
// 安全地添加年度特殊金额
BigDecimal currentAnnualCost = annualStat.getAnnualServiceCost();
if (currentAnnualCost != null) {
annualStat.setAnnualServiceCost(currentAnnualCost.add(annualAmount != null ? annualAmount : BigDecimal.ZERO));
} else {
annualStat.setAnnualServiceCost(annualAmount != null ? annualAmount : BigDecimal.ZERO);
}
// 设置季度数据
LawyerStatisticsVO quarterlyStat = quarterlyMap.get(annualStat.getFirmId());
if (quarterlyStat != null && queryForm.getQuarter() != null) {
annualStat.setQuarterlyServiceDuration(quarterlyStat.getAnnualServiceDuration());
BigDecimal quarterlyCost = BigDecimal.valueOf(quarterlyStat.getAnnualServiceDuration() * Long.valueOf(dictItem.getRemark()));
annualStat.setQuarterlyServiceCost(quarterlyCost);
// 修复:创建独立的季度金额查询表单,避免时间范围污染
LawyerStatisticsQueryForm quarterlyAmountQueryForm = new LawyerStatisticsQueryForm();
quarterlyAmountQueryForm.setFirmId(annualStat.getFirmId());
quarterlyAmountQueryForm.setStartTime(quarterStart.toString());
quarterlyAmountQueryForm.setEndTime(quarterEnd.toString());
BigDecimal quarterlyAmount = serviceApplicationsDao.getServiceAmount(quarterlyAmountQueryForm);
annualStat.setQuarterlyServiceCost(annualStat.getQuarterlyServiceCost().add(quarterlyAmount != null ? quarterlyAmount : BigDecimal.ZERO));
} else {
// 没有季度数据时设置默认值
annualStat.setQuarterlyServiceDuration(0.00);
annualStat.setQuarterlyServiceCost(BigDecimal.ZERO);
}
// 查询律所下律师的详细统计信息
ServiceLawyerQueryForm serviceLawyerQueryForm = new ServiceLawyerQueryForm();
serviceLawyerQueryForm.setFirmId(annualStat.getFirmId());
serviceLawyerQueryForm.setYear(queryForm.getYear());
// 设置律师年度统计时间范围
serviceLawyerQueryForm.setStartTime(yearStart);
serviceLawyerQueryForm.setEndTime(yearEnd);
List<ServiceLawyerImportForm> lawyerAnnualStats = serviceApplicationsDao.getLawyerStatisticsWithParam(serviceLawyerQueryForm);
// 处理律师季度统计
List<ServiceLawyerImportForm> lawyerQuarterlyStats = new ArrayList<>();
if (queryForm.getQuarter() != null) {
// 为律师季度统计创建独立的查询表单,使用季度时间范围
ServiceLawyerQueryForm lawyerQuarterlyQueryForm = new ServiceLawyerQueryForm();
lawyerQuarterlyQueryForm.setFirmId(annualStat.getFirmId());
lawyerQuarterlyQueryForm.setYear(queryForm.getYear());
lawyerQuarterlyQueryForm.setStartTime(quarterStart.toString());
lawyerQuarterlyQueryForm.setEndTime(quarterEnd.toString());
lawyerQuarterlyStats = serviceApplicationsDao.getLawyerStatisticsWithParam(lawyerQuarterlyQueryForm);
}
// 合并律师年度和季度数据
Map<Long, ServiceLawyerImportForm> lawyerQuarterlyMap = lawyerQuarterlyStats.stream()
.collect(Collectors.toMap(ServiceLawyerImportForm::getUserId, Function.identity()));
for (ServiceLawyerImportForm lawyerAnnual : lawyerAnnualStats) {
// 计算律师年度成本
BigDecimal lawyerAnnualCost = BigDecimal.valueOf(lawyerAnnual.getAnnualServiceDuration() * Long.valueOf(dictItem.getRemark()));
lawyerAnnual.setAnnualServiceCost(lawyerAnnualCost);
// 查询律师年度amount类型金额
LawyerStatisticsQueryForm lawyerAmountQueryForm = new LawyerStatisticsQueryForm();
lawyerAmountQueryForm.setUserId(lawyerAnnual.getUserId());
lawyerAmountQueryForm.setStartTime(yearStart);
lawyerAmountQueryForm.setEndTime(yearEnd);
BigDecimal lawyerAnnualAmount = serviceApplicationsDao.getServiceAmount(lawyerAmountQueryForm);
// 安全地添加律师年度特殊金额
BigDecimal currentLawyerAnnualCost = lawyerAnnual.getAnnualServiceCost();
if (currentLawyerAnnualCost != null) {
lawyerAnnual.setAnnualServiceCost(currentLawyerAnnualCost.add(lawyerAnnualAmount != null ? lawyerAnnualAmount : BigDecimal.ZERO));
} else {
lawyerAnnual.setAnnualServiceCost(lawyerAnnualAmount != null ? lawyerAnnualAmount : BigDecimal.ZERO);
}
// 设置律师季度数据
ServiceLawyerImportForm lawyerQuarterly = lawyerQuarterlyMap.get(lawyerAnnual.getUserId());
if (lawyerQuarterly != null && queryForm.getQuarter() != null) {
lawyerAnnual.setQuarterlyServiceDuration(lawyerQuarterly.getAnnualServiceDuration());
BigDecimal lawyerQuarterlyCost = BigDecimal.valueOf(lawyerQuarterly.getAnnualServiceDuration() * Long.valueOf(dictItem.getRemark()));
lawyerAnnual.setQuarterlyServiceCost(lawyerQuarterlyCost);
BigDecimal lawyerQuarterlyAmount = serviceApplicationsDao.getServiceAmount(annualQueryForm);
lawyerAnnual.setQuarterlyServiceCost(lawyerAnnual.getQuarterlyServiceCost().add(lawyerQuarterlyAmount != null ? lawyerQuarterlyAmount : BigDecimal.ZERO));
} else {
lawyerAnnual.setQuarterlyServiceDuration(0.0);
lawyerAnnual.setQuarterlyServiceCost(BigDecimal.ZERO);
}
}
annualStat.setLawyerServiceVOList(lawyerAnnualStats);
// 查询律师季度金额类型数据
LawyerStatisticsQueryForm quarterlyAmountQueryForm = new LawyerStatisticsQueryForm();
quarterlyAmountQueryForm.setUserId(lawyerAnnual.getUserId());
quarterlyAmountQueryForm.setStartTime(queryForm.getStartTime());
quarterlyAmountQueryForm.setEndTime(queryForm.getEndTime());
BigDecimal lawyerQuarterlyAmount = serviceApplicationsDao.getServiceAmount(quarterlyAmountQueryForm);
if (lawyerQuarterlyAmount != null && lawyerQuarterlyAmount.compareTo(BigDecimal.ZERO) > 0) {
lawyerAnnual.setQuarterlyServiceCost(lawyerAnnual.getQuarterlyServiceCost().add(lawyerQuarterlyAmount));
}
} else {
lawyerAnnual.setQuarterlyServiceDuration(0.0);
lawyerAnnual.setQuarterlyServiceCost(BigDecimal.ZERO);
}
//屏蔽成本数据
maskCostDataForUser(annualStatistics);
return annualStatistics;
}
/**
@ -1089,10 +1280,11 @@ public class ServiceApplicationsService {
*/
public BigDecimal getServiceApplicationsCost(ServiceLawyerQueryForm queryForm) {
// 根据指定的季度设置时间范围
LocalDateTime quarterStart = DateTimeEnum.getQuarterStart(queryForm.getYear(), queryForm.getQuarter());
LocalDateTime quarterEnd = DateTimeEnum.getQuarterEnd(queryForm.getYear(), queryForm.getQuarter());
LocalDateTime quarterStart = DateTimeEnum.getMonthStart(queryForm.getYear(), queryForm.getMonth());
LocalDateTime quarterEnd = DateTimeEnum.getMonthEnd(queryForm.getYear(), queryForm.getMonth());
queryForm.setStartTime(quarterStart.toString());
queryForm.setEndTime(quarterEnd.toString());
queryForm.setFirmId(queryForm.getFirmId());
//获取多少小时
Long time = serviceApplicationsDao.getServiceApplicationsCost(queryForm);
//获取字典表的设置
@ -1117,7 +1309,7 @@ public class ServiceApplicationsService {
return result;
}else {
return BigDecimal.valueOf(0L);
return BigDecimal.ZERO;
}
}
@ -1360,69 +1552,210 @@ public class ServiceApplicationsService {
/**
* 获取律师统计信息带查询参数
*/
public PageResult<LawyerStatisticsVO> getLawyerStatistics(LawyerStatisticsQueryForm queryForm) {
Page<?> page = SmartPageUtil.convert2PageQuery(queryForm);
DictEntity one = dictService.getOne("FILECOST");
//查询下角色
public List<LawyerStatisticsVO> getLawyerStatistics(LawyerStatisticsQueryForm queryForm) {
DictEntity fileCostDict = dictService.getOne("FILECOST");
// 应用权限控制
applyUserPermissionControl(queryForm);
// 设置年度时间范围
setAnnualTimeRange(queryForm);
// 统计当前年度的律师数据(无分页)
List<LawyerStatisticsVO> lawyerStatisticsList = serviceApplicationsDao.getLawyerStatisticsWithParamYearNoPage(queryForm);
// 处理统计数据
if (!lawyerStatisticsList.isEmpty()) {
// 处理有服务时长类型数据的律师统计
processLawyersWithServiceDuration(lawyerStatisticsList, queryForm, fileCostDict);
} else {
// 处理只有金额类型数据的律师统计
processLawyersWithAmountOnly(lawyerStatisticsList, queryForm, fileCostDict);
}
// 根据用户权限控制成本数据显示
maskCostDataForUser(lawyerStatisticsList);
return lawyerStatisticsList;
}
/**
* 应用用户权限控制
*/
private void applyUserPermissionControl(LawyerStatisticsQueryForm queryForm) {
RequestEmployee requestUser = AdminRequestUtil.getRequestUser();
RoleVO roleList = roleEmployeeService.getRoleIdList(requestUser.getEmployeeId()).get(0);
TimeVo yearStartAndEnd = DateTimeUtil.getYearStartAndEnd(queryForm.getYear());
//根据year拼接年度的开始时间和结束时间
String yearStart = yearStartAndEnd.getStartTime();
String yearEnd = yearStartAndEnd.getEndTime();
queryForm.setStartTime(yearStart);
queryForm.setEndTime(yearEnd);
if (UserTypeEnum.CTO.getDesc().equals(roleList.getRoleCode())){
queryForm.setFirmId(requestUser.getDepartmentId());
}
//统计当前年度的
List<LawyerStatisticsVO> lawyerStatisticsWithParamYear = serviceApplicationsDao.getLawyerStatisticsWithParamYear(page, queryForm);
PageResult<LawyerStatisticsVO> lawyerStatisticsVOPageResult = SmartPageUtil.convert2PageResult(page, lawyerStatisticsWithParamYear);
if (!lawyerStatisticsVOPageResult.getList().isEmpty()) {
for (LawyerStatisticsVO statisticsVO : lawyerStatisticsWithParamYear) {
statisticsVO.setAnnualServiceCost(BigDecimal.valueOf(statisticsVO.getAnnualServiceDuration() * Long.valueOf(one.getRemark())));
//统计金额
queryForm.setUserId(statisticsVO.getUserId());
BigDecimal amount = serviceApplicationsDao.getServiceAmount(queryForm);
statisticsVO.setAnnualServiceCost(statisticsVO.getAnnualServiceCost().add(amount));
// 直接为每个律师查询季度数据
LawyerStatisticsQueryForm quarterQueryForm = new LawyerStatisticsQueryForm();
quarterQueryForm.setYear(queryForm.getYear());
quarterQueryForm.setQuarter(queryForm.getQuarter());
quarterQueryForm.setUserId(statisticsVO.getUserId());
// 设置季度时间范围
if (quarterQueryForm.getQuarter() == null) {
TimeVo startQuarter = DateTimeUtil.getStartQuarter();
quarterQueryForm.setStartTime(startQuarter.getStartTime());
quarterQueryForm.setEndTime(startQuarter.getEndTime());
} else {
LocalDateTime quarterStart = DateTimeEnum.getQuarterStart(quarterQueryForm.getYear(), quarterQueryForm.getQuarter());
LocalDateTime quarterEnd = DateTimeEnum.getQuarterEnd(quarterQueryForm.getYear(), quarterQueryForm.getQuarter());
quarterQueryForm.setStartTime(quarterStart.toString());
quarterQueryForm.setEndTime(quarterEnd.toString());
}
}
/**
* 设置年度时间范围
*/
private void setAnnualTimeRange(LawyerStatisticsQueryForm queryForm) {
TimeVo yearStartAndEnd = DateTimeUtil.getYearStartAndEnd(queryForm.getYear());
queryForm.setStartTime(yearStartAndEnd.getStartTime());
queryForm.setEndTime(yearStartAndEnd.getEndTime());
}
/**
* 处理有服务时长类型数据的律师统计
*/
private void processLawyersWithServiceDuration(List<LawyerStatisticsVO> lawyerStatisticsList,
LawyerStatisticsQueryForm queryForm,
DictEntity fileCostDict) {
for (LawyerStatisticsVO statisticsVO : lawyerStatisticsList) {
// 计算年度服务成本(服务时长 + 金额类型)
calculateAnnualServiceCost(statisticsVO, queryForm, fileCostDict);
// 只有在有季度查询条件时才计算季度服务成本
if (queryForm.getQuarter() != null) {
calculateQuarterlyServiceCost(statisticsVO, queryForm, fileCostDict);
} else {
// 没有季度查询条件时,设置季度数据为默认值
statisticsVO.setQuarterlyServiceDuration(0.0);
statisticsVO.setQuarterlyServiceCost(BigDecimal.ZERO);
}
}
}
/**
* 计算年度服务成本
*/
private void calculateAnnualServiceCost(LawyerStatisticsVO statisticsVO,
LawyerStatisticsQueryForm queryForm,
DictEntity fileCostDict) {
// 检查字典项是否为空
if (fileCostDict == null || fileCostDict.getRemark() == null) {
log.warn("FILECOST字典项为空或remark字段为空,无法计算服务时长成本");
statisticsVO.setAnnualServiceCost(BigDecimal.ZERO);
} else {
// 基于服务时长计算成本
BigDecimal serviceDurationCost = BigDecimal.valueOf(
statisticsVO.getAnnualServiceDuration() * Long.valueOf(fileCostDict.getRemark())
);
statisticsVO.setAnnualServiceCost(serviceDurationCost);
}
// 统计金额类型数据
LawyerStatisticsQueryForm amountQueryForm = createAmountQueryForm(queryForm, statisticsVO.getUserId());
BigDecimal amount = serviceApplicationsDao.getServiceAmount(amountQueryForm);
if (amount != null && amount.compareTo(BigDecimal.ZERO) > 0) {
statisticsVO.setAnnualServiceCost(statisticsVO.getAnnualServiceCost().add(amount));
}
}
/**
* 计算季度服务成本
*/
private void calculateQuarterlyServiceCost(LawyerStatisticsVO statisticsVO,
LawyerStatisticsQueryForm queryForm,
DictEntity fileCostDict) {
LawyerStatisticsQueryForm quarterQueryForm = createQuarterQueryForm(queryForm, statisticsVO.getUserId());
// 查询该律师的季度数据
LawyerStatisticsVO quarterData = serviceApplicationsDao.getLawyerStatistic(quarterQueryForm);
if (quarterData != null && quarterData.getQuarterlyServiceDuration() != null) {
statisticsVO.setQuarterlyServiceDuration(quarterData.getQuarterlyServiceDuration());
// 基于服务时长计算季度成本
BigDecimal quarterServiceDurationCost = BigDecimal.valueOf(
quarterData.getQuarterlyServiceDuration() * Long.valueOf(fileCostDict.getRemark())
);
statisticsVO.setQuarterlyServiceCost(quarterServiceDurationCost);
// 统计季度金额类型数据
BigDecimal quarterAmount = serviceApplicationsDao.getServiceAmount(quarterQueryForm);
if (quarterAmount != null) {
statisticsVO.setQuarterlyServiceCost(statisticsVO.getQuarterlyServiceCost().add(quarterAmount));
}
} else {
// 如果没有季度数据,设置季度成本为0
statisticsVO.setQuarterlyServiceDuration(0.0);
statisticsVO.setQuarterlyServiceCost(BigDecimal.ZERO);
}
}
/**
* 处理只有金额类型数据的律师统计
*/
private void processLawyersWithAmountOnly(List<LawyerStatisticsVO> resultList,
LawyerStatisticsQueryForm queryForm,
DictEntity fileCostDict) {
// 查询只有金额类型数据的律师
List<LawyerStatisticsVO> amountOnlyLawyers = findLawyersWithAmountOnly(queryForm);
if (!amountOnlyLawyers.isEmpty()) {
resultList.addAll(amountOnlyLawyers);
}
}
/**
* 查找只有金额类型数据的律师
*/
private List<LawyerStatisticsVO> findLawyersWithAmountOnly(LawyerStatisticsQueryForm queryForm) {
// 查询按律师统计的年度金额数据
List<LawyerStatisticsVO> amountOnlyLawyers = serviceApplicationsDao.getLawyerAmountStatistics(queryForm);
if (!amountOnlyLawyers.isEmpty()) {
log.info("发现 {} 个只有金额类型数据的律师", amountOnlyLawyers.size());
// 处理每个律师的季度金额数据
for (LawyerStatisticsVO lawyer : amountOnlyLawyers) {
// 设置服务时长为0(只有金额类型数据)
lawyer.setAnnualServiceDuration(0.0);
lawyer.setQuarterlyServiceDuration(0.0);
// 查询该律师的季度数据
LawyerStatisticsVO quarterData = serviceApplicationsDao.getLawyerStatistic(quarterQueryForm);
if (quarterData != null && quarterData.getQuarterlyServiceDuration() != null) {
statisticsVO.setQuarterlyServiceDuration(quarterData.getQuarterlyServiceDuration());
statisticsVO.setQuarterlyServiceCost(BigDecimal.valueOf(quarterData.getQuarterlyServiceDuration() * Long.valueOf(one.getRemark())));
// 统计金额
// 只有在有季度参数时才查询季度金额数据
if (queryForm.getQuarter() != null) {
LawyerStatisticsQueryForm quarterQueryForm = createQuarterQueryForm(queryForm, lawyer.getUserId());
BigDecimal quarterAmount = serviceApplicationsDao.getServiceAmount(quarterQueryForm);
statisticsVO.setQuarterlyServiceCost(statisticsVO.getQuarterlyServiceCost().add(quarterAmount));
if (quarterAmount != null && quarterAmount.compareTo(BigDecimal.ZERO) > 0) {
lawyer.setQuarterlyServiceCost(quarterAmount);
} else {
lawyer.setQuarterlyServiceCost(BigDecimal.ZERO);
}
} else {
// 如果没有季度数据,设置季度成本为0
statisticsVO.setQuarterlyServiceDuration(0.0);
statisticsVO.setQuarterlyServiceCost(BigDecimal.ZERO);
lawyer.setQuarterlyServiceCost(BigDecimal.ZERO);
}
}
}
// 根据用户权限控制成本数据显示
maskCostDataForUser(lawyerStatisticsVOPageResult.getList());
return lawyerStatisticsVOPageResult;
return amountOnlyLawyers;
}
/**
* 创建金额查询表单
*/
private LawyerStatisticsQueryForm createAmountQueryForm(LawyerStatisticsQueryForm originalForm, Long userId) {
LawyerStatisticsQueryForm amountQueryForm = new LawyerStatisticsQueryForm();
amountQueryForm.setYear(originalForm.getYear());
amountQueryForm.setQuarter(originalForm.getQuarter());
amountQueryForm.setFirmId(originalForm.getFirmId());
amountQueryForm.setUserId(userId);
amountQueryForm.setStartTime(originalForm.getStartTime());
amountQueryForm.setEndTime(originalForm.getEndTime());
return amountQueryForm;
}
/**
* 创建季度查询表单
*/
private LawyerStatisticsQueryForm createQuarterQueryForm(LawyerStatisticsQueryForm originalForm, Long userId) {
LawyerStatisticsQueryForm quarterQueryForm = new LawyerStatisticsQueryForm();
quarterQueryForm.setYear(originalForm.getYear());
quarterQueryForm.setQuarter(originalForm.getQuarter());
quarterQueryForm.setUserId(userId);
// 设置季度时间范围(只有在有季度参数时才设置具体季度范围)
if (quarterQueryForm.getQuarter() != null) {
LocalDateTime quarterStart = DateTimeEnum.getQuarterStart(quarterQueryForm.getYear(), quarterQueryForm.getQuarter());
LocalDateTime quarterEnd = DateTimeEnum.getQuarterEnd(quarterQueryForm.getYear(), quarterQueryForm.getQuarter());
quarterQueryForm.setStartTime(quarterStart.toString());
quarterQueryForm.setEndTime(quarterEnd.toString());
}
return quarterQueryForm;
}
/**
@ -1637,6 +1970,36 @@ public class ServiceApplicationsService {
}
}
}
} else {
// 处理 lawyerStatisticsVOPageResult 和 lawyerStatisticsWithParamYear 都为 null 的情况
// 但仍可能存在 amount 数据需要处理
LawyerStatisticsQueryForm queryForm = new LawyerStatisticsQueryForm();
queryForm.setYear(originalQueryForm.getYear());
queryForm.setQuarter(originalQueryForm.getQuarter());
if (queryForm.getQuarter() == null) {
// 如果没有指定季度,使用上一季度的时间范围
TimeVo startQuarter = DateTimeUtil.getStartQuarter();
String quarterStart = startQuarter.getStartTime();
String quarterEnd = startQuarter.getEndTime();
queryForm.setStartTime(quarterStart + " 00:00:00");
queryForm.setEndTime(quarterEnd + " 23:59:59");
} 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());
}
// 即使没有统计数据,也要查询可能存在的 amount 数据
BigDecimal amount = serviceApplicationsDao.getServiceAmount(queryForm);
if (amount != null && amount.compareTo(BigDecimal.ZERO) > 0) {
log.warn("发现孤立的 amount 数据: {},但没有对应的统计数据", amount);
// 这里可以根据业务需求决定如何处理孤立的 amount 数据
// 比如可以创建一个特殊的统计记录,或者记录到日志中
}
}
}

9
yun-admin/src/main/java/net/lab1024/sa/admin/module/system/login/domain/LoginResultVO.java

@ -39,4 +39,13 @@ public class LoginResultVO extends RequestEmployee {
private Boolean agreementSignFlag;
private Integer dataScopeView;
private String roleCode;
@Schema(description = "律所协议签订状态")
private Boolean lawFirmAgreementSignFlag;
/**
* 是否有成本查看权限
*/
private Boolean costVisibleFlag;
private Boolean penaltyFlag;
}

6
yun-admin/src/main/java/net/lab1024/sa/admin/module/system/login/manager/LoginManager.java

@ -74,8 +74,12 @@ public class LoginManager {
/**
* 获取登录的用户信息
*/
@CachePut(value = AdminCacheConst.Login.REQUEST_EMPLOYEE, key = "#employeeEntity.employeeId")
@CachePut(value = AdminCacheConst.Login.REQUEST_EMPLOYEE, key = "#employeeEntity?.employeeId")
public RequestEmployee loadLoginInfo(EmployeeEntity employeeEntity) {
if (employeeEntity == null) {
return null;
}
// 基础信息
RequestEmployee requestEmployee = SmartBeanUtil.copy(employeeEntity, RequestEmployee.class);
requestEmployee.setUserType(UserTypeEnum.ADMIN_EMPLOYEE);

2
yun-admin/src/main/java/net/lab1024/sa/admin/module/system/login/service/LoginService.java

@ -296,6 +296,8 @@ public class LoginService implements StpInterface {
loginResultVO.setCostVisibleFlag(byId.getCostVisibleFlag());
//承诺书签订状态
loginResultVO.setAgreementSignFlag(letterService.isLetter(requestEmployee.getEmployeeId()));
//律所承诺书签订状态
loginResultVO.setLawFirmAgreementSignFlag(letterService.isLetterDept(requestEmployee.getEmployeeId()));
//获取角色
List<RoleVO> roleIdList = roleEmployeeService.getRoleIdList(requestEmployee.getEmployeeId());
loginResultVO.setDataScopeView(dataScopeViewService.getOneByRoleId(roleIdList.get(0).getRoleId()));

21
yun-admin/src/main/java/net/lab1024/sa/admin/module/word/WordApplicationsController.java

@ -8,6 +8,7 @@ import net.lab1024.sa.admin.module.system.department.domain.vo.DepartmentVO;
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.service.EmployeeService;
import net.lab1024.sa.base.common.enumeration.UserTypeEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@ -270,7 +271,8 @@ public class WordApplicationsController {
department.getCreditCode(),
employee.getActualName(),
employee.getCertificateNumber(),
penaltyApplyEntity.getCreateTime()
penaltyApplyEntity.getCreateTime(),
penaltyApplyEntity.getType()
);
}
@ -336,12 +338,19 @@ public class WordApplicationsController {
FontMetrics bodyMetrics = g2d.getFontMetrics();
int lineHeight = bodyMetrics.getHeight();
int maxLineWidth = PAGE_WIDTH - LEFT_MARGIN - RIGHT_MARGIN;
String fullContent = "";
if (UserTypeEnum.USER.getDesc().equals(data.getType())){
// 构建完整内容
String fullContent = "兹证明" + data.getCertificateNo() + "(统一社会信用代码:" +
data.getPurpose() + ")" + data.getName() +
"律师(执业证号:" + data.getIdCard() +
")近五年在我市执业期间未受到律师协会行业处分。";
fullContent = "兹证明" + data.getCertificateNo() + "(统一社会信用代码:" +
data.getPurpose() + ")" + data.getName() +
"律师(执业证号:" + data.getIdCard() +
")近五年在我市执业期间未受到律师协会行业处分。";
}else {
fullContent = "兹证明" + data.getCertificateNo() + "(统一社会信用代码:" +
data.getPurpose() + ")" +
"近五年在我市执业期间未受到律师协会行业处分。";
}
// 首行缩进(两个全角空格)
String indent = "  ";

1
yun-admin/src/main/java/net/lab1024/sa/admin/module/word/WordCertificateService.java

@ -250,6 +250,7 @@ public class WordCertificateService {
private String name;
private String idCard;
private LocalDateTime localDateTime; // 修正字段名为驼峰命名
private String type;
}
}

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

@ -2,6 +2,7 @@ package net.lab1024.sa.admin.util;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
@ -14,6 +15,43 @@ import java.util.Date;
* @create: 2025-12-24 16:24
**/
public class DateTimeUtil {
/**
* 根据当前日期判断所属季度
* 第一季度1月1日-4月4日
* 第二季度4月5日-7月4日
* 第三季度7月5日-10月4日
* 第四季度10月5日-12月31日
* @return 季度编号(Q1-Q4)
*/
public static String getCurrentQuarter() {
LocalDate today = LocalDate.now();
Month month = today.getMonth();
int dayOfMonth = today.getDayOfMonth();
// 判断当前时间是不是小于4月5号,是则为第一季度
if (month.getValue() < 4 || (month.getValue() == 4 && dayOfMonth < 5)) {
return "Q1";
}
// 判断当前时间是不是大于4月5号小于7月5号,是则为第二季度
else if ((month.getValue() == 4 && dayOfMonth >= 5) ||
(month.getValue() > 4 && month.getValue() < 7) ||
(month.getValue() == 7 && dayOfMonth < 5)) {
return "Q2";
}
// 判断当前时间是不是大于7月5号小于10月5号,是则为第三季度
else if ((month.getValue() == 7 && dayOfMonth >= 5) ||
(month.getValue() > 7 && month.getValue() < 10) ||
(month.getValue() == 10 && dayOfMonth < 5)) {
return "Q3";
}
// 判断当前时间是不是大于10月5号小于第二年的1月5号,是则为第四季度
else {
return "Q4";
}
}
/**
* 获取当前日期上一季度 开始时间
*

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

@ -18,7 +18,8 @@
t_firm_reports.approver_id as approverId,
t_firm_reports.create_time as createTime,
t_firm_reports.update_time as updateTime,
t_firm_reports.del_flag as delFlag
t_firm_reports.del_flag as delFlag,
t_firm_reports.declare_month as declareMonth
</sql>
<update id="commit">
UPDATE t_firm_reports
@ -53,6 +54,9 @@
<if test="queryForm.declareQuarter != null">
AND t_firm_reports.declare_quarter = #{queryForm.declareQuarter}
</if>
<if test="queryForm.declareMonth != null">
AND t_firm_reports.declare_month = #{queryForm.declareMonth}
</if>
<if test="queryForm.approvalStatus != null">
AND t_firm_reports.approval_status = #{queryForm.approvalStatus}
</if>
@ -65,10 +69,37 @@
SELECT *
FROM t_firm_reports
WHERE del_flag = 0
AND declare_quarter = #{declareQuarter}
AND declare_month = #{declareQuarter}
AND declare_year = #{declareYear}
AND firm_id = #{firmId}
LIMIT 1
</select>
<select id="query" resultType="java.lang.Boolean">
SELECT
CASE WHEN EXISTS(
SELECT 1
FROM t_firm_reports
WHERE del_flag = 0 and approval_status = 3
AND declare_month = #{currentQuarter}
AND declare_year = #{currentYear}
AND firm_id = #{departmentId}
) THEN true ELSE false END
</select>
<select id="firmReportsCost" resultType="java.lang.Long">
SELECT ifnull(SUM(total_cost),0)
FROM t_firm_reports
WHERE del_flag = 0 and approval_status = 3
AND declare_year = #{currentYear}
AND firm_id = #{departmentId}
</select>
<select id="income" resultType="net.lab1024.sa.admin.module.cost.domain.vo.FirmReportsCountVO">
SELECT
SUM(revenue) as revenue,
SUM(total_cost) as totalCost
FROM t_firm_reports
WHERE del_flag = 0 and approval_status = 3
AND declare_year = #{currentYear}
AND firm_id = #{departmentId}
</select>
</mapper>

4
yun-admin/src/main/resources/mapper/penaltyapply/PenaltyApplyMapper.xml

@ -13,7 +13,8 @@
t_penalty_apply.update_time,
t_penalty_apply.deleted_flag,
t_penalty_apply.department_id,
t_penalty_apply.audit_status
t_penalty_apply.audit_status,
t_penalty_apply.type
</sql>
<!-- 分页查询 -->
@ -29,6 +30,7 @@
tp_apply.deleted_flag as deletedFlag,
tp_apply.audit_status as auditStatus,
tp_apply.department_id as departmentId,
tp_apply.type,
te_employee.actual_name AS userName
FROM t_penalty_apply tp_apply left join t_employee te_employee on tp_apply.user_id = te_employee.employee_id
<where>

5
yun-admin/src/main/resources/mapper/penaltyapply/PenaltyLawyerMapper.xml

@ -35,6 +35,11 @@
from t_lawyer_punish_people
where name = #{licenseNo} and punish_time >= DATE_SUB(CURDATE(), INTERVAL 5 YEAR)
</select>
<select id="queryNoName" resultType="com.alibaba.fastjson.JSONObject">
select *
from t_lawyer_punish_people
where name is null and dept_name = #{departmentName} and punish_time >= DATE_SUB(CURDATE(), INTERVAL 5 YEAR)
</select>
</mapper>

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

@ -509,12 +509,12 @@
SUM(tsa.service_duration) AS totalServiceCost
FROM t_service_applications tsa
WHERE tsa.deleted_flag = 0
AND tsa.association_audit_status = 3
AND tsa.firm_audit_status = 3
<if test="queryForm.startTime != null and queryForm.startTime != ''">
AND tsa.association_audit_time &gt;= #{queryForm.startTime}
AND tsa.create_time &gt;= #{queryForm.startTime}
</if>
<if test="queryForm.endTime != null and queryForm.endTime != ''">
AND tsa.association_audit_time &lt;= #{queryForm.endTime}
AND tsa.create_time &lt;= #{queryForm.endTime}
</if>
<if test="queryForm.firmId != null">
AND tsa.firm_id = #{queryForm.firmId}
@ -553,12 +553,12 @@
LEFT JOIN t_department d ON tsa.firm_id = d.department_id
<where>
tsa.deleted_flag = 0
AND tsa.association_audit_status = 3
AND tsa.firm_audit_status = 3
<if test="queryForm.startTime != null and queryForm.startTime != ''">
AND tsa.association_audit_time &gt;= #{queryForm.startTime}
AND tsa.create_time &gt;= #{queryForm.startTime}
</if>
<if test="queryForm.endTime != null and queryForm.endTime != ''">
AND tsa.association_audit_time &lt;= #{queryForm.endTime}
AND tsa.create_time &lt;= #{queryForm.endTime}
</if>
<if test="queryForm.userId != null and queryForm.userId != ''">
and tsa.user_id = #{queryForm.userId}
@ -607,6 +607,64 @@
</if>
</where>
</select>
<select id="getServiceAmountList" resultType="java.math.BigDecimal">
SELECT
COALESCE(SUM(tsa.workload_score), 0)
FROM t_service_applications tsa
LEFT JOIN t_department d ON tsa.firm_id = d.department_id
<where>
tsa.deleted_flag = 0
AND tsa.association_audit_status = 3
<if test="queryForm.startTime != null and queryForm.startTime != ''">
AND tsa.association_audit_time &gt;= #{queryForm.startTime}
</if>
<if test="queryForm.endTime != null and queryForm.endTime != ''">
AND tsa.association_audit_time &lt;= #{queryForm.endTime}
</if>
<if test="queryForm.firmId != null and queryForm.firmId != ''">
and d.department_id = #{queryForm.firmId}
</if>
</where>
</select>
<select id="getLawyerAmountStatistics" 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,
d.department_id AS firmId,
d.department_name AS firmName,
COALESCE(SUM(tsa.workload_score), 0) AS annualServiceCost,
0.0 AS annualServiceDuration,
0.0 AS quarterlyServiceDuration,
COALESCE(0, 0) AS quarterlyServiceCost
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
AND tsa.association_audit_status = 3
<if test="queryForm.startTime != null and queryForm.startTime != ''">
AND tsa.association_audit_time &gt;= #{queryForm.startTime}
</if>
<if test="queryForm.endTime != null and queryForm.endTime != ''">
AND tsa.association_audit_time &lt;= #{queryForm.endTime}
</if>
<if test="queryForm.firmId != null and queryForm.firmId != ''">
and d.department_id = #{queryForm.firmId}
</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, tsa.certificate_number
HAVING annualServiceCost > 0
ORDER BY e.actual_name
</select>
<select id="selectByRecordNoNotMy"
resultType="net.lab1024.sa.admin.module.service.domain.vo.ServiceApplicationsVO">
SELECT

1
yun-admin/src/main/resources/mapper/system/PositionMapper.xml

@ -21,5 +21,6 @@
SELECT *
FROM t_position
where deleted_flag = #{deletedFlag}
order by sort
</select>
</mapper>

8
yun-base/src/main/java/net/lab1024/sa/base/common/code/UnexpectedErrorCode.java

@ -5,12 +5,6 @@ import lombok.Getter;
/**
* 未预期的错误码即发生了不可能发生的事情此类返回码应该高度重视
*
* @Author 1024创新实验室-主任: 卓大
* @Date 2021/09/27 22:10:46
* @Wechat zhuoda1024
* @Email lab1024@163.com
* @Copyright <a href="https://1024lab.net">1024创新实验室</a>
*/
@Getter
@AllArgsConstructor
@ -27,7 +21,7 @@ public enum UnexpectedErrorCode implements ErrorCode {
PAY_ORDER_ID_ERROR(20002, "付款单id发生了异常,请联系技术人员排查"),
DATA_EXIST(20003, "当前年度的季度成本填报已存在,请勿重复填报"),
DATA_EXIST(20003, "当前年度的本月成本填报已存在,请勿重复填报,记得提交哦"),
;
private final int code;

Loading…
Cancel
Save