Commit 2009c248 hc

fix:出库单保存

1 个父辈 dae3e29e
......@@ -21,4 +21,6 @@ public interface ILiteOrderManager extends IBaseManager<LiteOrder> {
List<LiteOrder> findByQueryAndPartNumber(Query q, String partNumber);
LiteOrder batchCheckOut(Set<TacticsOutDto> outDtoSet);
List<LiteOrder> findAll();
}
......@@ -23,8 +23,8 @@ public class LiteOrderItemManagerImpl implements ILiteOrderItemManager {
private ILiteOrderItemDao liteOrderItemDao;
@Override
public List<LiteOrderItem> findOrderItems(String orderId) {
return liteOrderItemDao.findListByCondition(new String[]{"orderId"}, new String[]{orderId});
public List<LiteOrderItem> findOrderItems(String orderNo) {
return liteOrderItemDao.findListByCondition(new String[]{"orderNo"}, new String[]{orderNo});
}
@Override
......
......@@ -22,10 +22,7 @@ import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.*;
@Service
public class LiteOrderManagerImpl implements ILiteOrderManager {
......@@ -159,6 +156,16 @@ public class LiteOrderManagerImpl implements ILiteOrderManager {
}
@Override
public List<LiteOrder> findAll() {
List<LiteOrder> all = liteOrderDao.findAll();
for (LiteOrder liteOrder : all) {
List<LiteOrderItem> orderItems = liteOrderItemManager.findOrderItems(liteOrder.getOrderNo());
liteOrder.setOrderItems(orderItems);
}
return all;
}
@Override
public PageData<LiteOrder> findByPage(Query query, Pageable pageable) {
int totalCount = liteOrderDao.countByQuery(query);
List<LiteOrder> list = liteOrderDao.findByQuery(query, pageable);
......
......@@ -145,12 +145,13 @@ public class LuxsanSpApi extends DefaultSmfApiListener {
List<GetSpareNoResult> resultList = JSONObject.parseArray(lizhenApiResult.getData(), GetSpareNoResult.class);
if (resultList != null && !resultList.isEmpty()) {
return resultList;
}else {
return new ArrayList<>();
}
} catch (Exception e) {
log.info("getSpareNo请求失败:" + e.getMessage());
throw new ValidateException("smfcore.api.error", "接口[{0}]请求失败[{1}]", new String[]{url, e.getMessage()});
}
throw new ValidateException("smfcore.api.error", "接口请求失败[{0}]", new String[]{"未找到入库单信息"});
}
......
......@@ -19,10 +19,13 @@ public class SpareNo extends BaseNo {
//0表示待入库
private String status;
//仓库描述
private String whDesc;
// 入库单需要确定是否已经调用入库接口
private boolean isConfirmed;
}
package com.neotel.smfcore.custom.luxsan_sp.controller;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.barcode.enums.BARCODE_STATUS;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.service.dao.impl.DataLogDaoImpl;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.lizhen.agvBox.bean.Station;
import com.neotel.smfcore.custom.lizhen.agvBox.util.StationCacheUtil;
import com.neotel.smfcore.custom.luxsan_sp.api.LuxsanSpApi;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.request.SpareInHourseRequest;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.SpareInHourseDetail;
import com.neotel.smfcore.custom.luxsan_sp.bean.*;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.IReturnNoManager;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.ISpareNoManager;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.SpBoxPutInManager;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.ISpBoxPutInManager;
import com.neotel.smfcore.custom.luxsan_sp.util.*;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.Api;
......@@ -37,7 +26,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.*;
import java.util.stream.Collectors;
@Api(tags = "备件仓 料箱入库")
@RestController
......@@ -48,32 +36,8 @@ public class SpBoxPutInController {
@Autowired
private CodeResolve codeResolve;
@Autowired
private SpBoxPutInManager spBoxPutInManager;
private ISpBoxPutInManager ISpBoxPutInManager;
@Autowired
private IStoragePosManager storagePosManager;
@Autowired
private IBarcodeManager barcodeManager;
@Autowired
private SpareNoCache spareNoCache;
@Autowired
private ReturnNoCache returnNoCache;
@Autowired
private ISpareNoManager spareNoManager;
@Autowired
private IReturnNoManager returnNoManager;
@Autowired
private TaskService taskService;
@Autowired
private DataCache dataCache;
@Autowired
private DataLogDaoImpl dataLogDaoImpl;
@ApiOperation("获取当前工位的料箱信息")
@RequestMapping("/getStationInfo")
......@@ -116,243 +80,7 @@ public class SpBoxPutInController {
@RequestMapping("/reelToBox")
@AnonymousAccess
public ResultBean reelToBox(@RequestBody Map<String, String> paramMap) throws Exception {
return ResultBean.newOkResult(spBoxPutInManager.reelToBox(paramMap));
return ResultBean.newOkResult(ISpBoxPutInManager.reelToBox(paramMap));
}
// //以料格为维度,一个料格
// @ApiOperation("物料放入料格")
// @RequestMapping("/reelToBox")
// @AnonymousAccess
// public synchronized ResultBean reelToBox(@RequestBody Map<String, String> paramMap) {
//// SpareNo spareNo1 = spareNoCache.getExecutIngSpareNo();
//// ReturnInventoryNo returnInventoryNo1 = returnNoCache.getExecutingOrderNo();
//// if (ObjectUtil.isAllEmpty(spareNo1, returnInventoryNo1)) {
//// return ResultBean.newErrorResult(-1,"","没有找到正在执行的入库单或者退库单");
//// }
// String boxStr = paramMap.get("boxStr");
// String codeStr = paramMap.get("codeStr");
// String binCodeStr = paramMap.get("binCodeStr");
// log.info("reelToBox : boxStr="+boxStr+",codeStr="+codeStr+",binCodeStr="+binCodeStr);
//// boxStr = "C0700377A";
//// codeStr = "1950090020044V&&2";
//// binCodeStr = "C0700377-01";
//
// //解析料箱信息
// Barcode boxBarcode = codeResolve.resolveOneValideBarcode("=2x2=" + boxStr);
// if (boxBarcode == null) {
// return ResultBean.newErrorResult(-1, "", boxStr + "不是有效的条码");
// }
//
// //解析料格信息
// Barcode binBarcode = codeResolve.resolveOneValideBarcode("=2x2=" + binCodeStr);
// if (binBarcode == null) {
// return ResultBean.newErrorResult(-1, "", binCodeStr + "不是有效的条码");
// }
//
// //2.解析条码信息
// CodeBarcode codeBarcode = CodeUtil.getCodeBarcode(codeStr);
// if (codeBarcode == null) {
// return ResultBean.newErrorResult(-1, "", codeStr + "不是有效的条码");
// }
//
//
// // 判断物料是否在其他格口
// boolean isAlreadyInThisOrNever = barcodeManager.partNumberIsAlreadyInThisOrNever(binCodeStr, codeBarcode.getPartNumber());
// if (!isAlreadyInThisOrNever) {
// return ResultBean.newErrorResult(-1, "", codeBarcode.getPartNumber() + "已经存在其他料格");
// }
//
//
// if (boxBarcode.getPartNumber().equals(binBarcode.getPartNumber())) {
// binBarcode.setPartNumber(null);
// }
// if (ObjectUtil.isEmpty(binBarcode.getPartNumber())) {
// binBarcode.setPartNumber(codeBarcode.getPartNumber());
// }
//
// //1.判断料格信息与料箱信息是否匹配
// if (!binBarcode.getBarcode().startsWith(boxBarcode.getBarcode())) {
// return ResultBean.newErrorResult(-1, "", binCodeStr + "不是当前料箱:" + boxStr + "的隔口");
// }
// // 匹配是否存在该料格
// List<Barcode> subCodeList = boxBarcode.getSubCodeList();
// if (ObjectUtil.isNull(subCodeList)) {
// boxBarcode.setSubCodeList(new ArrayList<>());
// subCodeList = boxBarcode.getSubCodeList();
// subCodeList.add(binBarcode);
// }else {
// if (! (subCodeList.stream()
// .map(Barcode::getBarcode)
// .collect(Collectors.toList())
// .contains(binCodeStr))
// ) {
// subCodeList.add(binBarcode);
// }
// }
//
//
//
// //判断有没有正在执行入库单
// SpareNo spareNo = spareNoCache.getExecutIngSpareNo();
// ReturnInventoryNo returnInventoryNo = returnNoCache.getExecutingOrderNo();
// BaseNo baseNo = null;
// boolean isOrderPutIn = false;
// if (ObjectUtil.isAllEmpty(spareNo, returnInventoryNo)) {
//// return ResultBean.newErrorResult(-1,"","没有找到正在执行的入库单或者退库单");
// }else {
// baseNo = ObjectUtil.isEmpty(spareNo) ? returnInventoryNo : spareNo;
// isOrderPutIn = true;
// }
//
//
// //3.判断与当前隔口的料号是否匹配
//// String binPartNumber = binBarcode.getPartNumber();
//// if (binPartNumber.equals("CS") || binPartNumber.equals("CB") || binPartNumber.equals("CM")) {
//// binPartNumber = "";
//// }
//
// boolean isMatch = false;
// int binCodeNum = Integer.parseInt(binCodeStr.split("-")[1]);
// //判断格口数量
// int count = SpBoxUtil.GetBoxSubCount(boxBarcode.getBarcode());
// if(binCodeNum>count){
// return ResultBean.newErrorResult(-1, "", boxBarcode.getBarcode() + "最多格口数"+count+",请扫描正确的格口码");
// }
// String codePartNumber = codeBarcode.getPartNumber();
// for (Barcode barcode : boxBarcode.getSubCodeList()) {
// String pn = barcode.getPartNumber();
// int binNum = Integer.parseInt(barcode.getBarcode().split("-")[1]);
// if ((binNum == binCodeNum)) {
// // 要入的料格找到了
// if (StringUtils.isNotBlank(barcode.getPartNumber())) {
// if (pn.equals(codePartNumber)) {
// isMatch = true;
// }
// }else {
// if (isOrderPutIn) {
//
// }else {
// isMatch = true;
// barcode.setPartNumber(codePartNumber);
// }
// }
// break;
// }
// }
//// if (StringUtils.isEmpty(binPartNumber)) {
//// binPartNumber = codePartNumber;
//// } else {
//// if (!binPartNumber.equals(codePartNumber)) {
//// return ResultBean.newErrorResult(-1, "", codeStr + "与隔口:" + binCodeStr + "的料号不匹配");
//// }
//// }
// if (!isMatch) {
// return ResultBean.newErrorResult(-1, "", codeStr + "的料号["+codePartNumber+"]与隔口:" + binCodeStr + "的料号["+binBarcode.getPartNumber()+"]不匹配");
// }
//
//
// //判断是否已经完成了
// boolean finish = true;
// //判断当前入库的是否和入库单一样
// if (isOrderPutIn) {
// List<SpareNoDetail> detailList = baseNo.getDetailList();
//
// SpareNoDetail spareNoDetail = null;
//
// for (SpareNoDetail detail : detailList) {
// //如果相同的话,判断数量是否大于需求数量
// if (detail.getPartno().equals(codePartNumber)) {
// if (detail.getAlrInQty() + codeBarcode.getQty() <= detail.getInQty()) {
// spareNoDetail = detail;
// break;
// }
// }
// }
//
// if (spareNoDetail == null) {
// return ResultBean.newErrorResult(-1,"",codePartNumber+"没有入退库需求,请检查是否存在或者不符合入退库数量");
// }
//
//
//
// //数量加
// spareNoDetail.setAlrInQty(spareNoDetail.getAlrInQty()+ codeBarcode.getQty());
// baseNo.updateDetailList(spareNoDetail);
//
// log.info("开始判断是否完成入库单");
// for (SpareNoDetail noDetail : baseNo.getDetailList()) {
// if (noDetail.getInQty() > noDetail.getAlrInQty()){
// log.info("入库未完成");
// finish = false;
// break;
// }
// log.info("入料noDetail.getInQty()"+noDetail.getInQty()+"noDetail.getAlrInQty()"+noDetail.getAlrInQty());
// }
//
//
// }
//
//
// //4.开始放入料箱
// binBarcode.setPartNumber(codePartNumber);
// binBarcode.setAmount(binBarcode.getAmount()+codeBarcode.getQty());
//
//
// boxBarcode.updateSubCodes(binBarcode);
//
//
//// if (!finish) {
//// return ResultBean.newOkResult("");
//// }
// //5.寻找空库位
// StoragePos pos = SpBoxUtil.locOnePos(boxBarcode);
// if (pos == null){
// return ResultBean.newErrorResult(-1,"",boxStr+"未找到可用的库位");
// }
//
// //6.生成入库任务
// DataLog dataLog = new DataLog();
// dataLog.setBarcode(codeStr);
// dataLog.setPartNumber(codeBarcode.getPartNumber());
// dataLog.setOperator(SecurityUtils.getLoginUsername());
// dataLog.setStatus(OP_STATUS.FINISHED.name());
// dataLog.setPosName(binBarcode.getBarcode());
// dataLog.setType(OP.PUT_IN);
//
// pos.setBarcode(boxBarcode);
// pos.setUsed(true);
// if (finish && isOrderPutIn){
// // 调用入库接口
// if (baseNo.getClass().equals(SpareNo.class)) {
// List<SpareInHourseDetail> details = new ArrayList<>();
// for (SpareNoDetail detail : baseNo.getDetailList()) {
// SpareInHourseDetail spareInHourseDetail = new SpareInHourseDetail();
// spareInHourseDetail.setInQty(detail.getInQty());
// spareInHourseDetail.setPartno(detail.getPartno());
// String location = boxStr;
//// String location = SpareNostatus.LOCATION_CODE.get(baseNo.getWhCode());
// spareInHourseDetail.setLocationCode(location);
//// spareInHourseDetail.setLocationCode(binBarcode.getBarcode());
// details.add(spareInHourseDetail);
// }
// LuxsanSpApi.spareInHourse(new SpareInHourseRequest(baseNo.getDeptId(),baseNo.getNo(),baseNo.getWhCode(), details));
// }
// }
//
// if (isOrderPutIn) {
// if ( baseNo.getClass().equals(SpareNo.class)) {
// spareNoCache.addToMap(spareNo);
// spareNoManager.save(spareNo);
// }else {
// returnNoCache.addToMap(returnInventoryNo);
// returnNoManager.save(returnInventoryNo);
// }
// }
// storagePosManager.save(pos);
// barcodeManager.save(binBarcode);
// barcodeManager.save(boxBarcode);
// taskService.updateFinishedTask(dataLog);
//
// return ResultBean.newOkResult("");
// }
}
......@@ -63,6 +63,8 @@ public class SpSpareNoController {
@AnonymousAccess
public ResultBean getAllSpareNo(String no) {
List<GetSpareNoResult> resultList = LuxsanSpApi.getSpareNo(new GetSpareNoRequest(SpareNostatus.FORMAL_DEPT_ID, SpareNostatus.FUNCTION_DEPT));
List<SpareNo> allSpareFromDB = spareNoManager.findAll();
List<SpareNo> spareNoList = new ArrayList<>();
for (GetSpareNoResult result : resultList) {
SpareNo spareNo = spareNoCache.getBySpareNo(result.getSpareNo());
......
......@@ -28,6 +28,7 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.stream.Collectors;
@Slf4j
......@@ -72,6 +73,26 @@ public class SpUnclaimedController {
@AnonymousAccess
public ResultBean getAllUnclaimed(String no) {
List<GetUnclaimedResult> resultList = LuxsanSpApi.getUnclaimedDetails(new GetUnclaimedRequest(SpareNostatus.FORMAL_DEPT_ID, SpareNostatus.FUNCTION_DEPT));
List<LiteOrder> allLiteOrderFromDB = liteOrderManager.findAll();
for (LiteOrder liteOrder : allLiteOrderFromDB) {
if (resultList.stream().map(GetUnclaimedResult::getOrderNo).
collect(Collectors.toList()).contains(liteOrder.getOrderNo())) {
continue;
}
GetUnclaimedResult item = new GetUnclaimedResult();
item.setCreateTime(liteOrder.getCreateDate());
item.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.setApplyQty(orderItem.getNeedNum());
unclaimedDetail.setAlrInQty(orderItem.getOutNum());
unclaimedDetails.add(unclaimedDetail);
}
resultList.add(item);
}
List<Unclaimed> unclaimedList = new ArrayList<>();
......@@ -79,9 +100,11 @@ public class SpUnclaimedController {
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);
......
......@@ -2,7 +2,7 @@ package com.neotel.smfcore.custom.luxsan_sp.service.manager;
import java.util.Map;
public interface SpBoxPutInManager {
public interface ISpBoxPutInManager {
Map<String,String> reelToBox(Map<String, String> paramMap) throws Exception;
}
package com.neotel.smfcore.custom.luxsan_sp.service.manager.impl;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.DeepCopyUtil;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.core.barcode.enums.BARCODE_STATUS;
......@@ -20,7 +19,7 @@ import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.SpareInHourseDetail;
import com.neotel.smfcore.custom.luxsan_sp.bean.*;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.IReturnNoManager;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.ISpareNoManager;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.SpBoxPutInManager;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.ISpBoxPutInManager;
import com.neotel.smfcore.custom.luxsan_sp.util.CodeUtil;
import com.neotel.smfcore.custom.luxsan_sp.util.ReturnNoCache;
import com.neotel.smfcore.custom.luxsan_sp.util.SpBoxUtil;
......@@ -34,7 +33,7 @@ import java.util.*;
@Slf4j
@Service
public class SpBoxPutInManagerImpl implements SpBoxPutInManager {
public class SpBoxPutInManagerImpl implements ISpBoxPutInManager {
@Autowired
private CodeResolve codeResolve;
......@@ -240,24 +239,34 @@ public class SpBoxPutInManagerImpl implements SpBoxPutInManager {
}
// 最后刷新不能回滚的
if (finish && isOrderPutIn) {
// 调用入库接口
if (baseNo.getClass().equals(SpareNo.class)) {
dataLog.setSourceId(baseNo.getId());
dataLog.setSourceName(((SpareNo) baseNo).getSpareNo());
List<SpareInHourseDetail> details = new ArrayList<>();
for (SpareNoDetail detail : baseNo.getDetailList()) {
SpareInHourseDetail spareInHourseDetail = new SpareInHourseDetail();
spareInHourseDetail.setInQty(detail.getInQty());
spareInHourseDetail.setPartno(detail.getPartno());
String location = boxStr;
// String location = SpareNostatus.LOCATION_CODE.get(baseNo.getWhCode());
spareInHourseDetail.setLocationCode(location);
try {
// 调用入库接口
if (baseNo.getClass().equals(SpareNo.class)) {
dataLog.setSourceId(baseNo.getId());
dataLog.setSourceName(spareNo.getSpareNo());
List<SpareInHourseDetail> details = new ArrayList<>();
for (SpareNoDetail detail : baseNo.getDetailList()) {
SpareInHourseDetail spareInHourseDetail = new SpareInHourseDetail();
spareInHourseDetail.setInQty(detail.getInQty());
spareInHourseDetail.setPartno(detail.getPartno());
String location = boxStr;
// String location = SpareNostatus.LOCATION_CODE.get(baseNo.getWhCode());
spareInHourseDetail.setLocationCode(location);
// spareInHourseDetail.setLocationCode(binBarcode.getBarcode());
details.add(spareInHourseDetail);
details.add(spareInHourseDetail);
}
LuxsanSpApi.spareInHourse(new SpareInHourseRequest(baseNo.getDeptId(), baseNo.getNo(), baseNo.getWhCode(), details));
spareNo.setConfirmed(true);
}
LuxsanSpApi.spareInHourse(new SpareInHourseRequest(baseNo.getDeptId(), baseNo.getNo(), baseNo.getWhCode(), details));
}catch (Exception e) {
log.info("调用入库接口失败,失败原因"+e.getMessage());
spareNo.setConfirmed(false);
throw new Exception(e.getMessage());
}finally {
spareNoManager.save(spareNo);
}
}
return res;
}
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!