Commit 1045729e sunke

1 解析条码时过滤唯一码重复的条码

2 PN导入功能
3 PDA首页图标排布
4 工单数量修改
5 查找出库按钮放弹出页面上方
6 登陆页面标题改为SMD-BOX
7 增加DUO料仓类型,优先处理入库
8 导入工单时,支持FEEDER字段
9 Session过期时间设置为1分种(浏览器关闭10分钟后退出登陆)
10 将SPN统一为SP
11 去除虚拟仓
1 个父辈 d596dd3d
正在显示 35 个修改的文件 包含 293 行增加170 行删除
PN,W,H,QTY,SP,SPN
1267370610,13,8,50000,,
1267370613,13,8,50000,,
1275100970,15,56,150,,
PN,W,H,QTY,SP
1267370610,13,8,50000,
1267370613,13,8,50000,
1275100970,15,56,150,
PN,FEEDER,QTY
6013A0825801,1-1,100
6013A0619401,1-2,500
6010A0617801,2-1,500
......@@ -549,7 +549,7 @@
</dependencies>
<properties>
<app.name>myproject</app.name>
<app.name>smdbox</app.name>
<amp.genericCore>true</amp.genericCore>
<amp.fullSource>false</amp.fullSource>
<dao.framework>hibernate</dao.framework>
......
......@@ -287,11 +287,12 @@ public class OrderFileWatch {
log.info("未包含PN列");
return null;
}
int qtyIndex = csvRead.getIndex("NUM");
int qtyIndex = csvRead.getIndex("NUM","QTY");
if (qtyIndex == -1){
log.info("未包含【NUM】列");
return null;
}
int feederIndex = csvRead.getIndex("FEEDER");
while(csvRead.readRecord()){
String[] lineValues = csvRead.getValues();
String partNumber = lineValues[partNumberIndex];
......@@ -310,9 +311,14 @@ public class OrderFileWatch {
}
}
}
String feeder = "";
if(feederIndex != -1){
feeder = lineValues[feederIndex];
}
LiteOrderItem item = new LiteOrderItem();
item.setPn(partNumber);
item.setNeedNum(num);
item.setFeederInfo(feeder);
items.add(item);
}
}
......
......@@ -56,6 +56,11 @@ public class LiteOrder extends BaseMongoBean {
private long taskFinishedTime = -1;
/**
* 套(倍)数
*/
private float orderTimes = 1f;
/**
* 订单的详细信息
*/
@Transient
......@@ -194,4 +199,15 @@ public class LiteOrder extends BaseMongoBean {
public void setClosed(boolean closed) {
this.closed = closed;
}
public float getOrderTimes() {
if(orderTimes == 0){
orderTimes = 1f;
}
return orderTimes;
}
public void setOrderTimes(float orderTimes) {
this.orderTimes = orderTimes;
}
}
......@@ -77,7 +77,7 @@ public class Component extends BaseMongoBean {
/**
* 供应商PN,用于扫码贴标机转换PN
*/
private String supplierPn;
// private String supplierPn;
//uid
private String uid;
......@@ -399,11 +399,11 @@ public class Component extends BaseMongoBean {
return type == StorageConstants.COMPONENT_TYPE.SOLDERPASTE;
}
public String getSupplierPn() {
return supplierPn;
}
public void setSupplierPn(String supplierPn) {
this.supplierPn = supplierPn;
}
// public String getSupplierPn() {
// return supplierPn;
// }
//
// public void setSupplierPn(String supplierPn) {
// this.supplierPn = supplierPn;
// }
}
......@@ -22,6 +22,7 @@ public class Storage extends BaseMongoBean {
* 程序路径
*/
private String sourcePath;
@NotEmpty(message = "{storage.cid.empty}")
private String cid;
private int totalSlots;
private int emptySlots;
......@@ -53,25 +54,25 @@ public class Storage extends BaseMongoBean {
/**
* 禁止出入库的 box
*/
private List<Integer> disableBoxes;
public List<Integer> getDisableBoxes() {
return disableBoxes;
}
/**
* 判断 box 是否可用
*/
public boolean isBoxEnable(Integer boxId){
if(disableBoxes != null){
return disableBoxes.contains(boxId);
}
return true;
}
public void setDisableBoxes(List<Integer> disableBoxes) {
this.disableBoxes = disableBoxes;
}
// private List<Integer> disableBoxes;
//
// public List<Integer> getDisableBoxes() {
// return disableBoxes;
// }
//
// /**
// * 判断 box 是否可用
// */
// public boolean isBoxEnable(Integer boxId){
// if(disableBoxes != null){
// return disableBoxes.contains(boxId);
// }
// return true;
// }
//
// public void setDisableBoxes(List<Integer> disableBoxes) {
// this.disableBoxes = disableBoxes;
// }
public String getType() {
return type;
......@@ -217,6 +218,13 @@ public class Storage extends BaseMongoBean {
return StorageConstants.TYPE.SMD_XL.name().equals(type);
}
/**
* 是否是Duo料仓
*/
public boolean isSmdDuo() {
return StorageConstants.TYPE.SMD_DUO.name().equals(type);
}
public boolean canPutInPos(int w, int h, int PosW, int posH){
......
......@@ -183,9 +183,9 @@ public class StatusBean {
/**
* 获取客户端发送上来的二维码对应的 boxId
*/
public String getCodeBoxId(){
return data.get("boxId");
}
// public String getCodeBoxId(){
// return data.get("boxId");
// }
public void setCode(String barcode){
data.put("code",barcode);
......@@ -362,82 +362,82 @@ public class StatusBean {
return false;
}
public List<Integer> allIdleBoxIds(){
List<Integer> idleBoxIds = new ArrayList<>();
if(!timeOut()){//在线
if(StorageConstants.STATUS.OFFLINE != status){//在线
for (BoxStatusBean boxStatusBean : boxStatus.values()) {
if(boxStatusBean.boxIsIdle()){
idleBoxIds.add(boxStatusBean.getBoxId());
}
}
}
}
return idleBoxIds;
}
// public List<Integer> allIdleBoxIds(){
// List<Integer> idleBoxIds = new ArrayList<>();
// if(!timeOut()){//在线
// if(StorageConstants.STATUS.OFFLINE != status){//在线
// for (BoxStatusBean boxStatusBean : boxStatus.values()) {
// if(boxStatusBean.boxIsIdle()){
// idleBoxIds.add(boxStatusBean.getBoxId());
// }
// }
// }
// }
// return idleBoxIds;
// }
/**
* 所有可以出库的 box
*/
public List<Integer> allCanCheckoutBoxIds(){
List<Integer> canCheckoutBoxIds = new ArrayList<>();
if(StorageConstants.STATUS.OFFLINE != status){//在线
for (BoxStatusBean boxStatusBean : boxStatus.values()) {
if(boxStatusBean.boxCanCheckout()){
canCheckoutBoxIds.add(boxStatusBean.getBoxId());
}
}
}
return canCheckoutBoxIds;
}
// public List<Integer> allCanCheckoutBoxIds(){
// List<Integer> canCheckoutBoxIds = new ArrayList<>();
// if(StorageConstants.STATUS.OFFLINE != status){//在线
// for (BoxStatusBean boxStatusBean : boxStatus.values()) {
// if(boxStatusBean.boxCanCheckout()){
// canCheckoutBoxIds.add(boxStatusBean.getBoxId());
// }
// }
// }
// return canCheckoutBoxIds;
// }
/**
* 获取所有可以入库的 BOXID(用正则的|线隔开),即 BOX 可以正常使用(没有急停,故障,调试等)并且不是出库状态(正在出库时如果再分配入库有可能会出现卡死的情况,即出库要等空托盘,但入库的托盘卡在移载处)
*/
public List<Integer> allCanPutInBoxIds(){
List<Integer> canPutInBoxIds = new ArrayList<>();
String idleBoxIds = "";
for (BoxStatusBean boxStatusBean : boxStatus.values()) {
//可正常使用,且未在出库执行中
if(boxStatusBean.boxIsAvailable() && !boxStatusBean.boxIsCheckingOut()){
canPutInBoxIds.add(boxStatusBean.getBoxId());
}
}
return canPutInBoxIds;
}
// public List<Integer> allCanPutInBoxIds(){
// List<Integer> canPutInBoxIds = new ArrayList<>();
// String idleBoxIds = "";
// for (BoxStatusBean boxStatusBean : boxStatus.values()) {
// //可正常使用,且未在出库执行中
// if(boxStatusBean.boxIsAvailable() && !boxStatusBean.boxIsCheckingOut()){
// canPutInBoxIds.add(boxStatusBean.getBoxId());
// }
// }
// return canPutInBoxIds;
// }
/**
* 判断某个 box 是否可以执行入库操作
*/
public boolean isBoxCanPutIn(int boxId){
if(timeOut()){
return false;
}
for (BoxStatusBean boxStatusBean : boxStatus.values()) {
//可正常使用,且未在出库执行中
int bid = boxStatusBean.getBoxId();
if(bid == boxId){
if(boxStatusBean.boxIsAvailable() && !boxStatusBean.boxIsCheckingOut()){
return true;
}
return false;
}
}
return false;
}
public void updateBoxStatus(String posName, int boxStatusToChange){
int index = posName.indexOf("#");
if(index > 0){
int boxId = Integer.valueOf(posName.substring(0,index));
for (BoxStatusBean boxStatusBean : boxStatus.values()) {
if(boxStatusBean.getBoxId() == boxId){
boxStatusBean.setStatus(boxStatusToChange);
break;
}
}
}
}
// public boolean isBoxCanPutIn(int boxId){
// if(timeOut()){
// return false;
// }
// for (BoxStatusBean boxStatusBean : boxStatus.values()) {
// //可正常使用,且未在出库执行中
// int bid = boxStatusBean.getBoxId();
// if(bid == boxId){
// if(boxStatusBean.boxIsAvailable() && !boxStatusBean.boxIsCheckingOut()){
// return true;
// }
// return false;
// }
// }
// return false;
// }
// public void updateBoxStatus(String posName, int boxStatusToChange){
// int index = posName.indexOf("#");
// if(index > 0){
// int boxId = Integer.valueOf(posName.substring(0,index));
// for (BoxStatusBean boxStatusBean : boxStatus.values()) {
// if(boxStatusBean.getBoxId() == boxId){
// boxStatusBean.setStatus(boxStatusToChange);
// break;
// }
// }
// }
// }
public String getMsgEn() {
return msgEn;
......
......@@ -10,6 +10,8 @@ public interface ILiteOrderDao extends IMongoDao {
LiteOrder findByOrderNo(String orderNo);
void updateOrderTimes(String orderId, float orderTimes);
LiteOrder createWithItems(LiteOrder liteOrder);
LiteOrder findWithItemsByOrderNo(String orderNo);
......
......@@ -17,6 +17,7 @@ import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Repository;
import java.util.*;
......@@ -38,6 +39,18 @@ public class LiteOrderDaoImpl extends AbstractMongoDao implements ILiteOrderDao
}
@Override
public void updateOrderTimes(String orderId, float orderTimes){
update(orderId,"orderTimes",orderTimes);
}
private void update(String orderId, String key, Object value){
Criteria c = Criteria.where("id").is(orderId);
Query query = Query.query(c);
Update update = Update.update(key,value);
updateFirst(query,update);
}
@Override
public LiteOrder createWithItems(LiteOrder liteOrder){
List<LiteOrderItem> items = Lists.newArrayList();
for (LiteOrderItem liteOrderItem : liteOrder.getOrderItems()) {
......
......@@ -62,7 +62,7 @@ public interface IStoragePosManager extends IManager<StoragePos> {
/**
* 查找物料,只返回入库时间最早的一个
*/
StoragePos findComponent(String storageId, String boxId, Collection<String> partNumbers, Collection<String> excludePosIds, StorageConstants.CHECKOUT_TYPE checkoutType);
StoragePos findComponent(String storageId, Collection<String> partNumbers, Collection<String> excludePosIds, StorageConstants.CHECKOUT_TYPE checkoutType);
List<StoragePos> findNotEmptyByStorageId(String storageId);
......
......@@ -65,7 +65,7 @@ public class ComponentManagerImpl implements IComponentManager {
@Override
public List<Component> listPnBySupplierPn(String supplierPn){
Criteria c = Criteria.where("supplierPn").regex(supplierPn);
Criteria c = Criteria.where("provider").regex(supplierPn);
Query query = Query.query(c);
query.limit(10);
return componentDao.findByQuery(query);
......
......@@ -228,7 +228,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
* @return
*/
@Override
public StoragePos findComponent(String storageId, String boxId, Collection<String> partNumbers, Collection<String> excludePosIds, StorageConstants.CHECKOUT_TYPE checkoutType){
public StoragePos findComponent(String storageId, Collection<String> partNumbers, Collection<String> excludePosIds, StorageConstants.CHECKOUT_TYPE checkoutType){
Criteria c = Criteria.where("storageId").is(storageId)
.and("barcode.partNumber").in(partNumbers)
.and("barcode.lockId").is(null)//没有被锁定的仓位
......
......@@ -297,7 +297,13 @@ public class StorageConstants {
/**
* 12 SMD-XL(方仓)
*/
SMD_XL("storage.type.smdXl")
SMD_XL("storage.type.smdXl"),
/**
* 13 SMD-DUO(DUO料仓)
*/
SMD_DUO("storage.type.smdDuo")
;
......@@ -320,7 +326,7 @@ public class StorageConstants {
}
public static List<TYPE> availableTypeList(){
return Lists.newArrayList(AUTO,LINE,VIRTUAL,BATCH,ACCSHELF,CODESHELF,SOLDERPASTE,VERTICALBOX,SMD_XL);
return Lists.newArrayList(AUTO,LINE,BATCH,ACCSHELF,CODESHELF,SOLDERPASTE,VERTICALBOX,SMD_XL);
}
}
......
......@@ -220,7 +220,7 @@ public class FileUploadController extends BaseFormController {
// throw new ValidateException("必须包含【供应商】或【supplier】列");
// }
int spnIndex = csvRead.getIndex("供应商PN","SPN");
// int spnIndex = csvRead.getIndex("供应商PN","SPN");
// int typeIndex = csvRead.getIndex("类型","type");
// if (typeIndex == -1){
......@@ -238,10 +238,10 @@ public class FileUploadController extends BaseFormController {
qtyStr = lineValues[qtyIndex];
}
String spn = "";
if(spnIndex != -1){
spn = lineValues[spnIndex];
}
// String spn = "";
// if(spnIndex != -1){
// spn = lineValues[spnIndex];
// }
String wStr = lineValues[wIndex];
String hStr = lineValues[hIndex];
......@@ -264,7 +264,7 @@ public class FileUploadController extends BaseFormController {
component.setProvider(supplier);
component.setSupplierPn(spn);
// component.setSupplierPn(spn);
//component.setType(Integer.valueOf(typeStr));
list.add(component);
......
......@@ -40,6 +40,9 @@ public class BarcodeSettingsController extends SettingsController {
} else {
try {
String[] codeRuleList = request.getParameterValues("codeRuleList");
if(codeRuleList.length > 10){
throw new ValidateException("barcode.error.maxRule","条码规则最多只允许有10个");
}
if(codeRuleList != null){
settings.setCodeRuleList(Lists.newArrayList(codeRuleList));
}
......
......@@ -15,6 +15,7 @@ import com.myproject.dao.mongo.IDataLogDao;
import com.myproject.exception.ValidateException;
import com.myproject.manager.IBarcodeManager;
import com.myproject.manager.IStoragePosManager;
import com.myproject.model.User;
import com.myproject.util.StorageConstants;
import com.myproject.webapp.controller.webService.DataCache;
import com.myproject.webapp.controller.webService.ITaskService;
......@@ -154,6 +155,7 @@ public class CodeShelfController extends BaseController {
@RequestMapping("/service/store/codeShelf/codeIn")
@ResponseBody
public String codeIn(HttpServletRequest request, HttpSession httpSession){
String sessionId = httpSession.getId();
String codeStr = request.getParameter("code");
int delayCloseTime = 30000;
......
......@@ -107,6 +107,7 @@ public class StoragePosUpdateController extends BaseUpdateController {
if("false".equalsIgnoreCase(enabledStr)){
enabled = false;
}
log.info("库位禁/启用操作:" + enabled);
pos.setEnabled(enabled);
try {
storagePosManager.save(pos);
......
......@@ -252,7 +252,7 @@ public class DataCache{
barcode.setHeight(codeBeanFromRule.getReelHeight());
barcode = barcodeManager.save(barcode);
}catch (Exception ve){
log.error("重设尺寸出错",ve);
}
}
}
......
......@@ -88,6 +88,15 @@ public class StorageDataController extends BaseController {
}
}
/**
* 检查是否登陆
*/
@RequestMapping("/getLoginUser")
@ResponseBody
public String getLoginUser(HttpServletRequest request){
return StorageDataController.getLoginUsername();
}
@RequestMapping(value = "/countExpirePcb")
@ResponseBody
public int countExpirePcb(){
......@@ -136,7 +145,7 @@ public class StorageDataController extends BaseController {
for (LiteOrderItem item : items) {
InventoryItem pnInventory = inventoryMap.get(item.getPn());
if(pnInventory != null){
item.setInventoryNum(pnInventory.getStockCount());
item.setInventoryNum(pnInventory.getStockCount() - pnInventory.getLockCount());
}
}
order.setOrderItems(items);
......@@ -522,16 +531,25 @@ public class StorageDataController extends BaseController {
try{
if(!Strings.isNullOrEmpty(orderNo) && !Strings.isNullOrEmpty(numStr)){
float numRate = Float.valueOf(numStr);
List<LiteOrderItem> items = liteOrderItemDao.findOrderItems(orderNo);
for (LiteOrderItem item : items) {
int needNum = item.getNeedNum();
Float newNeedNum = needNum * numRate;
item.setNeedNum(newNeedNum.intValue());
liteOrderItemDao.save(item);
// List<LiteOrderItem> items = liteOrderItemDao.findOrderItems(orderNo);
// for (LiteOrderItem item : items) {
// int needNum = item.getNeedNum();
// Float newNeedNum = needNum * numRate;
// item.setNeedNum(newNeedNum.intValue());
// liteOrderItemDao.save(item);
// }
//LiteOrder liteOrder = liteOrderDao.findWithItemsByOrderNo(orderNo);
LiteOrder liteOrder = TaskService.liteOrderMap.get(orderNo);
if(liteOrder == null){
log.info("缓存中未找到["+orderNo+"],从数据库中重新加载");
liteOrder = liteOrderDao.findWithItemsByOrderNo(orderNo);
}
if(liteOrder != null){
liteOrderDao.updateOrderTimes(liteOrder.getId(),numRate);
liteOrder.setOrderTimes(numRate);
TaskService.liteOrderMap.put(liteOrder.getOrderNo(), liteOrder);
}
LiteOrder liteOrder = liteOrderDao.findWithItemsByOrderNo(orderNo);
TaskService.liteOrderMap.put(liteOrder.getOrderNo(), liteOrder);
return "0"+getText("shelf.msg.opSucess",request.getLocale(),"操作成功");
}
}catch (Exception e){
......
......@@ -63,7 +63,7 @@ component.amount=Qty
component.encapsulation=Package
component.unit=Unit
component.unitCost=Unit Cost
component.provider=Supplier
component.provider=Supplier Code/PN
component.providerNumber=Supplier No.
component.producer=Manufacturer
component.producerNumber=Manufacturer No.
......@@ -92,8 +92,7 @@ barcode.partNumber=Part Number
barcode.amount=Qty
barcode.plateSize=Diameter
barcode.height=Height
barcode.provider=Supplier
barcode.supplierPn=Supplier PN
barcode.provider=Supplier Code/PN
barcode.batch=Batch
barcode.expireDate=Expiration Date
barcode.saveSuccess=Barcode Saved
......@@ -152,6 +151,7 @@ storage.type.cabinet=Cabinet
storage.type.solderPaste=SMD-SP
storage.type.smdVl=SMD-VL
storage.type.smdXl=SMD-XL
storage.type.smdDuo=SMD-DUO
storage.type.codeShelf=Code Shelf
storage.type.accShelf=Smart Shelf
storage.compatibility=Compatibility
......@@ -361,7 +361,7 @@ shelf.msg.opSucess=Operation complete
shelf.msg.notFound=Shelf is not found.
shelf.msg.outOk=Please take out the material from the location [{0}]
shelf.msg.outConfirm=Delivery confirmation from [{0}] succeeded.
shelf.msg.noTask=Failed\: the material is in [{0}], but no task for it.
shelf.msg.noTask=Failed: the material is in [{0}], but no task for it.
shelf.msg.outError=No material is found.
shelf.msg.inOk=Please put the material in the location [{0}]
shelf.msg.inError=No suitable location for [{0}] is found.
......@@ -380,6 +380,9 @@ order.out.failed=Can not execute task
order.out.notFound=The order info was not found
order.error.executing=The task is executing.
order.inventory=inventory
order.quantity=quantity
order.outQuantity=out quantity
order.feeder=feeder
order.num.modify=Order Qty Modify
order.modify.tip=Modify Qty to\: current quantity times
order.close=Close
......@@ -407,12 +410,14 @@ storage.virtual.numEmpty=Reel Count is required.
storage.virtual.numErrory=Reel Count must be a number that is greater than 0.
barcode.error.noRi=Barcode rule must has RI and PN fields.
barcode.error.maxRule=The maximum of barcode rule is 12
barcode.error.notFound=Barcode is not found.
error.barcode.inQueue=Failed\: The barcode [{0}] is in queue.
error.pos.inQueue=Failed\: The location [{0}] is in queue.
error.barcode.empty=No barcode is scanned.
error.barcode.many=more than one valid barcodes were found.
error.storage.unavailable=The storage is unavailable.
error.storage.offline=The storage [{0}] is offline.
error.storage.noStorage=There is no storage can use.
error.storage.noPos=There is no availble position of [{0}]
error.barcode.wrongSize=The reel has wrong size [{0}]
......@@ -434,6 +439,7 @@ error.barcode.wrongProduceDate=The manufacturing date is wrong
error.barcode.pnNotExist=x Component {0} does not exist
error.barcode.errorSize=x The reel has no size.
error.storage.noPosFind=No availble position is found.
error.barcode.taskNotEnd=Failure\: the task of the material[{0}] is not end.
msg.line.putIn=Put [{0}] into [{1}]
delete.confirm=Are you sure to delete?
barcode.error.used=Barcode is used.
......
......@@ -5,7 +5,7 @@ storage.clearAllPos=Clear All
shelf.msg.notFound=Shelf is not found.
button.checkout=Material Retrieval
op.status.pause=Process paused
barcode.provider=Supplier
barcode.provider=Supplier Code/PN
cabinet.error.validOp=Operation failure\: unable to open the door
workOrder.deleteSuccess=Work Order deleted
updatePassword.newPassword.label=New Password
......@@ -164,7 +164,7 @@ op.7=Rewarm Putting
op.6=Rewarm Taking
storage.virtual.numErrory=Reel quantity limit must be a number greater than 0.
barcode.error.component.notExist=No component is tied to {0}, please check.
component.provider=Supplier
component.provider=Supplier Code/PN
op.2=Material Retrieval
button.return=Return
op.1=Material Storage
......@@ -423,3 +423,10 @@ order.error.executing=The task is executing.
error.barcode.noValidCode=There is no valid barcode in the [{0}] scanned code \: {1}
error.file.culumn.required=The column {0} is required.
file.upload.result=Read [{0}] items\: add\u3010{1}\u3011items, update\u3010{2}\u3011items.
order.quantity=quantity
order.outQuantity=out quantity
order.feeder=feeder
storage.type.smdDuo=SMD-DUO
error.storage.offline=The storage [{0}] is offline.
barcode.error.maxRule=The maximum of barcode rule is 12
error.barcode.taskNotEnd=Failure\: the task of the material[{0}] is not end.
......@@ -215,7 +215,7 @@ shelf.msg.scanPos=\u30B9\u30C8\u30EC\u30FC\u30B8\u30B3\u30FC\u30C9\u3092\u30B9\u
barcode.error.used=\u4F7F\u7528\u6E08\u307F\u306E\u30D0\u30FC\u30B3\u30FC\u30C9\u306F\u524A\u9664\u3067\u304D\u306A\u3044
storage.slotAmount=\u30B9\u30C8\u30EC\u30FC\u30B8\u306E\u6570\u91CF
area.name=\u30A8\u30EA\u30A2\u540D\u79F0
shelf.msg.noTask=\u64CD\u4F5C\u5931\u6557\uFF1A\u30B9\u30C8\u30EC\u30FC\u30B8[{0}]\u306E\u4E2D\u306B\u3042\u308A\u307E\u3059\u304C\u3001\u5BFE\u5FDC\u3059\u308B\u51FA\u5EAB\u30BF\u30B9\u30AF\u304C\u898B\u3064\u304B\u3089\u306A\u3044
shelf.msg.noTask=\u64CD\u4F5C\u5931\u6557\: \u30B9\u30C8\u30EC\u30FC\u30B8[{0}]\u306E\u4E2D\u306B\u3042\u308A\u307E\u3059\u304C\u3001\u5BFE\u5FDC\u3059\u308B\u51FA\u5EAB\u30BF\u30B9\u30AF\u304C\u898B\u3064\u304B\u3089\u306A\u3044
area.view.subtitle=\u30A8\u30EA\u30A2\u76E3\u8996
dataLog.type=\u30BF\u30A4\u30D7
shelf.nextPos.wrongSize=x \u6B21\u306E\u30B9\u30C8\u30EC\u30FC\u30B8[{0}]\u306E\u30B5\u30A4\u30BA[{2}]\u3068\u30EA\u30FC\u30EB\u306E\u30B5\u30A4\u30BA\u304C\u4E00\u81F4\u3057\u3066\u3044\u306A\u3044\u3001\u30B9\u30C8\u30EC\u30FC\u30B8\u306E\u30B3\u30FC\u30C9\u3092\u518D\u30B9\u30AD\u30E3\u30F3\u3057\u3066\u304F\u3060\u3055\u3044\u3002
......@@ -422,3 +422,10 @@ order.error.executing=The task is executing.
error.barcode.noValidCode={0} \u306F\u6709\u52B9\u306A\u30D0\u30FC\u30B3\u30FC\u30C9\u3067\u306F\u306A\u3044
error.file.culumn.required=\u6587\u4EF6\u672A\u5305\u542B{0}\u5217
file.upload.result=\u8BFB\u53D6\u5230[{0}]\u6761\u7269\u6599\u4FE1\u606F\:\u65B0\u589E\u3010{1}\u3011\u66F4\u65B0\u3010{2}\u3011
order.quantity=\u9700\u6C42\u6570\u91CF
order.outQuantity=\u5DF2\u51FA\u6570\u91CF
order.feeder=\u7AD9\u4F4D
storage.type.smdDuo=SMD-DUO
error.storage.offline=\u8BBE\u5907[{0}]\u79BB\u7EBF
barcode.error.maxRule=The maximum of barcode rule is 12
error.barcode.taskNotEnd=\u6599\u76D8[{0}]\u7684\u64CD\u4F5C\u672A\u5B8C\u6210,\u65E0\u6CD5\u6267\u884C\u5165\u5E93\u64CD\u4F5C
......@@ -5,7 +5,7 @@ storage.clearAllPos=\u6E05\u7A7A\u6240\u6709\u4ED3\u4F4D
shelf.msg.notFound=\u672A\u627E\u5230\u6599\u67B6
button.checkout=\u51FA\u5E93
op.status.pause=\u5DF2\u6682\u505C
barcode.provider=\u4F9B\u5E94\u5546
barcode.provider=\u4F9B\u5E94\u5546\u7F16\u7801
cabinet.error.validOp=\u64CD\u4F5C\u5931\u8D25\uFF1A\u65E0\u6CD5\u5F00\u95E8
workOrder.deleteSuccess=\u5DE5\u5355\u5220\u9664\u6210\u529F
updatePassword.newPassword.label=\u65B0\u5BC6\u7801
......@@ -163,7 +163,7 @@ op.7=\u56DE\u6E29\u653E\u6599
op.6=\u56DE\u6E29\u53D6\u6599
storage.virtual.numErrory=\u53EF\u653E\u6599\u76D8\u6570\u91CF\u5FC5\u987B\u4E3A\u5927\u4E8E0\u7684\u6570\u5B57
barcode.error.component.notExist=\u6761\u7801{0}\u5173\u8054\u7684\u6599\u4EF6\u4E0D\u5B58\u5728\uFF0C\u8BF7\u68C0\u67E5\u6570\u636E\u662F\u5426\u6B63\u786E\u3002
component.provider=\u4F9B\u5E94\u5546
component.provider=\u4F9B\u5E94\u5546\u7F16\u7801
op.2=\u51FA\u5E93
button.return=\u8FD4\u56DE\u5217\u8868
op.1=\u5165\u5E93
......@@ -215,7 +215,7 @@ barcode.error.used=\u5DF2\u88AB\u4F7F\u7528\u7684\u6761\u7801\u65E0\u6CD5\u5220\
shelf.msg.scanPos=\u8BF7\u5148\u626B\u63CF\u5E93\u4F4D\u7801
storage.slotAmount=\u4ED3\u4F4D\u6570\u91CF
area.name=\u533A\u57DF\u540D\u79F0
shelf.msg.noTask=\u64CD\u4F5C\u5931\u8D25\uFF1A\u5DF2\u5728\u5E93\u4F4D[{0}]\u4E2D\uFF0C\u672A\u627E\u5230\u5BF9\u5E94\u7684\u51FA\u5E93\u4EFB\u52A1
shelf.msg.noTask=\u64CD\u4F5C\u5931\u8D25: \u5DF2\u5728\u5E93\u4F4D[{0}]\u4E2D\uFF0C\u672A\u627E\u5230\u5BF9\u5E94\u7684\u51FA\u5E93\u4EFB\u52A1
area.view.subtitle=\u533A\u57DF\u76D1\u63A7
dataLog.type=\u7C7B\u578B
shelf.nextPos.wrongSize=\u5E93\u4F4D[{0}]\u5C3A\u5BF8[{1}]\u4E0E\u6599\u76D8\u5C3A\u5BF8[{2}]\u4E0D\u7B26\uFF0C\u8BF7\u91CD\u65B0\u626B\u63CF\u5E93\u4F4D\u7801
......@@ -423,3 +423,10 @@ order.error.executing=\u4EFB\u52A1\u6B63\u5728\u6267\u884C
error.barcode.noValidCode=\u626B\u5230\u7684{0}\u4E2A\u6761\u7801\u4E2D\u672A\u627E\u5230\u6709\u6548\u6761\u7801{1}
error.file.culumn.required=\u6587\u4EF6\u672A\u5305\u542B{0}\u5217
file.upload.result=\u8BFB\u53D6\u5230[{0}]\u6761\u7269\u6599\u4FE1\u606F\:\u65B0\u589E\u3010{1}\u3011\u66F4\u65B0\u3010{2}\u3011
order.quantity=\u9700\u6C42\u6570\u91CF
order.outQuantity=\u5DF2\u51FA\u6570\u91CF
order.feeder=\u7AD9\u4F4D
storage.type.smdDuo=SMD-DUO
error.storage.offline=\u8BBE\u5907[{0}]\u79BB\u7EBF
barcode.error.maxRule=\u6761\u7801\u89C4\u5219\u7684\u6700\u5927\u6570\u91CF\u4E3A12
error.barcode.taskNotEnd=\u6599\u76D8[{0}]\u7684\u64CD\u4F5C\u672A\u5B8C\u6210,\u65E0\u6CD5\u6267\u884C\u5165\u5E93\u64CD\u4F5C
......@@ -14,7 +14,7 @@
<!--<mongo:mongo id="mongo" replica-set="${mongo.replica-set}">-->
<mongo:mongo id="mongo" host="${mongo.host}" port="27017">
<mongo:mongo id="mongo" host="192.168.1.34" port="27017">
<mongo:options connections-per-host="${mongo.connectionsPerHost}"
threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"
connect-timeout="${mongo.connectTimeout}" max-wait-time="${mongo.maxWaitTime}"
......
......@@ -452,14 +452,14 @@
<form:input type="text" id="provider" path="provider" class="form-control"/>
</div>
</div>
<%--供应商PN--%>
<label class="control-label col-md-2"><fmt:message key="barcode.supplierPn"/> </label>
<%--&lt;%&ndash;供应商PN&ndash;%&gt;--%>
<%--<label class="control-label col-md-2"><fmt:message key="barcode.supplierPn"/> </label>--%>
<div class="col-md-3">
<div style="text-align:left" class="input-group">
<form:input type="text" id="supplierPn" path="supplierPn" class="form-control"/>
</div>
</div>
<%--<div class="col-md-3">--%>
<%--<div style="text-align:left" class="input-group">--%>
<%--<form:input type="text" id="supplierPn" path="supplierPn" class="form-control"/>--%>
<%--</div>--%>
<%--</div>--%>
<%--&lt;%&ndash;贵重物料&ndash;%&gt;--%>
<%--<label class="control-label col-md-2"><fmt:message key="otherComponent.expensive"/> </label>--%>
......
......@@ -22,7 +22,7 @@
</div>
<div class="row iconMenu">
<security:authorize ifAnyGranted="ROLE_MANAGE_STACK_OUT">
<div class="col-md-2 col-xs-2 menuItem">
<div class="col-md-2 col-xs-4 menuItem">
<a href="${ctx}/storage/boxChart.html">
<img src="${ctx}/images/menu/10.png" class="menuImg"/>
<div>KANBAN</div>
......@@ -30,7 +30,7 @@
</div>
</security:authorize>
<security:authorize ifAnyGranted="ROLE_MANAGE_COMPONENT">
<div class="col-md-2 col-xs-2 menuItem">
<div class="col-md-2 col-xs-4 menuItem">
<a href="${ctx}/component/componentSearch.html?type=0">
<img src="${ctx}/images/menu/4.png" class="menuImg"/>
<div><fmt:message key="menu.product"/></div>
......@@ -38,7 +38,7 @@
</div>
</security:authorize>
<security:authorize ifAnyGranted="ROLE_MANAGE_STACK_OUT, ROLE_MANAGE_FEEDER">
<div class="col-md-2 col-xs-2 menuItem">
<div class="col-md-2 col-xs-4 menuItem">
<a href="${ctx}/component/storagePosFind.html">
<img src="${ctx}/images/menu/5.png" class="menuImg"/>
<div><fmt:message key="menu.order"/></div>
......@@ -46,7 +46,7 @@
</div>
</security:authorize>
<security:authorize ifAnyGranted="ROLE_MANAGE_STACK_OUT">
<div class="col-md-2 col-xs-2 menuItem">
<div class="col-md-2 col-xs-4 menuItem">
<a href="${ctx}/component/inventory.html">
<img src="${ctx}/images/menu/9.png" class="menuImg"/>
<div><fmt:message key="menu.cloud"/></div>
......@@ -55,7 +55,7 @@
</security:authorize>
<security:authorize ifAnyGranted="ROLE_MANAGE_BARCODE">
<div class="col-md-2 col-xs-2 menuItem">
<div class="col-md-2 col-xs-4 menuItem">
<a href="${ctx}/barcode/barcodeSearch.html">
<img src="${ctx}/images/menu/2.png" class="menuImg"/>
<div><fmt:message key="menu.barCode"/></div>
......@@ -64,7 +64,7 @@
</security:authorize>
<security:authorize ifAnyGranted="ROLE_MANAGE_DATALOG">
<div class="col-md-2 col-xs-2 menuItem">
<div class="col-md-2 col-xs-4 menuItem">
<a href="${ctx}/dataLog/search.html">
<img src="${ctx}/images/menu/1.png" class="menuImg"/>
<div><fmt:message key="menu.bigdata"/></div>
......@@ -73,7 +73,7 @@
</security:authorize>
<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-4 menuItem">
<a href="${ctx}/system/settings.html">
<img src="${ctx}/images/menu/6.png" class="menuImg"/>
<div><fmt:message key="menu.system"/></div>
......
......@@ -268,7 +268,11 @@
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" id="modal-title"></h4>
<h4 class="modal-title" id="modal-title" style="font-weight: 500;line-height: 2;margin-bottom: 5px;"><fmt:message key="button.checkout"/>
<a href="${ctx}/component/storagePosFind.html" class="btn yellow right" id="findAndOut" style="margin-right:20px;">
<i class="fa fa-sign-out"></i><fmt:message key="allBoxView.findAndOut"/>
</a>
</h4>
<input type="text" class="form-control" id="searchPn"/>
</div>
<div class="modal-body">
......@@ -338,10 +342,14 @@
<fmt:message key="barcode.partNumber"/>
</th>
<th>
<fmt:message key="checkOut.pos"/>
<fmt:message key="order.feeder"/>
</th>
<th>
<fmt:message key="order.quantity"/>
</th>
<th>
<fmt:message key="component.amount"/>
<fmt:message key="order.outQuantity"/>
</th>
<th>
<fmt:message key="order.inventory"/>
......@@ -526,7 +534,7 @@
var table = $('#orderItemsTable').DataTable();
table.clear();
var btnStr = "${supplementaryFinish}";
var btnStr = "${supplementary}";
for(var i in data){
var opStr = '<button class="btn yellow" onclick="checkoutByPartNumber(\''+data[i].pn+'\',\''+data[i].id+'\');"><i class="fa fa-upload"></i>'+btnStr+'</button>';
......@@ -534,7 +542,8 @@
// //已出完或库存不足
// opStr = "";
// }
table.row.add( [ i, data[i].pn, data[i].feederInfo,data[i].outNum+"/"+data[i].needNum,data[i].inventoryNum,opStr] );
var needQty = data[i].needNum + " x " + order.orderTimes;
table.row.add( [ i, data[i].pn, data[i].feederInfo,needQty,data[i].outNum,data[i].inventoryNum,opStr] );
}
table.order( [ 3, 'asc' ] ).draw();
......@@ -557,11 +566,7 @@
var pnList = [];
$("#outPn").click(function(){
$("#searchPn").val("");
var findAndOutHref = '${ctx}/component/storagePosFind.html';
$("#findAndOut").attr("href",findAndOutHref);
var modalTitle = "${title_checkout}";
$("#modal-title").text(modalTitle);
$.post("${ctx}/service/store/storageTypeInventory", {cid: '${cids}'}, function (data) {
pnList = data;
showpnList();
......
......@@ -140,11 +140,15 @@
</div>
<div id="allPartNumbers" class="modal fade" tabindex="-1" data-backdrop="static" data-keyboard="false">
<div class="modal-dialog" style="width: 800px; margin-top: 10%;">
<div class="modal-dialog" style="margin-top: 10%;width:80%;margin-left:10%;">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" id="modal-title" style="font-weight: 500;">出库</h4>
<h4 class="modal-title" id="modal-title" style="font-weight: 500;line-height: 2;margin-bottom: 5px;"><fmt:message key="button.checkout"/>
<a href="${ctx}/component/storagePosFind.html" class="btn yellow right" id="findAndOut" style="margin-right:20px;">
<i class="fa fa-sign-out"></i><fmt:message key="allBoxView.findAndOut"/>
</a>
</h4>
<input type="text" class="form-control" id="searchPn"/>
</div>
<div class="modal-body">
......@@ -157,7 +161,7 @@
</div>
<div class="modal-footer">
<div id="footerBtn">
<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="lastPage()" id="lastPage"><fmt:message key="allBoxView.lastPage"/></button>
<button type="button" class="btn green" onclick="nextPage()" id="nextPage"><fmt:message key="allBoxView.nextPage"/></button>
......@@ -233,11 +237,6 @@
showPartNumbers = function(type){
$("#searchPn").val();
var findAndOutHref = '${ctx}/component/storagePosFind.html';
$("#findAndOut").attr("href",findAndOutHref);
var modalTitle = "${title_checkout}";
$("#modal-title").text(modalTitle);
$.post("${ctx}/service/store/storageTypeInventory", {type: type, cid: '${show}'}, function (data) {
if(!isLimitOpt(data)){
pageIndex = -1;
......
......@@ -501,10 +501,18 @@
}
checkLogin = function(){
$.post("${ctx}/service/store/getLoginUser", {}, function (data) {
if(data == ""){
window.location.href="";
}
});
}
//updateTasks('${show}');
setInterval(function(){
updateTasks('${show}');
checkLogin();
}, 1000);
waitting = function(){
......
......@@ -96,10 +96,14 @@
<fmt:message key="barcode.partNumber"/>
</th>
<th>
<fmt:message key="checkOut.pos"/>
<fmt:message key="order.feeder"/>
</th>
<th>
<fmt:message key="component.amount"/>
<fmt:message key="order.quantity"/>
</th>
<th>
<fmt:message key="order.outQuantity"/>
</th>
<th>
<fmt:message key="order.inventory"/>
......@@ -131,7 +135,8 @@
table.clear();
for(var i in data){
table.row.add( [ i, data[i].pn, data[i].feederInfo,data[i].outNum+"/"+data[i].needNum,data[i].inventoryNum] );
var needQty = data[i].needNum + " x " + order.orderTimes;
table.row.add( [ i, data[i].pn, data[i].feederInfo,needQty, data[i].outNum,data[i].inventoryNum] );
}
table.order( [ 3, 'asc' ] ).draw();
......
......@@ -234,7 +234,7 @@
</jsp-config>
<session-config>
<session-timeout>15</session-timeout>
<session-timeout>10</session-timeout>
<cookie-config>
<http-only>true</http-only>
<!--<secure>true</secure>-->
......
......@@ -241,7 +241,7 @@
<div class="page-footer-inner">
2016&copy; <a href="${ctx}/updateHistory.html">SMD BOX</a>
</div>
<span class="right" style="color: #a3a3a3;">Version: 1.4.919</span>
<span class="right" style="color: #a3a3a3;">Version: 1.5.1318</span>
<div class="scroll-to-top">
<i class="icon-arrow-up"></i>
</div>
......
......@@ -15,7 +15,7 @@
<!--<![endif]-->
<!-- BEGIN HEAD -->
<head>
<title>云料仓</title>
<title>SMD-BOX</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!