Browse Source

分拣、PDA物料拉动

andy 2 years ago
parent
commit
e0d0286501

+ 41 - 8
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/pda/PdaController.java

@@ -23,7 +23,6 @@ import com.ruoyi.ams.lineCall.domain.vo.LineCallVO;
 import com.ruoyi.ams.lineCall.service.ILineCallService;
 import com.ruoyi.ams.order.domain.ActAllocationDetails;
 import com.ruoyi.ams.order.form.CheckOutForm;
-import com.ruoyi.ams.order.form.CheckOutInfoForm;
 import com.ruoyi.ams.order.form.PickForm;
 import com.ruoyi.ams.order.service.IActAllocationDetailsService;
 import com.ruoyi.ams.order.service.IWmsDocOrderHeaderService;
@@ -36,7 +35,6 @@ import com.ruoyi.common.utils.PageUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.system.service.ISysDictDataService;
 import lombok.extern.slf4j.Slf4j;
-import org.aspectj.weaver.loadtime.Aj;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -108,6 +106,12 @@ public class PdaController {
         return AjaxResult.success(result);
     }
 
+    /**
+     * 入库单详情
+     *
+     * @param asnNo
+     * @return
+     */
     @GetMapping("/docAsn/info")
     public AjaxResult docAsnInfo(@RequestParam String asnNo) {
         WmsDocAsnHeader header = wmsDocAsnHeaderService.selectWmsDocAsnHeaderByAsnNo(asnNo);
@@ -144,7 +148,12 @@ public class PdaController {
         return codeSkuRelationshipService.snCheck(sn);
     }
 
-
+    /**
+     * PDA上架
+     *
+     * @param paForm
+     * @return
+     */
     @PostMapping("/docAsn/doPa")
     public AjaxResult doPa(@RequestBody PaForm paForm) {
         if (StringUtils.isEmpty(paForm.getPalletNo())) {
@@ -170,6 +179,11 @@ public class PdaController {
         return wmsDocAsnHeaderService.unloadStock(unlockForm);
     }
 
+    /**
+     * 查询流程配置
+     *
+     * @return
+     */
     @GetMapping("/lineCall/flowList")
     public AjaxResult flowList() {
         PageUtils.startPage();
@@ -193,7 +207,7 @@ public class PdaController {
     }
 
     /**
-     * 物料拉动
+     * 物料拉动通用
      *
      * @param lineCallForm
      * @return
@@ -252,19 +266,38 @@ public class PdaController {
         return businessService.agvCall(flowConfigHeaderVO, list);
     }
 
+    /**
+     * 分拣明细查询
+     *
+     * @param palletNo
+     * @return
+     */
     @GetMapping("/docOrder/allocationList")
     public AjaxResult allocationList(@RequestParam String palletNo) {
         List<ActAllocationDetails> actAllocationDetails = actAllocationDetailsService.queryAllocationDetailsByPalletNo(palletNo);
         return AjaxResult.success(actAllocationDetails);
     }
 
+    /**
+     * 物料拉动
+     *
+     * @param checkOutForm
+     * @return
+     */
+    @PostMapping
+    public AjaxResult checkOut(@RequestBody CheckOutForm checkOutForm) {
+        return wmsDocOrderHeaderService.doCheckout(checkOutForm.getCheckOutInfoFormList());
+    }
 
+    /**
+     * 分拣更新分拣
+     *
+     * @param pickForm
+     * @return
+     */
     @PostMapping("/docOrder/pick")
     public AjaxResult doPick(@RequestBody PickForm pickForm) {
-        if (pickForm.getPickInfoFormList() == null || pickForm.getPickInfoFormList().size() == 0) {
-            return AjaxResult.error("参数不能为空");
-        }
-        return wmsDocOrderHeaderService.doPick(pickForm.getPickInfoFormList());
+        return wmsDocOrderHeaderService.doPick(pickForm);
     }
 
 }

+ 60 - 32
warewms-ams/src/main/java/com/ruoyi/ams/asn/service/impl/WmsDocAsnHeaderServiceImpl.java

@@ -376,6 +376,26 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
                                     soStatus = "10";
                                     subQty = orderCurrent;
                                     wmsDocOrderHeaderService.updateOrderDetailsStock(dto.getOrderNo(), dto.getOrderLineNo().longValue(), details.getSku(), orderCurrent.doubleValue(), soStatus);
+
+                                    //TODO 修改头单状态
+                                    WmsDocOrderHeader odHeaderUpdate = new WmsDocOrderHeader();
+                                    odHeaderUpdate.setOrderNo(dto.getOrderNo());
+                                    odHeaderUpdate.setOrderStatus(soStatus);
+                                    wmsDocOrderHeaderService.updateWmsDocOrderHeader(odHeaderUpdate);
+
+                                    //记录分配明细(由于是初始化的库存所以只绑定到对应的托盘)
+                                    ActAllocationDetails actAllocationDetails = new ActAllocationDetails();
+                                    actAllocationDetails.setAllocationId(SnowflakeIdWorker.generateId().toString());
+                                    actAllocationDetails.setLineNo(dto.getOrderLineNo());
+                                    actAllocationDetails.setOrderNo(dto.getOrderNo());
+                                    actAllocationDetails.setQty(subQty);
+                                    actAllocationDetails.setPickQty(BigDecimal.ZERO);
+                                    actAllocationDetails.setMaterial(details.getSku());
+                                    actAllocationDetails.setStatus("00");
+                                    actAllocationDetails.setLotnum(lotnum);
+                                    actAllocationDetails.setUserdefine1(stockForm.getPalletNo());
+                                    actAllocationDetailsService.addOrUpdateAllocationDetails(actAllocationDetails);
+
                                     break;
                                 } else {
                                     //如果当前订单需求数量小于扣减数那么循环对下一个订单继续扣减
@@ -383,25 +403,26 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
                                     subQty = dto.getQty();
                                     orderCurrent = orderCurrent.subtract(dto.getQty());
                                     wmsDocOrderHeaderService.updateOrderDetailsStock(dto.getOrderNo(), dto.getOrderLineNo().longValue(), details.getSku(), dto.getQty().doubleValue(), soStatus);
-                                }
 
-                                //TODO 修改头单状态
-                                WmsDocOrderHeader odHeaderUpdate = new WmsDocOrderHeader();
-                                odHeaderUpdate.setOrderNo(dto.getOrderNo());
-                                odHeaderUpdate.setOrderStatus(soStatus);
-                                wmsDocOrderHeaderService.updateWmsDocOrderHeader(odHeaderUpdate);
-
-                                //记录分配明细(由于是初始化的库存所以只绑定到对应的托盘)
-                                /*ActAllocationDetails actAllocationDetails = new ActAllocationDetails();
-                                actAllocationDetails.setAllocationId(SnowflakeIdWorker.generateId().toString());
-                                actAllocationDetails.setLineNo(dto.getOrderLineNo());
-                                actAllocationDetails.setOrderNo(dto.getOrderNo());
-                                actAllocationDetails.setQty(subQty);
-                                actAllocationDetails.setMaterial(details.getSku());
-                                actAllocationDetails.setStatus("00");
-                                actAllocationDetails.setLotnum(lotnum);
-                                actAllocationDetails.setUserdefine1(stockForm.getPalletNo());
-                                actAllocationDetailsService.insertActAllocationDetails(actAllocationDetails);*/
+                                    //TODO 修改头单状态
+                                    WmsDocOrderHeader odHeaderUpdate = new WmsDocOrderHeader();
+                                    odHeaderUpdate.setOrderNo(dto.getOrderNo());
+                                    odHeaderUpdate.setOrderStatus(soStatus);
+                                    wmsDocOrderHeaderService.updateWmsDocOrderHeader(odHeaderUpdate);
+
+                                    //记录分配明细(由于是初始化的库存所以只绑定到对应的托盘)
+                                    ActAllocationDetails actAllocationDetails = new ActAllocationDetails();
+                                    actAllocationDetails.setAllocationId(SnowflakeIdWorker.generateId().toString());
+                                    actAllocationDetails.setLineNo(dto.getOrderLineNo());
+                                    actAllocationDetails.setOrderNo(dto.getOrderNo());
+                                    actAllocationDetails.setQty(subQty);
+                                    actAllocationDetails.setPickQty(BigDecimal.ZERO);
+                                    actAllocationDetails.setMaterial(details.getSku());
+                                    actAllocationDetails.setStatus("00");
+                                    actAllocationDetails.setLotnum(lotnum);
+                                    actAllocationDetails.setUserdefine1(stockForm.getPalletNo());
+                                    actAllocationDetailsService.addOrUpdateAllocationDetails(actAllocationDetails);
+                                }
                             }
                             totalQty = totalQty.subtract(current);
                         } else {
@@ -436,6 +457,8 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
     @Transactional
     @Override
     public AjaxResult doPa(PaForm paForm) {
+        //入库单号
+        String lotatt08 = "";
         //绑定托盘
         String palletNo = paForm.getPalletNo();
         WmsBoxInfo wmsBoxInfo = new WmsBoxInfo();
@@ -444,27 +467,32 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
         if (wmsBoxInfo == null) {
             throw new ServiceException("托盘不存在");
         }
+        //获取库存当前的托盘位置
+        List<InvLotLocId> invLotLocIdList = invLotLocIdService.queryInvByInvLotatt(null, palletNo);
+        for (InvLotLocId inv : invLotLocIdList) {
+            if (lotatt08.equals("")) {
+                InvLotAtt invLotAtt = invLotAttService.selectInvLotAttByLotnum(inv.getLotnum());
+                lotatt08 = invLotAtt.getLotatt08();
+            }
+            //更新托盘库存到起始库位
+            invLotLocIdMapper.updateInvLotLocIdLocationId(Long.parseLong(inv.getLocationId()), Long.parseLong(paForm.getLocationTo()));
+        }
+
         wmsBoxInfo.setLocationId(Long.parseLong(paForm.getLocationTo()));
         int result = wmsBoxInfoService.updateWmsBoxInfo(wmsBoxInfo);
         if (result <= 0) {
             throw new ServiceException("托盘绑定更新失败");
         }
+
+        //更新分配表
+        actAllocationDetailsService.updateAllocationDetailsLocationIdByPalletNo(paForm.getLocationTo(), palletNo);
+
         //库存移动
         InvLotLocIdMoveForm moveForm = new InvLotLocIdMoveForm();
         moveForm.setLocationFrom(paForm.getLocationFrom());
         moveForm.setLocationTo(paForm.getLocationTo());
         moveForm.setIsCallCar("N");
 
-        List<InvLotLocId> invLotLocIdList = invLotLocIdService.queryInvByInvLotatt(null, palletNo);
-        InvLotAtt invLotAtt = null;
-        if (invLotLocIdList != null && invLotLocIdList.size() > 0) {
-            for (InvLotLocId inv : invLotLocIdList) {
-                invLotAtt = invLotAttService.selectInvLotAttByLotnum(inv.getLotnum());
-                break;
-            }
-        }
-
-        String lotatt08 = invLotAtt.getLotatt08();
         WmsDocAsnDetails query = new WmsDocAsnDetails();
         query.setAsnNo(lotatt08);
         List<WmsDocAsnDetails> detailsList = wmsDocAsnDetailsMapper.selectWmsDocAsnDetailsList(query);
@@ -476,17 +504,17 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
         }
         WmsDocAsnHeader updateStatus = new WmsDocAsnHeader();
         updateStatus.setAsnStatus("60");
+        updateStatus.setAsnNo(lotatt08);
         wmsDocAsnHeaderMapper.updateWmsDocAsnHeader(updateStatus);
 
-        //TODO 修改上架数量
         //TODO 事务日志
-        String tracNo = idSequenceUtils.generateId("TRANSACTIONID");
+        /*String tracNo = idSequenceUtils.generateId("TRANSACTIONID");
         ActTransactionLog paLog = new ActTransactionLog();
         paLog.setTransactionId(tracNo);
         paLog.setTransactionType(Constant.Transaction_TYPE.PA.getValue());
         //paLog.setDocNo();
-        actTransactionLogService.insertActTransactionLog(paLog);
-        return invLotLocIdService.move(moveForm);
+        actTransactionLogService.insertActTransactionLog(paLog);*/
+        return AjaxResult.success("操作成功");
     }
 
     @Override

+ 1 - 1
warewms-ams/src/main/java/com/ruoyi/ams/inv/service/impl/InvLotLocIdServiceImpl.java

@@ -206,7 +206,7 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
         baseLocationInfoService.lockLocationStockStatus(baseLocationFrom.getId(), baseLocationTo.getId()
                 , warehouseId, updateBy);
 
-        return AjaxResult.success("下发任务成功!");
+        return AjaxResult.success("执行成功");
     }
 
     @Override

+ 3 - 0
warewms-ams/src/main/java/com/ruoyi/ams/order/form/CheckOutForm.java

@@ -4,6 +4,9 @@ import lombok.Data;
 
 import java.util.List;
 
+/**
+ * 物料拉动
+ */
 @Data
 public class CheckOutForm {
     private List<CheckOutInfoForm> checkOutInfoFormList;

+ 2 - 2
warewms-ams/src/main/java/com/ruoyi/ams/order/form/CheckOutInfoForm.java

@@ -11,7 +11,7 @@ import lombok.Data;
 @Data
 public class CheckOutInfoForm {
     private String orderNo;
-    private Long orderLineNo;
-    private Long actAllocationId;
+    private String orderLineNo;
+    private String actAllocationId;
     private String locationTo;
 }

+ 9 - 1
warewms-ams/src/main/java/com/ruoyi/ams/order/form/PickForm.java

@@ -6,5 +6,13 @@ import java.util.List;
 
 @Data
 public class PickForm {
-    private List<PickInfoForm> pickInfoFormList;
+    //private List<PickInfoForm> pickInfoFormList;
+    private String allocationId;
+    private String orderNo;
+    private String palletNo;
+    private String sn;
+    private String sku;
+    private String qty;
+    private String locationTo;
+    private String fullTag;
 }

+ 0 - 22
warewms-ams/src/main/java/com/ruoyi/ams/order/form/PickInfoForm.java

@@ -1,22 +0,0 @@
-package com.ruoyi.ams.order.form;
-
-import lombok.Data;
-
-/**
- * Created by IntelliJ IDEA.
- * User: andy.qu
- * Date: 2022/11/4
- * Description:
- */
-@Data
-public class PickInfoForm {
-    private String allocationId;
-    private String orderNo;
-    private String palletNo;
-    private String boxNo;
-    private String sn;
-    private String sku;
-    private String qty;
-    private String locationTo;
-    private String fullTag;
-}

+ 13 - 0
warewms-ams/src/main/java/com/ruoyi/ams/order/mapper/ActAllocationDetailsMapper.java

@@ -2,6 +2,7 @@ package com.ruoyi.ams.order.mapper;
 
 import java.util.List;
 import com.ruoyi.ams.order.domain.ActAllocationDetails;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 分配查询Mapper接口
@@ -19,6 +20,16 @@ public interface ActAllocationDetailsMapper
      */
      ActAllocationDetails selectActAllocationDetailsByAllocationId(String allocationId);
 
+    /**
+     * 根据条件查询分配明细
+     * @param orderNo
+     * @param orderLineNo
+     * @param sku
+     * @param lotnum
+     * @return
+     */
+     ActAllocationDetails selectselectActAllocationDetailsBy(@Param("orderNo") String orderNo,@Param("orderLineNo") String orderLineNo,@Param("sku") String sku,@Param("lotnum") String lotnum);
+
     /**
      * 查询分配查询列表
      * 
@@ -72,4 +83,6 @@ public interface ActAllocationDetailsMapper
      * @return
      */
      List<ActAllocationDetails> queryAllocationDetailsByOrderNo(String orderNo);
+
+     int updateAllocationDetailsLocationIdByPalletNo(@Param("locationId") String locationId,@Param("palletNo") String palletNo);
 }

+ 14 - 0
warewms-ams/src/main/java/com/ruoyi/ams/order/service/IActAllocationDetailsService.java

@@ -81,6 +81,13 @@ public interface IActAllocationDetailsService {
      */
     AjaxResult addActAllocationDetails(String lotnum, String locationId, BigDecimal qty, WmsDocOrderDetails orderDetails);
 
+    /**
+     * 新增或者更新分配明细
+     * @param actAllocationDetails
+     * @return
+     */
+    AjaxResult addOrUpdateAllocationDetails(ActAllocationDetails actAllocationDetails);
+
     /**
      * 根据托盘编号查询分配明细
      *
@@ -95,4 +102,11 @@ public interface IActAllocationDetailsService {
      * @return
      */
     List<ActAllocationDetails> queryAllocationDetailsByOrderNo(String orderNo);
+
+    /**
+     * 更新分配库位根据托盘编号
+     * @param locationId
+     * @param palletNo
+     */
+    void updateAllocationDetailsLocationIdByPalletNo(String locationId,String palletNo);
 }

+ 3 - 3
warewms-ams/src/main/java/com/ruoyi/ams/order/service/IWmsDocOrderHeaderService.java

@@ -5,7 +5,7 @@ import java.util.List;
 import com.ruoyi.ams.order.domain.WmsDocOrderDetails;
 import com.ruoyi.ams.order.domain.WmsDocOrderHeader;
 import com.ruoyi.ams.order.form.CheckOutInfoForm;
-import com.ruoyi.ams.order.form.PickInfoForm;
+import com.ruoyi.ams.order.form.PickForm;
 import com.ruoyi.ams.order.vo.StockOrderVO;
 import com.ruoyi.common.core.domain.AjaxResult;
 
@@ -118,10 +118,10 @@ public interface IWmsDocOrderHeaderService {
     /**
      * 拣货分拣
      *
-     * @param pickFormList
+     * @param pickForm
      * @return
      */
-    AjaxResult doPick(List<PickInfoForm> pickFormList);
+    AjaxResult doPick(PickForm pickForm);
 
     /**
      * 分拣出库

+ 18 - 0
warewms-ams/src/main/java/com/ruoyi/ams/order/service/impl/ActAllocationDetailsServiceImpl.java

@@ -128,6 +128,19 @@ public class ActAllocationDetailsServiceImpl implements IActAllocationDetailsSer
         }
     }
 
+    @Override
+    public AjaxResult addOrUpdateAllocationDetails(ActAllocationDetails actAllocationDetails) {
+        ActAllocationDetails query = actAllocationDetailsMapper.selectselectActAllocationDetailsBy(actAllocationDetails.getOrderNo(), actAllocationDetails.getLineNo().toString(), actAllocationDetails.getMaterial(), actAllocationDetails.getLotnum());
+        if (query != null) {
+            query.setQty(query.getQty().add(actAllocationDetails.getQty()));
+            query.setPickQty(query.getPickQty().add(actAllocationDetails.getPickQty()));
+            actAllocationDetailsMapper.updateActAllocationDetails(query);
+        } else {
+            actAllocationDetailsMapper.insertActAllocationDetails(actAllocationDetails);
+        }
+        return AjaxResult.success("新增成功");
+    }
+
     @Override
     public List<ActAllocationDetails> queryAllocationDetailsByPalletNo(String palletNo) {
         return actAllocationDetailsMapper.queryAllocationDetailsByPalletNo(palletNo);
@@ -137,4 +150,9 @@ public class ActAllocationDetailsServiceImpl implements IActAllocationDetailsSer
     public List<ActAllocationDetails> queryAllocationDetailsByOrderNo(String orderNo) {
         return actAllocationDetailsMapper.queryAllocationDetailsByOrderNo(orderNo);
     }
+
+    @Override
+    public void updateAllocationDetailsLocationIdByPalletNo(String locationId, String palletNo) {
+        actAllocationDetailsMapper.updateAllocationDetailsLocationIdByPalletNo(locationId,palletNo);
+    }
 }

+ 48 - 16
warewms-ams/src/main/java/com/ruoyi/ams/order/service/impl/WmsDocOrderHeaderServiceImpl.java

@@ -3,7 +3,9 @@ package com.ruoyi.ams.order.service.impl;
 import java.math.BigDecimal;
 import java.util.List;
 
+import com.ruoyi.ams.box.domain.WmsBoxInfo;
 import com.ruoyi.ams.box.mapper.WmsBoxInfoMapper;
+import com.ruoyi.ams.box.service.IWmsBoxInfoService;
 import com.ruoyi.ams.inv.domain.InvLotAtt;
 import com.ruoyi.ams.inv.domain.InvLotLocId;
 import com.ruoyi.ams.inv.mapper.InvLotAttMapper;
@@ -12,10 +14,11 @@ import com.ruoyi.ams.inv.service.IInvLotLocIdService;
 import com.ruoyi.ams.order.domain.ActAllocationDetails;
 import com.ruoyi.ams.order.domain.WmsDocOrderDetails;
 import com.ruoyi.ams.order.form.CheckOutInfoForm;
-import com.ruoyi.ams.order.form.PickInfoForm;
+import com.ruoyi.ams.order.form.PickForm;
 import com.ruoyi.ams.order.mapper.WmsDocOrderDetailsMapper;
 import com.ruoyi.ams.order.service.IActAllocationDetailsService;
 import com.ruoyi.ams.order.vo.StockOrderVO;
+import com.ruoyi.base.constant.Constant;
 import com.ruoyi.common.core.domain.AjaxResult;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -43,6 +46,8 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
     @Autowired
     private IWmsDocOrderHeaderService wmsDocOrderHeaderService;
     @Autowired
+    private IWmsBoxInfoService wmsBoxInfoService;
+    @Autowired
     private WmsBoxInfoMapper wmsBoxInfoMapper;
     @Autowired
     private InvLotLocIdMapper invLotLocIdMapper;
@@ -190,6 +195,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
         return AjaxResult.success("分配成功");
     }
 
+    @Transactional
     @Override
     public AjaxResult doAllocationDetails(WmsDocOrderHeader header, WmsDocOrderDetails details) {
         if (header.getOrderType().equals("OD")) {
@@ -291,30 +297,56 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
         return AjaxResult.error("库存数不足,无法分配");
     }
 
+    @Transactional
     @Override
-    public AjaxResult doPick(List<PickInfoForm> pickFormList) {
-        for (PickInfoForm p : pickFormList) {
-            //查询对应的分配明细表
-            ActAllocationDetails actAllocationDetails = actAllocationDetailsService.selectActAllocationDetailsByAllocationId(p.getAllocationId());
-            actAllocationDetails.setPickQty(actAllocationDetails.getPickQty().add(new BigDecimal(p.getQty())));
-            actAllocationDetails.setPickToLocation(p.getLocationTo());
-            actAllocationDetailsService.updateActAllocationDetails(actAllocationDetails);
-
-            //库存进行移动
-            invLotLocIdService.stockTransfer(actAllocationDetails.getLocationId(), Long.parseLong(actAllocationDetails.getPickToLocation()));
-            //托盘进行绑定修改
-            wmsBoxInfoMapper.updateLocationBind(actAllocationDetails.getLocationId(), Long.parseLong(p.getLocationTo()), p.getFullTag());
-            //TODO 是否需要生成任务
+    public AjaxResult doPick(PickForm pickForm) {
+        BigDecimal qty;
+        //查询对应的分配明细表
+        ActAllocationDetails actAllocationDetails = actAllocationDetailsService.selectActAllocationDetailsByAllocationId(pickForm.getAllocationId());
+        qty = actAllocationDetails.getPickQty();
+        actAllocationDetails.setPickQty(actAllocationDetails.getPickQty().add(new BigDecimal(pickForm.getQty())));
+        actAllocationDetails.setPickToLocation(pickForm.getLocationTo());
+        actAllocationDetailsService.updateActAllocationDetails(actAllocationDetails);
 
+        //更新出库单拣货数量
+        WmsDocOrderDetails wmsDocOrderDetails = wmsDocOrderDetailsMapper.selectWmsDocOrderDetailsByNoLineNo(actAllocationDetails.getOrderNo(), actAllocationDetails.getLineNo());
+        wmsDocOrderDetails.setQtyPicked(wmsDocOrderDetails.getQtyPicked().add(actAllocationDetails.getPickQty()));
+        wmsDocOrderDetails.setQtyPickedEach(wmsDocOrderDetails.getQtyPicked());
+        if (actAllocationDetails.getQty().compareTo(actAllocationDetails.getPickQty()) == 1) {
+            wmsDocOrderDetails.setLineStatus("30");
+        } else {
+            wmsDocOrderDetails.setLineStatus("40");
         }
+        wmsDocOrderDetailsMapper.updateWmsDocOrderDetails(wmsDocOrderDetails);
+
+        //库存进行移动
+        invLotLocIdService.stockTransfer(actAllocationDetails.getLocationId(), Long.parseLong(actAllocationDetails.getPickToLocation()));
+        //托盘进行绑定修改
+        wmsBoxInfoMapper.updateLocationBind(actAllocationDetails.getLocationId(), Long.parseLong(pickForm.getLocationTo()), pickForm.getFullTag());
+
+        //TODO 是否需要生成任务
         return AjaxResult.success("操作成功");
     }
 
+    @Transactional
     @Override
     public AjaxResult doCheckout(List<CheckOutInfoForm> checkOutForms) {
-        //TODO 生成任务呼叫到接驳位
+        for (CheckOutInfoForm check : checkOutForms) {
+            //TODO 生成任务呼叫到接驳位
+            ActAllocationDetails actAllocationDetails = actAllocationDetailsService.selectActAllocationDetailsByAllocationId(check.getActAllocationId());
+            //清空库存
+            WmsBoxInfo wmsBoxInfo = wmsBoxInfoService.selectWmsBoxInfoByBoxNo(actAllocationDetails.getUserdefine1());
+            invLotLocIdService.clear(wmsBoxInfo.getLocationId().toString(), Constant.WAREHOUSE_ID,"");
 
-        return null;
+            WmsDocOrderDetails wmsDocOrderDetails = new WmsDocOrderDetails();
+            wmsDocOrderDetails.setQtyShipped(actAllocationDetails.getPickQty());
+            wmsDocOrderDetails.setQtyShippedEach(actAllocationDetails.getPickQty());
+            wmsDocOrderDetails.setLineStatus("99");
+            wmsDocOrderDetails.setOrderNo(actAllocationDetails.getOrderNo());
+            wmsDocOrderDetails.setOrderLineNo(new BigDecimal(actAllocationDetails.getLineNo()));
+            wmsDocOrderDetailsMapper.updateWmsDocOrderDetails(wmsDocOrderDetails);
+        }
+        return AjaxResult.success("操作成功");
     }
 
     @Transactional

+ 1 - 1
warewms-ams/src/main/resources/mapper/box/WmsBoxInfoMapper.xml

@@ -106,7 +106,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <update id="updateLocationBind">
         update wms_box_info
         <trim prefix="SET" suffixOverrides=",">
-            <if test="locationId != null">location_id = #{locationTo},</if>
+            <if test="locationTo != null">location_id = #{locationTo},</if>
             <if test="isFull != null">is_full = #{isFull},</if>
         </trim>
         where location_id = #{locationFrom}

+ 62 - 26
warewms-ams/src/main/resources/mapper/docOrder/ActAllocationDetailsMapper.xml

@@ -5,33 +5,54 @@
 <mapper namespace="com.ruoyi.ams.order.mapper.ActAllocationDetailsMapper">
 
     <resultMap type="ActAllocationDetails" id="ActAllocationDetailsResult">
-        <result property="allocationId"    column="allocation_id"    />
-        <result property="orderNo"    column="order_no"    />
-        <result property="lineNo"    column="line_no"    />
-        <result property="material"    column="material"    />
-        <result property="locationId"    column="location_id"    />
-        <result property="callTransactionId"    column="call_transaction_id"    />
-        <result property="status"    column="status"    />
-        <result property="lotnum"    column="lotnum"    />
-        <result property="qty"    column="qty"    />
-        <result property="pickTransactionId"    column="pick_transaction_id"    />
-        <result property="pickToLocation"    column="pick_to_location"    />
-        <result property="pickQty"    column="pick_qty"    />
-        <result property="createBy"    column="create_by"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="updateBy"    column="update_by"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="userdefine1"    column="userdefine1"    />
-        <result property="userdefine2"    column="userdefine2"    />
-        <result property="userdefine3"    column="userdefine3"    />
-        <result property="userdefine4"    column="userdefine4"    />
+        <result property="allocationId" column="allocation_id"/>
+        <result property="orderNo" column="order_no"/>
+        <result property="lineNo" column="line_no"/>
+        <result property="material" column="material"/>
+        <result property="locationId" column="location_id"/>
+        <result property="callTransactionId" column="call_transaction_id"/>
+        <result property="status" column="status"/>
+        <result property="lotnum" column="lotnum"/>
+        <result property="qty" column="qty"/>
+        <result property="pickTransactionId" column="pick_transaction_id"/>
+        <result property="pickToLocation" column="pick_to_location"/>
+        <result property="pickQty" column="pick_qty"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="userdefine1" column="userdefine1"/>
+        <result property="userdefine2" column="userdefine2"/>
+        <result property="userdefine3" column="userdefine3"/>
+        <result property="userdefine4" column="userdefine4"/>
     </resultMap>
 
     <sql id="selectActAllocationDetailsVo">
-        select allocation_id, order_no, line_no, material, location_id, call_transaction_id, status, lotnum, qty, pick_transaction_id, pick_to_location, pick_qty, create_by, create_time, update_by, update_time, userdefine1, userdefine2, userdefine3, userdefine4 from act_allocation_details
+        select allocation_id,
+               order_no,
+               line_no,
+               material,
+               location_id,
+               call_transaction_id,
+               status,
+               lotnum,
+               qty,
+               pick_transaction_id,
+               pick_to_location,
+               pick_qty,
+               create_by,
+               create_time,
+               update_by,
+               update_time,
+               userdefine1,
+               userdefine2,
+               userdefine3,
+               userdefine4
+        from act_allocation_details
     </sql>
 
-    <select id="selectActAllocationDetailsList" parameterType="ActAllocationDetails" resultMap="ActAllocationDetailsResult">
+    <select id="selectActAllocationDetailsList" parameterType="ActAllocationDetails"
+            resultMap="ActAllocationDetailsResult">
         <include refid="selectActAllocationDetailsVo"/>
         <where>
         </where>
@@ -42,6 +63,11 @@
         where allocation_id = #{allocationId}
     </select>
 
+    <select id="selectselectActAllocationDetailsBy" resultMap="ActAllocationDetailsResult">
+        <include refid="selectActAllocationDetailsVo"/>
+        where order_no = #{orderNo} and line_no = #{orderLineNo} and material = #{sku} and lotnum = #{lotnum}
+    </select>
+
     <insert id="insertActAllocationDetails" parameterType="ActAllocationDetails">
         insert into act_allocation_details
         <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -117,7 +143,9 @@
     </update>
 
     <delete id="deleteActAllocationDetailsByAllocationId" parameterType="String">
-        delete from act_allocation_details where allocation_id = #{allocationId}
+        delete
+        from act_allocation_details
+        where allocation_id = #{allocationId}
     </delete>
 
     <delete id="deleteActAllocationDetailsByAllocationIds" parameterType="String">
@@ -128,12 +156,20 @@
     </delete>
 
     <select id="queryAllocationDetailsByPalletNo" parameterType="String" resultMap="ActAllocationDetailsResult">
-        select al.* from act_allocation_details al left join wms_box_info b on al.location_id = b.location_id
+        select al.*
+        from act_allocation_details al
+                 left join wms_box_info b on al.location_id = b.location_id
         where b.box_no = #{palletNo}
     </select>
 
     <select id="queryAllocationDetailsByOrderNo" parameterType="String" resultMap="ActAllocationDetailsResult">
-        select al.* from act_allocation_details al
-        where al.order_no = #{orderNo} and status in (10,20,30,40)
+        select al.*
+        from act_allocation_details al
+        where al.order_no = #{orderNo}
+          and status in (10, 20, 30, 40)
     </select>
+
+    <update id="updateAllocationDetailsLocationIdByPalletNo">
+        update act_allocation_details set location_id = #{locationId} where userdefine1 = #{palletNo}
+    </update>
 </mapper>

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

@@ -270,7 +270,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <update id="updateWmsDocOrderDetails" parameterType="WmsDocOrderDetails">
         update wms_doc_order_details
         <trim prefix="SET" suffixOverrides=",">
-            <if test="orderLineNo != null">order_line_no = #{orderLineNo},</if>
             <if test="customerId != null and customerId != ''">customer_id = #{customerId},</if>
             <if test="sku != null and sku != ''">sku = #{sku},</if>
             <if test="lineStatus != null and lineStatus != ''">line_status = #{lineStatus},</if>
@@ -346,7 +345,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="userdefine4 != null">userdefine4 = #{userdefine4},</if>
             <if test="userdefine5 != null">userdefine5 = #{userdefine5},</if>
         </trim>
-        where order_no = #{orderNo}
+        where order_no = #{orderNo} and order_line_no = #{orderLineNo}
     </update>
 
     <delete id="deleteWmsDocOrderDetailsByOrderNo" parameterType="String">