Commit 64f6829b sunke

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

2 料架线别显示顺序由2R 1F 修改为1F 2R (这个现在根据配置顺序显示)
3 键盘使用enter键确认
1 个父辈 3ae6dee1
正在显示 46 个修改的文件 包含 627 行增加544 行删除
......@@ -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;
}
}
......@@ -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
......
......@@ -409,3 +409,4 @@ 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
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
......@@ -366,3 +366,4 @@ settings.restore.warning=\u8B66\u544A\:\u8FD8\u539F\u540E,\u7CFB\u7EDF\u5C06\u8F
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
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>--%>
<%--&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>
<%--<p class="help-block">--%>
<%--说明:宽高相等时,只生成二维码;宽大于高时,文字在二维码右侧;宽小于高时,文字在二维码下方.二维码的大小为宽高中较小的值--%>
<%--</p>--%>
</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">
......
......@@ -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">
......
......@@ -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>
......
......@@ -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">
<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">
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();
......@@ -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!