Commit 64f6829b sunke

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

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