From 3e2e036431197ead40fa1f4e36f8a81fbab85b20 Mon Sep 17 00:00:00 2001 From: rui_li <877258667@qq.com> Date: Tue, 25 Nov 2025 14:41:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0IFS=20=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=E5=90=8C=E6=AD=A5=E7=9A=84=E6=96=B9=E6=B3=95?= =?UTF-8?q?=20=20=E6=8A=8AIFS=E7=9A=84=E6=95=B0=E6=8D=AE=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E5=88=B0PLM=E5=BA=93=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tooling/controller/ToolController.java | 22 ++++- .../modules/Tooling/service/ToolService.java | 9 ++ .../Tooling/service/impl/ToolServiceImpl.java | 94 +++++++++++++++++++ 3 files changed, 122 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/spring/modules/Tooling/controller/ToolController.java b/src/main/java/com/spring/modules/Tooling/controller/ToolController.java index 1f9ae037..1628c001 100644 --- a/src/main/java/com/spring/modules/Tooling/controller/ToolController.java +++ b/src/main/java/com/spring/modules/Tooling/controller/ToolController.java @@ -6,6 +6,7 @@ import com.spring.modules.Tooling.entity.IfsTool; import com.spring.modules.Tooling.entity.IfsToolInstance; import com.spring.modules.Tooling.entity.IfsToolInstanceDate; import com.spring.modules.Tooling.service.ToolService; +import com.spring.modules.base.data.PlmPropertiesItemData; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -122,7 +123,7 @@ public class ToolController { * @version 1.0 */ @RequestMapping(value = "insertToolInstance") - public R insertToolInstance(@RequestBody com.spring.modules.Tooling.entity.IfsToolInstance inData){ + public R insertToolInstance(@RequestBody IfsToolInstance inData){ toolService.insertToolInstance(inData); return R.ok() .put("code", 200) @@ -136,7 +137,7 @@ public class ToolController { * @version 1.0 */ @RequestMapping(value = "modifyToolInstance") - public R modifyToolInstance(@RequestBody com.spring.modules.Tooling.entity.IfsToolInstance inData){ + public R modifyToolInstance(@RequestBody IfsToolInstance inData){ toolService.modifyToolInstance(inData); return R.ok() .put("code", 200) @@ -150,7 +151,7 @@ public class ToolController { * @version 1.0 */ @RequestMapping(value = "removeToolInstance") - public R removeToolInstance(@RequestBody com.spring.modules.Tooling.entity.IfsToolInstance inData){ + public R removeToolInstance(@RequestBody IfsToolInstance inData){ toolService.removeToolInstance(inData); return R.ok() .put("code", 200) @@ -214,4 +215,19 @@ public class ToolController { .put("msg", ""); } + /** + * @description: 同步IFS属性项数据 + * @author HP + * @date 2025/11/25 10:36 + * @version 1.0 + */ + @RequestMapping(value = "syncIfsProperties") + public R syncIfsProperties(@RequestBody PlmPropertiesItemData inData){ + toolService.syncIfsProperties(inData); + return R.ok() + .put("code", 200) + .put("resultMsg", "操作成功!") + .put("msg", ""); + } + } diff --git a/src/main/java/com/spring/modules/Tooling/service/ToolService.java b/src/main/java/com/spring/modules/Tooling/service/ToolService.java index b66170f8..1aad68b3 100644 --- a/src/main/java/com/spring/modules/Tooling/service/ToolService.java +++ b/src/main/java/com/spring/modules/Tooling/service/ToolService.java @@ -6,6 +6,7 @@ import com.spring.modules.Tooling.data.ToolInstanceDate; import com.spring.modules.Tooling.entity.IfsTool; import com.spring.modules.Tooling.entity.IfsToolInstance; import com.spring.modules.Tooling.entity.IfsToolInstanceDate; +import com.spring.modules.base.data.PlmPropertiesItemData; import java.util.List; @@ -127,4 +128,12 @@ public interface ToolService { * @version 1.0 */ IfsTool getNextToolId(IfsTool inData); + + /** + * @description: 同步IFS属性 + * @author LR + * @date 2024/9/24 18:11 + * @version 1.0 + */ + void syncIfsProperties(PlmPropertiesItemData inData); } diff --git a/src/main/java/com/spring/modules/Tooling/service/impl/ToolServiceImpl.java b/src/main/java/com/spring/modules/Tooling/service/impl/ToolServiceImpl.java index 0e6892da..d303e87f 100644 --- a/src/main/java/com/spring/modules/Tooling/service/impl/ToolServiceImpl.java +++ b/src/main/java/com/spring/modules/Tooling/service/impl/ToolServiceImpl.java @@ -3,8 +3,11 @@ package com.spring.modules.Tooling.service.impl; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.spring.ifs.api.IfsServer; +import com.spring.ifs.bean.BaseSearchBean; import com.spring.ifs.bean.TechnicalClassBean; import com.spring.ifs.bean.ToolServiceBean; +import com.spring.ifs.data.BaseSearchData; +import com.spring.ifs.data.TechnicalAttribute; import com.spring.modules.Tooling.dao.BaseConfigDao; import com.spring.modules.Tooling.data.*; import com.spring.modules.Tooling.dao.ToolDao; @@ -12,12 +15,16 @@ import com.spring.modules.Tooling.entity.IfsTool; import com.spring.modules.Tooling.entity.IfsToolInstance; import com.spring.modules.Tooling.entity.IfsToolInstanceDate; import com.spring.modules.Tooling.service.ToolService; +import com.spring.modules.base.data.PartSubPropertiesValueData; +import com.spring.modules.base.data.PlmPropertiesItemData; import com.spring.modules.base.utils.DateUtils; import com.spring.modules.part.entity.APIEntity.PartIfsCatalogModel; +import com.spring.modules.part.mapper.PartInformationMapper; import com.spring.modules.report.dao.ProcedureDao; import com.spring.modules.sys.dao.SysUserDao; import com.spring.modules.sys.entity.SysUserEntity; import ifs.fnd.ap.Server; +import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.slf4j.Logger; import org.springframework.beans.BeanUtils; @@ -52,6 +59,10 @@ public class ToolServiceImpl implements ToolService { private TechnicalClassBean technicalClassBean; @Autowired private SysUserDao sysUserDao; + @Autowired + private BaseSearchBean baseSearchBean; + @Autowired + private PartInformationMapper partInformationMapper; private static final Logger logger = org.slf4j.LoggerFactory.getLogger(ToolServiceImpl.class); @@ -938,6 +949,89 @@ public class ToolServiceImpl implements ToolService { return inData; } + @Override + @Transactional + public void syncIfsProperties(PlmPropertiesItemData inData) { + //公共参数 + String site = inData.getSite(); + String partNo = inData.getPartNo(); + String codeNo = inData.getCodeNo(); + String recordType = inData.getRecordType(); + //1.获取IFS属性 + //获取当前操作的账号 + String username = ((SysUserEntity) SecurityUtils.getSubject().getPrincipal()).getUsername(); + SysUserEntity ifsUser = sysUserDao.selectOne(new QueryWrapper().eq("username", username)); + if (ifsUser == null || !org.apache.commons.lang3.StringUtils.isNotBlank(ifsUser.getIfsUsername()) || !org.apache.commons.lang3.StringUtils.isNotBlank(ifsUser.getIfsPassword())) { + throw new RuntimeException("请维护IFS账号和密码!"); + } + String ifsUsername = ifsUser.getIfsUsername(); + String ifsPassword = ifsUser.getIfsPassword(); + //获取链接 + Server srv = srv = ifsServer.getIfsServer(ifsUsername, ifsPassword); + //区分不同类型 设置不同的参数 + BaseSearchData baseSearchData = new BaseSearchData(); + if("TL".equalsIgnoreCase(recordType)){ + baseSearchData.setLuName("ManufTool"); + baseSearchData.setKeyRef("CONTRACT="+site+"^TOOL_ID="+partNo+"^"); + }else if("TLI".equalsIgnoreCase(recordType)){ + baseSearchData.setLuName("ManufToolDetail"); + String[] toolArr = partNo.split("#"); + String keyRef = "CONTRACT="+site+"^TOOL_ID="+toolArr[0]+"^TOOL_INSTANCE="+toolArr[1]+"^"; + baseSearchData.setKeyRef(keyRef); + } + + Map getInfoResponse = baseSearchBean.getTechnicalAttributesByCon(srv, baseSearchData); + if (!"200".equals(getInfoResponse.get("resultCode"))) { + throw new RuntimeException("IFS 获取物料件属性异常信息:" + getInfoResponse.get("resultMsg")); + } + String s = String.valueOf(getInfoResponse.get("obj")); + List ifsItems = JSON.parseArray(s, TechnicalAttribute.class); + if (ifsItems.isEmpty()) { + throw new RuntimeException("IFS 获取物料件属性为空值!"); + } + // 转成PLM对象 + List arrayList = new ArrayList<>(); + int itemNo = 1; + for (TechnicalAttribute item : ifsItems) { + PartSubPropertiesValueData valueData = new PartSubPropertiesValueData(); + valueData.setSite(site); + valueData.setPartNo(partNo); + valueData.setCodeNo(codeNo); + valueData.setSubCodeSeqNo(Double.valueOf("1")); + valueData.setItemNo((double) itemNo++); + valueData.setPropertiesItemNo(item.getAttribute()); + if ("Numeric".equals(item.getAttributeType())) { + valueData.setNumValue(StringUtils.isNotBlank(item.getValueNo()) ? Double.valueOf(item.getValueNo()) : null); + } else { + valueData.setTextValue(item.getValueText() == null ? "" : item.getValueText()); + } + valueData.setRecordType(recordType); + arrayList.add(valueData); + } + //调用存储过程 删除数据 + this.deletePartSubPropertiesForSyncIfs(site, partNo, codeNo, recordType); + //批量新增属性 + partInformationMapper.savePartSubPropertiesValues(arrayList); + } + + /** + * @description: 调用存储过程 删除属性数据 为同步IFS数据 + * @author HP + * @date 2025/11/25 11:39 + * @version 1.0 + */ + public Map deletePartSubPropertiesForSyncIfs(String site, String partNo, String codeNo, String recordType) { + List params = new ArrayList<>(); + params.add(site); + params.add(partNo); + params.add(codeNo); + params.add(recordType); + //调用存储过程 + List> resultList = procedureDao.getProcedureData("deletePartSubPropertiesForSyncIfs", params); + //处理返回的结果 + return resultList.get(0); + } + /** * @description: 获取工具的下一个编码 * @author LR