Commit 03d764e5 zshaohui

1.尾料柜功能优化

1 个父辈 cc0203f6
...@@ -65,8 +65,9 @@ public class ComponentManagerImpl implements IComponentManager { ...@@ -65,8 +65,9 @@ public class ComponentManagerImpl implements IComponentManager {
@Override @Override
public Component findByPartNumberAndProvider(String partNumber, String provider) { public Component findByPartNumberAndProvider(String partNumber, String provider) {
if (StringUtils.isEmpty(partNumber)) if (StringUtils.isEmpty(partNumber)) {
return null; return null;
}
else { else {
Component component = componentDao.findOneByCondition(new String[]{"partNumber", "provider"}, new String[]{partNumber, provider}); Component component = componentDao.findOneByCondition(new String[]{"partNumber", "provider"}, new String[]{partNumber, provider});
if (component == null) { if (component == null) {
......
...@@ -5,11 +5,13 @@ import com.google.common.base.Strings; ...@@ -5,11 +5,13 @@ import com.google.common.base.Strings;
import com.neotel.smfcore.common.bean.ReelLockPosInfo; import com.neotel.smfcore.common.bean.ReelLockPosInfo;
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.DateUtil;
import com.neotel.smfcore.common.utils.ReelLockPosUtil; import com.neotel.smfcore.common.utils.ReelLockPosUtil;
import com.neotel.smfcore.common.utils.SecurityUtils; import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.common.utils.StringUtils; import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.api.bean.CodeValidateParam; 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.Barcode;
import com.neotel.smfcore.core.barcode.service.po.Component;
import com.neotel.smfcore.core.barcode.utils.CodeResolve; import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import com.neotel.smfcore.core.device.bean.NLShelfOperateBean; import com.neotel.smfcore.core.device.bean.NLShelfOperateBean;
import com.neotel.smfcore.core.device.bean.StatusBean; import com.neotel.smfcore.core.device.bean.StatusBean;
...@@ -41,11 +43,15 @@ import org.springframework.security.access.prepost.PreAuthorize; ...@@ -41,11 +43,15 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.awt.*; import java.awt.*;
import java.util.*; import java.util.*;
import java.util.List; import java.util.List;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
@Api(tags = "尾料仓") @Api(tags = "尾料仓")
@RestController @RestController
...@@ -53,6 +59,7 @@ import java.util.concurrent.ConcurrentHashMap; ...@@ -53,6 +59,7 @@ import java.util.concurrent.ConcurrentHashMap;
@RequestMapping("/tailingMaterialBox") @RequestMapping("/tailingMaterialBox")
public class TailingMaterialBoxHandler extends BaseDeviceHandler { public class TailingMaterialBoxHandler extends BaseDeviceHandler {
private final String putInColor = "green"; private final String putInColor = "green";
private final String expiredColor = "red";
@Autowired @Autowired
private CodeResolve codeResolve; private CodeResolve codeResolve;
...@@ -66,6 +73,42 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler { ...@@ -66,6 +73,42 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler {
@Autowired @Autowired
private TaskService taskService; 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("寻找柜体") @ApiOperation("寻找柜体")
@RequestMapping("/findPosByCode") @RequestMapping("/findPosByCode")
...@@ -162,6 +205,20 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler { ...@@ -162,6 +205,20 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler {
Barcode barcode = codeResolve.resolveOneValideBarcode("=2x2=" + code); Barcode barcode = codeResolve.resolveOneValideBarcode("=2x2=" + code);
barcode.setBarcode(barcode.getPartNumber()+"_"+barcode.getBatch()+"_"+System.currentTimeMillis()); barcode.setBarcode(barcode.getPartNumber()+"_"+barcode.getBatch()+"_"+System.currentTimeMillis());
barcode.setAmount(Integer.parseInt(num)); 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); StoragePos pos = storagePosManager.getByPosName(posName);
if (pos == null) { if (pos == null) {
...@@ -198,7 +255,7 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler { ...@@ -198,7 +255,7 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler {
//生成入库任务 //生成入库任务
Storage storage = dataCache.getStorageById(pos.getStorageId()); 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.setType(OP.PUT_IN);
dataLog.setNum(Integer.parseInt(num)); dataLog.setNum(Integer.parseInt(num));
dataLog.setOperator(SecurityUtils.getLoginUsername()); dataLog.setOperator(SecurityUtils.getLoginUsername());
...@@ -279,8 +336,8 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler { ...@@ -279,8 +336,8 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler {
if (pos == null) { if (pos == null) {
return ResultBean.newErrorResult(-1, "smfcore.valueNotExist", "{0}[{1}]不存在", new String[]{"柜体", posName}); return ResultBean.newErrorResult(-1, "smfcore.valueNotExist", "{0}[{1}]不存在", new String[]{"柜体", posName});
} }
Storage storage = dataCache.getStorageById(pos.getStorageId());
Barcode posBarcode = getPosBarcode(pos); Barcode posBarcode = getPosBarcode(pos);
//直到出库物料位置 //直到出库物料位置
int outNum = 0; int outNum = 0;
int num = Integer.parseInt(numStr); int num = Integer.parseInt(numStr);
...@@ -301,7 +358,6 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler { ...@@ -301,7 +358,6 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler {
} }
log.info("寻找到对应的料盘信息为:" + barcode.getBarcode() + ",对应的入库时间为:" + barcode.getPutInDate()); log.info("寻找到对应的料盘信息为:" + barcode.getBarcode() + ",对应的入库时间为:" + barcode.getPutInDate());
Storage storage = dataCache.getStorageById(pos.getStorageId());
DataLog dataLog = new DataLog(storage, barcode, pos); DataLog dataLog = new DataLog(storage, barcode, pos);
dataLog.setType(OP.CHECKOUT); dataLog.setType(OP.CHECKOUT);
dataLog.setNum(remainNum); dataLog.setNum(remainNum);
...@@ -331,9 +387,14 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler { ...@@ -331,9 +387,14 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler {
posBarcode.setAmount(0); posBarcode.setAmount(0);
pos.setBarcode(null); pos.setBarcode(null);
pos.setUsed(false); pos.setUsed(false);
//如果为空了,就把当前库位的值给清空
expirePosMap.remove(posName);
} else { } else {
for (Barcode barcode : posBarcode.getSubCodeList()) { for (Barcode barcode : posBarcode.getSubCodeList()) {
amount = amount + barcode.getAmount(); amount = amount + barcode.getAmount();
if (barcode.isExpired()){
expirePosMap.put(posName,storage.getCid());
}
} }
posBarcode.setAmount(amount); posBarcode.setAmount(amount);
pos.setBarcode(posBarcode); pos.setBarcode(posBarcode);
...@@ -352,6 +413,12 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler { ...@@ -352,6 +413,12 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler {
@Override @Override
public StatusBean handleClientRequest(StatusBean statusBean, HttpServletRequest request) { 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()); statusBean.setClientIp(request.getRemoteHost());
handleMsg(statusBean); handleMsg(statusBean);
statusBean = saveAlarmAndHumidity(statusBean); statusBean = saveAlarmAndHumidity(statusBean);
...@@ -414,4 +481,9 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler { ...@@ -414,4 +481,9 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler {
DevicesStatusUtil.appendOp(storage.getCid(), opKey, opStr); DevicesStatusUtil.appendOp(storage.getCid(), opKey, opStr);
log.info("操作库位[" + pos.getPosName() + "]" + opKey + " : " + opStr); log.info("操作库位[" + pos.getPosName() + "]" + opKey + " : " + opStr);
} }
@Override
public DeviceType getDeviceType() {
return DeviceType.TAILING_MATERIAL;
}
} }
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!