diff --git a/bonus-common-biz/src/main/java/com/bonus/common/biz/config/PoiOutPage.java b/bonus-common-biz/src/main/java/com/bonus/common/biz/config/PoiOutPage.java index ea8bd841..c3ef176a 100644 --- a/bonus-common-biz/src/main/java/com/bonus/common/biz/config/PoiOutPage.java +++ b/bonus-common-biz/src/main/java/com/bonus/common/biz/config/PoiOutPage.java @@ -250,6 +250,42 @@ public class PoiOutPage { return workbook; } + public static HSSFWorkbook excelForcheckLeaseOut(List> result, List list, String filename) { + // 创建工作簿和工作表 + HSSFWorkbook workbook = new HSSFWorkbook(); + HSSFSheet sheet = workbook.createSheet(); + sheet.setDefaultColumnWidth(15); // 设置列宽 + + // 创建样式 + HSSFCellStyle titleStyle = createTitleStyle(workbook); + HSSFCellStyle headerStyle = createHeaderStyle(workbook); + HSSFCellStyle contentStyle = createCellStyleCost(workbook); + + // 设置工作簿名称 + workbook.setSheetName(0, filename); + + // 填充标题行 + int rowNum = 0; + rowNum = createTitleRowStyle(sheet, rowNum, filename, titleStyle, list.size()); + + // 填充表头 + rowNum = createHeaderRow(sheet, rowNum, list, headerStyle); + + // 填充数据行 + if (result != null && !result.isEmpty()) { + rowNum = createDataRows(sheet, rowNum, result, contentStyle, list.size()); + } else { + // 如果没有数据,则仅显示表头 +// rowNum++; +// rowNum = createDataRows(sheet, rowNum, result, contentStyle, list.size()); + HSSFRow row = sheet.createRow(rowNum++); + HSSFCell cell = row.createCell(0); + cell.setCellStyle(headerStyle); + cell.setCellValue("暂无数据"); + } + return workbook; + } + public static HSSFWorkbook excelForcheckAll(List> resultLease,List> resultLose,List> resultRepair,List> resultScrap,List> resultsReduction, List listLease,List listLose,List listRepair,List listScrap,List listReduction, String filename, String projectName, String unit, BigDecimal totalCostLease, BigDecimal totalCostLose, BigDecimal totalCostRepair, BigDecimal totalCostScrap,BigDecimal totalCostReduction) { diff --git a/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/lease/LeaseApplyDetailExport.java b/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/lease/LeaseApplyDetailExport.java new file mode 100644 index 00000000..d44ce3eb --- /dev/null +++ b/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/lease/LeaseApplyDetailExport.java @@ -0,0 +1,120 @@ +package com.bonus.common.biz.domain.lease; + +import com.bonus.common.biz.domain.BmFileInfo; +import com.bonus.common.core.annotation.Excel; +import com.bonus.common.core.web.domain.BaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * 领料任务对象 lease_apply_info + * + * @author xsheng + * @date 2024-10-16 + */ + +@EqualsAndHashCode(callSuper = false) +@Data +@ToString +public class LeaseApplyDetailExport extends BaseEntity{ + + private static final long serialVersionUID = 1L; + + /** ID */ + private Long id; + + private int number; + + @ApiModelProperty(value = "登录用户id") + private Long userId; + + + + @ApiModelProperty(value = "申请时间") + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "发布时间", width = 20, dateFormat = "yyyy-MM-dd") + private Date releaseTime; + + + + @ApiModelProperty(value = "实施单位") + @Excel(name = "实施单位") + private String impUnitName; + + private String materialName; + + private String typeModelName; + + private String typeName; + + private String unitName; + + private String manageTypeName; + + @ApiModelProperty(value = "领料单位") + @Excel(name = "租赁单位") + private String leaseUnit; + + + @ApiModelProperty(value = "租赁工程") + @Excel(name = "租赁工程") + private String leaseProject; + + + /** 任务编号: 领料单号 */ + @ApiModelProperty(value = "领料单号") + @Excel(name = "租赁申请单号") + private String code; + + + /** 领料人 */ + @Excel(name = "领料人") + @ApiModelProperty(value = "领料人") + private String leasePerson; + + + + + /** 1机具分公司审核通过,2调试分公司审核通过3机具分公司审核驳回4调试分公司审核驳回5出库进行中5出库完成 */ + private String status; + + + /** 任务状态(定义数据字典) */ + @ApiModelProperty(value = "任务状态(定义数据字典)") + private Integer taskStatus; + + @Excel(name = "状态") + @ApiModelProperty(value = "任务状态(定义数据字典)") + private String taskStatusName; + + + @ApiModelProperty(value = "已出库数量") + private BigDecimal alNum; + + private BigDecimal outNum; + + @ApiModelProperty(value = "开始时间") + private String startTime; + + @ApiModelProperty(value = "结束时间") + private String endTime; + + @ApiModelProperty(value = "关键字") + private String keyWord; + + @ApiModelProperty(value = "备注") + @Excel(name = "备注") + private String remark; + + @ApiModelProperty(value = "任务状态列表") + private List statusList; + + private String businessCode; +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/controller/LeaseApplyInfoController.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/controller/LeaseApplyInfoController.java index 99578d34..66724954 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/controller/LeaseApplyInfoController.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/controller/LeaseApplyInfoController.java @@ -3,8 +3,8 @@ package com.bonus.material.lease.controller; import cn.hutool.core.convert.Convert; import com.bonus.common.biz.annotation.StoreLog; import com.bonus.common.biz.config.ListPagingUtil; -import com.bonus.common.biz.domain.lease.LeaseApplyInfoExport; -import com.bonus.common.biz.domain.lease.LeaseOutDetails; +import com.bonus.common.biz.config.PoiOutPage; +import com.bonus.common.biz.domain.lease.*; import com.bonus.common.core.utils.ServletUtils; import com.bonus.common.core.utils.bean.BeanUtils; import com.bonus.common.core.utils.poi.ExcelUtil; @@ -17,24 +17,30 @@ import com.bonus.material.basic.domain.BmQrcodeInfo; import com.bonus.material.basic.domain.ProjUsingRecord; import com.bonus.material.basic.domain.ProjUsingRecordExport; import com.bonus.material.common.annotation.PreventRepeatSubmit; -import com.bonus.common.biz.domain.lease.LeaseApplyInfo; import com.bonus.material.lease.domain.LeaseApplyDetails; import com.bonus.material.lease.domain.vo.LeaseApplyRequestVo; -import com.bonus.common.biz.domain.lease.LeaseOutRequestVo; import com.bonus.material.lease.service.ILeaseApplyInfoService; +import com.bonus.material.settlement.domain.vo.SltLeaseInfo; import com.bonus.system.api.RemoteFileService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.NotNull; +import java.io.OutputStream; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.net.URLEncoder; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; - +import com.bonus.common.log.annotation.SysLog; /** * 领料任务Controller * @@ -169,6 +175,125 @@ public class LeaseApplyInfoController extends BaseController { util.exportExcel(response, exportList, "领料出库数据"); } + /** + * 导出领料明细 + */ + @ApiOperation(value = "导出领料明细") + @PreventRepeatSubmit + //@RequiresPermissions("lease:info:export") + @SysLog(title = "领料出库", businessType = OperaType.EXPORT, logType = 1,module = "仓储管理->导出领料明细") + @PostMapping("/exportLeaseOutRecordDetail") + public void exportLeaseOutRecordDetail(HttpServletResponse response, LeaseApplyInfo leaseApplyInfo) { + try { + List list = leaseApplyInfoService.selectLeaseApplyDetailList(leaseApplyInfo); + String fileName = "领料记录"; + if (leaseApplyInfo.getStartTime() != null && leaseApplyInfo.getEndTime() != null) { + fileName = "领料记录" + leaseApplyInfo.getStartTime() + "至" + leaseApplyInfo.getEndTime(); + } + expOutExcel(response, list, fileName); + } catch (Exception e) { + logger.error("导出领料明细失败", e); + } + } + + /** + * 导出结算单 + * @param response + * @param list + * @param filename + + * @throws Exception + */ + private void expOutExcel(HttpServletResponse response, List list, String filename) + throws Exception { + if (list != null) { + List> results = new ArrayList>(); + int size = list.size(); + for (int i = 0; i < size; i++) { + LeaseApplyDetailExport bean = list.get(i); + bean.setNumber(i + 1); + Map maps = outReceiveDetailsBeanToMap(bean); + results.add(maps); + } + List headers = receiveDetailsHeader(); + HSSFWorkbook workbook = PoiOutPage.excelForcheckLeaseOut(results, headers, filename); + OutputStream out = null; + response.setContentType("application/vnd.ms-excel;charset=UTF-8"); + response.addHeader("Content-Disposition", + "attachment;filename=" + URLEncoder.encode(filename, "UTF-8") + ".xls"); + response.setHeader("Pragma", "No-cache"); + out = response.getOutputStream(); + workbook.write(out); + out.flush(); + out.close(); + }else{ + List> results = new ArrayList>(); + List headers = receiveDetailsHeader(); + HSSFWorkbook workbook = PoiOutPage.excelForcheckLeaseOut(results, headers, filename); + OutputStream out = null; + response.setContentType("application/vnd.ms-excel;charset=UTF-8"); + response.addHeader("Content-Disposition", + "attachment;filename=" + URLEncoder.encode(filename, "UTF-8") + ".xls"); + response.setHeader("Pragma", "No-cache"); + out = response.getOutputStream(); + workbook.write(out); + out.flush(); + out.close(); + } + } + + /** + * 领料记录数据转换 + * @param bean + * @return + */ + private Map outReceiveDetailsBeanToMap(LeaseApplyDetailExport bean) { + // 创建一个SimpleDateFormat对象,定义日期格式 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + Map maps = new LinkedHashMap(); + + maps.put("impUnitName", bean.getImpUnitName()); + maps.put("leaseProject", bean.getLeaseProject()); + maps.put("leaseUnit", bean.getLeaseUnit()); + maps.put("code", bean.getCode()); + maps.put("leasePerson", bean.getLeasePerson()); + maps.put("taskStatusName", bean.getTaskStatusName()); + maps.put("releaseTime", bean.getReleaseTime()==null ? null:dateFormat.format(bean.getReleaseTime())); + maps.put("materialName", bean.getMaterialName()); + maps.put("typeModelName", bean.getTypeModelName()); + maps.put("typeName", bean.getTypeName()); + maps.put("unitName", bean.getUnitName()); + maps.put("alNum", bean.getAlNum()); + maps.put("outNum", bean.getOutNum()); + maps.put("manageTypeName", bean.getManageTypeName()); + + return maps; + } + + /** + * 领料出库表头 + * @return + */ + private List receiveDetailsHeader() { + ArrayList list = new ArrayList(); + list.add("分公司"); + list.add("工程名称"); + list.add("领料单位"); + list.add("领料单号"); + list.add("领料人"); + list.add("状态"); + list.add("创建时间"); + list.add("物资仓库"); + list.add("物资名称"); + list.add("物资型号"); + list.add("单位"); + list.add("领料数量"); + list.add("出库数量"); + list.add("出库方式"); + return list; + } + + /** * 获取领料任务详细信息 */ diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/mapper/LeaseApplyDetailsMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/mapper/LeaseApplyDetailsMapper.java index 6894e264..76cc8607 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/mapper/LeaseApplyDetailsMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/mapper/LeaseApplyDetailsMapper.java @@ -3,6 +3,7 @@ package com.bonus.material.lease.mapper; import java.math.BigDecimal; import java.util.List; +import com.bonus.common.biz.domain.lease.LeaseApplyDetailExport; import com.bonus.common.biz.domain.lease.LeaseApplyInfo; import com.bonus.material.back.domain.vo.MaCodeVo; import com.bonus.material.basic.domain.BmQrcodeInfo; @@ -235,4 +236,8 @@ public interface LeaseApplyDetailsMapper { LeaseApplyDetails getPengNum(LeaseOutDetails leaseOutDetails); LeaseApplyDetails getPendLease(LeaseOutDetails leaseOutDetails); + + List selectLeaseApplyLL(LeaseApplyInfo bean); + + List selectLeaseApplyLY(LeaseApplyInfo bean); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/service/ILeaseApplyInfoService.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/service/ILeaseApplyInfoService.java index bcabeb37..0817800d 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/service/ILeaseApplyInfoService.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/service/ILeaseApplyInfoService.java @@ -3,6 +3,7 @@ package com.bonus.material.lease.service; import java.util.Date; import java.util.List; +import com.bonus.common.biz.domain.lease.LeaseApplyDetailExport; import com.bonus.common.biz.domain.lease.LeaseOutDetails; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.biz.domain.lease.LeaseApplyInfo; @@ -209,4 +210,6 @@ public interface ILeaseApplyInfoService { * @return */ List getOutInfo(LeaseApplyInfo bean); + + List selectLeaseApplyDetailList(LeaseApplyInfo leaseApplyInfo); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/service/impl/LeaseApplyInfoServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/service/impl/LeaseApplyInfoServiceImpl.java index 99d376cb..cfc945da 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/service/impl/LeaseApplyInfoServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/lease/service/impl/LeaseApplyInfoServiceImpl.java @@ -1145,6 +1145,64 @@ public class LeaseApplyInfoServiceImpl implements ILeaseApplyInfoService { } } + /** + * 获取领料出库详细信息 + * @param bean + * @return + */ + @Override + public List selectLeaseApplyDetailList(LeaseApplyInfo bean) { + List listAll = new ArrayList<>(); + //领料 + List listOne = leaseApplyDetailsMapper.selectLeaseApplyLL(bean); + if (!CollectionUtils.isEmpty(listOne)) { + String keyWord = bean.getKeyWord(); + List statusList = bean.getStatusList(); + + // 转换为HashSet提高contains操作的效率(O(1)) + Set statusSet = CollectionUtils.isEmpty(statusList) ? + Collections.emptySet() : + new HashSet<>(statusList); + + listOne = listOne.stream() + .filter(item -> StringUtils.isBlank(keyWord) || containsKeywordDetail(item, keyWord)) + .filter(item -> statusSet.isEmpty() || statusSet.contains(item.getTaskStatus())) + .collect(Collectors.toList()); + } + //领用 + List listTwo = leaseApplyDetailsMapper.selectLeaseApplyLY(bean); + if (!CollectionUtils.isEmpty(listTwo)) { + String keyWord = bean.getKeyWord(); + List statusList = bean.getStatusList(); + + // 转换为HashSet提高contains操作的效率(O(1)) + Set statusSet = CollectionUtils.isEmpty(statusList) ? + Collections.emptySet() : + new HashSet<>(statusList); + + listTwo = listTwo.stream() + .filter(item -> StringUtils.isBlank(keyWord) || containsKeywordDetail(item, keyWord)) + .filter(item -> statusSet.isEmpty() || statusSet.contains(item.getTaskStatus())) + .collect(Collectors.toList()); + } + + if (!CollectionUtils.isEmpty(listOne)) { + listAll.addAll(listOne); + } + if (!CollectionUtils.isEmpty(listTwo)) { + listAll.addAll(listTwo); + } + + // 对合并后的列表进行排序 + if (!CollectionUtils.isEmpty(listAll)) { + listAll = listAll.stream() + .sorted(Comparator.comparing(LeaseApplyDetailExport::getCode) + .thenComparing(LeaseApplyDetailExport::getReleaseTime)) + .collect(Collectors.toList()); + } + return listAll; + } + /** * 关键字搜索 @@ -1167,6 +1225,17 @@ public class LeaseApplyInfoServiceImpl implements ILeaseApplyInfoService { (item.getBusinessCode() != null && item.getBusinessCode().contains(keyWord)); } + private boolean containsKeywordDetail(LeaseApplyDetailExport item, String keyWord) { + return (item.getLeaseUnit() != null && item.getLeaseUnit().contains(keyWord)) || + (item.getUnitName() != null && item.getUnitName().contains(keyWord)) || + (item.getLeaseProject() != null && item.getLeaseProject().contains(keyWord)) || + (item.getCode() != null && item.getCode().contains(keyWord)) || + (item.getCreateBy() != null && item.getCreateBy().contains(keyWord)) || + (item.getLeasePerson() != null && item.getLeasePerson().contains(keyWord)) || + (item.getImpUnitName() != null && item.getImpUnitName().contains(keyWord)) || + (item.getBusinessCode() != null && item.getBusinessCode().contains(keyWord)); + } + /** * 新增领料任务 * diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/lease/LeaseApplyDetailsMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/lease/LeaseApplyDetailsMapper.xml index e83797bb..2b14fabb 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/lease/LeaseApplyDetailsMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/lease/LeaseApplyDetailsMapper.xml @@ -774,5 +774,101 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" parent_id = #{parentId} and type_id = #{typeId} + +