Commit 91b62603 sunke

工单出库重复挑料问题修复

增加一些搜索条件
1 个父辈 c9839427
......@@ -202,21 +202,6 @@ public class LiteOrderCache implements ITaskListener {
liteOrderItem.setTotalOutNum(liteOrderItem.getTotalOutNum() + task.getNum());
liteOrderItem.setTotalOutReelCount(liteOrderItem.getTotalOutReelCount() + 1);
liteOrderItem = liteOrderItemManager.save(liteOrderItem);
// Barcode barcode = barcodeManager.findByBarcode(task.getBarcode());
// if (barcode != null) {
// Float totalNeedNum = liteOrderItem.getNeedNum() * order.getOrderTimes();
// int barcodeRemainNum = liteOrderItem.getOutNum() - totalNeedNum.intValue();
// if (barcodeRemainNum < 0) {
// barcodeRemainNum = 0;
// }
// barcode.setAmount(barcodeRemainNum);
// log.info("条码[" + task.getBarcode() + "]从工单出库,更改数量为:" + barcodeRemainNum);
// try {
// barcodeManager.save(barcode);
// } catch (ValidateException e) {
// e.printStackTrace();
// }
// }
}
items.add(liteOrderItem);
}
......@@ -434,6 +419,9 @@ public class LiteOrderCache implements ITaskListener {
Map<String ,List<StoragePos>> needOutPosMap=new HashMap<>();//挑出的需要出库的料列表,key=pn,value=库位
Map<String,Integer> jieliaoPosMap=new HashMap<>();//需要截料的物料列表,key=PosName,value=此工单使用数量
List<String> excludePosIds = Lists.newArrayList();
excludePosIds.addAll(taskService.excludePosIds());
//获取此工单出库的所有物料
for (LiteOrderItem orderItem : cacheOrder.getOrderItems()) {
......@@ -452,7 +440,7 @@ public class LiteOrderCache implements ITaskListener {
//查找PN的所有库存,PN=pn,未锁定,qty 从大到小,入库时间正序
List<StoragePos> posList = storagePosManager.findOrderItemInStorage(availableStorageIds, pn, taskService.excludePosIds());
List<StoragePos> posList = storagePosManager.findOrderItemInStorage(availableStorageIds, pn, excludePosIds);
int storageNum=0;
int reelNum=posList.size();
......@@ -609,6 +597,10 @@ public class LiteOrderCache implements ITaskListener {
}
//可以出库
needOutPosMap.put(pn, itemPosList);
//排除掉这些库位,以免重复挑取同一盘料
for (StoragePos storagePos : itemPosList) {
excludePosIds.add(storagePos.getId());
}
}
log.info("开始执行工单[" + orderNo + "] ");
......@@ -629,8 +621,7 @@ public class LiteOrderCache implements ITaskListener {
int itemReelCount=0;
int itemOutCount=0;
List<StoragePos> posList=needOutPosMap.get(orderItem.getMaterialNo());
for (StoragePos pos :
posList) {
for (StoragePos pos : posList) {
DataLog task = taskService.newTask(pos) ;
task.setSourceId(cacheOrder.getId());
......@@ -661,7 +652,11 @@ public class LiteOrderCache implements ITaskListener {
task.setAddOutbound(true);
task.setLightColor(ORDER_COLOR.PINK.getRgb());//补料出库 颜色:PINK
}
taskService.addTaskToExecute(task);
try{
taskService.addTaskToExecute(task);
}catch (Exception e){
log.info("添加入库列表出错:"+e.getMessage());
}
log.info("工单[" + orderNo + "],任务数[" + taskReelCount + "]仓位【" + pos.getPosName() + "】RI=[" + pos.getBarcode().getBarcode() + "] PN=[" + orderItem.getMaterialNo() + "] Amount[" + pos.getBarcode().getAmount()+
"] 首盘["+task.isFirstReel()+"] 截料["+task.isNeedSplitting()+"]["+task.getNeedQty()+"] 补料出库["+task.isAddOutbound()+"]");
......
......@@ -40,7 +40,7 @@ public class OrderDto implements Serializable {
@ApiModelProperty("排程数量")
private Integer wemng;
@ApiModelProperty("开工时间")
@ApiModelProperty("计划开始时间")
private Date startDate;
@ApiModelProperty("完工时间")
......
......@@ -4,6 +4,7 @@ package com.neotel.smfcore.core.order.rest.bean.query;
import com.neotel.smfcore.common.annotation.QueryCondition;
import com.neotel.smfcore.common.bean.BetweenData;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.util.List;
......@@ -17,6 +18,13 @@ public class OrderQueryCondition {
@QueryCondition(type = QueryCondition.Type.BETWEEN)
private BetweenData<Date> createDate;
@QueryCondition(type = QueryCondition.Type.BETWEEN)
@DateTimeFormat(pattern = "yyyy-MM-dd")
private BetweenData<Date> startDate;
@QueryCondition(type = QueryCondition.Type.IN, propName = "orderNo")
private List<String> orderNoList;
@QueryCondition(type = QueryCondition.Type.IN, propName = "source")
private List<String> sourceList;
@QueryCondition(type = QueryCondition.Type.NIN, propName = "source")
......
......@@ -118,17 +118,19 @@ public class MaterialStockController {
String partNumberStr= MessageUtils.getText("smfcore.safetyInventory.partNumber",locale,"物料编号");
String countStr= MessageUtils.getText("smfcore.safetyInventory.count",locale,"库存数量");
String stockReelStr= MessageUtils.getText("smfcore.safetyInventory.stockReel",locale,"库存盘数");
String lockReelStr= MessageUtils.getText("smfcore.safetyInventory.supplementReel",locale,"补充盘数");
String storageNameStr= MessageUtils.getText("smfcore.safetyInventory.amount",locale,"最小包装");
String supplementReelStr= MessageUtils.getText("smfcore.safetyInventory.supplementReel",locale,"补充盘数");
String minPackageStr= MessageUtils.getText("smfcore.safetyInventory.amount",locale,"最小包装");
String totalAddStr= MessageUtils.getText("smfcore.safetyInventory.amount",locale,"补充总量");
List<Map<String, Object>> maps = new ArrayList<>();
for (SafetyInventoryDto item : results) {
Map<String, Object> map = new LinkedHashMap<>();
map.put(partNumberStr, item.getPartNumber());
map.put(countStr, item.getStockCount());
map.put(lockReelStr, item.getLockReel());
map.put(stockReelStr, item.getSupplementReel());
map.put(storageNameStr, item.getAmount());
map.put(stockReelStr, item.getStockReel());
map.put(supplementReelStr, item.getSupplementReel());
map.put(minPackageStr, item.getAmount());
map.put(totalAddStr, item.getSupplementReel() * item.getAmount());
maps.add(map);
}
FileUtil.downloadExcel(maps, response);
......@@ -184,6 +186,7 @@ public class MaterialStockController {
suppleReel=com.getMaxStoreNum();
}
dto.setSupplementReel(suppleReel);
dto.setSupplementCount(suppleReel * dto.getAmount());
}
if (needSupplement) {
if (dto.getSupplementReel() > 0) {
......
......@@ -303,12 +303,8 @@ public class StoragePosController {
} else if (criteria.getMaxAmount() != null) {
baseCriteria.and("barcode.amount").lte(criteria.getMaxAmount());
}
if (criteria.getMinDistance() != null && criteria.getMaxDistance() != null) {
baseCriteria.and("barcode.distance").gte(criteria.getMinDistance()).lte(criteria.getMaxDistance());
} else if (criteria.getMinDistance() != null) {
baseCriteria.and("barcode.distance").gte(criteria.getMinDistance());
} else if (criteria.getMaxDistance() != null) {
baseCriteria.and("barcode.distance").lte(criteria.getMaxDistance());
if (criteria.getDistance() != null) {
baseCriteria.and("barcode.distance").is(criteria.getDistance());
}
// baseCriteria.and("barcode.lockMsl").ne(true);//湿敏超期物料所在仓位锁定, 不允许备料
......
......@@ -48,4 +48,7 @@ public class SafetyInventoryDto implements Serializable {
@ApiModelProperty("安全库存")
private int safetyStoreNum=0;
@ApiModelProperty("补充总量")
private int supplementCount=0;
}
......@@ -14,7 +14,7 @@ import java.util.List;
@Data
public class StoragePosFindCriteria {
@QueryCondition(blurry = "barcode.partNumber,barcode,posName,barcode.provider,barcode.batch")
@QueryCondition(blurry = "barcode.partNumber,barcode.barcode,posName,barcode.provider,barcode.batch")
private String blurry;
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "barcode.putInDate")
......@@ -91,11 +91,9 @@ public class StoragePosFindCriteria {
@ApiModelProperty("最大数量")
private Integer maxAmount;
@ApiModelProperty("最小间距")
private Integer minDistance;
@ApiModelProperty("间距")
private Integer distance;
@ApiModelProperty("最大间距")
private Integer maxDistance;
public int getComponentType(){
int componentType = getType();
if (componentType != -1) {
......
......@@ -105,7 +105,8 @@ public class HikApi {
if (responseInfo == null || responseInfo.getCode().equals(-1)) {
log.info(apiName+"未收到反馈");
// needResend=true;
} else if (responseInfo.getCode().equals(CODE_PARAMERROR) || responseInfo.getCode().equals(CODE_REPEAT) || (responseInfo.getCode()!=0)) {
}
else if (responseInfo.getCode().equals(CODE_PARAMERROR) || responseInfo.getCode().equals(CODE_REPEAT) || (responseInfo.getCode()!=0)) {
// needResend=true;
log.info(apiName+"返回code=" + responseInfo.getCode() + ",message="+responseInfo.getMessage()+"," + JsonUtil.toJsonStr(responseInfo));
ApiResult apiResult=new ApiResult(responseInfo.getCode(),responseInfo.getMessage(),new ArrayList<>());
......@@ -248,7 +249,7 @@ public class HikApi {
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("trayId", trayId);//料盘ID
dataMap.put("flag", "SMF");//SMF 亮灯货架
dataMap.put("flag", "2");//SMF 亮灯货架
// String data = JsonUtil.toJsonStr(dataMap);
// data String 41 是 料盘ID
......@@ -437,7 +438,7 @@ public class HikApi {
// code Integer 结果码(33关闭)
//工单已关闭
log.info(apiName+"返回code=" + responseInfo.getCode() + ",工单已关闭,无法出库" );
return new ApiResult(33,"工单已关闭,无法出库",new ArrayList<>());
return new ApiResult(33,"MES返回:工单已关闭,无法出库",new ArrayList<>());
}
else if (responseInfo.getCode().equals(CODE_PARAMERROR) || responseInfo.getCode().equals(CODE_REPEAT)|| (responseInfo.getCode()!=0)) {
log.info(apiName+"返回code=" + responseInfo.getCode() + ",需要重发," + JsonUtil.toJsonStr(responseInfo));
......@@ -447,7 +448,7 @@ public class HikApi {
log.info(apiName + "返回" + JsonUtil.toJsonStr(responseInfo));
String dataStr = responseInfo.getDataStr();
List<HikOrderInfo> list = JsonUtil.toList(dataStr, HikOrderInfo .class);
return new ApiResult(responseInfo.getCode(),responseInfo.getMessage(),new ArrayList<>());
return new ApiResult(responseInfo.getCode(),responseInfo.getMessage(),list);
}
} catch (Exception e) {
......@@ -585,7 +586,7 @@ public class HikApi {
} else if (responseInfo.getCode().equals(CODE_PARAMERROR) || responseInfo.getCode().equals(CODE_REPEAT)|| (responseInfo.getCode()!=0)) {
needResend = true;
log.info(apiName+"返回code=" + responseInfo.getCode() + "," + JsonUtil.toJsonStr(responseInfo));
return new ApiResult(responseInfo.getCode(), responseInfo.getMessage(), new ArrayList<>());
return new ApiResult(responseInfo.getCode(), responseInfo.getMessage(), "");
} else {
log.info(apiName + "返回" + JsonUtil.toJsonStr(responseInfo));
String dataStr = responseInfo.getDataStr();
......
package com.neotel.smfcore.hikvision.bean.result;
import com.neotel.smfcore.hikvision.util.HttpHelper;
import com.neotel.smfcore.hikvision.util.JsonUtil;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
......@@ -16,4 +18,9 @@ public class ApiResult {
private String msg="";
private Object data="";
public String getDataStr(){
return JsonUtil.toJsonStr(data);
}
}
......@@ -3,6 +3,8 @@ package com.neotel.smfcore.hikvision.util;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.neotel.smfcore.hikvision.bean.HikOrderInfo;
import com.neotel.smfcore.hikvision.bean.api.ResponseParam;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
......@@ -86,58 +88,24 @@ public class JsonUtil {
}
public static void main(String args[]) throws Exception{
String jsonStr = "[{\n" +
" \"action\": \"补料\",\n" +
" \"hSerial\": \"82\",\n" +
" \"so\": \"879235\",\n" +
"\"refno\": \"F001_879235N_1\",\n" +
"\"partNum\": \"7H.47134.1F1\",\n" +
" \"slot\": \"1-11\",\n" +
"\"qty\": \"2006\",\n" +
"\"facility\": \"SU\",\n" +
"\"sdte\": \"20191118\",\n" +
"\"stme\": \"85957\",\n" +
"\"reelcut\": \"N\",\n" +
"\"mdte\": \"20191115\",\n" +
"\"mtme\": \"172238\"\n" +
"},\n{\n" +
" \"action\": \"补料\",\n" +
" \"hSerial\": \"82\",\n" +
" \"so\": \"879235\",\n" +
"\"refno\": \"F001_879235N_1\",\n" +
"\"partNum\": \"7H.47134.1F1\",\n" +
" \"slot\": \"1-11\",\n" +
"\"qty\": \"2006\",\n" +
"\"facility\": \"SU\",\n" +
"\"sdte\": \"20191118\",\n" +
"\"stme\": \"85957\",\n" +
"\"reelcut\": \"N\",\n" +
"\"mdte\": \"20191115\",\n" +
"\"mtme\": \"172238\"\n" +
"}\n]";
// List<RequestOutItemBean> items = JsonUtil.toList(jsonStr, RequestOutItemBean.class);
// for (RequestOutItemBean item : items) {
// System.out.println(item);
// }
// System.out.println(DateUtil.toDateString(new Date(),"yyyyMMddHHmmssS"));
// System.out.println(DateUtil.toDateString(new Date(),"yyyyMMddHHmmssS"));
// System.out.println(DateUtil.toDateString(new Date(),"yyyyMMddHHmmssS"));
// System.out.println(DateUtil.toDateString(new Date(),"yyyyMMddHHmmssS"));
//
// System.out.println(System.nanoTime());
// System.out.println(System.nanoTime());
// System.out.println(System.currentTimeMillis());
// System.out.println(System.currentTimeMillis());
jsonStr = "{\"state\":\"0\",\"msg\":\"鏂欏嵎浣嶆暟涓嶅尮閰??\",\"info\":{\"so\":\"\",\"facility\":\"12334\",\"company\":\"\",\"qty\":\"\",\"soseq\":\"\"}}";
jsonStr = "{\"data\":[{\"Serial\":\"58890\",\"VehicleID\":\"D15\",\"Status\":\"\"},{\"Serial\":\"58890\",\"VehicleID\":\"D44\",\"Status\":\"\"},{\"Serial\":\"58890\",\"VehicleID\":\"D83\",\"Status\":\"\"},{\"Serial\":\"58890\",\"VehicleID\":\"D90\",\"Status\":\"\"},{\"Serial\":\"58890\",\"VehicleID\":\"D98\",\"Status\":\"\"}]}";
Map<String, Object> map = JsonUtil.toMap(jsonStr);
Object data = map.get("data");
if(data != null){
List<Object> dataList = (List)data;
for (Object info : dataList) {
Map<String,String> infoMap = (Map)info;
System.out.println(infoMap.get("Serial"));
}
String jsonStr = "{\"code\":\"000000\",\"data\":{\"reqCode\":\"2022062018550110000347\",\"code\":0,\"message\":\"success\",\"data\":[{\"jobNo\":\"1526710801_1\",\"station\":\"1_50004_L_NPM-3\",\"baseCode\":\"8001\",\"lgort\":\"M9142\",\"workLine\":\"S111\",\"startDate\":\"2022-06-21 17:57:24\",\"endDate\":\"2022-06-21 19:21:00\",\"materialNo\":\"100300266\",\"qty\":76,\"stationCount\":1,\"overFlag\":0,\"prepareIncrement\":0,\"wemng\":50,\"docType\":1,\"replenishmentNo\":null},{\"jobNo\":\"1526710801_1\",\"station\":\"1_30009_R_NPM-2\",\"baseCode\":\"8001\",\"lgort\":\"M9142\",\"workLine\":\"S111\",\"startDate\":\"2022-06-21 17:57:24\",\"endDate\":\"2022-06-21 19:21:00\",\"materialNo\":\"100300266\",\"qty\":76,\"stationCount\":1,\"overFlag\":0,\"prepareIncrement\":0,\"wemng\":50,\"docType\":1,\"replenishmentNo\":null}]},\"message\":null}";
String dataStr = "";
//转成map,只取里面的data
ResponseParam responseInfo = null;
Map<String, Object> resultMap = JsonUtil.toMap(jsonStr);
if (resultMap != null && resultMap.containsKey("data")) {
dataStr = JsonUtil.toJsonStr(resultMap.get("data"));
responseInfo = JsonUtil.toObj(dataStr, ResponseParam.class);
}else{
responseInfo = JsonUtil.toObj(jsonStr,ResponseParam.class);
}
//responseInfo.getData()
List<HikOrderInfo> list = JsonUtil.toList(responseInfo.getDataStr(), HikOrderInfo .class);
for (HikOrderInfo info : list) {
System.out.println(info.getMaterialNo());
}
}
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!