This commit is contained in:
		
							parent
							
								
									b3e90a6463
								
							
						
					
					
						commit
						3fdb25babe
					
				| 
						 | 
				
			
			@ -188,9 +188,36 @@ public class MaterialLeaseInfoController extends BaseController {
 | 
			
		|||
    @ApiOperation(value = "导出工器具领料出库详情")
 | 
			
		||||
    @PostMapping("/exportOutDetails")
 | 
			
		||||
    public void exportOutDetails(HttpServletResponse response, MaterialLeaseApplyInfo leaseApplyInfo) {
 | 
			
		||||
        String fileName = "材料站出库详情";
 | 
			
		||||
        List<LeaseOutDetailsInfo> list = materialLeaseInfoService.exportOutDetails(leaseApplyInfo);
 | 
			
		||||
        // 根据list集合数,去填充序号
 | 
			
		||||
        for (int i = 0; i < list.size(); i++) {
 | 
			
		||||
            list.get(i).setSerialNumber(i + 1);
 | 
			
		||||
        }
 | 
			
		||||
        ExcelUtil<LeaseOutDetailsInfo> util = new ExcelUtil<>(LeaseOutDetailsInfo.class);
 | 
			
		||||
        util.exportExcel(response, list, "工器具领料出库详情数据");
 | 
			
		||||
        // 获取当前年月日时分秒导出时间,用括号拼接在后面
 | 
			
		||||
        String title = "材料站出库详情" + "(" + "导出时间:" + DateUtils.getTime() + ")";
 | 
			
		||||
        util.exportExcel(response, list, fileName, title);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 工器具领料申请详情
 | 
			
		||||
     * @param response
 | 
			
		||||
     * @param leaseApplyInfo
 | 
			
		||||
     */
 | 
			
		||||
    @ApiOperation(value = "导出工器具领料申请详情")
 | 
			
		||||
    @PostMapping("/exportDetails")
 | 
			
		||||
    public void exportDetails(HttpServletResponse response, MaterialLeaseApplyInfo leaseApplyInfo) {
 | 
			
		||||
        String fileName = "班组领料申请详情";
 | 
			
		||||
        List<LeaseDetailsInfo> list = materialLeaseInfoService.exportDetails(leaseApplyInfo);
 | 
			
		||||
        // 根据list集合数,去填充序号
 | 
			
		||||
        for (int i = 0; i < list.size(); i++) {
 | 
			
		||||
            list.get(i).setSerialNumber(i + 1);
 | 
			
		||||
        }
 | 
			
		||||
        ExcelUtil<LeaseDetailsInfo> util = new ExcelUtil<>(LeaseDetailsInfo.class);
 | 
			
		||||
        // 获取当前年月日时分秒导出时间,用括号拼接在后面
 | 
			
		||||
        String title = "班组领料申请详情" + "(" + "导出时间:" + DateUtils.getTime() + ")";
 | 
			
		||||
        util.exportExcel(response, list, fileName, title);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,161 @@
 | 
			
		|||
package com.bonus.material.clz.domain.lease;
 | 
			
		||||
 | 
			
		||||
import com.bonus.common.core.annotation.Excel;
 | 
			
		||||
import com.bonus.material.back.domain.vo.MaCodeVo;
 | 
			
		||||
import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.ToString;
 | 
			
		||||
import org.apache.poi.ss.usermodel.HorizontalAlignment;
 | 
			
		||||
 | 
			
		||||
import java.math.BigDecimal;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 领料任务详细对象 lease_apply_details
 | 
			
		||||
 *
 | 
			
		||||
 * @author xsheng
 | 
			
		||||
 * @date 2024-10-16
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
@ToString
 | 
			
		||||
public class LeaseDetailsInfo {
 | 
			
		||||
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "序号")
 | 
			
		||||
    @Excel(name = "序号", isSequence = true, sort = 0, width = 5)
 | 
			
		||||
    private Integer serialNumber;
 | 
			
		||||
 | 
			
		||||
    /** ID */
 | 
			
		||||
    private Long id;
 | 
			
		||||
 | 
			
		||||
    /** 任务ID */
 | 
			
		||||
    @ApiModelProperty(value = "任务ID")
 | 
			
		||||
    private Long parentId;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "机具ID")
 | 
			
		||||
    private Long maId;
 | 
			
		||||
 | 
			
		||||
    /** 物资类型 */
 | 
			
		||||
    @ApiModelProperty(value = "物资类型名称")
 | 
			
		||||
    @Excel(name = "类型名称")
 | 
			
		||||
    private String maTypeName;
 | 
			
		||||
 | 
			
		||||
    /** 物资类型ids */
 | 
			
		||||
    @ApiModelProperty(value = "物资类型ids")
 | 
			
		||||
    private int[] maTypeIds;
 | 
			
		||||
 | 
			
		||||
    private String maTypeIdsStr;
 | 
			
		||||
 | 
			
		||||
    private int isManual;
 | 
			
		||||
 | 
			
		||||
    /** 规格型号id */
 | 
			
		||||
    @ApiModelProperty(value = "规格型号id")
 | 
			
		||||
    private Long typeId;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "规格型号id")
 | 
			
		||||
    private Long newTypeId;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "三级id")
 | 
			
		||||
    private Long thirdTypeId;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "规格型号id")
 | 
			
		||||
    private Long taskId;
 | 
			
		||||
 | 
			
		||||
    /** 规格型号 */
 | 
			
		||||
    @ApiModelProperty(value = "规格型号名称")
 | 
			
		||||
    @Excel(name = "规格型号")
 | 
			
		||||
    private String typeName;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "机具编码")
 | 
			
		||||
    private String maCode;
 | 
			
		||||
 | 
			
		||||
    /** 计量单位 */
 | 
			
		||||
    @ApiModelProperty(value = "计量单位")
 | 
			
		||||
    @Excel(name = "计量单位")
 | 
			
		||||
    private String unitName;
 | 
			
		||||
 | 
			
		||||
    /** 计量单位数值 */
 | 
			
		||||
    @ApiModelProperty(value = "计量单位数值")
 | 
			
		||||
    private String unitValue;
 | 
			
		||||
 | 
			
		||||
    /** 库存数量 */
 | 
			
		||||
    @ApiModelProperty(value = "库存数量")
 | 
			
		||||
    @Excel(name = "当前库存", cellType = Excel.ColumnType.NUMERIC, align = HorizontalAlignment.RIGHT)
 | 
			
		||||
    private BigDecimal storageNum;
 | 
			
		||||
 | 
			
		||||
    /** 预领料数 */
 | 
			
		||||
    @Excel(name = "预领数量", cellType = Excel.ColumnType.NUMERIC, align = HorizontalAlignment.RIGHT)
 | 
			
		||||
    @ApiModelProperty(value = "预领料数")
 | 
			
		||||
    private BigDecimal preNum;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "已发布数量")
 | 
			
		||||
    private BigDecimal publishNum;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "待发布数量")
 | 
			
		||||
    private BigDecimal pendingNum;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "本次发布数量")
 | 
			
		||||
    private BigDecimal num;
 | 
			
		||||
 | 
			
		||||
    /** 审批数量 */
 | 
			
		||||
    @ApiModelProperty(value = "审批数量")
 | 
			
		||||
    private BigDecimal auditNum;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 此数量是剩余需要出库的数量(preNum - alNum)
 | 
			
		||||
     */
 | 
			
		||||
    @ApiModelProperty(value = "剩余最大出库数量")
 | 
			
		||||
    private BigDecimal outNum;
 | 
			
		||||
 | 
			
		||||
    /** 已领数量 */
 | 
			
		||||
    @ApiModelProperty(value = "已领数量")
 | 
			
		||||
    private BigDecimal alNum;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(name = "装备管理方式")
 | 
			
		||||
    private String manageType;
 | 
			
		||||
 | 
			
		||||
    /** 备注 */
 | 
			
		||||
    @ApiModelProperty(value = "备注")
 | 
			
		||||
    @Excel(name = "备注")
 | 
			
		||||
    private String remark;
 | 
			
		||||
 | 
			
		||||
    /** 状态(0待审批,1进行中,2已出库) */
 | 
			
		||||
    private String status;
 | 
			
		||||
 | 
			
		||||
    /** 数据所属组织 */
 | 
			
		||||
    @ApiModelProperty(value = "数据所属组织")
 | 
			
		||||
    private Long companyId;
 | 
			
		||||
 | 
			
		||||
    private String keyword;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "用户ID")
 | 
			
		||||
    private Long userId;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "编码类型集合")
 | 
			
		||||
    private List<MaCodeVo> maCodeVoList;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "往来单位id")
 | 
			
		||||
    private Long unitId;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "工程id")
 | 
			
		||||
    private Long projectId;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "领料人")
 | 
			
		||||
    private String leasePerson;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "联系方式")
 | 
			
		||||
    private String phone;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "任务当月序号 例如:1 插入及查询时请携带任务类型")
 | 
			
		||||
    private Integer monthOrder;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "发布批次")
 | 
			
		||||
    private String publishTask;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "领料单位")
 | 
			
		||||
    private String leaseUnit;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "租赁工程")
 | 
			
		||||
    private String leaseProject;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -5,6 +5,7 @@ import com.bonus.material.back.domain.vo.MaCodeVo;
 | 
			
		|||
import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.ToString;
 | 
			
		||||
import org.apache.poi.ss.usermodel.HorizontalAlignment;
 | 
			
		||||
 | 
			
		||||
import java.math.BigDecimal;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
| 
						 | 
				
			
			@ -21,6 +22,10 @@ public class LeaseOutDetailsInfo {
 | 
			
		|||
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "序号")
 | 
			
		||||
    @Excel(name = "序号", isSequence = true, sort = 0, width = 5)
 | 
			
		||||
    private Integer serialNumber;
 | 
			
		||||
 | 
			
		||||
    /** ID */
 | 
			
		||||
    private Long id;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -76,11 +81,11 @@ public class LeaseOutDetailsInfo {
 | 
			
		|||
 | 
			
		||||
    /** 库存数量 */
 | 
			
		||||
    @ApiModelProperty(value = "库存数量")
 | 
			
		||||
    @Excel(name = "当前库存")
 | 
			
		||||
    @Excel(name = "当前库存", cellType = Excel.ColumnType.NUMERIC, align = HorizontalAlignment.RIGHT)
 | 
			
		||||
    private BigDecimal storageNum;
 | 
			
		||||
 | 
			
		||||
    /** 预领料数 */
 | 
			
		||||
    @Excel(name = "预领数量")
 | 
			
		||||
    @Excel(name = "预领数量", cellType = Excel.ColumnType.NUMERIC, align = HorizontalAlignment.RIGHT)
 | 
			
		||||
    @ApiModelProperty(value = "预领料数")
 | 
			
		||||
    private BigDecimal preNum;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -101,7 +106,7 @@ public class LeaseOutDetailsInfo {
 | 
			
		|||
     * 此数量是剩余需要出库的数量(preNum - alNum)
 | 
			
		||||
     */
 | 
			
		||||
    @ApiModelProperty(value = "剩余最大出库数量")
 | 
			
		||||
    @Excel(name = "出库数量")
 | 
			
		||||
    @Excel(name = "出库数量", cellType = Excel.ColumnType.NUMERIC, align = HorizontalAlignment.RIGHT)
 | 
			
		||||
    private BigDecimal outNum;
 | 
			
		||||
 | 
			
		||||
    /** 已领数量 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -181,4 +181,10 @@ public interface MaterialLeaseInfoService {
 | 
			
		|||
     */
 | 
			
		||||
    void queryQrCode(MaterialLeaseApplyDetails bean, HttpServletResponse response);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 工器具领料申请详情
 | 
			
		||||
     * @param leaseApplyInfo
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    List<LeaseDetailsInfo> exportDetails(MaterialLeaseApplyInfo leaseApplyInfo);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -631,6 +631,47 @@ public class MaterialLeaseInfoServiceImpl implements MaterialLeaseInfoService {
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 导出设备出库信息
 | 
			
		||||
     * @param leaseApplyInfo
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<LeaseDetailsInfo> exportDetails(MaterialLeaseApplyInfo leaseApplyInfo) {
 | 
			
		||||
        List<LeaseDetailsInfo> leaseOutDetails = new ArrayList<>();
 | 
			
		||||
        Optional<MaterialLeaseApplyInfo> optionalInfo = Optional.ofNullable(materialLeaseInfoMapper.selectLeaseApplyInfoById(leaseApplyInfo));
 | 
			
		||||
        optionalInfo.ifPresent(info -> {
 | 
			
		||||
            // 获取工器具领料出库详情
 | 
			
		||||
            List<MaterialLeaseApplyDetails> details = materialLeaseInfoMapper.getOutDetailsById(leaseApplyInfo);
 | 
			
		||||
            if (!CollectionUtils.isEmpty(details)) {
 | 
			
		||||
                // 步骤4.1: 收集所有typeId,进行批量查询
 | 
			
		||||
                List<Long> typeIds = details.stream()
 | 
			
		||||
                        .map(MaterialLeaseApplyDetails::getTypeId)
 | 
			
		||||
                        .filter(Objects::nonNull)
 | 
			
		||||
                        .distinct()
 | 
			
		||||
                        .collect(Collectors.toList());
 | 
			
		||||
                SelectDto selectDto = new SelectDto();
 | 
			
		||||
                selectDto.setProId(info.getProId());
 | 
			
		||||
                List<AgreementVo> agreementList = mapper.getAgreementInfoBy(selectDto);
 | 
			
		||||
                Map<Long, BigDecimal> storageNumMap = preCalculateStorageNums(info, agreementList, typeIds);
 | 
			
		||||
                for (MaterialLeaseApplyDetails detail : details) {
 | 
			
		||||
                    // 直接从预计算的Map中获取库存数据,避免复杂的嵌套循环
 | 
			
		||||
                    BigDecimal storageNum = storageNumMap.getOrDefault(detail.getTypeId(), BigDecimal.ZERO);
 | 
			
		||||
                    LeaseDetailsInfo lease = new LeaseDetailsInfo();
 | 
			
		||||
                    lease.setMaTypeName(detail.getMaTypeName() == null ? "" : detail.getMaTypeName());
 | 
			
		||||
                    lease.setTypeName(detail.getTypeName() == null ? "" : detail.getTypeName());
 | 
			
		||||
                    lease.setUnitName(detail.getUnitName() == null ? "" : detail.getUnitName());
 | 
			
		||||
                    lease.setPreNum(detail.getPreNum());
 | 
			
		||||
                    lease.setStorageNum(storageNum);
 | 
			
		||||
                    lease.setManageType("0".equals(detail.getManageType()) ? "数量管理" : "编码管理");
 | 
			
		||||
                    lease.setRemark(detail.getRemark() == null ? "" : detail.getRemark());
 | 
			
		||||
                    leaseOutDetails.add(lease);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
        return leaseOutDetails;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** 简单的文件名清洗(避免非法字符) */
 | 
			
		||||
    private String sanitizeFileName(String name) {
 | 
			
		||||
        if (name == null) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1143,21 +1184,37 @@ public class MaterialLeaseInfoServiceImpl implements MaterialLeaseInfoService {
 | 
			
		|||
    @Override
 | 
			
		||||
    public List<LeaseOutDetailsInfo> exportOutDetails(MaterialLeaseApplyInfo leaseApplyInfo) {
 | 
			
		||||
        List<LeaseOutDetailsInfo> leaseOutDetails = new ArrayList<>();
 | 
			
		||||
        List<MaterialLeaseApplyDetails> details = materialLeaseInfoMapper.getOutDetailsById(leaseApplyInfo);
 | 
			
		||||
        if (!CollectionUtils.isEmpty(details)) {
 | 
			
		||||
            for (MaterialLeaseApplyDetails detail : details) {
 | 
			
		||||
                LeaseOutDetailsInfo lease = new LeaseOutDetailsInfo();
 | 
			
		||||
                lease.setMaTypeName(detail.getMaTypeName() == null ? "" : detail.getMaTypeName());
 | 
			
		||||
                lease.setTypeName(detail.getTypeName() == null ? "" : detail.getTypeName());
 | 
			
		||||
                lease.setUnitName(detail.getUnitName() == null ? "" : detail.getUnitName());
 | 
			
		||||
                lease.setPreNum(detail.getPreNum());
 | 
			
		||||
                lease.setStorageNum(detail.getStorageNum());
 | 
			
		||||
                lease.setOutNum(detail.getOutNum());
 | 
			
		||||
                lease.setManageType("0".equals(detail.getManageType()) ? "数量管理" : "编码管理");
 | 
			
		||||
                lease.setRemark(detail.getRemark() == null ? "" : detail.getRemark());
 | 
			
		||||
                leaseOutDetails.add(lease);
 | 
			
		||||
        Optional<MaterialLeaseApplyInfo> optionalInfo = Optional.ofNullable(materialLeaseInfoMapper.selectLeaseApplyInfoById(leaseApplyInfo));
 | 
			
		||||
        optionalInfo.ifPresent(info -> {
 | 
			
		||||
            // 获取工器具领料出库详情
 | 
			
		||||
            List<MaterialLeaseApplyDetails> details = materialLeaseInfoMapper.getOutDetailsById(leaseApplyInfo);
 | 
			
		||||
            if (!CollectionUtils.isEmpty(details)) {
 | 
			
		||||
                // 步骤4.1: 收集所有typeId,进行批量查询
 | 
			
		||||
                List<Long> typeIds = details.stream()
 | 
			
		||||
                        .map(MaterialLeaseApplyDetails::getTypeId)
 | 
			
		||||
                        .filter(Objects::nonNull)
 | 
			
		||||
                        .distinct()
 | 
			
		||||
                        .collect(Collectors.toList());
 | 
			
		||||
                SelectDto selectDto = new SelectDto();
 | 
			
		||||
                selectDto.setProId(info.getProId());
 | 
			
		||||
                List<AgreementVo> agreementList = mapper.getAgreementInfoBy(selectDto);
 | 
			
		||||
                Map<Long, BigDecimal> storageNumMap = preCalculateStorageNums(info, agreementList, typeIds);
 | 
			
		||||
                for (MaterialLeaseApplyDetails detail : details) {
 | 
			
		||||
                    // 直接从预计算的Map中获取库存数据,避免复杂的嵌套循环
 | 
			
		||||
                    BigDecimal storageNum = storageNumMap.getOrDefault(detail.getTypeId(), BigDecimal.ZERO);
 | 
			
		||||
                    LeaseOutDetailsInfo lease = new LeaseOutDetailsInfo();
 | 
			
		||||
                    lease.setMaTypeName(detail.getMaTypeName() == null ? "" : detail.getMaTypeName());
 | 
			
		||||
                    lease.setTypeName(detail.getTypeName() == null ? "" : detail.getTypeName());
 | 
			
		||||
                    lease.setUnitName(detail.getUnitName() == null ? "" : detail.getUnitName());
 | 
			
		||||
                    lease.setPreNum(detail.getPreNum());
 | 
			
		||||
                    lease.setStorageNum(storageNum);
 | 
			
		||||
                    lease.setOutNum(detail.getOutNum());
 | 
			
		||||
                    lease.setManageType("0".equals(detail.getManageType()) ? "数量管理" : "编码管理");
 | 
			
		||||
                    lease.setRemark(detail.getRemark() == null ? "" : detail.getRemark());
 | 
			
		||||
                    leaseOutDetails.add(lease);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        });
 | 
			
		||||
        return leaseOutDetails;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue