|
@@ -30,7 +30,11 @@ import com.github.zuihou.business.productionReadyCenter.entity.*;
|
|
|
import com.github.zuihou.business.productionReadyCenter.service.*;
|
|
|
import com.github.zuihou.business.productionResourceCenter.dao.ProductionresourceBizMapper;
|
|
|
import com.github.zuihou.business.productionResourceCenter.dao.ProductionresourcePositionMapper;
|
|
|
-import com.github.zuihou.business.productionResourceCenter.entity.*;
|
|
|
+import com.github.zuihou.business.productionResourceCenter.dao.ResourceBusinessMapper;
|
|
|
+import com.github.zuihou.business.productionResourceCenter.entity.Productionresource;
|
|
|
+import com.github.zuihou.business.productionResourceCenter.entity.ProductionresourcePosition;
|
|
|
+import com.github.zuihou.business.productionResourceCenter.entity.ResourceAutoCode;
|
|
|
+import com.github.zuihou.business.productionResourceCenter.entity.ResourceBusiness;
|
|
|
import com.github.zuihou.business.productionResourceCenter.service.ProductionresourcePositionService;
|
|
|
import com.github.zuihou.business.productionResourceCenter.service.ResourceAutoCodeService;
|
|
|
import com.github.zuihou.business.productionResourceCenter.service.ResourceBusinessService;
|
|
@@ -38,7 +42,10 @@ import com.github.zuihou.business.productionResourceCenter.service.ZZoneService;
|
|
|
import com.github.zuihou.business.util.DynamicRabbitMq;
|
|
|
import com.github.zuihou.business.util.ManualTaskOperatorUtil;
|
|
|
import com.github.zuihou.business.util.MsgUtil;
|
|
|
-import com.github.zuihou.common.constant.*;
|
|
|
+import com.github.zuihou.common.constant.BizConstant;
|
|
|
+import com.github.zuihou.common.constant.CacheKey;
|
|
|
+import com.github.zuihou.common.constant.CodeRuleModule;
|
|
|
+import com.github.zuihou.common.constant.DictionaryKey;
|
|
|
import com.github.zuihou.common.util.StringUtil;
|
|
|
import com.github.zuihou.context.BaseContextHandler;
|
|
|
import com.github.zuihou.database.mybatis.conditions.Wraps;
|
|
@@ -49,7 +56,6 @@ import com.github.zuihou.tenant.entity.ProductionlineUser;
|
|
|
import com.github.zuihou.tenant.service.CodeRuleService;
|
|
|
import com.github.zuihou.tenant.service.ProductionlineService;
|
|
|
import com.github.zuihou.tenant.service.ProductionlineUserService;
|
|
|
-import com.github.zuihou.tenant.service.ProductionresourceService;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.slf4j.Logger;
|
|
@@ -69,7 +75,6 @@ import java.util.stream.Collectors;
|
|
|
|
|
|
import static com.github.zuihou.utils.BizAssert.isFalse;
|
|
|
import static java.util.stream.Collectors.groupingBy;
|
|
|
-import static java.util.stream.Collectors.toList;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
@@ -194,7 +199,7 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
|
|
|
private WorkpieceService workpieceService;
|
|
|
|
|
|
@Autowired
|
|
|
- private ResourceBusinessService resourceBusinessService;
|
|
|
+ private ResourceBusinessMapper resourceBusinessMapper;
|
|
|
|
|
|
@Autowired
|
|
|
private ResourceAutoCodeService resourceAutoCodeService;
|
|
@@ -324,8 +329,9 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
|
|
|
int i = 1;
|
|
|
for (TTask t : taskList) {
|
|
|
//taskList里面包含了所有的一次勾选的所有任务
|
|
|
- if(!key.equals(t.getCompleteBatchNo()))
|
|
|
+ if(!key.equals(t.getCompleteBatchNo())){
|
|
|
continue;
|
|
|
+ }
|
|
|
|
|
|
//取出resrouceId
|
|
|
Long resourceBusinessId = t.getResourceBusinessId();
|
|
@@ -760,8 +766,9 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
|
|
|
@Override
|
|
|
public R<String> BomProcedureMeterialStock(TaskNode taskNode, AutoNode autoNode, TTask task, String uniqueCode) {
|
|
|
//如果没有分配到资源,则不做出入库,这种情况基本是异常情况
|
|
|
- if (task.getProcedureMeterialId() == null)
|
|
|
+ if (task.getProcedureMeterialId() == null){
|
|
|
return R.success(uniqueCode);
|
|
|
+ }
|
|
|
|
|
|
//只出入库任务选择的原材料
|
|
|
List<BomProcedureMeterial> meterialList = bomProcedureMeterialService.list(Wraps.<BomProcedureMeterial>lbQ().eq(BomProcedureMeterial::getId, task.getProcedureMeterialId()));
|
|
@@ -823,8 +830,9 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
|
|
|
@Override
|
|
|
public R<String> BomProcedureTrayStock(TaskNode taskNode, AutoNode autoNode, TTask task, String uniqueCode) {
|
|
|
//如果没有分配到资源,则不做出入库,这种情况基本是异常情况
|
|
|
- if (task.getProcedureTrayGroupId() == null)
|
|
|
+ if (task.getProcedureTrayGroupId() == null){
|
|
|
return R.success(uniqueCode);
|
|
|
+ }
|
|
|
|
|
|
List<BomProcedureTray> procedureTrayList = procedureTrayService.list(Wraps.<BomProcedureTray>lbQ().eq(BomProcedureTray::getGroupId, task.getProcedureTrayGroupId()));
|
|
|
List<TTaskStockUniqueCode> stockUniqueCodeList = new ArrayList<TTaskStockUniqueCode>();
|
|
@@ -1019,7 +1027,7 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
|
|
|
//查询质检码
|
|
|
List<TTaskTestMeterialCode> testMeterialCodeList = taskTestMeterialCodeMapper.selectList(Wraps.<TTaskTestMeterialCode>lbQ().eq(TTaskTestMeterialCode::getTaskNodeId, taskNode.getId()));
|
|
|
|
|
|
- //原材料列表
|
|
|
+ // 原材料列表
|
|
|
Map<Long, List<TTaskStockUniqueCode>> meterialMap = null;
|
|
|
Map<Long, List<TTaskTestMeterialCode>> testMeterialMap = null;
|
|
|
if (meterialCodeList != null) {
|
|
@@ -1051,8 +1059,9 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
|
|
|
//验证,必须有一个不为空,验证的其中一个
|
|
|
List<BomProcedureMeterial> metiralList = bean.getMeterialList();
|
|
|
List<BomProcedureTray> trayList = bean.getProcedureTrayList();
|
|
|
- if ((metiralList == null || metiralList.size() == 0) && (trayList == null || trayList.size() == 0))
|
|
|
+ if ((metiralList == null || metiralList.size() == 0) && (trayList == null || trayList.size() == 0)){
|
|
|
return "";
|
|
|
+ }
|
|
|
|
|
|
String uniqueCode = "";
|
|
|
if (metiralList != null && metiralList.size() > 0) {//验证的是入产线编码校验结果原材料
|
|
@@ -1100,8 +1109,9 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
|
|
|
List<BomProcedureMeterial> metiralList = bean.getMeterialList();
|
|
|
List<BomProcedureTray> trayList = bean.getProcedureTrayList();
|
|
|
|
|
|
- if ((metiralList == null || metiralList.size() == 0) && (trayList == null || trayList.size() == 0))
|
|
|
+ if ((metiralList == null || metiralList.size() == 0) && (trayList == null || trayList.size() == 0)){
|
|
|
return list;
|
|
|
+ }
|
|
|
|
|
|
|
|
|
//获取当前任务,当前节点的上料站库位
|
|
@@ -1141,8 +1151,9 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
|
|
|
List<BomProcedureMeterial> metiralList = bean.getMeterialList();
|
|
|
List<BomProcedureTray> trayList = bean.getProcedureTrayList();
|
|
|
|
|
|
- if ((metiralList == null || metiralList.size() == 0) && (trayList == null || trayList.size() == 0))
|
|
|
+ if ((metiralList == null || metiralList.size() == 0) && (trayList == null || trayList.size() == 0)){
|
|
|
return "";
|
|
|
+ }
|
|
|
|
|
|
//获取当前任务,当前节点的上料站库位
|
|
|
//获取当前节点的设备库位
|
|
@@ -1199,8 +1210,9 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
|
|
|
List<BomProcedureMeterial> metiralList = bean.getMeterialList();
|
|
|
List<BomProcedureTray> trayList = bean.getProcedureTrayList();
|
|
|
|
|
|
- if ((metiralList == null || metiralList.size() == 0) && (trayList == null || trayList.size() == 0))
|
|
|
+ if ((metiralList == null || metiralList.size() == 0) && (trayList == null || trayList.size() == 0)){
|
|
|
return "";
|
|
|
+ }
|
|
|
//获取当前任务,当前节点的上料站库位
|
|
|
//获取当前节点的设备库位
|
|
|
Long storgeId = getStorgeIdByTaskNode(bean);
|
|
@@ -1299,7 +1311,12 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
|
|
|
@Override
|
|
|
public R taskNodeCallback(TaskNodeCallBackDTO bean) {
|
|
|
log.info("指令回调参数======================" + JSONObject.toJSONString(bean));
|
|
|
-
|
|
|
+ BaseContextHandler.setTenant("0000");
|
|
|
+ String taskId = bean.getTaskId() == null ? "" : bean.getTaskId().toString();
|
|
|
+ TTask task = taskService.getById(taskId);
|
|
|
+ if(null == task){
|
|
|
+ return R.fail("任务不存在");
|
|
|
+ }
|
|
|
String uid = bean.getUid() == null ? "" : bean.getUid().toString();
|
|
|
|
|
|
//验证是否重复回调
|
|
@@ -1309,8 +1326,6 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- BaseContextHandler.setTenant("0000");
|
|
|
//取出参数
|
|
|
String code = bean.getCode();
|
|
|
String msg = bean.getMsg()!=null? bean.getMsg() : "指令操作失败";
|
|
@@ -1329,13 +1344,13 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
|
|
|
//接口不让传多余参数,只能从缓存传
|
|
|
String jsonParam = msgUtil.redis_get(YunjianConstant.YUNJIAN_CALLBACK_PARAM+"_" + taskNodeId)==null?"":msgUtil.redis_get(YunjianConstant.YUNJIAN_CALLBACK_PARAM+"_" + taskNodeId).toString();
|
|
|
//把三坐标检测结果追加进去
|
|
|
- if(StringUtil.isNotEmpty(jsonParam)){
|
|
|
- JSONObject callBackJsonParam = JSONObject.parseObject(jsonParam);
|
|
|
- if(StringUtil.isNotEmpty(bean.getResult())){
|
|
|
- callBackJsonParam.put("result",bean.getResult());
|
|
|
- }
|
|
|
- jsonParam = callBackJsonParam.toJSONString();
|
|
|
- }
|
|
|
+// if(StringUtil.isNotEmpty(jsonParam)){
|
|
|
+// JSONObject callBackJsonParam = JSONObject.parseObject(jsonParam);
|
|
|
+// if(StringUtil.isNotEmpty(bean.getResult())){
|
|
|
+// callBackJsonParam.put("result",bean.getResult());
|
|
|
+// }
|
|
|
+// jsonParam = callBackJsonParam.toJSONString();
|
|
|
+// }
|
|
|
|
|
|
Object taskInfoObject = msgUtil.redis_get(taskNodeId);
|
|
|
if(null != taskInfoObject){
|
|
@@ -1350,13 +1365,10 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
|
|
|
|
|
|
}
|
|
|
|
|
|
- String taskId = bean.getTaskId() == null ? "" : bean.getTaskId().toString();
|
|
|
String bizCallBackData = jsonParam;
|
|
|
//把当前id存放入缓存
|
|
|
msgUtil.redis_set(uid, uid, 1, TimeUnit.HOURS);
|
|
|
|
|
|
- TTask task = taskService.getById(taskId);
|
|
|
-
|
|
|
List<TaskNode> taskNodeList = baseMapper.selectList(Wraps.<TaskNode>lbQ().eq(TaskNode::getCompleteBatchNo, task.getCompleteBatchNo()).orderByAsc(TaskNode::getCompleteBatchSort));
|
|
|
|
|
|
Map<Long, TaskNode> taskNodeMap = taskNodeList.stream().collect(Collectors.toMap(TaskNode::getId, t -> t));
|
|
@@ -1400,6 +1412,7 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
|
|
|
//处理出库入库
|
|
|
R<String> r = demoLineStock(taskNode, task, callBackJson,currWorkpiece);
|
|
|
|
|
|
+
|
|
|
updateBizStatus(taskNode, task, taskNodeList, lg, callBackJson, r,currWorkpiece);
|
|
|
|
|
|
//websocket推送TODO临时注释
|
|
@@ -1470,7 +1483,7 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
|
|
|
orderMapper.updateAllById(order);
|
|
|
}
|
|
|
//解锁相关资源
|
|
|
- unlockResource(taskNode, task);
|
|
|
+ unlockResource(taskNode, task, callBackJson);
|
|
|
|
|
|
//更新订单表里的完成数量等等字段,一个任务执行完的时候更相信
|
|
|
if (n == taskNodeList.size() - 1) {
|
|
@@ -1514,8 +1527,9 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
|
|
|
* @return
|
|
|
*/
|
|
|
private boolean isLastTask(int n, TaskNode taskNode, List<TaskNode> taskNodeList) {
|
|
|
- if (n == taskNodeList.size() - 1)
|
|
|
+ if (n == taskNodeList.size() - 1){
|
|
|
return true;
|
|
|
+ }
|
|
|
//这里不会数组越界,当n=len-1得时候不会再有推送或回调
|
|
|
TaskNode nextTaskNode = taskNodeList.get(n + 1);
|
|
|
|
|
@@ -1555,18 +1569,96 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
|
|
|
* @param taskNode
|
|
|
* @param task
|
|
|
*/
|
|
|
- public void unlockResource(TaskNode taskNode, TTask task) {
|
|
|
+ public void unlockResource(TaskNode taskNode, TTask task, JSONObject callBackJson) {
|
|
|
//WMS出货
|
|
|
// if(DemoLineConstant.DEMOLINE_OP01_01.equals(taskNode.getNodeNo())||DemoLineConstant.DEMOLINE_OP01_02.equals(taskNode.getNodeNo())
|
|
|
// ||DemoLineConstant.DEMOLINE_OP01_03.equals(taskNode.getNodeNo())||DemoLineConstant.DEMOLINE_OP01_04.equals(taskNode.getNodeNo())
|
|
|
// ||DemoLineConstant.DEMOLINE_OP01_06.equals(taskNode.getNodeNo())||DemoLineConstant.DEMOLINE_OP01_07.equals(taskNode.getNodeNo())
|
|
|
// ||DemoLineConstant.DEMOLINE_OP02_01.equals(taskNode.getNodeNo())||DemoLineConstant.DEMOLINE_OP02_02.equals(taskNode.getNodeNo())){
|
|
|
- //删除当前节点的锁定
|
|
|
- List<Storge> storgeList = storgeService.list(Wraps.<Storge>lbQ().eq(Storge::getCampId, taskNode.getId()));
|
|
|
- if (CollectionUtil.isNotEmpty(storgeList)) {
|
|
|
- storgeService.unlockStorgeList(storgeList);
|
|
|
+ log.info("节点{}回调后释放资源,回调业务参数{}", taskNode.getId(), callBackJson);
|
|
|
+
|
|
|
+ Storge targetStorge = msgUtil.redis_get(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_STORE + taskNode.getId()) == null ? null : (Storge) msgUtil.redis_get(DemoCacheKey.YUNJIAN_CAMP + "_" + DemoLineConstant.YUNJIAN_TARGET_STORE + taskNode.getId());
|
|
|
+
|
|
|
+ ResourceBusiness resourceBusiness = resourceBusinessMapper.selectById(task.getResourceBusinessId());
|
|
|
+ String robotType = callBackJson.getString(YunjianConstant.YUNJIAN_ROBORT_CACHE_FLAG);
|
|
|
+ String robotStepKey = taskNode.getId() + "count";
|
|
|
+ String robotStep = callBackJson.getString(robotStepKey);
|
|
|
+
|
|
|
+ String xbkFlag = callBackJson.getString(YunjianConstant.YUNJIAN_XBKFLAG);
|
|
|
+
|
|
|
+ if(StringUtils.isNotBlank(xbkFlag)){
|
|
|
+
|
|
|
+ if(StringUtils.isBlank(robotStep)){
|
|
|
+ // 放到线边库后释放资源
|
|
|
+ logger.info("节点{}开始释放线边库逻辑占用的资源锁", taskNode.getId());
|
|
|
+ List<Storge> storgeList = storgeService.list(Wraps.<Storge>lbQ().eq(Storge::getCampId, taskNode.getId()));
|
|
|
+ List<String> storgePoints = storgeList.stream().map(p -> p.getPointId()).collect(Collectors.toList());
|
|
|
+ if (CollectionUtil.isNotEmpty(storgeList)) {
|
|
|
+ logger.info("节点{}开始释放占用的资源{}", taskNode.getId(),storgePoints.toString());
|
|
|
+ storgeService.unlockStorgeList(storgeList);
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ // 线边库暂存放到设备上释放资源
|
|
|
+ if(StringUtils.isNotBlank(robotType)){
|
|
|
+ if("5".equals(robotStep)){
|
|
|
+ logger.info("节点{}线边库暂存后放到设备完成后释放占用的资源", taskNode.getId());
|
|
|
+ List<Storge> storgeList = storgeService.list(Wraps.<Storge>lbQ().eq(Storge::getCampId, taskNode.getId()));
|
|
|
+ List<String> storgePoints = storgeList.stream().map(p -> p.getPointId()).collect(Collectors.toList());
|
|
|
+ if (CollectionUtil.isNotEmpty(storgeList)) {
|
|
|
+ logger.info("节点{}开始释放占用的资源{}", taskNode.getId(),storgePoints.toString());
|
|
|
+ storgeService.unlockStorgeList(storgeList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ if("1".equals(robotStep)){
|
|
|
+ logger.info("节点{}线边库暂存后放到设备完成后释放占用的资源", taskNode.getId());
|
|
|
+ List<Storge> storgeList = storgeService.list(Wraps.<Storge>lbQ().eq(Storge::getCampId, taskNode.getId()));
|
|
|
+ List<String> storgePoints = storgeList.stream().map(p -> p.getPointId()).collect(Collectors.toList());
|
|
|
+ if (CollectionUtil.isNotEmpty(storgeList)) {
|
|
|
+ logger.info("节点{}开始释放占用的资源{}", taskNode.getId(),storgePoints.toString());
|
|
|
+ storgeService.unlockStorgeList(storgeList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }else{
|
|
|
+ if(StringUtils.isNotBlank(robotType)){
|
|
|
+ // 有缓存位机器人,走到最后一步才释放资源
|
|
|
+ if("1".equals(robotType) && "2".equals(robotStep)){
|
|
|
+ logger.info("节点{}开始判断需要释放占用的资源锁", taskNode.getId());
|
|
|
+ List<Storge> storgeList = storgeService.list(Wraps.<Storge>lbQ().eq(Storge::getCampId, taskNode.getId()));
|
|
|
+ List<String> storgePoints = storgeList.stream().map(p -> p.getPointId()).collect(Collectors.toList());
|
|
|
+ if (CollectionUtil.isNotEmpty(storgeList)) {
|
|
|
+ logger.info("节点{}开始释放占用的资源{}", taskNode.getId(),storgePoints.toString());
|
|
|
+ storgeService.unlockStorgeList(storgeList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ //删除当前节点的锁定
|
|
|
+ if(!"打标业务".equals(resourceBusiness.getName())){
|
|
|
+ logger.info("节点{}开始判断需要释放占用的资源锁", taskNode.getId());
|
|
|
+ List<Storge> storgeList = storgeService.list(Wraps.<Storge>lbQ().eq(Storge::getCampId, taskNode.getId()));
|
|
|
+ List<String> storgePoints = storgeList.stream().map(p -> p.getPointId()).collect(Collectors.toList());
|
|
|
+ if (CollectionUtil.isNotEmpty(storgeList)) {
|
|
|
+ logger.info("节点{}开始释放占用的资源{}", taskNode.getId(),storgePoints.toString());
|
|
|
+ storgeService.unlockStorgeList(storgeList);
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ // 只释放非机器人资源
|
|
|
+ if(null != targetStorge){
|
|
|
+ List<Storge> storgeList = new ArrayList<>();
|
|
|
+ storgeList.add(targetStorge);
|
|
|
+ logger.info("节点{}开始释放打标的资源{}", taskNode.getId(),targetStorge.getPointId().toString());
|
|
|
+ storgeService.unlockStorgeList(storgeList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
-// }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
/**
|