fix: 修复与mes对接
This commit is contained in:
@@ -32,6 +32,12 @@
|
|||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.httpcomponents</groupId>
|
||||||
|
<artifactId>httpclient</artifactId>
|
||||||
|
<version>4.5.13</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc -->
|
<!-- https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.microsoft.sqlserver</groupId>
|
<groupId>com.microsoft.sqlserver</groupId>
|
||||||
|
|||||||
@@ -195,6 +195,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
|||||||
* 10.一楼货梯送料
|
* 10.一楼货梯送料
|
||||||
* 11.新增包装输送线送料
|
* 11.新增包装输送线送料
|
||||||
* 12.新增包装输送线送料入库
|
* 12.新增包装输送线送料入库
|
||||||
|
* 13.成品入库
|
||||||
*/
|
*/
|
||||||
if (StrUtil.equals(type, "1")) {
|
if (StrUtil.equals(type, "1")) {
|
||||||
// 1.共挤线申请空盘: 调用空托盘出库处理类创建任务
|
// 1.共挤线申请空盘: 调用空托盘出库处理类创建任务
|
||||||
@@ -242,6 +243,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
|||||||
param.put("vehicle_type", vehicle_type);
|
param.put("vehicle_type", vehicle_type);
|
||||||
param.put("vehicle_code", vehicle_code);
|
param.put("vehicle_code", vehicle_code);
|
||||||
param.put("material_num", material_num);
|
param.put("material_num", material_num);
|
||||||
|
param.put("material_code", whereJson.getString("material_code"));
|
||||||
param.put("task_code", whereJson.getString("task_code"));
|
param.put("task_code", whereJson.getString("task_code"));
|
||||||
// 创建任务
|
// 创建任务
|
||||||
YqxCallMaterialTask taskBean = SpringContextHolder.getBean(YqxCallMaterialTask.class);
|
YqxCallMaterialTask taskBean = SpringContextHolder.getBean(YqxCallMaterialTask.class);
|
||||||
@@ -320,6 +322,17 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
|||||||
param.put("task_id", whereJson.getString("task_id"));
|
param.put("task_id", whereJson.getString("task_id"));
|
||||||
BZXSendMaterialTask taskBean = SpringContextHolder.getBean(BZXSendMaterialTask .class);
|
BZXSendMaterialTask taskBean = SpringContextHolder.getBean(BZXSendMaterialTask .class);
|
||||||
String task_id = taskBean.createTask(param);
|
String task_id = taskBean.createTask(param);
|
||||||
|
} else if (StrUtil.equals(type, "13")) {
|
||||||
|
// 13.成品入库
|
||||||
|
JSONObject param = new JSONObject();
|
||||||
|
param.put("point_code1", point_code);
|
||||||
|
param.put("vehicle_code", vehicle_code);
|
||||||
|
param.put("vehicle_type", vehicle_type);
|
||||||
|
param.put("qty", material_num);
|
||||||
|
param.put("material_code", whereJson.getString("material_code"));
|
||||||
|
param.put("task_code", whereJson.getString("task_code"));
|
||||||
|
CpSendMaterialTask taskBean = SpringContextHolder.getBean(CpSendMaterialTask.class);
|
||||||
|
String task_id = taskBean.createTask(param);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,8 +50,8 @@ public class WmsToMesController {
|
|||||||
@Log("任务反馈")
|
@Log("任务反馈")
|
||||||
@ApiOperation("任务反馈")
|
@ApiOperation("任务反馈")
|
||||||
@SaIgnore
|
@SaIgnore
|
||||||
public ResponseEntity<Object> taskFeedback(JSONObject param) {
|
public ResponseEntity<Object> taskFeedback(JSONObject param, String finterfaceid) {
|
||||||
wmsToMesService.taskFeedback(param);
|
wmsToMesService.taskFeedback(param, finterfaceid);
|
||||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,5 +19,5 @@ public interface WmsToMesService {
|
|||||||
*/
|
*/
|
||||||
void getUnitInfoForMes();
|
void getUnitInfoForMes();
|
||||||
|
|
||||||
void taskFeedback(JSONObject param);
|
void taskFeedback(JSONObject param, String finterfaceid);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,16 +7,11 @@ import com.alibaba.fastjson.JSONObject;
|
|||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.nl.modules.common.exception.BadRequestException;
|
import org.nl.modules.common.exception.BadRequestException;
|
||||||
import org.nl.modules.common.utils.SecurityUtils;
|
|
||||||
import org.nl.modules.wql.core.bean.WQLObject;
|
import org.nl.modules.wql.core.bean.WQLObject;
|
||||||
import org.nl.modules.wql.util.SpringContextHolder;
|
import org.nl.modules.wql.util.SpringContextHolder;
|
||||||
import org.nl.wms.basedata.service.MaterialbaseService;
|
import org.nl.wms.basedata.service.MaterialbaseService;
|
||||||
import org.nl.wms.basedata.service.dto.MaterialbaseDto;
|
|
||||||
import org.nl.wms.ext.acs.service.AcsToWmsService;
|
import org.nl.wms.ext.acs.service.AcsToWmsService;
|
||||||
import org.nl.wms.ext.mes.service.MesToWmsService;
|
import org.nl.wms.ext.mes.service.MesToWmsService;
|
||||||
import org.nl.wms.pdm.service.DeviceService;
|
|
||||||
import org.nl.wms.pdm.service.dto.DeviceDto;
|
|
||||||
import org.nl.wms.sch.tasks.callEmpty.GjxCallEmpVehicleTask;
|
|
||||||
import org.nl.wms.sch.tasks.cpOut.CpOutTask;
|
import org.nl.wms.sch.tasks.cpOut.CpOutTask;
|
||||||
import org.slf4j.MDC;
|
import org.slf4j.MDC;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@@ -194,7 +189,7 @@ public class MesToWmsServiceImpl implements MesToWmsService {
|
|||||||
@Override
|
@Override
|
||||||
public JSONObject hawKeAutomaticForMes(JSONObject param) {
|
public JSONObject hawKeAutomaticForMes(JSONObject param) {
|
||||||
log.info("mes成品入库参数:" + param);
|
log.info("mes成品入库参数:" + param);
|
||||||
param.put("type", "8");
|
param.put("type", "13");
|
||||||
acsToWmsService.apply(param);
|
acsToWmsService.apply(param);
|
||||||
JSONObject result = new JSONObject();
|
JSONObject result = new JSONObject();
|
||||||
result.put("status", 200);
|
result.put("status", 200);
|
||||||
|
|||||||
@@ -5,6 +5,9 @@ import com.alibaba.fastjson.JSONObject;
|
|||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.nl.wms.ext.mes.service.WmsToMesService;
|
import org.nl.wms.ext.mes.service.WmsToMesService;
|
||||||
|
import org.nl.wms.log.LokiLogType;
|
||||||
|
import org.nl.wms.sch.MesUtil;
|
||||||
|
import org.slf4j.MDC;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -16,7 +19,7 @@ import org.springframework.stereotype.Service;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class WmsToMesServiceImpl implements WmsToMesService {
|
public class WmsToMesServiceImpl implements WmsToMesService {
|
||||||
final String http = "http://example.com/";
|
final String http = "http://helptimely.com:7722/";
|
||||||
@Override
|
@Override
|
||||||
public void getMaterialInfoForMes() {
|
public void getMaterialInfoForMes() {
|
||||||
String url = http + "api/material";
|
String url = http + "api/material";
|
||||||
@@ -32,12 +35,10 @@ public class WmsToMesServiceImpl implements WmsToMesService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void taskFeedback(JSONObject param) {
|
public void taskFeedback(JSONObject param, String finterfaceid) {
|
||||||
String url = http + "api/task";
|
JSONObject feedback = MesUtil.taskFeedback(param, finterfaceid);
|
||||||
try {
|
if (!feedback.getString("code").equals("200")) {
|
||||||
// String result = HttpUtil.post(url, param);
|
//????
|
||||||
} catch (Exception e) {
|
|
||||||
log.error("反馈MES异常");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -33,8 +33,8 @@ public class SSXSendMaterialController {
|
|||||||
@Log("查询物料")
|
@Log("查询物料")
|
||||||
@ApiOperation("查询物料")
|
@ApiOperation("查询物料")
|
||||||
@SaIgnore
|
@SaIgnore
|
||||||
public ResponseEntity<Object> queryMaterial() {
|
public ResponseEntity<Object> queryMaterial(@RequestBody JSONObject param) {
|
||||||
return new ResponseEntity<>(sendMaterialService.queryMaterial(), HttpStatus.OK);
|
return new ResponseEntity<>(sendMaterialService.queryMaterial(param), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/queryVehicle")
|
@PostMapping("/queryVehicle")
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import com.alibaba.fastjson.JSONObject;
|
|||||||
* @Date: 2023/6/15
|
* @Date: 2023/6/15
|
||||||
*/
|
*/
|
||||||
public interface SSXSendMaterialService {
|
public interface SSXSendMaterialService {
|
||||||
JSONObject queryMaterial();
|
JSONObject queryMaterial(JSONObject param);
|
||||||
|
|
||||||
JSONObject confirm(JSONObject whereJson);
|
JSONObject confirm(JSONObject whereJson);
|
||||||
|
|
||||||
|
|||||||
@@ -6,13 +6,18 @@ import com.alibaba.fastjson.JSONArray;
|
|||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.nl.config.MapOf;
|
||||||
import org.nl.modules.common.exception.BadRequestException;
|
import org.nl.modules.common.exception.BadRequestException;
|
||||||
|
import org.nl.modules.wql.WQL;
|
||||||
import org.nl.modules.wql.core.bean.WQLObject;
|
import org.nl.modules.wql.core.bean.WQLObject;
|
||||||
|
import org.nl.modules.wql.core.engine.object.WO;
|
||||||
import org.nl.wms.ext.acs.service.AcsToWmsService;
|
import org.nl.wms.ext.acs.service.AcsToWmsService;
|
||||||
import org.nl.wms.pda.ssxsendmaterial.service.SSXSendMaterialService;
|
import org.nl.wms.pda.ssxsendmaterial.service.SSXSendMaterialService;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author: lyd
|
* @Author: lyd
|
||||||
* @Description: 输送线送料
|
* @Description: 输送线送料
|
||||||
@@ -24,11 +29,12 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
public class SSXSendMaterialServiceImpl implements SSXSendMaterialService {
|
public class SSXSendMaterialServiceImpl implements SSXSendMaterialService {
|
||||||
private final AcsToWmsService acsToWmsService;
|
private final AcsToWmsService acsToWmsService;
|
||||||
@Override
|
@Override
|
||||||
public JSONObject queryMaterial() {
|
public JSONObject queryMaterial(JSONObject param) {
|
||||||
JSONObject result = new JSONObject();
|
JSONObject result = new JSONObject();
|
||||||
JSONArray mdMeMaterialbase = WQLObject.getWQLObject("md_me_materialbase")
|
String materialCode = param.getString("material_code");
|
||||||
.query("is_used = '1' and is_delete = '0'", "create_time desc")
|
WO ssxQuery = WQL.getWO("SSX_QUERY");
|
||||||
.getResultJSONArray(0);
|
JSONArray mdMeMaterialbase = ssxQuery.addParamMap(MapOf.of("flag", "1"
|
||||||
|
, "material_code", materialCode)).process().getResultJSONArray(0);
|
||||||
result.put("result", mdMeMaterialbase);
|
result.put("result", mdMeMaterialbase);
|
||||||
result.put("code", "1");
|
result.put("code", "1");
|
||||||
result.put("desc", "查询成功");
|
result.put("desc", "查询成功");
|
||||||
|
|||||||
@@ -0,0 +1,58 @@
|
|||||||
|
[交易说明]
|
||||||
|
交易名: 输送线业务代码
|
||||||
|
所属模块:
|
||||||
|
功能简述:
|
||||||
|
版权所有:
|
||||||
|
表引用:
|
||||||
|
版本经历:
|
||||||
|
|
||||||
|
[数据库]
|
||||||
|
--指定数据库,为空采用默认值,默认为db.properties中列出的第一个库
|
||||||
|
|
||||||
|
[IO定义]
|
||||||
|
#################################################
|
||||||
|
## 表字段对应输入参数
|
||||||
|
#################################################
|
||||||
|
输入.flag TYPEAS s_string
|
||||||
|
输入.material_code TYPEAS s_string
|
||||||
|
|
||||||
|
|
||||||
|
[临时表]
|
||||||
|
--这边列出来的临时表就会在运行期动态创建
|
||||||
|
|
||||||
|
[临时变量]
|
||||||
|
--所有中间过程变量均可在此处定义
|
||||||
|
|
||||||
|
[业务过程]
|
||||||
|
|
||||||
|
##########################################
|
||||||
|
# 1、输入输出检查 #
|
||||||
|
##########################################
|
||||||
|
|
||||||
|
|
||||||
|
##########################################
|
||||||
|
# 2、主过程前处理 #
|
||||||
|
##########################################
|
||||||
|
|
||||||
|
|
||||||
|
##########################################
|
||||||
|
# 3、业务主过程 #
|
||||||
|
##########################################
|
||||||
|
IF 输入.flag = "1"
|
||||||
|
QUERY
|
||||||
|
SELECT
|
||||||
|
*
|
||||||
|
FROM
|
||||||
|
md_me_materialbase
|
||||||
|
WHERE
|
||||||
|
is_used = '1'
|
||||||
|
AND is_delete = '0'
|
||||||
|
OPTION 输入.material_code <> ""
|
||||||
|
material_code like "%" 输入.material_code "%"
|
||||||
|
ENDOPTION
|
||||||
|
ORDER BY
|
||||||
|
create_time DESC
|
||||||
|
LIMIT 50
|
||||||
|
ENDSELECT
|
||||||
|
ENDQUERY
|
||||||
|
ENDIF
|
||||||
148
lms/nladmin-system/src/main/java/org/nl/wms/sch/MesUtil.java
Normal file
148
lms/nladmin-system/src/main/java/org/nl/wms/sch/MesUtil.java
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
package org.nl.wms.sch;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.http.HttpResponse;
|
||||||
|
import org.apache.http.client.HttpClient;
|
||||||
|
import org.apache.http.client.methods.HttpPost;
|
||||||
|
import org.apache.http.entity.StringEntity;
|
||||||
|
import org.apache.http.impl.client.HttpClientBuilder;
|
||||||
|
import org.dom4j.Document;
|
||||||
|
import org.dom4j.Element;
|
||||||
|
import org.dom4j.io.SAXReader;
|
||||||
|
import org.slf4j.MDC;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.StringReader;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: lyd
|
||||||
|
* @Description: MES连接工具
|
||||||
|
* @Date: 2023/6/29
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class MesUtil {
|
||||||
|
public static JSONObject taskFeedback(JSONObject param, String finterfaceid) {
|
||||||
|
MDC.put("log_file_type", "WMS任务完成反馈给MES");
|
||||||
|
String endpointUrl = "http://helptimely.com:7722/Timely4100_15_yonyu/services/HtWebService"; // 替换为实际的 WebService 地址
|
||||||
|
JSONObject result = new JSONObject();
|
||||||
|
Map<String, String> stringMap = new HashMap<>();
|
||||||
|
try {
|
||||||
|
// 创建 HttpClient
|
||||||
|
HttpClient httpClient = HttpClientBuilder.create().build();
|
||||||
|
|
||||||
|
// 创建请求
|
||||||
|
HttpPost httpPost = new HttpPost(endpointUrl);
|
||||||
|
httpPost.setHeader("Content-Type", "text/xml;charset=UTF-8");
|
||||||
|
|
||||||
|
// 构建请求报文
|
||||||
|
JSONObject req = new JSONObject();
|
||||||
|
req.put("finterfaceid", finterfaceid);
|
||||||
|
JSONArray items = new JSONArray();
|
||||||
|
JSONArray p = new JSONArray();
|
||||||
|
p.add(param);
|
||||||
|
JSONObject ir = new JSONObject();
|
||||||
|
ir.put("details", p);
|
||||||
|
items.add(ir);
|
||||||
|
req.put("items", items);
|
||||||
|
String requestXml = parseXmlStr(JSON.toJSONString(req));
|
||||||
|
// 设置请求体
|
||||||
|
StringEntity entity = new StringEntity(requestXml, "UTF-8");
|
||||||
|
httpPost.setEntity(entity);
|
||||||
|
|
||||||
|
// 发送请求并获取响应
|
||||||
|
HttpResponse response = httpClient.execute(httpPost);
|
||||||
|
|
||||||
|
// 读取响应
|
||||||
|
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
|
||||||
|
String line;
|
||||||
|
StringBuilder responseContent = new StringBuilder();
|
||||||
|
while ((line = reader.readLine()) != null) {
|
||||||
|
responseContent.append(line);
|
||||||
|
}
|
||||||
|
reader.close();
|
||||||
|
|
||||||
|
// 处理响应结果
|
||||||
|
int statusCode = response.getStatusLine().getStatusCode();
|
||||||
|
stringMap = parseXml2Map(String.valueOf(responseContent), new HashMap<>());
|
||||||
|
log.info("Response Code: " + statusCode);
|
||||||
|
log.info("Response Body: " + stringMap);
|
||||||
|
if (statusCode == 200) {
|
||||||
|
result.put("code", 200);
|
||||||
|
result.put("message", "操作成功!");
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error(e.getMessage());
|
||||||
|
result.put("code", 400);
|
||||||
|
result.put("message", stringMap.get("ErrorMessage"));
|
||||||
|
}
|
||||||
|
MDC.remove("log_file_type");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 获得要发送的webservice的xml形式的参数
|
||||||
|
* @param method
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private static String parseXmlStr(String method){
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
sb.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:io=\"http://io.platform.ht.com\">");
|
||||||
|
sb.append("<soapenv:Header/>");
|
||||||
|
sb.append("<soapenv:Body>");
|
||||||
|
sb.append("<io:post>");
|
||||||
|
sb.append("<io:token>AGV</io:token>");
|
||||||
|
sb.append("<io:datas>");
|
||||||
|
sb.append(method);
|
||||||
|
sb.append("</io:datas>");
|
||||||
|
sb.append("<io:doctype>json</io:doctype>");
|
||||||
|
sb.append("</io:post>");
|
||||||
|
sb.append("</soapenv:Body>");
|
||||||
|
sb.append("</soapenv:Envelope>");
|
||||||
|
log.info("parseXmlStr组织参数为-----------------"+sb);
|
||||||
|
return sb.toString();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将xml转换为Map。 支持xml标签多层嵌套,并以"."分隔多级标签(不包括根节点)。 不支持XML标签重复时的情况
|
||||||
|
*
|
||||||
|
* @param xml
|
||||||
|
* @param map
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private static Map<String, String> parseXml2Map(String xml, Map<String, String> map) {
|
||||||
|
try {
|
||||||
|
SAXReader reader = new SAXReader();
|
||||||
|
Document doc = reader.read(new StringReader(xml));
|
||||||
|
Element root = doc.getRootElement();
|
||||||
|
String path = "";
|
||||||
|
if (map.containsKey(root.getName().trim())) {
|
||||||
|
path = map.get(root.getName().trim());
|
||||||
|
map.remove(root.getName().trim());
|
||||||
|
}
|
||||||
|
for (Iterator i = root.elementIterator(); i.hasNext();) {
|
||||||
|
Element element = (Element) i.next();
|
||||||
|
if (element.isTextOnly()) {
|
||||||
|
if (path.length() > 0) {
|
||||||
|
map.put(path + element.getName().trim(), element.getTextTrim());
|
||||||
|
} else {
|
||||||
|
map.put(element.getName().trim(), element.getTextTrim());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
map.put(element.getName().trim(), path+ element.getName().trim() + ".");
|
||||||
|
parseXml2Map(element.asXML(), map);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
package org.nl.wms.sch;
|
||||||
|
|
||||||
|
import cn.hutool.http.webservice.SoapClient;
|
||||||
|
import cn.hutool.json.JSON;
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
|
|
||||||
|
public class SOAPClientExample {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
String wsdlUrl = "http://helptimely.com:7722/Timely4100_15_yonyu/services/HtWebService?wsdl"; // 替换为实际的 WSDL 地址
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 创建 SoapClient
|
||||||
|
SoapClient soapClient = SoapClient.create(wsdlUrl)
|
||||||
|
.setMethod("io:post", "http://io.platform.ht.com");
|
||||||
|
|
||||||
|
// 构建请求参数
|
||||||
|
JSON requestData = JSONUtil.createObj()
|
||||||
|
.set("finterfaceid", "WM_INV_MOVE_P011_AGV01")
|
||||||
|
.set("items", JSONUtil.createArray()
|
||||||
|
.add(JSONUtil.createObj()
|
||||||
|
.set("head", JSONUtil.createObj())
|
||||||
|
.set("details", JSONUtil.createArray()
|
||||||
|
.add(JSONUtil.createObj()
|
||||||
|
.set("flpn979", "SN2305120052")
|
||||||
|
.set("flocationid979number", "2306-08-01")
|
||||||
|
.set("fsn502", "SN2305120052")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
// 设置请求参数
|
||||||
|
soapClient.setParam("io:token", "AGV")
|
||||||
|
.setParam("io:datas", requestData)
|
||||||
|
.setParam("io:doctype", "json");
|
||||||
|
|
||||||
|
// 发送 SOAP 请求
|
||||||
|
String response = soapClient.send(true);
|
||||||
|
|
||||||
|
// 处理响应结果
|
||||||
|
System.out.println("Response Body: " + response);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,195 @@
|
|||||||
|
package org.nl.wms.sch;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 后端调用第三方webservice接口
|
||||||
|
* @author zds 2018-12-27 16:33:50
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class WebServiceUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param url 第三方系统提供webservice的接口url
|
||||||
|
* @param method 第三方系统提供webservice对应的方法名
|
||||||
|
* @param form 第三方系统提供webservice对应的方法请求参数
|
||||||
|
* @return 第三方系统返回的JSONObject调用结果
|
||||||
|
* @throws Exception 工具类一般不处理具体异常,抛出由调用方处理,否则容易形成黑箱
|
||||||
|
*/
|
||||||
|
public static String process(String url, String method, Map<String,String> form) throws Exception{
|
||||||
|
//构建返回值
|
||||||
|
JSONObject result = new JSONObject();
|
||||||
|
//第一步:创建服务地址
|
||||||
|
URL netUrl = new URL(url);
|
||||||
|
|
||||||
|
//第二步:打开一个通向服务地址的连接
|
||||||
|
HttpURLConnection connection = (HttpURLConnection) netUrl.openConnection();
|
||||||
|
|
||||||
|
//第三步:设置参数
|
||||||
|
connection.setRequestMethod("POST");
|
||||||
|
//设置超时时间
|
||||||
|
connection.setConnectTimeout(50000);
|
||||||
|
|
||||||
|
|
||||||
|
//3.2设置数据格式:content-type
|
||||||
|
connection.setRequestProperty("content-type", "text/xml;charset=utf-8");
|
||||||
|
|
||||||
|
//3.3设置输入输出,因为默认新创建的connection没有读写权限,
|
||||||
|
connection.setDoInput(true);
|
||||||
|
|
||||||
|
connection.setDoOutput(true);
|
||||||
|
|
||||||
|
|
||||||
|
//第四步:组织SOAP数据,发送请求
|
||||||
|
String soapXML = getXML(form,method);
|
||||||
|
|
||||||
|
//将信息以流的方式发送出去
|
||||||
|
OutputStream os = connection.getOutputStream();
|
||||||
|
|
||||||
|
os.write(soapXML.getBytes());
|
||||||
|
|
||||||
|
//第五步:接收服务端响应,打印
|
||||||
|
|
||||||
|
int responseCode = connection.getResponseCode();
|
||||||
|
String ret="默认值";
|
||||||
|
|
||||||
|
if(200 == responseCode){//表示服务端响应成功
|
||||||
|
log.info("请求成功!");
|
||||||
|
//获取当前连接请求返回的数据流
|
||||||
|
InputStream is = connection.getInputStream();
|
||||||
|
|
||||||
|
InputStreamReader isr = new InputStreamReader(is,"utf-8");
|
||||||
|
|
||||||
|
BufferedReader br = new BufferedReader(isr);
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
String temp = null;
|
||||||
|
|
||||||
|
while(null != (temp = br.readLine())){
|
||||||
|
sb.append(temp);
|
||||||
|
}
|
||||||
|
|
||||||
|
//打印结果
|
||||||
|
|
||||||
|
ret=sb.toString();
|
||||||
|
if(ret.startsWith("<?"))
|
||||||
|
ret = ret.replaceAll("\\<\\?.+\\?\\>", "<?xml version='1.0' encoding='UTF-8'?>");
|
||||||
|
else
|
||||||
|
ret = (new StringBuilder("<?xml version='1.0' encoding='UTF-8'?>")).append(ret).toString();
|
||||||
|
|
||||||
|
/* String now = xml2jsonString(ret);
|
||||||
|
System.out.println("打印返回结果转成jsonString-------------");
|
||||||
|
result =JSONObject.parseObject(now);*/
|
||||||
|
is.close();
|
||||||
|
isr.close();
|
||||||
|
br.close();
|
||||||
|
//关闭连接
|
||||||
|
connection.disconnect();
|
||||||
|
}
|
||||||
|
os.close();
|
||||||
|
log.info("返回参数ret为:"+ret);
|
||||||
|
return ret;
|
||||||
|
// return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得要发送的webservice的xml形式的参数
|
||||||
|
* @param form 查询条件
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private static String getXML(Map<String,String> form, String method){
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?> ");
|
||||||
|
sb.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:urn=\"urn:sap-com:document:sap:soap:functions:mc-style\">");
|
||||||
|
sb.append("<soapenv:Header/>");
|
||||||
|
sb.append("<soapenv:Body>");
|
||||||
|
sb.append("<urn:"+method+">");
|
||||||
|
if(method.contains("ZSd0002SendMatMd"))
|
||||||
|
sb.append("<In>");
|
||||||
|
// 设置请求参数
|
||||||
|
for(Iterator<String> it = form.keySet().iterator();it.hasNext();){
|
||||||
|
String key = it.next();
|
||||||
|
String value = form.get(key);
|
||||||
|
sb.append(" <"+key+">"+value+"</"+key+">");
|
||||||
|
}
|
||||||
|
if(method.contains("ZSd0002SendMatMd"))
|
||||||
|
sb.append("</In>");
|
||||||
|
sb.append("</urn:"+method+">");
|
||||||
|
sb.append("</soapenv:Body>");
|
||||||
|
sb.append("</soapenv:Envelope>");
|
||||||
|
log.info("getXML组织参数为-----------------"+sb.toString());
|
||||||
|
return sb.toString();
|
||||||
|
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
public static String xml2jsonString(String xml) throws Exception {
|
||||||
|
JSONObject xmlJSONObj = XML.toJSONObject(xml);
|
||||||
|
return xmlJSONObj.toString();
|
||||||
|
}*/
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
|
||||||
|
/*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";
|
||||||
|
HashMap<String,String> form = new HashMap<String,String>();
|
||||||
|
form.put("MatnrFr", "24018347S");
|
||||||
|
form.put("MatnrTo", "24018347S");
|
||||||
|
//非必填字段
|
||||||
|
JSONObject ret = WebServiceUtil.process(url,method,form);
|
||||||
|
System.out.println("getXML返回数据-----------------"+ret.toString());
|
||||||
|
JSONObject Envelope = ret.optJSONObject("soap-env:Envelope");
|
||||||
|
JSONObject Body = Envelope.optJSONObject("soap-env:Body");
|
||||||
|
JSONObject ZfmGetSoResponse = Body.optJSONObject("n0:ZSd0002SendMatMdResponse");
|
||||||
|
JSONObject TZtsalesorder = ZfmGetSoResponse.optJSONObject("TZtsalesorder");
|
||||||
|
JSONArray item = TZtsalesorder.optJSONArray("item");
|
||||||
|
System.out.println("例子:查询结果字段OResultmsg-----------------"+ZfmGetSoResponse.optString("OResultmsg"));
|
||||||
|
System.out.println("例子:查询结果数组size-----------------"+item.size());*/
|
||||||
|
/* 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";
|
||||||
|
HashMap<String,String> form = new HashMap<String,String>();
|
||||||
|
form.put("IErdatFrm", "2019-05-01");
|
||||||
|
form.put("IErdatTo", "2019-05-08");
|
||||||
|
//非必填字段
|
||||||
|
form.put("IVbeln", "");
|
||||||
|
JSONObject ret = WebServiceUtil.process(url,method,form);
|
||||||
|
System.out.println("getXML发送数据-----------------"+ret.toString());
|
||||||
|
JSONObject Envelope = ret.optJSONObject("soap-env:Envelope");
|
||||||
|
JSONObject Body = Envelope.optJSONObject("soap-env:Body");
|
||||||
|
JSONObject ZfmGetSoResponse = Body.optJSONObject("n0:ZfmGetSoResponse");
|
||||||
|
JSONObject TZtsalesorder = ZfmGetSoResponse.optJSONObject("TZtsalesorder");
|
||||||
|
JSONArray item = TZtsalesorder.optJSONArray("item");
|
||||||
|
System.out.println("例子:查询结果字段OResultmsg-----------------"+ZfmGetSoResponse.optString("OResultmsg"));
|
||||||
|
System.out.println("例子:查询结果数组size-----------------"+item.size());*/
|
||||||
|
/* 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";
|
||||||
|
HashMap<String,String> form = new HashMap<String,String>();
|
||||||
|
form.put("IErdatFrm", "2019-05-01");
|
||||||
|
form.put("IErdatTo", "2019-05-08");
|
||||||
|
//非必填字段
|
||||||
|
form.put("IVbeln", "");
|
||||||
|
//非必填字段
|
||||||
|
JSONObject ret = WebServiceUtil.process(url,method,form);
|
||||||
|
System.out.println("getXML发送数据-----------------"+ret.toString());
|
||||||
|
JSONObject Envelope = ret.optJSONObject("soap-env:Envelope");
|
||||||
|
JSONObject Body = Envelope.optJSONObject("soap-env:Body");
|
||||||
|
JSONObject ZfmGetDnZjwlResponse = Body.optJSONObject("n0:ZfmGetDnZjwlResponse");
|
||||||
|
JSONObject TZtdn = ZfmGetDnZjwlResponse.optJSONObject("TZtdn");
|
||||||
|
JSONArray item = TZtdn.optJSONArray("item");
|
||||||
|
System.out.println("例子:查询结果字段OResultmsg-----------------"+ZfmGetDnZjwlResponse.optString("OResultmsg"));
|
||||||
|
System.out.println("例子:查询结果数组size-----------------"+item.size());*/
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -99,7 +99,7 @@ public class YqxCallMaterialTask extends AbstractAcsTask {
|
|||||||
feedback.put("flocationid979number", taskObj.getString("point_code1"));
|
feedback.put("flocationid979number", taskObj.getString("point_code1"));
|
||||||
feedback.put("flpn979", taskObj.getString("vehicle_code"));
|
feedback.put("flpn979", taskObj.getString("vehicle_code"));
|
||||||
feedback.put("fstoragequantity979", taskObj.getString("material_qty"));
|
feedback.put("fstoragequantity979", taskObj.getString("material_qty"));
|
||||||
wmsToMesService.taskFeedback(feedback);
|
wmsToMesService.taskFeedback(feedback, "WM_INV_MOVE_P011_AGV02");
|
||||||
|
|
||||||
//区域出入表【st_ivt_regionIO】
|
//区域出入表【st_ivt_regionIO】
|
||||||
WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO");
|
WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO");
|
||||||
@@ -246,23 +246,36 @@ public class YqxCallMaterialTask extends AbstractAcsTask {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String createTask(JSONObject whereJson) {
|
public String createTask(JSONObject whereJson) {
|
||||||
|
//生产工单表【PDM_BD_WorkOrder】
|
||||||
|
WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder");
|
||||||
|
WQLObject materialTab = WQLObject.getWQLObject("md_me_materialbase");
|
||||||
|
//任务表【SCH_BASE_Task】
|
||||||
|
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||||
|
//点位基础表【SCH_BASE_Point】
|
||||||
|
WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point");
|
||||||
String point_code2 = whereJson.getString("point_code2");
|
String point_code2 = whereJson.getString("point_code2");
|
||||||
|
String material_code = whereJson.getString("material_code");
|
||||||
|
// mes点位不同,要重新寻找
|
||||||
|
JSONObject djwPoint = pointTab.query("mes_device_code = '" + point_code2 + "' AND is_used = '1'").uniqueResult(0);
|
||||||
|
if (ObjectUtil.isNotEmpty(djwPoint)) {
|
||||||
|
point_code2 = djwPoint.getString("point_code");
|
||||||
|
}
|
||||||
String task_code = CodeUtil.getNewCode("TASK_CODE");
|
String task_code = CodeUtil.getNewCode("TASK_CODE");
|
||||||
if (ObjectUtil.isNotEmpty(whereJson.getString("task_code"))) {
|
if (ObjectUtil.isNotEmpty(whereJson.getString("task_code"))) {
|
||||||
task_code = whereJson.getString("task_code");
|
task_code = whereJson.getString("task_code");
|
||||||
}
|
}
|
||||||
//生产工单表【PDM_BD_WorkOrder】
|
|
||||||
WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder");
|
|
||||||
//任务表【SCH_BASE_Task】
|
|
||||||
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
|
||||||
//判断当前点是否有未完成的任务
|
//判断当前点是否有未完成的任务
|
||||||
JSONObject taskObj = taskTab.query("is_delete='0' and point_code2 = '" + point_code2 + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0);
|
JSONObject taskObj = taskTab.query("is_delete='0' and point_code2 = '" + point_code2 + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0);
|
||||||
if (ObjectUtil.isNotEmpty(taskObj)) throw new BadRequestException("当前点位" + point_code2 + "存在未完成的任务");
|
if (ObjectUtil.isNotEmpty(taskObj)) throw new BadRequestException("当前点位" + point_code2 + "存在未完成的任务");
|
||||||
//点位基础表【SCH_BASE_Point】
|
|
||||||
WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point");
|
|
||||||
String device_code = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0).getString("device_code");
|
String device_code = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0).getString("device_code");
|
||||||
JSONObject workOrderObj = workOrderTab.query("device_code = '" + device_code + "' and order_status = '3' and is_delete ='0'").uniqueResult(0);
|
JSONObject workOrderObj = workOrderTab.query("device_code = '" + device_code + "' and order_status = '3' and is_delete ='0'").uniqueResult(0);
|
||||||
if (ObjectUtil.isEmpty(workOrderObj)) throw new BadRequestException("该设备当前未生产或者已删除");
|
if (ObjectUtil.isEmpty(workOrderObj)) throw new BadRequestException("该设备当前未生产或者已删除");
|
||||||
|
JSONObject object = materialTab.query("material_code = '" + material_code + "'").uniqueResult(0);
|
||||||
|
String material_id = workOrderObj.getString("material_id");
|
||||||
|
if (ObjectUtil.isNotEmpty(object)) {
|
||||||
|
material_id = object.getString("material_id");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
SchTaskDto dto = SchTaskDto.builder()
|
SchTaskDto dto = SchTaskDto.builder()
|
||||||
.task_id(IdUtil.getLongId())
|
.task_id(IdUtil.getLongId())
|
||||||
@@ -274,7 +287,7 @@ public class YqxCallMaterialTask extends AbstractAcsTask {
|
|||||||
.task_status(TaskStatusEnum.SURE_END.getCode())
|
.task_status(TaskStatusEnum.SURE_END.getCode())
|
||||||
.point_code2(point_code2)
|
.point_code2(point_code2)
|
||||||
.material_info_id(workOrderObj.getLong("workorder_id"))
|
.material_info_id(workOrderObj.getLong("workorder_id"))
|
||||||
.material_id(workOrderObj.getLong("material_id"))
|
.material_id(Long.valueOf(material_id))
|
||||||
.vehicle_type(workOrderObj.getString("vehicle_type"))
|
.vehicle_type(workOrderObj.getString("vehicle_type"))
|
||||||
.handle_class(THIS_CLASS)
|
.handle_class(THIS_CLASS)
|
||||||
.create_time(DateUtil.now())
|
.create_time(DateUtil.now())
|
||||||
|
|||||||
@@ -49,7 +49,6 @@ public class CpOutTask extends AbstractAcsTask {
|
|||||||
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0);
|
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0);
|
||||||
JSONObject requestParam = JSONObject.parseObject(taskObj.getString("request_param"));
|
JSONObject requestParam = JSONObject.parseObject(taskObj.getString("request_param"));
|
||||||
JSONObject feedback = new JSONObject();
|
JSONObject feedback = new JSONObject();
|
||||||
feedback.put("task_code", taskObj.getString("task_code"));
|
|
||||||
//任务取消
|
//任务取消
|
||||||
if (StrUtil.equals(status, "0")) {
|
if (StrUtil.equals(status, "0")) {
|
||||||
// 取消删除任务
|
// 取消删除任务
|
||||||
@@ -90,10 +89,11 @@ public class CpOutTask extends AbstractAcsTask {
|
|||||||
taskTab.update(taskObj);
|
taskTab.update(taskObj);
|
||||||
|
|
||||||
// 通知mes
|
// 通知mes
|
||||||
feedback.put("fserialid054", taskObj.getString("task_code"));
|
feedback.put("flpn081", taskObj.getString("vehicle_code"));
|
||||||
feedback.put("fsonumber186", taskObj.getString("point_code2"));
|
feedback.put("fsonumber186", taskObj.getString("point_code2"));
|
||||||
feedback.put("flocationid081number", requestParam.getString("out_store_order"));
|
feedback.put("flocationid081number", requestParam.getString("out_store_order"));
|
||||||
wmsToMesService.taskFeedback(feedback);
|
feedback.put("fserialid054", taskObj.getString("task_code"));
|
||||||
|
wmsToMesService.taskFeedback(feedback, "WM_OUT_020_P511_AGV01");
|
||||||
|
|
||||||
// 任务表的点位1:成品库区点
|
// 任务表的点位1:成品库区点
|
||||||
String point_code1 = taskObj.getString("point_code1"); // 起点编码
|
String point_code1 = taskObj.getString("point_code1"); // 起点编码
|
||||||
|
|||||||
@@ -0,0 +1,271 @@
|
|||||||
|
package org.nl.wms.sch.tasks.sendMaterial;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
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 lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.nl.modules.common.exception.BadRequestException;
|
||||||
|
import org.nl.modules.common.utils.SecurityUtils;
|
||||||
|
import org.nl.modules.system.util.CodeUtil;
|
||||||
|
import org.nl.modules.wql.WQL;
|
||||||
|
import org.nl.modules.wql.core.bean.WQLObject;
|
||||||
|
import org.nl.modules.wql.util.SpringContextHolder;
|
||||||
|
import org.nl.wms.ext.mes.service.WmsToMesService;
|
||||||
|
import org.nl.wms.sch.SchTaskDto;
|
||||||
|
import org.nl.wms.sch.manage.AbstractAcsTask;
|
||||||
|
import org.nl.wms.sch.manage.TaskStatusEnum;
|
||||||
|
import org.nl.wms.sch.tasks.AcsTaskDto;
|
||||||
|
import org.nl.wms.util.IdUtil;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 成品入库送料任务服务
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Slf4j
|
||||||
|
public class CpSendMaterialTask extends AbstractAcsTask {
|
||||||
|
|
||||||
|
private final String THIS_CLASS = CpSendMaterialTask.class.getName();
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void updateTaskStatus(JSONObject task, String status) {
|
||||||
|
WmsToMesService wmsToMesService = SpringContextHolder.getBean(WmsToMesService.class);
|
||||||
|
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||||
|
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
|
||||||
|
|
||||||
|
String task_id = task.getString("task_id");
|
||||||
|
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0);
|
||||||
|
JSONObject feedback = new JSONObject();
|
||||||
|
feedback.put("task_code", taskObj.getString("task_code"));
|
||||||
|
//任务取消
|
||||||
|
if (StrUtil.equals(status, "0")) {
|
||||||
|
// 取消删除任务
|
||||||
|
if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) {
|
||||||
|
throw new BadRequestException("已完成不能取消!");
|
||||||
|
}
|
||||||
|
String point_code2 = taskObj.getString("point_code2");
|
||||||
|
if (ObjectUtil.isEmpty(point_code2)) {
|
||||||
|
JSONObject endPoint = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);
|
||||||
|
endPoint.put("lock_type", "1");
|
||||||
|
pointTab.update(endPoint);
|
||||||
|
}
|
||||||
|
taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode());
|
||||||
|
taskObj.put("remark", "已取消");
|
||||||
|
taskObj.put("update_time", DateUtil.now());
|
||||||
|
taskTab.update(taskObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("1".equals(status)) {
|
||||||
|
// 更新任务状态为执行中
|
||||||
|
taskObj.put("task_status", TaskStatusEnum.EXECUTING.getCode());
|
||||||
|
taskObj.put("update_time", DateUtil.now());
|
||||||
|
taskObj.put("car_no", taskObj.getString("car_no"));
|
||||||
|
taskTab.update(taskObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StrUtil.equals(status, "2")) {
|
||||||
|
// 更改任务状态为完成
|
||||||
|
taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode());
|
||||||
|
taskObj.put("update_time", DateUtil.now());
|
||||||
|
taskTab.update(taskObj);
|
||||||
|
|
||||||
|
// 通知mes
|
||||||
|
feedback.put("fpacknumberpl695", taskObj.getString("task_code"));
|
||||||
|
feedback.put("flpn979", taskObj.getString("vehicle_code"));
|
||||||
|
feedback.put("flocationid979number", taskObj.getString("point_code2"));
|
||||||
|
wmsToMesService.taskFeedback(feedback, "WM_INV_MOVE_P011_AGV01");
|
||||||
|
|
||||||
|
String point_code2 = taskObj.getString("point_code2");
|
||||||
|
JSONObject point2Obj = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);
|
||||||
|
JSONObject requestObj = JSONObject.parseObject(taskObj.getString("request_param"));
|
||||||
|
//工单标识
|
||||||
|
String workorder_id = requestObj.getString("material_info_id");
|
||||||
|
//生产工单表【PDM_BD_WorkOrder】
|
||||||
|
|
||||||
|
//区域出入表【st_ivt_regionIO】
|
||||||
|
WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO");
|
||||||
|
JSONObject regionIoObj = new JSONObject();
|
||||||
|
regionIoObj.put("iostorinv_id", IdUtil.getLongId());
|
||||||
|
regionIoObj.put("bill_code", CodeUtil.getNewCode("IN_STORE_CODE"));
|
||||||
|
regionIoObj.put("buss_date", DateUtil.today());
|
||||||
|
regionIoObj.put("io_type", "1");
|
||||||
|
regionIoObj.put("region_id", point2Obj.getString("region_id"));
|
||||||
|
regionIoObj.put("region_code", point2Obj.getString("region_code"));
|
||||||
|
regionIoObj.put("region_name", point2Obj.getString("region_name"));
|
||||||
|
regionIoObj.put("material_id", taskObj.getString("material_id"));
|
||||||
|
regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code"));
|
||||||
|
regionIoObj.put("qty", requestObj.getString("qty"));
|
||||||
|
regionIoObj.put("bill_status", "3");
|
||||||
|
regionIoObj.put("start_point_code", taskObj.getString("point_code1"));
|
||||||
|
regionIoObj.put("end_point_code", taskObj.getString("point_code3"));
|
||||||
|
regionIoObj.put("create_mode", "2");
|
||||||
|
regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd"));
|
||||||
|
regionIoObj.put("create_id", SecurityUtils.getCurrentUserId());
|
||||||
|
regionIoObj.put("create_name", SecurityUtils.getCurrentNickName());
|
||||||
|
regionIoObj.put("create_time", DateUtil.now());
|
||||||
|
regionIoTab.insert(regionIoObj);
|
||||||
|
|
||||||
|
//完成后入库
|
||||||
|
point2Obj.put("instorage_time", DateUtil.now());
|
||||||
|
point2Obj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd"));
|
||||||
|
point2Obj.put("ivt_qty", requestObj.getString("qty"));
|
||||||
|
point2Obj.put("material_id", taskObj.getString("material_id"));
|
||||||
|
point2Obj.put("vehicle_code", taskObj.getString("vehicle_code"));
|
||||||
|
point2Obj.put("vehicle_type", taskObj.getString("vehicle_type"));
|
||||||
|
|
||||||
|
// 终点解锁
|
||||||
|
point2Obj.put("lock_type", "1");
|
||||||
|
point2Obj.put("point_status", "3");
|
||||||
|
point2Obj.put("update_time", DateUtil.now());
|
||||||
|
// 载具类型
|
||||||
|
point2Obj.put("vehicle_type", taskObj.getString("vehicle_type"));
|
||||||
|
pointTab.update(point2Obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void findNextPoint() {
|
||||||
|
/*
|
||||||
|
* 根据业务找对应的终点
|
||||||
|
*/
|
||||||
|
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||||
|
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
|
||||||
|
JSONArray taskArr = taskTab.query("handle_class = '" + THIS_CLASS + "'and is_delete = '0' and task_status = '2'").getResultJSONArray(0);
|
||||||
|
for (int i = 0; i < taskArr.size(); i++) {
|
||||||
|
JSONObject taskObj = taskArr.getJSONObject(i);
|
||||||
|
String vehicle_type = taskObj.getString("vehicle_type");
|
||||||
|
JSONObject param1 = new JSONObject();
|
||||||
|
param1.put("flag", "1");
|
||||||
|
param1.put("region_code", "CPQYA01");
|
||||||
|
param1.put("vehicle_type", "%" + vehicle_type + "%");
|
||||||
|
//1、查找库区类是否有响应的载具类型和对应的物料
|
||||||
|
JSONObject endPoint = WQL.getWO("QSCH_hkxSendMaterial_01").addParamMap(param1).process().uniqueResult(0);
|
||||||
|
if (ObjectUtil.isEmpty(endPoint)) {
|
||||||
|
taskObj.put("remark", "成品区无可用货位!");
|
||||||
|
taskObj.put("update_time", DateUtil.now());
|
||||||
|
taskTab.update(taskObj);
|
||||||
|
} else {
|
||||||
|
taskObj.put("update_time", DateUtil.now());
|
||||||
|
taskObj.put("remark", "");
|
||||||
|
taskObj.put("point_code2", endPoint.getString("point_code"));
|
||||||
|
taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
|
||||||
|
taskTab.update(taskObj);
|
||||||
|
|
||||||
|
//锁住终点
|
||||||
|
endPoint.put("task_id", taskObj.getString("task_id"));
|
||||||
|
endPoint.put("lock_type", "2");
|
||||||
|
pointTab.update(endPoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AcsTaskDto> addTask() {
|
||||||
|
/*
|
||||||
|
* 下发给ACS时需要特殊处理
|
||||||
|
*/
|
||||||
|
JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0);
|
||||||
|
|
||||||
|
ArrayList<AcsTaskDto> acsTaskArr = new ArrayList<>();
|
||||||
|
for (int i = 0; i < arr.size(); i++) {
|
||||||
|
JSONObject json = arr.getJSONObject(i);
|
||||||
|
AcsTaskDto dto = AcsTaskDto.builder()
|
||||||
|
.task_id(json.getString("task_id"))
|
||||||
|
.task_code(json.getString("task_code"))
|
||||||
|
.task_type(json.getString("acs_task_type"))
|
||||||
|
.start_device_code(json.getString("point_code1"))
|
||||||
|
.next_device_code(json.getString("point_code2"))
|
||||||
|
.vehicle_code(json.getString("vehicle_code"))
|
||||||
|
.vehicle_type(json.getString("vehicle_type"))
|
||||||
|
.priority(json.getString("priority"))
|
||||||
|
.remark(json.getString("remark"))
|
||||||
|
.build();
|
||||||
|
acsTaskArr.add(dto);
|
||||||
|
}
|
||||||
|
return acsTaskArr;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String createTask(JSONObject whereJson) {
|
||||||
|
//任务表【SCH_BASE_Task】
|
||||||
|
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||||
|
WQLObject materialTab = WQLObject.getWQLObject("md_me_materialbase");
|
||||||
|
WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point");
|
||||||
|
String point_code1 = whereJson.getString("point_code1");
|
||||||
|
String vehicle_type = whereJson.getString("vehicle_type");
|
||||||
|
String vehicle_code = whereJson.getString("vehicle_code");
|
||||||
|
String material_code = whereJson.getString("material_code");
|
||||||
|
String qty = whereJson.getString("qty");
|
||||||
|
String task_code = CodeUtil.getNewCode("TASK_CODE");
|
||||||
|
if (ObjectUtil.isNotEmpty(whereJson.getString("task_code"))) {
|
||||||
|
task_code = whereJson.getString("task_code");
|
||||||
|
}
|
||||||
|
// mes点位不同,要重新寻找
|
||||||
|
JSONObject djwPoint = pointTab.query("mes_device_code = '" + point_code1 + "' AND is_used = '1'").uniqueResult(0);
|
||||||
|
if (ObjectUtil.isNotEmpty(djwPoint)) {
|
||||||
|
point_code1 = djwPoint.getString("point_code");
|
||||||
|
}
|
||||||
|
//判断当前点是否有未完成的任务
|
||||||
|
JSONObject taskObj = taskTab.query("is_delete='0' and point_code1 = '" + point_code1 + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0);
|
||||||
|
if (ObjectUtil.isNotEmpty(taskObj)) throw new BadRequestException("当前点位" + point_code1 + "存在未完成的任务");
|
||||||
|
|
||||||
|
JSONObject materialObj = materialTab.query("material_code = '" + material_code + "' AND is_used = '1'").uniqueResult(0);
|
||||||
|
|
||||||
|
SchTaskDto dto = SchTaskDto.builder()
|
||||||
|
.task_id(IdUtil.getLongId())
|
||||||
|
.task_code(task_code)
|
||||||
|
.task_type("task_type")
|
||||||
|
.task_name("豪凯线满料")
|
||||||
|
.material_qty(qty)
|
||||||
|
.task_status(TaskStatusEnum.SURE_START.getCode())
|
||||||
|
.point_code1(point_code1)
|
||||||
|
.vehicle_code(vehicle_code)
|
||||||
|
.material_id(materialObj.getLong("material_id"))
|
||||||
|
.vehicle_type(vehicle_type)
|
||||||
|
.handle_class(THIS_CLASS)
|
||||||
|
.create_time(DateUtil.now())
|
||||||
|
.request_param(whereJson.toJSONString())
|
||||||
|
.build();
|
||||||
|
JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
|
||||||
|
taskTab.insert(json);
|
||||||
|
|
||||||
|
//创建好立即下发
|
||||||
|
this.immediateNotifyAcs();
|
||||||
|
return String.valueOf(dto.getTask_id());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void forceFinish(String task_id) {
|
||||||
|
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||||
|
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
|
||||||
|
if (ObjectUtil.isNotEmpty(taskObj))
|
||||||
|
this.updateTaskStatus(taskObj, "2");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void cancel(String task_id) {
|
||||||
|
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||||
|
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
|
||||||
|
if (ObjectUtil.isNotEmpty(taskObj))
|
||||||
|
this.updateTaskStatus(taskObj,"0");
|
||||||
|
else {
|
||||||
|
throw new BadRequestException("未找到该任务或者任务已完成!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -130,7 +130,7 @@ public class GjxSendMaterialTask extends AbstractAcsTask {
|
|||||||
feedback.put("fsn502", taskObj.getString("task_code"));
|
feedback.put("fsn502", taskObj.getString("task_code"));
|
||||||
feedback.put("flpn979", taskObj.getString("vehicle_code"));
|
feedback.put("flpn979", taskObj.getString("vehicle_code"));
|
||||||
feedback.put("flocationid979number", taskObj.getString("point_code2"));
|
feedback.put("flocationid979number", taskObj.getString("point_code2"));
|
||||||
wmsToMesService.taskFeedback(feedback);
|
wmsToMesService.taskFeedback(feedback, "WM_INV_MOVE_P011_AGV01");
|
||||||
|
|
||||||
//区域出入表【st_ivt_regionIO】
|
//区域出入表【st_ivt_regionIO】
|
||||||
WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO");
|
WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO");
|
||||||
@@ -324,13 +324,6 @@ public class GjxSendMaterialTask extends AbstractAcsTask {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String createTask(JSONObject whereJson) {
|
public String createTask(JSONObject whereJson) {
|
||||||
String point_code1 = whereJson.getString("point_code1");
|
|
||||||
String vehicle_code = whereJson.getString("vehicle_code");
|
|
||||||
String qty = whereJson.getString("qty");
|
|
||||||
String task_code = CodeUtil.getNewCode("TASK_CODE");
|
|
||||||
if (ObjectUtil.isNotEmpty(whereJson.getString("task_code"))) {
|
|
||||||
task_code = whereJson.getString("task_code");
|
|
||||||
}
|
|
||||||
//生产工单表【PDM_BD_WorkOrder】
|
//生产工单表【PDM_BD_WorkOrder】
|
||||||
WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder");
|
WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder");
|
||||||
//点位基础表【SCH_BASE_Point】
|
//点位基础表【SCH_BASE_Point】
|
||||||
@@ -338,6 +331,19 @@ public class GjxSendMaterialTask extends AbstractAcsTask {
|
|||||||
|
|
||||||
//任务表【SCH_BASE_Task】
|
//任务表【SCH_BASE_Task】
|
||||||
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||||
|
String point_code1 = whereJson.getString("point_code1");
|
||||||
|
// mes点位不同,要重新寻找
|
||||||
|
JSONObject djwPoint = pointTab.query("mes_device_code = '" + point_code1 + "' AND is_used = '1'").uniqueResult(0);
|
||||||
|
if (ObjectUtil.isNotEmpty(djwPoint)) {
|
||||||
|
point_code1 = djwPoint.getString("point_code");
|
||||||
|
}
|
||||||
|
String vehicle_code = whereJson.getString("vehicle_code");
|
||||||
|
String qty = whereJson.getString("qty");
|
||||||
|
String task_code = CodeUtil.getNewCode("TASK_CODE");
|
||||||
|
if (ObjectUtil.isNotEmpty(whereJson.getString("task_code"))) {
|
||||||
|
task_code = whereJson.getString("task_code");
|
||||||
|
}
|
||||||
|
|
||||||
//判断当前点是否有未完成的任务
|
//判断当前点是否有未完成的任务
|
||||||
JSONObject taskObj = taskTab.query("is_delete='0' and point_code1 = '" + point_code1 + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0);
|
JSONObject taskObj = taskTab.query("is_delete='0' and point_code1 = '" + point_code1 + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0);
|
||||||
if (ObjectUtil.isNotEmpty(taskObj)) throw new BadRequestException("当前点位" + point_code1 + "存在未完成的任务");
|
if (ObjectUtil.isNotEmpty(taskObj)) throw new BadRequestException("当前点位" + point_code1 + "存在未完成的任务");
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ public class HkxSendMaterialTask extends AbstractAcsTask {
|
|||||||
feedback.put("fpacknumberpl695", taskObj.getString("task_code"));
|
feedback.put("fpacknumberpl695", taskObj.getString("task_code"));
|
||||||
feedback.put("flpn979", taskObj.getString("vehicle_code"));
|
feedback.put("flpn979", taskObj.getString("vehicle_code"));
|
||||||
feedback.put("flocationid979number", taskObj.getString("point_code2"));
|
feedback.put("flocationid979number", taskObj.getString("point_code2"));
|
||||||
wmsToMesService.taskFeedback(feedback);
|
wmsToMesService.taskFeedback(feedback, "WM_INV_MOVE_P011_AGV01");
|
||||||
|
|
||||||
String point_code2 = taskObj.getString("point_code2");
|
String point_code2 = taskObj.getString("point_code2");
|
||||||
JSONObject point2Obj = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);
|
JSONObject point2Obj = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);
|
||||||
|
|||||||
@@ -49,7 +49,7 @@
|
|||||||
<el-table-column type="selection" width="55" />
|
<el-table-column type="selection" width="55" />
|
||||||
<el-table-column prop="device_code" label="设备编码" />
|
<el-table-column prop="device_code" label="设备编码" />
|
||||||
<el-table-column prop="device_name" label="设备名称" min-width="200" show-overflow-tooltip />
|
<el-table-column prop="device_name" label="设备名称" min-width="200" show-overflow-tooltip />
|
||||||
<el-table-column prop="device_model" label="设备型号" min-width="200" show-overflow-tooltip />
|
<el-table-column prop="extend_code" label="MES设备编码" min-width="200" show-overflow-tooltip />
|
||||||
<el-table-column prop="productivity" label="设备产能" />
|
<el-table-column prop="productivity" label="设备产能" />
|
||||||
<el-table-column label="是否启用" align="center" prop="is_used">
|
<el-table-column label="是否启用" align="center" prop="is_used">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
|
|||||||
Reference in New Issue
Block a user