Commit 0f5ffa54 zshaohui

1.单据领料,逻辑修改

2.单据转库,可以多个箱子进行转库
1 个父辈 b1fb2e17
...@@ -1175,6 +1175,44 @@ public class LuxsanApi extends DefaultSmfApiListener { ...@@ -1175,6 +1175,44 @@ public class LuxsanApi extends DefaultSmfApiListener {
} }
public static String ticketGbPick(TicketPickPostRequest request) {
log.info("半成品仓,单据转库备料:ticketGbPick接口请求参数为:" + JSON.toJSONString(request) + ",地址为:" + ticketGbPickUrl);
String result = "";
try {
String resultStr = HttpHelper.postJson(ticketGbPickUrl, request);
log.info("半成品仓,单据转库备料:ticketGbPick接口返回为:" + resultStr);
LuxsanApiResult apiResult = JSONObject.parseObject(resultStr, LuxsanApiResult.class);
if (LuxsanApiEnum.ERROR.equals(apiResult.getMSGTY())) {
result = apiResult.getMSGTY();
}
} catch (ApiException e) {
e.printStackTrace();
result = e.getMessage();
}
return result;
}
public static String ticketGbPost(TicketGbPostRequest request) {
log.info("半成品仓,单据转库过账:ticketGbPost接口请求参数为:" + JSON.toJSONString(request) + ",地址为:" + ticketGbPostUrl);
String result = "";
try {
String resultStr = HttpHelper.postJson(ticketGbPostUrl, request);
log.info("半成品仓,单据转库过账:ticketGbPost接口返回为:" + resultStr);
LuxsanApiResult apiResult = JSONObject.parseObject(resultStr, LuxsanApiResult.class);
if (LuxsanApiEnum.ERROR.equals(apiResult.getMSGTY())) {
result = apiResult.getMSGTY();
}
} catch (ApiException e) {
e.printStackTrace();
result = e.getMessage();
}
return result;
}
@Override @Override
public void outTaskStatusChange(String outNotifyUrl, DataLog task) { public void outTaskStatusChange(String outNotifyUrl, DataLog task) {
//pickingIssue(new PickingIssueRequest()); //pickingIssue(new PickingIssueRequest());
...@@ -1505,4 +1543,19 @@ public class LuxsanApi extends DefaultSmfApiListener { ...@@ -1505,4 +1543,19 @@ public class LuxsanApi extends DefaultSmfApiListener {
public void setManualPalletUrl(String url) { public void setManualPalletUrl(String url) {
LuxsanApi.manualPalletUrl = url; LuxsanApi.manualPalletUrl = url;
} }
public static String ticketGbPickUrl;
@Value("${api.ticketGbPick}")
public void setTicketGbPickUrl(String url) {
LuxsanApi.ticketGbPickUrl = url;
}
public static String ticketGbPostUrl;
@Value("${api.ticketGbPost}")
public void setTicketGbPostUrl(String url) {
LuxsanApi.ticketGbPostUrl = url;
}
} }
package com.neotel.smfcore.custom.luxsan.api.bean.request;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class TicketGbPostRequest {
private String PLANT_CODE;
private String TICKET_CODE;
}
package com.neotel.smfcore.custom.luxsan.factory_c.wipstor.bean;
import lombok.Data;
import java.util.List;
@Data
public class TicketOut {
private String ticket;
private boolean isHold;
private List<String> boxList;
}
...@@ -146,18 +146,6 @@ public class AgvDeviceController { ...@@ -146,18 +146,6 @@ public class AgvDeviceController {
if (!task.isOdn()) { if (!task.isOdn()) {
task.setStatus(statusStr); task.setStatus(statusStr);
taskService.updateFinishedTask(task); taskService.updateFinishedTask(task);
String checkType = LiteorderCheckType.TICKET_TRANSFER_CHECKOUT + "";
if (checkType.equals(task.getSourceType())){
TicketPickPostData data = new TicketPickPostData(task.getTicketCode(),task.getTicketItem(),Arrays.asList(task.getCartonId()));
String result = LuxsanApi.ticketPickPost(new TicketPickPostRequest(CommonUtil.plantCode, task.getTicketCode(), "SWC", Arrays.asList(data)));
if (StringUtils.isEmpty(result)) {
Barcode barcode = barcodeManager.findByBarcode(task.getBarcode());
if (barcode != null) {
barcode.setWarehouseCode(task.getWarehouseCode());
barcodeManager.save(barcode);
}
}
}
} }
} else { } else {
task.setStatus(statusStr); task.setStatus(statusStr);
......
...@@ -10,6 +10,9 @@ import com.neotel.smfcore.core.barcode.service.po.Barcode; ...@@ -10,6 +10,9 @@ import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.enums.OP; import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.device.enums.OP_STATUS; import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager;
import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager; import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.Storage; import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos; import com.neotel.smfcore.core.storage.service.po.StoragePos;
...@@ -18,6 +21,7 @@ import com.neotel.smfcore.core.system.service.po.DataLog; ...@@ -18,6 +21,7 @@ import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService; import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.luxsan.api.LuxsanApi; import com.neotel.smfcore.custom.luxsan.api.LuxsanApi;
import com.neotel.smfcore.custom.luxsan.api.bean.request.PalletUpdateRequest; import com.neotel.smfcore.custom.luxsan.api.bean.request.PalletUpdateRequest;
import com.neotel.smfcore.custom.luxsan.api.bean.request.TicketGbPostRequest;
import com.neotel.smfcore.custom.luxsan.api.bean.request.TicketPickPostData; import com.neotel.smfcore.custom.luxsan.api.bean.request.TicketPickPostData;
import com.neotel.smfcore.custom.luxsan.api.bean.request.TicketPickPostRequest; import com.neotel.smfcore.custom.luxsan.api.bean.request.TicketPickPostRequest;
import com.neotel.smfcore.custom.luxsan.factory_c.common.util.CommonUtil; import com.neotel.smfcore.custom.luxsan.factory_c.common.util.CommonUtil;
...@@ -55,6 +59,12 @@ public class BoxTransferController { ...@@ -55,6 +59,12 @@ public class BoxTransferController {
@Autowired @Autowired
private IDataLogManager dataLogManager; private IDataLogManager dataLogManager;
@Autowired
private LiteOrderCache liteOrderCache;
@Autowired
private ILiteOrderManager liteOrderManager;
@ApiOperation("料箱从一个库位移到另外一个库位") @ApiOperation("料箱从一个库位移到另外一个库位")
@RequestMapping("/boxToOtherPos") @RequestMapping("/boxToOtherPos")
@AnonymousAccess @AnonymousAccess
...@@ -156,13 +166,30 @@ public class BoxTransferController { ...@@ -156,13 +166,30 @@ public class BoxTransferController {
taskService.updateFinishedTask(task); taskService.updateFinishedTask(task);
} }
if (OP_STATUS.FINISHED.name().equals(statusStr)) { if (OP_STATUS.FINISHED.name().equals(statusStr)) {
Barcode barcode = barcodeManager.findByBarcode(task.getBarcode());
//判断是否为单据转库的,如果是调用转库接口
String checkType = LiteorderCheckType.TICKET_TRANSFER_CHECKOUT + "";
if (checkType.equals(task.getSourceType())){
log.info(task.getBarcode()+"为单据转库的料箱,单据号为:"+task.getSourceName());
TicketPickPostData data = new TicketPickPostData(task.getTicketCode(),task.getTicketItem(),Arrays.asList(task.getCartonId()));
TicketPickPostRequest request = new TicketPickPostRequest(CommonUtil.plantCode, task.getTicketCode(), "SWC", Arrays.asList(data));
String result = LuxsanApi.ticketGbPick(request);
log.info(task.getBarcode()+"单据转库发料结果为:"+result);
if (StringUtils.isNotEmpty(result)){
return ResultBean.newErrorResult(-1,"",task.getBarcode()+"转库失败,目的库位为:"+task.getWarehouseCode()+"单据号为:"+task.getSourceName());
}
}
task.setStatus(statusStr); task.setStatus(statusStr);
taskService.moveTaskToFinished(task); taskService.moveTaskToFinished(task);
taskService.updateFinishedTask(task); taskService.updateFinishedTask(task);
String targetPos = task.getExtraDataMap("targetPos").toString(); String targetPos = task.getExtraDataMap("targetPos").toString();
StoragePos pos = storagePosManager.getByPosName(targetPos); StoragePos pos = storagePosManager.getByPosName(targetPos);
Storage storage = dataCache.getStorageById(pos.getStorageId()); Storage storage = dataCache.getStorageById(pos.getStorageId());
Barcode barcode = barcodeManager.findByBarcode(task.getBarcode());
DataLog dataLog = new DataLog(storage, barcode, pos); DataLog dataLog = new DataLog(storage, barcode, pos);
dataLog.setType(OP.PUT_IN); dataLog.setType(OP.PUT_IN);
...@@ -170,20 +197,43 @@ public class BoxTransferController { ...@@ -170,20 +197,43 @@ public class BoxTransferController {
dataLog.setOperator(SecurityUtils.getLoginUsername()+"手动移库位"); dataLog.setOperator(SecurityUtils.getLoginUsername()+"手动移库位");
dataLog.setCartonId(barcode.getPalletId()); dataLog.setCartonId(barcode.getPalletId());
dataLogManager.save(dataLog); dataLogManager.save(dataLog);
boxInPos(dataLog); boxInPos(dataLog,task.getWarehouseCode());
//如果是单据转库的时候,判断工单是否已经关闭
if (checkType.equals(task.getSourceType())){
String sourceName = task.getSourceName();
LiteOrder liteOrder = liteOrderCache.getLiteOrder(sourceName);
if (liteOrder == null){
liteOrder = liteOrderManager.findByOrderNo(sourceName);
}
if (liteOrder != null){
log.info(task.getBarcode()+"找到的单据号为:"+sourceName+",单据是否关闭:"+liteOrder.isClosed());
if (liteOrder.isClosed()){
log.info(task.getBarcode()+"为单据号:"+sourceName+"为最后一箱,调用单据转库过账");
String result = LuxsanApi.ticketGbPost(new TicketGbPostRequest(CommonUtil.plantCode, sourceName));
log.info(task.getBarcode()+"调用单据转库过账,单据号为:"+sourceName+"展示过账结果为:"+result);
if (StringUtils.isEmpty(result)){
return ResultBean.newErrorResult(-1,"",task.getBarcode()+"为单据转库最后一箱,单据号为:"+sourceName+",过账失败:"+result);
}
}
}
}
} }
} }
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
} }
private void boxInPos(DataLog queueTask){ private void boxInPos(DataLog queueTask,String warehouseCode){
Barcode barcode = barcodeManager.findByBarcode(queueTask.getBarcode()); Barcode barcode = barcodeManager.findByBarcode(queueTask.getBarcode());
//已完成,加入库存,并且从完成队列中清除 //已完成,加入库存,并且从完成队列中清除
StoragePos storagePos = storagePosManager.get(queueTask.getPosId()); StoragePos storagePos = storagePosManager.get(queueTask.getPosId());
if (barcode != null) { if (barcode != null) {
if (StringUtils.isNotEmpty(warehouseCode)) {
barcode.setWarehouseCode(warehouseCode);
}
barcode.setUsedCount(barcode.getUsedCount() + 1); barcode.setUsedCount(barcode.getUsedCount() + 1);
barcode.setPutInTime(System.currentTimeMillis(),true); barcode.setPutInTime(System.currentTimeMillis(),true);
barcode.setInOpor(""); barcode.setInOpor("");
......
...@@ -298,6 +298,10 @@ public class LineController { ...@@ -298,6 +298,10 @@ public class LineController {
soureId = dataLog.getSourceId(); soureId = dataLog.getSourceId();
sourceName = dataLog.getSourceName(); sourceName = dataLog.getSourceName();
if (!dataLog.isFinished()){ if (!dataLog.isFinished()){
if (!dataLog.isOutFromPos()){
finishedOutTask(dataLog);
dataLog.setOutFromPos(true);
}
dataLog.setStatus(OP_STATUS.OUT_ON_LINE.name()); dataLog.setStatus(OP_STATUS.OUT_ON_LINE.name());
taskService.moveTaskToFinished(dataLog); taskService.moveTaskToFinished(dataLog);
taskService.updateFinishedTask(dataLog); taskService.updateFinishedTask(dataLog);
......
package com.neotel.smfcore.custom.luxsan.factory_c.wipstor.controller; package com.neotel.smfcore.custom.luxsan.factory_c.wipstor.controller;
import com.alibaba.fastjson.JSON;
import com.neotel.smfcore.common.bean.ResultBean; import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.StringUtils; import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.order.LiteOrderCache; import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager; 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.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.luxsan.api.LuxsanApi; import com.neotel.smfcore.custom.luxsan.api.LuxsanApi;
import com.neotel.smfcore.custom.luxsan.api.bean.request.FetchMoveTicketRequest; import com.neotel.smfcore.custom.luxsan.api.bean.request.FetchMoveTicketRequest;
import com.neotel.smfcore.custom.luxsan.api.bean.result.FetchMoveTicketResult; import com.neotel.smfcore.custom.luxsan.api.bean.result.FetchMoveTicketResult;
import com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean.dto.FetchMoveTicketDto; import com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean.dto.FetchMoveTicketDto;
import com.neotel.smfcore.custom.luxsan.factory_c.common.util.CommonUtil; import com.neotel.smfcore.custom.luxsan.factory_c.common.util.CommonUtil;
import com.neotel.smfcore.custom.luxsan.factory_c.wipstor.bean.TicketOut;
import com.neotel.smfcore.custom.luxsan.factory_c.wipstor.util.TicketUtil; import com.neotel.smfcore.custom.luxsan.factory_c.wipstor.util.TicketUtil;
import com.neotel.smfcore.security.annotation.AnonymousAccess; import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
...@@ -36,6 +46,12 @@ public class TakeOutController { ...@@ -36,6 +46,12 @@ public class TakeOutController {
@Autowired @Autowired
private ILiteOrderManager liteOrderManager; private ILiteOrderManager liteOrderManager;
@Autowired
private IStoragePosManager storagePosManager;
@Autowired
private TaskService taskService;
@ApiOperation("拉取单据信息") @ApiOperation("拉取单据信息")
@RequestMapping("/fetchTicket") @RequestMapping("/fetchTicket")
@AnonymousAccess @AnonymousAccess
...@@ -51,17 +67,23 @@ public class TakeOutController { ...@@ -51,17 +67,23 @@ public class TakeOutController {
@ApiOperation("单据出库") @ApiOperation("单据出库")
@RequestMapping("/ticketOut") @RequestMapping("/ticketOut")
@AnonymousAccess @AnonymousAccess
public ResultBean ticketOut(String ticket, boolean isHold) { public synchronized ResultBean ticketOut(@RequestBody TicketOut ticketOut) {
log.info("半成品仓单据出库:" + ticket);
String ticket = ticketOut.getTicket();
boolean isHold = ticketOut.isHold();
List<String> boxList = ticketOut.getBoxList();
log.info("半成品仓261&931单据领用:" + ticket+",是否hold:"+isHold+",传入的料箱号为:"+ JSON.toJSONString(boxList));
if (StringUtils.isEmpty(ticket)) {
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"单据号"});
}
if (StringUtils.isNotEmpty(liteOrderCache.hasExecutingOrder())) { if (StringUtils.isNotEmpty(liteOrderCache.hasExecutingOrder())) {
//throw new ValidateException("","有正在执行的工单,不允许恢复"); //throw new ValidateException("","有正在执行的工单,不允许恢复");
return ResultBean.newErrorResult(-1, "", "有正在执行的工单" + liteOrderCache.hasExecutingOrder() + ",请确认"); return ResultBean.newErrorResult(-1, "", "有正在执行的工单" + liteOrderCache.hasExecutingOrder() + ",请确认");
} }
if (StringUtils.isEmpty(ticket)) {
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"单据号"});
}
//1.判断单据是否存在 //1.判断单据是否存在
LiteOrder liteOrder = liteOrderCache.getOrderSortItems(ticket); LiteOrder liteOrder = liteOrderCache.getOrderSortItems(ticket);
if (liteOrder == null) { if (liteOrder == null) {
...@@ -70,7 +92,66 @@ public class TakeOutController { ...@@ -70,7 +92,66 @@ public class TakeOutController {
liteOrder = liteOrderManager.createWithItems(liteOrder); liteOrder = liteOrderManager.createWithItems(liteOrder);
liteOrderCache.addOrderToMap(liteOrder); liteOrderCache.addOrderToMap(liteOrder);
} }
liteOrderCache.wipTicketOut(ticket, isHold);
List<String> holdPosIdList = liteOrderCache.getHoldPosIdList(liteOrder);
if (isHold){
if (holdPosIdList == null || holdPosIdList.isEmpty()){
return ResultBean.newErrorResult(-1,"",ticket+"没有获取到Hold的料箱信息");
}
}
//获取箱子信息
List<StoragePos> storagePosList = new ArrayList<>();
if (boxList != null && !boxList.isEmpty()) {
for (String palletId : boxList) {
if (StringUtils.isEmpty(palletId)){
return ResultBean.newErrorResult(-1, "", "请核实传入的栈板id是否为空");
}
//判断在不在库
StoragePos pos = storagePosManager.findOne(new Query(Criteria.where("barcode.palletId").is(palletId)));
if (pos == null) {
return ResultBean.newErrorResult(-1, "", palletId + "不在库位中,请核实");
}
//判断有没有任务
Barcode barcode = pos.getBarcode();
List<DataLog> allTasks = taskService.getAllTasks();
for (DataLog dataLog : allTasks) {
if (barcode.getBarcode().equals(dataLog.getBarcode()) && !dataLog.isFinished() && !dataLog.isCancel()) {
return ResultBean.newErrorResult(-1, "", palletId + "有正在执行的任务,请核实,料箱号为:"+barcode.getBarcode());
}
}
//判断输入的箱子,是否为当前工单所需要的
boolean hasSame = false;
for (LiteOrderItem orderItem : liteOrder.getOrderItems()) {
if (barcode.getPartNumber().equals(orderItem.getPn()) || barcode.getPn().equals(orderItem.getPn())) {
if (StringUtils.isNotBlank(barcode.getWarehouseCode())) {
if (barcode.getWarehouseCode().equals(orderItem.getWarehouseCode())) {
hasSame = true;
break;
}
}
}
}
if (!hasSame) {
return ResultBean.newErrorResult(-1, "", palletId + "不符合当前odn的料号与库别,料箱号为:"+barcode.getBarcode());
}
//判断有没有hold
if (isHold){
if (holdPosIdList != null && !holdPosIdList.isEmpty()) {
if (!holdPosIdList.contains(pos.getId())) {
return ResultBean.newErrorResult(-1, "", palletId+"不是hold的,料箱号为:"+palletId);
}
}
}
storagePosList.add(pos);
}
}
liteOrderCache.wipTicketOut(ticket, isHold,storagePosList);
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
} }
} }
...@@ -193,7 +193,7 @@ public class WipStorCheckOutController { ...@@ -193,7 +193,7 @@ public class WipStorCheckOutController {
List<DataLog> allTasks = taskService.getAllTasks(); List<DataLog> allTasks = taskService.getAllTasks();
for (DataLog dataLog : allTasks) { for (DataLog dataLog : allTasks) {
if (box.startsWith(dataLog.getBarcode()) && !dataLog.isFinished() && !dataLog.isCancel()) { if (barcode.getBarcode().equals(dataLog.getBarcode()) && !dataLog.isFinished() && !dataLog.isCancel()) {
return ResultBean.newErrorResult(-1, "", box + "有正在执行的任务,请核实"); return ResultBean.newErrorResult(-1, "", box + "有正在执行的任务,请核实");
} }
} }
......
...@@ -6,9 +6,12 @@ import com.neotel.smfcore.core.barcode.enums.BARCODE_STATUS; ...@@ -6,9 +6,12 @@ import com.neotel.smfcore.core.barcode.enums.BARCODE_STATUS;
import com.neotel.smfcore.core.device.enums.OP; import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.device.enums.OP_STATUS; import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.equipment.bean.EquipStatusBean;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager; import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.Storage; import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.system.service.manager.IDataLogManager; import com.neotel.smfcore.core.system.service.manager.IDataLogManager;
import com.neotel.smfcore.core.system.util.EquipStatusUtil;
import com.neotel.smfcore.custom.luxsan.factory_c.wipstor.kafka.bean.Heartbeat;
import com.neotel.smfcore.custom.luxsan.factory_c.wipstor.kafka.bean.MachineParameter; import com.neotel.smfcore.custom.luxsan.factory_c.wipstor.kafka.bean.MachineParameter;
import com.neotel.smfcore.custom.luxsan.factory_c.wipstor.kafka.bean.MachineParameterData; import com.neotel.smfcore.custom.luxsan.factory_c.wipstor.kafka.bean.MachineParameterData;
import com.neotel.smfcore.custom.luxsan.factory_c.wipstor.kafka.config.KafkaConfig; import com.neotel.smfcore.custom.luxsan.factory_c.wipstor.kafka.config.KafkaConfig;
...@@ -92,7 +95,18 @@ public class KafkaService { ...@@ -92,7 +95,18 @@ public class KafkaService {
log.info("结束推送原材料仓tower数据"); log.info("结束推送原材料仓tower数据");
} }
//@Scheduled(fixedRate = 1000 * 10)
public void sendHeartbeat() {
Heartbeat heartbeat = new Heartbeat();
String dateStr = DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss.SSS");
heartbeat.setOccurrenceTime(dateStr);
heartbeat.setMachineID(StorageNameConfig.semiFinishedTower);
heartbeat.setTopicType(KafkaConfig.HEARTBEAT_TOPIC);
String statusStr = JSON.toJSONString(heartbeat);
log.info("出料口主题为:" + KafkaConfig.HEARTBEAT_TOPIC + "内容为:" + statusStr);
ListenableFuture future = kafkaTemplate.send(KafkaConfig.HEARTBEAT_TOPIC, statusStr);
log.info("出料口返回结果为:" + JSON.toJSONString(future));
}
public int getTodayInOutCount(List<String> storageIdList, int type) { public int getTodayInOutCount(List<String> storageIdList, int type) {
Query q = new Query(); Query q = new Query();
......
...@@ -181,3 +181,9 @@ api: ...@@ -181,3 +181,9 @@ api:
batchCheckReel: http://10.68.27.68:8001/Npm/CheckReelBatch batchCheckReel: http://10.68.27.68:8001/Npm/CheckReelBatch
fetchReel: http://10.68.30.22:8082/api/mlb/FetchReel fetchReel: http://10.68.30.22:8082/api/mlb/FetchReel
#半成品仓单据转库备料
ticketGbPick: http://10.68.30.22:8082/api/mlb/TicketGbPick
#半成品仓单据转库过账
ticketGbPost: http://10.68.30.22:8082/api/mlb/TicketGbPost
...@@ -180,4 +180,10 @@ api: ...@@ -180,4 +180,10 @@ api:
#批量禁用料 #批量禁用料
batchCheckReel: http://10.68.27.68:8001/Npm/CheckReelBatch batchCheckReel: http://10.68.27.68:8001/Npm/CheckReelBatch
fetchReel: http://10.42.220.171:8082/api/mlb/FetchReel
\ No newline at end of file \ No newline at end of file
fetchReel: http://10.42.220.171:8082/api/mlb/FetchReel
#半成品仓单据转库备料
ticketGbPick: http://10.42.220.171:8082/api/mlb/TicketGbPick
#半成品仓单据转库过账
ticketGbPost: http://10.42.220.171:8082/api/mlb/TicketGbPost
\ No newline at end of file \ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!