fix(system): 优化日志记录和部门相关接口

- 在补卡失败时添加错误日志记录
- 新增按工厂 ID 获取部门列表的接口
- 优化部门简单响应 VO,添加机构类型字段
- 调整贷款控制器,使用工厂信息 API 获取部门信息
- 修改日志使用列表查询方式
- 优化用户导出模板中的部门和岗位数据加载
This commit is contained in:
furongxin 2025-02-22 16:28:15 +08:00
parent b169fadbf2
commit 72b60dd1ab
12 changed files with 60 additions and 17 deletions

View File

@ -108,6 +108,14 @@ public class DeptApiImpl implements DeptApi {
return success(BeanUtils.toBean(deptDO, DeptRespDTO.class)); return success(BeanUtils.toBean(deptDO, DeptRespDTO.class));
} }
@Override
@DataPermission(enable = false)
public CommonResult<List<DeptRespDTO>> getDeptByFactoryIds(Collection<Long> factoryIds) {
List<DeptDO> deptDOS = deptService.getDeptListByFactoryIds(factoryIds);
return success(BeanUtils.toBean(deptDOS, DeptRespDTO.class));
}
@Override @Override
@DataPermission(enable = false) @DataPermission(enable = false)
public CommonResult<List<Long>> getChildDeptList(Long deptId) { public CommonResult<List<Long>> getChildDeptList(Long deptId) {

View File

@ -9,7 +9,7 @@ import lombok.NoArgsConstructor;
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class DeptSimpleRespVO { public class DeptSimpleRespVO {
@Schema(description = "部门编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") @Schema(description = "部门编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Long id; private Long id;
@ -28,4 +28,7 @@ public class DeptSimpleRespVO {
@Schema(description = "工厂编号") @Schema(description = "工厂编号")
private Long factoryId; private Long factoryId;
@Schema(description = "机构类型 | 字典值参考 system_dept_type", example = "0")
private String type;
} }

View File

@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.smartfactory.api.factoryInfo.FactoryInfoApi;
import cn.iocoder.yudao.module.smartfactory.api.factoryInfo.dto.FactoryInfoDTO;
import cn.iocoder.yudao.module.smartfactory.api.staff.StaffApi; import cn.iocoder.yudao.module.smartfactory.api.staff.StaffApi;
import cn.iocoder.yudao.module.smartfactory.api.staff.dto.StaffDTO; import cn.iocoder.yudao.module.smartfactory.api.staff.dto.StaffDTO;
import cn.iocoder.yudao.module.system.controller.admin.loan.vo.LoanPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.loan.vo.LoanPageReqVO;
@ -44,7 +46,7 @@ public class LoanController {
private StaffApi staffApi; private StaffApi staffApi;
@Resource @Resource
private DeptService deptService; private FactoryInfoApi factoryInfoApi;
@GetMapping("/get") @GetMapping("/get")
@Operation(summary = "获得借支管理") @Operation(summary = "获得借支管理")
@ -55,6 +57,15 @@ public class LoanController {
return success(BeanUtils.toBean(loan, LoanRespVO.class)); return success(BeanUtils.toBean(loan, LoanRespVO.class));
} }
@GetMapping("/getByStaffId")
@Operation(summary = "获得指定员工的借支管理")
@Parameter(name = "staffId", description = "员工编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('system:loan:query')")
public CommonResult<LoanRespVO> getByStaffId(@RequestParam("id") Long id) {
LoanDO loan = loanService.getByUserId(id);
return success(BeanUtils.toBean(loan, LoanRespVO.class));
}
@GetMapping("/page") @GetMapping("/page")
@Operation(summary = "获得借支管理分页") @Operation(summary = "获得借支管理分页")
@PreAuthorize("@ss.hasPermission('system:loan:query')") @PreAuthorize("@ss.hasPermission('system:loan:query')")
@ -70,7 +81,7 @@ public class LoanController {
// 获取部门信息 // 获取部门信息
Set<Long> deptIds = convertSet(result.getList(), LoanRespVO::getDeptId); Set<Long> deptIds = convertSet(result.getList(), LoanRespVO::getDeptId);
Map<Long, DeptDO> deptMap = convertMap(deptService.getDeptList(deptIds), DeptDO::getId); Map<Long, FactoryInfoDTO> deptMap = factoryInfoApi.getFactoryMap(deptIds);
result.getList().forEach(item -> { result.getList().forEach(item -> {
// 设置借支用户名称 // 设置借支用户名称

View File

@ -372,11 +372,14 @@ public class UserController {
List<PostDO> postDO = postService.getPostList(null, Collections.singleton(CommonStatusEnum.ENABLE.getStatus())); List<PostDO> postDO = postService.getPostList(null, Collections.singleton(CommonStatusEnum.ENABLE.getStatus()));
postDO.sort(Comparator.comparing(PostDO::getSort)); postDO.sort(Comparator.comparing(PostDO::getSort));
Map<Integer, List<String>> mapDropDown = new HashMap<>();
mapDropDown.put(1, getDeptNameFun(deptDO));
mapDropDown.put(2, getPostNameFun(postDO));
// 输出 Excel // 输出 Excel
ExcelUtils.write(response, "用户数据.xls", "数据", UserRespVO.class, ExcelUtils.write(response, "用户数据.xls", "数据", UserRespVO.class,
UserConvert.INSTANCE.convertList(list, deptMap, postMap, positionMap), UserConvert.INSTANCE.convertList(list, deptMap, postMap, positionMap),
1, getDeptNameFun(deptDO), mapDropDown);
2, getPostNameFun(postDO));
} }
@GetMapping("/get-import-template") @GetMapping("/get-import-template")
@ -397,11 +400,14 @@ public class UserController {
List<PostDO> postDO = postService.getPostList(null, Collections.singleton(CommonStatusEnum.ENABLE.getStatus())); List<PostDO> postDO = postService.getPostList(null, Collections.singleton(CommonStatusEnum.ENABLE.getStatus()));
postDO.sort(Comparator.comparing(PostDO::getSort)); postDO.sort(Comparator.comparing(PostDO::getSort));
Map<Integer, List<String>> mapDropDown = new HashMap<>();
mapDropDown.put(1, getDeptNameFun(deptDO));
mapDropDown.put(2, getPostNameFun(postDO));
// 输出 // 输出
ExcelUtils.write(response, "用户导入模板.xlsx", "用户列表", ExcelUtils.write(response, "用户导入模板.xlsx", "用户列表",
UserImportExcelVO.class, null, UserImportExcelVO.class, null,
1, getDeptNameFun(deptDO), mapDropDown);
2, getPostNameFun(postDO));
} }
@PostMapping("/import") @PostMapping("/import")

View File

@ -71,8 +71,10 @@ public class LogFormController {
//获取规则信息 //获取规则信息
LogRuleDO logRuleDO = logRuleService.getLogRule(form.getId()); LogRuleDO logRuleDO = logRuleService.getLogRule(form.getId());
//设置日志类型 if (logRuleDO != null) {
logFormRespVO.setType(logRuleDO.getType()); //设置日志类型
logFormRespVO.setType(logRuleDO.getType());
}
} }
return success(logFormRespVO); return success(logFormRespVO);

View File

@ -45,4 +45,6 @@ public interface LogUseMapper extends BaseMapperX<LogUseDO> {
* @return * @return
*/ */
List<Long> getFormIdsByDataPermission(Long userId); List<Long> getFormIdsByDataPermission(Long userId);
List<Long> selectUseDeptList();
} }

View File

@ -1084,6 +1084,7 @@ public class AttendanceServiceImpl implements AttendanceService {
// -- 如果有报错的话 - 那么进行回滚操作 - 并且redis 中的补卡次数也要+1 (redis并不会回滚) // -- 如果有报错的话 - 那么进行回滚操作 - 并且redis 中的补卡次数也要+1 (redis并不会回滚)
String key = "ReplacementCardNum" + "_" + userId + "_" + LocalDateTime.now().format(Constants.YEAR_MONTH_FORMAT); String key = "ReplacementCardNum" + "_" + userId + "_" + LocalDateTime.now().format(Constants.YEAR_MONTH_FORMAT);
stringRedisTemplate.opsForValue().increment(key, 1); stringRedisTemplate.opsForValue().increment(key, 1);
log.error("补卡失败", e);
throw exception(ABNORMAL_CARD_REPLENISHMENT); throw exception(ABNORMAL_CARD_REPLENISHMENT);
} }
} }
@ -1115,6 +1116,7 @@ public class AttendanceServiceImpl implements AttendanceService {
// -- 如果有报错的话 - 那么进行回滚操作 - 并且redis 中的补卡次数也要+1 (redis并不会回滚) // -- 如果有报错的话 - 那么进行回滚操作 - 并且redis 中的补卡次数也要+1 (redis并不会回滚)
String key = "ReplacementCardNum" + "_" + userId + "_" + LocalDateTime.now().format(Constants.YEAR_MONTH_FORMAT); String key = "ReplacementCardNum" + "_" + userId + "_" + LocalDateTime.now().format(Constants.YEAR_MONTH_FORMAT);
stringRedisTemplate.opsForValue().increment(key, punchRecordIds.size()); stringRedisTemplate.opsForValue().increment(key, punchRecordIds.size());
log.error("补卡失败", e);
throw exception(ABNORMAL_CARD_REPLENISHMENT); throw exception(ABNORMAL_CARD_REPLENISHMENT);
} }
} }

View File

@ -160,7 +160,7 @@ public interface DeptService {
* @param factoryIds * @param factoryIds
* @return * @return
*/ */
List<DeptDO> getDeptListByFactoryIds(List<Long> factoryIds); List<DeptDO> getDeptListByFactoryIds(Collection<Long> factoryIds);
/** /**
* 获取部门列表 * 获取部门列表

View File

@ -356,7 +356,7 @@ public class DeptServiceImpl implements DeptService {
} }
@Override @Override
public List<DeptDO> getDeptListByFactoryIds(List<Long> factoryIds) { public List<DeptDO> getDeptListByFactoryIds(Collection<Long> factoryIds) {
return deptMapper.selectList(new LambdaQueryWrapper<DeptDO>() return deptMapper.selectList(new LambdaQueryWrapper<DeptDO>()
.in(DeptDO::getFactoryId, factoryIds)); .in(DeptDO::getFactoryId, factoryIds));
} }

View File

@ -98,11 +98,7 @@ public class LogUseServiceImpl implements LogUseService {
@Override @Override
public List<Long> getUseDeptList() { public List<Long> getUseDeptList() {
QueryWrapper<LogUseDO> queryWrapper = new QueryWrapper<>(); return logUseMapper.selectUseDeptList();
queryWrapper.select("DISTINCT use_user_dept");
List<LogUseDO> logUseDOS = logUseMapper.selectList(queryWrapper);
return convertList(logUseDOS, LogUseDO::getUseUserDept);
} }
@Override @Override

View File

@ -66,7 +66,7 @@
</springProfile> </springProfile>
<!-- 其它环境 --> <!-- 其它环境 -->
<springProfile name="dev,test,stage,prod,default"> <springProfile name="dev,test,stage,prod,default">
<root level="INFO"> <root level="DEBUG">
<appender-ref ref="STDOUT"/> <appender-ref ref="STDOUT"/>
<appender-ref ref="ASYNC"/> <appender-ref ref="ASYNC"/>
<appender-ref ref="GRPC"/> <appender-ref ref="GRPC"/>

View File

@ -30,4 +30,17 @@
deleted = 0 deleted = 0
and form_id = #{formId} and form_id = #{formId}
</select> </select>
<select id="selectUseDeptList" resultType="java.lang.Long">
SELECT DISTINCT
u.dept_id as deptId
FROM
work_log_use log,
system_users u
WHERE
u.id = log.use_user_id
and u.status = 0
and log.deleted = 0
and u.deleted = 0
</select>
</mapper> </mapper>