Commit cbfa410d sunke

线边仓间入库类型修正

出入库记录只记录补料单号
1 个父辈 7d58d994
...@@ -27,6 +27,8 @@ import com.neotel.smfcore.core.hik.enums.IN_OUT_TYPE; ...@@ -27,6 +27,8 @@ import com.neotel.smfcore.core.hik.enums.IN_OUT_TYPE;
import com.neotel.smfcore.core.message.util.DeviceMessageUtil; import com.neotel.smfcore.core.message.util.DeviceMessageUtil;
import com.neotel.smfcore.core.order.LiteOrderCache; import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.enums.ORDER_COLOR; import com.neotel.smfcore.core.order.enums.ORDER_COLOR;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager;
import com.neotel.smfcore.core.order.service.po.LiteOrder; import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem; import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
import com.neotel.smfcore.core.storage.enums.DeviceType; import com.neotel.smfcore.core.storage.enums.DeviceType;
...@@ -95,6 +97,12 @@ public class BaseDeviceHandler implements IDeviceHandler { ...@@ -95,6 +97,12 @@ public class BaseDeviceHandler implements IDeviceHandler {
@Autowired @Autowired
protected LiteOrderCache liteOrderCache; protected LiteOrderCache liteOrderCache;
@Autowired
private ILiteOrderManager liteOrderManager;
@Autowired
private ILiteOrderItemManager liteOrderItemManager;
/** /**
* CID的服务器消息(key 为 cid) * CID的服务器消息(key 为 cid)
*/ */
...@@ -663,13 +671,15 @@ public class BaseDeviceHandler implements IDeviceHandler { ...@@ -663,13 +671,15 @@ public class BaseDeviceHandler implements IDeviceHandler {
//判断是否是工单出库 //判断是否是工单出库
if(ObjectUtil.isNotEmpty( task.getSourceId())&&ObjectUtil.isNotEmpty(task.getSourceName())&&task.isOrderTask()){ if(ObjectUtil.isNotEmpty( task.getSourceId())&&ObjectUtil.isNotEmpty(task.getSourceName())&&task.isOrderTask()){
log.info("工单["+task.getSourceId()+"]物料["+task.getBarcode()+"]ItemId=" + task.getSubSourceId() + "出库完成");
LiteOrder liteOrder=liteOrderCache.findOrderByNo(task.getSourceName()); LiteOrder liteOrder=liteOrderManager.get(task.getSourceId());
LiteOrderItem item=liteOrder.getItemById(task.getSubSourceId()); //LiteOrderItem item= liteOrderItemManager.get(task.getSubSourceId());
//liteOrder.getItemById(task.getSubSourceId());
String station = task.getSubSourceInfo();
int interceptFlag=task.isNeedSplitting()?1:0; int interceptFlag=task.isNeedSplitting()?1:0;
int interceptQty=task.getNeedQty(); int interceptQty=task.getNeedQty();
//工单出库出库完成,7.3排程发料过账接口 //工单出库出库完成,7.3排程发料过账接口
ScheduleTaskInfo taskInfo=new ScheduleTaskInfo(liteOrder.getJobNo(),liteOrder.getReplenishmentNo(),item.getStation(),liteOrder.getBaseCode(),liteOrder.getLgort(),task.getNum(),interceptFlag,interceptQty,task.getBarcode()); ScheduleTaskInfo taskInfo=new ScheduleTaskInfo(liteOrder.getJobNo(),liteOrder.getReplenishmentNo(),station,liteOrder.getBaseCode(),liteOrder.getLgort(),task.getNum(),interceptFlag,interceptQty,task.getBarcode());
boolean result=HikApi.scheduleTaskApi(task.getOperator(),taskInfo ); boolean result=HikApi.scheduleTaskApi(task.getOperator(),taskInfo );
}else { }else {
//出库完成,调用 ,7.6出库下架过账接口 //出库完成,调用 ,7.6出库下架过账接口
......
...@@ -112,7 +112,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{ ...@@ -112,7 +112,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{
taskService.updateQueueTask(queueTask); taskService.updateQueueTask(queueTask);
if(Strings.isNotBlank(queueTask.getPosName())){ if(Strings.isNotBlank(queueTask.getPosName())){
statusBean.addData("open", queueTask.getPosName() + "=" + color.name()); statusBean.addData("open", queueTask.getPosName() + "=" + color.name());
log.info("库位[" + queueTask.getPosName() + "]["+queueTask.getBarcode()+"]+亮灯:" + color.name()); log.info("发送到客户端库位[" + queueTask.getPosName() + "]["+queueTask.getBarcode()+"]+亮灯:" + color.name());
} }
} }
} }
...@@ -151,7 +151,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{ ...@@ -151,7 +151,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{
List<String> ngToOk=new ArrayList<>(); List<String> ngToOk=new ArrayList<>();
//数据库有信息,实际无料 //数据库有信息,实际无料
if(noReelPosErrorList.length>0){ if(noReelPosErrorList.length>0){
log.info("开始检测noReelPosErrorList"); //log.info("开始检测noReelPosErrorList");
Query query=new Query(Criteria.where("posName").in(noReelPosErrorList)); Query query=new Query(Criteria.where("posName").in(noReelPosErrorList));
List<StoragePos> posList= storagePosManager.findByQuery(query); List<StoragePos> posList= storagePosManager.findByQuery(query);
for (StoragePos pos:posList) { for (StoragePos pos:posList) {
......
...@@ -248,13 +248,14 @@ public class SingleInController { ...@@ -248,13 +248,14 @@ public class SingleInController {
if(inList != null){ if(inList != null){
if(inList.getDocType() == 4){ if(inList.getDocType() == 4){
//线边仓间入库 //线边仓间入库
businessType = "01"; businessType = "02";
businessNo = docName; businessNo = docName;
} }
} }
} }
if(inType.equals(4)){ if(inType.equals(4)){
//退料入库
businessType = "01"; businessType = "01";
} }
......
...@@ -104,6 +104,20 @@ public class LiteOrderCache implements ITaskListener { ...@@ -104,6 +104,20 @@ public class LiteOrderCache implements ITaskListener {
liteOrderMap.put(order.getOrderNo(), order); liteOrderMap.put(order.getOrderNo(), order);
} }
public LiteOrder findOrderById(String orderId){
for (LiteOrder order : liteOrderMap.values()) {
if(order.getId().equals(orderId)){
return order;
}
}
LiteOrder order=liteOrderManager.get(orderId);
if(order!=null){
addOrderToMap(order);
return order;
}
return null;
}
public LiteOrder findOrderByNo(String orderNo){ public LiteOrder findOrderByNo(String orderNo){
if(liteOrderMap.containsKey(orderNo)){ if(liteOrderMap.containsKey(orderNo)){
...@@ -184,18 +198,19 @@ public class LiteOrderCache implements ITaskListener { ...@@ -184,18 +198,19 @@ public class LiteOrderCache implements ITaskListener {
private synchronized void finishedOrderTask(DataLog task) throws ValidateException { private synchronized void finishedOrderTask(DataLog task) throws ValidateException {
//更新工单状态 //更新工单状态
String orderNo = task.getSourceName(); String sourceName = task.getSourceName();
if (!Strings.isNullOrEmpty(orderNo)) { if (!Strings.isNullOrEmpty(task.getSourceId())) {
LiteOrder order = liteOrderMap.get(orderNo); LiteOrder order = findOrderById(task.getSourceId());
if (order == null) { if (order == null) {
log.info("缓存中未找到[" + orderNo + "],从数据库中重新加载"); log.info("缓存中未找到"+sourceName+"[" + task.getSourceId() + "],从数据库中重新加载");
order = liteOrderManager.findByOrderNo(orderNo); order = liteOrderManager.get(task.getSourceId());
if (order != null) { if (order != null) {
List<LiteOrderItem> items = liteOrderItemManager.findOrderItems(orderNo); List<LiteOrderItem> items = liteOrderItemManager.findOrderItems(sourceName);
order.setOrderItems(items); order.setOrderItems(items);
} }
} }
if (order != null) { if (order != null) {
String orderNo = order.getOrderNo();
//任务是取消的,需要将总待出库数量-1 //任务是取消的,需要将总待出库数量-1
if (task.isCancel()) { if (task.isCancel()) {
order.setTaskReelCount(order.getTaskReelCount() - 1); order.setTaskReelCount(order.getTaskReelCount() - 1);
...@@ -239,9 +254,9 @@ public class LiteOrderCache implements ITaskListener { ...@@ -239,9 +254,9 @@ public class LiteOrderCache implements ITaskListener {
} }
} }
liteOrderManager.save(order); liteOrderManager.save(order);
liteOrderMap.put(orderNo, order); liteOrderMap.put(order.getOrderNo(), order);
} else { } else {
log.error("完成任务时,未找到工单[" + orderNo + "]信息"); log.error("完成任务时,未找到工单"+sourceName+"[" + task.getSourceId() + "]信息");
} }
} }
...@@ -565,7 +580,6 @@ public class LiteOrderCache implements ITaskListener { ...@@ -565,7 +580,6 @@ public class LiteOrderCache implements ITaskListener {
DataLog task = taskService.newTask(pos) ; DataLog task = taskService.newTask(pos) ;
task.setSourceId(cacheOrder.getId()); task.setSourceId(cacheOrder.getId());
task.setSourceName(cacheOrder.getOrderNo());
task.setSubSourceId(orderItem.getId()); task.setSubSourceId(orderItem.getId());
task.setSubSourceInfo(orderItem.getStation()); task.setSubSourceInfo(orderItem.getStation());
task.setType(OP.CHECKOUT); task.setType(OP.CHECKOUT);
...@@ -574,7 +588,9 @@ public class LiteOrderCache implements ITaskListener { ...@@ -574,7 +588,9 @@ public class LiteOrderCache implements ITaskListener {
task.setOperator(userName); task.setOperator(userName);
task.setOutType(IN_OUT_TYPE.OUT_ORDER);//工单出库类型为10 task.setOutType(IN_OUT_TYPE.OUT_ORDER);//工单出库类型为10
task.setSourceName(cacheOrder.getJobNo());
if(cacheOrder.isRepleOrder()){ if(cacheOrder.isRepleOrder()){
//task.setSourceName(cacheOrder.getReplenishmentNo());
task.setOutType(IN_OUT_TYPE.OUT_REPLE);//补料出库类型为11 task.setOutType(IN_OUT_TYPE.OUT_REPLE);//补料出库类型为11
} }
if(jieliaoPosMap.containsKey(pos.getPosName())){ if(jieliaoPosMap.containsKey(pos.getPosName())){
......
...@@ -243,6 +243,11 @@ public class LiteOrder extends BasePo implements Serializable { ...@@ -243,6 +243,11 @@ public class LiteOrder extends BasePo implements Serializable {
setClosed(true); setClosed(true);
} }
} }
if(isRepleOrder()){
//产线补料,直接关闭
setClosed(true);
}
setTaskFinishedTime(System.currentTimeMillis()); setTaskFinishedTime(System.currentTimeMillis());
} }
......
...@@ -30,6 +30,7 @@ import io.swagger.annotations.Api; ...@@ -30,6 +30,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Criteria;
...@@ -215,6 +216,10 @@ public class OutListController { ...@@ -215,6 +216,10 @@ public class OutListController {
Integer type = Convert.toInt(params.get("docType")); Integer type = Convert.toInt(params.get("docType"));
//先从已存在的出库单查询是否存在 //先从已存在的出库单查询是否存在
if(Strings.isBlank(name)){
return ResultBean.newErrorResult(1, "smfcore.empty", "出库单号不能为空");
}
OutList outList = outListCache.getOutList(name); OutList outList = outListCache.getOutList(name);
if (outList == null) { if (outList == null) {
//从接口获取出库单 //从接口获取出库单
......
...@@ -81,6 +81,7 @@ public class StoragePos extends BasePo implements Serializable { ...@@ -81,6 +81,7 @@ public class StoragePos extends BasePo implements Serializable {
*/ */
private List<String> limitPnList; private List<String> limitPnList;
//海康项目小于0时用于锁定料架上的库位,不进行工单挑料
//进料优先级,数字越大优先级越高,例:1-1的优先级为100 仓1-2的优先级200,那么入仓时就会优先进入1-2仓 //进料优先级,数字越大优先级越高,例:1-1的优先级为100 仓1-2的优先级200,那么入仓时就会优先进入1-2仓
private double priority = 0f; private double priority = 0f;
......
package com.neotel.smfcore.hikvision.bean; package com.neotel.smfcore.hikvision.bean;
import com.sun.corba.se.impl.resolver.SplitLocalResolverImpl;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
......
...@@ -424,7 +424,7 @@ public class PanaApiController implements IOpAuthApi, ITaskListener{ ...@@ -424,7 +424,7 @@ public class PanaApiController implements IOpAuthApi, ITaskListener{
} }
} }
}else{ }else{
log.info("没有配置PanaCIM条码检测接口,查找setConfiguration注册的IP 及端口"); //log.info("没有配置PanaCIM条码检测接口,查找setConfiguration注册的IP 及端口");
return null; return null;
} }
} catch (Exception e) { } catch (Exception e) {
...@@ -477,7 +477,7 @@ public class PanaApiController implements IOpAuthApi, ITaskListener{ ...@@ -477,7 +477,7 @@ public class PanaApiController implements IOpAuthApi, ITaskListener{
String result = HttpHelper.postJson(inNotifyApi,params); String result = HttpHelper.postJson(inNotifyApi,params);
log.info("Response Of checkInNotification From PanaCIM:"+result); log.info("Response Of checkInNotification From PanaCIM:"+result);
}else{ }else{
log.info("没有配置PanaCIM接口,无需通知"); //log.info("没有配置PanaCIM接口,无需通知");
} }
} catch (Exception e) { } catch (Exception e) {
...@@ -511,7 +511,7 @@ public class PanaApiController implements IOpAuthApi, ITaskListener{ ...@@ -511,7 +511,7 @@ public class PanaApiController implements IOpAuthApi, ITaskListener{
log.info("Response Of deliverNotification From PanaCIM:"+result); log.info("Response Of deliverNotification From PanaCIM:"+result);
}else{ }else{
log.info("没有配置PanaCIM接口,无需通知"); //log.info("没有配置PanaCIM接口,无需通知");
} }
} catch (Exception e) { } catch (Exception e) {
log.error("出库通知PanaCIM["+outNotifyApi+"]料盘"+task.getBarcode()+" 出错",e); log.error("出库通知PanaCIM["+outNotifyApi+"]料盘"+task.getBarcode()+" 出错",e);
......
...@@ -4,12 +4,9 @@ import com.neotel.smfcore.common.annotation.QueryCondition; ...@@ -4,12 +4,9 @@ import com.neotel.smfcore.common.annotation.QueryCondition;
import com.neotel.smfcore.common.bean.BetweenData; import com.neotel.smfcore.common.bean.BetweenData;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy;
import java.io.Serializable; import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Date; import java.util.Date;
import java.util.List;
@ApiModel @ApiModel
public class RoleQueryCriteria implements Serializable { public class RoleQueryCriteria implements Serializable {
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!