Преглед на файлове

pda任务列表变更开发、增加库区场景、重置库位逻辑更改、配置sql维护

zhangxin преди 1 година
родител
ревизия
c9e40a8103

Файловите разлики са ограничени, защото са твърде много
+ 1 - 2
base_sql/bucket_sql/xuankuang_ddl_20230904.sql


+ 19 - 8
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/ams/BucketLocInvController.java

@@ -11,9 +11,10 @@ import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.utils.StringUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.aspectj.weaver.loadtime.Aj;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
 import java.util.stream.Collectors;
@@ -48,22 +49,32 @@ public class BucketLocInvController {
         return AjaxResult.success(locationZoneList);
     }
 
+    @ApiOperation("桶装入库:获取当前库区场景及使用场景下的库位")
+    @GetMapping(value = "/getCacheLocationInfoCacheList")
+    public AjaxResult getCacheLocationInfoCacheList(String cacheZoneSceneCode, String locationSceneCode) {
+        List<Long> zoneIdList = wcsTaskService.getBucketLocationIdList(cacheZoneSceneCode);
+        if (CollectionUtil.isEmpty(zoneIdList)) return AjaxResult.success(zoneIdList);
+        List<BaseLocationInfo> baseLocationInfoList = iBaseLocationInfoService.getBaseLocationInfoList(zoneIdList);
+        if(StringUtils.isBlank(locationSceneCode) || CollectionUtil.isEmpty(baseLocationInfoList)) return AjaxResult.success(baseLocationInfoList);
 
+        return AjaxResult.success(getBaseLocationInfoFilterList(baseLocationInfoList, locationSceneCode));
+    }
 
     @ApiOperation("桶装入库:获取当前场景下的库位")
     @GetMapping(value = "/getBaseLocationInfoList")
     public AjaxResult getBaseLocationInfoList(Long zoneId, String locationSceneCode) {
         List<BaseLocationInfo> baseLocationInfoList = iBaseLocationInfoService.getBaseLocationInfoList(zoneId);
-        if(StringUtils.isBlank(locationSceneCode)) return AjaxResult.success(baseLocationInfoList);
+        if(StringUtils.isBlank(locationSceneCode) || CollectionUtil.isEmpty(baseLocationInfoList)) return AjaxResult.success(baseLocationInfoList);
+
+        return AjaxResult.success(getBaseLocationInfoFilterList(baseLocationInfoList, locationSceneCode));
+    }
 
+    private List<BaseLocationInfo> getBaseLocationInfoFilterList(List<BaseLocationInfo> baseLocationInfoList, String locationSceneCode){
         List<Long> bucketLocationIdList = wcsTaskService.getBucketLocationIdList(locationSceneCode);
-        if(CollectionUtil.isEmpty(bucketLocationIdList)) return AjaxResult.success(Lists.newArrayList());
-        List<BaseLocationInfo> locationInfoList = baseLocationInfoList.stream()
+        if(CollectionUtil.isEmpty(bucketLocationIdList)) return Lists.newArrayList();
+        return baseLocationInfoList.stream()
                 .filter(item -> CollectionUtil.contains(bucketLocationIdList, item.getId())).collect(Collectors.toList());
-        return AjaxResult.success(locationInfoList);
     }
 
 
-
-
 }

+ 21 - 25
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/ams/WcsTaskController.java

@@ -1,38 +1,25 @@
 package com.ruoyi.web.controller.warewms.ams;
 
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.List;
-import javax.servlet.http.HttpServletResponse;
-import javax.validation.constraints.Min;
-import javax.validation.constraints.NotNull;
-
+import com.ruoyi.ams.task.domain.WcsTask;
 import com.ruoyi.ams.task.domain.form.TaskDispositionForm;
 import com.ruoyi.ams.task.form.AddTaskForm;
+import com.ruoyi.ams.task.service.IWcsTaskService;
 import com.ruoyi.base.constant.Constant;
-import com.ruoyi.base.utils.IdSequenceUtils;
-import com.ruoyi.common.core.domain.model.LoginUser;
-import io.swagger.annotations.ApiModelProperty;
-import io.swagger.annotations.ApiOperation;
-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.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
-import com.ruoyi.ams.task.domain.WcsTask;
-import com.ruoyi.ams.task.service.IWcsTaskService;
 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.Date;
+import java.util.List;
 
 /**
  * AGV任务Controller
@@ -56,6 +43,15 @@ public class WcsTaskController extends BaseController {
         return getDataTable(list);
     }
 
+    /**
+     * 查询AGV桶装任务列表
+     */
+    @GetMapping("/selectBucketWcsTaskList")
+    public TableDataInfo selectBucketWcsTaskList(WcsTask wcsTask) {
+        List<WcsTask> list = wcsTaskService.selectBucketWcsTaskList(wcsTask);
+        return getDataTable(list);
+    }
+
     /**
      * 导出AGV任务列表
      */

+ 4 - 4
ruoyi-admin/src/main/resources/application-dev.yml

@@ -6,9 +6,9 @@ spring:
         druid:
             # 主库数据源
             master:
-                url: jdbc:mysql://47.100.220.92:3306/warewms_xuankuang_cy?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
-                username: warewms
-                password: warewms123
+                url: jdbc:mysql://localhost:3306/xuankuang_zx?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
+                username: root
+                password: root
                 driverClassName: com.mysql.cj.jdbc.Driver
             # 从库数据源
             slave:
@@ -58,7 +58,7 @@ spring:
                         multi-statement-allow: true
     redis:
         # 地址
-        host: 154.12.20.200
+        host: 154.12.16.4
         # 端口,默认为6379
         port: 6379
         # 数据库索引

+ 11 - 4
ruoyi-admin/src/test/java/com/ruoyi/admin/test/base/ProcessLocationTest.java

@@ -7,6 +7,7 @@ import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.google.common.collect.Lists;
 import com.ruoyi.RuoYiApplication;
+import com.ruoyi.ams.inv.domain.InvLotAtt;
 import com.ruoyi.ams.inv.domain.InvLotLocId;
 import com.ruoyi.ams.inv.service.IInvLotAttService;
 import com.ruoyi.ams.inv.service.IInvLotLocIdService;
@@ -15,9 +16,9 @@ import com.ruoyi.base.domain.BaseSku;
 import com.ruoyi.base.service.IBaseLocationInfoService;
 import com.ruoyi.base.service.IBaseSkuService;
 import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
-import io.netty.util.internal.SocketUtils;
 import io.netty.util.internal.StringUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.Test;
@@ -130,9 +131,8 @@ public class ProcessLocationTest {
 
         //查出原先的库存情况,如果当前库存SKU不符合,则生成新的批次记录
         List<InvLotLocId> invLotLocList = invLotLocIdService.getInvLotLocList(baseLocationInfo.getId());
-        if(CollectionUtil.isEmpty(invLotLocList)) return;
         //此时数据是错的都要重新生成库存
-        List<String> skuList = invLotLocList.stream().map(item -> item.getSku()).collect(Collectors.toList());
+        List<String> skuList = CollectionUtil.isNotEmpty(invLotLocList) ? invLotLocList.stream().map(item -> item.getSku()).collect(Collectors.toList()) : Lists.newArrayList();
         if(CollectionUtil.isEmpty(skuList) || skuList.size() > 1 || !StringUtils.equals(skuList.get(0), bindSku)){
             //生成新的批次记录
             String lotnum = invLotAttService.insertInvLotAtt(bindSku, palletNo);
@@ -143,13 +143,20 @@ public class ProcessLocationTest {
             reSetLocationInfo(baseLocationInfo, bindSku, Constants.NO, skuTypeMapping);
             return;
         }
-        if(CompareUtil.compare(invLotLocList.get(0).getQty(), quantity) != 0){
+        InvLotAtt invLotAtt = invLotAttService.selectInvLotAttByLotnum(invLotLocList.get(0).getLotnum());
+        if(CompareUtil.compare(invLotLocList.get(0).getQty(), quantity) != 0 || CompareUtil.compare(invLotAtt.getLotatt07(), palletNo) != 0){
             //此时只有数量是错的,那么update一下数量就好
             InvLotLocId invLotLocId = invLotLocList.get(0);
             invLotLocId.setQty(quantity);
             //TODO  其他关于数量的字段要改嘛
             invLotLocId.setQtyEach(quantity);
+            invLotLocId.setUpdateTime(DateUtils.getNowDate());
             invLotLocIdService.updateInvLotLocId(invLotLocId);
+            InvLotAtt iotLotAtt = new InvLotAtt();
+            iotLotAtt.setLotnum(invLotLocId.getLotnum());
+            iotLotAtt.setLotatt07(palletNo);
+            iotLotAtt.setUpdateTime(DateUtils.getNowDate());
+            invLotAttService.updateInvLotAtt(iotLotAtt);
             //重置库存数据
             reSetLocationInfo(baseLocationInfo, bindSku, Constants.NO, skuTypeMapping);
         }

+ 6 - 5
warewms-ams/src/main/java/com/ruoyi/ams/inv/service/impl/InvLotAttServiceImpl.java

@@ -1,15 +1,15 @@
 package com.ruoyi.ams.inv.service.impl;
 
-import java.util.List;
-
+import com.ruoyi.ams.inv.domain.InvLotAtt;
+import com.ruoyi.ams.inv.mapper.InvLotAttMapper;
+import com.ruoyi.ams.inv.service.IInvLotAttService;
 import com.ruoyi.base.utils.IdSequenceUtils;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.utils.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.ruoyi.ams.inv.mapper.InvLotAttMapper;
-import com.ruoyi.ams.inv.domain.InvLotAtt;
-import com.ruoyi.ams.inv.service.IInvLotAttService;
+
+import java.util.List;
 
 /**
  * 批次属性Service业务层处理
@@ -111,6 +111,7 @@ public class InvLotAttServiceImpl implements IInvLotAttService {
         invLotAtt.setCustomerId(Constants.DEFAULT_CUSTOMER_ID);
         invLotAtt.setSku(bindSku);
         invLotAtt.setLotatt07(palletNo);
+        invLotAtt.setCreateTime(DateUtils.getNowDate());
         invLotAttMapper.insertInvLotAtt(invLotAtt);
         return lotnum;
     }

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

@@ -712,6 +712,7 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
         invLotLocId.setLotnum(lotnum);
         invLotLocId.setQty(quantity);
         invLotLocId.setQtyEach(quantity);
+        invLotLocId.setCreateTime(DateUtils.getNowDate());
         return invLotLocIdMapper.insertInvLotLocId(invLotLocId) == 1;
     }
 

+ 8 - 0
warewms-ams/src/main/java/com/ruoyi/ams/task/service/IWcsTaskService.java

@@ -22,6 +22,14 @@ public interface IWcsTaskService {
      */
     WcsTask selectWcsTaskByTaskNo(String taskNo);
 
+    /**
+     * 查询AGV桶装任务列表
+     *
+     * @param wcsTask AGV任务
+     * @return AGV任务
+     */
+    List<WcsTask> selectBucketWcsTaskList(WcsTask wcsTask);
+
     /**
      * 查询AGV任务列表
      *

+ 29 - 0
warewms-ams/src/main/java/com/ruoyi/ams/task/service/impl/WcsTaskServiceImpl.java

@@ -25,6 +25,8 @@ import com.ruoyi.base.domain.BaseLocationInfo;
 import com.ruoyi.base.service.IBaseLocationInfoService;
 import com.ruoyi.common.constant.SceneConstants;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.PageDomain;
+import com.ruoyi.common.core.page.TableSupport;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.spring.SpringUtils;
@@ -37,8 +39,10 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.lang.reflect.Method;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -113,6 +117,31 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
         return wcsTaskMapper.selectWcsTaskByTaskNo(taskNo);
     }
 
+    /**
+     * 查询AGV桶装任务列表
+     *
+     * @param wcsTask AGV任务
+     * @return AGV任务
+     */
+    @Override
+    public List<WcsTask> selectBucketWcsTaskList(WcsTask wcsTask) {
+        PageDomain pageDomain = TableSupport.buildPageRequest();
+        Integer pageNum = pageDomain.getPageNum();
+        Integer pageSize = pageDomain.getPageSize();
+        List<WcsTask> wcsTaskList = wcsTaskMapper.selectWcsTaskListVO(wcsTask);
+        if (CollectionUtil.isEmpty(wcsTaskList)) return Lists.newArrayList();
+        String bucketConfig = sysConfigService.selectConfigByKey(SceneConstants.STORAGE_BUCKET_SCENE);
+        if(StringUtils.isBlank(bucketConfig)) return Lists.newArrayList();
+        Map<String, List<Long>> bucketConfigMap = JSONObject.parseObject(bucketConfig, Map.class);
+        List<Long> locationList = new ArrayList<>();
+        bucketConfigMap.forEach((key, value) -> locationList.addAll(value));
+        List<BaseLocationInfo> baseLocationInfoByIdList = baseLocationInfoService.getBaseLocationInfoByIdList(locationList);
+        List<String> locationNoList = baseLocationInfoByIdList.stream().map(BaseLocationInfo::getLocationNo).collect(Collectors.toList());
+        return CollectionUtil.isNotEmpty(locationList) ?
+                wcsTaskList.stream().filter(item -> locationNoList.contains(item.getLocationTo())
+                        || locationNoList.contains(item.getLocationFrom())).skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList()) : wcsTaskList;
+    }
+
     /**
      * 查询AGV任务列表
      *

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

@@ -341,6 +341,15 @@ public interface IBaseLocationInfoService {
      */
     List<BaseLocationInfo> getBaseLocationInfoList(Long zoneId);
 
+    /**
+     * 根据库区场景获取当前库位信息List
+     * @param zoneIdList
+     * @author
+     */
+    List<BaseLocationInfo> getBaseLocationInfoList(List<Long> zoneIdList);
+
+    List<BaseLocationInfo> getBaseLocationInfoByIdList(List<Long> idList);
+
     /**
      *
      * @param zoneId

+ 13 - 5
warewms-base/src/main/java/com/ruoyi/base/service/impl/BaseLocationInfoServiceImpl.java

@@ -22,10 +22,7 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -524,7 +521,18 @@ public class BaseLocationInfoServiceImpl implements IBaseLocationInfoService {
 
     @Override
     public List<BaseLocationInfo> getBaseLocationInfoList(Long zoneId) {
-        return baseLocationInfoMapper.selectList(Wrappers.<BaseLocationInfo>lambdaQuery().eq(BaseLocationInfo::getZoneId, zoneId)
+        return getBaseLocationInfoList(Arrays.asList(zoneId));
+    }
+
+    @Override
+    public List<BaseLocationInfo> getBaseLocationInfoList(List<Long> zoneIdList) {
+        return baseLocationInfoMapper.selectList(Wrappers.<BaseLocationInfo>lambdaQuery().in(BaseLocationInfo::getZoneId, zoneIdList)
+                .eq(BaseLocationInfo::getWarehouseId, Constant.DEFAULT_WAREHOUSE_ID));
+    }
+
+    @Override
+    public List<BaseLocationInfo> getBaseLocationInfoByIdList(List<Long> idList) {
+        return baseLocationInfoMapper.selectList(Wrappers.<BaseLocationInfo>lambdaQuery().in(BaseLocationInfo::getId, idList)
                 .eq(BaseLocationInfo::getWarehouseId, Constant.DEFAULT_WAREHOUSE_ID));
     }