RGV相关业务优化

This commit is contained in:
ludj
2023-08-04 10:26:06 +08:00
parent 56872a28cc
commit 7548052384
16 changed files with 283 additions and 265 deletions

View File

@@ -21,8 +21,13 @@ public class PointUpdateUtil {
WQLObject pointTable = WQLObject.getWQLObject("sch_base_point");
for (int i = 0; i < pointarr.size(); i++) {
JSONObject pointjo = pointarr.getJSONObject(i);
//有无货:move :0 无货 1 有货
//允许取放货:action0 不允许 1 允许
//工作模式:mode: 0单机 1手动 2联机
String mode = pointjo.getString("mode");
String point_status = "0" + pointjo.getString("move");
String point_action = pointjo.getString("action");
String vehicle_code = pointjo.getString("barcode");
String device_code = pointjo.getString("device_code");
// 物料类型
@@ -44,6 +49,7 @@ public class PointUpdateUtil {
pointObj.put("vehicle_type", pallet_type);
pointObj.put("material_type", weight);
pointObj.put("material_code", material_code);
pointObj.put("action", point_action);
pointObj.put("mode", mode);
pointTable.update(pointObj);
}

View File

@@ -106,6 +106,7 @@ public class StructFindUtil {
.addParam("point_code", point_code).
process().uniqueResult(0);
}
result.put("vehicle_type",vehicle_type);
return result;
}

View File

@@ -399,6 +399,7 @@ IF 输入.flag = "13"
point.area_type = '07'
AND device_point_type = '01'
AND point.`mode` <> '0'
AND point.`action` <> '0'
AND point.point_status='00'
AND ( point.vehicle_code = '' OR point.vehicle_code IS NULL )
AND task.task_code IS NULL

View File

@@ -15,12 +15,10 @@ import org.nl.common.utils.UserInfoUtil;
import org.nl.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
import org.nl.utils.SpringContextHolder;
import org.nl.wms.WorkProcedureEnum;
import org.nl.wms.common.KilnUtil;
import org.nl.wms.common.PointUpdateUtil;
import org.nl.wms.common.PressureUtil;
import org.nl.wms.common.StructFindUtil;
import org.nl.wms.database.service.VehicleService;
import org.nl.wms.database.service.dto.VehicleDto;
import org.nl.wms.ext.acs.service.AcsToWmsService;
import org.nl.wms.sch.manage.AbstractAcsTask;
@@ -51,15 +49,13 @@ import java.util.concurrent.TimeUnit;
public class AcsToWmsServiceImpl implements AcsToWmsService {
private final SendMaterialTask sendMaterialTask;
private final CallMaterialTask callMaterialTask;
private final BTHCToXLTask bphcToXLTask;
private final SendEmptyVehicleTask sendEmptyVehicleTask;
private final CallEmptyVehicleTask callEmptyVehicleTask;
private final RgvTask rgvTask;
private final WmsToAcsServiceImpl wmsToAcsServiceImpl;
private final ToConveyorTask toConveyorTask;
private final TaskService taskService;
private final ToPackIngTask toPackIngTask;
private final FmjToPackIngTask fmjToPackIngTask;
private final VehicleService vehicleService;
@Autowired
private RedissonClient redissonClient;
@@ -89,7 +85,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
@Override
@Transactional
public Map<String, Object> receiveTaskFromAcsTrans(Map jsonObject) {
log.debug("ACS的receiveTaskFromAcs请求参数为:" + jsonObject);
log.debug("ACS的receiveTaskFromAcs请求参数为:" + jsonObject.toString());
String device_code = (String) jsonObject.get("device_code");
String type = (String) jsonObject.get("type");
String group_id = (String) jsonObject.get("group_id");
@@ -125,17 +121,6 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
if (ObjectUtil.isEmpty(groupObj)) {
throw new BadRequestException("找不到组盘信息,载具号:" + jsonObject3.getString("vehicle_code"));
}
String material_id = groupObj.getString("material_id");
JSONObject materiralObj1 = WQLObject.getWQLObject("md_me_material").query("material_id = '" + material_id + "'").uniqueResult(0);
// 寻找对应的托盘类型 - 托盘类型对应转换
String vehicle_type = vehicleService.getVehicleType(materiralObj1.getString("vehicle_type"));
JSONObject jsonObject1 = new JSONObject();
JSONArray array = new JSONArray();
jsonObject1.put("device_code", "RGV2");
jsonObject1.put("code", "to_container_type");
jsonObject1.put("value", vehicle_type);
array.add(jsonObject1);
wmsToAcsServiceImpl.action(array);
break;
}
// ==========================
@@ -222,24 +207,6 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
produceInfoByCode = this.getProduceInfoByCode(device_code);
jsonObject.put("vehicle_type", produceInfoByCode.getString("vehicle_type"));
toPackIngTask.createTask((JSONObject) JSON.toJSON(jsonObject));
// 生成到包装位的任务时下发托盘类型给RGV
// JSONObject vehicleObj = WQLObject.getWQLObject("md_pb_vehicle").query("vehicle_code='" + vehicle_code + "'", "create_time desc").uniqueResult(0);
// if (ObjectUtil.isNotEmpty(vehicleObj)) {
// String vehicle_type = vehicleService.getVehicleType(vehicleObj.getString("vehicle_type"));
// JSONObject jsonObject1 = new JSONObject();
// JSONArray array = new JSONArray();
// jsonObject1.put("device_code", "RGV2");
// jsonObject1.put("code", "to_container_type");
// jsonObject1.put("value", vehicle_type);
// array.add(jsonObject1);
// try {
// wmsToAcsServiceImpl.action(array);
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
break;
}
// ==========================
@@ -314,20 +281,18 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|| StrUtil.equals(device_code, "FJJXSXLW301")
|| StrUtil.equals(device_code, "FJJXSXLW302")) {
JSONObject joo = pointTable.query("point_code='" + device_code + "'").uniqueResult(0);
material_id = produceInfoByCode.getString("material_id");
String workprocedure_id = WorkProcedureEnum.FJGX.getId();
JSONObject jsonObject1 = WQL.getWO("ACSTOMES_001").addParam("flag", "1").addParam("workprocedure_id", workprocedure_id).addParam("material_id", material_id).addParam("device_id", joo.getString("device_id")).process().uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonObject1)) {
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
JSONObject startPoint= pointTab.query("area_type ='06' and lock_type='00' and point_status='02' and material_id = '"+material_id+"' and vehicle_type= '"+produceInfoByCode.getString("vehicle_type")+"'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(startPoint)) {
// 如果有库存,则出半满托盘
// 叫料出库
jsonObject.put("next_point_code", device_code);
jsonObject.put("create_mode", "01");
jsonObject.put("material_id", material_id);
jsonObject.put("is_full", "0");
jsonObject.put("workprocedure_id", WorkProcedureEnum.BZGX.getId());
jsonObject.put("group_device", jsonObject1.getString("group_device_id"));
callMaterialTask.createTask((JSONObject) JSON.toJSON(jsonObject));
jsonObject.put("start_point_code", startPoint.getString("point_code"));
bphcToXLTask.createTask((JSONObject) JSON.toJSON(jsonObject));
break;
}
// 需要更新覆膜机的托盘类型
@@ -353,7 +318,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
}
@Override
@Transactional(rollbackFor = Exception.class)
// @Transactional(rollbackFor = Exception.class)
public Map<String, Object> manipulatorApply(Map jsonObject) {
log.debug("ACS的manipulatorApply请求参数为:" + jsonObject);
String device_code = (String) jsonObject.get("device_code");
@@ -479,8 +444,6 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
jsonObject.put("producetask_id", producetask_id);
jsonObject.put("material_code", materialObj.getString("material_code"));
this.receiveTaskFromAcs(jsonObject);
JSONObject result = new JSONObject();
result.put("status", HttpStatus.OK.value());
result.put("message", "任务状态反馈成功!");
@@ -935,17 +898,16 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
public Map<String, Object> queryCribbingInfo(Map jsonObject) {
log.debug("ACS的queryCribbingInfo请求参数为:" + jsonObject);
String device_code = (String) jsonObject.get("device_code");
JSONObject task = WQLObject.getWQLObject("sch_base_task").query(
"is_delete = '0' AND task_status <> '07' AND next_point_code = '" + device_code + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(task)) {
throw new BadRequestException("当前点位有空托任务未完成!");
}
WQLObject pointTable = WQLObject.getWQLObject("sch_base_point");
String vehicle_code = pointTable.query("point_code = '" + device_code + "'").uniqueResult(0).getString("vehicle_code");
WQLObject group_table = WQLObject.getWQLObject("st_buss_vehiclegroup");
// 从组盘表里面去获取组盘信息
JSONObject result = group_table.query("vehicle_code = '" + vehicle_code + "'").uniqueResult(0);
//从点位上获取半木托组盘参数
String ext_data = pointTable.query("point_code = '" + device_code + "'").uniqueResult(0).getString("ext_data");
JSONObject result=null;
if (ObjectUtil.isNotEmpty(ext_data)){
result=JSONObject.parseObject(ext_data);
}
if (ObjectUtil.isNotEmpty(result)) {
String product_code = WQLObject.getWQLObject("md_me_cribbinginfo").query("material_id = " + result.getString("material_id")).uniqueResult(0).getString("product_code");
result.put("product_code", product_code);

View File

@@ -119,7 +119,6 @@
IF 输入.flag = "4"
QUERY
SELECT
point.point_code as device_code
FROM
sch_base_point point

View File

@@ -1,5 +1,6 @@
package org.nl.wms.sch.manage;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
@@ -65,6 +66,12 @@ public abstract class AbstractAcsTask {
taskDto.setStart_device_code2(json.getString("start_point_code2"));
taskDto.setNext_device_code2(json.getString("next_point_code2"));
taskDto.setVehicle_code(json.getString("vehicle_code"));
//木托盘载具类型,传给ACS的时候需要转换
JSONObject muVehicle = WQLObject.getWQLObject("sys_dict_detail").query("name= 'MD_MTPVEHICLE_TYPE' and value = '" +json.getString("vehicle_type") + "'").uniqueResult(0);//
if (ObjectUtil.isNotEmpty(muVehicle)){
taskDto.setVehicle_type(muVehicle.getString("dict_sort"));
}
arr.add(taskDto);
}
return arr;
@@ -101,7 +108,7 @@ public abstract class AbstractAcsTask {
* @param form 创建任务需要的参数
* @return 返回任务标识
*/
public abstract String createTask(JSONObject form);
public abstract String createTask(JSONObject form);
/**
* 自动生成任务

View File

@@ -0,0 +1,156 @@
package org.nl.wms.sch.manage.buss;
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.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.nl.common.utils.UserInfoUtil;
import org.nl.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
import org.nl.utils.SpringContextHolder;
import org.nl.wms.WorkProcedureEnum;
import org.nl.wms.common.PointUpdateUtil;
import org.nl.wms.common.SortingUtil;
import org.nl.wms.common.StructFindUtil;
import org.nl.wms.ext.acs.service.impl.WmsToJnServiceImpl;
import org.nl.wms.sch.manage.AbstractAcsTask;
import org.nl.wms.sch.manage.AreaEnum;
import org.nl.wms.sch.manage.BillTypeEnum;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wms.sch.service.dto.PointDto;
import org.nl.wms.sch.service.impl.PointServiceImpl;
import org.nl.wms.st.ivt.IvtChangeTypeEnum;
import org.nl.wms.st.ivt.StoreIvtServiceImpl;
import org.nl.wql.WQL;
import org.nl.wql.core.bean.WQLObject;
import org.springframework.stereotype.Service;
import java.util.HashMap;
/**
* 1、半托缓存到分拣机械手下料位
*
*/
@Service
public class BTHCToXLTask extends AbstractAcsTask {
private final String THIS_CLASS = BTHCToXLTask.class.getName();
@Override
public void updateTaskStatus(JSONObject taskObj, String status) {
/** 改变任务状态 */
String task_id = taskObj.getString("task_id");
WQLObject taskTab = WQLObject.getWQLObject("sch_base_task");
JSONObject jsonTask = taskTab.query("task_id='" + task_id + "'").uniqueResult(0);
if (TaskStatusEnum.EXECUTING.getCode().equals(status)) {
// 更新任务状态为执行中
jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode());
jsonTask.put("update_time", DateUtil.now());
taskTab.update(jsonTask);
}
if (TaskStatusEnum.FINISHED.getCode().equals(status)) {
// 更新任务状态为完成
jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode());
jsonTask.put("taskfinish_mode", taskObj.getString("taskfinish_mode"));
jsonTask.put("update_time", DateUtil.now());
jsonTask.put("remark", "任务执行完成");
taskTab.update(jsonTask);
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
JSONObject startPointObj = pointTab.query("point_code='" + jsonTask.getString("start_point_code") + "'").uniqueResult(0);
startPointObj.put("lock_type", "00");
startPointObj.put("point_status", "00");
startPointObj.put("vehicle_code", "");
startPointObj.put("vehicle_type", "");
startPointObj.put("material_id", "");
startPointObj.put("update_time", DateUtil.now());
pointTab.update(startPointObj);
JSONObject endPoint = pointTab.query("point_code='" + jsonTask.getString("next_point_code") + "'").uniqueResult(0);
endPoint.put("lock_type", "00");
endPoint.put("point_status", "02");
endPoint.put("vehicle_code", jsonTask.getString("vehicle_code"));
endPoint.put("vehicle_type", jsonTask.getString("vehicle_type"));
endPoint.put("material_id", jsonTask.getString("material_id"));
endPoint.put("update_time", DateUtil.now());
pointTab.update(endPoint);
}
}
@Override
public void findStartPoint() {
}
@Override
public void findNextPoint() {
}
@Override
public String createTask(JSONObject form) {
// 请求参数 终点不能为空 物料,数量,客户,批次,创建方式,托盘,是否满托不能为空! 起点点位不为空时,单据编号不能为空!
String start_point_code = form.getString("start_point_code");
String next_point_code = form.getString("next_point_code");
String vehicle_code = form.getString("vehicle_code");
String vehicle_type = form.getString("vehicle_type");
String task_status = TaskStatusEnum.START_AND_POINT.getCode();
String material_id = form.getString("material_id");
String create_mode = form.getString("create_mode");
String task_id = IdUtil.getSnowflake(1, 1).nextId() + "";
JSONObject taskObj = new JSONObject();
taskObj.put("task_id", task_id);
taskObj.put("task_code", IdUtil.getSnowflake(1, 1).nextId() + "");
taskObj.put("task_type", "01");
taskObj.put("acs_task_type", "1");
taskObj.put("task_status", task_status);
taskObj.put("start_point_code", start_point_code);
taskObj.put("request_param", form.toJSONString());
taskObj.put("next_point_code", next_point_code);
taskObj.put("material_id", material_id);
taskObj.put("vehicle_code", vehicle_code);
taskObj.put("vehicle_type", vehicle_type);
taskObj.put("handle_class", THIS_CLASS);
taskObj.put("is_auto_issue", "1");
taskObj.put("create_name", "管理员");
taskObj.put("create_id", "1");
taskObj.put("create_time", DateUtil.now());
taskObj.put("is_delete", "0");
taskObj.put("create_mode", create_mode);
//锁住起点
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
JSONObject startPointObj = pointTab.query("point_code='" + taskObj.getString("start_point_code") + "'").uniqueResult(0);
taskObj.put("vehicle_code", startPointObj.getString("vehicle_code"));
taskObj.put("vehicle_type", startPointObj.getString("vehicle_type"));
taskObj.put("material_id", startPointObj.getString("material_id"));
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
taskTab.insert(taskObj);
startPointObj.put("lock_type", "01");
startPointObj.put("update_time", DateUtil.now());
pointTab.update(startPointObj);
return task_id;
}
@Override
public void forceFinish(String task_id) {
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode());
}
@Override
public void pullBack(String task_id) {
}
@Override
public void cancel(String task_id) {
}
}

View File

@@ -234,6 +234,7 @@ public class CallEmptyVehicleTask extends AbstractAcsTask {
}
vehicle_code = outStructObj.getString("vehicle_code");
vehicle_type = outStructObj.getString("vehicle_type");
if (StrUtil.isEmpty(vehicle_code)) {
vehicle_code = "999";
}
@@ -305,6 +306,7 @@ public class CallEmptyVehicleTask extends AbstractAcsTask {
taskObj.put("next_point_code", next_point_code);
taskObj.put("next_area", nextPoint.getArea_type());
taskObj.put("vehicle_code", vehicle_code);
taskObj.put("vehicle_type", vehicle_type);
taskObj.put("handle_class", THIS_CLASS);
taskObj.put("is_auto_issue", is_auto_issue);
taskObj.put("create_name", UserInfoUtil.getNickName());

View File

@@ -48,13 +48,6 @@ public class CallMaterialTask extends AbstractAcsTask {
jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode());
jsonTask.put("update_time", DateUtil.now());
taskTab.update(jsonTask);
HashMap map = new HashMap();
map.put("bill_status", "40");
map.put("update_optid", UserInfoUtil.getCurrentUserId());
map.put("update_optname", UserInfoUtil.getNickName());
map.put("update_time", DateUtil.now());
WQLObject.getWQLObject("ST_IVT_workProcedureIOS")
.update(map, "task_id='" + jsonTask.getString("task_id") + "'");
}
if (TaskStatusEnum.FINISHED.getCode().equals(status)) {
@@ -146,6 +139,7 @@ public class CallMaterialTask extends AbstractAcsTask {
startPointObj.put("lock_type", "00");
startPointObj.put("point_status", "00");
startPointObj.put("vehicle_code", "");
startPointObj.put("ext_data", "");
startPointObj.put("update_time", DateUtil.now());
pointTab.update(startPointObj);
taskTab.update(jsonTask);

View File

@@ -65,6 +65,9 @@ public class FmjToPackIngTask extends AbstractAcsTask {
startPointObj.put("lock_type", "00");
startPointObj.put("point_status", "00");
startPointObj.put("vehicle_code", "");
startPointObj.put("vehicle_type", "");
startPointObj.put("material_id", "");
startPointObj.put("ext_data", "");
startPointObj.put("update_time", DateUtil.now());
pointTab.update(startPointObj);
//调用mes接口
@@ -128,6 +131,7 @@ public class FmjToPackIngTask extends AbstractAcsTask {
taskObj.put("next_point_code", next_point_code);
taskObj.put("next_area", nextPoint.getArea_type());
taskObj.put("vehicle_code", vehicle_code);
taskObj.put("vehicle_type", start_pointObj.getString("vehicle_type"));
taskObj.put("handle_class", THIS_CLASS);
taskObj.put("is_auto_issue", "1");
taskObj.put("create_name", UserInfoUtil.getNickName());
@@ -144,8 +148,6 @@ public class FmjToPackIngTask extends AbstractAcsTask {
record1.put("end_time", DateUtil.now());
recordTab.update(record1);
}
return task_id;
}

View File

@@ -1,122 +0,0 @@
package org.nl.wms.sch.manage.buss;
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.JSONObject;
import org.nl.common.utils.UserInfoUtil;
import org.nl.exception.BadRequestException;
import org.nl.wms.sch.manage.AbstractAcsTask;
import org.nl.wms.sch.manage.AreaEnum;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wql.core.bean.WQLObject;
import org.springframework.stereotype.Service;
/**
* 入库任务生成
*/
@Service
public class RgvTask extends AbstractAcsTask {
private final String THIS_CLASS = RgvTask.class.getName();
@Override
public void updateTaskStatus(JSONObject taskObj, String status) {
/**
*改变任务状态
**/
String task_id = taskObj.getString("task_id");
WQLObject taskTab = WQLObject.getWQLObject("sch_base_task");
JSONObject jsonTask = taskTab.query("task_id='" + task_id + "'").uniqueResult(0);
if (TaskStatusEnum.EXECUTING.getCode().equals(status)) {
//更新任务状态为执行中
jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode());
jsonTask.put("update_time", DateUtil.now());
taskTab.update(jsonTask);
}
if (TaskStatusEnum.FINISHED.getCode().equals(status)) {
// 更新任务状态为完成
jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode());
jsonTask.put("taskfinish_mode", taskObj.getString("taskfinish_mode"));
jsonTask.put("update_time", DateUtil.now());
jsonTask.put("remark", "任务执行完成");
taskTab.update(jsonTask);
}
}
@Override
public void findStartPoint() {
}
@Override
public void findNextPoint() {
}
@Override
public String createTask(JSONObject form) {
JSONObject taskObj = new JSONObject();
//只需要传起点就好,跟载具,终点永远是入窑口
String vehicle_code = form.getString("vehicle_code");
String start_point_code = form.getString("start_point_code");
String next_point_code = form.getString("next_point_code");
if (StrUtil.isEmpty(vehicle_code)) {
throw new BadRequestException("载具不能为空!");
}
if (StrUtil.isEmpty(start_point_code)) {
throw new BadRequestException("起点不能为空!");
}
JSONObject beforTaskObj = WQLObject.getWQLObject("sch_base_task").query("is_delete='0' and start_point_code='" + start_point_code + "' and task_status <>'" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(beforTaskObj)) {
throw new BadRequestException("存在指令号为'" + beforTaskObj.getString("task_code") + "' 未完成!");
}
taskObj.put("task_id", IdUtil.getSnowflake(1, 1).nextId() + "");
String task_status = TaskStatusEnum.START_AND_POINT.getCode();
taskObj.put("task_code", IdUtil.getSnowflake(1, 1).nextId() + "");
taskObj.put("task_type", "05");
//输送任务
taskObj.put("acs_task_type", "2");
String start_area = AreaEnum.RYSSXQ.getCode();
String next_area = AreaEnum.YQY.getCode();
taskObj.put("task_status", task_status);
taskObj.put("start_point_code", start_point_code);
taskObj.put("start_area", start_area);
taskObj.put("next_area", next_area);
taskObj.put("next_point_code", next_point_code);
taskObj.put("vehicle_code", vehicle_code);
taskObj.put("create_name", UserInfoUtil.getNickName());
taskObj.put("create_id", UserInfoUtil.getCurrentUserId());
taskObj.put("create_time", DateUtil.now());
taskObj.put("update_optid", UserInfoUtil.getCurrentUserId());
taskObj.put("update_name", UserInfoUtil.getNickName());
taskObj.put("update_time", DateUtil.now());
taskObj.put("handle_class", THIS_CLASS);
//任务基础表【sch_base_task】
WQLObject.getWQLObject("sch_base_task").insert(taskObj);
return taskObj.getString("task_id");
}
@Override
public void forceFinish(String task_id) {
if (StrUtil.isEmpty(task_id)) {
throw new BadRequestException("任务id不能为空");
}
JSONObject taskjo = WQLObject.getWQLObject("sch_base_task").query("task_id='" + task_id + "'").uniqueResult(0);
taskjo.getString("taskfinish_mode");
this.updateTaskStatus(taskjo, TaskStatusEnum.FINISHED.getCode());
}
@Override
public void pullBack(String task_id) {
}
@Override
public void cancel(String task_id) {
}
}

View File

@@ -108,6 +108,9 @@ public class SendMaterialTask extends AbstractAcsTask {
endpointObj.put("lock_type", "00");
endpointObj.put("point_status", "02");
endpointObj.put("vehicle_code", vehicle_code);
endpointObj.put("vehicle_type", jsonTask.getString("vehicle_type"));
endpointObj.put("ext_data", jsonTask.getString("request_param"));
endpointObj.put("material_id", jsonTask.getString("material_id"));
endpointObj.put("update_time", DateUtil.now());
pointTab.update(endpointObj);
@@ -267,6 +270,7 @@ public class SendMaterialTask extends AbstractAcsTask {
qty_unit_id = BussConstant.HN_IN_QTY_UNIT_ID;
bill_type = BillTypeEnum.SZRK.getCode();
endArea_type = AreaEnum.BTHCQ.getCode();
break;
default:
qty_unit_id = BussConstant.HN_IN_QTY_UNIT_ID;
@@ -322,6 +326,22 @@ public class SendMaterialTask extends AbstractAcsTask {
}
String task_status = TaskStatusEnum.START_AND_POINT.getCode();
PointDto nextPoint = pointService.findByCode(next_point_code);
// 如果是压料制下,或者是分拣送料需要更新组盘信息将task_id 更新
JSONObject workInfo = WQL.getWO("QSTRUCT_RULE").addParam("flag", "1").addParam("code", start_point_code).process().uniqueResult(0);
if (StrUtil.equals(WorkProcedureEnum.YZGX.getCode(), workInfo.getString("workprocedure_code"))
|| StrUtil.equals(WorkProcedureEnum.FJGX.getCode(), workInfo.getString("workprocedure_code"))) {
WQLObject groupTable = WQLObject.getWQLObject("st_buss_vehiclegroup");
JSONObject groupInfo = groupTable.query("group_id='" + group_id + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(groupInfo)) {
groupInfo.put("task_id", task_id);
groupInfo.put("material_move_id", task_id);
groupTable.update(groupInfo);
}
}
// 终点点加锁
HashMap lock_map = new HashMap();
lock_map.put("lock_type", "01");
@@ -342,22 +362,27 @@ public class SendMaterialTask extends AbstractAcsTask {
taskObj.put("create_name", UserInfoUtil.getNickName());
taskObj.put("create_id", UserInfoUtil.getCurrentUserId());
taskObj.put("create_time", DateUtil.now());
taskObj.put("update_name", UserInfoUtil.getNickName());
taskObj.put("update_id", UserInfoUtil.getCurrentUserId());
taskObj.put("update_time", DateUtil.now());
taskObj.put("vehicle_code", vehicle_code);
taskObj.put("is_delete", "0");
//包装工序,把木托盘类型
if (StrUtil.equals(WorkProcedureEnum.FJGX.getCode(), workInfo.getString("workprocedure_code"))){
String device_id = workInfo.getString("device_id");
JSONObject produceObj = WQLObject.getWQLObject("PDM_MG_produceTask").query("device_id='"
+ device_id + "' and producetask_status in('02','03','04')").uniqueResult(0);
if (ObjectUtil.isEmpty(produceObj))
throw new BadRequestException("设备未设置工单或者工单状态不正确请检查LMS设备工单状态!");
//木托盘类型
taskObj.put("vehicle_type", produceObj.getString("vehicle_type"));
taskObj.put("material_id", produceObj.getString("material_id"));
taskObj.put("producetask_id", produceObj.getString("producetask_id"));
}
taskTable.insert(taskObj);
// 如果是压料制下,或者是分拣送料需要更新组盘信息将task_id 更新
JSONObject workInfo = WQL.getWO("QSTRUCT_RULE").addParam("flag", "1").addParam("code", start_point_code).process().uniqueResult(0);
if (StrUtil.equals(WorkProcedureEnum.YZGX.getCode(), workInfo.getString("workprocedure_code"))
|| StrUtil.equals(WorkProcedureEnum.FJGX.getCode(), workInfo.getString("workprocedure_code"))) {
WQLObject groupTable = WQLObject.getWQLObject("st_buss_vehiclegroup");
JSONObject groupInfo = groupTable.query("group_id='" + group_id + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(groupInfo)) {
groupInfo.put("task_id", task_id);
groupInfo.put("material_move_id", task_id);
groupTable.update(groupInfo);
}
}
//结束木托和钢托绑定时间
// 载具点位记录表【SCH_BASE_vehiclePointRecord】

View File

@@ -4,7 +4,6 @@ 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 lombok.RequiredArgsConstructor;
@@ -12,18 +11,10 @@ import lombok.extern.slf4j.Slf4j;
import org.nl.common.utils.UserInfoUtil;
import org.nl.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
import org.nl.utils.SpringContextHolder;
import org.nl.wms.WorkProcedureEnum;
import org.nl.wms.common.PointUpdateUtil;
import org.nl.wms.common.StructFindUtil;
import org.nl.wms.database.service.VehicleService;
import org.nl.wms.ext.acs.service.impl.WmsToAcsServiceImpl;
import org.nl.wms.ext.acs.service.impl.WmsToJnServiceImpl;
import org.nl.wms.sch.manage.AbstractAcsTask;
import org.nl.wms.sch.manage.AreaEnum;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wms.sch.service.PointService;
import org.nl.wms.sch.service.dto.PointDto;
import org.nl.wql.WQL;
import org.nl.wql.core.bean.WQLObject;
import org.springframework.stereotype.Service;
@@ -40,8 +31,7 @@ import java.util.HashMap;
@Slf4j
public class ToPackIngTask extends AbstractAcsTask {
private final String THIS_CLASS = ToPackIngTask.class.getName();
private final VehicleService vehicleService;
private final WmsToAcsServiceImpl wmsToAcsServiceImpl;
@Override
public void updateTaskStatus(JSONObject taskObj, String status) {
@@ -63,6 +53,7 @@ public class ToPackIngTask extends AbstractAcsTask {
}
if (TaskStatusEnum.FINISHED.getCode().equals(status)) {
//覆膜或者半托
String startPointCode2 = jsonTask.getString("start_point_code2");
String nextPointCode2 = jsonTask.getString("next_point_code2");
// 更新任务状态为完成
@@ -76,18 +67,22 @@ public class ToPackIngTask extends AbstractAcsTask {
JSONObject startPointObj = pointTab.query("point_code='" + jsonTask.getString("start_point_code") + "'").uniqueResult(0);
startPointObj.put("lock_type", "00");
startPointObj.put("point_status", "00");
// startPointObj.put("vehicle_code", "");
startPointObj.put("update_time", DateUtil.now());
pointTab.update(startPointObj);
JSONObject startPointCode2Obj = pointTab.query("point_code='" + startPointCode2 + "'").uniqueResult(0);
JSONObject nextPointCode2Obj = pointTab.query("point_code='" + nextPointCode2 + "'").uniqueResult(0);
//覆膜或者半托
if (ObjectUtil.isNotEmpty(startPointCode2Obj)) {
startPointCode2Obj.put("lock_type", "00");
startPointCode2Obj.put("point_status", "00");
startPointCode2Obj.put("vehicle_code", "");
startPointCode2Obj.put("vehicle_type", "");
startPointCode2Obj.put("material_id", "");
startPointCode2Obj.put("update_time", DateUtil.now());
pointTab.update(startPointCode2Obj);
}
//分拣机械手下料位
if (ObjectUtil.isNotEmpty(nextPointCode2Obj)) {
nextPointCode2Obj.put("lock_type", "00");
nextPointCode2Obj.put("point_status", "00");
@@ -162,10 +157,10 @@ public class ToPackIngTask extends AbstractAcsTask {
throw new BadRequestException("存在指令号为'" + beforTaskObj.getString("task_code") + "' 未完成!");
}
String task_id = IdUtil.getSnowflake(1, 1).nextId() + "";
PointService pointService = SpringContextHolder.getBean(PointService.class);
PointDto startPoint = pointService.findByCode(start_point_code);
JSONObject startPoint = pointTable.query("point_code='" + start_point_code + "'").uniqueResult(0);
String task_status = TaskStatusEnum.START_AND_POINT.getCode();
PointDto nextPoint = pointService.findByCode(next_point_code);
JSONObject taskObj = new JSONObject();
taskObj.put("task_id", task_id);
taskObj.put("task_code", IdUtil.getSnowflake(1, 1).nextId() + "");
@@ -173,10 +168,9 @@ public class ToPackIngTask extends AbstractAcsTask {
taskObj.put("acs_task_type", "1");
taskObj.put("task_status", task_status);
taskObj.put("start_point_code", start_point_code);
taskObj.put("start_area", startPoint.getArea_type());
taskObj.put("start_area", startPoint.getString("area_type"));
taskObj.put("request_param", form.toJSONString());
taskObj.put("next_point_code", next_point_code);
taskObj.put("next_area", nextPoint.getArea_type());
taskObj.put("vehicle_code", vehicle_code);
taskObj.put("handle_class", THIS_CLASS);
taskObj.put("is_auto_issue", "1");
@@ -190,16 +184,27 @@ public class ToPackIngTask extends AbstractAcsTask {
String vehicle_type = form.getString("vehicle_type");
String start_area = "";
String point = "";
String workprocedure_id = WorkProcedureEnum.FJGX.getId();
JSONObject joo = pointTable.query("point_code='" + start_point_code + "'").uniqueResult(0);
JSONObject jsonObject1 = WQL.getWO("ACSTOMES_001").addParam("flag", "1").addParam("workprocedure_id", workprocedure_id).addParam("material_id", material_id).addParam("device_id", joo.getString("device_id")).process().uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonObject1)) {
// 如果有库存,则出半满托盘
// 叫料出库
point = jsonObject1.getString("point_code");
vehicle_code = jsonObject1.getString("vehicle_code");
vehicle_type = jsonObject1.getString("vehicle_type");
taskObj.put("start_point_code2", jsonObject1.getString("point_code"));
//生产工单信息
JSONObject workInfo = WQL.getWO("QSTRUCT_RULE").addParam("flag", "1").addParam("code", start_point_code)
.process().uniqueResult(0);
String device_id = workInfo.getString("device_id");
JSONObject produceObj = WQLObject.getWQLObject("PDM_MG_produceTask").query("device_id='"
+ device_id + "' and producetask_status in('02','03','04')").uniqueResult(0);
if (ObjectUtil.isEmpty(produceObj))
throw new BadRequestException("设备未设置工单或者工单状态不正确请检查LMS设备工单状态!");
//查找半托缓存位
JSONObject start_Point2 = pointTable.query("area_type='06' and vehicle_type = '"+produceObj.getString("vehicle_type")+"' and material_id = '"+produceObj.getString("material_id")+"'").uniqueResult(0);
// 如果半托缓存有库存,则出半满托盘
if (ObjectUtil.isNotEmpty(start_Point2)) {
point = start_Point2.getString("point_code");
vehicle_code = start_Point2.getString("vehicle_code");
vehicle_type = start_Point2.getString("vehicle_type");
taskObj.put("start_point_code2", start_Point2.getString("point_code"));
taskObj.put("next_point_code2", start_point_code);
} else {
// 找空木托盘
@@ -211,49 +216,25 @@ public class ToPackIngTask extends AbstractAcsTask {
JSONArray pointarr2 = WQL.getWO("ACSTOMES_001").addParam("point_code", "KTPDDW5").addParam("flag", "4")
.process().getResultJSONArray(0);
PointUpdateUtil.updatePoint(pointarr2);
JSONObject workInfo = WQL.getWO("QSTRUCT_RULE").addParam("flag", "1").addParam("code", start_point_code)
.process().uniqueResult(0);
String device_id = workInfo.getString("device_id");
JSONObject produceObj = WQLObject.getWQLObject("PDM_MG_produceTask").query("device_id='"
+ device_id + "' and producetask_status in('02','03','04')").uniqueResult(0);
if (ObjectUtil.isEmpty(produceObj))
throw new BadRequestException("设备未设置工单或者工单状态不正确请检查LMS设备工单状态!");
vehicle_type = produceObj.getString("vehicle_type");
start_area = AreaEnum.MTPQ.getCode();
JSONObject param = new JSONObject();
param.put("vehicle_type", vehicle_type);
param.put("area_type", start_area);
param.put("point_code", start_point_code);
JSONObject outStructObj = StructFindUtil.getEmptyVehicleOutStruct(param); // 找覆膜点
if (ObjectUtil.isEmpty(outStructObj)) {
throw new BadRequestException("未找到合适的空托盘点位");
vehicle_type = produceObj.getString("vehicle_type");
start_Point2 = pointTable.query("area_type='05' and vehicle_type = '"+produceObj.getString("vehicle_type")+"'").uniqueResult(0);
if (ObjectUtil.isEmpty(start_Point2)) {
throw new BadRequestException("覆膜区未找到合适的木托盘类型");
}
point = outStructObj.getString("struct_code");
taskObj.put("start_point_code2", outStructObj.getString("struct_code"));
taskObj.put("start_point_code2", start_Point2.getString("point_code"));
taskObj.put("next_point_code2", start_point_code);
vehicle_code = CodeUtil.getNewCode("VEHICCLE_CODE_MTP");
}
// 把载具类型给RGV
JSONObject js = new JSONObject();
JSONArray array = new JSONArray();
js.put("device_code", "RGV2");
js.put("code", "to_container_type");
js.put("value", vehicle_type);
array.add(js);
try {
wmsToAcsServiceImpl.action(array);
} catch (Exception e) {
e.printStackTrace();
}
// todo: start_point_code设置新的载具类型和载具编码
joo.put("vehicle_code", vehicle_code);
joo.put("vehicle_type", vehicle_type);
WQLObject.getWQLObject("sch_base_point").update(joo);
startPoint.put("vehicle_code", vehicle_code);
WQLObject.getWQLObject("sch_base_point").update(startPoint);
// 锁住点位
HashMap lock_map = new HashMap();
lock_map.put("lock_type", "01");
WQLObject.getWQLObject("sch_base_point")
.update(lock_map, "point_code = '" + point + "'");
WQLObject.getWQLObject("sch_base_point").update(lock_map, "point_code = '" + point + "'");
//木托盘类型
taskObj.put("vehicle_type", vehicle_type);
taskTable.insert(taskObj);
return task_id;
}

View File

@@ -47,7 +47,6 @@
point.*,
structattr.struct_id,
structivt.stockrecord_id,
structivt.material_id,
structivt.is_full,
structivt.ivt_qty,
protask.producetask_code,

View File

@@ -1,5 +1,10 @@
server:
port: 8012
tomcat:
max-threads: 1000
accept-count: 1000
max-connections: 20000
min-spare-threads: 100
#配置数据源
spring:
datasource: