2 天以前 300cf495c6a708df63621ff70e6d5408abc2912a
yys
转移设备代码
已添加7个文件
已修改42个文件
1174 ■■■■ 文件已修改
src/main/java/com/ruoyi/common/enums/FileNameType.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/controller/DeviceMaintenanceFileController.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/controller/DeviceRepairController.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/dto/DeviceLedgerDto.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/dto/DeviceMonthlyRepairTableDTO.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/dto/DeviceRepairDto.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/dto/RepairAmountGroupDTO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/execl/DeviceLedgerExeclDto.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/execl/DeviceMaintenanceExeclDto.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/execl/DeviceRepairExeclDto.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceFileMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceMapper.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/mapper/DeviceRepairMapper.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/pojo/DeviceLedger.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/pojo/DeviceMaintenanceFile.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/pojo/DeviceRepair.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/pojo/MaintenanceTask.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/service/DeviceMaintenanceFileService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/service/IDeviceMaintenanceService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/service/IDeviceRepairService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceFileServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskJob.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inspectiontask/controller/InspectionTaskController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inspectiontask/controller/TimingTaskController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inspectiontask/dto/InspectionTaskDto.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inspectiontask/pojo/InspectionTask.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inspectiontask/service/InspectionTaskService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/measuringinstrumentledger/controller/SparePartsController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/measuringinstrumentledger/dto/MeasuringInstrumentLedgerDto.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/measuringinstrumentledger/pojo/SpareParts.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerRecordServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/SparePartsServiceImpl.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/CommonFileServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-dev.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/common/enums/FileNameType.java
@@ -1,7 +1,5 @@
package com.ruoyi.common.enums;
import com.ruoyi.approve.pojo.ApproveProcess;
public enum FileNameType {
    SALE(1),      // é”€å”®
@@ -11,7 +9,11 @@
    MEASURING(5),  //计量器具台账
    MEASURINGRecord(6),//计量器具台账记录
    ApproveNode(7),  //协同审批节点审核
    ApproveProcess(8);  //协同审批主数据
    ApproveProcess(8),//协同审批主数据
    SHIP(9),//发货台账
    INSPECTION_PRODUCTION_BEFORE(10),
    INSPECTION_PRODUCTION_AFTER(11),
    INSPECTION(12);//巡检 ç”Ÿäº§å‰
    private final int value;
src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java
@@ -3,13 +3,17 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.device.dto.DeviceLedgerDto;
import com.ruoyi.device.execl.DeviceLedgerExeclDto;
import com.ruoyi.device.mapper.DeviceLedgerMapper;
import com.ruoyi.device.mapper.DeviceMaintenanceMapper;
import com.ruoyi.device.pojo.DeviceLedger;
import com.ruoyi.device.pojo.DeviceMaintenance;
import com.ruoyi.device.service.IDeviceLedgerService;
import com.ruoyi.framework.aspectj.lang.annotation.Anonymous;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.domain.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
@@ -82,6 +86,7 @@
    @PostMapping("import")
    @ApiModelProperty("导入设备台账")
    @Log(title = "设备台账导入", businessType = BusinessType.IMPORT)
    public AjaxResult importData(MultipartFile file) throws IOException {
        Boolean b = deviceLedgerService.importData(file);
        if (b) {
@@ -90,6 +95,14 @@
        return AjaxResult.error("导入失败");
    }
    @PostMapping("/downloadTemplate")
    @ApiModelProperty("下载导入模板")
    @Log(title = "设备台账导入", businessType = BusinessType.IMPORT)
    public void downloadTemplate(HttpServletResponse response) {
        ExcelUtil<DeviceLedgerExeclDto> util = new ExcelUtil<DeviceLedgerExeclDto>(DeviceLedgerExeclDto.class);
        util.importTemplateExcel(response, "设备台账模板");
    }
    @GetMapping("getDeviceLedger")
    @ApiModelProperty("获取设备台账")
src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java
@@ -3,6 +3,8 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.device.dto.DeviceMaintenanceDto;
import com.ruoyi.device.dto.DeviceMonthlyRepairTableDTO;
import com.ruoyi.device.dto.RepairAmountGroupDTO;
import com.ruoyi.device.pojo.DeviceLedger;
import com.ruoyi.device.pojo.DeviceMaintenance;
import com.ruoyi.device.service.IDeviceLedgerService;
@@ -15,6 +17,7 @@
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
@Api(tags = "设备保养")
@RestController
@@ -61,6 +64,7 @@
    @PostMapping ("maintenance")
    @ApiModelProperty("修改设备保养")
    public AjaxResult maintenance(@RequestBody DeviceMaintenance deviceMaintenance) {
        deviceMaintenance.setStatus(1);
        return deviceMaintenanceService.updateDeviceDeviceMaintenance(deviceMaintenance);
    }
@@ -82,4 +86,27 @@
    }
    /**
     * æŒ‰å¹´ä»½æŸ¥è¯¢æ¯æœˆæŠ¥ä¿®é‡‘额(按设备台账分组)
     * @param year å‰ç«¯ä¼ å…¥çš„年份(如2025)
     */
    @GetMapping("/monthlyAmount")
    @ApiModelProperty("按年份查询每月报修金额(按设备台账分组)")
    public AjaxResult getMonthlyAmount(@RequestParam(defaultValue = "2025", required = true,name = "year") String year) {
        List<DeviceMonthlyRepairTableDTO> result = deviceMaintenanceService.getMonthlyRepairAmountByYear(year);
        return AjaxResult.success(result);
    }
    /**
     * æŒ‰å¹´ä»½æŸ¥è¯¢æŠ¥ä¿®é‡‘额(按设备台账分组)
     * @param year å‰ç«¯ä¼ å…¥çš„年份(如2025)
     */
    @GetMapping("/yearlyAmount")
    @ApiModelProperty("按年份查询报修金额(按设备台账分组)")
    public AjaxResult yearlyAmount(@RequestParam(defaultValue = "2025", required = true,name = "year") String year) {
        List<RepairAmountGroupDTO> result = deviceMaintenanceService.getRepairAmountByYear(year);
        return AjaxResult.success(result);
    }
}
src/main/java/com/ruoyi/device/controller/DeviceMaintenanceFileController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
package com.ruoyi.device.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.device.pojo.DeviceMaintenanceFile;
import com.ruoyi.device.service.DeviceMaintenanceFileService;
import com.ruoyi.framework.web.domain.AjaxResult;
import io.swagger.annotations.Api;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
 * <p>
 * è®¾å¤‡ä¿å…»é™„ä»¶ å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2026-01-27 09:48:09
 */
@RestController
@RequestMapping("/maintenanceTaskFile")
@Api(tags = "设备保养附件")
public class DeviceMaintenanceFileController {
    @Resource
    private DeviceMaintenanceFileService deviceMaintenanceFileService;
    /**
     * æ–°å¢ž
     * @param deviceMaintenanceFile
     * @return
     */
    @PostMapping("/add")
    public AjaxResult add(@RequestBody DeviceMaintenanceFile deviceMaintenanceFile) {
        return AjaxResult.success(deviceMaintenanceFileService.save(deviceMaintenanceFile));
    }
    /**
     * åˆ é™¤
     * @param ids
     * @return
     */
    @DeleteMapping("/del")
    public AjaxResult delQualityUnqualified(@RequestBody List<Integer> ids) {
        if(CollectionUtils.isEmpty(ids)){
            return AjaxResult.error("请选择至少一条数据");
        }
        //删除检验附件
        return AjaxResult.success(deviceMaintenanceFileService.removeBatchByIds(ids));
    }
    /**
     *分页查询
     * @param page
     * @param deviceMaintenanceFile
     * @return
     */
    @GetMapping("/listPage")
    public AjaxResult qualityInspectFileListPage(Page page, DeviceMaintenanceFile deviceMaintenanceFile) {
        return AjaxResult.success(deviceMaintenanceFileService.page(page, Wrappers.<DeviceMaintenanceFile>lambdaQuery().eq(DeviceMaintenanceFile::getDeviceMaintenanceId,deviceMaintenanceFile.getDeviceMaintenanceId())));
    }
}
src/main/java/com/ruoyi/device/controller/DeviceRepairController.java
@@ -1,31 +1,20 @@
package com.ruoyi.device.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.approve.pojo.ApproveProcess;
import com.ruoyi.approve.service.IApproveProcessService;
import com.ruoyi.approve.vo.ApproveProcessVO;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.device.dto.DeviceMonthlyRepairTableDTO;
import com.ruoyi.device.dto.DeviceRepairDto;
import com.ruoyi.device.pojo.DeviceLedger;
import com.ruoyi.device.dto.RepairAmountGroupDTO;
import com.ruoyi.device.pojo.DeviceRepair;
import com.ruoyi.device.service.IDeviceLedgerService;
import com.ruoyi.device.service.IDeviceRepairService;
import com.ruoyi.framework.security.LoginUser;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.project.system.domain.SysDept;
import com.ruoyi.project.system.domain.SysUser;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.List;
@@ -39,8 +28,6 @@
    @Autowired
    private IDeviceLedgerService deviceLedgerService;
    @Autowired
    private IApproveProcessService approveProcessService;
    @ApiModelProperty("设备报修列表")
    @GetMapping("/page")
@@ -49,40 +36,9 @@
    }
    @PostMapping()
    @Transactional(rollbackFor = Exception.class)
    @ApiModelProperty("添加设备报修")
    public AjaxResult add( @RequestBody DeviceRepair deviceRepair) throws Exception {
        deviceRepairService.saveDeviceRepair(deviceRepair);
        ApproveProcessVO approveProcessVO = new ApproveProcessVO();
        LoginUser loginUser = SecurityUtils.getLoginUser();
        SysUser user = loginUser.getUser();
        // èŽ·å–å½“å‰ç™»å½•å…¬å¸
        Long tenantId = loginUser.getTenantId();
        if(null != tenantId){
            LambdaQueryWrapper<DeviceRepair> QueryWrapper = new LambdaQueryWrapper<>();
            QueryWrapper.eq(DeviceRepair::getDeviceLedgerId,deviceRepair.getDeviceLedgerId())
                    .eq(DeviceRepair::getRemark,deviceRepair.getRemark())
                    .eq(DeviceRepair::getDeviceName,deviceRepair.getDeviceName())
                    .eq(DeviceRepair::getApproverId,deviceRepair.getApproverId())
                    .eq(DeviceRepair::getRepairTime,deviceRepair.getRepairTime());
            DeviceRepair one = deviceRepairService.getOne(QueryWrapper);
            if(ObjectUtils.isEmpty(one)){
                return AjaxResult.error("设备报修不存在");
            }
            //获取当前登录部门id
            approveProcessVO.setApproveDeptId(tenantId);
            //获取当前登录用户id
            approveProcessVO.setApproveUser(loginUser.getUserId());
            //获取当前时间
            approveProcessVO.setApproveTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
            approveProcessVO.setApproveType(4);
            approveProcessVO.setApproveUserIds(deviceRepair.getApproverId().toString());
            approveProcessVO.setApproveReason(deviceRepair.getRemark());
            approveProcessVO.setDeviceRepairId(one.getId());
            approveProcessVO.setMaintenancePrice(deviceRepair.getMaintenancePrice());
            approveProcessService.addApprove(approveProcessVO);
        }
        return AjaxResult.success();
    public AjaxResult add( @RequestBody DeviceRepair deviceRepair) {
        return deviceRepairService.saveDeviceRepair(deviceRepair);
    }
    @ApiModelProperty("根据id查询设备报修")
@@ -101,23 +57,13 @@
    @PostMapping ("repair")
    @ApiModelProperty("设备维修")
    public AjaxResult repair( @RequestBody DeviceRepair deviceRepair) {
        deviceRepair.setStatus(1);
        return deviceRepairService.updateDeviceRepair(deviceRepair);
    }
    @DeleteMapping("/{ids}")
    @ApiModelProperty("删除设备报修")
    public AjaxResult delete(@PathVariable("ids") Long[] ids) {
        LambdaQueryWrapper<ApproveProcess> QueryWrapper = new LambdaQueryWrapper<>();
        QueryWrapper.in(ApproveProcess::getDeviceRepairId,ids);
        List<ApproveProcess> approveProcessList = approveProcessService.list(QueryWrapper);
        if(!approveProcessList.isEmpty()){
            approveProcessList.forEach(approveProcess -> {
                if (approveProcess.getApproveStatus() != 0){
                    //抛出异常
                    throw new RuntimeException("有正在处理中的审批流程,不能删除");
                }
            });
        }
        boolean b = deviceRepairService.removeBatchByIds(Arrays.asList(ids));
        if (!b) {
            return AjaxResult.error("删除失败");
@@ -130,4 +76,27 @@
    public void export(HttpServletResponse response, Long[] ids) {
        deviceRepairService.export(response, ids);
    }
    /**
     * æŒ‰å¹´ä»½æŸ¥è¯¢æ¯æœˆæŠ¥ä¿®é‡‘额(按设备台账分组)
     * @param year å‰ç«¯ä¼ å…¥çš„年份(如2025)
     */
    @GetMapping("/monthlyAmount")
    @ApiModelProperty("按年份查询每月报修金额(按设备台账分组)")
    public AjaxResult getMonthlyAmount(@RequestParam(defaultValue = "2025", required = true,name = "year") String year) {
        List<DeviceMonthlyRepairTableDTO> result = deviceRepairService.getMonthlyRepairAmountByYear(year);
        return AjaxResult.success(result);
    }
    /**
     * æŒ‰å¹´ä»½æŸ¥è¯¢æŠ¥ä¿®é‡‘额(按设备台账分组)
     * @param year å‰ç«¯ä¼ å…¥çš„年份(如2025)
     */
    @GetMapping("/yearlyAmount")
    @ApiModelProperty("按年份查询报修金额(按设备台账分组)")
    public AjaxResult yearlyAmount(@RequestParam(defaultValue = "2025", required = true,name = "year") String year) {
        List<RepairAmountGroupDTO> result = deviceRepairService.getRepairAmountByYear(year);
        return AjaxResult.success(result);
    }
}
src/main/java/com/ruoyi/device/dto/DeviceLedgerDto.java
@@ -37,19 +37,6 @@
    private String deviceModel;
    /**
     * è®¾å¤‡å“ç‰Œ
     */
    @ApiModelProperty("设备品牌")
    private String deviceBrand;
    /**
     * å­˜æ”¾ä½ç½®
     */
    @ApiModelProperty("存放位置")
    private String storageLocation;
    /**
     * ä¾›åº”商名称
     */
    private String supplierName;
@@ -84,6 +71,10 @@
     */
    private BigDecimal unTaxIncludingPriceTotal;
    private String deviceBrand;
    private String storageLocation;
    /**
     * å½•入时间
     */
src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java
@@ -5,6 +5,7 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
@@ -12,7 +13,11 @@
    @ApiModelProperty("设备保养id")
    private Long id;
    @ApiModelProperty("设备保养金额")
    private BigDecimal maintenancePrice;
    @ApiModelProperty("设备台账id")
    private Long deviceLedgerId;
@@ -39,9 +44,9 @@
    private String maintenanceActuallyTimeReq;
    @ApiModelProperty("保养结果 0 ç»´ä¿® 1 å®Œå¥½")
    private String maintenanceResult;
    private Integer maintenanceResult;
    @ApiModelProperty("状态 0 å¾…保养 1 å®Œç»“ 2 å¤±è´¥")
    @ApiModelProperty("状态 0 å¾…保养 1 å®Œç»“")
    private Integer status;
    @ApiModelProperty("创建时间")
src/main/java/com/ruoyi/device/dto/DeviceMonthlyRepairTableDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.ruoyi.device.dto;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @author :yys
 * @date : 2025/11/19 10:58
 */
@Data
public class DeviceMonthlyRepairTableDTO {
    private String deviceName; // è®¾å¤‡åç§°
    private BigDecimal month1; // 1月金额
    private BigDecimal month2; // 2月金额
    private BigDecimal month3; // 3月金额
    private BigDecimal month4; // 4月金额
    private BigDecimal month5; // 5月金额
    private BigDecimal month6; // 6月金额
    private BigDecimal month7; // 7月金额
    private BigDecimal month8; // 8月金额
    private BigDecimal month9; // 9月金额
    private BigDecimal month10; // 10月金额
    private BigDecimal month11; // 11月金额
    private BigDecimal month12; // 12月金额
    private BigDecimal total; // æ€»è®¡
}
src/main/java/com/ruoyi/device/dto/DeviceRepairDto.java
@@ -3,21 +3,30 @@
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
@Data
public class DeviceRepairDto {
    @ApiModelProperty("督办人")
    private String supervisoryName;
    @ApiModelProperty("审核人")
    private String auditName;
    @ApiModelProperty("设备报修id")
    private Long id;
    @ApiModelProperty("设备台账id")
    private Long deviceLedgerId;
    @ApiModelProperty("报修金额")
    private BigDecimal repairPrice;
    @ApiModelProperty("设备名称")
    private String deviceName;
@@ -47,7 +56,7 @@
    @ApiModelProperty("维修结果")
    private String maintenanceResult;
    @ApiModelProperty("状态:0审核中,1审核通过,2审核失败,3维修中,4维修通过,5维修失败")
    @ApiModelProperty("状态")
    private Integer status;
    @ApiModelProperty("创建时间")
@@ -69,7 +78,7 @@
    @ApiModelProperty("租户id")
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
    @ApiModelProperty("维修价格")
    private String maintenancePrice;
}
src/main/java/com/ruoyi/device/dto/RepairAmountGroupDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.ruoyi.device.dto;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @author :yys
 * @date : 2025/11/19 10:44
 */
@Data
public class RepairAmountGroupDTO {
    // å¹´æœˆï¼ˆæ ¼å¼ï¼šMM)
    private String repairYearMonth;
    // è®¾å¤‡å°è´¦id
    private Long deviceLedgerId;
    // è®¾å¤‡å°è´¦åç§°
    private String deviceName;
    // è¯¥è®¾å¤‡æŠ¥ä¿®é‡‘额总和
    private BigDecimal totalRepairPrice;
}
src/main/java/com/ruoyi/device/execl/DeviceLedgerExeclDto.java
@@ -37,31 +37,31 @@
     * æ•°é‡
     */
    @Excel(name = "数量",sort = 5)
    private BigDecimal number;
    private Integer number;
    /**
     * å«ç¨Žå•ä»·
     * èµ„产原值
     */
    @Excel(name = "含税单价",sort = 6)
    @Excel(name = "资产原值",sort = 6)
    private BigDecimal taxIncludingPriceUnit;
//
//    /**
//     * å«ç¨Žæ€»ä»·
//     */
//    @Excel(name = "含税总价",sort = 7)
//    private BigDecimal taxIncludingPriceTotal;
//
//    /**
//     * ç¨Žçއ
//     */
//    @Excel(name = "税率",sort = 8)
//    private BigDecimal taxRate;
    /**
     * å«ç¨Žæ€»ä»·
     */
    @Excel(name = "含税总价",sort = 7)
    private BigDecimal taxIncludingPriceTotal;
    /**
     * ç¨Žçއ
     */
    @Excel(name = "税率",sort = 8)
    private BigDecimal taxRate;
    /**
     * ä¸å«ç¨Žæ€»ä»·
     */
    @Excel(name = "不含税总价",sort = 9)
    private BigDecimal unTaxIncludingPriceTotal;
//    /**
//     * ä¸å«ç¨Žæ€»ä»·
//     */
//    @Excel(name = "不含税总价",sort = 9)
//    private BigDecimal unTaxIncludingPriceTotal;
//
//    /**
//     * å½•入时间
@@ -71,6 +71,18 @@
//    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
//    private LocalDateTime createTime;
    /**
     * å•位
     */
    @Excel(name = "存放地点",sort = 7)
    private String storageLocation;
    /**
     * å•位
     */
    @Excel(name = "设备品牌",sort = 8)
    private String deviceBrand;
    /**
src/main/java/com/ruoyi/device/execl/DeviceMaintenanceExeclDto.java
@@ -4,6 +4,7 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
@@ -16,6 +17,11 @@
    @ApiModelProperty("设备名称")
    @Excel(name = "设备名称")
    private String deviceName;
    @ApiModelProperty("设备保养金额")
    @Excel(name = "设备保养金额")
    private BigDecimal maintenancePrice;
    @Excel(name = "规格型号")
    @ApiModelProperty("规格型号")
@@ -37,7 +43,7 @@
    @Excel(name = "保养结果")
    private String maintenanceResult;
    @ApiModelProperty("状态 0 å¾…保养 1 å®Œç»“ 2 å¤±è´¥")
    @ApiModelProperty("状态 0 å¾…保养 1 å®Œç»“")
    @Excel(name = "状态")
    private String status;
src/main/java/com/ruoyi/device/execl/DeviceRepairExeclDto.java
@@ -5,6 +5,7 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
@@ -15,6 +16,10 @@
    @Excel(name = "设备名称")
    private String deviceName;
    @ApiModelProperty("报修金额")
    @Excel(name = "报修金额")
    private BigDecimal repairPrice;
    @ApiModelProperty("设备型号")
    @Excel(name = "设备型号")
    private String deviceModel;
src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceFileMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.ruoyi.device.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.device.pojo.DeviceMaintenanceFile;
import org.apache.ibatis.annotations.Mapper;
/**
 * <p>
 * è®¾å¤‡ä¿å…»é™„ä»¶ Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2026-01-27 09:48:09
 */
@Mapper
public interface DeviceMaintenanceFileMapper extends BaseMapper<DeviceMaintenanceFile> {
}
src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceMapper.java
@@ -6,8 +6,11 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.device.dto.DeviceMaintenanceDto;
import com.ruoyi.device.dto.RepairAmountGroupDTO;
import com.ruoyi.device.pojo.DeviceMaintenance;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@@ -20,4 +23,31 @@
    @InterceptorIgnore(tenantLine = "true")
    List<DeviceMaintenance> list1(Long id);
    /**
     * æŒ‰â€œæŒ‡å®šå¹´ä»½çš„年月+设备台账id”分组,求和报修金额
     * @param year å‰ç«¯ä¼ å…¥çš„年份(如"2025")
     */
    @Select("SELECT " +
            "  DATE_FORMAT(maintenance_actually_time, '%m') AS repairYearMonth, " +
            "  device_ledger_id AS deviceLedgerId, " +
            "  SUM(maintenance_price) AS totalRepairPrice " +
            "FROM device_maintenance " +
            "WHERE DATE_FORMAT(maintenance_actually_time, '%Y') = #{year} " + // åªæŸ¥è¯¢æŒ‡å®šå¹´ä»½çš„æ•°æ®
            "GROUP BY device_ledger_id,DATE_FORMAT(maintenance_actually_time, '%Y-%m')  " +
            "ORDER BY repairYearMonth ASC") // æŒ‰æœˆä»½æŽ’序,方便前端展示
    List<RepairAmountGroupDTO> groupByMonthAndDeviceLedger(@Param("year") String year);
    /**
     * æŒ‰â€œè®¾å¤‡å°è´¦id”分组,求和报修金额
     * @param year å‰ç«¯ä¼ å…¥çš„年份(如"2025")
     */
    @Select("SELECT " +
            "  device_ledger_id AS deviceLedgerId, " +
            "  SUM(maintenance_price) AS totalRepairPrice " +
            "FROM device_maintenance " +
            "WHERE DATE_FORMAT(maintenance_actually_time, '%Y') = #{year} " + // åªæŸ¥è¯¢æŒ‡å®šå¹´ä»½çš„æ•°æ®
            "GROUP BY device_ledger_id ") // æŒ‰æœˆä»½æŽ’序,方便前端展示
    List<RepairAmountGroupDTO> groupByDeviceLedger(@Param("year") String year);
}
src/main/java/com/ruoyi/device/mapper/DeviceRepairMapper.java
@@ -4,13 +4,44 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.device.dto.DeviceRepairDto;
import com.ruoyi.device.dto.RepairAmountGroupDTO;
import com.ruoyi.device.pojo.DeviceRepair;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface DeviceRepairMapper extends BaseMapper<DeviceRepair> {
    IPage<DeviceRepairDto> queryPage(Page page, @Param("deviceRepairDto") DeviceRepairDto deviceRepairDto);
    DeviceRepairDto detailById(Long id);
    /**
     * æŒ‰â€œæŒ‡å®šå¹´ä»½çš„年月+设备台账id”分组,求和报修金额
     * @param year å‰ç«¯ä¼ å…¥çš„年份(如"2025")
     */
    @Select("SELECT " +
            "  DATE_FORMAT(repair_time, '%m') AS repairYearMonth, " +
            "  device_ledger_id AS deviceLedgerId, " +
            "  SUM(repair_price) AS totalRepairPrice " +
            "FROM device_repair " +
            "WHERE DATE_FORMAT(repair_time, '%Y') = #{year} " + // åªæŸ¥è¯¢æŒ‡å®šå¹´ä»½çš„æ•°æ®
            "GROUP BY device_ledger_id,DATE_FORMAT(repair_time, '%Y-%m')  " +
            "ORDER BY repairYearMonth ASC") // æŒ‰æœˆä»½æŽ’序,方便前端展示
    List<RepairAmountGroupDTO> groupByMonthAndDeviceLedger(@Param("year") String year);
    /**
     * æŒ‰â€œè®¾å¤‡å°è´¦id”分组,求和报修金额
     * @param year å‰ç«¯ä¼ å…¥çš„年份(如"2025")
     */
    @Select("SELECT " +
            "  device_ledger_id AS deviceLedgerId, " +
            "  SUM(repair_price) AS totalRepairPrice " +
            "FROM device_repair " +
            "WHERE DATE_FORMAT(repair_time, '%Y') = #{year} " + // åªæŸ¥è¯¢æŒ‡å®šå¹´ä»½çš„æ•°æ®
            "GROUP BY device_ledger_id ") // æŒ‰æœˆä»½æŽ’序,方便前端展示
    List<RepairAmountGroupDTO> groupByDeviceLedger(@Param("year") String year);
}
src/main/java/com/ruoyi/device/pojo/DeviceLedger.java
@@ -40,18 +40,6 @@
    private String deviceModel;
    /**
     * è®¾å¤‡å“ç‰Œ
     */
    @ApiModelProperty("设备品牌")
    private String deviceBrand;
    /**
     * å­˜æ”¾ä½ç½®
     */
    @ApiModelProperty("存放位置")
    private String storageLocation;
    /**
     * ä¾›åº”商名称
     */
    private String supplierName;
@@ -86,6 +74,10 @@
     */
    private BigDecimal unTaxIncludingPriceTotal;
    private String deviceBrand;
    private String storageLocation;
    /**
     * å½•入时间
     */
src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java
@@ -9,6 +9,7 @@
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
@@ -21,6 +22,9 @@
    @ApiModelProperty("设备台账id")
    private Long deviceLedgerId;
    @ApiModelProperty("设备保养金额")
    private BigDecimal maintenancePrice;
    @ApiModelProperty("保养任务id")
    private Long maintenanceTaskId;
@@ -56,9 +60,9 @@
    private LocalDateTime maintenanceActuallyTime;
    @ApiModelProperty("保养结果 0 ç»´ä¿® 1 å®Œå¥½")
    private String maintenanceResult;
    private Integer maintenanceResult;
    @ApiModelProperty("状态 0 å¾…保养 1 å®Œç»“ 2 å¤±è´¥")
    @ApiModelProperty("状态 0 å¾…保养 1 å®Œç»“")
    private Integer status;
    @ApiModelProperty("创建时间")
src/main/java/com/ruoyi/device/pojo/DeviceMaintenanceFile.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
package com.ruoyi.device.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * è®¾å¤‡ä¿å…»é™„ä»¶
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2026-01-27 09:48:09
 */
@Getter
@Setter
@TableName("device_maintenance_file")
@ApiModel(value = "DeviceMaintenanceFile对象", description = "设备保养记录附件")
public class DeviceMaintenanceFile implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("文件名称")
    private String name;
    @ApiModelProperty("文件路径")
    private String url;
    @ApiModelProperty("文件大小")
    private Integer fileSize;
    @ApiModelProperty("设备保养记录ID")
    private Integer deviceMaintenanceId;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("创建用户")
    @TableField(fill = FieldFill.INSERT)
    private Long createUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty("修改用户")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Long updateUser;
    @ApiModelProperty("租户ID")
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
}
src/main/java/com/ruoyi/device/pojo/DeviceRepair.java
@@ -4,7 +4,6 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
@@ -22,9 +21,12 @@
    @ApiModelProperty("设备台账id")
    private Long deviceLedgerId;
    @ApiModelProperty("设备名称")
    @ApiModelProperty("报修金额")
    private BigDecimal repairPrice;
    private String deviceName;
    @ApiModelProperty("设备型号")
    private String deviceModel;
    @ApiModelProperty("报修时间")
@@ -47,8 +49,14 @@
    @ApiModelProperty("维修结果")
    private String maintenanceResult;
    @ApiModelProperty("状态:0审核中,1审核通过,2审核失败,3维修中,4维修通过,5维修失败")
    @ApiModelProperty("状态 0 å¾…ç»´ä¿® 1完结 2待审核 3审核不通过")
    private Integer status;
    @ApiModelProperty("审核人")
    private String auditName;
    @ApiModelProperty("督办人")
    private String supervisoryName;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
@@ -73,8 +81,6 @@
    @ApiModelProperty("租户id")
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
    @ApiModelProperty("维修价格")
    private BigDecimal maintenancePrice;
    @ApiModelProperty("审批人id")
    private Integer approverId;
}
src/main/java/com/ruoyi/device/pojo/MaintenanceTask.java
@@ -41,6 +41,9 @@
    @ApiModelProperty(value = "设备id")
    private Long taskId;
    @ApiModelProperty(value = "批量设备id")
    private String taskIds;
    @ApiModelProperty(value = "频次")
    @Excel(name = "频次")
    private String frequencyType;
@@ -75,9 +78,16 @@
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate registrationDate;
    @ApiModelProperty(value = "状态")
    @ApiModelProperty(value = "状态 å¾…审核 å®¡æ ¸ä¸é€šè¿‡ å®¡æ ¸é€šè¿‡")
    private String status;
    @ApiModelProperty(value = "审核人")
    @Excel(name = "审核人")
    private String auditName;
    @ApiModelProperty("督办人")
    private String supervisoryName;
    @ApiModelProperty(value = "软删除标志,0=未删除,1=已删除")
    private Integer deleted;
src/main/java/com/ruoyi/device/service/DeviceMaintenanceFileService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.device.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.device.pojo.DeviceMaintenanceFile;
/**
 * <p>
 * è®¾å¤‡ä¿å…»é™„ä»¶ æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2026-01-27 09:48:09
 */
public interface DeviceMaintenanceFileService extends IService<DeviceMaintenanceFile> {
}
src/main/java/com/ruoyi/device/service/IDeviceMaintenanceService.java
@@ -4,10 +4,13 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.device.dto.DeviceMaintenanceDto;
import com.ruoyi.device.dto.DeviceMonthlyRepairTableDTO;
import com.ruoyi.device.dto.RepairAmountGroupDTO;
import com.ruoyi.device.pojo.DeviceMaintenance;
import com.ruoyi.framework.web.domain.AjaxResult;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
public interface IDeviceMaintenanceService extends IService<DeviceMaintenance> {
@@ -20,4 +23,8 @@
    void export(HttpServletResponse response, Long[] ids);
    DeviceMaintenanceDto detailById(Long id);
    List<DeviceMonthlyRepairTableDTO> getMonthlyRepairAmountByYear(String year);
    List<RepairAmountGroupDTO> getRepairAmountByYear(String year);
}
src/main/java/com/ruoyi/device/service/IDeviceRepairService.java
@@ -3,11 +3,14 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.device.dto.DeviceMonthlyRepairTableDTO;
import com.ruoyi.device.dto.DeviceRepairDto;
import com.ruoyi.device.dto.RepairAmountGroupDTO;
import com.ruoyi.device.pojo.DeviceRepair;
import com.ruoyi.framework.web.domain.AjaxResult;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
public interface IDeviceRepairService extends IService<DeviceRepair> {
@@ -21,4 +24,8 @@
    void export(HttpServletResponse response, Long[] ids);
    DeviceRepairDto detailById(Long id);
    List<DeviceMonthlyRepairTableDTO> getMonthlyRepairAmountByYear(String year);
    List<RepairAmountGroupDTO> getRepairAmountByYear(String year);
}
src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java
@@ -1,6 +1,5 @@
package com.ruoyi.device.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -23,6 +22,7 @@
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -45,11 +45,11 @@
    @Override
    public AjaxResult saveDeviceLedger(DeviceLedger deviceLedger) {
        LambdaQueryWrapper<DeviceLedger> deviceLedgerLambdaQueryWrapper = new LambdaQueryWrapper<>();
        deviceLedgerLambdaQueryWrapper.eq(DeviceLedger::getDeviceName,deviceLedger.getDeviceName());
        if (this.count(deviceLedgerLambdaQueryWrapper) > 0) {
            return AjaxResult.error("设备名称已存在");
        }
//        LambdaQueryWrapper<DeviceLedger> deviceLedgerLambdaQueryWrapper = new LambdaQueryWrapper<>();
//        deviceLedgerLambdaQueryWrapper.eq(DeviceLedger::getDeviceModel,deviceLedger.getDeviceModel());
//        if (this.count(deviceLedgerLambdaQueryWrapper) > 0) {
//            return AjaxResult.error("设备型号已存在");
//        }
        boolean save = this.save(deviceLedger);
        if (save){
            return AjaxResult.success();
@@ -104,6 +104,7 @@
        ExcelUtil<DeviceLedgerExeclDto> util = new ExcelUtil<DeviceLedgerExeclDto>(DeviceLedgerExeclDto.class);
        List<DeviceLedgerExeclDto> userList = util.importExcel(file.getInputStream());
        userList.forEach(c -> {
            for (Integer i = 0; i < c.getNumber(); i++) {
            DeviceLedger deviceLedger = new DeviceLedger();
            SysUser sysUser = sysUserMapper.selectUserByUserName(c.getCreateUser());
            if (sysUser!=null) {
@@ -112,7 +113,9 @@
                deviceLedger.setCreateUser(SecurityUtils.getUserId().intValue());
            }
            BeanUtils.copyProperties(c,deviceLedger);
                deviceLedger.setNumber(new BigDecimal(1));
            deviceLedgerMapper.insert(deviceLedger);
            }
        });
        return true;
src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceFileServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.device.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.device.mapper.DeviceMaintenanceFileMapper;
import com.ruoyi.device.pojo.DeviceMaintenanceFile;
import com.ruoyi.device.service.DeviceMaintenanceFileService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * è®¾å¤‡ä¿å…»é™„ä»¶ æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2026-01-27 09:48:09
 */
@Service
public class DeviceMaintenanceFileServiceImpl extends ServiceImpl<DeviceMaintenanceFileMapper, DeviceMaintenanceFile> implements DeviceMaintenanceFileService {
}
src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
@@ -7,17 +7,24 @@
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.device.dto.DeviceMaintenanceDto;
import com.ruoyi.device.dto.DeviceMonthlyRepairTableDTO;
import com.ruoyi.device.dto.RepairAmountGroupDTO;
import com.ruoyi.device.execl.DeviceMaintenanceExeclDto;
import com.ruoyi.device.mapper.DeviceLedgerMapper;
import com.ruoyi.device.mapper.DeviceMaintenanceMapper;
import com.ruoyi.device.pojo.DeviceLedger;
import com.ruoyi.device.pojo.DeviceMaintenance;
import com.ruoyi.device.service.IDeviceMaintenanceService;
import com.ruoyi.framework.web.domain.AjaxResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Service
@@ -58,8 +65,9 @@
        supplierManageList.forEach(deviceMaintenance -> {
            DeviceMaintenanceExeclDto deviceRepairExeclDto = new DeviceMaintenanceExeclDto();
            BeanUtils.copyProperties(deviceMaintenance,deviceRepairExeclDto);
            deviceRepairExeclDto.setStatus(deviceMaintenance.getStatus() == 0 ? "待维修" : deviceMaintenance.getStatus() == 1 ? "完结" : "失败");
//            deviceRepairExeclDto.setMaintenanceResult(deviceMaintenance.getMaintenanceResult() != null && deviceMaintenance.getMaintenanceResult() == 0 ? "ç»´ä¿®" : "完好");
            deviceRepairExeclDto.setStatus(deviceMaintenance.getStatus() == 0 ? "待维修" : "完结");
            deviceRepairExeclDto.setMaintenanceResult(deviceMaintenance.getMaintenanceResult() != null && deviceMaintenance.getMaintenanceResult() == 0 ? "ç»´ä¿®" : "完好");
            deviceLedgerExeclDtos.add(deviceRepairExeclDto);
        });
        ExcelUtil<DeviceMaintenanceExeclDto> util = new ExcelUtil<DeviceMaintenanceExeclDto>(DeviceMaintenanceExeclDto.class);
@@ -71,4 +79,96 @@
        return deviceMaintenanceMapper.detailById(id);
    }
    @Autowired
    private DeviceLedgerMapper deviceLedgerMapper;
    @Override
    public List<DeviceMonthlyRepairTableDTO> getMonthlyRepairAmountByYear(String year) {
        List<RepairAmountGroupDTO> repairAmountGroupDTOS = deviceMaintenanceMapper.groupByMonthAndDeviceLedger(year);
        // 1. å…ˆé€šè¿‡è®¾å¤‡å°è´¦id关联设备名称(如果RepairAmountGroupDTO没有deviceName,需先查设备台账表)
        // è¿™é‡Œå‡è®¾ä½ èƒ½é€šè¿‡deviceLedgerId获取到deviceName,比如:
        Map<Long, String> deviceNameMap = new HashMap<>(); // key:deviceLedgerId, value:deviceName
        // ï¼ˆå®žé™…需调用设备台账的Mapper查询:deviceNameMap = deviceLedgerMapper.listAll().stream().collect(Collectors.toMap(DeviceLedger::getId, DeviceLedger::getDeviceName)))
        deviceNameMap = deviceLedgerMapper.selectList(null)
                .stream()
                .collect(Collectors.toMap(DeviceLedger::getId, DeviceLedger::getDeviceName));
        if(CollectionUtils.isEmpty(deviceNameMap)){
            return Collections.emptyList();
        }
        // 2. æŒ‰è®¾å¤‡åç§°åˆ†ç»„,存储每个设备的各月金额
        Map<String, DeviceMonthlyRepairTableDTO> deviceTableMap = new HashMap<>();
        for (RepairAmountGroupDTO dto : repairAmountGroupDTOS) {
            // æ‹†åˆ†repairYearMonth为月份(如"2025-01" â†’ "01" â†’ 1)
            String yearMonth = dto.getRepairYearMonth(); // æ ¼å¼ï¼šyyyy-MM
            int month = Integer.parseInt(yearMonth); // æå–MM并转成数字(1-12)
            // èŽ·å–è®¾å¤‡åç§°
            String deviceName = deviceNameMap.get(dto.getDeviceLedgerId());
            if (deviceName == null) {
                deviceName = "未知设备"; // å…œåº•
            }
            // ä»ŽMap中获取该设备的表格DTO,不存在则初始化
            DeviceMonthlyRepairTableDTO tableDTO = deviceTableMap.getOrDefault(deviceName, new DeviceMonthlyRepairTableDTO());
            tableDTO.setDeviceName(deviceName);
            // æ ¹æ®æœˆä»½å¡«å……金额(BigDecimal默认0,避免null)
            BigDecimal amount = dto.getTotalRepairPrice() == null ? BigDecimal.ZERO : dto.getTotalRepairPrice();
            switch (month) {
                case 1: tableDTO.setMonth1(amount); break;
                case 2: tableDTO.setMonth2(amount); break;
                case 3: tableDTO.setMonth3(amount); break;
                case 4: tableDTO.setMonth4(amount); break;
                case 5: tableDTO.setMonth5(amount); break;
                case 6: tableDTO.setMonth6(amount); break;
                case 7: tableDTO.setMonth7(amount); break;
                case 8: tableDTO.setMonth8(amount); break;
                case 9: tableDTO.setMonth9(amount); break;
                case 10: tableDTO.setMonth10(amount); break;
                case 11: tableDTO.setMonth11(amount); break;
                case 12: tableDTO.setMonth12(amount); break;
            }
            // é‡æ–°æ”¾å…¥Map
            deviceTableMap.put(deviceName, tableDTO);
        }
        // 3. è®¡ç®—每个设备的总计,并补充序号
        List<DeviceMonthlyRepairTableDTO> resultList = new ArrayList<>();
        for (DeviceMonthlyRepairTableDTO tableDTO : deviceTableMap.values()) {
            // è®¡ç®—总计:1-12月金额相加
            BigDecimal total = Stream.of(
                            tableDTO.getMonth1(), tableDTO.getMonth2(), tableDTO.getMonth3(),
                            tableDTO.getMonth4(), tableDTO.getMonth5(), tableDTO.getMonth6(),
                            tableDTO.getMonth7(), tableDTO.getMonth8(), tableDTO.getMonth9(),
                            tableDTO.getMonth10(), tableDTO.getMonth11(), tableDTO.getMonth12()
                    )
                    .map(amt -> amt == null ? BigDecimal.ZERO : amt)
                    .reduce(BigDecimal.ZERO, BigDecimal::add);
            tableDTO.setTotal(total);
            resultList.add(tableDTO);
        }
        return resultList;
    }
    @Override
    public List<RepairAmountGroupDTO> getRepairAmountByYear(String year) {
        List<RepairAmountGroupDTO> repairAmountGroupDTOS = deviceMaintenanceMapper.groupByDeviceLedger(year);
        Map<Long, String> deviceNameMap = new HashMap<>(); // key:deviceLedgerId, value:deviceName
        // ï¼ˆå®žé™…需调用设备台账的Mapper查询:deviceNameMap = deviceLedgerMapper.listAll().stream().collect(Collectors.toMap(DeviceLedger::getId, DeviceLedger::getDeviceName)))
        deviceNameMap = deviceLedgerMapper.selectList(null)
                .stream()
                .collect(Collectors.toMap(DeviceLedger::getId, DeviceLedger::getDeviceName));
        if(CollectionUtils.isEmpty(deviceNameMap)){
            return Collections.emptyList();
        }
        Map<Long, String> finalDeviceNameMap = deviceNameMap;
        repairAmountGroupDTOS.forEach(dto -> {
            dto.setDeviceName(finalDeviceNameMap.get(dto.getDeviceLedgerId()));
        });
        return repairAmountGroupDTOS;
    }
}
src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java
@@ -6,8 +6,11 @@
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.device.dto.DeviceDefectRecordDto;
import com.ruoyi.device.dto.DeviceMonthlyRepairTableDTO;
import com.ruoyi.device.dto.DeviceRepairDto;
import com.ruoyi.device.dto.RepairAmountGroupDTO;
import com.ruoyi.device.execl.DeviceRepairExeclDto;
import com.ruoyi.device.mapper.DeviceLedgerMapper;
import com.ruoyi.device.mapper.DeviceRepairMapper;
import com.ruoyi.device.pojo.DeviceLedger;
import com.ruoyi.device.pojo.DeviceRepair;
@@ -19,11 +22,13 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Service
@AllArgsConstructor
@@ -47,6 +52,7 @@
        DeviceLedger byId = deviceLedgerService.getById(deviceRepair.getDeviceLedgerId());
        deviceRepair.setDeviceName(byId.getDeviceName());
        deviceRepair.setDeviceModel(byId.getDeviceModel());
        deviceRepair.setStatus(2);
        boolean save = this.save(deviceRepair);
        if (save){
            return AjaxResult.success();
@@ -82,7 +88,7 @@
            supplierManageList.stream().forEach(deviceRepair -> {
                DeviceRepairExeclDto deviceRepairExeclDto = new DeviceRepairExeclDto();
                BeanUtils.copyProperties(deviceRepair,deviceRepairExeclDto);
                deviceRepairExeclDto.setStatusStr(deviceRepair.getStatus() == 0 ? "待维修" : deviceRepair.getStatus() == 1 ? "完结" : "失败");
                deviceRepairExeclDto.setStatusStr(deviceRepair.getStatus() == 0 ? "待维修" : "完结");
                deviceLedgerExeclDtos.add(deviceRepairExeclDto);
            });
@@ -98,7 +104,7 @@
            supplierManageList.stream().forEach(deviceRepair -> {
                DeviceRepairExeclDto deviceRepairExeclDto = new DeviceRepairExeclDto();
                BeanUtils.copyProperties(deviceRepair,deviceRepairExeclDto);
                deviceRepairExeclDto.setStatusStr(deviceRepair.getStatus() == 0 ? "待维修" : deviceRepair.getStatus() == 1 ? "完结" : "失败");
                deviceRepairExeclDto.setStatusStr(deviceRepair.getStatus() == 0 ? "待维修" : "完结");
                deviceLedgerExeclDtos.add(deviceRepairExeclDto);
            });
@@ -114,4 +120,96 @@
        return deviceRepairMapper.detailById(id);
    }
    @Autowired
    private DeviceLedgerMapper deviceLedgerMapper;
    @Override
    public List<DeviceMonthlyRepairTableDTO> getMonthlyRepairAmountByYear(String year) {
        List<RepairAmountGroupDTO> repairAmountGroupDTOS = deviceRepairMapper.groupByMonthAndDeviceLedger(year);
        // 1. å…ˆé€šè¿‡è®¾å¤‡å°è´¦id关联设备名称(如果RepairAmountGroupDTO没有deviceName,需先查设备台账表)
        // è¿™é‡Œå‡è®¾ä½ èƒ½é€šè¿‡deviceLedgerId获取到deviceName,比如:
        Map<Long, String> deviceNameMap = new HashMap<>(); // key:deviceLedgerId, value:deviceName
        // ï¼ˆå®žé™…需调用设备台账的Mapper查询:deviceNameMap = deviceLedgerMapper.listAll().stream().collect(Collectors.toMap(DeviceLedger::getId, DeviceLedger::getDeviceName)))
        deviceNameMap = deviceLedgerMapper.selectList(null)
                .stream()
                .collect(Collectors.toMap(DeviceLedger::getId, DeviceLedger::getDeviceName));
        if(CollectionUtils.isEmpty(deviceNameMap)){
            return Collections.emptyList();
        }
        // 2. æŒ‰è®¾å¤‡åç§°åˆ†ç»„,存储每个设备的各月金额
        Map<String, DeviceMonthlyRepairTableDTO> deviceTableMap = new HashMap<>();
        for (RepairAmountGroupDTO dto : repairAmountGroupDTOS) {
            // æ‹†åˆ†repairYearMonth为月份(如"2025-01" â†’ "01" â†’ 1)
            String yearMonth = dto.getRepairYearMonth(); // æ ¼å¼ï¼šyyyy-MM
            int month = Integer.parseInt(yearMonth); // æå–MM并转成数字(1-12)
            // èŽ·å–è®¾å¤‡åç§°
            String deviceName = deviceNameMap.get(dto.getDeviceLedgerId());
            if (deviceName == null) {
                deviceName = "未知设备"; // å…œåº•
            }
            // ä»ŽMap中获取该设备的表格DTO,不存在则初始化
            DeviceMonthlyRepairTableDTO tableDTO = deviceTableMap.getOrDefault(deviceName, new DeviceMonthlyRepairTableDTO());
            tableDTO.setDeviceName(deviceName);
            // æ ¹æ®æœˆä»½å¡«å……金额(BigDecimal默认0,避免null)
            BigDecimal amount = dto.getTotalRepairPrice() == null ? BigDecimal.ZERO : dto.getTotalRepairPrice();
            switch (month) {
                case 1: tableDTO.setMonth1(amount); break;
                case 2: tableDTO.setMonth2(amount); break;
                case 3: tableDTO.setMonth3(amount); break;
                case 4: tableDTO.setMonth4(amount); break;
                case 5: tableDTO.setMonth5(amount); break;
                case 6: tableDTO.setMonth6(amount); break;
                case 7: tableDTO.setMonth7(amount); break;
                case 8: tableDTO.setMonth8(amount); break;
                case 9: tableDTO.setMonth9(amount); break;
                case 10: tableDTO.setMonth10(amount); break;
                case 11: tableDTO.setMonth11(amount); break;
                case 12: tableDTO.setMonth12(amount); break;
            }
            // é‡æ–°æ”¾å…¥Map
            deviceTableMap.put(deviceName, tableDTO);
        }
        // 3. è®¡ç®—每个设备的总计,并补充序号
        List<DeviceMonthlyRepairTableDTO> resultList = new ArrayList<>();
        for (DeviceMonthlyRepairTableDTO tableDTO : deviceTableMap.values()) {
            // è®¡ç®—总计:1-12月金额相加
            BigDecimal total = Stream.of(
                            tableDTO.getMonth1(), tableDTO.getMonth2(), tableDTO.getMonth3(),
                            tableDTO.getMonth4(), tableDTO.getMonth5(), tableDTO.getMonth6(),
                            tableDTO.getMonth7(), tableDTO.getMonth8(), tableDTO.getMonth9(),
                            tableDTO.getMonth10(), tableDTO.getMonth11(), tableDTO.getMonth12()
                    )
                    .map(amt -> amt == null ? BigDecimal.ZERO : amt)
                    .reduce(BigDecimal.ZERO, BigDecimal::add);
            tableDTO.setTotal(total);
            resultList.add(tableDTO);
        }
        return resultList;
    }
    @Override
    public List<RepairAmountGroupDTO> getRepairAmountByYear(String year) {
        List<RepairAmountGroupDTO> repairAmountGroupDTOS = deviceRepairMapper.groupByDeviceLedger(year);
        Map<Long, String> deviceNameMap = new HashMap<>(); // key:deviceLedgerId, value:deviceName
        // ï¼ˆå®žé™…需调用设备台账的Mapper查询:deviceNameMap = deviceLedgerMapper.listAll().stream().collect(Collectors.toMap(DeviceLedger::getId, DeviceLedger::getDeviceName)))
        deviceNameMap = deviceLedgerMapper.selectList(null)
                .stream()
                .collect(Collectors.toMap(DeviceLedger::getId, DeviceLedger::getDeviceName));
        if(CollectionUtils.isEmpty(deviceNameMap)){
            return Collections.emptyList();
        }
        Map<Long, String> finalDeviceNameMap = deviceNameMap;
        repairAmountGroupDTOS.forEach(dto -> {
            dto.setDeviceName(finalDeviceNameMap.get(dto.getDeviceLedgerId()));
        });
        return repairAmountGroupDTOS;
    }
}
src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskJob.java
@@ -37,7 +37,7 @@
        try {
            // 3. å°è¯•查询你的业务数据
            // é€šè¿‡JDBC模板查询定时任务信息,使用参数化查询防止SQL注入
            String yourSql = "SELECT * FROM maintenance_task where id = ?";
            String yourSql = "SELECT * FROM maintenance_task where id = ? and status = '审核通过'";
            List<MaintenanceTask> tasks = jdbcTemplate.query(
                    yourSql,
                    new BeanPropertyRowMapper<>(MaintenanceTask.class),
@@ -49,8 +49,8 @@
            }
            // 2. åˆ›å»ºå¹¶ä¿å­˜å·¡æ£€ä»»åŠ¡è®°å½• - è¿™å°±æ˜¯æ‚¨æä¾›çš„代码应该放的位置
            DeviceMaintenance deviceMaintenance = createInspectionTask(timingTask);
            deviceMaintenanceService.save(deviceMaintenance);
            List<DeviceMaintenance> deviceMaintenance = createInspectionTask(timingTask);
            deviceMaintenanceService.saveBatch(deviceMaintenance);
            // 3. æ›´æ–°å®šæ—¶ä»»åŠ¡çš„æ‰§è¡Œæ—¶é—´
            if (!tasks.isEmpty()) {
@@ -84,24 +84,33 @@
    }
    // è¿™å°±æ˜¯æ‚¨æä¾›çš„代码封装成的方法
    private DeviceMaintenance createInspectionTask(MaintenanceTask timingTask) {
    private List<DeviceMaintenance> createInspectionTask(MaintenanceTask timingTask) {
        List<DeviceMaintenance> inspectionTasks = new java.util.ArrayList<>();
        String[] split = timingTask.getTaskIds().split(",");
        String[] split1 = timingTask.getTaskName().split(",");
        String[] split2 = timingTask.getDeviceModel().split(",");
        int i = 0;
        for (String s : split) {
        DeviceMaintenance inspectionTask = new DeviceMaintenance();
        // å¤åˆ¶åŸºæœ¬å±žæ€§
        inspectionTask.setDeviceName(timingTask.getTaskName());
            inspectionTask.setDeviceName(split1[i]);
        inspectionTask.setMaintenanceTaskId(timingTask.getId());
        inspectionTask.setDeviceLedgerId(timingTask.getTaskId());
            inspectionTask.setDeviceLedgerId(Long.parseLong(s));
        inspectionTask.setMaintenancePlanTime(LocalDateTime.now());
        inspectionTask.setFrequencyType(timingTask.getFrequencyType());
        inspectionTask.setFrequencyDetail(timingTask.getFrequencyDetail());
        inspectionTask.setTenantId(timingTask.getTenantId());
        inspectionTask.setStatus(0);
        inspectionTask.setDeviceModel(timingTask.getDeviceModel());
            inspectionTask.setDeviceModel(split2[i]);
        inspectionTask.setCreateUser(Integer.parseInt(timingTask.getRegistrantId().toString()));
        inspectionTask.setUpdateTime(LocalDateTime.now());
        inspectionTask.setCreateTime(LocalDateTime.now());
        inspectionTask.setUpdateUser(Integer.parseInt(timingTask.getRegistrantId().toString()));
        return inspectionTask;
            i++;
            inspectionTasks.add(inspectionTask);
        }
        return inspectionTasks;
    }
src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskServiceImpl.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.device.mapper.MaintenanceTaskMapper;
import com.ruoyi.device.pojo.MaintenanceTask;
@@ -73,6 +74,9 @@
    @Override
    public AjaxResult add(MaintenanceTask maintenanceTask) {
        if(StringUtils.isEmpty(maintenanceTask.getAuditName())) {
            return AjaxResult.warn("请填写审核人");
        }
        maintenanceTask.setActive(true);
        // è®¡ç®—首次执行时间
        TimingTask task = new TimingTask();
@@ -80,6 +84,7 @@
        task.setFrequencyDetail(maintenanceTask.getFrequencyDetail());
        LocalDateTime firstExecutionTime = timingTaskService.calculateFirstExecutionTime(task);
        maintenanceTask.setNextExecutionTime(firstExecutionTime);
        maintenanceTask.setStatus("待审核");
        int insert = maintenanceTaskMapper.insert(maintenanceTask);
        if (insert > 0) {
            maintenanceTaskScheduler.scheduleMaintenanceTask(maintenanceTask);
src/main/java/com/ruoyi/inspectiontask/controller/InspectionTaskController.java
@@ -15,6 +15,7 @@
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * @author :yys
@@ -58,7 +59,7 @@
    @PostMapping("/addOrEditInspectionTask")
    @ApiOperation("巡检任务表新增修改")
    @Transactional(rollbackFor = Exception.class)
    public R addOrEditInspectionTask(@RequestBody InspectionTaskDto inspectionTaskDto) {
    public R addOrEditInspectionTask(@RequestBody InspectionTaskDto inspectionTaskDto) throws IOException {
        return R.ok(inspectionTaskService.addOrEditInspectionTask(inspectionTaskDto));
    }
src/main/java/com/ruoyi/inspectiontask/controller/TimingTaskController.java
@@ -3,8 +3,6 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.framework.web.domain.R;
import com.ruoyi.inspectiontask.dto.TimingTaskDto;
@@ -59,7 +57,6 @@
     */
    @PostMapping("/addOrEditTimingTask")
    @ApiOperation(value = "新增修改定时任务")
    @Log(title = "定时任务", businessType = BusinessType.INSERT)
    public R addOrEditTimingTask(@RequestBody TimingTaskDto timingTaskDto) throws SchedulerException {
        return R.ok(timingTaskService.addOrEditTimingTask(timingTaskDto));
    }
@@ -69,7 +66,6 @@
     */
    @DeleteMapping("/delTimingTask")
    @ApiOperation(value = "删除定时任务")
    @Log(title = "定时任务", businessType = BusinessType.DELETE)
    public R remove(@RequestBody Long[] ids) {
        return R.ok(timingTaskService.delByIds(ids));
    }
src/main/java/com/ruoyi/inspectiontask/dto/InspectionTaskDto.java
@@ -1,8 +1,7 @@
package com.ruoyi.inspectiontask.dto;
import com.ruoyi.basic.dto.StorageBlobDTO;
import com.ruoyi.basic.pojo.StorageAttachment;
import com.ruoyi.inspectiontask.pojo.InspectionTask;
import com.ruoyi.sales.pojo.CommonFile;
import lombok.Data;
import java.util.List;
@@ -10,11 +9,22 @@
@Data
public class InspectionTaskDto extends InspectionTask {
    private List<StorageBlobDTO> storageBlobDTO;
    private List<StorageBlobDTO> beforeProduction;
    private List<StorageBlobDTO> afterProduction;
    private List<StorageBlobDTO> productionIssues;
//    private List<StorageBlobDTO> storageBlobDTO;
//    private List<StorageBlobDTO> beforeProduction;
//    private List<StorageBlobDTO> afterProduction;
//    private List<StorageBlobDTO> productionIssues;
    private List<StorageAttachment> attachments;
    private List<String> tempFileIds;
    private List<CommonFile> commonFileList; //生产中
    private List<CommonFile> commonFileListAfter;  //生产后
    private List<CommonFile> commonFileListBefore; //生产前
    private String searchAll;
    private String status;
    private String dateStr;
//    private List<StorageAttachment> attachments;
}
src/main/java/com/ruoyi/inspectiontask/pojo/InspectionTask.java
@@ -89,6 +89,4 @@
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
    @TableField(exist = false)
    private String dateStr;
}
src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java
@@ -4,10 +4,12 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
@@ -20,6 +22,9 @@
@ApiModel
@TableName("timing_task")
public class TimingTask {
    @TableField(exist = false)
    private String searchAll;
    private static final long serialVersionUID = 1L;
@@ -35,6 +40,9 @@
    @ApiModelProperty(value = "设备id")
    private Integer taskId;
    @ApiModelProperty(value = "批量设备id")
    private String taskIds;
    @ApiModelProperty(value = "巡检人")
    @Excel(name = "执行巡检人")
@@ -81,17 +89,14 @@
    @ApiModelProperty(value = "软删除标志,0=未删除,1=已删除")
    private Integer deleted;
    @TableField(exist = false)
    private String dateStr;
    @ApiModelProperty(value = "创建该记录的用户")
    @TableField(fill = com.baomidou.mybatisplus.annotation.FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty(value = "记录创建时间")
    @TableField(fill = com.baomidou.mybatisplus.annotation.FieldFill.INSERT)
//    @JsonFormat(pattern = "yyyy-MM-dd")
//    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @ApiModelProperty(value = "最后修改该记录的用户")
src/main/java/com/ruoyi/inspectiontask/service/InspectionTaskService.java
@@ -6,6 +6,8 @@
import com.ruoyi.inspectiontask.dto.InspectionTaskDto;
import com.ruoyi.inspectiontask.pojo.InspectionTask;
import java.io.IOException;
/**
 * @author :yys
 * @date : 2025/9/19 10:49
@@ -14,7 +16,7 @@
    IPage<InspectionTaskDto> selectInspectionTaskList(Page<InspectionTask> page, InspectionTaskDto inspectionTaskDto);
    int addOrEditInspectionTask(InspectionTaskDto inspectionTaskDto);
    int addOrEditInspectionTask(InspectionTaskDto inspectionTaskDto) throws IOException;
    int delByIds(Long[] ids);
}
src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java
@@ -8,9 +8,9 @@
import com.ruoyi.basic.dto.StorageBlobDTO;
import com.ruoyi.basic.mapper.StorageAttachmentMapper;
import com.ruoyi.basic.mapper.StorageBlobMapper;
import com.ruoyi.basic.pojo.StorageAttachment;
import com.ruoyi.basic.pojo.StorageBlob;
import com.ruoyi.basic.service.StorageAttachmentService;
import com.ruoyi.common.enums.FileNameType;
import com.ruoyi.common.utils.MinioUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
@@ -21,17 +21,18 @@
import com.ruoyi.inspectiontask.service.InspectionTaskService;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
import com.ruoyi.sales.mapper.CommonFileMapper;
import com.ruoyi.sales.pojo.CommonFile;
import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import static com.ruoyi.common.constant.StorageAttachmentConstants.StorageAttachmentFile;
import static com.ruoyi.common.enums.StorageAttachmentRecordType.InspectionTasks;
/**
 * @author :yys
@@ -60,9 +61,20 @@
    @Autowired
    private SysUserMapper sysUserMapper;
    @Autowired
    private CommonFileServiceImpl commonFileService;
    @Autowired
    private CommonFileMapper commonFileMapper;
    @Override
    public IPage<InspectionTaskDto> selectInspectionTaskList(Page<InspectionTask> page, InspectionTaskDto inspectionTaskDto) {
        LambdaQueryWrapper<InspectionTask> queryWrapper = new LambdaQueryWrapper<>();
        if(inspectionTaskDto != null){
            if(StringUtils.isNotEmpty(inspectionTaskDto.getSearchAll())){
                queryWrapper.like(InspectionTask::getTaskName, inspectionTaskDto.getSearchAll());
            }
        }
        queryWrapper.orderByDesc(InspectionTask::getCreateTime);
        IPage<InspectionTask> entityPage = inspectionTaskMapper.selectPage(page, queryWrapper);
@@ -82,9 +94,6 @@
        } else {
            sysUserMap = new HashMap<>();
        }
        //巡检人ids
        List<String> inspectorIds = entityPage.getRecords().stream().map(InspectionTask::getInspectorId).collect(Collectors.toList());
        //获取所有不重复的用户ID
        Set<Long> allUserIds = entityPage.getRecords().stream()
                .map(InspectionTask::getInspectorId) // èŽ·å–"2,3"这样的字符串
@@ -111,22 +120,13 @@
                        (existing, replacement) -> existing));
        //处理附件
        Map<Long, List<StorageAttachment>> attachmentsMap = storageAttachmentMapper.selectList(new LambdaQueryWrapper<StorageAttachment>().in(StorageAttachment::getRecordId, ids)
                        .eq(StorageAttachment::getRecordType, InspectionTasks.ordinal()))
                .stream()
                .collect(Collectors.groupingBy(StorageAttachment::getRecordId));
        //  æ‰¹é‡æŸ¥è¯¢æ‰€æœ‰éœ€è¦çš„æ–‡ä»¶æ•°æ®
        Set<Long> blobIds = attachmentsMap.values()
                .stream()
                .flatMap(List::stream)
                .map(StorageAttachment::getStorageBlobId)
                .collect(Collectors.toSet());
        Map<Long, StorageBlob> blobMap = blobIds.isEmpty()
                ? Collections.emptyMap()
                : storageBlobMapper.selectList(new LambdaQueryWrapper<StorageBlob>().in(StorageBlob::getId, blobIds))
                .stream()
                .collect(Collectors.toMap(StorageBlob::getId, Function.identity()));
        List<CommonFile> commonFiles = commonFileMapper.selectList(new LambdaQueryWrapper<CommonFile>()
                .in(CommonFile::getCommonId, ids)
                .in(CommonFile::getType, Arrays.asList(FileNameType.INSPECTION.getValue(), FileNameType.INSPECTION_PRODUCTION_BEFORE.getValue(), FileNameType.INSPECTION_PRODUCTION_AFTER.getValue())));
        if(commonFiles == null){
            commonFiles = new ArrayList<>();
        }
        List<CommonFile> finalCommonFiles1 = commonFiles;
        List<InspectionTaskDto> dtoList = entityPage.getRecords().stream().map(inspectionTask -> {
            InspectionTaskDto dto = new InspectionTaskDto();
            BeanUtils.copyProperties(inspectionTask, dto);  // å¤åˆ¶ä¸»å¯¹è±¡å±žæ€§
@@ -153,39 +153,15 @@
            }
            dto.setDateStr(inspectionTask.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
            // åˆå§‹åŒ–三个附件列表
            dto.setBeforeProduction(new ArrayList<>());
            dto.setAfterProduction(new ArrayList<>());
            dto.setProductionIssues(new ArrayList<>());
            // å¤„理附件分类
            Optional.ofNullable(attachmentsMap.get(inspectionTask.getId()))
                    .orElse(Collections.emptyList())
                    .forEach(attachment -> {
                        StorageBlob blob = blobMap.get(attachment.getStorageBlobId());
                        if (blob != null) {
                            // åˆ›å»ºé™„ä»¶DTO
                            StorageBlobDTO blobDto = createBlobDto(blob);
                            // æ ¹æ®type分类
                            switch ((int) blob.getType().longValue()) {
                                case 0:
                                    dto.getBeforeProduction().add(blobDto);
                                    break;
                                case 1:
                                    dto.getAfterProduction().add(blobDto);
                                    break;
                                case 2:
                                    dto.getProductionIssues().add(blobDto);
                                    break;
                                default:
                                    // å¯é€‰ï¼šè®°å½•未分类类型
                                    break;
            List<CommonFile> finalCommonFiles = finalCommonFiles1.stream().filter(commonFile -> commonFile.getCommonId().equals(inspectionTask.getId())).collect(Collectors.toList());
            dto.setCommonFileList(finalCommonFiles.stream().filter(commonFile -> commonFile.getType().equals(FileNameType.INSPECTION.getValue())).collect(Collectors.toList()));
            dto.setCommonFileListAfter(finalCommonFiles.stream().filter(commonFile -> commonFile.getType().equals(FileNameType.INSPECTION_PRODUCTION_AFTER.getValue())).collect(Collectors.toList()));
            dto.setCommonFileListBefore(finalCommonFiles.stream().filter(commonFile -> commonFile.getType().equals(FileNameType.INSPECTION_PRODUCTION_BEFORE.getValue())).collect(Collectors.toList()));
            if(CollectionUtils.isNotEmpty(dto.getCommonFileList()) || CollectionUtils.isNotEmpty(dto.getCommonFileListAfter()) || CollectionUtils.isNotEmpty(dto.getCommonFileListBefore())){
                dto.setStatus("已巡检");
            }else{
                dto.setStatus("未巡检");
                            }
                        }
                    });
            return dto;
        }).collect(Collectors.toList());
@@ -219,7 +195,7 @@
    }
    @Override
    public int addOrEditInspectionTask(InspectionTaskDto inspectionTaskDto) {
    public int addOrEditInspectionTask(InspectionTaskDto inspectionTaskDto) throws IOException {
        InspectionTask inspectionTask = new InspectionTask();
        BeanUtils.copyProperties(inspectionTaskDto, inspectionTask);
        inspectionTask.setRegistrantId(SecurityUtils.getLoginUser().getUserId());
@@ -231,20 +207,21 @@
            i = inspectionTaskMapper.updateById(inspectionTask);
        }
        if (inspectionTaskDto.getStorageBlobDTO() != null && !inspectionTaskDto.getStorageBlobDTO().isEmpty()) {
            List<StorageAttachment> attachments = new ArrayList<>();
            for (StorageBlobDTO storageBlobDTO : inspectionTaskDto.getStorageBlobDTO()) {
                StorageAttachment storageAttachment = new StorageAttachment(
                        StorageAttachmentFile,
                        (long) InspectionTasks.ordinal(),
                        inspectionTask.getId()
                );
                storageAttachment.setStorageBlobDTO(storageBlobDTO);
                attachments.add(storageAttachment);
            }
            storageAttachmentService.saveStorageAttachment(attachments, inspectionTask.getId(), InspectionTasks, StorageAttachmentFile);
        }
//        if (inspectionTaskDto.getStorageBlobDTO() != null && !inspectionTaskDto.getStorageBlobDTO().isEmpty()) {
//            List<StorageAttachment> attachments = new ArrayList<>();
//
//            for (StorageBlobDTO storageBlobDTO : inspectionTaskDto.getStorageBlobDTO()) {
//                StorageAttachment storageAttachment = new StorageAttachment(
//                        StorageAttachmentFile,
//                        (long) InspectionTasks.ordinal(),
//                        inspectionTask.getId()
//                );
//                storageAttachment.setStorageBlobDTO(storageBlobDTO);
//                attachments.add(storageAttachment);
//            }
//            storageAttachmentService.saveStorageAttachment(attachments, inspectionTask.getId(), InspectionTasks, StorageAttachmentFile);
//        }
        commonFileService.migrateTempFilesToFormal(inspectionTask.getId(),inspectionTaskDto.getTempFileIds());
        return i;
    }
@@ -254,6 +231,9 @@
        if (ids == null || ids.length == 0) {
            return 0;
        }
        commonFileService.deleteByBusinessIds(Arrays.asList(ids),FileNameType.INSPECTION.getValue());
        commonFileService.deleteByBusinessIds(Arrays.asList(ids),FileNameType.INSPECTION_PRODUCTION_BEFORE.getValue());
        commonFileService.deleteByBusinessIds(Arrays.asList(ids),FileNameType.INSPECTION_PRODUCTION_AFTER.getValue());
        return inspectionTaskMapper.deleteBatchIds(Arrays.asList(ids));
    }
src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
@@ -11,7 +11,6 @@
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import java.io.Serializable;
import java.time.DayOfWeek;
import java.time.LocalDateTime;
import java.time.LocalTime;
@@ -22,8 +21,7 @@
@Component
@DisallowConcurrentExecution // ç¦æ­¢å¹¶å‘执行同一个Job
public class TimingTaskJob implements Job, Serializable {
    private static final long serialVersionUID = 1L; // å¿…须定义序列化ID
public class TimingTaskJob implements Job {
    @Autowired
    private TimingTaskMapper timingTaskMapper;
@@ -62,8 +60,11 @@
//            }
            // 2. åˆ›å»ºå¹¶ä¿å­˜å·¡æ£€ä»»åŠ¡è®°å½• - è¿™å°±æ˜¯æ‚¨æä¾›çš„代码应该放的位置
            InspectionTask inspectionTask = createInspectionTask(timingTask);
            inspectionTaskMapper.insert(inspectionTask);
            List<InspectionTask> inspectionTask = createInspectionTask(timingTask);
            for (InspectionTask task : inspectionTask) {
                inspectionTaskMapper.insert(task);
            }
            // 3. æ›´æ–°å®šæ—¶ä»»åŠ¡çš„æ‰§è¡Œæ—¶é—´
            if (!tasks.isEmpty()) {
@@ -103,12 +104,16 @@
    }
    // è¿™å°±æ˜¯æ‚¨æä¾›çš„代码封装成的方法
    private InspectionTask createInspectionTask(TimingTask timingTask) {
    private List<InspectionTask> createInspectionTask(TimingTask timingTask) {
        List<InspectionTask> inspectionTasks = new java.util.ArrayList<>();
        String[] split = timingTask.getTaskIds().split(",");
        String[] split1 = timingTask.getTaskName().split(",");
        int i = 0;
        for (String s : split) {
        InspectionTask inspectionTask = new InspectionTask();
        // å¤åˆ¶åŸºæœ¬å±žæ€§
        inspectionTask.setTaskName(timingTask.getTaskName());
        inspectionTask.setTaskId(timingTask.getTaskId());
            inspectionTask.setTaskName(split1[i]);
            inspectionTask.setTaskId(Integer.parseInt(s));
        inspectionTask.setInspectorId(timingTask.getInspectorIds());
        inspectionTask.setInspectionLocation(timingTask.getInspectionLocation());
        inspectionTask.setRemarks("自动生成自定时任务ID: " + timingTask.getId());
@@ -116,8 +121,11 @@
        inspectionTask.setFrequencyType(timingTask.getFrequencyType());
        inspectionTask.setFrequencyDetail(timingTask.getFrequencyDetail());
        inspectionTask.setTenantId(timingTask.getTenantId());
            inspectionTasks.add(inspectionTask);
        }
        return inspectionTask;
        return inspectionTasks;
    }
src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java
@@ -52,19 +52,8 @@
                        ? Date.from(task.getNextExecutionTime().atZone(ZoneId.systemDefault()).toInstant())
                        : new Date())
                .build();
        // æž„建新触发器
//        Trigger newTrigger = TriggerBuilder.newTrigger()
//                .withIdentity(triggerKey)
//                .withDescription(task.getTaskName())
//                .withSchedule(CronScheduleBuilder.cronSchedule(convertToCronExpression(task)))
//                .startAt(Date.from(task.getNextExecutionTime().atZone(ZoneId.systemDefault()).toInstant()))
//                .forJob(oldTrigger.getJobKey())
//                .build();
        scheduler.rescheduleJob(triggerKey, newTrigger);
    }
    /**
     * æš‚停任务
     */
@@ -88,8 +77,8 @@
        try {
            JobKey jobKey = new JobKey("timingTask_" + taskId);
            scheduler.deleteJob(jobKey);
        }catch (SchedulerException e){
            throw new RuntimeException(e);
        }catch (Exception e){
            throw new RuntimeException(e.getMessage());
        }
    }
@@ -114,6 +103,7 @@
                .build();
    }
    private Trigger buildJobTrigger(TimingTask task, JobDetail jobDetail) {
        // 1. æž„建唯一TriggerKey(基于任务ID)
        TriggerKey triggerKey = new TriggerKey("trigger_" + task.getId());
@@ -136,6 +126,7 @@
                        : new Date())
                .build();
    }
    private String convertToCronExpression(TimingTask task) {
        // å‚数校验
        if (task == null || task.getFrequencyType() == null || task.getFrequencyDetail() == null) {
src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
@@ -1,5 +1,6 @@
package com.ruoyi.inspectiontask.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -47,7 +48,13 @@
    @Override
    public IPage<TimingTaskDto> selectTimingTaskList(Page<TimingTask> page, TimingTask timingTask) {
        // 1. å…ˆåˆ†é¡µæŸ¥è¯¢å®šæ—¶ä»»åŠ¡æ•°æ®
        IPage<TimingTask> taskPage = timingTaskMapper.selectPage(page, null);
        LambdaQueryWrapper<TimingTask> timingTaskLambdaQueryWrapper = new LambdaQueryWrapper<>();
        if(timingTask != null){
            if(StringUtils.isNotEmpty(timingTask.getSearchAll())){
                timingTaskLambdaQueryWrapper.like(TimingTask::getTaskName, timingTask.getSearchAll());
            }
        }
        IPage<TimingTask> taskPage = timingTaskMapper.selectPage(page, timingTaskLambdaQueryWrapper);
        // 2. å¦‚果没有数据,直接返回空分页
        if (taskPage.getRecords().isEmpty()) {
@@ -66,7 +73,6 @@
        // æ”¶é›†å·¡æ£€äººID(多个ID以逗号分隔)
        taskPage.getRecords().forEach(task -> {
            task.setDateStr(task.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
            if (StringUtils.isNotBlank(task.getInspectorIds())) {
                Arrays.stream(task.getInspectorIds().split(","))
                        .filter(StringUtils::isNotBlank)
@@ -119,16 +125,7 @@
    public int addOrEditTimingTask(TimingTaskDto timingTaskDto) throws SchedulerException {
        TimingTask timingTask = new TimingTask();
        BeanUtils.copyProperties(timingTaskDto, timingTask);
        // 1. è§£æžå­—符串为 LocalDate(只包含年月日)
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate localDate = LocalDate.parse(timingTaskDto.getDateStr(), formatter);
        // 2. èŽ·å–å½“å‰ç³»ç»Ÿçš„ LocalTime(包含时分秒)
        LocalTime currentTime = LocalTime.now();
        // 3. åˆå¹¶ LocalDate å’Œå½“前 LocalTime ä¸º LocalDateTime
        LocalDateTime localDateTime = LocalDateTime.of(localDate, currentTime);
        timingTask.setCreateTime(localDateTime);
        // è®¾ç½®åˆ›å»ºäººä¿¡æ¯å’Œé»˜è®¤å€¼
        if (Objects.isNull(timingTaskDto.getId())) {
            timingTask.setRegistrationDate(LocalDate.now());
@@ -137,6 +134,7 @@
            // è®¡ç®—首次执行时间
            LocalDateTime firstExecutionTime = calculateFirstExecutionTime(timingTask);
            timingTask.setNextExecutionTime(firstExecutionTime);
            int result = timingTaskMapper.insert(timingTask);
            if (result > 0) {
                // æ–°å¢žæˆåŠŸåŽæ·»åŠ åˆ°è°ƒåº¦å™¨
@@ -144,8 +142,6 @@
            }
            return result;
        } else {
            int result = timingTaskMapper.updateById(timingTask);
            if (result > 0) {
                // æ›´æ–°æˆåŠŸåŽé‡æ–°è°ƒåº¦ä»»åŠ¡
src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerController.java
@@ -3,8 +3,6 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.equipmentenergyconsumption.pojo.EquipmentEnergyConsumption;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.controller.BaseController;
@@ -14,7 +12,6 @@
import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedger;
import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedgerRecord;
import com.ruoyi.measuringinstrumentledger.service.MeasuringInstrumentLedgerService;
import com.ruoyi.measuringinstrumentledger.service.impl.MeasuringInstrumentLedgerServiceImpl;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
import io.swagger.annotations.Api;
src/main/java/com/ruoyi/measuringinstrumentledger/controller/SparePartsController.java
@@ -7,7 +7,6 @@
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.measuringinstrumentledger.dto.SparePartsDto;
import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedgerRecord;
import com.ruoyi.measuringinstrumentledger.pojo.SpareParts;
import com.ruoyi.measuringinstrumentledger.service.SparePartsService;
import io.swagger.annotations.Api;
src/main/java/com/ruoyi/measuringinstrumentledger/dto/MeasuringInstrumentLedgerDto.java
@@ -1,8 +1,6 @@
package com.ruoyi.measuringinstrumentledger.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
src/main/java/com/ruoyi/measuringinstrumentledger/pojo/SpareParts.java
@@ -6,7 +6,6 @@
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
@@ -22,21 +21,6 @@
     * å¤‡ä»¶åˆ†ç±»ç¼–号
     */
    private String sparePartsNo;
    /**
     * å¤‡ä»¶ä»·æ ¼
     */
    private BigDecimal price;
    /**
     * è®¾å¤‡id集合(字符串,隔开)
     */
    private String deviceIds;
    /**
     * è®¾å¤‡åç§°é›†åˆï¼ˆå­—符串,隔开)
     */
    @TableField(exist = false)
    private String deviceNameStr;
    /**
     * å¤‡ä»¶çˆ¶id
     */
src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerRecordServiceImpl.java
@@ -21,7 +21,6 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@@ -35,7 +34,6 @@
import java.util.Date;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
/**
 * @author :yys
src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerServiceImpl.java
@@ -8,7 +8,6 @@
import com.ruoyi.common.enums.FileNameType;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.measuringinstrumentledger.dto.MeasuringInstrumentLedgerDto;
import com.ruoyi.measuringinstrumentledger.mapper.MeasuringInstrumentLedgerMapper;
import com.ruoyi.measuringinstrumentledger.mapper.MeasuringInstrumentLedgerRecordMapper;
src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/SparePartsServiceImpl.java
@@ -1,14 +1,9 @@
package com.ruoyi.measuringinstrumentledger.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.device.mapper.DeviceLedgerMapper;
import com.ruoyi.device.pojo.DeviceLedger;
import com.ruoyi.measuringinstrumentledger.dto.SparePartsDto;
import com.ruoyi.measuringinstrumentledger.mapper.SparePartsMapper;
import com.ruoyi.measuringinstrumentledger.pojo.SpareParts;
@@ -20,29 +15,14 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
public class SparePartsServiceImpl extends ServiceImpl<SparePartsMapper, SpareParts> implements SparePartsService {
    @Autowired
    private SparePartsMapper sparePartsMapper;
    @Autowired
    private DeviceLedgerMapper deviceLedgerMapper;
    @Override
    public IPage<SparePartsDto> listPage(Page page, SpareParts spareParts) {
        IPage<SparePartsDto> sparePartsDtoIPage = sparePartsMapper.listPage(page, spareParts);
        for (SparePartsDto record : sparePartsDtoIPage.getRecords()) {
            if(StringUtils.isNotEmpty(record.getDeviceIds())){
                List<String> deviceIds = StringUtils.str2List(record.getDeviceIds(), ",", true, true);
                List<DeviceLedger> deviceLedgers = deviceLedgerMapper.selectBatchIds(deviceIds);
                if(CollectionUtils.isNotEmpty(deviceLedgers)){
                    record.setDeviceNameStr(deviceLedgers.stream().map(DeviceLedger::getDeviceName).collect(Collectors.joining( ",")));
                }
            }
        }
        return sparePartsDtoIPage;
        return sparePartsMapper.listPage(page,spareParts);
    }
    @Override
src/main/java/com/ruoyi/sales/service/impl/CommonFileServiceImpl.java
@@ -1,5 +1,6 @@
package com.ruoyi.sales.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.other.mapper.TempFileMapper;
@@ -151,4 +152,14 @@
            }
        }
    }
    public void deleteByBusinessId(Long businessId,Integer type) {
        commonFileMapper.delete(new LambdaQueryWrapper<CommonFile>().eq(CommonFile::getCommonId, businessId)
                .eq(CommonFile::getType, type));
    }
    public void deleteByBusinessIds(List<Long> businessId,Integer type) {
        commonFileMapper.delete(new LambdaQueryWrapper<CommonFile>().in(CommonFile::getCommonId, businessId)
                .eq(CommonFile::getType, type));
    }
}
src/main/resources/application-dev.yml
@@ -62,7 +62,7 @@
    druid:
      # ä¸»åº“数据源
      master:
        url: jdbc:mysql://localhost:3306/product-inventory-management?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        url: jdbc:mysql://localhost:3306/product-inventory-management-hxsj?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: root
        password: 123456
      # ä»Žåº“数据源