|
|
@ -10,17 +10,14 @@ 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.core.bean.WQLObject; |
|
|
|
import org.nl.modules.wql.util.SpringContextHolder; |
|
|
|
import org.nl.wms.basedata.service.dto.VehicleDto; |
|
|
|
import org.nl.wms.ext.acs.service.AcsToWmsService; |
|
|
|
import org.nl.wms.log.LokiLog; |
|
|
|
import org.nl.wms.log.LokiLogType; |
|
|
|
|
|
|
|
import org.nl.wms.sch.manage.*; |
|
|
|
import org.nl.wms.sch.service.TaskService; |
|
|
|
import org.nl.wms.sch.tasks.PointUpdateUtil; |
|
|
|
import org.nl.wms.sch.tasks.callEmpty.FjCallEmptyVehicleTask; |
|
|
|
import org.nl.wms.sch.tasks.callEmpty.HnCallEmptyVehicleTask; |
|
|
|
import org.nl.wms.sch.tasks.callEmpty.YzjCallEmptyVehicleTask; |
|
|
@ -29,7 +26,12 @@ import org.nl.wms.sch.tasks.callMaterial.YzjCallMaterialTask; |
|
|
|
import org.nl.wms.sch.tasks.sendEmpty.DpSendEmpVehicleTask; |
|
|
|
import org.nl.wms.sch.tasks.sendEmpty.FjSendEmpVehicleTask; |
|
|
|
import org.nl.wms.sch.tasks.sendEmpty.YzjSendEmpVehicleTask; |
|
|
|
import org.nl.wms.sch.tasks.sendMaterial.*; |
|
|
|
import org.nl.wms.sch.tasks.sendMaterial.FjSendMaterialTask; |
|
|
|
import org.nl.wms.sch.tasks.sendMaterial.HnSendMaterialTask; |
|
|
|
import org.nl.wms.sch.tasks.sendMaterial.SzSendMaterialTask; |
|
|
|
import org.nl.wms.sch.tasks.sendMaterial.YzjSendMaterialTask; |
|
|
|
import org.redisson.api.RLock; |
|
|
|
import org.redisson.api.RedissonClient; |
|
|
|
import org.springframework.http.HttpStatus; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
@ -37,6 +39,7 @@ import org.springframework.transaction.annotation.Transactional; |
|
|
|
import java.lang.reflect.InvocationTargetException; |
|
|
|
import java.lang.reflect.Method; |
|
|
|
import java.util.Map; |
|
|
|
import java.util.concurrent.TimeUnit; |
|
|
|
|
|
|
|
@Service |
|
|
|
@RequiredArgsConstructor |
|
|
@ -44,6 +47,8 @@ import java.util.Map; |
|
|
|
public class AcsToWmsServiceImpl implements AcsToWmsService { |
|
|
|
private final TaskService taskService; |
|
|
|
|
|
|
|
private final RedissonClient redissonClient; |
|
|
|
|
|
|
|
/** |
|
|
|
* task_id:任务标识 |
|
|
|
* task_code:任务编码 |
|
|
@ -52,7 +57,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { |
|
|
|
* @param string 条件 |
|
|
|
* @returnzss |
|
|
|
*/ |
|
|
|
@LokiLog(type = LokiLogType.ACS_TO_LMS) |
|
|
|
|
|
|
|
@Override |
|
|
|
public Map<String, Object> receiveTaskStatusAcs(String string) { |
|
|
|
JSONArray array = JSONArray.parseArray(string); |
|
|
@ -121,7 +126,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { |
|
|
|
return result; |
|
|
|
} |
|
|
|
|
|
|
|
@LokiLog(type = LokiLogType.ACS_TO_LMS) |
|
|
|
|
|
|
|
@Override |
|
|
|
public String againApply(String task_id) { |
|
|
|
log.info("输入参数:" + task_id); |
|
|
@ -145,13 +150,13 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { |
|
|
|
return point_code; |
|
|
|
} |
|
|
|
|
|
|
|
@LokiLog(type = LokiLogType.ACS_TO_LMS) |
|
|
|
|
|
|
|
@Override |
|
|
|
public Map<String, Object> receivePointStatusFromAcs(Map<String, String> jsonObject) { |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
@LokiLog(type = LokiLogType.ACS_TO_LMS) |
|
|
|
|
|
|
|
@Override |
|
|
|
public Map<String, Object> orderFinish(String string) { |
|
|
|
JSONObject orderJson = JSONObject.parseObject(string); |
|
|
@ -174,7 +179,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { |
|
|
|
return result; |
|
|
|
} |
|
|
|
|
|
|
|
@LokiLog(type = LokiLogType.ACS_TO_LMS) |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
public JSONObject apply(JSONObject whereJson) { |
|
|
@ -185,141 +190,156 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { |
|
|
|
String weight = whereJson.getString("weight"); |
|
|
|
String qty = whereJson.getString("qty"); |
|
|
|
|
|
|
|
if (ObjectUtil.isEmpty(type)) throw new BadRequestException("类型不能为空"); |
|
|
|
if (ObjectUtil.isEmpty(point_code)) throw new BadRequestException("点位不能为空"); |
|
|
|
|
|
|
|
/** |
|
|
|
* 类型映射 |
|
|
|
* 1: 送料入库 |
|
|
|
* 2: 叫料出库 |
|
|
|
* 3: 送空托盘 |
|
|
|
* 4: 叫空托盘 |
|
|
|
*/ |
|
|
|
String regionId = WQLObject |
|
|
|
.getWQLObject("sch_base_point") |
|
|
|
.query("point_code = '" + point_code + "'") |
|
|
|
.uniqueResult(0) |
|
|
|
.getString("region_id"); |
|
|
|
|
|
|
|
RegionEnum regionEnum = RegionEnum.get(regionId); |
|
|
|
|
|
|
|
// 参数统一获取
|
|
|
|
JSONObject param = new JSONObject(); |
|
|
|
param.put("vehicle_code", vehicle_code); |
|
|
|
param.put("is_full", is_full); |
|
|
|
param.put("weight", weight); |
|
|
|
param.put("qty", qty); |
|
|
|
|
|
|
|
/* |
|
|
|
* 根据type判断是什么业务类型: |
|
|
|
* 1.混碾机送料入库-困料货架 |
|
|
|
* 2.混碾机呼叫空托盘 |
|
|
|
* 3.压制机上料位叫料出库 |
|
|
|
* 4.压制机上料位送空盅 |
|
|
|
* 5.压制机满料入库 |
|
|
|
* 6.压制机呼叫空钢托盘 |
|
|
|
* 8.烧制送料入库 |
|
|
|
* 9.分拣叫料出库 |
|
|
|
* 10.分拣送空钢托盘 |
|
|
|
* 11.分拣送料入库 |
|
|
|
* 12.分拣呼叫木托盘 |
|
|
|
* 13.叠盘区送空钢托盘 |
|
|
|
*/ |
|
|
|
switch (type) { |
|
|
|
case "1": |
|
|
|
switch (regionEnum) { |
|
|
|
case HNQ: |
|
|
|
// 1.混碾机送料入库:混碾机物料送到困料货架
|
|
|
|
// 创建任务
|
|
|
|
param.put("point_code1", point_code); // 起点
|
|
|
|
SpringContextHolder.getBean(HnSendMaterialTask.class).createTask(param); |
|
|
|
break; |
|
|
|
case YZQ: |
|
|
|
// 5.压制机满料入库
|
|
|
|
param.put("point_code1", point_code); // 起点
|
|
|
|
param.put("group_id", whereJson.getString("group_id")); // 组盘标识 - 机械手过来的
|
|
|
|
// 创建任务
|
|
|
|
SpringContextHolder.getBean(YzjSendMaterialTask.class).createTask(param); |
|
|
|
break; |
|
|
|
case YQ: |
|
|
|
// 8.烧制送料入库
|
|
|
|
param.put("point_code1", point_code); // 起点
|
|
|
|
SpringContextHolder.getBean(SzSendMaterialTask.class).createTask(param); |
|
|
|
break; |
|
|
|
case ZDCDX: |
|
|
|
// 11.分拣送料入库
|
|
|
|
param.put("point_code1", point_code); // 起点
|
|
|
|
param.put("group_id", whereJson.getString("group_id")); // 组盘标识 - 机械手过来的
|
|
|
|
SpringContextHolder.getBean(FjSendMaterialTask.class).createTask(param); |
|
|
|
break; |
|
|
|
default: |
|
|
|
throw new BadRequestException("ACS任务类型错误"); |
|
|
|
} |
|
|
|
break; |
|
|
|
case "2": |
|
|
|
switch (regionEnum) { |
|
|
|
case YZQ: |
|
|
|
// 3.压制机叫料任务
|
|
|
|
param.put("point_code2", point_code); // 终点
|
|
|
|
// 创建任务
|
|
|
|
SpringContextHolder.getBean(YzjCallMaterialTask.class).createTask(param); |
|
|
|
break; |
|
|
|
case ZDCDX: |
|
|
|
// 9.分拣叫料出库
|
|
|
|
param.put("point_code2", point_code); // 终点
|
|
|
|
SpringContextHolder.getBean(FjCallMaterialTask.class).createTask(param); |
|
|
|
break; |
|
|
|
default: |
|
|
|
throw new BadRequestException("ACS任务类型错误"); |
|
|
|
} |
|
|
|
break; |
|
|
|
case "3": |
|
|
|
switch (regionEnum) { |
|
|
|
case YZQ: |
|
|
|
// 4.压制机送空盅
|
|
|
|
param.put("point_code1", point_code); // 起点
|
|
|
|
// 创建任务
|
|
|
|
SpringContextHolder.getBean(YzjSendEmpVehicleTask.class).createTask(param); |
|
|
|
RLock lock = redissonClient.getLock("acs_to_wms:" + type); |
|
|
|
boolean tryLock = false; |
|
|
|
try { |
|
|
|
tryLock = lock.tryLock(5, TimeUnit.SECONDS); |
|
|
|
if (tryLock) { |
|
|
|
if (ObjectUtil.isEmpty(type)) throw new BadRequestException("类型不能为空"); |
|
|
|
if (ObjectUtil.isEmpty(point_code)) throw new BadRequestException("点位不能为空"); |
|
|
|
|
|
|
|
/** |
|
|
|
* 类型映射 |
|
|
|
* 1: 送料入库 |
|
|
|
* 2: 叫料出库 |
|
|
|
* 3: 送空托盘 |
|
|
|
* 4: 叫空托盘 |
|
|
|
*/ |
|
|
|
String regionId = WQLObject |
|
|
|
.getWQLObject("sch_base_point") |
|
|
|
.query("point_code = '" + point_code + "'") |
|
|
|
.uniqueResult(0) |
|
|
|
.getString("region_id"); |
|
|
|
|
|
|
|
RegionEnum regionEnum = RegionEnum.get(regionId); |
|
|
|
|
|
|
|
// 参数统一获取
|
|
|
|
JSONObject param = new JSONObject(); |
|
|
|
param.put("vehicle_code", vehicle_code); |
|
|
|
param.put("is_full", is_full); |
|
|
|
param.put("weight", weight); |
|
|
|
param.put("qty", qty); |
|
|
|
|
|
|
|
/* |
|
|
|
* 根据type判断是什么业务类型: |
|
|
|
* 1.混碾机送料入库-困料货架 |
|
|
|
* 2.混碾机呼叫空托盘 |
|
|
|
* 3.压制机上料位叫料出库 |
|
|
|
* 4.压制机上料位送空盅 |
|
|
|
* 5.压制机满料入库 |
|
|
|
* 6.压制机呼叫空钢托盘 |
|
|
|
* 8.烧制送料入库 |
|
|
|
* 9.分拣叫料出库 |
|
|
|
* 10.分拣送空钢托盘 |
|
|
|
* 11.分拣送料入库 |
|
|
|
* 12.分拣呼叫木托盘 |
|
|
|
* 13.叠盘区送空钢托盘 |
|
|
|
*/ |
|
|
|
switch (type) { |
|
|
|
case "1": |
|
|
|
switch (regionEnum) { |
|
|
|
case HNQ: |
|
|
|
// 1.混碾机送料入库:混碾机物料送到困料货架
|
|
|
|
// 创建任务
|
|
|
|
param.put("point_code1", point_code); // 起点
|
|
|
|
SpringContextHolder.getBean(HnSendMaterialTask.class).createTask(param); |
|
|
|
break; |
|
|
|
case YZQ: |
|
|
|
// 5.压制机满料入库
|
|
|
|
param.put("point_code1", point_code); // 起点
|
|
|
|
param.put("group_id", whereJson.getString("group_id")); // 组盘标识 - 机械手过来的
|
|
|
|
// 创建任务
|
|
|
|
SpringContextHolder.getBean(YzjSendMaterialTask.class).createTask(param); |
|
|
|
break; |
|
|
|
case YQ: |
|
|
|
// 8.烧制送料入库
|
|
|
|
param.put("point_code1", point_code); // 起点
|
|
|
|
SpringContextHolder.getBean(SzSendMaterialTask.class).createTask(param); |
|
|
|
break; |
|
|
|
case ZDCDX: |
|
|
|
// 11.分拣送料入库
|
|
|
|
param.put("point_code1", point_code); // 起点
|
|
|
|
param.put("group_id", whereJson.getString("group_id")); // 组盘标识 - 机械手过来的
|
|
|
|
SpringContextHolder.getBean(FjSendMaterialTask.class).createTask(param); |
|
|
|
break; |
|
|
|
default: |
|
|
|
throw new BadRequestException("ACS任务类型错误"); |
|
|
|
} |
|
|
|
break; |
|
|
|
case ZDCDX: |
|
|
|
// 10.分拣送钢托盘
|
|
|
|
param.put("point_code1", point_code); // 起点
|
|
|
|
SpringContextHolder.getBean(FjSendEmpVehicleTask.class).createTask(param); |
|
|
|
case "2": |
|
|
|
switch (regionEnum) { |
|
|
|
case YZQ: |
|
|
|
// 3.压制机叫料任务
|
|
|
|
param.put("point_code2", point_code); // 终点
|
|
|
|
// 创建任务
|
|
|
|
SpringContextHolder.getBean(YzjCallMaterialTask.class).createTask(param); |
|
|
|
break; |
|
|
|
case ZDCDX: |
|
|
|
// 9.分拣叫料出库
|
|
|
|
param.put("point_code2", point_code); // 终点
|
|
|
|
SpringContextHolder.getBean(FjCallMaterialTask.class).createTask(param); |
|
|
|
break; |
|
|
|
default: |
|
|
|
throw new BadRequestException("ACS任务类型错误"); |
|
|
|
} |
|
|
|
break; |
|
|
|
case KGTDPQ: |
|
|
|
// 13.叠盘区送空钢托盘
|
|
|
|
param.put("point_code1", point_code); // 起点
|
|
|
|
SpringContextHolder.getBean(DpSendEmpVehicleTask.class).createTask(param); |
|
|
|
case "3": |
|
|
|
switch (regionEnum) { |
|
|
|
case YZQ: |
|
|
|
// 4.压制机送空盅
|
|
|
|
param.put("point_code1", point_code); // 起点
|
|
|
|
// 创建任务
|
|
|
|
SpringContextHolder.getBean(YzjSendEmpVehicleTask.class).createTask(param); |
|
|
|
break; |
|
|
|
case ZDCDX: |
|
|
|
// 10.分拣送钢托盘
|
|
|
|
param.put("point_code1", point_code); // 起点
|
|
|
|
SpringContextHolder.getBean(FjSendEmpVehicleTask.class).createTask(param); |
|
|
|
break; |
|
|
|
case KGTDPQ: |
|
|
|
// 13.叠盘区送空钢托盘
|
|
|
|
param.put("point_code1", point_code); // 起点
|
|
|
|
SpringContextHolder.getBean(DpSendEmpVehicleTask.class).createTask(param); |
|
|
|
break; |
|
|
|
default: |
|
|
|
throw new BadRequestException("ACS任务类型错误"); |
|
|
|
} |
|
|
|
break; |
|
|
|
default: |
|
|
|
throw new BadRequestException("ACS任务类型错误"); |
|
|
|
} |
|
|
|
break; |
|
|
|
case "4": |
|
|
|
switch (regionEnum) { |
|
|
|
case HNQ: |
|
|
|
// 2.混碾机呼叫空托盘
|
|
|
|
param.put("point_code2", point_code); // 终点
|
|
|
|
// 创建任务
|
|
|
|
SpringContextHolder.getBean(HnCallEmptyVehicleTask.class).createTask(param); |
|
|
|
break; |
|
|
|
case YZQ: |
|
|
|
// 6.压制机呼叫空托盘
|
|
|
|
param.put("point_code2", point_code); // 终点
|
|
|
|
// 创建任务
|
|
|
|
SpringContextHolder.getBean(YzjCallEmptyVehicleTask.class).createTask(param); |
|
|
|
break; |
|
|
|
case ZDCDX: |
|
|
|
// 12.分拣呼叫木托盘
|
|
|
|
param.put("point_code2", point_code); // 起点
|
|
|
|
SpringContextHolder.getBean(FjCallEmptyVehicleTask.class).createTask(param); |
|
|
|
case "4": |
|
|
|
switch (regionEnum) { |
|
|
|
case HNQ: |
|
|
|
// 2.混碾机呼叫空托盘
|
|
|
|
param.put("point_code2", point_code); // 终点
|
|
|
|
// 创建任务
|
|
|
|
SpringContextHolder.getBean(HnCallEmptyVehicleTask.class).createTask(param); |
|
|
|
break; |
|
|
|
case YZQ: |
|
|
|
// 6.压制机呼叫空托盘
|
|
|
|
param.put("point_code2", point_code); // 终点
|
|
|
|
// 创建任务
|
|
|
|
SpringContextHolder.getBean(YzjCallEmptyVehicleTask.class).createTask(param); |
|
|
|
break; |
|
|
|
case ZDCDX: |
|
|
|
// 12.分拣呼叫木托盘
|
|
|
|
param.put("point_code2", point_code); // 起点
|
|
|
|
SpringContextHolder.getBean(FjCallEmptyVehicleTask.class).createTask(param); |
|
|
|
break; |
|
|
|
default: |
|
|
|
throw new BadRequestException("ACS任务类型错误"); |
|
|
|
} |
|
|
|
break; |
|
|
|
default: |
|
|
|
throw new BadRequestException("ACS任务类型错误"); |
|
|
|
} |
|
|
|
break; |
|
|
|
default: |
|
|
|
throw new BadRequestException("ACS任务类型错误"); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} catch (Exception e) { |
|
|
|
e.printStackTrace(); |
|
|
|
} finally { |
|
|
|
if (tryLock) { |
|
|
|
lock.unlock(); |
|
|
|
} |
|
|
|
} |
|
|
|
return null; |
|
|
|
} |
|
|
@ -641,7 +661,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { |
|
|
|
WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); |
|
|
|
String point_code = (String) jsonObject.get("device_code"); |
|
|
|
JSONObject point = pointTab.query("point_code = '" + point_code + "'").uniqueResult(0); |
|
|
|
if (ObjectUtil.isEmpty(point)) throw new BadRequestException("未找到点位编码为'"+ point_code +"'的点位信息"); |
|
|
|
if (ObjectUtil.isEmpty(point)) throw new BadRequestException("未找到点位编码为'" + point_code + "'的点位信息"); |
|
|
|
String group_id = point.getString("group_id"); |
|
|
|
JSONObject vehicleObj2 = groupTab.query("group_id = '" + group_id + "' AND is_delete='0'").uniqueResult(0); |
|
|
|
if (ObjectUtil.isNotEmpty(vehicleObj2)) vehicleObj = vehicleObj2; |
|
|
|