Browse Source

2026-07-07

RoHS优化,显示IFS物料编码和描述,并给查询条件
master
fengyuan_yang 3 months ago
parent
commit
d61d55ffbe
  1. 10
      src/main/java/com/spring/modules/lab/service/impl/LabServiceImpl.java
  2. 12
      src/main/java/com/spring/modules/rohs/entity/RohsEntity.java
  3. 4
      src/main/java/com/spring/modules/rohs/mapper/RohsMapper.java
  4. 102
      src/main/java/com/spring/modules/rohs/service/impl/RohsServiceImpl.java
  5. 220
      src/main/resources/mapper/rohs/RohsMapper.xml

10
src/main/java/com/spring/modules/lab/service/impl/LabServiceImpl.java

@ -76,9 +76,9 @@ public class LabServiceImpl extends ServiceImpl<LabMapper, LabEntity> implements
@Override
public PageUtils queryPage(Map<String, Object> params) {
params.put("referenceNo", toLikeParam((String) params.get("referenceNo")));
params.put("applicant", toLikeParam((String) params.get("applicant")));
params.put("currentApprover", toLikeParam((String) params.get("currentApprover")));
params.put("referenceNo", trimToNull((String) params.get("referenceNo")));
params.put("applicant", trimToNull((String) params.get("applicant")));
params.put("currentApprover", trimToNull((String) params.get("currentApprover")));
IPage<LabEntity> page = this.baseMapper.queryPageWithNames(
new Query<LabEntity>().getPage(params),
@ -561,11 +561,11 @@ public class LabServiceImpl extends ServiceImpl<LabMapper, LabEntity> implements
throw new RuntimeException(e.getMessage());
}
private String toLikeParam(String value) {
private String trimToNull(String value) {
if (StringUtils.isBlank(value)) {
return null;
}
return "%" + value.trim() + "%";
return value.trim();
}
private String convertFieldValue(Object valueObj) {

12
src/main/java/com/spring/modules/rohs/entity/RohsEntity.java

@ -412,6 +412,18 @@ public class RohsEntity implements Serializable {
@TableField(exist = false)
private String commGroup3Desc;
/**
* 主信息行显示的IFS物料编码取材料信息第一条
*/
@TableField(exist = false)
private String mainIfsPartNo;
/**
* 主信息行显示的物料描述取材料信息第一条
*/
@TableField(exist = false)
private String mainPartDesc;
/**
* RoHs材料明细一对多
*/

4
src/main/java/com/spring/modules/rohs/mapper/RohsMapper.java

@ -20,6 +20,10 @@ public interface RohsMapper extends BaseMapper<RohsEntity> {
IPage<RohsEntity> queryPageWithNames(IPage<?> page, @Param("params") Map<String, Object> params);
long queryPageWithNamesCount(@Param("params") Map<String, Object> params);
List<RohsEntity> queryPageWithNamesData(@Param("offset") long offset, @Param("size") long size, @Param("params") Map<String, Object> params);
IPage<RohsEntity> queryPageWithNamesAny(IPage<?> page, @Param("params") Map<String, String> params);
RohsEntity getDetailWithNames(@Param("site") String site, @Param("referenceNo") String referenceNo);

102
src/main/java/com/spring/modules/rohs/service/impl/RohsServiceImpl.java

@ -2,6 +2,8 @@ package com.spring.modules.rohs.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.spring.common.utils.Constant;
import com.spring.common.utils.DateUtils;
@ -45,12 +47,14 @@ import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;
import static com.spring.modules.base.utils.CommonUtils.getPropertyValue;
@Service("rohsService")
public class RohsServiceImpl extends ServiceImpl<RohsMapper, RohsEntity> implements RohsService {
private static final String HSF_STANDARD_CUSTOMER = "C00052";
private static final Pattern ORDER_COLUMN_PATTERN = Pattern.compile("^[A-Za-z0-9_.]+$");
@Autowired
private SysUserDao sysUserDao;
@ -75,23 +79,28 @@ public class RohsServiceImpl extends ServiceImpl<RohsMapper, RohsEntity> impleme
@Override
public PageUtils queryPage(Map<String, Object> params) {
params.put("referenceNo", toLikeParam((String) params.get("referenceNo")));
params.put("applicant", toLikeParam((String) params.get("applicant")));
params.put("currentApprover", toLikeParam((String) params.get("currentApprover")));
IPage<RohsEntity> page = this.baseMapper.queryPageWithNames(
new Query<RohsEntity>().getPage(params),
params
);
List<RohsEntity> records = page.getRecords();
params.put("referenceNo", trimToNull((String) params.get("referenceNo")));
params.put("applicant", trimToNull((String) params.get("applicant")));
params.put("currentApprover", trimToNull((String) params.get("currentApprover")));
params.put("ifsPartNo", trimToNull((String) params.get("ifsPartNo")));
params.put("materialDesc", trimToNull((String) params.get("materialDesc")));
long currPage = parseLong(params.get(Constant.PAGE), 1L);
long pageSize = parseLong(params.get(Constant.LIMIT), 10L);
long total = this.baseMapper.queryPageWithNamesCount(params);
long offset = pageSize > 0 ? Math.max(currPage - 1, 0L) * pageSize : 0L;
List<RohsEntity> records = this.baseMapper.queryPageWithNamesData(offset, pageSize, params);
if (records != null && !records.isEmpty()) {
Map<String, String> userDisplayCache = new HashMap<>();
for (RohsEntity rohs : records) {
fillUserDisplayFields(rohs, userDisplayCache);
}
}
return new PageUtils(page);
int resultPageSize = pageSize > 0
? (int) pageSize
: Math.max(records == null ? 0 : records.size(), 1);
return new PageUtils(records, (int) total, resultPageSize, (int) currPage);
}
@Override
@ -108,10 +117,11 @@ public class RohsServiceImpl extends ServiceImpl<RohsMapper, RohsEntity> impleme
params.put("menuId", data.getMenuId());
params.put("userName", data.getUserName());
params.put("whereClause", whereClause);
params.put("orderClause", orderClause);
Page<RohsEntity> pageReq = new Page<>(data.getNo(), data.getSize());
applyPageOrder(pageReq, orderClause);
IPage<RohsEntity> page = this.baseMapper.queryPageWithNamesAny(
new com.baomidou.mybatisplus.extension.plugins.pagination.Page<RohsEntity>(data.getNo(), data.getSize()),
pageReq,
params
);
List<RohsEntity> records = page.getRecords();
@ -389,9 +399,9 @@ public class RohsServiceImpl extends ServiceImpl<RohsMapper, RohsEntity> impleme
@Override
public PageUtils queryProjectMaterialPage(Map<String, Object> params) {
params.put("finalPartNo", toLikeParam((String) params.get("finalPartNo")));
params.put("partDesc", toLikeParam((String) params.get("partDesc")));
params.put("partStatus", toLikeParam((String) params.get("partStatus")));
params.put("finalPartNo", trimToNull((String) params.get("finalPartNo")));
params.put("partDesc", trimToNull((String) params.get("partDesc")));
params.put("partStatus", trimToNull((String) params.get("partStatus")));
IPage<Map<String, Object>> page = this.baseMapper.queryProjectMaterialPage(
new Query<Map<String, Object>>().getPage(params),
@ -600,11 +610,67 @@ public class RohsServiceImpl extends ServiceImpl<RohsMapper, RohsEntity> impleme
throw new RuntimeException(e.getMessage());
}
private String toLikeParam(String value) {
private String trimToNull(String value) {
if (StringUtils.isBlank(value)) {
return null;
}
return "%" + value.trim() + "%";
return value.trim();
}
private long parseLong(Object value, long defaultValue) {
if (value == null) {
return defaultValue;
}
try {
return Long.parseLong(String.valueOf(value));
} catch (Exception e) {
return defaultValue;
}
}
private void applyPageOrder(Page<RohsEntity> page, String orderClause) {
if (page == null) {
return;
}
String normalizedOrderClause = StringUtils.trimToEmpty(orderClause);
if (StringUtils.isBlank(normalizedOrderClause)) {
page.addOrder(OrderItem.desc("reference_no"));
return;
}
boolean hasValidOrder = false;
String[] orderItems = normalizedOrderClause.split(",");
for (String orderItem : orderItems) {
String singleOrder = StringUtils.trimToEmpty(orderItem);
if (StringUtils.isBlank(singleOrder)) {
continue;
}
String orderDirection = "DESC";
String orderColumn = singleOrder;
int lastSpaceIndex = singleOrder.lastIndexOf(" ");
if (lastSpaceIndex > 0) {
String maybeDirection = StringUtils.trimToEmpty(singleOrder.substring(lastSpaceIndex + 1));
if ("ASC".equalsIgnoreCase(maybeDirection) || "DESC".equalsIgnoreCase(maybeDirection)) {
orderDirection = maybeDirection.toUpperCase();
orderColumn = StringUtils.trimToEmpty(singleOrder.substring(0, lastSpaceIndex));
}
}
if (!isSafeOrderColumn(orderColumn)) {
continue;
}
if ("ASC".equalsIgnoreCase(orderDirection)) {
page.addOrder(OrderItem.asc(orderColumn));
} else {
page.addOrder(OrderItem.desc(orderColumn));
}
hasValidOrder = true;
}
if (!hasValidOrder) {
page.addOrder(OrderItem.desc("reference_no"));
}
}
private boolean isSafeOrderColumn(String orderColumn) {
return StringUtils.isNotBlank(orderColumn) && ORDER_COLUMN_PATTERN.matcher(orderColumn).matches();
}
private String convertFieldValue(Object valueObj) {

220
src/main/resources/mapper/rohs/RohsMapper.xml

@ -75,6 +75,8 @@
<result column="commGroup1Desc" property="commGroup1Desc" />
<result column="commGroup2Desc" property="commGroup2Desc" />
<result column="commGroup3Desc" property="commGroup3Desc" />
<result column="mainIfsPartNo" property="mainIfsPartNo" />
<result column="mainPartDesc" property="mainPartDesc" />
</resultMap>
<resultMap id="MaterialResultMap" type="com.spring.modules.rohs.entity.RohsMaterialEntity">
@ -113,10 +115,33 @@
dbo.plm_get_project_name(a.site, a.project_id) as projectName,
dbo.get_product_group_name(a.site, a.comm_group1, '1') as commGroup1Desc,
dbo.get_product_group_name(a.site, a.comm_group2, '2') as commGroup2Desc,
dbo.get_product_group_name(a.site, a.comm_group3, '5') as commGroup3Desc
dbo.get_product_group_name(a.site, a.comm_group3, '5') as commGroup3Desc,
isnull(firstMaterial.final_part_no, isnull(a.ifs_part_no, '')) as mainIfsPartNo,
isnull(firstMaterial.part_desc, isnull(a.material_desc, '')) as mainPartDesc
from plm_rohs a
left join plm_request_header prh on a.site = prh.site and prh.menu_id = #{params.menuId} and prh.status = 'Y'
left join plm_request_node d on a.site = d.site and prh.classification_no = d.classification_no and prh.workflow_id = d.workflow_id and a.step_id = d.step_id
outer apply (
select
m.final_part_no,
m.part_desc
from plm_rohs_material m
where m.site = a.site
and m.reference_no = a.reference_no
and m.line_no = (
select min(m2.line_no)
from plm_rohs_material m2
where m2.site = a.site
and m2.reference_no = a.reference_no
)
and m.id = (
select min(m3.id)
from plm_rohs_material m3
where m3.site = a.site
and m3.reference_no = a.reference_no
and m3.line_no = m.line_no
)
) firstMaterial
where 1 = 1
<if test="params.site != null and params.site != ''">
and a.site = #{params.site}
@ -136,10 +161,147 @@
<if test="params.currentApprover != null and params.currentApprover != ''">
and dbo.get_plm_Approval_username(a.site, prh.workflow_id, d.node_id, a.reference_no) like #{params.currentApprover}
</if>
<if test="params.ifsPartNo != null and params.ifsPartNo != ''">
and isnull(firstMaterial.final_part_no, isnull(a.ifs_part_no, '')) like #{params.ifsPartNo}
</if>
<if test="params.materialDesc != null and params.materialDesc != ''">
and isnull(firstMaterial.part_desc, isnull(a.material_desc, '')) like #{params.materialDesc}
</if>
<if test="params.applicant != null and params.applicant != ''">
and a.applicant like #{params.applicant}
</if>
</select>
<select id="queryPageWithNamesCount" resultType="long">
select count(1)
from plm_rohs a
left join plm_request_header prh on a.site = prh.site and prh.menu_id = #{params.menuId} and prh.status = 'Y'
left join plm_request_node d on a.site = d.site and prh.classification_no = d.classification_no and prh.workflow_id = d.workflow_id and a.step_id = d.step_id
outer apply (
select
m.final_part_no,
m.part_desc
from plm_rohs_material m
where m.site = a.site
and m.reference_no = a.reference_no
and m.line_no = (
select min(m2.line_no)
from plm_rohs_material m2
where m2.site = a.site
and m2.reference_no = a.reference_no
)
and m.id = (
select min(m3.id)
from plm_rohs_material m3
where m3.site = a.site
and m3.reference_no = a.reference_no
and m3.line_no = m.line_no
)
) firstMaterial
where 1 = 1
<if test="params.site != null and params.site != ''">
and a.site = #{params.site}
</if>
<if test="params.referenceNo != null and params.referenceNo != ''">
and a.reference_no like #{params.referenceNo}
</if>
<if test="params.status != null and params.status != ''">
and a.status = #{params.status}
</if>
<if test="params.rohsStatus != null and params.rohsStatus != ''">
and a.rohs_status = #{params.rohsStatus}
</if>
<if test="params.nodeId != null and params.nodeId != ''">
and d.node_id = #{params.nodeId}
</if>
<if test="params.currentApprover != null and params.currentApprover != ''">
and dbo.get_plm_Approval_username(a.site, prh.workflow_id, d.node_id, a.reference_no) like #{params.currentApprover}
</if>
<if test="params.ifsPartNo != null and params.ifsPartNo != ''">
and isnull(firstMaterial.final_part_no, isnull(a.ifs_part_no, '')) like #{params.ifsPartNo}
</if>
<if test="params.materialDesc != null and params.materialDesc != ''">
and isnull(firstMaterial.part_desc, isnull(a.material_desc, '')) like #{params.materialDesc}
</if>
<if test="params.applicant != null and params.applicant != ''">
and a.applicant like #{params.applicant}
</if>
</select>
<select id="queryPageWithNamesData" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>,
d.node_id as nodeId,
d.node_name as nodeName,
dbo.get_plm_Approval_username(a.site, prh.workflow_id, d.node_id, a.reference_no) as currentApprover,
dbo.get_userDisPlay(a.applicant) as applicantName,
dbo.get_userDisPlay(a.pm) as pmName,
dbo.get_userDisPlay(a.npd_engineer) as npdEngineerName,
dbo.get_userDisPlay(a.technical_plan) as technicalPlanName,
dbo.get_userDisPlay(a.buyer) as buyerName,
dbo.plm_get_customer_desc(a.site, a.end_customer) as endCustomerName,
dbo.plm_get_project_name(a.site, a.project_id) as projectName,
dbo.get_product_group_name(a.site, a.comm_group1, '1') as commGroup1Desc,
dbo.get_product_group_name(a.site, a.comm_group2, '2') as commGroup2Desc,
dbo.get_product_group_name(a.site, a.comm_group3, '5') as commGroup3Desc,
isnull(firstMaterial.final_part_no, isnull(a.ifs_part_no, '')) as mainIfsPartNo,
isnull(firstMaterial.part_desc, isnull(a.material_desc, '')) as mainPartDesc
from plm_rohs a
left join plm_request_header prh on a.site = prh.site and prh.menu_id = #{params.menuId} and prh.status = 'Y'
left join plm_request_node d on a.site = d.site and prh.classification_no = d.classification_no and prh.workflow_id = d.workflow_id and a.step_id = d.step_id
outer apply (
select
m.final_part_no,
m.part_desc
from plm_rohs_material m
where m.site = a.site
and m.reference_no = a.reference_no
and m.line_no = (
select min(m2.line_no)
from plm_rohs_material m2
where m2.site = a.site
and m2.reference_no = a.reference_no
)
and m.id = (
select min(m3.id)
from plm_rohs_material m3
where m3.site = a.site
and m3.reference_no = a.reference_no
and m3.line_no = m.line_no
)
) firstMaterial
where 1 = 1
<if test="params.site != null and params.site != ''">
and a.site = #{params.site}
</if>
<if test="params.referenceNo != null and params.referenceNo != ''">
and a.reference_no like #{params.referenceNo}
</if>
<if test="params.status != null and params.status != ''">
and a.status = #{params.status}
</if>
<if test="params.rohsStatus != null and params.rohsStatus != ''">
and a.rohs_status = #{params.rohsStatus}
</if>
<if test="params.nodeId != null and params.nodeId != ''">
and d.node_id = #{params.nodeId}
</if>
<if test="params.currentApprover != null and params.currentApprover != ''">
and dbo.get_plm_Approval_username(a.site, prh.workflow_id, d.node_id, a.reference_no) like #{params.currentApprover}
</if>
<if test="params.ifsPartNo != null and params.ifsPartNo != ''">
and isnull(firstMaterial.final_part_no, isnull(a.ifs_part_no, '')) like #{params.ifsPartNo}
</if>
<if test="params.materialDesc != null and params.materialDesc != ''">
and isnull(firstMaterial.part_desc, isnull(a.material_desc, '')) like #{params.materialDesc}
</if>
<if test="params.applicant != null and params.applicant != ''">
and a.applicant like #{params.applicant}
</if>
order by a.reference_no desc
<if test="size != null and size &gt; 0">
offset #{offset} rows fetch next #{size} rows only
</if>
</select>
<select id="queryPageWithNamesAny" resultMap="BaseResultMap">
@ -157,19 +319,36 @@
dbo.plm_get_project_name(a.site, a.project_id) as projectName,
dbo.get_product_group_name(a.site, a.comm_group1, '1') as commGroup1Desc,
dbo.get_product_group_name(a.site, a.comm_group2, '2') as commGroup2Desc,
dbo.get_product_group_name(a.site, a.comm_group3, '5') as commGroup3Desc
dbo.get_product_group_name(a.site, a.comm_group3, '5') as commGroup3Desc,
isnull(firstMaterial.final_part_no, isnull(a.ifs_part_no, '')) as mainIfsPartNo,
isnull(firstMaterial.part_desc, isnull(a.material_desc, '')) as mainPartDesc
from plm_rohs a
left join plm_request_header prh on a.site = prh.site and prh.menu_id = #{params.menuId} and prh.status = 'Y'
left join plm_request_node d on a.site = d.site and prh.classification_no = d.classification_no and prh.workflow_id = d.workflow_id and a.step_id = d.step_id
outer apply (
select
m.final_part_no,
m.part_desc
from plm_rohs_material m
where m.site = a.site
and m.reference_no = a.reference_no
and m.line_no = (
select min(m2.line_no)
from plm_rohs_material m2
where m2.site = a.site
and m2.reference_no = a.reference_no
)
and m.id = (
select min(m3.id)
from plm_rohs_material m3
where m3.site = a.site
and m3.reference_no = a.reference_no
and m3.line_no = m.line_no
)
) firstMaterial
<if test="params.whereClause != null and params.whereClause != ''">
where ${params.whereClause}
</if>
<if test="params.orderClause != null and params.orderClause != ''">
order by ${params.orderClause}
</if>
<if test="params.orderClause == null or params.orderClause == ''">
order by a.reference_no desc
</if>
</select>
<select id="getDetailWithNames" resultMap="BaseResultMap">
@ -184,8 +363,31 @@
dbo.plm_get_project_name(a.site, a.project_id) as projectName,
dbo.get_product_group_name(a.site, a.comm_group1, '1') as commGroup1Desc,
dbo.get_product_group_name(a.site, a.comm_group2, '2') as commGroup2Desc,
dbo.get_product_group_name(a.site, a.comm_group3, '5') as commGroup3Desc
dbo.get_product_group_name(a.site, a.comm_group3, '5') as commGroup3Desc,
isnull(firstMaterial.final_part_no, isnull(a.ifs_part_no, '')) as mainIfsPartNo,
isnull(firstMaterial.part_desc, isnull(a.material_desc, '')) as mainPartDesc
from plm_rohs a
outer apply (
select
m.final_part_no,
m.part_desc
from plm_rohs_material m
where m.site = a.site
and m.reference_no = a.reference_no
and m.line_no = (
select min(m2.line_no)
from plm_rohs_material m2
where m2.site = a.site
and m2.reference_no = a.reference_no
)
and m.id = (
select min(m3.id)
from plm_rohs_material m3
where m3.site = a.site
and m3.reference_no = a.reference_no
and m3.line_no = m.line_no
)
) firstMaterial
where a.site = #{site}
and a.reference_no = #{referenceNo}
</select>

Loading…
Cancel
Save