mitao
2 天以前 853c8ba11072eae475273864e61733ae7294f004
Merge remote-tracking branch 'origin/master'
38个文件已修改
4个文件已添加
545 ■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetStatisticsController.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowAuditController.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalTodoController.java 117 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/dto/AddBusinessTripDTO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDTO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDestroyDTO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/dto/AddOutDTO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetTypeMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/AssetMain.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationPurchase.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/ApprovalTodoListQuery.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/AssetStatisticsListDetailQuery.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/AssetStatisticsListQuery.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/AssetTypeService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetMainServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetTypeServiceImpl.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationStorageServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalTodoServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaNotificationServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/AdvertisementDetailVO.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/ApprovalTodoVO.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/AssetStatisticsVO.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/BackDetailVO.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/BorrowDetailVO.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/BusinessTripDetailVO.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/ChangeDetailVO.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/ContactDetailVO.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/ContractDetailVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/DisposeDetailVO.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/GrabDetailVO.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDestroyDetailVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDetailVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/MoneyDetailVO.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/OutDetailVO.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/PaymentDetailVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/PurchaseDetailVO.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/ReimbursementDetailVO.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageDetailVO.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageListVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/AssetTypeMapper.xml 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/OaApprovalTodoMapper.xml 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetStatisticsController.java
New file
@@ -0,0 +1,58 @@
package com.ruoyi.web.controller.api;
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.dto.asset.AssetTypeDTO;
import com.ruoyi.system.query.AssetStatisticsListQuery;
import com.ruoyi.system.query.NotificationListQuery;
import com.ruoyi.system.service.AssetTypeService;
import com.ruoyi.system.vo.AssetStatisticsVO;
import com.ruoyi.system.vo.asset.AssetTypeTreeVO;
import com.ruoyi.system.vo.system.NotificationVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
/**
 * <p>
 * 资产类型表 前端控制器
 * </p>
 *
 * @author WuGuanFengYue
 * @since 2025-09-15
 */
@Api(tags = {"资产-资产汇总"})
@Validated
@RestController
@RequestMapping("/asset-statistics")
@RequiredArgsConstructor
public class AssetStatisticsController {
    private final AssetTypeService assetTypeService;
    @ApiOperation("获取资产类型树形数据")
    @GetMapping("/tree")
    public R<List<AssetTypeTreeVO>> getAssetTypeTree() {
        List<AssetTypeTreeVO> treeData = assetTypeService.getAssetTypeTree();
        return R.ok(treeData);
    }
    @ApiOperation("资产汇总分页列表")
    @PostMapping("/pageList")
    public R<PageInfo<AssetStatisticsVO>> pageList(@RequestBody AssetStatisticsListQuery query) {
        return R.ok(assetTypeService.pageList(query));
    }
    @ApiOperation("资产明细")
    @PostMapping("/pageListDetail")
    public R<PageInfo<AssetStatisticsVO>> pageListDetail(@RequestBody AssetStatisticsListQuery query) {
        return R.ok(assetTypeService.pageList(query));
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java
@@ -48,12 +48,8 @@
import com.ruoyi.system.utils.UUIDUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PathVariable;
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.RestController;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.math.BigDecimal;
@@ -108,6 +104,7 @@
    @Resource
    private OaApprovalTodoService oaApprovalTodoService;
    @Log(title = "审批-发起请假", businessType = BusinessType.INSERT)
    @Transactional
    @ApiOperation(value = "发起请假")
    @PostMapping(value = "/addLeave")
    public R addLeave(@RequestBody AddLeaveDTO dto) {
@@ -176,6 +173,7 @@
    @Log(title = "审批-发起外出申请", businessType = BusinessType.INSERT)
    @ApiOperation(value = "发起外出申请")
    @PostMapping(value = "/addOut")
    @Transactional
    public R addOut(@RequestBody AddOutDTO dto) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String code = "Out-"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
@@ -240,6 +238,7 @@
    }
    @Log(title = "审批-发起出差申请", businessType = BusinessType.INSERT)
    @ApiOperation(value = "发起出差申请")
    @Transactional
    @PostMapping(value = "/addBusinessTrip")
    public R addBusinessTrip(@RequestBody AddBusinessTripDTO dto) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
@@ -304,6 +303,7 @@
    }
    @Log(title = "审批-发起销假申请", businessType = BusinessType.INSERT)
    @ApiOperation(value = "发起销假申请")
    @Transactional
    @PostMapping(value = "/addLeaveDestroy")
    public R addLeaveDestroy(@RequestBody AddLeaveDestroyDTO dto) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
@@ -344,8 +344,8 @@
        // 根据请假时间 查询请假申请记录
        OaApprovalApplicationAttendance approvalApplicationAttendance = approvalApplicationAttendanceService.lambdaQuery()
                .in(OaApprovalApplicationAttendance::getApprovalApplicationId,approvalIds)
                .ge(OaApprovalApplicationAttendance::getStartTime, dto.getStartTime())
                .le(OaApprovalApplicationAttendance::getEndTime, dto.getEndTime())
                .le(OaApprovalApplicationAttendance::getStartTime, dto.getStartTime())
                .ge(OaApprovalApplicationAttendance::getEndTime, dto.getEndTime())
                .eq(OaApprovalApplicationAttendance::getIsLeave, 1)
                .orderByDesc(OaApprovalApplicationAttendance::getId)
                .last("limit 1").one();
@@ -365,9 +365,24 @@
                Integer.valueOf(sysUser.getDeptId()));
        return R.ok();
    }
    @ApiOperation(value = "查询当前用户审批通过且未销假的请假单")
    @GetMapping(value = "/listLeaveApplications")
    public R<List<OaApprovalApplicationAttendance>> listLeaveApplications() {
        List<Integer> applicationsIds = approvalApplicationsService.lambdaQuery()
                .eq(OaApprovalApplications::getApprovalId, ApprovalTypeEnum.LEAVE.getCode())
                .eq(OaApprovalApplications::getApplicantUserId, tokenService.getLoginUser().getUserId())
                .eq(OaApprovalApplications::getApprovalStatus, 2)
                .list().stream().map(OaApprovalApplications::getId).collect(Collectors.toList());
        if (applicationsIds.isEmpty()){
            return R.ok(new ArrayList<>());
        }
        List<OaApprovalApplicationAttendance> list = approvalApplicationAttendanceService.lambdaQuery()
                .in(OaApprovalApplicationAttendance::getApprovalApplicationId, applicationsIds).list();
        return R.ok(list);
    }
    @Log(title = "审批-发起报销申请", businessType = BusinessType.INSERT)
    @ApiOperation(value = "发起报销申请")
    @Transactional
    @PostMapping(value = "/addReimbursement")
    public R addReimbursement(@RequestBody AddReimbursementDTO dto) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
@@ -411,6 +426,7 @@
    }
    @Log(title = "审批-发起款项申请", businessType = BusinessType.INSERT)
    @ApiOperation(value = "发起款项申请")
    @Transactional
    @PostMapping(value = "/addMoney")
    public R addMoney(@RequestBody AddMoneyDTO dto) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
@@ -446,6 +462,7 @@
    @Log(title = "审批-发起合同文件申请", businessType = BusinessType.INSERT)
    @ApiOperation(value = "发起合同文件申请")
    @PostMapping(value = "/addContract")
    @Transactional
    public R addContract(@RequestBody AddContractDTO dto) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String code = "Contract-"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
@@ -482,6 +499,7 @@
    }
    @Log(title = "审批-发起进度款支付申请", businessType = BusinessType.INSERT)
    @ApiOperation(value = "发起进度款支付申请")
    @Transactional
    @PostMapping(value = "/addPayment")
    public R addPayment(@RequestBody AddPaymentDTO dto) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
@@ -520,6 +538,7 @@
    }
    @Log(title = "审批-发起内部联系单申请", businessType = BusinessType.INSERT)
    @ApiOperation(value = "发起内部联系单申请")
    @Transactional
    @PostMapping(value = "/addContact")
    public R addContact(@RequestBody AddContactDTO dto) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
@@ -555,6 +574,7 @@
    }
    @Log(title = "审批-发起广告制作申请", businessType = BusinessType.INSERT)
    @ApiOperation(value = "发起广告制作申请")
    @Transactional
    @PostMapping(value = "/addAdvertisement")
    public R addAdvertisement(@RequestBody AddAdvertisementDTO dto) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowAuditController.java
@@ -84,6 +84,8 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@@ -108,7 +110,8 @@
 */
@RestController
@RequestMapping("/oa-approval-flow-audit")
@Api(tags = "我审批的/我发起的/通用审批接口")
@Api(tags = "我审批的-我发起的-通用审批接口")
@Slf4j
public class OaApprovalFlowAuditController {
    @Resource
    private OaApprovalTodoService approvalTodoService;
@@ -243,7 +246,7 @@
            }
            SysUser sysUser = userMap.get(approvalApplication.getApplicantUserId().longValue());
            if (sysUser!=null){
                approvalTodoVO.setApplyUserName(sysUser.getUserName());
                approvalTodoVO.setApplyUserName(sysUser.getNickName());
                TDept tDept = deptMap.get(Integer.parseInt(sysUser.getDeptId()));
                if (tDept!=null){
                    approvalTodoVO.setApplyDeptName(tDept.getDeptName());
@@ -421,7 +424,7 @@
            }
            SysUser sysUser = userMap.get(approvalApplication.getApplicantUserId().longValue());
            if (sysUser!=null){
                approvalTodoVO.setApplyUserName(sysUser.getUserName());
                approvalTodoVO.setApplyUserName(sysUser.getNickName());
                TDept tDept = deptMap.get(Integer.parseInt(sysUser.getDeptId()));
                if (tDept!=null){
                    approvalTodoVO.setApplyDeptName(tDept.getDeptName());
@@ -532,6 +535,7 @@
    @Log(title = "审批-通用审批接口", businessType = BusinessType.INSERT)
    @ApiOperation(value = "通用审批接口")
    @PostMapping(value = "/audit")
    @Transactional
    public R addLeave(@RequestBody AuditDTO dto) {
        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(dto.getApprovalApplicationId());
@@ -570,6 +574,7 @@
        approvalFlowAudit.setReason(dto.getReason());
        approvalFlowAuditService.save(approvalFlowAudit);
        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery().eq(OaApprovalFlowNode::getApprovalId, approval.getId())
                .eq(OaApprovalFlowNode::getStatus,1)
                .orderByAsc(OaApprovalFlowNode::getSortOrder).list();
        if (dto.getApprovalStatus() == 1) {
            // 判断当前是否处于最后一个节点
@@ -607,14 +612,18 @@
                    assetMainService.saveAssetByApprovalApplicationId(approvalApplications.getId());
                }
            } else {
                log.info("不为最后一个审批节点");
                // 生成下一个节点的待办事项
                for (int i = 0; i < approvalFlowNodes.size(); i++) {
                    if (approvalApplications.getCurrentFlowNodeId()
                            .equals(approvalFlowNodes.get(i).getId())) {
                    if (approvalApplications.getCurrentFlowNodeId().equals(approvalFlowNodes.get(i).getId())) {
                        log.info("匹配到审批流程,进入下一节点,当前节点id:{}", approvalFlowNodes.get(i));
                        // 申请单审批流程修改为下一节点
                        approvalApplications.setCurrentFlowNodeId(approvalFlowNodes.get(i + 1).getId());
                        OaApprovalFlowNode oaApprovalFlowNode1 = approvalFlowNodeService.getById(approvalFlowNodes.get(i + 1).getId());
                        approvalApplicationsService.updateById(approvalApplications);
                        OaApprovalFlowNode oaApprovalFlowNode1 = approvalFlowNodes.get(i + 1);
                        approvalTodoService.createApprovalTodos(approvalApplications.getId(),
                                approvalApplications.getApplicationCode(), oaApprovalFlowNode1, approvalApplications.getDeptId());
                        break;
                    }
                }
            }
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalTodoController.java
@@ -73,6 +73,7 @@
    private OaApprovalApplicationReimbursementItemService approvalApplicationReimbursementItemService;
    @Resource
    private OaApprovalFlowNodeService approvalFlowNodeService;
    @Resource
    private OaApprovalApplicationAssetService approvalApplicationAssetService;
    @Resource
@@ -93,7 +94,9 @@
    private OaApprovalFlowService  approvalFlowService;
    public static void main(String[] args) {
    }
    @ApiOperation("待办事项列表")
    @PostMapping("/pageList")
    public R<PageInfo<ApprovalTodoVO>> pageList(@RequestBody ApprovalTodoListQuery query) {
@@ -168,7 +171,7 @@
            }
            SysUser sysUser = userMap.get(approvalApplication.getApplicantUserId().longValue());
            if (sysUser!=null){
                approvalTodoVO.setApplyUserName(sysUser.getUserName());
                approvalTodoVO.setApplyUserName(sysUser.getNickName());
                TDept tDept = deptMap.get(Integer.parseInt(sysUser.getDeptId()));
                if (tDept!=null){
                    approvalTodoVO.setApplyDeptName(tDept.getDeptName());
@@ -182,17 +185,25 @@
                case 5:
                    OaApprovalApplicationPurchase oaApprovalApplicationPurchase = approvalApplicationPurchaseMap.get(approvalApplication.getId());
                    if (oaApprovalApplicationPurchase!=null){
                        approvalTodoVO.setTitle(oaApprovalApplicationPurchase.getTitle());
                        approvalTodoVO.setAmount(oaApprovalApplicationPurchase.getTotalAmount());
                    }
                    break;
                case 6:
                    OaApprovalApplicationStorage oaApprovalApplicationStorage = applicationStorageMap.get(approvalApplication.getId());
                    if (oaApprovalApplicationStorage!=null){
                        approvalTodoVO.setTitle(oaApprovalApplicationStorage.getTitle());
                        approvalTodoVO.setStorageType(oaApprovalApplicationStorage.getStorageType());
                    }
                    break;
                case 7:
                    StringBuilder temp = new StringBuilder();
                    OaApprovalApplicationAsset oaApprovalApplicationAsset = approvalApplicationAssetMap.get(approvalApplication.getId());
                    if (oaApprovalApplicationAsset!=null){
                        approvalTodoVO.setTitle(oaApprovalApplicationAsset.getTitle());
                    }
                    List<OaApprovalApplicationAssetItem> oaApprovalApplicationAssetItems = approvalApplicationAssetItemMap.get(approvalApplication.getId());
                    if (oaApprovalApplicationAssetItems!=null){
                        for (OaApprovalApplicationAssetItem oaApprovalApplicationAssetItem : oaApprovalApplicationAssetItems) {
@@ -212,24 +223,32 @@
                case 8:
                    OaApprovalApplicationAsset oaApprovalApplicationAssetOut = approvalApplicationAssetMap.get(approvalApplication.getId());
                    if (oaApprovalApplicationAssetOut!=null){
                        approvalTodoVO.setTitle(oaApprovalApplicationAssetOut.getTitle());
                        approvalTodoVO.setOperateTime(oaApprovalApplicationAssetOut.getOperateTime());
                    }
                    break;
                case 9:
                    OaApprovalApplicationAsset oaApprovalApplicationAssetBack = approvalApplicationAssetMap.get(approvalApplication.getId());
                    if (oaApprovalApplicationAssetBack!=null){
                        approvalTodoVO.setTitle(oaApprovalApplicationAssetBack.getTitle());
                        approvalTodoVO.setOperateTime(oaApprovalApplicationAssetBack.getExpectReturnDate());
                    }
                    break;
                case 10:
                    OaApprovalApplicationDispose oaApprovalApplicationDispose = approvalApplicationDisposeMap.get(approvalApplication.getId());
                    if (oaApprovalApplicationDispose!=null){
                        approvalTodoVO.setTitle(oaApprovalApplicationDispose.getTitle());
                        approvalTodoVO.setDisposeType(oaApprovalApplicationDispose.getDisposeType());
                    }
                    break;
                case 11:
                    OaApprovalApplicationChange oaApprovalApplicationChange = approvalApplicationChangeMap.get(approvalApplication.getId());
                    if (oaApprovalApplicationChange!=null){
                        approvalTodoVO.setTitle(oaApprovalApplicationChange.getTitle());
                        Integer ownershipDeptId = oaApprovalApplicationChange.getOwnershipDeptId();
                        TDept tDept = deptMap.get(ownershipDeptId);
                        if (tDept!=null){
@@ -240,12 +259,14 @@
                case 12:
                    OaApprovalApplicationReimbursement oaApprovalApplicationReimbursement = approvalApplicationReimbursementMap.get(approvalApplication.getId());
                    if (oaApprovalApplicationReimbursement!=null){
                        approvalTodoVO.setAmount(oaApprovalApplicationReimbursement.getReimbursementAmount());
                    }
                    break;
                case 13:
                    OaApprovalApplicationMoney oaApprovalApplicationMoney = oaApprovalApplicationMoneyMap.get(approvalApplication.getId());
                    if (oaApprovalApplicationMoney!=null){
                        approvalTodoVO.setAmount(oaApprovalApplicationMoney.getApplyAmount());
                        approvalTodoVO.setDescription(oaApprovalApplicationMoney.getDescription());
@@ -254,6 +275,7 @@
                case 15:
                    OaApprovalApplicationPayment oaApprovalApplicationPayment = approvalApplicationPaymentMap.get(approvalApplication.getId());
                    if (oaApprovalApplicationPayment!=null){
                        approvalTodoVO.setAmount(oaApprovalApplicationPayment.getApplyAmount());
                        approvalTodoVO.setDescription(approvalApplication.getApplicationReason());
@@ -262,6 +284,7 @@
                case 17:
                    OaApprovalApplicationAdvertisement oaApprovalApplicationAdvertisement = approvalApplicationAdvertisementMap.get(approvalApplication.getId());
                    if (oaApprovalApplicationAdvertisement!=null){
                        approvalTodoVO.setTitle(oaApprovalApplicationAdvertisement.getTitle());
                        approvalTodoVO.setContent(oaApprovalApplicationAdvertisement.getContent());
                        approvalTodoVO.setAmount(oaApprovalApplicationAdvertisement.getTotalAmount());
                    }
@@ -287,13 +310,15 @@
                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                .list();
        ContractDetailVO res = new ContractDetailVO();
        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.CONTRACT.getCode())
                .orderByAsc(OaApprovalFlowNode::getSortOrder)
                .eq(OaApprovalFlowNode::getStatus, 1).list();
        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
        if (sysUser!=null){
            res.setUserName(sysUser.getUserName());
            res.setUserName(sysUser.getNickName());
            TDept dept = deptService.getById(sysUser.getDeptId());
            if (dept!=null){
                res.setDeptName(dept.getDeptName());
@@ -319,13 +344,15 @@
                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                .list();
        PaymentDetailVO res = new PaymentDetailVO();
        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.PAYMENT.getCode())
                .orderByAsc(OaApprovalFlowNode::getSortOrder)
                .eq(OaApprovalFlowNode::getStatus, 1).list();
        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
        if (sysUser!=null){
            res.setUserName(sysUser.getUserName());
            res.setUserName(sysUser.getNickName());
            TDept dept = deptService.getById(sysUser.getDeptId());
            if (dept!=null){
                res.setDeptName(dept.getDeptName());
@@ -354,14 +381,15 @@
                .list();
        LeaveDetailVO res = new LeaveDetailVO();
        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.LEAVE.getCode())
                .orderByAsc(OaApprovalFlowNode::getSortOrder)
                .eq(OaApprovalFlowNode::getStatus, 1).list();
        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
        if (sysUser!=null){
            res.setUserName(sysUser.getUserName());
            res.setUserName(sysUser.getNickName());
            TDept dept = deptService.getById(sysUser.getDeptId());
            if (dept!=null){
                res.setDeptName(dept.getDeptName());
@@ -385,19 +413,24 @@
        OaApprovalApplicationAttendance approvalApplicationAttendance = approvalApplicationAttendanceService.lambdaQuery()
                .eq(OaApprovalApplicationAttendance::getApprovalApplicationId, approvalApplications.getId())
                .last("limit 1").one();
        OaApprovalApplicationAttendance leaveApplication = approvalApplicationAttendanceService.getById(approvalApplicationAttendance.getLeaveApprovalApplicationId());
        OaApprovalApplications leaveApplication = approvalApplicationsService.getById(approvalApplicationAttendance.getLeaveApprovalApplicationId());
        OaApprovalApplicationAttendance leaveApplicationAttendance = approvalApplicationAttendanceService.lambdaQuery()
                .eq(OaApprovalApplicationAttendance::getApprovalApplicationId, leaveApplication.getId())
                .last("limit 1").one();
        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                .list();
        LeaveDestroyDetailVO res = new LeaveDestroyDetailVO();
        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.LEAVE_DESTROY.getCode())
                .orderByAsc(OaApprovalFlowNode::getSortOrder)
                .eq(OaApprovalFlowNode::getStatus, 1).list();
        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
        if (sysUser!=null){
            res.setUserName(sysUser.getUserName());
            res.setUserName(sysUser.getNickName());
            TDept dept = deptService.getById(sysUser.getDeptId());
            if (dept!=null){
                res.setDeptName(dept.getDeptName());
@@ -410,9 +443,9 @@
        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
        res.setStartTime(approvalApplicationAttendance.getStartTime());
        res.setEndTime(approvalApplicationAttendance.getEndTime());
        res.setStartTimeLeave(leaveApplication.getStartTime());
        res.setEndTimeLeave(leaveApplication.getEndTime());
        res.setDurationLeave(leaveApplication.getDuration());
        res.setStartTimeLeave(leaveApplicationAttendance.getStartTime());
        res.setEndTimeLeave(leaveApplicationAttendance.getEndTime());
        res.setDurationLeave(leaveApplicationAttendance.getDuration());
        res.setDuration(approvalApplicationAttendance.getDuration());
        return R.ok(res);
    }
@@ -428,13 +461,15 @@
                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                .list();
        OutDetailVO res = new OutDetailVO();
        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.OUT.getCode())
                .orderByAsc(OaApprovalFlowNode::getSortOrder)
                .eq(OaApprovalFlowNode::getStatus, 1).list();
        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
        if (sysUser!=null){
            res.setUserName(sysUser.getUserName());
            res.setUserName(sysUser.getNickName());
            TDept dept = deptService.getById(sysUser.getDeptId());
            if (dept!=null){
                res.setDeptName(dept.getDeptName());
@@ -448,6 +483,7 @@
        res.setStartTime(approvalApplicationAttendance.getStartTime());
        res.setEndTime(approvalApplicationAttendance.getEndTime());
        res.setDuration(approvalApplicationAttendance.getDuration());
        res.setAddress(approvalApplicationAttendance.getAddress());
        return R.ok(res);
    }
    @ApiOperation(value = "出差审批详情")
@@ -463,14 +499,15 @@
                .list();
        BusinessTripDetailVO res = new BusinessTripDetailVO();
        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.BUSINESS_TRIP.getCode())
                .orderByAsc(OaApprovalFlowNode::getSortOrder)
                .eq(OaApprovalFlowNode::getStatus, 1).list();
        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
        if (sysUser!=null){
            res.setUserName(sysUser.getUserName());
            res.setUserName(sysUser.getNickName());
            TDept dept = deptService.getById(sysUser.getDeptId());
            if (dept!=null){
                res.setDeptName(dept.getDeptName());
@@ -508,13 +545,15 @@
                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                .list();
        PurchaseDetailVO res = new PurchaseDetailVO();
        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.PURCHASE.getCode())
                .orderByAsc(OaApprovalFlowNode::getSortOrder)
                .eq(OaApprovalFlowNode::getStatus, 1).list();
        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
        if (sysUser!=null){
            res.setUserName(sysUser.getUserName());
            res.setUserName(sysUser.getNickName());
            TDept dept = deptService.getById(sysUser.getDeptId());
            if (dept!=null){
                res.setDeptName(dept.getDeptName());
@@ -554,7 +593,8 @@
                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                .list();
        GrabDetailVO res = new GrabDetailVO();
        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.GRAB.getCode())
@@ -562,7 +602,7 @@
                .eq(OaApprovalFlowNode::getStatus, 1).list();
        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
        if (sysUser!=null){
            res.setUserName(sysUser.getUserName());
            res.setUserName(sysUser.getNickName());
            TDept dept = deptService.getById(sysUser.getDeptId());
            if (dept!=null){
                res.setDeptName(dept.getDeptName());
@@ -601,6 +641,8 @@
                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                .list();
        StorageDetailVO res = new StorageDetailVO();
        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.IN_STOCK.getCode())
                .orderByAsc(OaApprovalFlowNode::getSortOrder)
@@ -608,6 +650,7 @@
        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
        res.setAssetTypeName(assetTypeService.getById(approvalApplicationStorage.getAssetTypeId()).getTypeName());
        res.setApprovalFlowNodeListVOS(flowNodeList);
        res.setApprovalApplicationId(approvalApplications.getId());
        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
@@ -637,14 +680,15 @@
                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                .list();
        BorrowDetailVO res = new BorrowDetailVO();
        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.BORROW.getCode())
                .orderByAsc(OaApprovalFlowNode::getSortOrder)
                .eq(OaApprovalFlowNode::getStatus, 1).list();
        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
        if (sysUser!=null){
            res.setUserName(sysUser.getUserName());
            res.setUserName(sysUser.getNickName());
            TDept dept = deptService.getById(sysUser.getDeptId());
            if (dept!=null){
                res.setDeptName(dept.getDeptName());
@@ -680,13 +724,15 @@
                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                .list();
        BackDetailVO res = new BackDetailVO();
        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.RETURN.getCode())
                .orderByAsc(OaApprovalFlowNode::getSortOrder)
                .eq(OaApprovalFlowNode::getStatus, 1).list();
        SysUser sysUser = sysUserService.selectUserById(approvalApplicationsBack.getApplicantUserId().longValue());
        if (sysUser!=null){
            res.setUserName(sysUser.getUserName());
            res.setUserName(sysUser.getNickName());
            TDept dept = deptService.getById(sysUser.getDeptId());
            if (dept!=null){
                res.setDeptName(dept.getDeptName());
@@ -724,14 +770,15 @@
                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                .list();
        DisposeDetailVO res = new DisposeDetailVO();
        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.ASSET_DISPOSE.getCode())
                .orderByAsc(OaApprovalFlowNode::getSortOrder)
                .eq(OaApprovalFlowNode::getStatus, 1).list();
        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
        if (sysUser!=null){
            res.setUserName(sysUser.getUserName());
            res.setUserName(sysUser.getNickName());
            TDept dept = deptService.getById(sysUser.getDeptId());
            if (dept!=null){
                res.setDeptName(dept.getDeptName());
@@ -774,13 +821,15 @@
                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                .list();
        ChangeDetailVO res = new ChangeDetailVO();
        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.ASSET_CHANGE.getCode())
                .orderByAsc(OaApprovalFlowNode::getSortOrder)
                .eq(OaApprovalFlowNode::getStatus, 1).list();
        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
        if (sysUser!=null){
            res.setUserName(sysUser.getUserName());
            res.setUserName(sysUser.getNickName());
            TDept dept = deptService.getById(sysUser.getDeptId());
            if (dept!=null){
                res.setDeptName(dept.getDeptName());
@@ -821,7 +870,8 @@
                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                .list();
        ReimbursementDetailVO res = new ReimbursementDetailVO();
        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.REIMBURSEMENT.getCode())
@@ -829,7 +879,7 @@
                .eq(OaApprovalFlowNode::getStatus, 1).list();
        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
        if (sysUser!=null){
            res.setUserName(sysUser.getUserName());
            res.setUserName(sysUser.getNickName());
            TDept dept = deptService.getById(sysUser.getDeptId());
            if (dept!=null){
                res.setDeptName(dept.getDeptName());
@@ -857,13 +907,15 @@
                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                .list();
        MoneyDetailVO res = new MoneyDetailVO();
        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.MONEY.getCode())
                .orderByAsc(OaApprovalFlowNode::getSortOrder)
                .eq(OaApprovalFlowNode::getStatus, 1).list();
        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
        if (sysUser!=null){
            res.setUserName(sysUser.getUserName());
            res.setUserName(sysUser.getNickName());
            TDept dept = deptService.getById(sysUser.getDeptId());
            if (dept!=null){
                res.setDeptName(dept.getDeptName());
@@ -896,15 +948,15 @@
                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                .list();
        ContactDetailVO res = new ContactDetailVO();
        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.CONTACT.getCode())
                .orderByAsc(OaApprovalFlowNode::getSortOrder)
                .eq(OaApprovalFlowNode::getStatus, 1).list();
        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
        if (sysUser!=null){
            res.setUserName(sysUser.getUserName());
            res.setUserName(sysUser.getNickName());
            TDept dept = deptService.getById(sysUser.getDeptId());
            if (dept!=null){
                res.setDeptName(dept.getDeptName());
@@ -932,7 +984,8 @@
                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                .list();
        AdvertisementDetailVO res = new AdvertisementDetailVO();
        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.ADVERTISEMENT.getCode())
@@ -940,7 +993,7 @@
                .eq(OaApprovalFlowNode::getStatus, 1).list();
        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
        if (sysUser!=null){
            res.setUserName(sysUser.getUserName());
            res.setUserName(sysUser.getNickName());
            TDept dept = deptService.getById(sysUser.getDeptId());
            if (dept!=null){
                res.setDeptName(dept.getDeptName());
@@ -967,7 +1020,7 @@
        ApprovalFlowNodeListVO approvalFlowNodeListVO = new ApprovalFlowNodeListVO();
        approvalFlowNodeListVO.setFlowName("发起");
        if (sysUser!=null){
            approvalFlowNodeListVO.setUserName(sysUser.getUserName());
            approvalFlowNodeListVO.setUserName(sysUser.getNickName());
        }
        approvalFlowNodeListVOS.add(approvalFlowNodeListVO);
        for (OaApprovalFlowNode approvalFlowNode : approvalFlowNodes) {
ruoyi-system/src/main/java/com/ruoyi/system/dto/AddBusinessTripDTO.java
@@ -1,5 +1,6 @@
package com.ruoyi.system.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -12,9 +13,13 @@
public class AddBusinessTripDTO implements Serializable {
    @ApiModelProperty(value = "开始请假/外出/出差/销假时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime startTime;
    @ApiModelProperty(value = "结束请假/外出/出差/销假时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime endTime;
    @ApiModelProperty(value = "请假/外出/出差/销假时长(天)")
ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDTO.java
@@ -1,6 +1,7 @@
package com.ruoyi.system.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -13,9 +14,11 @@
public class AddLeaveDTO implements Serializable {
    @ApiModelProperty(value = "开始请假/外出/出差/销假时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime startTime;
    @ApiModelProperty(value = "结束请假/外出/出差/销假时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime endTime;
    @ApiModelProperty(value = "请假/外出/出差/销假时长(天)")
ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDestroyDTO.java
@@ -1,5 +1,6 @@
package com.ruoyi.system.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -12,9 +13,13 @@
public class AddLeaveDestroyDTO implements Serializable {
    @ApiModelProperty(value = "开始请假/外出/出差/销假时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime startTime;
    @ApiModelProperty(value = "结束请假/外出/出差/销假时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime endTime;
    @ApiModelProperty(value = "请假/外出/出差/销假时长(天)")
ruoyi-system/src/main/java/com/ruoyi/system/dto/AddOutDTO.java
@@ -1,5 +1,6 @@
package com.ruoyi.system.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -12,9 +13,13 @@
public class AddOutDTO implements Serializable {
    @ApiModelProperty(value = "开始请假/外出/出差/销假时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime startTime;
    @ApiModelProperty(value = "结束请假/外出/出差/销假时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime endTime;
    @ApiModelProperty(value = "请假/外出/出差/销假时长(天)")
ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetTypeMapper.java
@@ -1,7 +1,13 @@
package com.ruoyi.system.mapper;
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.system.model.AssetType;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.system.query.AssetStatisticsListQuery;
import com.ruoyi.system.vo.AssetStatisticsVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
@@ -13,4 +19,7 @@
 */
public interface AssetTypeMapper extends BaseMapper<AssetType> {
    List<AssetStatisticsVO> pageList(@Param("query")AssetStatisticsListQuery query, @Param("pageInfo")PageInfo<AssetStatisticsVO> pageInfo);
    List<AssetStatisticsVO> pageListNoLimit(@Param("query")AssetStatisticsListQuery query);
}
ruoyi-system/src/main/java/com/ruoyi/system/model/AssetMain.java
@@ -76,7 +76,7 @@
    @ApiModelProperty(value = "数量")
    @TableField("quantity")
    private BigDecimal quantity;
    private Integer quantity;
    @ApiModelProperty(value = "单价")
    @TableField("unit_price")
ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationPurchase.java
@@ -41,10 +41,6 @@
    @TableField("title")
    private String title;
    @ApiModelProperty(value = "申请日期")
    @TableField("application_date")
    private Date applicationDate;
    @ApiModelProperty(value = "资产类型")
    @TableField("asset_type_id")
    private Integer assetTypeId;
ruoyi-system/src/main/java/com/ruoyi/system/query/ApprovalTodoListQuery.java
@@ -7,7 +7,7 @@
import lombok.Data;
@Data
@ApiModel(value = "代办事项/我审批的/我发起的分页列表query")
@ApiModel(value = "代办事项-我审批的-我发起的分页列表query")
public class ApprovalTodoListQuery extends BasePage {
    @ApiModelProperty("用户id 前端忽略")
ruoyi-system/src/main/java/com/ruoyi/system/query/AssetStatisticsListDetailQuery.java
New file
@@ -0,0 +1,22 @@
package com.ruoyi.system.query;
import com.ruoyi.common.core.domain.BasePage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel(value = "资产明细分页列表query")
public class AssetStatisticsListDetailQuery extends BasePage {
    @ApiModelProperty(value = "资产名称或编号")
    private String nameOrCode;
    @ApiModelProperty(value = "资产类别")
    private String category;
    @ApiModelProperty(value = "资产状态")
    private String assetStatus;
    @ApiModelProperty(value = "资产ids 前端忽略")
    private List<Integer> assetMainIds;
}
ruoyi-system/src/main/java/com/ruoyi/system/query/AssetStatisticsListQuery.java
New file
@@ -0,0 +1,20 @@
package com.ruoyi.system.query;
import com.ruoyi.common.core.domain.BasePage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel(value = "资产汇总分页列表query")
public class AssetStatisticsListQuery extends BasePage {
    @ApiModelProperty(value = "资产名称或编号")
    private String nameOrCode;
    @ApiModelProperty(value = "资产分类id")
    private Integer assetTypeId;
    @ApiModelProperty(value = "资产分类ids 前端忽略")
    private List<Integer> assetTypeIds;
}
ruoyi-system/src/main/java/com/ruoyi/system/service/AssetTypeService.java
@@ -1,8 +1,11 @@
package com.ruoyi.system.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.system.dto.asset.AssetTypeDTO;
import com.ruoyi.system.model.AssetType;
import com.ruoyi.system.query.AssetStatisticsListQuery;
import com.ruoyi.system.vo.AssetStatisticsVO;
import com.ruoyi.system.vo.asset.AssetTypeTreeVO;
import java.util.List;
@@ -54,4 +57,5 @@
     */
    String getAssetCodePrefix(Integer assetTypeId);
    PageInfo<AssetStatisticsVO> pageList(AssetStatisticsListQuery query);
}
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetMainServiceImpl.java
@@ -132,7 +132,7 @@
                assetMain.setAssetCode(assetCode);
                
                // 单个资产的数量设为1
                assetMain.setQuantity(BigDecimal.ONE);
                assetMain.setQuantity(1);
                // 单个资产的总价值等于单价
                assetMain.setTotalValue(storageAsset.getUnitPrice());
                
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetTypeServiceImpl.java
@@ -5,20 +5,29 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.common.core.domain.entity.TDept;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.dto.asset.AssetTypeDTO;
import com.ruoyi.system.mapper.AssetTypeMapper;
import com.ruoyi.system.model.AssetMain;
import com.ruoyi.system.model.AssetType;
import com.ruoyi.system.query.AssetStatisticsListQuery;
import com.ruoyi.system.service.AssetMainService;
import com.ruoyi.system.service.AssetTypeService;
import com.ruoyi.system.vo.AssetStatisticsVO;
import com.ruoyi.system.vo.asset.AssetTypeTreeVO;
import com.ruoyi.system.vo.system.NotificationVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -287,4 +296,65 @@
        return parentTypeCode + subTypeCode;
    }
    @Override
    public PageInfo<AssetStatisticsVO> pageList(AssetStatisticsListQuery query) {
        if (StringUtils.hasLength(query.getNameOrCode())){
            // 查询出资产名称或者资产编号符合条件的code
            List<Integer> assetTypeIds = assetMainService.lambdaQuery().like(AssetMain::getAssetName, query.getNameOrCode())
                    .or()
                    .like(AssetMain::getAssetCode, query.getNameOrCode())
                    .list()
                    .stream()
                    .map(AssetMain::getAssetTypeId)
                    .collect(Collectors.toList());
            query.setAssetTypeIds(assetTypeIds);
            if (assetTypeIds.isEmpty()){
                return new PageInfo<>();
            }
        }
        PageInfo<AssetStatisticsVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
        List<AssetStatisticsVO> list = this.baseMapper.pageList(query,pageInfo);
        List<AssetStatisticsVO> listNoLimit = this.baseMapper.pageListNoLimit(query);
        List<Integer> assetTypeIds = listNoLimit.stream().map(AssetStatisticsVO::getAssetTypeIdSecond).collect(Collectors.toList());
        if (assetTypeIds.isEmpty()){
            return new PageInfo<>();
        }
        Map<Integer, List<AssetMain>> assetMainMap = assetMainService.lambdaQuery().in(AssetMain::getAssetTypeId, assetTypeIds).list()
                .stream()
                .collect(Collectors.groupingBy(AssetMain::getAssetTypeId));
        for (AssetStatisticsVO asset : list) {
            Integer totalCount= 0;
            Integer idleCount= 0;
            Integer useCount= 0;
            Integer disposeCount= 0;
            Integer otherCount= 0;
            BigDecimal totalValue = new BigDecimal("0");
            List<AssetMain> assetMains = assetMainMap.get(asset.getAssetTypeIdSecond());
            if (!assetMains.isEmpty()){
                for (AssetMain assetMain : assetMains) {
                    if (assetMain.getAssetStatus().contains("闲置")){
                        idleCount += assetMain.getQuantity();
                    }else if (assetMain.getAssetStatus().contains("使用中")){
                        useCount += assetMain.getQuantity();
                    }else if (assetMain.getAssetStatus().contains("损坏") || assetMain.getAssetStatus().contains("报废")){
                        disposeCount += assetMain.getQuantity();
                    }else{
                        otherCount += assetMain.getQuantity();
                    }
                    totalCount+= assetMain.getQuantity();
                    totalValue = totalValue.add(new BigDecimal(assetMain.getQuantity())
                            .multiply(assetMain.getUnitPrice()).setScale(2, RoundingMode.HALF_DOWN));
                }
            }
            asset.setIdleCount(idleCount);
            asset.setUseCount(useCount);
            asset.setDisposeCount(disposeCount);
            asset.setOtherCount(otherCount);
            asset.setTotalCount(totalCount);
            asset.setTotalValue(totalValue);
        }
        pageInfo.setRecords(list);
        return pageInfo;
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationStorageServiceImpl.java
@@ -42,6 +42,8 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
@@ -776,6 +778,10 @@
    public PageInfo<StorageListVO> pageList(ApprovalDetailQuery query) {
        PageInfo<StorageListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
        List<StorageListVO> list = this.baseMapper.pageList(query,pageInfo);
        for (StorageListVO storageListVO : list) {
            BigDecimal value = new BigDecimal(storageListVO.getQuantity()).multiply(storageListVO.getUnitPrice()).setScale(2, RoundingMode.HALF_UP);
            storageListVO.setTotalValue(value);
        }
        pageInfo.setRecords(list);
        return pageInfo;
    }
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalTodoServiceImpl.java
@@ -18,6 +18,7 @@
import com.ruoyi.system.vo.ApprovalTodoVO;
import com.ruoyi.system.vo.system.NotificationVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.security.core.token.TokenService;
import org.springframework.stereotype.Service;
@@ -38,6 +39,7 @@
 */
@Service
@RequiredArgsConstructor
@Slf4j
public class OaApprovalTodoServiceImpl extends ServiceImpl<OaApprovalTodoMapper, OaApprovalTodo> implements OaApprovalTodoService {
    private final ISysUserService sysUserService;
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaNotificationServiceImpl.java
@@ -60,6 +60,6 @@
        }
        pageInfo.setRecords(list);
        return null;
        return pageInfo;
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/vo/AdvertisementDetailVO.java
@@ -15,7 +15,8 @@
@Data
@ApiModel(value = "广告制作详情返回VO")
public class AdvertisementDetailVO implements Serializable {
    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
    private Boolean signFlag;
    @ApiModelProperty(value = "申请人")
    private String userName;
    @ApiModelProperty(value = "所属部门")
ruoyi-system/src/main/java/com/ruoyi/system/vo/ApprovalTodoVO.java
@@ -37,7 +37,8 @@
    private LocalDateTime createTime;
    @ApiModelProperty(value = "事项标题")
    private String title;
    @ApiModelProperty(value = "审批申请ID")
    private Integer applicationId;
    @ApiModelProperty(value = "报销金额/申请金额/合计金额/总金额(报销申请/款项申请/款项支付审批/广告制作)")
ruoyi-system/src/main/java/com/ruoyi/system/vo/AssetStatisticsVO.java
New file
@@ -0,0 +1,35 @@
package com.ruoyi.system.vo;
import com.ruoyi.system.model.OaNotification;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
@ApiModel(value = "资产汇总分页返回VO")
public class AssetStatisticsVO implements Serializable {
    @ApiModelProperty(value = "资产大类名称")
    private String assetTypeNameFirst;
    @ApiModelProperty(value = "资产大类id")
    private Integer assetTypeIdFirst;
    @ApiModelProperty(value = "资产子类名称")
    private String assetTypeNameSecond;
    @ApiModelProperty(value = "资产子类id")
    private Integer assetTypeIdSecond;
    @ApiModelProperty(value = "合计数量")
    private Integer totalCount;
    @ApiModelProperty(value = "闲置数量")
    private Integer idleCount;
    @ApiModelProperty(value = "使用中数量")
    private Integer useCount;
    @ApiModelProperty(value = "损坏/报废数量")
    private Integer disposeCount;
    @ApiModelProperty(value = "其他数量")
    private Integer otherCount;
    @ApiModelProperty(value = "合计总价")
    private BigDecimal totalValue;
}
ruoyi-system/src/main/java/com/ruoyi/system/vo/BackDetailVO.java
@@ -14,7 +14,8 @@
@Data
@ApiModel(value = "借用归还审批详情返回VO")
public class BackDetailVO implements Serializable {
    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
    private Boolean signFlag;
    @ApiModelProperty(value = "借用人")
    private String userName;
    @ApiModelProperty(value = "借用部门")
ruoyi-system/src/main/java/com/ruoyi/system/vo/BorrowDetailVO.java
@@ -14,7 +14,8 @@
@Data
@ApiModel(value = "物品借用审批详情返回VO")
public class BorrowDetailVO implements Serializable {
    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
    private Boolean signFlag;
    @ApiModelProperty(value = "借用人")
    private String userName;
    @ApiModelProperty(value = "借用部门")
ruoyi-system/src/main/java/com/ruoyi/system/vo/BusinessTripDetailVO.java
@@ -12,7 +12,8 @@
@Data
@ApiModel(value = "出差审批详情返回VO")
public class BusinessTripDetailVO implements Serializable {
    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
    private Boolean signFlag;
    @ApiModelProperty(value = "申请人")
    private String userName;
    @ApiModelProperty(value = "所属部门")
ruoyi-system/src/main/java/com/ruoyi/system/vo/ChangeDetailVO.java
@@ -14,7 +14,8 @@
@Data
@ApiModel(value = "资产变更审批详情返回VO")
public class ChangeDetailVO implements Serializable {
    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
    private Boolean signFlag;
    @ApiModelProperty(value = "领用人")
    private String userName;
    @ApiModelProperty(value = "领用部门")
ruoyi-system/src/main/java/com/ruoyi/system/vo/ContactDetailVO.java
@@ -12,7 +12,8 @@
@Data
@ApiModel(value = "内部联系单详情返回VO")
public class ContactDetailVO implements Serializable {
    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
    private Boolean signFlag;
    @ApiModelProperty(value = "申请人")
    private String userName;
    @ApiModelProperty(value = "所属部门")
ruoyi-system/src/main/java/com/ruoyi/system/vo/ContractDetailVO.java
@@ -29,6 +29,8 @@
    private Integer approvalApplicationId;
    @ApiModelProperty(value = "合同文件地址")
    private String contractUrl;
    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
    private Boolean signFlag;
    @ApiModelProperty(value = "审批流程")
    private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS;
ruoyi-system/src/main/java/com/ruoyi/system/vo/DisposeDetailVO.java
@@ -16,7 +16,8 @@
@Data
@ApiModel(value = "资产处置审批详情返回VO")
public class DisposeDetailVO implements Serializable {
    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
    private Boolean signFlag;
    @ApiModelProperty(value = "领用人")
    private String userName;
    @ApiModelProperty(value = "领用部门")
ruoyi-system/src/main/java/com/ruoyi/system/vo/GrabDetailVO.java
@@ -15,7 +15,8 @@
@Data
@ApiModel(value = "物品领用审批详情返回VO")
public class GrabDetailVO implements Serializable {
    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
    private Boolean signFlag;
    @ApiModelProperty(value = "领用人")
    private String userName;
    @ApiModelProperty(value = "领用部门")
ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDestroyDetailVO.java
@@ -40,6 +40,8 @@
    private LocalDateTime endTimeLeave;
    @ApiModelProperty(value = "关联请假请假时长(天)")
    private Double durationLeave;
    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
    private Boolean signFlag;
    @ApiModelProperty(value = "审批流程")
    private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS;
ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDetailVO.java
@@ -35,6 +35,8 @@
    private LocalDateTime endTime;
    @ApiModelProperty(value = "请假/外出/出差/销假时长(天)")
    private Double duration;
    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
    private Boolean signFlag;
    @ApiModelProperty(value = "审批流程")
    private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS;
ruoyi-system/src/main/java/com/ruoyi/system/vo/MoneyDetailVO.java
@@ -13,7 +13,8 @@
@Data
@ApiModel(value = "款项审批详情返回VO")
public class MoneyDetailVO implements Serializable {
    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
    private Boolean signFlag;
    @ApiModelProperty(value = "申请人")
    private String userName;
    @ApiModelProperty(value = "所属部门")
ruoyi-system/src/main/java/com/ruoyi/system/vo/OutDetailVO.java
@@ -12,7 +12,8 @@
@Data
@ApiModel(value = "外出审批详情返回VO")
public class OutDetailVO implements Serializable {
    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
    private Boolean signFlag;
    @ApiModelProperty(value = "申请人")
    private String userName;
    @ApiModelProperty(value = "所属部门")
@@ -33,6 +34,8 @@
    private LocalDateTime endTime;
    @ApiModelProperty(value = "请假/外出/出差/销假时长(天)")
    private Double duration;
    @ApiModelProperty(value = "外出地点")
    private String address;
    @ApiModelProperty(value = "审批流程")
    private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS;
ruoyi-system/src/main/java/com/ruoyi/system/vo/PaymentDetailVO.java
@@ -26,6 +26,8 @@
    private String projectName;
    @ApiModelProperty(value = "申请金额")
    private BigDecimal applyAmount;
    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
    private Boolean signFlag;
    @ApiModelProperty(value = "审批流程")
    private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS;
ruoyi-system/src/main/java/com/ruoyi/system/vo/PurchaseDetailVO.java
@@ -14,7 +14,8 @@
@Data
@ApiModel(value = "采购审批详情返回VO")
public class PurchaseDetailVO implements Serializable {
    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
    private Boolean signFlag;
    @ApiModelProperty(value = "申请人")
    private String userName;
    @ApiModelProperty(value = "所属部门")
ruoyi-system/src/main/java/com/ruoyi/system/vo/ReimbursementDetailVO.java
@@ -14,7 +14,8 @@
@Data
@ApiModel(value = "报销审批详情返回VO")
public class ReimbursementDetailVO implements Serializable {
    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
    private Boolean signFlag;
    @ApiModelProperty(value = "申请人")
    private String userName;
    @ApiModelProperty(value = "所属部门")
ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageDetailVO.java
@@ -14,7 +14,8 @@
@ApiModel(value = "资产入库审批详情返回VO")
public class StorageDetailVO implements Serializable {
    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
    private Boolean signFlag;
    @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接")
    private String attachmentUrl;
@@ -22,6 +23,8 @@
    private Integer approvalApplicationId;
    @ApiModelProperty(value = "标题")
    private String title;
    @ApiModelProperty(value = "资产类型名称")
    private String assetTypeName;
    @ApiModelProperty(value = "入库类型 0-正常入库")
    private Integer storageType;
    @ApiModelProperty(value = "入库日期")
ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageListVO.java
@@ -24,7 +24,7 @@
    private String measurementUnit;
    @ApiModelProperty(value = "数量")
    private BigDecimal quantity;
    private Integer quantity;
    @ApiModelProperty(value = "单价")
    private BigDecimal unitPrice;
ruoyi-system/src/main/resources/mapper/system/AssetTypeMapper.xml
@@ -20,5 +20,40 @@
    <sql id="Base_Column_List">
        id, type_name, type_code, parent_id, level, create_time, create_by, update_time, update_by, disabled
    </sql>
    <select id="pageList" resultType="com.ruoyi.system.vo.AssetStatisticsVO">
        select t1.id as assetTypeIdSecond,t1.type_name as assetTypeNameSecond,
               t2.id as assetTypeIdFirst,t2.type_name as assetTypeNameFirst
        FROM asset_type t1
        left join asset_type t2 on t1.parent_id = t2.id
        where 1=1
        and
        t1.parent_id != 0
        <if test="query.assetTypeIds != null and query.assetTypeIds.size()>0">
            AND t1.id IN
            <foreach collection="query.assetTypeIds" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
               AND t1.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
               AND t2.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
    </select>
    <select id="pageListNoLimit" resultType="com.ruoyi.system.vo.AssetStatisticsVO">
        select t1.id as assetTypeIdSecond,t1.type_name as assetTypeNameSecond,
        t2.id as assetTypeIdFirst,t2.type_name as assetTypeNameFirst
        FROM asset_type t1
        left join asset_type t2 on t1.parent_id = t2.id
        where 1=1
        and
        t1.parent_id != 0
        <if test="query.assetTypeIds != null and query.assetTypeIds.size()>0">
            AND t1.id IN
            <foreach collection="query.assetTypeIds" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        AND t1.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
        AND t2.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
    </select>
</mapper>
ruoyi-system/src/main/resources/mapper/system/OaApprovalTodoMapper.xml
@@ -22,14 +22,24 @@
        id, application_id, application_code, flow_node_id, user_id, user_name, dept_id, sort_order, status, create_time, handle_time
    </sql>
    <select id="pageList" resultType="com.ruoyi.system.model.OaApprovalTodo">
        select * from oa_approval_todo
        where 1=1
        SELECT *
        FROM oa_approval_todo t1
        WHERE t1.id = (
        SELECT t2.id
        FROM oa_approval_todo t2
        WHERE t2.application_id = t1.application_id
        AND t2.status = 0
        <if test="query.userId != null">
            and user_id = #{query.userId}
            AND t2.user_id = #{query.userId}
        </if>
        and status = 0
        group by application_id
        order by create_time desc
        ORDER BY t2.create_time DESC
        LIMIT 1
        )
        <if test="query.userId != null">
            AND t1.user_id = #{query.userId}
        </if>
        AND t1.status = 0
        ORDER BY t1.create_time DESC
    </select>
    <select id="pageListAudit" resultType="com.ruoyi.system.model.OaApprovalTodo">
        select * from oa_approval_todo