Commit 64f6829b sunke

1 元器件信息 新增界面料号,供应商,数量自动录入,尺寸手动录入

2 料架线别显示顺序由2R 1F 修改为1F 2R (这个现在根据配置顺序显示)
3 键盘使用enter键确认
1 个父辈 3ae6dee1
正在显示 46 个修改的文件 包含 1181 行增加1083 行删除
......@@ -32,23 +32,23 @@ public enum Authority implements GrantedAuthority {
//入库
//ROLE_MANAGE_PUT_IN("authority.putIn",9),
//站位列表
ROLE_MANAGE_FEEDER("authority.feeder",10),
// ROLE_MANAGE_FEEDER("authority.feeder",10),
//指定批次
ROLE_MANAGE_SPECIFIEDBATCH("authority.specifiedBatch",11),
// ROLE_MANAGE_SPECIFIEDBATCH("authority.specifiedBatch",11),
//虚拟仓管理
ROLE_MANAGE_VIRTUAL("authority.virtual",12),
// ROLE_MANAGE_VIRTUAL("authority.virtual",12),
// 站位列表查看勾选
ROLE_FEEDER_VIEW("authority.feeder.view",13),
// ROLE_FEEDER_VIEW("authority.feeder.view",13),
// 贵重物料出库
ROLE_VALUABLE_OUT("authority.valuable.out",14),
// ROLE_VALUABLE_OUT("authority.valuable.out",14),
/**
* 运行数据
*/
ROLE_MANAGE_DATALOG("authority.dataLog",15),
// ROLE_MANAGE_DATALOG("authority.dataLog",15),
//超额入库
ROLE_MORE_STACK_IN("authority.stockIn.more",16),
// ROLE_MORE_STACK_IN("authority.stockIn.more",16),
;
private String key;
......
......@@ -154,6 +154,11 @@ public class Settings extends BaseMongoBean {
*/
private Date lastPcbCheckDate;
/**
* 呆滞物料提醒时间(天)
*/
private int inactionDay = 0;
public Date getLastPcbCheckDate() {
return lastPcbCheckDate;
}
......@@ -361,5 +366,13 @@ public class Settings extends BaseMongoBean {
public void setMaintenanceDays(int maintenanceDays) {
this.maintenanceDays = maintenanceDays;
}
public int getInactionDay() {
return inactionDay;
}
public void setInactionDay(int inactionDay) {
this.inactionDay = inactionDay;
}
}
......@@ -7,10 +7,7 @@ import com.myproject.util.StorageConstants;
import org.hibernate.validator.constraints.NotEmpty;
import org.springframework.data.annotation.Transient;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* Created by kangmor on 2015/12/3.
......@@ -54,6 +51,9 @@ public class Storage extends BaseMongoBean {
*/
private String lightMemo = "";
@Transient
private String clientIp = "";
//包含料仓 Box数量
private Integer boxCount=1;
public Integer getBoxCount() {
......@@ -310,7 +310,7 @@ public class Storage extends BaseMongoBean {
* @return
*/
public Map<String,String> getShowLines(){
Map lineMap = new HashMap();
Map lineMap = new LinkedHashMap();
if(!Strings.isNullOrEmpty(lightMemo)){
String[] lineInfos = lightMemo.split(";");
for(String lineInfoStr : lineInfos){
......@@ -365,7 +365,7 @@ public class Storage extends BaseMongoBean {
}
}
}
return 5;
return 10;
}
/**
* 状态灯显示黄灯的分钟数
......@@ -382,6 +382,14 @@ public class Storage extends BaseMongoBean {
}
}
}
return 20;
return 30;
}
public String getClientIp() {
return clientIp;
}
public void setClientIp(String clientIp) {
this.clientIp = clientIp;
}
}
......@@ -69,6 +69,11 @@ public class StatusBean {
private long time = System.currentTimeMillis();
/**
* 客户端IP
*/
private String clientIp = "";
/**
* 上次保存时间
*/
private long lastSaveTime = System.currentTimeMillis();
......@@ -380,4 +385,12 @@ public class StatusBean {
}
}
}
public String getClientIp() {
return clientIp;
}
public void setClientIp(String clientIp) {
this.clientIp = clientIp;
}
}
......@@ -63,6 +63,7 @@ public class SzShelfDbDao {
/**
* 判断是否接料可以根据LineNo,Slot,Subslot, Partno,PartTimeOn(大于发料时间)作为条件
*/
@Deprecated
public List<Splice> findSpliceAfterTime(Date date){
List<Splice> list = dbUtilsTemplate.find(Splice.class, "SELECT * from View_Splice WHERE PartTimeOn>?", date);
return list;
......
......@@ -2,6 +2,7 @@ package com.myproject.manager;
import com.myproject.bean.json.ChartItem;
import com.myproject.bean.update.Storage;
import org.springframework.data.mongodb.core.query.Query;
import java.util.Collection;
import java.util.Date;
......@@ -20,4 +21,6 @@ public interface IStorageManager extends IManager<Storage> {
Collection<ChartItem> getRunStatusData(Date fromDate, Date toDate);
List<Storage> findByArea(String areaId);
}
......@@ -188,11 +188,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
c = c.and("enabled").is(true)//可用
.and("used").is(false);//未使用
if(inBoxIds != null && !inBoxIds.isEmpty()){
String inBoxIdStr = StringUtils.join(inBoxIds,"|");
//匹配仓位名称以数字#开头的(inBoxIds 要用正则的|线隔开)
//c = c.and("posName").regex("^("+inBoxIdStr+")#.*");
}
// if(inBoxIds != null && !inBoxIds.isEmpty()){
// String inBoxIdStr = StringUtils.join(inBoxIds,"|");
// //匹配仓位名称以数字#开头的(inBoxIds 要用正则的|线隔开)
// //c = c.and("posName").regex("^("+inBoxIdStr+")#.*");
// }
//去除的仓位
if(excludePosIds != null && !excludePosIds.isEmpty()){
c = c.and("id").nin(excludePosIds);
......
......@@ -3,11 +3,15 @@ package com.myproject.util;
import com.google.common.base.Strings;
import com.myproject.bean.CodeBean;
import com.myproject.bean.update.Barcode;
import com.myproject.bean.update.Storage;
import com.myproject.bean.update.StoragePos;
import com.myproject.webapp.controller.webService.DataCache;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
/**
*
......@@ -356,49 +360,32 @@ public class BarcodeRule {
}
public static void main(String args[]) throws Exception{
String rule = "1@2@3@PN@5@6@7@8@9@10@xxPRODATEyyyyMMdd@xxxEXPDATEyyyyMMdd@13@14@15@16@17@RI@xQTYxxxxxx@20@21@22@23";
rule = "1@2@3@PPN@5@6@7@8@9@10@xxPRODATEyyyyMMdd@xxxEXPDATEyyyyMMdd@13@14@15@16@17@RI@xQTYxxxxxx@20@21@22@23";
rule = "1@2@3@PPN@5@6@7@8@9@10@11@12@13@14@15@16@17@xxRI@xQTYxxxxxx@20@21@22@23";
rule = "1@2@3@PPN@5@6@7@8@9@10@11@12@13@14@15@16@xxRI@xxQTYxxxxxx@19@20@21@22@23@@";
rule = "1;2;3;PN;QTY;6";
rule = "PN|RI|3|4|5|6|7|8|9|10|11|12|13|14|15|QTYxxx|17";
rule="1@2@3@PPN@5@6@7@8@9@10@xxPRODATEyyyyMMdd@xxxEXPDATEyyyyMMdd@13@14@15@16@VSP@3SRI@xQTYxxxxxx@20@21@22@23";
BarcodeRule br = BarcodeRule.newRule(rule);
//String codeStr = "[)>@06@12S0002@P5292001000@1P1690215@31P1690215@12V527973628@10VCHN-YANTAI@2P@20P@6D20170626@14D20171223@30PY@ZN@K0@16K0@V815@3SB370000000EZZ@Q500GRM000@20T1@1TMT72543954@2T@1Z@@";
String codeStr = "[)>@06@12S001@P8909000244@1P@31P@10V@2P@20P@6D@14D@30PY@Z @K@16K@V000000@3SA20180913-01554@Q03000NAR000@20T1@1TH000000000B172621166@Q03000@2T@1Z@@\n" +
"\n" +
"1@2@3@PPN@5@6@7@8@9@10@11@12@13@14@15@16@17@xxRI@xQTYxxxxxx@20@21@22@23@@";
//codeStr = "[)>@06@12S0002@P8638516894@1PB025008SS5107-04@31P8638516894@12V865379333@10VCHN-WUXI@2PV01@20P#QX0#PROBIMER77MA-1@6D20180214@14D20180805@30PY@ZN@K55158066@16K0@V97198306@3SS500000570451@Q20NAR000@20T1@1T35H-0618@2T@1ZTRIPOD@@";
codeStr = "[)>@06@12S001@P8909000244@1P@31P@10V@2P@20P@6D@14D@30PY@Z @K@16K@V000000@3SA20180913-01554@Q03000NAR000@20T1@1TH000000000B172621166@Q03000@2T@1Z@@";
codeStr = ")》@06@120S002@P8908018028@1PBLM18PG121SH1D@31PBLM18PG121SH1D@12V690588124@10VJPN-AM@2P@20P@6D20190805@14D20210205@30PY@Z1@K0@16K0@V97294419@3SS191908055X1Z@Q4000NAR000@20T1@1TAM961458E@2T@1Z@@";
// codeStr = "=1+0x0-0x0=A0002";
Barcode b = br.toCodeBean(codeStr).getBarcode();
System.out.println("PN:"+b.getPartNumber());
String str = "3SS191908055X1Z";
System.out.println(str.substring(str.length() - 13));
//System.out.println(getYellowLightMinute("28=2=blue;33=1=green;statuslight=15=30"));
}
/**
* 状态灯显示黄灯的分钟数
*/
public static int getYellowLightMinute(String lightMemo){
if(!Strings.isNullOrEmpty(lightMemo)){
String[] lineInfos = lightMemo.split(";");
for(String lineInfo : lineInfos){
if(!Strings.isNullOrEmpty(lineInfo)){
String[] lightInfos = lineInfo.split("=");
if("statusLight".equalsIgnoreCase(lightInfos[0])){
return Integer.valueOf(lightInfos[2]);
}
}
}
}
return 20;
//
// String rule = "1@2@3@PN@5@6@7@8@9@10@xxPRODATEyyyyMMdd@xxxEXPDATEyyyyMMdd@13@14@15@16@17@RI@xQTYxxxxxx@20@21@22@23";
// rule = "1@2@3@PPN@5@6@7@8@9@10@xxPRODATEyyyyMMdd@xxxEXPDATEyyyyMMdd@13@14@15@16@17@RI@xQTYxxxxxx@20@21@22@23";
// rule = "1@2@3@PPN@5@6@7@8@9@10@11@12@13@14@15@16@17@xxRI@xQTYxxxxxx@20@21@22@23";
// rule = "1@2@3@PPN@5@6@7@8@9@10@11@12@13@14@15@16@xxRI@xxQTYxxxxxx@19@20@21@22@23@@";
// rule = "1;2;3;PN;QTY;6";
// rule = "PN|RI|3|4|5|6|7|8|9|10|11|12|13|14|15|QTYxxx|17";
// rule="1@2@3@PPN@5@6@7@8@9@10@xxPRODATEyyyyMMdd@xxxEXPDATEyyyyMMdd@13@14@15@16@VSP@3SRI@xQTYxxxxxx@20@21@22@23";
// BarcodeRule br = BarcodeRule.newRule(rule);
//
// //String codeStr = "[)>@06@12S0002@P5292001000@1P1690215@31P1690215@12V527973628@10VCHN-YANTAI@2P@20P@6D20170626@14D20171223@30PY@ZN@K0@16K0@V815@3SB370000000EZZ@Q500GRM000@20T1@1TMT72543954@2T@1Z@@";
//
// String codeStr = "[)>@06@12S001@P8909000244@1P@31P@10V@2P@20P@6D@14D@30PY@Z @K@16K@V000000@3SA20180913-01554@Q03000NAR000@20T1@1TH000000000B172621166@Q03000@2T@1Z@@\n" +
// "\n" +
// "1@2@3@PPN@5@6@7@8@9@10@11@12@13@14@15@16@17@xxRI@xQTYxxxxxx@20@21@22@23@@";
// //codeStr = "[)>@06@12S0002@P8638516894@1PB025008SS5107-04@31P8638516894@12V865379333@10VCHN-WUXI@2PV01@20P#QX0#PROBIMER77MA-1@6D20180214@14D20180805@30PY@ZN@K55158066@16K0@V97198306@3SS500000570451@Q20NAR000@20T1@1T35H-0618@2T@1ZTRIPOD@@";
// codeStr = "[)>@06@12S001@P8909000244@1P@31P@10V@2P@20P@6D@14D@30PY@Z @K@16K@V000000@3SA20180913-01554@Q03000NAR000@20T1@1TH000000000B172621166@Q03000@2T@1Z@@";
// codeStr = ")》@06@120S002@P8908018028@1PBLM18PG121SH1D@31PBLM18PG121SH1D@12V690588124@10VJPN-AM@2P@20P@6D20190805@14D20210205@30PY@Z1@K0@16K0@V97294419@3SS191908055X1Z@Q4000NAR000@20T1@1TAM961458E@2T@1Z@@";
// codeStr = "[)>@06@12S0002@P1267360241@1P@31P@12V71862569@10VPHL-MADUYA@2P@20P@6D20201026@14D20221105@30PY@ZN@K@16K@V0000002262@3SS000002493953@Q5000NAR000@20T1@1T204413664H@2T@1Z@@";
//// codeStr = "=1+0x0-0x0=A0002";
// Barcode b = br.toCodeBean(codeStr).getBarcode();
// System.out.println("SP:"+b.getProvider());
// String str = "3SS191908055X1Z";
// System.out.println(str.substring(str.length() - 13));
String memo = "2=2=yellow;1=1=green;statusLight=10=30";
}
}
......@@ -147,6 +147,18 @@ public final class DateUtil {
return date0.after(date1)? date0 : date1;
}
/**
* 日期+天数
* @param date
* @param days
* @return
*/
public static Date addDays(Date date, int days){
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DAY_OF_YEAR, days);
return c.getTime();
}
public static class Req{
......@@ -206,10 +218,10 @@ public final class DateUtil {
// csvWriter.writeRecord(new String[]{"AE","B","C","D"});
// csvWriter.flush();
// csvWriter.close();
String doors = "3-2|";
List<String> theDoorOpened = Lists.newArrayList(doors.split("\\|"));
if(theDoorOpened.contains("3-2")){
System.out.println("------");
};
// String doors = "3-2|";
// List<String> theDoorOpened = Lists.newArrayList(doors.split("\\|"));
// if(theDoorOpened.contains("3-2")){
// System.out.println("------");
// };
}
}
......@@ -40,7 +40,7 @@ public class HttpHelper {
return postJson(url,params,null, "http");
}
public static String get(String url,HashMap<String, String> params) throws ApiException {
public static String get(String url,Map<String, String> params) throws ApiException {
return get(url,params,null, "http");
}
......@@ -212,7 +212,7 @@ public class HttpHelper {
* 请求协议 "http" / "https"
* @return 服务器响应的请求结果
*/
public static String get(String url, HashMap<String, String> params,
public static String get(String url, Map<String, String> params,
HashMap<String, String> cookies, String protocol) throws ApiException {
// if (protocol.equalsIgnoreCase("https")) {
// Protocol httpsProtocol = new Protocol("https", new SecureProtocolSocketFactoryImpl(), 443);
......
......@@ -22,6 +22,7 @@ public class PLATE_SIZE {
//TRAY盘
public static PLATE_SIZE TRAY13_H75 = new PLATE_SIZE("TRAY 盘", 320, 75);
public static PLATE_SIZE TRAY13_H105 = new PLATE_SIZE("TRAY 盘", 320, 105);
public static PLATE_SIZE R15_H12 = new PLATE_SIZE(15, 12);
public static PLATE_SIZE R15_H16 = new PLATE_SIZE(15, 16);
public static PLATE_SIZE R15_H24 = new PLATE_SIZE(15, 24);
public static PLATE_SIZE R15_H32 = new PLATE_SIZE(15, 32);
......@@ -34,7 +35,7 @@ public class PLATE_SIZE {
*/
public static PLATE_SIZE CUSTOMER = new PLATE_SIZE("自定义", -1, -1);
private static List<PLATE_SIZE> all = Lists.newArrayList(R7_H8, R7_H15, R13_H12, R13_H16, R13_H24, R13_H32, TRAY13_H75, TRAY13_H105, R15_H16, R15_H16, R15_H24, R15_H32, W500_H70, CUSTOMER);
private static List<PLATE_SIZE> all = Lists.newArrayList(R7_H8, R7_H15, R13_H12, R13_H16, R13_H24, R13_H32, TRAY13_H75, TRAY13_H105, R15_H12,R15_H16, R15_H16, R15_H24, R15_H32, W500_H70, CUSTOMER);
public static List<PLATE_SIZE> values() {
return all;
......
......@@ -18,8 +18,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* Created by kangmor on 2016/4/24.
......@@ -79,7 +78,30 @@ public class BoxChartController extends BaseController {
}
// String cid = request.getParameter("cid");
// if(cid == null){
request.setAttribute("allStorage",dataCache.getAllStorage().values());
String clientIp = request.getRemoteHost();
Storage clientShelf = null;
List<Storage> allStorage = new ArrayList<>();
for (Storage storage : dataCache.getAllStorage().values()) {
if(storage.getClientIp().equals(clientIp)){
//如果找到一致的IP,就只显示当前的料架
clientShelf = storage;
break;
}
allStorage.add(storage);
}
if(clientShelf != null){
allStorage = new ArrayList<>();
allStorage.add(clientShelf);
}
allStorage.sort(new Comparator<Storage>() {
@Override
public int compare(Storage o1, Storage o2) {
return o1.getName().compareTo(o2.getName());
}
});
request.setAttribute("allStorage",allStorage);
return "storage/allBoxView";
// }
// return "storage/boxView";
......@@ -177,6 +199,25 @@ public class BoxChartController extends BaseController {
*/
return results;
}
@RequestMapping(value = "/service/store/inactionAlarmMsg")
@ResponseBody
public String inactionCount(HttpServletRequest request) {
int day = dataCache.getSettings().getInactionDay();
String cid = request.getParameter("cid");
Storage storage = dataCache.getStorage(cid);
if(day <=0 || storage == null){
return "";
}
List<String> storageIdList = new ArrayList<>();
storageIdList.add(storage.getId());
int count = storagePosManager.countInaction(storageIdList,day,Lists.<String>newArrayList());
if(count > 0){
String msg = getText("alarm.inaction.msg",new String[]{day+"",count+""}, request.getLocale(), day + "天前呆滞物料数量为["+count+"],请及时处理");
return msg;
}
return "";
}
}
......@@ -6,7 +6,9 @@ import com.myproject.bean.search.PageList;
import com.myproject.bean.search.StoragePosFindCriteria;
import com.myproject.exception.ValidateException;
import com.myproject.manager.IStoragePosManager;
import com.myproject.util.DateUtil;
import com.myproject.util.StorageConstants;
import com.myproject.webapp.controller.webService.DataCache;
import com.myproject.webapp.controller.webService.ITaskService;
import org.displaytag.properties.SortOrderEnum;
import org.displaytag.tags.TableTagParameters;
......@@ -35,6 +37,9 @@ public class StoragePosFindController extends BaseSearchController {
@Autowired
protected ITaskService taskService;
@Autowired
protected DataCache dataCache;
public final static String SUCCESS_VIEW = "component/storagePosFind";
@RequestMapping("/component/storagePosFind*")
......@@ -43,6 +48,7 @@ public class StoragePosFindController extends BaseSearchController {
String name = searchCriteria.getName();
Criteria baseCriteria = new Criteria();
baseCriteria.and("used").is(true);
baseCriteria.and("barcode.barcode").exists(true);
String providerNumber = searchCriteria.getProviderNumber();
if(!Strings.isNullOrEmpty(providerNumber)){
......@@ -88,6 +94,13 @@ public class StoragePosFindController extends BaseSearchController {
request.setAttribute("expire",expire);
}
int inactionDay = dataCache.getSettings().getInactionDay();
if(inactionDay > 0){
Date inactionDate = DateUtil.addDays(new Date(), -inactionDay);
request.setAttribute("inactionDate",inactionDate);
}
String lockId = request.getParameter("lockId");
if(!Strings.isNullOrEmpty(lockId)){
......
......@@ -3,12 +3,14 @@ package com.myproject.webapp.controller.storage;
import com.google.common.base.Strings;
import com.myproject.bean.form.Message;
import com.myproject.bean.update.Barcode;
import com.myproject.bean.update.Storage;
import com.myproject.bean.update.StoragePos;
import com.myproject.dao.mongo.IBarcodeDao;
import com.myproject.exception.ValidateException;
import com.myproject.manager.IBarcodeManager;
import com.myproject.manager.IStoragePosManager;
import com.myproject.util.StorageConstants;
import com.myproject.webapp.controller.webService.DataCache;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
......@@ -31,6 +33,9 @@ public class StoragePosUpdateController extends BaseUpdateController {
@Autowired
private IBarcodeManager barcodeManager;
@Autowired
private DataCache dataCache;
private final static String UPDATE_VIEW = "storage/storagePosUpdate";
@RequestMapping("/storage/getStoragePos")
......@@ -71,12 +76,17 @@ public class StoragePosUpdateController extends BaseUpdateController {
if(barcode != null){
log.info("清理库位["+storagePos.getPosName()+"]中的库存"+barcode.getBarcode());
barcode = barcodeManager.findByBarcode(barcode.getBarcode());
barcode.setPosName("");
barcodeManager.save(barcode);
storagePos.setBarcode(null);
storagePos.setUsed(false);
storagePosManager.save(storagePos);
barcode = barcodeManager.findByBarcode(barcode.getBarcode());
barcode.setPosName("");
barcodeManager.save(barcode);
Storage storage = dataCache.getStorageById(storagePos.getId());
dataCache.updateStorage(storage);
}
return "";
......
package com.myproject.webapp.controller.storage;
import com.myproject.bean.search.BaseSearchCriteria;
import com.myproject.bean.search.PageList;
import com.myproject.bean.search.StorageSearchCriteria;
import com.myproject.bean.update.Storage;
import com.myproject.bean.utils.StatusBean;
import com.myproject.dao.mongo.IStorageDao;
import com.myproject.manager.IStorageManager;
import com.myproject.webapp.controller.webService.ITaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
......@@ -11,6 +16,8 @@ import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
/**
......@@ -21,7 +28,10 @@ import java.util.regex.Pattern;
public class StorageSearchController extends BaseSearchController {
@Autowired
protected IStorageManager storageManager;
protected IStorageDao storageDao;
@Autowired
protected ITaskService taskService;
public final static String SUCCESS_VIEW = "storage/storageSearch";
......@@ -29,7 +39,22 @@ public class StorageSearchController extends BaseSearchController {
public String onSubmit(@ModelAttribute("searchCriteria") StorageSearchCriteria searchCriteria) {
Query query = new Query();
query = getNameQuery(searchCriteria.getName(), query);
searchCriteria.setPageList(storageManager.findByQuery(query, searchCriteria.getPageList()));
PageList pageList = searchCriteria.getPageList();
List<Storage> storageList = storageDao.findByQuery(query, pageList.getPageNumber(), pageList.getObjectsPerPage());
List<Storage> resultList = new ArrayList<>();
for (Storage storage : storageList) {
StatusBean statusBean = taskService.getStatus(storage.getCid());
if(statusBean != null){
storage.setClientIp(statusBean.getClientIp());
}
resultList.add(storage);
}
pageList.setList(storageList);
pageList.setFullListSize(storageDao.countByQuery(query));
searchCriteria.setPageList(pageList);
return SUCCESS_VIEW;
}
......@@ -48,7 +73,7 @@ public class StorageSearchController extends BaseSearchController {
return new StorageSearchCriteria();
}
public void setStorageManager(IStorageManager storageManager) {
this.storageManager = storageManager;
public void setStorageDao(IStorageDao storageDao) {
this.storageDao = storageDao;
}
}
package com.myproject.webapp.controller.storage;
import com.google.common.base.Function;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.myproject.bean.CodeBean;
import com.myproject.bean.czshelf.Ecall;
import com.myproject.bean.czshelf.RemainingTime;
import com.myproject.bean.czshelf.Splice;
import com.myproject.bean.json.StepBean;
import com.myproject.bean.czshelf.*;
import com.myproject.bean.update.Barcode;
import com.myproject.bean.update.Storage;
import com.myproject.bean.update.StoragePos;
import com.myproject.dao.czshelf.OracleDbDao;
import com.myproject.dao.czshelf.SzShelfDbDao;
import com.myproject.exception.ApiException;
import com.myproject.exception.ValidateException;
import com.myproject.manager.IBarcodeManager;
import com.myproject.manager.IStoragePosManager;
import com.myproject.model.User;
import com.myproject.service.UserManager;
import com.myproject.util.DateUtil;
import com.myproject.util.BoshApiUtil;
import com.myproject.util.HttpHelper;
import com.myproject.util.StorageConstants;
import com.myproject.webapp.controller.webService.DataCache;
......@@ -39,6 +32,7 @@ import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
@Controller
......@@ -66,11 +60,11 @@ public class SzShelfController extends BaseController {
@Autowired
protected IBarcodeManager barcodeManager;
@Autowired
protected SzShelfDbDao szShelfDbDao;
//@Autowired
//protected SzShelfDbDao szShelfDbDao;
@Autowired
protected OracleDbDao oracleDbDao;
//@Autowired
//protected OracleDbDao oracleDbDao;
@Autowired
protected UserManager userManager;
......@@ -79,7 +73,6 @@ public class SzShelfController extends BaseController {
protected Date lastCheckDate = null;
/**
* 加载任务
*/
......@@ -87,8 +80,8 @@ public class SzShelfController extends BaseController {
if(!isLoadDataThreadStart.get()){
isLoadDataThreadStart.set(true);
log.info("开启从BoShi 数据库加载数据线程");
Ecall ecall = oracleDbDao.findEcall("");
log.info("加载 ecall:" + ecall);
//Ecall ecall = oracleDbDao.findEcall("");
//log.info("加载 ecall:" + ecall);
scheduledThreadPool.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
......@@ -100,35 +93,43 @@ public class SzShelfController extends BaseController {
//开启发送到 Ministock 任务
sendToMiniStock();
}
},0,2,TimeUnit.SECONDS);
},0,10,TimeUnit.SECONDS);
}
}
private void sendToMiniStock(List<StoragePos> posListToSend) throws Exception {
String url = "http://10.179.244.77:8076/Service/InOffline.svc/GetLableInfo";
for (StoragePos pos: posListToSend) {
log.info("准备发送" + pos.getBarcode().getFullCodeStr() + "到ministock");
HashMap<String,String> params = new HashMap<>();
Storage storage = dataCache.getStorageById(pos.getStorageId());
params.put("UserID",storage.getName()+"-op");
Barcode barcode = pos.getBarcode();
String location = "line"+barcode.getLineInfoStr() + "-" + pos.getPosName();
params.put("Location",location);
String fullCodeStr = pos.getBarcode().getFullCodeStr();
if(Strings.isNullOrEmpty(fullCodeStr)){
fullCodeStr = pos.getBarcode().getBarcode();
}
fullCodeStr.replaceAll("#","");
params.put("LableInfo",fullCodeStr);
HttpHelper.get(url,params);
String ministcokApi = dataCache.getSettings().getOutNotifyApi();
//String url = "http://10.179.244.77:8076/Service/InOffline.svc/GetLableInfo";
if(!Strings.isNullOrEmpty(ministcokApi)){
for (StoragePos pos: posListToSend) {
log.info("准备发送" + pos.getBarcode().getFullCodeStr() + "到ministock");
HashMap<String,String> params = new HashMap<>();
Storage storage = dataCache.getStorageById(pos.getStorageId());
params.put("UserID",storage.getName()+"-op");
Barcode barcode = pos.getBarcode();
String location = "line"+barcode.getLineInfoStr() + "-" + pos.getPosName();
params.put("Location",location);
params.put("Qty",barcode.getAmount()+"");
String fullCodeStr = pos.getBarcode().getFullCodeStr();
if(Strings.isNullOrEmpty(fullCodeStr)){
fullCodeStr = pos.getBarcode().getBarcode();
}
fullCodeStr.replaceAll("#","");
params.put("LableInfo",fullCodeStr);
HttpHelper.get(ministcokApi,params);
barcode.setMiniStock(true);
pos.setBarcode(barcode);
storagePosManager.save(pos);
log.info("发送"+location+"["+fullCodeStr+"]到 MiniStock 成功");
barcode.setMiniStock(true);
pos.setBarcode(barcode);
storagePosManager.save(pos);
log.info("发送"+location+"["+fullCodeStr+"]到 MiniStock 成功");
}
}else{
log.info("发送到Ministcok失败,未配置地址");
}
}
private void sendToMiniStock(){
......@@ -151,9 +152,11 @@ public class SzShelfController extends BaseController {
lastCheckDate = c.getTime();
}
//最新的接料信息
List<Splice> spliceList = szShelfDbDao.findSpliceAfterTime(lastCheckDate);
//List<Splice> spliceList = szShelfDbDao.findSpliceAfterTime(lastCheckDate);
String ecallServerAddress = dataCache.getSettings().getInNotifyApi();
List<ApiSplice> spliceList = BoshApiUtil.getSpliceList(ecallServerAddress);
lastCheckDate = new Date();
for (Splice splice : spliceList) {
for (ApiSplice splice : spliceList) {
List<StoragePos> lockPoses = storagePosManager.findLockPos(splice.getKey());
if(!lockPoses.isEmpty()) {
StoragePos lockPos = lockPoses.get(0);
......@@ -166,7 +169,7 @@ public class SzShelfController extends BaseController {
log.info("查找到接料信息:"+ splice.getKey() + " ,灭灯["+lockPos.getPosName()+"], 接料 Reelbar:" + splice.getReelbar()+ " 出库条码:"+ lockBarcode);
//灭灯
Storage storage = dataCache.getStorageById(lockPos.getStorageId());
opPosLight("close", storage, lockPos, "");
closeLight(storage, lockPos.getPosName());
taskService.addTaskToFinished(lockPos,null,splice.getLineNo()+"-op");
} else{
......@@ -180,34 +183,30 @@ public class SzShelfController extends BaseController {
StoragePos pos = storagePosManager.getByBarcode(reelId);
if(pos != null){
log.info("物料[ "+reelId+" ]有接料信息"+splice.getKey()+",但还在库存中,直接从["+pos.getPosName()+"]出库");
// Storage storage = dataCache.getStorageById(pos.getStorageId());
// opPosLight("close", storage, pos, "");
taskService.addTaskToFinished(pos,null,splice.getLineNo()+"-Splice");
}else{
log.info("未找到接料信息息"+splice.getKey()+"对应的料物:" + splice.getReelbar());
//log.info("未找到接料信息息"+splice.getKey()+"对应的料物:" + splice.getReelbar());
}
}
}
}
private Map<String,RemainingTime> handleShowLight(){
List<RemainingTime> remainingTimeList = szShelfDbDao.findRemainingTime();
private Map<String,RemainingTime> handleShowLight(List<RemainingTime> remainingTimeList){
Map<String,RemainingTime> newMap = Maps.newConcurrentMap();
for (RemainingTime newRemainingTime : remainingTimeList) {
int remainMinute = newRemainingTime.getRemainingTime();
if(remainMinute <= 0 ){
continue;
}
RemainingTime existRemainingTime = showMap.get(newRemainingTime.getKey());
if (existRemainingTime == null) {
log.info("加载到新的发料数据[" + newRemainingTime.getKey() + "] 发料时间为:"+newRemainingTime.getSendTime()+"剩余时间:" + newRemainingTime.getRemainingTime());
}
if(remainMinute > 0 ){
RemainingTime existRemainingTime = showMap.get(newRemainingTime.getKey());
if (existRemainingTime == null) {
log.info("加载到新的发料数据[" + newRemainingTime.getKey() + "] tableNo="+newRemainingTime.getTableNo()+" 剩余时间" + newRemainingTime.getRemainingTime());
}
//只要查询到的且在30 分钟以内,进行亮灯
Storage storage = dataCache.getAccShelf(newRemainingTime.getLineNo(), newRemainingTime.getTableNo());
if (storage != null) {
String statusLightColor = "";
//只要查询到的且在30 分钟以内,进行亮灯
Storage storage = dataCache.getAccShelf(newRemainingTime.getLineNo(), newRemainingTime.getTableNo());
if (storage != null) {
String statusLightColor = "";
// List<Splice> spliceList = szShelfDbDao.findSpliceAfterSend(newRemainingTime);
// for(Splice splice : spliceList){
// if(splice.getKey().equals(newRemainingTime.getKey())){
......@@ -215,87 +214,90 @@ public class SzShelfController extends BaseController {
// continue;
// }
// }
//判断是否已经接料,如果
int yellowLightMinute = storage.getYellowLightMinute();
if (remainMinute <= yellowLightMinute) {
//小于30 分钟,需要亮黄灯
statusLightColor = "yellow";
int redLightMinute = storage.getRedLightMiniute();
if (remainMinute <= redLightMinute) {
//小于此时间需要亮红灯
statusLightColor = "red";
//判断是否已经接料,如果
int yellowLightMinute = storage.getYellowLightMinute();
if (remainMinute <= yellowLightMinute) {
//小于30 分钟,需要亮黄灯
statusLightColor = "yellow";
int redLightMinute = storage.getRedLightMiniute();
if (remainMinute <= redLightMinute) {
//小于此时间需要亮红灯
statusLightColor = "red";
}
}
}
if (!Strings.isNullOrEmpty(statusLightColor)) {
//需要亮灯
StoragePos lockPos = null;
List<StoragePos> lockPoses = storagePosManager.findLockPos(newRemainingTime.getKey());
if (lockPoses.isEmpty()) {
//未锁定
String tableNo = "";
if(newRemainingTime.getTableNo() == 1){
tableNo = "F";
}else{
tableNo = "R";
}
String lineInfoStr = newRemainingTime.getLineNo() + "-" + tableNo;
lockPos = storagePosManager.findNoLockPartnumerPos(storage.getId(), newRemainingTime.getPartNo(),lineInfoStr);
if (lockPos != null) {
try {
//有对应物料,进行库位锁定
Barcode barcode = lockPos.getBarcode();
barcode.setLockId(newRemainingTime.getKey());
barcode.setLockName(newRemainingTime.getKey());
lockPos.setBarcode(barcode);
log.info("锁定库位"+lockPos.getPosName()+"["+ barcode.getBarcode()+ "] " + barcode.getPartNumber() + " LineInfo:"+lineInfoStr);
storagePosManager.save(lockPos);
//锁定成功,亮灯
} catch (Exception e) {
if (!Strings.isNullOrEmpty(statusLightColor)) {
//需要亮灯
StoragePos lockPos = null;
List<StoragePos> lockPoses = storagePosManager.findLockPos(newRemainingTime.getKey());
if (lockPoses.isEmpty()) {
//未锁定
String tableNo = "";
if(newRemainingTime.getTableNo() == 1){
tableNo = "F";
}else{
tableNo = "R";
}
String lineInfoStr = newRemainingTime.getLineNo() + "-" + tableNo;
lockPos = storagePosManager.findNoLockPartnumerPos(storage.getId(), newRemainingTime.getPartNo(),lineInfoStr);
if (lockPos != null) {
try {
//有对应物料,进行库位锁定
Barcode barcode = lockPos.getBarcode();
barcode.setLockId(newRemainingTime.getKey());
barcode.setLockName(newRemainingTime.getKey());
lockPos.setBarcode(barcode);
log.info("锁定库位"+lockPos.getPosName()+"["+ barcode.getBarcode()+ "] " + barcode.getPartNumber() + " LineInfo:"+lineInfoStr);
storagePosManager.save(lockPos);
//锁定成功,亮灯
} catch (Exception e) {
}
} else {
//料架上无料,无法锁定
}
} else {
//料架上无料,无法锁定
//已经锁定,亮灯
lockPos = lockPoses.get(0);
}
} else {
//已经锁定,亮灯
lockPos = lockPoses.get(0);
}
if (lockPos != null) {
String colorStr = storage.getLightColor(newRemainingTime.getLineNo());
if ("red".equalsIgnoreCase(statusLightColor)) {
colorStr = colorStr + "=twinkle";
}
newRemainingTime.setShelfLoc(lockPos.getPosName());
newRemainingTime.setColorClass(statusLightColor);
newRemainingTime.setLockPos(lockPos);
boolean needLight = true;
StoragePos lastPutinPos = lastPutinPosMap.get(storage.getCid());
if(lastPutinPos != null && lastPutinPos.getPosName().equals(lockPos.getPosName())){
long now = System.currentTimeMillis();
//入库完成10 秒后再亮灯
if(now < lockPos.getCanCheckOutTime()){
needLight = false;
if (lockPos != null) {
String colorStr = storage.getLightColor(newRemainingTime.getLineNo());
if ("red".equalsIgnoreCase(statusLightColor)) {
colorStr = colorStr + "=twinkle";
}
newRemainingTime.setShelfLoc(lockPos.getPosName());
newRemainingTime.setColorClass(statusLightColor);
newRemainingTime.setLockPos(lockPos);
boolean needLight = true;
StoragePos lastPutinPos = lastPutinPosMap.get(storage.getCid());
if(lastPutinPos != null && lastPutinPos.getPosName().equals(lockPos.getPosName())){
long now = System.currentTimeMillis();
//入库完成10 秒后再亮灯
if(now < lockPos.getCanCheckOutTime()){
needLight = false;
}
}
if(needLight){
opPosLight("open", storage, lockPos, colorStr);
}
else{
log.info("库位["+lockPos.getPosName()+"]入库灯未灭,暂时不亮出库灯");
}
}else{
//小于10 分钟,且料架无料,红色提醒
if ("red".equalsIgnoreCase(statusLightColor)) {
newRemainingTime.setColorClass(statusLightColor);
}
}
if(needLight){
opPosLight("open", storage, lockPos, colorStr);
}
else{
log.info("库位["+lockPos.getPosName()+"]入库灯未灭,暂时不亮出库灯");
}
}else{
//小于30 分钟,且料架无料,红色提醒
newRemainingTime.setColorClass("red");
}
}
}
String key = newRemainingTime.getKey();
newMap.put(key, newRemainingTime);
}
......@@ -309,7 +311,7 @@ public class SzShelfController extends BaseController {
for(String key : keys){
if(newMap.get(key) == null){
//换型或者已经接过料
RemainingTime r = showMap.get(key);
//RemainingTime r = showMap.get(key);
List<StoragePos> lockPoses = storagePosManager.findLockPos(key);
if (lockPoses.isEmpty()) {
//未锁定是已经接过料了的
......@@ -327,8 +329,7 @@ public class SzShelfController extends BaseController {
}
log.info("发料信息:"+ key + " 已不存在,灭灯["+pos.getPosName()+"]");
opPosLight("close", storage, pos, "");
closeLight(storage,pos.getPosName());
}
}
}
......@@ -337,43 +338,19 @@ public class SzShelfController extends BaseController {
* 从博世数据库中加载发料和接料数据,并执行亮灯灭灯操作
*/
private void loadDataFromDb(){
Map<String,RemainingTime> newShowMap = handleShowLight();
//查询接料信息
handleSplice();
handleChangeType(newShowMap, showMap);
showMap = newShowMap;
}
/**
* 操作库位灯(开灯,或关灯),如果有关联的合并库位,一起开关灯
* @param opKey
* @param storage
* @param pos
* @param colorStr
*/
private void opPosLight(String opKey, Storage storage, StoragePos pos, String colorStr){
List<String> relatedPosNames = pos.getMergePosList();
if(relatedPosNames == null || relatedPosNames.isEmpty()){
relatedPosNames = new ArrayList<>();
relatedPosNames.add(pos.getPosName());
log.info("操作库位["+pos.getPosName()+"]" + opKey);
}else{
log.info("操作合并库位["+pos.getPosName()+"]" + opKey);
}
for(String posName : relatedPosNames){
String opStr = posName;
if(!Strings.isNullOrEmpty(colorStr)){
opStr =opStr+ "=" + colorStr;
}
StorageDataController.appendOp(storage.getCid(), opKey , opStr);
log.info(opKey + " : " + opStr);
}
//List<RemainingTime> remainingTimeList = szShelfDbDao.findRemainingTime();
String ecallServerAddress = dataCache.getSettings().getInNotifyApi();
List<RemainingTime> remainingTimeList = BoshApiUtil.getRemainingList(ecallServerAddress);
Map<String,RemainingTime> newShowMap = handleShowLight(remainingTimeList);
//查询接料信息
handleSplice();
handleChangeType(newShowMap, showMap);
showMap = newShowMap;
}
@RequestMapping("/storage/accshelf/{cid}")
@RequestMapping("/accshelf/{cid}")
public String cabinetView(@PathVariable String cid, HttpServletRequest request){
request.getSession().setAttribute("show",cid);
Storage storage = dataCache.getStorage(cid);
......@@ -453,33 +430,29 @@ public class SzShelfController extends BaseController {
String cid = request.getParameter("cid");
Storage storage = dataCache.getStorage(cid);
List<RemainingTime> list = new ArrayList<>();
RemainingTime r = new RemainingTime();
// r.setLineNo(28);
// r.setTableNo(1);
// r.setSlot(1);
// r.setSlotNum(1);
// r.setSubslot(1);
// list.add(r);
// RemainingTime r1 = new RemainingTime();
// r1.setLineNo(28);
// r1.setTableNo(2);
// r1.setSlot(2);
// r1.setSlotNum(2);
// r1.setSubslot(2);
// list.add(r1);
if(storage != null){
boolean statusLightTwinkle = false;
for (RemainingTime remainingTime : showMap.values()) {
//把时间太长的清除掉
if(remainingTime.getRemainingTime() <= 0){
continue;
}
//if(remainingTime.getRemainingTime() <= 0){
// continue;
//}
if(storage.needShow(remainingTime.getLineNo(), remainingTime.getTableNo())){
if(remainingTime.getRemainingTime() <= storage.getYellowLightMinute()){
//if(remainingTime.getRemainingTime() <= storage.getYellowLightMinute()){
//小于等于亮黄灯的范围才显示
list.add(remainingTime);
//}
//没有需要物料时,灯塔要红色闪烁
if(remainingTime.getColorClass().equalsIgnoreCase("red") && remainingTime.getLockPos() == null){
statusLightTwinkle = true;
}
}
}
if(statusLightTwinkle){
StorageDataController.appendOp(cid,"statusLight", "red=twinkle");
}
list.sort(new Comparator<RemainingTime>() {
@Override
......@@ -542,19 +515,20 @@ public class SzShelfController extends BaseController {
}
}
private static Map<String,String> autoClosePosMap = new ConcurrentHashMap<>();
/**
* 开灯, 等6秒后关闭
*/
private void openAndCloseLights(final Storage storage, final List<String> posNameList, final long delayCloseTime, String color){
private boolean openAndCloseLights(final Storage storage, final List<String> posNameList, final long delayCloseTime, String color){
final String cid = storage.getCid();
if(posNameList == null ){
return;
return false;
}
for (final String posName : posNameList) {
String lightOnStr = posName + "=" + color;
StorageDataController.appendOp(cid,"open", lightOnStr);
log.info("点亮库位:" + lightOnStr);
final String opStr = posName + "=" + color;
openLight(cid,posName,opStr);
autoClosePosMap.put(posName,opStr);
//5秒后灭灯
Thread closeTask = new Thread(new Runnable() {
......@@ -562,16 +536,61 @@ public class SzShelfController extends BaseController {
public void run() {
try {
Thread.sleep(delayCloseTime);
log.info(storage.getName()+"["+cid+"]库位["+posName+"]灭灯");
StorageDataController.appendOp(cid,"close", posName);
String autoClosePosName = autoClosePosMap.get(posName);
if(autoClosePosName != null){
closeLight(storage,posName);
}
}catch (Exception e){
log.error(storage.getName()+"["+cid+"]库位["+posName+"]自动灭灯出错",e);
}
}
});
closeTask.start();
}
return true;
}
private void openLight(String cid, String posName, String opStr){
StorageDataController.appendOp(cid,"open", opStr);
//openLightPosMap.put(posName,opStr);
autoClosePosMap.remove(posName);
log.info("点亮库位:" + opStr);
}
private void closeLight(Storage storage, String posName){
log.info(storage.getName()+"["+storage.getCid()+"]库位["+posName+"]灭灯");
StorageDataController.appendOp(storage.getCid(),"close", posName);
autoClosePosMap.remove(posName);
//openLightPosMap.remove(posName);
}
/**
* 操作库位灯(开灯,或关灯),如果有关联的合并库位,一起开关灯
* @param opKey
* @param storage
* @param pos
* @param colorStr
*/
private void opPosLight(String opKey, Storage storage, StoragePos pos, String colorStr){
List<String> relatedPosNames = pos.getMergePosList();
if(relatedPosNames == null || relatedPosNames.isEmpty()){
relatedPosNames = new ArrayList<>();
relatedPosNames.add(pos.getPosName());
log.info("操作库位["+pos.getPosName()+"]" + opKey);
}else{
log.info("操作合并库位["+pos.getPosName()+"]" + opKey);
}
for(String posName : relatedPosNames){
if(opKey.equalsIgnoreCase("close")){
closeLight(storage,posName);
}else{
String opStr = posName;
if(!Strings.isNullOrEmpty(colorStr)){
opStr =opStr+ "=" + colorStr;
}
openLight(storage.getCid(), posName, opStr);
}
}
}
//上一次入库的库位,用于扫下一条码时灭灯
......@@ -588,8 +607,8 @@ public class SzShelfController extends BaseController {
StoragePos lastPutinPos= lastPutinPosMap.get(cid);
Storage storage = dataCache.getStorage(cid);
if(lastPutinPos != null){
log.info("扫码时关闭上一个库位:"+ lastPutinPos.getPosName());
opPosLight("close", storage, lastPutinPos, "");
log.info("["+cid+"]扫码时关闭上一个库位:"+ lastPutinPos.getPosName());
closeLight(storage,lastPutinPos.getPosName());
}
if(!Strings.isNullOrEmpty(code)){
code = code.replace("。",".");
......@@ -613,11 +632,14 @@ public class SzShelfController extends BaseController {
return getText("shelf.msg.alreadyInPos",new String[]{posName},request.getLocale(),"该物料已在库位["+posName+"]中");
}
String putInColor = "red";
String supplier = barcode.getProvider();
String packageId = supplier + barcode.getBarcode();
String lineInfoStr = "";
if(Strings.isNullOrEmpty(line)){
Ecall ecall = oracleDbDao.findEcall(packageId);
//Ecall ecall = oracleDbDao.findEcall(packageId);
String ecallServerAddress = dataCache.getSettings().getInNotifyApi();
ApiEcall ecall = BoshApiUtil.getEcallLineInfo(ecallServerAddress,packageId);
if(ecall == null){
log.error("未查到["+packageId+"]线别信息");
return "n"+getText("shelf.msg.noLine",request.getLocale(),"未查到该物料的线别信息,如确认入库请选择对应线别");
......@@ -640,6 +662,7 @@ public class SzShelfController extends BaseController {
}else{
lineInfoStr = line;
log.info("使用手动选择的线别信息["+line+"]进行入库["+packageId+"]");
putInColor = "blue";
}
......@@ -655,11 +678,10 @@ public class SzShelfController extends BaseController {
StoragePos pos = storagePosManager.getEmptyPosByStorage(storage, barcode, new ArrayList<Integer>(),new ArrayList<String>());
int delayCloseTime = 8000;
String color = "red";
if(pos != null){
log.info(barcode.getPartNumber()+" [ "+barcode.getBarcode()+" ] " + "入库到:" + storage.getName()+"["+cid+"] " + pos.getPosName() );
taskService.addTaskToFinished(pos,barcode,storage.getName()+"-op");
openAndCloseLights(storage,Lists.<String>newArrayList(pos.getPosName()),delayCloseTime,color);
openAndCloseLights(storage,Lists.<String>newArrayList(pos.getPosName()),delayCloseTime,putInColor);
lastPutinPosMap.put(cid,pos);
pos.setCanCheckOutTime(System.currentTimeMillis() + delayCloseTime);
return "OK"+getText("shelf.msg.inOk",new String[]{pos.getPosName()},request.getLocale(),"操作成功,请放入库位["+pos.getPosName()+"]");
......@@ -689,7 +711,7 @@ public class SzShelfController extends BaseController {
log.info("合并库位["+mergePosStr+"]到"+ pos.getPosName() + "中");
log.info(barcode.getPartNumber()+" [ "+barcode.getBarcode()+" ] " + "入库到:" + storage.getName()+"["+cid+"] " + pos.getPosName());
taskService.addTaskToFinished(pos,barcode,storage.getName()+"-op");
openAndCloseLights(storage,mergePosNameList,delayCloseTime, color);
openAndCloseLights(storage,mergePosNameList,delayCloseTime, putInColor);
return "OK"+getText("shelf.msg.inMergeOk",new String[]{pos.getPosName()},request.getLocale(),"操作成功,请合并库位["+ mergePosStr.substring(1) + "]并放入料盘");
}else{
String sizeInfo = barcode.getPlateSize()+" x "+ barcode.getHeight();
......@@ -700,7 +722,7 @@ public class SzShelfController extends BaseController {
}
} catch (ValidateException e) {
log.error("入库出错:"+e.getMessage());
return "error:"+e.getMessage();
return "error:" + getText(e.getMessage(),new String[]{},request.getLocale());
}
}
}else{
......
......@@ -81,6 +81,8 @@ public class SettingsController extends BaseUpdateController {
oldSettings.setPcbExpireEmail(settings.getPcbExpireEmail());
oldSettings.setPcbExpireTime(settings.getPcbExpireTime());
oldSettings.setInactionDay(settings.getInactionDay());
dataCache.updateSettings(oldSettings);
saveMessage(request, getText("storage.saveSuccess", request.getLocale()));
return "redirect:/system/settings.html";
......
......@@ -165,6 +165,9 @@ public class MesApiController extends BaseController {
item.put("PN",barcode.getPartNumber());
item.put("QTY",barcode.getAmount());
item.put("LOC", pos.getStorageId());
Date inDate = barcode.getPutInDate();
String inDateStr = DateUtil.toDateString(inDate, "yyyy-MM-dd HH:mm:ss");
item.put("INTIME",inDateStr);
ReelBarCodes.add(item);
}
return ReelBarCodes /*+ dataCache.getSettings().getNotifyApiUrl()*/;
......
......@@ -461,7 +461,9 @@ public class StorageDataController extends BaseController {
*/
@RequestMapping(value = "/communication", method = RequestMethod.POST)
@ResponseBody
public StatusBean communication(@RequestBody final StatusBean statusBean) {
public StatusBean communication(@RequestBody final StatusBean statusBean, HttpServletRequest request) {
String clientIp = request.getRemoteHost();
statusBean.setClientIp(clientIp);
StatusBean resultBean = taskService.handleClientRequest(statusBean);
if(resultBean != null){
Map<String, String> opMap = storageOpMap.get(resultBean.getCid());
......
......@@ -295,7 +295,7 @@ public class TaskService implements ITaskService {
throw new ValidateException("授权码错误");
}else{
//是否有贵重物料出库权限
if(user.hasAuthority(Authority.ROLE_VALUABLE_OUT)){
//if(user.hasAuthority(Authority.ROLE_VALUABLE_OUT)){
DataLog waitTask = null;
List<DataLog> tasks = getWaitingTasks(areaId);
for (DataLog task : tasks) {
......@@ -319,9 +319,9 @@ public class TaskService implements ITaskService {
throw new ValidateException("未找到对应的任务");
}
}else{
throw new ValidateException("无操作权限");
}
// }else{
// throw new ValidateException("无操作权限");
// }
}
}
......@@ -1250,29 +1250,29 @@ public class TaskService implements ITaskService {
}
Collection<DataLog> areaWaitTasks = getWaitingTasks(areaId);
Boolean startNext = startNextFeeder.get(areaId);
if(startNext != null && startNext){//客户端是否触发了开启下一个占位列表
startNextFeeder.put(areaId,false);
Collection<DataLog> areaExecutingTasks = getExecutingTasks(areaId);
if(areaExecutingTasks.isEmpty() && areaWaitTasks.isEmpty() ){//等待列表和已执行列表已经空了,从站位列表中取下一个要出库的站位列表
List<TaskSet> taskSets = getSortedTaskSet(areaId);
if(!taskSets.isEmpty()){
TaskSet taskSet = taskSets.get(0);
executeTaskSet(taskSet);
areaWaitTasks = getWaitingTasks(areaId);
log.info("客户端触发开启下一个任务集合["+taskSet.getTitle()+"]");
}else{
String msg = "下一个任务集合开始失败:没有待执行的任务集合";
updateAreaMsg(areaId,msg);
log.info(msg);
}
}else{
String msg = "下一个任务集合开始失败:当前有正在执行的任务";
updateAreaMsg(areaId,msg);
log.info(msg);
}
}
// Boolean startNext = startNextFeeder.get(areaId);
// if(startNext != null && startNext){//客户端是否触发了开启下一个占位列表
// startNextFeeder.put(areaId,false);
// Collection<DataLog> areaExecutingTasks = getExecutingTasks(areaId);
// if(areaExecutingTasks.isEmpty() && areaWaitTasks.isEmpty() ){//等待列表和已执行列表已经空了,从站位列表中取下一个要出库的站位列表
// List<TaskSet> taskSets = getSortedTaskSet(areaId);
//
// if(!taskSets.isEmpty()){
// TaskSet taskSet = taskSets.get(0);
// executeTaskSet(taskSet);
// areaWaitTasks = getWaitingTasks(areaId);
// log.info("客户端触发开启下一个任务集合["+taskSet.getTitle()+"]");
// }else{
// String msg = "下一个任务集合开始失败:没有待执行的任务集合";
// updateAreaMsg(areaId,msg);
// log.info(msg);
// }
// }else{
// String msg = "下一个任务集合开始失败:当前有正在执行的任务";
// updateAreaMsg(areaId,msg);
// log.info(msg);
// }
// }
//指定紧急单盘出库的优先出库,否则按批量出库处理
for (DataLog task : areaWaitTasks) {//优先分配单盘任务
......@@ -1514,9 +1514,9 @@ public class TaskService implements ITaskService {
boolean needCheckStock = true;
if(loginUser != null){
log.info("loginUser="+loginUser.getUsername());
if(loginUser.hasAuthority(Authority.ROLE_MORE_STACK_IN)){
needCheckStock = false;
}
//if(loginUser.hasAuthority(Authority.ROLE_MORE_STACK_IN)){
// needCheckStock = false;
//}
}
//验证是否是同时入库的几个条码,不是同时入库的不能混放
......@@ -1600,6 +1600,7 @@ public class TaskService implements ITaskService {
synchronized (storage){
//log.info("reqseq:"+statusBean.getSeq());
StatusBean resultStatus = saveStatus(statusBean);
Map<String, DataLog> storageTasks = executingTasks.row(storage.getCid());
......@@ -1900,6 +1901,7 @@ public class TaskService implements ITaskService {
statusBean.setStatus(statusBeanToSave.getStatus());
statusBean.setOp(statusBeanToSave.getOp());
statusBean.setSeq(statusBeanToSave.getSeq());
statusBean.setClientIp(statusBeanToSave.getClientIp());
/**
* 已解除的报警信息存到数据库中
......
......@@ -303,6 +303,7 @@ settings.api.outNotifaction=Material Retrieval Notice
settings.pcbEmail.everyday=Everyday
settings.pcbEmail.reminder=Remind
settings.pcbEmail.reminderDay=Before Due
settings.remind.deadday=days dead metiral remind
settings.pcbEmail.expire=PCB expiration
settings.pcbEmail.adress=Emails (seperated by ;)
barCodeSettings.rule=Barcode Rules
......
......@@ -408,4 +408,5 @@ settings.backup.versions=Version List
settings.restore.warning=Warning\: This operation cannot be undone. \!\!\!
settings.restore.confirm=Would you like to proceed?
settings.restore.success=Operation succeeded
checkout.sucess=Add task list successn
\ No newline at end of file
checkout.sucess=Add task list successn
settings.remind.deadday=days dead metiral remind
\ No newline at end of file
......@@ -165,7 +165,7 @@ chart.humidity=\u6E7F\u5EA6
areaView.stockWaring=\u5E93\u5B58\u9884\u8B66
areaView.batch=\u6279\u6B21
areaView.tasks=\u4EFB\u52A1
menu.findout=\u67E5\u627E\u51FA\u5E93
menu.findout=\u7269\u6599\u67E5\u627E
menu.inRule=\u5165\u5E93\u7B56\u7565
menu.outRule=\u51FA\u5E93\u7B56\u7565
menu.system.settings=\u7CFB\u7EDF\u8BBE\u7F6E
......@@ -365,4 +365,5 @@ settings.backup.versions=\u7248\u672C\u5217\u8868
settings.restore.warning=\u8B66\u544A\:\u8FD8\u539F\u540E,\u7CFB\u7EDF\u5C06\u8FD8\u539F\u5230\u6B64\u7248\u672C,\u4E14\u8BE5\u64CD\u4F5C\u4E0D\u53EF\u6062\u590D\!\!\!
settings.restore.confirm=\u786E\u5B9A\u8981\u8FD8\u539F\u5230\u6B64\u7248\u672C
settings.restore.success=\u64CD\u4F5C\u6210\u529F
checkout.sucess=\u52A0\u5165\u51FA\u5E93\u4EFB\u52A1\u5217\u8868\u6210\u529F
\ No newline at end of file
checkout.sucess=\u52A0\u5165\u51FA\u5E93\u4EFB\u52A1\u5217\u8868\u6210\u529F
settings.remind.deadday=\u5929\u524D\u5446\u6EDE\u7269\u6599\u63D0\u9192
\ No newline at end of file
......@@ -335,6 +335,8 @@ chart.showType.MONTH=MONTH
chart.showType.DAY=DAY
alarm.humidity.msg=Humidity\: {0} out of range [{1}-{2}]
alarm.temperature.msg=Temperature\: {0} out of range [{1}-{2}]
alarm.inaction.title=Sluggish Material Alarm
alarm.inaction.msg=The quantity of sluggish materials {0} days ago was [{1}], please deal with it in time
batch.btn.singleOut=Single Out
batch.btn.batchOut=Batch Out
batch.btn.singleIn=Single In
......@@ -342,11 +344,15 @@ batch.btn.closeDoor=Close Door
shelf.btn.dbCheck=Database Checking
shelf.btn.closeAllLights=Close All Lights
shelf.btn.ministock=Ministock
shelf.lineInfo=Line
shelf.pn=Part No.
shelf.slot=Slot
shelf.subslot=Subslot
shelf.slotNum=Slot Num
shelf.subslot=L/R
shelf.subslot.0=Left
shelf.subslot.1=Right
shelf.slotNum=Feeder
shelf.tableNo=Table
shelf.cabinet=Cabinet
shelf.remainingTime=Remaining Time
shelf.employeeNo=Employee No.
......@@ -362,8 +368,13 @@ shelf.msg.alreadyInPos=The material is already exists in [{0}]
shelf.msg.inOk=Please put the material in the location [{0}]
shelf.msg.inMergeOk=Please merge the location [{0}], then put in the material.
shelf.msg.inError=No suitable location for [{0}] is found.
shelf.ecall.status.0=Failure
shelf.ecall.status.1=Sending
shelf.ecall.status.2=Waiting
shelf.ecall.status.3=Success
shelf.ecall.status.4=Pick
shelf.ecall.status.5=SMED
shelf.ecall.status.6=Failure
shelf.ecall.status.7=Ministock
\ No newline at end of file
shelf.ecall.status.6=MiniStock
shelf.ecall.status.7=Not Enough
shelf.ecall.status.8=Cancel
shelf.ecall.status.9=Spliced
\ No newline at end of file
......@@ -335,17 +335,23 @@ chart.showType.MONTH=MONTH
chart.showType.DAY=DAY
alarm.humidity.msg=Humidity\: {0} out of range [{1}-{2}]
alarm.temperature.msg=Temperature\: {0} out of range [{1}-{2}]
alarm.inaction.title=Sluggish Material Alarm
alarm.inaction.msg=The quantity of sluggish materials {0} days ago was [{1}], please deal with it in time
batch.btn.singleOut=Single Out
batch.btn.batchOut=Batch Out
batch.btn.singleIn=Single In
batch.btn.closeDoor=Close Door
shelf.btn.dbCheck=Database Checking
shelf.btn.closeAllLights=Close All Lights
shelf.btn.ministock=Ministock
shelf.lineInfo=Line
shelf.pn=Part No.
shelf.slot=Slot
shelf.subslot=Subslot
shelf.slotNum=Slot Num
shelf.subslot=L/R
shelf.subslot.0=Left
shelf.subslot.1=Right
shelf.slotNum=Feeder
shelf.tableNo=Table
shelf.cabinet=Cabinet
shelf.remainingTime=Remaining Time
shelf.employeeNo=Employee No.
......@@ -361,8 +367,13 @@ shelf.msg.alreadyInPos=The material is already exists in [{0}]
shelf.msg.inOk=Please put the material in the location [{0}]
shelf.msg.inMergeOk=Please merge the location [{0}], then put in the material.
shelf.msg.inError=No suitable location for [{0}] is found
shelf.ecall.status.0=Failure
shelf.ecall.status.1=Sending
shelf.ecall.status.2=Waiting
shelf.ecall.status.3=Success
shelf.ecall.status.4=Pick
shelf.ecall.status.5=SMED
shelf.ecall.status.6=Failure
shelf.ecall.status.7=Ministock
\ No newline at end of file
shelf.ecall.status.6=MiniStock
shelf.ecall.status.7=Not Enough
shelf.ecall.status.8=Cancel
shelf.ecall.status.9=Spliced
\ No newline at end of file
......@@ -335,17 +335,23 @@ chart.showType.MONTH=\u6708\u4EFD
chart.showType.DAY=\u5929
alarm.humidity.msg=\u6E7F\u5EA6\: {0} \u8D85\u51FA\u8303\u56F4[{1}-{2}]
alarm.temperature.msg=\u6E29\u5EA6\: {0} \u8D85\u51FA\u8303\u56F4[{1}-{2}]
alarm.inaction.title=\u5446\u6EDE\u7269\u6599\u63D0\u9192
alarm.inaction.msg={0}\u5929\u524D\u5446\u6EDE\u7269\u6599\u6570\u91CF\u4E3A[{1}]\uFF0C\u8BF7\u53CA\u65F6\u5904\u7406
batch.btn.singleOut=\u5355\u76D8\u51FA\u5E93
batch.btn.batchOut=\u6279\u91CF\u51FA\u5E93
batch.btn.singleIn=\u5355\u76D8\u5165\u5E93
batch.btn.closeDoor=\u5173\u95ED\u4ED3\u95E8
shelf.btn.dbCheck=\ \u5E93\u4F4D\u68C0\u67E5
shelf.btn.closeAllLights=\u5173\u95ED\u6240\u6709\u706F
shelf.btn.ministock=Ministock
shelf.lineInfo=\u7EBF\u522B
shelf.pn=\u6599\u53F7
shelf.slot=Slot
shelf.subslot=Subslot
shelf.slotNum=Slot Num
shelf.subslot=\u5DE6/\u53F3
shelf.subslot.0=\u5DE6
shelf.subslot.1=\u53F3
shelf.slotNum=\u6599\u67AA
shelf.tableNo=\u53F0\u8F66
shelf.cabinet=\ \u5E93\u4F4D
shelf.remainingTime=\u5269\u4F59\u65F6\u95F4
shelf.employeeNo=\u5458\u5DE5\u5DE5\u53F7
......@@ -361,8 +367,13 @@ shelf.msg.alreadyInPos=\u8BE5\u7269\u6599\u5DF2\u5728\u5E93\u4F4D[{0}]\u4E2D
shelf.msg.inOk=\u64CD\u4F5C\u6210\u529F,\u8BF7\u653E\u5165\u5E93\u4F4D[{0}]
shelf.msg.inMergeOk=\u64CD\u4F5C\u6210\u529F,\u8BF7\u5408\u5E76\u5E93\u4F4D[{0}]\u5E76\u653E\u5165\u6599\u76D8
shelf.msg.inError=\u672A\u627E\u5230\u9002\u5408[{0}]\u7684\u5E93\u4F4D
shelf.ecall.status.3=\u89E6\u53D1\u53EB\u6599
shelf.ecall.status.4=\u4ED3\u5E93\u4E0B\u67B6
shelf.ecall.status.5=\u8FD0\u9001\u4E2D
shelf.ecall.status.6=\u5931\u8D25
shelf.ecall.status.7=Ministock
\ No newline at end of file
shelf.ecall.status.0=\u5931\u8D25
shelf.ecall.status.1=\u53D1\u9001\u4E2D
shelf.ecall.status.2=\u5F85\u53D1\u9700\u6C42
shelf.ecall.status.3=\u5F85\u6536
shelf.ecall.status.4=\u63A5\u6536
shelf.ecall.status.5=\u8FD0\u9001
shelf.ecall.status.6=MiniStock
shelf.ecall.status.7=\u4E0D\u8DB3
shelf.ecall.status.8=\u53D6\u6D88
shelf.ecall.status.9=\u5DF2\u63A5\u6599
\ No newline at end of file
......@@ -66,22 +66,15 @@
</display:column>
<display:column property="partNumber" sortProperty="partNumber" sortable="true" titleKey="barcode.partNumber"/>
<display:column property="lineInfoStr" sortProperty="lineInfoStr" sortable="true" titleKey="Line"/>
<!-- 成都凯天-->
<c:if test='<%=DataCache.isProductionFor("ChengDuKaiTian") %>'>
<display:column property="otherField2" sortProperty="otherField2" sortable="true" titleKey="产品型号"/>
<display:column property="otherField3" sortProperty="otherField3" sortable="true" titleKey="组件型号"/>
<display:column property="otherField1" sortProperty="otherField1" sortable="true" titleKey="配套单号"/>
<display:column property="otherField4" sortProperty="otherField4" sortable="true" titleKey="元器件型号"/>
<display:column property="otherField5" sortProperty="otherField5" sortable="true" titleKey="检验编号"/>
</c:if>
<display:column property="amount" escapeXml="true" titleKey="barcode.amount"/>
<display:column titleKey="barcode.plateSize">
${barcode.plateSize} x ${barcode.height}
</display:column>
<display:column property="memo" escapeXml="true" titleKey="barcode.memo"/>
<display:column escapeXml="false" titleKey=" ">
<a
onclick="window.open('${ctx}/qrcode.html?barcode=${barcode.barcode}')"><fmt:message key="barcode.print"/> </a></display:column>
<%--<display:column property="memo" escapeXml="true" titleKey="barcode.memo"/>--%>
<%--<display:column escapeXml="false" titleKey=" ">--%>
<%--<a--%>
<%--onclick="window.open('${ctx}/qrcode.html?barcode=${barcode.barcode}')"><fmt:message key="barcode.print"/> </a></display:column>--%>
<display:setProperty name="paging.banner.item_name"><fmt:message
key="barcode.item.name"/></display:setProperty>
......
......@@ -38,41 +38,41 @@
</c:forEach>
</div>
</div>
<div class="portlet light bordered">
<%--<div class="portlet light bordered">--%>
<div class="portlet-title">
<div class="caption">
<i class="icon-printer font-green-haze"></i>
<span class="caption-subject bold uppercase font-green-haze">
<fmt:message key="barCodeSettings.print" /></span>
</div>
</div>
<div class="portlet-body" style="padding-left: 30px;">
<div class="form-group form-inline">
<div class="input-group margin-top-10"><fmt:message key="barCodeSettings.print.pageSize"/>:</div>
<div class="input-group input-small margin-top-10">
<span class="input-group-addon"><fmt:message key="barCodeSettings.print.width"/></span>
<form:input path="pageWidth" cssClass="form-control"/>
</div>
<div class="input-group input-small margin-top-10">
<span class="input-group-addon"><fmt:message key="barCodeSettings.print.height"/></span>
<form:input path="pageHeight" cssClass="form-control"/>
</div>
<%--<div class="portlet-title">--%>
<%--<div class="caption">--%>
<%--<i class="icon-printer font-green-haze"></i>--%>
<%--<span class="caption-subject bold uppercase font-green-haze">--%>
<%--<fmt:message key="barCodeSettings.print" /></span>--%>
<%--</div>--%>
<%--</div>--%>
<%--<div class="portlet-body" style="padding-left: 30px;">--%>
<%--<div class="form-group form-inline">--%>
<%--<div class="input-group margin-top-10"><fmt:message key="barCodeSettings.print.pageSize"/>:</div>--%>
<%--<div class="input-group input-small margin-top-10">--%>
<%--<span class="input-group-addon">页边距</span>--%>
<%--<form:input path="pageSpace" cssClass="form-control"/>--%>
<%--<span class="input-group-addon"><fmt:message key="barCodeSettings.print.width"/></span>--%>
<%--<form:input path="pageWidth" cssClass="form-control"/>--%>
<%--</div>--%>
<%--<div class="input-group input-small margin-top-10">--%>
<%--<span class="input-group-addon">字体大小</span>--%>
<%--<form:input path="fontSize" cssClass="form-control"/>--%>
<%--<span class="input-group-addon"><fmt:message key="barCodeSettings.print.height"/></span>--%>
<%--<form:input path="pageHeight" cssClass="form-control"/>--%>
<%--</div>--%>
</div>
<%--<p class="help-block">--%>
<%--说明:宽高相等时,只生成二维码;宽大于高时,文字在二维码右侧;宽小于高时,文字在二维码下方.二维码的大小为宽高中较小的值--%>
<%--</p>--%>
</div>
</div>
<%--&lt;%&ndash;<div class="input-group input-small margin-top-10">&ndash;%&gt;--%>
<%--&lt;%&ndash;<span class="input-group-addon">页边距</span>&ndash;%&gt;--%>
<%--&lt;%&ndash;<form:input path="pageSpace" cssClass="form-control"/>&ndash;%&gt;--%>
<%--&lt;%&ndash;</div>&ndash;%&gt;--%>
<%--&lt;%&ndash;<div class="input-group input-small margin-top-10">&ndash;%&gt;--%>
<%--&lt;%&ndash;<span class="input-group-addon">字体大小</span>&ndash;%&gt;--%>
<%--&lt;%&ndash;<form:input path="fontSize" cssClass="form-control"/>&ndash;%&gt;--%>
<%--&lt;%&ndash;</div>&ndash;%&gt;--%>
<%--</div>--%>
<%--&lt;%&ndash;<p class="help-block">&ndash;%&gt;--%>
<%--&lt;%&ndash;说明:宽高相等时,只生成二维码;宽大于高时,文字在二维码右侧;宽小于高时,文字在二维码下方.二维码的大小为宽高中较小的值&ndash;%&gt;--%>
<%--&lt;%&ndash;</p>&ndash;%&gt;--%>
<%--</div>--%>
<%--</div>--%>
<div class="form-actions">
<div class="row">
<div class="col-md-offset-5 col-md-12">
......
......@@ -45,9 +45,9 @@
<div class="col-md-4">
<div style="text-align:left" class="input-group">
<form:input type="text" id="barcodeStr" path="barcode" class="form-control"/>
<span class="input-group-addon">
<a onclick="printFun();"><fmt:message key="barcode.print"/> </a>
</span>
<%--<span class="input-group-addon">--%>
<%--<a onclick="printFun();"><fmt:message key="barcode.print"/> </a>--%>
<%--</span>--%>
<form:errors path="barcode" cssStyle="color: red"/>
</div>
</div>
......@@ -85,130 +85,24 @@
</div>
</div>
<label class="control-label col-md-2"><fmt:message key="barcode.batch"/></label>
<div class="col-md-4">
<div style="text-align:left" class="input-group">
<form:input type="text" id="batch" path="batch" class="form-control"/>
</div>
</div>
<%--<label class="control-label col-md-2"><fmt:message key="barcode.batch"/></label>--%>
<%--<div class="col-md-4">--%>
<%--<div style="text-align:left" class="input-group">--%>
<%--<form:input type="text" id="batch" path="batch" class="form-control"/>--%>
<%--</div>--%>
<%--</div>--%>
</div>
<div class="form-group">
<label class="control-label col-md-2"><fmt:message key="barcode.memo"/></label>
<div class="col-md-9">
<div style="text-align:left;width:100%;" class="input-group">
<form:textarea id="memo" path="memo" class="form-control" style="height:100px;" />
</div>
</div>
</div>
<%--<div class="form-group">--%>
<%--<label class="control-label col-md-2"><fmt:message key="barcode.memo"/></label>--%>
<%--<div class="col-md-9">--%>
<%--<div style="text-align:left;width:100%;" class="input-group">--%>
<%--<form:textarea id="memo" path="memo" class="form-control" style="height:100px;" />--%>
<%--</div>--%>
<%--</div>--%>
<%--</div>--%>
</c:if>
<c:if test='<%=DataCache.isProductionFor("ChengDuKaiTian") %>'>
<div class="form-group">
<label class="control-label col-md-2"><fmt:message key="component.auto.scancode"/></label>
<div class="col-md-8">
<div style="text-align:left">
<input type="text" id="scan-code" class="form-control" autofocus placeholder="产品型号@组件型号@配套单号@元器件型号@上级库位置号@检验编号@数量"/>
<span id="code-errors" style="color: red"></span>
</div>
</div>
</div>
<form:hidden id="partNumber" path="partNumber"/>
<div class="form-group">
<label class="control-label col-md-2"><fmt:message key="barcode.barcode"/></label>
<div class="col-md-4">
<div style="text-align:left" class="input-group">
<form:input type="text" id="barcodeStr" path="barcode" class="form-control"/>
<span class="input-group-addon">
<a onclick="printFun();"><fmt:message key="barcode.print"/> </a>
</span>
<form:errors path="barcode" cssStyle="color: red"/>
</div>
</div>
<label class="control-label col-md-2"><fmt:message key="产品型号"/></label>
<div class="col-md-4">
<div style="text-align:left" class="input-group">
<form:input type="text" path="otherField2" class="form-control" id="otherField2"/>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-2"><fmt:message key="组件型号"/></label>
<div class="col-md-4">
<div style="text-align:left" class="input-group">
<form:input type="text" path="otherField3" class="form-control" id="otherField3"/>
</div>
</div>
<label class="control-label col-md-2"><fmt:message key="配套单号"/></label>
<div class="col-md-4">
<div style="text-align:left" class="input-group">
<form:input type="text" path="otherField1" class="form-control" id="otherField1"/>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-2"><fmt:message key="元器件型号"/></label>
<div class="col-md-4">
<div style="text-align:left" class="input-group">
<form:input type="text" path="otherField4" class="form-control" id="otherField4"/>
</div>
</div>
<label class="control-label col-md-2"><fmt:message key="检验编号"/></label>
<div class="col-md-4">
<div style="text-align:left" class="input-group">
<form:input type="text" path="otherField5" class="form-control" id="otherField5"/>
</div>
</div>
</div>
<div class="form-group extraInfo">
<label class="control-label col-md-2"><fmt:message key="barcode.amount"/></label>
<div class="col-md-4">
<div style="text-align:left" class="input-group">
<form:input type="text" id="amount" path="amount" class="form-control"/>
</div>
</div>
<form:hidden id="plateSize" path="plateSize"/>
<form:hidden id="height" path="height"/>
<label class="control-label col-md-2"><fmt:message key="barcode.plateSize"/></label>
<div class="col-md-4">
<select class="form-control input-small" id="size">
<option value="7x8">7 x 8</option>
<option value="7x12">7 x 12</option>
<option value="7x16">7 x 16</option>
<option value="8x20"selected="true">散料夹具</option>
<option value="8.0x20" >格料夹具</option>
</select>
</div>
</div>
<div class="form-group extraInfo">
<%--备注--%>
<label class="control-label col-md-2"><fmt:message key="备注"/></label>
<div class="col-md-6">
<form:textarea id="description" path="otherField6" class="form-control"/>
</div>
</div>
</c:if>
<div class="form-actions">
<div class="row">
......@@ -328,7 +222,7 @@
}
$('#size').val(sizeOptionValue);
}else{
$('#partNumber').val("BULK_TRAY");
//$('#partNumber').val("BULK_TRAY");
}
......
......@@ -50,9 +50,9 @@
<div class="actions">
<a href="componentUpdate.html?type=${type}" class="btn btn-default btn-sm">
<i class="fa fa-plus"></i> <fmt:message key="button.add"/> </a>
<a class="btn btn-default btn-sm" data-toggle="modal" href="#basic"><i
class="fa fa-upload"></i><fmt:message
key="button.uploadFile"/></a>
<%--<a class="btn btn-default btn-sm" data-toggle="modal" href="#basic"><i--%>
<%--class="fa fa-upload"></i><fmt:message--%>
<%--key="button.uploadFile"/></a>--%>
</div>
</div>
<div class="portlet-body">
......
......@@ -62,17 +62,11 @@
<%@include file="/common/success.jsp" %>
<%@include file="/common/error.jsp" %>
<%--<div class="form-group">
&lt;%&ndash;物料名称&ndash;%&gt;
<label class="control-label col-md-2"><fmt:message key="component.auto.scancode"/></label>
<div class="col-md-8">
<div style="text-align:left">
<input type="text" id="scan-code" class="form-control" autofocus/>
<span id="code-errors" style="color: red"></span>
</div>
<div class="form-group">
<div class="col-md-12 col-sm-12">
<input type="text" class="form-control" id="scan-code" placeholder="<fmt:message key='component.auto.scancode'/>"/>
</div>
</div>--%>
</div>
<c:if test="${type == 1}">
......@@ -373,14 +367,15 @@
<div class="form-group">
<%--物料名称--%>
<label class="control-label col-md-2"><fmt:message key="预警值"/></label>
<%--<label class="control-label col-md-2"><fmt:message key="预警值"/></label>--%>
<div class="col-md-3">
<div style="text-align:left" class="input-group">
<form:input type="text" id="alarmAmount" path="alarmValue" class="form-control"/>
<form:errors path="alarmValue" cssStyle="color: red"/>
</div>
</div>
<%--<div class="col-md-3">--%>
<%--<div style="text-align:left" class="input-group">--%>
<%--<form:input type="text" id="alarmAmount" path="alarmValue" class="form-control"/>--%>
<%--<span class="input-group-addon"><i class="fa fa-keyboard-o" name="alarmValue"></i></span>--%>
<%--<form:errors path="alarmValue" cssStyle="color: red"/>--%>
<%--</div>--%>
<%--</div>--%>
<label class="control-label col-md-2"><fmt:message key="component.plate.size"/> </label>
......@@ -447,87 +442,92 @@
<%--</div>--%>
<%--</div>--%>
<%--贵重物料--%>
<label class="control-label col-md-2"><fmt:message key="otherComponent.expensive"/> </label>
<%--<label class="control-label col-md-2"><fmt:message key="otherComponent.expensive"/> </label>--%>
<div class="col-md-3">
<div style="text-align:left" class="input-group">
<form:checkbox path="needAuth" class="form-control"/>
</div>
</div>
<%--<div class="col-md-3">--%>
<%--<div style="text-align:left" class="input-group">--%>
<%--<form:checkbox path="needAuth" class="form-control"/>--%>
<%--</div>--%>
<%--</div>--%>
</div>
<div class="form-group extraInfo">
<%--单位--%>
<label class="control-label col-md-2"><fmt:message key="component.unit"/></label>
<%--<div class="form-group extraInfo">--%>
<%--&lt;%&ndash;单位&ndash;%&gt;--%>
<%--<label class="control-label col-md-2"><fmt:message key="component.unit"/></label>--%>
<div class="col-md-3">
<div style="text-align:left" class="input-group">
<form:input type="text" id="unit" path="unit" class="form-control"/>
</div>
</div>
<%--<div class="col-md-3">--%>
<%--<div style="text-align:left" class="input-group">--%>
<%--<form:input type="text" id="unit" path="unit" class="form-control"/>--%>
<%--<span class="input-group-addon"><i class="fa fa-keyboard-o" name="unit"></i></span>--%>
<%--</div>--%>
<%--</div>--%>
<%--单耗--%>
<%--&lt;%&ndash;单耗&ndash;%&gt;--%>
<label class="control-label col-md-2"><fmt:message key="component.unitCost"/></label>
<%--<label class="control-label col-md-2"><fmt:message key="component.unitCost"/></label>--%>
<div class="col-md-3">
<div style="text-align:left" class="input-group">
<form:input type="text" id="unitCost" path="unitCost"
class="form-control"/>
</div>
</div>
</div>
<div class="form-group extraInfo">
<label class="control-label col-md-2"><fmt:message key="component.producer"/> </label>
<%--<div class="col-md-3">--%>
<%--<div style="text-align:left" class="input-group">--%>
<%--<form:input type="text" id="unitCost" path="unitCost"--%>
<%--class="form-control"/>--%>
<%--<span class="input-group-addon"><i class="fa fa-keyboard-o" name="unitCost"></i></span>--%>
<%--</div>--%>
<%--</div>--%>
<%--</div>--%>
<%--<div class="form-group extraInfo">--%>
<%--<label class="control-label col-md-2"><fmt:message key="component.producer"/> </label>--%>
<div class="col-md-3">
<div style="text-align:left" class="input-group">
<form:input type="text" id="producer" path="producer" class="form-control"/>
</div>
</div>
<%--<div class="col-md-3">--%>
<%--<div style="text-align:left" class="input-group">--%>
<%--<form:input type="text" id="producer" path="producer" class="form-control"/>--%>
<%--<span class="input-group-addon"><i class="fa fa-keyboard-o" name="producer"></i></span>--%>
<%--</div>--%>
<%--</div>--%>
<label class="control-label col-md-2"><fmt:message key="component.producerNumber"/> </label>
<%--<label class="control-label col-md-2"><fmt:message key="component.producerNumber"/> </label>--%>
<div class="col-md-3">
<div style="text-align:left" class="input-group">
<form:input type="text" id="producerNumber" path="producerNumber"
class="form-control"/>
</div>
</div>
</div>
<%--<div class="col-md-3">--%>
<%--<div style="text-align:left" class="input-group">--%>
<%--<form:input type="text" id="producerNumber" path="producerNumber"--%>
<%--class="form-control"/>--%>
<%--<span class="input-group-addon"><i class="fa fa-keyboard-o" name="producerNumber"></i></span>--%>
<%--</div>--%>
<%--</div>--%>
<%--</div>--%>
<div class="form-group extraInfo">
<label class="control-label col-md-2"><fmt:message key="component.msl"/></label>
<%--<label class="control-label col-md-2"><fmt:message key="component.msl"/></label>--%>
<div class="col-md-3">
<div style="text-align:left" class="input-group">
<form:input type="text" id="msl" path="msl"
class="form-control"/>
</div>
</div>
<%--<div class="col-md-3">--%>
<%--<div style="text-align:left" class="input-group">--%>
<%--<form:input type="text" id="msl" path="msl"--%>
<%--class="form-control"/>--%>
<%--<span class="input-group-addon"><i class="fa fa-keyboard-o" name="msl"></i></span>--%>
<%--</div>--%>
<%--</div>--%>
<label class="control-label col-md-2"><fmt:message key="component.pic"/></label>
<%--<label class="control-label col-md-2"><fmt:message key="component.pic"/></label>--%>
<form:input type="text" path="showImg" class="hidden"/>
<div class="col-md-3">
<div style="text-align:left" class="input-group" id="componentImg">
</div>
</div>
<%--<form:input type="text" path="showImg" class="hidden"/>--%>
<%--<div class="col-md-3">--%>
<%--<div style="text-align:left" class="input-group" id="componentImg">--%>
<%--</div>--%>
<%--</div>--%>
</div>
<div class="form-group extraInfo">
<%--<div class="form-group extraInfo">--%>
<%--料件描述--%>
<label class="control-label col-md-2"><fmt:message key="component.description"/></label>
<%--&lt;%&ndash;料件描述&ndash;%&gt;--%>
<%--<label class="control-label col-md-2"><fmt:message key="component.description"/></label>--%>
<div class="col-md-8">
<%--<div class="col-md-8">--%>
<form:textarea id="description" path="description" class="form-control"/>
<%--<form:textarea id="description" path="description" class="form-control"/>--%>
</div>
</div>
<%--</div>--%>
<%--</div>--%>
</c:if>
</div>
......@@ -570,18 +570,20 @@
// $("#moreInfo").hide();
// $(".extraInfo").show();
// });
var imgSrc = "${component.showImg}";
if("${component.showImg}" == null || "${component.showImg}" == ''){
imgSrc = "";
}else{
imgSrc = "${ctx}"+ "${component.showImg}";
}
var dragImgUpload = new DragImgUpload("#componentImg",imgSrc,{
callback:function (files) {
//回调函数,可以传递给后台等等
$("#theImg").val(files[0]);
}
})
<%--var imgSrc = "${component.showImg}";--%>
<%--if("${component.showImg}" == null || "${component.showImg}" == ''){--%>
<%--imgSrc = "";--%>
<%--}else{--%>
<%--imgSrc = "${ctx}"+ "${component.showImg}";--%>
<%--}--%>
// var dragImgUpload = new DragImgUpload("#componentImg",imgSrc,{
// callback:function (files) {
// //回调函数,可以传递给后台等等
// $("#theImg").val(files[0]);
// }
// })
$('#pSize').change(function(){
$("#plateSize").removeAttr("readonly");
......@@ -609,35 +611,26 @@
$("#scan-code").change(function (){
$("#code-errors").text("");
var codeValue = $(this).val();
//TCL的条码规则:用*号隔开,[物料编号]*[数量]*[供应商编号]*[批次]*[日期码]*[Reel Id]
//Reel Id 的前六位是供应商编号
$(this).attr("placeholder",codeValue);
$(this).val("");
var strs= codeValue.split("*"); //字符分割
if(strs.length == 6){
var partNumber = strs[0];
var amount = strs[1];
var supplierCode = strs[2];
var reelId = strs[5];
//if(reelId.indexOf(supplierCode) == 0){
$("#code-errors").text("");
$("#name").val(partNumber);
$("#partNumber").val(partNumber);
$("#amount").val(amount);
$("#providerNumber").val(supplierCode);
//暂改为默认,自动提交,后面把这里去掉
$('#id').val("");
// $('#pSize').val("7x8");
// $("#plateSize").val(7);
// $("#height").val(8);
// $("#operation").val("save");
// $("#component").submit();
return;
// }
}
$("#code-errors").text("格式为 [料件编号]*[数量]*[供应商编号]*[批次]*[日期码]*[Reel Id] 的条码信息才可以正确解析");
$("#code-errors").text("");
$("#barcode").text("");
$("#partNumber").val("");
$("#batch").val("");
$("#dateCode").val("");
$("#amount").val("");
$("#providerNumber").val("");
$(this).attr("placeholder", codeValue);
$(this).val("");
$.post("${ctx}/service/store/resolveBarcode", {code: codeValue}, function (data) {
if (data.barcode != null) {
$("#partNumber").val(data.barcode.partNumber);
$("#batch").val(data.barcode.batch);
$("#amount").val(data.barcode.amount);
$("#provider").val(data.barcode.providerNumber);
}
});
})
function saveComponent() {
......
......@@ -9,6 +9,13 @@
<%@ include file="/common/taglibs.jsp" %>
<%@ page language="java" pageEncoding="UTF-8" %>
<style type="text/css">
.inactionItem{
color:red;
}
</style>
<c:if test="${screen != 'tablet'}">
<!-- BEGIN PAGE HEADER-->
<h3 class="page-title">
......@@ -36,33 +43,31 @@
<form:form commandName="searchCriteria" class="form-horizontal form-bordered" id="searchCriteria"
action="storagePosFind.html">
<div class="form-group">
<label class="control-label col-md-2"><fmt:message key="inOutList.type"/></label>
<div class="col-md-2">
<form:select path="type" class="form-control">
<form:option value="-1"><fmt:message key="select.all"/></form:option>
<form:option value="0"><fmt:message key="inOutList.type.component"/></form:option>
<form:option value="1"><fmt:message key="inOutList.type.solder"/></form:option>
<form:option value="2"><fmt:message key="inOutList.type.pcb"/></form:option>
<form:option value="3"><fmt:message key="inOutList.type.others"/></form:option>
<form:option value="41"><fmt:message key="inOutList.type.solderFixture"/></form:option>
<form:option value="42"><fmt:message key="inOutList.type.pcbFixture"/></form:option>
</form:select>
</div>
<label class="control-label col-md-2"><fmt:message key="barcode.memo"/></label>
<div class="col-md-2">
<div style="text-align:left">
<input id="memo" name="memo" class="form-control" value="${memo}"/>
</div>
</div>
<div class="col-md-2">
<button class="btn purple" type="submit"><i class="fa fa-search"></i><fmt:message key="button.search"/> </button>
</div>
</div>
<%--<div class="form-group">--%>
<%--&lt;%&ndash;<label class="control-label col-md-2"><fmt:message key="inOutList.type"/></label>&ndash;%&gt;--%>
<%--&lt;%&ndash;<div class="col-md-2">&ndash;%&gt;--%>
<%--&lt;%&ndash;<form:select path="type" class="form-control">&ndash;%&gt;--%>
<%--&lt;%&ndash;<form:option value="-1"><fmt:message key="select.all"/></form:option>&ndash;%&gt;--%>
<%--&lt;%&ndash;<form:option value="0"><fmt:message key="inOutList.type.component"/></form:option>&ndash;%&gt;--%>
<%--&lt;%&ndash;<form:option value="1"><fmt:message key="inOutList.type.solder"/></form:option>&ndash;%&gt;--%>
<%--&lt;%&ndash;<form:option value="2"><fmt:message key="inOutList.type.pcb"/></form:option>&ndash;%&gt;--%>
<%--&lt;%&ndash;<form:option value="3"><fmt:message key="inOutList.type.others"/></form:option>&ndash;%&gt;--%>
<%--&lt;%&ndash;<form:option value="41"><fmt:message key="inOutList.type.solderFixture"/></form:option>&ndash;%&gt;--%>
<%--&lt;%&ndash;<form:option value="42"><fmt:message key="inOutList.type.pcbFixture"/></form:option>&ndash;%&gt;--%>
<%--&lt;%&ndash;</form:select>&ndash;%&gt;--%>
<%--&lt;%&ndash;</div>&ndash;%&gt;--%>
<%--<label class="control-label col-md-2"><fmt:message key="barcode.memo"/></label>--%>
<%--<div class="col-md-2">--%>
<%--<div style="text-align:left">--%>
<%--<input id="memo" name="memo" class="form-control" value="${memo}"/>--%>
<%--</div>--%>
<%--</div>--%>
<%----%>
<%--</div>--%>
<div class="form-group">
<label class="control-label col-md-2"><fmt:message key="component.partNumber"/></label>
......@@ -81,30 +86,33 @@
<form:input id="barcode" path="barcode" class="form-control"/>
</div>
</div>
<div class="col-md-2">
<button class="btn purple" type="submit"><i class="fa fa-search"></i><fmt:message key="button.search"/> </button>
</div>
</div>
</form:form>
<div class="table-toolbar">
<div class="col-md-4">
<div class="btn-group">
<button class="btn yellow" id="checkoutBtn">
<i class="fa fa-sign-out"></i><fmt:message key="storagePosFind.outSelect"/></button>
</div>
</div>
<div class="col-md-5">
<c:if test="${screen != 'tablet'}">
<div class="input-inline input-medium right">
<div class="input-group">
<input id="day" type="text" value="3" class="form-control" style="display: block;text-align:right;">
<span class="input-group-addon"><fmt:message key="storagePosFind.daysAgo"/></span>
<span class="input-group-btn">
<button class="btn green" type="button" id="inactionCheckOut"><i class="fa fa-check"></i><fmt:message key="storagePosFind.outInaction"/></button>
</span>
</div>
</div>
</c:if>
</div>
<%--<div class="col-md-4">--%>
<%--<div class="btn-group">--%>
<%--<button class="btn yellow" id="checkoutBtn">--%>
<%--<i class="fa fa-sign-out"></i><fmt:message key="storagePosFind.outSelect"/></button>--%>
<%--</div>--%>
<%--</div>--%>
<%--<div class="col-md-5">--%>
<%--<c:if test="${screen != 'tablet'}">--%>
<%--<div class="input-inline input-medium right">--%>
<%--<div class="input-group">--%>
<%--<input id="day" type="text" value="3" class="form-control" style="display: block;text-align:right;">--%>
<%--<span class="input-group-addon"><fmt:message key="storagePosFind.daysAgo"/></span>--%>
<%--<span class="input-group-btn">--%>
<%--<button class="btn green" type="button" id="inactionCheckOut"><i class="fa fa-check"></i><fmt:message key="storagePosFind.outInaction"/></button>--%>
<%--</span>--%>
<%--</div>--%>
<%--</div>--%>
<%--</c:if>--%>
<%--</div>--%>
</div>
<div class="table-scrollable">
<c:set var="today" value="<%= new Date()%>"/>
......@@ -120,33 +128,37 @@
<c:set var="alarmClass" value="alarmItem"/>
</c:if>
<c:set var="limitCheckOut" value="${pos.locked || (pos.barcode.maxStorageTime != 0 && pos.inStoreHour * 60 + pos.inStoreMiniute <= pos.barcode.warmTime * 60)}"/>
<display:column title="<input type='checkbox' id='allCheck'/>" media="html">
<c:if test="${!limitCheckOut}">
<input type="checkbox" name="posIds" value="${pos.id}" id="check${pos.id}" class="limit${pos.barcode.inFixture}"/>
</c:if>
</display:column>
<%--<display:column title="<input type='checkbox' id='allCheck'/>" media="html">--%>
<%--<c:if test="${!limitCheckOut}">--%>
<%--<input type="checkbox" name="posIds" value="${pos.id}" id="check${pos.id}" class="limit${pos.barcode.inFixture}"/>--%>
<%--</c:if>--%>
<%--</display:column>--%>
<display:column titleKey="storagePosFind.index">${pos_rowNum}</display:column>
<display:column titleKey="component.partNumber" style="width: 15%;" sortProperty="barcode.partNumber" sortable="true" class="${alarmClass}">
${pos.barcode.partNumber}
</display:column>
<display:column titleKey="inOutList.type">
<c:if test="${pos.barcode.type == 0 || empty pos.barcode.type}"><fmt:message key="inOutList.type.component"/></c:if>
<c:if test="${pos.barcode.type == 1}"><fmt:message key="inOutList.type.solder"/></c:if>
<c:if test="${pos.barcode.type == 2}"><fmt:message key="inOutList.type.pcb"/></c:if>
<c:if test="${pos.barcode.type == 3}"><fmt:message key="inOutList.type.others"/></c:if>
<c:if test="${pos.barcode.type == 4}"><fmt:message key="inOutList.type.fixture"/></c:if>
</display:column>
<%--<display:column titleKey="inOutList.type">--%>
<%--<c:if test="${pos.barcode.type == 0 || empty pos.barcode.type}"><fmt:message key="inOutList.type.component"/></c:if>--%>
<%--<c:if test="${pos.barcode.type == 1}"><fmt:message key="inOutList.type.solder"/></c:if>--%>
<%--<c:if test="${pos.barcode.type == 2}"><fmt:message key="inOutList.type.pcb"/></c:if>--%>
<%--<c:if test="${pos.barcode.type == 3}"><fmt:message key="inOutList.type.others"/></c:if>--%>
<%--<c:if test="${pos.barcode.type == 4}"><fmt:message key="inOutList.type.fixture"/></c:if>--%>
<%--</display:column>--%>
<c:if test="${screen != 'tablet'}">
<display:column property="barcode.barcode" titleKey="barcode.barcode"/>
<display:column property="barcode.inFixture" titleKey="storagePosFind.inFixture"/>
<%--<display:column property="barcode.providerNumber" titleKey="component.providerNumber"/>--%>
<%--<display:column property="barcode.inFixture" titleKey="storagePosFind.inFixture"/>--%>
<display:column property="barcode.provider" titleKey="component.providerNumber"/>
<%--<display:column property="barcode.amount" titleKey="数量"/>--%>
<display:column property="barcode.lockName" titleKey="menu.inRule"/>
<%--<display:column property="barcode.lockName" titleKey="menu.inRule"/>--%>
<display:column property="posName" titleKey="checkOut.pos" sortProperty="posName" sortable="true"/>
</c:if>
<display:column titleKey="barcode.inStoreRemainTime" sortProperty="barcode.putInTime" sortable="true">
<c:set var="inactionClass" value=""/>
<c:if test="${pos.updateDate <= inactionDate}">
<c:set var="inactionClass" value="inactionItem"/>
</c:if>
<display:column titleKey="barcode.inStoreRemainTime" sortProperty="barcode.putInTime" sortable="true" class="${inactionClass}">
<c:if test="${pos.inStoreHour >= 1}">${pos.inStoreHour}<fmt:message key="solder.hour"/></c:if><c:if test="${pos.inStoreMiniute != 0}">${pos.inStoreMiniute}<fmt:message key="runStatus.minutes"/>
<c:if test="${pos.barcode.maxStorageTime != 0 }">
/${pos.barcode.maxStorageTime}<fmt:message key="solder.hour"/></c:if>
......@@ -165,14 +177,14 @@
<display:column titleKey="barcode.expireDate" sortProperty="barcode.expireDate" sortable="true">
<fmt:formatDate value="${pos.barcode.expireDate}" pattern="yyyy-MM-dd"/>
</display:column>
<display:column property="barcode.memo" titleKey="备注"/>
<display:column titleKey="checkOut.operate" media="html">
<c:if test="${!limitCheckOut}">
<button class="btn yellow limit${pos.barcode.inFixture}" id="btn${pos.id}"
onclick="checkoutStorage('${pos.id}')">
<i class="fa fa-sign-out"></i><fmt:message key="button.checkout"/></button>
</c:if>
</display:column>
<%--<display:column property="barcode.memo" titleKey="备注"/>--%>
<%--<display:column titleKey="checkOut.operate" media="html">--%>
<%--<c:if test="${!limitCheckOut}">--%>
<%--<button class="btn yellow limit${pos.barcode.inFixture}" id="btn${pos.id}"--%>
<%--onclick="checkoutStorage('${pos.id}')">--%>
<%--<i class="fa fa-sign-out"></i><fmt:message key="button.checkout"/></button>--%>
<%--</c:if>--%>
<%--</display:column>--%>
<c:if test="${limitCheckOut}">
<c:set var="limitCodes" value="${pos.barcode.inFixture},${limitCodes}"/>
</c:if>
......
......@@ -45,14 +45,14 @@
</a>
</div>
</security:authorize>
<security:authorize ifAnyGranted="ROLE_MANAGE_STACK_OUT">
<div class="col-md-2 col-xs-2 menuItem">
<a href="${ctx}/component/inventory.html">
<img src="${ctx}/images/menu/9.png" class="menuImg"/>
<div><fmt:message key="menu.cloud"/></div>
</a>
</div>
</security:authorize>
<%--<security:authorize ifAnyGranted="ROLE_MANAGE_STACK_OUT">--%>
<%--<div class="col-md-2 col-xs-2 menuItem">--%>
<%--<a href="${ctx}/component/inventory.html">--%>
<%--<img src="${ctx}/images/menu/9.png" class="menuImg"/>--%>
<%--<div><fmt:message key="menu.cloud"/></div>--%>
<%--</a>--%>
<%--</div>--%>
<%--</security:authorize>--%>
<security:authorize ifAnyGranted="ROLE_MANAGE_BARCODE">
<div class="col-md-2 col-xs-2 menuItem">
......@@ -63,14 +63,14 @@
</div>
</security:authorize>
<security:authorize ifAnyGranted="ROLE_MANAGE_DATALOG">
<%--<security:authorize ifAnyGranted="ROLE_MANAGE_DATALOG">--%>
<div class="col-md-2 col-xs-2 menuItem">
<a href="${ctx}/dataLog/search.html">
<img src="${ctx}/images/menu/1.png" class="menuImg"/>
<div><fmt:message key="menu.bigdata"/></div>
</a>
</div>
</security:authorize>
<%--</security:authorize>--%>
<security:authorize ifAnyGranted="ROLE_MANAGE_USER,ROLE_MANAGE_ROLE">
<div class="col-md-2 col-xs-2 menuItem">
......
......@@ -40,7 +40,9 @@
<div class="row" id="codeBox">
<div class="col-md-6 col-sm-6">
<input type="text" class="form-control" id="scan-code"/>
<div class="input-group">
<input type="text" class="form-control" id="scan-code" />
</div>
</div>
<div class="col-md-6 col-sm-6">
<div class="" id="msg">
......@@ -54,10 +56,14 @@
<button type="button" class="btn btn-fit-height default" onclick="checkAllPos();">
<fmt:message key="shelf.btn.dbCheck"/>
</button>
<button type="button" class="btn btn-fit-height default" onclick="closeAllLights();">
<button type="button" class="btn btn-fit-height grey-cascade" onclick="closeAllLights();">
<fmt:message key="shelf.btn.closeAllLights"/>
</button>
<%--<button type="button" class="btn btn-fit-height grey-gallery" onclick="toMinistock();">--%>
<%--<fmt:message key="shelf.btn.ministock"/>--%>
<%--</button>--%>
<button type="button" class="btn btn-fit-height yellow" onclick="showPartNumbers();">
<i class="fa fa-sign-out"></i><fmt:message key="button.checkout"/>
</button>
......@@ -65,6 +71,13 @@
</div>
</div>
<div class="row">
<%--<div class="col-md-12 col-sm-12 ">--%>
<%--<div class="portlet box grey" style="margin-bottom: 0px;">--%>
<%--<div class="portlet-title" style="text-align: center;color:black;font-size:30px;">--%>
<%--${storage.name}--%>
<%--</div>--%>
<%--</div>--%>
<%--</div>--%>
<c:forEach items="${showLines}" var="lineInfo">
<c:set var="hideClass" value=""/>
<%--<c:if test="${lineInfo.key == 'lineBoxTemplate'}">--%>
......@@ -79,16 +92,16 @@
</div>
</div>
<div class="portlet-body">
<div class="table-scrollable" style="height:500px;">
<div class="table-scrollable" style="height:440px;">
<table class="table table-striped table-hover table-bordered no-footer" role="grid" aria-describedby="sample_editable_1_info">
<thead>
<tr role="row">
<%--<th><fmt:message key="产线"/></th>--%>
<th><fmt:message key="shelf.pn"/></th>
<th><fmt:message key="shelf.slot"/></th>
<th><fmt:message key="shelf.tableNo"/></th>
<th><fmt:message key="shelf.slotNum"/></th>
<th><fmt:message key="shelf.subslot"/></th>
<%--<th><fmt:message key="TableNo"/></th>--%>
<th><fmt:message key="shelf.remainingTime"/></th>
<th><fmt:message key="shelf.cabinet"/></th>
</tr>
......@@ -117,9 +130,9 @@
<%--<th><fmt:message key="产线"/></th>--%>
<th><fmt:message key="shelf.pn"/></th>
<th><fmt:message key="shelf.slot"/></th>
<th><fmt:message key="shelf.tableNo"/></th>
<th><fmt:message key="shelf.slotNum"/></th>
<th><fmt:message key="shelf.subslot"/></th>
<%--<th><fmt:message key="TableNo"/></th>--%>
<th><fmt:message key="shelf.remainingTime"/></th>
<th><fmt:message key="shelf.cabinet"/></th>
</tr>
......@@ -140,7 +153,9 @@
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" id="modal-title" style="font-weight: 500;"><fmt:message key="button.checkout"/></h4>
<input type="text" class="form-control" id="searchPn"/>
<div class="input-group">
<input type="text" class="form-control" id="searchPn" />
</div>
</div>
<div class="modal-body">
<div class="row" id="partNumberItems">
......@@ -195,11 +210,14 @@
</div>
<div class="modal-body">
<div class="row">
<input type="text" class="form-control" id="opUser"/>
<div class="input-group">
<input type="text" class="form-control" id="opUser" />
</div>
</div>
</div>
<div class="modal-footer">
<div id="footerBtn">
<div>
<%--<a href="" class="btn yellow left" id="findAndOut"><i class="fa fa-sign-out"></i><fmt:message key="allBoxView.findAndOut"/></a>--%>
<button type="button" class="btn green" onclick="opUserOk();">
......@@ -212,11 +230,19 @@
</div>
<fmt:message key="shelf.ecall.status.0" var="ecall_status_0"/>
<fmt:message key="shelf.ecall.status.1" var="ecall_status_1"/>
<fmt:message key="shelf.ecall.status.2" var="ecall_status_2"/>
<fmt:message key="shelf.ecall.status.3" var="ecall_status_3"/>
<fmt:message key="shelf.ecall.status.4" var="ecall_status_4"/>
<fmt:message key="shelf.ecall.status.5" var="ecall_status_5"/>
<fmt:message key="shelf.ecall.status.6" var="ecall_status_6"/>
<fmt:message key="shelf.ecall.status.7" var="ecall_status_7"/>
<fmt:message key="shelf.ecall.status.8" var="ecall_status_8"/>
<fmt:message key="shelf.ecall.status.9" var="ecall_status_9"/>
<fmt:message key="shelf.subslot.0" var="subslot_0"/>
<fmt:message key="shelf.subslot.1" var="subslot_1"/>
<fmt:message key="alarm.inaction.title" var="inactionAlarmTitle"/>
<c:set var="scripts" scope="request">
<script type="text/javascript">
......@@ -273,11 +299,23 @@
setInterval(function(){
if($('#allPartNumbers').is(':visible')) {
$("#searchPn").focus();
}else if("#opUserConfirm"){
$("#opUser").focus();
if($("#searchPn_keyboard").is(':visible')){
$("#searchPn_keyboard input").focus();
}else{
$("#searchPn").focus();
}
}else if($("#opUserConfirm").is(':visible')){
if($("#opUser_keyboard").is(':visible')){
$("#opUser_keyboard input.ui-keyboard-preview").focus();
}else{
$("#opUser").focus();
}
}else{
$("#scan-code").focus();
if($("#scan-code_keyboard").is(':visible')){
$("#scan-code_keyboard input").focus();
}else{
$("#scan-code").focus();
}
}
}, 1000);
......@@ -292,8 +330,6 @@
var bgColors = ["bg-blue-madison","bg-green-haze","bg-purple-plum","bg-red-intense","bg-green","bg-yellow","bg-blue","bg-red","bg-purple","bg-blue-ebonyclay","bg-red-sunglo","bg-yellow-crusta"];
showPartNumbers = function(){
$("#opUser").val("");
$("#opUserConfirm").modal("show");
......@@ -304,14 +340,14 @@
opUserOk = function(type){
var opUser = $("#opUser").val();
$("#opUserConfirm").modal("hide");
if(opUser != ""){
$("#opUserConfirm").modal("hide");
$("#searchPn").val("");
$.post("${ctx}/service/store/storageTypeInventory", {type: type, cid: '${show}'}, function (data) {
pageIndex = -1;
partNumberItems = data;
nextPage();
}).error(function(){showMsg("request error");});
}).error(function(){showMsg("request inventory error");});
}
}
......@@ -364,6 +400,8 @@
}
$("#partNumberItems").html(itemStr);
disableBtn();
//$("#opUserConfirm").modal("hide");
$("#allPartNumbers").modal("show");
}
......@@ -398,14 +436,23 @@
$.post("${ctx}/service/store/accshelf/op", {opKey: 'closeAll', opValue:'true', cid: '${show}'}, function (data) {
showMsg(data);
waitting();
}).error(function(){showMsg("request error");});
}).error(function(){showMsg("close all request error");});
}
checkAllPos = function(){
$.post("${ctx}/service/store/accshelf/checkAll", {cid: '${show}'}, function (data) {
showMsg(data);
waitting();
}).error(function(){showMsg("request error");});
}).error(function(){showMsg("check all request error");});
}
toMinistock = function(){
if(window.confirm('确定要一键发送到MiniStock 吗?')){
$.post("${ctx}/service/store/accshelf/toMinistock", {cid: '${show}'}, function (data) {
showMsg(data);
waitting();
}).error(function(){showMsg("to ministock request error");});
}
}
......@@ -415,7 +462,7 @@
$("#allPartNumbers").modal("hide");
showMsg(data);
waitting();
}).error(function(){showMsg("request error");});
}).error(function(){showMsg("check out request error");});
}
$(".dataTable").html("");
......@@ -424,7 +471,10 @@
var rows = {};
flushTable = function(){
$.post("${ctx}/service/store/accshelf/getData", {cid: '${show}'}, function (data) {
var msgShow = $("#msg").text();
if(msgShow == 'request error'){
showMsg("");
}
$(".dataTable").html("");
var newRows = [];
......@@ -460,8 +510,16 @@
trColor = '';
tdColor = 'red';
//Ecall大于2代表的含义:3触发叫料,4仓库下架,5运送中,6失败,7Ministock)
//0=failure,1=sending,2=waiting,3=success,4=pick,5=smed,6=ministock,7=notEnough,8=cancel,9=spliced
//修改为0=失败 1=发送中 2=待发需求 3=待收 4=接收 5=运送 6=MiniStock 7=不足 8=取消 9=已接料
var status = remainingTime.status;
if(status == 3){
if(status == 0){
shelfLoc = "${ecall_status_0}";
}else if(status == 1){
shelfLoc = "${ecall_status_1}";
}else if(status == 2){
shelfLoc = "${ecall_status_2}";
}else if(status == 3){
shelfLoc = "${ecall_status_3}";
}else if(status == 4){
shelfLoc = "${ecall_status_4}";
......@@ -471,17 +529,28 @@
shelfLoc = "${ecall_status_6}";
}else if(status == 7){
shelfLoc = "${ecall_status_7}";
}else if(status == 8){
shelfLoc = "${ecall_status_8}";
}else if(status == 9){
shelfLoc = "${ecall_status_9}";
}else{
shelfLoc = status;
}
}
var subSlotLabel = "${subslot_0}";
if(remainingTime.subslot == 1){
subSlotLabel = "${subslot_1}";
}
var trLine = $("#"+key);
var tdStr =
//"<td>"+remainingTime.lineNo+"</td>"+
"<td>"+remainingTime.partNo+"</td>"+
"<td>"+remainingTime.slot+"</td>"+
"<td>"+remainingTime.tableNo+"</td>"+
"<td>"+remainingTime.slotNum+"</td>"+
"<td>"+remainingTime.subslot+"</td>"+
//"<td>"+remainingTime.tableNo+"</td>"+
"<td>"+subSlotLabel+"</td>"+
"<td>"+remainingTime.remainingTime+"</td>"+
"<td style='background-color:"+tdColor+"'>"+shelfLoc+"</td>"+
//"<td>"+remainingTime.sendTimeStr+"</td>"+
......@@ -508,8 +577,46 @@
}
//flushTable();
///呆滞物料提醒
var inactionAlarmWindow;
flushInactionAlarm = function(){
$.post("${ctx}/service/store/inactionAlarmMsg", {cid: '${show}'}, function (data) {
inactionAlarmWindow = showAlarmWindow(inactionAlarmWindow,"${inactionAlarmTitle}",data);
});
};
function showAlarmWindow(alarmWindow, title, msg){
var windowOptions = {
delay: false,
position: 'bottom left',
closeOnClick: false,
sound: false,
title: title,
closable: false,
messageHeight:null,
icon:false,
size: 'normal',
};
if(msg == ''){//无报警,清除报警框
if(alarmWindow){
alarmWindow.remove();
alarmWindow = null;
}
}else{
if(!alarmWindow){
windowOptions.msg = msg;
alarmWindow =Lobibox.notify('warning', windowOptions);
}else{
alarmWindow.$el.find(".lobibox-notify-msg").html(msg);
}
}
return alarmWindow;
}
setInterval(function(){
flushTable();
flushInactionAlarm();
}, 1000);
waitting = function(){
......
......@@ -124,8 +124,8 @@
<div class="bg-primary kabanTitle col-md-12">
<%--<span><fmt:message key="allBoxView.kanban"/></span>--%>
<%--<span style="margin-left: 40px;" id="storageTotalPos">总容量:1000</span>--%>
<button class="btn yellow outBtn">
<i class="fa fa-sign-out"></i><fmt:message key="button.checkout"/></button>
<%--<button class="btn yellow outBtn">--%>
<%--<i class="fa fa-sign-out"></i><fmt:message key="button.checkout"/></button>--%>
</div>
<c:forEach items="${allStorage}" var="storage">
<c:set var="cids" value="${cids},${storage.cid}"/>
......@@ -140,14 +140,14 @@
<c:set var="detailUrl" value="${ctx}/storage/shelf/${storage.cid}"/>
</c:if>
<c:if test="${storage.accShelf}">
<c:set var="detailUrl" value="${ctx}/storage/accshelf/${storage.cid}"/>
<c:set var="detailUrl" value="${ctx}/accshelf/${storage.cid}"/>
</c:if>
<div class="portlet box green-haze tasks-widget">
<c:choose>
<c:when test="${storage.shelf || storage.cabinet || storage.accShelf}">
<%--智能料架--%>
<div class="portlet-title">
<div style="text-align:center;font-size: 28px;"><a style="color:#FFFFFF;" href="${detailUrl}">${storage.name}</a></div>
<div style="text-align:center;font-size: 28px;"><a style="color:#FFFFFF;" href="${detailUrl}" target="_blank">${storage.name}</a></div>
</div>
<div class="portlet-body">
<div class="task-content">
......
......@@ -46,18 +46,20 @@
</div>
</form:form>
<display:table name="searchCriteria.pageList" id="storage"
defaultsort="1" class="table table-striped table-bordered table-hover" export="false">
defaultsort="1" class="table table-striped table-bordered table-hover" export="false" requestURI="storageSearch.html">
<display:column property="name" escapeXml="true" titleKey="storage.name"/>
<display:column titleKey="storage.boxCount" property="boxCount"/>
<%--<display:column titleKey="storage.boxCount" property="boxCount"/>--%>
<display:column titleKey="storage.slotAmount">
${storage.totalSlots - storage.emptySlots} / ${storage.totalSlots}
${storage.totalSlots}
</display:column>
<display:setProperty name="paging.banner.items_name"><fmt:message
key="storage.item.name"/></display:setProperty>
<display:column escapeXml="true" titleKey=""
url="/system/storageUpdate.html" paramId="id" paramProperty="id">
<fmt:message key="button.edit"/>
<display:column titleKey="">
<a href="${ctx}/system/storageUpdate.html?id=${storage.id}"><fmt:message key="button.edit"/></a>
<c:if test="${storage.accShelf}">
&nbsp;&nbsp;&nbsp;<a href="http://${storage.clientIp}:5000" target="_blank">配置</a>
</c:if>
</display:column>
</display:table>
......
......@@ -75,9 +75,9 @@
<div style="text-align:left">
<form:select path="type" class="form-control">
<c:forEach items="<%= StorageConstants.TYPE.values()%>" var="type">
<form:option value="${type.name}"><fmt:message key="${type.key}"/> </form:option>
</c:forEach>
<%--<c:forEach items="<%= StorageConstants.TYPE.values()%>" var="type">--%>
<form:option value="<%= StorageConstants.TYPE.ACC_SHELF.getName()%>"><fmt:message key="<%= StorageConstants.TYPE.ACC_SHELF.getKey()%>"/> </form:option>
<%--</c:forEach>--%>
</form:select>
</div>
</div>
......
......@@ -31,134 +31,15 @@
<form:hidden path="id"/>
<!-- BEGIN CHART PORTLET-->
<div class="portlet light bordered">
<div class="portlet-title">
<div class="caption">
<i class="icon-speedometer font-green-haze"></i>
<span class="caption-subject bold uppercase font-green-haze"><fmt:message key="settings.humiture"/></span>
</div>
</div>
<div class="portlet-body" style="padding-left: 30px;">
<div class="form-group form-inline">
<div class="input-group margin-top-10"><fmt:message key="allBoxView.temperature"/>:</div>
<div class="input-group margin-top-10">
<form:input path="minTemperature" cssClass="form-control input-small"/>
<span class="input-group-addon" style="background: #FFFFFF;">-</span>
<form:input path="maxTemperature" cssClass="form-control input-small"/>
<span class="input-group-addon" style="background: #FFFFFF;">℃</span>
</div>
<div class="input-group margin-top-10"><fmt:message key="settings.showRange"/>:</div>
<div class="input-group margin-top-10">
<form:input path="minTemperatureShow" cssClass="form-control input-small"/>
<span class="input-group-addon" style="background: #FFFFFF;">-</span>
<form:input path="maxTemperatureShow" cssClass="form-control input-small"/>
<span class="input-group-addon" style="background: #FFFFFF;">℃</span>
</div>
</div>
<div class="form-group form-inline">
<div class="input-group margin-top-10"><fmt:message key="allBoxView.humidity"/>:</div>
<div class="input-group margin-top-10">
<form:input path="minHumidity" cssClass="form-control form-control input-small"/>
<span class="input-group-addon" style="background: #FFFFFF;">-</span>
<form:input path="maxHumidity" cssClass="form-control form-control input-small"/>
<span class="input-group-addon" style="background: #FFFFFF;">%</span>
</div>
<div class="input-group margin-top-10"><fmt:message key="settings.showRange"/>:</div>
<div class="input-group margin-top-10">
<form:input path="minHumidityShow" cssClass="form-control form-control input-small"/>
<span class="input-group-addon" style="background: #FFFFFF;">-</span>
<form:input path="maxHumidityShow" cssClass="form-control form-control input-small"/>
<span class="input-group-addon" style="background: #FFFFFF;">%</span>
</div>
</div>
</div>
<%--<div class="portlet-title">--%>
<%--<div class="caption">--%>
<%--<i class="icon-speedometer font-green-haze"></i>--%>
<%--<span class="caption-subject bold uppercase font-green-haze"><fmt:message key="menu.system.maintenance"/></span>--%>
<%--</div>--%>
<%--</div>--%>
<%--<div class="portlet-body" style="padding-left: 30px;">--%>
<%--<div class="form-group form-inline">--%>
<%--<div class="input-group margin-top-10">--%>
<%--<span class="input-group-addon"><fmt:message key="settings.maintenanceDays"/>:</span>--%>
<%--<form:input path="maintenanceDays" cssClass="form-control input-small"/>--%>
<%--<span class="input-group-addon"><fmt:message key="time.days"/></span>--%>
<%--</div>--%>
<%--</div>--%>
<%--<div class="form-group form-inline">--%>
<%--<div class="input-group margin-top-10"><fmt:message key="settings.pcbEmail.adress"/>:</div>--%>
<%--<div class="input-group margin-top-10">--%>
<%--<form:input path="maintenanceEmail" cssClass="form-control input-xlarge"/>--%>
<%--<button type="button" class="btn yellow" onclick="testEmail('');"><fmt:message key="btn.test"/></button>--%>
<%--</div>--%>
<%--</div>--%>
<%--</div>--%>
<div class="portlet-title">
<div class="caption">
<i class="icon-speedometer font-green-haze"></i>
<span class="caption-subject bold uppercase font-green-haze"><fmt:message key="settings.pcbEmail"/></span>
</div>
</div>
<div class="portlet-body" style="padding-left: 30px;">
<div class="form-group form-inline">
<div class="input-group margin-top-10"><fmt:message key="settings.pcbEmail.adress"/>:</div>
<div class="input-group margin-top-10">
<form:input path="pcbExpireEmail" cssClass="form-control input-xlarge"/>
<button type="button" class="btn yellow" onclick="testEmail('');"><fmt:message key="btn.test"/></button>
</div>
</div>
<div class="form-group form-inline">
<div class="input-group margin-top-10">
<span class="input-group-addon"><fmt:message key="settings.pcbEmail.everyday"/></span>
<form:select path="pcbExpireTime" cssClass="form-control input-small">
<c:forEach begin="0" end="23" var="hour">
<form:option value="${hour}"/>
</c:forEach>
</form:select>
<span class="input-group-addon"><fmt:message key="settings.pcbEmail.reminder"/></span>
</div>
</div>
<div class="form-group form-inline">
<div class="input-group margin-top-10">
<span class="input-group-addon"><fmt:message key="settings.pcbEmail.expire"/></span>
<form:input path="pcbExpireDay" cssClass="form-control input-small"/>
<span class="input-group-addon"><fmt:message key="settings.pcbEmail.reminderDay"/></span>
<div class="portlet-body" style="padding-left: 30px;">
<div class="form-group form-inline">
<div class="input-group margin-top-10">
<form:input path="inactionDay" cssClass="form-control input-small"/>
<span class="input-group-addon"><fmt:message key="settings.remind.deadday"/></span>
</div>
</div>
<button type="button" class="btn yellow" onclick="testEmail('true');"><fmt:message key="btn.test"/></button>
</div>
</div>
<%--<div class="portlet-title">--%>
<%--<div class="caption">--%>
<%--<i class="icon-speedometer font-green-haze"></i>--%>
<%--<span class="caption-subject bold uppercase font-green-haze"><fmt:message key="button.backup"/></span>--%>
<%--</div>--%>
<%--</div>--%>
<%--<div class="portlet-body" style="padding-left: 30px;">--%>
<%--<div class="form-group form-inline">--%>
<%--<div class="input-group margin-top-10">--%>
<%--<span class="input-group-addon"><fmt:message key="settings.backupHours"/>:</span>--%>
<%--<form:input path="backupHours" cssClass="form-control input-small"/>--%>
<%--<span class="input-group-addon"><fmt:message key="time.hours"/></span>--%>
<%--</div>--%>
<%--</div>--%>
<%--<div class="form-group form-inline">--%>
<%--<div class="input-group margin-top-10"><fmt:message key="settings.backupPath"/>:</div>--%>
<%--<div class="input-group margin-top-10">--%>
<%--<form:input path="backupPath" cssClass="form-control input-xlarge"/>--%>
<%--<button type="button" class="btn blue" id="backup"><fmt:message key="button.backup"/></button>--%>
<%--<button type="button" class="btn yellow" id="restore"><fmt:message key="button.restore"/></button>--%>
<%--</div>--%>
<%--</div>--%>
<%--</div>--%>
<div class="portlet-title">
<div class="caption">
......@@ -167,22 +48,22 @@
</div>
</div>
<div class="portlet-body" style="padding-left: 30px;">
<c:if test='<%=DataCache.isProductionFor("Pana") %>'>
<div class="form-group form-inline">
<div class="input-group margin-top-10">条码检查 API:</div>
<div class="input-group margin-top-10">
<form:input path="reelCheckApi" cssClass="form-control input-xlarge"/>
</div>
</div>
</c:if>
<%--<c:if test='<%=DataCache.isProductionFor("Pana") %>'>--%>
<%--<div class="form-group form-inline">--%>
<%--<div class="input-group margin-top-10">条码检查 API:</div>--%>
<%--<div class="input-group margin-top-10">--%>
<%--<form:input path="reelCheckApi" cssClass="form-control input-xlarge"/>--%>
<%--</div>--%>
<%--</div>--%>
<%--</c:if>--%>
<div class="form-group form-inline">
<div class="input-group margin-top-10"><fmt:message key="settings.api.inNotifaction"/>:</div>
<div class="input-group margin-top-10"><fmt:message key="Ecall IP"/>:</div>
<div class="input-group margin-top-10">
<form:input path="inNotifyApi" cssClass="form-control input-xlarge"/>
</div>
</div>
<div class="form-group form-inline">
<div class="input-group margin-top-10"><fmt:message key="settings.api.outNotifaction"/>:</div>
<div class="input-group margin-top-10"><fmt:message key="Ministock api"/>:</div>
<div class="input-group margin-top-10">
<form:input path="outNotifyApi" cssClass="form-control form-control input-xlarge"/>
</div>
......
......@@ -140,24 +140,24 @@
<div class="form-group">
</div>
<div class="form-group last">
<label class="control-label col-md-3">料柜分配</label>
<div class="col-md-9">
<form:select path="cabinetPos" multiple="multiple" class="multi-select">
<c:forEach var="item" items="${slots}">
<optgroup label="${item.key}">
<c:forEach items="${item.value}" var="pos">
<c:set var="selectedStr" value=""/>
<c:if test="${fn:contains(user.cabinetPosIds,pos.id)}">
<c:set var="selectedStr" value="selected"/>
</c:if>
<form:option value="${pos.id}" selected="${selectedStr}">${pos.posName}</form:option>
</c:forEach>
</optgroup>
</c:forEach>
</form:select>
</div>
</div>
<%--<div class="form-group last">--%>
<%--<label class="control-label col-md-3">料柜分配</label>--%>
<%--<div class="col-md-9">--%>
<%--<form:select path="cabinetPos" multiple="multiple" class="multi-select">--%>
<%--<c:forEach var="item" items="${slots}">--%>
<%--<optgroup label="${item.key}">--%>
<%--<c:forEach items="${item.value}" var="pos">--%>
<%--<c:set var="selectedStr" value=""/>--%>
<%--<c:if test="${fn:contains(user.cabinetPosIds,pos.id)}">--%>
<%--<c:set var="selectedStr" value="selected"/>--%>
<%--</c:if>--%>
<%--<form:option value="${pos.id}" selected="${selectedStr}">${pos.posName}</form:option>--%>
<%--</c:forEach>--%>
<%--</optgroup>--%>
<%--</c:forEach>--%>
<%--</form:select>--%>
<%--</div>--%>
<%--</div>--%>
</div>
......
......@@ -26,7 +26,7 @@
<intercept-url pattern="/app/storage/**" access="ROLE_DEFAULT"/>
<intercept-url pattern="/app/user/role*" access="ROLE_MANAGE_ROLE"/>
<intercept-url pattern="/app/user/user*" access="ROLE_MANAGE_USER"/>
<intercept-url pattern="/app/dataLog/*" access="ROLE_MANAGE_DATALOG"/>
<intercept-url pattern="/app/dataLog/*" access="ROLE_MANAGE_COMPONENT"/>
<intercept-url pattern="/app/barcode/*" access="ROLE_MANAGE_BARCODE"/>
<intercept-url pattern="/app/system/*" access="ROLE_MANAGE_ROLE"/>
<intercept-url pattern="/app/component/component*" access="ROLE_MANAGE_COMPONENT"/>
......
......@@ -10,34 +10,34 @@
<fmt:message key="menu.product.component"/><span class="selected">
</a>
</li>
<li class="classic-menu-dropdown">
<a href="${ctx}/component/componentSearch.html?type=1" name="component">
<fmt:message key="menu.product.solder"/><span class="selected"></span>
</a>
</li>
<li class="classic-menu-dropdown">
<a href="${ctx}/component/componentSearch.html?type=2" name="component">
<fmt:message key="menu.product.pcb"/><span class="selected"></span>
</a>
</li>
<li class="classic-menu-dropdown">
<a href="${ctx}/component/componentSearch.html?type=3" name="component">
<fmt:message key="menu.product.others"/><span class="selected"></span>
</a>
</li>
<%--<li class="classic-menu-dropdown">--%>
<%--<a href="${ctx}/component/componentSearch.html?type=1" name="component">--%>
<%--<fmt:message key="menu.product.solder"/><span class="selected"></span>--%>
<%--</a>--%>
<%--</li>--%>
<%--<li class="classic-menu-dropdown">--%>
<%--<a href="${ctx}/component/componentSearch.html?type=2" name="component">--%>
<%--<fmt:message key="menu.product.pcb"/><span class="selected"></span>--%>
<%--</a>--%>
<%--</li>--%>
<%--<li class="classic-menu-dropdown">--%>
<%--<a href="${ctx}/component/componentSearch.html?type=3" name="component">--%>
<%--<fmt:message key="menu.product.others"/><span class="selected"></span>--%>
<%--</a>--%>
<%--</li>--%>
</ul>
</security:authorize>
<%--Work Order--%>
<security:authorize ifAnyGranted="ROLE_MANAGE_STACK_OUT, ROLE_MANAGE_FEEDER">
<ul class="hor-menu-workOrder nav navbar-nav hide">
<security:authorize ifAnyGranted="ROLE_MANAGE_FEEDER">
<li class="classic-menu-dropdown">
<a href="${ctx}/workOrder/feederSearch.html" name="workOrder">
<fmt:message key="menu.order.management"/><span class="selected"></span>
</a>
</li>
</security:authorize>
<%--<security:authorize ifAnyGranted="ROLE_MANAGE_FEEDER">--%>
<%--<li class="classic-menu-dropdown">--%>
<%--<a href="${ctx}/workOrder/feederSearch.html" name="workOrder">--%>
<%--<fmt:message key="menu.order.management"/><span class="selected"></span>--%>
<%--</a>--%>
<%--</li>--%>
<%--</security:authorize>--%>
<security:authorize ifAnyGranted="ROLE_MANAGE_STACK_OUT">
<li class="classic-menu-dropdown">
......@@ -46,11 +46,11 @@
</a>
</li>
<li class="classic-menu-dropdown">
<a href="${ctx}/workOrder/specifiedBatchSearch.html" name="workOrder">
<fmt:message key="menu.inRule"/><span class="selected"></span>
</a>
</li>
<%--<li class="classic-menu-dropdown">--%>
<%--<a href="${ctx}/workOrder/specifiedBatchSearch.html" name="workOrder">--%>
<%--<fmt:message key="menu.inRule"/><span class="selected"></span>--%>
<%--</a>--%>
<%--</li>--%>
<li class="classic-menu-dropdown">
<a href="${ctx}/workOrder/checkOutSettings.html" name="workOrder">
......@@ -61,20 +61,20 @@
</ul>
</security:authorize>
<%--Cloud--%>
<security:authorize ifAnyGranted="ROLE_MANAGE_STACK_OUT">
<ul class="hor-menu-cloud nav navbar-nav hide">
<li class="classic-menu-dropdown">
<a href="${ctx}/component/inventory.html" name="cloud">
<fmt:message key="menu.cloud.inventory"/><span class="selected"></span>
</a>
</li>
<li class="classic-menu-dropdown">
<a href="${ctx}/component/ReelNumModify.html" name="cloud">
<fmt:message key="menu.cloud.numModify"/><span class="selected"></span>
</a>
</li>
</ul>
</security:authorize>
<%--<security:authorize ifAnyGranted="ROLE_MANAGE_STACK_OUT">--%>
<%--<ul class="hor-menu-cloud nav navbar-nav hide">--%>
<%--<li class="classic-menu-dropdown">--%>
<%--<a href="${ctx}/component/inventory.html" name="cloud">--%>
<%--<fmt:message key="menu.cloud.inventory"/><span class="selected"></span>--%>
<%--</a>--%>
<%--</li>--%>
<%--<li class="classic-menu-dropdown">--%>
<%--<a href="${ctx}/component/ReelNumModify.html" name="cloud">--%>
<%--<fmt:message key="menu.cloud.numModify"/><span class="selected"></span>--%>
<%--</a>--%>
<%--</li>--%>
<%--</ul>--%>
<%--</security:authorize>--%>
<%--Barcode--%>
<security:authorize ifAnyGranted="ROLE_MANAGE_BARCODE">
......@@ -102,11 +102,11 @@
<security:authorize ifAnyGranted="ROLE_MANAGE_DATALOG">
<ul class="hor-menu-data nav navbar-nav hide">
<li class="classic-menu-dropdown">
<a href="${ctx}/system/runStatus.html" name="data">
<fmt:message key="menu.bigdata.runStatus" /><span class="selected"></span>
</a>
</li>
<%--<li class="classic-menu-dropdown">--%>
<%--<a href="${ctx}/system/runStatus.html" name="data">--%>
<%--<fmt:message key="menu.bigdata.runStatus" /><span class="selected"></span>--%>
<%--</a>--%>
<%--</li>--%>
<%--<li class="classic-menu-dropdown">--%>
<%--<a href="${ctx}/system/dataReport.html" name="data">--%>
......@@ -119,11 +119,11 @@
<fmt:message key="menu.bigdata.dataLog" /><span class="selected"></span>
</a>
</li>
<li class="classic-menu-dropdown">
<a href="${ctx}/dataLog/alarmInfoSearch.html" name="data">
<fmt:message key="menu.bigdata.errorLog" /><span class="selected"></span>
</a>
</li>
<%--<li class="classic-menu-dropdown">--%>
<%--<a href="${ctx}/dataLog/alarmInfoSearch.html" name="data">--%>
<%--<fmt:message key="menu.bigdata.errorLog" /><span class="selected"></span>--%>
<%--</a>--%>
<%--</li>--%>
</ul>
</security:authorize>
<%--system--%>
......
......@@ -23,6 +23,9 @@
<meta content="" name="author"/>
<!-- BEGIN GLOBAL MANDATORY STYLES -->
<link href="${ctx}/assets/jqkeyboard/jquery-ui.min.css" rel="stylesheet" type="text/css"/>
<link href="${ctx}/assets/jqkeyboard/keyboard.css" rel="stylesheet" type="text/css"/>
<link href="${ctx}/assets/global/plugins/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"/>
<link href="${ctx}/assets/global/plugins/simple-line-icons/simple-line-icons.min.css" rel="stylesheet" type="text/css"/>
<link href="${ctx}/assets/global/plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css"/>
......@@ -67,6 +70,8 @@
<link href="${ctx}/assets/admin/layout/css/custom.css?id=22" rel="stylesheet" type="text/css"/>
<!-- END THEME STYLES -->
<link rel="shortcut icon" href="${ctx}/favicon.ico"/>
<decorator:head/>
......@@ -74,6 +79,9 @@
body {
font-family: "calibri";
}
.ui-keyboard{
font-size: 25px;
}
</style>
</head>
......@@ -84,6 +92,17 @@
<c:set var="loginUser" value="<%= StorageDataController.getLoginUser()%>" scope="session"/>
<!-- BEGIN HEADER -->
<div class="page-header navbar navbar-fixed-top">
<c:if test="${storage.accShelf}">
<div class="page-header-inner">
<!-- BEGIN LOGO -->
<div class="page-logo">
<div style="color:white;font-size:35px;">
${storage.name}
</div>
</div>
</div>
</c:if>
<c:if test="${!storage.accShelf}">
<!-- BEGIN HEADER INNER -->
<div class="page-header-inner">
<!-- BEGIN LOGO -->
......@@ -190,6 +209,7 @@
</div>
<!-- END TOP NAVIGATION MENU -->
</div>
</c:if>
<!-- END HEADER INNER -->
</div>
<!-- END HEADER -->
......@@ -237,7 +257,7 @@
<!-- BEGIN FOOTER -->
<div class="page-footer">
<div class="page-footer-inner">
2016&copy; <a href="${ctx}/updateHistory.html">SMD BOX</a>
2016&copy; SMD BOX
</div>
<div class="scroll-to-top">
<i class="icon-arrow-up"></i>
......@@ -323,7 +343,8 @@
<script src="${ctx}/assets/global/plugins/bootstrap-toastr/toastr.min.js"></script>
<script src="${ctx}/assets/global/plugins/jquery.blockui.min.js" type="text/javascript"></script>
<script src="${ctx}/assets/jqkeyboard/jquery-ui-custom.min.js" type="text/javascript"></script>
<script src="${ctx}/assets/jqkeyboard/jquery.keyboard.js?id=4" type="text/javascript"></script>
<script src="${ctx}/assets/admin/pages/scripts/table-managed.js"></script>
......@@ -333,6 +354,31 @@
<!-- END PAGE LEVEL SCRIPTS -->
<script>
jQuery(document).ready(function() {
$(':text').keyboard({
openOn : null,
stayOpen : true,
layout : 'qwerty'
});
$(':text').each(function(){
var textDom = $(this);
var kbicon=$('<span class="input-group-addon"><i class="fa fa-keyboard-o" name="amount"></i></span>');
kbicon.click(function(){
var kb = textDom.getkeyboard();
// close the keyboard if the keyboard is visible and the button is clicked a second time
if(kb.isOpen) {
kb.close();
} else {
kb.reveal();
}
});
$(this).after(kbicon);
});
var options = {
delay: false,
position: 'bottom right',
......
......@@ -8,6 +8,7 @@
<!--[if IE 8]> <html lang="en" class="ie8 no-js"> <![endif]-->
<!--[if IE 9]> <html lang="en" class="ie9 no-js"> <![endif]-->
<!--[if !IE]><!-->
<!DOCTYPE html>
<%@ include file="/common/taglibs.jsp"%>
<%@ page language="java" pageEncoding="UTF-8"%>
......@@ -23,6 +24,10 @@
<meta content="" name="author"/>
<!-- BEGIN GLOBAL MANDATORY STYLES -->
<link href="${ctx}/assets/jqkeyboard/jquery-ui.min.css" rel="stylesheet" type="text/css"/>
<link href="${ctx}/assets/jqkeyboard/keyboard.css" rel="stylesheet" type="text/css"/>
<link href="${ctx}/assets/global/plugins/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"/>
<link href="${ctx}/assets/global/plugins/simple-line-icons/simple-line-icons.min.css" rel="stylesheet" type="text/css"/>
<link href="${ctx}/assets/global/plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css"/>
......@@ -37,9 +42,17 @@
<link href="${ctx}/assets/admin/layout/css/layout.css" rel="stylesheet" type="text/css"/>
<link href="${ctx}/assets/admin/layout/css/themes/default.css" rel="stylesheet" type="text/css" id="style_color"/>
<link href="${ctx}/assets/admin/layout/css/custom.css" rel="stylesheet" type="text/css"/>
<!-- END THEME STYLES -->
<link rel="shortcut icon" href="${ctx}/favicon.ico"/>
<decorator:head/>
<style type="text/css">
.ui-keyboard{
font-size: 25px;
}
</style>
</head>
<!-- END HEAD -->
<!-- BEGIN BODY -->
......@@ -84,15 +97,24 @@
<script src="${ctx}/assets/admin/layout/scripts/layout.js" type="text/javascript"></script>
<script src="${ctx}/assets/admin/layout/scripts/demo.js" type="text/javascript"></script>
<script src="${ctx}/assets/admin/pages/scripts/login.js" type="text/javascript"></script>
<script src="${ctx}/assets/jqkeyboard/jquery-ui-custom.min.js" type="text/javascript"></script>
<script src="${ctx}/assets/jqkeyboard/jquery.keyboard.js?id=1" type="text/javascript"></script>
<!-- END PAGE LEVEL SCRIPTS -->
<script>
jQuery(document).ready(function() {
Metronic.init(); // init metronic core components
Layout.init(); // init current layout
Login.init();
Demo.init();
});
</script>
<%= (request.getAttribute("scripts") != null) ? request.getAttribute("scripts") : "" %>
<!-- END JAVASCRIPTS -->
</body>
</html>
......@@ -17,12 +17,18 @@
</div>
</c:if>
<div class="form-group">
<input type="text" name="j_username" id="j_username" class="form-control form-control-solid placeholder-no-fix"
placeholder="<fmt:message key="label.username"/>" required tabindex="1">
<div class="input-group">
<input type="text" name="j_username" id="j_username" class="form-control form-control-solid placeholder-no-fix"
placeholder="<fmt:message key="label.username"/>" required tabindex="1" style="background-image: none;">
<span class="input-group-addon" id="j_username_icon"><i class="fa fa-keyboard-o"></i></span>
</div>
</div>
<div class="form-group">
<div class="input-group">
<input type="password" class="form-control form-control-solid placeholder-no-fix" name="j_password" id="j_password" tabindex="2"
placeholder="<fmt:message key="label.password"/>" required>
placeholder="<fmt:message key="label.password"/>" required style="background-image: none;">
<span class="input-group-addon" id="j_password_icon"><i class="fa fa-keyboard-o"></i></span>
</div>
</div>
<div class="form-actions">
......@@ -44,10 +50,43 @@
<%--</p>--%>
<c:set var="scripts" scope="request">
<%@ include file="/scripts/login.js" %>
</c:set>
<c:set var="scripts" scope="page">
<%@ include file="/scripts/jquery-2.1.4.js" %>
<script src="${ctx}/scripts/login.js?id=1"></script>
<script>
$(document).ready(function() {
$('#j_username').keyboard({
openOn : null,
stayOpen : true,
layout : 'qwerty'
});
$('#j_username_icon').click(function(){
var kb = $('#j_username').getkeyboard();
// close the keyboard if the keyboard is visible and the button is clicked a second time
if (kb.isOpen ) {
kb.close();
} else {
kb.reveal();
}
});
$('#j_password').keyboard({
openOn : null,
stayOpen : true,
layout : 'qwerty'
});
$('#j_password_icon').click(function(){
var kb = $('#j_password').getkeyboard();
// close the keyboard if the keyboard is visible and the button is clicked a second time
if (kb.isOpen ) {
kb.close();
} else {
kb.reveal();
}
});
});
</script>
</c:set>
<%--<p><fmt:message key="login.passwordHint"/></p>--%>
......
位置,优先级,高度,宽度,料仓ID,设备IP,灯索引
1_1,10,70,500,1,192.168.200.220,1
1_2,10,70,500,1,192.168.200.220,2
1_3,10,70,500,1,192.168.200.220,3
1_4,10,70,500,1,192.168.200.220,4
1_5,10,70,500,1,192.168.200.220,5
1_6,10,70,500,1,192.168.200.220,6
1_7,10,70,500,1,192.168.200.220,7
1_8,10,70,500,1,192.168.200.220,8
1_9,10,70,500,1,192.168.200.220,9
1_10,10,70,500,1,192.168.200.220,10
1_11,10,70,500,1,192.168.200.220,11
1_12,10,70,500,1,192.168.200.220,12
1_13,10,70,500,1,192.168.200.220,13
1_14,10,70,500,1,192.168.200.220,14
1_15,10,70,500,1,192.168.200.220,15
1_16,10,70,500,1,192.168.200.220,16
1_17,10,70,500,1,192.168.200.220,17
1_18,10,70,500,1,192.168.200.220,18
1_19,10,70,500,1,192.168.200.220,19
1_20,10,70,500,1,192.168.200.220,20
1_21,10,70,500,1,192.168.200.220,21
1_22,10,70,500,1,192.168.200.220,22
1_23,10,70,500,1,192.168.200.220,23
1_24,10,70,500,1,192.168.200.220,24
1_25,10,70,500,1,192.168.200.220,25
1_26,10,70,500,1,192.168.200.220,26
1_27,10,70,500,1,192.168.200.220,27
1_28,10,70,500,1,192.168.200.220,28
1_29,10,70,500,1,192.168.200.220,29
1_30,10,70,500,1,192.168.200.220,30
1_31,10,70,500,1,192.168.200.220,31
1_32,10,70,500,1,192.168.200.220,32
1_33,10,70,500,1,192.168.200.220,33
1_34,10,70,500,1,192.168.200.220,34
1_35,10,70,500,1,192.168.200.220,35
1_36,10,70,500,1,192.168.200.220,36
1_37,10,70,500,1,192.168.200.220,37
1_38,10,70,500,1,192.168.200.220,38
1_39,10,70,500,1,192.168.200.220,39
1_40,10,70,500,1,192.168.200.220,40
1_41,10,70,500,1,192.168.200.220,41
2_1,10,70,500,1,192.168.200.220,84
2_2,10,70,500,1,192.168.200.220,83
2_3,10,70,500,1,192.168.200.220,82
2_4,10,70,500,1,192.168.200.220,81
2_5,10,70,500,1,192.168.200.220,80
2_6,10,70,500,1,192.168.200.220,79
2_7,10,70,500,1,192.168.200.220,78
2_8,10,70,500,1,192.168.200.220,77
2_9,10,70,500,1,192.168.200.220,76
2_10,10,70,500,1,192.168.200.220,75
2_11,10,70,500,1,192.168.200.220,74
2_12,10,70,500,1,192.168.200.220,73
2_13,10,70,500,1,192.168.200.220,72
2_14,10,70,500,1,192.168.200.220,71
2_15,10,70,500,1,192.168.200.220,70
2_16,10,70,500,1,192.168.200.220,69
2_17,10,70,500,1,192.168.200.220,68
2_18,10,70,500,1,192.168.200.220,67
2_19,10,70,500,1,192.168.200.220,66
2_20,10,70,500,1,192.168.200.220,65
2_21,10,70,500,1,192.168.200.220,64
2_22,10,70,500,1,192.168.200.220,63
2_23,10,70,500,1,192.168.200.220,62
2_24,10,70,500,1,192.168.200.220,61
2_25,10,70,500,1,192.168.200.220,60
2_26,10,70,500,1,192.168.200.220,59
2_27,10,70,500,1,192.168.200.220,58
2_28,10,70,500,1,192.168.200.220,57
2_29,10,70,500,1,192.168.200.220,56
2_30,10,70,500,1,192.168.200.220,55
2_31,10,70,500,1,192.168.200.220,54
2_32,10,70,500,1,192.168.200.220,53
2_33,10,70,500,1,192.168.200.220,52
2_34,10,70,500,1,192.168.200.220,51
2_35,10,70,500,1,192.168.200.220,50
2_36,10,70,500,1,192.168.200.220,49
2_37,10,70,500,1,192.168.200.220,48
2_38,10,70,500,1,192.168.200.220,47
2_39,10,70,500,1,192.168.200.220,46
2_40,10,70,500,1,192.168.200.220,45
2_41,10,70,500,1,192.168.200.220,44
3_1,10,70,500,1,192.168.200.220,87
3_2,10,70,500,1,192.168.200.220,88
3_3,10,70,500,1,192.168.200.220,89
3_4,10,70,500,1,192.168.200.220,90
3_5,10,70,500,1,192.168.200.220,91
3_6,10,70,500,1,192.168.200.220,92
3_7,10,70,500,1,192.168.200.220,93
3_8,10,70,500,1,192.168.200.220,94
3_9,10,70,500,1,192.168.200.220,95
3_10,10,70,500,1,192.168.200.220,96
3_11,10,70,500,1,192.168.200.220,97
3_12,10,70,500,1,192.168.200.220,98
3_13,10,70,500,1,192.168.200.220,99
3_14,10,70,500,1,192.168.200.220,100
3_15,10,70,500,1,192.168.200.220,101
3_16,10,70,500,1,192.168.200.220,102
3_17,10,70,500,1,192.168.200.220,103
3_18,10,70,500,1,192.168.200.220,104
3_19,10,70,500,1,192.168.200.220,105
3_20,10,70,500,1,192.168.200.220,106
3_21,10,70,500,1,192.168.200.220,107
3_22,10,70,500,1,192.168.200.220,108
3_23,10,70,500,1,192.168.200.220,109
3_24,10,70,500,1,192.168.200.220,110
3_25,10,70,500,1,192.168.200.220,111
3_26,10,70,500,1,192.168.200.220,112
3_27,10,70,500,1,192.168.200.220,113
3_28,10,70,500,1,192.168.200.220,114
3_29,10,70,500,1,192.168.200.220,115
3_30,10,70,500,1,192.168.200.220,116
3_31,10,70,500,1,192.168.200.220,117
3_32,10,70,500,1,192.168.200.220,118
3_33,10,70,500,1,192.168.200.220,119
3_34,10,70,500,1,192.168.200.220,120
3_35,10,70,500,1,192.168.200.220,121
3_36,10,70,500,1,192.168.200.220,122
3_37,10,70,500,1,192.168.200.220,123
3_38,10,70,500,1,192.168.200.220,124
3_39,10,70,500,1,192.168.200.220,125
3_40,10,70,500,1,192.168.200.220,126
3_41,10,70,500,1,192.168.200.220,127
位置,优先级,高度,宽度,料仓ID,设备IP,区域ID,灯索引
1_1_1,10,12,15,1,,1,0
1_1_2,10,12,15,1,,1,1
1_1_3,10,12,15,1,,1,2
1_1_4,10,12,15,1,,1,3
1_1_5,10,12,15,1,,1,4
1_1_6,10,12,15,1,,1,5
1_1_7,10,12,15,1,,1,6
1_1_8,10,12,15,1,,1,7
1_1_9,10,12,15,1,,1,8
1_1_10,10,12,15,1,,1,9
1_1_11,10,12,15,1,,1,10
1_1_12,10,12,15,1,,1,11
1_1_13,10,12,15,1,,1,12
1_1_14,10,12,15,1,,1,13
1_1_15,10,12,15,1,,1,14
1_1_16,10,12,15,1,,1,15
1_1_17,10,12,15,1,,1,16
1_1_18,10,12,15,1,,1,17
1_1_19,10,12,15,1,,1,18
2_1_1,10,12,15,1,,2,0
2_1_2,10,12,15,1,,2,1
2_1_3,10,12,15,1,,2,2
2_1_4,10,12,15,1,,2,3
2_1_5,10,12,15,1,,2,4
2_1_6,10,12,15,1,,2,5
2_1_7,10,12,15,1,,2,6
2_1_8,10,12,15,1,,2,7
2_1_9,10,12,15,1,,2,8
2_1_10,10,12,15,1,,2,9
2_1_11,10,12,15,1,,2,10
2_1_12,10,12,15,1,,2,11
2_1_13,10,12,15,1,,2,12
2_1_14,10,12,15,1,,2,13
2_1_15,10,12,15,1,,2,14
2_1_16,10,12,15,1,,2,15
2_1_17,10,12,15,1,,2,16
2_1_18,10,12,15,1,,2,17
2_1_19,10,12,15,1,,2,18
status,,,,,,1,19
<script type="text/javascript">
if ($.cookie("username") != null && $.cookie("username") != "") {
$("#j_username").val($.cookie("username"));
$("#j_password").focus();
......@@ -42,8 +42,8 @@
function saveUsername(theForm) {
$.cookie("username",theForm.j_username.value, { expires: 30, path: "<c:url value="/"/>"});
}
function validateForm(form) {
function validateForm(form) {
var valid = validateRequired(form);
if (valid == false) {
$(".form-group").addClass('error');
......@@ -51,26 +51,25 @@
return valid;
}
function passwordHint() {
if ($("#j_username").val().length == 0) {
alert("<fmt:message key="errors.required"><fmt:param><fmt:message key="label.username"/></fmt:param></fmt:message>");
$("#j_username").focus();
} else {
location.href="<c:url value="/passwordHint"/>?username=" + $("#j_username").val();
}
}
function requestRecoveryToken() {
if ($("#j_username").val().length == 0) {
alert("<fmt:message key="errors.required"><fmt:param><fmt:message key="label.username"/></fmt:param></fmt:message>");
$("#j_username").focus();
} else {
location.href="<c:url value="/requestRecoveryToken"/>?username=" + $("#j_username").val();
}
}
function required () {
this.aa = new Array("j_username", "<fmt:message key="errors.required"><fmt:param><fmt:message key="label.username"/></fmt:param></fmt:message>", new Function ("varName", " return this[varName];"));
this.ab = new Array("j_password", "<fmt:message key="errors.required"><fmt:param><fmt:message key="label.password"/></fmt:param></fmt:message>", new Function ("varName", " return this[varName];"));
}
</script>
//function passwordHint() {
// if ($("#j_username").val().length == 0) {
// alert("<fmt:message key="errors.required"><fmt:param><fmt:message key="label.username"/></fmt:param></fmt:message>");
// $("#j_username").focus();
// } else {
// location.href="<c:url value="/passwordHint"/>?username=" + $("#j_username").val();
// }
//}
//
//function requestRecoveryToken() {
// if ($("#j_username").val().length == 0) {
// alert("<fmt:message key="errors.required"><fmt:param><fmt:message key="label.username"/></fmt:param></fmt:message>");
// $("#j_username").focus();
// } else {
// location.href="<c:url value="/requestRecoveryToken"/>?username=" + $("#j_username").val();
// }
//}
//
//function required () {
// this.aa = new Array("j_username", "<fmt:message key="errors.required"><fmt:param><fmt:message key="label.username"/></fmt:param></fmt:message>", new Function ("varName", " return this[varName];"));
// this.ab = new Array("j_password", "<fmt:message key="errors.required"><fmt:param><fmt:message key="label.password"/></fmt:param></fmt:message>", new Function ("varName", " return this[varName];"));
//}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!