Compare commits
3 Commits
dev
...
frx_export
Author | SHA1 | Date | |
---|---|---|---|
![]() |
c512c25a50 | ||
![]() |
d899fdf3d3 | ||
![]() |
b7cb164837 |
@ -140,6 +140,16 @@
|
|||||||
<version>2.0.0-jdk8-snapshot</version>
|
<version>2.0.0-jdk8-snapshot</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba</groupId>
|
||||||
|
<artifactId>easyexcel-core</artifactId>
|
||||||
|
<version>4.0.3</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.iocoder.cloud</groupId>
|
||||||
|
<artifactId>yudao-spring-boot-starter-excel</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<build>
|
<build>
|
||||||
|
@ -2,9 +2,11 @@ package cn.iocoder.yudao.module.bpm.controller.admin.financialpayment;
|
|||||||
|
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.UploadUserFile;
|
import cn.iocoder.yudao.framework.common.pojo.UploadUserFile;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
|
||||||
import cn.iocoder.yudao.module.bpm.controller.admin.financialpayment.vo.FinancialPaymentPageReqVO;
|
import cn.iocoder.yudao.module.bpm.controller.admin.financialpayment.vo.FinancialPaymentPageReqVO;
|
||||||
import cn.iocoder.yudao.module.bpm.controller.admin.financialpayment.vo.FinancialPaymentRespVO;
|
import cn.iocoder.yudao.module.bpm.controller.admin.financialpayment.vo.FinancialPaymentRespVO;
|
||||||
import cn.iocoder.yudao.module.bpm.controller.admin.financialpayment.vo.FinancialPaymentSaveReqVO;
|
import cn.iocoder.yudao.module.bpm.controller.admin.financialpayment.vo.FinancialPaymentSaveReqVO;
|
||||||
@ -17,15 +19,19 @@ import cn.iocoder.yudao.module.bpm.service.financialpaymentitem.FinancialPayment
|
|||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
|
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
|
||||||
|
|
||||||
@Tag(name = "管理后台 - 财务支付管理")
|
@Tag(name = "管理后台 - 财务支付管理")
|
||||||
@RestController
|
@RestController
|
||||||
@ -102,6 +108,11 @@ public class FinancialPaymentController {
|
|||||||
@Operation(summary = "获得财务支付管理分页")
|
@Operation(summary = "获得财务支付管理分页")
|
||||||
public CommonResult<PageResult<FinancialPaymentRespVO>> getFinancialPaymentPage(@Valid FinancialPaymentPageReqVO pageReqVO) {
|
public CommonResult<PageResult<FinancialPaymentRespVO>> getFinancialPaymentPage(@Valid FinancialPaymentPageReqVO pageReqVO) {
|
||||||
PageResult<FinancialPaymentDO> pageResult = financialPaymentService.getFinancialPaymentPage(pageReqVO);
|
PageResult<FinancialPaymentDO> pageResult = financialPaymentService.getFinancialPaymentPage(pageReqVO);
|
||||||
|
pageResult.getList().forEach(item -> {
|
||||||
|
if (StringUtils.isNotEmpty(item.getRecipientName())) {
|
||||||
|
item.setRecipientName(item.getRecipientName().split(",")[0]);
|
||||||
|
}
|
||||||
|
});
|
||||||
return success(BeanUtils.toBean(pageResult, FinancialPaymentRespVO.class));
|
return success(BeanUtils.toBean(pageResult, FinancialPaymentRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,4 +122,14 @@ public class FinancialPaymentController {
|
|||||||
FinancialPaymentDO paymentDO = financialPaymentService.getPaymentTotal(pageReqVO);
|
FinancialPaymentDO paymentDO = financialPaymentService.getPaymentTotal(pageReqVO);
|
||||||
return success(BeanUtils.toBean(paymentDO, FinancialPaymentRespVO.class));
|
return success(BeanUtils.toBean(paymentDO, FinancialPaymentRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/export-excel")
|
||||||
|
@Operation(summary = "导出支付信息 Excel")
|
||||||
|
@OperateLog(type = EXPORT)
|
||||||
|
public void exportFactoryInfoExcel(@Valid FinancialPaymentPageReqVO pageReqVO,
|
||||||
|
HttpServletResponse response) throws IOException {
|
||||||
|
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||||
|
|
||||||
|
financialPaymentService.exportList(response, pageReqVO);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,42 @@
|
|||||||
|
package cn.iocoder.yudao.module.bpm.controller.admin.financialpayment.vo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户 Excel 导入 VO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Accessors(chain = false) // 设置 chain = false,避免用户导入有问题
|
||||||
|
public class FinancialExportExcelVO {
|
||||||
|
|
||||||
|
@ExcelProperty("姓名")
|
||||||
|
private String nickName;
|
||||||
|
|
||||||
|
@ExcelProperty("报销部门")
|
||||||
|
private String deptName;
|
||||||
|
|
||||||
|
@ExcelProperty("事项")
|
||||||
|
private String detail;
|
||||||
|
|
||||||
|
@ExcelProperty("金额")
|
||||||
|
private BigDecimal amount;
|
||||||
|
|
||||||
|
@ExcelProperty("卡号")
|
||||||
|
private String bankNo;
|
||||||
|
|
||||||
|
@ExcelProperty("公账/私账")
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
@ExcelProperty("备注")
|
||||||
|
private String note;
|
||||||
|
}
|
@ -0,0 +1,77 @@
|
|||||||
|
package cn.iocoder.yudao.module.bpm.service.financialpayment;
|
||||||
|
|
||||||
|
import com.alibaba.excel.metadata.Head;
|
||||||
|
import com.alibaba.excel.metadata.data.WriteCellData;
|
||||||
|
import com.alibaba.excel.write.handler.CellWriteHandler;
|
||||||
|
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
|
||||||
|
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
|
||||||
|
import org.apache.poi.ss.usermodel.*;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class CustomCellStyleHandler implements CellWriteHandler {
|
||||||
|
|
||||||
|
private final Map<String, CellStyle> styleCache = new HashMap<>();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterCellDispose(
|
||||||
|
WriteSheetHolder writeSheetHolder,
|
||||||
|
WriteTableHolder writeTableHolder,
|
||||||
|
List<WriteCellData<?>> cellDataList,
|
||||||
|
Cell cell,
|
||||||
|
Head head,
|
||||||
|
Integer relativeRowIndex,
|
||||||
|
Boolean isHead) {
|
||||||
|
|
||||||
|
Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
|
||||||
|
writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), 7120);
|
||||||
|
|
||||||
|
// 获取或创建样式
|
||||||
|
CellStyle cellStyle = getOrCreateCellStyle(workbook, isHead, relativeRowIndex, cellDataList);
|
||||||
|
|
||||||
|
cell.setCellStyle(cellStyle);
|
||||||
|
}
|
||||||
|
|
||||||
|
private CellStyle getOrCreateCellStyle(Workbook workbook, Boolean isHead, Integer relativeRowIndex, List<WriteCellData<?>> cellDataList) {
|
||||||
|
String key = generateStyleKey(isHead, relativeRowIndex);
|
||||||
|
if (styleCache.containsKey(key)) {
|
||||||
|
return styleCache.get(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
CellStyle cellStyle = workbook.createCellStyle();
|
||||||
|
cellStyle.setAlignment(HorizontalAlignment.CENTER);
|
||||||
|
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
||||||
|
|
||||||
|
// if (isHead != null && isHead) {
|
||||||
|
// setHeaderStyle(workbook, cellStyle, relativeRowIndex, cellDataList);
|
||||||
|
// }
|
||||||
|
|
||||||
|
styleCache.put(key, cellStyle);
|
||||||
|
return cellStyle;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setHeaderStyle(Workbook workbook, CellStyle cellStyle, Integer relativeRowIndex, List<WriteCellData<?>> cellDataList) {
|
||||||
|
if (relativeRowIndex == 0 || relativeRowIndex == 1) {
|
||||||
|
applyStyle(workbook, cellStyle, IndexedColors.TURQUOISE.getIndex(), (short) 20, cellDataList);
|
||||||
|
} else if (relativeRowIndex == 2 || relativeRowIndex == 3) {
|
||||||
|
applyStyle(workbook, cellStyle, IndexedColors.LIGHT_YELLOW.getIndex(), (short) 20, cellDataList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void applyStyle(Workbook workbook, CellStyle cellStyle, short backgroundColor, short fontSize, List<WriteCellData<?>> cellDataList) {
|
||||||
|
cellStyle.setFillForegroundColor(backgroundColor);
|
||||||
|
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
||||||
|
|
||||||
|
Font font = workbook.createFont();
|
||||||
|
font.setFontHeightInPoints(fontSize);
|
||||||
|
cellStyle.setFont(font);
|
||||||
|
cellDataList.get(0).setWriteCellStyle(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String generateStyleKey(Boolean isHead, Integer relativeRowIndex) {
|
||||||
|
return "isHead:" + isHead + ",rowIndex:" + relativeRowIndex;
|
||||||
|
}
|
||||||
|
}
|
@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.bpm.controller.admin.financialpayment.vo.Financia
|
|||||||
import cn.iocoder.yudao.module.bpm.controller.admin.financialpayment.vo.FinancialPaymentSaveVO;
|
import cn.iocoder.yudao.module.bpm.controller.admin.financialpayment.vo.FinancialPaymentSaveVO;
|
||||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.financialpayment.FinancialPaymentDO;
|
import cn.iocoder.yudao.module.bpm.dal.dataobject.financialpayment.FinancialPaymentDO;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -102,4 +103,11 @@ public interface FinancialPaymentService {
|
|||||||
* @return 统计信息
|
* @return 统计信息
|
||||||
*/
|
*/
|
||||||
FinancialPaymentDO getPaymentTotal(FinancialPaymentPageReqVO pageReqVO);
|
FinancialPaymentDO getPaymentTotal(FinancialPaymentPageReqVO pageReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出支付信息
|
||||||
|
* @param response 响应
|
||||||
|
* @param pageReqVO 查询条件
|
||||||
|
*/
|
||||||
|
void exportList(HttpServletResponse response, FinancialPaymentPageReqVO pageReqVO);
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,6 @@ import cn.iocoder.yudao.module.bpm.dal.mysql.oa.*;
|
|||||||
import cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmProcessInstanceExtMapper;
|
import cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmProcessInstanceExtMapper;
|
||||||
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
|
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
|
||||||
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum;
|
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum;
|
||||||
import cn.iocoder.yudao.module.bpm.service.oa.BpmOAExpensesService;
|
|
||||||
import cn.iocoder.yudao.module.system.api.auth.AdminOauthUserOtherInfoApi;
|
import cn.iocoder.yudao.module.system.api.auth.AdminOauthUserOtherInfoApi;
|
||||||
import cn.iocoder.yudao.module.system.api.auth.dto.AdminOauthUserOtherInfoApiDTO;
|
import cn.iocoder.yudao.module.system.api.auth.dto.AdminOauthUserOtherInfoApiDTO;
|
||||||
import cn.iocoder.yudao.module.system.api.auth.vo.AdminOauthUserOtherInfoApiVO;
|
import cn.iocoder.yudao.module.system.api.auth.vo.AdminOauthUserOtherInfoApiVO;
|
||||||
@ -33,6 +32,8 @@ import cn.iocoder.yudao.module.system.api.dept.DeptApi;
|
|||||||
import cn.iocoder.yudao.module.system.api.loan.LoanApi;
|
import cn.iocoder.yudao.module.system.api.loan.LoanApi;
|
||||||
import cn.iocoder.yudao.module.system.api.loan.dto.LoanDTO;
|
import cn.iocoder.yudao.module.system.api.loan.dto.LoanDTO;
|
||||||
import cn.iocoder.yudao.module.system.api.subscribe.SubscribeMessageSendApi;
|
import cn.iocoder.yudao.module.system.api.subscribe.SubscribeMessageSendApi;
|
||||||
|
import com.alibaba.excel.EasyExcel;
|
||||||
|
import com.alibaba.excel.support.ExcelTypeEnum;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@ -40,10 +41,13 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.io.IOException;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.ArrayList;
|
import java.net.URLEncoder;
|
||||||
import java.util.Collections;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.List;
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getLoginUserId;
|
import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getLoginUserId;
|
||||||
|
|
||||||
@ -286,4 +290,116 @@ public class FinancialPaymentServiceImpl implements FinancialPaymentService {
|
|||||||
pageReqVO.setReceiveUserId(getLoginUserId());
|
pageReqVO.setReceiveUserId(getLoginUserId());
|
||||||
return financialPaymentMapper.selectPaymentTotal(pageReqVO);
|
return financialPaymentMapper.selectPaymentTotal(pageReqVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void exportList(HttpServletResponse response, FinancialPaymentPageReqVO pageReqVO) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (pageReqVO.getStatus() == null) {
|
||||||
|
pageReqVO.setStatus(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取支付信息数据
|
||||||
|
List<FinancialPaymentDO> list = this.getFinancialPaymentPage(pageReqVO).getList();
|
||||||
|
list.removeIf(item -> item.getCompanyId() == null);
|
||||||
|
|
||||||
|
// 根据付款公司进行分组
|
||||||
|
Map<Long, List<FinancialPaymentDO>> companyIdMap = list.stream().collect(Collectors.groupingBy(FinancialPaymentDO::getCompanyId));
|
||||||
|
|
||||||
|
List<List<String>> data = new ArrayList<>();
|
||||||
|
for (Map.Entry<Long, List<FinancialPaymentDO>> entry : companyIdMap.entrySet()) {
|
||||||
|
|
||||||
|
// 设置表头
|
||||||
|
data.add(Arrays.asList(entry.getValue().get(0).getCompanyName(), entry.getValue().get(0).getCompanyName(), entry.getValue().get(0).getCompanyName(),
|
||||||
|
entry.getValue().get(0).getCompanyName(), entry.getValue().get(0).getCompanyName(), entry.getValue().get(0).getCompanyName()));
|
||||||
|
data.add(this.setTitle());
|
||||||
|
|
||||||
|
// 提取所有公账 支付信息
|
||||||
|
List<FinancialPaymentDO> publicAccount = entry.getValue().stream()
|
||||||
|
.filter(item -> item.getType() != 9)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
// 提取所有私账 支付信息
|
||||||
|
List<FinancialPaymentDO> privateAccount = entry.getValue().stream()
|
||||||
|
.filter(item -> item.getType() == 9)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
// 遍历公账信息
|
||||||
|
for (FinancialPaymentDO financialPaymentDO : publicAccount) {
|
||||||
|
List<String> row = new ArrayList<>();
|
||||||
|
// 设置姓名
|
||||||
|
row.add(financialPaymentDO.getNickname());
|
||||||
|
// 设置报销部门
|
||||||
|
row.add(financialPaymentDO.getDeptName());
|
||||||
|
// 添加事项
|
||||||
|
row.add(financialPaymentDO.getReason());
|
||||||
|
// 添加金额
|
||||||
|
row.add(financialPaymentDO.getActualPayment().toString());
|
||||||
|
// 添加卡号
|
||||||
|
row.add(financialPaymentDO.getRecipientName());
|
||||||
|
// 添加公账/私账
|
||||||
|
row.add("公账");
|
||||||
|
// 添加备注
|
||||||
|
row.add(financialPaymentDO.getNickname() + "报销");
|
||||||
|
|
||||||
|
data.add(row);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加公账合计数据
|
||||||
|
BigDecimal publicAccountTotal = publicAccount.stream().map(FinancialPaymentDO::getActualPayment).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
data.add(Arrays.asList("公账总计", "公账总计", "公账总计", publicAccountTotal.toString(), "", "公账"));
|
||||||
|
|
||||||
|
// 遍历私账信息
|
||||||
|
for (FinancialPaymentDO financialPaymentDO : privateAccount) {
|
||||||
|
List<String> row = new ArrayList<>();
|
||||||
|
// 设置姓名
|
||||||
|
row.add(financialPaymentDO.getNickname());
|
||||||
|
// 设置报销部门
|
||||||
|
row.add(financialPaymentDO.getDeptName());
|
||||||
|
// 添加事项
|
||||||
|
row.add(financialPaymentDO.getReason());
|
||||||
|
// 添加金额
|
||||||
|
row.add(financialPaymentDO.getActualPayment().toString());
|
||||||
|
// 添加卡号
|
||||||
|
row.add(financialPaymentDO.getRecipientName());
|
||||||
|
// 添加公账/私账
|
||||||
|
row.add("私账");
|
||||||
|
// 添加备注
|
||||||
|
row.add(financialPaymentDO.getNickname() + "报销");
|
||||||
|
|
||||||
|
data.add(row);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加私账合计数据
|
||||||
|
BigDecimal privateAccountTotal = privateAccount.stream().map(FinancialPaymentDO::getActualPayment).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
data.add(Arrays.asList("私账总计", "私账总计", "私账总计", privateAccountTotal.toString(), "", "私账"));
|
||||||
|
}
|
||||||
|
|
||||||
|
EasyExcel.write(response.getOutputStream())
|
||||||
|
.autoCloseStream(false)
|
||||||
|
.excelType(ExcelTypeEnum.XLSX)
|
||||||
|
.sheet("账目明细")
|
||||||
|
.registerWriteHandler(new CustomCellStyleHandler())
|
||||||
|
.doWrite(data);
|
||||||
|
|
||||||
|
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("账目", StandardCharsets.UTF_8.name()));
|
||||||
|
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
|
||||||
|
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error("[exportList][导出失败]", e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> setTitle() {
|
||||||
|
List<String> titleRow = new ArrayList<>();
|
||||||
|
titleRow.add("姓名");
|
||||||
|
titleRow.add("报销部门");
|
||||||
|
titleRow.add("事项");
|
||||||
|
titleRow.add("金额");
|
||||||
|
titleRow.add("卡号");
|
||||||
|
titleRow.add("公账/私账");
|
||||||
|
titleRow.add("备注");
|
||||||
|
|
||||||
|
return titleRow;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -252,7 +252,7 @@ public class BpmOACashServiceImpl extends BpmOABaseService implements BpmOACashS
|
|||||||
.setAmountPayable(isImprest == 1 ? amount.abs() : cash.getTotalMoney())
|
.setAmountPayable(isImprest == 1 ? amount.abs() : cash.getTotalMoney())
|
||||||
.setBeginTime(processInstance.getCreateTime())
|
.setBeginTime(processInstance.getCreateTime())
|
||||||
.setEndTime(processInstance.getEndTime())
|
.setEndTime(processInstance.getEndTime())
|
||||||
.setRecipientName(bankRespDTO.getNickname())
|
.setRecipientName(bankRespDTO != null ? bankRespDTO.getNickname() + "," + bankRespDTO.getBankNo() + "," + bankRespDTO.getBankName() : "")
|
||||||
.setCompanyId(deptRespDTO != null ? deptRespDTO.getId() : null)
|
.setCompanyId(deptRespDTO != null ? deptRespDTO.getId() : null)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,6 @@ import cn.iocoder.yudao.module.system.api.loan.dto.LoanDTO;
|
|||||||
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
||||||
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import org.flowable.engine.runtime.ProcessInstance;
|
import org.flowable.engine.runtime.ProcessInstance;
|
||||||
import org.springframework.context.annotation.Lazy;
|
import org.springframework.context.annotation.Lazy;
|
||||||
@ -289,7 +288,7 @@ public class BpmOAExpensesServiceImpl extends BpmOABaseService implements BpmOAE
|
|||||||
.setProcessInstanceName(processInstance.getName())
|
.setProcessInstanceName(processInstance.getName())
|
||||||
.setBeginTime(processInstance.getCreateTime())
|
.setBeginTime(processInstance.getCreateTime())
|
||||||
.setEndTime(processInstance.getEndTime())
|
.setEndTime(processInstance.getEndTime())
|
||||||
.setRecipientName(bankRespDTO != null ? bankRespDTO.getNickname() : "")
|
.setRecipientName(bankRespDTO != null ? bankRespDTO.getNickname() + "," + bankRespDTO.getBankNo() + "," + bankRespDTO.getBankName() : "")
|
||||||
.setCompanyFactoryId(dto.getId())
|
.setCompanyFactoryId(dto.getId())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -143,7 +143,7 @@ public class BpmOAImprestServiceImpl extends BpmOABaseService implements BpmOAIm
|
|||||||
.setProcessInstanceName(processInstance.getName())
|
.setProcessInstanceName(processInstance.getName())
|
||||||
.setBeginTime(processInstance.getCreateTime())
|
.setBeginTime(processInstance.getCreateTime())
|
||||||
.setEndTime(processInstance.getEndTime())
|
.setEndTime(processInstance.getEndTime())
|
||||||
.setRecipientName(bankRespDTO.getNickname())
|
.setRecipientName(bankRespDTO != null ? bankRespDTO.getNickname() + "," + bankRespDTO.getBankNo() + "," + bankRespDTO.getBankName() : "")
|
||||||
.setCompanyId(deptRespDTO != null ? deptRespDTO.getId() : null)
|
.setCompanyId(deptRespDTO != null ? deptRespDTO.getId() : null)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -174,7 +174,7 @@ public class BpmOALoanServiceImpl extends BpmOABaseService implements BpmOALoanS
|
|||||||
.setProcessInstanceName(processInstance.getName())
|
.setProcessInstanceName(processInstance.getName())
|
||||||
.setBeginTime(processInstance.getCreateTime())
|
.setBeginTime(processInstance.getCreateTime())
|
||||||
.setEndTime(processInstance.getEndTime())
|
.setEndTime(processInstance.getEndTime())
|
||||||
.setRecipientName(bankRespDTO.getNickname())
|
.setRecipientName(bankRespDTO != null ? bankRespDTO.getNickname() + "," + bankRespDTO.getBankNo() + "," + bankRespDTO.getBankName() : "")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -147,7 +147,7 @@ public class BpmOAPaymentServiceImpl extends BpmOABaseService implements BpmOAPa
|
|||||||
.setProcessInstanceName(processInstance.getName())
|
.setProcessInstanceName(processInstance.getName())
|
||||||
.setBeginTime(processInstance.getCreateTime())
|
.setBeginTime(processInstance.getCreateTime())
|
||||||
.setEndTime(processInstance.getEndTime())
|
.setEndTime(processInstance.getEndTime())
|
||||||
.setRecipientName(bankRespDTO.getNickname())
|
.setRecipientName(bankRespDTO != null ? bankRespDTO.getNickname() + "," + bankRespDTO.getBankNo() + "," + bankRespDTO.getBankName() : "")
|
||||||
.setCompanyId(deptRespDTO != null ? deptRespDTO.getId() : null)
|
.setCompanyId(deptRespDTO != null ? deptRespDTO.getId() : null)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -251,7 +251,7 @@ public class BpmOAReimbursementServiceImpl extends BpmOABaseService implements B
|
|||||||
.setProcessInstanceName(processInstance.getName())
|
.setProcessInstanceName(processInstance.getName())
|
||||||
.setBeginTime(processInstance.getCreateTime())
|
.setBeginTime(processInstance.getCreateTime())
|
||||||
.setEndTime(processInstance.getEndTime())
|
.setEndTime(processInstance.getEndTime())
|
||||||
.setRecipientName(bpmOAReimbursementDO.getNickname())
|
.setRecipientName(bpmOAReimbursementDO.getNickname() + "," + bpmOAReimbursementDO.getBankNo() + "," + bpmOAReimbursementDO.getBankName())
|
||||||
.setCompanyId(deptRespDTO != null ? deptRespDTO.getId() : null)
|
.setCompanyId(deptRespDTO != null ? deptRespDTO.getId() : null)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
a.type as type,
|
a.type as type,
|
||||||
a.cost_section AS costSection,
|
a.cost_section AS costSection,
|
||||||
a.dept_id AS deptId,
|
a.dept_id AS deptId,
|
||||||
d.name AS deptName,
|
d.short_name AS deptName,
|
||||||
a.total_money AS amount,
|
a.total_money AS amount,
|
||||||
a.detail AS detail,
|
a.detail AS detail,
|
||||||
b.user_id AS userId,
|
b.user_id AS userId,
|
||||||
@ -30,7 +30,7 @@
|
|||||||
FROM bpm_oa_expenses b
|
FROM bpm_oa_expenses b
|
||||||
JOIN bpm_oa_expenses_item a ON a.expenses_id = b.id
|
JOIN bpm_oa_expenses_item a ON a.expenses_id = b.id
|
||||||
JOIN bpm_process_instance_ext c ON c.process_instance_id = b.process_instance_id
|
JOIN bpm_process_instance_ext c ON c.process_instance_id = b.process_instance_id
|
||||||
LEFT JOIN system_dept d ON d.factory_id = a.dept_id
|
LEFT JOIN sf_factory_info d ON d.id = a.dept_id
|
||||||
LEFT JOIN system_users u ON u.id = b.user_id
|
LEFT JOIN system_users u ON u.id = b.user_id
|
||||||
LEFT JOIN system_bank ub ON ub.id = b.bank_id
|
LEFT JOIN system_bank ub ON ub.id = b.bank_id
|
||||||
WHERE
|
WHERE
|
||||||
|
@ -270,7 +270,7 @@ public class DeptServiceImpl implements DeptService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@DataPermission(enable = false)
|
@DataPermission(enable = false)
|
||||||
@Cacheable(cacheNames = RedisKeyConstants.DEPT_CHILD_ID_LIST, key = "#id")
|
@Cacheable(cacheNames = RedisKeyConstants.DEPT_CHILD_ID_LIST, key = "#id", condition = "#id != null")
|
||||||
public List<DeptDO> getChildDept(Long id) {
|
public List<DeptDO> getChildDept(Long id) {
|
||||||
|
|
||||||
return deptMapper.selectList(new LambdaQueryWrapperX<DeptDO>()
|
return deptMapper.selectList(new LambdaQueryWrapperX<DeptDO>()
|
||||||
|
@ -19,6 +19,6 @@ public interface StaffSalaryApi {
|
|||||||
|
|
||||||
@PutMapping(PREFIX + "/updateIsGrant")
|
@PutMapping(PREFIX + "/updateIsGrant")
|
||||||
@Operation(summary = "更新是否已发放薪资")
|
@Operation(summary = "更新是否已发放薪资")
|
||||||
CommonResult<Boolean> updateIsGrant(@RequestParam("ids") Collection<Long> ids,
|
CommonResult<Boolean> updateIsGrant(@RequestParam(value = "ids", required = false) Collection<Long> ids,
|
||||||
@RequestParam("isGrant") Integer isGrant);
|
@RequestParam("isGrant") Integer isGrant);
|
||||||
}
|
}
|
||||||
|
@ -96,6 +96,15 @@ public class FactoryInfoController {
|
|||||||
return success(respVO);
|
return success(respVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/list")
|
||||||
|
@Operation(summary = "获得工厂以及公司列表 | 用于前端下拉框")
|
||||||
|
@PreAuthorize("@ss.hasPermission('smartfactory:factory-info:query')")
|
||||||
|
public CommonResult<List<FactorySimpleRespVO>> getList() {
|
||||||
|
|
||||||
|
List<FactoryInfoDO> factoryInfo = factoryInfoService.getList();
|
||||||
|
return success(BeanUtils.toBean(factoryInfo, FactorySimpleRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/simple-list")
|
@GetMapping("/simple-list")
|
||||||
@Operation(summary = "获得工厂列表 | 用于前端下拉框")
|
@Operation(summary = "获得工厂列表 | 用于前端下拉框")
|
||||||
@PreAuthorize("@ss.hasPermission('smartfactory:factory-info:query')")
|
@PreAuthorize("@ss.hasPermission('smartfactory:factory-info:query')")
|
||||||
|
@ -18,7 +18,6 @@ import io.swagger.v3.oas.annotations.Operation;
|
|||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
import io.swagger.v3.oas.annotations.Parameters;
|
import io.swagger.v3.oas.annotations.Parameters;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
@ -140,10 +139,29 @@ public class StaffController {
|
|||||||
public void exportStaffExcel(@Valid StaffPageReqVO pageReqVO,
|
public void exportStaffExcel(@Valid StaffPageReqVO pageReqVO,
|
||||||
HttpServletResponse response) throws IOException {
|
HttpServletResponse response) throws IOException {
|
||||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||||
|
pageReqVO.setStatus(1);
|
||||||
List<StaffDO> list = staffService.getStaffPage(pageReqVO).getList();
|
List<StaffDO> list = staffService.getStaffPage(pageReqVO).getList();
|
||||||
|
|
||||||
|
// 获取工种字典值
|
||||||
|
List<DictDataRespDTO> dictDataRespDTOS = dictDataApi.getDictDataList("user_work_type").getCheckedData();
|
||||||
|
Map<String, String> workTypeMap = dictDataRespDTOS.stream().collect(Collectors.toMap(DictDataRespDTO::getValue, DictDataRespDTO::getLabel));
|
||||||
|
|
||||||
|
// 获取工厂信息Map
|
||||||
|
Map<Long, FactoryInfoDO> factoryInfoDOMap = convertMap(factoryInfoService.getFactoryList(), FactoryInfoDO::getId);
|
||||||
|
|
||||||
|
List<StaffRespVO> respVOS = BeanUtils.toBean(list, StaffRespVO.class);
|
||||||
|
respVOS.forEach(item -> {
|
||||||
|
if (item.getWorkTypeId() != null) {
|
||||||
|
item.setWorkTypeName(workTypeMap.getOrDefault(item.getWorkTypeId().toString(), ""));
|
||||||
|
}
|
||||||
|
// 设置性别
|
||||||
|
item.setSexStr(item.getSex() == null ? null : item.getSex() == 1 ? "男" : "女");
|
||||||
|
// 设置工厂名称
|
||||||
|
item.setFactoryName(factoryInfoDOMap.get(item.getFactoryId()) != null ? factoryInfoDOMap.get(item.getFactoryId()).getShortName() : null);
|
||||||
|
});
|
||||||
|
|
||||||
// 导出 Excel
|
// 导出 Excel
|
||||||
ExcelUtils.write(response, "员工.xls", "数据", StaffRespVO.class,
|
ExcelUtils.write(response, "员工.xls", "数据", StaffRespVO.class, respVOS);
|
||||||
BeanUtils.toBean(list, StaffRespVO.class));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/get-import-template")
|
@GetMapping("/get-import-template")
|
||||||
|
@ -20,27 +20,34 @@ public class StaffRespVO {
|
|||||||
@ExcelProperty("姓名")
|
@ExcelProperty("姓名")
|
||||||
private String nickName;
|
private String nickName;
|
||||||
|
|
||||||
|
@Schema(description = "工厂名称", example = "6971")
|
||||||
|
@ExcelProperty("工厂名称")
|
||||||
|
private String factoryName;
|
||||||
|
|
||||||
@Schema(description = "年龄")
|
@Schema(description = "年龄")
|
||||||
@ExcelProperty("年龄")
|
@ExcelProperty("年龄")
|
||||||
private Integer age;
|
private Integer age;
|
||||||
|
|
||||||
@Schema(description = "用户性别(0男 1女 2未知)")
|
@Schema(description = "用户性别(1男 2女)")
|
||||||
@ExcelProperty("性别")
|
|
||||||
private Integer sex;
|
private Integer sex;
|
||||||
|
|
||||||
|
@Schema(description = "用户性别(1男 2女)")
|
||||||
|
@ExcelProperty("性别")
|
||||||
|
private String sexStr;
|
||||||
|
|
||||||
@Schema(description = "工种id", example = "6971")
|
@Schema(description = "工种id", example = "6971")
|
||||||
private Integer workTypeId;
|
private Integer workTypeId;
|
||||||
|
|
||||||
|
@Schema(description = "工种名称", example = "6971")
|
||||||
|
@ExcelProperty("工种")
|
||||||
|
private String workTypeName;
|
||||||
|
|
||||||
@Schema(description = "所属业务类型")
|
@Schema(description = "所属业务类型")
|
||||||
private Integer businessType;
|
private Integer businessType;
|
||||||
|
|
||||||
@Schema(description = "工厂id", example = "6971")
|
@Schema(description = "工厂id", example = "6971")
|
||||||
private Long factoryId;
|
private Long factoryId;
|
||||||
|
|
||||||
@Schema(description = "工厂名称", example = "6971")
|
|
||||||
@ExcelProperty("工厂名称")
|
|
||||||
private String factoryName;
|
|
||||||
|
|
||||||
@Schema(description = "手机号")
|
@Schema(description = "手机号")
|
||||||
@ExcelProperty("手机号")
|
@ExcelProperty("手机号")
|
||||||
private String mobile;
|
private String mobile;
|
||||||
|
@ -39,6 +39,7 @@ public interface CameraDeviceMapper extends BaseMapperX<CameraDeviceDO> {
|
|||||||
return selectList(new LambdaQueryWrapperX<CameraDeviceDO>()
|
return selectList(new LambdaQueryWrapperX<CameraDeviceDO>()
|
||||||
.eq(factoryId != null, CameraDeviceDO::getFactoryId, factoryId)
|
.eq(factoryId != null, CameraDeviceDO::getFactoryId, factoryId)
|
||||||
.eq(CameraDeviceDO::getStatus, CommonStatusEnum.ENABLE.getStatus())
|
.eq(CameraDeviceDO::getStatus, CommonStatusEnum.ENABLE.getStatus())
|
||||||
.eq(CameraDeviceDO::getIsShow, 1));
|
.eq(CameraDeviceDO::getIsShow, 1)
|
||||||
|
.orderByAsc(CameraDeviceDO::getSort));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -158,4 +158,10 @@ public interface FactoryInfoService {
|
|||||||
* @return 工厂列表
|
* @return 工厂列表
|
||||||
*/
|
*/
|
||||||
List<FactoryInfoDO> getFactoryListByLoginUser();
|
List<FactoryInfoDO> getFactoryListByLoginUser();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得工厂以及公司列表
|
||||||
|
* @return 工厂列表
|
||||||
|
*/
|
||||||
|
List<FactoryInfoDO> getList();
|
||||||
}
|
}
|
||||||
|
@ -422,4 +422,12 @@ public class FactoryInfoServiceImpl implements FactoryInfoService {
|
|||||||
|
|
||||||
return factoryInfoMapper.selectListByType(factoryIds);
|
return factoryInfoMapper.selectListByType(factoryIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<FactoryInfoDO> getList() {
|
||||||
|
|
||||||
|
return factoryInfoMapper.selectList(new LambdaQueryWrapperX<FactoryInfoDO>()
|
||||||
|
.eq(FactoryInfoDO::getStatus, CommonStatusEnum.ENABLE.getStatus())
|
||||||
|
.orderByAsc(FactoryInfoDO::getType));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user