Merge remote-tracking branch 'origin/master-virtualPackageOrderNumber-lhj0925'

This commit is contained in:
10001392 2024-09-26 17:49:02 +08:00
commit ec91721d33
6 changed files with 131 additions and 12 deletions

View File

@ -6,16 +6,19 @@ import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.TypeReference;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.collect.ImmutableList;
import com.nflg.product.base.core.api.BaseApi;
import com.nflg.product.base.core.exception.NflgBusinessException;
import com.nflg.product.bomnew.constant.ReportConstant;
import com.nflg.product.bomnew.pojo.entity.MaterialMainEntity;
import com.nflg.product.bomnew.pojo.query.ChildBomReportQuery;
import com.nflg.product.bomnew.pojo.query.CompareReportQuery;
import com.nflg.product.bomnew.pojo.query.ReverseReportQuery;
import com.nflg.product.bomnew.pojo.vo.*;
import com.nflg.product.bomnew.service.CompareReportService;
import com.nflg.product.bomnew.service.ForwardReportService;
import com.nflg.product.bomnew.service.MaterialMainService;
import com.nflg.product.bomnew.service.ReverseReportService;
import com.nflg.product.bomnew.util.EecExcelUtil;
import com.nflg.product.bomnew.util.VUtils;
@ -32,9 +35,13 @@ import org.ttzero.excel.entity.ListSheet;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import javax.xml.transform.Result;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
@Api(tags = "BOM-报表接口")
@RestController
@ -50,6 +57,8 @@ public class BomReportApi extends BaseApi {
@Resource
CompareReportService compareReportService;
@Resource
MaterialMainService materialMainService;
@PostMapping("reverseReport")
@ApiOperation("bom-反查")
@ -123,8 +132,18 @@ public class BomReportApi extends BaseApi {
if (resultVO != null) {
return resultVO;
}
return ResultVO.success(forwardReportService.factoryBomType(query));
//物料描述从 物料主数据获取 by 10002327 240926
ReportBomVO r = forwardReportService.factoryBomType(query);
if(r == null){
return ResultVO.error("查无数据~");
}
if(CollUtil.isNotEmpty(r.getChildNodes())){
Set<String> materialNoSet = r.getChildNodes().stream().map(BaseMaterialVO::getMaterialNo).collect(Collectors.toSet());
List<MaterialMainEntity> materialMainList = materialMainService.list(Wrappers.<MaterialMainEntity>lambdaQuery().in(MaterialMainEntity::getMaterialNo,materialNoSet));
Map<String,String> materialMainMap = materialMainList.stream().collect(Collectors.toMap(MaterialMainEntity::getMaterialNo,MaterialMainEntity::getMaterialDesc,(k1, k2)->k1));
r.getChildNodes().forEach(c -> c.setMaterialDesc(materialMainMap.getOrDefault(c.getMaterialNo(),c.getMaterialDesc())));
}
return ResultVO.success(r);
}

View File

@ -99,12 +99,12 @@ public class DQBomApi extends BaseApi {
@ApiOperation("分页查询数据")
public ResultVO<Page<BomNewDQbomVO>> getPageList(@Valid @RequestBody @NotNull BomNewDQbomPageQuery query) {
// 电气BOM正式表查询无须添加时间条件 by 10002327 240918
// if (query.getStatus() == 2) {
// if (StrUtil.isBlank(query.getStartDate()) && StrUtil.isBlank(query.getEndDate())) {
// query.setStartDate(LocalDateTimeUtil.format(LocalDateTime.now().plusDays(-2), "yyyy-MM-dd"));
// query.setEndDate(LocalDateTimeUtil.format(LocalDateTime.now().plusDays(1), "yyyy-MM-dd"));
// }
// }
if (query.getStatus() == 2) {
if (StrUtil.isAllBlank(query.getDrawingNo(),query.getMaterialNo(),query.getMaterialName(),query.getStartDate(),query.getEndDate())) {
query.setStartDate(LocalDateTimeUtil.format(LocalDateTime.now().plusDays(-2), "yyyy-MM-dd"));
query.setEndDate(LocalDateTimeUtil.format(LocalDateTime.now().plusDays(1), "yyyy-MM-dd"));
}
}
return ResultVO.success(dQBomService.getPageList(query));
}

View File

@ -40,6 +40,7 @@ import nflg.product.common.constant.STATE;
import nflg.product.common.vo.ResultVO;
import org.apache.commons.compress.utils.Lists;
import org.apache.commons.lang3.StringUtils;
import org.checkerframework.checker.nullness.Opt;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -1021,11 +1022,31 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
// //4删掉ebom 子级的数据
// ebomChildService.remove(Wrappers.<BomNewEbomChildEntity>lambdaQuery().in(BomNewEbomChildEntity::getParentRowId,ebomParentIdList));
// }
//3判断parent下是否有子级如果没有的话把parent给删除了 物料****因下级全部是F项仅保存EBOM未生成PBOM数据
//3判断parent下是否有子级排除电控系统和仙桃的如果没有的话把parent给删除了 物料****因下级全部是F项仅保存EBOM未生成PBOM数据 仙桃)
List<BomNewPbomParentEntity> emptyChildParentList = eBomToPBom.getPBomParentResult().stream()
.filter(p -> !p.getMaterialDesc().contains("电控系统") && !eBomToPBom.getPBomChildResult().stream().map(BomNewPbomChildEntity::getParentRowId).collect(Collectors.toList()).contains(p.getRowId()) )
.filter(p -> !p.getMaterialDesc().contains("电控系统") && !p.getMaterialDesc().contains("仙桃)")
&& !eBomToPBom.getPBomChildResult().stream().map(BomNewPbomChildEntity::getParentRowId).collect(Collectors.toList()).contains(p.getRowId()) )
.collect(Collectors.toList());
if(!emptyChildParentList.isEmpty()){
//仅选择的第一层需要提示
List<BomNewPbomParentEntity> fList = emptyChildParentList.stream().filter(p -> p.getSourceRowId().equals(bomRowId)).filter(p -> {
Optional<BomNewEbomParentVO> opt = bomTree.stream().filter(t -> p.getMaterialNo().equals(t.getMaterialNo())).findFirst();
if(opt.isPresent()){
List<BomNewEbomParentVO> cList = bomTree.stream().filter(t -> t.getParentRowId().equals(opt.get().getRowId())).collect(Collectors.toList());
if(cList.size() > 0){
Map<String,List<BomNewEbomParentVO>> ptMap = cList.stream().collect(Collectors.groupingBy(BaseMaterialVO::getProjectType));
return ptMap.getOrDefault("F",Lists.newArrayList()).size() == cList.size();
}
}
return false;
}).collect(Collectors.toList());
if(!fList.isEmpty()){
String m = fList.stream().map(BomNewPbomParentEntity::getMaterialNo).distinct().collect(Collectors.joining(","));
OperationErrorMsgVO oem = new OperationErrorMsgVO();
oem.setPrimaryKey(m);
oem.msg = String.format("物料%s因下级全部是F项仅保存EBOM未生成PBOM数据",m);
rList.add(oem);
}
// rList = emptyChildParentList.stream().map(BomNewPbomParentEntity::getMaterialNo).distinct()
// .map(m -> {
// OperationErrorMsgVO oem = new OperationErrorMsgVO();
@ -1197,9 +1218,30 @@ public class BomNewEbomParentService extends ServiceImpl<BomNewEbomParentMapper,
eBomToPBom.getPBomChildResult().removeAll(pbomChild);
//3判断parent下是否有子级如果没有的话把parent给删除了 物料****因下级全部是F项仅保存EBOM未生成PBOM数据
List<BomNewPbomParentEntity> emptyChildParentList = eBomToPBom.getPBomParentResult().stream()
.filter(p -> !p.getMaterialDesc().contains("电控系统") && !eBomToPBom.getPBomChildResult().stream().map(BomNewPbomChildEntity::getParentRowId).collect(Collectors.toList()).contains(p.getRowId()) )
.filter(p -> !p.getMaterialDesc().contains("电控系统") && !p.getMaterialDesc().contains("仙桃)")
&& !eBomToPBom.getPBomChildResult().stream().map(BomNewPbomChildEntity::getParentRowId).collect(Collectors.toList()).contains(p.getRowId()) )
.collect(Collectors.toList());
if(!emptyChildParentList.isEmpty()){
//仅选择的第一层需要提示
List<BomNewPbomParentEntity> fList = emptyChildParentList.stream().filter(p -> p.getSourceRowId().equals(bomRowId)).filter(p -> {
Optional<BomNewEbomParentVO> opt = bomTree.stream().filter(t -> p.getMaterialNo().equals(t.getMaterialNo())).findFirst();
if(opt.isPresent()){
List<BomNewEbomParentVO> cList = bomTree.stream().filter(t -> t.getParentRowId().equals(opt.get().getRowId())).collect(Collectors.toList());
if(cList.size() > 0){
Map<String,List<BomNewEbomParentVO>> ptMap = cList.stream().collect(Collectors.groupingBy(BaseMaterialVO::getProjectType));
return ptMap.getOrDefault("F",Lists.newArrayList()).size() == cList.size();
}
}
return false;
}).collect(Collectors.toList());
if(!fList.isEmpty()){
String m = fList.stream().map(BomNewPbomParentEntity::getMaterialNo).distinct().collect(Collectors.joining(","));
OperationErrorMsgVO oem = new OperationErrorMsgVO();
oem.setPrimaryKey(m);
oem.msg = String.format("物料%s因下级全部是F项仅保存EBOM未生成PBOM数据",m);
rList.add(oem);
}
// rList = emptyChildParentList.stream().map(BomNewPbomParentEntity::getMaterialNo).distinct()
// .map(m -> {
// OperationErrorMsgVO oem = new OperationErrorMsgVO();

View File

@ -2,6 +2,8 @@ package com.nflg.product.bomnew.service.domain.PBom;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
@ -19,12 +21,14 @@ import com.nflg.product.bomnew.service.MaterialMainService;
import com.nflg.product.bomnew.util.VUtils;
import com.nflg.product.bomnew.util.VersionUtil;
import lombok.Getter;
import org.apache.commons.compress.utils.Lists;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
/**
* 工艺包构建
@ -219,7 +223,11 @@ public class TechnologyPackageParamBuilder {
child.setRowId(IdWorker.getId());
child.setParentRowId(parent.getRowId());
child.setFacCode(parent.getFacCode());
child.setOrderNumber(StrUtil.padPre (String.valueOf(parentChildren.size()+1),3,"0"));
//虚拟包作为下级时序号按照已有的子级取出最大的序号值+1 by 10002327 0925
int orderNumber = parentChildren.stream().max((p1,p2) -> p1.getOrderNumber().compareTo(p2.getOrderNumber()))
.map(m -> Convert.toInt(m.getOrderNumber())).orElse(0);
child.setOrderNumber(StrUtil.padPre (String.valueOf(orderNumber+1),3,"0"));
child.setDrawingNo(packageMaterial.getDrawingNo());
child.setMaterialNo(packageMaterial.getMaterialNo());
child.setMaterialName(packageMaterial.getMaterialName());

View File

@ -35,6 +35,28 @@
</encoder>
</appender>
<!-- error日志 -->
<appender name="ErrorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>error</level>
</filter>
<file>${logDir}/error/nflg-bom-new-error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 按日期滚动,每天生成一个文件 -->
<fileNamePattern>${logDir}/error/%d{yyyy-MM-dd}.%i.error.log</fileNamePattern>
<!-- 保留15天的日志 -->
<maxHistory>30</maxHistory>
<!-- 启动时,是否删除旧的日志文件 -->
<cleanHistoryOnStart>true</cleanHistoryOnStart>
<!-- 单天单个日志最大size -->
<maxFileSize>${splitSize}</maxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder" charset="UTF-8">
<!--格式化输出:%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度%logger:显示类名 %msg日志消息%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %X{traceId} [%thread] %-5level %logger{50} %msg%n</pattern>
</encoder>
</appender>
<!-- 忽略Nacos服务器的INFO日志 -->
<logger name="com.alibaba.nacos" level="WARN" />
@ -43,4 +65,7 @@
<appender-ref ref="Console" />
<appender-ref ref="RollingFileAll" />
</root>
<root level="ERROR">
<appender-ref ref="ErrorFile" />
</root>
</configuration>

View File

@ -35,6 +35,28 @@
</encoder>
</appender>
<!-- error日志 -->
<appender name="ErrorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>error</level>
</filter>
<file>${logDir}/error/nflg-bom-new-error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 按日期滚动,每天生成一个文件 -->
<fileNamePattern>${logDir}/error/%d{yyyy-MM-dd}.%i.error.log</fileNamePattern>
<!-- 保留15天的日志 -->
<maxHistory>30</maxHistory>
<!-- 启动时,是否删除旧的日志文件 -->
<cleanHistoryOnStart>true</cleanHistoryOnStart>
<!-- 单天单个日志最大size -->
<maxFileSize>${splitSize}</maxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder" charset="UTF-8">
<!--格式化输出:%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度%logger:显示类名 %msg日志消息%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %X{traceId} [%thread] %-5level %logger{50} %msg%n</pattern>
</encoder>
</appender>
<logger name="com.alibaba.nacos" level="WARN" />
<logger name="org.mybatis.spring" level="WARN"/>
<logger name="org.springframework.web" level="WARN"/>
@ -46,4 +68,7 @@
<appender-ref ref="Console" />
<appender-ref ref="RollingFileAll" />
</root>
<root level="ERROR">
<appender-ref ref="ErrorFile" />
</root>
</configuration>