Browse Source

2026-04-23

1、提交时技术参数卡升版优化
2、物料删除操作调整,可删除正式物料
master
fengyuan_yang 2 months ago
parent
commit
b256455867
  1. 63
      src/main/java/com/spring/modules/change/service/impl/ChangeManagementServiceImpl.java
  2. 26
      src/main/java/com/spring/modules/part/mapper/PartInformationMapper.java
  3. 116
      src/main/java/com/spring/modules/part/service/impl/PartInformationServiceImpl.java
  4. 8
      src/main/resources/mapper/part/PartInformationMapper.xml
  5. 25
      src/main/resources/mapper/quote/QuoteMapper.xml

63
src/main/java/com/spring/modules/change/service/impl/ChangeManagementServiceImpl.java

@ -1503,6 +1503,8 @@ public class ChangeManagementServiceImpl extends ServiceImpl<ChangeManagementMap
*/
@Transactional
public void agreeFunction (ParamData paramData, String type) {
String deleteUserRequestInfoURL = apiUrlOa + "/oa/interface/deleteUserRequestInfo";
// 获取流程流转信息
RequestOperatorInfoParam requestOperatorInfoParam = new RequestOperatorInfoParam();
requestOperatorInfoParam.setUserId(paramData.getUserId());
@ -1612,11 +1614,7 @@ public class ChangeManagementServiceImpl extends ServiceImpl<ChangeManagementMap
// 2025-05-13 删除异构系统指定人员待办流程异常信息
for (OaUserData oaUser : oaUserList) {
deleteUserRequestInfoParam.setUserId(oaUser.getId());
String deleteUserRequestInfoURL = apiUrlOa + "/oa/interface/deleteUserRequestInfo";
ResponseData deleteUserRequestInfoResponses = HttpClientUtil.doPostByRawWithOA(deleteUserRequestInfoURL, deleteUserRequestInfoParam);
// if (!"0".equals(deleteUserRequestInfoResponses.getCode())) {
// throw new RuntimeException("删除异构系统指定人员待办流程异常信息:" + deleteUserRequestInfoResponses.getMsg());
// }
HttpClientUtil.doPostByRawWithOA(deleteUserRequestInfoURL, deleteUserRequestInfoParam);
}
// 如果是ECN则执行升版操作且节点勾选了特殊管控 -- 2025-10-28 特殊权限改到存储过程判断 -- 2025-12-05 存储过程改为修改stepId以后再升版 -- 2026-02-26 最后一个节点删除代办后判断执行
@ -1625,6 +1623,8 @@ public class ChangeManagementServiceImpl extends ServiceImpl<ChangeManagementMap
changeRequestEntity.setSite(paramData.getSite());
changeRequestEntity.setChangeNo(paramData.getDocNo());
List<ChangeRequestDetailEntity> codelist = changeManagementMapper.requestDetailSearch(changeRequestEntity);
DeleteUserRequestInfoParam deleteUserRequestInfoParam2 = new DeleteUserRequestInfoParam();
deleteUserRequestInfoParam2.setSyscode("PLM");
for (ChangeRequestDetailEntity detail : codelist) {
List<Object> params = new ArrayList<>();
List<Map<String, Object>> resultList;
@ -1635,7 +1635,7 @@ public class ChangeManagementServiceImpl extends ServiceImpl<ChangeManagementMap
params.add(detail.getNewPartNo());
params.add(paramData.getUserName());
params.add(paramData.getDocNo());
params.add(paramData.getNodeId());
params.add(paramData.getReviewNodeId());
// 执行复制方法
resultList = procedureDao.getProcedureData("plm_copy_bm", params);
// 如果有新物料编码则停用之前的物料
@ -1656,16 +1656,32 @@ public class ChangeManagementServiceImpl extends ServiceImpl<ChangeManagementMap
params.add(revNo);
params.add(paramData.getUserName());
params.add(paramData.getDocNo());
params.add(paramData.getNodeId());
params.add(paramData.getReviewNodeId());
// 执行升版方法
log.info("Executing stored procedure plm_bm_upRevNo with params: {}", params);
resultList = procedureDao.getProcedureData("plm_bm_upRevNo", params);
log.info("Stored procedure plm_bm_upRevNo returned resultList: {}", resultList);
}
//判断是否成功
String code = String.valueOf(resultList.get(0).get("resultCode"));
if ("400".equalsIgnoreCase(code)) {
String msg = String.valueOf(resultList.get(0).get("resultMsg"));
throw new RuntimeException(msg);
}
// 2026-04-22 在调用完存储过程后调用删除待办接口
String workflowId = String.valueOf(resultList.get(0).get("WorkflowId"));
String oaUserStr = String.valueOf(resultList.get(0).get("oaUser"));
if (oaUserStr != null && !"null".equals(oaUserStr) && !oaUserStr.trim().isEmpty()) {
String[] oaUsers = oaUserStr.split(";");
for (String oaUser : oaUsers) {
if (oaUser != null && !oaUser.trim().isEmpty()) {
deleteUserRequestInfoParam2.setRequestId(workflowId);
deleteUserRequestInfoParam2.setUserId(oaUser);
HttpClientUtil.doPostByRawWithOA(deleteUserRequestInfoURL, deleteUserRequestInfoParam2);
}
}
}
}
}
} else { // 未结束
@ -1686,11 +1702,7 @@ public class ChangeManagementServiceImpl extends ServiceImpl<ChangeManagementMap
// 2025-05-09 发送统一待办前先调用[删除异构系统指定人员待办流程]接口
for (OaUserData oaUser : oaUserList) {
deleteUserRequestInfoParam.setUserId(oaUser.getId());
String deleteUserRequestInfoURL = apiUrlOa + "/oa/interface/deleteUserRequestInfo";
ResponseData deleteUserRequestInfoResponses = HttpClientUtil.doPostByRawWithOA(deleteUserRequestInfoURL, deleteUserRequestInfoParam);
// if (!"0".equals(deleteUserRequestInfoResponses.getCode())) {
// throw new RuntimeException("删除异构系统指定人员待办流程异常信息:" + deleteUserRequestInfoResponses.getMsg());
// }
HttpClientUtil.doPostByRawWithOA(deleteUserRequestInfoURL, deleteUserRequestInfoParam);
}
// 发送代办
@ -1796,11 +1808,7 @@ public class ChangeManagementServiceImpl extends ServiceImpl<ChangeManagementMap
// 2025-05-09 发送统一待办前先调用[删除异构系统指定人员待办流程]接口
for (OaUserData oaUser : oaUserList) {
deleteUserRequestInfoParam.setUserId(oaUser.getId());
String deleteUserRequestInfoURL = apiUrlOa + "/oa/interface/deleteUserRequestInfo";
ResponseData deleteUserRequestInfoResponses = HttpClientUtil.doPostByRawWithOA(deleteUserRequestInfoURL, deleteUserRequestInfoParam);
// if (!"0".equals(deleteUserRequestInfoResponses.getCode())) {
// throw new RuntimeException("删除异构系统指定人员待办流程异常信息:" + deleteUserRequestInfoResponses.getMsg());
// }
HttpClientUtil.doPostByRawWithOA(deleteUserRequestInfoURL, deleteUserRequestInfoParam);
}
// 如果是ECN则执行升版操作且节点勾选了特殊管控 -- 2025-10-28 特殊权限改到存储过程判断 -- 2025-12-05 存储过程改为修改stepId以后再升版 -- 2026-02-26 存储过程改为升版操作放到统一代办接口前执行
@ -1809,6 +1817,8 @@ public class ChangeManagementServiceImpl extends ServiceImpl<ChangeManagementMap
changeRequestEntity.setSite(paramData.getSite());
changeRequestEntity.setChangeNo(paramData.getDocNo());
List<ChangeRequestDetailEntity> codelist = changeManagementMapper.requestDetailSearch(changeRequestEntity);
DeleteUserRequestInfoParam deleteUserRequestInfoParam2 = new DeleteUserRequestInfoParam();
deleteUserRequestInfoParam2.setSyscode("PLM");
for (ChangeRequestDetailEntity detail : codelist) {
List<Object> params = new ArrayList<>();
List<Map<String, Object>> resultList;
@ -1819,7 +1829,7 @@ public class ChangeManagementServiceImpl extends ServiceImpl<ChangeManagementMap
params.add(detail.getNewPartNo());
params.add(paramData.getUserName());
params.add(paramData.getDocNo());
params.add(paramData.getNodeId());
params.add(paramData.getReviewNodeId());
// 执行复制方法
resultList = procedureDao.getProcedureData("plm_copy_bm", params);
// 如果有新物料编码则停用之前的物料
@ -1840,9 +1850,11 @@ public class ChangeManagementServiceImpl extends ServiceImpl<ChangeManagementMap
params.add(revNo);
params.add(paramData.getUserName());
params.add(paramData.getDocNo());
params.add(paramData.getNodeId());
params.add(paramData.getReviewNodeId());
// 执行升版方法
log.info("Executing stored procedure plm_bm_upRevNo with params: {}", params);
resultList = procedureDao.getProcedureData("plm_bm_upRevNo", params);
log.info("Stored procedure plm_bm_upRevNo returned resultList: {}", resultList);
}
//判断是否成功
String code = String.valueOf(resultList.get(0).get("resultCode"));
@ -1850,6 +1862,19 @@ public class ChangeManagementServiceImpl extends ServiceImpl<ChangeManagementMap
String msg = String.valueOf(resultList.get(0).get("resultMsg"));
throw new RuntimeException(msg);
}
// 2026-04-22 在调用完存储过程后调用删除待办接口
String workflowId = String.valueOf(resultList.get(0).get("WorkflowId"));
String oaUserStr = String.valueOf(resultList.get(0).get("oaUser"));
if (oaUserStr != null && !"null".equals(oaUserStr) && !oaUserStr.trim().isEmpty()) {
String[] oaUsers = oaUserStr.split(";");
for (String oaUser : oaUsers) {
if (oaUser != null && !oaUser.trim().isEmpty()) {
deleteUserRequestInfoParam2.setRequestId(workflowId);
deleteUserRequestInfoParam2.setUserId(oaUser);
HttpClientUtil.doPostByRawWithOA(deleteUserRequestInfoURL, deleteUserRequestInfoParam2);
}
}
}
}
}

26
src/main/java/com/spring/modules/part/mapper/PartInformationMapper.java

@ -14,6 +14,7 @@ import com.spring.modules.part.vo.*;
import com.spring.modules.project.data.PlmProjectPartData;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.ArrayList;
import java.util.Date;
@ -22,6 +23,31 @@ import java.util.Map;
@Mapper
public interface PartInformationMapper extends BaseMapper<PartInformationEntity> {
@Select("SELECT COUNT(*) FROM plm_quotation_information WHERE site = #{site} AND test_part_no = #{partNo}")
int checkQuotationInformation(@Param("site") String site, @Param("partNo") String partNo);
@Select("SELECT COUNT(*) FROM plm_quote_group_detail WHERE site = #{site} AND part_no = #{partNo}")
int checkQuoteGroupDetail(@Param("site") String site, @Param("partNo") String partNo);
@Select("SELECT COUNT(*) FROM plm_test_information WHERE site = #{site} AND test_part_no = #{partNo}")
int checkTestInformation(@Param("site") String site, @Param("partNo") String partNo);
@Select("SELECT COUNT(*) FROM plm_proofing_information WHERE site = #{site} AND test_part_no = #{partNo}")
int checkProofingInformation(@Param("site") String site, @Param("partNo") String partNo);
@Select("SELECT COUNT(*) FROM plm_project_tool_applyDetail WHERE site = #{site} AND orderRef2 = #{partNo}")
int checkProjectToolApplyDetail(@Param("site") String site, @Param("partNo") String partNo);
@Select("SELECT COUNT(*) FROM plm_technical_specification_sheet WHERE site = #{site} AND test_part_no = #{partNo}")
int checkTechnicalSpecificationSheet(@Param("site") String site, @Param("partNo") String partNo);
@Select("SELECT COUNT(*) FROM plm_change_request_detail WHERE site = #{site} AND part_no = #{partNo}")
int checkChangeRequestDetail(@Param("site") String site, @Param("partNo") String partNo);
@Select("SELECT COUNT(*) FROM plm_bom_component WHERE site = #{site} AND component_part = #{componentPart}")
int checkBomComponent(@Param("site") String site, @Param("componentPart") String componentPart);
IPage<PartInformationVo> partInformationSearch(Page<PartInformationVo> partInformationVoPage, @Param("query") PartInformationVo data);
List<PartSubPropertiesValueHeaderData> checkValueHeaderData(PartSubPropertiesValueData data);

116
src/main/java/com/spring/modules/part/service/impl/PartInformationServiceImpl.java

@ -1318,49 +1318,83 @@ public class PartInformationServiceImpl extends ServiceImpl<PartInformationMappe
public void partInformationDelete(PartInformationEntity data) {
HashMap<String, Object> map1 = new HashMap<>();
HashMap<String, Object> map2 = new HashMap<>();
for (PartInformationEntity entity : data.getInformationList()) {
// 校验是否为正式物料
PartInformationEntity partEntity = partInformationMapper.selectOne(new QueryWrapper<PartInformationEntity>().eq("site", entity.getSite()).eq("part_no", entity.getPartNo()));
if ("Y".equals(partEntity.getStatus())) {
throw new RuntimeException("物料为正式物料,不允许删除!");
}
// 校验BOM Routing是否存在
List<BomHeaderEntity> bomList = bomManagementMapper.selectList(new QueryWrapper<BomHeaderEntity>().eq("site", entity.getSite()).eq("part_no", entity.getPartNo()));
if (!bomList.isEmpty()) {
throw new RuntimeException("存在物料的BOM信息,不允许删除!");
}
List<RoutingHeaderEntity> routingList = routingManagementMapper.selectList(new QueryWrapper<RoutingHeaderEntity>().eq("site", entity.getSite()).eq("part_no", entity.getPartNo()));
if (!routingList.isEmpty()) {
throw new RuntimeException("存在物料的Routing信息,不允许删除!");
}
// 校验BOM Routing是否存在
List<BomHeaderEntity> bomList = bomManagementMapper.selectList(new QueryWrapper<BomHeaderEntity>().eq("site", data.getSite()).eq("part_no", data.getPartNo()));
if (!bomList.isEmpty()) {
throw new RuntimeException("存在物料的BOM信息,不允许删除!");
}
if (partInformationMapper.checkBomComponent(data.getSite(), data.getPartNo()) > 0) {
throw new RuntimeException("物料作为子件被别的BOM引用,不允许删除!");
}
List<RoutingHeaderEntity> routingList = routingManagementMapper.selectList(new QueryWrapper<RoutingHeaderEntity>().eq("site", data.getSite()).eq("part_no", data.getPartNo()));
if (!routingList.isEmpty()) {
throw new RuntimeException("存在物料的Routing信息,不允许删除!");
}
// 条件
map1.put("site", entity.getSite());
map1.put("part_no", entity.getPartNo());
map2.put("order_ref1", entity.getSite());
map2.put("order_ref2", entity.getPartNo());
// 删除材料信息数据
partInformationMapper.deleteByMap(map1);
// 删除材料相关文件
sysOssDao.deleteByMap(map2);
// 删除代理商
partInformationMapper.deleteAgentByPartNo(data);
// 删除制造商
partInformationMapper.deleteManufacturerByPartNo(data);
// 删除库位
partInformationMapper.deleteLocationByPartNo(data);
// 删除物料版本
partInformationMapper.deletePartRevisionByPartNo(data);
// 删除物料的属性和属性值
PartSubPropertiesValueData partData = new PartSubPropertiesValueData();
partData.setSite(entity.getSite());
partData.setPartNo(entity.getPartNo());
partData.setRecordType("IP");
partInformationMapper.deletePartSubPropertiesValueHeader(partData);
partInformationMapper.deletePartSubPropertiesValue(partData);
// 判断有无项目物料有则删除
partInformationMapper.delProjectPartByPartNo(entity.getSite(), entity.getPartNo());
// 校验其他单据是否引用
if (partInformationMapper.checkQuotationInformation(data.getSite(), data.getPlmPartNo()) > 0) {
throw new RuntimeException("物料被询价单引用,不允许删除!");
}
if (partInformationMapper.checkQuoteGroupDetail(data.getSite(), data.getPartNo()) > 0) {
throw new RuntimeException("物料被报价单引用,不允许删除!");
}
if (partInformationMapper.checkTestInformation(data.getSite(), data.getPlmPartNo()) > 0) {
throw new RuntimeException("物料被测试单引用,不允许删除!");
}
if (partInformationMapper.checkProofingInformation(data.getSite(), data.getPlmPartNo()) > 0) {
throw new RuntimeException("物料被打样单引用,不允许删除!");
}
if (partInformationMapper.checkProjectToolApplyDetail(data.getSite(), data.getPartNo()) > 0) {
throw new RuntimeException("物料被刀具申请单引用,不允许删除!");
}
if (partInformationMapper.checkTechnicalSpecificationSheet(data.getSite(), data.getPlmPartNo()) > 0) {
throw new RuntimeException("物料被技术参数卡引用,不允许删除!");
}
if (partInformationMapper.checkChangeRequestDetail(data.getSite(), data.getPartNo()) > 0) {
throw new RuntimeException("物料被工程变更单引用,不允许删除!");
}
PartInformationEntity partEntity = partInformationMapper.selectOne(new QueryWrapper<PartInformationEntity>().eq("site", data.getSite()).eq("part_no", data.getPartNo()));
// 如果是正式物料调用IFS系统的物料删除接口
if ("Y".equals(partEntity.getStatus())) {
String username = com.spring.common.utils.ShiroUtils.getUserEntity().getUsername();
Server srv = getIfsServer(username);
PartIfsInventory partIfsInventory = new PartIfsInventory();
partIfsInventory.setContract(data.getSite());
partIfsInventory.setPartNo(data.getPartNo());
Map<String, String> deleteInventoryPartResponse = inventoryServiceBean.removeInventoryPart(srv, partIfsInventory);
if (!"200".equals(deleteInventoryPartResponse.get("resultCode"))) {
throw new RuntimeException("IFS物料删除异常:" + deleteInventoryPartResponse.get("resultMsg"));
}
}
// 条件
map1.put("site", data.getSite());
map1.put("part_no", data.getPartNo());
map2.put("order_ref1", data.getSite());
map2.put("order_ref2", data.getPartNo());
// 删除材料信息数据
partInformationMapper.deleteByMap(map1);
// 删除材料相关文件
sysOssDao.deleteByMap(map2);
// 删除代理商
partInformationMapper.deleteAgentByPartNo(data);
// 删除制造商
partInformationMapper.deleteManufacturerByPartNo(data);
// 删除库位
partInformationMapper.deleteLocationByPartNo(data);
// 删除物料版本
partInformationMapper.deletePartRevisionByPartNo(data);
// 删除物料的属性和属性值
PartSubPropertiesValueData partData = new PartSubPropertiesValueData();
partData.setSite(data.getSite());
partData.setPartNo(data.getPartNo());
partData.setRecordType("IP");
partInformationMapper.deletePartSubPropertiesValueHeader(partData);
partInformationMapper.deletePartSubPropertiesValue(partData);
// 判断有无项目物料有则删除
partInformationMapper.delProjectPartByPartNo(data.getSite(), data.getPartNo());
}
/**

8
src/main/resources/mapper/part/PartInformationMapper.xml

@ -261,7 +261,7 @@
</update>
<!-- 查询代理商列表 -->
<select id="getAgentList" resultType="AgentInformationEntity" parameterType="AgentInformationEntity">
<select id="getAgentList" resultType="com.spring.modules.part.entity.AgentInformationEntity" parameterType="com.spring.modules.part.entity.AgentInformationEntity">
SELECT
site,
agent_id,
@ -297,7 +297,7 @@
</select>
<!-- 获取当前物料不包含的代理商 -->
<select id="getAgentList1" resultType="AgentInformationEntity" parameterType="PartInformationEntity">
<select id="getAgentList1" resultType="com.spring.modules.part.entity.AgentInformationEntity" parameterType="com.spring.modules.part.entity.PartInformationEntity">
SELECT
a.site,
a.agent_id,
@ -313,7 +313,7 @@
</select>
<!-- 获取当前物料所包含的代理商 -->
<select id="getAgentList2" resultType="AgentInformationEntity" parameterType="PartInformationEntity">
<select id="getAgentList2" resultType="com.spring.modules.part.entity.AgentInformationEntity" parameterType="com.spring.modules.part.entity.PartInformationEntity">
SELECT
a.site,
a.agent_id,
@ -350,7 +350,7 @@
</delete>
<!-- 获取当前物料不包含的代理商 -->
<select id="getAgentListBy" resultType="AgentInformationEntity" parameterType="com.spring.modules.part.vo.AgentInformationVo">
<select id="getAgentListBy" resultType="com.spring.modules.part.entity.AgentInformationEntity" parameterType="com.spring.modules.part.vo.AgentInformationVo">
SELECT
a.site,
a.agent_id,

25
src/main/resources/mapper/quote/QuoteMapper.xml

@ -288,26 +288,25 @@
gd.part_desc as partDesc,
qq.create_by as inquiryCreateBy
from plm_quote q
left join plm_customer_information c on q.customer_no = c.customer_no
left join plm_project_info p on q.project_no = p.project_id and q.site = p.site
left join sys_user su_purchase on q.purchase = su_purchase.username
left join sys_user su_quoter on q.quoter = su_quoter.username
left join sys_dict_data sdd_currency on sdd_currency.dict_type = 'plm_customer_information_customer_customer_currency'
left join plm_customer_information c on q.customer_no = c.customer_no
left join plm_project_info p on q.project_no = p.project_id and q.site = p.site
left join sys_user su_purchase on q.purchase = su_purchase.username
left join sys_user su_quoter on q.quoter = su_quoter.username
left join sys_dict_data sdd_currency on sdd_currency.dict_type = 'plm_customer_information_customer_customer_currency'
and sdd_currency.dict_value = q.currency and sdd_currency.site = q.site
left join sys_dict_data sdd_final on sdd_final.dict_type = 'finalCustomer'
left join sys_dict_data sdd_final on sdd_final.dict_type = 'finalCustomer'
and sdd_final.dict_value = p.final_customer_id and sdd_final.site = q.site
left join plm_request_header prh on q.site = prh.site and prh.menu_id = '5011'
left join plm_quotation_information qq on q.site = qq.site and q.inside_inquiry_no = qq.quotation_no
left join plm_request_node prn on q.site = prn.site and prh.classification_no = prn.classification_no
left join plm_request_header prh on q.site = prh.site and prh.menu_id = '5011'
left join plm_quotation_information qq on q.site = qq.site and q.inside_inquiry_no = qq.quotation_no
left join plm_request_node prn on q.site = prn.site and prh.classification_no = prn.classification_no
and prh.workflow_id = prn.workflow_id and q.step_id = prn.step_id
outer apply (
outer apply (
select top 1 pp.plm_part_no, pp.ifs_part_no, pp.part_desc,qd.part_no
from plm_quote_group_detail qd
left join part pp on qd.part_no = pp.part_no and qd.site = pp.site
left join part pp on qd.part_no = pp.part_no and qd.site = pp.site
where qd.quote_id = q.id
) gd
left join plm_project_part ppp on ppp.site = q.site and ppp.project_id = p.project_id
and ppp.test_part_no = gd.part_no
left join plm_project_part ppp on ppp.site = q.site and ppp.project_id = p.project_id and ppp.test_part_no = gd.part_no
<where>
<include refid="quotePageWhereConditions"/>
</where>

Loading…
Cancel
Save