oyq28 il y a 1 an
Parent
commit
17c500e17a

+ 7 - 0
src/main/java/com/imcs/admin/business/dao/WInventoryManagementDao.java

@@ -0,0 +1,7 @@
+package com.imcs.admin.business.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.imcs.admin.entity.WInventoryManagement;
+
+public interface WInventoryManagementDao extends BaseMapper<WInventoryManagement> {
+}

+ 7 - 0
src/main/java/com/imcs/admin/business/dao/WInventoryTransactionTaskDao.java

@@ -0,0 +1,7 @@
+package com.imcs.admin.business.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.imcs.admin.entity.WInventoryTransactionTask;
+
+public interface WInventoryTransactionTaskDao extends BaseMapper<WInventoryTransactionTask> {
+}

+ 8 - 0
src/main/java/com/imcs/admin/business/dao/WInventoryTransactionTaskDetailDao.java

@@ -0,0 +1,8 @@
+package com.imcs.admin.business.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.imcs.admin.entity.WInventoryTransactionTask;
+import com.imcs.admin.entity.WInventoryTransactionTaskDetail;
+
+public interface WInventoryTransactionTaskDetailDao extends BaseMapper<WInventoryTransactionTaskDetail> {
+}

+ 7 - 0
src/main/java/com/imcs/admin/business/dao/WShelfManagementDao.java

@@ -0,0 +1,7 @@
+package com.imcs.admin.business.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.imcs.admin.entity.WShelfManagement;
+
+public interface WShelfManagementDao extends BaseMapper<WShelfManagement> {
+}

+ 14 - 0
src/main/java/com/imcs/admin/business/dao/WStorageLocationManagementDao.java

@@ -0,0 +1,14 @@
+package com.imcs.admin.business.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.imcs.admin.entity.WShelfManagement;
+import com.imcs.admin.entity.WStorageLocationManagement;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface WStorageLocationManagementDao extends BaseMapper<WStorageLocationManagement> {
+    WShelfManagement getShelfManagement(@Param("endPosition") String endPosition);
+
+    List<String> getSubStorage(@Param("locationCode") String locationCode);
+}

+ 32 - 0
src/main/java/com/imcs/admin/business/service/impl/BaseServiceImpl.java

@@ -0,0 +1,32 @@
+package com.imcs.admin.business.service.impl;
+
+import com.imcs.admin.business.dao.*;
+import com.imcs.admin.common.config.SessionContext;
+import com.imcs.admin.util.GenerateSerial;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class BaseServiceImpl {
+    @Autowired
+    public WInventoryTransactionOrdersDao ordersDao;
+    @Autowired
+    public WInventoryTransactionOrdersDetailDao ordersDetailDao;
+    @Autowired
+    public WInventoryTransactionTaskDao taskDao;
+    @Autowired
+    public WInventoryTransactionTaskDetailDao taskDetailDao;
+    @Autowired
+    public MaterialDao materialDao;
+    @Autowired
+    public GenerateSerial generateSerial;
+    @Autowired
+    public WStorageLocationManagementDao storageLocationDao;
+    @Autowired
+    public WShelfManagementDao shelfDao;
+    @Autowired
+    public WInventoryManagementDao inventoryDao;
+
+    public Long getUserId(){
+        Long userId = SessionContext.getSession().getUserId();
+        return userId;
+    }
+}

+ 107 - 9
src/main/java/com/imcs/admin/business/service/impl/OrderServiceImpl.java

@@ -1,5 +1,7 @@
 package com.imcs.admin.business.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollectionUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -7,23 +9,25 @@ import com.imcs.admin.business.dao.MaterialDao;
 import com.imcs.admin.business.dao.WInventoryTransactionOrdersDao;
 import com.imcs.admin.business.dao.WInventoryTransactionOrdersDetailDao;
 import com.imcs.admin.business.service.OrderService;
-import com.imcs.admin.entity.WInventoryTransactionOrders;
-import com.imcs.admin.entity.WMaterial;
+import com.imcs.admin.entity.*;
+import com.imcs.admin.util.GenerateSerial;
+import com.imcs.admin.util.StringUtil;
+import org.apache.commons.beanutils.BeanUtils;
+import org.bouncycastle.asn1.cms.PasswordRecipientInfo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Date;
+import java.util.List;
 
 @Transactional
 @Service
-public class OrderServiceImpl implements OrderService {
-    @Autowired
-    private WInventoryTransactionOrdersDao ordersDao;
-    @Autowired
-    private WInventoryTransactionOrdersDetailDao ordersDetailDao;
-    @Autowired
-    private MaterialDao materialDao;
+public class OrderServiceImpl extends BaseServiceImpl implements OrderService {
+
+
     @Override
     public Page getInList(Page page) {
         LambdaQueryWrapper<WInventoryTransactionOrders> wrapper = Wrappers.lambdaQuery(WInventoryTransactionOrders.class).eq(WInventoryTransactionOrders::getInOutType,2);
@@ -40,6 +44,100 @@ public class OrderServiceImpl implements OrderService {
         //入库单 save
         saveOrder(orders);
 
+        //入库任务 save
+        saveOrderTask(orders);
+
+        //获取目标库位
+        getEndPosition(orders);
+
+        //生成 移库 子任务
+        createSubTask(orders.getEndPosition());
+    }
+
+    private void createSubTask(String endPosition) {
+        //判断是否需要移库
+        if(checkStorageRelocation(endPosition)){
+
+
+
+
+        }
+
+    }
+
+    private Boolean checkStorageRelocation(String endPosition) {
+        WShelfManagement shelfManagement = storageLocationDao.getShelfManagement(endPosition);
+        Integer inOut = shelfManagement.getInOut();
+        //内侧不需要移库
+        if(inOut == 1){
+            return false;
+        }else if(inOut == 2){
+
+            //find 同一个区域的货架
+            LambdaQueryWrapper<WShelfManagement> wrapper = Wrappers.lambdaQuery(WShelfManagement.class)
+                    .eq(WShelfManagement::getArea,shelfManagement.getArea())
+                    .ne(WShelfManagement::getShelfCode,shelfManagement.getShelfCode());
+            WShelfManagement wShelfManagement = shelfDao.selectOne(wrapper);
+
+            //定位到同一层 同高度
+            String result = endPosition.substring(endPosition.indexOf("-") + 1);
+
+            //不确定需要 移库的库位
+            String other=wShelfManagement.getShelfCode()+"-"+result;
+
+            //找小库位
+            List<String> subStorage = storageLocationDao.getSubStorage(other);
+
+            subStorage.add(other);
+
+            LambdaQueryWrapper<WInventoryManagement> inventoryWrapper = Wrappers.lambdaQuery(WInventoryManagement.class)
+                    .in(WInventoryManagement::getStorageLocationCode,subStorage);
+
+            //如果目标库位的内侧库位存在托盘阻挡,则需要移库
+            List<WInventoryManagement> wInventoryManagements = inventoryDao.selectList(inventoryWrapper);
+
+            if(CollectionUtil.isNotEmpty(wInventoryManagements)){
+
+            }
+        }
+        return false;
+    }
+
+    private void getEndPosition(WInventoryTransactionOrders orders) {
+
+    }
+
+    private void saveOrderTask(WInventoryTransactionOrders orders) {
+        //入库任务
+
+        WInventoryTransactionTask.WInventoryTransactionTaskBuilder inTask = WInventoryTransactionTask.builder().taskCode(generateSerial.generateSerialNumber("inTask"))
+                .startPosition(orders.getStartPosition())
+                //TODO
+                .endPosition(orders.getEndPosition())
+                .vectorCode(orders.getVectorCode())
+                .status(0)
+                .taskType(2)
+                .startTime(new Date())
+                .createdAt(new Date())
+                .createdBy(getUserId());
+        int insert = taskDao.insert(inTask.build());
+
+        //入库任务详情
+        orders.getDetailList().forEach(vo->{
+            WInventoryTransactionTaskDetail taskDetail=new WInventoryTransactionTaskDetail();
+            taskDetail.setInventoryTransactionTaskId(Long.valueOf(insert));
+            try {
+                BeanUtils.copyProperties(taskDetail,vo);
+            } catch (InvocationTargetException | IllegalAccessException e) {
+                throw new RuntimeException("转换异常");
+            }
+            taskDetail.setCreatedAt(new Date());
+            taskDetail.setCreatedBy(getUserId());
+            taskDetail.setAmount(vo.getRealAmount());
+            taskDetailDao.insert(taskDetail);
+        });
+
+        //判断目标库是否需要
 
     }
 

+ 84 - 0
src/main/java/com/imcs/admin/entity/WInventoryTransactionChildTask.java

@@ -0,0 +1,84 @@
+package com.imcs.admin.entity;
+
+import java.util.Date;
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+/**
+ * 出入库子任务(WInventoryTransactionChildTask)实体类
+ *
+ * @author wds
+ * @since 2024-05-07 08:50:45
+ */
+@Data
+@TableName(value = "w_inventory_transaction_child_task")
+public class WInventoryTransactionChildTask implements Serializable {
+    private static final long serialVersionUID = -78873586660411182L;
+/**
+     * 主键
+     */
+    private Long id;
+/**
+     * 出入库任务ID
+     */
+    private Long wInventoryTransactionTaskId;
+/**
+     * 出入库子任务编码
+     */
+    private String childTaskCode;
+/**
+     * 开始位置
+     */
+    private String startPosition;
+/**
+     * 结束位置
+     */
+    private String endPosition;
+/**
+     * 托盘或料盒编码
+     */
+    private String vectorCode;
+/**
+     * 异常原因
+     */
+    private String errorInfo;
+/**
+     * 状态(待执行:0  执行中:1  完成:2  异常:4  取消:-1)
+     */
+    private Integer status;
+/**
+     * 任务类型(1 出库 2 入库  3 移库)
+     */
+    private Integer childTaskType;
+/**
+     * 开始时间
+     */
+    private Date startTime;
+/**
+     * 结束日期
+     */
+    private Date endTime;
+/**
+     * 备注
+     */
+    private String remarks;
+/**
+     * 创建时间
+     */
+    private Date createdAt;
+/**
+     * 创建人
+     */
+    private Long createdBy;
+/**
+     * 修改时间
+     */
+    private Date updatedAt;
+/**
+     * 修改人
+     */
+    private Long updatedBy;
+
+
+}
+

+ 9 - 0
src/main/java/com/imcs/admin/entity/WInventoryTransactionOrders.java

@@ -89,5 +89,14 @@ public class WInventoryTransactionOrders implements Serializable {
     private Integer updatedBy;
 
     List<WInventoryTransactionOrdersDetail> detailList;
+
+
+    /**
+     * 非数据库字段
+     */
+
+    private String startPosition;//开始库位
+    private String endPosition;//目标库位
+    private String vectorCode;//载体托盘或料盒编码
 }
 

+ 4 - 2
src/main/java/com/imcs/admin/entity/WInventoryTransactionTask.java

@@ -3,6 +3,7 @@ package com.imcs.admin.entity;
 import java.util.Date;
 import java.io.Serializable;
 import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Builder;
 import lombok.Data;
 /**
  * 出入库任务(WInventoryTransactionTask)实体类
@@ -11,6 +12,7 @@ import lombok.Data;
  * @since 2024-05-06 14:29:11
  */
 @Data
+@Builder
 @TableName(value = "w_inventory_transaction_task")
 public class WInventoryTransactionTask implements Serializable {
     private static final long serialVersionUID = 353494033918654712L;
@@ -69,7 +71,7 @@ public class WInventoryTransactionTask implements Serializable {
 /**
      * 创建人
      */
-    private Integer createdBy;
+    private Long createdBy;
 /**
      * 修改时间
      */
@@ -77,7 +79,7 @@ public class WInventoryTransactionTask implements Serializable {
 /**
      * 修改人
      */
-    private Integer updatedBy;
+    private Long updatedBy;
 
 
 }

+ 2 - 2
src/main/java/com/imcs/admin/entity/WInventoryTransactionTaskDetail.java

@@ -65,7 +65,7 @@ public class WInventoryTransactionTaskDetail implements Serializable {
 /**
      * 创建人
      */
-    private Integer createdBy;
+    private Long createdBy;
 /**
      * 修改时间
      */
@@ -73,7 +73,7 @@ public class WInventoryTransactionTaskDetail implements Serializable {
 /**
      * 修改人
      */
-    private Integer updatedBy;
+    private Long updatedBy;
 
 
 }

+ 64 - 0
src/main/java/com/imcs/admin/entity/WShelfManagement.java

@@ -0,0 +1,64 @@
+package com.imcs.admin.entity;
+
+import java.util.Date;
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+/**
+ * 货架管理(WShelfManagement)实体类
+ *
+ * @author wds
+ * @since 2024-05-07 09:43:52
+ */
+@Data
+@TableName(value = "w_shelf_management")
+public class WShelfManagement implements Serializable {
+    private static final long serialVersionUID = -54719869568702090L;
+/**
+     * 主键
+     */
+    private Long id;
+/**
+     * 货架编号
+     */
+    private String shelfCode;
+/**
+     * 货架名称
+     */
+    private String shelfName;
+/**
+     * 库房管理id
+     */
+    private Long warehouseManagementId;
+/**
+     * seq
+     */
+    private Integer seq;
+/**
+     * null
+     */
+    private Date createdAt;
+/**
+     * null
+     */
+    private Integer createdBy;
+/**
+     * null
+     */
+    private Date updatedAt;
+/**
+     * null
+     */
+    private Integer updatedBy;
+/**
+     * 内侧/外侧
+     */
+    private Integer inOut;
+/**
+     * 内侧/外侧
+     */
+    private Integer area;
+
+
+}
+

+ 55 - 0
src/main/java/com/imcs/admin/entity/WStorageLocationManagement.java

@@ -0,0 +1,55 @@
+package com.imcs.admin.entity;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+/**
+ * 库位管理(WStorageLocationManagement)实体类
+ *
+ * @author wds
+ * @since 2024-05-07 09:35:17
+ */
+@Data
+@TableName(value = "w_storage_location_management")
+public class WStorageLocationManagement implements Serializable {
+    private static final long serialVersionUID = 245929403256007840L;
+/**
+     * 主键
+     */
+    private Long id;
+/**
+     * 库位编号
+     */
+    private String locationCode;
+/**
+     * 库位名称
+     */
+    private String locationName;
+/**
+     * 库位状态
+     */
+    private String status;
+/**
+     * 存储位置最大承重
+     */
+    private String maxLoad;
+/**
+     * 点位
+     */
+    private String point;
+/**
+     * 货架管理id
+     */
+    private Long shelfManagementId;
+/**
+     * seq
+     */
+    private String seq;
+/**
+     * 托盘类型
+     */
+    private Integer palletType;
+
+
+}
+

+ 47 - 0
src/main/java/com/imcs/admin/entity/WWarehouseManagement.java

@@ -0,0 +1,47 @@
+package com.imcs.admin.entity;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+/**
+ * 库房管理(WWarehouseManagement)实体类
+ *
+ * @author wds
+ * @since 2024-05-07 15:09:40
+ */
+@Data
+@TableName(value = "w_warehouse_management")
+public class WWarehouseManagement implements Serializable {
+    private static final long serialVersionUID = 526628245019276817L;
+/**
+     * 主键
+     */
+    private Long id;
+/**
+     * 库房编号
+     */
+    private String warehouseCode;
+/**
+     * 库房名称
+     */
+    private String warehouseName;
+/**
+     * 库房类型(立库/平库)
+     */
+    private Integer warehouseType;
+/**
+     * 仓库面积
+     */
+    private String warehouseArea;
+/**
+     * 仓库负责人
+     */
+    private String warehouseManager;
+/**
+     * 联系电话
+     */
+    private String contactNumber;
+
+
+}
+

+ 14 - 0
src/main/resources/mapper/WStorageLocationDao.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.imcs.admin.business.dao.WStorageLocationManagementDao">
+
+    <select id="getShelfManagement" parameterType="String" resultType="com.imcs.admin.entity.WShelfManagement">
+        select shelf.* from w_storage_location_management loca
+            left join w_shelf_management shelf on loca.shelf_management_id=shelf.id
+        where loca.location_code = #{endPosition}
+    </select>
+
+    <select id="getSubStorage" resultType="String">
+        select location_code from w_storage_location_management where parent_id=(select id from w_storage_location_management where location_code=#{locationCode})
+    </select>
+</mapper>