k преди 2 години
родител
ревизия
55abe4d55f

+ 16 - 21
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/ams/InvLotLocIdController.java

@@ -1,32 +1,25 @@
 package com.ruoyi.web.controller.warewms.ams;
 
-import java.util.List;
-import javax.servlet.http.HttpServletResponse;
-
+import com.ruoyi.ams.inv.domain.InvLotLocId;
 import com.ruoyi.ams.inv.domain.form.InvLocIdSearchFrom;
 import com.ruoyi.ams.inv.domain.form.InvLotLocIdAdjForm;
-import com.ruoyi.ams.inv.domain.form.InvLotLocIdForm;
+import com.ruoyi.ams.inv.domain.form.InvLotLocIdMoveForm;
 import com.ruoyi.ams.inv.domain.vo.InvLotLocIdLotattVO;
-import com.ruoyi.base.domain.vo.BaseLocationLotattVO;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.ams.inv.service.IInvLotLocIdService;
+import com.ruoyi.base.constant.Constant;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
-import com.ruoyi.ams.inv.domain.InvLotLocId;
-import com.ruoyi.ams.inv.service.IInvLotLocIdService;
 import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.common.core.page.TableDataInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
 
 /**
  * 库位库存信息Controller
@@ -69,8 +62,10 @@ public class InvLotLocIdController extends BaseController {
     @PreAuthorize("@ss.hasPermi('ams:invLotLocId:move')")
     @Log(title = "库位库存移动", businessType = BusinessType.UPDATE)
     @PostMapping("/move")
-    public AjaxResult move(@RequestBody InvLotLocIdForm invLotLocIdForm) {
-        return invLotLocIdService.move(invLotLocIdForm);
+    public AjaxResult move(@RequestBody InvLotLocIdMoveForm invLotLocIdMoveForm) {
+        invLotLocIdMoveForm.setUpdateBy(getUsername());
+        invLotLocIdMoveForm.setWarehouseId(Constant.WAREHOUSE_ID);
+        return invLotLocIdService.move(invLotLocIdMoveForm);
     }
 
     /**

+ 2 - 2
warewms-ams/src/main/java/com/ruoyi/ams/agv/ndc/AciService.java

@@ -11,7 +11,7 @@ import com.ruoyi.ams.agv.ndc.entity.Order;
 import com.ruoyi.ams.agv.ndc.service.IAmsHexdefineDetailService;
 import com.ruoyi.ams.agv.ndc.service.IAmsTaskService;
 import com.ruoyi.ams.agv.ndc.service.SocketBufferService;
-import com.ruoyi.ams.common.Constant;
+import com.ruoyi.base.constant.Constant;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -212,4 +212,4 @@ public class AciService {
             }
         }
     }
-}
+}

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

@@ -9,7 +9,6 @@ import com.ruoyi.ams.asn.form.StockInfoForm;
 import com.ruoyi.ams.asn.mapper.WmsDocAsnDetailsMapper;
 import com.ruoyi.ams.box.domain.WmsBoxInfo;
 import com.ruoyi.ams.box.service.IWmsBoxInfoService;
-import com.ruoyi.ams.common.Constant;
 import com.ruoyi.ams.config.domain.dto.LotattDTO;
 import com.ruoyi.ams.inv.domain.InvLotAtt;
 import com.ruoyi.ams.inv.domain.InvLotLocId;
@@ -18,6 +17,7 @@ import com.ruoyi.ams.order.domain.WmsDocOrderDetails;
 import com.ruoyi.ams.order.domain.WmsDocOrderHeader;
 import com.ruoyi.ams.order.mapper.WmsDocOrderDetailsMapper;
 import com.ruoyi.ams.order.service.IWmsDocOrderHeaderService;
+import com.ruoyi.base.constant.Constant;
 import com.ruoyi.base.domain.BaseSku;
 import com.ruoyi.base.service.IBaseSkuService;
 import com.ruoyi.common.core.domain.AjaxResult;

+ 1 - 1
warewms-ams/src/main/java/com/ruoyi/ams/business/BusinessServiceImpl.java

@@ -1,7 +1,6 @@
 package com.ruoyi.ams.business;
 
 import com.ruoyi.ams.business.domain.FilterLockInvLocationDTO;
-import com.ruoyi.ams.common.Constant;
 import com.ruoyi.ams.config.domain.AsnSoStrategy;
 import com.ruoyi.ams.config.domain.dto.*;
 import com.ruoyi.ams.config.domain.vo.FlowConfigHeaderVO;
@@ -11,6 +10,7 @@ import com.ruoyi.ams.inv.mapper.InvLotLocIdMapper;
 import com.ruoyi.ams.inv.service.IInvLotLocIdService;
 import com.ruoyi.ams.task.domain.WcsTask;
 import com.ruoyi.ams.task.mapper.WcsTaskMapper;
+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;

+ 24 - 0
warewms-ams/src/main/java/com/ruoyi/ams/inv/domain/form/InvLotLocIdMoveForm.java

@@ -0,0 +1,24 @@
+package com.ruoyi.ams.inv.domain.form;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @author JWK
+ * @version 1.0
+ * @date 2022/11/9 10:58
+ */
+@Data
+public class InvLotLocIdMoveForm extends BaseEntity {
+
+    @NotBlank(message = "起始库位不可为空!")
+    private String locationFrom;
+    @NotBlank(message = "目标库位不能为空!")
+    private String locationTo;
+    @NotBlank(message = "是否叫车不能为空!")
+    private String isCallCar;
+    private String reason;
+    private Long warehouseId;
+}

+ 2 - 1
warewms-ams/src/main/java/com/ruoyi/ams/inv/service/IInvLotLocIdService.java

@@ -8,6 +8,7 @@ import com.ruoyi.ams.inv.domain.InvLotLocId;
 import com.ruoyi.ams.inv.domain.form.InvLocIdSearchFrom;
 import com.ruoyi.ams.inv.domain.form.InvLotLocIdAdjForm;
 import com.ruoyi.ams.inv.domain.form.InvLotLocIdForm;
+import com.ruoyi.ams.inv.domain.form.InvLotLocIdMoveForm;
 import com.ruoyi.ams.inv.domain.vo.InvLotLocIdLotattVO;
 import com.ruoyi.base.domain.BaseLocationInfo;
 import com.ruoyi.base.domain.vo.BaseLocationLotattVO;
@@ -65,7 +66,7 @@ public interface IInvLotLocIdService {
      *
      * @return
      */
-    AjaxResult move(InvLotLocIdForm invLotLocIdForm);
+    AjaxResult move(InvLotLocIdMoveForm invLotLocIdMoveForm);
 
     /**
      * 新增库位库存信息

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

@@ -1,16 +1,16 @@
 package com.ruoyi.ams.inv.service.impl;
 
-import com.ruoyi.ams.common.Constant;
 import com.ruoyi.ams.config.domain.dto.LotattDTO;
 import com.ruoyi.ams.inv.domain.InvLotAtt;
 import com.ruoyi.ams.inv.domain.InvLotLocId;
 import com.ruoyi.ams.inv.domain.form.InvLocIdSearchFrom;
 import com.ruoyi.ams.inv.domain.form.InvLotLocIdAdjForm;
-import com.ruoyi.ams.inv.domain.form.InvLotLocIdForm;
+import com.ruoyi.ams.inv.domain.form.InvLotLocIdMoveForm;
 import com.ruoyi.ams.inv.domain.vo.InvLotLocIdLotattVO;
 import com.ruoyi.ams.inv.mapper.InvLotAttMapper;
 import com.ruoyi.ams.inv.mapper.InvLotLocIdMapper;
 import com.ruoyi.ams.inv.service.IInvLotLocIdService;
+import com.ruoyi.base.constant.Constant;
 import com.ruoyi.base.domain.BaseLocationInfo;
 import com.ruoyi.base.service.IBaseLocationInfoService;
 import com.ruoyi.base.service.SysIdsequenceService;
@@ -101,6 +101,7 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
         String customerId = invLotLocIdAdjForm.getCustomerId();
         String sku = invLotLocIdAdjForm.getSku();
         String reason = invLotLocIdAdjForm.getReason(); // 原因描述
+        String updateBy = invLotLocIdAdjForm.getUpdateBy();
 
         BaseLocationInfo baseLocationInfo = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(locationNo
                 , Constant.WAREHOUSE_ID);
@@ -120,7 +121,7 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
         invLotLocIdUpdate.setCustomerId(customerId);
         invLotLocIdUpdate.setSku(sku);
         invLotLocIdUpdate.setQty(new BigDecimal(qtyTo));
-        invLotLocIdUpdate.setUpdateBy(invLotLocIdAdjForm.getUpdateBy());
+        invLotLocIdUpdate.setUpdateBy(updateBy);
         if (updateInvLotLocId(invLotLocIdUpdate) <= 0) {
             return AjaxResult.error("修改库存失败!");
         }
@@ -133,12 +134,41 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
     /**
      * 库存移动
      *
-     * @param invLotLocIdForm
+     * @param invLotLocIdMoveForm
      * @return
      */
     @Override
-    public AjaxResult move(InvLotLocIdForm invLotLocIdForm) {
-        return null;
+    public AjaxResult move(InvLotLocIdMoveForm invLotLocIdMoveForm) {
+        String locationFrom = invLotLocIdMoveForm.getLocationFrom();
+        String locationTo = invLotLocIdMoveForm.getLocationTo();
+        String reason = invLotLocIdMoveForm.getReason();
+        String updateBy = invLotLocIdMoveForm.getUpdateBy();
+        Long warehouseId = invLotLocIdMoveForm.getWarehouseId();
+        // 起始和目标库位
+        BaseLocationInfo baseLocationFrom = null;
+        BaseLocationInfo baseLocationTo = null;
+
+        // 验证库位
+        Boolean isIdleFrom = baseLocationInfoService.verifyLocationIsIdle(locationFrom, warehouseId);
+        if (!isIdleFrom) {
+            return AjaxResult.error("起始库位需要空闲状态!");
+        }
+        Boolean isIdle = baseLocationInfoService.verifyLocationIsIdle(locationTo, warehouseId);
+        if (!isIdle) {
+            return AjaxResult.error("目标库位需要空闲状态!");
+        }
+        Boolean isInStock = baseLocationInfoService.verifyLocationIsInStock(locationTo, warehouseId);
+        if (isInStock) {
+            return AjaxResult.error("目标库位有货!");
+        }
+        // 起始和目标库位
+        baseLocationFrom = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(locationFrom, warehouseId);
+        baseLocationTo = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(locationTo, warehouseId);
+
+        // todo 下发任务
+        // todo 修改起始和目标库位状态
+
+        return AjaxResult.success("下发任务成功!");
     }
 
     /**

+ 26 - 2
warewms-ams/src/main/java/com/ruoyi/ams/common/Constant.java

@@ -1,4 +1,4 @@
-package com.ruoyi.ams.common;
+package com.ruoyi.base.constant;
 
 /**
  * Created by IntelliJ IDEA.
@@ -9,6 +9,30 @@ public class Constant {
     public static final String CUSTOMER_ID = "default";
     public static final Long WAREHOUSE_ID = 1L;
 
+    /**
+     * 是否
+     */
+    public enum IS_YES {
+        /**
+         * 是
+         */
+        Y("1"),
+        /**
+         * 否
+         */
+        N("0");
+
+        private String value;
+
+        IS_YES(String value) {
+            this.value = value;
+        }
+
+        public String getValue() {
+            return value;
+        }
+    }
+
     /**
      * 储位状态
      */
@@ -97,4 +121,4 @@ public class Constant {
             return value;
         }
     }
-}
+}

+ 17 - 0
warewms-base/src/main/java/com/ruoyi/base/service/IBaseLocationInfoService.java

@@ -135,4 +135,21 @@ public interface IBaseLocationInfoService {
      * @return
      */
     List<BaseLocationInfo> selectNeighborLocation(String colNo, Long zoneId);
+
+
+    /**
+     * 验证库位任务状态是否空闲
+     *
+     * @param locationId
+     * @return true 空闲
+     */
+    Boolean verifyLocationIsIdle(String locationId, Long warehouseId);
+
+    /**
+     * 验证库位是否有库存
+     *
+     * @param locationId
+     * @return true 有货
+     */
+    Boolean verifyLocationIsInStock(String locationId, Long warehouseId);
 }

+ 27 - 8
warewms-base/src/main/java/com/ruoyi/base/service/impl/BaseLocationInfoServiceImpl.java

@@ -1,22 +1,23 @@
 package com.ruoyi.base.service.impl;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
+import com.ruoyi.base.constant.Constant;
+import com.ruoyi.base.domain.BaseLocationInfo;
 import com.ruoyi.base.domain.BaseLocationZone;
 import com.ruoyi.base.domain.vo.*;
+import com.ruoyi.base.mapper.BaseLocationInfoMapper;
 import com.ruoyi.base.mapper.BaseLocationZoneMapper;
+import com.ruoyi.base.service.IBaseLocationInfoService;
 import com.ruoyi.base.utils.CommonUtils;
 import com.ruoyi.common.utils.DateUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
-import com.ruoyi.base.mapper.BaseLocationInfoMapper;
-import com.ruoyi.base.domain.BaseLocationInfo;
-import com.ruoyi.base.service.IBaseLocationInfoService;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 库位信息Service业务层处理
@@ -233,4 +234,22 @@ public class BaseLocationInfoServiceImpl implements IBaseLocationInfoService {
         resultList.addAll(baseLocationInfoMapper.selectLocationByColNo(nextColNo));
         return resultList;
     }
+
+    @Override
+    public Boolean verifyLocationIsIdle(String locationId, Long warehouseId) {
+        BaseLocationInfo baseLocationInfo = selectBaseLocationInfoByIdOrNo(locationId, warehouseId);
+        if (!baseLocationInfo.getStockStatus().equals(Constant.STOCK_STATUS.STOCK00)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public Boolean verifyLocationIsInStock(String locationId, Long warehouseId) {
+        BaseLocationInfo baseLocationInfo = selectBaseLocationInfoByIdOrNo(locationId, warehouseId);
+        if (baseLocationInfo.getIsEmpty().equals(Constant.IS_YES.N.toString())) {
+            return false;
+        }
+        return true;
+    }
 }