Commit 2b9efd62 sunke

产线补料页面调整,增加申请人和申请时间

一共三种情况 一种是料架料够 就直接出料架亮灯取完料盘订单关闭  第二种是料架有料但是不满足需求 提示缺料 是否继续出  是就强制出 料架把有的料亮灯取完订单关闭否就不做任何动作  第三种就是料架一盘料都没有 这个时候就要提示此工单无料是否关闭 是就关闭 否就不做动作
1 个父辈 cf98ab99
...@@ -143,8 +143,7 @@ public class LiteOrderCache implements ITaskListener { ...@@ -143,8 +143,7 @@ public class LiteOrderCache implements ITaskListener {
} }
public void executeOrderTask(){ public void executeOrderTask(){
for (LiteOrder order : for (LiteOrder order : liteOrderMap.values()) {
liteOrderMap.values()) {
if(order.isNew() ){ if(order.isNew() ){
// if(order.isNew()||order.isTaskFinished()){ // if(order.isNew()||order.isTaskFinished()){
//判断是否到达时间 //判断是否到达时间
...@@ -418,6 +417,7 @@ public class LiteOrderCache implements ITaskListener { ...@@ -418,6 +417,7 @@ public class LiteOrderCache implements ITaskListener {
log.info("开始为工单[" + orderNo + "]挑选出库物料 "); log.info("开始为工单[" + orderNo + "]挑选出库物料 ");
boolean shortage=false; boolean shortage=false;
boolean hasReel = false;
List<String> availableStorageIds = dataCache.getAvailableStorageIds(); List<String> availableStorageIds = dataCache.getAvailableStorageIds();
...@@ -441,36 +441,6 @@ public class LiteOrderCache implements ITaskListener { ...@@ -441,36 +441,6 @@ public class LiteOrderCache implements ITaskListener {
//查找PN的所有库存,PN=pn,未锁定,qty 从大到小,批次正序, 入库时间正序 //查找PN的所有库存,PN=pn,未锁定,qty 从大到小,批次正序, 入库时间正序
List<StoragePos> posList = storagePosManager.findOrderItemInStorage(availableStorageIds, pn, excludePosIds); List<StoragePos> posList = storagePosManager.findOrderItemInStorage(availableStorageIds, pn, excludePosIds);
int storageNum=0;
for (StoragePos pos :posList) {
log.info(pos.getBarcode().getBatch() + " = " + pos.getBarcode().getAmount() + " " + pos.getBarcode().getBarcode());
storageNum+=pos.getBarcode().getAmount();
}
//判断库存数量是否小于需求数量,小于直接返回缺料
if(storageNum<orderItem.getQty()){
if(isShortageOut){
shortage=true;
log.info("工单[" + cacheOrder.getOrderNo() + "]缺料出库: 物料号[" + pn + "] ,需求数量[" + orderItem.getWemng() + "], 库存总数量[" + storageNum + "] ");
}
else {
//不满足实际需求,不发,报缺料
log.info("工单[" + cacheOrder.getOrderNo() + "] 物料号[" + pn + "] ,需求数量[" + orderItem.getWemng() + "], 库存总数量[" + storageNum + "], 不满足实际需求,缺料 ");
return materialShortPro(userName, cacheOrder);
}
}
Component component = componentManager.findOneByPN(pn);
if(component==null){
if(isShortageOut) {
log.info("工单[" + cacheOrder.getOrderNo() + "]缺料出库: 物料号[" + pn + "] ,需求数量[" + orderItem.getWemng() + "], 未找到元器件信息 ");
shortage = true;
}else {
log.info("工单[" + cacheOrder.getOrderNo() + "] 物料号[" + pn + "] ,需求数量[" + orderItem.getWemng() + "], 未找到元器件信息, 缺料 ");
return materialShortPro(userName, cacheOrder);
}
}
int targetNum = needNum; int targetNum = needNum;
List<StoragePos> outPosList = new ArrayList<>(); List<StoragePos> outPosList = new ArrayList<>();
if(cacheOrder.isRepleOrder()){ if(cacheOrder.isRepleOrder()){
...@@ -483,66 +453,8 @@ public class LiteOrderCache implements ITaskListener { ...@@ -483,66 +453,8 @@ public class LiteOrderCache implements ITaskListener {
// 2.1.2 整盘数量=需求数量*整盘占比/最小包装(四舍五入) // 2.1.2 整盘数量=需求数量*整盘占比/最小包装(四舍五入)
// 2.1.3 剩余发散盘,优先取散盘(由多到少发送), // 2.1.3 剩余发散盘,优先取散盘(由多到少发送),
// 散盘不满足情况下补充整盘 // 散盘不满足情况下补充整盘
outPosList =pickBigOrderReels(pn,outPosNameList,posList,targetNum);
int needWholeReelCount = 0;
//判断整盘散盘比
if (component.getWholeReel() >= 0) {
Float wholeReelCount = 1.0f * needNum * component.getWholeReel() / (component.getWholeReel() + component.getHalfReel()) / component.getAmount();
needWholeReelCount = wholeReelCount.intValue();
if(wholeReelCount - needWholeReelCount > 0.5){
needWholeReelCount = needWholeReelCount + 1;
}
log.info("工单[" + cacheOrder.getOrderNo() + "] 物料号[" + pn + "] ,订单数量[" + orderItem.getWemng() + "],计算的整盘数量:" + needWholeReelCount);
}
int oneReelNum = component.getAmount();
//挑选整盘
log.info("开始挑选整盘料,共需要"+needWholeReelCount+"盘");
for (int i = 0; i < needWholeReelCount; i++) {
//先取整盘
StoragePos outPos = pickWholeReel(outPosNameList,posList,targetNum,oneReelNum);
if(outPos == null){
break;
}else{
log.info("挑选批次["+outPos.getBarcode().getBatch()+"]的整盘物料:" + outPos.getBarcode().getBarcode() + " 数量:" + outPos.getBarcode().getAmount());
outPosList.add(outPos);
outPosNameList.add(outPos.getPosName());
targetNum = targetNum - outPos.getBarcode().getAmount();
}
}
//挑选散盘
log.info("开始挑选散盘料,剩余需求"+targetNum);
while (true){
//取散盘
StoragePos outPos = pickNotWholeReel(outPosNameList,posList,targetNum,oneReelNum);
if(outPos == null){
break;
}else{
log.info("挑选批次["+outPos.getBarcode().getBatch()+"]的散盘物料:" + outPos.getBarcode().getBarcode() + " 数量:" + outPos.getBarcode().getAmount());
outPosList.add(outPos);
outPosNameList.add(outPos.getPosName());
targetNum = targetNum - outPos.getBarcode().getAmount();
if(targetNum <=0){
break;
}
}
}
if(targetNum > 0){
log.info("剩余需求"+targetNum+"开始补充整盘");
while(true){
StoragePos outPos = pickFitWholeReel(outPosNameList,posList,targetNum);
if(outPos == null){
break;
}else{
log.info("挑选批次["+outPos.getBarcode().getBatch()+"]的散盘物料:" + outPos.getBarcode().getBarcode() + " 数量:" + outPos.getBarcode().getAmount());
outPosList.add(outPos);
outPosNameList.add(outPos.getPosName());
targetNum = targetNum - outPos.getBarcode().getAmount();
if(targetNum <=0){
break;
}
}
}
}
} }
else{ else{
//2.2、订单数量≤200;(料盘最少原则) //2.2、订单数量≤200;(料盘最少原则)
...@@ -551,118 +463,7 @@ public class LiteOrderCache implements ITaskListener { ...@@ -551,118 +463,7 @@ public class LiteOrderCache implements ITaskListener {
outPosList = pickRepleReels(outPosNameList, posList, targetNum); outPosList = pickRepleReels(outPosNameList, posList, targetNum);
} }
} }
// else{
// //工单出库
// ////②贵重物料,不允许超发,按实际需求发料;
// boolean isGuizhong = orderItem.getOverFlag()==1;
// //判断是否需要截料
// boolean needJieliao =false;
//
// int wholeReelCount = 0;
// int needWholeReelCount = 0;
// //判断整盘散盘比
// if (orderItem.getWemng() > 200) {
// if (component.getWholeReel() >= 0) {
// wholeReelCount = needNum * (component.getWholeReel() / (component.getWholeReel() + component.getHalfReel())) / component.getAmount();
// needWholeReelCount = wholeReelCount;
// log.info("工单[" + cacheOrder.getOrderNo() + "] 物料号[" + pn + "] ,订单数量[" + orderItem.getWemng() + "],计算的整盘数量:" + wholeReelCount);
// }
// }
//
// //判断库存 使用最小库存盘数:当前盘数<=最小库存盘数时,需要截料
// if(component.getMinStoreNum()>0&& reelNum<=component.getMinStoreNum()){
// needJieliao=true;
// }
//
// List<StoragePos> itemPosList = new ArrayList<>();
// //此PN未完成
// for (int i=0;i<posList.size();i++) {
// List<StoragePos> forPosList=new ArrayList<>();
// for (StoragePos pos : posList) {
// if(!outPosNameList.contains(pos.getPosName())){
// forPosList.add(pos);
// }
// }
//
// //循环剩余的库位,查找
// int forIndex=-1;
// for (StoragePos pos : forPosList) {
// forIndex++;
// boolean isLast=(forIndex==(forPosList.size()-1));
// //已经在出库列表
// if (outPosNameList.contains(pos.getPosName())) {
// continue;
// }
//
// //截料料规则
// if (isGuizhong || needJieliao) {
// if (pos.getBarcode().getAmount() >= targetNum) {
// int jieliaoNum=targetNum;
// //一盘刚好满足
// targetNum -= pos.getBarcode().getAmount();
// itemPosList.add(pos);
// outPosNameList.add(pos.getPosName());
// if (targetNum < 0) {
// jieliaoPosMap.put(pos.getPosName(), jieliaoNum);
// }
// break;
// } else if (isLast) {
// int jieliaoNum=targetNum;
// //一盘料不足,直接加入
// itemPosList.add(pos);
// outPosNameList.add(pos.getPosName());
// targetNum -= pos.getBarcode().getAmount();
// if (targetNum < 0) {
// jieliaoPosMap.put(pos.getPosName(), jieliaoNum);
// }
// break;
// }
// } else if (wholeReelCount > 0) {
//
// boolean isWholeReel = pos.getBarcode().getAmount() >= component.getAmount();
// if (needWholeReelCount > 0) {
// //判断数量,先出整盘料
// if (pos.getBarcode().getAmount() >= targetNum) {
// if (isWholeReel) {
// needWholeReelCount--;
// }
// itemPosList.add(pos);
// outPosNameList.add(pos.getPosName());
// targetNum -= pos.getBarcode().getAmount();
// }
// } else {
// //整盘已出完,按照数量满足或最后一盘来出
// if (!isWholeReel) {
// if (pos.getBarcode().getAmount() >= targetNum || isLast) {
// itemPosList.add(pos);
// outPosNameList.add(pos.getPosName());
// targetNum -= pos.getBarcode().getAmount();
// break;
// }
// }
// }
//
//
// } else {
// //不需要截料,也不按照整盘比,按照数量满足或最后一盘来出
// if (pos.getBarcode().getAmount() >= targetNum || isLast) {
// itemPosList.add(pos);
// outPosNameList.add(pos.getPosName());
// targetNum -= pos.getBarcode().getAmount();
// break;
// }
// }
//
// if (targetNum <= 0) {
// break;
// }
// }
// if (targetNum <= 0) {
// break;
// }
// }
//
// }
//可以出库 //可以出库
int outNum = 0; int outNum = 0;
itemOutPosMap.put(orderItem.getId(), outPosList); itemOutPosMap.put(orderItem.getId(), outPosList);
...@@ -673,26 +474,24 @@ public class LiteOrderCache implements ITaskListener { ...@@ -673,26 +474,24 @@ public class LiteOrderCache implements ITaskListener {
outNum = outNum + reelAmount; outNum = outNum + reelAmount;
} }
//判断数量是否满足 //判断数量是否满足
if(outNum > 0){
hasReel = true;
}
int excessNum = outNum - orderItem.getQty();//超发的数量 int excessNum = outNum - orderItem.getQty();//超发的数量
if (excessNum < 0) { if (excessNum < 0) {
if(isShortageOut){
shortage=true; shortage=true;
log.info("工单[" + cacheOrder.getOrderNo() + "]缺料出库: 物料号[" + pn + "] ,需求数量[" + orderItem.getWemng() + "], 库存可发数量[" + outNum + "], 不满足实际需求 ");
}
else {
//不满足实际需求,不发,报缺料
log.info("工单[" + cacheOrder.getOrderNo() + "] 物料号[" + pn + "] ,需求数量[" + orderItem.getWemng() + "], 库存可发数量[" + outNum + "], 不满足实际需求,缺料 ");
return materialShortPro(userName, cacheOrder);
}
}else if(excessNum > 0){ }else if(excessNum > 0){
////②贵重物料,不允许超发,按实际需求发料; ////②贵重物料,不允许超发,按实际需求发料;
boolean isGuizhong = orderItem.getOverFlag()==1; boolean isGuizhong = orderItem.getOverFlag()==1;
//判断是否需要截料 //判断是否需要截料
boolean needJieliao =false; boolean needJieliao =false;
//判断库存 使用最小库存盘数:当前盘数<=最小库存盘数时,需要截料 //判断库存 使用最小库存盘数:当前盘数<=最小库存盘数时,需要截料
Component component = componentManager.findOneByPN(pn);
if(component != null){
if(component.getMinStoreNum()>0&& posList.size() <=component.getMinStoreNum()){ if(component.getMinStoreNum()>0&& posList.size() <=component.getMinStoreNum()){
needJieliao=true; needJieliao=true;
} }
}
if(isGuizhong || needJieliao){ if(isGuizhong || needJieliao){
StoragePos minAmountReelPos = null; StoragePos minAmountReelPos = null;
...@@ -715,6 +514,20 @@ public class LiteOrderCache implements ITaskListener { ...@@ -715,6 +514,20 @@ public class LiteOrderCache implements ITaskListener {
} }
} }
if(!isShortageOut){
//不是强制出库,缺料需要进行提示
if(shortage){
changeOrderToShortage(userName,cacheOrder);
if(hasReel){
//有可以出库的料
return "smfcore.order.out.shortReel";
}else{
//一盘料都没有
return "smfcore.order.out.noReel";
}
}
}
log.info("开始执行工单[" + orderNo + "] "); log.info("开始执行工单[" + orderNo + "] ");
if(!addOutbound){ if(!addOutbound){
cacheOrder.setTaskReelCount(0); cacheOrder.setTaskReelCount(0);
...@@ -801,10 +614,7 @@ public class LiteOrderCache implements ITaskListener { ...@@ -801,10 +614,7 @@ public class LiteOrderCache implements ITaskListener {
cacheOrder.setTaskReelCount(taskReelCount); cacheOrder.setTaskReelCount(taskReelCount);
cacheOrder.setTotalFinishedReelCount(0); cacheOrder.setTotalFinishedReelCount(0);
cacheOrder.setTotalTaskReelCount(cacheOrder.getTotalTaskReelCount()+taskReelCount); cacheOrder.setTotalTaskReelCount(cacheOrder.getTotalTaskReelCount()+taskReelCount);
if(addOutbound){ if(shortage) {
}
else if(shortage) {
cacheOrder.setShortageOut(true); cacheOrder.setShortageOut(true);
} }
log.info("工单[" + orderNo + "]任务分配结束,任务数[" + taskReelCount + "]"); log.info("工单[" + orderNo + "]任务分配结束,任务数[" + taskReelCount + "]");
...@@ -817,27 +627,24 @@ public class LiteOrderCache implements ITaskListener { ...@@ -817,27 +627,24 @@ public class LiteOrderCache implements ITaskListener {
liteOrderMap.put(cacheOrder.getOrderNo(), cacheOrder); liteOrderMap.put(cacheOrder.getOrderNo(), cacheOrder);
if (taskReelCount <= 0) { if (taskReelCount <= 0) {
//return "工单无可执行的任务"; //return "工单无可执行的任务";
return "smfcore.order.out.noTask"; //return "smfcore.order.out.noTask";
return "smfcore.order.close.success";
} }
return ""; return "";
} }
public void pickOrderReel(){ /**
* 更改工单状态为缺料状态
} */
public void changeOrderToShortage(String userName, LiteOrder liteOrder){
public String materialShortPro(String userName, LiteOrder liteOrder){
//挑料时缺料,直接 关闭工单 //挑料时缺料,直接 关闭工单
log.info("工单["+liteOrder.getOrderNo()+"]缺料,更改工单为缺料状态"); log.info("工单["+liteOrder.getOrderNo()+"]缺料,更改工单为缺料状态");
liteOrder.setOperateUser(userName); liteOrder.setOperateUser(userName);
liteOrder.setStatus(LITEORDER_STATUS.SHORTAGE); liteOrder.setStatus(LITEORDER_STATUS.SHORTAGE);
liteOrder.setClosed(false); liteOrder.setClosed(false);
liteOrderManager.save(liteOrder); liteOrderManager.save(liteOrder);
liteOrderMap.put(liteOrder.getOrderNo(), liteOrder); liteOrderMap.put(liteOrder.getOrderNo(), liteOrder);
return "smfcore.order.out.short";
} }
...@@ -889,6 +696,88 @@ public class LiteOrderCache implements ITaskListener { ...@@ -889,6 +696,88 @@ public class LiteOrderCache implements ITaskListener {
return null; return null;
} }
/**
* // 2.1、订单数量>200;
* // 2.1.1 散盘:整盘=3:7(比例可调,物料数量)
* // 2.1.2 整盘数量=需求数量*整盘占比/最小包装(四舍五入)
* // 2.1.3 剩余发散盘,优先取散盘(由多到少发送),
* // 散盘不满足情况下补充整盘
* @param pn
* @param outPosNameList
* @param posList
* @param targetNum
* @return
*/
private List<StoragePos> pickBigOrderReels(String pn, List<String> outPosNameList, List<StoragePos> posList, int targetNum){
List<String> excludePosNameList = new ArrayList<>(outPosNameList);
List<StoragePos> outPosList = new ArrayList<>();
int needWholeReelCount = 0;
Component component = componentManager.findOneByPN(pn);
if(component==null){
//缺料
return outPosList;
}
//判断整盘散盘比
if (component.getWholeReel() >= 0) {
Float wholeReelCount = 1.0f * targetNum * component.getWholeReel() / (component.getWholeReel() + component.getHalfReel()) / component.getAmount();
needWholeReelCount = wholeReelCount.intValue();
if(wholeReelCount - needWholeReelCount > 0.5){
needWholeReelCount = needWholeReelCount + 1;
}
}
int oneReelNum = component.getAmount();
//挑选整盘
log.info("开始挑选整盘料,共需要"+needWholeReelCount+"盘");
for (int i = 0; i < needWholeReelCount; i++) {
//先取整盘
StoragePos outPos = pickWholeReel(excludePosNameList,posList,targetNum,oneReelNum);
if(outPos == null){
break;
}else{
log.info("挑选批次["+outPos.getBarcode().getBatch()+"]的整盘物料:" + outPos.getBarcode().getBarcode() + " 数量:" + outPos.getBarcode().getAmount());
outPosList.add(outPos);
excludePosNameList.add(outPos.getPosName());
targetNum = targetNum - outPos.getBarcode().getAmount();
}
}
//挑选散盘
log.info("开始挑选散盘料,剩余需求"+targetNum);
while (true){
//取散盘
StoragePos outPos = pickNotWholeReel(excludePosNameList,posList,targetNum,oneReelNum);
if(outPos == null){
break;
}else{
log.info("挑选批次["+outPos.getBarcode().getBatch()+"]的散盘物料:" + outPos.getBarcode().getBarcode() + " 数量:" + outPos.getBarcode().getAmount());
outPosList.add(outPos);
excludePosNameList.add(outPos.getPosName());
targetNum = targetNum - outPos.getBarcode().getAmount();
if(targetNum <=0){
break;
}
}
}
if(targetNum > 0){
log.info("剩余需求"+targetNum+"开始补充整盘");
while(true){
StoragePos outPos = pickFitWholeReel(excludePosNameList,posList,targetNum);
if(outPos == null){
break;
}else{
log.info("挑选批次["+outPos.getBarcode().getBatch()+"]的散盘物料:" + outPos.getBarcode().getBarcode() + " 数量:" + outPos.getBarcode().getAmount());
outPosList.add(outPos);
excludePosNameList.add(outPos.getPosName());
targetNum = targetNum - outPos.getBarcode().getAmount();
if(targetNum <=0){
break;
}
}
}
}
return outPosList;
}
/** /**
* 按照满足需求最少料盘补料,最大盘第二盘发满足需求最小盘 * 按照满足需求最少料盘补料,最大盘第二盘发满足需求最小盘
......
...@@ -15,6 +15,7 @@ import com.neotel.smfcore.core.order.bean.OrderBoxInfo; ...@@ -15,6 +15,7 @@ import com.neotel.smfcore.core.order.bean.OrderBoxInfo;
import com.neotel.smfcore.core.order.bean.OrderPnInfo; import com.neotel.smfcore.core.order.bean.OrderPnInfo;
import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS; import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS;
import com.neotel.smfcore.core.order.rest.bean.dto.OrderDto; import com.neotel.smfcore.core.order.rest.bean.dto.OrderDto;
import com.neotel.smfcore.core.order.rest.bean.dto.OrderItemDto;
import com.neotel.smfcore.core.order.rest.bean.dto.OrderPnDto; import com.neotel.smfcore.core.order.rest.bean.dto.OrderPnDto;
import com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderItemMapper; import com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderItemMapper;
import com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderMapper; import com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderMapper;
...@@ -40,6 +41,7 @@ import io.swagger.annotations.Api; ...@@ -40,6 +41,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
...@@ -160,22 +162,31 @@ public class OrderController { ...@@ -160,22 +162,31 @@ public class OrderController {
if (!ObjectUtils.isEmpty(id)) { if (!ObjectUtils.isEmpty(id)) {
LiteOrder liteOrder = liteOrderManager.get(id); LiteOrder liteOrder = liteOrderManager.get(id);
if (liteOrder != null) { if (liteOrder != null) {
OrderDto dto = orderMapper.toDto(liteOrder); return toOrderDto(liteOrder);
dto.setOrderItems(orderItemMapper.toDto(liteOrder.getOrderItems()));
return dto;
} }
} else if (!ObjectUtils.isEmpty(orderNo)) { } else if (!ObjectUtils.isEmpty(orderNo)) {
LiteOrder liteOrder = liteOrderManager.findByOrderNo(orderNo); LiteOrder liteOrder = liteOrderManager.findByOrderNo(orderNo);
if (liteOrder != null) { if (liteOrder != null) {
OrderDto dto = orderMapper.toDto(liteOrder); return toOrderDto(liteOrder);
dto.setOrderItems(orderItemMapper.toDto(liteOrder.getOrderItems()));
return dto;
} }
} }
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"orderNo"}); throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"orderNo"});
} }
private OrderDto toOrderDto(LiteOrder liteOrder){
OrderDto dto = orderMapper.toDto(liteOrder);
List<OrderItemDto> itemDtos = orderItemMapper.toDto(liteOrder.getOrderItems());
for (OrderItemDto itemDto : itemDtos) {
String lgort = itemDto.getLgort();
if(Strings.isBlank(lgort)){
itemDto.setLgort(dto.getLgort());
}
}
dto.setOrderItems(itemDtos);
return dto;
}
@ApiOperation("上传工单") @ApiOperation("上传工单")
@PostMapping(value = "/upload") @PostMapping(value = "/upload")
@AnonymousAccess @AnonymousAccess
...@@ -196,8 +207,7 @@ public class OrderController { ...@@ -196,8 +207,7 @@ public class OrderController {
throw new ValidateException("smfcore.fileError", "文件解析失败"); throw new ValidateException("smfcore.fileError", "文件解析失败");
} }
for (HikOrderInfo outInfo : for (HikOrderInfo outInfo : itemList) {
itemList) {
//查找工单是否存在 //查找工单是否存在
String orderNo = outInfo.getJobNo(); String orderNo = outInfo.getJobNo();
...@@ -262,7 +272,7 @@ public class OrderController { ...@@ -262,7 +272,7 @@ public class OrderController {
if (ObjectUtil.isEmpty(result)) { if (ObjectUtil.isEmpty(result)) {
return ResultBean.newOkResult(result); return ResultBean.newOkResult(result);
} }
else if(result.equals("smfcore.order.out.short")){ else if(result.equals("smfcore.order.out.shortReel") || result.equals("smfcore.order.out.noReel")){
return ResultBean.newErrorResult(99, result, result); return ResultBean.newErrorResult(99, result, result);
} }
else { else {
......
...@@ -18,11 +18,13 @@ import com.neotel.smfcore.core.order.bean.OrderBoxInfo; ...@@ -18,11 +18,13 @@ import com.neotel.smfcore.core.order.bean.OrderBoxInfo;
import com.neotel.smfcore.core.order.bean.OrderPnInfo; import com.neotel.smfcore.core.order.bean.OrderPnInfo;
import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS; import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS;
import com.neotel.smfcore.core.order.rest.bean.dto.OrderDto; import com.neotel.smfcore.core.order.rest.bean.dto.OrderDto;
import com.neotel.smfcore.core.order.rest.bean.dto.OrderItemDto;
import com.neotel.smfcore.core.order.rest.bean.dto.OrderPnDto; import com.neotel.smfcore.core.order.rest.bean.dto.OrderPnDto;
import com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderItemMapper; import com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderItemMapper;
import com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderMapper; import com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderMapper;
import com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderPnMapper; import com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderPnMapper;
import com.neotel.smfcore.core.order.rest.bean.query.OrderQueryCondition; import com.neotel.smfcore.core.order.rest.bean.query.OrderQueryCondition;
import com.neotel.smfcore.core.order.rest.bean.query.RepleOrderQueryCondition;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager; import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager;
import com.neotel.smfcore.core.order.service.po.LiteOrder; import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem; import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
...@@ -42,6 +44,7 @@ import io.swagger.annotations.Api; ...@@ -42,6 +44,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
...@@ -109,7 +112,7 @@ public class RepleOrderController { ...@@ -109,7 +112,7 @@ public class RepleOrderController {
@ApiOperation("查询补料工单") @ApiOperation("查询补料工单")
@GetMapping @GetMapping
@PreAuthorize("@el.check('productionLineReple')") @PreAuthorize("@el.check('productionLineReple')")
public PageData<OrderDto> query(OrderQueryCondition criteria, Pageable pageable) { public PageData<OrderDto> query(RepleOrderQueryCondition criteria, Pageable pageable) {
//Query query = QueryHelp.getQuery(criteria); //Query query = QueryHelp.getQuery(criteria);
List<Criteria> criteriaList = QueryHelp.toCriteria(criteria); List<Criteria> criteriaList = QueryHelp.toCriteria(criteria);
if (criteria.getStatus() != null) { if (criteria.getStatus() != null) {
...@@ -143,22 +146,31 @@ public class RepleOrderController { ...@@ -143,22 +146,31 @@ public class RepleOrderController {
if (!ObjectUtils.isEmpty(id)) { if (!ObjectUtils.isEmpty(id)) {
LiteOrder liteOrder = liteOrderManager.get(id); LiteOrder liteOrder = liteOrderManager.get(id);
if (liteOrder != null) { if (liteOrder != null) {
OrderDto dto = orderMapper.toDto(liteOrder); return toOrderDto(liteOrder);
dto.setOrderItems(orderItemMapper.toDto(liteOrder.getOrderItems()));
return dto;
} }
} else if (!ObjectUtils.isEmpty(orderNo)) { } else if (!ObjectUtils.isEmpty(orderNo)) {
LiteOrder liteOrder = liteOrderManager.findByOrderNo(orderNo); LiteOrder liteOrder = liteOrderManager.findByOrderNo(orderNo);
if (liteOrder != null) { if (liteOrder != null) {
OrderDto dto = orderMapper.toDto(liteOrder); return toOrderDto(liteOrder);
dto.setOrderItems(orderItemMapper.toDto(liteOrder.getOrderItems()));
return dto;
} }
} }
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"orderNo"}); throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"orderNo"});
} }
private OrderDto toOrderDto(LiteOrder liteOrder){
OrderDto dto = orderMapper.toDto(liteOrder);
List<OrderItemDto> itemDtos = orderItemMapper.toDto(liteOrder.getOrderItems());
for (OrderItemDto itemDto : itemDtos) {
String lgort = itemDto.getLgort();
if(Strings.isBlank(lgort)){
itemDto.setLgort(dto.getLgort());
}
}
dto.setOrderItems(itemDtos);
return dto;
}
@ApiOperation("产线补料工单出库") @ApiOperation("产线补料工单出库")
@PostMapping(value = "/out") @PostMapping(value = "/out")
...@@ -184,7 +196,7 @@ public class RepleOrderController { ...@@ -184,7 +196,7 @@ public class RepleOrderController {
if (ObjectUtil.isEmpty(result)) { if (ObjectUtil.isEmpty(result)) {
return ResultBean.newOkResult(result); return ResultBean.newOkResult(result);
} }
else if(result.equals("smfcore.order.out.short")){ else if(result.equals("smfcore.order.out.shortReel") || result.equals("smfcore.order.out.noReel")){
return ResultBean.newErrorResult(99, result, result); return ResultBean.newErrorResult(99, result, result);
} }
else { else {
......
...@@ -122,4 +122,14 @@ public class OrderDto implements Serializable { ...@@ -122,4 +122,14 @@ public class OrderDto implements Serializable {
*/ */
@ApiModelProperty(value = "面别") @ApiModelProperty(value = "面别")
private String wktype; private String wktype;
/**
* 申请人
*/
private String applyName;
/**
* 申请时间
*/
private Date applyDate;
} }
...@@ -17,6 +17,11 @@ public class OrderItemDto { ...@@ -17,6 +17,11 @@ public class OrderItemDto {
@ApiModelProperty(value = "站位号") @ApiModelProperty(value = "站位号")
private String station; private String station;
/**
*lgort String true 库位
*/
private String lgort;
@ApiModelProperty(value = "需求数量") @ApiModelProperty(value = "需求数量")
private Integer qty; private Integer qty;
......
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;
@Data
public class RepleOrderQueryCondition {
@QueryCondition(blurry = "orderNo,jobNo,workLine,applyName,wktype,replenishmentNo")
private String blurry;
/**
* jobNo String true 工单号/合单号[合并唯一]
*/
@QueryCondition
private String jobNo;
/**
*workLine String true 产线
*/
@QueryCondition
private String workLine;
/**
* 申请人
*/
@QueryCondition
private String applyName;
/**
* 申请时间
*/
@QueryCondition(type = QueryCondition.Type.BETWEEN)
@DateTimeFormat(pattern = "yyyy-MM-dd")
private BetweenData<Date> applyDate;
/**
* 面别
*/
@QueryCondition
private String wktype;
/**
*replenishmentNo String false 补料单号,如果有值表示此单为补料单[合并唯一]
*/
@QueryCondition
private String replenishmentNo;
@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 = "subWknumList")
private List<String> orderNoList;
@QueryCondition(type = QueryCondition.Type.IN, propName = "source")
private List<String> sourceList;
@QueryCondition(type = QueryCondition.Type.NIN, propName = "source")
private List<String> excludeSourceList;
//状态,0=所有,1=已关闭,2=未关闭,3=出库中
private Integer status;
//
// @QueryCondition(type=QueryCondition.Type.IN,propName = "status")
// private List<Integer> statusList ;
}
...@@ -29,8 +29,7 @@ public class LiteOrder extends BasePo implements Serializable { ...@@ -29,8 +29,7 @@ public class LiteOrder extends BasePo implements Serializable {
this.orderItems = orderItems; this.orderItems = orderItems;
this.orderNo = orderNo; this.orderNo = orderNo;
this.type = 2; this.type = 2;
for (LiteOrderItem item : for (LiteOrderItem item : orderItems) {
orderItems) {
if (!StringUtils.isEmpty(item.getMaterialNo())) { if (!StringUtils.isEmpty(item.getMaterialNo())) {
// if (!StringUtils.isEmpty(item.getPn()) && (StringUtils.isEmpty(item.getRi()))) { // if (!StringUtils.isEmpty(item.getPn()) && (StringUtils.isEmpty(item.getRi()))) {
this.type = 1; this.type = 1;
...@@ -186,6 +185,16 @@ public class LiteOrder extends BasePo implements Serializable { ...@@ -186,6 +185,16 @@ public class LiteOrder extends BasePo implements Serializable {
*/ */
private String wktype; private String wktype;
/**
* 申请人
*/
private String applyName;
/**
* 申请时间
*/
private Date applyDate;
public Integer getBoxNum(){ public Integer getBoxNum(){
if(boxInfos!=null){ if(boxInfos!=null){
return boxInfos.size(); return boxInfos.size();
...@@ -320,6 +329,8 @@ public class LiteOrder extends BasePo implements Serializable { ...@@ -320,6 +329,8 @@ public class LiteOrder extends BasePo implements Serializable {
this.setWemng(outInfo.getWemng()); this.setWemng(outInfo.getWemng());
this.setWktype(outInfo.getWktype()); this.setWktype(outInfo.getWktype());
this.setSubWknumList(outInfo.getSubWknumList()); this.setSubWknumList(outInfo.getSubWknumList());
this.setApplyName(outInfo.getApplyName());
this.setApplyDate(outInfo.getApplyD());
if(orderItems==null){ if(orderItems==null){
orderItems=new ArrayList<>(); orderItems=new ArrayList<>();
} }
......
...@@ -35,6 +35,11 @@ public class LiteOrderItem extends BasePo implements Serializable ,Comparable<Li ...@@ -35,6 +35,11 @@ public class LiteOrderItem extends BasePo implements Serializable ,Comparable<Li
*/ */
private int increment=0; private int increment=0;
/**
*lgort String true 库位
*/
private String lgort;
/** /**
*reason String false 移动原因 *reason String false 移动原因
......
...@@ -102,6 +102,19 @@ public class HikOrderInfo implements Serializable { ...@@ -102,6 +102,19 @@ public class HikOrderInfo implements Serializable {
*/ */
private String wktype; private String wktype;
/**
* 申请人
*/
private String applyName;
/**
* 申请时间
*/
private String applyDate;
public void setSubWknum(String subWknum) { public void setSubWknum(String subWknum) {
this.subWknum = subWknum; this.subWknum = subWknum;
subWknumList = Lists.newArrayList(subWknum.split(",")); subWknumList = Lists.newArrayList(subWknum.split(","));
...@@ -122,7 +135,8 @@ public class HikOrderInfo implements Serializable { ...@@ -122,7 +135,8 @@ public class HikOrderInfo implements Serializable {
item.setOverFlag(this.getOverFlag()); item.setOverFlag(this.getOverFlag());
item.setIncrement(this.getPrepareIncrement()); item.setIncrement(this.getPrepareIncrement());
item.setReason(this.getReason()); item.setReason(this.getReason());
item.setWemng(this.wemng); item.setWemng(this.getWemng());
item.setLgort(this.getLgort());
return item; return item;
} }
...@@ -146,4 +160,18 @@ public class HikOrderInfo implements Serializable { ...@@ -146,4 +160,18 @@ public class HikOrderInfo implements Serializable {
} }
return sDate; return sDate;
} }
/**
* 申请时间
* @return
*/
public Date getApplyD(){
Date sDate=null;
try {
sDate= DateUtil.toDate(applyDate,"yyyy-MM-dd HH:mm:ss");
}catch (Exception ex){
log.error("HitOutInfo getApplyD ["+applyDate+"] 出错:"+ex.toString());
}
return sDate;
}
} }
...@@ -27,7 +27,6 @@ smfcore.noAccessUpdate=\u6CA1\u6709\u5220\u9664\u83DC\u5355\u7684\u6743\u9650 ...@@ -27,7 +27,6 @@ smfcore.noAccessUpdate=\u6CA1\u6709\u5220\u9664\u83DC\u5355\u7684\u6743\u9650
smfcore.roleCannotDel=\u89D2\u8272[{0}]\u6709[{1}]\u4E2A\u7528\u6237\u5173\u8054\u6539\u89D2\u8272,\u4E0D\u80FD\u5220\u9664 smfcore.roleCannotDel=\u89D2\u8272[{0}]\u6709[{1}]\u4E2A\u7528\u6237\u5173\u8054\u6539\u89D2\u8272,\u4E0D\u80FD\u5220\u9664
smfcore.notFindPos=\u672A\u627E\u5230\u9501\u5B9A\u5E93\u4F4D smfcore.notFindPos=\u672A\u627E\u5230\u9501\u5B9A\u5E93\u4F4D
smfcore.error.barcode.empty=\u672A\u626B\u5230\u6761\u7801 smfcore.error.barcode.empty=\u672A\u626B\u5230\u6761\u7801
smfcore.error.barcode.many=\u627E\u5230\u591A\u4E2A\u6709\u6548\u6761\u7801,\u65E0\u6CD5\u5165\u5E93
smfcore.error.barcode.expired=\u7269\u6599\u5DF2\u8FC7\u671F,\u65E0\u6CD5\u5165\u5E93. smfcore.error.barcode.expired=\u7269\u6599\u5DF2\u8FC7\u671F,\u65E0\u6CD5\u5165\u5E93.
smfcore.allBoxView.noReel=\u5E93\u4F4D{0}\u4E2D\u65E0\u7269\u6599 smfcore.allBoxView.noReel=\u5E93\u4F4D{0}\u4E2D\u65E0\u7269\u6599
smfcore.error.barcode.many=\u627E\u5230\u591A\u4E2A\u6709\u6548\u7684\u6761\u7801 smfcore.error.barcode.many=\u627E\u5230\u591A\u4E2A\u6709\u6548\u7684\u6761\u7801
...@@ -105,7 +104,6 @@ smfcore.error.barcode.noRules=\u89E3\u6790\u89C4\u5219\u672A\u5B9A\u4E49 ...@@ -105,7 +104,6 @@ smfcore.error.barcode.noRules=\u89E3\u6790\u89C4\u5219\u672A\u5B9A\u4E49
smfcore.error.barcode.wrongLength=\u6761\u7801[{0}]\u957F\u5EA6\u9519\u8BEF smfcore.error.barcode.wrongLength=\u6761\u7801[{0}]\u957F\u5EA6\u9519\u8BEF
smfcore.error.barcode.noField=\u6761\u7801\u89E3\u6790\u5931\u8D25,\u672A\u627E\u5230{0}\u5B57\u6BB5 smfcore.error.barcode.noField=\u6761\u7801\u89E3\u6790\u5931\u8D25,\u672A\u627E\u5230{0}\u5B57\u6BB5
smfcore.error.barcode.pnNotExist=x\u6863\u6848 {0} \u4E0D\u5B58\u5728 smfcore.error.barcode.pnNotExist=x\u6863\u6848 {0} \u4E0D\u5B58\u5728
smfcore.error.barcode.invalid={0}\u4E0D\u662F\u6709\u6548\u7684\u6761\u7801
smfcore.error.barcode.locked=\u5E93\u4F4D[{0}]\u5DF2\u88AB\u9501\u5B9A smfcore.error.barcode.locked=\u5E93\u4F4D[{0}]\u5DF2\u88AB\u9501\u5B9A
smfcore.manualOut.ok=\u624B\u52A8\u51FA\u5E93\u6210\u529F smfcore.manualOut.ok=\u624B\u52A8\u51FA\u5E93\u6210\u529F
smfcore.manualOut.notFound=\u4ED3\u5E93\u4E2D\u672A\u627E\u5230\u6599\u76D8\u4FE1\u606F smfcore.manualOut.notFound=\u4ED3\u5E93\u4E2D\u672A\u627E\u5230\u6599\u76D8\u4FE1\u606F
...@@ -254,6 +252,8 @@ smfcore.component.storeError=\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u5E93\u5B58\uF ...@@ -254,6 +252,8 @@ smfcore.component.storeError=\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u5E93\u5B58\uF
smfcore.user.group.error=\u7EC4[{0}]\u5DF2\u7ECF\u5206\u914D\u7ED9\u64CD\u4F5C\u5458[{1}] smfcore.user.group.error=\u7EC4[{0}]\u5DF2\u7ECF\u5206\u914D\u7ED9\u64CD\u4F5C\u5458[{1}]
smfcore.noValidPos=\u672A\u627E\u5230\u5355\u636E\u53F7 smfcore.noValidPos=\u672A\u627E\u5230\u5355\u636E\u53F7
smfcore.order.out.short=\u5DE5\u5355\u7F3A\u6599 smfcore.order.out.short=\u5DE5\u5355\u7F3A\u6599
smfcore.order.out.shortReel=\u5DE5\u5355\u7F3A\u6599,\u662F\u5426\u7EE7\u7EED\u51FA\u5E93
smfcore.order.out.noReel=\u6B64\u5DE5\u5355\u65E0\u6599\u662F\u5426\u5173\u95ED
smfcore.outList.out.short=\u5B58\u50A8\u51FA\u5E93\u5355{0}\u7F3A\u6599 smfcore.outList.out.short=\u5B58\u50A8\u51FA\u5E93\u5355{0}\u7F3A\u6599
smfcore.outList.out.noTask=\u8F6C\u50A8\u51FA\u5E93\u5355\u65E0\u53EF\u6267\u884C\u7684\u4EFB\u52A1 smfcore.outList.out.noTask=\u8F6C\u50A8\u51FA\u5E93\u5355\u65E0\u53EF\u6267\u884C\u7684\u4EFB\u52A1
smfcore.posNotDel=\u5220\u9664\u5931\u8D25\uFF0C\u8BF7\u5148\u5220\u9664[{0}]\u7684\u6240\u6709\u5E93\u4F4D smfcore.posNotDel=\u5220\u9664\u5931\u8D25\uFF0C\u8BF7\u5148\u5220\u9664[{0}]\u7684\u6240\u6709\u5E93\u4F4D
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!