工艺修改页面逻辑

master
liweidong-hj 1 month ago
parent 0e9bdf8e2e
commit 10e86f91d6
  1. 5
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartTreeVO.java
  2. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsPartMapper.java
  3. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsPartRelationMapper.java
  4. 9
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/PartMapper.xml
  5. 46
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/PartRelationMapper.xml
  6. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartRelationService.java
  7. 12
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartService.java
  8. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartVersionService.java
  9. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartRelationServiceImpl.java
  10. 57
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartServiceImpl.java
  11. 71
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartsVersionServiceImpl.java
  12. 30
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java
  13. 3
      blade-service/blade-desk/src/main/java/org/springblade/desk/iot/mapper/EpLineElectricMapper.xml

@ -24,6 +24,7 @@
* Author: Chill Zhuang (bladejava@qq.com)
*/
package org.springblade.desk.dashboard.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@ -39,6 +40,7 @@ public class DsPartTreeVO {
private String partCode;
private String partName;
private String docLink;
private Double quota;
private List<DsPartTreeVO> children;
/**
@ -49,10 +51,11 @@ public class DsPartTreeVO {
}
public DsPartTreeVO(String partCode, String partName, String docLink) {
public DsPartTreeVO(String partCode, String partName, String docLink,Double quota) {
this();
this.partCode = partCode;
this.partName = partName;
this.docLink = docLink;
this.quota = quota;
}
}

@ -151,4 +151,6 @@ public interface DsPartMapper extends BaseMapper<DsPartEntity> {
List<DsPartEntity> selectPartByDate(@Param("startDate") Date startDate,@Param("endDate") Date endDate);
List<DsPartSub> selectDsPartSub(@Param("partCode") String partCode);
List<DsPartEntity> selectListPartByCodeLike(@Param("zPartCode") String zPartCode);
}

@ -63,5 +63,9 @@ public interface DsPartRelationMapper extends BaseMapper<DsPartRelationEntity> {
List<DsPartRelationEntity> selectDsPartRelationByPartId(@Param("partId")Long partId);
List<DsPartBomVO> selectDsPartRelationByPartCodeAndChildPartCode(@Param("bPartCode")String bPartCode, @Param("zPartCode")String zPartCode);
List<DsPartBomVO> selectDsPartRelationByPartCodeAndChildPartCode(@Param("bPartCode")String bPartCode,
@Param("zPartCode")String zPartCode,
@Param("bPartVersion")String bPartVersion,
@Param("zPartVersion") String zPartVersion,
@Param("zPartIdList")List<Long> zPartIdList);
}

@ -388,6 +388,15 @@
src.MATERIAL, src.PLATE_CODE, src.SIN_TER_TYPE
FROM TOOL_MES.DS_PART_SUB src where src.PART_CODE = #{partCode}
</select>
<select id="selectListPartByCodeLike" resultType="org.springblade.desk.dashboard.pojo.entity.DsPartEntity">
SELECT
*
FROM DS_PART
WHERE PART_CODE LIKE '%' || #{zPartCode} || '%'
AND IS_DELETED = 0
AND STATUS = 1
ORDER BY PART_CODE
</select>
</mapper>

@ -36,25 +36,49 @@
<select id="selectDsPartRelationByPartCodeAndChildPartCode"
resultType="org.springblade.desk.dashboard.pojo.vo.DsPartBomVO">
SELECT
p.PART_CODE as bPartCode,
p.PART_NAME as bPartName,
p.DOC_LINK as bDocLink,
c.PART_CODE as zPartCode,
c.PART_NAME as zPartName,
c.DOC_LINK as zDocLink,
c.QUOTA as quota
p.PART_CODE as bPartCode,
p.PART_NAME as bPartName,
p.DOC_LINK as bDocLink,
pv.PART_VERSION as bPartVersion,
c.PART_CODE as zPartCode,
c.PART_NAME as zPartName,
c.DOC_LINK as zDocLink,
cv.PART_VERSION as zPartVersion,
c.QUOTA as quota
FROM DS_PART_RELATION r
LEFT JOIN DS_PART p ON r.PART_ID = p.ID
LEFT JOIN DS_PART c ON r.CHILD_PART_ID = c.ID
LEFT JOIN DS_PART p ON r.PART_ID = p.ID AND p.IS_DELETED = 0
LEFT JOIN DS_PART_VERSION pv ON p.ID = pv.PART_ID
AND pv.STATUS = 1
AND pv.IS_DELETED = 0
LEFT JOIN DS_PART c ON r.CHILD_PART_ID = c.ID AND c.IS_DELETED = 0
LEFT JOIN DS_PART_VERSION cv ON c.ID = cv.PART_ID
AND cv.STATUS = 1
AND cv.IS_DELETED = 0
WHERE r.STATUS = 1
AND r.IS_DELETED = 0
<if test="bPartCode != null and zPartCode != null">
AND p.PART_CODE LIKE '%' || #{bPartCode} || '%'
AND p.PART_CODE = #{bPartCode}
AND c.PART_CODE LIKE '%' || #{zPartCode} || '%'
</if>
<if test="zPartCode != null">
<if test="zPartCode != null and bPartCode == null">
AND c.PART_CODE LIKE '%' || #{zPartCode} || '%'
</if>
<if test="bPartCode != null and zPartCode == null">
AND p.PART_CODE = #{bPartCode}
</if>
<!-- 如果指定了具体版本号 -->
<if test="bPartVersion != null and bPartVersion != ''">
AND pv.PART_VERSION = #{bPartVersion}
</if>
<if test="zPartVersion != null and zPartVersion != ''">
AND cv.PART_VERSION = #{zPartVersion}
</if>
<if test="zPartIdList != null">
AND r.CHILD_PART_ID in
<foreach collection="zPartIdList" item="zPartId" open="(" close=")" separator=",">
#{zPartId}
</foreach>
</if>
</select>

@ -70,7 +70,10 @@ public interface IDsPartRelationService extends BaseService<DsPartRelationEntity
* 根据部件号 子件号查询
* @param bPartCode
* @param zPartCode
* @param bPartVersion
* @param zPartVersion
* @return
*/
List<DsPartBomVO> selectDsPartRelationByPartCodeAndChildPartCode(String bPartCode, String zPartCode);
List<DsPartBomVO> selectDsPartRelationByPartCodeAndChildPartCode
(String bPartCode, String zPartCode, String bPartVersion, String zPartVersion,List<Long> zPartId);
}

@ -240,4 +240,16 @@ public interface IDsPartService extends BaseService<DsPartEntity> {
List<DsPartSub> selectDsPartSub(String partCode);
List<DsPartVersionVO> selectDsPartVersionByIds(List<Long> idList);
/**
* 根据 零件号 b号 工艺级别 版本号 查询零件工艺信息
* 版本号为空查最新版本
* 工艺级别为空返回二级工艺
* @param partCode 零件号
* @param roamNo B号
* @param rank 工艺级别
* @param partVersion 版本号
* @return
*/
boolean selectPartCraft(String partCode,String roamNo,String rank,String partVersion);
}

@ -26,6 +26,7 @@
package org.springblade.desk.dashboard.service;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.dashboard.pojo.entity.DsPartEntity;
import org.springblade.desk.dashboard.pojo.entity.DsPartVersionEntity;
import java.util.List;
@ -66,4 +67,11 @@ public interface IDsPartVersionService extends BaseService<DsPartVersionEntity>
* @return
*/
DsPartVersionEntity selectByPartCodeAndPartVersion(String partCode, String partVersion);
/**
* 获取零件的最新版本号
* @param dsPartList
* @return
*/
List<DsPartVersionEntity> selectListByPartCode(List<DsPartEntity> dsPartList);
}

@ -74,8 +74,8 @@ public class DsPartRelationServiceImpl extends BaseServiceImpl<DsPartRelationMap
}
@Override
public List<DsPartBomVO> selectDsPartRelationByPartCodeAndChildPartCode(String bPartCode, String zPartCode) {
return partRelationMapper.selectDsPartRelationByPartCodeAndChildPartCode(bPartCode, zPartCode);
public List<DsPartBomVO> selectDsPartRelationByPartCodeAndChildPartCode(String bPartCode, String zPartCode ,String bPartVersion, String zPartVersion,List<Long> zPartIdList) {
return partRelationMapper.selectDsPartRelationByPartCodeAndChildPartCode(bPartCode, zPartCode,bPartVersion,zPartVersion,zPartIdList);
}
}

@ -284,11 +284,34 @@ public class DsPartServiceImpl extends BaseServiceImpl<DsPartMapper, DsPartEntit
@Override
public List<DsPartBomVO> sinteringPart(String bPartCode, String zPartCode) {
if (!StringUtils.isEmpty(bPartCode) && !StringUtils.isEmpty(zPartCode)) {
return partRelationService.selectDsPartRelationByPartCodeAndChildPartCode(bPartCode, zPartCode);
List<DsPartVersionEntity> partVersionEntityList = partVersionService.selectByPartCode(bPartCode);
Optional<DsPartVersionEntity> maxEntity = partVersionEntityList.stream()
.filter(entity -> entity.getPartVersion() != null)
.max(Comparator.comparing(DsPartVersionEntity::getPartVersion));
if (maxEntity.isPresent()) {
String bPartVersion = maxEntity.get().getPartVersion();
return partRelationService.selectDsPartRelationByPartCodeAndChildPartCode(bPartCode, zPartCode,bPartVersion,null,null);
}
}
if (!StringUtils.isEmpty(zPartCode)) {
return partRelationService.selectDsPartRelationByPartCodeAndChildPartCode(null, zPartCode);
//模糊查询零件
List<DsPartEntity> dsPartList = dsPartMapper.selectListPartByCodeLike(zPartCode);
//获取这些零件的最新版本号
List<DsPartVersionEntity> partVersionEntityList = partVersionService.selectListByPartCode(dsPartList);
// 提取零件ID列表
List<Long> zPartIdList = partVersionEntityList.stream()
.map(DsPartVersionEntity::getPartId)
.filter(Objects::nonNull)
.collect(Collectors.toList());
return partRelationService.selectDsPartRelationByPartCodeAndChildPartCode(null, null,null,null,zPartIdList);
}
return new ArrayList<>();
@ -297,14 +320,21 @@ public class DsPartServiceImpl extends BaseServiceImpl<DsPartMapper, DsPartEntit
@Override
public List<DsPartTreeVO> getPartTreeList(String partCode) {
// 1. 联表查询所有相关关系
List<DsPartBomVO> relations = dsPartMapper.selectPartRelations(partCode);
if (relations.isEmpty()) {
return new ArrayList<>();
List<DsPartVersionEntity> partVersionEntityList = partVersionService.selectByPartCode(partCode);
Optional<DsPartVersionEntity> maxEntity = partVersionEntityList.stream()
.filter(entity -> entity.getPartVersion() != null)
.max(Comparator.comparing(DsPartVersionEntity::getPartVersion));
if (maxEntity.isPresent()) {
String bPartVersion = maxEntity.get().getPartVersion();
List<DsPartBomVO> partBomVOList = partRelationService.selectDsPartRelationByPartCodeAndChildPartCode(partCode, null, bPartVersion, null, null);
// 2. 构建树形结构
return buildTreeFromRelations(partBomVOList);
}
// 2. 构建树形结构
return buildTreeFromRelations(relations);
return new ArrayList<>();
}
@Override
@ -407,7 +437,8 @@ public class DsPartServiceImpl extends BaseServiceImpl<DsPartMapper, DsPartEntit
DsPartTreeVO parentNode = new DsPartTreeVO(
parentCode,
relation.getBPartName(),
relation.getBDocLink()
relation.getBDocLink(),
null
);
partMap.put(parentCode, parentNode);
}
@ -417,7 +448,8 @@ public class DsPartServiceImpl extends BaseServiceImpl<DsPartMapper, DsPartEntit
DsPartTreeVO childNode = new DsPartTreeVO(
childCode,
relation.getZPartName(),
relation.getZDocLink()
relation.getZDocLink(),
relation.getQuota()
);
partMap.put(childCode, childNode);
}
@ -540,4 +572,9 @@ public class DsPartServiceImpl extends BaseServiceImpl<DsPartMapper, DsPartEntit
public List<DsPartVersionVO> selectDsPartVersionByIds(List<Long> idList) {
return dsPartMapper.selectDsPartVersionByIds(idList);
}
@Override
public boolean selectPartCraft(String partCode, String roamNo, String rank, String partVersion) {
return false;
}
}

@ -27,6 +27,8 @@ package org.springblade.desk.dashboard.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.desk.dashboard.excel.DsSimilarPartsExcel;
@ -43,8 +45,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
* 相似零件表 服务实现类
@ -52,6 +54,7 @@ import java.util.List;
* @author BladeX
* @since 2025-11-21
*/
@Slf4j
@Service
public class DsPartsVersionServiceImpl extends BaseServiceImpl<DsPartVersionMapper, DsPartVersionEntity> implements IDsPartVersionService {
@ -77,4 +80,68 @@ public class DsPartsVersionServiceImpl extends BaseServiceImpl<DsPartVersionMapp
public DsPartVersionEntity selectByPartCodeAndPartVersion(String partCode, String partVersion) {
return partVersionMapper.selectByPartCodeAndPartVersion(partCode,partVersion);
}
@Override
public List<DsPartVersionEntity> selectListByPartCode(List<DsPartEntity> dsPartList) {
// 提取零件ID列表
List<Long> partIds = dsPartList.stream()
.map(DsPartEntity::getId)
.filter(Objects::nonNull)
.collect(Collectors.toList());
if (partIds.isEmpty()) {
return Collections.emptyList();
}
// 查询零件版本号
List<DsPartVersionEntity> partVersionEntityList = partVersionMapper.selectByPartIds(partIds);
// 2. 按partCode分组,每组内按版本号转Integer降序排序,取最大值
Map<String, DsPartVersionEntity> partCodeToMaxVersionMap = partVersionEntityList.stream()
// 过滤无效数据:partCode为空 或 版本号非数字的记录
.filter(entity -> isValidPartVersionEntity(entity))
// 分组并保留每组内版本号最大的记录
.collect(Collectors.toMap(
DsPartVersionEntity::getPartCode,
entity -> entity,
// 合并规则:版本号转Integer后比较,保留更大的
(existingEntity, newEntity) -> {
int existingVersion = Integer.parseInt(existingEntity.getPartVersion().trim());
int newVersion = Integer.parseInt(newEntity.getPartVersion().trim());
return newVersion > existingVersion ? newEntity : existingEntity;
}
));
// 3. 将Map的值转为指定返回类型 List<DsPartVersionEntity>
List<DsPartVersionEntity> resultList = new ArrayList<>(partCodeToMaxVersionMap.values());
return resultList;
}
/**
* 校验实体有效性确保partCode非空 + 版本号可转为Integer
*/
private static boolean isValidPartVersionEntity(DsPartVersionEntity entity) {
if (entity == null) {
return false;
}
// 校验partCode非空
if (StringUtils.isBlank(entity.getPartCode())) {
log.warn("零件版本实体partCode为空,过滤该记录");
return false;
}
// 校验版本号非空且可转为Integer
String versionStr = entity.getPartVersion();
if (StringUtils.isBlank(versionStr)) {
log.warn("零件编码{}的版本号为空,过滤该记录", entity.getPartCode());
return false;
}
try {
Integer.parseInt(versionStr.trim());
return true;
} catch (NumberFormatException e) {
log.warn("零件编码{}的版本号{}非有效数字,过滤该记录", entity.getPartCode(), versionStr);
return false;
}
}
}

@ -525,9 +525,11 @@ public class DsTaskingServiceImpl extends BaseServiceImpl<DsTaskingMapper, DsTas
List<Long> idList = partRelationEntityList.stream().map(DsPartRelationEntity::getChildPartId).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(idList)) {
List<DsPartVersionVO> dsPartEntityList = partService.selectDsPartVersionByIds(idList);
// for (DsPartVersionVO dsPartVersionVO : dsPartEntityList) {
for (DsPartVersionVO dsPartVersionVO : dsPartEntityList) {
// dsPartVersionVO.setUpdateUserStr(userClient.userInfo(Func.toLong(dsPartVersionVO.getUpdateUser())).getData().getUser().getName());
// }
DsPartVersionEntity partVersionEntity = partVersionService.selectByPartId(dsPartVersionVO.getId());
dsPartVersionVO.setPartVersion(partVersionEntity.getPartVersion());
}
dsTaskingVO.setChildren(dsPartEntityList);
}
}
@ -712,9 +714,9 @@ public class DsTaskingServiceImpl extends BaseServiceImpl<DsTaskingMapper, DsTas
// 查询零件工艺信息
List<DsCraftVO> dsCraftVOList = craftService.selectDsCraftByPartId(partEntity.getId(), rank);
if(CollectionUtils.isEmpty(dsCraftVOList)){
throw new ServiceException("零件工艺信息有误 请检查该零件是否有工艺信息");
}
// if(CollectionUtils.isEmpty(dsCraftVOList)){
// throw new ServiceException("零件工艺信息有误 请检查该零件是否有工艺信息");
// }
if (!CollectionUtils.isEmpty(dsCraftVOList)) {
for (DsCraftVO craftVO : dsCraftVOList) {
@ -1447,20 +1449,24 @@ public class DsTaskingServiceImpl extends BaseServiceImpl<DsTaskingMapper, DsTas
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
public boolean syncTasking() {
log.info("========== 开始同步任务 ==========");
// 1. 获取上次同步的最大时间
DsTaskingEntity dsTaskingEntity = taskingMapper.getMaxSyncTime();
Date startTime = dsTaskingEntity != null ? dsTaskingEntity.getSyncTime() : null;
Date startTime = null;
Date endTime = new Date();
// 处理首次同步的情况
if (startTime == null) {
log.info("首次同步,同步所有历史任务");
} else {
if (dsTaskingEntity != null && dsTaskingEntity.getSyncTime() != null) {
// 在上次同步时间基础上增加1毫秒,避免重复
Calendar calendar = Calendar.getInstance();
calendar.setTime(dsTaskingEntity.getSyncTime());
calendar.add(Calendar.MILLISECOND, 1); // 增加1毫秒
startTime = calendar.getTime();
log.info("同步时间范围:{} - {}", startTime, endTime);
} else {
// 首次同步
log.info("首次同步,同步所有历史任务");
}
// 2. 查询待同步的任务列表
// 2. 查询待同步的任务列表(包含 startTime 到 endTime 之间的数据)
List<DsTaskingEntity> taskingList = taskingMapper.selectOldMesTasking(startTime, endTime);
if (CollectionUtils.isEmpty(taskingList)) {

@ -24,13 +24,12 @@
SELECT *
FROM (
SELECT
ID,
DEVICE_ID,
WORK_SLOT,
ELECTRIC,
CREATE_TIME,
PUSH_DATA
FROM EP_LINE_ELECTRIC
FROM P_RB_EP_LINE_ELECTRIC
WHERE DEVICE_ID = #{deviceCode}
AND WORK_SLOT = #{batchNo}
AND CREATE_TIME BETWEEN #{startDate}

Loading…
Cancel
Save