Commit fa6eee9f hc

工单保存,出库bug修复

1 个父辈 2009c248
......@@ -32,7 +32,7 @@ public class GlobalExceptionHandler {
/**
* 处理所有不可知的异常
*/
@ExceptionHandler(Throwable.class)
// @ExceptionHandler(Throwable.class)
public ResponseEntity<ApiError> handleException(Throwable e){
// 打印堆栈信息
log.error(e.getMessage());
......
......@@ -281,15 +281,10 @@ public class LiteOrderCache {
//更新工单状态
String orderNo = task.getSourceName();
if (!Strings.isNullOrEmpty(orderNo)) {
LiteOrder order = liteOrderMap.get(orderNo);
//LiteOrder order = null;
if (order == null) {
log.info("缓存中未找到[" + orderNo + "],从数据库中重新加载");
order = liteOrderManager.findByOrderNo(orderNo);
if(order != null){
List<LiteOrderItem> items = liteOrderItemManager.findOrderItems(order.getId());
order.setOrderItems(items);
}
LiteOrder order = liteOrderManager.findByOrderNo(orderNo);
if(order != null){
List<LiteOrderItem> items = liteOrderItemManager.findOrderItems(order.getOrderNo());
order.setOrderItems(items);
}
if (order != null) {
//任务是取消的,需要将总待出库数量-1
......@@ -876,7 +871,8 @@ public class LiteOrderCache {
* @return
*/
public synchronized Collection<LiteOrder> getAllLiteOrder() {
return liteOrderMap.values();
return liteOrderManager.findAll();
// return liteOrderMap.values();
}
......@@ -1361,10 +1357,7 @@ public class LiteOrderCache {
public synchronized String checkOutUnclaimed(LiteOrder liteOrder) throws Exception {
String orderNo = liteOrder.getOrderNo();
LiteOrder cacheOrder = liteOrderMap.get(orderNo);
if (cacheOrder == null) {
cacheOrder = liteOrderManager.findByOrderNo(orderNo);
}
LiteOrder cacheOrder = liteOrderManager.findByOrderNo(orderNo);
if (cacheOrder == null) {
log.info("未找到工单:" + orderNo + "的信息");
return "预约单不存在";
......@@ -1386,7 +1379,7 @@ public class LiteOrderCache {
int boxCheckOutNum = 0;
for (LiteOrderItem item : liteOrder.getOrderItems()) {
for (LiteOrderItem item : cacheOrder.getOrderItems()) {
String pn = item.getPn();
int needNum = item.getNeedNum();
int totalOutNum = item.getTotalOutNum();
......@@ -1404,11 +1397,12 @@ public class LiteOrderCache {
CHECKOUT_TYPE checkOutType = dataCache.getCheckOutType();
//获取可用库位
StoragePos pos = storagePosManager.findPartNumberInStorages(storageIdList, pn, excludePosIds, checkOutType, "");
StoragePos pos = storagePosManager.findPartNumberInStorages(storageIdList, pn, new ArrayList<>(), checkOutType, "");
if (pos == null) {
log.info(item.getPn() + "未找到可用库位,跳过");
break;
}
cacheOrder.setTaskReelCount(item.getNeedNum());
//进行标记
boolean hasSmpPn = false;
......
......@@ -8,7 +8,7 @@ import java.util.Collection;
import java.util.List;
public interface ILiteOrderItemManager extends IBaseManager<LiteOrderItem> {
List<LiteOrderItem> findOrderItems(String orderId);
List<LiteOrderItem> findOrderItems(String orderNo);
LiteOrderItem getOrderItemByBarcode(String barcode);
......
......@@ -12,6 +12,7 @@ import java.util.Set;
public interface ILiteOrderManager extends IBaseManager<LiteOrder> {
LiteOrder findByOrderNo(String orderNo);
LiteOrder findByIdWithItems(String orderId);
LiteOrder createWithItems(LiteOrder liteOrder) throws ValidateException;
List<LiteOrder> findUnEndOrdersList();
......
package com.neotel.smfcore.core.order.service.manager.impl;
import com.google.common.collect.Lists;
import com.neotel.smfcore.common.base.BasePo;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.core.barcode.service.dao.IBarcodeDao;
......@@ -34,6 +35,12 @@ public class LiteOrderManagerImpl implements ILiteOrderManager {
private ILiteOrderItemManager liteOrderItemManager;
@Override
@Deprecated
public LiteOrder findByIdWithItems(String orderId) {
return null;
}
@Override
public LiteOrder findByOrderNo(String orderNo) {
LiteOrder order= liteOrderDao.findOneByCondition(new String[] {"orderNo"}, new String[] {orderNo});
if(order!=null&& order.getOrderItems()==null){
......@@ -52,7 +59,7 @@ public class LiteOrderManagerImpl implements ILiteOrderManager {
public LiteOrder get(String id) {
LiteOrder order= liteOrderDao.findOneById(id);
if(order!=null&& order.getOrderItems()==null){
List<LiteOrderItem> items=liteOrderItemManager.findOrderItems(order.getId());
List<LiteOrderItem> items=liteOrderItemManager.findOrderItems(order.getOrderNo());
order.setOrderItems(items);
}
return order;
......@@ -69,6 +76,8 @@ public class LiteOrderManagerImpl implements ILiteOrderManager {
}
@Override
public LiteOrder createWithItems(LiteOrder liteOrder) throws ValidateException {
liteOrder.setId(liteOrderDao.findOne(Query.query(Criteria.where("orderNo")
.is(liteOrder.getOrderNo()))).getId());
liteOrder = save(liteOrder);
List<LiteOrderItem> items = Lists.newArrayList();
for (LiteOrderItem liteOrderItem : liteOrder.getOrderItems()) {
......
......@@ -5,6 +5,7 @@ import com.neotel.smfcore.common.utils.StorageConstants;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.mapping.Document;
......
......@@ -125,13 +125,10 @@ public class SpBoxCheckOutController {
}
// 判断是不是工单出库
boolean isOrderCheckout = ObjectUtil.isNotEmpty(gekouBarcode.getOrderId());
boolean isOrderCheckout = StringUtils.isNotBlank(liteOrderCache.hasExecutingOrder());
LiteOrder liteOrder = null;
if (isOrderCheckout) {
liteOrder = liteOrderCache.getLiteOrder(liteOrder.getOrderNo());
if (liteOrder == null) {
liteOrder = liteOrderManager.get(gekouBarcode.getOrderId());
}
liteOrder = liteOrderManager.get(gekouBarcode.getOrderId());
if (liteOrder == null || liteOrder.isClosed()) {
......
......@@ -50,20 +50,22 @@ public class SpReturnInventoryController {
@AnonymousAccess
public ResultBean getAllReturnNo(String no) {
List<GetReturnInventoryResult> resultList = LuxsanSpApi.getReturnInventory(new GetReturnInventoryRequest(SpareNostatus.FUNCTION_DEPT, SpareNostatus.FORMAL_DEPT_ID));
List<ReturnInventoryNo> returnInventoryNos = new ArrayList<>();
for (GetReturnInventoryResult result : resultList) {
ReturnInventoryNo returnInventoryNo = returnNoCache.getByOrderNo(result.getOrderNo());
if (returnInventoryNo == null) {
returnInventoryNo = returnNoCache.getOrderNoResultToReturnInventoryNo(result);
returnNoCache.addToMap(returnInventoryNo);
returnNoManager.save(returnInventoryNo);
List<ReturnInventoryNo> result = returnNoManager.findAll();
List<String> returnInventoryNos = result.stream().map(ReturnInventoryNo::getOrderNo).collect(Collectors.toList());
for (GetReturnInventoryResult returnInventoryResult : resultList) {
if (returnInventoryNos.contains(returnInventoryResult.getOrderNo())) {
continue;
}
returnInventoryNos.add(returnInventoryNo);
ReturnInventoryNo returnInventoryNo = returnNoCache
.getOrderNoResultToReturnInventoryNo(returnInventoryResult);
result.add(returnInventoryNo);
returnNoCache.addToMap(returnInventoryNo);
returnNoManager.save(returnInventoryNo);
}
if (StringUtils.isNotBlank(no)) {
returnInventoryNos = returnInventoryNos.stream().filter(spareNo -> spareNo.getOrderNo().equals(no)).collect(Collectors.toList());
result = result.stream().filter(spareNo -> spareNo.getOrderNo().equals(no)).collect(Collectors.toList());
}
return ResultBean.newOkResult(returnInventoryNos);
return ResultBean.newOkResult(result);
}
......
......@@ -6,8 +6,6 @@ import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.luxsan_sp.api.LuxsanSpApi;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.request.GetSpareNoRequest;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.GetSpareNoResult;
import com.neotel.smfcore.custom.luxsan_sp.bean.SpareNo;
import com.neotel.smfcore.custom.luxsan_sp.enums.SpareNostatus;
......@@ -62,23 +60,26 @@ public class SpSpareNoController {
@RequestMapping("/getAllSpareNo")
@AnonymousAccess
public ResultBean getAllSpareNo(String no) {
List<GetSpareNoResult> resultList = LuxsanSpApi.getSpareNo(new GetSpareNoRequest(SpareNostatus.FORMAL_DEPT_ID, SpareNostatus.FUNCTION_DEPT));
// 从远程获取入库单(已经保存的不要)+还要展示本地的入库单
// List<GetSpareNoResult> resultList = LuxsanSpApi.getSpareNo(new GetSpareNoRequest(SpareNostatus.FORMAL_DEPT_ID, SpareNostatus.FUNCTION_DEPT));
List<GetSpareNoResult> resultList = new ArrayList<>();
List<SpareNo> allSpareFromDB = spareNoManager.findAll();
List<SpareNo> spareNoList = new ArrayList<>();
for (GetSpareNoResult result : resultList) {
SpareNo spareNo = spareNoCache.getBySpareNo(result.getSpareNo());
if (spareNo == null) {
spareNo = spareNoCache.getSpareNoResultToSpareNo(result);
spareNoCache.addToMap(spareNo);
spareNoManager.save(spareNo);
List<SpareNo> resultSpare = new ArrayList<>(allSpareFromDB);
List<String> spareNoDBCollection = allSpareFromDB.stream().map(SpareNo::getSpareNo).collect(Collectors.toList());
for (GetSpareNoResult spareNoResult : resultList) {
if (spareNoDBCollection.contains(spareNoResult.getSpareNo())) {
continue;
}
spareNoList.add(spareNo);
SpareNo newSpareNo = spareNoCache.getSpareNoResultToSpareNo(spareNoResult);
resultSpare.add(newSpareNo);
spareNoCache.addToMap(newSpareNo);
spareNoManager.save(newSpareNo);
}
if (StringUtils.isNotBlank(no)) {
spareNoList = spareNoList.stream().filter(spareNo -> spareNo.getSpareNo().equals(no)).collect(Collectors.toList());
resultSpare = resultSpare.stream().filter(spareNo -> spareNo.getSpareNo().equals(no)).collect(Collectors.toList());
}
return ResultBean.newOkResult(spareNoList);
return ResultBean.newOkResult(resultSpare);
}
......
package com.neotel.smfcore.custom.luxsan_sp.controller;
import com.neotel.smfcore.common.base.BasePo;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS;
import com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderMapperImpl;
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.LiteOrderItem;
......@@ -27,7 +29,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import java.util.stream.Collectors;
......@@ -58,6 +62,8 @@ public class SpUnclaimedController {
@Autowired
private LiteOrderCache liteOrderCache;
@Autowired
private OrderMapperImpl orderMapperImpl;
@ApiOperation("获取正在执行出库单")
@RequestMapping("/getActiveOrderNo")
......@@ -72,67 +78,68 @@ public class SpUnclaimedController {
@RequestMapping("/getAllUnclaimed")
@AnonymousAccess
public ResultBean getAllUnclaimed(String no) {
List<GetUnclaimedResult> resultList = LuxsanSpApi.getUnclaimedDetails(new GetUnclaimedRequest(SpareNostatus.FORMAL_DEPT_ID, SpareNostatus.FUNCTION_DEPT));
// List<GetUnclaimedResult> resultList = LuxsanSpApi.getUnclaimedDetails(new GetUnclaimedRequest(SpareNostatus.FORMAL_DEPT_ID, SpareNostatus.FUNCTION_DEPT));
List<GetUnclaimedResult> resultList = new ArrayList<>();
List<LiteOrder> allLiteOrderFromDB = liteOrderManager.findAll();
for (LiteOrder liteOrder : allLiteOrderFromDB) {
if (resultList.stream().map(GetUnclaimedResult::getOrderNo).
collect(Collectors.toList()).contains(liteOrder.getOrderNo())) {
continue;
List<LiteOrder> onlyOneAllLiteOrderFromDB = new ArrayList<>();
Map<String, List<LiteOrder>> collect = allLiteOrderFromDB.stream().collect(Collectors.groupingBy(LiteOrder::getOrderNo));
for (List<LiteOrder> liteOrders : collect.values()) {
List<LiteOrder> collect1 = liteOrders.stream()
.sorted(Comparator.comparing(BasePo::getCreateDate))
.limit(1)
.collect(Collectors.toList());
if (!collect1.isEmpty()) {
onlyOneAllLiteOrderFromDB.add(collect1.get(0));
}
GetUnclaimedResult item = new GetUnclaimedResult();
item.setCreateTime(liteOrder.getCreateDate());
item.setOrderNo(liteOrder.getOrderNo());
}
List<String> allLiteOrderDBCollect = onlyOneAllLiteOrderFromDB.stream().map(LiteOrder::getOrderNo).collect(Collectors.toList());
List<Unclaimed> resultLiteOrder = new ArrayList<>();
for (LiteOrder liteOrder : onlyOneAllLiteOrderFromDB) {
Unclaimed unclaimed = new Unclaimed();
unclaimed.setCreateDate(liteOrder.getCreateDate());
unclaimed.setOrderNo(liteOrder.getOrderNo());
List<UnclaimedDetail> unclaimedDetails = new ArrayList<>();
item.setSpareApplyDetail(unclaimedDetails);
for (LiteOrderItem orderItem : liteOrder.getOrderItems()) {
UnclaimedDetail unclaimedDetail = new UnclaimedDetail();
unclaimedDetail.setPartno(orderItem.getPn());
unclaimedDetail.setOrderNo(orderItem.getOrderNo());
unclaimedDetail.setApplyQty(orderItem.getNeedNum());
unclaimedDetail.setAlrInQty(orderItem.getOutNum());
unclaimedDetail.setAlrInQty(orderItem.getTotalOutNum());
if (liteOrder.isOutTails()){
unclaimed.setUnclaimedStatus(SpareNostatus.EXECUTING_STATUS);
} else if (liteOrder.isClosed()){
unclaimed.setUnclaimedStatus(SpareNostatus.CLOSE_STATUS);
}
unclaimedDetails.add(unclaimedDetail);
}
resultList.add(item);
unclaimed.setDetailList(unclaimedDetails);
resultLiteOrder.add(unclaimed);
}
List<Unclaimed> unclaimedList = new ArrayList<>();
for (GetUnclaimedResult result : resultList) {
String orderNo = result.getOrderNo();
LiteOrder liteOrder = liteOrderCache.getLiteOrder(orderNo);
if (liteOrder == null) {
// 缓存没找到,从数据库找
liteOrder = liteOrderManager.findByOrderNo(orderNo);
}
if (liteOrder == null) {
// 数据库也没有 说明是新的出库单
liteOrder = new LiteOrder();
liteOrder.setOrderNo(orderNo);
List<LiteOrderItem> itemList = new ArrayList<>();
for (UnclaimedDetail detail : result.getSpareApplyDetail()) {
LiteOrderItem item = new LiteOrderItem();
item.setPn(detail.getPartno());
item.setNeedNum(detail.getApplyQty());
itemList.add(item);
}
liteOrder.setOrderItems(itemList);
liteOrder = liteOrderManager.createWithItems(liteOrder);
liteOrderCache.addOrderToMap(liteOrder);
for (GetUnclaimedResult unclaimedResult : resultList) {
if (allLiteOrderDBCollect.contains(unclaimedResult.getOrderNo())) {
continue;
}
Unclaimed unclaimed = orderNoCache.getOrderNoResultToUnclaimed(result);
if (liteOrder.isOutTails()){
unclaimed.setUnclaimedStatus(SpareNostatus.EXECUTING_STATUS);
} else if (liteOrder.isClosed()){
unclaimed.setUnclaimedStatus(SpareNostatus.CLOSE_STATUS);
Unclaimed unclaimed = orderNoCache.getOrderNoResultToUnclaimed(unclaimedResult);
orderNoCache.addToMap(unclaimed);
LiteOrder liteOrder = new LiteOrder();
liteOrder.setOrderNo(unclaimed.getOrderNo());
liteOrder.setCreateDate(unclaimed.getCreateDate());
List<LiteOrderItem> liteOrderItems = new ArrayList<>();
for (UnclaimedDetail unclaimedDetail : unclaimed.getDetailList()) {
LiteOrderItem liteOrderItem = new LiteOrderItem();
liteOrderItem.setLine("s1");
liteOrderItem.setPn(unclaimedDetail.getPartno());
liteOrderItem.setNeedNum(unclaimedDetail.getApplyQty());
liteOrderItems.add(liteOrderItem);
}
unclaimedList.add(unclaimed);
liteOrder.setOrderItems(liteOrderItems);
liteOrderManager.createWithItems(liteOrder);
resultLiteOrder.add(unclaimed);
}
if (StringUtils.isNotEmpty(no)) {
unclaimedList = unclaimedList.stream().filter(spareNo -> spareNo.getOrderNo().equals(no)).collect(Collectors.toList());
resultLiteOrder = resultLiteOrder.stream().filter(spareNo -> spareNo.getOrderNo().equals(no)).collect(Collectors.toList());
}
return ResultBean.newOkResult(unclaimedList);
return ResultBean.newOkResult(resultLiteOrder);
}
......@@ -147,10 +154,7 @@ public class SpUnclaimedController {
}
//判断工单有没有关闭
LiteOrder liteOrder = liteOrderCache.getLiteOrder(orderNoStr);
if (liteOrder == null){
liteOrder = liteOrderManager.findByOrderNo(orderNoStr);
}
LiteOrder liteOrder = liteOrderManager.findByOrderNo(orderNoStr);
if (liteOrder == null){
return ResultBean.newErrorResult(-1,"",orderNoStr+"预约单不存在");
}
......
package com.neotel.smfcore.custom.luxsan_sp.service.dao;
import com.neotel.smfcore.common.base.IBaseDao;
import com.neotel.smfcore.custom.luxsan_sp.bean.SpareNo;
import java.util.List;
public interface SpareNoDao extends IBaseDao {
}
......@@ -5,10 +5,14 @@ import com.neotel.smfcore.custom.luxsan_sp.bean.SpareNo;
import com.neotel.smfcore.custom.luxsan_sp.service.dao.SpareNoDao;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
@Service
public class SpareNoDaoImpl extends AbstractBaseDao implements SpareNoDao {
@Override
public Class getEntityClass() {
return SpareNo.class;
}
}
......@@ -10,4 +10,6 @@ public interface ISpareNoManager extends IBaseManager<SpareNo> {
SpareNo getBySpareNo(String spareNo);
List<SpareNo> findAll();
List<SpareNo> findAllExcludeSpares(List<String> spareNos);
}
......@@ -131,14 +131,18 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager {
//判断此料箱有没有待执行的出入库任务
List<String> needInPn = new ArrayList<>();
for (Barcode barcode :
boxBarcode.getSubCodeList()) {
String inNum = barcode.getExtraData("needInNum");
if (ObjectUtil.isEmpty(inNum) || inNum.equals("0")) {
continue;
} else {
needInPn.add(barcode.getPartNumber());
isOrderPutIn = true;
List<Barcode> subCodeList = boxBarcode.getSubCodeList();
if (ObjectUtil.isEmpty(subCodeList)) {
}else {
for (Barcode barcode : subCodeList) {
String inNum = barcode.getExtraData("needInNum");
if (ObjectUtil.isEmpty(inNum) || inNum.equals("0")) {
continue;
} else {
needInPn.add(barcode.getPartNumber());
isOrderPutIn = true;
}
}
}
if (needInPn.size() > 0 && (!needInPn.contains(codeBarcode.getPartNumber()))) {
......@@ -320,4 +324,5 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager {
}
}
}
......@@ -53,6 +53,12 @@ public class SpareNoManagerImpl implements ISpareNoManager {
}
@Override
public List<SpareNo> findAllExcludeSpares(List<String> spareNos) {
Query query = new Query(Criteria.where("spareNo").nin(spareNos));
return spareNoDao.findByQuery(query);
}
@Override
public SpareNo getBySpareNo(String spareNo) {
return spareNoDao.findOne(new Query(Criteria.where("spareNo").is(spareNo)));
}
......
......@@ -74,6 +74,7 @@ public class OrderNoCache {
Unclaimed unclaimed = new Unclaimed();
BeanUtils.copyProperties(result, unclaimed);
unclaimed.setOrderNo(result.getOrderNo());
unclaimed.setUnclaimedStatus(SpareNostatus.NEW_STATUS);
List<UnclaimedDetail> detailList = new ArrayList<>();
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!