diff --git a/ktg-mes/pom.xml b/ktg-mes/pom.xml
index 86a794b..2b4f85f 100644
--- a/ktg-mes/pom.xml
+++ b/ktg-mes/pom.xml
@@ -53,10 +53,25 @@
swagger-models
1.6.2
+
+ jcifs
+ jcifs
+ 1.3.17
+
com.ktg
ktg-generator
+
+ org.projectlombok
+ lombok
+
+
+
+ org.apache.cxf
+ cxf-spring-boot-starter-jaxws
+ 3.4.4
+
\ No newline at end of file
diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/config/WebServiceConfig.java b/ktg-mes/src/main/java/com/ktg/mes/md/config/WebServiceConfig.java
new file mode 100644
index 0000000..463c196
--- /dev/null
+++ b/ktg-mes/src/main/java/com/ktg/mes/md/config/WebServiceConfig.java
@@ -0,0 +1,36 @@
+package com.ktg.mes.md.config;
+
+import com.ktg.mes.md.service.IMasterDataSyncService;
+import lombok.RequiredArgsConstructor;
+import org.apache.cxf.Bus;
+import org.apache.cxf.bus.spring.SpringBus;
+import org.apache.cxf.jaxws.EndpointImpl;
+import org.apache.cxf.transport.servlet.CXFServlet;
+import org.springframework.boot.web.servlet.ServletRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.xml.ws.Endpoint;
+
+@Configuration
+@RequiredArgsConstructor
+public class WebServiceConfig {
+ private final IMasterDataSyncService masterDataSyncService;
+
+ @Bean(name = Bus.DEFAULT_BUS_ID)
+ public SpringBus springBus() {
+ return new SpringBus();
+ }
+
+ @Bean
+ public ServletRegistrationBean cxfServlet() {
+ return new ServletRegistrationBean<>(new CXFServlet(), "/WebServices/open/*");
+ }
+
+ @Bean
+ public Endpoint endpoint() {
+ EndpointImpl endpoint = new EndpointImpl(springBus(), masterDataSyncService);
+ endpoint.publish("/MasterDataSyncService");
+ return endpoint;
+ }
+}
diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/service/IMasterDataSyncService.java b/ktg-mes/src/main/java/com/ktg/mes/md/service/IMasterDataSyncService.java
new file mode 100644
index 0000000..7a62c50
--- /dev/null
+++ b/ktg-mes/src/main/java/com/ktg/mes/md/service/IMasterDataSyncService.java
@@ -0,0 +1,40 @@
+package com.ktg.mes.md.service;
+
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebResult;
+import javax.jws.WebService;
+
+@WebService(name = IMasterDataSyncService.SERVICE_NAME, targetNamespace = IMasterDataSyncService.TARGET_NAMESPACE)
+public interface IMasterDataSyncService {
+ String SERVICE_NAME = "MasterDataSyncService";
+
+ String TARGET_NAMESPACE = "http://server.spring.zhang.pers/";
+
+ /**
+ * 同步物料数据
+ *
+ * @param materialListStr 物料列表
+ */
+ @WebMethod(operationName = "syncMaterial")
+ @WebResult
+ String syncMaterial(@WebParam(name = "materialListStr") String materialListStr);
+
+ /**
+ * 同步物料分类数据
+ *
+ * @param materialCategoryListStr 物料分类列表
+ */
+ @WebMethod(operationName = "syncMaterialCategory")
+ @WebResult
+ String syncMaterialCategory(@WebParam(name = "materialCategoryList") String materialCategoryListStr);
+
+ /**
+ * 同步计量单位数据
+ *
+ * @param unitListStr 计量单位列表
+ */
+ @WebMethod(operationName = "syncUnit")
+ @WebResult
+ String syncUnit(@WebParam(name = "unitList") String unitListStr);
+}
diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/MasterDataSyncServiceImpl.java b/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/MasterDataSyncServiceImpl.java
new file mode 100644
index 0000000..f2df476
--- /dev/null
+++ b/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/MasterDataSyncServiceImpl.java
@@ -0,0 +1,189 @@
+package com.ktg.mes.md.service.impl;
+
+import com.ktg.common.core.domain.entity.ItemType;
+import com.ktg.mes.md.domain.MdItem;
+import com.ktg.mes.md.domain.MdUnitMeasure;
+import com.ktg.mes.md.service.IMasterDataSyncService;
+import com.ktg.mes.md.service.IMdItemService;
+import com.ktg.mes.md.service.IMdUnitMeasureService;
+import lombok.RequiredArgsConstructor;
+import org.codehaus.jackson.JsonNode;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.springframework.stereotype.Service;
+
+import javax.jws.WebService;
+import java.util.List;
+
+@RequiredArgsConstructor
+@Service
+@WebService(name = IMasterDataSyncService.SERVICE_NAME, targetNamespace = IMasterDataSyncService.TARGET_NAMESPACE, endpointInterface = "com.ktg.mes.md.service.IMasterDataSyncService")
+public class MasterDataSyncServiceImpl implements IMasterDataSyncService {
+ private final ItemTypeServiceImpl itemTypeService;
+ private final IMdItemService mdItemService;
+ private final IMdUnitMeasureService mdUnitMeasureService;
+
+ // 无参构造函数(供 CXF 使用)
+ public MasterDataSyncServiceImpl() {
+ this.itemTypeService = null;
+ this.mdItemService = null;
+ this.mdUnitMeasureService = null;
+ }
+
+ /**
+ * 同步物料数据
+ *
+ * @param materialListStr 物料列表
+ */
+ @Override
+ public String syncMaterial(String materialListStr) {
+ // 使用 ObjectMapper 来处理 JSON
+ ObjectMapper objectMapper = new ObjectMapper();
+
+ try {
+ // 解析传入的 JSON 字符串
+ String jsonList = objectMapper.readTree(materialListStr).get("LIST").asText();
+ JsonNode jsonNode = objectMapper.readTree(jsonList);
+
+ for (JsonNode node : jsonNode) {
+ JsonNode jsonNode1 = null;
+ // 通用工具工装
+ if (!node.get("T_TYGJGZ").asText().isEmpty()) {
+ jsonNode1 = objectMapper.readTree(node.get("T_TYGJGZ").asText());
+ // 专用工具工装
+ } else if (!node.get("T_ZYGJGZ").asText().isEmpty()) {
+ jsonNode1 = objectMapper.readTree(node.get("T_ZYGJGZ").asText());
+ }
+ if (jsonNode1 != null) {
+ MdItem mdItem = new MdItem();
+ mdItem.setItemName(jsonNode1.get("MC").asText());
+ mdItem.setItemCode(jsonNode1.get("WLBM").asText());
+
+ // 查询并设置计量单位数据
+ MdUnitMeasure unit = mdUnitMeasureService.selectMdUnitByCode(jsonNode1.get("UNIT").asText());
+ mdItem.setUnitName(unit.getMeasureName());
+ mdItem.setUnitOfMeasure(unit.getMeasureName());
+
+ // 四级分类数据
+ String categoryName = jsonNode1.get("SIJFL").asText();
+ if (categoryName.isEmpty()) {
+ // 为空则使用三级分类数据
+ categoryName = jsonNode1.get("SJFL").asText();
+ }
+ ItemType itemType = itemTypeService.selectItemTypeByName(categoryName);
+ mdItem.setItemOrProduct(itemType.getItemOrProduct());
+ mdItem.setItemTypeId(itemType.getItemTypeId());
+ mdItem.setItemTypeName(itemType.getItemTypeName());
+
+ mdItemService.insertMdItem(mdItem);
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ return "同步失败,原因:" + e.getMessage();
+ }
+
+ return "1"; // 返回成功标识
+ }
+
+ /**
+ * 同步物料分类数据
+ *
+ * @param materialCategoryListStr 物料分类列表
+ */
+ @Override
+ public String syncMaterialCategory(String materialCategoryListStr) {
+ // 使用 ObjectMapper 来处理 JSON
+ ObjectMapper objectMapper = new ObjectMapper();
+
+ try {
+ // 解析传入的 JSON 字符串
+ String jsonList = objectMapper.readTree(materialCategoryListStr).get("LIST").asText();
+ JsonNode jsonNode = objectMapper.readTree(jsonList);
+
+ for (JsonNode node : jsonNode) {
+ ItemType itemType = new ItemType();
+ itemType.setItemTypeName(node.get("NAME").asText());
+ itemType.setItemTypeCode(node.get("CODE").asText());
+
+ // 判断是否有父级分类
+ String parentCode = node.get("PCODE").asText();
+ if (!parentCode.isEmpty()) {
+ ItemType itemTypeQuery = new ItemType();
+ itemTypeQuery.setItemTypeCode(parentCode);
+ // 查询父级数据
+ List parentItemTypeList = itemTypeService.selectItemTypeList(itemTypeQuery);
+
+ if (!parentItemTypeList.isEmpty()) {
+ ItemType parentItemType = parentItemTypeList.get(0);
+ itemType.setParentTypeId(parentItemType.getItemTypeId());
+
+ // 提取父级分类ID
+ Long parentId = parentItemType.getParentTypeId();
+
+ // 循环,直至查出最顶层分类
+ while (parentId != null && parentId != 0) {
+ parentItemType = itemTypeService.selectItemTypeById(parentId);
+ if (parentItemType != null) {
+ // 更新父级 ID
+ parentId = parentItemType.getParentTypeId();
+
+ // 判断分类名称,设置对应的物料类型
+ if ("专用刀具".equals(parentItemType.getItemTypeName()) || "刀具".equals(parentItemType.getItemTypeName())) {
+ itemType.setItemOrProduct("BLAND");
+ break;
+ } else if (parentId == 0) {
+ itemType.setItemOrProduct("ITEM");
+ break;
+ }
+ } else {
+ break;
+ }
+ }
+ }
+ }
+
+ // 插入数据
+ itemTypeService.insertItemType(itemType);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ return "同步失败,原因:" + e.getMessage();
+ }
+
+ return "1"; // 返回成功标识
+ }
+
+ /**
+ * 同步计量单位数据
+ *
+ * @param unitListStr 计量单位列表
+ */
+ @Override
+ public String syncUnit(String unitListStr) {
+ // 使用 ObjectMapper 来处理 JSON
+ ObjectMapper objectMapper = new ObjectMapper();
+
+ try {
+ // 解析传入的 JSON 字符串
+ String jsonList = objectMapper.readTree(unitListStr).get("LIST").asText();
+ JsonNode jsonNode = objectMapper.readTree(jsonList);
+
+ for (JsonNode node : jsonNode) {
+ JsonNode jsonNode1 = objectMapper.readTree(node.get("DIC_D_UNIT").asText());
+ if (jsonNode1 != null) {
+ MdUnitMeasure mdUnitMeasure = new MdUnitMeasure();
+ mdUnitMeasure.setMeasureCode(jsonNode1.get("CODE").asText());
+ mdUnitMeasure.setMeasureName(jsonNode1.get("NAME").asText());
+ mdUnitMeasureService.insertMdUnitMeasure(mdUnitMeasure);
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ return "同步失败,原因:" + e.getMessage();
+ }
+
+ return "1"; // 返回成功标识
+ }
+
+
+}