maven
2025-08-06 a6f51ccae4bc650247d07838da97787d5302f1f8
Merge remote-tracking branch 'origin/master' into pim_yys
已添加20个文件
1086 ■■■■■ 文件已修改
src/main/java/com/ruoyi/account/controller/AccountExpenseController.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/controller/AccountFileController.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/controller/AccountIncomeController.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/dto/AccountDto.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/dto/AccountDto2.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/mapper/AccountExpenseMapper.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/mapper/AccountFileMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/mapper/AccountIncomeMapper.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/pojo/AccountExpense.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/pojo/AccountFile.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/pojo/AccountIncome.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/service/AccountExpenseService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/service/AccountFileService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/service/AccountIncomeService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/service/impl/AccountFileServiceImpl.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/service/impl/AccountIncomeServiceImpl.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/account/AccountExpenseMapper.xml 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/account/AccountFileMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/account/AccountIncomeMapper.xml 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/controller/AccountExpenseController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,111 @@
package com.ruoyi.account.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.account.pojo.AccountExpense;
import com.ruoyi.account.pojo.AccountIncome;
import com.ruoyi.account.service.AccountExpenseService;
import com.ruoyi.account.service.AccountFileService;
import com.ruoyi.account.service.AccountIncomeService;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.dto.DateQueryDto;
import com.ruoyi.framework.security.LoginUser;
import com.ruoyi.framework.web.domain.AjaxResult;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;
/**
 * è´¢åŠ¡ç®¡ç†--支出管理
 */
@RestController
@RequestMapping("/account/accountExpense")
public class AccountExpenseController {
    @Resource
    private AccountExpenseService accountExpenseService;
    /**
     * æ–°å¢ž
     * @param accountExpense
     * @return
     */
    @PostMapping("/add")
    public AjaxResult add(@RequestBody AccountExpense accountExpense) {
        accountExpense.setInputTime(new Date());
        LoginUser loginUser = SecurityUtils.getLoginUser();
        accountExpense.setInputUser(loginUser.getNickName());
        return AjaxResult.success(accountExpenseService.save(accountExpense));
    }
    /**
     * åˆ é™¤
     * @param ids
     * @return
     */
    @DeleteMapping("/del")
    public AjaxResult delQualityInspect(@RequestBody List<Integer> ids) {
        if(CollectionUtils.isEmpty(ids)){
            return AjaxResult.error("请选择至少一条数据");
        }
        //删除检验单
        return AjaxResult.success(accountExpenseService.removeBatchByIds(ids));
    }
    /**
     * ä¿®æ”¹
     * @param accountExpense
     * @return
     */
    @PostMapping("/update")
    public AjaxResult update(@RequestBody AccountExpense accountExpense) {
        return AjaxResult.success(accountExpenseService.updateById(accountExpense));
    }
    /**
     *分页查询
     * @param page
     * @param accountExpense
     * @return
     */
    @GetMapping("/listPage")
    public AjaxResult accountExpenseListPage(Page page, AccountExpense accountExpense) {
        return AjaxResult.success(accountExpenseService.accountExpenseListPage(page, accountExpense));
    }
    /**
     * è¯¦æƒ…
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public AjaxResult accountExpenseDetail(@PathVariable("id") Integer id) {
        return AjaxResult.success(accountExpenseService.getById(id));
    }
    /**
     * å¯¼å‡º
     * @param response
     * @param accountExpense
     */
    @PostMapping("/export")
    public void accountExpenseExport(HttpServletResponse response,AccountExpense accountExpense) {
        accountExpenseService.accountExpenseExport(response, accountExpense);
    }
    /**
     * è´¢åŠ¡æŠ¥è¡¨å›¾è¡¨æŸ¥è¯¢
     * @param dateQueryDto
     * @return
     */
    @GetMapping("/report/forms")
    public AjaxResult report(DateQueryDto dateQueryDto) {
        return AjaxResult.success(accountExpenseService.report(dateQueryDto));
    }
}
src/main/java/com/ruoyi/account/controller/AccountFileController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
package com.ruoyi.account.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.account.pojo.AccountFile;
import com.ruoyi.account.service.AccountFileService;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.quality.pojo.QualityInspectFile;
import com.ruoyi.quality.service.IQualityInspectFileService;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
 * è´¢åС附件
 */
@RestController
@RequestMapping("/account/accountFile")
public class AccountFileController {
    @Resource
    private AccountFileService accountFileService;
    /**
     * æ–°å¢ž
     * @param accountFile
     * @return
     */
    @PostMapping("/add")
    public AjaxResult add(@RequestBody AccountFile accountFile) {
        return AjaxResult.success(accountFileService.save(accountFile));
    }
    /**
     * åˆ é™¤
     * @param ids
     * @return
     */
    @DeleteMapping("/del")
    public AjaxResult delAccountFile(@RequestBody List<Integer> ids) {
        if(CollectionUtils.isEmpty(ids)){
            return AjaxResult.error("请选择至少一条数据");
        }
        //删除检验附件
        return AjaxResult.success(accountFileService.removeBatchByIds(ids));
    }
    /**
     *分页查询
     * @param page
     * @param accountFile
     * @return
     */
    @GetMapping("/listPage")
    public AjaxResult accountFileListPage(Page page, AccountFile accountFile) {
        return AjaxResult.success(accountFileService.accountFileListPage(page, accountFile));
    }
}
src/main/java/com/ruoyi/account/controller/AccountIncomeController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,105 @@
package com.ruoyi.account.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.account.pojo.AccountIncome;
import com.ruoyi.account.service.AccountFileService;
import com.ruoyi.account.service.AccountIncomeService;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.framework.security.LoginUser;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.quality.pojo.QualityInspect;
import com.ruoyi.quality.pojo.QualityInspectFile;
import com.ruoyi.quality.pojo.QualityInspectParam;
import com.ruoyi.quality.service.IQualityInspectFileService;
import com.ruoyi.quality.service.IQualityInspectParamService;
import com.ruoyi.quality.service.IQualityInspectService;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;
/**
 * è´¢åŠ¡ç®¡ç†--收入管理
 */
@RestController
@RequestMapping("/account/accountIncome")
public class AccountIncomeController {
    @Resource
    private AccountIncomeService accountIncomeService;
    /**
     * æ–°å¢ž
     * @param accountIncome
     * @return
     */
    @PostMapping("/add")
    public AjaxResult add(@RequestBody AccountIncome accountIncome) {
        accountIncome.setInputTime(new Date());
        LoginUser loginUser = SecurityUtils.getLoginUser();
        accountIncome.setInputUser(loginUser.getNickName());
        return AjaxResult.success(accountIncomeService.save(accountIncome));
    }
    /**
     * åˆ é™¤
     * @param ids
     * @return
     */
    @DeleteMapping("/del")
    public AjaxResult delQualityInspect(@RequestBody List<Integer> ids) {
        if(CollectionUtils.isEmpty(ids)){
            return AjaxResult.error("请选择至少一条数据");
        }
        //删除检验单
        return AjaxResult.success(accountIncomeService.removeBatchByIds(ids));
    }
    /**
     * ä¿®æ”¹
     * @param accountIncome
     * @return
     */
    @PostMapping("/update")
    public AjaxResult update(@RequestBody AccountIncome accountIncome) {
        return AjaxResult.success(accountIncomeService.updateById(accountIncome));
    }
    /**
     *分页查询
     * @param page
     * @param accountIncome
     * @return
     */
    @GetMapping("/listPage")
    public AjaxResult accountIncomeListPage(Page page, AccountIncome accountIncome) {
        return AjaxResult.success(accountIncomeService.accountIncomeListPage(page, accountIncome));
    }
    /**
     * è¯¦æƒ…
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public AjaxResult accountIncomeDetail(@PathVariable("id") Integer id) {
        return AjaxResult.success(accountIncomeService.getById(id));
    }
    /**
     * å¯¼å‡º
     * @param response
     * @param accountIncome
     */
    @PostMapping("/export")
    public void accountIncomeExport(HttpServletResponse response,AccountIncome accountIncome) {
        accountIncomeService.accountIncomeExport(response, accountIncome);
    }
}
src/main/java/com/ruoyi/account/dto/AccountDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,69 @@
package com.ruoyi.account.dto;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.account.pojo.AccountExpense;
import com.ruoyi.account.pojo.AccountIncome;
import com.ruoyi.dto.DateQueryDto;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * è´¢åŠ¡ç®¡ç†--财务报表
 */
@Data
public class AccountDto implements Serializable {
    /**
     * æ€»æ”¶å…¥
     */
    private BigDecimal totalIncome;
    /**
     * å„类型收入金额(销售收入,服务收入,其他收入)
     */
    private List<AccountDto2> incomeType;
    /**
     * æ”¶å…¥ç¬”æ•°
     */
    private Long incomeNumber;
    /**
     * æ€»æ”¯å‡º
     */
    private BigDecimal totalExpense;
    /**
     * å„类型支出金额(办公用品,员工工资,差旅费,设备费用,其他)
     */
    private List<AccountDto2> expenseType;
    /**
     * æ”¯å‡ºç¬”æ•°
     */
    private Long expenseNumber;
    /**
     * å‡€æ”¶å…¥
     */
    private BigDecimal netRevenue;
}
src/main/java/com/ruoyi/account/dto/AccountDto2.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.ruoyi.account.dto;
import com.ruoyi.account.pojo.AccountExpense;
import com.ruoyi.account.pojo.AccountIncome;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
/**
 * è´¢åŠ¡ç®¡ç†--财务报表(类型)
 */
@Data
public class AccountDto2 implements Serializable {
    /**
     * ç±»åž‹
     */
    private String typeName;
    /**
     * é‡‘额
     */
    private BigDecimal account;
}
src/main/java/com/ruoyi/account/mapper/AccountExpenseMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.ruoyi.account.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.account.dto.AccountDto;
import com.ruoyi.account.dto.AccountDto2;
import com.ruoyi.account.pojo.AccountExpense;
import com.ruoyi.account.pojo.AccountIncome;
import com.ruoyi.dto.DateQueryDto;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
@Mapper
public interface AccountExpenseMapper extends BaseMapper<AccountExpense> {
    IPage<AccountExpense> accountExpenseListPage(Page page, @Param("accountExpense") AccountExpense accountExpense);
    List<AccountExpense> accountExpenseExport(@Param("accountExpense") AccountExpense accountExpense);
    List<AccountDto2> report(@Param("dateQueryDto") DateQueryDto dateQueryDto);
}
src/main/java/com/ruoyi/account/mapper/AccountFileMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.ruoyi.account.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.account.pojo.AccountFile;
import com.ruoyi.quality.pojo.QualityInspectFile;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface AccountFileMapper extends BaseMapper<AccountFile> {
    IPage<AccountFile> accountFileListPage(Page page, @Param("accountFile") AccountFile accountFile);
}
src/main/java/com/ruoyi/account/mapper/AccountIncomeMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.ruoyi.account.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.account.dto.AccountDto2;
import com.ruoyi.account.pojo.AccountFile;
import com.ruoyi.account.pojo.AccountIncome;
import com.ruoyi.dto.DateQueryDto;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
@Mapper
public interface AccountIncomeMapper extends BaseMapper<AccountIncome> {
    IPage<AccountIncome> accountIncomeListPage(Page page, @Param("accountIncome") AccountIncome accountIncome);
    List<AccountIncome> accountIncomeExport(@Param("accountIncome") AccountIncome accountIncome);
    List<AccountDto2> report(@Param("dateQueryDto") DateQueryDto dateQueryDto);
}
src/main/java/com/ruoyi/account/pojo/AccountExpense.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,119 @@
package com.ruoyi.account.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.dto.DateQueryDto;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
/**
 * è´¢åŠ¡ç®¡ç†--支出管理
 * account_expense
 */
@TableName(value = "account_expense")
@Data
public class AccountExpense extends DateQueryDto implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * åºå·
     */
    @TableId(type = IdType.AUTO)
    private Long id;
    /**
     * æ”¯å‡ºæ—¥æœŸ
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "支出日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date expenseDate;
    /**
     * æ”¯å‡ºç±»åž‹(办公用品,员工工资,差旅费,设备费用,其他)
     */
    @Excel(name = "支出类型",readConverterExp = "0=办公用品,1=员工工资,2=差旅费,3=设备费用,4=其他")
    @NotBlank(message = "支出类型不能为空!!")
    private String expenseType;
    /**
     * ä¾›åº”商名称
     */
    @Excel(name = "供应商名称")
    private String supplierName;
    /**
     * æ”¯å‡ºé‡‘额
     */
    @Excel(name = "支出金额")
    private BigDecimal expenseMoney;
    /**
     * æ”¯å‡ºæè¿°
     */
    @Excel(name = "支出描述")
    private String expenseDescribed;
    /**
     * ä»˜æ¬¾æ–¹å¼(现金,支票,银行转账,其他)
     */
    @Excel(name = "付款方式",readConverterExp = "0=现金,1=支票,2=银行转账,3=其他")
    private String expenseMethod;
    /**
     * å‘票号码
     */
    @Excel(name = "发票号码")
    private String invoiceNumber;
    /**
     * å¤‡æ³¨
     */
    @Excel(name = "备注")
    private String note;
    /**
     * å½•入人员
     */
    @Excel(name = "录入人员")
    private String inputUser;
    /**
     * å½•入时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "录入时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date inputTime;
    @ApiModelProperty(value = "创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty(value = "创建用户")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty(value = "修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty(value = "修改用户")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty(value = "租户ID")
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
}
src/main/java/com/ruoyi/account/pojo/AccountFile.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
package com.ruoyi.account.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * è´¢åŠ¡ç®¡ç†--附件
 * account_file
 */
@TableName(value = "account_file")
@Data
public class AccountFile implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * åºå·
     */
    @TableId(type = IdType.AUTO)
    private Long id;
    @ApiModelProperty(value = "文件名称")
    private String name;
    @ApiModelProperty(value = "文件路径")
    private String url;
    @ApiModelProperty(value = "文件大小")
    private int fileSize;
    @ApiModelProperty(value = "财务ID")
    @NotBlank(message = "财务id不能为空!")
    private Long accountId;
    /**
     * ç±»åž‹(收入/支出)
     */
    @ApiModelProperty(value = "类型(收入/支出)")
    private String accountType;
    @ApiModelProperty(value = "创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty(value = "修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty(value = "创建用户")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty(value = "修改用户")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty(value = "租户ID")
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
}
src/main/java/com/ruoyi/account/pojo/AccountIncome.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,119 @@
package com.ruoyi.account.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.dto.DateQueryDto;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
/**
 * è´¢åŠ¡ç®¡ç†--收入管理
 * account_income
 */
@TableName(value = "account_income")
@Data
public class AccountIncome extends DateQueryDto  implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * åºå·
     */
    @TableId(type = IdType.AUTO)
    private Long id;
    /**
     * æ”¶å…¥æ—¥æœŸ
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "收入日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date incomeDate;
    /**
     * æ”¶å…¥ç±»åž‹(销售收入,服务收入,其他收入)
     */
    @Excel(name = "收入类型",readConverterExp = "0=销售收入,1=服务收入,2=其他收入")
    @NotBlank(message = "收入类型不能为空!!")
    private String incomeType;
    /**
     * å®¢æˆ·åç§°
     */
    @Excel(name = "客户名称")
    private String customerName;
    /**
     * æ”¶å…¥é‡‘额
     */
    @Excel(name = "收入金额")
    private BigDecimal incomeMoney;
    /**
     * æ”¶å…¥æè¿°
     */
    @Excel(name = "收入描述")
    private String incomeDescribed;
    /**
     * æ”¶æ¬¾æ–¹å¼(现金,支票,银行转账,其他)
     */
    @Excel(name = "收款方式",readConverterExp = "0=现金,1=支票,2=银行转账,3=其他")
    private String incomeMethod;
    /**
     * å‘票号码
     */
    @Excel(name = "发票号码")
    private String invoiceNumber;
    /**
     * å¤‡æ³¨
     */
    @Excel(name = "备注")
    private String note;
    /**
     * å½•入人员
     */
    @Excel(name = "录入人员")
    private String inputUser;
    /**
     * å½•入时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "录入时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date inputTime;
    @ApiModelProperty(value = "创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty(value = "创建用户")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty(value = "修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty(value = "修改用户")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty(value = "租户ID")
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
}
src/main/java/com/ruoyi/account/service/AccountExpenseService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.account.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.account.dto.AccountDto;
import com.ruoyi.account.pojo.AccountExpense;
import com.ruoyi.account.pojo.AccountIncome;
import com.ruoyi.dto.DateQueryDto;
import javax.servlet.http.HttpServletResponse;
public interface AccountExpenseService extends IService<AccountExpense> {
    IPage<AccountExpense> accountExpenseListPage(Page page, AccountExpense accountExpense);
    void accountExpenseExport(HttpServletResponse response, AccountExpense accountExpense);
    AccountDto report(DateQueryDto dateQueryDto);
}
src/main/java/com/ruoyi/account/service/AccountFileService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.ruoyi.account.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.account.pojo.AccountFile;
import com.ruoyi.quality.pojo.QualityInspectFile;
public interface AccountFileService extends IService<AccountFile> {
    IPage<AccountFile> accountFileListPage(Page page, AccountFile accountFile);
}
src/main/java/com/ruoyi/account/service/AccountIncomeService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.ruoyi.account.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.account.pojo.AccountFile;
import com.ruoyi.account.pojo.AccountIncome;
import javax.servlet.http.HttpServletResponse;
public interface AccountIncomeService extends IService<AccountIncome> {
    IPage<AccountIncome> accountIncomeListPage(Page page, AccountIncome accountIncome);
    void accountIncomeExport(HttpServletResponse response, AccountIncome accountIncome);
}
src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,77 @@
package com.ruoyi.account.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.account.dto.AccountDto;
import com.ruoyi.account.dto.AccountDto2;
import com.ruoyi.account.mapper.AccountExpenseMapper;
import com.ruoyi.account.mapper.AccountFileMapper;
import com.ruoyi.account.mapper.AccountIncomeMapper;
import com.ruoyi.account.pojo.AccountExpense;
import com.ruoyi.account.pojo.AccountIncome;
import com.ruoyi.account.service.AccountExpenseService;
import com.ruoyi.account.service.AccountIncomeService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.dto.DateQueryDto;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
@AllArgsConstructor
@Service
public class AccountExpenseServiceImpl extends ServiceImpl<AccountExpenseMapper, AccountExpense> implements AccountExpenseService {
    private AccountExpenseMapper accountExpenseMapper;
    private AccountIncomeMapper accountIncomeMapper;
    //分页查询
    @Override
    public IPage<AccountExpense> accountExpenseListPage(Page page, AccountExpense accountExpense) {
        return accountExpenseMapper.accountExpenseListPage(page,accountExpense);
    }
    //导出
    @Override
    public void accountExpenseExport(HttpServletResponse response, AccountExpense accountExpense) {
        List<AccountExpense> accountExpenses =accountExpenseMapper.accountExpenseExport(accountExpense);
        ExcelUtil<AccountExpense> util = new ExcelUtil<AccountExpense>(AccountExpense.class);
        util.exportExcel(response, accountExpenses, "支出管理导出");
    }
    //财务报表图表
    @Override
    public AccountDto report(DateQueryDto dateQueryDto) {
        AccountDto accountDto = new AccountDto();
        //获取该段时间内的所有收入
        List<AccountDto2> accountIncomes =accountIncomeMapper.report(dateQueryDto);
        accountDto.setIncomeType(accountIncomes);
        Long incomeNumber = accountIncomeMapper.selectCount(Wrappers.<AccountIncome>lambdaQuery()
                .between(AccountIncome::getIncomeDate, dateQueryDto.getEntryDateStart(), dateQueryDto.getEntryDateEnd()));
        accountDto.setIncomeNumber(incomeNumber);
        BigDecimal totalIncome = accountIncomes.stream().map(AccountDto2::getAccount).reduce(BigDecimal.ZERO, BigDecimal::add);
        accountDto.setTotalIncome(totalIncome);
        //获取该段时间内的所有支出
        List<AccountDto2> accountExpenses =accountExpenseMapper.report(dateQueryDto);
        accountDto.setExpenseType(accountExpenses);
        Long expenseNumber = accountExpenseMapper.selectCount(Wrappers.<AccountExpense>lambdaQuery()
                .between(AccountExpense::getExpenseDate, dateQueryDto.getEntryDateStart(), dateQueryDto.getEntryDateEnd()));
        accountDto.setExpenseNumber(expenseNumber);
        BigDecimal totalExpense = accountExpenses.stream().map(AccountDto2::getAccount).reduce(BigDecimal.ZERO, BigDecimal::add);
        accountDto.setTotalExpense(totalExpense);
        //净收入
        BigDecimal netRevenue = totalIncome.subtract(totalExpense);
        accountDto.setNetRevenue(netRevenue);
        return accountDto;
    }
}
src/main/java/com/ruoyi/account/service/impl/AccountFileServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.account.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.account.mapper.AccountFileMapper;
import com.ruoyi.account.pojo.AccountFile;
import com.ruoyi.account.service.AccountFileService;
import com.ruoyi.quality.mapper.QualityInspectFileMapper;
import com.ruoyi.quality.pojo.QualityInspectFile;
import com.ruoyi.quality.service.IQualityInspectFileService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
@AllArgsConstructor
@Service
public class AccountFileServiceImpl extends ServiceImpl<AccountFileMapper, AccountFile> implements AccountFileService {
    private AccountFileMapper accountFileMapper;
    @Override
    public IPage<AccountFile> accountFileListPage(Page page, AccountFile accountFile) {
        return accountFileMapper.accountFileListPage(page,accountFile);
    }
}
src/main/java/com/ruoyi/account/service/impl/AccountIncomeServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
package com.ruoyi.account.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.account.mapper.AccountFileMapper;
import com.ruoyi.account.mapper.AccountIncomeMapper;
import com.ruoyi.account.pojo.AccountFile;
import com.ruoyi.account.pojo.AccountIncome;
import com.ruoyi.account.service.AccountFileService;
import com.ruoyi.account.service.AccountIncomeService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.quality.pojo.QualityInspect;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
@AllArgsConstructor
@Service
public class AccountIncomeServiceImpl extends ServiceImpl<AccountIncomeMapper, AccountIncome> implements AccountIncomeService {
    private AccountIncomeMapper accountIncomeMapper;
    //分页查询
    @Override
    public IPage<AccountIncome> accountIncomeListPage(Page page, AccountIncome accountIncome) {
        return accountIncomeMapper.accountIncomeListPage(page,accountIncome);
    }
    //导出
    @Override
    public void accountIncomeExport(HttpServletResponse response, AccountIncome accountIncome) {
        List<AccountIncome> accountIncomes =accountIncomeMapper.accountIncomeExport(accountIncome);
        ExcelUtil<AccountIncome> util = new ExcelUtil<AccountIncome>(AccountIncome.class);
        util.exportExcel(response, accountIncomes, "收入管理导出");
    }
}
src/main/resources/mapper/account/AccountExpenseMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
<?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.account.mapper.AccountExpenseMapper">
    <select id="accountExpenseListPage" resultType="com.ruoyi.account.pojo.AccountExpense">
        SELECT
        *
        FROM account_expense
        where
        1=1
        <if test="accountExpense.entryDateStart != null and accountExpense.entryDateStart != '' ">
            AND expense_date &gt;= DATE_FORMAT(#{accountExpense.entryDateStart},'%Y-%m-%d')
        </if>
        <if test="accountExpense.entryDateEnd != null and accountExpense.entryDateEnd != '' ">
            AND  expense_date &lt;= DATE_FORMAT(#{accountExpense.entryDateEnd},'%Y-%m-%d')
        </if>
        <if test="accountExpense.expenseType != null and accountExpense.expenseType != '' ">
            AND expense_type = #{accountExpense.expenseType}
        </if>
        <if test="accountExpense.expenseMethod != null and accountExpense.expenseMethod != '' ">
            AND expense_method = #{accountExpense.expenseMethod}
        </if>
    </select>
    <select id="accountExpenseExport" resultType="com.ruoyi.account.pojo.AccountExpense">
        SELECT
        *
        FROM account_expense
        where
        1=1
        <if test="accountExpense.entryDateStart != null and accountExpense.entryDateStart != '' ">
            AND expense_date &gt;= DATE_FORMAT(#{accountExpense.entryDateStart},'%Y-%m-%d')
        </if>
        <if test="accountExpense.entryDateEnd != null and accountExpense.entryDateEnd != '' ">
            AND  expense_date &lt;= DATE_FORMAT(#{accountExpense.entryDateEnd},'%Y-%m-%d')
        </if>
        <if test="accountExpense.expenseType != null and accountExpense.expenseType != '' ">
            AND expense_type = #{accountExpense.expenseType}
        </if>
        <if test="accountExpense.expenseMethod != null and accountExpense.expenseMethod != '' ">
            AND expense_method = #{accountExpense.expenseMethod}
        </if>
    </select>
    <select id="report" resultType="com.ruoyi.account.dto.AccountDto2">
        SELECT
        sdd.dict_label typeName,
        sum(expense_money) account
        FROM account_expense ae
        left join sys_dict_data sdd on ae.expense_type = sdd.dict_value and  sdd.dict_type='expense_types'
        where
        1=1
        <if test="dateQueryDto.entryDateStart != null and dateQueryDto.entryDateStart != '' ">
            AND expense_date &gt;= DATE_FORMAT(#{dateQueryDto.entryDateStart},'%Y-%m-%d')
        </if>
        <if test="dateQueryDto.entryDateEnd != null and dateQueryDto.entryDateEnd != '' ">
            AND expense_date &lt;= DATE_FORMAT(#{dateQueryDto.entryDateEnd},'%Y-%m-%d')
        </if>
        group by expense_type
    </select>
</mapper>
src/main/resources/mapper/account/AccountFileMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
<?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.account.mapper.AccountFileMapper">
    <select id="accountFileListPage" resultType="com.ruoyi.account.pojo.AccountFile">
        SELECT
        *
        FROM account_file
        where
        1=1
        <if test="accountFile.name != null and accountFile.name != '' ">
            AND name = #{accountFile.name}
        </if>
        <if test="accountFile.accountType != null and accountFile.accountType != '' ">
            AND account_type = #{accountFile.accountType}
        </if>
    </select>
</mapper>
src/main/resources/mapper/account/AccountIncomeMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
<?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.account.mapper.AccountIncomeMapper">
    <select id="accountIncomeListPage" resultType="com.ruoyi.account.pojo.AccountIncome">
        SELECT
        *
        FROM account_income
        where
        1=1
        <if test="accountIncome.entryDateStart != null and accountIncome.entryDateStart != '' ">
            AND income_date &gt;= DATE_FORMAT(#{accountIncome.entryDateStart},'%Y-%m-%d')
        </if>
        <if test="accountIncome.entryDateEnd != null and accountIncome.entryDateEnd != '' ">
            AND income_date &lt;= DATE_FORMAT(#{accountIncome.entryDateEnd},'%Y-%m-%d')
        </if>
        <if test="accountIncome.incomeType != null and accountIncome.incomeType != '' ">
            AND income_type = #{accountIncome.incomeType}
        </if>
        <if test="accountIncome.incomeMethod != null and accountIncome.incomeMethod != '' ">
            AND income_method = #{accountIncome.incomeMethod}
        </if>
    </select>
    <select id="accountIncomeExport" resultType="com.ruoyi.account.pojo.AccountIncome">
        SELECT
        *
        FROM account_income
        where
        1=1
        <if test="accountIncome.entryDateStart != null and accountIncome.entryDateStart != '' ">
            AND income_date &gt;= DATE_FORMAT(#{accountIncome.entryDateStart},'%Y-%m-%d')
        </if>
        <if test="accountIncome.entryDateEnd != null and accountIncome.entryDateEnd != '' ">
            AND income_date &lt;= DATE_FORMAT(#{accountIncome.entryDateEnd},'%Y-%m-%d')
        </if>
        <if test="accountIncome.incomeType != null and accountIncome.incomeType != '' ">
            AND income_type = #{accountIncome.incomeType}
        </if>
        <if test="accountIncome.incomeMethod != null and accountIncome.incomeMethod != '' ">
            AND income_method = #{accountIncome.incomeMethod}
        </if>
    </select>
    <select id="report" resultType="com.ruoyi.account.dto.AccountDto2">
        SELECT
        sdd.dict_label typeName,
        sum(income_money) account
        FROM account_income ai
        left join sys_dict_data sdd on ai.income_type = sdd.dict_value and  sdd.dict_type='income_types'
        where
        1=1
        <if test="dateQueryDto.entryDateStart != null and dateQueryDto.entryDateStart != '' ">
            AND income_date &gt;= DATE_FORMAT(#{dateQueryDto.entryDateStart},'%Y-%m-%d')
        </if>
        <if test="dateQueryDto.entryDateEnd != null and dateQueryDto.entryDateEnd != '' ">
            AND income_date &lt;= DATE_FORMAT(#{dateQueryDto.entryDateEnd},'%Y-%m-%d')
        </if>
        group by income_type
    </select>
</mapper>