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} +