Browse Source

出库业务整体流程

LZH 2 years ago
parent
commit
e870193166

+ 12 - 1
ruoyi-admin/src/main/java/com/ruoyi/xuankuang/controller/test/XuanKuangTestApiController.java

@@ -107,6 +107,17 @@ public class XuanKuangTestApiController {
         return wcsResponseVo;
     }
     //endregion
-
+//region 挡板测试
+    @PostMapping("/test2")
+    public WcsResponseVo test2(@RequestBody OutTaskForm outTaskForm) {
+        System.out.println("出库任务下发:" + JSON.toJSONString(outTaskForm));
+        WcsResponseVo wcsResponseVo = new WcsResponseVo();
+        if (outTaskForm.getTotal() == 2) {
+            wcsResponseVo.setCode("200");
+        }else {
+            wcsResponseVo.setCode("500");
+        }
+        return wcsResponseVo;
+    }
 
 }

+ 8 - 0
warewms-ams/src/main/java/com/ruoyi/ams/inv/mapper/InvLotLocIdMapper.java

@@ -2,6 +2,7 @@ package com.ruoyi.ams.inv.mapper;
 
 import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
 
 import com.ruoyi.ams.asn.vo.StockingListVO;
 import com.ruoyi.ams.config.domain.dto.LotattDTO;
@@ -315,4 +316,11 @@ public interface InvLotLocIdMapper {
      */
     int updateAllocationBy(@Param("lotnum") String lotnum, @Param("locationId") Long locationId, @Param("qty") BigDecimal qty);
 
+    /**
+     * 根据库位查出所有库存
+     *
+     * @param map
+     * @return
+     */
+    List<InvLotLocId> queryAllInvByLocationId(Map<String, Object> map);
 }

+ 3 - 4
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/BaseLocationInfoSubService.java

@@ -37,11 +37,10 @@ public class BaseLocationInfoSubService {
     /**
      * 出库库区
      */
-    public static final String[] OUT_ZONES = {
-            Constant.LOCATION_ZONE.INV_1.getValue()
+    public static final List<String> OUT_ZONES = Arrays.asList
+            (Constant.LOCATION_ZONE.INV_1.getValue()
             , Constant.LOCATION_ZONE.INV_2.getValue()
-            , Constant.LOCATION_ZONE.INV_3.getValue()
-    };
+            , Constant.LOCATION_ZONE.INV_3.getValue());
 
 
     /**

+ 133 - 13
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/WcsTaskSubService.java

@@ -7,6 +7,10 @@ import com.ruoyi.ams.asn.service.IWmsDocAsnHeaderService;
 import com.ruoyi.ams.inv.domain.InvLotAtt;
 import com.ruoyi.ams.inv.domain.InvLotLocId;
 import com.ruoyi.ams.inv.service.IInvLotLocIdService;
+import com.ruoyi.ams.order.domain.WmsDocOrderDetails;
+import com.ruoyi.ams.order.domain.WmsDocOrderHeader;
+import com.ruoyi.ams.order.service.IWmsDocOrderDetailsService;
+import com.ruoyi.ams.order.service.IWmsDocOrderHeaderService;
 import com.ruoyi.ams.task.domain.WcsTask;
 import com.ruoyi.ams.task.service.IWcsTaskService;
 import com.ruoyi.base.constant.Constant;
@@ -43,7 +47,10 @@ public class WcsTaskSubService {
     private IWmsDocAsnDetailsService iWmsDocAsnDetailsService;
     @Autowired
     private IWmsDocAsnHeaderService iWmsDocAsnHeaderService;
-
+    @Autowired
+    private IWmsDocOrderDetailsService iWmsDocOrderDetailsService;
+    @Autowired
+    private IWmsDocOrderHeaderService iWmsDocOrderHeaderService;
 
     /**
      * 增加四向车任务
@@ -58,7 +65,7 @@ public class WcsTaskSubService {
         BaseLocationInfo baseLocationInfoFrom = iBaseLocationInfoService.selectBaseLocationInfoByIdOrNo(locationFrom, 1l);
         BaseLocationInfo baseLocationInfoTo = iBaseLocationInfoService.selectBaseLocationInfoByIdOrNo(locationTo, 1l);
 
-        String taskNo = System.currentTimeMillis() + "";
+        String taskNo = generateTaskNo();;
         WcsTask wcsTask = new WcsTask();
         wcsTask.setTaskNo(taskNo);
         wcsTask.setState(10L);
@@ -87,6 +94,48 @@ public class WcsTaskSubService {
     }
 
 
+    /**
+     * 增加四向车出库任务
+     *
+     * @return
+     */
+    public AjaxResult addWcsOutTask(String locationFrom, String locationTo
+            , String orderNo
+            , String palletNo
+            , String wcsNo) {
+
+        BaseLocationInfo baseLocationInfoFrom = iBaseLocationInfoService.selectBaseLocationInfoByIdOrNo(locationFrom, 1l);
+        BaseLocationInfo baseLocationInfoTo = iBaseLocationInfoService.selectBaseLocationInfoByIdOrNo(locationTo, 1l);
+
+        String taskNo = generateTaskNo();
+        WcsTask wcsTask = new WcsTask();
+        wcsTask.setTaskNo(taskNo);
+        wcsTask.setState(10L);
+        wcsTask.setTaskType(Constant.TASK_TYPE.FORWARD.getValue());
+        wcsTask.setBusinessType("01");
+        wcsTask.setAreaFrom(baseLocationInfoFrom.getZoneId().toString());
+        wcsTask.setLocationFrom(baseLocationInfoFrom.getId().toString());
+        wcsTask.setAreaTo(baseLocationInfoTo.getZoneId().toString());
+        wcsTask.setLocationTo(baseLocationInfoTo.getId().toString());
+        wcsTask.setCreateTime(new Date());
+        wcsTask.setCreateBy("Wcs");
+        wcsTask.setShopId(Constant.WAREHOUSE_ID.toString());
+        wcsTask.setPriority(10L);
+        wcsTask.setExt1(orderNo);
+        wcsTask.setExt2(palletNo);
+        wcsTask.setExt3(wcsNo);
+        wcsTask.setRemark("立体库任务");
+        int i = iWcsTaskService.insertWcsTask(wcsTask);
+        if (i > 0) {
+            iBaseLocationInfoService.lockLocationStockStatus(Long.valueOf(wcsTask.getLocationFrom())
+                    , Long.valueOf(wcsTask.getLocationTo())
+                    , Constant.WAREHOUSE_ID, "Wcs");
+            return AjaxResult.success("任务增加成功!", taskNo);
+        }
+        return AjaxResult.error("任务增加失败");
+    }
+
+
     /**
      * wcs任务反馈
      *
@@ -134,16 +183,16 @@ public class WcsTaskSubService {
 
                     break;
                 case 4:
-//                    if (wcsTask.getState() == 4) {
-//                        log.info("不能重复取货," + taskNo);
-//                        return;
-//                    }
-//                    // 解锁起始库位
-//                    iBaseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationFrom())
-//                            , Constant.WAREHOUSE_ID, updateBy);
-//                    // 将起始点库存移动到中间缓存位
-//                    iWcsTaskService.moveStartingPointToMiddleCache(wcsTask);
-
+                    if (wcsTask.getState() == 4) {
+                        log.info("不能重复取货," + taskNo);
+                        return;
+                    }
+                    // 解锁起始库位
+                    iBaseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationFrom())
+                            , Constant.WAREHOUSE_ID, updateBy);
+                    // 将起始点库存移动到中间缓存位
+                    iWcsTaskService.moveStartingPointToMiddleCache(wcsTask);
+                    completeTheCallbackOut(wcsTask);
                     break;
                 case 7://取消
                     wcsTask.setEndTime(new Date());
@@ -168,7 +217,7 @@ public class WcsTaskSubService {
 
 
     /**
-     * 任务完成回调
+     * 任务完成回调
      *
      * @param wcsTask
      * @return
@@ -224,4 +273,75 @@ public class WcsTaskSubService {
         }
         return AjaxResult.success("");
     }
+
+    /**
+     * 出库完成任务回调
+     * @param wcsTask
+     * @return
+     */
+    public AjaxResult completeTheCallbackOut(WcsTask wcsTask) {
+        boolean con = true;
+        boolean con1 = true;
+        String palletNo = wcsTask.getExt2();
+        String orderNo = wcsTask.getExt1();
+        List<WmsDocOrderDetails> list = iWmsDocOrderDetailsService.selectWmsDocOrderDetailsByOrderNo(orderNo);
+        BigDecimal qtyOrderedEach = list.get(1).getQtyOrderedEach();
+        BigDecimal allocatedEach = list.get(1).getQtyAllocatedEach();
+        BigDecimal canQty= qtyOrderedEach.subtract(allocatedEach);
+        InvLotAtt invLotAtt = new InvLotAtt();
+        invLotAtt.setLotatt07(palletNo);
+        invLotAtt.setLotatt08(orderNo);
+        List<InvLotLocId> invLotLocIds = invLotLocIdService.queryInvByInvLotatt(invLotAtt);
+        for (InvLotLocId invLotLocId:invLotLocIds) {
+            BigDecimal qty = invLotLocId.getQty();
+            if (qty.compareTo(canQty) == 1){
+                continue;
+            }else if ( qty.compareTo(canQty) == 0){
+                list.get(1).setQtyAllocatedEach(qtyOrderedEach);
+                int i = iWmsDocOrderDetailsService.updateWmsDocOrderDetails(list.get(1));
+                if ( i > 0){
+                    list.get(1).setLineStatus(Constant.ASN_STS.STS40.getValue());
+                    iWmsDocOrderDetailsService.updateWmsDocOrderDetails(list.get(1));
+                }else {
+                    con = false;
+                    continue;
+                }
+            }else if (qty.compareTo(canQty) == -1){
+                list.get(1).setQtyAllocatedEach(allocatedEach.add(qty));
+                int i = iWmsDocOrderDetailsService.updateWmsDocOrderDetails(list.get(1));
+                if ( i > 0){
+                    list.get(1).setLineStatus(Constant.ASN_STS.STS30.getValue());
+                    iWmsDocOrderDetailsService.updateWmsDocOrderDetails(list.get(1));
+                    con1 = false;
+                }
+            }
+        }
+        if (con == true) {
+            WmsDocOrderHeader wmsDocOrderHeader = iWmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
+            // 修改 单头40
+            wmsDocOrderHeader.setOrderStatus(Constant.ORDER_STS.STS40.getValue());
+            iWmsDocOrderHeaderService.updateWmsDocOrderHeader(wmsDocOrderHeader);
+        }
+        if (con1 == false) {
+            WmsDocOrderHeader wmsDocOrderHeader = iWmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
+            // 修改 单头30
+            wmsDocOrderHeader.setOrderStatus(Constant.ORDER_STS.STS30.getValue());
+            iWmsDocOrderHeaderService.updateWmsDocOrderHeader(wmsDocOrderHeader);
+        }
+        return AjaxResult.success("");
+    }
+
+    /**
+     * 生成唯一任务号
+     *
+     * @return
+     */
+    public synchronized String generateTaskNo() {
+        try {
+            Thread.sleep(1);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        return System.currentTimeMillis() + "";
+    }
 }

+ 0 - 1
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/WcsToWmsApiService.java

@@ -79,7 +79,6 @@ public class WcsToWmsApiService {
             locationCoordinateVo.setCol(Integer.valueOf(baseLocationInfo.getRowNo()));
             locationCoordinateVo.setRow(Integer.valueOf(baseLocationInfo.getRowIndex()));
             return AjaxResult.success("仓位获取成功!", locationCoordinateVo);
-
         }
 
         // 推荐目标库位

+ 221 - 16
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/WmsDocOrderSubService.java

@@ -2,20 +2,40 @@ package com.ruoyi.ams.xuankuang.service;
 
 import com.ruoyi.ams.asn.domain.WmsDocAsnDetails;
 import com.ruoyi.ams.asn.domain.WmsDocAsnHeader;
+import com.ruoyi.ams.config.domain.dto.LotattDTO;
+import com.ruoyi.ams.inv.domain.InvLotLocId;
+import com.ruoyi.ams.inv.domain.form.InvLocIdSearchFrom;
+import com.ruoyi.ams.inv.domain.vo.InvLotLocIdLotattVO;
+import com.ruoyi.ams.inv.mapper.InvLotLocIdMapper;
+import com.ruoyi.ams.inv.service.IInvLotLocIdService;
 import com.ruoyi.ams.order.domain.WmsDocOrderDetails;
 import com.ruoyi.ams.order.domain.WmsDocOrderHeader;
 import com.ruoyi.ams.order.service.IWmsDocOrderDetailsService;
 import com.ruoyi.ams.order.service.IWmsDocOrderHeaderService;
+import com.ruoyi.ams.order.vo.StockOrderVO;
+import com.ruoyi.ams.task.domain.WcsTask;
 import com.ruoyi.ams.xuankuang.domain.form.BillTaskForm;
+import com.ruoyi.ams.xuankuang.domain.form.OutTaskForm;
+import com.ruoyi.ams.xuankuang.domain.vo.WcsResponseVo;
 import com.ruoyi.base.constant.Constant;
+import com.ruoyi.base.domain.BaseLocationInfo;
+import com.ruoyi.base.domain.BaseSku;
+import com.ruoyi.base.domain.vo.BaseLocationLotattVO;
+import com.ruoyi.base.service.IBaseLocationInfoService;
+import com.ruoyi.base.service.IBaseSkuService;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.StringUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.PathVariable;
 
-import java.util.List;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+import static com.ruoyi.ams.xuankuang.service.BaseLocationInfoSubService.OUT_ZONES;
 
 /**
  * 出库业务
@@ -32,29 +52,214 @@ public class WmsDocOrderSubService {
     private IWmsDocOrderHeaderService iWmsDocOrderHeaderService;
     @Autowired
     private IWmsDocOrderDetailsService iWmsDocOrderDetailsService;
+    @Autowired
+    private WcsTaskSubService wcsTaskSubService;
+    @Autowired
+    private IInvLotLocIdService invLotLocIdService;
+    @Autowired
+    InvLotLocIdMapper invLotLocIdMapper;
+    @Autowired
+    IBaseLocationInfoService baseLocationInfoService;
+    @Autowired
+    BaseLocationInfoSubService baseLocationInfoSubService;
+    @Autowired
+    private IBaseSkuService iBaseSkuService;
+
+
+
     @Transactional
     public AjaxResult initOrderDetails(@PathVariable("orderNo") String orderNo) {
-        List<WmsDocOrderDetails> list = iWmsDocOrderHeaderService.initOrderDetails(orderNo);
+        //  根据单号,和创建状态为00
+        WmsDocOrderDetails wmsDocOrderDetails = new WmsDocOrderDetails();
+        wmsDocOrderDetails.setOrderNo(orderNo);
+        wmsDocOrderDetails.setLineStatus(Constant.ASN_STS.STS00.getValue());
+        List<WmsDocOrderDetails> list = iWmsDocOrderDetailsService.selectWmsDocOrderDetailsList(wmsDocOrderDetails);
+
+        // 查询出库单头
         WmsDocOrderHeader wmsDocOrderHeader = iWmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
-        for (WmsDocOrderDetails details:list) {
-            BillTaskForm billTaskForm = new BillTaskForm();
-            billTaskForm.setDocNo(details.getOrderNo());
-            billTaskForm.setTaskNo(details.getOrderLineNo().toString());
-            if (details.getDesc2()==5){
-                billTaskForm.setPackageType(2);
+
+        // 匹配库存
+        List<BaseLocationLotattVO> baseLocationLotattVOS = addConfirmAllocationAuto(orderNo);
+
+        //筛选库存
+        BaseLocationLotattVO baseLocationLotattVO = filterInv(baseLocationLotattVOS, orderNo);
+
+        boolean con = true;
+        for (WmsDocOrderDetails wmsDocOrderDetails1 : list){
+
+            BaseSku baseSku = iBaseSkuService.selectBaseSkuByCustomerId(Constant.CUSTOMER_ID, wmsDocOrderDetails1.getSku());
+
+            String pallentNo = baseLocationLotattVO.getLotattVO().getLotatt07();
+            String locationFrom = baseLocationLotattVO.getLocationNo();
+            String wcsNo = null;// todo 生成唯一标识wcsno
+
+            //Wcs x y z
+            String Y = baseLocationLotattVO.getRowNo();
+            String Z = baseLocationLotattVO.getShiftNo();
+            String X = baseLocationLotattVO.getRowIndex();
+            String sku = baseLocationLotattVO.getSku();
+
+            // 生成四向车出库任务
+            AjaxResult ajaxResult = wcsTaskSubService.addWcsOutTask(locationFrom, Constant.LOC_SORTATION_CACHE.toString(), orderNo, pallentNo, wcsNo);
+
+            //调用出库任务下发接口
+            OutTaskForm outTaskForm = new OutTaskForm();
+            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.setPackageType(Integer.valueOf(baseSku.getSkuType()));
+            outTaskForm.setMaterial(Integer.valueOf(baseSku.getDesc2()));
+
+            outTaskForm.setTotal(wmsDocOrderDetails1.getQtyOrderedEach().intValue());
+            outTaskForm.setDocNo(orderNo);
+            WmsToWcsApiService wmsToWcsApiService = new WmsToWcsApiService();
+            WcsResponseVo wcsResponseVo = wmsToWcsApiService.wmsOutTask(outTaskForm);
+            if (!wcsResponseVo.isSuccess()) {
+                con = false;
+                continue;
             }
-            billTaskForm.setType(Constant.ASN_TYP.getByValue(wmsDocOrderHeader.getOrderType()).getValue1());
-            billTaskForm.setNum(details.getQtyOrdered().intValue());
-//            billTaskForm.setDest(Constant.PRODUCTION_LINE_SITE.getByValue());
-            billTaskForm.setMaterial(details.getDesc2());
-//            WmsToWcsApiService wmsToWcsApiService = new WmsToWcsApiService();
-//            wmsToWcsApiService.wmsBillTask(billTaskForm);
-        }
-        return AjaxResult.success("", list);
+            // 修改 明细行状态为10
+            wmsDocOrderDetails1.setLineStatus(Constant.ASN_STS.STS10.getValue());
+            iWmsDocOrderDetailsService.updateWmsDocOrderDetails(wmsDocOrderDetails1);
+        }
+        if (con == true) {
+            // 修改 单头10
+            wmsDocOrderHeader.setOrderStatus(Constant.ASN_STS.STS10.getValue());
+            iWmsDocOrderHeaderService.updateWmsDocOrderHeader(wmsDocOrderHeader);
+        }
+        return AjaxResult.success("",list);
     }
 
+    /**
+     * 匹配库存
+     * @param orderNo
+     * @return
+     */
+    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())){
+                //根据出库单头查询出库单明细
+                detailslist =  iWmsDocOrderDetailsService.selectWmsDocOrderDetailsByOrderNo(orderNo);
+                if (detailslist.size()==0){
+                   log.error("单据没有可匹配明细");
+                }
+            }else {
+                log.error("只有新建单据才可分配");
+            }
+        }else {
+            log.error("单号不存在");
+        }
+
+        List<InvLotLocId> list = new ArrayList<>();
 
+        String sku = null;
+        LotattDTO lotattDTO = new LotattDTO();
+        String orderBy = null;
+        List<String> outZones = OUT_ZONES;
 
+        //分配
+        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){
+            log.info("仓库中无库存");
+        }
+        return baseLocationLotattVOS;
+    }
 
+    /**
+     * 筛选库存
+     * @param baseLocationLotattVO
+     * @param orderNo
+     * @return
+     */
+    public synchronized 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();
+
+            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 {
+                        BigDecimal qty1 = new BigDecimal(qty);
+                        BigDecimal subtract = qtyAllocatedEach.subtract(qty1);
+                        if (subtract.intValue()==0){
+                            baseLocationLotattVO=baseLocationLotattVO1;
+                            return  baseLocationLotattVO;
+                        }
+                        continue;
+                    }
+                }
+            }
+        }
+        return baseLocationLotattVO;
+    }
+
+   /* *//**
+     * 取消分配
+     *//*
+    public AjaxResult deAllocation(String orderNo) {
+        List<WmsDocOrderDetails> detailslist=null;
+        //出库单
+        WmsDocOrderHeader wmsDocOrderHeader = iWmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
+        List<WmsDocOrderDetails> list = null;//所有分配单
+        if (wmsDocOrderHeader != null){
+            if (wmsDocOrderHeader.getOrderStatus().equals(Constant.ORDER_STS.STS10) || wmsDocOrderHeader.getOrderStatus().equals(Constant.ORDER_STS.STS20)){
+                //根据出库单头查询出库单明细
+                detailslist =  iWmsDocOrderDetailsService.selectWmsDocOrderDetailsByOrderNo(orderNo);
+                if (detailslist.size()==0){
+                    return AjaxResult.success("单据没有可取消分配的明细");
+                }
+            }else {
+                return AjaxResult.error("只有已分配单据才可取消");
+            }
+        }else {
+            return AjaxResult.error("单号不存在");
+        }
+//        // 修改库位状态 修改出库单状态
+        for (WmsDocOrderDetails details : detailslist) {
+//            //修改分配库位状态
+            BaseLocationInfo baseLocationInfo = new BaseLocationInfo();
+            baseLocationInfo.setLocationNo(details.getLocation());
+            baseLocationInfo.setStockStatus(Constant.STOCK_STATUS.STOCK00.toString());
+            baseLocationInfoService.updateBaseLocationInfo(baseLocationInfo);
+            //修改出库单据状态
+            WmsDocOrderDetails wmsDocOrderDetails = new WmsDocOrderDetails();
+            wmsDocOrderDetails.setOrderNo(orderNo);
+            wmsDocOrderDetails.setLineStatus(Constant.ORDER_STS.STS10.toString());
+           iWmsDocOrderDetailsService.updateWmsDocOrderDetails(wmsDocOrderDetails);
+//
+        }
+        //修改出库单据状态
+        wmsDocOrderHeader.setOrderStatus(Constant.ORDER_STS.STS00.toString());
+        iWmsDocOrderHeaderService.updateWmsDocOrderHeader(wmsDocOrderHeader);
+        return AjaxResult.success("取消分配成功");
+    }*/
 }

+ 1 - 1
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/WmsToWcsApiService.java

@@ -30,7 +30,7 @@ public class WmsToWcsApiService {
         String r = "";
         WcsResponseVo wcsResponseVo = new WcsResponseVo();
         try {
-            r = HttpRequest.postData(Constant.WCS_TASK_URL, json);
+            r = HttpRequest.postData(Constant.WCS_TASK_URL1, json);
             wcsResponseVo = JSON.parseObject(r, WcsResponseVo.class);
         } catch (Exception e) {
             log.error("wms出库任务下发接口失败:", e);

+ 24 - 0
warewms-ams/src/main/resources/mapper/ams/InvLotLocIdMapper.xml

@@ -623,4 +623,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </where>
         order by (qtyallocated - qty)
     </select>
+
+
+    <select id="queryAllInvByLocationId" resultType="com.ruoyi.ams.inv.domain.InvLotLocId">
+        select
+        a.*,lotatt01,lotatt02,lotatt03,lotatt04,lotatt05,lotatt06,lotatt07,lotatt08,
+        lotatt09,lotatt10,lotatt11,lotatt12,lotatt13,lotatt14,lotatt15,lotatt16,lotatt17,
+        c.logicalsequence locationidName,
+        from inv_lot_loc_id a
+        left join inv_lot_att b on b.lotnum=a.lotnum
+        LEFT JOIN bas_location_info c ON c.id=a.locationid
+        left join bas_sku d on d.sku=a.sku
+        where c.stockStatus='00'
+        <trim suffixOverrides=",">
+            <if test="locIdSet != null">
+                <if test="locIdSet.isEmpty() == false">
+                    and a.locationid in (
+                    <foreach collection="locIdSet" item="locIdSet" index="index" separator=",">
+                        #{locIdSet.locationid,jdbcType=VARCHAR}
+                    </foreach>
+                    )
+                </if>
+            </if>
+        </trim>
+    </select>
 </mapper>

+ 2 - 2
warewms-ams/src/main/resources/mapper/docOrder/WmsDocOrderDetailsMapper.xml

@@ -98,7 +98,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="selectWmsDocOrderDetailsList" parameterType="WmsDocOrderDetails" resultMap="WmsDocOrderDetailsResult">
         <include refid="selectWmsDocOrderDetailsVo"/>
-        where order_no = #{orderNo} and order_line_no = #{orderLineNo}
+        where order_no = #{orderNo}
     </select>
 
     <select id="selectWmsDocOrderDetailsByOrderNo" parameterType="String" resultMap="WmsDocOrderDetailsResult">
@@ -383,4 +383,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <delete id="deleteWmsDocAsnDetailsByOrderNoLineNo">
         delete from wms_doc_order_details where order_no = #{orderNo} and order_line_no = #{orderLineNo}
     </delete>
-</mapper>
+</mapper>

+ 5 - 3
warewms-base/src/main/java/com/ruoyi/base/constant/Constant.java

@@ -24,9 +24,10 @@ public class Constant {
      */
     public static final Long LOC_MIDDLE_CACHE = 99999l;
 
-    //region WCS智库
-
+    //region WCS智库 工单下发
     public static final String WCS_TASK_URL = "http://localhost:8008/test/wcs/test1";
+    //出库任务下发
+    public static final String WCS_TASK_URL1 = "http://localhost:8008/test/wcs/test2";
 
     /**
      * 产线编号
@@ -219,6 +220,7 @@ public class Constant {
          * 订单创建
          */
         STS00("00"),
+
         STS10("10"),
         STS20("20"),
         /**
@@ -274,7 +276,7 @@ public class Constant {
          */
         STS00("00"),
         /**
-         * 部分分配
+         * 同步成功
          */
         STS10("10"),
         /**