Commit 2ae4346d 孙克

803改造

1 个父辈 8cbe2b2c
...@@ -6,6 +6,7 @@ import com.myproject.util.DateUtil; ...@@ -6,6 +6,7 @@ import com.myproject.util.DateUtil;
import com.myproject.util.StorageConstants; import com.myproject.util.StorageConstants;
import org.springframework.data.annotation.Transient; import org.springframework.data.annotation.Transient;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
...@@ -137,6 +138,19 @@ public class Barcode extends BaseMongoBean { ...@@ -137,6 +138,19 @@ public class Barcode extends BaseMongoBean {
@Transient @Transient
private List<String> relationCodes; private List<String> relationCodes;
/**
* 料箱中存放的条码
*/
private List<Barcode> subCodes = new ArrayList<>();
public List<Barcode> getSubCodes() {
return subCodes;
}
public void setSubCodes(List<Barcode> subCodes) {
this.subCodes = subCodes;
}
public int getInitialAmount() { public int getInitialAmount() {
if (initialAmount == 0) { if (initialAmount == 0) {
setInitialAmount(amount); setInitialAmount(amount);
......
...@@ -88,6 +88,8 @@ public interface IStoragePosManager extends IManager<StoragePos> { ...@@ -88,6 +88,8 @@ public interface IStoragePosManager extends IManager<StoragePos> {
StoragePos getByBarcode(String barcode); StoragePos getByBarcode(String barcode);
StoragePos getBySubCode(String barcode);
StoragePos getByPosName(String posName); StoragePos getByPosName(String posName);
StoragePos getByHostPosId(String hostPosId, String pn); StoragePos getByHostPosId(String hostPosId, String pn);
...@@ -100,6 +102,8 @@ public interface IStoragePosManager extends IManager<StoragePos> { ...@@ -100,6 +102,8 @@ public interface IStoragePosManager extends IManager<StoragePos> {
List<StoragePos> findLockPos(String lockId); List<StoragePos> findLockPos(String lockId);
List findByQuery(Query query);
int countByQuery(Query query); int countByQuery(Query query);
/** /**
......
...@@ -17,8 +17,6 @@ import com.myproject.manager.IStoragePosManager; ...@@ -17,8 +17,6 @@ import com.myproject.manager.IStoragePosManager;
import com.myproject.util.DateUtil; import com.myproject.util.DateUtil;
import com.myproject.util.PLATE_SIZE; import com.myproject.util.PLATE_SIZE;
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.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -471,6 +469,11 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -471,6 +469,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
} }
@Override @Override
public StoragePos getBySubCode(String barcode){
return storagePosDao.findOneByCondition(new String[]{"barcode.subCodes.barcode"}, new String[]{barcode});
}
@Override
public StoragePos getByPosName(String posName){ public StoragePos getByPosName(String posName){
return storagePosDao.findOneByCondition(new String[]{"posName"}, new String[]{posName}); return storagePosDao.findOneByCondition(new String[]{"posName"}, new String[]{posName});
} }
...@@ -565,6 +568,11 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -565,6 +568,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
} }
@Override @Override
public List findByQuery(Query query) {
return storagePosDao.findByQuery(query);
}
@Override
public int countByQuery(Query query) { public int countByQuery(Query query) {
return storagePosDao.countByQuery(query); return storagePosDao.countByQuery(query);
} }
......
package com.myproject.webapp.controller.custom803;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Lists;
import com.myproject.bean.CodeBean;
import com.myproject.bean.json.ResultBean;
import com.myproject.bean.json.VerticalBoxOperateBean;
import com.myproject.bean.update.*;
import com.myproject.bean.utils.StatusBean;
import com.myproject.dao.mongo.IDataLogDao;
import com.myproject.exception.ApiException;
import com.myproject.exception.ValidateException;
import com.myproject.manager.IBarcodeManager;
import com.myproject.manager.IComponentManager;
import com.myproject.manager.IStoragePosManager;
import com.myproject.util.DateUtil;
import com.myproject.util.HttpHelper;
import com.myproject.util.StorageConstants;
import com.myproject.webapp.controller.storage.BaseController;
import com.myproject.webapp.controller.webService.DataCache;
import com.myproject.webapp.controller.webService.ITaskService;
import com.myproject.webapp.controller.webService.boxHandler.SmdXlBoxHandler;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
/**
* SMD-XL
*/
@RequestMapping("/rest/api/v2/803")
@RestController
public class XLController extends BaseController {
@Autowired
private DataCache dataCache;
@Autowired
private ITaskService taskService;
@Autowired
private IStoragePosManager storagePosManager;
@Autowired
private IBarcodeManager barcodeManager;
@Autowired
private IComponentManager componentManager;
@Autowired
private IDataLogDao dataLogDao;
@Autowired
private SmdXlBoxHandler smdXlBoxHandler;
/**
* 极创调用此接口判断料箱是否可以放上入料线体
* {
* "boxCode":"料箱号",
* "deviceNo":"料仓标识"
* }
* @param bodyParamMap
* @param request
* @return
*/
@RequestMapping("/boxCanPutIn")
public ResultBean boxCanPutIn(@RequestBody Map<String,String> bodyParamMap, HttpServletRequest request){
log.info("收到判断料箱是否可以放上入料线体请求:" + bodyParamMap.toString());
ResultBean resultBean = ResultBean.newErrorResult(-1,"箱子不可放入");
String cid = bodyParamMap.get("deviceNo");
String boxCode = bodyParamMap.get("boxCode");
String door = bodyParamMap.get("door");
log.info("料箱"+boxCode+"请求放入["+cid+"]线体");
if(Strings.isNotBlank(cid)){
StatusBean statusBean = taskService.getStatus(cid);
String boxCanPutIn1 = statusBean.getFromData("boxCanPutIn1");
boolean canPutInDoor1 = false;
if(boxCanPutIn1.equalsIgnoreCase("TRUE")){
canPutInDoor1 = true;
}
String boxCanPutIn2 = statusBean.getFromData("boxCanPutIn2");
boolean canPutInDoor2 = false;
if(boxCanPutIn2.equalsIgnoreCase("TRUE")){
canPutInDoor2 = true;
}
boolean canPutIn = false;
if(door == null){
if(canPutInDoor1 && canPutInDoor2){
canPutIn = true;
}
}else if(door.equalsIgnoreCase("1")){
canPutIn = canPutInDoor1;
}else if(door.equalsIgnoreCase("2")){
canPutIn = canPutInDoor2;
}
if(canPutIn){
resultBean = ResultBean.newOkResult("");
}
}
return resultBean;
}
/**
* 料箱到位顶起到位调用入库通知单接口,将料箱编号和料箱中的物料信息给挚锦
* {
* "djh": "单据号唯一编码",
* "boxCode": "料箱编号",
* "materialList": [{
* "serialNo": "唯一码",
* "partNum": "存货编码",
* "quantity": "数量"
* }]
* }
* @param bodyParamMap
* @param request
* @return
*/
@RequestMapping("/boxPutIn")
public ResultBean boxPutIn(@RequestBody Map<String,Object> bodyParamMap, HttpServletRequest request){
log.info("收到料箱到位顶起到位入库请求:" + bodyParamMap.toString());
ResultBean resultBean = ResultBean.newErrorResult(-1,"箱子放入失败");
Object djhObj = bodyParamMap.get("djh");
if(djhObj == null){
return ResultBean.newErrorResult(-1,"参数djh不能为空");
}
String boxCodeStr = bodyParamMap.get("boxCode").toString();
Object cidObj = bodyParamMap.get("deviceNo");
Object doorObj = bodyParamMap.get("door");
if(doorObj == null){
return ResultBean.newErrorResult(-1,"参数入料口door不能为空");
}
log.info("料箱"+boxCodeStr+"准备放入["+cidObj+"]线体,生成入库任务");
if(cidObj != null){
String cid = cidObj.toString();
Storage storage = dataCache.getStorage(cid);
if(storage == null){
return ResultBean.newErrorResult(104,"未找到deviceNo为["+cid+"]的料仓");
}
try{
Barcode boxBarcode = barcodeManager.findByBarcode(boxCodeStr);
if(boxBarcode == null){
boxBarcode = new Barcode();
boxBarcode.setBarcode(boxCodeStr);
boxBarcode.setPlateSize(2);
boxBarcode.setHeight(2);
boxBarcode.setAmount(1);
String boxPn = "BOX";
boxBarcode.setPartNumber("BOX");
Component boxComponent = componentManager.findOneByPN("BOX");
if(boxComponent == null){
boxComponent = new Component();
boxComponent.setPartNumber(boxPn);
boxComponent.setAmount(1);
boxComponent.setHeight(2);
boxComponent.setPlateSize(2);
componentManager.save(boxComponent);
}
}
List<Barcode> subCodeList = new ArrayList<>();
Object materialList = bodyParamMap.get("materialList");
if(materialList != null){
List<Map<String,String>> materials = (List<Map<String, String>>) materialList;
for (Map<String, String> material : materials) {
Barcode barcode = new Barcode();
barcode.setBarcode(material.get("serialNo"));
barcode.setPartNumber(material.get("partNum"));
Integer qty = Integer.valueOf(material.get("quantity"));
barcode.setAmount(qty);
subCodeList.add(barcode);
}
}
boxBarcode.setSubCodes(subCodeList);
barcodeManager.save(boxBarcode);
StoragePos pos = taskService.findEmptyPosForPutIn(Lists.newArrayList(storage), boxBarcode);
if(pos == null){
return ResultBean.newErrorResult(105,"未找到可用库位");
}
DataLog putInTask = new DataLog();
putInTask.setStatus(StorageConstants.OP_STATUS.WAIT.name());
putInTask.setType(StorageConstants.OP.PUT_IN);
putInTask.setCid(storage.getCid());
putInTask.setStorageId(storage.getId());
putInTask.setStorageName(storage.getName());
putInTask.setBarcode(boxBarcode.getBarcode());
putInTask.setNum(boxBarcode.getAmount());
putInTask.setPartNumber(boxBarcode.getPartNumber());
String doorInfo = request.getParameter("door");
putInTask.setSubSourceId(doorInfo);
putInTask.setPosId(pos.getId());
putInTask.setPosName(pos.getPosName());
putInTask.setSingleOut(true);
putInTask.setSourceName(djhObj.toString());
putInTask.setSubSourceId(doorObj.toString());
putInTask = dataLogDao.save(putInTask);
taskService.addTaskToExecute(putInTask);
return ResultBean.newOkResult("为料箱["+boxCodeStr+"]分配库位["+pos.getPosName()+"]","");
}catch (Exception e){
return ResultBean.newErrorResult(500,"内部错误:" + e.getMessage());
}
}else{
resultBean = ResultBean.newErrorResult(-1,"箱子放入失败, 料仓标识[deviceNo]参数不能为空");
}
return resultBean;
}
/**
*堆垛机取货完成挚锦调用极创接口,通知极创取货完成
*
* 描述:料仓系统传递参数,仓储系统接收并反馈
* 请求方式:GET请求
* 请求地址:http://{IP}:{PORT}/wms/api/znlc/in/ddjPickUpGoodsNotice
* 请求参数:
* {
* "djh": "唯一单据号",
* "boxCode":"料箱号",
* "deviceNo":"料仓标识"
* }
* 返回结果:
* {
* ​"code": 200(200表示成功,500表示出错),
* ​"message": "提示信息",
* ​"result": {
* ​​
* ​},
* ​"success": true,
* ​"timestamp": 1718621855967
* }
*/
@RequestMapping("/service/store/xl/ddjPickUpGoodsNotice")
public ResultBean ddjPickUpGoodsNotice(@RequestBody Map<String,String> bodyParamMap, HttpServletRequest request){
log.info("堆垛机取货完成, 准备通知极创:" + bodyParamMap.toString());
String ddjPickUpGoodsNoticeUrl = dataCache.getSettings().getInNotifyApi()+"/wms/api/znlc/in/ddjPickUpGoodsNotice";
try {
String posName = bodyParamMap.get("posName");
String door = bodyParamMap.get("door");
for (DataLog queueTask : taskService.getQueueTasks()) {
if(queueTask.isPutInTask() && queueTask.getPosName().equals(posName)){
Map<String,Object> paramData = new HashMap<>();
paramData.put("djh",queueTask.getSourceName());
paramData.put("boxCode", queueTask.getBarcode());
paramData.put("deviceNo",queueTask.getCid());
paramData.put("door",door);
log.info("堆垛机取货完成, 通知极创:" + paramData.toString());
String result = HttpHelper.postJson(ddjPickUpGoodsNoticeUrl,paramData);
log.info("堆垛机取货完成, 通知极创返回:"+ result);
if(!com.google.common.base.Strings.isNullOrEmpty(result)){
ObjectMapper mapper = new ObjectMapper();
HashMap<String,String> jsonMap = mapper.readValue(result, HashMap.class);
String ErrorCode = jsonMap.get("code");
if("200".equals(ErrorCode)){//成功
return ResultBean.newOkResult("");
}else{
return ResultBean.newErrorResult(-1,jsonMap.get("message"));
}
}
}
}
return ResultBean.newErrorResult(-100,"未找到入库任务");
} catch (Exception e) {
log.info("堆垛机取货完成, 通知极创出错:" + e.getMessage());
return ResultBean.newErrorResult(-1 ,e.getMessage());
}
}
/**
* 料箱放入库位后,调用极创接口,通知极创料箱已放入
*
* 描述:料仓传递参数,仓储系统接收数据,并返回结果
* 请求方式:POST请求
* 请求地址:http://{IP}:{PORT}/wms/api/znlc/in/inStorageFeedback
* 请求参数:
* {
* "djh": "单据号",
* "time": "入库完成时间(yyyy-MM-dd HH:mm:ss)",
* "deviceNo": "料仓编号",
* "boxCode": "料箱号",
* "locationCode": "料仓库位编号(仓储系统库位编号)"
* }
* 返回结果:
* {
* ​"code": 200(200表示成功,500表示出错),
* ​"message": "提示信息",
* ​"result": {
* ​​
* ​},
* ​"success": true,
* ​"timestamp": 1718621855967
* }
* @param bodyParamMap
* @param request
* @return
*/
@RequestMapping("/service/store/xl/inStorageFeedback")
public ResultBean inStorageFeedback(@RequestBody Map<String,String> bodyParamMap, HttpServletRequest request){
log.info("料箱放入库位, 准备通知极创:" + bodyParamMap.toString());
String inStorageFeedbackUrl = dataCache.getSettings().getInNotifyApi()+"/wms/api/znlc/in/inStorageFeedback";
try {
String posName = bodyParamMap.get("posName");
List<DataLog> allTasks = taskService.getFinishedTasks();
allTasks.addAll(taskService.getQueueTasks());
for (DataLog queueTask : allTasks) {
if(queueTask.isPutInTask() && queueTask.getPosName().equals(posName)){
queueTask.setStatus(StorageConstants.OP_STATUS.FINISHED.name());
StoragePos storagePos = storagePosManager.get(queueTask.getPosId());
Barcode box = barcodeManager.findByBarcode(queueTask.getBarcode());
box.setPutInTime(System.currentTimeMillis());
box.setPutInDate(new Date());
storagePos.setBarcode(box);
storagePosManager.save(storagePos);
queueTask = dataLogDao.save(queueTask);
taskService.moveTaskToFinished(queueTask);
Map<String,Object> paramData = new HashMap<>();
paramData.put("djh",queueTask.getSourceName());
String inTime = DateUtil.toDateString(queueTask.getCreateDate(),"yyyy-MM-dd HH:mm:ss");
paramData.put("time",inTime);
paramData.put("boxCode", queueTask.getBarcode());
paramData.put("deviceNo",queueTask.getCid());
paramData.put("locationCode",queueTask.getPosName());
log.info("料箱放入库位, 通知极创:" + bodyParamMap.toString());
String result = HttpHelper.postJson(inStorageFeedbackUrl,paramData);
log.info("料箱放入库位, 通知极创返回:"+ result);
return ResultBean.newOkResult("");
}
}
return ResultBean.newErrorResult(404,"料箱放入库位, 通知极创,未找到入库任务");
} catch (Exception e) {
log.info("料箱放入库位, 通知极创出错:" + e.getMessage());
return ResultBean.newErrorResult(500,"料箱放入库位, 通知极创出错:" + e.getMessage());
}
}
/**
* 2.1. 出库通知单接口
* 极创仓储系统需要出库时, 调用挚锦接口发送要出库的物料信息, 挚锦根据收到的信息, 将包含单据中唯一码的料箱从架位取出
*
* 描述:仓储系统发起传递参数,料仓系统返回结果
* 请求方式:POST请求
* 请求地址:
* 请求参数:
* {
* "djh": "单据号",
* "data": [{
* "serialNo": "唯一码",
* "partNum": "存货编码",
* "quantity": "数量"
* }]
* }
* 返回结果:
* {
* "code": 0,
* "msg": "ok",
* "data": {}
* }
* @param bodyParamMap
* @param request
* @return
*/
@RequestMapping("/outMaterials")
public ResultBean outMaterials(@RequestBody Map<String,Object> bodyParamMap, HttpServletRequest request){
log.info("收到极创出库物料信息:" + bodyParamMap.toString());
Object materialList = bodyParamMap.get("data");
Object djhObj = bodyParamMap.get("djh");
if(djhObj == null){
return ResultBean.newErrorResult(-1,"参数djh不能为空");
}
if(materialList != null){
List<Map<String,String>> materials = (List<Map<String, String>>) materialList;
for (Map<String, String> material : materials) {
Collection<String> excludePosIds = taskService.excludePosIds();
String serialNo = material.get("serialNo");
StoragePos pos = storagePosManager.getBySubCode(serialNo);
if(pos != null){
Barcode boxBarcode = pos.getBarcode();
for (Barcode subCode : boxBarcode.getSubCodes()) {
if(subCode.getBarcode().equals(serialNo)){
String outQuantity = material.get("quantity");
//使用此字段作为要出库的数量outQuantity, 不再另加字段了
subCode.setLabelAmount(Integer.valueOf(outQuantity));
}
}
try {
barcodeManager.save(boxBarcode);
pos.setBarcode(boxBarcode);
storagePosManager.save(pos);
} catch (ValidateException e) {
log.error("保存库位出错",e);
}
if(!excludePosIds.contains(pos.getId())){
DataLog hostOutTask = new DataLog();
hostOutTask.setType(StorageConstants.OP.CHECKOUT);
hostOutTask.setStatus(StorageConstants.OP_STATUS.WAIT.name());
Storage storage = dataCache.getStorageById(pos.getStorageId());
hostOutTask.setCid(storage.getCid());
hostOutTask.setStorageId(storage.getId());
hostOutTask.setStorageName(storage.getName());
hostOutTask.setPosId(pos.getId());
hostOutTask.setBarcode(boxBarcode.getBarcode());
hostOutTask.setNum(boxBarcode.getAmount());
hostOutTask.setPartNumber(boxBarcode.getPartNumber());
hostOutTask.setPosName(pos.getPosName());
hostOutTask.setSourceName(djhObj.toString());
hostOutTask = dataLogDao.save(hostOutTask);
taskService.addTaskToExecute(hostOutTask);
log.info("出库" + serialNo + "时, 在库位["+pos.getPosName()+"]中找到物料所在箱子["+pos.getBarcode().getBarcode()+"],执行出库");
}else{
log.info("出库" + serialNo + "时, 物料所在箱子["+pos.getBarcode().getBarcode()+"]已在出库列表中, 不再出库");
}
}else{
log.info("出库" + serialNo + "时, 未找到库存");
}
}
}else{
return ResultBean.newErrorResult(104,"出库物料信息不能为空");
}
return ResultBean.newOkResult("");
}
/**
* 2.2. 出库接驳线体状态查询
* 挚锦调用极创接口申请出库放料箱,极创返回放料𡯂许信号
* 描述:料仓系统发起传递参数,仓储系统返回结果
* 请求方式:GET请求
* 请求地址:http://{IP}:{PORT}/wms/api/znlc/out/outIsReady
* 请求参数:
* {
* "boxCode":"料箱号",
* "deviceNo":"料仓标识"
* }
* 返回结果:
* {
* ​"code": 200(200表示成功,500表示出错),
* ​"message": "提示信息",
* ​"result": {
* ​​"isReady": "Y;Y-表示已就绪允许放箱 N-表示不允许放箱"
* ​},
* ​"success": true,
* ​"timestamp": 1718621855967
* }
* @param bodyParamMap
* @param request
* @return
*/
@RequestMapping("/service/store/xl/outIsReady")
public ResultBean outIsReady(@RequestBody Map<String,String> bodyParamMap, HttpServletRequest request){
log.info("出库接驳线体状态准备查询极创接口:" + bodyParamMap.toString());
String ddjPickUpGoodsNoticeUrl = dataCache.getSettings().getInNotifyApi()+"/wms/api/znlc/out/outIsReady";
try {
String cid = bodyParamMap.get("cid");
String posName = bodyParamMap.get("posName");
String door = bodyParamMap.get("door");
List<DataLog> allTasks = taskService.getFinishedTasks();
allTasks.addAll(taskService.getQueueTasks());
for (DataLog task : allTasks) {
if(task.isCheckOutTask() && task.getPosName().equals(posName)){
Map<String,Object> paramData = new HashMap<>();
paramData.put("boxCode", task.getBarcode());
paramData.put("deviceNo",cid);
paramData.put("door",door);
log.info("出库接驳线体状态查询极创接口:"+ paramData.toString());
String result = HttpHelper.postJson(ddjPickUpGoodsNoticeUrl,paramData);
log.info("出库接驳线体状态查询极创接口返回:"+ result);
if(!com.google.common.base.Strings.isNullOrEmpty(result)){
ObjectMapper mapper = new ObjectMapper();
HashMap<String,Object> jsonMap = mapper.readValue(result, HashMap.class);
Map<String,String> isReadyMap = (Map<String, String>) jsonMap.get("result");
if(isReadyMap != null){
String isReady = isReadyMap.get("isReady");
if(isReady != null && isReady.equalsIgnoreCase("Y")){
return ResultBean.newOkResult("");
}else{
return ResultBean.newErrorResult(-1,"出库接驳线体状态查询极创接口不允许放料");
}
}
}
}
}
return ResultBean.newErrorResult(-1,"出库接驳线体状态查询时未找到出库任务");
} catch (Exception e) {
log.info("出库接驳线体状态查询极创接口出错:" + e.getMessage());
return ResultBean.newErrorResult(-1,"出库接驳线体状态查询极创接口出错:" + e.getMessage());
}
}
/**
* 2.3. 堆垛机放货完成反馈
* 堆垛机放货完成(货叉缩回)调用极创接口,通知给极创
*
* 描述:料仓系统发起传递参数,仓储系统返回结果
* 请求方式:POST请求
* 请求地址:http://{IP}:{PORT}/wms/api/znlc/out/ddjReleaseTheGoodsNotice
* 请求参数:
* {
* "boxCode":"料箱号",
* "deviceNo":"料仓标识"
* }
* 返回结果:
* {
* ​"code": 200(200表示成功,500表示出错),
* ​"message": "提示信息",
* ​"result": {
* ​​
* ​},
* ​"success": true,
* ​"timestamp": 1718621855967
* }
* @param bodyParamMap
* @param request
* @return
*/
@RequestMapping("/service/store/xl/ddjReleaseTheGoodsNotice")
public ResultBean ddjReleaseTheGoodsNotice(@RequestBody Map<String,String> bodyParamMap, HttpServletRequest request){
log.info("堆垛机放货完成, 准备通知极创:" + bodyParamMap.toString());
String ddjPickUpGoodsNoticeUrl = dataCache.getSettings().getInNotifyApi()+"/wms/api/znlc/out/ddjReleaseTheGoodsNotice";
try {
String posName = bodyParamMap.get("posName");
String door = bodyParamMap.get("door");
List<DataLog> allTasks = taskService.getFinishedTasks();
allTasks.addAll(taskService.getQueueTasks());
for (DataLog task : allTasks) {
if(task.isCheckOutTask() && task.getPosName().equals(posName)){
task.setStatus(StorageConstants.OP_STATUS.FINISHED.name());
task = dataLogDao.save(task);
taskService.moveTaskToFinished(task);
Map<String,Object> paramData = new HashMap<>();
paramData.put("boxCode", task.getBarcode());
paramData.put("deviceNo",task.getCid());
paramData.put("door",door);
log.info("堆垛机放货完成, 通知极创:" + paramData.toString());
String result = HttpHelper.postJson(ddjPickUpGoodsNoticeUrl,paramData);
log.info("堆垛机放货完成, 通知极创返回:"+ result);
if(!com.google.common.base.Strings.isNullOrEmpty(result)){
ObjectMapper mapper = new ObjectMapper();
HashMap<String,String> jsonMap = mapper.readValue(result, HashMap.class);
String ErrorCode = jsonMap.get("code");
if("200".equals(ErrorCode)){//成功
return ResultBean.newOkResult("");
}else{
return ResultBean.newErrorResult(-1,jsonMap.get("message"));
}
}
}
}
return ResultBean.newErrorResult(-100,"未找到出库任务");
} catch (Exception e) {
log.info("堆垛机放货完成, 通知极创出错:" + e.getMessage());
return ResultBean.newErrorResult(-1 ,e.getMessage());
}
}
/**
* 料仓系统将料箱从料仓中取出时,调用此接口, 将信息反馈到极创.
* 描述:料仓系统发起传递参数,仓储系统返回结果
* 请求方式:POST请求
* 请求地址:http://{IP}:{PORT}/wms/api/znlc/out/outStorageFeedback
* 请求参数:
* {
* "djh": "单据号",
* "time": "出库完成时间",
* "deviceNo": "料仓编号",
* "data": {
* "boxCode": "料箱号",
* "locationCode": "料仓库位编号",
* "materialList": [{
* "serialNo": "唯一码",
* "partNum": "存货编码",
* "outQuantity": "本次出库数量"
* "quantity": "出库前库存总数量"
* }]
* }
* }
* 返回结果:
* {
* ​"code": 200(200表示成功,500表示出错),
* ​"message": "提示信息",
* ​"result": {
* ​​
* ​},
* ​"success": true,
* ​"timestamp": 1718621855967
* }
* @param bodyParamMap
* @param request
* @return
*/
@RequestMapping("/service/store/xl/outStorageFeedback")
public ResultBean outStorageFeedback(@RequestBody Map<String,String> bodyParamMap, HttpServletRequest request){
log.info("料箱从库位取出, 准备通知极创:" + bodyParamMap.toString());
String inStorageFeedbackUrl = dataCache.getSettings().getInNotifyApi()+"/wms/api/znlc/out/outStorageFeedback";
try {
String posName = bodyParamMap.get("posName");
List<DataLog> allTasks = taskService.getFinishedTasks();
allTasks.addAll(taskService.getQueueTasks());
for (DataLog queueTask : allTasks) {
if(queueTask.isCheckOutTask() && queueTask.getPosName().equals(posName)){
Map<String,Object> paramData = new HashMap<>();
paramData.put("djh",queueTask.getSourceName());
String inTime = DateUtil.toDateString(queueTask.getCreateDate(),"yyyy-MM-dd HH:mm:ss");
paramData.put("time",inTime);
paramData.put("deviceNo",queueTask.getCid());
Map<String,Object> dataMap = new HashMap<>();
dataMap.put("boxCode", queueTask.getBarcode());
dataMap.put("locationCode",queueTask.getPosName());
List<Map<String,Object>> materialList = new ArrayList<>();
StoragePos storagePos = storagePosManager.get(queueTask.getPosId());
storagePos.setBarcode(null);
storagePosManager.save(storagePos);
queueTask.setStatus("OUT_BOX");
queueTask = dataLogDao.save(queueTask);
taskService.moveTaskToFinished(queueTask);
Barcode box = barcodeManager.findByBarcode(queueTask.getBarcode());
if(box != null){
List<Barcode> subCodes = box.getSubCodes();
for (Barcode subCode : subCodes) {
Map<String, Object> materialMap = new HashMap<>();
materialMap.put("serialNo",subCode.getBarcode());
materialMap.put("partNum",subCode.getPartNumber());
materialMap.put("outQuantity",subCode.getLabelAmount());
materialMap.put("quantity",subCode.getAmount());
materialList.add(materialMap);
}
}
dataMap.put("materialList", materialList);
paramData.put("data", dataMap);
log.info("料箱从库位取出, 通知极创:" + bodyParamMap.toString());
String result = HttpHelper.postJson(inStorageFeedbackUrl,paramData);
log.info("料箱从库位取出, 通知极创返回:"+ result);
return ResultBean.newOkResult("");
}
}
return ResultBean.newErrorResult(404,"料箱从库位取出, 通知极创,未找到出库任务");
} catch (Exception e) {
log.info("料箱从库位取出, 通知极创出错:" + e.getMessage());
return ResultBean.newErrorResult(500,"料箱从库位取出, 通知极创出错:" + e.getMessage());
}
}
/**
* 3.1. 库存信息接口
* 描述:仓储系统发起传递参数,料仓系统返回结果
* 请求方式:GET
* 请求地址:http://{IP}:{PORT}/wms/api/znlc/search/storage
* 请求参数:
* // 根据不为空的参数进行查询,多个查询参数之间为and关系,全部为空时则查询全部
* {
* "partNum": "存货编码",
* "serialNo": "唯一码",
* "inTimeStart": "入库开始时间",
* "inTimeEnd": "入库结束时间",
* "deviceNo": "料仓编号,为空时查询三个料仓库存信息"
* }
* 返回结果:
* {
* ​"code": 0,
* ​"msg": "ok",
* ​"data": [{
* ​​"deviceNo": "料仓编号",
* ​ "boxCode": "料箱号",
* ​ "locationCode": "料仓库位编号",
* ​ "materialList": [{
* ​​ "partNum": "存货编码",
* "serialNo": "唯一码",
* "quantity": "数量"
* ​​}]
* ​}]
* }
* @param bodyParamMap
* @param request
* @return
*/
@RequestMapping("/storage")
public ResultBean storage(@RequestBody Map<String,String> bodyParamMap, HttpServletRequest request){
log.info("极创获取库存:" + bodyParamMap.toString());
try {
String partNum = bodyParamMap.get("partNum");
String serialNo = bodyParamMap.get("serialNo");
String inTimeStart = bodyParamMap.get("inTimeStart");
String inTimeEnd = bodyParamMap.get("inTimeEnd");
String deviceNo = bodyParamMap.get("deviceNo");
List<Criteria> allCriteria = Lists.newArrayList();
allCriteria.add(Criteria.where("barcode.amount").gt(0));
if(Strings.isNotBlank(partNum)){
allCriteria.add(Criteria.where("barcode.subCodes.partNumber").is(partNum));
}
if(Strings.isNotBlank(serialNo)){
allCriteria.add(Criteria.where("barcode.subCodes.barcode").is(serialNo));
}
if(Strings.isNotBlank(inTimeStart)){
Date startTime = DateUtil.toDate(inTimeStart, "yyyy-MM-dd HH:mm:ss");
allCriteria.add(Criteria.where("barcode.putInDate").gte(startTime));
}
if(Strings.isNotBlank(inTimeEnd)){
Date endTime = DateUtil.toDate(inTimeEnd, "yyyy-MM-dd HH:mm:ss");
allCriteria.add(Criteria.where("barcode.putInDate").lte(endTime));
}
if(Strings.isNotBlank(deviceNo)){
Storage storage = dataCache.getStorage(deviceNo);
if(storage != null){
allCriteria.add(Criteria.where("storageId").is(storage.getId()));
}
}
Query query = new Query(new Criteria().andOperator(allCriteria.toArray(new Criteria[]{})));
List<StoragePos> posList = storagePosManager.findByQuery(query);
List<Map<String,Object>> dataList = new ArrayList<>();
for (StoragePos pos : posList) {
Map<String, Object> boxData = new HashMap<>();
String cid = "";
Storage storage = dataCache.getStorageById(pos.getStorageId());
if(storage != null){
cid = storage.getCid();
}
boxData.put("deviceNo",cid);
Barcode box = pos.getBarcode();
List<Map<String,Object>> materialList = new ArrayList<>();
String boxCode = "";
if (box != null) {
boxCode = box.getBarcode();
List<Barcode> subCodes = box.getSubCodes();
if(subCodes != null){
for (Barcode subCode : subCodes) {
Map<String, Object> materialMap = new HashMap<>();
materialMap.put("partNum",subCode.getPartNumber());
materialMap.put("serialNo",subCode.getBarcode());
materialMap.put("quantity",subCode.getAmount());
materialList.add(materialMap);
}
}
}
boxData.put("boxCode",boxCode);
boxData.put("locationCode",pos.getPosName());
boxData.put("materialList",materialList);
dataList.add(boxData);
}
return ResultBean.newOkResult(dataList);
} catch (Exception e) {
log.info("极创获取库存出错:" + e.getMessage());
return ResultBean.newErrorResult(500,"获取库存出错:" + e.getMessage());
}
}
/**
* 3.2. 库位信息接口
* 描述:仓储系统发起传递参数,料仓系统返回结果
* 请求方式:GET
* 请求地址:http://{IP}:{PORT}/wms/api/znlc/search/warehouseLocatoinMsg
* 请求参数:
* {
* "locationCode": "库位编号",
* "deviceNo": "料仓编号"
* }
* 返回结果:
* {
* "code": 0,
* "msg": "ok",
* "data": [{
* "locationCode": "库位编号",
* "boxCode": "料箱编号",
* "state": "状态 (禁用、锁定等状态)",
* "materialList": [{
* "partNum": "存货编码",
* "serialNo": "唯一码",
* "quantity": "数量"
* ​}]
* }]
* }
* @param bodyParamMap
* @param request
* @return
*/
@RequestMapping("/warehouseLocatoinMsg")
public ResultBean warehouseLocatoinMsg(@RequestBody Map<String,String> bodyParamMap, HttpServletRequest request){
log.info("极创获取库位信息:" + bodyParamMap.toString());
try {
String locationCode = bodyParamMap.get("locationCode");
String deviceNo = bodyParamMap.get("deviceNo");
List<Criteria> allCriteria = Lists.newArrayList();
if(Strings.isNotBlank(locationCode)){
allCriteria.add(Criteria.where("posName").is(locationCode));
}
if(Strings.isNotBlank(deviceNo)){
Storage storage = dataCache.getStorage(deviceNo);
if(storage != null){
allCriteria.add(Criteria.where("storageId").is(storage.getId()));
}
}
Query query = new Query(new Criteria().andOperator(allCriteria.toArray(new Criteria[]{})));
if(allCriteria.isEmpty()){
query = new Query();
}
List<StoragePos> posList = storagePosManager.findByQuery(query);
List<Map<String,Object>> dataList = new ArrayList<>();
for (StoragePos pos : posList) {
Map<String, Object> boxData = new HashMap<>();
// String cid = "";
// Storage storage = dataCache.getStorageById(pos.getStorageId());
// if(storage != null){
// cid = storage.getCid();
// }
//boxData.put("deviceNo",cid);
Barcode box = pos.getBarcode();
List<Map<String,Object>> materialList = new ArrayList<>();
String boxCode = "";
if (box != null) {
boxCode = box.getBarcode();
List<Barcode> subCodes = box.getSubCodes();
if(subCodes != null){
for (Barcode subCode : subCodes) {
Map<String, Object> materialMap = new HashMap<>();
materialMap.put("partNum",subCode.getPartNumber());
materialMap.put("serialNo",subCode.getBarcode());
materialMap.put("quantity",subCode.getAmount());
materialList.add(materialMap);
}
}
}
boxData.put("boxCode",boxCode);
boxData.put("locationCode",pos.getPosName());
String state = "enabled";
if(!pos.isEnabled()){
state = "disabled";
}
boxData.put("state",state);
boxData.put("materialList",materialList);
dataList.add(boxData);
}
return ResultBean.newOkResult(dataList);
} catch (Exception e) {
log.info("极创获取库位出错:" + e.getMessage());
return ResultBean.newErrorResult(500,"获取库位信息出错:" + e.getMessage());
}
}
/**
* 3.3. 料箱信息对应物料接口
* 描述:仓储系统发起传递参数,料仓系统返回结果
* 请求方式:GET
* 请求地址:http://{IP}:{PORT}/wms/api/znlc/search/boxDetailMsg
* 请求参数:
* {
* "boxCode": "料箱编号"
* }
* 返回结果:
* {
* "code": 0,
* "msg": "ok",
* "data": {
* "boxCode":"料箱编号",
* "locationCode": "库位编号",
* "deviceNo":"料仓编号;当料仓内不存在此料箱时,此值为空",
* "materialList": [{
* "partNum": "存货编码",
* "serialNo": "唯一码",
* "quantity": "数量"
* }]
* }
* }
* @param bodyParamMap
* @param request
* @return
*/
@RequestMapping("/boxDetailMsg")
public ResultBean boxDetailMsg(@RequestBody Map<String,String> bodyParamMap, HttpServletRequest request){
log.info("极创获取料箱信息:" + bodyParamMap.toString());
try {
String boxCode = bodyParamMap.get("boxCode");
if(Strings.isBlank(boxCode)){
return ResultBean.newErrorResult(-1,"参数boxCode不能为空");
}
Query query = new Query(Criteria.where("barcode.barcode").is(boxCode));
List<StoragePos> posList = storagePosManager.findByQuery(query);
List<Map<String,Object>> dataList = new ArrayList<>();
for (StoragePos pos : posList) {
Map<String, Object> boxData = new HashMap<>();
String cid = "";
Storage storage = dataCache.getStorageById(pos.getStorageId());
if(storage != null){
cid = storage.getCid();
}
boxData.put("deviceNo",cid);
Barcode box = pos.getBarcode();
List<Map<String,Object>> materialList = new ArrayList<>();
if (box != null) {
boxCode = box.getBarcode();
List<Barcode> subCodes = box.getSubCodes();
if(subCodes != null){
for (Barcode subCode : subCodes) {
Map<String, Object> materialMap = new HashMap<>();
materialMap.put("partNum",subCode.getPartNumber());
materialMap.put("serialNo",subCode.getBarcode());
materialMap.put("quantity",subCode.getAmount());
materialList.add(materialMap);
}
}
}
boxData.put("boxCode",boxCode);
boxData.put("locationCode",pos.getPosName());
String state = "enabled";
if(!pos.isEnabled()){
state = "disabled";
}
boxData.put("state",state);
boxData.put("materialList",materialList);
dataList.add(boxData);
}
return ResultBean.newOkResult(dataList);
} catch (Exception e) {
log.info("极创获取料箱信息出错:" + e.getMessage());
return ResultBean.newErrorResult(500,"获取料箱信息出错:" + e.getMessage());
}
}
}
...@@ -483,9 +483,9 @@ public class TaskService implements ITaskService { ...@@ -483,9 +483,9 @@ public class TaskService implements ITaskService {
String storageCid = storage.getCid(); String storageCid = storage.getCid();
//先查找空闲 BOX同尺寸的,如果找不到,再查找可入库 BOX 同尺寸或比盘尺寸大的仓位 //先查找空闲 BOX同尺寸的,如果找不到,再查找可入库 BOX 同尺寸或比盘尺寸大的仓位
StatusBean statusBean = statusMap.get(storageCid); StatusBean statusBean = statusMap.get(storageCid);
if (statusBean == null) {//当前料仓不可用 // if (statusBean == null) {//当前料仓不可用
throw new ValidateException("error.storage.offline", new String[]{storageCid}, "料仓[ " + storageCid + "]离线"); // throw new ValidateException("error.storage.offline", new String[]{storageCid}, "料仓[ " + storageCid + "]离线");
} // }
//还需要排除掉正在队列里的仓位 //还需要排除掉正在队列里的仓位
StoragePos storagePos = null; StoragePos storagePos = null;
......
...@@ -116,10 +116,11 @@ public class SmdXlBoxHandler { ...@@ -116,10 +116,11 @@ public class SmdXlBoxHandler {
if(task.isPutInTask()){ if(task.isPutInTask()){
statusBean.setOp(StorageConstants.OP.PUT_IN); statusBean.setOp(StorageConstants.OP.PUT_IN);
statusBean.addData("door",task.getSubSourceId()); statusBean.addData("door",task.getSubSourceId());
statusBean.addData("boxCode", task.getBarcode());
}else if(task.isCheckOutTask()){ }else if(task.isCheckOutTask()){
statusBean.setOp(StorageConstants.OP.CHECKOUT); statusBean.setOp(StorageConstants.OP.CHECKOUT);
} }
statusBean.addPosInfo("",pos.getPosName(),pos.getW(),pos.getH(),false); statusBean.addPosInfo(task.getBarcode(),pos.getPosName(),pos.getW(),pos.getH(),false);
log.info("发送["+task.getType()+"]任务["+pos.getPosName()+"]到客户端door="+task.getSubSourceId()); log.info("发送["+task.getType()+"]任务["+pos.getPosName()+"]到客户端door="+task.getSubSourceId());
task.setStatus(StorageConstants.OP_STATUS.EXECUTING.name()); task.setStatus(StorageConstants.OP_STATUS.EXECUTING.name());
......
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="web" name="Web">
<configuration>
<descriptors>
<deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/src/main/webapp/WEB-INF/web.xml" />
</descriptors>
<webroots>
<root url="file://$MODULE_DIR$/src/main/resources/packaged" relative="WEB-INF/classes" />
<root url="file://$MODULE_DIR$/src/main/webapp" relative="/" />
<root url="file://$MODULE_DIR$/target/classes" relative="WEB-INF/classes" />
</webroots>
<sourceRoots>
<root url="file://$MODULE_DIR$/src/main/java" />
<root url="file://$MODULE_DIR$/src/main/resources" />
</sourceRoots>
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="false">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/webapp" type="java-test-resource" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-orm:4.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-beans:4.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-core:4.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:4.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:4.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-core:3.2.7.RELEASE" level="project" />
<orderEntry type="library" name="Maven: aopalliance:aopalliance:1.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aop:4.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context:4.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:4.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-config:3.2.7.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-ldap:3.2.7.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.ldap:spring-ldap-core:2.0.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-test:4.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.8.5" level="project" />
<orderEntry type="library" name="Maven: org.aspectj:aspectjrt:1.8.5" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-all:1.3" level="project" />
<orderEntry type="library" name="Maven: junit:junit:4.12" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.11" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-jcl:2.1" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-slf4j-impl:2.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-core:2.1" level="project" />
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.2.0.Beta1" level="project" />
<orderEntry type="library" name="Maven: mysql:mysql-connector-java:5.1.27" level="project" />
<orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.3.1" level="project" />
<orderEntry type="library" name="Maven: commons-io:commons-io:2.4" level="project" />
<orderEntry type="library" name="Maven: displaytag:displaytag:1.2" level="project" />
<orderEntry type="library" name="Maven: com.lowagie:itext:2.1.7" level="project" />
<orderEntry type="library" name="Maven: bouncycastle:bcmail-jdk14:138" level="project" />
<orderEntry type="library" name="Maven: bouncycastle:bcprov-jdk14:138" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bctsp-jdk14:1.38" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk14:1.38" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcmail-jdk14:1.38" level="project" />
<orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.2" level="project" />
<orderEntry type="library" name="Maven: org.springmodules:spring-modules-validation:0.8" level="project" />
<orderEntry type="library" name="Maven: commons-validator:commons-validator:1.3.0" level="project" />
<orderEntry type="library" name="Maven: commons-digester:commons-digester:2.1" level="project" />
<orderEntry type="library" name="Maven: antlr:antlr:2.7.7" level="project" />
<orderEntry type="library" name="Maven: rhino:js:1.6R2" level="project" />
<orderEntry type="library" name="Maven: commons-dbcp:commons-dbcp:1.4" level="project" />
<orderEntry type="library" name="Maven: commons-pool:commons-pool:1.6" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.subethamail:subethasmtp-wiser:1.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.subethamail:subethasmtp-smtp:1.2" level="project" />
<orderEntry type="library" name="Maven: org.directwebremoting:dwr:2.0.10" level="project" />
<orderEntry type="library" name="Maven: net.sf.ehcache:ehcache-web:2.0.4" level="project" />
<orderEntry type="library" name="Maven: net.sf.ehcache:ehcache-core:2.6.10" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: javax.servlet.jsp:jsp-api:2.1" level="project" />
<orderEntry type="library" name="Maven: javax.servlet:javax.servlet-api:3.1.0" level="project" />
<orderEntry type="library" name="Maven: javax.servlet:jstl:1.2" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: struts-menu:struts-menu:2.4.3" level="project" />
<orderEntry type="library" name="Maven: org.apache.velocity:velocity-tools:2.0" level="project" />
<orderEntry type="library" name="Maven: commons-chain:commons-chain:1.1" level="project" />
<orderEntry type="library" name="Maven: dom4j:dom4j:1.6.1" level="project" />
<orderEntry type="library" name="Maven: xml-apis:xml-apis:1.4.01" level="project" />
<orderEntry type="library" name="Maven: oro:oro:2.0.8" level="project" />
<orderEntry type="library" name="Maven: sslext:sslext:1.2-0" level="project" />
<orderEntry type="library" name="Maven: org.apache.struts:struts-core:1.3.8" level="project" />
<orderEntry type="library" name="Maven: org.apache.struts:struts-taglib:1.3.8" level="project" />
<orderEntry type="library" name="Maven: org.apache.struts:struts-tiles:1.3.8" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: opensymphony:sitemesh:2.4.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-taglibs:3.2.7.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-acl:3.2.7.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-web:3.2.7.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-web:4.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:4.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.tuckey:urlrewritefilter:4.0.3" level="project" />
<orderEntry type="library" name="Maven: ro.isdc.wro4j:wro4j-core:1.7.5" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.3.2" level="project" />
<orderEntry type="library" name="Maven: org.webjars:jquery-cookie:1.3.1" level="project" />
<orderEntry type="library" name="Maven: org.webjars:bootstrap:3.3.1" level="project" />
<orderEntry type="library" name="Maven: org.webjars:jquery:1.11.1" level="project" />
<orderEntry type="library" name="Maven: org.webjars:bootstrap-datepicker:1.3.1" level="project" />
<orderEntry type="library" name="Maven: org.webjars:bootswatch-spacelab:3.3.1+2" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.logging.log4j:log4j-1.2-api:2.1" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.logging.log4j:log4j-web:2.1" level="project" />
<orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
<orderEntry type="library" name="Maven: javax.mail:mail:1.4.1" level="project" />
<orderEntry type="library" name="Maven: javax.activation:activation:1.1.1" level="project" />
<orderEntry type="library" name="Maven: org.mockito:mockito-core:1.10.8" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.objenesis:objenesis:2.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.velocity:velocity:1.7" level="project" />
<orderEntry type="library" name="Maven: org.apache.cxf:cxf-rt-frontend-jaxrs:3.0.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.cxf:cxf-core:3.0.1" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.woodstox:woodstox-core-asl:4.2.1" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.woodstox:stax2-api:3.1.4" level="project" />
<orderEntry type="library" name="Maven: org.apache.ws.xmlschema:xmlschema-core:2.1.0" level="project" />
<orderEntry type="library" name="Maven: javax.ws.rs:javax.ws.rs-api:2.0" level="project" />
<orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.cxf:cxf-rt-transports-http:3.0.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.cxf:cxf-rt-frontend-jaxws:3.0.1" level="project" />
<orderEntry type="library" name="Maven: xml-resolver:xml-resolver:1.2" level="project" />
<orderEntry type="library" name="Maven: asm:asm:3.3.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.cxf:cxf-rt-bindings-soap:3.0.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.cxf:cxf-rt-wsdl:3.0.1" level="project" />
<orderEntry type="library" name="Maven: wsdl4j:wsdl4j:1.6.3" level="project" />
<orderEntry type="library" name="Maven: org.apache.cxf:cxf-rt-databinding-jaxb:3.0.1" level="project" />
<orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-impl:2.2.10-b140310.1920" level="project" />
<orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-core:2.2.10-b140310.1920" level="project" />
<orderEntry type="library" name="Maven: org.apache.cxf:cxf-rt-bindings-xml:3.0.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.cxf:cxf-rt-frontend-simple:3.0.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.cxf:cxf-rt-ws-addr:3.0.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.cxf:cxf-rt-ws-policy:3.0.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.neethi:neethi:3.0.3" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.4.5" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.4.5" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.4.5" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.4.5" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.4.5" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.4.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:4.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.hibernate:hibernate-core:4.3.6.Final" level="project" />
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging-annotations:1.2.0.Beta1" level="project" />
<orderEntry type="library" name="Maven: org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.0.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.hibernate.common:hibernate-commons-annotations:4.0.5.Final" level="project" />
<orderEntry type="library" name="Maven: org.javassist:javassist:3.18.1-GA" level="project" />
<orderEntry type="library" name="Maven: org.jboss:jandex:1.1.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.hibernate:hibernate-ehcache:4.3.6.Final" level="project" />
<orderEntry type="library" name="Maven: org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final" level="project" />
<orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.2.11" level="project" />
<orderEntry type="library" name="Maven: org.hibernate:hibernate-search:4.5.1.Final" level="project" />
<orderEntry type="library" name="Maven: org.hibernate:hibernate-search-orm:4.5.1.Final" level="project" />
<orderEntry type="library" name="Maven: org.hibernate:hibernate-search-engine:4.5.1.Final" level="project" />
<orderEntry type="library" name="Maven: org.apache.avro:avro:1.7.6" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.jackson:jackson-core-asl:1.9.13" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.jackson:jackson-mapper-asl:1.9.13" level="project" />
<orderEntry type="library" name="Maven: com.thoughtworks.paranamer:paranamer:2.3" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-compress:1.4.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.lucene:lucene-facet:3.6.2" level="project" />
<orderEntry type="library" name="Maven: org.hibernate:hibernate-search-analyzers:4.5.1.Final" level="project" />
<orderEntry type="library" name="Maven: org.apache.lucene:lucene-core:3.6.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.lucene:lucene-analyzers:3.6.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.solr:solr-analysis-extras:3.6.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.lucene:lucene-smartcn:3.6.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.lucene:lucene-stempel:3.6.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-mongodb:1.8.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.mongodb:mongo-java-driver:2.12.5" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.slf4j:jcl-over-slf4j:1.7.11" level="project" />
<orderEntry type="library" name="Maven: org.hibernate:hibernate-validator:4.2.0.Final" level="project" />
<orderEntry type="library" name="Maven: javax.validation:validation-api:1.0.0.GA" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:1.10.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi:3.13" level="project" />
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.10" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.4" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4" level="project" />
<orderEntry type="library" name="Maven: com.google.zxing:core:3.2.1" level="project" />
<orderEntry type="library" name="Maven: com.itextpdf:itextpdf:5.5.9" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:guava:21.0" level="project" />
<orderEntry type="library" name="Maven: commons-httpclient:commons-httpclient:3.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.mina:mina-core:2.1.0" level="project" />
<orderEntry type="library" name="Maven: org.samba.jcifs:jcifs:1.3.3" level="project" />
</component>
</module>
\ No newline at end of file \ No newline at end of file
## 入库:
1 定时通信data里面添加boxCanPutIn1,boxCanPutIn2字段表示箱子是否可放上入库线体, 值为字符串"TRUE"时表示可放, 其他为不可放
2 堆垛机取货完成, 通知极创
http://localhost/rest/api/v2/803/service/store/xl/ddjPickUpGoodsNotice
请求参数:
{
"posName": "库位号"
"door": "1或2"
}
返回结果
{"code":0,"msg":"ok","data":""}
3 料箱放入库位完成, 通知极创
http://localhost/rest/api/v2/803/service/store/xl/inStorageFeedback
请求参数:
{
"posName": "库位号"
}
返回结果
{"code":0,"msg":"ok","data":""}
4 出库时查询接驳线体是否可以放料箱
http://localhost/rest/api/v2/803/service/store/xl/outIsReady
请求参数:
{
"cid": "001",
"posName":"库位号"
"door": "1或2"
}
返回结果
{"code":0,"msg":"ok","data":""}
5 堆垛机放货完成反馈
http://localhost/rest/api/v2/803/service/store/xl/ddjReleaseTheGoodsNotice
请求参数:
{
"posName":"库位号"
}
返回结果
{"code":0,"msg":"ok","data":""}
1 极创调用此接口判断料箱是否可以放上入料线体(增加参数deviceNo设备编号和door=1或2表示箱子放入哪个口)
http://localhost/smdbox/rest/api/v2/803/boxCanPutIn
{
"deviceNo":"rc1252-auto1",
"door":"1",
"boxCode": "CC002"
}
2 料箱到位顶起到位调用入库通知单接口(增加参数door=1或2表示箱子放入哪个口)
http://localhost/smdbox/rest/api/v2/803/boxPutIn
{
"djh": "11111",
"deviceNo":"rc1252-auto1",
"door":"1",
"boxCode": "CC002",
"materialList": [{
"serialNo": "CR0001",
"partNum": "CN0001",
"quantity": "1000"
}]
}
3 出库通知单接口
http://localhost/smdbox/rest/api/v2/803/outMaterials
{
"djh": "55555",
"data": [{
"serialNo": "CR0001",
"partNum": "CN0001",
"quantity": "100"
}]
}
4 库存信息接口
http://localhost/smdbox/rest/api/v2/803/storage
{
"serialNo": "CR0001",
"inTimeStart": "2024-07-01 00:00:00",
"inTimeEnd": "2025-07-01 00:00:00"
}
5 库位信息接口
http://localhost/smdbox/rest/api/v2/803/warehouseLocatoinMsg
{
"locationCode": "1#AC1_2A_1_10"
}
6 料箱信息对应物料接口
http://localhost/smdbox/rest/api/v2/803/boxDetailMsg
{
"boxCode": "CC002"
}
与扫码贴标batch连接:
> URL: http://IP:port/myproject/rest/api/v2/mes/barcode
> 参数:
>> codeStr 条码字符串
>> batch 批次字符串
C:\Windows\system32>mongod --storageEngine=mmapv1 --logappend --directoryperdb --serviceName MongoDB --install
打印机静默打印: Chrome快捷方式增加:--kiosk-printing
--disable-print-preview
安装Mongodb服务
1、创建 D:\MongoDB 及 D:\MongoDB\data 和 D:\MongoDB\logs 目录
2、执行 mongod --storageEngine=mmapv1 --journal --logpath D:\MongoDB\logs\MongoDB.log --logappend --dbpath D:\MongoDB\data --directoryperdb --serviceName MongoDB --install
移除MongoDB:
sc delete MongoDB
mongod --auth -dbpath D:\MongoDB\data --repair
mac mongo 启动:
sudo mongod -config /usr/local/etc/mongod.conf
Tomcat 8 启动时会出现 webresources.Cache.getResource Unable to add the resource at 的错误,需要在Tomcat的在 /conf/context.xml 的 </Context>前添加以下内容:
<Resources cachingAllowed="true" cacheMaxSize="100000" />
//备份
mongodump -h dbhost -d dbname -o dbdirectory
"C:\Program Files\MongoDB\Server\3.2\bin\mongodump" -d storage -o D:\storage
mongodump -h192.168.3.124 -d storage -o D:\MongoDB\
//还原
mongorestore -h <hostname><:port> -d dbname <path>
C:\Program Files\Apache Software Foundation\Tomcat 9.0\webapps\myproject\WEB-INF\classes\com\myproject\webapp\controller\storage
搅拌时获取与第一罐重量匹配的锡膏
>地址:
>>/service/store/solder/matchMixSolder
>
>参数:
>>barcode: 第一罐的条码
>
> 返回:
>>` {"code":0,"msg":"ok","data":{"posId":"3D03B02","barcode":"xxxx","weight":"100","mixTime":"300"}}`
>>
>> - code: 0为正常,其他为异常,
>> - msg:消息,
>> - data:
>> - posId: 匹配的锡膏所在库位
>> - barcode: 匹配的锡膏条码
>> - weight: 匹配的锡膏的重量
>> - mixTime: 匹配的锡膏的搅拌时间(单位:秒)
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!