Commit 03d764e5 zshaohui

1.尾料柜功能优化

1 个父辈 cc0203f6
......@@ -65,8 +65,9 @@ public class ComponentManagerImpl implements IComponentManager {
@Override
public Component findByPartNumberAndProvider(String partNumber, String provider) {
if (StringUtils.isEmpty(partNumber))
if (StringUtils.isEmpty(partNumber)) {
return null;
}
else {
Component component = componentDao.findOneByCondition(new String[]{"partNumber", "provider"}, new String[]{partNumber, provider});
if (component == null) {
......
......@@ -5,11 +5,13 @@ import com.google.common.base.Strings;
import com.neotel.smfcore.common.bean.ReelLockPosInfo;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.DateUtil;
import com.neotel.smfcore.common.utils.ReelLockPosUtil;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.api.bean.CodeValidateParam;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.service.po.Component;
import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import com.neotel.smfcore.core.device.bean.NLShelfOperateBean;
import com.neotel.smfcore.core.device.bean.StatusBean;
......@@ -41,11 +43,15 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest;
import java.awt.*;
import java.util.*;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
@Api(tags = "尾料仓")
@RestController
......@@ -53,6 +59,7 @@ import java.util.concurrent.ConcurrentHashMap;
@RequestMapping("/tailingMaterialBox")
public class TailingMaterialBoxHandler extends BaseDeviceHandler {
private final String putInColor = "green";
private final String expiredColor = "red";
@Autowired
private CodeResolve codeResolve;
......@@ -66,6 +73,42 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler {
@Autowired
private TaskService taskService;
private Map<String,String> expirePosMap= new ConcurrentHashMap<>();
// 创建定时任务执行器
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
@PostConstruct
public void init() {
scheduler.scheduleAtFixedRate(() -> {
for (Storage storage : dataCache.getAllStorage().values()) {
if (storage.getType().equals(DeviceType.TAILING_MATERIAL.getName())) {
//只查询posName和barcode.expireTime的时间
Query query = new Query(Criteria.where("storageId").is(storage.getId()));
query.fields().include("posName", "barcode.subCodeList.expireDate", "barcode.subCodeList.barcode", "storageId");
List<StoragePos> storagePosList = storagePosManager.findByQuery(query);
if (storagePosList != null && !storagePosList.isEmpty()) {
for (StoragePos pos : storagePosList) {
Barcode posBarcode = pos.getBarcode();
if (posBarcode != null) {
List<Barcode> subCodeList = posBarcode.getSubCodeList();
if (subCodeList != null && !subCodeList.isEmpty()) {
for (Barcode subCode : subCodeList) {
if (subCode.isExpired()) {
log.info("加载到过期物料的库位:"+pos.getPosName()+"需要亮红灯");
expirePosMap.put(pos.getPosName(),storage.getCid());
break;
}
}
}
}
}
}
}
}
}, 1, 5, TimeUnit.MINUTES);
}
@ApiOperation("寻找柜体")
@RequestMapping("/findPosByCode")
......@@ -162,6 +205,20 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler {
Barcode barcode = codeResolve.resolveOneValideBarcode("=2x2=" + code);
barcode.setBarcode(barcode.getPartNumber()+"_"+barcode.getBatch()+"_"+System.currentTimeMillis());
barcode.setAmount(Integer.parseInt(num));
//查询过期天数,看看是不是已经过期了
if (barcode.getProduceDate() != null) {
Component component = componentManager.findByPartNumberAndProvider(barcode.getPartNumber(), barcode.getProvider());
if (component == null){
component = componentManager.findOneByPN(barcode.getPartNumber());
}
if (component != null) {
int validDay = component.getValidDay();
if (validDay > 0){
Date date = DateUtil.addDays(barcode.getProduceDate(), validDay);
barcode.setExpireDate(date);
}
}
}
//判断库位中的物料是否一样
StoragePos pos = storagePosManager.getByPosName(posName);
if (pos == null) {
......@@ -198,7 +255,7 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler {
//生成入库任务
Storage storage = dataCache.getStorageById(pos.getStorageId());
DataLog dataLog = new DataLog(storage, posBarcode, pos);
DataLog dataLog = new DataLog(storage, barcode, pos);
dataLog.setType(OP.PUT_IN);
dataLog.setNum(Integer.parseInt(num));
dataLog.setOperator(SecurityUtils.getLoginUsername());
......@@ -279,8 +336,8 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler {
if (pos == null) {
return ResultBean.newErrorResult(-1, "smfcore.valueNotExist", "{0}[{1}]不存在", new String[]{"柜体", posName});
}
Storage storage = dataCache.getStorageById(pos.getStorageId());
Barcode posBarcode = getPosBarcode(pos);
//直到出库物料位置
int outNum = 0;
int num = Integer.parseInt(numStr);
......@@ -301,7 +358,6 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler {
}
log.info("寻找到对应的料盘信息为:" + barcode.getBarcode() + ",对应的入库时间为:" + barcode.getPutInDate());
Storage storage = dataCache.getStorageById(pos.getStorageId());
DataLog dataLog = new DataLog(storage, barcode, pos);
dataLog.setType(OP.CHECKOUT);
dataLog.setNum(remainNum);
......@@ -331,9 +387,14 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler {
posBarcode.setAmount(0);
pos.setBarcode(null);
pos.setUsed(false);
//如果为空了,就把当前库位的值给清空
expirePosMap.remove(posName);
} else {
for (Barcode barcode : posBarcode.getSubCodeList()) {
amount = amount + barcode.getAmount();
if (barcode.isExpired()){
expirePosMap.put(posName,storage.getCid());
}
}
posBarcode.setAmount(amount);
pos.setBarcode(posBarcode);
......@@ -352,6 +413,12 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler {
@Override
public StatusBean handleClientRequest(StatusBean statusBean, HttpServletRequest request) {
if (expirePosMap != null && !expirePosMap.isEmpty()){
for (String key : expirePosMap.keySet()) {
log.info("添加亮灯执指令,cid为:"+expirePosMap.get(key)+",key为openLed"+",value为:"+key+"="+expiredColor);
DevicesStatusUtil.appendOp(expirePosMap.get(key), "openLed", key+"="+expiredColor);
}
}
statusBean.setClientIp(request.getRemoteHost());
handleMsg(statusBean);
statusBean = saveAlarmAndHumidity(statusBean);
......@@ -414,4 +481,9 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler {
DevicesStatusUtil.appendOp(storage.getCid(), opKey, opStr);
log.info("操作库位[" + pos.getPosName() + "]" + opKey + " : " + opStr);
}
@Override
public DeviceType getDeviceType() {
return DeviceType.TAILING_MATERIAL;
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!