Commit 2f4317f0 sunke

同一个工单有两个相同PN站位时出库通知只有一个站位的问题修正

转巴西出库
线边仓间入库
1 个父辈 c7cccdd3
...@@ -45,7 +45,7 @@ public class DataInitManager { ...@@ -45,7 +45,7 @@ public class DataInitManager {
MainTimer mainTimer; MainTimer mainTimer;
//@Value("${menu.show}") //@Value("${menu.show}")
private String[] menuShowList = new String[]{"productionLineReple","productionLineOut","interfaceException"}; private String[] menuShowList = new String[]{"mslOut"};
//@Value("${menu.hide}") //@Value("${menu.hide}")
private String[] menuHideList = new String[]{}; private String[] menuHideList = new String[]{};
......
...@@ -665,7 +665,7 @@ public class BaseDeviceHandler implements IDeviceHandler { ...@@ -665,7 +665,7 @@ 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()){
LiteOrder liteOrder=liteOrderCache.findOrderByNo(task.getSourceName()); LiteOrder liteOrder=liteOrderCache.findOrderByNo(task.getSourceName());
LiteOrderItem item=liteOrder.getItemByPn(task.getPartNumber()); LiteOrderItem item=liteOrder.getItemById(task.getSubSourceId());
int interceptFlag=task.isNeedSplitting()?1:0; int interceptFlag=task.isNeedSplitting()?1:0;
int interceptQty=task.getNeedQty(); int interceptQty=task.getNeedQty();
//工单出库出库完成,7.3排程发料过账接口 //工单出库出库完成,7.3排程发料过账接口
......
...@@ -53,7 +53,7 @@ public class IN_OUT_TYPE { ...@@ -53,7 +53,7 @@ public class IN_OUT_TYPE {
*/ */
public static int OUT_BETWEEN = 3; public static int OUT_BETWEEN = 3;
/** /**
* 4,预留单出库(5转外协出库,6发运单出库,7成本中心领料) * 4,预留单出库(5转外协出库,6发运单出库,7成本中心领料,8转巴西出库)
*/ */
public static int OUT_LIST = 4; public static int OUT_LIST = 4;
/** /**
...@@ -69,6 +69,10 @@ public class IN_OUT_TYPE { ...@@ -69,6 +69,10 @@ public class IN_OUT_TYPE {
*/ */
public static int OUT_CENTRAL = 7; public static int OUT_CENTRAL = 7;
/** /**
* 8转巴西出库
*/
public static int OUT_BRAZIL = 8;
/**
* 10=工单出库 * 10=工单出库
*/ */
public static int OUT_ORDER = 10; public static int OUT_ORDER = 10;
...@@ -108,6 +112,8 @@ public class IN_OUT_TYPE { ...@@ -108,6 +112,8 @@ public class IN_OUT_TYPE {
detailTypeStr = "发运单出库"; detailTypeStr = "发运单出库";
}else if(detailType == 107){ }else if(detailType == 107){
detailTypeStr = "成本中心领料"; detailTypeStr = "成本中心领料";
}else if(detailType == 108){
detailTypeStr = "转巴西出库";
}else if(detailType == 110){ }else if(detailType == 110){
detailTypeStr = "工单出库"; detailTypeStr = "工单出库";
}else if(detailType == 111){ }else if(detailType == 111){
......
...@@ -218,8 +218,7 @@ public class SingleInController { ...@@ -218,8 +218,7 @@ public class SingleInController {
} }
} }
//判断料架是否有空位 //判断料架是否有空位
for (UsageItem item : for (UsageItem item : storage.getUsageMap().values()) {
storage.getUsageMap().values()) {
if (item.getH() == barcode.getHeight() && item.getW() == barcode.getPlateSize()) { if (item.getH() == barcode.getHeight() && item.getW() == barcode.getPlateSize()) {
int emptyCount = item.getTotalCount() - item.getUsedCount(); int emptyCount = item.getTotalCount() - item.getUsedCount();
if(emptyCount<=0){ if(emptyCount<=0){
...@@ -229,6 +228,12 @@ public class SingleInController { ...@@ -229,6 +228,12 @@ public class SingleInController {
} }
} }
//线边间转储入库和退料入库需要获取数量
boolean needGetQty = false;
//01 退料 02 线边仓间入库
String businessType = "";
String businessNo = "";
//存储入库需要先验证入库单 //存储入库需要先验证入库单
if(inType.equals(5)) { if(inType.equals(5)) {
if(ObjectUtil.isEmpty(docName)){ if(ObjectUtil.isEmpty(docName)){
...@@ -239,17 +244,29 @@ public class SingleInController { ...@@ -239,17 +244,29 @@ public class SingleInController {
if (!resultBean.isOkResult()) { if (!resultBean.isOkResult()) {
return resultBean; return resultBean;
} }
InList inList = inListCache.getInList(docName);
if(inList != null){
if(inList.getDocType() == 4){
//线边仓间入库
businessType = "01";
businessNo = docName;
}
}
}
if(inType.equals(4)){
businessType = "01";
} }
//判断如果是退料入库,需要获取数量 //判断如果是退料入库,需要获取数量
if (inType.equals(4)) { if (!businessType.isEmpty()) {
int num = HikApi.returnMaterialApi(SecurityUtils.getCurrentUsername(), barcode.getBarcode()); int num = HikApi.returnMaterialApi(SecurityUtils.getCurrentUsername(), barcode.getBarcode(),businessType,businessNo);
if (num > 0) { if (num > 0) {
barcode.setAmount(num); barcode.setAmount(num);
barcodeManager.saveBarcode(barcode); barcodeManager.saveBarcode(barcode);
log.info("退料入库,二维码 " + barcode.getBarcode() + " 从接口获得新数量:" + num + ",并更新"); log.info("入库二维码 " + barcode.getBarcode() + " 从接口获得新数量:" + num + ",并更新");
} else { } else {
throw new ValidateException("smfcore.returnMaterialApi.error", "退料入库:[" + barcode.getBarcode() + "]获取数量失败"); throw new ValidateException("smfcore.returnMaterialApi.error", "入库:[" + barcode.getBarcode() + "]获取数量失败");
} }
} else { } else {
//唯一码校验接口 //唯一码校验接口
......
...@@ -30,7 +30,7 @@ public class InList extends BasePo implements Serializable { ...@@ -30,7 +30,7 @@ public class InList extends BasePo implements Serializable {
private int status= INLIST_STATUS.WAIT; private int status= INLIST_STATUS.WAIT;
/** /**
* 单据类型(0物料凭证,1交货单,2预留单、3AGV任务单) * 单据类型(0物料凭证,1交货单,2预留单、3AGV任务单 4线边仓间入库)
*/ */
private Integer docType=-1; private Integer docType=-1;
......
...@@ -127,9 +127,6 @@ public class InListCache { ...@@ -127,9 +127,6 @@ public class InListCache {
} }
InList inList = getInList(inListName); InList inList = getInList(inListName);
if (inList == null) { if (inList == null) {
inList = listManager.findByName(inListName);
}
if (inList == null) {
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
} }
......
...@@ -221,14 +221,8 @@ public class LiteOrderCache implements ITaskListener { ...@@ -221,14 +221,8 @@ public class LiteOrderCache implements ITaskListener {
order.setOrderItems(items); order.setOrderItems(items);
if (!order.isClosed()) { if (!order.isClosed()) {
//工单未关闭的话,检查状态,全部都出完进行关闭 //工单未关闭的话,检查状态,全部都出完进行关闭
boolean closed = true; boolean allTaskFinished = order.isTaskReelOutEnd();
for (LiteOrderItem liteOrderItem : order.getOrderItems()) { if (allTaskFinished) {
if (!liteOrderItem.isOutFinished()) {
closed = false;
break;
}
}
if (closed) {
order.finishedTasks(); order.finishedTasks();
//工单出库完成,调用7.11订单发料完成通知接口 //工单出库完成,调用7.11订单发料完成通知接口
boolean result = HikApi.orderEndApi(order.getOperateUser(), order.getJobNo()); boolean result = HikApi.orderEndApi(order.getOperateUser(), order.getJobNo());
...@@ -505,6 +499,7 @@ public class LiteOrderCache implements ITaskListener { ...@@ -505,6 +499,7 @@ public class LiteOrderCache implements ITaskListener {
if(component.getMinStoreNum()>0&& posList.size() <=component.getMinStoreNum()){ if(component.getMinStoreNum()>0&& posList.size() <=component.getMinStoreNum()){
needJieliao=true; needJieliao=true;
} }
log.info("物料["+pn+"]贵重["+isGuizhong+"]可用库存数量:" + posList.size() + " 截料设置数量:" + component.getMinStoreNum() + " 是否需要截图:" + needJieliao);
} }
if(isGuizhong || needJieliao){ if(isGuizhong || needJieliao){
...@@ -521,7 +516,7 @@ public class LiteOrderCache implements ITaskListener { ...@@ -521,7 +516,7 @@ public class LiteOrderCache implements ITaskListener {
//如果需要截料,找最小的一盘 //如果需要截料,找最小的一盘
if(minAmountReelPos != null){ if(minAmountReelPos != null){
int reelNeedNum = minAmountReelPos.getBarcode().getAmount() - excessNum; int reelNeedNum = minAmountReelPos.getBarcode().getAmount() - excessNum;
log.info("需要对料盘["+minAmountReelPos.getBarcode().getBarcode()+"]进行截料,需求数量"); log.info("需要对料盘["+minAmountReelPos.getBarcode().getBarcode()+"]进行截料,需求数量:" + reelNeedNum);
jieliaoPosMap.put(minAmountReelPos.getPosName(),reelNeedNum); jieliaoPosMap.put(minAmountReelPos.getPosName(),reelNeedNum);
} }
} }
...@@ -629,7 +624,8 @@ public class LiteOrderCache implements ITaskListener { ...@@ -629,7 +624,8 @@ public class LiteOrderCache implements ITaskListener {
} }
cacheOrder.setTaskReelCount(taskReelCount); cacheOrder.setTaskReelCount(taskReelCount);
cacheOrder.setTotalFinishedReelCount(0); cacheOrder.setFinishedReelCount(0);
//cacheOrder.setTotalFinishedReelCount(0);
cacheOrder.setTotalTaskReelCount(cacheOrder.getTotalTaskReelCount()+taskReelCount); cacheOrder.setTotalTaskReelCount(cacheOrder.getTotalTaskReelCount()+taskReelCount);
if(shortage) { if(shortage) {
cacheOrder.setShortageOut(true); cacheOrder.setShortageOut(true);
......
...@@ -339,8 +339,7 @@ public class OrderController { ...@@ -339,8 +339,7 @@ public class OrderController {
boolean findOrder = false; boolean findOrder = false;
//只返回当前有任务的工单 //只返回当前有任务的工单
for (LiteOrder order : for (LiteOrder order : orderList) {
orderList) {
List<DataLog> tasks = getOrderTaskByUser(user, order, true); List<DataLog> tasks = getOrderTaskByUser(user, order, true);
if (tasks.size() > 0) { if (tasks.size() > 0) {
OrderDto dto = orderMapper.toDto(order); OrderDto dto = orderMapper.toDto(order);
......
...@@ -225,8 +225,6 @@ public class LiteOrder extends BasePo implements Serializable { ...@@ -225,8 +225,6 @@ public class LiteOrder extends BasePo implements Serializable {
* 结束当前的任务 * 结束当前的任务
*/ */
public void finishedTasks() { public void finishedTasks() {
//TODO 判断是否处于缺料状态,是的话修改状态 //TODO 判断是否处于缺料状态,是的话修改状态
if (shortageOut!=null&& getShortageOut()) { if (shortageOut!=null&& getShortageOut()) {
boolean allOk = true; boolean allOk = true;
...@@ -298,6 +296,13 @@ public class LiteOrder extends BasePo implements Serializable { ...@@ -298,6 +296,13 @@ public class LiteOrder extends BasePo implements Serializable {
this.taskReelCount = taskReelCount; this.taskReelCount = taskReelCount;
} }
public boolean isTaskReelOutEnd(){
if(taskReelCount > 0){
return finishedReelCount >= taskReelCount;
}
return false;
}
public void setTotalTaskReelCount(int totalReelCount){ public void setTotalTaskReelCount(int totalReelCount){
if(totalReelCount<0){ if(totalReelCount<0){
totalReelCount=0; totalReelCount=0;
...@@ -353,10 +358,9 @@ public class LiteOrder extends BasePo implements Serializable { ...@@ -353,10 +358,9 @@ public class LiteOrder extends BasePo implements Serializable {
} }
public LiteOrderItem getItemByPn(String partNumber) { public LiteOrderItem getItemById(String itemId) {
for (LiteOrderItem item : for (LiteOrderItem item : orderItems) {
orderItems) { if(item.getId().equals(itemId)){
if(item.getMaterialNo().equals(partNumber)){
return item; return item;
} }
} }
......
...@@ -72,6 +72,7 @@ public class OutList extends BasePo implements Serializable { ...@@ -72,6 +72,7 @@ public class OutList extends BasePo implements Serializable {
* 1.转外协出库 * 1.转外协出库
* 2.发运单出库 * 2.发运单出库
* 3.成本中心领料 * 3.成本中心领料
* 4.转巴西出库
*/ */
private Integer docType = 0; private Integer docType = 0;
/** /**
......
...@@ -334,6 +334,9 @@ public class OutListCache implements ITaskListener { ...@@ -334,6 +334,9 @@ public class OutListCache implements ITaskListener {
}else if(docType == 3){ }else if(docType == 3){
//转外协出库,发运单出库,成本中心领料:对应4,预留单出库 //转外协出库,发运单出库,成本中心领料:对应4,预留单出库
task.setOutType(IN_OUT_TYPE.OUT_CENTRAL);//成本中心领料 task.setOutType(IN_OUT_TYPE.OUT_CENTRAL);//成本中心领料
}else if(docType == 4){
//转外协出库,发运单出库,成本中心领料:对应4,预留单出库
task.setOutType(IN_OUT_TYPE.OUT_BRAZIL);//转巴西出库
} }
task.setLightColor(ORDER_COLOR.FIREBRICK.getRgb());//普通转储出库单 颜色:FIREBRICK task.setLightColor(ORDER_COLOR.FIREBRICK.getRgb());//普通转储出库单 颜色:FIREBRICK
......
...@@ -101,7 +101,7 @@ public class TaskController { ...@@ -101,7 +101,7 @@ public class TaskController {
Query query = QueryHelp.getQuery(criteria); Query query = QueryHelp.getQuery(criteria);
if (unEnd) { if (unEnd) {
query.addCriteria(Criteria.where("status").nin(OP_STATUS.END.name(), OP_STATUS.FINISHED.name())); query.addCriteria(Criteria.where("status").nin(OP_STATUS.CANCEL.name(), OP_STATUS.END.name(), OP_STATUS.FINISHED.name()));
}else if(finished){ }else if(finished){
query.addCriteria(Criteria.where("status").in(OP_STATUS.END.name(), OP_STATUS.FINISHED.name())); query.addCriteria(Criteria.where("status").in(OP_STATUS.END.name(), OP_STATUS.FINISHED.name()));
} }
......
...@@ -74,6 +74,8 @@ public class TaskDto implements Serializable { ...@@ -74,6 +74,8 @@ public class TaskDto implements Serializable {
@ApiModelProperty("详细出入库类型") @ApiModelProperty("详细出入库类型")
private int detailType; private int detailType;
@ApiModelProperty("详细出入库类型")
private String detailTypeStr;
/** /**
* 状态:OP_STATUS * 状态:OP_STATUS
*/ */
......
...@@ -348,7 +348,7 @@ public class DataLog extends BasePo implements Serializable { ...@@ -348,7 +348,7 @@ public class DataLog extends BasePo implements Serializable {
public boolean isOutListTask(){ public boolean isOutListTask(){
if(OP.CHECKOUT==type){ if(OP.CHECKOUT==type){
if(outType == IN_OUT_TYPE.OUT_BETWEEN || outType == IN_OUT_TYPE.OUT_LIST || outType == IN_OUT_TYPE.OUT_TRANSFER || outType == IN_OUT_TYPE.OUT_SENDER || outType == IN_OUT_TYPE.OUT_CENTRAL){ if(outType == IN_OUT_TYPE.OUT_BETWEEN || outType == IN_OUT_TYPE.OUT_LIST || outType == IN_OUT_TYPE.OUT_TRANSFER || outType == IN_OUT_TYPE.OUT_SENDER || outType == IN_OUT_TYPE.OUT_CENTRAL || outType == IN_OUT_TYPE.OUT_BRAZIL){
return true; return true;
} }
} }
......
...@@ -73,7 +73,7 @@ public class HikApi { ...@@ -73,7 +73,7 @@ public class HikApi {
* reqCode String 32 是 唯一请求号 * reqCode String 32 是 唯一请求号
* userCode String 32 是 操作人 * userCode String 32 是 操作人
* data docNo String 16 是 单据号 * data docNo String 16 是 单据号
* docType Integer 是 单据类型(0物料凭证,1交货单,2预留单、3AGV任务单) * docType Integer 是 单据类型(0物料凭证,1交货单,2预留单、3AGV任务单,4 线边仓间入库)
* 返回结果 code Integer 结果码 * 返回结果 code Integer 结果码
* message String 64 结果描述 * message String 64 结果描述
* reqCode String 32 唯一请求号 * reqCode String 32 唯一请求号
...@@ -92,7 +92,7 @@ public class HikApi { ...@@ -92,7 +92,7 @@ public class HikApi {
Map<String, Object> dataMap = new HashMap<String, Object>(); Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("docNo", docNo);//单据号 dataMap.put("docNo", docNo);//单据号
dataMap.put("docType", docType);//单据类型(0物料凭证,1交货单,2预留单、3AGV任务单) dataMap.put("docType", docType);//单据类型(0物料凭证,1交货单,2预留单、3AGV任务单,4 线边仓间入库)
// String data = JsonUtil.toJsonStr(dataMap); // String data = JsonUtil.toJsonStr(dataMap);
...@@ -240,16 +240,21 @@ public class HikApi { ...@@ -240,16 +240,21 @@ public class HikApi {
* @param trayId 料盘ID * @param trayId 料盘ID
* @return 根据退料唯一码获取退料数量 * @return 根据退料唯一码获取退料数量
*/ */
public static int returnMaterialApi(String userName, String trayId){ public static int returnMaterialApi(String userName, String trayId, String businessType, String businessNo){
String apiName="Hik 退料唯一码数量获取接口 (returnMaterialApi): "; String apiName="Hik 退料唯一码数量获取接口 (returnMaterialApi): ";
String url = getUrl(config.addr_4_returnMaterialApi, "returnMaterialApi"); String url = getUrl(config.addr_4_returnMaterialApi, "returnMaterialApi");
// data trayId String 41 是 料盘ID // data trayId String 41 是 料盘ID
// flag String 4 是 SMF 亮灯货架 // flag String 4 是 SMF 亮灯货架
// businessType String 4 是 01 退料 02 线边仓间入库
// businessNo String 41 否 业务单号 businessType 02时,为物料凭证
Map<String, Object> dataMap = new HashMap<String, Object>(); Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("trayId", trayId);//料盘ID dataMap.put("trayId", trayId);//料盘ID
dataMap.put("flag", "2");//SMF 亮灯货架 dataMap.put("flag", "2");//SMF 亮灯货架
dataMap.put("businessType",businessType);
dataMap.put("businessNo",businessNo);
// String data = JsonUtil.toJsonStr(dataMap); // String data = JsonUtil.toJsonStr(dataMap);
// data String 41 是 料盘ID // data String 41 是 料盘ID
......
#配置数据源 #配置数据源
spring:
data:
mongodb:
host: localhost # 主机地址
port: 27017 # 端口
database: hikvision # 数据库
# 登录相关配置 # 登录相关配置
login: login:
# 登录缓存 # 登录缓存
......
...@@ -93,7 +93,7 @@ spring: ...@@ -93,7 +93,7 @@ spring:
mongodb: mongodb:
host: localhost # 主机地址 host: localhost # 主机地址
port: 27017 # 端口 port: 27017 # 端口
database: hikvision # 数据库 database: hikvision20220801 # 数据库
messages: messages:
encoding: utf-8 encoding: utf-8
main: main:
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!