package com.ruoyi.web.controller.project; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.project.domain.SpStatExpense; import com.ruoyi.project.domain.SpStatExpenseDept; import com.ruoyi.project.domain.SpStatExpenseReq; import com.ruoyi.project.service.SpstatExpenseService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.math.BigDecimal; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; /** * 报销统计 * * @author ruoyi * @date 2022-01-24 */ @Slf4j @Api("报销统计") @RestController @RequestMapping("/project/spstatexpense") public class SpStatExpenseController extends BaseController { @Autowired SpstatExpenseService spstatExpenseService; /** * 查询费用统计 */ @ApiOperation("查询报销统计") @PostMapping("/spStatExpenselist") public TableDataInfo spStatExpenselist(@RequestBody SpStatExpenseReq spStatExpenseReq) { startPage(); return getDataTable(spstatExpenseService.getListBySpstatExpense(spStatExpenseReq)); } /** * 导出费用统计 */ @ApiOperation("导出费用统计") @Log(title = "费用统计", businessType = BusinessType.EXPORT) @GetMapping("/export") public AjaxResult export(SpStatExpenseReq spStatExpenseReq) { List list = spstatExpenseService.getListBySpstatExpense(spStatExpenseReq); // 金额保留 2 位小数;0.00 不显示(置空) for (SpStatExpense row : list) { row.setAmount(blankZero(row.getAmount())); row.setExpertfee(blankZero(row.getExpertfee())); row.setEthicalistfee(blankZero(row.getEthicalistfee())); row.setMedicalcost(blankZero(row.getMedicalcost())); row.setOfficecost(blankZero(row.getOfficecost())); row.setReimcost(blankZero(row.getReimcost())); } ExcelUtil util = new ExcelUtil(SpStatExpense.class); return util.exportExcel(list, "费用统计数据"); } /** * 导出费用统计(按业务组) */ @ApiOperation("导出费用统计(按业务组)") @Log(title = "费用统计", businessType = BusinessType.EXPORT) @GetMapping("/exportDept") public AjaxResult exportDept(SpStatExpenseReq spStatExpenseReq) { List list = spstatExpenseService.getListBySpstatExpense(spStatExpenseReq); Map grouped = new LinkedHashMap(); for (SpStatExpense row : list) { String key = row.getDeptmentno() != null ? row.getDeptmentno() : row.getDeptmentName(); if (key == null) { key = ""; } SpStatExpenseDept dept = grouped.get(key); if (dept == null) { dept = new SpStatExpenseDept(); dept.setDeptname(row.getDeptmentName() == null ? "未分组" : row.getDeptmentName()); dept.setAmount(BigDecimal.ZERO); dept.setExpertfee(BigDecimal.ZERO); dept.setEthicalistfee(BigDecimal.ZERO); dept.setMedicalcost(BigDecimal.ZERO); dept.setOfficecost(BigDecimal.ZERO); dept.setReimcost(BigDecimal.ZERO); grouped.put(key, dept); } dept.setAmount(dept.getAmount().add(nz(row.getAmount()))); dept.setExpertfee(dept.getExpertfee().add(nz(row.getExpertfee()))); dept.setEthicalistfee(dept.getEthicalistfee().add(nz(row.getEthicalistfee()))); dept.setMedicalcost(dept.getMedicalcost().add(nz(row.getMedicalcost()))); dept.setOfficecost(dept.getOfficecost().add(nz(row.getOfficecost()))); dept.setReimcost(dept.getReimcost().add(nz(row.getReimcost()))); } List result = new ArrayList(grouped.values()); for (SpStatExpenseDept dept : result) { dept.setAmount(blankZero(dept.getAmount())); dept.setExpertfee(blankZero(dept.getExpertfee())); dept.setEthicalistfee(blankZero(dept.getEthicalistfee())); dept.setMedicalcost(blankZero(dept.getMedicalcost())); dept.setOfficecost(blankZero(dept.getOfficecost())); dept.setReimcost(blankZero(dept.getReimcost())); } ExcelUtil util = new ExcelUtil(SpStatExpenseDept.class); return util.exportExcel(result, "费用统计(按业务组)"); } private BigDecimal nz(BigDecimal value) { return value == null ? BigDecimal.ZERO : value; } private BigDecimal blankZero(BigDecimal value) { return (value == null || value.compareTo(BigDecimal.ZERO) == 0) ? null : value; } }