liyong
19 小时以前 af73f49872f899a1cb301ae6e3ee23ebc28daf20
2025-06-23 设备台账接口对接完成
已修改13个文件
已复制1个文件
已重命名1个文件
已添加9个文件
821 ■■■■ 文件已修改
src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/controller/DeviceRepairController.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/dto/DeviceLedgerDto.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/execl/DeviceLedgerExeclDto.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/execl/DeviceMaintenanceExeclDto.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/execl/DeviceRepairExeclDto.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/mapper/DeviceLedgerMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/pojo/DeviceLedger.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/pojo/DeviceRepair.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/service/IDeviceLedgerService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/service/IDeviceMaintenanceService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/controller/ReceiptPaymentController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/mapper/ReceiptPaymentMapper.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/device/DeviceLedgerMapper.xml 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/device/DeviceMaintenanceMapper.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sales/ReceiptPaymentMapper.xml 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.device.dto.DeviceLedgerDto;
import com.ruoyi.device.pojo.DeviceLedger;
import com.ruoyi.device.service.IDeviceLedgerService;
import com.ruoyi.framework.web.domain.AjaxResult;
@@ -26,13 +27,13 @@
    @ApiModelProperty("设备台账列表")
    @GetMapping("/page")
    public AjaxResult page(Page page , DeviceLedger deviceLedger) {
    public AjaxResult page(Page page , DeviceLedgerDto deviceLedger) {
        return AjaxResult.success(deviceLedgerService.queryPage(page,deviceLedger));
    }
    @PostMapping()
    @ApiModelProperty("添加设备台账")
    public AjaxResult add(DeviceLedger deviceLedger) {
    public AjaxResult add(@RequestBody DeviceLedger deviceLedger) {
        return deviceLedgerService.saveDeviceLedger(deviceLedger);
    }
@@ -45,14 +46,13 @@
    @PutMapping ()
    @ApiModelProperty("修改设备台账")
    public AjaxResult update(DeviceLedger deviceLedger) {
    public AjaxResult update(@RequestBody DeviceLedger deviceLedger) {
        return deviceLedgerService.updateDeviceLedger(deviceLedger);
    }
    @DeleteMapping("/{id}")
    @DeleteMapping("/{ids}")
    @ApiModelProperty("删除设备台账")
    public AjaxResult delete(@PathVariable ArrayList<Long> ids) {
    public AjaxResult delete(@PathVariable("ids") ArrayList<Long> ids) {
        boolean b = deviceLedgerService.removeBatchByIds(ids);
        if (!b) {
            return AjaxResult.error("删除失败");
src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,69 @@
package com.ruoyi.device.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.device.dto.DeviceMaintenanceDto;
import com.ruoyi.device.dto.DeviceRepairDto;
import com.ruoyi.device.pojo.DeviceMaintenance;
import com.ruoyi.device.pojo.DeviceRepair;
import com.ruoyi.device.service.IDeviceMaintenanceService;
import com.ruoyi.device.service.IDeviceRepairService;
import com.ruoyi.framework.web.domain.AjaxResult;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
@RestController
@RequestMapping("/device/maintenance")
public class DeviceMaintenanceController {
    @Autowired
    private IDeviceMaintenanceService deviceMaintenanceService;
    @ApiModelProperty("设备报修列表")
    @GetMapping("/page")
    public AjaxResult page(Page page , DeviceMaintenanceDto deviceMaintenanceDto) {
        return AjaxResult.success(deviceMaintenanceService.queryPage(page,deviceMaintenanceDto));
    }
    @PostMapping()
    @ApiModelProperty("添加设备报修")
    public AjaxResult add(@RequestBody DeviceMaintenance deviceRepair) {
        return deviceMaintenanceService.saveDeviceRepair(deviceRepair);
    }
    @ApiModelProperty("根据id查询设备报修")
    @GetMapping("/{id}")
    public AjaxResult detail(@PathVariable Long id) {
        return AjaxResult.success(deviceMaintenanceService.getById(id));
    }
    @PutMapping ()
    @ApiModelProperty("修改设备报修")
    public AjaxResult update(@RequestBody DeviceMaintenance deviceMaintenance) {
        return deviceMaintenanceService.updateDeviceRepair(deviceMaintenance);
    }
    @DeleteMapping("/{id}")
    @ApiModelProperty("删除设备报修")
    public AjaxResult delete(@PathVariable ArrayList<Long> ids) {
        boolean b = deviceMaintenanceService.removeBatchByIds(ids);
        if (!b) {
            return AjaxResult.error("删除失败");
        }
        return AjaxResult.success();
    }
    @PostMapping("export")
    @ApiModelProperty("导出设备报修")
    public void export(HttpServletResponse response, Long[] ids) {
        deviceMaintenanceService.export(response, ids);
    }
}
src/main/java/com/ruoyi/device/controller/DeviceRepairController.java
@@ -15,6 +15,7 @@
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Arrays;
@Api(tags = "设备报修管理")
@RequestMapping("/device/reppair")
@@ -32,7 +33,7 @@
    @PostMapping()
    @ApiModelProperty("添加设备报修")
    public AjaxResult add(DeviceRepair deviceRepair) {
    public AjaxResult add( @RequestBody DeviceRepair deviceRepair) {
        return deviceRepairService.saveDeviceRepair(deviceRepair);
    }
@@ -44,14 +45,14 @@
    @PutMapping ()
    @ApiModelProperty("修改设备报修")
    public AjaxResult update(DeviceRepair deviceRepair) {
    public AjaxResult update( @RequestBody DeviceRepair deviceRepair) {
        return deviceRepairService.updateDeviceRepair(deviceRepair);
    }
    @DeleteMapping("/{id}")
    @DeleteMapping("/{ids}")
    @ApiModelProperty("删除设备报修")
    public AjaxResult delete(@PathVariable ArrayList<Long> ids) {
        boolean b = deviceRepairService.removeBatchByIds(ids);
    public AjaxResult delete(@PathVariable("ids") Long[] ids) {
        boolean b = deviceRepairService.removeBatchByIds(Arrays.asList(ids));
        if (!b) {
            return AjaxResult.error("删除失败");
        }
src/main/java/com/ruoyi/device/dto/DeviceLedgerDto.java
copy from src/main/java/com/ruoyi/device/dto/DeviceLedgerExeclDto.java copy to src/main/java/com/ruoyi/device/dto/DeviceLedgerDto.java
Îļþ´Ó src/main/java/com/ruoyi/device/dto/DeviceLedgerExeclDto.java ¸´ÖÆ
@@ -2,92 +2,100 @@
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
 * è®¾å¤‡å°è´¦å®žä½“ç±»
 */
@Data
public class DeviceLedgerExeclDto {
@TableName("device_ledger")
public class DeviceLedgerDto {
    /**
     * ä¸»é”®ID,自增
     */
    private Long id;
    /**
     * è®¾å¤‡åç§°
     */
    @Excel(name = "设备名称")
    private String deviceName;
    /**
     * è§„格型号
     */
    @Excel(name = "规格型号")
    private String deviceModel;
    /**
     * ä¾›åº”商名称
     */
    @Excel(name = "供应商名称")
    private String supplierName;
    /**
     * å•位
     */
    @Excel(name = "单位")
    private String unit;
    /**
     * æ•°é‡
     */
    @Excel(name = "数量")
    private BigDecimal number;
    /**
     * å«ç¨Žå•ä»·
     */
    @Excel(name = "含税单价")
    private BigDecimal taxIncludingPriceUnit;
    /**
     * å«ç¨Žæ€»ä»·
     */
    @Excel(name = "含税总价")
    private BigDecimal taxIncludingPriceTotal;
    /**
     * ç¨Žçއ
     */
    @Excel(name = "税率")
    private BigDecimal taxRate;
    /**
     * ä¸å«ç¨Žæ€»ä»·
     */
    @Excel(name = "不含税总价")
    private BigDecimal unTaxIncludingPriceTotal;
    /**
     * å½•入时间
     *
     */
    @Excel(name = "录入时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    /**
     * æ›´æ–°æ—¶é—´
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    /**
     * å½•入人
     */
    @Excel(name = "录入人")
    @TableField(fill = FieldFill.INSERT)
    private String createUser;
    /**
     * æ›´æ–°äºº
     */
    private String updateUser;
    /**
     * ç§Ÿæˆ·ID
     */
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
}
src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.ruoyi.device.dto;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
public class DeviceMaintenanceDto {
    @ApiModelProperty("设备保养id")
    private Long id;
    @ApiModelProperty("设备台账id")
    private String deviceLedgerId;
    @ApiModelProperty("设备名称")
    private String deviceName;
    @ApiModelProperty("规格型号")
    private String deviceModel;
    @ApiModelProperty("计划保养日期")
    private Date maintenancePlanTime;
    @ApiModelProperty("实际保养人")
    private String maintenanceActuallyName;
    @ApiModelProperty("实际保养日期")
    private Date maintenanceActuallyTime;
    @ApiModelProperty("保养结果 0 ç»´ä¿® 1 å®Œå¥½")
    private Integer maintenanceResult;
    @ApiModelProperty("状态 0 å¾…保养 1 å®Œç»“")
    private Integer status;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    @ApiModelProperty("更新时间")
    @TableField(fill = FieldFill.UPDATE)
    private Date updateTime;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private String createUser;
    @ApiModelProperty("更新人")
    @TableField(fill = FieldFill.UPDATE)
    private String updateUser;
    @ApiModelProperty("租户id")
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
}
src/main/java/com/ruoyi/device/execl/DeviceLedgerExeclDto.java
ÎļþÃû´Ó src/main/java/com/ruoyi/device/dto/DeviceLedgerExeclDto.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.ruoyi.device.dto;
package com.ruoyi.device.execl;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
@@ -15,63 +15,62 @@
    /**
     * è®¾å¤‡åç§°
     */
    @Excel(name = "设备名称")
    @Excel(name = "设备名称" ,sort = 1)
    private String deviceName;
    /**
     * è§„格型号
     */
    @Excel(name = "规格型号")
    @Excel(name = "规格型号" ,sort = 2)
    private String deviceModel;
    /**
     * ä¾›åº”商名称
     */
    @Excel(name = "供应商名称")
    @Excel(name = "供应商名称",sort = 3)
    private String supplierName;
    /**
     * å•位
     */
    @Excel(name = "单位")
    @Excel(name = "单位",sort = 4)
    private String unit;
    /**
     * æ•°é‡
     */
    @Excel(name = "数量")
    @Excel(name = "数量",sort = 5)
    private BigDecimal number;
    /**
     * å«ç¨Žå•ä»·
     */
    @Excel(name = "含税单价")
    @Excel(name = "含税单价",sort = 6)
    private BigDecimal taxIncludingPriceUnit;
    /**
     * å«ç¨Žæ€»ä»·
     */
    @Excel(name = "含税总价")
    @Excel(name = "含税总价",sort = 7)
    private BigDecimal taxIncludingPriceTotal;
    /**
     * ç¨Žçއ
     */
    @Excel(name = "税率")
    @Excel(name = "税率",sort = 8)
    private BigDecimal taxRate;
    /**
     * ä¸å«ç¨Žæ€»ä»·
     */
    @Excel(name = "不含税总价")
    @Excel(name = "不含税总价",sort = 9)
    private BigDecimal unTaxIncludingPriceTotal;
    /**
     * å½•入时间
     *
     */
    @Excel(name = "录入时间")
    @TableField(fill = FieldFill.INSERT)
    @Excel(name = "录入时间",sort = 10)
    private LocalDateTime createTime;
@@ -79,15 +78,10 @@
    /**
     * å½•入人
     */
    @Excel(name = "录入人")
    @TableField(fill = FieldFill.INSERT)
    @Excel(name = "录入人",sort = 9)
    private String createUser;
    /**
     * ç§Ÿæˆ·ID
     */
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
}
src/main/java/com/ruoyi/device/execl/DeviceMaintenanceExeclDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,52 @@
package com.ruoyi.device.execl;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.Date;
@Data
public class DeviceMaintenanceExeclDto {
    @ApiModelProperty("设备名称")
    @Excel(name = "设备名称")
    private String deviceName;
    @Excel(name = "规格型号")
    @ApiModelProperty("规格型号")
    private String deviceModel;
    @Excel(name = "计划保养日期")
    @ApiModelProperty("计划保养日期")
    private Date maintenancePlanTime;
    @ApiModelProperty("实际保养人")
    @Excel(name = "实际保养人")
    private String maintenanceActuallyName;
    @ApiModelProperty("实际保养日期")
    @Excel(name = "实际保养日期")
    private LocalDateTime maintenanceActuallyTime;
    @ApiModelProperty("保养结果 0 ç»´ä¿® 1 å®Œå¥½")
    @Excel(name = "保养结果")
    private String maintenanceResult;
    @ApiModelProperty("状态 0 å¾…保养 1 å®Œç»“")
    @Excel(name = "状态")
    private String status;
    @ApiModelProperty("创建时间")
    @Excel(name = "录入时间")
    private Date createTime;
    @ApiModelProperty("创建人")
    @Excel(name = "录入人")
    private String createUser;
}
src/main/java/com/ruoyi/device/execl/DeviceRepairExeclDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
package com.ruoyi.device.execl;
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.time.LocalDateTime;
import java.util.Date;
@Data
public class DeviceRepairExeclDto {
    @ApiModelProperty("设备名称")
    @Excel(name = "设备名称")
    private String deviceName;
    @ApiModelProperty("设备型号")
    @Excel(name = "设备型号")
    private String deviceModel;
    @ApiModelProperty("报修时间")
    @Excel(name = "报修时间")
    private Date repairTime;
    @ApiModelProperty("报修人")
    @Excel(name = "报修人")
    private String repairName;
    @ApiModelProperty("报修内容")
    @Excel(name = "报修内容")
    private String remark;
    @ApiModelProperty("维修人")
    @Excel(name = "维修人")
    private String maintenanceName;
    @ApiModelProperty("维修时间")
    @Excel(name = "维修时间")
    private Date maintenanceTime;
    @ApiModelProperty("维修结果")
    @Excel(name = "维修结果")
    private String maintenanceResult;
    @ApiModelProperty("状态")
    @Excel(name = "状态")
    private String statusStr;
    @ApiModelProperty("创建时间")
    @Excel(name = "录入时间")
    private LocalDateTime createTime;
    @Excel(name = "录入人")
    @ApiModelProperty("创建人")
    private String createUser;
}
src/main/java/com/ruoyi/device/mapper/DeviceLedgerMapper.java
@@ -3,16 +3,18 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.device.dto.DeviceLedgerExeclDto;
import com.ruoyi.device.dto.DeviceLedgerDto;
import com.ruoyi.device.execl.DeviceLedgerExeclDto;
import com.ruoyi.device.pojo.DeviceLedger;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface DeviceLedgerMapper extends BaseMapper<DeviceLedger> {
    IPage<DeviceLedger> queryPage(Page page, DeviceLedger deviceLedger);
    IPage<DeviceLedgerDto> queryPage(Page page, @Param("deviceLedger") DeviceLedgerDto deviceLedgerDto);
    List<DeviceLedgerExeclDto> deviceLedgerExportList(DeviceLedger deviceLedger);
}
src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.device.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
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.DeviceRepairDto;
import com.ruoyi.device.pojo.DeviceMaintenance;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface DeviceMaintenanceMapper extends BaseMapper<DeviceMaintenance> {
    IPage<DeviceMaintenanceDto> queryPage(Page page, DeviceMaintenanceDto deviceMaintenanceDto);
}
src/main/java/com/ruoyi/device/pojo/DeviceLedger.java
@@ -3,8 +3,12 @@
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
@@ -70,25 +74,29 @@
     * å½•入时间
     */
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    /**
     * æ›´æ–°æ—¶é—´
     */
    @TableField(fill = FieldFill.UPDATE)
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    /**
     * å½•入人
     */
    @TableField(fill = FieldFill.INSERT)
    private String createUser;
    private Integer createUser;
    /**
     * æ›´æ–°äºº
     */
    @TableField(fill = FieldFill.UPDATE)
    private String updateUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    /**
     * ç§Ÿæˆ·ID
src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
package com.ruoyi.device.pojo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.models.auth.In;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import java.util.Date;
@Data
@TableName("device_maintenance")
@ApiModel("设备保养记录")
public class DeviceMaintenance {
    @ApiModelProperty("设备保养id")
    private Long id;
    @ApiModelProperty("设备台账id")
    private String deviceLedgerId;
    @ApiModelProperty("计划保养日期")
    private Date maintenancePlanTime;
    @ApiModelProperty("实际保养人")
    private String maintenanceActuallyName;
    @ApiModelProperty("实际保养日期")
    private Date maintenanceActuallyTime;
    @ApiModelProperty("保养结果 0 ç»´ä¿® 1 å®Œå¥½")
    private Integer maintenanceResult;
    @ApiModelProperty("状态 0 å¾…保养 1 å®Œç»“")
    private Integer status;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @ApiModelProperty("更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("更新人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("租户id")
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
}
src/main/java/com/ruoyi/device/pojo/DeviceRepair.java
@@ -3,12 +3,15 @@
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import nonapi.io.github.classgraph.json.Id;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
@@ -45,19 +48,23 @@
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @ApiModelProperty("更新时间")
    @TableField(fill = FieldFill.UPDATE)
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private String createUser;
    private Integer createUser;
    @ApiModelProperty("更新人")
    @TableField(fill = FieldFill.UPDATE)
    private String updateUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("租户id")
    @TableField(fill = FieldFill.INSERT)
src/main/java/com/ruoyi/device/service/IDeviceLedgerService.java
@@ -3,6 +3,7 @@
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.DeviceLedgerDto;
import com.ruoyi.device.pojo.DeviceLedger;
import com.ruoyi.framework.web.domain.AjaxResult;
@@ -10,7 +11,7 @@
import java.util.ArrayList;
public interface IDeviceLedgerService  extends IService<DeviceLedger> {
    IPage<DeviceLedger> queryPage(Page page, DeviceLedger deviceLedger);
    IPage<DeviceLedgerDto> queryPage(Page page, DeviceLedgerDto deviceLedger);
    AjaxResult saveDeviceLedger(DeviceLedger deviceLedger);
src/main/java/com/ruoyi/device/service/IDeviceMaintenanceService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.ruoyi.device.service;
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.DeviceMaintenanceDto;
import com.ruoyi.device.pojo.DeviceMaintenance;
import com.ruoyi.framework.web.domain.AjaxResult;
import javax.servlet.http.HttpServletResponse;
public interface IDeviceMaintenanceService extends IService<DeviceMaintenance> {
    IPage<DeviceMaintenanceDto> queryPage(Page page, DeviceMaintenanceDto deviceMaintenanceDto);
    AjaxResult saveDeviceRepair(DeviceMaintenance deviceMaintenance);
    AjaxResult updateDeviceRepair(DeviceMaintenance deviceMaintenance);
    void export(HttpServletResponse response, Long[] ids);
}
src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java
@@ -5,11 +5,13 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.device.dto.DeviceLedgerExeclDto;
import com.ruoyi.device.dto.DeviceLedgerDto;
import com.ruoyi.device.execl.DeviceLedgerExeclDto;
import com.ruoyi.device.mapper.DeviceLedgerMapper;
import com.ruoyi.device.pojo.DeviceLedger;
import com.ruoyi.device.service.IDeviceLedgerService;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.project.system.mapper.SysUserMapper;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -27,9 +29,11 @@
    @Autowired
    private DeviceLedgerMapper deviceLedgerMapper;
    @Autowired
    private SysUserMapper sysUserMapper;
    @Override
    public IPage<DeviceLedger> queryPage(Page page, DeviceLedger deviceLedger) {
    public IPage<DeviceLedgerDto> queryPage(Page page, DeviceLedgerDto deviceLedger) {
        return deviceLedgerMapper.queryPage(page, deviceLedger);
    }
@@ -53,18 +57,35 @@
    @Override
    public void export(HttpServletResponse response, Long[] ids) {
        ArrayList<Long> arrayList = new ArrayList<>();
        Arrays.stream(ids).map(id -> {
            return arrayList.add( id);
        });
        List<DeviceLedger> supplierManageList = deviceLedgerMapper.selectBatchIds(arrayList);
        ArrayList<DeviceLedgerExeclDto> deviceLedgerExeclDtos = new ArrayList<>();
        supplierManageList.stream().forEach(deviceLedger -> {
            DeviceLedgerExeclDto deviceLedgerExeclDto = new DeviceLedgerExeclDto();
            BeanUtils.copyProperties(deviceLedger,deviceLedgerExeclDto);
            deviceLedgerExeclDtos.add(deviceLedgerExeclDto);
        });
        ExcelUtil<DeviceLedgerExeclDto> util = new ExcelUtil<DeviceLedgerExeclDto>(DeviceLedgerExeclDto.class);
        util.exportExcel(response, deviceLedgerExeclDtos, "设备台账导出");
        if (ids == null || ids.length == 0) {
            List<DeviceLedger> supplierManageList = this.list();
            ArrayList<DeviceLedgerExeclDto> deviceLedgerExeclDtos = new ArrayList<>();
            supplierManageList.stream().forEach(deviceLedger -> {
                DeviceLedgerExeclDto deviceLedgerExeclDto = new DeviceLedgerExeclDto();
                BeanUtils.copyProperties(deviceLedger,deviceLedgerExeclDto);
                deviceLedgerExeclDto.setCreateUser(sysUserMapper.selectUserById(Long.valueOf(deviceLedger.getCreateUser().toString())).getUserName());
                deviceLedgerExeclDtos.add(deviceLedgerExeclDto);
            });
            ExcelUtil<DeviceLedgerExeclDto> util = new ExcelUtil<DeviceLedgerExeclDto>(DeviceLedgerExeclDto.class);
            util.exportExcel(response, deviceLedgerExeclDtos, "设备台账导出");
        }else  {
            ArrayList<Long> arrayList = new ArrayList<>();
            Arrays.stream(ids).map(id -> {
                return arrayList.add( id);
            });
            List<DeviceLedger> supplierManageList = deviceLedgerMapper.selectBatchIds(arrayList);
            ArrayList<DeviceLedgerExeclDto> deviceLedgerExeclDtos = new ArrayList<>();
            supplierManageList.stream().forEach(deviceLedger -> {
                DeviceLedgerExeclDto deviceLedgerExeclDto = new DeviceLedgerExeclDto();
                BeanUtils.copyProperties(deviceLedger,deviceLedgerExeclDto);
                deviceLedgerExeclDto.setCreateUser(sysUserMapper.selectUserById(Long.valueOf(deviceLedger.getCreateUser().toString())).getUserName());
                deviceLedgerExeclDtos.add(deviceLedgerExeclDto);
            });
            ExcelUtil<DeviceLedgerExeclDto> util = new ExcelUtil<DeviceLedgerExeclDto>(DeviceLedgerExeclDto.class);
            util.exportExcel(response, deviceLedgerExeclDtos, "设备台账导出");
        }
    }
}
src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,74 @@
package com.ruoyi.device.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.device.dto.DeviceMaintenanceDto;
import com.ruoyi.device.execl.DeviceMaintenanceExeclDto;
import com.ruoyi.device.mapper.DeviceMaintenanceMapper;
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 javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Service
public class DeviceMaintenanceServiceImpl extends ServiceImpl<DeviceMaintenanceMapper, DeviceMaintenance> implements IDeviceMaintenanceService {
    @Autowired
    private DeviceMaintenanceMapper deviceMaintenanceMapper;
    @Override
    public IPage<DeviceMaintenanceDto> queryPage(Page page, DeviceMaintenanceDto deviceMaintenanceDto) {
        return deviceMaintenanceMapper.queryPage(page, deviceMaintenanceDto);
    }
    @Override
    public AjaxResult saveDeviceRepair(DeviceMaintenance deviceRepair) {
        boolean save = this.save(deviceRepair);
        if (save){
            return AjaxResult.success();
        }
        return AjaxResult.error();
    }
    @Override
    public AjaxResult updateDeviceRepair(DeviceMaintenance deviceRepair) {
        if (this.updateById(deviceRepair)) {
            return AjaxResult.success();
        }
        return AjaxResult.error();
    }
    @Override
    public void export(HttpServletResponse response, Long[] ids) {
        ArrayList<Long> arrayList = new ArrayList<>();
        Arrays.stream(ids).map(id -> {
            return arrayList.add( id);
        });
        List<DeviceMaintenance> supplierManageList = deviceMaintenanceMapper.selectBatchIds(arrayList);
        ArrayList<DeviceMaintenanceExeclDto> deviceLedgerExeclDtos = new ArrayList<>();
        supplierManageList.stream().forEach(deviceMaintenance -> {
            DeviceMaintenanceExeclDto deviceRepairExeclDto = new DeviceMaintenanceExeclDto();
            BeanUtils.copyProperties(deviceMaintenance,deviceRepairExeclDto);
            deviceRepairExeclDto.setStatus(deviceMaintenance.getStatus() == 0 ? "待维修" : "完结");
            deviceRepairExeclDto.setMaintenanceResult(deviceMaintenance.getMaintenanceResult() == 0 ? "ç»´ä¿®" : "完好");
            deviceLedgerExeclDtos.add(deviceRepairExeclDto);
        });
        ExcelUtil<DeviceMaintenanceExeclDto> util = new ExcelUtil<DeviceMaintenanceExeclDto>(DeviceMaintenanceExeclDto.class);
        util.exportExcel(response, deviceLedgerExeclDtos, "设备报修导出");
    }
}
src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java
@@ -3,7 +3,10 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.device.dto.DeviceRepairDto;
import com.ruoyi.device.execl.DeviceRepairExeclDto;
import com.ruoyi.device.mapper.DeviceRepairMapper;
import com.ruoyi.device.pojo.DeviceRepair;
import com.ruoyi.device.service.IDeviceRepairService;
@@ -14,6 +17,9 @@
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Service
@AllArgsConstructor
@@ -49,6 +55,35 @@
    @Override
    public void export(HttpServletResponse response, Long[] ids) {
        if (ids == null || ids.length == 0) {
            List<DeviceRepair> supplierManageList = this.list();
            ArrayList<DeviceRepairExeclDto> deviceLedgerExeclDtos = new ArrayList<>();
            supplierManageList.stream().forEach(deviceRepair -> {
                DeviceRepairExeclDto deviceRepairExeclDto = new DeviceRepairExeclDto();
                BeanUtils.copyProperties(deviceRepair,deviceRepairExeclDto);
                deviceRepairExeclDto.setStatusStr(deviceRepair.getStatus() == 0 ? "待维修" : "完结");
                deviceLedgerExeclDtos.add(deviceRepairExeclDto);
            });
            ExcelUtil<DeviceRepairExeclDto> util = new ExcelUtil<DeviceRepairExeclDto>(DeviceRepairExeclDto.class);
            util.exportExcel(response, deviceLedgerExeclDtos, "设备报修导出");
        }else {
            ArrayList<Long> arrayList = new ArrayList<>();
            Arrays.stream(ids).map(id -> {
                return arrayList.add( id);
            });
            List<DeviceRepair> supplierManageList = deviceRepairMapper.selectBatchIds(arrayList);
            ArrayList<DeviceRepairExeclDto> deviceLedgerExeclDtos = new ArrayList<>();
            supplierManageList.stream().forEach(deviceRepair -> {
                DeviceRepairExeclDto deviceRepairExeclDto = new DeviceRepairExeclDto();
                BeanUtils.copyProperties(deviceRepair,deviceRepairExeclDto);
                deviceRepairExeclDto.setStatusStr(deviceRepair.getStatus() == 0 ? "待维修" : "完结");
                deviceLedgerExeclDtos.add(deviceRepairExeclDto);
            });
            ExcelUtil<DeviceRepairExeclDto> util = new ExcelUtil<DeviceRepairExeclDto>(DeviceRepairExeclDto.class);
            util.exportExcel(response, deviceLedgerExeclDtos, "设备报修导出");
        }
    }
src/main/java/com/ruoyi/sales/controller/ReceiptPaymentController.java
@@ -104,18 +104,16 @@
    @ApiModelProperty("导出回款登记")
    @PostMapping("/export")
    public void export(HttpServletResponse response, @RequestParam("ids") String idsStr) {
        if (idsStr == null || idsStr.trim().isEmpty()) {
            throw new RuntimeException("请选择要导出的记录");
    public void export(HttpServletResponse response, String ids) {
        if (ids == null || ids.isEmpty()) {
            receiptPaymentService.exportPaymentList(response, null);
        } else {
            ArrayList<Long> idList = (ArrayList<Long>) Arrays.stream(ids.split(","))
                    .map(s -> s.replaceAll("[\\[\\]]", "").trim())
                    .map(Long::valueOf)
                    .collect(Collectors.toList());
            receiptPaymentService.exportPaymentList(response, idList);
        }
        ArrayList<Long> ids = (ArrayList<Long>) Arrays.stream(idsStr.split(","))
                .map(s -> s.replaceAll("[\\[\\]]", "").trim())
                .map(Long::valueOf)
                .collect(Collectors.toList());
        receiptPaymentService.exportPaymentList(response, ids);
    }
src/main/java/com/ruoyi/sales/mapper/ReceiptPaymentMapper.java
@@ -74,5 +74,7 @@
    List<ReceiptPaymentDto> bindInvoiceNoRegListAll();
    List<ReceiptPaymentExeclDto> bindInvoiceNoRegListByIds(List<Long> ids);
    List<ReceiptPaymentExeclDto> bindInvoiceNoRegListByIds(List<Long> ids,Long tenantId);
}
src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.sales.dto.CustomerInteractionDto;
import com.ruoyi.sales.dto.InvoiceLedgerDto;
@@ -266,8 +267,15 @@
    @Override
    public void exportPaymentList(HttpServletResponse response, List<Long> ids) {
        List<ReceiptPaymentExeclDto> receiptPaymentDtoList =  receiptPaymentMapper.bindInvoiceNoRegListByIds(ids);
        ExcelUtil<ReceiptPaymentExeclDto> util = new ExcelUtil<ReceiptPaymentExeclDto>(ReceiptPaymentExeclDto.class);
        util.exportExcel(response, receiptPaymentDtoList, "回款登记");
        if (ids == null) {
            List<ReceiptPaymentExeclDto> receiptPaymentDtoList =  receiptPaymentMapper.bindInvoiceNoRegListByIds(new ArrayList<>(), SecurityUtils.getLoginUser().getTenantId());
            ExcelUtil<ReceiptPaymentExeclDto> util = new ExcelUtil<ReceiptPaymentExeclDto>(ReceiptPaymentExeclDto.class);
            util.exportExcel(response, receiptPaymentDtoList, "回款登记");
        }else {
            List<ReceiptPaymentExeclDto> receiptPaymentDtoList =  receiptPaymentMapper.bindInvoiceNoRegListByIds(ids,SecurityUtils.getLoginUser().getTenantId());
            ExcelUtil<ReceiptPaymentExeclDto> util = new ExcelUtil<ReceiptPaymentExeclDto>(ReceiptPaymentExeclDto.class);
            util.exportExcel(response, receiptPaymentDtoList, "回款登记");
        }
    }
}
src/main/resources/mapper/device/DeviceLedgerMapper.xml
@@ -5,24 +5,25 @@
<mapper namespace="com.ruoyi.device.mapper.DeviceLedgerMapper">
    <select id="queryPage" resultType="com.ruoyi.device.pojo.DeviceLedger">
    <select id="queryPage" resultType="com.ruoyi.device.dto.DeviceLedgerDto">
        SELECT
        id,
        device_name AS deviceName,
        device_model AS deviceModel,
        supplier_name AS supplierName,
        unit,
        number,
        tax_including_price_unit AS taxIncludingPriceUnit,
        tax_including_price_total AS taxIncludingPriceTotal,
        tax_rate AS taxRate,
        un_tax_including_price_total AS unTaxIncludingPriceTotal,
        create_time AS createTime,
        update_time AS updateTime,
        create_user AS createUser,
        update_user AS updateUser,
        tenant_id AS tenantId
        FROM device_ledger
        dl.id,
        dl.device_name,
        dl.device_model,
        dl.supplier_name,
        dl.unit,
        dl.number,
        dl.tax_including_price_unit,
        dl.tax_including_price_total,
        dl.tax_rate,
        dl.un_tax_including_price_total,
        dl.create_time,
        dl.update_time ,
        su.user_name AS createUser,
        dl.update_user,
        dl.tenant_id
        FROM device_ledger dl
        left join  sys_user  su on dl.create_user = su.user_id
        <where>
            <!-- è®¾å¤‡åç§° -->
            <if test="deviceLedger.deviceName != null and deviceLedger.deviceName != ''">
@@ -61,7 +62,7 @@
        </where>
        ORDER BY create_time DESC
    </select>
    <select id="deviceLedgerExportList" resultType="com.ruoyi.device.dto.DeviceLedgerExeclDto">
    <select id="deviceLedgerExportList" resultType="com.ruoyi.device.execl.DeviceLedgerExeclDto">
    </select>
src/main/resources/mapper/device/DeviceMaintenanceMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.device.mapper.DeviceMaintenanceMapper">
    <select id="queryPage" resultType="com.ruoyi.device.dto.DeviceMaintenanceDto">
        select dm.*,
               dl.device_name,
               dl.device_model
        from device_maintenance dm
        left join device_ledger dl on dm.device_ledger_id = dl.id
        <where>
            <if test="deviceRepairDto.deviceName != null">
                and dl.device_name like concat('%',#{deviceRepairDto.deviceName},'%')
            </if>
            <if test="deviceRepairDto.deviceModel != null">
                and dl.device_model like concat('%',#{deviceRepairDto.deviceModel},'%')
            </if>
        </where>
    </select>
</mapper>
src/main/resources/mapper/sales/ReceiptPaymentMapper.xml
@@ -370,43 +370,51 @@
    </select>
    <select id="bindInvoiceNoRegListByIds" resultType="com.ruoyi.sales.dto.ReceiptPaymentExeclDto">
        SELECT
            T1.id ,
            T1.invoice_no ,
            T1.invoice_total ,
            T3.project_name,
            T1.invoice_person ,
            T1.invoice_date ,
            T1.create_time ,
            T1.create_user ,
            T1.update_time ,
            T1.update_user ,
            T1.tenant_id ,
            T2.tax_rate,
            T3.sales_contract_no,
            T3.customer_contract_no,
            T3.customer_name,
            T4.invoiceFileName,
            T5.product_category,
            IFNULL(T6.receipt_payment_amount_total ,0) AS receipt_payment_amount_total,
            (T1.invoice_total - IFNULL(T6.receipt_payment_amount_total ,0)) AS no_receipt_amount
        T1.id ,
        T1.invoice_no ,
        T1.invoice_total ,
        T3.project_name,
        T1.invoice_person ,
        T1.invoice_date ,
        T1.create_time ,
        T1.create_user ,
        T1.update_time ,
        T1.update_user ,
        T1.tenant_id ,
        T2.tax_rate,
        T3.sales_contract_no,
        T3.customer_contract_no,
        T3.customer_name,
        T4.invoiceFileName,
        T5.product_category,
        IFNULL(T6.receipt_payment_amount_total ,0) AS receipt_payment_amount_total,
        (T1.invoice_total - IFNULL(T6.receipt_payment_amount_total ,0)) AS no_receipt_amount
        FROM invoice_ledger T1
                 LEFT JOIN invoice_registration_product T2 ON T2.id = T1.invoice_registration_product_id
                 LEFT JOIN sales_ledger T3 ON T3.id = T2.sales_ledger_id
                 LEFT JOIN (
            SELECT
                invoice_ledger_id,
                GROUP_CONCAT( name ORDER BY id ASC SEPARATOR ' | ') AS invoiceFileName
            FROM invoice_ledger_file GROUP BY invoice_ledger_id
        LEFT JOIN invoice_registration_product T2 ON T2.id = T1.invoice_registration_product_id
        LEFT JOIN sales_ledger T3 ON T3.id = T2.sales_ledger_id
        LEFT JOIN (
        SELECT
        invoice_ledger_id,
        GROUP_CONCAT( name ORDER BY id ASC SEPARATOR ' | ') AS invoiceFileName
        FROM invoice_ledger_file GROUP BY invoice_ledger_id
        ) T4 ON T4.invoice_ledger_id = T1.id
                 LEFT JOIN sales_ledger_product T5 ON T2.sales_ledger_product_id = T5.id
                 LEFT JOIN (
            SELECT SUM(receipt_payment_amount) AS receipt_payment_amount_total,invoice_ledger_id FROM receipt_payment GROUP
                BY invoice_ledger_id
        LEFT JOIN sales_ledger_product T5 ON T2.sales_ledger_product_id = T5.id
        LEFT JOIN (
        SELECT SUM(receipt_payment_amount) AS receipt_payment_amount_total,invoice_ledger_id FROM receipt_payment GROUP
        BY invoice_ledger_id
        ) T6 ON T1.id = T6.invoice_ledger_id
        WHERE T1.id IN
        <foreach item="item" collection="ids" separator="," open="(" close=")">
            #{item}
        </foreach>
        <where>
        <if test="ids.size() > 0">
            T1.id IN
            <foreach item="item" collection="ids" separator="," open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="tenantId != null " >
            AND T1.tenant_id = #{tenantId}
        </if>
        </where>
    </select>
</mapper>