fix: 任务、物料、mes对接

This commit is contained in:
2023-06-29 10:03:55 +08:00
parent cf74502043
commit f50ab33253
16 changed files with 486 additions and 172 deletions

View File

@@ -32,6 +32,12 @@
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>6.4.0.jre8</version>
</dependency>
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-dao-redis</artifactId>

View File

@@ -1,9 +1,12 @@
package org.nl;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson.JSONObject;
import com.alicp.jetcache.anno.config.EnableCreateCacheAnnotation;
import com.alicp.jetcache.anno.config.EnableMethodCache;
import io.swagger.annotations.Api;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.SpringContextHolder;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -39,7 +42,7 @@ public class AppRun {
public static void main(String[] args) {
SpringApplication.run(AppRun.class, args);
}
@@ -63,6 +66,50 @@ public class AppRun {
@GetMapping("/")
@SaIgnore
public String index() {
// WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point");
// int block = 6;
// int row = 4; // 排
// int col = 8;
// String regionCode = "YSQB01";
// String regionId = "1663803432005406720";
// String regionName = "养生区B";
// for (int i = 5; i <= block; i++) {
// for (int j = 1; j <= row; j++) {
// for (int k = 1; k <= col; k++) {
// String pointCode = "1";
// // 块
// pointCode = pointCode + i;
// // 排
// if (j < 10) pointCode = pointCode + "0" + j + "-";
// else pointCode = pointCode + j + "-";
// // 列
// if (k < 10) pointCode = pointCode + "0" + k + "-" + "01";
// else pointCode = pointCode + k + "-" + "01";
// String name = j + "排" + k + "列" + "1层";
// String pointStatus = "1";
// String can_vehicle_type = "3";
// JSONObject po = new JSONObject();
// po.put("point_id", IdUtil.getSnowflake(1,1).nextIdStr());
// po.put("point_code", pointCode);
// po.put("point_name", name);
// po.put("point_status", pointStatus);
// po.put("can_vehicle_type", can_vehicle_type);
// po.put("region_id", regionId);
// po.put("region_code", regionCode);
// po.put("region_name", regionName);
// po.put("block_num", i);
// po.put("row_num", j);
// po.put("col_num", k);
// po.put("layer_num", 1);
// po.put("in_order_seq", col - k + 1);
// po.put("out_order_seq", k);
// po.put("in_empty_seq", col - k + 1);
// po.put("out_empty_seq", k);
// pointTab.insert(po);
// }
// }
// }
return "Backend service started successfully";
}
}

View File

@@ -1,18 +1,33 @@
package org.nl.config;
import cn.hutool.core.util.StrUtil;
import com.alibaba.druid.pool.DruidDataSource;
import lombok.extern.slf4j.Slf4j;
import org.nl.modules.mnt.util.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("${mes.sqlserver.enabled}")
private boolean sqlserverIsConnect;
@Value("${mes.sqlserver.jdbcurl}")
private String sqlserverJdbcUrl;
@Value("${mes.sqlserver.username}")
private String sqlserverUserName;
@Value("${mes.sqlserver.password}")
private String sqlserverPassword;
@Primary
@Bean(name = "dataSource")
@ConfigurationProperties(prefix = "spring.datasource.druid")
@@ -20,4 +35,52 @@ public class DataBaseConfig {
return new DruidDataSource();
}
@Bean("dataSource1")
@ConditionalOnExpression("${mes.sqlserver.enabled:true}")
public DataSource dataSource1() {
log.info("是否连接Sqlserver" + sqlserverIsConnect);
String jdbcUrl = sqlserverJdbcUrl;
String userName = sqlserverUserName;
String password = sqlserverPassword;
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;
}
}

View File

@@ -12,6 +12,7 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.config.MapOf;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.common.utils.SecurityUtils;
import org.nl.modules.wql.WQL;
@@ -21,6 +22,7 @@ import org.nl.wms.basedata.eum.MaterOptTypeEnum;
import org.nl.wms.basedata.service.ClassstandardService;
import org.nl.wms.basedata.service.MaterialbaseService;
import org.nl.wms.basedata.service.dto.MaterialbaseDto;
import org.slf4j.MDC;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -138,8 +140,10 @@ public class MaterialbaseServiceImpl implements MaterialbaseService {
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
WQLObject wo = WQLObject.getWQLObject("md_me_materialbase");
JSONObject jsonObject = wo.query("material_code = '" + dto.getMaterial_code() + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonObject)) {
JSONObject jsonObject = wo.query("material_code = '" + dto.getMaterial_code() + "' " +
"AND is_delete = '0'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonObject)
&& !jsonObject.getString("material_id").equals(dto.getMaterial_id())) {
throw new BadRequestException("物料柜号不能重复");
}
@@ -178,19 +182,9 @@ public class MaterialbaseServiceImpl implements MaterialbaseService {
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteAll(Long[] ids) {
Long currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
WQLObject wo = WQLObject.getWQLObject("md_me_materialbase");
for (Long material_id : ids) {
JSONObject param = new JSONObject();
param.put("material_id", String.valueOf(material_id));
param.put("is_delete", "1");
param.put("update_optid", currentUserId);
param.put("update_optname", nickName);
param.put("update_time", now);
wo.update(param);
wo.delete("material_id = '" + material_id + "'");
}
}
@@ -219,9 +213,48 @@ public class MaterialbaseServiceImpl implements MaterialbaseService {
}
@Override
@Transactional
public void synchronize(Map whereJson) {
/* wmsToErpService.getClassInfo(null);
wmsToErpService.getMaterialInfo(null);*/
MDC.put("log_file_type", "MES物料同步");
// 查找物料表最近更新的数据
WQLObject mdMeMaterialbaseTab = WQLObject.getWQLObject("md_me_materialbase");
JSONObject jsonObject = mdMeMaterialbaseTab
.query("ext_id <> '' AND ext_id IS NOT NULL", "update_time desc")
.uniqueResult(0);
String time = ObjectUtil.isNotEmpty(jsonObject) ? jsonObject.getString("update_time") : "";
// 查找mes的数据
JSONArray array = WQL.getWO("DATA_FOR_MES")
.setDbname("dataSource1")
.addParamMap(MapOf.of("flag", "1", "time", time))
.process()
.getResultJSONArray(0);
log.info("从mes获取的数据{}", array);
if (ObjectUtil.isEmpty(array)) {
throw new BadRequestException("同步失败");
}
for (int i = 0; i < array.size(); i++) {
JSONObject materialObj = array.getJSONObject(i);
// 判断是否存在
JSONObject extObj = mdMeMaterialbaseTab
.query("ext_id = '" + materialObj.getString("ext_id") + "'")
.uniqueResult(0);
materialObj.put("create_id", "3");
materialObj.put("create_name", "MES系统");
materialObj.put("update_optid", "3");
materialObj.put("update_optname", "MES系统");
materialObj.put("is_used", "1");
materialObj.put("is_delete", "0");
if (ObjectUtil.isEmpty(extObj)) {
// 插入
materialObj.put("material_id", IdUtil.getSnowflake(1,1).nextIdStr());
mdMeMaterialbaseTab.insert(materialObj);
} else {
mdMeMaterialbaseTab.update(materialObj,
"material_id = '" + extObj.getString("material_id") + "'"); // 修改
}
log.info("物料:" + i + " : " + materialObj);
}
MDC.remove("log_file_type");
}
@Override

View File

@@ -0,0 +1,60 @@
[交易说明]
交易名: 从mes获取物料信息
所属模块:
功能简述:
版权所有:
表引用:
版本经历:
[数据库]
--指定数据库为空采用默认值默认为db.properties中列出的第一个库
[IO定义]
#################################################
## 表字段对应输入参数
#################################################
输入.flag TYPEAS s_string
输入.time TYPEAS s_string
[临时表]
--这边列出来的临时表就会在运行期动态创建
[临时变量]
--所有中间过程变量均可在此处定义
[业务过程]
##########################################
# 1、输入输出检查 #
##########################################
##########################################
# 2、主过程前处理 #
##########################################
##########################################
# 3、业务主过程 #
##########################################
IF 输入.flag = "1"
PAGEQUERY
SELECT
FbasicDataId046 AS ext_id,
Fnumber046 AS material_code,
Fname046 AS material_name,
Fmodel004 AS material_spec,
FaddTime046 AS create_time,
FeditTime046 AS update_time,
Fparentid046name AS material_model
FROM
dbo.v_BS_GOODS_INTERFACE
WHERE
1 = 1
OPTION 输入.time <> ""
FeditTime046 >= 输入.time
ENDOPTION
ORDER BY FeditTime046 DESC
ENDSELECT
ENDQUERY
ENDIF

View File

@@ -42,25 +42,71 @@ public class MesToWmsServiceImpl implements MesToWmsService {
log.info("mes传来工单信息" + param);
WQLObject workOrderTab = WQLObject.getWQLObject("pdm_bd_workorder");
WQLObject deviceTab = WQLObject.getWQLObject("pdm_bi_device");
WQLObject materialTab = WQLObject.getWQLObject("md_me_materialbase");
if (ObjectUtil.isEmpty(param)) {
throw new BadRequestException("工单不能为空");
}
MaterialbaseDto materialCode = materialbaseService.findByCode(param.getString("material_code"));
JSONObject materialCode = materialTab.query("material_code = '" + param.getString("material_code") + "'").uniqueResult(0);
JSONObject deviceCode = deviceTab.query("extend_code = '" + param.getString("device_code") + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(deviceCode)) {
throw new BadRequestException("设备编码错误!");
}
param.put("workorder_id", IdUtil.getSnowflake(1,1).nextIdStr());
param.put("plan_qty", param.getString("qty"));
param.put("order_status", param.getString("workorder_status"));
param.put("material_id", materialCode.getMaterial_id());
param.put("device_id", deviceCode.getString("device_id"));
param.put("device_code", deviceCode.getString("device_code"));
param.put("order_status", "3");
param.put("material_id", materialCode.getString("material_id"));
param.put("produce_date", DateUtil.format(new Date(), "yyyy-MM-dd"));
param.put("realproducestart_date", DateUtil.now());
param.put("create_id", "3");
param.put("create_name", "MES系统");
param.put("create_time", param.getString("create_time"));
workOrderTab.insert(param);
if (param.getString("device_code").equals("C007")) { // 油漆线
// 分物料上料位与下料位两个工单
String deviceCodeWS = deviceCode.getString("device_code") + "WS";
String deviceCodeKX = deviceCode.getString("device_code") + "KX";
// 如果未完成,就把工单完成并插入
JSONObject orderWS = workOrderTab.query("device_code = '" + deviceCodeWS + "' AND order_status <> '5'").uniqueResult(0);
JSONObject orderKX = workOrderTab.query("device_code = '" + deviceCodeKX + "' AND order_status <> '5'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(orderWS)) { // 存在,就关闭
orderWS.put("order_status", "5");
orderWS.put("update_time", DateUtil.now());
orderWS.put("realproduceend_date", DateUtil.now());
workOrderTab.update(orderWS);
}
if (ObjectUtil.isNotEmpty(orderKX)) {
orderKX.put("order_status", "5");
orderKX.put("update_time", DateUtil.now());
orderKX.put("realproduceend_date", DateUtil.now());
workOrderTab.update(orderKX);
}
param.put("workorder_id", IdUtil.getSnowflake(1,1).nextIdStr());
param.put("device_id", "1607915464833503232");
param.put("device_code", deviceCodeWS);
workOrderTab.insert(param);
param.put("workorder_id", IdUtil.getSnowflake(1,1).nextIdStr());
param.put("device_id", "1654663217064054784");
param.put("device_code", deviceCodeKX);
workOrderTab.insert(param);
String deviceCodeWX = deviceCode.getString("device_code") + "WX";
String deviceCodeKS = deviceCode.getString("device_code") + "KS";
JSONObject deviceCodeWXOrder = workOrderTab
.query("device_code = '" + deviceCodeWX + "' AND order_status <> '5'")
.uniqueResult(0);
if (ObjectUtil.isEmpty(deviceCodeWXOrder)) { // 如果物料下没有执行中的工单,就设置新的工单
param.put("workorder_id", IdUtil.getSnowflake(1,1).nextIdStr());
param.put("device_id", "1607915553220071424");
param.put("device_code", deviceCodeWX);
workOrderTab.insert(param);
param.put("workorder_id", IdUtil.getSnowflake(1,1).nextIdStr());
param.put("device_id", "1654663328972279808");
param.put("device_code", deviceCodeKS);
workOrderTab.insert(param);
}
} else {
param.put("workorder_id", IdUtil.getSnowflake(1,1).nextIdStr());
param.put("device_id", deviceCode.getString("device_id"));
param.put("device_code", deviceCode.getString("device_code"));
workOrderTab.insert(param);
}
JSONObject result = new JSONObject();
result.put("status", 200);
result.put("message", "操作成功");
@@ -69,6 +115,7 @@ public class MesToWmsServiceImpl implements MesToWmsService {
}
@Override
@Transactional
public JSONObject feedbackWorkOrderToMes(JSONObject param) {
log.info("mes传来工单信息", param);
WQLObject workOrderTab = WQLObject.getWQLObject("pdm_bd_workorder");
@@ -78,12 +125,66 @@ public class MesToWmsServiceImpl implements MesToWmsService {
JSONObject jsonObject = workOrderTab
.query("workorder_code = '" + param.getString("workorder_code") + "'")
.uniqueResult(0);
jsonObject.put("order_status", param.getString("workorder_status"));
jsonObject.put("update_optid", "3");
jsonObject.put("update_optname", "MES系统");
jsonObject.put("update_time", DateUtil.now());
jsonObject.put("realproduceend_date", DateUtil.now());
workOrderTab.update(jsonObject);
String deviceCode = jsonObject.getString("device_code");
// 判断是不是油漆线
if (deviceCode.startsWith("YQX01")) {
String deviceCodeWS = "YQX01WS";
String deviceCodeKX = "YQX01KX";
String deviceCodeWX = "YQX01WX";
String deviceCodeKS = "YQX01KS";
JSONObject orderWX = workOrderTab.query("device_code = '" + deviceCodeWX + "' AND order_status <> '5'").uniqueResult(0);
JSONObject orderKS = workOrderTab.query("device_code = '" + deviceCodeKS + "' AND order_status <> '5'").uniqueResult(0);
JSONObject orderWS = workOrderTab.query("device_code = '" + deviceCodeWS + "' AND order_status <> '5'").uniqueResult(0);
JSONObject orderKX = workOrderTab.query("device_code = '" + deviceCodeKX + "' AND order_status <> '5'").uniqueResult(0);
// 物下空上完成
orderWX.put("order_status", "5");
orderWX.put("update_optid", "3");
orderWX.put("update_optname", "MES系统");
workOrderTab.update(orderWX);
orderKS.put("update_optid", "3");
orderKS.put("update_optname", "MES系统");
orderKS.put("order_status", "5");
workOrderTab.update(orderKS);
// 查看物上与物下是否相同,相同就完成,物下新增与物上一样的工单
if (!orderWS.getString("workorder_code").equals(orderWX.getString("workorder_code"))) {
// 不相同:物下空上新增
JSONObject workorder = new JSONObject();
workorder.put("workorder_id", IdUtil.getSnowflake(1,1).nextIdStr());
workorder.put("device_id", "1607915553220071424");
workorder.put("device_code", deviceCodeWX);
workorder.put("workorder_code", orderWS.getString("workorder_code"));
workorder.put("plan_qty", orderWS.getString("plan_qty"));
workorder.put("order_status", "3");
workorder.put("material_id", orderWS.getString("material_id"));
workorder.put("produce_date", DateUtil.format(new Date(), "yyyy-MM-dd"));
workorder.put("realproducestart_date", DateUtil.now());
workorder.put("create_id", "3");
workorder.put("create_name", "LMS系统");
workorder.put("create_time", DateUtil.now());
workOrderTab.insert(workorder);
workorder.put("workorder_id", IdUtil.getSnowflake(1,1).nextIdStr());
workorder.put("device_id", "1654663328972279808");
workorder.put("device_code", deviceCodeKS);
workOrderTab.insert(workorder);
} else {
// 物上空下完成
orderWS.put("order_status", "5");
orderWS.put("update_optid", "3");
orderWS.put("update_optname", "MES系统");
workOrderTab.update(orderWS);
orderKX.put("order_status", "5");
orderKX.put("update_optid", "3");
orderKX.put("update_optname", "MES系统");
workOrderTab.update(orderKX);
}
} else {
jsonObject.put("order_status", "5");
jsonObject.put("update_optid", "3");
jsonObject.put("update_optname", "MES系统");
jsonObject.put("update_time", DateUtil.now());
jsonObject.put("realproduceend_date", DateUtil.now());
workOrderTab.update(jsonObject);
}
JSONObject result = new JSONObject();
result.put("status", 200);
result.put("message", "操作成功");

View File

@@ -26,13 +26,14 @@ public class SSXSendMaterialServiceImpl implements SSXSendMaterialService {
@Override
public JSONObject queryMaterial() {
JSONObject result = new JSONObject();
JSONArray mdMeMaterialbase = WQLObject.getWQLObject("md_me_materialbase").query("is_used = '1' and is_delete = '0'").getResultJSONArray(0);
JSONArray mdMeMaterialbase = WQLObject.getWQLObject("md_me_materialbase")
.query("is_used = '1' and is_delete = '0'", "create_time desc")
.getResultJSONArray(0);
result.put("result", mdMeMaterialbase);
result.put("code", "1");
result.put("desc", "查询成功");
return result;
}
@Override
@Transactional(rollbackFor = Exception.class)
public JSONObject confirm(JSONObject param) {
@@ -63,12 +64,13 @@ public class SSXSendMaterialServiceImpl implements SSXSendMaterialService {
}
return result;
}
@Override
public JSONObject queryVehicle() {
JSONObject result = new JSONObject();
WQLObject dictTab = WQLObject.getWQLObject("sys_dict_detail");
JSONArray dictSort = dictTab.query("name = 'vehicle_type' and value in ('4','5','6')", "dict_sort").getResultJSONArray(0);
JSONArray dictSort = dictTab
.query("name = 'vehicle_type' and value in ('4','5','6')", "dict_sort")
.getResultJSONArray(0);
result.put("result", dictSort);
result.put("code", "1");
result.put("desc", "操作成功");

View File

@@ -62,6 +62,7 @@ public class YqxCallMaterialTask extends AbstractAcsTask {
taskTab.update(taskObj);
if (ObjectUtil.isEmpty(material_point)) return;
// 点位解锁
material_point.put("lock_type", "1");
pointTab.update(material_point);
@@ -73,10 +74,6 @@ public class YqxCallMaterialTask extends AbstractAcsTask {
taskObj.put("update_time", DateUtil.now());
taskObj.put("car_no", taskObj.getString("car_no"));
taskTab.update(taskObj);
// 通知mes
feedback.put("task_status", TaskStatusEnum.EXECUTING.getCode());
feedback.put("struct_code", taskObj.getString("point_code1"));
wmsToMesService.taskFeedback(feedback);
}
if (StrUtil.equals(status, "2")) {
@@ -95,14 +92,15 @@ public class YqxCallMaterialTask extends AbstractAcsTask {
taskObj.put("remark", "任务完成");
taskTab.update(taskObj);
// 通知mes
feedback.put("task_status", TaskStatusEnum.FINISHED.getCode());
feedback.put("struct_code", taskObj.getString("point_code1"));
wmsToMesService.taskFeedback(feedback);
if (ObjectUtil.isEmpty(material_point)) return;
// 通知mes
feedback.put("fscanserialid001", taskObj.getString("task_code"));
feedback.put("flocationid979number", taskObj.getString("point_code1"));
feedback.put("flpn979", taskObj.getString("vehicle_code"));
feedback.put("fstoragequantity979", taskObj.getString("material_qty"));
wmsToMesService.taskFeedback(feedback);
//区域出入表【st_ivt_regionIO】
WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO");
JSONObject regionIoObj = new JSONObject();
@@ -328,6 +326,7 @@ public class YqxCallMaterialTask extends AbstractAcsTask {
String pointCode = materialPoint.getString("point_code");
// 修改任务
hcTask.put("point_code1", pointCode);
hcTask.put("material_qty", materialPoint.getString("ivt_qty"));
hcTask.put("remark", "养生A区" + pointCode);
taskTab.update(hcTask);
// 锁住点位

View File

@@ -81,10 +81,6 @@ public class CpOutTask extends AbstractAcsTask {
taskObj.put("update_time", DateUtil.now());
taskObj.put("car_no", taskObj.getString("car_no"));
taskTab.update(taskObj);
// 通知mes
feedback.put("task_status", TaskStatusEnum.EXECUTING.getCode());
feedback.put("struct_code", taskObj.getString("point_code2"));
wmsToMesService.taskFeedback(feedback);
}
if (StrUtil.equals(status, "2")) {
@@ -94,8 +90,9 @@ public class CpOutTask extends AbstractAcsTask {
taskTab.update(taskObj);
// 通知mes
feedback.put("task_status", TaskStatusEnum.FINISHED.getCode());
feedback.put("struct_code", taskObj.getString("point_code2"));
feedback.put("fserialid054", taskObj.getString("task_code"));
feedback.put("fsonumber186", taskObj.getString("point_code2"));
feedback.put("flocationid081number", requestParam.getString("out_store_order"));
wmsToMesService.taskFeedback(feedback);
// 任务表的点位1:成品库区点

View File

@@ -71,6 +71,7 @@ public class GjxSendMaterialTask extends AbstractAcsTask {
String point_code2 = taskObj.getString("point_code2");
if (ObjectUtil.isEmpty(point_code2)) return;
JSONObject object = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);
object.put("lock_type", "1");
object.put("update_time", DateUtil.now());
@@ -83,10 +84,6 @@ public class GjxSendMaterialTask extends AbstractAcsTask {
taskObj.put("update_time", DateUtil.now());
taskObj.put("car_no", taskObj.getString("car_no"));
taskTab.update(taskObj);
// 通知mes
feedback.put("task_status", TaskStatusEnum.EXECUTING.getCode());
feedback.put("struct_code", taskObj.getString("point_code2"));
wmsToMesService.taskFeedback(feedback);
}
if (StrUtil.equals(status, "2")) {
@@ -130,8 +127,9 @@ public class GjxSendMaterialTask extends AbstractAcsTask {
taskTab.update(taskObj);
// 通知mes
feedback.put("task_status", TaskStatusEnum.FINISHED.getCode());
feedback.put("struct_code", taskObj.getString("point_code2"));
feedback.put("fsn502", taskObj.getString("task_code"));
feedback.put("flpn979", taskObj.getString("vehicle_code"));
feedback.put("flocationid979number", taskObj.getString("point_code2"));
wmsToMesService.taskFeedback(feedback);
//区域出入表【st_ivt_regionIO】
@@ -266,7 +264,7 @@ public class GjxSendMaterialTask extends AbstractAcsTask {
param2.put("flag", "2");
param2.put("region_code", "YSQA01");
param2.put("vehicle_type",vehicle_type);
//1、查找整为空的货位
//1、查找整为空的货位
JSONObject json2 = WQL.getWO("QSCH_gjxSendMaterial_01").addParamMap(param2).process().uniqueResult(0);
if (ObjectUtil.isEmpty(json2)) {
taskObj.put("remark", ObjectUtil.isNotEmpty(reminder) ? reminder : "养生A区无可用货位");
@@ -328,7 +326,6 @@ public class GjxSendMaterialTask extends AbstractAcsTask {
public String createTask(JSONObject whereJson) {
String point_code1 = whereJson.getString("point_code1");
String vehicle_code = whereJson.getString("vehicle_code");
String vehicle_type = whereJson.getString("vehicle_type");
String qty = whereJson.getString("qty");
String task_code = CodeUtil.getNewCode("TASK_CODE");
if (ObjectUtil.isNotEmpty(whereJson.getString("task_code"))) {
@@ -363,7 +360,7 @@ public class GjxSendMaterialTask extends AbstractAcsTask {
.material_qty(qty)
.material_info_id(workOrderObj.getLong("workorder_id"))
.material_id(workOrderObj.getLong("material_id"))
.vehicle_type(vehicle_type)
.vehicle_type(workOrderObj.getString("vehicle_type"))
.handle_class(THIS_CLASS)
.create_time(DateUtil.now())
.request_param(whereJson.toJSONString())

View File

@@ -73,10 +73,6 @@ public class HkxSendMaterialTask extends AbstractAcsTask {
taskObj.put("update_time", DateUtil.now());
taskObj.put("car_no", taskObj.getString("car_no"));
taskTab.update(taskObj);
// 通知mes
feedback.put("task_status", TaskStatusEnum.EXECUTING.getCode());
feedback.put("struct_code", taskObj.getString("point_code2"));
wmsToMesService.taskFeedback(feedback);
}
if (StrUtil.equals(status, "2")) {
@@ -86,8 +82,9 @@ public class HkxSendMaterialTask extends AbstractAcsTask {
taskTab.update(taskObj);
// 通知mes
feedback.put("task_status", TaskStatusEnum.FINISHED.getCode());
feedback.put("struct_code", taskObj.getString("point_code2"));
feedback.put("fpacknumberpl695", taskObj.getString("task_code"));
feedback.put("flpn979", taskObj.getString("vehicle_code"));
feedback.put("flocationid979number", taskObj.getString("point_code2"));
wmsToMesService.taskFeedback(feedback);
String point_code2 = taskObj.getString("point_code2");

View File

@@ -6,11 +6,11 @@ spring:
druid:
db-type: com.alibaba.druid.pool.DruidDataSource
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
url: jdbc:log4jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:yongyu_lms2}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
# url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:yongyu_lms2}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
# url: jdbc:log4jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:yy-lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:yongyu_lms2}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
username: ${DB_USER:root}
password: ${DB_PWD:P@ssw0rd}
# password: ${DB_PWD:12356}
# password: ${DB_PWD:P@ssw0rd}
password: ${DB_PWD:12356}
# 初始连接数
initial-size: 5
# 最小连接数
@@ -52,12 +52,22 @@ spring:
wall:
config:
multi-statement-allow: true
redis:
#数据库索引
database: ${REDIS_DB:15}
host: ${REDIS_HOST:127.0.0.1}
port: ${REDIS_PORT:6379}
password: ${REDIS_PWD:}
redis:
#数据库索引
database: ${REDIS_DB:15}
host: ${REDIS_HOST:127.0.0.1}
port: ${REDIS_PORT:6379}
password: ${REDIS_PWD:}
redisson:
config: |
threads: 4
nettyThreads: 4
singleServerConfig:
connectionMinimumIdleSize: 8
connectionPoolSize: 8
address: redis://127.0.0.1:6379
idleConnectionTimeout: 10000
timeout: 3000
# 登录相关配置
login:
@@ -154,3 +164,9 @@ sa-token:
loki:
url: http://localhost:3100/loki/api/v1
systemName: acs
mes:
sqlserver:
enabled: false
jdbcurl: jdbc:sqlserver://192.168.81.80:1433;DatabaseName=hllg;
username: sa
password: P@ssw0rd

View File

@@ -173,3 +173,10 @@ sa-token:
loki:
url: http://localhost:3100/loki/api/v1
systemName: lms
#mes
mes:
sqlserver:
enabled: true
jdbcurl: jdbc:sqlserver://192.168.4.113:1433;DatabaseName=Timely4100_15_yoyu;
username: timely
password: timely**2023

View File

@@ -77,7 +77,7 @@ https://juejin.cn/post/6844903775631572999
<!--开发环境:打印控制台-->
<springProfile name="dev">
<root level="off">
<root level="debugger">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="lokiAppender" />
</root>
@@ -122,7 +122,7 @@ https://juejin.cn/post/6844903775631572999
<!--生产环境:打印控制台和输出到文件-->
<springProfile name="prod">
<root level="debug">
<root level="debugger">
<appender-ref ref="asyncFileAppender"/>
<appender-ref ref="lokiAppender"/>
</root>

View File

@@ -2,39 +2,26 @@
<div v-loading.fullscreen.lock="fullscreenLoading" class="app-container">
<!--工具栏-->
<div class="head-container">
<el-row>
<el-col :span="8">
<el-row>
<el-col :span="7">
<span style="line-height:36px;text-align: center">物料类别</span>
</el-col>
<el-col :span="12">
<treeselect
v-model="query.material_type_id"
:load-options="loadChildNodes"
:options="classes1"
style="width: 200px;"
placeholder="请选择"
/>
</el-col>
</el-row>
</el-col>
<el-col :span="8">
模糊查询
<el-input
v-model="query.search"
clearable
style="width: 200px"
size="mini"
placeholder="输入物料编码或名称"
prefix-icon="el-icon-search"
class="filter-item"
/>
</el-col>
<el-col :span="8">
<div v-if="crud.props.searchToggle">
<el-form
:inline="true"
class="demo-form-inline"
label-position="right"
label-width="80px"
label-suffix=":"
>
<el-form-item label="模糊搜索">
<el-input
v-model="query.search"
clearable
size="mini"
placeholder="编码、名称"
@keyup.enter.native="crud.toQuery"
/>
</el-form-item>
<rrOperation />
</el-col>
</el-row>
</el-form>
</div>
<!--如果想在工具栏加入更多按钮可以使用插槽方式 slot = 'left' or 'right'-->
<crudOperation :permission="permission">
<el-button
@@ -83,55 +70,66 @@
<el-input v-model="form.material_model" style="width: 200px;" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="外部标识" prop="ext_id">
<el-input v-model="form.ext_id" style="width: 200px;" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="物料分类" prop="material_type_id">
<treeselect
v-model="form.material_type_id"
:load-options="loadChildNodes"
:options="classes2"
style="width: 200px;"
placeholder="请选择"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="产品系列">
<treeselect
v-model="form.product_series"
:options="classes3"
:auto-load-root-options="false"
:load-options="loadChildNodes"
style="width: 200px;"
placeholder="请选择"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="静置时间" prop="standing_time">
<el-input-number v-model="form.standing_time" :controls="false" :min="0" label="分钟" style="width: 200px;" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="是否启用" prop="is_used">
<el-radio v-model="form.is_used" label="0">否</el-radio>
<el-radio v-model="form.is_used" label="1">是</el-radio>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="物料数量" prop="standing_time">
<el-input-number v-model="form.material_qty" :controls="false" :min="0" style="width: 200px;" />
</el-form-item>
</el-col>
<!-- <el-col :span="8">-->
<!-- <el-form-item label="外部标识" prop="ext_id">-->
<!-- <el-input v-model="form.ext_id" style="width: 200px;" />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="8">-->
<!-- <el-form-item label="物料分类" prop="material_type_id">-->
<!-- <treeselect-->
<!-- v-model="form.material_type_id"-->
<!-- :load-options="loadChildNodes"-->
<!-- :options="classes2"-->
<!-- style="width: 200px;"-->
<!-- placeholder="请选择"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
</el-row>
<!-- <el-row>-->
<!-- <el-col :span="8">-->
<!-- <el-form-item label="产品系列">-->
<!-- <treeselect-->
<!-- v-model="form.product_series"-->
<!-- :options="classes3"-->
<!-- :auto-load-root-options="false"-->
<!-- :load-options="loadChildNodes"-->
<!-- style="width: 200px;"-->
<!-- placeholder="请选择"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="8">-->
<!-- <el-form-item label="静置时间" prop="standing_time">-->
<!-- <el-input-number v-model="form.standing_time" :controls="false" :min="0" label="分钟" style="width: 200px;" />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="8">-->
<!-- <el-form-item label="是否启用" prop="is_used">-->
<!-- <el-radio v-model="form.is_used" label="0">否</el-radio>-->
<!-- <el-radio v-model="form.is_used" label="1">是</el-radio>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- <el-row>-->
<!-- <el-col :span="8">-->
<!-- <el-form-item label="物料数量" prop="standing_time">-->
<!-- <el-input-number v-model="form.material_qty" :controls="false" :min="0" style="width: 200px;" />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="crud.cancelCU">取消</el-button>
@@ -147,16 +145,16 @@
style="width: 100%;"
@selection-change="crud.selectionChangeHandler"
>
<el-table-column prop="material_code" label="物料柜号" width="160" />
<el-table-column prop="material_name" label="物料名称" width="180" show-overflow-tooltip />
<el-table-column prop="material_code" label="物料编码" width="160" />
<el-table-column prop="material_name" label="物料名称" show-overflow-tooltip />
<el-table-column prop="material_spec" label="物料规格" width="140" />
<el-table-column prop="material_qty" label="物料数量" width="100" />
<!-- <el-table-column prop="material_qty" label="物料数量" />-->
<el-table-column prop="material_model" label="物料型号" />
<el-table-column prop="class_name" label="物料分类" width="140" />
<el-table-column prop="unit_name" label="计量单位" />
<el-table-column prop="standing_time" label="静置时间分钟" width="130px" />
<el-table-column prop="product_series_name" label="系列" />
<el-table-column label="启用" align="center" prop="is_used">
<!-- <el-table-column prop="class_name" label="物料分类" width="140" />-->
<!-- <el-table-column prop="unit_name" label="计量单位" />-->
<!-- <el-table-column prop="standing_time" label="静置时间分钟" width="130px" />-->
<!-- <el-table-column prop="product_series_name" label="系列" />-->
<el-table-column label="启用" align="center" prop="is_used" width="80">
<template slot-scope="scope">
<el-switch
v-model="scope.row.is_used"
@@ -169,7 +167,7 @@
</template>
</el-table-column>
<el-table-column prop="update_optname" label="修改人" />
<el-table-column prop="update_time" label="修改时间" width="135" />
<el-table-column prop="update_time" label="修改时间"/>
<el-table-column
v-permission="['admin','Materialbase:edit','Materialbase:del']"
fixed="right"

View File

@@ -15,15 +15,6 @@
label-width="80px"
label-suffix=":"
>
<el-form-item label="物料类别">
<treeselect
v-model="query.material_type_id"
:load-options="loadClass"
:options="classes"
style="width: 200px;"
placeholder="选择物料类别"
/>
</el-form-item>
<el-form-item label="模糊搜索">
<el-input
v-model="query.search"
@@ -131,15 +122,15 @@ export default {
return this.dict.label.product_series[row.product_series]
},
open() {
const param = {
'materOpt_code': this.materOptCode
}
crudMaterialbase.getMaterOptType(param).then(res => {
this.class_idStr = res.class_idStr
this.crud.query.class_idStr = res.class_idStr
this.crud.toQuery()
this.queryClassId()
})
// const param = {
// 'materOpt_code': this.materOptCode
// }
// crudMaterialbase.getMaterOptType(param).then(res => {
// this.class_idStr = res.class_idStr
// this.crud.query.class_idStr = res.class_idStr
// this.crud.toQuery()
// this.queryClassId()
// })
},
queryClassId() {
const param = {