Commit 57191c57 sunke

包装料出库锁定架位,双层线获取位置时增加realRfid

1 个父辈 a7812229
package com.myproject.webapp.controller.qisda.util;
import com.myproject.bean.update.qisda.OutInfo;
import com.myproject.bean.update.qisda.OutItem;
import com.myproject.dao.mongo.qisda.IOutInfoDao;
import com.myproject.dao.mongo.qisda.IOutItemDao;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* Created by sunke on 2020/3/5.
*/
@Service
public class OutInfoCache {
protected final Logger log = LogManager.getLogger(getClass());
//定时查询未完成的需求单
private static Map<String,OutInfo> outInfoMap = new ConcurrentHashMap<>();
@Autowired
private IOutInfoDao outInfoDao;
@Autowired
private IOutItemDao outItemDao;
/**
* 更新需求项
*/
public void updateOutItem(String outItemId){
OutItem outItem = outItemDao.findOneById(outItemId);
if(outItem != null){
String hSerial = outItem.gethSerial();
OutInfo outInfo = outInfoMap.get(hSerial);
if(outInfo != null){
log.info("更新需求项"+ outItem);
outInfo.updateItem(outItem);
outInfoMap.put(hSerial, outInfo);
updateStatus(outInfo.gethSerial());
}
}
}
public void addOutInfo(OutInfo outInfo){
//先把缓存清理掉,从数据库中查询
String hserial =outInfo.gethSerial();
if(!hserial.isEmpty()){
log.info("将需求单"+ outInfo +"加入到缓存");
outInfo.setOutItemMap(new HashMap<String, OutItem>());
List<OutItem> outItemList = outItemDao.findByHSerial(hserial);
for (OutItem outItem : outItemList) {
outInfo.updateItem(outItem);;
}
outInfoMap.put(hserial, outInfo);
}
}
/**
* 加载所有未完成的需求单
*/
public void loadUnEndOutInfos(){
log.info("开始加载未完成的需求单");
List<OutInfo> unEndOutInfoList = outInfoDao.findUnEndOutInfos();
for (OutInfo outInfo : unEndOutInfoList) {
addOutInfo(outInfo);
updateStatus(outInfo.gethSerial());
}
}
/**
* 获取缓存的需求单信息
*/
public Collection<OutInfo> getCachedOutInfos(){
return outInfoMap.values();
}
/**
* 更新需求单的发料状态
*/
private void updateStatus(String hSerial){
log.info("更新需求单["+hSerial+"]的发料状态");
OutInfo outInfo = outInfoMap.get(hSerial);
if(outInfo != null){
boolean sendEnd = true;
boolean hasOut = false;
//默认为绑定OK,
int bindStatus = 2;
for (OutItem outItem : outInfo.getOutItemMap().values()) {
if(outItem.isUrgentAction()){
//紧急料,设置发料数量与出库数量一致
outItem.setSendQty(outItem.getOutQty());
}
if(!outItem.isItemEnd()){
sendEnd = false;
}
if(outItem.getOutQty() > 0){
hasOut = true;
}
if(!outItem.isBindOk()){
//有绑定缺料的情况,即认为是绑定缺料
bindStatus = 1;
}
}
if(sendEnd){
outInfo.setSendStatus(2);
}else{
if(hasOut){
//有出库的,状态为发料缺料
outInfo.setSendStatus(1);
}else{
//无出过库的,状态为未发料
outInfo.setSendStatus(0);
}
}
outInfo.setBindStatus(bindStatus);
log.info("需求单状态更新:"+outInfo+" ");
outInfoMap.put(outInfo.gethSerial(),outInfo);
OutInfo dbOutInfo = outInfoDao.findOneById(outInfo.getId());
if(dbOutInfo != null){
if(dbOutInfo.getSendStatus() != outInfo.getSendStatus() || dbOutInfo.getBindStatus() != outInfo.getBindStatus()){
outInfoDao.save(dbOutInfo);
log.info("需求单["+hSerial+"]状态与数据库不一致,更新到数据库");
}
}
}
}
}
package com.myproject.webapp.controller.webService;
import com.myproject.webapp.controller.qisda.util.OutInfoCache;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* Created by sunke on 2020/3/5.
* 主定时器
*/
@Service
public class MainTimer {
protected final transient Logger log = LogManager.getLogger(getClass());
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(1);
@Autowired
private OutInfoCache outInfoCache;
@PostConstruct
public void init(){
outInfoCache.loadUnEndOutInfos();
// log.info("主定时器开启,每1s执行一次");
// //1 分钟之后执行,每秒钟执行一次
// scheduledThreadPool.scheduleAtFixedRate(new Runnable() {
// @Override
// public void run() {
// timerTask();
// }
// }, 20, 1, TimeUnit.SECONDS);
}
private void timerTask(){
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!