diff --git a/modules/i3plus-ext-mes-apiservice/pom.xml b/modules/i3plus-ext-mes-apiservice/pom.xml index 0efae82..bb24de0 100644 --- a/modules/i3plus-ext-mes-apiservice/pom.xml +++ b/modules/i3plus-ext-mes-apiservice/pom.xml @@ -14,7 +14,11 @@ jar - + + + org.apache.cxf + cxf-spring-boot-starter-jaxws + com.huaweicloud esdk-obs-java-bundle diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/ScanExtPackageConfiguration.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/ScanExtPackageConfiguration.java index bbbf5fc..09a69fb 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/ScanExtPackageConfiguration.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/ScanExtPackageConfiguration.java @@ -33,7 +33,8 @@ import org.springframework.data.jpa.repository.config.EnableJpaRepositories; @ComponentScan(basePackages = { // 扩展包 - "${impp.app.ext.base-packages:}.**" + "${impp.app.ext.base-packages:}.**", + "cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.webservice.*" }) //cn.estsh.i3plus.app.ext public class ScanExtPackageConfiguration { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/WebServiceConfig.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/WebServiceConfig.java new file mode 100644 index 0000000..66cc6e6 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/WebServiceConfig.java @@ -0,0 +1,61 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache ImppLicense, Version 2.0 (the + * "ImppLicense"); you may not use this file except in compliance + * with the ImppLicense. You may obtain a copy of the ImppLicense at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the ImppLicense is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the ImppLicense for the + * specific language governing permissions and limitations + * under the ImppLicense. + */ +package cn.estsh.i3plus.ext.mes.apiservice.config; + + +import cn.estsh.i3plus.ext.mes.apiservice.interceptor.CxfInInterceptor; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.webservice.WebServiceServer; +import org.apache.cxf.Bus; +import org.apache.cxf.jaxws.EndpointImpl; +import org.apache.cxf.phase.Phase; +import org.apache.cxf.transport.servlet.CXFServlet; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.web.servlet.ServletRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.xml.ws.Endpoint; + +/** + * @Description : WebService Server 服务配置 + * WSDL URL: /block/softswitch/server/web-service?wsdl + * @Reference : + * @Author : wei.peng + * @CreateDate : 2019/9/10 下午3:13 + * @Modify: + **/ +@Configuration +public class WebServiceConfig { + + @Autowired + private Bus bus; + + @Bean("cxfServletRegistration") + public ServletRegistrationBean dispatcherServlet() { + return new ServletRegistrationBean(new CXFServlet(), "/i3plus/*"); + } + + @Bean + public Endpoint endpoint() { + EndpointImpl endpoint = new EndpointImpl(bus, new WebServiceServer()); + endpoint.publish("/mes-service"); + endpoint.getInInterceptors().add(new CxfInInterceptor(Phase.RECEIVE)); + return endpoint; + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/interceptor/CxfInInterceptor.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/interceptor/CxfInInterceptor.java new file mode 100644 index 0000000..ea22f39 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/interceptor/CxfInInterceptor.java @@ -0,0 +1,51 @@ +package cn.estsh.i3plus.ext.mes.apiservice.interceptor; + +import org.apache.cxf.binding.soap.SoapMessage; +import org.apache.cxf.helpers.IOUtils; +import org.apache.cxf.interceptor.Fault; +import org.apache.cxf.io.CachedOutputStream; +import org.apache.cxf.phase.AbstractPhaseInterceptor; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; + +import static java.nio.charset.StandardCharsets.UTF_8; + +/** + * @Description : + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/12 16:20 + * @Modify: + **/ +public class CxfInInterceptor extends AbstractPhaseInterceptor { + + public CxfInInterceptor(String phase) { + super(phase); + } + + @Override + public void handleMessage(SoapMessage message) throws Fault { + // 获取消息内容 + InputStream is = message.getContent(InputStream.class); + try { + if (is != null) { + CachedOutputStream bos = new CachedOutputStream(); + IOUtils.copy(is, bos); + String startXmlMessage = new String(bos.getBytes(), UTF_8); + String afterMessage = ""; + if (startXmlMessage.contains("SyncMaximoEquip")) { + afterMessage = startXmlMessage.replaceAll("ws:", "").replaceAll("tem:info", "ws:assetInfo"); + } else if (startXmlMessage.contains("SyncMaximoInstrumen")) { + afterMessage = startXmlMessage.replaceAll("ws:", "").replaceAll("tem:info", "ws:meterInfo"); + } + // 重新设置输入流,因为它已经被读取 + message.setContent(InputStream.class, new ByteArrayInputStream(afterMessage.getBytes())); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/model/AssetInfo.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/model/AssetInfo.java new file mode 100644 index 0000000..1037a4b --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/model/AssetInfo.java @@ -0,0 +1,21 @@ +package cn.estsh.i3plus.ext.mes.apiservice.model; + +import lombok.Data; + +/** + * @Description : + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/12 14:04 + * @Modify: + **/ +@Data +public class AssetInfo { + private String ASSETNUM; + private String DESCRIPTION; + private String FAILURECODE; + private String LOCATION; + private String LOCDESC; + private String SITEID; + private String STATUS; +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/model/MeterInfo.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/model/MeterInfo.java new file mode 100644 index 0000000..7e8ecbe --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/model/MeterInfo.java @@ -0,0 +1,23 @@ +package cn.estsh.i3plus.ext.mes.apiservice.model; + +import lombok.Data; + +/** + * @Description : + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/12 15:03 + * @Modify: + **/ +@Data +public class MeterInfo { + private String ASSETNUM; + + private String BASEMEASUREUNITID; + + private String METERNAME; + + private String SITEID; + + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index ebe8120..54778a6 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -122,11 +122,11 @@ public class MesWorkOrderService extends BaseMesService implements } else { //生成工单号 genSerialNoModel = new GenSerialNoModel(MesCommonConstant.MES_WORK_ORDER_NO); -// Long produceSeq = 0L; -// if (null != result && result.getProduceSeq() != null) { -// produceSeq = (long) Math.toIntExact(result.getProduceSeq()); -// } -// bean.setProduceSeq((long) (produceSeq + 1)); + Long produceSeq = 0L; + if (null != result && result.getProduceSeq() != null) { + produceSeq = (long) Math.toIntExact(result.getProduceSeq()); + } + bean.setProduceSeq(produceSeq + 1); GenSerialNoModel orderSeqSerialNoModel = new GenSerialNoModel(MesCommonConstant.ORDER_NO_BTO_SEQ); List resultList = syncFuncService.syncSerialNo(orderSeqSerialNoModel, bean.getCreateUser(), bean.getOrganizeCode(), 1).getResultList(); bean.setWorkOrderSeq(resultList.get(0)); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/webservice/WebServiceServer.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/webservice/WebServiceServer.java new file mode 100644 index 0000000..ef1ca14 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/webservice/WebServiceServer.java @@ -0,0 +1,49 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.webservice; + + +import cn.estsh.i3plus.ext.mes.apiservice.model.AssetInfo; +import cn.estsh.i3plus.ext.mes.apiservice.model.MeterInfo; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi.MaximoServiceImpl; +import cn.estsh.i3plus.ext.mes.pojo.model.MaximoParamModel; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; + +import javax.jws.WebMethod; +import javax.jws.WebParam; +import javax.jws.WebService; +import java.util.Map; + +@Component +@WebService(targetNamespace = "http://tempuri.org/") +public class WebServiceServer { + public static final Logger LOGGER = LoggerFactory.getLogger(WebServiceServer.class); + + @WebMethod(action = "SyncMaximoEquip", operationName = "SyncMaximoEquip") + public Map syncEquip(@WebParam(name = "assetInfo", targetNamespace = "http://schemas.datacontract.org/2004/07/WS.MAXIMO.DataInBound") AssetInfo assetInfo) { + LOGGER.info("SyncMaximoEquip主数据:{}", assetInfo); + MaximoParamModel maximoParamModel = new MaximoParamModel(); + maximoParamModel.setAssetNum(assetInfo.getASSETNUM()); + maximoParamModel.setStatus(assetInfo.getSTATUS()); + maximoParamModel.setSiteId(assetInfo.getSITEID()); + maximoParamModel.setFailureCode(assetInfo.getFAILURECODE()); + maximoParamModel.setDescription(assetInfo.getDESCRIPTION()); + MaximoServiceImpl bean = (MaximoServiceImpl)SpringContextsUtil.getBean("maximoServiceImpl"); + return bean.doAssetMainData(maximoParamModel); + } + + @WebMethod(action = "SyncMaximoInstrument", operationName = "SyncMaximoInstrument") + public Map syncInstrument(@WebParam(name = "meterInfo", targetNamespace = "http://schemas.datacontract.org/2004/07/WS.MAXIMO.DataInBound") MeterInfo meterInfo) { + LOGGER.info("syncInstrument主数据:{}", meterInfo); + MaximoParamModel maximoParamModel = new MaximoParamModel(); + maximoParamModel.setAssetNum(meterInfo.getASSETNUM()); + maximoParamModel.setBaseMeasureUnitId(meterInfo.getBASEMEASUREUNITID()); + maximoParamModel.setMeterName(meterInfo.getMETERNAME()); + MaximoServiceImpl bean = (MaximoServiceImpl)SpringContextsUtil.getBean("maximoServiceImpl"); + return bean.doAssetMainData(maximoParamModel); + } + +} \ No newline at end of file diff --git a/modules/i3plus-ext-mes-apiservice/src/main/resources/application-71.properties b/modules/i3plus-ext-mes-apiservice/src/main/resources/application-71.properties index b6ee3bb..c94dee9 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/resources/application-71.properties +++ b/modules/i3plus-ext-mes-apiservice/src/main/resources/application-71.properties @@ -272,7 +272,7 @@ xxl.job.executor.appname=i3mes-castle ### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null xxl.job.executor.address= ### xxl-job executor server-info -xxl.job.executor.ip=10.196.75.109 +xxl.job.executor.ip=10.196.75.151 #xxl.job.executor.ip= #xxl.job.executor.port=9999 xxl.job.executor.port=8888 @@ -281,3 +281,6 @@ xxl.job.executor.logpath= ### xxl-job executor log-retention-days xxl.job.executor.logretentiondays=10 xxl.job.basePackage=cn.estsh.i3plus.ext.mes.apiservice.schedulejob + + +impp.app.ext.base-packages=cn.estsh.i3plus.ext.mes.apiservice \ No newline at end of file diff --git a/pom.xml b/pom.xml index 6d52f5c..dd8e78a 100644 --- a/pom.xml +++ b/pom.xml @@ -41,7 +41,18 @@ - + + + org.apache.cxf + cxf-spring-boot-starter-jaxws + 3.4.1 + + + org.springframework.boot + spring-boot-starter-logging + + + org.springframework spring-web