diff --git a/nflg-wms-admin/pom.xml b/nflg-wms-admin/pom.xml
index add938e7..a4f5c4df 100644
--- a/nflg-wms-admin/pom.xml
+++ b/nflg-wms-admin/pom.xml
@@ -73,15 +73,14 @@
org.apache.commons
commons-lang3
-
- tech.powerjob
- powerjob-worker-spring-boot-starter
- 5.1.1
-
+
+
+
+
+
tech.powerjob
powerjob-client
- 5.1.1
diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/RestTemplateConfig.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/RestTemplateConfig.java
new file mode 100644
index 00000000..429de950
--- /dev/null
+++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/config/RestTemplateConfig.java
@@ -0,0 +1,15 @@
+package com.nflg.wms.admin.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.client.RestTemplate;
+
+@Configuration
+public class RestTemplateConfig {
+
+ @Bean
+ public RestTemplate restTemplate() {
+ return new RestTemplate();
+ }
+
+}
diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BomMaterialService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BomMaterialService.java
deleted file mode 100644
index 9346708d..00000000
--- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BomMaterialService.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.nflg.wms.admin.service;
-
-import com.nflg.wms.common.pojo.dto.BomMaterialDTO;
-import org.springframework.stereotype.Component;
-
-@Component
-public class BomMaterialService {
-
- public BomMaterialDTO getMaterial(String no){
- // TODO 从主数据平台获取物料信息
- return new BomMaterialDTO()
- .setNo("test")
- .setDescribe("测试的虚拟物料")
- .setDrawingNo("tttt");
- }
-}
diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/MaterialControllerService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/MaterialControllerService.java
index 1d4c386a..611bb022 100644
--- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/MaterialControllerService.java
+++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/MaterialControllerService.java
@@ -18,6 +18,7 @@ import com.nflg.wms.common.util.UserUtil;
import com.nflg.wms.common.util.VUtil;
import com.nflg.wms.repository.entity.WmsMaterial;
import com.nflg.wms.repository.service.IWmsMaterialService;
+import com.nflg.wms.starter.service.BomMaterialService;
import com.nflg.wms.starter.service.FileUploadService;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
@@ -153,13 +154,13 @@ public class MaterialControllerService {
wmsMaterial=new WmsMaterial()
.setId(null)
.setVersion(Objects.isNull(wmsMaterial)?1:wmsMaterial.getVersion()+1)
- .setNo(bomMaterialDTO.getNo())
- .setDescribe(bomMaterialDTO.getDescribe())
+ .setNo(bomMaterialDTO.getMaterialNo())
+ .setDescribe(bomMaterialDTO.getMaterialDesc())
.setDrawingNo(bomMaterialDTO.getDrawingNo())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(LocalDateTime.now());
}else {
- wmsMaterial.setDescribe(bomMaterialDTO.getDescribe());
+ wmsMaterial.setDescribe(bomMaterialDTO.getMaterialDesc());
wmsMaterial.setDrawingNo(bomMaterialDTO.getDrawingNo());
wmsMaterial.setUpdateBy(UserUtil.getUserName());
wmsMaterial.setUpdateTime(LocalDateTime.now());
diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/WarehouseControllerService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/WarehouseControllerService.java
index d14701e1..4367b29b 100644
--- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/WarehouseControllerService.java
+++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/WarehouseControllerService.java
@@ -182,4 +182,8 @@ public class WarehouseControllerService {
}
return false;
}
+
+ public List getList() {
+ return warehouseService.getList();
+ }
}
diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/BomLoginQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/BomLoginQO.java
new file mode 100644
index 00000000..886f0d1b
--- /dev/null
+++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/BomLoginQO.java
@@ -0,0 +1,4 @@
+package com.nflg.wms.common.pojo.dto;
+
+public record BomLoginQO(String userName, String pwd) {
+}
diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/BomLoginResultDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/BomLoginResultDTO.java
new file mode 100644
index 00000000..eaf4f672
--- /dev/null
+++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/BomLoginResultDTO.java
@@ -0,0 +1,4 @@
+package com.nflg.wms.common.pojo.dto;
+
+public record BomLoginResultDTO(String token) {
+}
diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/BomMaterialDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/BomMaterialDTO.java
index 97b96e9d..77392214 100644
--- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/BomMaterialDTO.java
+++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/BomMaterialDTO.java
@@ -24,13 +24,13 @@ public class BomMaterialDTO {
* SAP料号
*/
@NotBlank
- private String no;
+ private String materialNo;
/**
* 物料描述
*/
@NotBlank
- private String describe;
+ private String materialDesc;
/**
* 图号
@@ -41,7 +41,7 @@ public class BomMaterialDTO {
* 重量
*/
@NotBlank
- private BigDecimal weight;
+ private String materialWeight;
/**
* 数量
diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/BomResultDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/BomResultDTO.java
new file mode 100644
index 00000000..465824bb
--- /dev/null
+++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/BomResultDTO.java
@@ -0,0 +1,4 @@
+package com.nflg.wms.common.pojo.dto;
+
+public record BomResultDTO(int state, String msg,T data) {
+}
diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/SAPSyncFromDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/SAPSyncFromDTO.java
new file mode 100644
index 00000000..98456738
--- /dev/null
+++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/SAPSyncFromDTO.java
@@ -0,0 +1,4 @@
+package com.nflg.wms.common.pojo.dto;
+
+public record SAPSyncFromDTO(String no,String warehouse,String bin) {
+}
diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsWarehouseService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsWarehouseService.java
index 4ff0f2ce..a5b29dcd 100644
--- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsWarehouseService.java
+++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsWarehouseService.java
@@ -32,4 +32,6 @@ public interface IWmsWarehouseService extends IService {
IPage search(@Valid WarehouseSearchQO request);
List getList(List ids);
+
+ List getList();
}
diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsBomServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsBomServiceImpl.java
index 8f3d3cfb..2867c8da 100644
--- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsBomServiceImpl.java
+++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsBomServiceImpl.java
@@ -72,22 +72,22 @@ public class WmsBomServiceImpl extends ServiceImpl impleme
.map(it -> new BomMaterialDTO()
.setId(it.getId())
.setParentId(it.getParentId())
- .setNo(it.getNo())
- .setDescribe(it.getDescribe())
+ .setMaterialNo(it.getNo())
+ .setMaterialDesc(it.getDescribe())
.setDrawingNo(it.getDrawingNo())
.setNum(it.getNum())
- .setWeight(it.getWeight())
+ .setMaterialWeight(String.valueOf(it.getWeight()))
.setChildren(boms.stream()
.filter(child -> child.getParentId().equals(it.getId()))
.map(child -> {
return new BomMaterialDTO()
.setId(child.getId())
.setParentId(child.getParentId())
- .setNo(child.getNo())
- .setDescribe(child.getDescribe())
+ .setMaterialNo(child.getNo())
+ .setMaterialDesc(child.getDescribe())
.setDrawingNo(child.getDrawingNo())
.setNum(child.getNum())
- .setWeight(child.getWeight());
+ .setMaterialWeight(String.valueOf(child.getWeight()));
})
.toList()
)).toList();
diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsWarehouseServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsWarehouseServiceImpl.java
index aa35a6b4..51878634 100644
--- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsWarehouseServiceImpl.java
+++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsWarehouseServiceImpl.java
@@ -94,4 +94,9 @@ public class WmsWarehouseServiceImpl extends ServiceImpl getList(List ids) {
return baseMapper.getList(ids);
}
+
+ @Override
+ public List getList() {
+ return lambdaQuery().eq(WmsWarehouse::getEnable, true).list();
+ }
}
diff --git a/nflg-wms-scheduled/lib/libsapjco3.so b/nflg-wms-scheduled/lib/libsapjco3.so
new file mode 100644
index 00000000..e69de29b
diff --git a/nflg-wms-scheduled/lib/sapidoc3.jar b/nflg-wms-scheduled/lib/sapidoc3.jar
new file mode 100644
index 00000000..6b0b3021
Binary files /dev/null and b/nflg-wms-scheduled/lib/sapidoc3.jar differ
diff --git a/nflg-wms-scheduled/lib/sapjco3.dll b/nflg-wms-scheduled/lib/sapjco3.dll
new file mode 100644
index 00000000..f046d5b0
Binary files /dev/null and b/nflg-wms-scheduled/lib/sapjco3.dll differ
diff --git a/nflg-wms-scheduled/lib/sapjco3.jar b/nflg-wms-scheduled/lib/sapjco3.jar
new file mode 100644
index 00000000..32d308b5
Binary files /dev/null and b/nflg-wms-scheduled/lib/sapjco3.jar differ
diff --git a/nflg-wms-scheduled/pom.xml b/nflg-wms-scheduled/pom.xml
new file mode 100644
index 00000000..77cc5a12
--- /dev/null
+++ b/nflg-wms-scheduled/pom.xml
@@ -0,0 +1,134 @@
+
+
+ 4.0.0
+
+ com.nflg
+ nflg-wms
+ 1.0.0-SNAPSHOT
+
+ nflg-wms-scheduled
+ 1.0.0-SNAPSHOT
+ 服务-计划任务执行器
+ 计划任务执行器
+
+
+ com.nflg
+ nflg-wms-common
+
+
+ com.nflg
+ nflg-wms-starter
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+
+
+
+
+
+ com.sap.conn.jco
+ sapjco3
+ 3.0.9
+ system
+ ${project.basedir}/lib/sapjco3.jar
+
+
+ tech.powerjob
+ powerjob-worker
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ true
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+
+
+ copy-external-libs
+ process-resources
+
+ copy-resources
+
+
+
+
+
+ ${project.basedir}/lib
+ false
+
+
+
+ ${project.build.directory}/lib
+
+ true
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+
+
+ copy-dependencies
+ package
+
+ copy-dependencies
+
+
+ ${project.build.directory}/lib
+ ${project.groupId}
+ runtime
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+
+
+
+ true
+ lib/
+ com.nflg.wms.scheduled.ScheduledApplication
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+
+
+ package
+
+ shade
+
+
+
+
+ ${project.groupId}:*
+
+
+ false
+
+
+
+
+
+
+
+
diff --git a/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/ScheduledApplication.java b/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/ScheduledApplication.java
new file mode 100644
index 00000000..044838f7
--- /dev/null
+++ b/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/ScheduledApplication.java
@@ -0,0 +1,13 @@
+package com.nflg.wms.scheduled;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class ScheduledApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(ScheduledApplication.class, args);
+ }
+
+}
diff --git a/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/config/SapJcoConfig.java b/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/config/SapJcoConfig.java
new file mode 100644
index 00000000..31cc2d28
--- /dev/null
+++ b/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/config/SapJcoConfig.java
@@ -0,0 +1,114 @@
+package com.nflg.wms.scheduled.config;
+
+import com.sap.conn.jco.JCoDestination;
+import com.sap.conn.jco.JCoDestinationManager;
+import com.sap.conn.jco.JCoException;
+import com.sap.conn.jco.ext.DestinationDataEventListener;
+import com.sap.conn.jco.ext.DestinationDataProvider;
+import com.sap.conn.jco.ext.Environment;
+import jakarta.annotation.PostConstruct;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+@Slf4j
+@Configuration
+public class SapJcoConfig {
+
+ public static final String ABAP_AS_POOLED = "ABAP_AS_WITH_POOL";
+ private final String sapHost;
+ private final String sapSysnr;
+ private final String sapClient;
+ private final String sapUsername;
+ private final String sapPassword;
+ private final String sapLang;
+ private final String sapPool;
+ private String sapPeak;
+
+
+ public SapJcoConfig(
+ @Value("${custom.sap.host}") String sapHost,
+ @Value("${custom.sap.sysnr}") String sapSysnr,
+ @Value("${custom.sap.client}") String sapClient,
+ @Value("${custom.sap.username}") String sapUsername,
+ @Value("${custom.sap.password}") String sapPassword,
+ @Value("${custom.sap.lang}") String sapLang,
+ @Value("${custom.sap.pool}") String sapPool,
+ @Value("${custom.sap.peak}") String sapPeak
+ ) {
+ this.sapHost = sapHost;
+ this.sapSysnr = sapSysnr;
+ this.sapClient = sapClient;
+ this.sapUsername = sapUsername;
+ this.sapPassword = sapPassword;
+ this.sapLang = sapLang;
+ this.sapPool = sapPool;
+ this.sapPeak = sapPeak;
+ }
+
+ @PostConstruct
+ public void initDestination() {
+ try {
+ // 验证连接池配置有效性
+ validatePoolConfig();
+ // 直接注册到JCo内存环境(避免文件IO)
+ Environment.registerDestinationDataProvider(new SimpleDestinationDataProvider(ABAP_AS_POOLED, buildConnectionProperties()));
+ } catch (Exception e) {
+ log.error("SAP JCo目的地初始化失败", e);
+ throw new IllegalStateException("SAP JCo配置初始化失败", e);
+ }
+ }
+
+ private Properties buildConnectionProperties() {
+ Properties props = new Properties();
+ props.setProperty(DestinationDataProvider.JCO_ASHOST, sapHost);
+ props.setProperty(DestinationDataProvider.JCO_SYSNR, sapSysnr);
+ props.setProperty(DestinationDataProvider.JCO_CLIENT, sapClient);
+ props.setProperty(DestinationDataProvider.JCO_USER, sapUsername);
+ props.setProperty(DestinationDataProvider.JCO_PASSWD, sapPassword);
+ props.setProperty(DestinationDataProvider.JCO_LANG, sapLang);
+ props.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, sapPeak);
+ props.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, sapPool);
+ return props;
+ }
+ // 连接池配置验证
+ private void validatePoolConfig() {
+ try {
+ int peak = Integer.parseInt(sapPeak);
+ int pool = Integer.parseInt(sapPool);
+ if (peak < pool) {
+ log.warn("JCO_PEAK_LIMIT({}) 不应小于 JCO_POOL_CAPACITY({}),已自动修正", peak, pool);
+ sapPeak = sapPool;
+ }
+ } catch (NumberFormatException e) {
+ throw new IllegalArgumentException("SAP连接池配置必须是数字");
+ }
+ }
+
+ @Bean(destroyMethod = "")
+ public JCoDestination jcoDestination() throws JCoException {
+ return JCoDestinationManager.getDestination(ABAP_AS_POOLED);
+ }
+
+ private static class SimpleDestinationDataProvider implements DestinationDataProvider {
+ private final Map destinations = new HashMap<>();
+ public SimpleDestinationDataProvider(String destName, Properties props) {
+ destinations.put(destName, props);
+ }
+ @Override
+ public Properties getDestinationProperties(String destinationName) {
+ return destinations.get(destinationName);
+ }
+ @Override
+ public void setDestinationDataEventListener(DestinationDataEventListener listener) {}
+ @Override
+ public boolean supportsEvents() {
+ return false;
+ }
+ }
+}
diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/processor/MaterialZipImportProcessor.java b/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/processor/MaterialZipImportProcessor.java
similarity index 96%
rename from nflg-wms-admin/src/main/java/com/nflg/wms/admin/processor/MaterialZipImportProcessor.java
rename to nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/processor/MaterialZipImportProcessor.java
index e37f5514..5b9a833b 100644
--- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/processor/MaterialZipImportProcessor.java
+++ b/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/processor/MaterialZipImportProcessor.java
@@ -1,12 +1,12 @@
-package com.nflg.wms.admin.processor;
+package com.nflg.wms.scheduled.processor;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
-import com.nflg.wms.admin.service.BomMaterialService;
import com.nflg.wms.common.pojo.dto.BomMaterialDTO;
import com.nflg.wms.repository.entity.WmsMaterial;
import com.nflg.wms.repository.service.IWmsMaterialService;
+import com.nflg.wms.starter.service.BomMaterialService;
import com.nflg.wms.starter.service.FileUploadService;
import jakarta.annotation.Resource;
import org.apache.commons.io.FilenameUtils;
@@ -73,14 +73,14 @@ public class MaterialZipImportProcessor implements BasicProcessor {
wmsMaterial = new WmsMaterial()
.setId(null)
.setVersion(Objects.isNull(wmsMaterial) ? 1 : wmsMaterial.getVersion() + 1)
- .setNo(bomMaterialDTO.getNo())
- .setDescribe(bomMaterialDTO.getDescribe())
+ .setNo(bomMaterialDTO.getMaterialNo())
+ .setDescribe(bomMaterialDTO.getMaterialDesc())
.setDrawingNo(bomMaterialDTO.getDrawingNo())
.setCreateBy(userName)
.setCreateTime(LocalDateTime.now());
} else {
omsLogger.info("更新图纸");
- wmsMaterial.setDescribe(bomMaterialDTO.getDescribe());
+ wmsMaterial.setDescribe(bomMaterialDTO.getMaterialDesc());
wmsMaterial.setDrawingNo(bomMaterialDTO.getDrawingNo());
wmsMaterial.setUpdateBy(userName);
wmsMaterial.setUpdateTime(LocalDateTime.now());
diff --git a/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/processor/SAPSyncMaterialProcessor.java b/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/processor/SAPSyncMaterialProcessor.java
new file mode 100644
index 00000000..330f287d
--- /dev/null
+++ b/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/processor/SAPSyncMaterialProcessor.java
@@ -0,0 +1,43 @@
+package com.nflg.wms.scheduled.processor;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.nflg.wms.repository.entity.WmsWarehouse;
+import com.nflg.wms.repository.service.IWmsWarehouseService;
+import com.nflg.wms.scheduled.service.SapService;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Component;
+import tech.powerjob.worker.core.processor.ProcessResult;
+import tech.powerjob.worker.core.processor.TaskContext;
+import tech.powerjob.worker.core.processor.sdk.BasicProcessor;
+import tech.powerjob.worker.log.OmsLogger;
+
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+@Component(value = "SAPSyncMaterialProcessor")
+public class SAPSyncMaterialProcessor implements BasicProcessor {
+
+ @Resource
+ private SapService sapService;
+
+ @Resource
+ private IWmsWarehouseService warehouseService;
+
+ @Override
+ public ProcessResult process(TaskContext context) throws Exception {
+// List params= StrUtil.split(context.getInstanceParams(), "|");
+ List warehouses = warehouseService.getList();
+ Set warehouseNos = warehouses.stream().map(WmsWarehouse::getNo).collect(Collectors.toSet());
+ if (CollectionUtil.isEmpty(warehouseNos)) {
+ return new ProcessResult(false, "请先配置仓库");
+ }
+ OmsLogger omsLogger = context.getOmsLogger();
+ int count=warehouseNos.size();
+ for (int i = 0, size = warehouseNos.size(); i < size; i++) {
+ String warehouseNo = warehouseNos.toArray()[i].toString();
+ omsLogger.info("开始同步仓库:{}",warehouseNos.toArray()[i]);
+ }
+ return new ProcessResult(true, "同步成功");
+ }
+}
diff --git a/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/service/SapService.java b/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/service/SapService.java
new file mode 100644
index 00000000..5f0d4b0b
--- /dev/null
+++ b/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/service/SapService.java
@@ -0,0 +1,40 @@
+package com.nflg.wms.scheduled.service;
+
+import com.nflg.wms.common.pojo.dto.SAPSyncFromDTO;
+import com.sap.conn.jco.JCoDestination;
+import com.sap.conn.jco.JCoException;
+import com.sap.conn.jco.JCoFunction;
+import com.sap.conn.jco.JCoTable;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+@Component
+public class SapService {
+
+ @Resource
+ private JCoDestination destination;
+
+ public List syncFrom(String factory) throws JCoException {
+ JCoFunction function = destination.getRepository().getFunction("ZWM3A01");
+ function.getImportParameterList().setValue("I_WERKS", factory);
+// JCoTable itMatnr = function.getTableParameterList().getTable("IT_MATNR");
+// for (String matnr : materials) {
+// itMatnr.appendRow();
+// itMatnr.setValue("MATNR", matnr);
+// }
+ function.execute(destination);
+ JCoTable tOut = function.getTableParameterList().getTable("T_OUT");
+ List result = new ArrayList<>();
+ for (int i = 0; i < tOut.getNumRows(); i++) {
+ tOut.setRow(i);
+ result.add(new SAPSyncFromDTO(tOut.getString("MATNR"), tOut.getString("LGORT"), tOut.getString("LGPBE")));
+ }
+ return result;
+ }
+}
+
diff --git a/nflg-wms-scheduled/src/main/resources/application-dev.yml b/nflg-wms-scheduled/src/main/resources/application-dev.yml
new file mode 100644
index 00000000..7dd3ba80
--- /dev/null
+++ b/nflg-wms-scheduled/src/main/resources/application-dev.yml
@@ -0,0 +1,10 @@
+logging:
+ level:
+ root: info
+ com:
+ nflg: debug
+ alibaba:
+ cloud:
+ nacos: debug
+ org:
+ springframework: debug
\ No newline at end of file
diff --git a/nflg-wms-scheduled/src/main/resources/application.yml b/nflg-wms-scheduled/src/main/resources/application.yml
new file mode 100644
index 00000000..97958dc2
--- /dev/null
+++ b/nflg-wms-scheduled/src/main/resources/application.yml
@@ -0,0 +1,22 @@
+server:
+ port: 8102
+spring:
+ application:
+ name: scheduled
+ profiles:
+ active: dev
+ config:
+ import: nacos:shared.properties?group=${spring.profiles.active}&refreshEnabled=true
+ cloud:
+ nacos:
+ config:
+ server-addr: ${nacos.server-addr:112.74.186.154:8848}
+ namespace: wms
+ group: ${spring.profiles.active}
+ discovery:
+ server-addr: ${nacos.server-addr:112.74.186.154:8848}
+ namespace: wms
+ group: ${spring.profiles.active}
+logging:
+ level:
+ root: info
\ No newline at end of file
diff --git a/nflg-wms-scheduled/src/main/resources/logback-spring.xml b/nflg-wms-scheduled/src/main/resources/logback-spring.xml
new file mode 100644
index 00000000..e0204478
--- /dev/null
+++ b/nflg-wms-scheduled/src/main/resources/logback-spring.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+ %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] %-5level %logger{50} - %msg%n
+ UTF-8
+
+
+
+
+
+ ${logDir}/nflg-wms-scheduled.log
+
+
+ ${logDir}/%d{yyyy-MM-dd}.%i.log
+
+ 10MB
+
+ 7
+
+ 1GB
+
+
+ %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] %-5level %logger{50} - %msg%n
+ UTF-8
+
+
+
+
+ ${logDir}/powerjob-worker.log
+
+ ${logDir}/powerjob-worker.%d{yyyy-MM-dd}.log
+ 7
+
+
+ %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
+ UTF-8
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nflg-wms-starter/src/main/java/com/nflg/wms/starter/service/BomMaterialService.java b/nflg-wms-starter/src/main/java/com/nflg/wms/starter/service/BomMaterialService.java
new file mode 100644
index 00000000..78269406
--- /dev/null
+++ b/nflg-wms-starter/src/main/java/com/nflg/wms/starter/service/BomMaterialService.java
@@ -0,0 +1,89 @@
+package com.nflg.wms.starter.service;
+
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
+import com.nflg.wms.common.pojo.dto.BomLoginQO;
+import com.nflg.wms.common.pojo.dto.BomLoginResultDTO;
+import com.nflg.wms.common.pojo.dto.BomMaterialDTO;
+import com.nflg.wms.common.pojo.dto.BomResultDTO;
+import com.nflg.wms.common.util.VUtil;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.ParameterizedTypeReference;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.http.*;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.Objects;
+import java.util.concurrent.TimeUnit;
+
+@Slf4j
+@Component
+public class BomMaterialService {
+
+ @Value("${bom.login.url}")
+ private String loginUrl;
+
+ @Value("${bom.user.name}")
+ private String userName;
+
+ @Value("${bom.user.password}")
+ private String password;
+
+ @Value("${bom.material.query.url}")
+ private String materialQueryUrl;
+
+ @Resource
+ private RestTemplate restTemplate;
+
+ @Resource
+ private StringRedisTemplate stringRedisTemplate;
+
+ public BomMaterialDTO getMaterial(String no) {
+ VUtil.trueThrowBusinessError(StrUtil.isBlank(no)).throwMessage("物料编号不能为空");
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_JSON);
+ headers.add("authorization", getToken());
+ HttpEntity requestEntity = new HttpEntity<>(null, headers);
+ ResponseEntity> response = restTemplate.exchange(
+ materialQueryUrl + no,
+ HttpMethod.POST,
+ requestEntity,
+ new ParameterizedTypeReference<>() {
+ }
+ );
+ log.info("登录主物料系统返回状态码:" + response.getStatusCode().value());
+ VUtil.trueThrowBusinessError(!response.getStatusCode().is2xxSuccessful())
+ .throwMessage("登录主物料系统失败");
+ BomResultDTO resultDTO = response.getBody();
+ log.info("登录主物料系统返回数据:" + JSONUtil.toJsonStr(resultDTO));
+ return resultDTO.data();
+ }
+
+ private String getToken() {
+ String token = stringRedisTemplate.opsForValue().get("bom:token");
+ if (StrUtil.isBlank(token)) {
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_JSON);
+ HttpEntity requestEntity = new HttpEntity<>(new BomLoginQO(userName, password), headers);
+ ResponseEntity> response = restTemplate.exchange(
+ loginUrl,
+ HttpMethod.POST,
+ requestEntity,
+ new ParameterizedTypeReference<>() {
+ }
+ );
+ log.info("登录主物料系统返回状态码:" + response.getStatusCode().value());
+ VUtil.trueThrowBusinessError(!response.getStatusCode().is2xxSuccessful())
+ .throwMessage("登录主物料系统失败");
+ BomResultDTO resultDTO = response.getBody();
+ log.info("登录主物料系统返回数据:" + JSONUtil.toJsonStr(resultDTO));
+ VUtil.trueThrowBusinessError(!Objects.equals(resultDTO.state(), 200)).throwMessage("登录主物料系统失败:" + resultDTO.msg());
+ token = resultDTO.data().token();
+ stringRedisTemplate.opsForValue().set("bom:token", token, 8, TimeUnit.HOURS);
+ }
+ return token;
+ }
+}
diff --git a/pom.xml b/pom.xml
index 2daa4c76..8d45a671 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,6 +22,7 @@
nflg-wms-admin
nflg-wms-auth
nflg-wms-file
+ nflg-wms-scheduled
17
@@ -41,6 +42,7 @@
3.4.0
0.5.24
3.3.0
+ 5.1.1
@@ -150,6 +152,16 @@
cglib
${cglib.version}
+
+ tech.powerjob
+ powerjob-client
+ ${powerjob.version}
+
+
+ tech.powerjob
+ powerjob-worker
+ ${powerjob.version}
+