Commit 6f69995c sunke

方仓

1 个父辈 815c4faf
......@@ -9,6 +9,11 @@ import java.util.List;
public class Settings extends BaseMongoBean {
/**
* 脱机调试
*/
private boolean debugTest = false;
/**
* 指定软件是为哪个客户单独定制的
*/
private String productCustom = "";
......@@ -387,5 +392,13 @@ public class Settings extends BaseMongoBean {
public void setInactionDay(int inactionDay) {
this.inactionDay = inactionDay;
}
public boolean isDebugTest() {
return debugTest;
}
public void setDebugTest(boolean debugTest) {
this.debugTest = debugTest;
}
}
......@@ -210,6 +210,13 @@ public class Storage extends BaseMongoBean {
return StorageConstants.TYPE.CABINET.name().equals(type);
}
/**
* 是否是方仓
*/
public boolean isSmdXl() {
return StorageConstants.TYPE.SMD_XL.name().equals(type);
}
public boolean canPutInPos(int w, int h, int PosW, int posH){
......
......@@ -291,7 +291,13 @@ public class StorageConstants {
/**
* 11 垂直货柜
*/
VERTICALBOX("storage.type.verticalBox")
VERTICALBOX("storage.type.smdVl"),
/**
* 12 SMD-XL(方仓)
*/
SMD_XL("storage.type.smdXl")
;
......
package com.myproject.webapp.controller.storage;
import com.myproject.bean.CodeBean;
import com.myproject.bean.json.VerticalBoxOperateBean;
import com.myproject.bean.update.*;
import com.myproject.dao.mongo.IDataLogDao;
import com.myproject.exception.ValidateException;
import com.myproject.manager.IBarcodeManager;
import com.myproject.manager.IComponentManager;
import com.myproject.manager.IStoragePosManager;
import com.myproject.util.StorageConstants;
import com.myproject.webapp.controller.webService.DataCache;
import com.myproject.webapp.controller.webService.ITaskService;
import com.myproject.webapp.controller.webService.boxHandler.SmdXlBoxHandler;
import com.myproject.webapp.controller.webService.boxHandler.VerticalBoxHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
/**
* SMD-XL
*/
@Controller
public class SmdXLController extends BaseController{
@Autowired
private DataCache dataCache;
@Autowired
private ITaskService taskService;
@Autowired
private IStoragePosManager storagePosManager;
@Autowired
private IBarcodeManager barcodeManager;
@Autowired
private IComponentManager componentManager;
@Autowired
private IDataLogDao dataLogDao;
@Autowired
private SmdXlBoxHandler smdXlBoxHandler;
@RequestMapping("/storage/xl/{cid}")
public String solderView(@PathVariable String cid, HttpServletRequest request){
request.getSession().setAttribute("show",cid);
Storage storage = dataCache.getStorage(cid);
request.setAttribute("storage",storage);
request.setAttribute("minTemperature",dataCache.getSettings().getMinTemperature());
request.setAttribute("minTemperatureShow",dataCache.getSettings().getMinTemperatureShow());
request.setAttribute("maxTemperature",dataCache.getSettings().getMaxTemperature());
request.setAttribute("maxTemperatureShow",dataCache.getSettings().getMaxTemperatureShow());
request.setAttribute("minHumidity",dataCache.getSettings().getMinHumidity());
request.setAttribute("minHumidityShow",dataCache.getSettings().getMinHumidityShow());
request.setAttribute("maxHumidity",dataCache.getSettings().getMaxHumidity());
request.setAttribute("maxHumidityShow",dataCache.getSettings().getMaxHumidityShow());
List<StoragePos> enabledPosList = storagePosManager.findEnablePosList(storage.getId());
List<StoragePos> storagePosList = new ArrayList<>();
for (StoragePos storagePos : enabledPosList) {
if(!storagePos.isExpandPos()){
storagePosList.add(storagePos);
}
}
request.setAttribute("storagePosList",storagePosList);
return "storage/smdXl";
}
/**
*
*/
@RequestMapping("/service/store/xl/storagePosList")
@ResponseBody
public List<StoragePos> checkAll(HttpServletRequest request){
String cid = request.getParameter("cid");
Storage storage = dataCache.getStorage(cid);
List<StoragePos> notEmptyPosList = storagePosManager.findNotEmptyByStorageId(storage.getId());
return notEmptyPosList;
}
/**
*
* @param request
* @return
*/
@RequestMapping("/service/store/xl/putInToPos")
@ResponseBody
public String putInToPos(HttpServletRequest request){
String cid = request.getParameter("cid");
String posName = request.getParameter("posName");
Storage storage = dataCache.getStorage(cid);
StoragePos storagePos = storagePosManager.findByStorage(storage.getId(), posName);
if(storagePos != null){
if(storagePos.isExpandPos()){
storagePos = storagePosManager.get(storagePos.getHostPosId());
}
DataLog putInTask = new DataLog();
putInTask.setStatus(StorageConstants.OP_STATUS.NONE.name());
putInTask.setType(StorageConstants.OP.PUT_IN);
putInTask.setCid(storage.getCid());
putInTask.setStorageId(storage.getId());
putInTask.setStorageName(storage.getName());
String doorInfo = request.getParameter("door");
putInTask.setSubSourceId(doorInfo);
putInTask.setPosId(storagePos.getId());
putInTask.setPosName(storagePos.getPosName());
putInTask.setSingleOut(true);
putInTask = dataLogDao.save(putInTask);
taskService.addTaskToExecute(putInTask);
smdXlBoxHandler.updateCurrentTask(cid, putInTask);
log.info(doorInfo + "号门准备扫码入库到["+posName+"]");
return "";
}
return "未找到对应的料箱条码["+posName+"]";
}
@RequestMapping("/service/store/xl/closeOperateWindow")
@ResponseBody
public void closeOperateWindow(HttpServletRequest request){
String cid = request.getParameter("cid");
DataLog currentTask = smdXlBoxHandler.getCurrentTask(cid);
if(currentTask != null){
if(currentTask.isExecuting() || currentTask.getStatus().equals(StorageConstants.OP_STATUS.NONE.name())){
log.info("关闭["+cid+"]的出入库["+currentTask.getPosName()+"]窗口并取消任务");
currentTask.setStatus(StorageConstants.OP_STATUS.CANCEL.name());
dataLogDao.save(currentTask);
taskService.moveTaskToFinished(currentTask);
}
smdXlBoxHandler.updateCurrentTask(cid, null);
//StorageDataController.addOp(cid,"closeDoor", doorInfo);
}
}
@RequestMapping("/service/store/xl/exePutIn")
@ResponseBody
public String exePutIn(HttpServletRequest request){
String cid = request.getParameter("cid");
String doorInfo = request.getParameter("door");
DataLog currentTask = smdXlBoxHandler.getCurrentTask(cid);
if(currentTask != null){
DataLog putInTask = currentTask;
log.info(currentTask.getPosName()+"开始回库");
if(currentTask.isPutInTask()){
}else{
StoragePos pos = storagePosManager.findOneById(putInTask.getPosId());
if(pos.isExpandPos()){
pos = storagePosManager.findOneById(pos.getHostPosId());
}
if(pos != null){
putInTask = new DataLog();
putInTask.setType(StorageConstants.OP.PUT_IN);
putInTask.setCid(currentTask.getCid());
putInTask.setStorageId(currentTask.getStorageId());
putInTask.setStorageName(currentTask.getStorageName());
putInTask.setSubSourceId("1");
putInTask.setPosId(currentTask.getPosId());
putInTask.setPosName(currentTask.getPosName());
putInTask = dataLogDao.save(putInTask);
}
}
smdXlBoxHandler.updateCurrentTask(cid, null);
putInTask.setSingleOut(true);
putInTask.setStatus(StorageConstants.OP_STATUS.WAIT.name());
taskService.updateQueueTask(putInTask);
}
return "";
}
@RequestMapping("/service/store/xl/exeOut")
@ResponseBody
public String exeOut(HttpServletRequest request){
String cid = request.getParameter("cid");
Storage storage = dataCache.getStorage(cid);
String pid = request.getParameter("pid");
StoragePos pos = storagePosManager.get(pid);
if(pos != null){
Collection<String> excludePosIds = taskService.excludePosIds();
if(!excludePosIds.contains(pos.getHostPosId())){
StoragePos hostPos = storagePosManager.get(pos.getHostPosId());
if(hostPos != null){
DataLog hostOutTask = new DataLog();
hostOutTask.setType(StorageConstants.OP.CHECKOUT);
hostOutTask.setStatus(StorageConstants.OP_STATUS.WAIT.name());
hostOutTask.setCid(cid);
hostOutTask.setStorageId(storage.getId());
hostOutTask.setStorageName(storage.getName());
hostOutTask.setPosId(hostPos.getId());
hostOutTask.setPosName(hostPos.getPosName());
hostOutTask = dataLogDao.save(hostOutTask);
taskService.addTaskToExecute(hostOutTask);
log.info("出库["+pos.getPosName()+"]时主库位["+hostPos.getPosName()+"]无出库任务,新建出库任务");
}
}
if(!excludePosIds.contains(pos.getId())){
DataLog posOutTask = new DataLog();
posOutTask.setType(StorageConstants.OP.CHECKOUT);
posOutTask.setStatus(StorageConstants.OP_STATUS.WAIT.name());
posOutTask.setCid(cid);
Barcode barcode = pos.getBarcode();
posOutTask.setPartNumber(barcode.getPartNumber());
posOutTask.setBarcode(barcode.getBarcode());
posOutTask.setNum(barcode.getAmount());
posOutTask.setStorageId(storage.getId());
posOutTask.setStorageName(storage.getName());
posOutTask.setPosId(pos.getId());
posOutTask.setPosName(pos.getPosName());
posOutTask = dataLogDao.save(posOutTask);
taskService.addTaskToExecute(posOutTask);
}
return "0" + super.getText("checkout.sucess",request.getLocale());
}
return "";
}
/**
* 对库位进行出库或入库操作
* @param request
* @return
*/
@RequestMapping(value = "/service/store/xl/operatePos")
@ResponseBody
public String operatePos(HttpServletRequest request) {
try{
String codeStr = request.getParameter("code");
String posName = request.getParameter("pos");
String cid = request.getParameter("cid");
DataLog currentTask = smdXlBoxHandler.getCurrentTask(cid);
StoragePos hostPos = storagePosManager.getByPosName(posName);
if(hostPos != null && hostPos.isExpandPos()){
hostPos = storagePosManager.get(hostPos.getHostPosId());
}
if(hostPos == null || currentTask == null || !currentTask.getPosName().equals(posName)){
return "未找到对应的库位";
}
//用+或-分割,如果最后几位是数量,按手动输入处理
String[] codeArray = codeStr.split("-");
String pnStr = "";
int opQty = 0;
int opType = StorageConstants.OP.NON_OP;
if(codeArray.length == 2){
try{
opQty = Integer.valueOf(codeArray[1]);
pnStr = codeArray[0];
opType = StorageConstants.OP.CHECKOUT;
}catch (Exception e){
}
}
if(opType == StorageConstants.OP.NON_OP){
codeArray = codeStr.split("\\+");
if(codeArray.length == 2){
try{
opQty = Integer.valueOf(codeArray[1]);
pnStr = codeArray[0];
opType = StorageConstants.OP.PUT_IN;
}catch (Exception e){
}
}
}
if(opType != StorageConstants.OP.NON_OP){
//手动输入,按PN来处理
//先查找是否有相同的PN,没有创建一个
Component component = componentManager.findByPartNumber(pnStr);
if(component == null){
component = new Component();
component.setHeight(1);
component.setPartNumber(pnStr);
component.setPlateSize(1);
component.setType(StorageConstants.COMPONENT_TYPE.OTHERS);
component.setAmount(opQty);
component = componentManager.save(component);
}
//查看该库位中是否有相同的物料,有的话,数量累加
StoragePos existPnPos = storagePosManager.getByHostPosId(hostPos.getId(), component.getPartNumber());
if(opType == StorageConstants.OP.PUT_IN) {
//入库
if (existPnPos != null) {
Barcode existBarcode = existPnPos.getBarcode();
int oldAmount = existBarcode.getAmount();
existBarcode.setAmount(oldAmount + opQty);
existBarcode = barcodeManager.save(existBarcode);
existPnPos.setBarcode(existBarcode);
storagePosManager.save(existPnPos);
finishTask(existPnPos, opType, currentTask, existBarcode, opQty);
log.info(existBarcode.getPartNumber() + "入库到库位[" + existPnPos.getPosName() + "],物料数量:" + oldAmount + " + " + opQty + " = " + existBarcode.getAmount());
} else {
//条码设置为P+PosId+C+ComponentId
String barcodeStr = "P" + hostPos.getId() + "C" + component.getId();
Barcode barcode = barcodeManager.findByBarcode(barcodeStr);
if (barcode == null) {
//不存在,需要创建条码和库位
barcode = new Barcode();
barcode.setBarcode(barcodeStr);
barcode.setPlateSize(1);
barcode.setHeight(1);
barcode.setPartNumber(pnStr);
}
barcode.setAmount(opQty);
barcode.setUsedDate(new Date());
barcode.setPutInTime(System.currentTimeMillis());
barcode.setCheckOutDate(null, "");
barcode = barcodeManager.save(barcode);
StoragePos posToPut = getOrCreateNewPos(hostPos, barcode.getId());
posToPut.setUsed(true);
posToPut.setBarcode(barcode);
storagePosManager.save(posToPut);
finishTask(posToPut, opType, currentTask, barcode, opQty);
log.info(barcode.getPartNumber() + "入库到库位[" + posToPut.getPosName() + "],物料数量:" + barcode.getAmount());
}
}else {
//出库
if(existPnPos != null){
Barcode existBarcode = existPnPos.getBarcode();
int oldAmount = existBarcode.getAmount();
if(oldAmount < opQty){
return "物料数量不足";
}
int newAmount = oldAmount - opQty;
existBarcode.setAmount(newAmount);
existBarcode = barcodeManager.save(existBarcode);
if(newAmount == 0){
//全部出库,禁用库位
existPnPos.setBarcode(null);
existPnPos.setEnabled(false);
}else{
existPnPos.setBarcode(existBarcode);
}
storagePosManager.save(existPnPos);
finishTask(existPnPos, opType, currentTask,existBarcode, opQty);
log.info(existBarcode.getPartNumber() + "从库位["+existPnPos.getPosName()+"]库位出库,物料数量:" + oldAmount + " - " + opQty + " = " + newAmount);
}else{
//无库存
return "该库位中未找到对应的物料";
}
}
}else{
String newCodeStr = "=1x1=" + codeStr;
CodeBean codeBean = dataCache.resolveSingleCode(newCodeStr);
if(codeBean.isValid()){
Barcode barcode = codeBean.getBarcode();
StoragePos pos = storagePosManager.getByBarcode(barcode.getBarcode());
if(pos == null){
//不存在,入库
opQty = StorageConstants.OP.PUT_IN;
StoragePos posToPut = getOrCreateNewPos(hostPos, barcode.getId());
posToPut.setUsed(true);
posToPut.setBarcode(barcode);
storagePosManager.save(posToPut);
finishTask(posToPut,opQty, currentTask, barcode, barcode.getAmount());
log.info("条码"+ barcode.getBarcode()+"["+barcode.getPartNumber() + "]入库到库位["+posToPut.getPosName()+"]数量:" + barcode.getAmount());
}else{
//出库
Barcode posBarcode = pos.getBarcode();
pos.setBarcode(null);
pos.setEnabled(false);
storagePosManager.save(pos);
opQty = StorageConstants.OP.CHECKOUT;
finishTask(pos, opQty, currentTask, posBarcode, posBarcode.getAmount());
log.info("条码"+ barcode.getBarcode()+"["+barcode.getPartNumber() + "]从库位["+pos.getPosName()+"]出库,数量:" + barcode.getAmount());
}
}else{
String msg = getText(codeBean.getErrorCode(),codeBean.getParams(),request.getLocale(),codeBean.getError());
return msg;
}
}
}catch (Exception e){
return "出入库操作出错:" + e.getMessage();
}
return "OK操作成功";
}
@RequestMapping(value = "/service/store/xl/currentTask")
@ResponseBody
public VerticalBoxOperateBean currentTask(HttpServletRequest request) {
String cid = request.getParameter("cid");
DataLog currentTask = smdXlBoxHandler.getCurrentTask(cid);
if(dataCache.getSettings().isDebugTest()){
if(currentTask == null){
//测试使用
Collection<DataLog> queueTasks = taskService.getQueueTasks(cid);
for (DataLog queueTask : queueTasks) {
StoragePos pos = storagePosManager.get(queueTask.getPosId());
if(pos.isExpandPos()){
continue;
}
if(!queueTask.isSingleOut()){
queueTask.setSingleOut(true);
queueTask.setStatus(StorageConstants.OP_STATUS.FINISHED.name());
queueTask = dataLogDao.save(queueTask);
taskService.moveTaskToFinished(queueTask);
smdXlBoxHandler.updateCurrentTask(queueTask.getCid(), queueTask);
break;
}
}
currentTask = smdXlBoxHandler.getCurrentTask(cid);
}
}
if(currentTask != null){
VerticalBoxOperateBean operateBean = new VerticalBoxOperateBean();
operateBean.setCurrentTask(currentTask);
Collection<DataLog> queueTasks = taskService.getQueueTasks(cid);
List<String> outTaskIdList = new ArrayList<>();
for (DataLog queueTask : queueTasks) {
if(queueTask.isCheckOutTask() && queueTask.isWait()){
outTaskIdList.add(queueTask.getPosId());
}
}
StoragePos hostPos = storagePosManager.get(currentTask.getPosId());
List<StoragePos> extendPosList = storagePosManager.getExtendPosList(hostPos.getId());
for (StoragePos storagePos : extendPosList) {
if(outTaskIdList.contains(storagePos.getId())){
storagePos.setUsed(false);
}
}
operateBean.setExtendPosList(extendPosList);
return operateBean;
}
return null;
}
/**
* 完成出入库任务
* @param operatePos 库位
* @param currentTask 当前任务
* @param barcode 条码
* @param opQty 数量
* @throws ValidateException
*/
private void finishTask(StoragePos operatePos, int opType, DataLog currentTask, Barcode barcode, int opQty) throws ValidateException {
DataLog task = null;
//先查看是否有相同类型且库位相同的任务
Collection<DataLog> queueTasks = taskService.getQueueTasks();
for (DataLog queueTask : queueTasks) {
if(queueTask.getType() == currentTask.getType()){
if(queueTask.getPosName().equals(operatePos.getPosName())){
task = queueTask;
break;
}
}
}
if(task == null){
task = new DataLog();
}
task.setStatus(StorageConstants.OP_STATUS.FINISHED.name());
task.setPartNumber(barcode.getPartNumber());
task.setBarcode(barcode.getBarcode());
task.setNum(opQty);
task.setType(opType);
if(task.isCheckOutTask()){
opQty = - opQty;
}
Storage storage = dataCache.getStorage(currentTask.getCid());
task.setCid(storage.getCid());
task.setStorageId(storage.getId());
task.setStorageName(storage.getName());
task.setPosId(operatePos.getId());
task.setPosName(operatePos.getPosName());
task = dataLogDao.save(task);
taskService.moveTaskToFinished(task);
dataCache.updateInventoryAmount(currentTask.getCid(),barcode.getPartNumber(),opQty);
dataCache.reloadStorage(storage);
}
private StoragePos getOrCreateNewPos(StoragePos hostPos, String barcodeId){
String newPosName = hostPos.getPosName()+":"+ barcodeId;
StoragePos newPos = storagePosManager.getByPosName(newPosName);
if(newPos == null){
newPos = new StoragePos();
newPos.setPosName(newPosName);
newPos.setW(hostPos.getW());
newPos.setH(hostPos.getH());
newPos.setHostPosId(hostPos.getId());
newPos.setPriority(hostPos.getPriority());
newPos.setStorageId(hostPos.getStorageId());
log.info("创建新库位["+newPosName+"]");
}
newPos.setEnabled(true);
return newPos;
}
}
......@@ -28,7 +28,7 @@ import java.util.*;
/**
* 锡膏料仓
* 垂直货柜
*/
@Controller
public class VerticalBoxController extends BaseController{
......@@ -207,6 +207,7 @@ public class VerticalBoxController extends BaseController{
StoragePos posToPut = getOrCreateNewPos(hostPos, barcode.getId());
posToPut.setBarcode(barcode);
posToPut.setUsed(true);
storagePosManager.save(posToPut);
finishTask(posToPut,currentTask,barcode, opQty);
......@@ -248,6 +249,7 @@ public class VerticalBoxController extends BaseController{
if(currentTask.isPutInTask()){
StoragePos posToPut = getOrCreateNewPos(hostPos, barcode.getId());
posToPut.setUsed(true);
posToPut.setBarcode(barcode);
storagePosManager.save(posToPut);
finishTask(posToPut,currentTask, barcode, barcode.getAmount());
......@@ -289,17 +291,22 @@ public class VerticalBoxController extends BaseController{
public VerticalBoxOperateBean currentTask(HttpServletRequest request) {
String cid = request.getParameter("cid");
DataLog currentTask = verticalBoxHandler.getCurrentTask(cid);
if(currentTask == null){
//测试使用
Collection<DataLog> queueTasks = taskService.getQueueTasks(cid);
for (DataLog queueTask : queueTasks) {
queueTask.setStatus(StorageConstants.OP_STATUS.EXECUTING.name());
taskService.updateQueueTask(queueTask);
verticalBoxHandler.updateCurrentTask(queueTask.getCid(), queueTask);
break;
if(dataCache.getSettings().isDebugTest()){
if(currentTask == null){
//测试使用
Collection<DataLog> queueTasks = taskService.getQueueTasks(cid);
for (DataLog queueTask : queueTasks) {
if(queueTask.isWait()){
queueTask.setStatus(StorageConstants.OP_STATUS.EXECUTING.name());
taskService.updateQueueTask(queueTask);
verticalBoxHandler.updateCurrentTask(queueTask.getCid(), queueTask);
break;
}
}
currentTask = verticalBoxHandler.getCurrentTask(cid);
}
currentTask = verticalBoxHandler.getCurrentTask(cid);
}
if(currentTask != null){
VerticalBoxOperateBean operateBean = new VerticalBoxOperateBean();
operateBean.setCurrentTask(currentTask);
......
......@@ -41,6 +41,13 @@ public class SettingsController extends BaseUpdateController {
settings.setProductCustom(product);
settings = dataCache.updateSettings(settings);
}
String debugStr = request.getParameter("debug");
if(!Strings.isNullOrEmpty(debugStr)){
boolean debugTest = Boolean.valueOf(debugStr);
settings.setDebugTest(debugTest);
settings = dataCache.updateSettings(settings);
}
model.addAttribute("settings", settings);
return new ModelAndView(updateView(), model.asMap());
}
......
......@@ -270,7 +270,7 @@ public class StorageDataController extends BaseController {
@RequestMapping(value = "/checkout.html")
@ResponseBody
public String checkPos(HttpServletRequest request) {
public String checkout(HttpServletRequest request) {
String cid = request.getParameter("cid");
String partnumber = request.getParameter("pn");
......@@ -537,6 +537,9 @@ public class StorageDataController extends BaseController {
* @param opValue
*/
public static void addOp(String cid, String opKey, String opValue){
if(opValue == null){
return;
}
Map<String, String> opMap = storageOpMap.get(cid);
if(opMap == null){
opMap = new ConcurrentHashMap<>();
......
......@@ -17,6 +17,7 @@ import com.myproject.manager.IHumitureManager;
import com.myproject.manager.IStoragePosManager;
import com.myproject.model.User;
import com.myproject.service.UserManager;
import com.myproject.webapp.controller.webService.boxHandler.SmdXlBoxHandler;
import com.myproject.webapp.controller.webService.boxHandler.VerticalBoxHandler;
import com.myproject.util.HttpHelper;
import com.myproject.util.StorageConstants;
......@@ -110,6 +111,9 @@ public class TaskService implements ITaskService {
@Autowired
private VerticalBoxHandler verticalBoxHandler;
@Autowired
private SmdXlBoxHandler smdXlBoxHandler;
/**
* 更新客户端发上来的消息(设备故障等消息)
*/
......@@ -690,7 +694,8 @@ public class TaskService implements ITaskService {
String posName = task.getPosName();
int index = posName.indexOf("#");
if(index>0){
String boxId = posName.substring(0,index);
//String boxId = posName.substring(0,index);
String boxId = "1";
excuteBoxIds.add(Integer.valueOf(boxId));
}
}
......@@ -970,28 +975,31 @@ public class TaskService implements ITaskService {
synchronized (storage){
//log.info("reqseq:"+statusBean.getSeq());
StatusBean resultStatus = saveStatus(statusBean);
statusBean = saveStatus(statusBean);
if(storage.isVerticalBox()){
//垂直货柜
return verticalBoxHandler.handleClientStatusBean(statusBean);
}
statusBean = handleClientStatusBean(statusBean);
if(storage.isSmdXl()){
statusBean = smdXlBoxHandler.handleClientStatusBean(statusBean);
}
statusBean = handleClientStatusBean(statusBean);
if(statusBean.getOp() == StorageConstants.OP.ALARM_DATA){
log.info("获取温湿度报警值");
statusBean.setTemperature(dataCache.getSettings().getMaxTemperature());
statusBean.setHumidity(dataCache.getSettings().getMaxHumidity());
resultStatus = statusBean;
return resultStatus;
//resultStatus = statusBean;
return statusBean;
}else if(dataCache.needUpdateHumidiy(cid)){
log.info("发送温湿度报警值");
statusBean.setTemperature(dataCache.getSettings().getMaxTemperature());
statusBean.setHumidity(dataCache.getSettings().getMaxHumidity());
resultStatus = statusBean;
return resultStatus;
//resultStatus = statusBean;
return statusBean;
}
if(storage.isCabinet() || storage.isShelf() || storage.isAccShelf() || storage.isCodeShelf()){
......@@ -1006,15 +1014,18 @@ public class TaskService implements ITaskService {
}
}
if(statusBean.getOp() == StorageConstants.OP.PUT_IN){
log.debug("入库:"+mapper.writeValueAsString(statusBean));
resultStatus = putInLine(storage, statusBean);
}else {
//查看是否有要出库的操作
resultStatus = checkOut(storage, resultStatus);
if(!storage.isSmdXl()){
if(statusBean.getOp() == StorageConstants.OP.PUT_IN){
log.debug("入库:"+mapper.writeValueAsString(statusBean));
statusBean = putInLine(storage, statusBean);
}else {
//查看是否有要出库的操作
statusBean = checkOut(storage, statusBean);
}
}
//log.info(mapper.writeValueAsString(resultStatus));
return resultStatus;
return statusBean;
}
} catch (Exception e) {
log.error("", e);
......@@ -1702,28 +1713,31 @@ public class TaskService implements ITaskService {
StoragePos storagePos = storagePosManager.get(task.getPosId());
//二维码状态
Barcode barcode = barcodeManager.findByBarcode(task.getBarcode());
barcode.setUsedCount(barcode.getUsedCount() + 1);
//barcode.setUsedDate(new Date());
barcode.setPutInTime(System.currentTimeMillis());
barcode.setInOpor(task.getOperator());
barcode.setCheckOutDate(null,"");
barcode.setPosName(task.getPosName());
if(barcode.isSolder()){
if(storagePos.isWarmPos()){
//回温仓位
barcode.setSolderStatus(StorageConstants.SOLDER_STATUS.RETREAT_STORAGE);
}else{
barcode.setSolderStatus(StorageConstants.SOLDER_STATUS.UNDER_REFRIGERATION);
if(barcode != null){
barcode.setUsedCount(barcode.getUsedCount() + 1);
//barcode.setUsedDate(new Date());
barcode.setPutInTime(System.currentTimeMillis());
barcode.setInOpor(task.getOperator());
barcode.setCheckOutDate(null,"");
barcode.setPosName(task.getPosName());
if(barcode.isSolder()){
if(storagePos.isWarmPos()){
//回温仓位
barcode.setSolderStatus(StorageConstants.SOLDER_STATUS.RETREAT_STORAGE);
}else{
barcode.setSolderStatus(StorageConstants.SOLDER_STATUS.UNDER_REFRIGERATION);
}
barcode.setNeedOutDate(null);
}
barcode.setNeedOutDate(null);
}
// if(Strings.isNullOrEmpty(barcode.getProviderNumber())){//补上供应商编号
// Component component = componentManager.findByPartNumber(barcode.getPartNumber());
// if(component != null){
// barcode.setProviderNumber(component.getProviderNumber());
// }
// }
barcodeManager.save(barcode);
barcodeManager.save(barcode);
}
/**
......@@ -1734,20 +1748,23 @@ public class TaskService implements ITaskService {
storagePos.setCanCheckOutTime(System.currentTimeMillis());
storagePosManager.save(storagePos);
//更新缓存中的库存信息
dataCache.updateInventory(storagePos,barcode);
if(barcode != null){
dataCache.updateInventory(storagePos,barcode);
//dataCache.updateStorage(task.getCid());
//dataCache.updateStorage(task.getCid());
Storage storage = dataCache.getStorage(task.getCid());
if(storage != null){
postInNotification(dataCache.getSettings().getInNotifyApi(), task.getBarcode(), task.getStorageId());
}
Storage storage = dataCache.getStorage(task.getCid());
if(storage != null){
postInNotification(dataCache.getSettings().getInNotifyApi(), task.getBarcode(), task.getStorageId());
}
//记录日志,完成 task
task.setBatchInfo(barcode.getBatch());
task.setNum(barcode.getAmount());
//记录日志,完成 task
task.setBatchInfo(barcode.getBatch());
task.setNum(barcode.getAmount());
}
//更新缓存中的库存信息
task.setStatus(StorageConstants.OP_STATUS.FINISHED.name());
dataLogDao.save(task);
......
package com.myproject.webapp.controller.webService.boxHandler;
import com.google.common.base.Strings;
import com.myproject.bean.update.DataLog;
import com.myproject.bean.update.StoragePos;
import com.myproject.bean.utils.BoxStatusBean;
import com.myproject.bean.utils.StatusBean;
import com.myproject.dao.mongo.IDataLogDao;
import com.myproject.manager.IStoragePosManager;
import com.myproject.util.StorageConstants;
import com.myproject.webapp.controller.webService.TaskService;
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.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* 垂直货柜处理类
*/
@Service
public class SmdXlBoxHandler {
protected final transient Logger log = LogManager.getLogger(getClass());
@Autowired
protected TaskService taskService;
@Autowired
private IStoragePosManager storagePosManager;
@Autowired
private IDataLogDao dataLogDao;
/**
* 当前出入库操作的库位(key为cid, value为当前执行的任务)
*/
private Map<String,DataLog> operateTaskMap = new ConcurrentHashMap<>();
/**
* 获取当前正在执行的任务
*/
public DataLog getCurrentTask(String cid){
return operateTaskMap.get(cid);
}
/**
* 更新或清理(task为null)当前正在执行的任务
*/
public void updateCurrentTask(String cid, DataLog task){
if(task == null){
operateTaskMap.remove(cid);
}else{
operateTaskMap.put(cid, task);
}
}
public StatusBean handleClientStatusBean(StatusBean statusBean){
String cid = statusBean.getCid();
Collection<DataLog> queueTasks = taskService.getQueueTasks(cid);
Map<Integer, BoxStatusBean> statusOfBoxes = statusBean.getBoxStatus();
if (statusOfBoxes != null) {
for (BoxStatusBean boxStatus : statusOfBoxes.values()) {
try {
//出库入库动作完成处理
int status = boxStatus.getStatus();
String posName = boxStatus.getPosId();
if(!Strings.isNullOrEmpty(posName)){//客户端发一次完成之后,会发空的 posName,不需要处理
if (StorageConstants.BOX_STATUS.OUT_FINISHED == status) {//出仓完成,设置当前任务
DataLog currentTask = null;
for (DataLog queueTask : queueTasks) {
if(queueTask.isExecuting() && queueTask.getPosName().equals(posName)){
currentTask = queueTask;
String doorInfo = statusBean.getFromData("door");
if(doorInfo == null){
doorInfo = "1";
}
currentTask.setSubSourceId(doorInfo);
taskService.updateQueueTask(currentTask);
break;
}
}
DataLog cacheTask = operateTaskMap.get(cid);
if(currentTask != null){
if(cacheTask == null || !cacheTask.getId().equals(currentTask.getId())){
updateCurrentTask(currentTask.getCid(),currentTask);
}
}
}
}
} catch (Exception e) {
log.error("方仓到位时出错",e);
}
}
}
if(statusBean.getStatus() == StorageConstants.STATUS.READY){
DataLog currentTask = getCurrentTask(cid);
if(currentTask != null){
//当前有任务未完成,暂不执行其他任务
return statusBean;
}
for (DataLog task : queueTasks) {
if (cid.equals(task.getCid()) && task.isWait()) {
StoragePos pos = storagePosManager.getByPosName(task.getPosName());
if(pos.isExpandPos()){
continue;
}
if(task.isPutInTask()){
statusBean.setOp(StorageConstants.OP.PUT_IN);
statusBean.addData("door",task.getSubSourceId());
}else if(task.isCheckOutTask()){
statusBean.setOp(StorageConstants.OP.CHECKOUT);
}
statusBean.addPosInfo("",pos.getPosName(),pos.getW(),pos.getH(),false);
log.info("发送["+task.getType()+"]任务["+pos.getPosName()+"]到客户端door="+task.getSubSourceId());
task.setStatus(StorageConstants.OP_STATUS.EXECUTING.name());
taskService.updateQueueTask(task);
dataLogDao.save(task);
return statusBean;
}
}
}
return statusBean;
}
}
......@@ -148,6 +148,9 @@ storage.type.online=Inline System
storage.type.batch=Batch
storage.type.shelf=Shelf
storage.type.cabinet=Cabinet
storage.type.solderPaste=SMD-SP
storage.type.smdVl=SMD-VL
storage.type.smdXl=SMD-XL
storage.compatibility=Compatibility
storage.enable=Enable
storage.enable.yes=Yes
......
......@@ -433,3 +433,6 @@ order.close.notExist=The order of [{0}] is not found.
order.close=Close
order.out.failed=Can not execute task
order.out.notFound=The order info was not found
storage.type.smdXl=SMD-XL
storage.type.smdVl=SMD-VL
storage.type.solderPaste=SMD-SP
......@@ -429,4 +429,7 @@ order.close.empty=\u5DE5\u5355\u53F7\u4E0D\u80FD\u4E3A\u7A7A
order.close.notExist=\u672A\u627E\u5230\u5DE5\u5355[{0}]
order.close=\u5173\u95ED
order.out.failed=\u65E0\u6CD5\u6267\u884C\u5DE5\u5355\u8865\u6599\u4EFB\u52A1
order.out.notFound=\u672A\u627E\u5230\u5DE5\u5355\u4FE1\u606F
\ No newline at end of file
order.out.notFound=\u672A\u627E\u5230\u5DE5\u5355\u4FE1\u606F
storage.type.smdXl=SMD-XL
storage.type.smdVl=SMD-VL
storage.type.solderPaste=SMD-SP
\ No newline at end of file
......@@ -429,4 +429,7 @@ order.close.empty=\u5DE5\u5355\u53F7\u4E0D\u80FD\u4E3A\u7A7A
order.close.notExist=\u672A\u627E\u5230\u5DE5\u5355[{0}]
order.close=\u5173\u95ED
order.out.failed=\u65E0\u6CD5\u6267\u884C\u5DE5\u5355\u8865\u6599\u4EFB\u52A1
order.out.notFound=\u672A\u627E\u5230\u5DE5\u5355\u4FE1\u606F
\ No newline at end of file
order.out.notFound=\u672A\u627E\u5230\u5DE5\u5355\u4FE1\u606F
storage.type.smdXl=SMD-XL
storage.type.smdVl=SMD-VL
storage.type.solderPaste=SMD-SP
\ No newline at end of file
......@@ -175,7 +175,7 @@
${pos.barcode.partNumber}
</display:column>
<display:column property="barcode.provider" titleKey="barcode.provider"/>
<display:column property="barcode.provider" titleKey="barcode.provider" sortProperty="barcode.provider" sortable="true"/>
<%--<display:column titleKey="inOutList.type">--%>
<%--<c:if test="${pos.barcode.type == 0 || empty pos.barcode.type}"><fmt:message key="inOutList.type.component"/></c:if>--%>
......
......@@ -190,6 +190,10 @@
<c:set var="detailUrl" value="${ctx}/storage/vertical/${storage.cid}"/>
</c:if>
<c:if test="${storage.smdXl}">
<c:set var="detailUrl" value="${ctx}/storage/xl/${storage.cid}"/>
</c:if>
<div class="portlet box green-haze tasks-widget">
<c:choose>
<c:when test="${storage.shelf || storage.cabinet || storage.accShelf || storage.virtual || storage.codeShelf}">
......@@ -725,7 +729,7 @@
options['onClose']=cancelTask;
operate = '<a class="btn btn-xs default" href="#" onclick=cancelTask('+data[item].id+');><i class="fa fa-trash-o"></i> ${cancelTask_label} </a>';
}else{
options['onClose']=hideTask;
//options['onClose']=hideTask;
}
var sourceStr = "";
......
<%@ page import="com.myproject.util.StorageConstants" %>
<%@ include file="/common/taglibs.jsp" %>
<%@ page language="java" pageEncoding="UTF-8" %>
<style type="text/css">
.box{
margin-top: 10px;
}
.alert{
padding:8px;
}
.sm-btn-box{
margin-left:10px;
}
.redBorder{
border: 3px solid #FF0000 !important;
}
.partnumber-box{
height: 100px;text-align: center;
padding-top:35px;
margin-bottom:10px;
font-size: 16px;
xl-align: middle;
word-wrap:break-word ;
cursor: pointer;
}
.table-scrollable{
overflow-y: auto;
}
.statusMsg{
background-color: #FFFFFF;
margin: 0px 10px;
padding: 10px;
text-align: center;
}
#clientMsg{
margin-left: 30px;
font-size: 18px;
color: #ff5500;
text-align: center;
}
#smdstatus{
line-height: 80px;
font-size: 30px;
}
.red{
color:red;
}
.green{
color:green;
}
.table>tbody>tr>td{
xl-align: middle;
}
.theItems{
min-width: 200px;
}
.btn-box{
min-height: 90px;
text-align: center;
padding-top: 50px;
cursor: pointer;
}
.sm-btn-box{
xl-align: middle;
min-height: 100px;
font-size: 15px;
text-align: center;
cursor: pointer;
padding-top: 35px;
border:2px solid #FFFFFF !important;
}
#confirmReelOut{
/*margin-top: 45px;*/
}
.kabanTitle{
padding: 10px;
font-size: 30px;
margin-bottom: 10px;
}
#smdname{
background-color: #FFFFFF;
margin: 0px 10px;
padding-left: 10px;
}
#chart {
padding: 10px;
margin: 10px;
background-color: #FFFFFF;
overflow: hidden;
}
.kanban {
background-color: #dad9da;
min-height: 620px;}
.itembox{
margin: 20px 0px;
width: 100%;
display: table;
}
.item-start{
float: left;
width: 12%;
font-size: 18px;
}
.my-progress {
width: 86%;
overflow: unset;
float: left;
margin: 0;
}
.progress-bar-used {
background-color: #c33531;
font-size: 14px;
}
.progress-bar-idle {
background-color: #9bd5bb;
color: #000000;
font-size: 14px;
}
.item-end{
float: right;
width: 12%;
padding-left: 20px;
font-size: 18px;
}
.clientOpBox{
background-color: #FFFFFF;
margin: 10px 10px;
padding: 10px;
}
.statusMsg{
background-color: #FFFFFF;
margin: 0px 10px;
padding: 10px;
height: 200px;
}
#clientMsg{
font-size: 20px;
color: #ff5500;
}
#smdstatus{
line-height: 100px;
font-size: 20px;
}
.barheight{
height: 25px;
line-height: 25px;
}
.btn{
width: 120px;
height: 40px;
float: right;
margin-right: 30px;
}
.partnumber-box{
height: 100px;text-align: center;
padding-top:35px;
margin-bottom:10px;
font-size: 16px;
xl-align: middle;
word-wrap:break-word ;
cursor: pointer;
}
#toast-container {
top: 20%;
}
.popover-content{
width:276px;
}
.label-cancel {
background-color: #c6c6c6 !important;
border-color: #c8c8c8 !important;
text-decoration:line-through;
}
</style>
<link href="${ctx}/scripts/lobibox/css/lobibox.min.css?id=2" rel="stylesheet" type="text/css"/>
<%--<div class="row" id="codeBox">--%>
<%--<div class="col-md-6 col-sm-6">--%>
<%--<input type="text" class="form-control" id="scan-code"/>--%>
<%--</div>--%>
<%--<div class="col-md-6 col-sm-6">--%>
<%--<div class="alert alert-success" id="msg">&nbsp;--%>
<%--</div>--%>
<%--</div>--%>
<%--</div>--%>
<div class="row clientOpBox">
<div class="col-md-2">
<div class="col-md-12 bg-blue sm-btn-box" onclick="showPutInWindow('1')">
<div><fmt:message key="1 号 门"/></div>
<div><fmt:message key="开门扫码入库"/></div>
</div>
</div>
<div class="col-md-8" style="text-align:center;">
<div class="col-md-3">
<div class="boxtemperature" style="font-size: 16px;"><fmt:message key="allBoxView.temperature"/>:-</div><div><fmt:message key="boxView.range"/>:${minTemperature}-${maxTemperature}℃</div>
</div>
<div class="col-md-6">
<div id="smdstatus"></div>
<div id="clientMsg"></div>
</div>
<div class="col-md-3">
<div class="boxhumidity" style="font-size: 16px;margin-top:10px;"><fmt:message key="allBoxView.humidity"/>:-</div><div><fmt:message key="boxView.range"/>:${minHumidity}-${maxHumidity}%</div>
</div>
<div class="col-md-12">
<%--<div style="font-size:20px;" id="doorStatus"></div>--%>
</div>
</div>
<div class="col-md-2">
<div class="col-md-12 bg-blue sm-btn-box" onclick="showPutInWindow('2')">
<div><fmt:message key="2 号 门"/></div>
<div><fmt:message key="开门扫码入库"/></div>
</div>
</div>
</div>
<div class="row">
<%--<div class="col-md-4">--%>
<%--<button class="btn yellow" id="checkoutBtn">--%>
<%--<i class="fa fa-upload"></i><fmt:message key="storagePosFind.outSelect"/></button>--%>
<%--</div>--%>
<div class="col-md-12">
<input type="text" class="form-control" id="searchText" placeholder="搜索"/>
</div>
<div class="col-md-12 col-sm-12">
<!-- BEGIN EXAMPLE TABLE PORTLET-->
<div class="portlet box blue">
<div class="portlet-title">
<div class="caption">
${storage.name}
</div>
<div class="actions">
<%--<button type="button" class="btn btn-fit-height yellow" onclick="showPartNumbers();">--%>
<%--<i class="fa fa-sign-out"></i><fmt:message key="button.checkout"/>--%>
<%--</button>--%>
</div>
</div>
<div class="portlet-body">
<div class="table-scrollable" style="height:600px;">
<table class="table table-striped table-hover table-bordered no-footer" role="grid" aria-describedby="sample_editable_1_info" id="list">
<thead>
<tr role="row">
<th><fmt:message key="checkOut.pos"/></th>
<%--<th><fmt:message key="尺寸"/></th>--%>
<th><fmt:message key="物料"/></th>
<%--<th><fmt:message key="操作"/></th>--%>
</tr>
</thead>
<tbody class="dataTables">
<c:forEach items="${storagePosList}" var="pos">
<tr>
<td>${pos.posName}</td>
<%--<td>${pos.sizeStr}</td>--%>
<td>
<div class="row theItems" id="${pos.id}">
</div>
</td>
<%--<td>--%>
<%--<button class="btn green" onclick=outBoxForPutIn("${pos.id}")><i class="fa fa-download"></i><fmt:message key="出仓入库"/></button>--%>
<%--</td>--%>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</div>
</div>
<!-- END EXAMPLE TABLE PORTLET-->
</div>
</div>
<div id="putInWindow" class="modal fade" tabindex="-1" data-backdrop="static" data-keyboard="false">
<div class="modal-dialog" style="margin-top: 10%;width:60%;margin-left:20%;">
<div class="modal-content">
<div class="modal-header bg-green">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" style="font-weight: 500;"><span><fmt:message key="扫码入库"/></span>: <span id="doorTitle"></span></h4>
</div>
<div class="modal-body" style="height: 290px;">
<div class="row">
<div class="col-md-12">
<span class="help-block red" id="boxMsg"></span>
</div>
<div class="col-md-12" >
<input type="hidden" id="doorInfo"/>
<input type="text" class="form-control" id="boxCode" placeholder="料箱条码"/>
<span class="help-block red"></span>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" data-dismiss="modal" class="btn default"><fmt:message key="关闭"/></button>
</div>
</div>
</div>
</div>
<div id="operateWindow" class="modal fade" tabindex="-1" data-backdrop="static" data-keyboard="false">
<div class="modal-dialog" style="margin-top: 10%;width:60%;margin-left:20%;">
<div class="modal-content">
<div class="modal-header bg-green" id="operateHead">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" style="font-weight: 500;"><span id="operateTitle"><fmt:message key="库位"/></span>: <span id="currentOperatePos">123</span></h4>
</div>
<div class="modal-body" style="height: 290px;">
<div class="row">
<div class="col-md-12">
<span class="help-block red" id="msg"></span>
</div>
<div class="col-md-12">
<input type="text" class="form-control" id="scan-code" placeholder="扫码或填写要放入的物料信息"/>
</div>
<div class="col-md-12">
<div class="table-scrollable" style="height:400px;">
<table class="table table-striped table-hover table-bordered no-footer" role="grid" aria-describedby="sample_editable_1_info" id="list">
<thead>
<tr role="row">
<th></th>
<th><fmt:message key="barcode.barcode"/></th>
<th><fmt:message key="barcode.partNumber"/></th>
<th><fmt:message key="数量"/></th>
</tr>
</thead>
<tbody class="posTable" id="putInExtendPosList">
<tr role="row">
<td>1</td>
<td>234</td>
<td>ABC</td>
<td>3</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" onclick="exePutIn()" class="btn green"><fmt:message key="关门并回库"/></button>
<button type="button" data-dismiss="modal" class="btn default"><fmt:message key="关门"/></button>
</div>
</div>
</div>
</div>
<fmt:message key="storage.status" var="currentStatus"/>
<fmt:message key="storage.status.1" var="status_1"/>
<fmt:message key="storage.status.2" var="status_2"/>
<fmt:message key="storage.status.3" var="status_3"/>
<fmt:message key="storage.status.4" var="status_4"/>
<fmt:message key="storage.status.5" var="status_5"/>
<fmt:message key="storage.status.6" var="status_6"/>
<fmt:message key="storage.status.7" var="status_7"/>
<fmt:message key="storage.status.8" var="status_8"/>
<fmt:message key="storage.status.9" var="status_9"/>
<fmt:message key="storage.status.10" var="status_10"/>
<fmt:message key="storage.status.11" var="status_11"/>
<fmt:message key="storage.status.12" var="status_12"/>
<fmt:message key="storage.status.13" var="status_13"/>
<fmt:message key="sotrage.status.999" var="status_999"/>
<fmt:message key="storage.status" var="boxStatus_label"/>
<fmt:message key="inOutList.in" var="in_label"/>
<fmt:message key="inOutList.out" var="out_label"/>
<fmt:message key="dataLog.orderSource" var="source_label"/>
<fmt:message key="allBoxView.temperature" var="temperature_label"/>
<fmt:message key="allBoxView.humidity" var="humidity_label"/>
<fmt:message key="boxView.taskCancel" var="taskCancel_label"/>
<fmt:message key="boxView.taskExcuting" var="taskExcuting_label"/>
<fmt:message key="boxView.taskFinished" var="taskFinished_label"/>
<fmt:message key="boxView.taskWaiting" var="taskWaiting_label"/>
<fmt:message key="boxView.cancelTask" var="cancelTask_label"/>
<fmt:message key="allBoxView.msg.cancelMsg" var="cancel_msg"/>
<fmt:message key="allBoxView.msg.cancelFinished" var="cancelFinished_msg"/>
<c:set var="scripts" scope="request">
<script type="text/javascript">
Lobibox.notify.DEFAULTS = $.extend({}, Lobibox.notify.DEFAULTS, {
size: 'mini',
closeOnClick: false,
sound: false,
delay: false,
position: 'bottom right',
});
//FormEditable.init();
$("#searchText").on('input propertychange',function(){
var searchText = $("#searchText").val();
$("#list tr").each(function(){
var needShow = false;
if($(this).text().indexOf(searchText) >=0){
$(this).show();
}else{
$(this).hide();
}
});
});
listNotEmpty = function(){
var str= "";
$("[name=posIds]").each(function(){
if($(this).attr("checked")){
str+=$(this).val()+";";
}
});
var searchText = $("#searchText").val();
if(str != "" || searchText !="") {
//有选择的暂时不刷新
return;
}
$.post("${ctx}/service/store/xl/storagePosList", {cid: '${show}'}, function (data) {
$(".theItems").html("");
for(var item in data){
var barcodeObj = data[item].barcode;
if(barcodeObj){
partNumber = barcodeObj.partNumber;
amount = barcodeObj.amount;
}else{
checkBox = "";
}
var alarmClass = "";
if(barcodeObj.willExpired){
alarmClass = "redBorder";
}else if(barcodeObj.expired){
alarmClass = "bg-red";
}
var itemHtml = '<div class="col-lg-3 col-md-3 col-sm-6 col-xs-12" onclick="checkout(\''+data[item].id+'\');">' +
'<div class="bg-blue-madison partnumber-box '+alarmClass+'">'+partNumber+'<br>'+amount+'</div>' +
'</div>';
$("#"+data[item].hostPosId).append(itemHtml);
}
});
}
outBoxForPutIn = function(posId){
$.post("${ctx}/service/store/xl/outBoxForPutIn", {pid: posId}, function (data) {
//showMsg("",data);
showMsg(data);
});
};
function checkout(posId) {
$.post("${ctx}/service/store/xl/exeOut", {cid: '${show}', pid: posId}, function (data) {
showMsg(data);
});
}
cancelTask = function(taskToClose){
Lobibox.confirm({
title: "${msg_title}",
msg: "${cancel_msg}",
callback: function ($this, type, ev) {
if(type == 'yes'){
$.post("${ctx}/service/store/cancelTask", {tid: taskToClose.$options["taskId"]}, function (data) {
if(data){
Lobibox.alert('success', //AVAILABLE TYPES: "error", "info", "success", "warning"
{
msg: "${cancelFinished_msg}"
});
}
});
}
}
});
};
<%--$(".sm-btn-box").click(function(){--%>
<%--if($(this).css("cursor") == "pointer"){--%>
<%--var opKey = $(this).attr("id");--%>
<%--$.post("${ctx}/service/store/saveOp", {opKey: opKey, cid: '${show}', opValue:'doit'}, function (data) {--%>
<%--waitting();--%>
<%--});--%>
<%--}--%>
<%--});--%>
var allTasks = {};
function updateTasks(){
//任务列表
$.post("${ctx}/service/store/tasks", {cid: '${show}'}, function (data) {
var newTasks = [];
var cidTasks = allTasks["all"];
if(!cidTasks){
cidTasks={};
}
for(var item in data){
var taskId = data[item].id;
var partNumber = data[item].partNumber;
var posStr = data[item].posStr;
var barcode = data[item].barcode
newTasks.push(taskId);
var options = {};
//入库
var showStr = posStr+"${in_label}"+ partNumber + "["+barcode+"]";
var status = data[item].status.toLowerCase();
options['status'] = status;
options['showClass'] = 'label-'+status;
options['taskId'] = taskId;
options['barcode'] = barcode;
options['num'] = data[item].num;
options['icon']='fa fa-database';
if(data[item].type == 2){//出库
options['icon']='fa fa-sign-out';
showStr = posStr+"${out_label}"+ partNumber + "["+barcode+"]";
}
//options['onClick']= modifyClick;
var statusMsg ="["+status+"]";
var operate = '';
if(data[item].cancel){
statusMsg ="[${taskCancel_label}]";
} else if(data[item].executing){
statusMsg ="[${taskExcuting_label}]";
options['onClose']= cancelTask;
operate = '<a class="btn btn-xs default" href="#" onclick=cancelTask('+data[item].id+');><i class="fa fa-trash-o"></i> ${cancelTask_label} </a>';
}else if(data[item].finished){
statusMsg ="[${taskFinished_label}]";
}else if(data[item].wait){
statusMsg ="[${taskWaiting_label}]";
options['onClose']=cancelTask;
operate = '<a class="btn btn-xs default" href="#" onclick=cancelTask('+data[item].id+');><i class="fa fa-trash-o"></i> ${cancelTask_label} </a>';
}else{
//options['onClose']=hideTask;
}
var sourceStr = "";
if(data[item].sourceName){
sourceStr = "<br/>${source_label} " + data[item].sourceStr;
}
options['msg']= showStr + statusMsg + sourceStr;
var task = cidTasks[taskId];
if(!task){
cidTasks[taskId] = Lobibox.notify('success', options);
}else{
if(status != task.$options["status"]){
task.remove();
delete cidTasks[taskId];
cidTasks[taskId] = Lobibox.notify('success', options);
}
}
}
for(var taskKey in cidTasks){
if(newTasks.indexOf(taskKey) < 0){
var task = cidTasks[taskKey];
task.remove();
delete cidTasks[taskKey];
}
}
allTasks["all"] = cidTasks;
});
}
var statusMsg={
"1":"${status_1}",
"2":"${status_2}",
"3":"${status_3}",
"4":"${status_4}",
"5":"${status_5}",
"6":"${status_6}",
"7":"${status_7}",
"8":"${status_8}",
"9":"${status_9}",
"10":"${status_10}",
"11":"${status_11}",
"12":"${status_12}",
"13":"${status_13}",
"14":"${status_14}",
"15":"${status_15}",
"16":"${status_16}",
"17":"${status_17}",
"18":"${status_18}",
"19":"${status_19}",
"20":"${status_20}",
"21":"${status_21}",
"22":"${status_22}",
"999":"${status_999}"
};
function flushStatus(){
$.get('${ctx}/service/store/status?cid=${show}', function (statusBean) {
if(statusBean && statusBean.boxStatus["1"]){
var boxStatusBean = statusBean.boxStatus["1"];
var statusTxt = statusMsg[boxStatusBean.status];
$("#smdstatus").html("${boxStatus_label}: ["+statusTxt+"]");
var color = "green";
if(statusBean.status == 2 || statusBean.status == 3 || statusBean.status == 4 || statusBean.status == 5){
color = "red";
}
$(".boxtemperature").html("${temperature_label}:"+boxStatusBean.temperature+"℃");
$(".boxhumidity").html("${humidity_label}:"+boxStatusBean.humidity+"%");
$("#smdstatus").attr("class","smdstatus " + color);
$("#clientMsg").html(statusBean.msg);
}else{
var statusTxt = statusMsg["999"];
$("#smdstatus").html("${boxStatus_label}: ["+statusTxt+"]");
$("#smdstatus").attr("class","smdstatus red");
$("#clientMsg").html("");
}
});
}
function flushCurrentTask(){
$.get('${ctx}/service/store/xl/currentTask?cid=${show}', function (data) {
if(data){
var task = data.currentTask;
if(!task){
return;
}
var extendPosList = data.extendPosList;
$("#currentOperatePos").text(task.posName);
showOperateWindow(task, extendPosList);
}else{
$("#operateWindow").modal("hide");
}
});
}
exePutIn = function(){
$.post("${ctx}/service/store/xl/exePutIn", {cid: '${show}'}, function (data) {
//$("#operateWindow").modal("hide");
});
};
$('#operateWindow').on('hide.bs.modal', function () {
//入库界面关闭.
$.get('${ctx}/service/store/xl/closeOperateWindow?cid=${show}', function (data) {
$("#scan-code").val("");
$("#msg").html("");
});
})
function showPutInWindow(door){
$.post("${ctx}/service/store/saveOp", {opKey: "openDoor", cid: '${show}', opValue:door}, function (data) {
$("#boxMsg").text("");
$("#boxCode").text("");
$("#doorInfo").val(door);
$("#doorTitle").text(door + "号门");
$("#putInWindow").modal("show");
$("#boxCode").focus();
});
}
$("#boxCode").change(function () {
var doorInfo = $("#doorInfo").val();
var posValue = $(this).val();
$.post("${ctx}/service/store/xl/putInToPos", {cid: '${show}',posName:posValue, door:doorInfo}, function (data) {
if(data){
$("#boxMsg").text(data);
}else{
$("#putInWindow").modal("hide");
}
});
});
function showOperateWindow(task, extendPosList){
if(task.putInTask){
//入库任务
$("#operateHead").attr("class","modal-header bg-green-haze");
$("#operateTitle").text(task.subSourceId+"号门入库");
}else{
$("#operateHead").attr("class","modal-header bg-yellow");
$("#operateTitle").text("出库");
}
$("#putInExtendPosList").html("");
for(i in extendPosList){
var barcodeObj = extendPosList[i].barcode;
if(!extendPosList[i].enabled || barcodeObj == null){
continue;
}
var index = parseInt(i) + 1;
var barcode = barcodeObj.barcode;
var partNumber = barcodeObj.partNumber;
var amount = barcodeObj.amount;
var hasOutTaskClass = "";
var hasOutTask = !extendPosList[i].used;
if(hasOutTask){
hasOutTaskClass = "bg-green";
}
var tdStr =
"<td>"+index+"</td>" +
"<td>"+barcode+"</td>"+
"<td>"+partNumber+"</td>" +
"<td>"+amount+"</td>";
var trStr = "<tr class='"+hasOutTaskClass+"'>" + tdStr+ "</tr>";
$("#putInExtendPosList").append(trStr);
}
$("#operateWindow").modal("show");
$("#scan-code").focus();
}
function showOpResult(id, msg){
if(id == ""){
return;
}
var msgDocument = $("#"+id);
if(msg == ""){
msgDocument.attr("class","");
msgDocument.html("&nbsp;");
}else{
var error = true;
if(msg.indexOf("OK") == 0){
error = false;
msg = msg.substr(2);
}
if(error){
msgDocument.attr("class","help-block red");
}else{
msgDocument.attr("class","help-block green");
}
msgDocument.html(msg);
}
}
$("#scan-code").change(function () {
var codeValue = $(this).val();
var currentOperatePos = $("#currentOperatePos").text();
if(codeValue != ""){
$.post("${ctx}/service/store/xl/operatePos", {cid: '${show}', code: codeValue, pos:currentOperatePos}, function (data) {
showOpResult("msg",data);
$("#scan-code").val("");
});
}
//showOperateWindow();
});
updateTasks();
listNotEmpty();
//showOperateWindow();
setInterval(function(){
flushStatus();
updateTasks();
listNotEmpty();
flushCurrentTask();
if($("#putInWindow").is(":visible")){
$("#boxCode").focus();
}
}, 1000);
waitting = function(){
Metronic.blockUI({
iconOnly: true,
overlayColor: '#4b8df8'
});
window.setTimeout(function() {
Metronic.unblockUI();
}, 1500);
}
</script>
</c:set>
\ No newline at end of file
......@@ -241,7 +241,7 @@
<div class="page-footer-inner">
2016&copy; <a href="${ctx}/updateHistory.html">SMD BOX</a>
</div>
<span class="right" style="color: #a3a3a3;">Version: 2020.09.09</span>
<span class="right" style="color: #a3a3a3;">Version: 2020.09.17</span>
<div class="scroll-to-top">
<i class="icon-arrow-up"></i>
</div>
......
位置,优先级,高度,宽度,料仓ID,设备地址,锁地址值,IO灯索引
1-1,10,70,500,1,1,1,16
1-2,10,70,500,1,1,2,17
1-3,10,70,500,1,1,3,18
1-4,10,70,500,1,1,4,19
1-5,10,70,500,1,1,5,20
2-1,10,70,500,1,1,6,21
2-2,10,70,500,1,1,7,22
2-3,10,70,500,1,1,8,23
2-4,10,70,500,1,1,9,24
3-1,10,70,500,1,1,10,25
3-2,10,70,500,1,1,11,26
3-3,10,70,500,1,1,12,27
3-4,10,70,500,1,1,13,28
3-5,10,70,500,1,1,14,29
位置,优先级,高度,宽度,料仓ID,前后轴位置P2,升降轴库位出料前点P5,升降轴库位出料缓冲点P6,升降轴库位入料前点P3,升降轴库位入料缓冲点P4,进出轴库位取料点P4,,,,,
AC1#L1_1_1,1,75,40,1,398000,55000,110000,110000,55000,170000,,,,,1000
AC1#L1_1_2,2,75,40,1,398800,361000,410000,410000,361000,170000,,,,,
AC1#L1_1_3,3,75,40,1,399600,661000,710000,710000,661000,170000,,,,,
AC1#L1_1_4,4,75,40,1,400400,961000,1010000,1010000,961000,170000,,,,,
AC1#L1_1_5,5,75,40,1,401700,1261000,1310000,1310000,1261000,170000,,,,,
AC1#L1_1_6,6,75,40,1,402500,1561000,1610000,1610000,1561000,170000,,,,,
AC1#L1_1_7,7,75,40,1,403300,1861000,1910000,1910000,1861000,170000,,,,,
AC1#L2_1_1,8,75,40,1,680318,55000,110000,110000,55000,170000,,,,,
AC1#L2_1_2,9,75,40,1,681118,361000,410000,410000,361000,170000,,,,,
AC1#L2_1_3,10,75,40,1,681918,661000,710000,710000,661000,170000,,,,,
AC1#L2_1_4,11,75,40,1,682718,961000,1010000,1010000,961000,170000,,,,,
AC1#L2_1_5,12,75,40,1,683518,1261000,1310000,1310000,1261000,170000,,,,,
AC1#L2_1_6,13,75,40,1,684318,1561000,1610000,1610000,1561000,170000,,,,,
AC1#L2_1_7,14,75,40,1,685118,1861000,1910000,1910000,1861000,170000,,,,,
AC1#L3_1_1,15,75,40,1,961818,55000,110000,110000,55000,170000,,,,,
AC1#L3_1_2,16,75,40,1,962618,361000,410000,410000,361000,170000,,,,,
AC1#L3_1_3,17,75,40,1,963418,661000,710000,710000,661000,170000,,,,,
AC1#L3_1_4,18,75,40,1,964218,961000,1010000,1010000,961000,170000,,,,,
AC1#L3_1_5,19,75,40,1,965018,1261000,1310000,1310000,1261000,170000,,,,,
AC1#L3_1_6,20,75,40,1,965818,1561000,1610000,1610000,1561000,170000,,,,,
AC1#L3_1_7,21,75,40,1,966618,1861000,1910000,1910000,1861000,170000,,,,,
AC1#L4_1_1,22,75,40,1,1242818,55000,110000,110000,55000,170000,,,,,
AC1#L4_1_2,23,75,40,1,1243618,361000,410000,410000,361000,170000,,,,,
AC1#L4_1_3,24,75,40,1,1244418,661000,710000,710000,661000,170000,,,,,
AC1#L4_1_4,25,75,40,1,1245218,961000,1010000,1010000,961000,170000,,,,,
AC1#L4_1_5,26,75,40,1,1246018,1261000,1310000,1310000,1261000,170000,,,,,
AC1#L4_1_6,27,75,40,1,1246818,1561000,1610000,1610000,1561000,170000,,,,,
AC1#L4_1_7,28,75,40,1,1247618,1861000,1910000,1910000,1861000,170000,,,,,
AC1#L5_1_1,29,75,40,1,1522818,55000,110000,110000,55000,170000,,,,,
AC1#L5_1_2,30,75,40,1,1523618,361000,410000,410000,361000,170000,,,,,
AC1#L5_1_3,31,75,40,1,1524418,661000,710000,710000,661000,170000,,,,,
AC1#L5_1_4,32,75,40,1,1525218,961000,1010000,1010000,961000,170000,,,,,
AC1#L5_1_5,33,75,40,1,1526018,1261000,1310000,1310000,1261000,170000,,,,,
AC1#L5_1_6,34,75,40,1,1526818,1561000,1610000,1610000,1561000,170000,,,,,
AC1#L5_1_7,35,75,40,1,1527618,1861000,1910000,1910000,1861000,170000,,,,,
AC1#L6_1_1,36,75,40,1,1803318,55000,110000,110000,55000,170000,,,,,
AC1#L6_1_2,37,75,40,1,1804118,361000,410000,410000,361000,170000,,,,,
AC1#L6_1_3,38,75,40,1,1804918,661000,710000,710000,661000,170000,,,,,
AC1#L6_1_4,39,75,40,1,1805718,961000,1010000,1010000,961000,170000,,,,,
AC1#L6_1_5,40,75,40,1,1806518,1261000,1310000,1310000,1261000,170000,,,,,
AC1#L6_1_6,41,75,40,1,1807318,1561000,1610000,1610000,1561000,170000,,,,,
AC1#L6_1_7,42,75,40,1,1808118,1861000,1910000,1910000,1861000,170000,,,,,
AC1#L7_1_1,43,75,40,1,2084918,55000,110000,110000,55000,170000,,,,,
AC1#L7_1_2,44,75,40,1,2085718,361000,410000,410000,361000,170000,,,,,
AC1#L7_1_3,45,75,40,1,2086518,661000,710000,710000,661000,170000,,,,,
AC1#L7_1_4,46,75,40,1,2087318,961000,1010000,1010000,961000,170000,,,,,
AC1#L7_1_5,47,75,40,1,2088118,1261000,1310000,1310000,1261000,170000,,,,,
AC1#L7_1_6,48,75,40,1,2088918,1561000,1610000,1610000,1561000,170000,,,,,
AC1#L7_1_7,49,75,40,1,2089718,1861000,1910000,1910000,1861000,170000,,,,,
AC1#L8_1_1,50,75,40,1,2366918,55000,110000,110000,55000,170000,,,,,
AC1#L8_1_2,51,75,40,1,2367718,361000,410000,410000,361000,170000,,,,,
AC1#L8_1_3,52,75,40,1,2368518,661000,710000,710000,661000,170000,,,,,
AC1#L8_1_4,53,75,40,1,2369318,961000,1010000,1010000,961000,170000,,,,,
AC1#L8_1_5,54,75,40,1,2370118,1261000,1310000,1310000,1261000,170000,,,,,
AC1#L8_1_6,55,75,40,1,2370918,1561000,1610000,1610000,1561000,170000,,,,,
AC1#L8_1_7,56,75,40,1,2371718,1861000,1910000,1910000,1861000,170000,,,,,
AC1#L9_1_1,57,75,40,1,2647418,55000,110000,110000,55000,170000,,,,,
AC1#L9_1_2,58,75,40,1,2648218,361000,410000,410000,361000,170000,,,,,
AC1#L9_1_3,59,75,40,1,2649018,661000,710000,710000,661000,170000,,,,,
AC1#L9_1_4,60,75,40,1,2649818,961000,1010000,1010000,961000,170000,,,,1500,
AC1#L9_1_5,61,75,40,1,2650618,1261000,1310000,1310000,1261000,170000,,,,,
AC1#L9_1_6,62,75,40,1,2651418,1561000,1610000,1610000,1561000,170000,,,,,
AC1#L9_1_7,63,75,40,1,2652218,1861000,1910000,1910000,1861000,170000,,,,,
AC1#L10_1_1,64,75,40,1,2929618,55000,110000,110000,55000,170000,,,,,
AC1#L10_1_2,65,75,40,1,2930418,361000,410000,410000,361000,170000,,,,,
AC1#L10_1_3,66,75,40,1,2931218,661000,710000,710000,661000,170000,,,,,
AC1#L10_1_4,67,75,40,1,2932018,961000,1010000,1010000,961000,170000,,,,,
AC1#L10_1_5,68,75,40,1,2932818,1261000,1310000,1310000,1261000,170000,,,,,
AC1#L10_1_6,69,75,40,1,2933618,1561000,1610000,1610000,1561000,170000,,,,,
AC1#L10_1_7,70,75,40,1,2934418,1861000,1910000,1910000,1861000,170000,,,,,
AC1#L11_1_1,71,75,40,1,3210018,55000,110000,110000,55000,170000,,,,,
AC1#L11_1_2,72,75,40,1,3211018,361000,410000,410000,361000,170000,,,,,
AC1#L11_1_3,73,75,40,1,3212018,661000,710000,710000,661000,170000,,,,,
AC1#L11_1_4,74,75,40,1,3213018,961000,1010000,1010000,961000,170000,,,,,
AC1#L11_1_5,75,75,40,1,3215518,1261000,1310000,1310000,1261000,170000,,,,,
AC1#L11_1_6,76,75,40,1,3216518,1561000,1610000,1610000,1561000,170000,,,500,,
AC1#L11_1_7,77,75,40,1,3217518,1861000,1910000,1910000,1861000,170000,,,,,
AC1#R1_1_1,78,75,40,1,399500,55000,110000,110000,55000,-170000,,,,,
AC1#R1_1_2,79,75,40,1,400300,361000,410000,410000,361000,-170000,,,,,
AC1#R1_1_3,80,75,40,1,401100,661000,710000,710000,661000,-170000,,,,,
AC1#R1_1_4,81,75,40,1,401900,961000,1010000,1010000,961000,-170000,,,,,
AC1#R1_1_5,82,75,40,1,402700,1261000,1310000,1310000,1261000,-170000,,,,,
AC1#R1_1_6,83,75,40,1,403500,1561000,1610000,1610000,1561000,-170000,,,,,
AC1#R1_1_7,84,75,40,1,404300,1861000,1910000,1910000,1861000,-170000,,,,,
AC1#R2_1_1,85,75,40,1,680318,55000,110000,110000,55000,-170000,,,,,
AC1#R2_1_2,86,75,40,1,681118,361000,410000,410000,361000,-170000,,,,,
AC1#R2_1_3,87,75,40,1,681918,661000,710000,710000,661000,-170000,,,,,
AC1#R2_1_4,88,75,40,1,682718,961000,1010000,1010000,961000,-170000,,,,,
AC1#R2_1_5,89,75,40,1,683518,1261000,1310000,1310000,1261000,-170000,,,,,
AC1#R2_1_6,90,75,40,1,684318,1561000,1610000,1610000,1561000,-170000,,,,,
AC1#R2_1_7,91,75,40,1,685118,1861000,1910000,1910000,1861000,-170000,,,,,
AC1#R3_1_1,92,75,40,1,961818,55000,110000,110000,55000,-170000,,,,,
AC1#R3_1_2,93,75,40,1,962618,361000,410000,410000,361000,-170000,,,,,
AC1#R3_1_3,94,75,40,1,963418,661000,710000,710000,661000,-170000,,,,,
AC1#R3_1_4,95,75,40,1,964218,961000,1010000,1010000,961000,-170000,,,,,
AC1#R3_1_5,96,75,40,1,965018,1261000,1310000,1310000,1261000,-170000,,,,,
AC1#R3_1_6,97,75,40,1,965818,1561000,1610000,1610000,1561000,-170000,,,,,
AC1#R3_1_7,98,75,40,1,966618,1861000,1910000,1910000,1861000,-170000,,,,,
AC1#R4_1_1,99,75,40,1,1242818,55000,110000,110000,55000,-170000,,,,,
AC1#R4_1_2,100,75,40,1,1243618,361000,410000,410000,361000,-170000,,,,,
AC1#R4_1_3,101,75,40,1,1244418,661000,710000,710000,661000,-170000,,,,,
AC1#R4_1_4,102,75,40,1,1245218,961000,1010000,1010000,961000,-170000,,0,,,
AC1#R4_1_5,103,75,40,1,1246018,1261000,1310000,1310000,1261000,-170000,,,,,
AC1#R4_1_6,104,75,40,1,1246818,1561000,1610000,1610000,1561000,-170000,,,,,
AC1#R4_1_7,105,75,40,1,1247618,1861000,1910000,1910000,1861000,-170000,,,,,
AC1#R5_1_1,106,75,40,1,1522818,55000,110000,110000,55000,-170000,,,,,
AC1#R5_1_2,107,75,40,1,1523618,361000,410000,410000,361000,-170000,,,,,
AC1#R5_1_3,108,75,40,1,1524418,661000,710000,710000,661000,-170000,,,,,
AC1#R5_1_4,109,75,40,1,1525218,961000,1010000,1010000,961000,-170000,,,,,
AC1#R5_1_5,110,75,40,1,1526018,1261000,1310000,1310000,1261000,-170000,,,,,
AC1#R5_1_6,111,75,40,1,1526818,1561000,1610000,1610000,1561000,-170000,,,,,
AC1#R5_1_7,112,75,40,1,1527618,1861000,1910000,1910000,1861000,-170000,,,,,
AC1#R6_1_1,113,75,40,1,1803318,55000,110000,110000,55000,-170000,,,,,
AC1#R6_1_2,114,75,40,1,1804118,361000,410000,410000,361000,-170000,,,,,
AC1#R6_1_3,115,75,40,1,1804918,661000,710000,710000,661000,-170000,,,,,
AC1#R6_1_4,116,75,40,1,1805718,961000,1010000,1010000,961000,-170000,,,,,
AC1#R6_1_5,117,75,40,1,1806518,1261000,1310000,1310000,1261000,-170000,,,,,
AC1#R6_1_6,118,75,40,1,1807318,1561000,1610000,1610000,1561000,-170000,,,,,
AC1#R6_1_7,119,75,40,1,1808118,1861000,1910000,1910000,1861000,-170000,,,,,
AC1#R7_1_1,120,75,40,1,2084918,55000,110000,110000,55000,-170000,,,,,
AC1#R7_1_2,121,75,40,1,2085718,361000,410000,410000,361000,-170000,,,,,
AC1#R7_1_3,122,75,40,1,2086518,661000,710000,710000,661000,-170000,,,,,
AC1#R7_1_4,123,75,40,1,2087318,961000,1010000,1010000,961000,-170000,,,,,
AC1#R7_1_5,124,75,40,1,2088118,1261000,1310000,1310000,1261000,-170000,,,,,
AC1#R7_1_6,125,75,40,1,2088918,1561000,1610000,1610000,1561000,-170000,,,,,
AC1#R7_1_7,126,75,40,1,2089718,1861000,1910000,1910000,1861000,-170000,,,,,
AC1#R8_1_1,127,75,40,1,2366918,55000,110000,110000,55000,-170000,,,,,
AC1#R8_1_2,128,75,40,1,2367718,361000,410000,410000,361000,-170000,,,,,
AC1#R8_1_3,129,75,40,1,2368518,661000,710000,710000,661000,-170000,,,,,
AC1#R8_1_4,130,75,40,1,2369318,961000,1010000,1010000,961000,-170000,,,,,
AC1#R8_1_5,131,75,40,1,2370118,1261000,1310000,1310000,1261000,-170000,,,,,
AC1#R8_1_6,132,75,40,1,2370918,1561000,1610000,1610000,1561000,-170000,,,,,
AC1#R8_1_7,133,75,40,1,2371718,1861000,1910000,1910000,1861000,-170000,,,,,
AC1#R9_1_1,134,75,40,1,2647418,55000,110000,110000,55000,-170000,,,,,
AC1#R9_1_2,135,75,40,1,2648218,361000,410000,410000,361000,-170000,,,,,
AC1#R9_1_3,136,75,40,1,2649018,661000,710000,710000,661000,-170000,,,,,
AC1#R9_1_4,137,75,40,1,2649818,961000,1010000,1010000,961000,-170000,,,,,
AC1#R9_1_5,138,75,40,1,2650618,1261000,1310000,1310000,1261000,-170000,,,,,
AC1#R9_1_6,139,75,40,1,2651418,1561000,1610000,1610000,1561000,-170000,,,,,
AC1#R9_1_7,140,75,40,1,2652218,1861000,1910000,1910000,1861000,-170000,,,,,
AC1#R10_1_1,141,75,40,1,2929618,55000,110000,110000,55000,-170000,,,,,
AC1#R10_1_2,142,75,40,1,2930418,361000,410000,410000,361000,-170000,,,,,
AC1#R10_1_3,143,75,40,1,2931218,661000,710000,710000,661000,-170000,,,,,
AC1#R10_1_4,144,75,40,1,2932018,961000,1010000,1010000,961000,-170000,,,,,
AC1#R10_1_5,145,75,40,1,2932818,1261000,1310000,1310000,1261000,-170000,,,,,
AC1#R10_1_6,146,75,40,1,2933618,1561000,1610000,1610000,1561000,-170000,,,,,
AC1#R10_1_7,147,75,40,1,2934418,1861000,1910000,1910000,1861000,-170000,,,,,
AC1#R11_1_1,148,75,40,1,3211518,55000,110000,110000,55000,-170000,,,,,
AC1#R11_1_2,149,75,40,1,3212518,361000,410000,410000,361000,-170000,,,,,
AC1#R11_1_3,150,75,40,1,3213518,661000,710000,710000,661000,-170000,,,,,
AC1#R11_1_4,151,75,40,1,3214518,961000,1010000,1010000,961000,-170000,,,,,
AC1#R11_1_5,152,75,40,1,3215518,1261000,1310000,1310000,1261000,-170000,,,,,
AC1#R11_1_6,153,75,40,1,3216518,1561000,1610000,1610000,1561000,-170000,,,,,
AC1#R11_1_7,154,75,40,1,3217518,1861000,1910000,1910000,1861000,-170000,,,,,
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!