diff --git a/mes/hd/nladmin-system/pom.xml b/mes/hd/nladmin-system/pom.xml index 99d69a25..49633bea 100644 --- a/mes/hd/nladmin-system/pom.xml +++ b/mes/hd/nladmin-system/pom.xml @@ -232,6 +232,12 @@ ${mysql.version} + + com.oracle.database.jdbc + ojdbc5 + 11.2.0.4 + + com.microsoft.sqlserver mssql-jdbc diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/config/DataBaseConfig.java b/mes/hd/nladmin-system/src/main/java/org/nl/config/DataBaseConfig.java index 1bfb4c82..ae0b2ec5 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/config/DataBaseConfig.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/config/DataBaseConfig.java @@ -1,21 +1,93 @@ package org.nl.config; +import cn.hutool.core.util.StrUtil; import com.alibaba.druid.pool.DruidDataSource; import lombok.extern.slf4j.Slf4j; +import org.nl.wms.common.DataTypeEnum; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import javax.sql.DataSource; +import java.sql.DriverManager; +import java.sql.SQLException; @Configuration @Slf4j public class DataBaseConfig { + @Value("${erp.oracle.enabled}") + private boolean oracleIsConnect; + @Value("${erp.oracle.jdbcurl}") + private String oracleJdbcUrl; + @Value("${erp.oracle.username}") + private String oracleUserName; + @Value("${erp.oracle.password}") + private String oraclePassword; + @Primary @Bean(name = "dataSource") @ConfigurationProperties(prefix = "spring.datasource.druid") public DataSource dataSource() { return new DruidDataSource(); } + + @Bean(name = "dataSource1") + @ConditionalOnExpression("${erp.oracle.enabled:true}") + public DataSource dataSource1() { + System.out.println("是否连接oracle:"+oracleIsConnect); + System.out.println("erp.oracle.jdbcurl:"+oracleJdbcUrl); + System.out.println("erp.oracle.username:"+oracleUserName); + System.out.println("erp.oracle.password:"+oraclePassword); + log.info("是否连接oracle:"+oracleIsConnect); + log.info("erp.oracle.jdbcurl:"+oracleJdbcUrl); + log.info("erp.oracle.username:"+oracleUserName); + log.info("erp.oracle.password:"+oraclePassword); + + String jdbcUrl = oracleJdbcUrl; + String userName = oracleUserName; + String password =oraclePassword; + + DruidDataSource druidDataSource = new DruidDataSource(); + String className; + try { + className = DriverManager.getDriver(jdbcUrl.trim()).getClass().getName(); + } catch (SQLException e) { + throw new RuntimeException("Get class name error: =" + jdbcUrl); + } + if (StrUtil.isEmpty(className)) { + DataTypeEnum dataTypeEnum = DataTypeEnum.urlOf(jdbcUrl); + if (null == dataTypeEnum) { + throw new RuntimeException("Not supported data type: jdbcUrl=" + jdbcUrl); + } + druidDataSource.setDriverClassName(dataTypeEnum.getDriver()); + } else { + druidDataSource.setDriverClassName(className); + } + + + druidDataSource.setUrl(jdbcUrl); + druidDataSource.setUsername(userName); + druidDataSource.setPassword(password); + // 配置获取连接等待超时的时间 + druidDataSource.setMaxWait(3000); + // 配置初始化大小、最小、最大 + druidDataSource.setInitialSize(5); + druidDataSource.setMinIdle(5); + druidDataSource.setMaxActive(10); + + // 如果链接出现异常则直接判定为失败而不是一直重试 + druidDataSource.setBreakAfterAcquireFailure(true); + try { + druidDataSource.init(); + } catch (SQLException e) { + log.error("Exception during pool initialization", e); + throw new RuntimeException(e.getMessage()); + } + + return druidDataSource; + } + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/WebServiceUtil.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/WebServiceUtil.java index 77bbe228..be8c98e9 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/WebServiceUtil.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/WebServiceUtil.java @@ -1,6 +1,7 @@ package org.nl.wms; import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; import java.io.BufferedReader; import java.io.InputStream; @@ -17,6 +18,7 @@ import java.util.Map; * @author zds 2018-12-27 16:33:50 * */ +@Slf4j public class WebServiceUtil { /** * @@ -63,8 +65,8 @@ public class WebServiceUtil { int responseCode = connection.getResponseCode(); String ret="默认值"; - if(200 == responseCode){//表示服务端响应成功 - + if(200 == responseCode){//表示服务端响应成功 + log.info("请求成功!"); //获取当前连接请求返回的数据流 InputStream is = connection.getInputStream(); @@ -98,6 +100,7 @@ public class WebServiceUtil { connection.disconnect(); } os.close(); + log.info("返回参数ret为:"+ret); return ret; // return result; } @@ -127,7 +130,7 @@ public class WebServiceUtil { sb.append(""); sb.append(""); sb.append(""); - System.out.println("getXML发送数据-----------------"+sb.toString()); + log.info("getXML组织参数为-----------------"+sb.toString()); return sb.toString(); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/MaterialbaseController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/MaterialbaseController.java index f2de0baf..aac23bc7 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/MaterialbaseController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/MaterialbaseController.java @@ -3,9 +3,10 @@ package org.nl.wms.basedata.master.rest; import cn.hutool.core.map.MapUtil; +import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; - import lombok.RequiredArgsConstructor; +import lombok.RequiredArgsConstructor; import org.nl.common.anno.Log; import lombok.extern.slf4j.Slf4j; import org.nl.wms.basedata.master.constant.MaterOptTypeEnum; @@ -90,9 +91,8 @@ public class MaterialbaseController { @Log("物料同步") @ApiOperation("物料同步") //@PreAuthorize("@el.check('materialtype:list')") - public ResponseEntity synchronize(@RequestBody Map whereJson) { - materialBaseService.synchronize(whereJson); - return new ResponseEntity<>(HttpStatus.OK); + public ResponseEntity synchronize(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(materialBaseService.synchronize(whereJson), HttpStatus.OK); } @Log("查询产品系列类型") diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/MaterialbaseService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/MaterialbaseService.java index 2f01466b..50283c0e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/MaterialbaseService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/MaterialbaseService.java @@ -89,7 +89,7 @@ public interface MaterialbaseService { */ JSONObject getMaterOptType(String materOpt_code); - void synchronize(Map whereJson); + JSONObject synchronize(JSONObject whereJson); JSONArray getProductSeries(String parent_class_id); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/MaterialbaseServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/MaterialbaseServiceImpl.java index 0329f2c9..58e8045b 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/MaterialbaseServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/MaterialbaseServiceImpl.java @@ -10,14 +10,16 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; - import lombok.RequiredArgsConstructor; +import lombok.RequiredArgsConstructor; +import org.json.XML; import org.nl.common.anno.Log; import lombok.extern.slf4j.Slf4j; import org.nl.modules.common.exception.BadRequestException; - import org.nl.common.utils.SecurityUtils; +import org.nl.common.utils.SecurityUtils; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.WqlUtil; +import org.nl.wms.WebServiceUtil; import org.nl.wms.basedata.master.constant.MaterOptTypeEnum; import org.nl.wms.basedata.master.service.ClassstandardService; import org.nl.wms.basedata.master.service.MaterialbaseService; @@ -213,9 +215,97 @@ public class MaterialbaseServiceImpl implements MaterialbaseService { } @Override - public void synchronize(Map whereJson) { - /* wmsToErpService.getClassInfo(null); - wmsToErpService.getMaterialInfo(null);*/ + @Transactional(rollbackFor = Exception.class) + public JSONObject synchronize(JSONObject form) { + log.info("导入方法开始"); + JSONObject result = new JSONObject(); + + String url = "http://192.168.0.82:8000/sap/bc/srt/rfc/sap/z_sd0002_send_mat_md/800/z_sd0002_send_mat_md/binding"; + String method = "ZSd0002SendMatMd"; + String bill_code1 = form.getString("bill_code1"); + String bill_code2 = form.getString("bill_code2"); + HashMap map = new HashMap(); + map.put("MatnrFr", bill_code1); + map.put("MatnrTo", bill_code2); + //非必填字段 + JSONObject ZfmGetSoResponse = null; + try { + //String response = WebServiceUtil.process(url, method, map); + String response = "24026697L软管外丝直接\\C46500\\S3/16*1/4M\\URGJ00124TH2023-03-01KDEALBVGCXKDEALBVGCZ009M2401KG0.01.0KG20X24026697L201200PCNORM201224026697L204000PCNORM24026697L206000PCNORM206024026697L220000PCNORM24026697L201224026697L204024026697L206024026697L220024026697L0000000000077876000000000010S01CHAR300类别美标软管管件X24026697L0000000000077876000000000011S02CHAR300牌号C46500X24026697L0000000000077876000000000012S03CHAR300规格S3/16*1/4MX24026697L0000000000077876000000000014S05CHAR300形状软管外丝直接X24026697L0000000000077876000000000015S06CHAR300标准URGJX24026697L0000000000077876000000000016S07CHAR300图号URGJ00124THX24026697L0000000000077876000000000017S08CHAR300监管性质保税来料X24026697L0000000000077876000000000020S11CHAR300客户牌号(下单时输入)24026697L0000000000077876000000000019S10CHAR300附加说明(下单时输入)24026697L0000000000077876000000000102S13CHAR300铜管内部牌号黄铜管件-黄铜管件24026697LKG1124026697LPC19125024026697L2012101PC1000.024026697S0010PC1000.024026697L2012101PC1000.035000715L9000KG15.1724026697L2060101PC1000.024026697S0010KG15.1724026697L2060101PC1000.035000715L9000KG15.1724026697L2060501PC1.024026697S0010KG15.1724026697L2060501PC1.035000715L9000KG15.17I000共输出1 条物料数据000000"; + JSONObject ret = JSONObject.parseObject(XML.toJSONObject(response).toString()); + System.out.println("getXML返回数据-----------------" + ret.toString()); + JSONObject Envelope = ret.getJSONObject("soap-env:Envelope"); + JSONObject Body = Envelope.getJSONObject("soap-env:Body"); + ZfmGetSoResponse = Body.getJSONObject("n0:ZSd0002SendMatMdResponse"); + } catch (Exception e) { + e.printStackTrace(); + } + + JSONObject TZtsalesorder = ZfmGetSoResponse.getJSONObject("Out"); + JSONObject TMara = TZtsalesorder.getJSONObject("TMara"); + JSONArray rows = TMara.getJSONArray("item"); + + for (int i = 0; i < rows.size(); i++) { + JSONObject row = rows.getJSONObject(i); + String Matnr = row.getString("Matnr").replaceAll("^(0+)", ""); + //查询是否存在该物料 + JSONObject mater_jo = WQLObject.getWQLObject("md_me_materialbase").query("material_code = '" + Matnr + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(mater_jo)) { + mater_jo = new JSONObject(); + mater_jo.put("material_id", IdUtil.getSnowflake(1, 1).nextId()); + mater_jo.put("material_code", Matnr); + mater_jo.put("material_name", row.getString("Maktx")); + mater_jo.put("material_model", row.getString("Mtart")); + String unit_code = row.getString("Meins"); + JSONObject unit_jo = WQLObject.getWQLObject("md_pb_measureunit").query("unit_name = '" + unit_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(unit_jo)) { + throw new BadRequestException("未查询到该物料对应的单位信息:" + unit_code); + } + mater_jo.put("base_unit_id", unit_jo.getString("measure_unit_id")); + JSONObject class_jo = WQLObject.getWQLObject("md_pb_classstandard").query("class_code = '" + row.getString("Mtart") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(class_jo)) { + throw new BadRequestException("未查询到该物料对应的基础类别信息:" + row.getString("Mtart")); + } + mater_jo.put("material_type_id", class_jo.getString("class_id")); + mater_jo.put("create_id", SecurityUtils.getCurrentUserId()); + mater_jo.put("create_name", SecurityUtils.getCurrentNickName()); + mater_jo.put("create_time", DateUtil.now()); + mater_jo.put("update_optid", SecurityUtils.getCurrentUserId()); + mater_jo.put("update_optname", SecurityUtils.getCurrentNickName()); + mater_jo.put("update_time", DateUtil.now()); + mater_jo.put("is_used_time", DateUtil.now()); + mater_jo.put("is_used", "1"); + mater_jo.put("is_delete", "0"); + WQLObject.getWQLObject("md_me_materialbase").insert(mater_jo); + } else { + mater_jo.put("material_code", Matnr); + mater_jo.put("material_name", row.getString("Maktx")); + mater_jo.put("material_model", row.getString("Mtart")); + String unit_code = row.getString("Meins"); + JSONObject unit_jo = WQLObject.getWQLObject("md_pb_measureunit").query("unit_name = '" + unit_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(unit_jo)) { + throw new BadRequestException("未查询到该物料对应的单位信息:" + unit_code); + } + mater_jo.put("base_unit_id", unit_jo.getString("measure_unit_id")); + JSONObject class_jo = WQLObject.getWQLObject("md_pb_classstandard").query("class_code = '" + row.getString("Mtart") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(class_jo)) { + throw new BadRequestException("未查询到该物料对应的基础类别信息:" + row.getString("Mtart")); + } + mater_jo.put("material_type_id", class_jo.getString("class_id")); + mater_jo.put("create_id", SecurityUtils.getCurrentUserId()); + mater_jo.put("create_name", SecurityUtils.getCurrentNickName()); + mater_jo.put("create_time", DateUtil.now()); + mater_jo.put("update_optid", SecurityUtils.getCurrentUserId()); + mater_jo.put("update_optname", SecurityUtils.getCurrentNickName()); + mater_jo.put("update_time", DateUtil.now()); + mater_jo.put("is_used_time", DateUtil.now()); + mater_jo.put("is_used", "1"); + mater_jo.put("is_delete", "0"); + WQLObject.getWQLObject("md_me_materialbase").update(mater_jo); + } + } + result.put("message", "导入成功!一共导入:" + rows.size() + "条数据!"); + return new JSONObject(); } @Override diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/common/DataTypeEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/common/DataTypeEnum.java new file mode 100644 index 00000000..8a8f8e8b --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/common/DataTypeEnum.java @@ -0,0 +1,140 @@ +/* + * << + * Davinci + * == + * Copyright (C) 2016 - 2019 EDP + * == + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * >> + * + */ + +package org.nl.wms.common; +import lombok.extern.slf4j.Slf4j; + +/** + * @author / + */ +@Slf4j +@SuppressWarnings({"unchecked","all"}) +public enum DataTypeEnum { + + /** mysql */ + MYSQL("mysql", "mysql", "com.mysql.jdbc.Driver", "`", "`", "'", "'"), + + /** oracle */ + ORACLE("oracle", "oracle", "oracle.jdbc.driver.OracleDriver", "\"", "\"", "\"", "\""), + + /** sql server */ + SQLSERVER("sqlserver", "sqlserver", "com.microsoft.sqlserver.jdbc.SQLServerDriver", "\"", "\"", "\"", "\""), + + /** h2 */ + H2("h2", "h2", "org.h2.Driver", "`", "`", "\"", "\""), + + /** phoenix */ + PHOENIX("phoenix", "hbase phoenix", "org.apache.phoenix.jdbc.PhoenixDriver", "", "", "\"", "\""), + + /** mongo */ + MONGODB("mongo", "mongodb", "mongodb.jdbc.MongoDriver", "`", "`", "\"", "\""), + + /** sql4es */ + ELASTICSEARCH("sql4es", "elasticsearch", "nl.anchormen.sql4es.jdbc.ESDriver", "", "", "'", "'"), + + /** presto */ + PRESTO("presto", "presto", "com.facebook.presto.jdbc.PrestoDriver", "", "", "\"", "\""), + + /** moonbox */ + MOONBOX("moonbox", "moonbox", "moonbox.jdbc.MbDriver", "`", "`", "`", "`"), + + /** cassandra */ + CASSANDRA("cassandra", "cassandra", "com.github.adejanovski.cassandra.jdbc.CassandraDriver", "", "", "'", "'"), + + /** click house */ + CLICKHOUSE("clickhouse", "clickhouse", "ru.yandex.clickhouse.ClickHouseDriver", "", "", "\"", "\""), + + /** kylin */ + KYLIN("kylin", "kylin", "org.apache.kylin.jdbc.Driver", "\"", "\"", "\"", "\""), + + /** vertica */ + VERTICA("vertica", "vertica", "com.vertica.jdbc.Driver", "", "", "'", "'"), + + /** sap */ + HANA("sap", "sap hana", "com.sap.db.jdbc.Driver", "", "", "'", "'"), + + /** impala */ + IMPALA("impala", "impala", "com.cloudera.impala.jdbc41.Driver", "", "", "'", "'"); + + private String feature; + private String desc; + private String driver; + private String keywordPrefix; + private String keywordSuffix; + private String aliasPrefix; + private String aliasSuffix; + + private static final String JDBC_URL_PREFIX = "jdbc:"; + + DataTypeEnum(String feature, String desc, String driver, String keywordPrefix, String keywordSuffix, String aliasPrefix, String aliasSuffix) { + this.feature = feature; + this.desc = desc; + this.driver = driver; + this.keywordPrefix = keywordPrefix; + this.keywordSuffix = keywordSuffix; + this.aliasPrefix = aliasPrefix; + this.aliasSuffix = aliasSuffix; + } + + public static DataTypeEnum urlOf(String jdbcUrl) { + String url = jdbcUrl.toLowerCase().trim(); + for (DataTypeEnum dataTypeEnum : values()) { + if (url.startsWith(JDBC_URL_PREFIX + dataTypeEnum.feature)) { + try { + Class> aClass = Class.forName(dataTypeEnum.getDriver()); + if (null == aClass) { + throw new RuntimeException("Unable to get driver instance for jdbcUrl: " + jdbcUrl); + } + } catch (ClassNotFoundException e) { + throw new RuntimeException("Unable to get driver instance: " + jdbcUrl); + } + return dataTypeEnum; + } + } + return null; + } + + public String getFeature() { + return feature; + } + + public String getDesc() { + return desc; + } + + public String getDriver() { + return driver; + } + + public String getKeywordPrefix() { + return keywordPrefix; + } + + public String getKeywordSuffix() { + return keywordSuffix; + } + + public String getAliasPrefix() { + return aliasPrefix; + } + + public String getAliasSuffix() { + return aliasSuffix; + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/sap/rest/WmsToSapController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/sap/rest/WmsToSapController.java new file mode 100644 index 00000000..1e846f08 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/sap/rest/WmsToSapController.java @@ -0,0 +1,57 @@ + +package org.nl.wms.ext.sap.rest; + + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.anno.Log; +import org.nl.wms.ext.acs.service.WmsToAcsService; +import org.nl.wms.ext.sap.service.WmsToSapService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +/** + * @author zhouz + * @date 2021-07-21 + **/ +@RestController +@RequiredArgsConstructor +@Api(tags = "wms发送sap") +@RequestMapping("/api/sap/") +@Slf4j +public class WmsToSapController { + private final WmsToSapService wmsToSapService; + + @PostMapping("/getMater") + @Log("获取物料基础信息") + @ApiOperation("获取物料基础信息") + public ResponseEntity getMater(@RequestBody JSONObject form) { + return new ResponseEntity<>(wmsToSapService.getMater(form), HttpStatus.OK); + } + + @PostMapping("/getSaleOrder") + @Log("获取销售订单") + @ApiOperation("获取销售订单") + public ResponseEntity getSaleOrder(@RequestBody JSONObject form) { + return new ResponseEntity<>(wmsToSapService.getSaleOrder(form), HttpStatus.OK); + } + + @PostMapping("/getDeliveryNote") + @Log("获取物料基础信息") + @ApiOperation("获取物料基础信息") + public ResponseEntity getDeliveryNote(@RequestBody JSONObject form) { + return new ResponseEntity<>(wmsToSapService.getDeliveryNote(form), HttpStatus.OK); + } + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/WmsToSapService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/WmsToSapService.java new file mode 100644 index 00000000..af616dfd --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/WmsToSapService.java @@ -0,0 +1,42 @@ +package org.nl.wms.ext.sap.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +import java.util.Map; + +/** + * + */ +public interface WmsToSapService { + /** + * WMS客户端--->SAP服务端 + * 获取物料信息 + * + * @param form + * @return JSONObject + */ + + JSONObject getMater(JSONObject form); + + /** + * WMS客户端--->SAP服务端 + * 获取销售订单 + * + * @param form + * @return JSONObject + */ + + JSONObject getSaleOrder(JSONObject form); + + /** + * WMS客户端--->SAP服务端 + * 获取交货单 + * + * @param form + * @return JSONObject + */ + + JSONObject getDeliveryNote(JSONObject form); + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/impl/WmsToSapServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/impl/WmsToSapServiceImpl.java new file mode 100644 index 00000000..d54eac76 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/impl/WmsToSapServiceImpl.java @@ -0,0 +1,323 @@ +package org.nl.wms.ext.sap.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.github.pagehelper.util.StringUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.json.XML; +import org.nl.common.utils.SecurityUtils; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.exception.WDKException; +import org.nl.wms.WebServiceUtil; +import org.nl.wms.ext.sap.service.WmsToSapService; +import org.springframework.stereotype.Service; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; + +@Service +@RequiredArgsConstructor +@Slf4j +public class WmsToSapServiceImpl implements WmsToSapService { + + @Override + public JSONObject getMater(JSONObject form) { + return null; + } + + public static String getDateStr(int day) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + Date todayDate = new Date(); + long beforeTime = (todayDate.getTime() / 1000) - 60 * 60 * 24 * day; + todayDate.setTime(beforeTime * 1000); + String beforeDate = formatter.format(todayDate); + return beforeDate; + } + + @Override + public JSONObject getSaleOrder(JSONObject form) { + log.info("导入方法开始"); + JSONObject result = new JSONObject(); + + String url = "http://192.168.0.82:8000/sap/bc/srt/rfc/sap/zfg_ecc_to_zhwl/800/zfg_ecc_to_zhwl/binding"; + String method = "ZfmGetSo"; + + if (StrUtil.equals(form.getString("is_auto"), "1")) { + form.put("IErdatFrm", getDateStr(1)); + form.put("IErdatTo", getDateStr(0)); + form.put("IVbeln", ""); // 非必填字段 + } + + String bill_code = form.getString("bill_code"); + String date_begin = form.getString("date_begin"); + String date_end = form.getString("date_end"); + + HashMap map = new HashMap<>(); + map.put("IVbeln", ""); + map.put("IErdatFrm", ""); + map.put("IErdatTo", ""); + if (StrUtil.isNotEmpty(bill_code)) { + map.put("IVbeln", bill_code); + } + if (StrUtil.isNotEmpty(date_begin)) { + map.put("IErdatFrm", date_begin); + } + if (StrUtil.isNotEmpty(date_end)) { + map.put("IErdatTo", date_end); + } + + JSONObject ZfmGetSoResponse = null; + try { + String response = WebServiceUtil.process(url, method, map); + JSONObject ret = JSONObject.parseObject(XML.toJSONObject(response).toString()); + log.info("getXML发送数据-----------------" + ret.toString()); + JSONObject Envelope = ret.getJSONObject("soap-env:Envelope"); + JSONObject Body = Envelope.getJSONObject("soap-env:Body"); + ZfmGetSoResponse = Body.getJSONObject("n0:ZfmGetSoResponse"); + String check = ZfmGetSoResponse.getString("OResultcode"); + if ("1005".equals(check)) { + System.out.println(ZfmGetSoResponse.getString("OResultmsg")); + throw new BadRequestException("sap返回:" + ZfmGetSoResponse.getString("OResultmsg")); + } else if (!"1000".equals(check)) { + throw new BadRequestException("sap返回:" + ZfmGetSoResponse.getString("OResultmsg")); + } + } catch (Exception e) { + e.printStackTrace(); + } + + JSONObject TZtsalesorder = ZfmGetSoResponse.getJSONObject("TZtsalesorder"); + log.info("TZtsalesorder为:" + TZtsalesorder.toString()); + JSONArray item = TZtsalesorder.getJSONArray("item"); + + if (TZtsalesorder == null || item == null || item.size() == 0) { + result.put("message", "sap无可同步数据"); + return result; + } + + int err_num = 0; + for (int i = 0; i < item.size(); i++) { + JSONObject row = item.getJSONObject(i); + boolean need_update = false; + JSONObject sale_jo = WQLObject.getWQLObject("pcs_sale_order").query("sale_code = '" + row.getString("Vbeln") + "' AND seq_no = '" + row.getString("Posnr") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(sale_jo)) { + sale_jo = new JSONObject(); + sale_jo.put("sale_id", IdUtil.getSnowflake(1, 1).nextId()); + } else { + need_update = true; + if (!sale_jo.getString("status").equals("10")) { + continue; + } + } + sale_jo.put("is_success", "1"); + sale_jo.put("sale_code", row.getString("Vbeln")); + sale_jo.put("seq_no", row.getString("Posnr")); + sale_jo.put("sale_type", row.getString("Auart")); + String material_code = row.getString("Matnr").replaceAll("^(0+)", ""); + //获取物料对应的物料标识 + JSONObject mater_jo = WQLObject.getWQLObject("MD_ME_MaterialBase").query("material_code = '" + material_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(mater_jo)) { + sale_jo.put("material_id", "0"); + sale_jo.put("is_success", "0"); + sale_jo.put("remark", "未查询到该销售订单对应的物料主数据:" + material_code); + err_num++; + } else { + String material_id = mater_jo.getString("material_id"); + sale_jo.put("material_id", material_id); + } + sale_jo.put("status", "10"); + sale_jo.put("sale_qty", row.getString("Kwmeng")); + sale_jo.put("produce_seq", "1"); + String cust_code = row.getString("Kunnr"); + JSONObject cust_jo = WQLObject.getWQLObject("md_cs_customerbase").query("cust_code = '" + cust_code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(cust_jo)) { + sale_jo.put("cust_id", cust_jo.getString("cust_id")); + sale_jo.put("cust_code", cust_jo.getString("cust_code")); + sale_jo.put("cust_name", cust_jo.getString("cust_name")); + } else { + sale_jo.put("is_success", "0"); + sale_jo.put("remark", "未查询到该销售订单对应的客户信息:" + cust_code); + err_num++; + } + String unit_code = row.getString("Vrkme"); + JSONObject unit_jo = WQLObject.getWQLObject("md_pb_measureunit").query("unit_name = '" + unit_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(unit_jo)) { + sale_jo.put("qty_unit_id", "0"); + sale_jo.put("remark", "未查询到该销售订单对应的单位信息:" + unit_code); + err_num++; + } else { + sale_jo.put("qty_unit_id", unit_jo.getString("measure_unit_id")); + } + sale_jo.put("plandeliver_date", row.getString("Edaut")); + sale_jo.put("create_id", SecurityUtils.getCurrentUserId()); + sale_jo.put("create_name", SecurityUtils.getCurrentNickName()); + sale_jo.put("create_time", DateUtil.now()); + sale_jo.put("update_optid", SecurityUtils.getCurrentUserId()); + sale_jo.put("update_optname", SecurityUtils.getCurrentNickName()); + sale_jo.put("update_time", DateUtil.now()); + + if (need_update) { + WQLObject.getWQLObject("pcs_sale_order").update(sale_jo); + } else { + WQLObject.getWQLObject("pcs_sale_order").insert(sale_jo); + } + + + } + if (err_num > 0) { + result.put("message", "导入成功!一共导入:" + item.size() + "条数据,其中有误数据:" + err_num + "条!"); + } else { + result.put("message", "导入成功!一共导入:" + item.size() + "条数据!"); + } + return result; + } + + @Override + public JSONObject getDeliveryNote(JSONObject form) { + JSONObject result = new JSONObject(); + + String url = "http://192.168.0.82:8000/sap/bc/srt/rfc/sap/zfg_ecc_to_zhwl/800/zfg_ecc_to_zhwl/binding"; + String method = "ZfmGetDnZjwl"; + + if (StrUtil.equals(form.getString("is_auto"), "1")) { + form.put("IErdatFrm", getDateStr(1)); + form.put("IErdatTo", getDateStr(0)); + form.put("IVbeln", ""); // 非必填字段 + } + + String bill_code = form.getString("bill_code"); + String date_begin = form.getString("date_begin"); + String date_end = form.getString("date_end"); + HashMap map = new HashMap<>(); + map.put("IVbeln", ""); + map.put("IErdatFrm", ""); + map.put("IErdatTo", ""); + if (StrUtil.isNotEmpty(bill_code)) { + map.put("IVbeln", bill_code); + } + if (StrUtil.isNotEmpty(date_begin)) { + map.put("IErdatFrm", date_begin); + } + if (StrUtil.isNotEmpty(date_end)) { + map.put("IErdatTo", date_end); + } + + JSONObject ZfmGetSoResponse = null; + try { + String response = WebServiceUtil.process(url, method, map); + JSONObject ret = JSONObject.parseObject(XML.toJSONObject(response).toString()); + log.info("getXML发送数据-----------------" + ret.toString()); + JSONObject Envelope = ret.getJSONObject("soap-env:Envelope"); + JSONObject Body = Envelope.getJSONObject("soap-env:Body"); + ZfmGetSoResponse = Body.getJSONObject("n0:ZfmGetDnZjwlResponse"); + String check = ZfmGetSoResponse.getString("OResultcode"); + if ("1005".equals(check)) { + System.out.println(ZfmGetSoResponse.getString("OResultmsg")); + throw new BadRequestException("sap返回:" + ZfmGetSoResponse.getString("OResultmsg")); + } else if (!"1000".equals(check)) { + throw new BadRequestException("sap返回:" + ZfmGetSoResponse.getString("OResultmsg")); + } + } catch (Exception e) { + e.printStackTrace(); + } + + log.info(ZfmGetSoResponse.toString()); + JSONObject TZtsalesorder = ZfmGetSoResponse.getJSONObject("TZtdn"); + log.info("TZtsalesorder数据为:-------------------" + TZtsalesorder.toString()); + JSONArray item = TZtsalesorder.getJSONArray("item"); + log.info(item.size() + ""); + + if (TZtsalesorder == null || item == null || item.size() == 0) { + result.put("message", "sap无可同步数据"); + return result; + } + + int err_num = 0; + for (int i = 0; i < item.size(); i++) { + boolean need_update = false; + JSONObject row = item.getJSONObject(i); + JSONObject deliver_jo = WQLObject.getWQLObject("pcs_delivery_order").query("deliver_code = '" + row.getString("Vbeln") + "' AND seq_no = '" + row.getString("Posnr") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(deliver_jo)) { + deliver_jo = new JSONObject(); + deliver_jo.put("deliver_id", IdUtil.getSnowflake(1, 1).nextId()); + } else { + need_update = true; + if (!deliver_jo.getString("status").equals("10")) { + continue; + } + } + deliver_jo.put("deliver_code", row.getString("Vbeln")); + deliver_jo.put("seq_no", row.getString("Posnr")); + deliver_jo.put("deliver_type", row.getString("Lfart")); + String material_code = row.getString("Matnr").replaceAll("^(0+)", ""); + //获取物料对应的物料标识 + JSONObject mater_jo = WQLObject.getWQLObject("MD_ME_MaterialBase").query("material_code = '" + material_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(mater_jo)) { + deliver_jo.put("material_id", "0"); + deliver_jo.put("is_success", "0"); + deliver_jo.put("remark", "未查询到该交货单对应的物料主数据:" + material_code); + err_num++; + } else { + String material_id = mater_jo.getString("material_id"); + deliver_jo.put("material_id", material_id); + } + deliver_jo.put("status", "10"); + deliver_jo.put("delivery_qty", row.getString("Lfimg")); + String cust_code = row.getString("Kunnr"); + JSONObject cust_jo = WQLObject.getWQLObject("md_cs_customerbase").query("cust_code = '" + cust_code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(cust_jo)) { + deliver_jo.put("cust_id", cust_jo.getString("cust_id")); + deliver_jo.put("cust_code", cust_jo.getString("cust_code")); + deliver_jo.put("cust_name", cust_jo.getString("cust_name")); + } else { + deliver_jo.put("is_success", "0"); + deliver_jo.put("remark", "未查询到该交货单对应的客户信息:" + cust_code); + err_num++; + } + String unit_code = row.getString("Vrkme"); + JSONObject unit_jo = WQLObject.getWQLObject("md_pb_measureunit").query("unit_name = '" + unit_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(unit_jo)) { + deliver_jo.put("qty_unit_id", "0"); + deliver_jo.put("remark", "未查询到该交货单对应的单位信息:" + unit_code); + err_num++; + } else { + deliver_jo.put("qty_unit_id", unit_jo.getString("measure_unit_id")); + } + String sale_code = row.getString("Vgbel"); + String seq_no = row.getString("Vgpos"); + JSONObject sale_jo = WQLObject.getWQLObject("pcs_sale_order").query("sale_code = '" + sale_code + "' AND seq_no = '" + seq_no + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(sale_jo)) { + deliver_jo.put("remark", "未查询到该交货单对应的销售订单:" + unit_code + "行号为:" + seq_no); + deliver_jo.put("is_success", "0"); + } else { + deliver_jo.put("sale_id", sale_jo.getString("sale_id")); + deliver_jo.put("sale_code", sale_jo.getString("sale_code")); + deliver_jo.put("sale_seq_no", sale_jo.getString("seq_no")); + } + deliver_jo.put("create_id", SecurityUtils.getCurrentUserId()); + deliver_jo.put("create_name", SecurityUtils.getCurrentNickName()); + deliver_jo.put("create_time", DateUtil.now()); + deliver_jo.put("update_optid", SecurityUtils.getCurrentUserId()); + deliver_jo.put("update_optname", SecurityUtils.getCurrentNickName()); + deliver_jo.put("update_time", DateUtil.now()); + if (need_update) { + WQLObject.getWQLObject("pcs_delivery_order").update(deliver_jo); + } else { + WQLObject.getWQLObject("pcs_delivery_order").insert(deliver_jo); + } + } + if (err_num > 0) { + result.put("message", "导入成功!一共导入:" + item.size() + "条数据,其中有误数据:" + err_num + "条!"); + } else { + result.put("message", "导入成功!一共导入:" + item.size() + "条数据!"); + } + return result; + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/sap/wql/QERP.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/sap/wql/QERP.wql new file mode 100644 index 00000000..01464b6b --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/sap/wql/QERP.wql @@ -0,0 +1,160 @@ +[交易说明] + 交易名: 库区分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + + + 输入.flag TYPEAS s_string + 输入.import_date1 TYPEAS s_string + 输入.import_date2 TYPEAS s_string + 输入.import_date3 TYPEAS s_string + 输入.import_date4 TYPEAS s_string + 输入.begin_time TYPEAS s_string + 输入.end_time TYPEAS s_string + + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + QUERY + SELECT + mater.* + FROM + V_SAP_ORG mater + WHERE 1=1 + OPTION 输入.import_date3 <> "" + (pp.UPDATED_DATE > to_date(输入.import_date3,'yyyy-mm-dd HH24:MI:SS') + OR + pp.CREATE_DATE > to_date(输入.import_date3,'yyyy-mm-dd HH24:MI:SS') + ) + ENDOPTION + OPTION 输入.begin_time <> "" + mater.EDIT_TIME >= to_date(输入.begin_time,'yyyy-mm-dd HH24:MI:SS') + ENDOPTION + OPTION 输入.end_time <> "" + mater.EDIT_TIME <= to_date(输入.end_time,'yyyy-mm-dd HH24:MI:SS') + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + * + FROM + ITEM + WHERE + (UPDATED_DATE > to_date(输入.import_date2,'yyyy-mm-dd HH24:MI:SS') + OR + CREATE_DATE > to_date(输入.import_date2,'yyyy-mm-dd HH24:MI:SS') + ) + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + pp.* + FROM + PURCHASE pp + WHERE 1=1 + OPTION 输入.import_date3 <> "" + (pp.UPDATED_DATE > to_date(输入.import_date3,'yyyy-mm-dd HH24:MI:SS') + OR + pp.CREATE_DATE > to_date(输入.import_date3,'yyyy-mm-dd HH24:MI:SS') + ) + ENDOPTION + OPTION 输入.begin_time <> "" + pp.CREATE_DATE >= to_date(输入.begin_time,'yyyy-mm-dd HH24:MI:SS') + ENDOPTION + OPTION 输入.end_time <> "" + pp.CREATE_DATE <= to_date(输入.end_time,'yyyy-mm-dd HH24:MI:SS') + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "4" + QUERY + SELECT + pp.* + FROM + SALE_OUT pp + WHERE 1=1 + + OPTION 输入.begin_time <> "" + pp.dbilldate >= 输入.begin_time + ENDOPTION + OPTION 输入.end_time <> "" + pp.dbilldate <= 输入.end_time + ENDOPTION + OPTION 输入.fbillflag <> "" + pp.fbillflag = 输入.fbillflag + ENDOPTION + OPTION 输入.vbillcode <> "" + pp.vbillcode like 输入.vbillcode + ENDOPTION + OPTION 输入.cmaterialvid <> "" + pp.cmaterialvid = 输入.cmaterialvid + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "5" + QUERY + SELECT + pp.* + FROM + PURCHASE_IN pp + WHERE 1=1 + OPTION 输入.import_date4 <> "" + pp.CREATIONTIME > 输入.import_date4 + ENDOPTION + OPTION 输入.begin_time <> "" + pp.CREATIONTIME >= 输入.begin_time + ENDOPTION + OPTION 输入.end_time <> "" + pp.CREATIONTIME <= 输入.end_time + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF + + + + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/impl/DeliveryOrderServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/impl/DeliveryOrderServiceImpl.java index f9e5707d..02f6cbb5 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/impl/DeliveryOrderServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/impl/DeliveryOrderServiceImpl.java @@ -50,12 +50,14 @@ public class DeliveryOrderServiceImpl implements DeliveryOrderService { String begin_time = MapUtil.getStr(whereJson, "begin_time"); String end_time = MapUtil.getStr(whereJson, "end_time"); String status = MapUtil.getStr(whereJson, "status"); + String is_success = MapUtil.getStr(whereJson, "is_success"); String product_series = ""; HashMap map = new HashMap<>(); map.put("flag", "1"); map.put("begin_time", begin_time); map.put("end_time", end_time); map.put("status", status); + map.put("is_success", is_success); if (StrUtil.isNotEmpty(material)) { map.put("material", "%" + material + "%"); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/impl/SaleOrderServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/impl/SaleOrderServiceImpl.java index e029b405..c9a0fc08 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/impl/SaleOrderServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/impl/SaleOrderServiceImpl.java @@ -50,12 +50,14 @@ public class SaleOrderServiceImpl implements SaleOrderService { String begin_time = MapUtil.getStr(whereJson, "begin_time"); String end_time = MapUtil.getStr(whereJson, "end_time"); String status = MapUtil.getStr(whereJson, "status"); + String is_success = MapUtil.getStr(whereJson, "is_success"); String product_series = ""; HashMap map = new HashMap<>(); map.put("flag", "1"); map.put("begin_time", begin_time); map.put("end_time", end_time); map.put("status", status); + map.put("is_success", is_success); if (StrUtil.isNotEmpty(sale_code)) { map.put("sale_code", "%" + sale_code + "%"); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/wql/PCS_DELIVERYORDER001.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/wql/PCS_DELIVERYORDER001.wql index 25c25dc8..998d8866 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/wql/PCS_DELIVERYORDER001.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/wql/PCS_DELIVERYORDER001.wql @@ -18,6 +18,7 @@ 输入.material TYPEAS s_string 输入.product_series TYPEAS f_string 输入.status TYPEAS s_string + 输入.is_success TYPEAS s_string 输入.begin_time TYPEAS s_string 输入.end_time TYPEAS s_string @@ -62,6 +63,9 @@ OPTION 输入.status <> "" deliveryorder.status = 输入.status ENDOPTION + OPTION 输入.is_success <> "" + deliveryorder.is_success = 输入.is_success + ENDOPTION OPTION 输入.product_series <> "" material.product_series in 输入.product_series ENDOPTION diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/wql/PCS_SALEORDER001.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/wql/PCS_SALEORDER001.wql index 7447c5d4..d505c657 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/wql/PCS_SALEORDER001.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/wql/PCS_SALEORDER001.wql @@ -18,6 +18,7 @@ 输入.material TYPEAS s_string 输入.product_series TYPEAS f_string 输入.status TYPEAS s_string + 输入.is_success TYPEAS s_string 输入.begin_time TYPEAS s_string 输入.end_time TYPEAS s_string @@ -62,6 +63,9 @@ OPTION 输入.status <> "" saleorder.status = 输入.status ENDOPTION + OPTION 输入.is_success <> "" + saleorder.is_success = 输入.is_success + ENDOPTION OPTION 输入.product_series <> "" material.product_series in 输入.product_series ENDOPTION diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/wql/pcs.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/wql/pcs.xls index 04d430db..50e861b1 100644 Binary files a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/wql/pcs.xls and b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/wql/pcs.xls differ diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoImportDeliverOrder.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoImportDeliverOrder.java new file mode 100644 index 00000000..ce7b740d --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoImportDeliverOrder.java @@ -0,0 +1,22 @@ +package org.nl.wms.sch.manage; + + +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.wms.ext.sap.service.WmsToSapService; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class AutoImportDeliverOrder { + private final WmsToSapService wmsToSapService; + + public void run() { + //通过ACS接口获取温度 + JSONObject form = new JSONObject(); + form.put("is_auto", "1"); + wmsToSapService.getDeliveryNote(form); + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoImportSaleOrder.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoImportSaleOrder.java new file mode 100644 index 00000000..46e74953 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoImportSaleOrder.java @@ -0,0 +1,27 @@ +package org.nl.wms.sch.manage; + + +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.ext.acs.service.WmsToAcsService; +import org.nl.wms.ext.sap.service.WmsToSapService; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class AutoImportSaleOrder { + private final WmsToSapService wmsToSapService; + + public void run() { + //通过ACS接口获取温度 + JSONObject form = new JSONObject(); + form.put("is_auto", "1"); + wmsToSapService.getSaleOrder(form); + } +} diff --git a/mes/qd/src/api/wms/ext/sap.js b/mes/qd/src/api/wms/ext/sap.js new file mode 100644 index 00000000..a30d3d35 --- /dev/null +++ b/mes/qd/src/api/wms/ext/sap.js @@ -0,0 +1,27 @@ +import request from '@/utils/request' + +export function getSaleOrder(data) { + return request({ + url: 'api/sap/getSaleOrder', + method: 'post', + data + }) +} + +export function getDeliveryNote(data) { + return request({ + url: 'api/sap/getDeliveryNote', + method: 'post', + data + }) +} + +export function getMater(data) { + return request({ + url: 'api/sap/getMater', + method: 'post', + data + }) +} + +export default { getSaleOrder, getDeliveryNote, getMater } diff --git a/mes/qd/src/views/wms/basedata/master/material/Dialog.vue b/mes/qd/src/views/wms/basedata/master/material/Dialog.vue new file mode 100644 index 00000000..85e5e7ab --- /dev/null +++ b/mes/qd/src/views/wms/basedata/master/material/Dialog.vue @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + 确认 + + + + + + + + diff --git a/mes/qd/src/views/wms/basedata/master/material/index.vue b/mes/qd/src/views/wms/basedata/master/material/index.vue index b63719ff..a0fa3b36 100644 --- a/mes/qd/src/views/wms/basedata/master/material/index.vue +++ b/mes/qd/src/views/wms/basedata/master/material/index.vue @@ -174,6 +174,7 @@ + @@ -184,6 +185,7 @@ import rrOperation from '@crud/RR.operation' import crudOperation from '@crud/CRUD.operation' import udOperation from '@crud/UD.operation' import pagination from '@crud/Pagination' +import Dialog from '@/views/wms/basedata/master/material/Dialog' import Treeselect, { LOAD_CHILDREN_OPTIONS } from '@riophae/vue-treeselect' import '@riophae/vue-treeselect/dist/vue-treeselect.css' import crudClassstandard from '@/api/wms/basedata/master/classstandard' @@ -227,7 +229,7 @@ export default { name: 'Materialbase', // 数据字典 dicts: ['is_used'], - components: { pagination, crudOperation, rrOperation, udOperation, Treeselect }, + components: { pagination, crudOperation, rrOperation, udOperation, Treeselect, Dialog }, mixins: [presenter(), header(), form(defaultForm), crud()], cruds() { return CRUD({ @@ -244,6 +246,7 @@ export default { classes1: [], classes2: [], classes3: [], + dialogShow: false, fullscreenLoading: false, measure_unit: [], productSeries: [], @@ -347,13 +350,7 @@ export default { }) }, synchronize() { - this.fullscreenLoading = true - crudMaterialbase.synchronize(this.crud.query).then(res => { - this.fullscreenLoading = false - this.crud.notify('同步成功!', CRUD.NOTIFICATION_TYPE.SUCCESS) - }).catch(() => { - this.fullscreenLoading = false - }) + this.dialogShow = true }, queryClassId() { const param = { diff --git a/mes/qd/src/views/wms/pcs/deliveryorder/Dialog.vue b/mes/qd/src/views/wms/pcs/deliveryorder/Dialog.vue new file mode 100644 index 00000000..d5e625c1 --- /dev/null +++ b/mes/qd/src/views/wms/pcs/deliveryorder/Dialog.vue @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + 确认 + + + + + + + + diff --git a/mes/qd/src/views/wms/pcs/deliveryorder/index.vue b/mes/qd/src/views/wms/pcs/deliveryorder/index.vue index 54c39ef9..8a254dae 100644 --- a/mes/qd/src/views/wms/pcs/deliveryorder/index.vue +++ b/mes/qd/src/views/wms/pcs/deliveryorder/index.vue @@ -12,7 +12,8 @@ label-suffix=":" > - + - + + + + + + - + + + 同步 + + - + - - - - - + + + + + {{ dict.label.PCS_DELIVER_TYPE[scope.row.deliver_type] }} - - + + {{ dict.label.PCS_DELI_STATUS[scope.row.status] }} - - - - - - - - - - - + + + + + + + + + + + + - + + + diff --git a/mes/qd/src/views/wms/pcs/saleorder/index.vue b/mes/qd/src/views/wms/pcs/saleorder/index.vue index 531dc4ae..d24e197e 100644 --- a/mes/qd/src/views/wms/pcs/saleorder/index.vue +++ b/mes/qd/src/views/wms/pcs/saleorder/index.vue @@ -62,14 +62,41 @@ placeholder="请选择" /> + + + + + - - + + + 同步 + + - + + @@ -122,7 +151,7 @@ import crudSaleOrder from '@/api/wms/pcs/saleOrder' import CRUD, { presenter, header, form, crud } from '@crud/crud' import rrOperation from '@crud/RR.operation' import crudOperation from '@crud/CRUD.operation' -import udOperation from '@crud/UD.operation' +import Dialog from '@/views/wms/pcs/saleorder/Dialog' import pagination from '@crud/Pagination' import Treeselect, {LOAD_CHILDREN_OPTIONS} from '@riophae/vue-treeselect' import '@riophae/vue-treeselect/dist/vue-treeselect.css' @@ -131,8 +160,8 @@ import crudClassstandard from '@/api/wms/basedata/master/classstandard' const defaultForm = { sale_id: null, sale_code: null, seq_no: null, sale_type: null, material_id: null, status: null, sale_qty: null, produce_seq: null, cust_id: null, qty_unit_id: null, plandeliver_date: null, create_id: null, create_name: null, create_time: null, update_optid: null, update_optname: null, update_time: null, cust_code: null, cust_name: null } export default { name: 'SaleOrder', - dicts: ['PCS_SALE_STATUS', 'PCS_SAL_TYPE'], - components: { pagination, crudOperation, rrOperation, udOperation, Treeselect }, + dicts: ['PCS_SALE_STATUS', 'PCS_SAL_TYPE', 'IS_OR_NOT'], + components: { pagination, crudOperation, rrOperation, Treeselect, Dialog }, mixins: [presenter(), header(), form(defaultForm), crud()], cruds() { return CRUD({ title: '销售订单', url: 'api/saleOrder', idField: 'sale_id', sort: 'sale_id,desc', @@ -148,10 +177,9 @@ export default { data() { return { classes3: [], + dialogShow: false, permission: { }, - rules: { - }, queryTypeOptions: [ { key: 'sale_code', display_name: '销售单号' } ] @@ -174,6 +202,9 @@ export default { }) }) }, + importin() { + this.dialogShow = true + }, buildTree(classes) { classes.forEach(data => { if (data.children) {