Browse Source

Merge branch 'master_20240722' of http://git.dgtis.com/15896567520/oneportal_saas into master_20240722

zhaopeiqing 6 months ago
parent
commit
a48f6e7c96
15 changed files with 249 additions and 118 deletions
  1. 1 0
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/expense/vo/OaExpenseRespVO.java
  2. 60 45
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/stamp/stampinfo/OaStampInfoController.java
  3. 7 0
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/stamp/stampinfo/vo/OaStampInfoRespVO.java
  4. 3 0
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/stamp/stampinfo/vo/OaStampInfoSaveReqVO.java
  5. 45 18
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/stamp/stampseal/OaStampSealController.java
  6. 12 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/stamp/stampinfo/OaStampInfoServiceImpl.java
  7. 11 0
      yudao-module-finance/yudao-module-expense-biz/src/main/java/cn/iocoder/yudao/module/expense/controller/admin/expenseinfo/ExpenseInfoController.java
  8. 42 32
      yudao-module-finance/yudao-module-expense-biz/src/main/java/cn/iocoder/yudao/module/expense/controller/admin/expenseinfo/vo/ExpenseInfoRespVO.java
  9. 3 0
      yudao-module-finance/yudao-module-expense-biz/src/main/java/cn/iocoder/yudao/module/expense/controller/admin/expenseinfo/vo/ExpenseInfoSaveReqVO.java
  10. 14 1
      yudao-module-finance/yudao-module-expense-biz/src/main/java/cn/iocoder/yudao/module/expense/controller/admin/expenseitem/ExpenseItemController.java
  11. 16 13
      yudao-module-finance/yudao-module-expense-biz/src/main/java/cn/iocoder/yudao/module/expense/controller/admin/expenseitem/vo/ExpenseItemRespVO.java
  12. 14 1
      yudao-module-finance/yudao-module-expense-biz/src/main/java/cn/iocoder/yudao/module/expense/controller/admin/expensetype/ExpenseTypeController.java
  13. 8 5
      yudao-module-finance/yudao-module-expense-biz/src/main/java/cn/iocoder/yudao/module/expense/controller/admin/expensetype/vo/ExpenseTypeRespVO.java
  14. 11 0
      yudao-module-finance/yudao-module-expense-biz/src/main/java/cn/iocoder/yudao/module/expense/service/expenseinfo/ExpenseInfoServiceImpl.java
  15. 2 2
      yudao-module-finance/yudao-module-expense-biz/src/main/resources/mapper/expenseinfo/ExpenseInfoMapper.xml

+ 1 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/expense/vo/OaExpenseRespVO.java

@@ -118,6 +118,7 @@ public class OaExpenseRespVO {
 
     @Schema(description = "附件id列表")
     private List<Long> fileIdList;
+
     @Schema(description = "审批记录列表")
     private List<BpmTaskRespVO> auditRecordList;
 

+ 60 - 45
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/stamp/stampinfo/OaStampInfoController.java

@@ -13,6 +13,8 @@ import cn.iocoder.yudao.module.bpm.dal.dataobject.stamp.stampinfo.OaStampInfoDO;
 import cn.iocoder.yudao.module.bpm.service.stamp.stampinfo.OaStampInfoService;
 import cn.iocoder.yudao.module.employee.api.EmployeeApi;
 import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
+import cn.iocoder.yudao.module.infra.api.file.FileApi;
+import cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
 import cn.iocoder.yudao.module.system.api.dept.DeptApi;
 import cn.iocoder.yudao.module.system.api.dept.PostApi;
 import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
@@ -30,6 +32,7 @@ import javax.validation.Valid;
 import java.io.IOException;
 import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@@ -52,6 +55,9 @@ public class OaStampInfoController {
     @Resource
     private PostApi postApi;
 
+    @Resource
+    private FileApi fileApi;
+
     @PostMapping("/create")
     @Operation(summary = "创建用印信息")
     // @PreAuthorize("@ss.hasPermission('bpm:oa-stamp-info:create')")
@@ -92,52 +98,61 @@ public class OaStampInfoController {
     public CommonResult<OaStampInfoRespVO> getOaStampInfo(@RequestParam("id") Long id) {
         OaStampInfoDO oaStampInfo = oaStampInfoService.getOaStampInfo(id);
         OaStampInfoRespVO oaStampInfoRespVO = BeanUtils.toBean(oaStampInfo, OaStampInfoRespVO.class);
-        // 状态描述
-        String status = oaStampInfoRespVO.getStatus();
-        switch (status) {
-            case "0":
-                oaStampInfoRespVO.setStatusDesc("已完成");
-                break;
-            case "1":
-                oaStampInfoRespVO.setStatusDesc("已作废");
-                break;
-            default:
-                oaStampInfoRespVO.setStatusDesc("未知");
-                break;
-        }
-        // 数据来源描述
-        String infoSource = oaStampInfoRespVO.getInfoSource();
-        switch (infoSource) {
-            case "0":
-                oaStampInfoRespVO.setInfoSourceDesc("流程添加");
-                break;
-            case "1":
-                oaStampInfoRespVO.setInfoSourceDesc("手动添加");
-                break;
-            default:
-                oaStampInfoRespVO.setInfoSourceDesc("未知");
-                break;
+        if (oaStampInfo != null) {
+            // 状态描述
+            String status = oaStampInfoRespVO.getStatus();
+            switch (status) {
+                case "0":
+                    oaStampInfoRespVO.setStatusDesc("已完成");
+                    break;
+                case "1":
+                    oaStampInfoRespVO.setStatusDesc("已作废");
+                    break;
+                default:
+                    oaStampInfoRespVO.setStatusDesc("未知");
+                    break;
+            }
+            // 数据来源描述
+            String infoSource = oaStampInfoRespVO.getInfoSource();
+            switch (infoSource) {
+                case "0":
+                    oaStampInfoRespVO.setInfoSourceDesc("流程添加");
+                    break;
+                case "1":
+                    oaStampInfoRespVO.setInfoSourceDesc("手动添加");
+                    break;
+                default:
+                    oaStampInfoRespVO.setInfoSourceDesc("未知");
+                    break;
+            }
+            // 创建人名字
+            Long createEmployeeId = oaStampInfoRespVO.getCreateEmployeeId();
+            EmployeeRespDTO createEmployee = employeeApi.getEmployeeById(createEmployeeId);
+            oaStampInfoRespVO.setCreateEmployeeName(createEmployee.getName());
+            // 用印人信息
+            Long employeeId = oaStampInfoRespVO.getEmployeeId();
+            // AdminUserRespDTO employee = adminUserApi.getUser(employeeId);
+            EmployeeRespDTO employee = employeeApi.getEmployeeById(employeeId);
+            oaStampInfoRespVO.setEmployeeName(employee.getName());
+            oaStampInfoRespVO.setEmployeePhone(employee.getPhone());
+            // 职位
+            Long postId = oaStampInfoRespVO.getPostId();
+            PostRespDTO post = postApi.getPost(postId);
+            if (Objects.nonNull(post)) {
+                oaStampInfoRespVO.setPosition(post.getName());
+            }
+            // 部门名称
+            Long deptId = oaStampInfoRespVO.getDeptId();
+            DeptRespDTO dept = deptApi.getDept(deptId);
+            oaStampInfoRespVO.setDeptName(dept.getName());
+
+            // 附件
+            List<FileDTO> fileDTOListByBiz = fileApi.getFileDTOListByBiz(oaStampInfo.getStampUuid());
+            oaStampInfoRespVO.setFileList(fileDTOListByBiz);
+            List<Long> fileIdList = fileDTOListByBiz.stream().map(FileDTO::getId).collect(Collectors.toList());
+            oaStampInfoRespVO.setFileIdList(fileIdList);
         }
-        // 创建人名字
-        Long createEmployeeId = oaStampInfoRespVO.getCreateEmployeeId();
-        EmployeeRespDTO createEmployee = employeeApi.getEmployeeById(createEmployeeId);
-        oaStampInfoRespVO.setCreateEmployeeName(createEmployee.getName());
-        // 用印人信息
-        Long employeeId = oaStampInfoRespVO.getEmployeeId();
-        // AdminUserRespDTO employee = adminUserApi.getUser(employeeId);
-        EmployeeRespDTO employee = employeeApi.getEmployeeById(employeeId);
-        oaStampInfoRespVO.setEmployeeName(employee.getName());
-        oaStampInfoRespVO.setEmployeePhone(employee.getPhone());
-        // 职位
-        Long postId = oaStampInfoRespVO.getPostId();
-        PostRespDTO post = postApi.getPost(postId);
-        if (Objects.nonNull(post)) {
-            oaStampInfoRespVO.setPosition(post.getName());
-        }
-        // 部门名称
-        Long deptId = oaStampInfoRespVO.getDeptId();
-        DeptRespDTO dept = deptApi.getDept(deptId);
-        oaStampInfoRespVO.setDeptName(dept.getName());
+
 
         return success(oaStampInfoRespVO);
     }

+ 7 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/stamp/stampinfo/vo/OaStampInfoRespVO.java

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.bpm.controller.admin.stamp.stampinfo.vo;
 
+import cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -101,4 +102,10 @@ public class OaStampInfoRespVO {
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;
 
+    @Schema(description = "附件列表")
+    private List<FileDTO> fileList;
+
+    @Schema(description = "附件id列表")
+    private List<Long> fileIdList;
+
 }

+ 3 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/stamp/stampinfo/vo/OaStampInfoSaveReqVO.java

@@ -34,4 +34,7 @@ public class OaStampInfoSaveReqVO {
     @Schema(description = "备注")
     private String remarks;
 
+    @Schema(description = "附件主键id", example = "[1, 2]")
+    private List<Long> fileIdList;
+
 }

+ 45 - 18
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/stamp/stampseal/OaStampSealController.java

@@ -11,15 +11,23 @@ import cn.iocoder.yudao.module.bpm.controller.admin.stamp.stampseal.vo.OaStampSe
 import cn.iocoder.yudao.module.bpm.controller.admin.stamp.stampseal.vo.OaStampSealSaveReqVO;
 import cn.iocoder.yudao.module.bpm.dal.dataobject.stamp.stampseal.OaStampSealDO;
 import cn.iocoder.yudao.module.bpm.service.stamp.stampseal.OaStampSealService;
+import cn.iocoder.yudao.module.employee.api.EmployeeApi;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 import cn.iocoder.yudao.module.infra.api.file.FileApi;
 import cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
-import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
-import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springdoc.api.annotations.ParameterObject;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
@@ -42,8 +50,10 @@ public class OaStampSealController {
     @Resource
     private OaStampSealService oaStampSealService;
 
+    // @Resource
+    // private AdminUserApi adminUserApi;
     @Resource
-    private AdminUserApi adminUserApi;
+    private EmployeeApi employeeApi;
 
     @Resource
     private FileApi fileApi;
@@ -112,10 +122,14 @@ public class OaStampSealController {
         }
         // 创建者姓名
         Long creator = oaStampSealRespVO.getCreator();
-        AdminUserRespDTO user = adminUserApi.getUser(creator);
-        if (user != null) {
-            oaStampSealRespVO.setCreateEmployeeName(user.getNickname());
+        EmployeeRespDTO employee = employeeApi.getEmployeeByUserId(creator);
+        if (employee != null) {
+            oaStampSealRespVO.setCreateEmployeeName(employee.getName());
         }
+        // AdminUserRespDTO user = adminUserApi.getUser(creator);
+        // if (user != null) {
+        //     oaStampSealRespVO.setCreateEmployeeName(user.getNickname());
+        // }
         // 附件列表
         List<FileDTO> fileList = fileApi.getFileDTOListByBiz(oaStampSeal.getSealUuid());
         oaStampSealRespVO.setFileList(fileList);
@@ -128,14 +142,17 @@ public class OaStampSealController {
     @GetMapping("/page")
     @Operation(summary = "获得用印印章信息分页")
     // @PreAuthorize("@ss.hasPermission('bpm:oa-stamp-seal:query')")
-    public CommonResult<PageResult<OaStampSealRespVO>> getOaStampSealPage(@Valid OaStampSealPageReqVO pageReqVO) {
+    public CommonResult<PageResult<OaStampSealRespVO>> getOaStampSealPage(@Valid @ParameterObject OaStampSealPageReqVO pageReqVO) {
         PageResult<OaStampSealDO> pageResult = oaStampSealService.getOaStampSealPage(pageReqVO);
         PageResult<OaStampSealRespVO> voPageResult = BeanUtils.toBean(pageResult, OaStampSealRespVO.class);
 
         List<OaStampSealRespVO> voPageResultList = voPageResult.getList();
         List<Long> creatorList = voPageResultList.stream().map(OaStampSealRespVO::getCreator).collect(Collectors.toList());
-        List<AdminUserRespDTO> adminUserList = adminUserApi.getUserList(creatorList);
-        Map<Long, AdminUserRespDTO> adminUserMap = adminUserList.stream().collect(Collectors.toMap(AdminUserRespDTO::getId, Function.identity()));
+        Map<Long, EmployeeRespDTO> employeeMap = employeeApi.getEmployeeListByUserIds(creatorList)
+                .stream()
+                .collect(Collectors.toMap(EmployeeRespDTO::getUserId, Function.identity()));
+        // List<AdminUserRespDTO> adminUserList = adminUserApi.getUserList(creatorList);
+        // Map<Long, AdminUserRespDTO> adminUserMap = adminUserList.stream().collect(Collectors.toMap(AdminUserRespDTO::getId, Function.identity()));
 
         for (OaStampSealRespVO oaStampSealRespVO : voPageResultList) {
             String status = oaStampSealRespVO.getStatus();
@@ -150,10 +167,14 @@ public class OaStampSealController {
                     oaStampSealRespVO.setStatusDesc("未知");
                     break;
             }
-            AdminUserRespDTO adminUserRespDTO = adminUserMap.get(oaStampSealRespVO.getCreator());
-            if (adminUserRespDTO != null) {
-                oaStampSealRespVO.setCreateEmployeeName(adminUserRespDTO.getNickname());
+            EmployeeRespDTO employeeRespDTO = employeeMap.get(oaStampSealRespVO.getCreator());
+            if (employeeRespDTO != null) {
+                oaStampSealRespVO.setCreateEmployeeName(employeeRespDTO.getName());
             }
+            // AdminUserRespDTO adminUserRespDTO = adminUserMap.get(oaStampSealRespVO.getCreator());
+            // if (adminUserRespDTO != null) {
+            //     oaStampSealRespVO.setCreateEmployeeName(adminUserRespDTO.getNickname());
+            // }
         }
         return success(voPageResult);
     }
@@ -169,15 +190,18 @@ public class OaStampSealController {
     @Operation(summary = "导出用印印章信息 Excel")
     // @PreAuthorize("@ss.hasPermission('bpm:oa-stamp-seal:export')")
     @ApiAccessLog(operateType = EXPORT)
-    public void exportOaStampSealExcel(@Valid OaStampSealPageReqVO pageReqVO,
+    public void exportOaStampSealExcel(@Valid @ParameterObject OaStampSealPageReqVO pageReqVO,
               HttpServletResponse response) throws IOException {
         pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
         List<OaStampSealDO> list = oaStampSealService.getOaStampSealPage(pageReqVO).getList();
         List<OaStampSealRespVO> stampSealRespVOList = BeanUtils.toBean(list, OaStampSealRespVO.class);
 
         List<Long> creatorList = stampSealRespVOList.stream().map(OaStampSealRespVO::getCreator).collect(Collectors.toList());
-        List<AdminUserRespDTO> adminUserList = adminUserApi.getUserList(creatorList);
-        Map<Long, AdminUserRespDTO> adminUserMap = adminUserList.stream().collect(Collectors.toMap(AdminUserRespDTO::getId, Function.identity()));
+        Map<Long, EmployeeRespDTO> employeeMap = employeeApi.getEmployeeListByUserIds(creatorList)
+                .stream()
+                .collect(Collectors.toMap(EmployeeRespDTO::getUserId, Function.identity()));
+        // List<AdminUserRespDTO> adminUserList = adminUserApi.getUserList(creatorList);
+        // Map<Long, AdminUserRespDTO> adminUserMap = adminUserList.stream().collect(Collectors.toMap(AdminUserRespDTO::getId, Function.identity()));
 
         for (OaStampSealRespVO oaStampSealRespVO : stampSealRespVOList) {
             String status = oaStampSealRespVO.getStatus();
@@ -191,8 +215,11 @@ public class OaStampSealController {
                 default:
                     oaStampSealRespVO.setStatusDesc("未知");
             }
-
-            oaStampSealRespVO.setCreateEmployeeName(adminUserMap.get(oaStampSealRespVO.getCreator()).getNickname());
+            EmployeeRespDTO employeeRespDTO = employeeMap.get(oaStampSealRespVO.getCreator());
+            if (employeeRespDTO != null) {
+                oaStampSealRespVO.setCreateEmployeeName(employeeRespDTO.getName());
+            }
+            // oaStampSealRespVO.setCreateEmployeeName(adminUserMap.get(oaStampSealRespVO.getCreator()).getNickname());
         }
         // 导出 Excel
         ExcelUtils.write(response, "用印印章信息.xls", "数据", OaStampSealRespVO.class,

+ 12 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/stamp/stampinfo/OaStampInfoServiceImpl.java

@@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.bpm.dal.dataobject.stamp.stampinfo.OaStampInfoDO;
 import cn.iocoder.yudao.module.bpm.dal.mysql.stamp.stampinfo.OaStampInfoMapper;
 import cn.iocoder.yudao.module.employee.api.EmployeeApi;
 import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
+import cn.iocoder.yudao.module.infra.api.file.FileApi;
 import cn.iocoder.yudao.module.system.api.dept.PostApi;
 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
 import org.springframework.stereotype.Service;
@@ -49,6 +50,9 @@ public class OaStampInfoServiceImpl implements OaStampInfoService {
     @Resource
     private PostApi postApi;
 
+    @Resource
+    private FileApi fileApi;
+
     @Override
     public Long createOaStampInfo(OaStampInfoSaveReqVO createReqVO) {
         // 登录人
@@ -88,6 +92,10 @@ public class OaStampInfoServiceImpl implements OaStampInfoService {
         // 状态
         oaStampInfo.setStatus("0"); // 已完成
         oaStampInfoMapper.insert(oaStampInfo);
+
+        // 附件
+        fileApi.updateFileBiz(createReqVO.getFileIdList(), oaStampInfo.getStampUuid());
+
         // 返回
         return oaStampInfo.getId();
     }
@@ -104,7 +112,7 @@ public class OaStampInfoServiceImpl implements OaStampInfoService {
     @Override
     public void updateOaStampInfo(OaStampInfoSaveReqVO updateReqVO) {
         // 校验存在
-        validateOaStampInfoExists(updateReqVO.getId());
+        OaStampInfoDO stampInfoDOBefore = validateOaStampInfoExists(updateReqVO.getId());
         // 更新准备
         OaStampInfoDO updateObj = BeanUtils.toBean(updateReqVO, OaStampInfoDO.class);
         // 用印员工
@@ -128,6 +136,9 @@ public class OaStampInfoServiceImpl implements OaStampInfoService {
         }
 
         oaStampInfoMapper.updateById(updateObj);
+
+        // 附件
+        fileApi.updateFileBiz(updateReqVO.getFileIdList(), stampInfoDOBefore.getStampUuid());
     }
 
     @Override

+ 11 - 0
yudao-module-finance/yudao-module-expense-biz/src/main/java/cn/iocoder/yudao/module/expense/controller/admin/expenseinfo/ExpenseInfoController.java

@@ -19,6 +19,8 @@ import cn.iocoder.yudao.module.expense.dal.dataobject.expensetype.ExpenseTypeDO;
 import cn.iocoder.yudao.module.expense.service.expenseinfo.ExpenseInfoService;
 import cn.iocoder.yudao.module.expense.service.expenseitem.ExpenseItemService;
 import cn.iocoder.yudao.module.expense.service.expensetype.ExpenseTypeService;
+import cn.iocoder.yudao.module.infra.api.file.FileApi;
+import cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
 import cn.iocoder.yudao.module.system.api.dept.DeptApi;
 import cn.iocoder.yudao.module.system.api.dept.PostApi;
 import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
@@ -66,6 +68,9 @@ public class ExpenseInfoController {
     @Resource
     private EmployeeApi employeeApi;
 
+    @Resource
+    private FileApi fileApi;
+
     @PostMapping("/create")
     @Operation(summary = "创建报销信息")
     // @PreAuthorize("@ss.hasPermission('expense:info:create')")
@@ -171,6 +176,12 @@ public class ExpenseInfoController {
         }
         expenseInfoRespVO.setExpenseInfoObjs(expenseInfoObjDOs);
 
+        // 附件
+        List<FileDTO> fileDTOListByBiz = fileApi.getFileDTOListByBiz(info.getExpenseUuid());
+        expenseInfoRespVO.setFileList(fileDTOListByBiz);
+        List<Long> fileIdList = fileDTOListByBiz.stream().map(FileDTO::getId).collect(Collectors.toList());
+        expenseInfoRespVO.setFileIdList(fileIdList);
+
         // 返回成功响应
         return success(expenseInfoRespVO);
     }

+ 42 - 32
yudao-module-finance/yudao-module-expense-biz/src/main/java/cn/iocoder/yudao/module/expense/controller/admin/expenseinfo/vo/ExpenseInfoRespVO.java

@@ -1,10 +1,13 @@
 package cn.iocoder.yudao.module.expense.controller.admin.expenseinfo.vo;
 
+import cn.iocoder.yudao.framework.common.util.date.DateUtils;
 import cn.iocoder.yudao.module.expense.dal.dataobject.expenseinfo.ExpenseInfoObjDO;
+import cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
@@ -15,102 +18,109 @@ import java.util.List;
 @ExcelIgnoreUnannotated
 public class ExpenseInfoRespVO {
 
-    @Schema(description = "表单主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "30165")
-    @ExcelProperty("表单主键")
+    @Schema(description = "表单主键")
+    // @ExcelProperty("表单主键")
     private Long id;
 
-    @Schema(description = "uuid", example = "22476")
-    @ExcelProperty("uuid")
+    @Schema(description = "uuid")
+    // @ExcelProperty("uuid")
     private String expenseUuid;
 
-    @Schema(description = "报销申请人id", example = "27928")
-    @ExcelProperty("报销申请人id")
+    @Schema(description = "报销申请人id")
+    // @ExcelProperty("报销申请人id")
     private Long employeeId;
 
-    @Schema(description = "报销申请人uuid", example = "29769")
-    @ExcelProperty("报销申请人uuid")
+    @Schema(description = "报销申请人uuid")
+    // @ExcelProperty("报销申请人uuid")
     private String employeeUuid;
 
-    @Schema(description = "报销申请员工姓名", example = "李四")
-    @ExcelProperty("报销申请员工姓名")
+    @Schema(description = "报销申请员工姓名")
+    @ExcelProperty("报销")
     private String employeeName;
 
     @Schema(description = "报销申请员工手机号")
-    @ExcelProperty("报销申请员工手机号")
+    @ExcelProperty("手机号")
     private String employeePhone;
 
-    @Schema(description = "用户账号id", example = "28869")
-    @ExcelProperty("用户账号id")
+    @Schema(description = "用户账号id")
+    // @ExcelProperty("用户账号id")
     private Long userId;
 
-    @Schema(description = "用户账号uuid", example = "952")
-    @ExcelProperty("用户账号uuid")
+    @Schema(description = "用户账号uuid")
+    // @ExcelProperty("用户账号uuid")
     private String userUuid;
 
     @Schema(description = "部门id")
-    @ExcelProperty("部门id")
+    // @ExcelProperty("部门id")
     private Long deptId;
 
     @Schema(description = "部门名称")
     @ExcelProperty("部门名称")
     private String deptName;
 
-    @Schema(description = "职位id", example = "15670")
-    @ExcelProperty("职位id")
+    @Schema(description = "职位id")
+    // @ExcelProperty("职位id")
     private Long postId;
 
     @Schema(description = "员工职位")
-    @ExcelProperty("员工职位")
+    @ExcelProperty("职位")
     private String position;
 
-    @Schema(description = "报销类型主键id", example = "31388")
-    @ExcelProperty("报销类型主键id")
+    @Schema(description = "报销类型主键id")
+    // @ExcelProperty("报销类型主键id")
     private Long expenseTypeId;
 
-    @Schema(description = "报销类型名称", example = "张三")
-    @ExcelProperty("报销类型名称")
+    @Schema(description = "报销类型名称")
+    @ExcelProperty("报销类型")
     private String expenseTypeName;
 
     @Schema(description = "费用所属区间")
     @ExcelProperty("费用所属区间")
     private String expenseMonth;
 
-    @Schema(description = "总预算金额,单位(元)", requiredMode = Schema.RequiredMode.REQUIRED)
+    @Schema(description = "总预算金额,单位(元)")
     @ExcelProperty("总预算金额,单位(元)")
     private BigDecimal totalMoney;
 
     @Schema(description = "备注")
-    @ExcelProperty("备注")
+    // @ExcelProperty("备注")
     private String remarks;
 
     @Schema(description = "状态(0已完成、1已作废、2已生效)")
-    @ExcelProperty("状态(0已完成、1已作废、2已生效)")
+    // @ExcelProperty("状态(0已完成、1已作废、2已生效)")
     private String status;
 
     @Schema(description = "状态描述(0已完成、1已作废、2已生效)")
-    @ExcelProperty("状态描述(0已完成、1已作废、2已生效)")
+    // @ExcelProperty("状态描述(0已完成、1已作废、2已生效)")
     private String statusDesc;
 
     @Schema(description = "数据来源,0流程添加、1手动添加")
-    @ExcelProperty("数据来源,0流程添加、1手动添加")
+    // @ExcelProperty("数据来源,0流程添加、1手动添加")
     private String infoSource;
 
     @Schema(description = "数据来源描述,0流程添加、1手动添加")
-    @ExcelProperty("数据来源描述,0流程添加、1手动添加")
+    @ExcelProperty("数据来源")
     private String infoSourceDesc;
 
     @Schema(description = "创建员工id")
-    @ExcelProperty("创建员工id")
+    // @ExcelProperty("创建员工id")
     private Long createEmployeeId;
 
     @Schema(description = "创建员工姓名")
-    @ExcelProperty("创建员工id")
+    @ExcelProperty("创建")
     private String createEmployeeName;
 
-    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @Schema(description = "创建时间")
     @ExcelProperty("创建时间")
+    @DateTimeFormat(pattern = DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime createTime;
 
+    @Schema(description = "附件列表")
+    private List<FileDTO> fileList;
+
+    @Schema(description = "附件id列表")
+    private List<Long> fileIdList;
+
     @Schema(description = "报销信息子列表")
     private List<ExpenseInfoObjDO> expenseInfoObjs;
 

+ 3 - 0
yudao-module-finance/yudao-module-expense-biz/src/main/java/cn/iocoder/yudao/module/expense/controller/admin/expenseinfo/vo/ExpenseInfoSaveReqVO.java

@@ -41,6 +41,9 @@ public class ExpenseInfoSaveReqVO {
     @Schema(description = "数据来源,0流程添加、1手动添加")
     private String infoSource;
 
+    @Schema(description = "附件主键id", example = "[1, 2]")
+    private List<Long> fileIdList;
+
     @Schema(description = "报销信息子列表", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotEmpty(message = "报销信息子列表不能为空")
     private List<ExpenseInfoObjDO> expenseInfoObjs;

+ 14 - 1
yudao-module-finance/yudao-module-expense-biz/src/main/java/cn/iocoder/yudao/module/expense/controller/admin/expenseitem/ExpenseItemController.java

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.expense.controller.admin.expenseitem;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
@@ -108,9 +109,21 @@ public class ExpenseItemController {
               HttpServletResponse response) throws IOException {
         pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
         List<ExpenseItemDO> list = itemService.getItemPage(pageReqVO).getList();
+        List<ExpenseItemRespVO> expenseItemRespVOList = BeanUtils.toBean(list, ExpenseItemRespVO.class);
+        if (CollUtil.isNotEmpty(expenseItemRespVOList)) {
+            List<Long> employeeIdList = expenseItemRespVOList.stream().map(ExpenseItemRespVO::getCreator).collect(Collectors.toList());
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            for (ExpenseItemRespVO expenseItemRespVO : expenseItemRespVOList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(expenseItemRespVO.getCreator());
+                if (Objects.nonNull(employeeRespDTO)) {
+                    expenseItemRespVO.setCreateEmployeeName(employeeRespDTO.getName());
+                }
+            }
+        }
         // 导出 Excel
         ExcelUtils.write(response, "报销费用项目信息.xls", "数据", ExpenseItemRespVO.class,
-                        BeanUtils.toBean(list, ExpenseItemRespVO.class));
+                expenseItemRespVOList);
     }
 
 }

+ 16 - 13
yudao-module-finance/yudao-module-expense-biz/src/main/java/cn/iocoder/yudao/module/expense/controller/admin/expenseitem/vo/ExpenseItemRespVO.java

@@ -1,9 +1,11 @@
 package cn.iocoder.yudao.module.expense.controller.admin.expenseitem.vo;
 
+import cn.iocoder.yudao.framework.common.util.date.DateUtils;
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.time.LocalDateTime;
 
@@ -12,40 +14,41 @@ import java.time.LocalDateTime;
 @ExcelIgnoreUnannotated
 public class ExpenseItemRespVO {
 
-    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "4075")
-    @ExcelProperty("主键")
+    @Schema(description = "主键")
+    // @ExcelProperty("主键")
     private Long id;
 
-    @Schema(description = "报销类型主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "2556")
-    @ExcelProperty("报销类型主键id")
+    @Schema(description = "报销类型主键id")
+    // @ExcelProperty("报销类型主键id")
     private Long expenseTypeId;
 
-    @Schema(description = "报销类型uuid", example = "14367")
-    @ExcelProperty("报销类型uuid")
+    @Schema(description = "报销类型uuid")
+    // @ExcelProperty("报销类型uuid")
     private String expenseTypeUuid;
 
-    @Schema(description = "费用项目uuid", example = "10133")
-    @ExcelProperty("费用项目uuid")
+    @Schema(description = "费用项目uuid")
+    // @ExcelProperty("费用项目uuid")
     private String expenseItemUuid;
 
-    @Schema(description = "费用项目", example = "芋艿")
+    @Schema(description = "费用项目")
     @ExcelProperty("费用项目")
     private String name;
 
     @Schema(description = "备注")
-    @ExcelProperty("备注")
+    // @ExcelProperty("备注")
     private String remarks;
 
     @Schema(description = "创建者")
-    @ExcelProperty("创建者id")
+    // @ExcelProperty("创建者id")
     private Long creator;
 
     @Schema(description = "创建员工姓名")
-    @ExcelProperty("创建员工id")
+    @ExcelProperty("创建")
     private String createEmployeeName;
 
-    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @Schema(description = "创建时间")
     @ExcelProperty("创建时间")
+    @DateTimeFormat(pattern = DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime createTime;
 
 }

+ 14 - 1
yudao-module-finance/yudao-module-expense-biz/src/main/java/cn/iocoder/yudao/module/expense/controller/admin/expensetype/ExpenseTypeController.java

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.expense.controller.admin.expensetype;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
@@ -116,9 +117,21 @@ public class ExpenseTypeController {
               HttpServletResponse response) throws IOException {
         pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
         List<ExpenseTypeDO> list = typeService.getTypePage(pageReqVO).getList();
+        List<ExpenseTypeRespVO> expenseTypeRespVOList = BeanUtils.toBean(list, ExpenseTypeRespVO.class);
+        if (CollUtil.isNotEmpty(expenseTypeRespVOList)) {
+            List<Long> employeeIdList = expenseTypeRespVOList.stream().map(ExpenseTypeRespVO::getCreator).collect(Collectors.toList());
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            for (ExpenseTypeRespVO expenseTypeRespVO : expenseTypeRespVOList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(expenseTypeRespVO.getCreator());
+                if (Objects.nonNull(employeeRespDTO)) {
+                    expenseTypeRespVO.setCreateEmployeeName(employeeRespDTO.getName());
+                }
+            }
+        }
         // 导出 Excel
         ExcelUtils.write(response, "报销类型信息.xls", "数据", ExpenseTypeRespVO.class,
-                        BeanUtils.toBean(list, ExpenseTypeRespVO.class));
+                        expenseTypeRespVOList);
     }
 
     // ==================== 子表(报销费用项目信息) ====================

+ 8 - 5
yudao-module-finance/yudao-module-expense-biz/src/main/java/cn/iocoder/yudao/module/expense/controller/admin/expensetype/vo/ExpenseTypeRespVO.java

@@ -1,9 +1,11 @@
 package cn.iocoder.yudao.module.expense.controller.admin.expensetype.vo;
 
+import cn.iocoder.yudao.framework.common.util.date.DateUtils;
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.time.LocalDateTime;
 
@@ -13,11 +15,11 @@ import java.time.LocalDateTime;
 public class ExpenseTypeRespVO {
 
     @Schema(description = "主键")
-    @ExcelProperty("主键")
+    // @ExcelProperty("主键")
     private Long id;
 
     @Schema(description = "uuid")
-    @ExcelProperty("uuid")
+    // @ExcelProperty("uuid")
     private String expenseTypeUuid;
 
     @Schema(description = "报销类型")
@@ -25,19 +27,20 @@ public class ExpenseTypeRespVO {
     private String name;
 
     @Schema(description = "备注")
-    @ExcelProperty("备注")
+    // @ExcelProperty("备注")
     private String remarks;
 
     @Schema(description = "创建者")
-    @ExcelProperty("创建者id")
+    // @ExcelProperty("创建者id")
     private Long creator;
 
     @Schema(description = "创建员工姓名")
-    @ExcelProperty("创建员工id")
+    @ExcelProperty("创建")
     private String createEmployeeName;
 
     @Schema(description = "创建时间")
     @ExcelProperty("创建时间")
+    @DateTimeFormat(pattern = DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime createTime;
 
 }

+ 11 - 0
yudao-module-finance/yudao-module-expense-biz/src/main/java/cn/iocoder/yudao/module/expense/service/expenseinfo/ExpenseInfoServiceImpl.java

@@ -19,6 +19,7 @@ import cn.iocoder.yudao.module.expense.dal.dataobject.expenseinfo.ExpenseInfoDO;
 import cn.iocoder.yudao.module.expense.dal.dataobject.expenseinfo.ExpenseInfoObjDO;
 import cn.iocoder.yudao.module.expense.dal.mysql.expenseinfo.ExpenseInfoMapper;
 import cn.iocoder.yudao.module.expense.dal.mysql.expenseinfo.ExpenseInfoObjMapper;
+import cn.iocoder.yudao.module.infra.api.file.FileApi;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
@@ -48,6 +49,9 @@ public class ExpenseInfoServiceImpl implements ExpenseInfoService {
     @Resource
     private EmployeeApi employeeApi;
 
+    @Resource
+    private FileApi fileApi;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Long createInfo(ExpenseInfoSaveReqVO createReqVO) {
@@ -119,6 +123,9 @@ public class ExpenseInfoServiceImpl implements ExpenseInfoService {
         // 插入费用明细数据
         createExpenseInfoObjList(info.getId(), createReqVO.getExpenseInfoObjs());
 
+        // 附件
+        fileApi.updateFileBiz(createReqVO.getFileIdList(), info.getExpenseUuid());
+
         // 返回费用主表ID
         return info.getId();
     }
@@ -191,6 +198,10 @@ public class ExpenseInfoServiceImpl implements ExpenseInfoService {
 
         // 更新子表
         updateExpenseInfoObjList(updateReqVO.getId(), updateReqVO.getExpenseInfoObjs());
+
+        // 附件
+        fileApi.updateFileBiz(updateReqVO.getFileIdList(), expenseInfoBefore.getExpenseUuid());
+
     }
 
     @Override

+ 2 - 2
yudao-module-finance/yudao-module-expense-biz/src/main/resources/mapper/expenseinfo/ExpenseInfoMapper.xml

@@ -26,7 +26,7 @@
             AND fei.dept_id = #{page.deptId}
         </if>
         <if test="page.postId != null">
-            AND fei.id = #{page.postId}
+            AND fei.post_id = #{page.postId}
         </if>
         <if test="page.employeePhone != null and page.employeePhone != ''">
             AND ei.phone like concat('%',#{page.employeePhone},'%')
@@ -82,7 +82,7 @@
             AND fei.dept_id = #{page.deptId}
         </if>
         <if test="page.postId != null">
-            AND fei.id = #{page.postId}
+            AND fei.post_id = #{page.postId}
         </if>
         <if test="page.employeePhone != null and page.employeePhone != ''">
             AND ei.phone like concat('%',#{page.employeePhone},'%')