Commit e8801c52 sunke

增加点料机解析条码获取尺寸信息接口

增加AGV锁定VMI线入库包装料架接口
出入库统计信息优化
1 个父辈 aae06944
...@@ -240,7 +240,7 @@ ...@@ -240,7 +240,7 @@
>>rfid : RFID >>rfid : RFID
> >
> 返回: > 返回:
>>` {"code":0,"msg":"ok","data":[{"barcode":"S20052301213","cid":"packing-20","rfid":"A12","rfidLoc":"3","lockPos":"4D2001AA0006","lockPosId":"1231"}]} ` >>` {"code":0,"msg":"ok","data":[{"barcode":"S20052301213","cid":"packing-20","rfid":"A12","rfidLoc":"3","lockPosName":"4D2001AA0006","lockPosId":"1231"}]} `
>> >>
>> - code: 0为正常,其他为异常, >> - code: 0为正常,其他为异常,
>> - msg:消息, >> - msg:消息,
...@@ -249,7 +249,8 @@ ...@@ -249,7 +249,8 @@
>> - rfidLoc: 料架的库位 >> - rfidLoc: 料架的库位
>> - barcode: 库位中料盘的条码 >> - barcode: 库位中料盘的条码
>> - cid: 库位中料盘的锁定库位对应的料仓编号 >> - cid: 库位中料盘的锁定库位对应的料仓编号
>> - lockPos: 库位中料盘的锁定库位 >> - lockPosName: 库位中料盘的锁定库位
>> - lockPosId: 库位中料盘的锁定库位的ID,
12. 包装线AGV获取料架中的任务数,如果当前料架的任务数不为0,需要用当前料架去其他包装仓继续放料 12. 包装线AGV获取料架中的任务数,如果当前料架的任务数不为0,需要用当前料架去其他包装仓继续放料
...@@ -415,3 +416,38 @@ ...@@ -415,3 +416,38 @@
>> - code: 0为正常,其他为异常, >> - code: 0为正常,其他为异常,
>> - msg:消息, >> - msg:消息,
>> - data: >> - data:
22. AGV锁定包装仓入库料架, AGV从VMI拉上包装料架准备入库时,调用此接口,用于包装仓判断料架是否是入库料架
>地址:
>>/rest/api/qisda/device/lockPutInAShelf
>
>参数:
>>rfid : 包装料架的RFID
>
> 返回:
>>` {"code":0,"msg":"ok","data":""}`
>>
>> - code: 0为正常,其他为异常,
>> - msg:消息,
>> - data:
23. 点料机解析条码,获取料盘尺寸
>地址:
>>/rest/api/qisda/device/resolveCode
>
>参数:
>>code: 扫描到的条码信息,多个条码用##分割,条码前带尺寸信息会自动创建
>
> 返回:
>>` {"code":0,"msg":"ok","data":{"barcode":"xxxx","pn":"xxxx","qty":1000,"w":7,"h":8}}`
>>
>> - code: 0为正常,其他为异常,(未传参数, 未找到有效条码,多个有效条码)
>> - msg:消息,
>> - data:
>> - barcode: 需求单号
>> - pn: 物料编号
>> - qty: 数量
>> - w: 料盘直径(未配置尺寸信息时使用传入尺寸,否则使用配置尺寸)
>> - h: 厚度(未配置尺寸信息时使用传入尺寸,否则使用配置尺寸)
...@@ -7,6 +7,8 @@ package com.myproject.bean.json; ...@@ -7,6 +7,8 @@ package com.myproject.bean.json;
*/ */
public class ChartItem { public class ChartItem {
private DateBean dateBean;
private String label; private String label;
private int value; private int value;
...@@ -56,4 +58,12 @@ public class ChartItem { ...@@ -56,4 +58,12 @@ public class ChartItem {
public void setValue4(int value4) { public void setValue4(int value4) {
this.value4 = value4; this.value4 = value4;
} }
public DateBean getDateBean() {
return dateBean;
}
public void setDateBean(DateBean dateBean) {
this.dateBean = dateBean;
}
} }
...@@ -77,9 +77,9 @@ public class DataLogDaoImpl extends AbstractMongoDao implements IDataLogDao { ...@@ -77,9 +77,9 @@ public class DataLogDaoImpl extends AbstractMongoDao implements IDataLogDao {
} }
Aggregation agg = Aggregation.newAggregation( Aggregation agg = Aggregation.newAggregation(
Aggregation.match(c), Aggregation.match(c),
Aggregation.project().and("updateDate").extractDayOfYear().as("label"), Aggregation.project().and("updateDate").extractDayOfYear().as("dayOfYear").and("updateDate").extractYear().as("year"),
Aggregation.group("label").count().as("value"), Aggregation.group("dayOfYear","year").count().as("value"),
Aggregation.project("value").and("label").previousOperation() Aggregation.project("value").and("dateBean").previousOperation()
); );
AggregationResults<ChartItem> results = getMongoTemplate().aggregate(agg, getEntityClass(), ChartItem.class); AggregationResults<ChartItem> results = getMongoTemplate().aggregate(agg, getEntityClass(), ChartItem.class);
return results.getMappedResults(); return results.getMappedResults();
......
package com.myproject.manager.impl; package com.myproject.manager.impl;
import com.myproject.bean.json.ChartItem; import com.myproject.bean.json.ChartItem;
import com.myproject.bean.json.DateBean;
import com.myproject.bean.search.PageList; import com.myproject.bean.search.PageList;
import com.myproject.bean.update.Storage; import com.myproject.bean.update.Storage;
...@@ -79,18 +80,20 @@ public class StorageManagerImpl implements IStorageManager { ...@@ -79,18 +80,20 @@ public class StorageManagerImpl implements IStorageManager {
c.setTime(startDay); c.setTime(startDay);
do{ do{
int dayOfYear = c.get(Calendar.DAY_OF_YEAR); int dayOfYear = c.get(Calendar.DAY_OF_YEAR);
int year = c.get(Calendar.YEAR);
String dayStr = DateUtil.toDateString(c.getTime()); String dayStr = DateUtil.toDateString(c.getTime());
ChartItem item = new ChartItem(); ChartItem item = new ChartItem();
item.setLabel(dayStr); item.setLabel(dayStr);
inOutDataMap.put(String.valueOf(dayOfYear), item); String yearAndDay = year + "-" + dayOfYear;
inOutDataMap.put(yearAndDay, item);
c.add(Calendar.DAY_OF_YEAR,1); c.add(Calendar.DAY_OF_YEAR,1);
}while (c.getTimeInMillis() <= endTime); }while (c.getTimeInMillis() <= endTime);
List<ChartItem> putInData = dataLogDao.putInChart(startDay, endDay,partNumber); List<ChartItem> putInData = dataLogDao.putInChart(startDay, endDay,partNumber);
for (ChartItem putInItem : putInData){ for (ChartItem putInItem : putInData){
String dayOfYear = putInItem.getLabel(); DateBean dateBean = putInItem.getDateBean();
ChartItem item = inOutDataMap.get(dayOfYear); ChartItem item = inOutDataMap.get(dateBean.getYear() + "-" + dateBean.getDayOfYear());
if(item != null){ if(item != null){
item.setValue(putInItem.getValue()); item.setValue(putInItem.getValue());
} }
...@@ -99,22 +102,22 @@ public class StorageManagerImpl implements IStorageManager { ...@@ -99,22 +102,22 @@ public class StorageManagerImpl implements IStorageManager {
List<ChartItem> checkOutData = dataLogDao.checkOutChart(startDay, endDay,partNumber); List<ChartItem> checkOutData = dataLogDao.checkOutChart(startDay, endDay,partNumber);
for (ChartItem checkOutItem : checkOutData){ for (ChartItem checkOutItem : checkOutData){
String dayOfYear = checkOutItem.getLabel(); DateBean dateBean = checkOutItem.getDateBean();
ChartItem item = inOutDataMap.get(dayOfYear); ChartItem item = inOutDataMap.get(dateBean.getYear() + "-" + dateBean.getDayOfYear());
if(item != null){ if(item != null){
item.setValue2(checkOutItem.getValue()); item.setValue2(checkOutItem.getValue());
} }
} }
List<ChartItem> alarmData = alarmInfoDao.alarmChart(startDay, endDay); // List<ChartItem> alarmData = alarmInfoDao.alarmChart(startDay, endDay);
for (ChartItem alarmItem : alarmData){ // for (ChartItem alarmItem : alarmData){
String dayOfYear = alarmItem.getLabel(); // DateBean dateBean = alarmItem.getDateBean();
ChartItem item = inOutDataMap.get(dayOfYear); // ChartItem item = inOutDataMap.get(dateBean.getYear() + "-" + dateBean.getDayOfYear());
if(item != null){ // if(item != null){
item.setValue3(alarmItem.getValue()); // item.setValue3(alarmItem.getValue());
item.setValue4(alarmItem.getValue2()); // item.setValue4(alarmItem.getValue2());
} // }
} // }
//alarmInfoDao.alarmChartByType(startDay,endDay); //alarmInfoDao.alarmChartByType(startDay,endDay);
//alarmInfoDao.alarmChartByBox(startDay,endDay); //alarmInfoDao.alarmChartByBox(startDay,endDay);
return inOutDataMap.values(); return inOutDataMap.values();
......
...@@ -1432,4 +1432,76 @@ public class QisdaDeviceController extends BaseController { ...@@ -1432,4 +1432,76 @@ public class QisdaDeviceController extends BaseController {
} }
} }
/**
* AGV锁定包装仓入库料架, AGV从VMI拉上包装料架准备入库时,调用此接口,用于包装仓判断料架是否是入库料架
*/
@RequestMapping("/lockPutInAShelf")
@ResponseBody
public ResultBean lockPutInAShelf(HttpServletRequest request) {
String rfid = request.getParameter("rfid");
try {
log.info("AGV锁定料架["+rfid+"]为入库料架");
ReelLockPosInfo reelLocInfo = new ReelLockPosInfo();
reelLocInfo.setBarcode(rfid);
reelLocInfo.setCid(rfid);
reelLocInfo.setLockPosName(rfid);
reelLocInfo.setLockPosId(rfid);
reelLocInfo.setRfid(rfid);
reelLocInfo.setRfidLoc("0");
reelLocInfo = QisdaCache.addReelLockPosInfo(reelLocInfo);
if(reelLocInfo == null){
return ResultBean.newErrorResult(5201,"库位锁定失败");
}else{
ResultBean.newOkResult("");
}
return ResultBean.newOkResult("");
}catch (Exception e){
log.error("锁定包装仓入库料架出错",e);
return ResultBean.newErrorResult(5202,"锁定包装仓入库料架出错:" + e.getMessage());
}
}
/**
* 点料机解析条码,用于获取料盘尺寸
*/
@RequestMapping("/resolveCode")
@ResponseBody
public ResultBean resolveCode(HttpServletRequest request) {
try {
String code = request.getParameter("code");
log.info("点料机解析获取条码["+code+"]尺寸");
if(Strings.isNotBlank(code)){
Collection<CodeBean> codeBeans = dataCache.resolveCodeStr(code);
Barcode barcode = null;
for (CodeBean codeBean : codeBeans) {
if(codeBean.isValid()){
if(barcode != null){
String msg = "找到多个有效条码";
return ResultBean.newErrorResult(5100,msg);
}else{
barcode = codeBean.getBarcode();
}
}
}
if(barcode == null){
String msg = "未找到有效条码";
return ResultBean.newErrorResult(5101,msg);
}
Map<String,Object> resultMap = new HashMap<>();
resultMap.put("barcode", barcode.getBarcode());
resultMap.put("pn",barcode.getPartNumber());
resultMap.put("qty",barcode.getAmount());
resultMap.put("w",barcode.getPlateSize());
resultMap.put("h",barcode.getHeight());
return ResultBean.newOkResult(resultMap);
}
return ResultBean.newErrorResult(5102,"未找到code参数");
}catch (Exception e){
log.error("点料机获取料盘尺寸出错",e);
return ResultBean.newErrorResult(5103,"点料机获取料盘尺寸出错:" + e.getMessage());
}
}
} }
...@@ -177,8 +177,8 @@ ...@@ -177,8 +177,8 @@
</display:column> </display:column>
<display:column property="barcode.appendInfo.facility" titleKey="Facility" sortProperty="barcode.appendInfo.facility" sortable="true"/> <display:column property="barcode.appendInfo.facility" titleKey="Facility" sortProperty="barcode.appendInfo.facility" sortable="true"/>
<display:column titleKey="时间" sortProperty="barcode.updateDate" sortable="true"> <display:column titleKey="时间" sortProperty="barcode.putInDate" sortable="true">
<fmt:formatDate value="${pos.barcode.updateDate}" pattern="yyyy-MM-dd HH:mm"/> <fmt:formatDate value="${pos.barcode.putInDate}" pattern="yyyy-MM-dd HH:mm"/>
</display:column> </display:column>
<display:column titleKey="barcode.amount" sortProperty="barcode.amount" sortable="true"> <display:column titleKey="barcode.amount" sortProperty="barcode.amount" sortable="true">
......
...@@ -72,39 +72,39 @@ ...@@ -72,39 +72,39 @@
</div> </div>
<div class="row"> <%--<div class="row">--%>
<div class="col-md-12"> <%--<div class="col-md-12">--%>
<!-- BEGIN CHART PORTLET--> <%--<!-- BEGIN CHART PORTLET-->--%>
<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-bar-chart font-green-haze"></i> <%--<i class="icon-bar-chart font-green-haze"></i>--%>
<span class="caption-subject bold uppercase font-green-haze"><fmt:message key="runStatus.alarmInfo"/></span> <%--<span class="caption-subject bold uppercase font-green-haze"><fmt:message key="runStatus.alarmInfo"/></span>--%>
</div> <%--</div>--%>
<div class="tools"> <%--<div class="tools">--%>
</div> <%--</div>--%>
</div> <%--</div>--%>
<div class="portlet-body"> <%--<div class="portlet-body">--%>
<div class="row"> <%--<div class="row">--%>
<div class="col-md-12"> <%--<div class="col-md-12">--%>
<div id="alarmChart" class="chart" style="height: 350px; overflow: hidden;"> <%--<div id="alarmChart" class="chart" style="height: 350px; overflow: hidden;">--%>
</div> <%--</div>--%>
</div> <%--</div>--%>
<div class="col-md-6"> <%--<div class="col-md-6">--%>
<div id="alarmTypeChart" class="chart col-md-6" style="height: 250px; overflow: hidden;"> <%--<div id="alarmTypeChart" class="chart col-md-6" style="height: 250px; overflow: hidden;">--%>
</div> <%--</div>--%>
</div> <%--</div>--%>
<div class="col-md-6"> <%--<div class="col-md-6">--%>
<div id="alarmBoxChart" class="chart col-md-6" style="height: 250px; overflow: hidden;"> <%--<div id="alarmBoxChart" class="chart col-md-6" style="height: 250px; overflow: hidden;">--%>
</div> <%--</div>--%>
</div> <%--</div>--%>
</div> <%--</div>--%>
</div> <%--</div>--%>
</div> <%--</div>--%>
<!-- END CHART PORTLET--> <%--<!-- END CHART PORTLET-->--%>
</div> <%--</div>--%>
</div> <%--</div>--%>
<fmt:message key="runStatus.throughput" var="label_throughput"/> <fmt:message key="runStatus.throughput" var="label_throughput"/>
<fmt:message key="runStatus.stockOut" var="label_stockOut"/> <fmt:message key="runStatus.stockOut" var="label_stockOut"/>
...@@ -439,60 +439,60 @@ ...@@ -439,60 +439,60 @@
}; };
var alarmTypeChart = echarts.init(document.getElementById("alarmTypeChart")); <%--var alarmTypeChart = echarts.init(document.getElementById("alarmTypeChart"));--%>
alarmTypeChart.setOption(alarmTypeOption); <%--alarmTypeChart.setOption(alarmTypeOption);--%>
//报警BOX <%--//报警BOX--%>
var boxs = new Array(); <%--var boxs = new Array();--%>
var boxCount = new Array(); <%--var boxCount = new Array();--%>
var boxLastTimes = new Array(); <%--var boxLastTimes = new Array();--%>
<c:forEach items="${alarmBoxData}" var="alarmBoxItem"> <%--<c:forEach items="${alarmBoxData}" var="alarmBoxItem">--%>
boxs.push("${alarmBoxItem.label}"); <%--boxs.push("${alarmBoxItem.label}");--%>
boxCount.push({name:"${alarmBoxItem.label}",value:${alarmBoxItem.value}}); <%--boxCount.push({name:"${alarmBoxItem.label}",value:${alarmBoxItem.value}});--%>
boxLastTimes.push({name:"${alarmBoxItem.label}",value:${alarmBoxItem.value2}}); <%--boxLastTimes.push({name:"${alarmBoxItem.label}",value:${alarmBoxItem.value2}});--%>
</c:forEach> <%--</c:forEach>--%>
alarmBoxOption = { <%--alarmBoxOption = {--%>
tooltip: { <%--tooltip: {--%>
trigger: 'item', <%--trigger: 'item',--%>
formatter: "{b} <br/>{a}: {c} ({d}%)" <%--formatter: "{b} <br/>{a}: {c} ({d}%)"--%>
}, <%--},--%>
legend: { <%--legend: {--%>
orient: 'vertical', <%--orient: 'vertical',--%>
x: 'left', <%--x: 'left',--%>
data:boxs <%--data:boxs--%>
}, <%--},--%>
series: [ <%--series: [--%>
{ <%--{--%>
name:'报警次数', <%--name:'报警次数',--%>
type:'pie', <%--type:'pie',--%>
selectedMode: 'single', <%--selectedMode: 'single',--%>
radius: [0, '40%'], <%--radius: [0, '40%'],--%>
label: { <%--label: {--%>
normal: { <%--normal: {--%>
show: false <%--show: false--%>
} <%--}--%>
}, <%--},--%>
data:boxCount <%--data:boxCount--%>
}, <%--},--%>
{ <%--{--%>
name:'报警持续时间', <%--name:'报警持续时间',--%>
type:'pie', <%--type:'pie',--%>
radius: ['55%', '75%'], <%--radius: ['55%', '75%'],--%>
label: { <%--label: {--%>
normal: { <%--normal: {--%>
show: false <%--show: false--%>
} <%--}--%>
}, <%--},--%>
data:boxLastTimes <%--data:boxLastTimes--%>
} <%--}--%>
] <%--]--%>
}; <%--};--%>
var alarmBoxChart = echarts.init(document.getElementById("alarmBoxChart")); <%--var alarmBoxChart = echarts.init(document.getElementById("alarmBoxChart"));--%>
alarmBoxChart.setOption(alarmBoxOption); <%--alarmBoxChart.setOption(alarmBoxOption);--%>
......
...@@ -12,6 +12,26 @@ ...@@ -12,6 +12,26 @@
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<ul class="timeline"> <ul class="timeline">
<li class="timeline-purple">
<div class="timeline-time">
<span class="date">2021</span>
<span class="time">03-15</span>
</div>
<div class="timeline-icon">
<i class="fa fa-clock-o"></i>
</div>
<div class="timeline-body">
<h2>版本: V2021031516</h2>
<div class="timeline-content">
<ul>
<li>增加点料机解析条码获取尺寸信息接口</li>
<li>增加AGV锁定VMI线入库包装料架接口</li>
<li>出入库统计信息优化</li>
</ul>
</div>
</div>
</li>
<li class="timeline-green"> <li class="timeline-green">
<div class="timeline-time"> <div class="timeline-time">
<span class="date">2021</span> <span class="date">2021</span>
......
...@@ -239,7 +239,7 @@ ...@@ -239,7 +239,7 @@
<div class="page-footer-inner"> <div class="page-footer-inner">
2016&copy; <a href="${ctx}/updateHistory.html">SMD BOX</a> 2016&copy; <a href="${ctx}/updateHistory.html">SMD BOX</a>
</div> </div>
<span class="right" style="color: #a3a3a3;">Version: 2021.03.10</span> <span class="right" style="color: #a3a3a3;">Version: 2021.03.15</span>
<div class="scroll-to-top"> <div class="scroll-to-top">
<i class="icon-arrow-up"></i> <i class="icon-arrow-up"></i>
</div> </div>
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!