Browse Source

2026-04-09

新增【Component Where Used】功能
master
fengyuan_yang 6 days ago
parent
commit
ce988c4739
  1. 30
      src/main/java/com/spring/modules/part/controller/CompleteWhereUsedController.java
  2. 23
      src/main/java/com/spring/modules/part/dto/CompleteWhereUsedQueryDto.java
  3. 16
      src/main/java/com/spring/modules/part/mapper/CompleteWhereUsedMapper.java
  4. 9
      src/main/java/com/spring/modules/part/service/CompleteWhereUsedService.java
  5. 38
      src/main/java/com/spring/modules/part/service/impl/CompleteWhereUsedServiceImpl.java
  6. 43
      src/main/java/com/spring/modules/part/vo/CompleteWhereUsedVo.java
  7. 67
      src/main/resources/mapper/part/CompleteWhereUsedMapper.xml

30
src/main/java/com/spring/modules/part/controller/CompleteWhereUsedController.java

@ -0,0 +1,30 @@
package com.spring.modules.part.controller;
import com.spring.common.utils.PageUtils;
import com.spring.common.utils.R;
import com.spring.modules.part.dto.CompleteWhereUsedQueryDto;
import com.spring.modules.part.service.CompleteWhereUsedService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
/**
* 完整反查按子件或父件查询 BOM 组件引用关系
*/
@RestController
@RequestMapping("plm/completeWhereUsed")
public class CompleteWhereUsedController {
@Autowired
private CompleteWhereUsedService completeWhereUsedService;
@PostMapping("/search")
@ResponseBody
public R search(@RequestBody CompleteWhereUsedQueryDto query) {
PageUtils page = completeWhereUsedService.completeWhereUsedSearch(query);
return R.ok().put("page", page);
}
}

23
src/main/java/com/spring/modules/part/dto/CompleteWhereUsedQueryDto.java

@ -0,0 +1,23 @@
package com.spring.modules.part.dto;
import com.spring.common.utils.QueryPage;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 查询条件完整反查子件在哪些父件 BOM 中被引用
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class CompleteWhereUsedQueryDto extends QueryPage {
private String site;
/** 子件物料编码 */
private String componentPart;
/** 子件描述 */
private String componentPartDesc;
/** 子件零件类型 */
private String componentPartType;
/** 子件零件状态 */
private String componentPartStatus;
}

16
src/main/java/com/spring/modules/part/mapper/CompleteWhereUsedMapper.java

@ -0,0 +1,16 @@
package com.spring.modules.part.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.spring.modules.part.dto.CompleteWhereUsedQueryDto;
import com.spring.modules.part.vo.CompleteWhereUsedVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface CompleteWhereUsedMapper {
IPage<CompleteWhereUsedVo> completeWhereUsedSearch(
Page<CompleteWhereUsedVo> page,
@Param("query") CompleteWhereUsedQueryDto query);
}

9
src/main/java/com/spring/modules/part/service/CompleteWhereUsedService.java

@ -0,0 +1,9 @@
package com.spring.modules.part.service;
import com.spring.common.utils.PageUtils;
import com.spring.modules.part.dto.CompleteWhereUsedQueryDto;
public interface CompleteWhereUsedService {
PageUtils completeWhereUsedSearch(CompleteWhereUsedQueryDto query);
}

38
src/main/java/com/spring/modules/part/service/impl/CompleteWhereUsedServiceImpl.java

@ -0,0 +1,38 @@
package com.spring.modules.part.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.spring.common.utils.PageUtils;
import com.spring.modules.part.dto.CompleteWhereUsedQueryDto;
import com.spring.modules.part.mapper.CompleteWhereUsedMapper;
import com.spring.modules.part.service.CompleteWhereUsedService;
import com.spring.modules.part.vo.CompleteWhereUsedVo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class CompleteWhereUsedServiceImpl implements CompleteWhereUsedService {
@Autowired
private CompleteWhereUsedMapper completeWhereUsedMapper;
@Override
public PageUtils completeWhereUsedSearch(CompleteWhereUsedQueryDto query) {
if (query == null || StringUtils.isBlank(query.getSite())) {
throw new RuntimeException("工厂(site)不能为空");
}
if (StringUtils.isAllBlank(query.getComponentPart(), query.getComponentPartDesc(), query.getComponentPartType(), query.getComponentPartStatus())) {
throw new RuntimeException("请至少填写一项查询条件");
}
if (StringUtils.isNotBlank(query.getComponentPart())) {
query.setComponentPart(query.getComponentPart().trim());
}
if (StringUtils.isNotBlank(query.getComponentPartDesc())) {
query.setComponentPartDesc(query.getComponentPartDesc().trim());
}
IPage<CompleteWhereUsedVo> page = completeWhereUsedMapper.completeWhereUsedSearch(
new Page<>(query.getPage(), query.getLimit()), query);
return new PageUtils(page);
}
}

43
src/main/java/com/spring/modules/part/vo/CompleteWhereUsedVo.java

@ -0,0 +1,43 @@
package com.spring.modules.part.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* 完整反查结果行字段顺序与查询 SQL 列顺序一致
*/
@Data
public class CompleteWhereUsedVo {
private String site;
private String parentPartNo;
private String parentPartDesc;
private String parentPartType;
private String parentPartStatus;
private String parentPartStatusDesc;
private Integer engChgLevel;
private String alternativeNo;
/** plm_bom_detail.status */
private String bomDetailStatus;
private Integer lineItemNo;
private Integer lineSequence;
private String componentPart;
private String componentPartDesc;
private String componentPartType;
private String issueType;
private String componentPartStatus;
private String componentPartStatusDesc;
private String bomType;
private Date effPhaseInDate;
private Date effPhaseOutDate;
private BigDecimal qtyPerAssembly;
private BigDecimal componentScrap;
private BigDecimal shrinkageFactor;
private Integer operationNo;
private String issueToLoc;
private String noteText;
private String consumptionItem;
private String printUnit;
}

67
src/main/resources/mapper/part/CompleteWhereUsedMapper.xml

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.spring.modules.part.mapper.CompleteWhereUsedMapper">
<select id="completeWhereUsedSearch"
parameterType="com.spring.modules.part.dto.CompleteWhereUsedQueryDto"
resultType="com.spring.modules.part.vo.CompleteWhereUsedVo">
SELECT
pbc.site,
pbc.part_no AS parentPartNo,
p1.part_desc AS parentPartDesc,
p1.part_type AS parentPartType,
p1.part_status AS parentPartStatus,
dbo.get_part_status_name(p1.site, p1.part_status) AS parentPartStatusDesc,
pbc.eng_chg_level AS engChgLevel,
pbc.alternative_no AS alternativeNo,
pbd.status AS bomDetailStatus,
pbc.line_item_no AS lineItemNo,
pbc.line_sequence AS lineSequence,
pbc.component_part AS componentPart,
dbo.get_part_name(pbc.site, pbc.component_part) AS componentPartDesc,
p2.part_type AS componentPartType,
pbc.issue_type AS issueType,
p2.part_status AS componentPartStatus,
dbo.get_part_status_name(p2.site, p2.part_status) AS componentPartStatusDesc,
pbc.bom_type AS bomType,
pbh.EFF_PHASE_IN_DATE AS effPhaseInDate,
pbh.EFF_PHASE_OUT_DATE AS effPhaseOutDate,
pbc.qty_per_assembly AS qtyPerAssembly,
pbc.component_scrap AS componentScrap,
pbc.shrinkage_factor AS shrinkageFactor,
pbc.operation_no AS operationNo,
pbc.issue_to_loc AS issueToLoc,
pbc.note_text AS noteText,
pbc.consumption_item AS consumptionItem,
pbc.print_unit AS printUnit
FROM plm_bom_component AS pbc
LEFT JOIN part AS p1 ON pbc.site = p1.site AND pbc.part_no = p1.part_no
LEFT JOIN part AS p2 ON pbc.site = p2.site AND pbc.component_part = p2.part_no
LEFT JOIN plm_bom_detail AS pbd ON pbc.site = pbd.site AND pbc.part_no = pbd.part_no
AND pbc.eng_chg_level = pbd.eng_chg_level AND pbc.bom_type = pbd.bom_type
AND pbc.alternative_no = pbd.alternative_no
LEFT JOIN plm_bom_header AS pbh ON pbc.site = pbh.site AND pbc.part_no = pbh.part_no
AND pbc.eng_chg_level = pbh.eng_chg_level AND pbc.bom_type = pbh.bom_type
<where>
pbc.site = #{query.site}
<if test="query.componentPart != null and query.componentPart != ''">
AND pbc.component_part = #{query.componentPart}
</if>
<if test="query.componentPartDesc != null and query.componentPartDesc != ''">
AND dbo.get_part_name(pbc.site, pbc.component_part) LIKE #{query.componentPartDesc}
</if>
<if test="query.componentPartType != null and query.componentPartType != ''">
AND p2.part_type = #{query.componentPartType}
</if>
<if test="query.componentPartStatus != null and query.componentPartStatus != ''">
AND p2.part_status = #{query.componentPartStatus}
</if>
</where>
ORDER BY
pbc.part_no,
pbc.site,
pbc.eng_chg_level,
pbc.bom_type,
pbc.alternative_no
</select>
</mapper>
Loading…
Cancel
Save