Merge remote-tracking branch 'origin/feature/DM/nflg-bom' into feature/DM/nflg-bom

This commit is contained in:
luoliming 2024-03-05 21:39:38 +08:00
commit 0b65236f4b
19 changed files with 427 additions and 40 deletions

View File

@ -660,4 +660,19 @@ public class DateUtils extends PropertyEditorSupport {
String result = sdf.format(Date.parse(str)); String result = sdf.format(Date.parse(str));
return result; return result;
} }
/**
* 在给定的日期上增加指定的时间单位数量
*
* @param date 初始日期操作的基础日期
* @param field 时间单位例如Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH等
* @param amount 要增加的数量可以为负数以表示减少
* @return 返回操作后的新日期
*/
public static Date add(Date date, int field, int amount) {
Calendar cal = getCalendar();
cal.setTime(date);
cal.add(field, amount);
return cal.getTime();
}
} }

View File

@ -0,0 +1,40 @@
package com.nflg.product;
import com.nflg.product.util.DateUtils;
import org.junit.Test;
import java.util.Calendar;
import java.util.Date;
import static org.junit.Assert.assertEquals;
/**
* @author 曹鹏飞
* @date 2024-03-04 14:07:45
*/
public class DateTimeTest {
@Test
public void test1() {
Calendar calendar = Calendar.getInstance();
calendar.set(2024, 2, 4);
Date date1 = calendar.getTime();
Date d1 = DateUtils.add(date1, Calendar.DAY_OF_MONTH, 1);
System.out.println("d1: " + DateUtils.date2Str(d1, DateUtils.date_sdf.get()));
calendar.set(2024, 2, 5);
Date d2 = calendar.getTime();
System.out.println("d2: " + DateUtils.date2Str(d2, DateUtils.date_sdf.get()));
assertEquals(d1, d2);
}
@Test
public void test2() {
Calendar calendar = Calendar.getInstance();
calendar.set(2024, Calendar.FEBRUARY, 29);
Date date1 = calendar.getTime();
Date d1 = DateUtils.add(date1, Calendar.DAY_OF_MONTH, 1);
System.out.println("d1: " + DateUtils.date2Str(d1, DateUtils.date_sdf.get()));
calendar.set(2024, Calendar.MARCH, 1);
Date d2 = calendar.getTime();
System.out.println("d2: " + DateUtils.date2Str(d2, DateUtils.date_sdf.get()));
assertEquals(d1, d2);
}
}

View File

@ -1,24 +1,18 @@
package com.nflg.product.material.api.user.authority; package com.nflg.product.material.api.user.authority;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.mysql.cj.log.Log;
import com.nflg.product.base.core.api.BaseApi; import com.nflg.product.base.core.api.BaseApi;
import com.nflg.product.material.mapper.master.AuthorityRolePowerMapper; import com.nflg.product.material.mapper.master.AuthorityRolePowerMapper;
import com.nflg.product.material.pojo.dto.AuthorityPowerDTO; import com.nflg.product.material.pojo.dto.AuthorityPowerDTO;
import com.nflg.product.material.pojo.dto.SaveMemuPermissionDTO; import com.nflg.product.material.pojo.dto.SaveMemuPermissionDTO;
import com.nflg.product.material.pojo.entity.AuthorityPowerEntity;
import com.nflg.product.material.pojo.query.AuthorityPowerQuery; import com.nflg.product.material.pojo.query.AuthorityPowerQuery;
import com.nflg.product.material.pojo.vo.AuthorityMenuVO; import com.nflg.product.material.pojo.vo.AuthorityMenuVO;
import com.nflg.product.material.pojo.vo.AuthorityPowerVO; import com.nflg.product.material.pojo.vo.AuthorityPowerVO;
import com.nflg.product.material.service.AuthorityPowerService; import com.nflg.product.material.service.AuthorityPowerService;
import com.nflg.product.material.service.AuthorityRolePowerService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import nflg.product.common.constant.STATE;
import nflg.product.common.vo.ResultVO; import nflg.product.common.vo.ResultVO;
import org.omg.PortableInterceptor.LOCATION_FORWARD;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.List; import java.util.List;

View File

@ -5,4 +5,7 @@ public class MaterialMainConstant {
public static String keyDrawingNo= "DrawingNo"; public static String keyDrawingNo= "DrawingNo";
public static final String VIRTUAL="V"; public static final String VIRTUAL="V";
public static final String MaterialNo_31="31";
} }

View File

@ -64,6 +64,21 @@ public class ReportConstant {
@AllArgsConstructor
@Getter
public enum TagEnum implements ValueEnum<Integer> {
//比对
SIGMA (1, "Σ汇总"),
EQ(2, "相等"),
N_EQ(3, "不相等"),
L_N(4, "左有右无"),
N_R(5, "左无右有");
private final Integer value;
private final String description;
}

View File

@ -41,10 +41,10 @@ public interface BomNewMbomParentMapper extends BaseMapper<BomNewMbomParentEntit
/** /**
* 下级 * 下级
* @param rowId * @param
* @return * @return
*/ */
List<BomNewMbomMiddleVO> getParentChild(@Param("rowId") Long rowId ,@Param("bomRowId") Long bomRowId); List<BomNewMbomMiddleVO> getParentChild(@Param("rowIdList") List<Long> rowIdList ,@Param("bomRowId") Long bomRowId);
BomNewMbomMiddleVO getParentById(@Param("rowId") Long rowId ); BomNewMbomMiddleVO getParentById(@Param("rowId") Long rowId );

View File

@ -42,6 +42,18 @@ public class BomNewMbomMiddleVO extends BaseMaterialVO implements Serializable {
@ApiModelProperty(value = "bom版本行ID,和mbom_parent表row_id关联") @ApiModelProperty(value = "bom版本行ID,和mbom_parent表row_id关联")
private Long bomRowId; private Long bomRowId;
private Long bomVersionRowId;
public Long getBomVersionRowId(){
if(bomExist>0){
return rowId;
}
return 0l;
}
/** /**
* 父级行ID * 父级行ID
*/ */
@ -121,6 +133,9 @@ public class BomNewMbomMiddleVO extends BaseMaterialVO implements Serializable {
@ApiModelProperty(value = "1、待发布sap、3=已发布") @ApiModelProperty(value = "1、待发布sap、3=已发布")
private Integer status; private Integer status;
private String bomMaterialNo;
/** /**
* 发布sap人员 * 发布sap人员
*/ */

View File

@ -63,8 +63,12 @@ public class ForwardReportVO extends BaseMaterialVO {
@ApiModelProperty(value = "版本过期时间=下个版本的创建时间") @ApiModelProperty(value = "版本过期时间=下个版本的创建时间")
private LocalDateTime expireEndTime; private LocalDateTime expireEndTime;
@ApiModelProperty(value = "备注")
private String remark;
@ApiModelProperty(value = "标记: 0-忽略 1-汇总")
private Integer tag=0;
private List<ForwardReportVO> childNodes = Collections.emptyList(); private List<ForwardReportVO> childNodes = Collections.emptyList();

View File

@ -13,12 +13,12 @@ import com.nflg.product.bomnew.pojo.entity.BomNewMbomParentEntity;
import com.nflg.product.bomnew.pojo.query.BomNewMbomParentQuery; import com.nflg.product.bomnew.pojo.query.BomNewMbomParentQuery;
import com.nflg.product.bomnew.pojo.vo.BomNewMbomMiddleVO; import com.nflg.product.bomnew.pojo.vo.BomNewMbomMiddleVO;
import com.nflg.product.bomnew.service.domain.MBom.IndexListTree; import com.nflg.product.bomnew.service.domain.MBom.IndexListTree;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors;
/** /**
@ -60,7 +60,7 @@ public class BomNewMbomParentService extends ServiceImpl<BomNewMbomParentMapper,
if (StrUtil.isNotBlank(query.getMaterialNo()) || StrUtil.isNotBlank(query.getDrawingNo())) { if (StrUtil.isNotBlank(query.getMaterialNo()) || StrUtil.isNotBlank(query.getDrawingNo())) {
page = this.getBaseMapper().indexListPage(new Page<>(query.getPage(), query.getPageSize()), query); page = this.getBaseMapper().indexListPage(new Page<>(query.getPage(), query.getPageSize()), query);
if (CollectionUtil.isNotEmpty(page.getRecords())) { if (CollectionUtil.isNotEmpty(page.getRecords())) {
List<BomNewMbomMiddleVO> indexList = page.getRecords().stream().collect(Collectors.toList()); List<BomNewMbomMiddleVO> indexList = new ArrayList<>(page.getRecords());
page.getRecords().clear(); page.getRecords().clear();
for (BomNewMbomMiddleVO item : for (BomNewMbomMiddleVO item :
@ -115,7 +115,9 @@ public class BomNewMbomParentService extends ServiceImpl<BomNewMbomParentMapper,
if (Objects.equals(dto.getRowId(), dto.getBomRowId())) { if (Objects.equals(dto.getRowId(), dto.getBomRowId())) {
_rowId = 0l; _rowId = 0l;
} }
List<BomNewMbomMiddleVO> listChild = this.getBaseMapper().getParentChild(_rowId,dto.getBomRowId()); List<Long> rowIds= Arrays.asList(_rowId);
List<BomNewMbomMiddleVO> listChild = this.getBaseMapper().getParentChild(rowIds,dto.getBomRowId());
if (CollectionUtil.isNotEmpty(listChild)) { if (CollectionUtil.isNotEmpty(listChild)) {
listChild.forEach(child -> { listChild.forEach(child -> {
IndexListTree.sysnParentParam(parent, child); IndexListTree.sysnParentParam(parent, child);

View File

@ -12,6 +12,7 @@ import com.nflg.product.bomnew.pojo.query.ChildBomReportQuery;
import com.nflg.product.bomnew.pojo.query.ReverseReportQuery; import com.nflg.product.bomnew.pojo.query.ReverseReportQuery;
import com.nflg.product.bomnew.pojo.vo.*; import com.nflg.product.bomnew.pojo.vo.*;
import com.nflg.product.bomnew.service.domain.EBom.EBomForwardReport; import com.nflg.product.bomnew.service.domain.EBom.EBomForwardReport;
import com.nflg.product.bomnew.service.domain.MBom.MBomForwardReport;
import com.nflg.product.bomnew.service.domain.OriginalBom.OriginalBomForwardReport; import com.nflg.product.bomnew.service.domain.OriginalBom.OriginalBomForwardReport;
import com.nflg.product.bomnew.service.domain.PBom.PBomForwardReport; import com.nflg.product.bomnew.service.domain.PBom.PBomForwardReport;
import com.nflg.product.bomnew.util.EecExcelUtil; import com.nflg.product.bomnew.util.EecExcelUtil;
@ -50,7 +51,10 @@ public class ForwardReportService {
} }
//MBOM //MBOM
if (query.getBomType().compareTo(ReportConstant.BomTypeEnum.MBOM.getValue()) == 0) { if (query.getBomType().compareTo(ReportConstant.BomTypeEnum.MBOM.getValue()) == 0) {
return null; MBomForwardReport mBomForwardReport=new MBomForwardReport(query);
return mBomForwardReport.bomVersion();
} }
VUtils.isTure(true).throwMessage("错误的BOM类型"); VUtils.isTure(true).throwMessage("错误的BOM类型");
@ -221,7 +225,8 @@ public class ForwardReportService {
} }
ReportBomVO queryMBom(ReverseReportQuery query) { ReportBomVO queryMBom(ReverseReportQuery query) {
return null; MBomForwardReport mBomForwardReport=new MBomForwardReport(query);
return mBomForwardReport.genReport();
} }

View File

@ -10,39 +10,25 @@ import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.spring.SpringUtil; import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.util.TypeUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.mzt.logapi.context.LogRecordContext; import com.mzt.logapi.context.LogRecordContext;
import com.nflg.product.base.core.conmon.util.SessionUtil; import com.nflg.product.base.core.conmon.util.SessionUtil;
import com.nflg.product.base.core.exception.NflgBusinessException; import com.nflg.product.base.core.exception.NflgBusinessException;
import com.nflg.product.base.core.vo.PageVO;
import com.nflg.product.bomnew.constant.BomConstant; import com.nflg.product.bomnew.constant.BomConstant;
import com.nflg.product.bomnew.constant.EBomConstant;
import com.nflg.product.bomnew.constant.OptionalBomConstant; import com.nflg.product.bomnew.constant.OptionalBomConstant;
import com.nflg.product.bomnew.mapper.master.OptionalMbomMaterialMapper; import com.nflg.product.bomnew.mapper.master.OptionalMbomMaterialMapper;
import com.nflg.product.bomnew.pojo.dto.OptionalMbomMaterialAddDTO; import com.nflg.product.bomnew.pojo.dto.OptionalMbomMaterialAddDTO;
import com.nflg.product.bomnew.pojo.dto.sap.impart2.ImportSapParamDTO; import com.nflg.product.bomnew.pojo.dto.sap.impart2.ImportSapParamDTO;
import com.nflg.product.bomnew.pojo.dto.sap.impart2.T1DTO; import com.nflg.product.bomnew.pojo.dto.sap.impart2.T1DTO;
import com.nflg.product.bomnew.pojo.entity.MaterialMainEntity; import com.nflg.product.bomnew.pojo.entity.MaterialMainEntity;
import com.nflg.product.bomnew.pojo.entity.OptionalEbomConfigEntity; import com.nflg.product.bomnew.pojo.entity.OptionalEbomConfigEntity;
import com.nflg.product.bomnew.pojo.entity.OptionalMbomMaterialEntity; import com.nflg.product.bomnew.pojo.entity.OptionalMbomMaterialEntity;
import com.nflg.product.bomnew.pojo.query.BomNewEbomMaterialQuery;
import com.nflg.product.bomnew.pojo.query.OptionalMbomMaterialListQuery; import com.nflg.product.bomnew.pojo.query.OptionalMbomMaterialListQuery;
import com.nflg.product.bomnew.pojo.query.OptionalMbomMaterialQuery; import com.nflg.product.bomnew.pojo.query.OptionalMbomMaterialQuery;
import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentVO;
import com.nflg.product.bomnew.pojo.vo.BomNewMbomMiddleVO;
import com.nflg.product.bomnew.pojo.vo.OptionalMbomMaterialListVO; import com.nflg.product.bomnew.pojo.vo.OptionalMbomMaterialListVO;
import com.nflg.product.bomnew.pojo.vo.OptionalMbomMaterialVO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import nflg.product.common.constant.STATE; import nflg.product.common.constant.STATE;
import nflg.product.common.vo.ResultVO; import nflg.product.common.vo.ResultVO;
@ -51,7 +37,6 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -73,7 +58,7 @@ public class OptionalMbomMaterialService extends ServiceImpl<OptionalMbomMateria
if (StrUtil.isNotBlank(query.getMaterialNo()) || StrUtil.isNotBlank(query.getDrawingNo())) { if (StrUtil.isNotBlank(query.getMaterialNo()) || StrUtil.isNotBlank(query.getDrawingNo())) {
page = this.getBaseMapper().indexListPage(new Page<>(query.getPage(), query.getPageSize()), query); page = this.getBaseMapper().indexListPage(new Page<>(query.getPage(), query.getPageSize()), query);
if (CollectionUtil.isNotEmpty(page.getRecords())) { if (CollectionUtil.isNotEmpty(page.getRecords())) {
List<OptionalMbomMaterialListVO> indexList = page.getRecords().stream().collect(Collectors.toList()); List<OptionalMbomMaterialListVO> indexList = new ArrayList<>(page.getRecords());
page.getRecords().clear(); page.getRecords().clear();
for(OptionalMbomMaterialListVO item : for(OptionalMbomMaterialListVO item :

View File

@ -64,6 +64,7 @@ public abstract class BaseForwardReport {
for (int index = 1; index < valueList.size(); index++) { for (int index = 1; index < valueList.size(); index++) {
item0.setNum(item0.getNum().add(valueList.get(index).getNum())); item0.setNum(item0.getNum().add(valueList.get(index).getNum()));
} }
item0.setTag(1);
} }
sumList.add(item0); sumList.add(item0);
} }

View File

@ -10,7 +10,6 @@ import com.nflg.product.bomnew.constant.EBomSourceEnum;
import com.nflg.product.bomnew.constant.EbomEditStatusEnum; import com.nflg.product.bomnew.constant.EbomEditStatusEnum;
import com.nflg.product.bomnew.constant.ProjectTypeInputTypeEnum; import com.nflg.product.bomnew.constant.ProjectTypeInputTypeEnum;
import com.nflg.product.bomnew.constant.VirtualPackageTypeEnum; import com.nflg.product.bomnew.constant.VirtualPackageTypeEnum;
import com.nflg.product.bomnew.pojo.dto.AddMaterialMainDTO;
import com.nflg.product.bomnew.pojo.dto.AddVirtrualMaterialDTO; import com.nflg.product.bomnew.pojo.dto.AddVirtrualMaterialDTO;
import com.nflg.product.bomnew.pojo.entity.BomNewEbomChildEntity; import com.nflg.product.bomnew.pojo.entity.BomNewEbomChildEntity;
import com.nflg.product.bomnew.pojo.entity.BomNewEbomParentEntity; import com.nflg.product.bomnew.pojo.entity.BomNewEbomParentEntity;
@ -23,8 +22,6 @@ import com.nflg.product.bomnew.service.MaterialService;
import com.nflg.product.bomnew.util.VersionUtil; import com.nflg.product.bomnew.util.VersionUtil;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;
import org.apache.catalina.authenticator.jaspic.CallbackHandlerImpl;
import sun.security.krb5.internal.PAData;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;

View File

@ -0,0 +1,302 @@
package com.nflg.product.bomnew.service.domain.MBom;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.TypeReference;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.nflg.product.base.core.exception.NflgBusinessException;
import com.nflg.product.bomnew.constant.MaterialMainConstant;
import com.nflg.product.bomnew.constant.ReportConstant;
import com.nflg.product.bomnew.pojo.entity.BomNewEbomChildEntity;
import com.nflg.product.bomnew.pojo.entity.BomNewMbomDetailEntity;
import com.nflg.product.bomnew.pojo.entity.BomNewMbomParentEntity;
import com.nflg.product.bomnew.pojo.entity.BomNewPbomParentFormalEntity;
import com.nflg.product.bomnew.pojo.query.ReverseReportQuery;
import com.nflg.product.bomnew.pojo.vo.BomNewMbomMiddleVO;
import com.nflg.product.bomnew.pojo.vo.ForwardReportVO;
import com.nflg.product.bomnew.pojo.vo.ReportBomVO;
import com.nflg.product.bomnew.pojo.vo.ReportBomVersionVO;
import com.nflg.product.bomnew.service.BomNewMbomDetailService;
import com.nflg.product.bomnew.service.BomNewMbomParentService;
import com.nflg.product.bomnew.service.BomNewPbomParentFormalService;
import com.nflg.product.bomnew.service.domain.BaseForwardReport;
import nflg.product.common.constant.STATE;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
* BOM查看反查对比用户选择了MBOM时不需要使用版本信息查询隐藏版本策略指定版本号和有效性
* BOM查看时用户选择了MBOM时遇到相同的编码时要全部显示在表格中多加一个备注栏备注栏的内容为31编码其它BOM查看的时候备注为空
*/
public class MBomForwardReport extends BaseForwardReport {
public MBomForwardReport(ReverseReportQuery query) {
super(query);
init();
}
AtomicInteger orderNum = new AtomicInteger();
private List<BomNewMbomParentEntity> rootEntity;
private List<BomNewMbomDetailEntity> detailEntity;
private BomNewMbomParentEntity rootNode;
void init() {
if (query.getMaterialNo().startsWith(MaterialMainConstant.MaterialNo_31)) {
QueryWrapper<BomNewMbomParentEntity> queryParentWrapper = new QueryWrapper<>();
queryParentWrapper.lambda().eq(BomNewMbomParentEntity::getMaterialNo, query.getMaterialNo());
if (StrUtil.isNotEmpty(query.getFacCode())) {
queryParentWrapper.lambda().eq(BomNewMbomParentEntity::getFacCode, query.getFacCode());
}
if (StrUtil.isNotEmpty(query.getStartDate()) && StrUtil.isNotEmpty(query.getEndDate())) {
queryParentWrapper.lambda().between(BomNewMbomParentEntity::getCreatedTime, query.getStartDate(), query.getEndDate());
}
if (CollUtil.isEmpty(rootEntity)) {
rootEntity = SpringUtil.getBean(BomNewMbomParentService.class).list(queryParentWrapper);
}
} else {
QueryWrapper<BomNewMbomDetailEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(BomNewMbomDetailEntity::getMaterialNo, query.getMaterialNo());
if (StrUtil.isNotEmpty(query.getFacCode())) {
queryWrapper.lambda().eq(BomNewMbomDetailEntity::getFacCode, query.getFacCode());
}
if (StrUtil.isNotEmpty(query.getStartDate()) && StrUtil.isNotEmpty(query.getEndDate())) {
queryWrapper.lambda().between(BomNewMbomDetailEntity::getCreatedTime, query.getStartDate(), query.getEndDate());
}
if (CollUtil.isEmpty(detailEntity)) {
detailEntity = SpringUtil.getBean(BomNewMbomDetailService.class).list();
}
}
}
QueryWrapper<BomNewMbomDetailEntity> buildQuery() {
QueryWrapper<BomNewMbomDetailEntity> queryWrapper = new QueryWrapper<>();
if (CollUtil.isEmpty(rootEntity) && CollUtil.isEmpty(detailEntity)) {
throw new NflgBusinessException(STATE.BusinessError, StrUtil.format("未查到物料编码为{}的数据信息", query.getMaterialNo()));
}
if (CollUtil.isNotEmpty(rootEntity)) {
List<Long> bomRowId = rootEntity.stream().map(BomNewMbomParentEntity::getRowId).collect(Collectors.toList());
queryWrapper.lambda().in(BomNewMbomDetailEntity::getBomRowId, bomRowId);
queryWrapper.lambda().eq(BomNewMbomDetailEntity::getParentRowId, 0);
} else if (CollUtil.isNotEmpty(detailEntity)) {
List<Long> bomRowId = detailEntity.stream().map(BomNewMbomDetailEntity::getRowId).collect(Collectors.toList());
queryWrapper.lambda().in(BomNewMbomDetailEntity::getParentRowId, bomRowId);
}
return queryWrapper;
}
public ReportBomVersionVO bomVersion() {
String desc = null;
if (CollUtil.isEmpty(rootEntity) && CollUtil.isEmpty(detailEntity)) {
throw new NflgBusinessException(STATE.BusinessError, StrUtil.format("未查到物料编码为{}的数据信息", query.getMaterialNo()));
}
if (CollUtil.isNotEmpty(rootEntity)) {
desc = rootEntity.get(0).getMaterialDesc();
} else if (CollUtil.isNotEmpty(detailEntity)) {
desc = detailEntity.get(0).getMaterialDesc();
}
ReportBomVersionVO reportBomVersionVO = new ReportBomVersionVO();
reportBomVersionVO.setMaterialDesc(desc);
return reportBomVersionVO;
}
ForwardReportVO getParent() {
if (CollUtil.isEmpty(rootEntity) && CollUtil.isEmpty(detailEntity)) {
throw new NflgBusinessException(STATE.BusinessError, StrUtil.format("未查到物料编码为{}的数据信息", query.getMaterialNo()));
}
ForwardReportVO forwardReportVO = null;
if (CollUtil.isNotEmpty(rootEntity)) {
forwardReportVO = Convert.convert(ForwardReportVO.class, rootEntity.get(0));
} else if (CollUtil.isNotEmpty(detailEntity)) {
forwardReportVO = Convert.convert(ForwardReportVO.class, detailEntity.get(0));
}
return forwardReportVO;
}
List<ForwardReportVO> convertToReportData(List<BomNewMbomMiddleVO> childList, int levelNum) {
for (BomNewMbomMiddleVO item:
childList) {
Long bomRowId=item.getBomRowId();
item.setRemark(item.getBomMaterialNo());
item.setBomRowId(item.getBomVersionRowId());
item.setLevelNum(levelNum);
item.setOrderNumber(orderNum.incrementAndGet() + "");
if (item.getParentRowId().longValue() == 0l) {
item.setParentRowId(bomRowId);
// item.setBomVersionRowId(item.getBomRowId());
}
}
List<ForwardReportVO> nodeList = Convert.convert(new TypeReference<List<ForwardReportVO>>() {
}, childList);
return nodeList;
}
List<ForwardReportVO> queryDetail(boolean isMore, Long rowId, Long bomRowId) {
int levelNum = 1;
List<Long> rowIdList = new ArrayList<>( Arrays.asList(rowId) );
List<ForwardReportVO> reportVOList = new ArrayList<>();
orderNum.set(0);
while (!rowIdList.isEmpty()) {
List<BomNewMbomMiddleVO> childList = SpringUtil.getBean(BomNewMbomParentService.class).getBaseMapper().getParentChild(rowIdList, bomRowId);
rowIdList.clear();
if (CollUtil.isNotEmpty(childList)) {
reportVOList.addAll(convertToReportData(childList, levelNum));
levelNum++;
if (isMore) {
List<Long> nextBomId = childList.stream().filter(u -> u.getBomVersionRowId() != null && u.getBomVersionRowId() > 0).map(BomNewMbomMiddleVO::getBomVersionRowId).collect(Collectors.toList());
if (CollUtil.isNotEmpty(nextBomId)) {
rowIdList.addAll(nextBomId);
}
}
}
}
return reportVOList;
}
/**
* @param isMore 是否多层查
*/
Map<Long, List<ForwardReportVO>> queryReport(boolean isMore) {
Map<Long, List<ForwardReportVO>> listMap = new HashMap<>();
//根数据表搜索到
if (CollUtil.isNotEmpty(rootEntity)) {
for (BomNewMbomParentEntity item : rootEntity) {
Long rowId = 0l;
listMap.put(item.getRowId(), queryDetail(isMore, rowId, item.getRowId()));
}
} else if (CollUtil.isNotEmpty(detailEntity)) { // detail表搜索
for (BomNewMbomDetailEntity item : detailEntity) {
Long rowId = item.getRowId();
listMap.put(item.getRowId(), queryDetail(isMore, rowId, item.getBomRowId()));
}
}
return listMap;
}
/**
* 单层
*
* @return
*/
ReportBomVO singleReport() {
List<ForwardReportVO> nodeList = new ArrayList<>();
ForwardReportVO forwardReportVO = getParent();
Map<Long, List<ForwardReportVO>> listMap = queryReport(false);
listMap.forEach((key, data) -> {
nodeList.addAll(data);
});
return buildReportBomVo(forwardReportVO, nodeList);
}
/**
* 汇总
* @return
*/
ReportBomVO sumReport() {
ForwardReportVO forwardReportVO = getParent();
Map<Long, List<ForwardReportVO>> listMap = queryReport(true);
List<ForwardReportVO> allList=new ArrayList<>();
listMap.forEach((key,list)->{
sumLevel(list);
List<ForwardReportVO> sumList =leafMergeMaterialNo(list);
allList.addAll(sumList);
});
int noNum=1;
for(ForwardReportVO vo:allList){
vo.setOrderNumber(noNum+"");noNum++;
}
return buildReportBomVo(forwardReportVO,allList);
}
/**
* 多层
* @return
*/
ReportBomVO multiReport() {
ForwardReportVO forwardReportVO = getParent();
Map<Long, List<ForwardReportVO>> listMap = queryReport(true);
List<ForwardReportVO> allList=new ArrayList<>();
listMap.forEach((key,list)->{
sumLevel(list);
List<ForwardReportVO> nodeList = showDataStyle(list, key);
allList.addAll(nodeList);
});
return buildReportBomVo(forwardReportVO,allList,query.getDataType());
}
public ReportBomVO genReport() {
//单层
if (query.getQueryType().compareTo(ReportConstant.QueryTypeEnum.SINGLE.getValue()) == 0) {
return singleReport();
}
//多层
if (query.getQueryType().compareTo(ReportConstant.QueryTypeEnum.MULTI.getValue()) == 0) {
return multiReport();
}
//汇总
if (query.getQueryType().compareTo(ReportConstant.QueryTypeEnum.SUM.getValue()) == 0) {
return sumReport();
}
return null;
}
}

View File

@ -1,10 +1,14 @@
package com.nflg.product.bomnew.service.domain.ReverseReport; package com.nflg.product.bomnew.service.domain.ReverseReport;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.db.sql.SqlBuilder;
import cn.hutool.extra.spring.SpringUtil; import cn.hutool.extra.spring.SpringUtil;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.nflg.product.bomnew.constant.ReportConstant; import com.nflg.product.bomnew.constant.ReportConstant;
import com.nflg.product.bomnew.pojo.entity.BomNewOriginalChildEntity;
import com.nflg.product.bomnew.pojo.query.ReverseReportQuery; import com.nflg.product.bomnew.pojo.query.ReverseReportQuery;
import com.nflg.product.bomnew.pojo.vo.BomOriginalListVO;
import com.nflg.product.bomnew.pojo.vo.ReverseReportVO; import com.nflg.product.bomnew.pojo.vo.ReverseReportVO;
import com.nflg.product.bomnew.service.BomNewOriginalChildService; import com.nflg.product.bomnew.service.BomNewOriginalChildService;
import com.nflg.product.bomnew.service.RedisService; import com.nflg.product.bomnew.service.RedisService;

View File

@ -66,7 +66,7 @@
<if test="query.status!=null and query.status==1"> <if test="query.status!=null and query.status==1">
<if test="query.startDate!=null and query.startDate!='' and query.endDate!=null and query.endDate!=''"> <if test="query.startDate!=null and query.startDate!='' and query.endDate!=null and query.endDate!=''">
<![CDATA[ and created_time >= #{query.startDate} and created_time <=#{query.endDate}]]> <![CDATA[ and created_time between #{query.startDate} and DATE_ADD(#{query.endDate}, INTERVAL 1 DAY) ]]>
</if> </if>
</if> </if>
@ -88,7 +88,7 @@
<if test="query.status!=null and query.status==3"> <if test="query.status!=null and query.status==3">
<if test="query.startDate!=null and query.startDate!='' and query.endDate!=null and query.endDate!=''"> <if test="query.startDate!=null and query.startDate!='' and query.endDate!=null and query.endDate!=''">
<![CDATA[ and sysn_sap_time >= #{query.startDate} and sysn_sap_time <=#{query.endDate}]]> <![CDATA[ and sysn_sap_time between #{query.startDate} and DATE_ADD(#{query.endDate}, INTERVAL 1 DAY) ]]>
</if> </if>
</if> </if>
@ -107,13 +107,18 @@
<!-- </select>--> <!-- </select>-->
<select id="getParentChild" resultType="com.nflg.product.bomnew.pojo.vo.BomNewMbomMiddleVO"> <select id="getParentChild" resultType="com.nflg.product.bomnew.pojo.vo.BomNewMbomMiddleVO">
select t1.*,t2.status, select t1.*,t2.status,t2.material_no as bomMaterialNo,
(SELECT count(1) from t_bom_new_mbom_detail where parent_row_id=t1.row_id) as bom_exist (SELECT count(1) from t_bom_new_mbom_detail where parent_row_id=t1.row_id) as bom_exist
from t_bom_new_mbom_detail as t1 from t_bom_new_mbom_detail as t1
left join t_bom_new_mbom_parent as t2 left join t_bom_new_mbom_parent as t2
on on
t1.bom_row_id=t2.row_id t1.bom_row_id=t2.row_id
where t1.parent_row_id = #{rowId} where t1.parent_row_id in
<foreach collection="rowIdList" item="item" open="(" separator="," close=")">
#{item}
</foreach>
<if test="bomRowId!=null and bomRowId!=0"> <if test="bomRowId!=null and bomRowId!=0">
and t1.bom_row_id=#{bomRowId} and t1.bom_row_id=#{bomRowId}
</if> </if>

View File

@ -63,7 +63,7 @@
<if test="query.startDate!= null and query.startDate!= '' and query.endDate != null and query.endDate!= '' "> <if test="query.startDate!= null and query.startDate!= '' and query.endDate != null and query.endDate!= '' ">
<![CDATA[and t1.created_time >= #{query.startDate} and t1.created_time <= #{query.endDate} ]]> <![CDATA[and t1.created_time between #{query.startDate} and DATE_ADD(#{query.endDate}, INTERVAL 1 DAY) ]]>
</if> </if>
order by t1.created_time desc order by t1.created_time desc

View File

@ -42,7 +42,7 @@
</if> </if>
<if test="query.startDate != null and query.startDate != '' and query.endDate != null and query.endDate != ''"> <if test="query.startDate != null and query.startDate != '' and query.endDate != null and query.endDate != ''">
<![CDATA[ and created_time >= #{query.startDate} and created_time <= #{query.endDate}]]> <![CDATA[ and created_time between #{query.startDate} and DATE_ADD(#{query.endDate}, INTERVAL 1 DAY) ]]>
</if> </if>
<if test="query.realName != null and query.realName != ''"> <if test="query.realName != null and query.realName != ''">

View File

@ -78,7 +78,7 @@ row_id,parent_row_id,level_row_id,material_no,material_name,material_desc,drawin
</if> </if>
<if test="query.startDate != null and query.startDate != '' and query.endDate != null and query.endDate != null"> <if test="query.startDate != null and query.startDate != '' and query.endDate != null and query.endDate != null">
<![CDATA[ and t1.created_time >= #{query.startDate} and t1.created_time <= #{query.endDate}]]> <![CDATA[ and t1.created_time between #{query.startDate} and DATE_ADD(#{query.endDate}, INTERVAL 1 DAY) ]]>
</if> </if>