|
@@ -73,11 +73,13 @@ public class WmsDocOrderSubService {
|
|
|
private WmsDocOrderHeaderMapper wmsDocOrderHeaderMapper;
|
|
|
@Autowired
|
|
|
private IWmsDocAsnHeaderService iWmsDocAsnHeaderService;
|
|
|
-
|
|
|
+ @Autowired
|
|
|
+ private WmsToWcsApiService wmsToWcsApiService;
|
|
|
|
|
|
|
|
|
@Transactional
|
|
|
public AjaxResult initOrderDetails(@PathVariable("orderNo") String orderNo) {
|
|
|
+
|
|
|
// 根据单号,和创建状态为00
|
|
|
WmsDocOrderDetails wmsDocOrderDetails = new WmsDocOrderDetails();
|
|
|
wmsDocOrderDetails.setOrderNo(orderNo);
|
|
@@ -91,77 +93,78 @@ public class WmsDocOrderSubService {
|
|
|
List<BaseLocationLotattVO> baseLocationLotattVOS = addConfirmAllocationAuto(orderNo);
|
|
|
|
|
|
//筛选库存
|
|
|
- BaseLocationLotattVO baseLocationLotattVO = filterInv(baseLocationLotattVOS, orderNo);
|
|
|
+ List<BaseLocationLotattVO> baseLocationLotattVOS1 = filterInv(baseLocationLotattVOS, orderNo);
|
|
|
+
|
|
|
|
|
|
boolean con = true;
|
|
|
- for (WmsDocOrderDetails wmsDocOrderDetails1 : list){
|
|
|
+ for (BaseLocationLotattVO baseLocationLotattVO1 : baseLocationLotattVOS1) {
|
|
|
|
|
|
- BaseSku baseSku = iBaseSkuService.selectBaseSkuByCustomerId(Constant.CUSTOMER_ID, wmsDocOrderDetails1.getSku());
|
|
|
+ BaseSku baseSku = iBaseSkuService.selectBaseSkuByCustomerId(Constant.CUSTOMER_ID, list.get(0).getSku());
|
|
|
|
|
|
- String pallentNo = baseLocationLotattVO.getLotattVO().getLotatt07();
|
|
|
- String locationFrom = baseLocationLotattVO.getLocationNo();
|
|
|
- String wcsNo = "wcs" + wcsTaskSubService.generateTaskNo();// todo 生成唯一标识wcsno
|
|
|
+ String pallentNo = baseLocationLotattVO1.getLotattVO().getLotatt07();
|
|
|
+ String locationFrom = baseLocationLotattVO1.getLocationNo();
|
|
|
+ String wcsNo = "wcs" + wcsTaskSubService.generateTaskNo();//生成唯一标识wcsno
|
|
|
|
|
|
//Wcs x y z
|
|
|
- String Y = baseLocationLotattVO.getRowNo();
|
|
|
- String Z = baseLocationLotattVO.getShiftNo();
|
|
|
- String X = baseLocationLotattVO.getRowIndex();
|
|
|
- String sku = baseLocationLotattVO.getSku();
|
|
|
+ String Y = baseLocationLotattVO1.getRowNo();
|
|
|
+ String Z = baseLocationLotattVO1.getShiftNo();
|
|
|
+ String X = baseLocationLotattVO1.getRowIndex();
|
|
|
+ String sku = baseLocationLotattVO1.getSku();
|
|
|
|
|
|
// 生成四向车出库任务
|
|
|
AjaxResult ajaxResult = wcsTaskSubService.addWcsOutTask(locationFrom, Constant.LOC_SORTATION_CACHE.toString(), orderNo, pallentNo, wcsNo);
|
|
|
-
|
|
|
//调用出库任务下发接口
|
|
|
OutTaskForm outTaskForm = new OutTaskForm();
|
|
|
- String taskNo =ajaxResult.get("data").toString();
|
|
|
+ String taskNo = ajaxResult.get("data").toString();
|
|
|
outTaskForm.setTaskNo(taskNo);
|
|
|
outTaskForm.setRow(Integer.parseInt(X));
|
|
|
- outTaskForm.setCol(Integer.parseInt(Z));
|
|
|
- outTaskForm.setFloor(Integer.parseInt(Y));
|
|
|
-
|
|
|
+ outTaskForm.setCol(Integer.parseInt(Y));
|
|
|
+ outTaskForm.setFloor(Integer.parseInt(Z));
|
|
|
outTaskForm.setPackageType(Integer.valueOf(baseSku.getSkuType()));
|
|
|
outTaskForm.setMaterial(Integer.valueOf(baseSku.getDesc2()));
|
|
|
-
|
|
|
- outTaskForm.setTotal(wmsDocOrderDetails1.getQtyOrderedEach().intValue());
|
|
|
+ outTaskForm.setTotal(list.get(0).getQtyOrderedEach().intValue());
|
|
|
outTaskForm.setDocNo(orderNo);
|
|
|
- WmsToWcsApiService wmsToWcsApiService = new WmsToWcsApiService();
|
|
|
WcsResponseVo wcsResponseVo = wmsToWcsApiService.wmsOutTask(outTaskForm);
|
|
|
if (!wcsResponseVo.isSuccess()) {
|
|
|
con = false;
|
|
|
+ wmsDocOrderHeader.setRemark(wcsResponseVo.getMessage());
|
|
|
+ iWmsDocOrderHeaderService.updateWmsDocOrderHeader(wmsDocOrderHeader);
|
|
|
continue;
|
|
|
}
|
|
|
- // 修改 明细行状态为10
|
|
|
- wmsDocOrderDetails1.setLineStatus(Constant.ORDER_STS.STS10.getValue());
|
|
|
- iWmsDocOrderDetailsService.updateWmsDocOrderDetails(wmsDocOrderDetails1);
|
|
|
}
|
|
|
if (con == true) {
|
|
|
+ // 修改 明细行状态为10
|
|
|
+ list.get(0).setLineStatus(Constant.ORDER_STS.STS10.getValue());
|
|
|
+ iWmsDocOrderDetailsService.updateWmsDocOrderDetails(list.get(0));
|
|
|
// 修改 单头10
|
|
|
+ wmsDocOrderHeader.setRemark("");
|
|
|
wmsDocOrderHeader.setOrderStatus(Constant.ORDER_STS.STS10.getValue());
|
|
|
iWmsDocOrderHeaderService.updateWmsDocOrderHeader(wmsDocOrderHeader);
|
|
|
}
|
|
|
- return AjaxResult.success("",list);
|
|
|
+ return AjaxResult.success("", baseLocationLotattVOS1);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 匹配库存
|
|
|
+ *
|
|
|
* @param orderNo
|
|
|
* @return
|
|
|
*/
|
|
|
- public List<BaseLocationLotattVO> addConfirmAllocationAuto(String orderNo){
|
|
|
- List<WmsDocOrderDetails> detailslist=null;
|
|
|
+ public List<BaseLocationLotattVO> addConfirmAllocationAuto(String orderNo) {
|
|
|
+ List<WmsDocOrderDetails> detailslist = null;
|
|
|
// 查询出库单头
|
|
|
WmsDocOrderHeader wmsDocOrderHeader = iWmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
|
|
|
- if (wmsDocOrderHeader != null){
|
|
|
- if (wmsDocOrderHeader.getOrderStatus().equals(Constant.ORDER_STS.STS00.getValue())){
|
|
|
+ if (wmsDocOrderHeader != null) {
|
|
|
+ if (wmsDocOrderHeader.getOrderStatus().equals(Constant.ORDER_STS.STS00.getValue())) {
|
|
|
//根据出库单头查询出库单明细
|
|
|
- detailslist = iWmsDocOrderDetailsService.selectWmsDocOrderDetailsByOrderNo(orderNo);
|
|
|
- if (detailslist.size()==0){
|
|
|
- log.error("单据没有可匹配明细");
|
|
|
+ detailslist = iWmsDocOrderDetailsService.selectWmsDocOrderDetailsByOrderNo(orderNo);
|
|
|
+ if (detailslist.size() == 0) {
|
|
|
+ log.error("单据没有可匹配明细");
|
|
|
}
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
log.error("只有新建单据才可分配");
|
|
|
}
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
log.error("单号不存在");
|
|
|
}
|
|
|
|
|
@@ -173,13 +176,13 @@ public class WmsDocOrderSubService {
|
|
|
List<String> outZones = OUT_ZONES;
|
|
|
|
|
|
//分配
|
|
|
- for (WmsDocOrderDetails o: detailslist) {
|
|
|
+ for (WmsDocOrderDetails o : detailslist) {
|
|
|
sku = o.getSku();
|
|
|
BigDecimal qtyOrderedEach = o.getQtyOrderedEach();
|
|
|
orderBy = qtyOrderedEach.toString();
|
|
|
}
|
|
|
List<BaseLocationLotattVO> baseLocationLotattVOS = baseLocationInfoSubService.selectAllocatingInventoryAccordingConditionsOrderBy(outZones, lotattDTO, sku, orderBy);
|
|
|
- if (baseLocationLotattVOS.size()==0){
|
|
|
+ if (baseLocationLotattVOS.size() == 0) {
|
|
|
log.info("仓库中无库存");
|
|
|
}
|
|
|
return baseLocationLotattVOS;
|
|
@@ -187,55 +190,55 @@ public class WmsDocOrderSubService {
|
|
|
|
|
|
/**
|
|
|
* 筛选库存
|
|
|
+ *
|
|
|
* @param baseLocationLotattVO
|
|
|
* @param orderNo
|
|
|
* @return
|
|
|
*/
|
|
|
- public synchronized BaseLocationLotattVO filterInv(List<BaseLocationLotattVO> baseLocationLotattVOS,String orderNo){
|
|
|
+ public synchronized List<BaseLocationLotattVO> filterInv(List<BaseLocationLotattVO> baseLocationLotattVOS, String orderNo) {
|
|
|
// 根据单号,和创建状态为00
|
|
|
WmsDocOrderDetails wmsDocOrderDetails = new WmsDocOrderDetails();
|
|
|
wmsDocOrderDetails.setOrderNo(orderNo);
|
|
|
wmsDocOrderDetails.setLineStatus(Constant.ASN_STS.STS00.getValue());
|
|
|
List<WmsDocOrderDetails> list = iWmsDocOrderDetailsService.selectWmsDocOrderDetailsList(wmsDocOrderDetails);
|
|
|
|
|
|
- BaseLocationLotattVO baseLocationLotattVO = new BaseLocationLotattVO();
|
|
|
- for (BaseLocationLotattVO baseLocationLotattVO1:baseLocationLotattVOS) {
|
|
|
- //库存数量
|
|
|
- String sku = baseLocationLotattVO1.getSku();
|
|
|
- Float qty = baseLocationLotattVO1.getQty();
|
|
|
+ List<BaseLocationLotattVO> baseLocationLotattVOS1 = new ArrayList<>();
|
|
|
+
|
|
|
+ for (WmsDocOrderDetails wmsDocOrderDetails1 : list) {
|
|
|
+ String sku1 = wmsDocOrderDetails1.getSku();
|
|
|
+ //出库数量
|
|
|
+ BigDecimal qtyAllocatedEach = wmsDocOrderDetails1.getQtyOrderedEach();
|
|
|
|
|
|
- for (WmsDocOrderDetails wmsDocOrderDetails1:list) {
|
|
|
- //出库数量
|
|
|
- String sku1 = wmsDocOrderDetails1.getSku();
|
|
|
- BigDecimal qtyAllocatedEach = wmsDocOrderDetails1.getQtyOrderedEach();
|
|
|
- if (sku.equals(sku1)){
|
|
|
- int i = qty.compareTo(qtyAllocatedEach.floatValue());
|
|
|
- if (i == 0){
|
|
|
- baseLocationLotattVO=baseLocationLotattVO1;
|
|
|
- return baseLocationLotattVO;
|
|
|
- }else if (i > 0){
|
|
|
- baseLocationLotattVO=baseLocationLotattVO1;
|
|
|
- return baseLocationLotattVO;
|
|
|
- }else if (i < 0){
|
|
|
- boolean b = true;
|
|
|
- while (b){
|
|
|
- BigDecimal qty1 = new BigDecimal(qty);
|
|
|
- BigDecimal subtract = qtyAllocatedEach.subtract(qty1);
|
|
|
- if (subtract.intValue() == 0){
|
|
|
- b = false;
|
|
|
- baseLocationLotattVO=baseLocationLotattVO1;
|
|
|
- return baseLocationLotattVO;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ for (BaseLocationLotattVO baseLocationLotattVO1 : baseLocationLotattVOS) {
|
|
|
+ if (qtyAllocatedEach.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
+ return baseLocationLotattVOS1;
|
|
|
+ }
|
|
|
+ //库存数量
|
|
|
+ String sku = baseLocationLotattVO1.getSku();
|
|
|
+ BigDecimal qty =new BigDecimal(baseLocationLotattVO1.getQty());
|
|
|
+
|
|
|
+ if (!sku.equals(sku1)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ int i = qty.compareTo(qtyAllocatedEach);
|
|
|
+ if (i == 0) {
|
|
|
+ baseLocationLotattVOS1.add(baseLocationLotattVO1);
|
|
|
+ return baseLocationLotattVOS1;
|
|
|
+ } else if (i > 0) {
|
|
|
+ baseLocationLotattVOS1.add(baseLocationLotattVO1);
|
|
|
+ return baseLocationLotattVOS1;
|
|
|
+ } else if (i < 0) {
|
|
|
+ qtyAllocatedEach= qtyAllocatedEach.subtract(qty);
|
|
|
+ baseLocationLotattVOS1.add(baseLocationLotattVO1);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- return baseLocationLotattVO;
|
|
|
+ return baseLocationLotattVOS1;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 生成越库出库单方法
|
|
|
+ *
|
|
|
* @param asnNo
|
|
|
* @return
|
|
|
*/
|
|
@@ -250,7 +253,7 @@ public class WmsDocOrderSubService {
|
|
|
wmsDocOrderHeader.setCreateTime(new Date());
|
|
|
wmsDocOrderHeaderMapper.insertWmsDocOrderHeader(wmsDocOrderHeader);
|
|
|
List<WmsDocAsnDetails> wmsDocAsnDetails = iWmsDocAsnHeaderService.queryWmsDocAsnDetails(asnNo);
|
|
|
- for (WmsDocAsnDetails wmsDocAsnDetails1 : wmsDocAsnDetails){
|
|
|
+ for (WmsDocAsnDetails wmsDocAsnDetails1 : wmsDocAsnDetails) {
|
|
|
// 生成明细
|
|
|
WmsDocOrderDetails wmsDocOrderDetails = new WmsDocOrderDetails();
|
|
|
wmsDocOrderDetails.setOrderNo(orderNo);
|
|
@@ -266,10 +269,11 @@ public class WmsDocOrderSubService {
|
|
|
|
|
|
/**
|
|
|
* 生成出库单方法
|
|
|
+ *
|
|
|
* @param asnNo
|
|
|
* @return
|
|
|
*/
|
|
|
- public String generateAnOutboundOrder(String sku,BigDecimal qty) {
|
|
|
+ public String generateAnOutboundOrder(String sku, BigDecimal qty) {
|
|
|
// 生成单头
|
|
|
WmsDocOrderHeader wmsDocOrderHeader = new WmsDocOrderHeader();
|
|
|
String orderNo = idSequenceUtils.generateId("ORDERNO");
|
|
@@ -295,7 +299,7 @@ public class WmsDocOrderSubService {
|
|
|
iWmsDocOrderHeaderService.insertWmsDocOrderDetails(wmsDocOrderDetails);
|
|
|
return orderNo;
|
|
|
}
|
|
|
- /* *//**
|
|
|
+ /* *//**
|
|
|
* 取消分配
|
|
|
*//*
|
|
|
public AjaxResult deAllocation(String orderNo) {
|