Commit 9f602532 sunke

Merge remote-tracking branch 'origin/master'

2 个父辈 e0b83d4d ab0a8019
...@@ -107,6 +107,15 @@ public class Constants { ...@@ -107,6 +107,15 @@ public class Constants {
* 呆滞天数 * 呆滞天数
*/ */
public static final String CACHE_SluggishDay="sluggishDay"; public static final String CACHE_SluggishDay="sluggishDay";
/**
* 过期天数
*/
public static final String CACHE_ExpiresDay="expiresDay";
/**
* 容量预警
*/
public static final String CACHE_CapacityWarn="capacityWarn";
// //
// /** // /**
// * 停止定时器任务 // * 停止定时器任务
......
...@@ -35,6 +35,9 @@ public class CodeResolve { ...@@ -35,6 +35,9 @@ public class CodeResolve {
private List<BarcodeRule> barcodeRuleList; private List<BarcodeRule> barcodeRuleList;
private Integer defaultExpiresDay=0;
public void updateBarcodeRuleList(List<String> ruleList){ public void updateBarcodeRuleList(List<String> ruleList){
barcodeRuleList = Lists.newArrayList(); barcodeRuleList = Lists.newArrayList();
for(String codeRule : ruleList){ for(String codeRule : ruleList){
...@@ -43,6 +46,10 @@ public class CodeResolve { ...@@ -43,6 +46,10 @@ public class CodeResolve {
} }
} }
} }
public void updateExpiresDay(Integer expiresDay){
defaultExpiresDay=expiresDay;
}
public CodeBean resolveSingleCode(String barcodeItemStr ){ public CodeBean resolveSingleCode(String barcodeItemStr ){
return resolveSingleCode(barcodeItemStr, COMPONENT_TYPE.COMPONENT); return resolveSingleCode(barcodeItemStr, COMPONENT_TYPE.COMPONENT);
...@@ -88,6 +95,10 @@ public class CodeResolve { ...@@ -88,6 +95,10 @@ public class CodeResolve {
boolean setSize=false; boolean setSize=false;
Component component = componentManager.findByPartNumberAndProvider(barcode.getPartNumber(),barcode.getProvider()); Component component = componentManager.findByPartNumberAndProvider(barcode.getPartNumber(),barcode.getProvider());
int validDay = 0; int validDay = 0;
if(defaultExpiresDay!=null&&defaultExpiresDay>0){
validDay=defaultExpiresDay;
}
if(component != null) { if(component != null) {
validDay = component.getValidDay(); validDay = component.getValidDay();
codeBeanFromRule.setShowImg(component.getShowImg()); codeBeanFromRule.setShowImg(component.getShowImg());
......
...@@ -160,7 +160,7 @@ public class BoxStatusBean { ...@@ -160,7 +160,7 @@ public class BoxStatusBean {
if (ObjectUtil.isNotEmpty(ar)) { if (ObjectUtil.isNotEmpty(ar)) {
String[] ar2 = ar.split("="); String[] ar2 = ar.split("=");
if (ar2.length == 2) { if (ar2.length == 2) {
caMap.put(ar2[0], Integer.valueOf(ar2[1])); caMap.put(ar2[0].toUpperCase(), Integer.valueOf(ar2[1]));
} }
} }
} }
......
...@@ -40,10 +40,10 @@ public enum OP_STATUS { ...@@ -40,10 +40,10 @@ public enum OP_STATUS {
*/ */
END , END ,
/** // /**
* 已从仓位中取出 // * 已从仓位中取出
*/ // */
OUTBOX, // OUTBOX,
/** /**
* 在线体上 * 在线体上
*/ */
......
...@@ -632,7 +632,7 @@ public class BaseDeviceHandler implements IDeviceHandler { ...@@ -632,7 +632,7 @@ public class BaseDeviceHandler implements IDeviceHandler {
* @param posId * @param posId
* @param exTime * @param exTime
*/ */
private void updatePosExecuteTime(String posId, double exTime) { protected void updatePosExecuteTime(String posId, double exTime) {
if (posId == null || exTime <= 0) { if (posId == null || exTime <= 0) {
return; return;
} }
...@@ -653,7 +653,7 @@ public class BaseDeviceHandler implements IDeviceHandler { ...@@ -653,7 +653,7 @@ public class BaseDeviceHandler implements IDeviceHandler {
/** /**
* 入仓位完成 * 入仓位完成
*/ */
private void updatePutInData(DataLog task) throws ValidateException { protected void updatePutInData(DataLog task) throws ValidateException {
//从队列里面移除操作 //从队列里面移除操作
taskService.removeQueueTask(task); taskService.removeQueueTask(task);
......
...@@ -7,7 +7,10 @@ import com.google.common.collect.Maps; ...@@ -7,7 +7,10 @@ import com.google.common.collect.Maps;
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.Constants; import com.neotel.smfcore.common.utils.Constants;
import com.neotel.smfcore.core.barcode.bean.CodeBean;
import com.neotel.smfcore.core.barcode.enums.COMPONENT_TYPE;
import com.neotel.smfcore.core.barcode.service.po.Barcode; import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import com.neotel.smfcore.core.device.bean.BoxStatusBean; import com.neotel.smfcore.core.device.bean.BoxStatusBean;
import com.neotel.smfcore.core.device.bean.StatusBean; import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.device.enums.BOX_STATUS; import com.neotel.smfcore.core.device.enums.BOX_STATUS;
...@@ -26,6 +29,7 @@ import io.swagger.annotations.ApiOperation; ...@@ -26,6 +29,7 @@ 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.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
...@@ -173,7 +177,7 @@ public class RobotBoxHandler extends BaseDeviceHandler { ...@@ -173,7 +177,7 @@ public class RobotBoxHandler extends BaseDeviceHandler {
} else if (BOX_STATUS.IN_FAILED == status) {//入库失败 } else if (BOX_STATUS.IN_FAILED == status) {//入库失败
//暂不处理 //暂不处理
} else if (BOX_STATUS.OUT_FINISHED == status) {//出仓完成 } else if (BOX_STATUS.OUT_FINISHED == status) {//出仓完成
finishedOutPos(statusBean.getCid(), posName,barcode, executeTime); finishedOutPos(statusBean.getCid(), posName,barcode, executeTime,OP_STATUS.OUT_BOX);
} else if (BOX_STATUS.OUT_END == status) {//出库完成(放到仓门口 } else if (BOX_STATUS.OUT_END == status) {//出库完成(放到仓门口
//更改出库状态为OUT_DOOR //更改出库状态为OUT_DOOR
List<DataLog> finishedTasks = taskService.getFinishedTasks(); List<DataLog> finishedTasks = taskService.getFinishedTasks();
...@@ -230,6 +234,9 @@ public class RobotBoxHandler extends BaseDeviceHandler { ...@@ -230,6 +234,9 @@ public class RobotBoxHandler extends BaseDeviceHandler {
String lastPosId = ""; String lastPosId = "";
String lineMsg = ""; String lineMsg = "";
log.info("流水线[" + cids + "]获取[" + code + "]的入库库位"); log.info("流水线[" + cids + "]获取[" + code + "]的入库库位");
if(ObjectUtil.isEmpty(cids)){
cids="";
}
String[] cidArray= cids.split(","); String[] cidArray= cids.split(",");
Map<String, Object> resultMap = Maps.newHashMap(); Map<String, Object> resultMap = Maps.newHashMap();
String okMsg = ""; String okMsg = "";
...@@ -262,6 +269,10 @@ public class RobotBoxHandler extends BaseDeviceHandler { ...@@ -262,6 +269,10 @@ public class RobotBoxHandler extends BaseDeviceHandler {
try { try {
Barcode barcode = codeResolve.resolveOneValideBarcode(code); Barcode barcode = codeResolve.resolveOneValideBarcode(code);
for (DataLog dataLog : taskService.getQueueTasks()) { for (DataLog dataLog : taskService.getQueueTasks()) {
//已取消或已完成的任务不返回
if(dataLog.isFinished()||dataLog.isCancel()){
continue;
}
if (dataLog.getBarcode().equals(barcode.getBarcode())) { if (dataLog.getBarcode().equals(barcode.getBarcode())) {
if (dataLog.isPutInTask()) { if (dataLog.isPutInTask()) {
//已有入库任务 //已有入库任务
...@@ -345,11 +356,12 @@ public class RobotBoxHandler extends BaseDeviceHandler { ...@@ -345,11 +356,12 @@ public class RobotBoxHandler extends BaseDeviceHandler {
Collection<DataLog> tasks = taskService.getAllTasks(); Collection<DataLog> tasks = taskService.getAllTasks();
for (DataLog task : tasks) { for (DataLog task : tasks) {
if (task.isCheckOutTask() && task.getStorageId().equals(pos.getStorageId())) { if (task.isCheckOutTask() && task.getStorageId().equals(pos.getStorageId())) {
if (!task.isFinished() && !task.isInRobot()) { if ((!task.isFinished()) && (!task.isInRobot())&&(!task.isInLine()) ) {
errorMsg = "库位[" + pos.getPosName() + "]所在料仓有出库任务,暂停入库"; errorMsg = "库位[" + pos.getPosName() + "]所在料仓有出库任务,暂停入库";
lineMsg = errorMsg; lineMsg = errorMsg;
resultMap.put("result", "99"); resultMap.put("result", "99");
resultMap.put("msg", errorMsg); resultMap.put("msg", errorMsg);
log.info("[" + barcode.getBarcode() + "]分到库位[" + pos.getPosName() + "]所在料仓有出库任务,暂停入库");
return resultMap; return resultMap;
} }
} }
...@@ -419,7 +431,7 @@ public class RobotBoxHandler extends BaseDeviceHandler { ...@@ -419,7 +431,7 @@ public class RobotBoxHandler extends BaseDeviceHandler {
String barcode = request.getParameter("barcode"); String barcode = request.getParameter("barcode");
String statusStr = request.getParameter("status"); String statusStr = request.getParameter("status");
String locInfo = request.getParameter("locInfo"); String locInfo = request.getParameter("locInfo");
log.debug("收到料盘[" + barcode + "]更新位置指令[" + statusStr + "]=" + locInfo); log.info("收到taskId["+taskId+"],料盘[" + barcode + "]更新位置指令[" + statusStr + "]=" + locInfo);
if (ObjectUtil.isEmpty(locInfo)) { if (ObjectUtil.isEmpty(locInfo)) {
locInfo = statusStr; locInfo = statusStr;
...@@ -427,16 +439,37 @@ public class RobotBoxHandler extends BaseDeviceHandler { ...@@ -427,16 +439,37 @@ public class RobotBoxHandler extends BaseDeviceHandler {
DataLog opTask = null; DataLog opTask = null;
List<DataLog> allTasks = taskService.getAllTasks(); List<DataLog> allTasks = taskService.getAllTasks();
for (DataLog task : allTasks) { for (DataLog task : allTasks) {
if (task.getId().equals(taskId) && task.getBarcode().equals(barcode)) { if(task.isFinished()){
continue;
}
if(ObjectUtil.isNotEmpty(task)&&task.getId().equals(taskId)) {
opTask = task;
break;
}
else if (ObjectUtil.isNotEmpty(barcode) && task.getBarcode().equals(barcode)) {
opTask = task; opTask = task;
break; break;
} }
} }
//如果任务为空,重新查找已完成的任务
if(opTask == null) {
for (DataLog task : allTasks) {
if (ObjectUtil.isNotEmpty(task) && task.getId().equals(taskId)) {
opTask = task;
break;
} else if (ObjectUtil.isNotEmpty(barcode) && task.getBarcode().equals(barcode)) {
opTask = task;
break;
}
}
}
if (opTask == null) { if (opTask == null) {
log.info(" taskId["+taskId+"],料盘[" + barcode + "]更新位置指令[" + statusStr + "]=" + locInfo+",失败:任务不存在");
return ResultBean.newErrorResult(301, "smfcore.task.notExist", "任务不存在"); return ResultBean.newErrorResult(301, "smfcore.task.notExist", "任务不存在");
} }
if (opTask.isFinished()) { if (opTask.isFinished()) {
log.info(" taskId["+taskId+"],料盘[" + barcode + "]更新位置指令[" + statusStr + "]=" + locInfo+",失败:任务已完成");
return ResultBean.newErrorResult(302, "smfcore.task.hasEnd", "任务已完成"); return ResultBean.newErrorResult(302, "smfcore.task.hasEnd", "任务已完成");
} }
...@@ -444,7 +477,8 @@ public class RobotBoxHandler extends BaseDeviceHandler { ...@@ -444,7 +477,8 @@ public class RobotBoxHandler extends BaseDeviceHandler {
// return ResultBean.newErrorResult(303, "smfcore.task.hasCancel", "更新状态时{0}的出库任务[{1}]已被取消", new String[]{opTask.getBarcode(), opTask.getId()}); // return ResultBean.newErrorResult(303, "smfcore.task.hasCancel", "更新状态时{0}的出库任务[{1}]已被取消", new String[]{opTask.getBarcode(), opTask.getId()});
// } // }
statusStr = statusStr.toUpperCase(); statusStr = statusStr.toUpperCase();
log.info("更新料盘[" + barcode + "]的任务状态[" + opTask.getStatus() + "=" + opTask.getLocInfo() + "]为[" + statusStr + "=" + locInfo + "]"); String inouType=opTask.isCheckOutTask()? "出库":"入库";
log.info("更新料盘[" + barcode + "]的["+inouType+"]任务状态[" + opTask.getStatus() + "=" + opTask.getLocInfo() + "]为[" + statusStr + "=" + locInfo + "]");
opTask.setStatus(statusStr); opTask.setStatus(statusStr);
opTask.setLocInfo(locInfo); opTask.setLocInfo(locInfo);
...@@ -470,6 +504,9 @@ public class RobotBoxHandler extends BaseDeviceHandler { ...@@ -470,6 +504,9 @@ public class RobotBoxHandler extends BaseDeviceHandler {
if (opTask.isPutInTask()) { if (opTask.isPutInTask()) {
taskService.updateQueueTask(opTask); taskService.updateQueueTask(opTask);
} else { } else {
if(opTask.isFinished()) {
taskService.removeQueueTask(opTask);
}
taskService.updateFinishedTask(opTask); taskService.updateFinishedTask(opTask);
} }
...@@ -545,6 +582,55 @@ public class RobotBoxHandler extends BaseDeviceHandler { ...@@ -545,6 +582,55 @@ public class RobotBoxHandler extends BaseDeviceHandler {
} }
@Autowired
private CodeResolve codeResolve;
@ApiOperation("获取条码尺寸")
@PostMapping(value = "/service/store/robotBox/getSize")
@ResponseBody
@AnonymousAccess
public ResultBean getSize(HttpServletRequest request) {
try {
String barcodeStr = request.getParameter("barcode");
log.info(" 获取[" + barcodeStr + "]的尺寸信息");
Collection<CodeBean> codeBeans = codeResolve.resolveCodeStr(barcodeStr, COMPONENT_TYPE.COMPONENT);
;
Barcode barcode = null;
for (CodeBean codeBean : codeBeans) {
if (codeBean.isValid()) {
if (barcode != null) {
String msg = "获取尺寸时找到多个有效条码";
return ResultBean.newErrorResult(105, "smfcore.getSize.error", "获取" + barcodeStr + "尺寸失败:有多个条码");
} else {
barcode = codeBean.getBarcode();
}
}
}
if (barcode == null) {
return ResultBean.newErrorResult(105, "smfcore.getSize.error", "获取" + barcodeStr + "尺寸失败:未找到有效条码");
}
if (barcode.getPlateSize() > 0 && barcode.getHeight() > 0) {
Map<String, String> returnData = new HashMap<>();
returnData.put("barcode", barcode.getBarcode());
returnData.put("plateW", barcode.getPlateSize() + "");
returnData.put("plateH", barcode.getHeight() + "");
return ResultBean.newOkResult(returnData);
} else {
return ResultBean.newErrorResult(105, "smfcore.getSize.error", "获取" + barcodeStr + "尺寸失败:未找到对应尺寸");
}
} catch (ValidateException e) {
log.warn(" 获取尺寸信息出错:" + e.getMessage());
return ResultBean.newErrorResult(105, "smfcore.getSize.error", "获取尺寸信息出错:" + e.getMessage());
} catch (Exception e) {
log.error("获取尺寸信息出错", e);
return ResultBean.newErrorResult(1, "smfcore.getSize.error", "获取尺寸信息出错:" + e.getMessage());
}
}
......
...@@ -3,6 +3,7 @@ package com.neotel.smfcore.core.device.handler.impl; ...@@ -3,6 +3,7 @@ package com.neotel.smfcore.core.device.handler.impl;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.Constants; import com.neotel.smfcore.common.utils.Constants;
import com.neotel.smfcore.common.utils.ReelLockPosUtil;
import com.neotel.smfcore.core.barcode.service.po.Barcode; import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.bean.BoxStatusBean; import com.neotel.smfcore.core.device.bean.BoxStatusBean;
import com.neotel.smfcore.core.device.bean.StatusBean; import com.neotel.smfcore.core.device.bean.StatusBean;
...@@ -154,15 +155,24 @@ public class ThirdBoxHandler extends BaseDeviceHandler{ ...@@ -154,15 +155,24 @@ public class ThirdBoxHandler extends BaseDeviceHandler{
int status = boxStatus.getStatus(); int status = boxStatus.getStatus();
String posName = boxStatus.getPosId(); String posName = boxStatus.getPosId();
String barcode=boxStatus.getBarcode(); String barcode=boxStatus.getBarcode();
Map<String,Integer> posCapMap= boxStatus.getCapacity();
int executeTime = boxStatus.getExecuteTime(); int executeTime = boxStatus.getExecuteTime();
if ((!Strings.isNullOrEmpty(posName))||(!Strings.isNullOrEmpty(barcode))) {//客户端发一次完成之后,会发空的 posName,不需要处理 if ((!Strings.isNullOrEmpty(posName))||(!Strings.isNullOrEmpty(barcode))) {//客户端发一次完成之后,会发空的 posName,不需要处理
if (BOX_STATUS.IN_FINISHED == status) {//入仓完成 if (BOX_STATUS.IN_FINISHED == status) {//入仓完成
finishedPutIn(statusBean.getCid(), posName,barcode, executeTime); thirdBoxFinishedPutIn(statusBean.getCid(),posCapMap, posName,barcode, executeTime);
} else if (BOX_STATUS.IN_FAILED == status) {//入库失败 } else if (BOX_STATUS.IN_FAILED == status) {//入库失败
//暂不处理 //暂不处理
} else if (BOX_STATUS.OUT_FINISHED == status) {//出仓完成 } else if (BOX_STATUS.OUT_FINISHED == status) {//出仓完成
finishedOutPos(statusBean.getCid(), posName,barcode, executeTime);
} else if (BOX_STATUS.OUT_END == status) {//出库完成(放到仓门口 } else if (BOX_STATUS.OUT_END == status) {//出库完成(放到仓门口
try{
//麦康尼料仓不发OUT_FINISHED,收到OutEnd的时候处理
finishedOutPos(statusBean.getCid(), posName,barcode, executeTime, OP_STATUS.OUT_BOX);
}catch (Exception ex){
}
//更改出库状态为OUT_DOOR //更改出库状态为OUT_DOOR
List<DataLog> finishedTasks = taskService.getFinishedTasks(); List<DataLog> finishedTasks = taskService.getFinishedTasks();
for (DataLog finishedTask : finishedTasks) { for (DataLog finishedTask : finishedTasks) {
...@@ -207,6 +217,47 @@ public class ThirdBoxHandler extends BaseDeviceHandler{ ...@@ -207,6 +217,47 @@ public class ThirdBoxHandler extends BaseDeviceHandler{
} }
return statusBean; return statusBean;
} }
protected void thirdBoxFinishedPutIn(String cid, Map<String,Integer> posCapMap,String posName,String barcode,int executeTime) throws ValidateException {
DataLog task = taskService.findExecutingTask(cid, posName, barcode);
if (task != null && task.isPutInTask()) {
//对比容量,更新库位号
if (executeTime > 0) {
task.setExecuteTime(executeTime);
updatePosExecuteTime(task.getPosName(), executeTime);
}
log.info(task.getBarcode() + "入仓位[" + task.getPosName() + "]完成,执行时间[" + executeTime + "]秒");
ReelLockPosUtil.removeReelLockPosInfo(task.getBarcode());
DataLog cancelTask = taskService.findFinishedPutInTask(cid, task.getPosName(), task.getBarcode());
if (cancelTask != null && cancelTask.isCancel()) {
//将相同库位已经取消的任务从完成队列里删除
taskService.removeFinishedTask(cancelTask);
log.info("从已完成的任务列表中删除之前取消的任务:" + cancelTask.getPosName() + " ReelId:" + cancelTask.getBarcode());
}
updatePutInData(task);
} else {
//从已完成列表中找,如果还找不到就忽略
task = taskService.findFinishedPutInTask(cid, posName, barcode);
if (task != null && task.isPutInTask()) {
if (task.isCancel()) {//被取消的任务,客户端发完成信号过来,修改取消状态为已完成
if (executeTime > 0) {
task.setExecuteTime(executeTime);
updatePosExecuteTime(task.getPosName(), executeTime);
}
log.info(task.getBarcode() + "入仓位[" + task.getPosName() + "]完成,但任务已被取消,修改为完成,执行时间[" + executeTime + "]秒");
updatePutInData(task);
}
} else {
log.error(cid + "入仓位[" + posName + "]ReelId[" + barcode + "]完成时任务不存在");
}
}
}
@Override @Override
public DeviceType getDeviceType() { public DeviceType getDeviceType() {
return DeviceType.SMDBOX_THIRD; return DeviceType.SMDBOX_THIRD;
......
...@@ -104,6 +104,8 @@ public class DataCache { ...@@ -104,6 +104,8 @@ public class DataCache {
@PostConstruct @PostConstruct
public void initialize() { public void initialize() {
settings = getSettings(); settings = getSettings();
Integer caWarn=getCache(Constants.CACHE_CapacityWarn);
codeResolve.updateExpiresDay(caWarn);
initCacheItem(); initCacheItem();
} }
...@@ -163,6 +165,9 @@ public class DataCache { ...@@ -163,6 +165,9 @@ public class DataCache {
List<String> ruleList = (List<String>) value; List<String> ruleList = (List<String>) value;
codeResolve.updateBarcodeRuleList(ruleList); codeResolve.updateBarcodeRuleList(ruleList);
} }
if(cacheKey.equals(Constants.CACHE_ExpiresDay)){
codeResolve.updateExpiresDay((Integer)value);
}
log.info("updateCache [" + cacheKey + "]=[" + value + "]"); log.info("updateCache [" + cacheKey + "]=[" + value + "]");
} }
......
...@@ -31,6 +31,7 @@ import com.neotel.smfcore.core.storage.service.po.Storage; ...@@ -31,6 +31,7 @@ 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;
import com.neotel.smfcore.core.system.util.TaskService; import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.siemens.SiemensApi; import com.neotel.smfcore.custom.siemens.SiemensApi;
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.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
...@@ -239,6 +240,27 @@ public class StoragePosController { ...@@ -239,6 +240,27 @@ public class StoragePosController {
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
} }
@ApiOperation("批量启用或禁用库位")
@PutMapping("/batchEnabledOrDisabledPos")
@PreAuthorize("@el.check('storagePos:edit')")
public ResultBean batchEnabledOrDisabledPos(@RequestBody StoragePosEnabledDto enabledDto) {
List<String> idList = enabledDto.getIdList();
if (idList == null || idList.isEmpty()) {
return ResultBean.newErrorResult(1,"smfcore.valueCanotNull", "{0}不能为空", new String[]{"ID"});
}
storagePosManager.batchUpdatePosEnabled(idList, enabledDto.isEnabled());
//查询库位具体信息,更新缓存
List<StoragePos> posList = storagePosManager.findPosByIdList(idList);
for (StoragePos pos : posList) {
dataCache.updateDisablePos(pos);
log.info("启用或禁用库位:库位号[" + pos.getId() + "][" + pos.getPosName() + "]=" + enabledDto.isEnabled());
DeviceMessageUtil.addEnabledPosMessage(pos, SecurityUtils.getCurrentUsername());
}
for (Storage storage : dataCache.getAllStorage().values()) {
dataCache.reloadStorage(storage, storage.getCid());
}
return ResultBean.newOkResult("");
}
@ApiOperation("修改库位") @ApiOperation("修改库位")
@PutMapping @PutMapping
......
...@@ -5,6 +5,7 @@ import lombok.Getter; ...@@ -5,6 +5,7 @@ import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import java.io.Serializable; import java.io.Serializable;
import java.util.List;
@Getter @Getter
@Setter @Setter
...@@ -12,6 +13,9 @@ public class StoragePosEnabledDto implements Serializable { ...@@ -12,6 +13,9 @@ public class StoragePosEnabledDto implements Serializable {
@ApiModelProperty("库位ID") @ApiModelProperty("库位ID")
private String id; private String id;
@ApiModelProperty("库位ID列表")
private List<String> idList;
@ApiModelProperty("启用/禁用") @ApiModelProperty("启用/禁用")
private boolean enabled = true; private boolean enabled = true;
} }
...@@ -74,4 +74,8 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> { ...@@ -74,4 +74,8 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
List<StoragePos> findDisabled(); List<StoragePos> findDisabled();
StoragePos getEmptyWarmPos(Storage storage, Barcode barcode, Collection<String> excludePosIds) throws ValidateException; StoragePos getEmptyWarmPos(Storage storage, Barcode barcode, Collection<String> excludePosIds) throws ValidateException;
void batchUpdatePosEnabled(List<String> idList, boolean enabled);
List<StoragePos> findPosByIdList(List<String> idList);
} }
...@@ -622,4 +622,18 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -622,4 +622,18 @@ public class StoragePosManagerImpl implements IStoragePosManager {
return getEmptyPos(storage,barcode, excludePosIds,true); return getEmptyPos(storage,barcode, excludePosIds,true);
} }
@Override
public void batchUpdatePosEnabled(List<String> idList, boolean enabled) {
Query query = new Query(Criteria.where("id").in(idList));
Update update = new Update();
update.set("enabled",enabled);
storagePosDao.updateMulti(query,update);
}
@Override
public List<StoragePos> findPosByIdList(List<String> idList) {
Query query = new Query(Criteria.where("id").in(idList));
return storagePosDao.findByQuery(query);
}
} }
...@@ -72,10 +72,14 @@ public class SettingsController { ...@@ -72,10 +72,14 @@ public class SettingsController {
boolean stopOut = dataCache.getCache(Constants.CACHE_StopOut); boolean stopOut = dataCache.getCache(Constants.CACHE_StopOut);
boolean startJob = dataCache.getCache(Constants.CACHE_StartJob); boolean startJob = dataCache.getCache(Constants.CACHE_StartJob);
Integer sluggishDay=dataCache.getCache(Constants.CACHE_SluggishDay); Integer sluggishDay=dataCache.getCache(Constants.CACHE_SluggishDay);
Integer expiresDay=dataCache.getCache(Constants.CACHE_ExpiresDay);
Integer caWarn=dataCache.getCache(Constants.CACHE_CapacityWarn);
SysSettingsDto dto = new SysSettingsDto(); SysSettingsDto dto = new SysSettingsDto();
dto.setStartJob(startJob); dto.setStartJob(startJob);
dto.setStopOut(stopOut); dto.setStopOut(stopOut);
dto.setSluggishDay(sluggishDay); dto.setSluggishDay(sluggishDay);
dto.setExpiresDay(expiresDay);
dto.setCapacityWarn(caWarn);
return dto; return dto;
} }
...@@ -86,7 +90,10 @@ public class SettingsController { ...@@ -86,7 +90,10 @@ public class SettingsController {
dataCache.updateCache(Constants.CACHE_StopOut, sysSettingsDto.isStopOut()); dataCache.updateCache(Constants.CACHE_StopOut, sysSettingsDto.isStopOut());
dataCache.updateCache(Constants.CACHE_StartJob, sysSettingsDto.isStartJob()); dataCache.updateCache(Constants.CACHE_StartJob, sysSettingsDto.isStartJob());
dataCache.updateCache(Constants.CACHE_SluggishDay,sysSettingsDto.getSluggishDay()); dataCache.updateCache(Constants.CACHE_SluggishDay,sysSettingsDto.getSluggishDay());
log.info("更改系统设置:stopout=" + sysSettingsDto.isStopOut() + ",stopjob=" + sysSettingsDto.isStartJob()+",sluggishDay="+sysSettingsDto.getSluggishDay()); dataCache.updateCache(Constants.CACHE_ExpiresDay,sysSettingsDto.getExpiresDay());
dataCache.updateCache(Constants.CACHE_CapacityWarn,sysSettingsDto.getCapacityWarn());
log.info("更改系统设置:stopout=" + sysSettingsDto.isStopOut() + ",stopjob=" + sysSettingsDto.isStartJob()+",sluggishDay="+sysSettingsDto.getSluggishDay()
+",expiresDay="+sysSettingsDto.getExpiresDay()+",capacityWarn="+sysSettingsDto.getCapacityWarn());
return ResultBean.newOkResult("保存成功"); return ResultBean.newOkResult("保存成功");
} }
......
...@@ -18,4 +18,10 @@ public class SysSettingsDto implements Serializable { ...@@ -18,4 +18,10 @@ public class SysSettingsDto implements Serializable {
@ApiModelProperty("呆滞天数") @ApiModelProperty("呆滞天数")
private Integer sluggishDay=0; private Integer sluggishDay=0;
@ApiModelProperty("过期天数")
private Integer expiresDay=0;
@ApiModelProperty("容量预警")
private Integer capacityWarn=0;
} }
...@@ -267,12 +267,15 @@ public class DataLog extends BasePo implements Serializable { ...@@ -267,12 +267,15 @@ public class DataLog extends BasePo implements Serializable {
} }
public boolean isOutBox(){ public boolean isOutBox(){
return OP_STATUS.OUTBOX.name().equals(status); return OP_STATUS.OUT_BOX.name().equals(status);
} }
public boolean isInRobot(){ public boolean isInRobot(){
return OP_STATUS.INROBOT.name().equals(status); return OP_STATUS.INROBOT.name().equals(status);
} }
public boolean isInLine(){
return OP_STATUS.INLINE.name().equals(status);
}
public boolean isBoxdoor(){ public boolean isBoxdoor(){
return OP_STATUS.BOXDOOR.name().equals(status) || OP_STATUS.BOXDOOR_NOREEL.equals(status); return OP_STATUS.BOXDOOR.name().equals(status) || OP_STATUS.BOXDOOR_NOREEL.equals(status);
} }
......
...@@ -38,4 +38,8 @@ public class SBDHViewDto implements Serializable { ...@@ -38,4 +38,8 @@ public class SBDHViewDto implements Serializable {
@ApiModelProperty("出入库报表") @ApiModelProperty("出入库报表")
private List<ChartItem> chartItems; private List<ChartItem> chartItems;
@ApiModelProperty("容量预警")
private Integer capacityWarn=0;
} }
package com.neotel.smfcore.custom.micron1053.controller; package com.neotel.smfcore.custom.micron1053.controller;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.utils.Constants;
import com.neotel.smfcore.common.utils.DateUtil; import com.neotel.smfcore.common.utils.DateUtil;
import com.neotel.smfcore.core.device.bean.BoxStatusBean; import com.neotel.smfcore.core.device.bean.BoxStatusBean;
import com.neotel.smfcore.core.device.bean.StatusBean; import com.neotel.smfcore.core.device.bean.StatusBean;
...@@ -196,6 +197,8 @@ public class MicronStatusController { ...@@ -196,6 +197,8 @@ public class MicronStatusController {
dto.setChartItems(chartItemMap.values().stream().collect(Collectors.toList())); dto.setChartItems(chartItemMap.values().stream().collect(Collectors.toList()));
dto.setTodayCounts(todayCounts); dto.setTodayCounts(todayCounts);
Integer caWarn=dataCache.getCache(Constants.CACHE_CapacityWarn);
dto.setCapacityWarn(caWarn);
return dto; return dto;
} }
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!