Browse Source

出库单 任务执行 任务创建

oyq28 1 năm trước cách đây
mục cha
commit
60720837ba

+ 84 - 0
src/main/java/com/imcs/admin/business/controller/WInventoryTransactionTaskController.java

@@ -0,0 +1,84 @@
+package com.imcs.admin.business.controller;
+
+import com.imcs.admin.business.service.WInventoryTransactionTaskService;
+import com.imcs.admin.entity.WInventoryTransactionTask;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * 出入库任务(WInventoryTransactionTask)表控制层
+ *
+ * @author wds
+ * @since 2024-05-27 13:04:45
+ */
+@RestController
+@RequestMapping("wInventoryTransactionTask")
+public class WInventoryTransactionTaskController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private WInventoryTransactionTaskService wInventoryTransactionTaskService;
+
+    /**
+     * 分页查询
+     *
+     * @param wInventoryTransactionTask 筛选条件
+     * @param pageRequest      分页对象
+     * @return 查询结果
+     */
+    @GetMapping
+    public ResponseEntity<Page<WInventoryTransactionTask>> queryByPage(WInventoryTransactionTask wInventoryTransactionTask, PageRequest pageRequest) {
+        return ResponseEntity.ok(this.wInventoryTransactionTaskService.queryByPage(wInventoryTransactionTask, pageRequest));
+    }
+
+    /**
+     * 通过主键查询单条数据
+     *
+     * @param id 主键
+     * @return 单条数据
+     */
+    @GetMapping("{id}")
+    public ResponseEntity<WInventoryTransactionTask> queryById(@PathVariable("id") Long id) {
+        return ResponseEntity.ok(this.wInventoryTransactionTaskService.queryById(id));
+    }
+
+    /**
+     * 新增数据
+     *
+     * @param wInventoryTransactionTask 实体
+     * @return 新增结果
+     */
+    @PostMapping
+    public ResponseEntity<WInventoryTransactionTask> add(WInventoryTransactionTask wInventoryTransactionTask) {
+        return ResponseEntity.ok(this.wInventoryTransactionTaskService.insert(wInventoryTransactionTask));
+    }
+
+    /**
+     * 编辑数据
+     *
+     * @param wInventoryTransactionTask 实体
+     * @return 编辑结果
+     */
+    @PutMapping
+    public ResponseEntity<WInventoryTransactionTask> edit(WInventoryTransactionTask wInventoryTransactionTask) {
+        return ResponseEntity.ok(this.wInventoryTransactionTaskService.update(wInventoryTransactionTask));
+    }
+
+    /**
+     * 删除数据
+     *
+     * @param id 主键
+     * @return 删除是否成功
+     */
+    @DeleteMapping
+    public ResponseEntity<Boolean> deleteById(Long id) {
+        return ResponseEntity.ok(this.wInventoryTransactionTaskService.deleteById(id));
+    }
+
+}
+

+ 5 - 0
src/main/java/com/imcs/admin/business/controller/WStorageLocationManagementController.java

@@ -24,6 +24,11 @@ public class WStorageLocationManagementController {
     @Resource
     private WStorageLocationManagementService wStorageLocationManagementService;
 
+    /**
+     * 空托盘 、托盘 出库
+     * @param endPosition
+     * @return
+     */
     @GetMapping("/getPalletCode/{endPosition}")
     public Result getPalletCode(@PathVariable String endPosition){
         return Result.success(wStorageLocationManagementService.getPalletCode(endPosition));

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

@@ -2,6 +2,83 @@ package com.imcs.admin.business.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.imcs.admin.entity.WInventoryTransactionTask;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.data.domain.Pageable;
+import java.util.List;
 
+/**
+ * 出入库任务(WInventoryTransactionTask)表数据库访问层
+ *
+ * @author wds
+ * @since 2024-05-27 13:06:47
+ */
 public interface WInventoryTransactionTaskDao extends BaseMapper<WInventoryTransactionTask> {
+
+    /**
+     * 通过ID查询单条数据
+     *
+     * @param id 主键
+     * @return 实例对象
+     */
+    WInventoryTransactionTask queryById(Long id);
+
+    /**
+     * 查询指定行数据
+     *
+     * @param wInventoryTransactionTask 查询条件
+     * @param pageable         分页对象
+     * @return 对象列表
+     */
+    List<WInventoryTransactionTask> queryAllByLimit(WInventoryTransactionTask wInventoryTransactionTask, @Param("pageable") Pageable pageable);
+
+    /**
+     * 统计总行数
+     *
+     * @param wInventoryTransactionTask 查询条件
+     * @return 总行数
+     */
+    long count(WInventoryTransactionTask wInventoryTransactionTask);
+
+    /**
+     * 新增数据
+     *
+     * @param wInventoryTransactionTask 实例对象
+     * @return 影响行数
+     */
+    int insert(WInventoryTransactionTask wInventoryTransactionTask);
+
+    /**
+     * 批量新增数据(MyBatis原生foreach方法)
+     *
+     * @param entities List<WInventoryTransactionTask> 实例对象列表
+     * @return 影响行数
+     */
+    int insertBatch(@Param("entities") List<WInventoryTransactionTask> entities);
+
+    /**
+     * 批量新增或按主键更新数据(MyBatis原生foreach方法)
+     *
+     * @param entities List<WInventoryTransactionTask> 实例对象列表
+     * @return 影响行数
+     * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参
+     */
+    int insertOrUpdateBatch(@Param("entities") List<WInventoryTransactionTask> entities);
+
+    /**
+     * 修改数据
+     *
+     * @param wInventoryTransactionTask 实例对象
+     * @return 影响行数
+     */
+    int update(WInventoryTransactionTask wInventoryTransactionTask);
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param id 主键
+     * @return 影响行数
+     */
+    int deleteById(Long id);
+
 }
+

+ 56 - 0
src/main/java/com/imcs/admin/business/service/WInventoryTransactionTaskService.java

@@ -0,0 +1,56 @@
+package com.imcs.admin.business.service;
+
+import com.imcs.admin.entity.WInventoryTransactionTask;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+
+/**
+ * 出入库任务(WInventoryTransactionTask)表服务接口
+ *
+ * @author wds
+ * @since 2024-05-27 13:04:45
+ */
+public interface WInventoryTransactionTaskService {
+
+    /**
+     * 通过ID查询单条数据
+     *
+     * @param id 主键
+     * @return 实例对象
+     */
+    WInventoryTransactionTask queryById(Long id);
+
+    /**
+     * 分页查询
+     *
+     * @param wInventoryTransactionTask 筛选条件
+     * @param pageRequest      分页对象
+     * @return 查询结果
+     */
+    Page<WInventoryTransactionTask> queryByPage(WInventoryTransactionTask wInventoryTransactionTask, PageRequest pageRequest);
+
+    /**
+     * 新增数据
+     *
+     * @param wInventoryTransactionTask 实例对象
+     * @return 实例对象
+     */
+    WInventoryTransactionTask insert(WInventoryTransactionTask wInventoryTransactionTask);
+
+    /**
+     * 修改数据
+     *
+     * @param wInventoryTransactionTask 实例对象
+     * @return 实例对象
+     */
+    WInventoryTransactionTask update(WInventoryTransactionTask wInventoryTransactionTask);
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param id 主键
+     * @return 是否成功
+     */
+    boolean deleteById(Long id);
+
+}

+ 125 - 0
src/main/java/com/imcs/admin/business/service/impl/WInventoryTransactionTaskServiceImpl.java

@@ -0,0 +1,125 @@
+package com.imcs.admin.business.service.impl;
+
+import com.imcs.admin.business.constants.Status;
+import com.imcs.admin.business.service.WInventoryTransactionTaskService;
+import com.imcs.admin.common.Result;
+import com.imcs.admin.entity.Dic;
+import com.imcs.admin.entity.WInventoryTransactionChildTask;
+import com.imcs.admin.entity.WInventoryTransactionTask;
+import com.imcs.admin.entity.WInventoryTransactionTaskDetail;
+import com.imcs.admin.entity.assemble.PolicyResult;
+import com.imcs.admin.entity.query.PolicyQuery;
+import org.springframework.stereotype.Service;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 出入库任务(WInventoryTransactionTask)表服务实现类
+ *
+ * @author wds
+ * @since 2024-05-27 13:04:45
+ */
+@Service("wInventoryTransactionTaskService")
+public class WInventoryTransactionTaskServiceImpl extends BaseServiceImpl implements WInventoryTransactionTaskService {
+
+    /**
+     * 通过ID查询单条数据
+     *
+     * @param id 主键
+     * @return 实例对象
+     */
+    @Override
+    public WInventoryTransactionTask queryById(Long id) {
+        return this.taskDao.queryById(id);
+    }
+
+    /**
+     * 分页查询
+     *
+     * @param wInventoryTransactionTask 筛选条件
+     * @param pageRequest      分页对象
+     * @return 查询结果
+     */
+    @Override
+    public Page<WInventoryTransactionTask> queryByPage(WInventoryTransactionTask wInventoryTransactionTask, PageRequest pageRequest) {
+        long total = this.taskDao.count(wInventoryTransactionTask);
+        return new PageImpl<>(this.taskDao.queryAllByLimit(wInventoryTransactionTask, pageRequest), pageRequest, total);
+    }
+
+    /**
+     * 新增数据
+     *
+     * @param wInventoryTransactionTask 实例对象
+     * @return 实例对象
+     */
+    @Override
+    public WInventoryTransactionTask insert(WInventoryTransactionTask wInventoryTransactionTask) {
+        //this.taskDao.insert(wInventoryTransactionTask);
+        //获取大小托盘类型
+        Dic entryPointPalletType = dicDao.getListByLabel("entryPointPalletType", wInventoryTransactionTask.getStartPosition());
+
+        PolicyQuery policyQuery = createPolicyQuery(Integer.valueOf(entryPointPalletType.getValue()),null);
+        Result importPolicy = importOrExportPolicyService.findImportPolicy(policyQuery);
+        if(importPolicy.getData() == null){
+            throw new RuntimeException("无可用库位,请联系管理员!");
+        }
+        PolicyResult policyResult = (PolicyResult)importPolicy.getData();
+        String locationCode = policyResult.getLocationCode();
+        wInventoryTransactionTask.setEndPosition(locationCode);
+        wInventoryTransactionTask.setTaskCode(generateSerial.generateSerialNumber("outTask"));
+        wInventoryTransactionTask.setCreatedAt(new Date());
+        wInventoryTransactionTask.setCreatedBy(getUserId());
+        taskDao.insert(wInventoryTransactionTask);
+        Long id = wInventoryTransactionTask.getId();
+        wInventoryTransactionTask.getDetailList().forEach(vo->{
+            WInventoryTransactionTaskDetail taskDetail=new WInventoryTransactionTaskDetail();
+
+            taskDetail.setBatchNo(vo.getBatchNo());
+            taskDetail.setUnit(vo.getUnit());
+            taskDetail.setExpirationDate(vo.getExpirationDate());
+            taskDetail.setProductionDate(vo.getProductionDate());
+            taskDetail.setMaterialCode(vo.getMaterialCode());
+            taskDetail.setMaterialName(vo.getMaterialName());
+            taskDetail.setInventoryTransactionTaskId(id);
+            taskDetail.setStatus(0);
+            taskDetail.setCreatedAt(new Date());
+            taskDetail.setCreatedBy(getUserId());
+            taskDetail.setAmount(vo.getAmount());
+            taskDetailDao.insert(taskDetail);
+        });
+        List<WInventoryTransactionChildTask> subList=new ArrayList<>();
+        createSubTask(locationCode, subList, id, Status.MOVE.getCode());
+        //保存移库子任务
+        saveSubTask(subList,null);
+        return wInventoryTransactionTask;
+    }
+
+    /**
+     * 修改数据
+     *
+     * @param wInventoryTransactionTask 实例对象
+     * @return 实例对象
+     */
+    @Override
+    public WInventoryTransactionTask update(WInventoryTransactionTask wInventoryTransactionTask) {
+        this.taskDao.update(wInventoryTransactionTask);
+        return this.queryById(wInventoryTransactionTask.getId());
+    }
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param id 主键
+     * @return 是否成功
+     */
+    @Override
+    public boolean deleteById(Long id) {
+        return this.taskDao.deleteById(id) > 0;
+    }
+}

+ 10 - 2
src/main/java/com/imcs/admin/business/service/impl/WStorageLocationManagementServiceImpl.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.imcs.admin.business.constants.Status;
 import com.imcs.admin.business.service.WStorageLocationManagementService;
 import com.imcs.admin.entity.*;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -27,9 +28,14 @@ public class WStorageLocationManagementServiceImpl extends BaseServiceImpl imple
 
     @Override
     public String getPalletCode(String endPosition) {
-        //TODO
-        //获取空托盘 库位
+        //空托盘出库
         String storageLocationCode="";
+        if(StringUtils.isBlank(endPosition)){
+            //TODO
+            //获取空托盘 库位
+            //storageLocationCode
+        }
+
 
         //根据库位 查 托盘编码
         LambdaQueryWrapper<WInventoryManagement> wrapper = Wrappers.lambdaQuery(WInventoryManagement.class).eq(WInventoryManagement::getStorageLocationCode,storageLocationCode);
@@ -41,6 +47,8 @@ public class WStorageLocationManagementServiceImpl extends BaseServiceImpl imple
         //创建托盘出库任务
         wInventoryTransactionTask.setTaskCode(generateSerial.generateSerialNumber("inTask"));
         wInventoryTransactionTask.setStartPosition(storageLocationCode);
+
+        //也可以根据分配的库位来确定目的地 (前提是要区分大小出库口,如果出库口都一样,则前端必须选择出入库口)
         wInventoryTransactionTask.setEndPosition(endPosition);
         wInventoryTransactionTask.setVectorCode(palletCode);
         wInventoryTransactionTask.setStatus(0);

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

@@ -2,8 +2,10 @@ package com.imcs.admin.entity;
 
 import java.util.Date;
 import java.io.Serializable;
+import java.util.List;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Builder;
@@ -84,6 +86,8 @@ public class WInventoryTransactionTask implements Serializable {
      */
     private Long updatedBy;
 
+    @TableField(exist = false)
+    private List<WInventoryTransactionTaskDetail> detailList;
 
 }
 

+ 229 - 0
src/main/resources/mapper/WInventoryTransactionTaskDao.xml

@@ -0,0 +1,229 @@
+<?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.WInventoryTransactionTaskDao">
+
+    <resultMap type="com.imcs.admin.entity.WInventoryTransactionTask" id="WInventoryTransactionTaskMap">
+        <result property="id" column="id" jdbcType="INTEGER"/>
+        <result property="wInventoryTransactionOrdersId" column="w_inventory_transaction_orders_id" jdbcType="INTEGER"/>
+        <result property="taskCode" column="task_code" jdbcType="VARCHAR"/>
+        <result property="startPosition" column="start_position" jdbcType="VARCHAR"/>
+        <result property="endPosition" column="end_position" jdbcType="VARCHAR"/>
+        <result property="vectorCode" column="vector_code" jdbcType="VARCHAR"/>
+        <result property="errorInfo" column="error_info" jdbcType="VARCHAR"/>
+        <result property="status" column="status" jdbcType="INTEGER"/>
+        <result property="taskType" column="task_type" jdbcType="INTEGER"/>
+        <result property="startTime" column="start_time" jdbcType="TIMESTAMP"/>
+        <result property="endTime" column="end_time" jdbcType="TIMESTAMP"/>
+        <result property="remarks" column="remarks" jdbcType="VARCHAR"/>
+        <result property="createdAt" column="created_at" jdbcType="TIMESTAMP"/>
+        <result property="createdBy" column="created_by" jdbcType="INTEGER"/>
+        <result property="updatedAt" column="updated_at" jdbcType="TIMESTAMP"/>
+        <result property="updatedBy" column="updated_by" jdbcType="INTEGER"/>
+    </resultMap>
+
+    <!--查询单个-->
+    <select id="queryById" resultMap="WInventoryTransactionTaskMap">
+        select
+            *
+        from w_inventory_transaction_task
+        where id = #{id}
+    </select>
+
+    <!--查询指定行数据-->
+    <select id="queryAllByLimit" resultMap="WInventoryTransactionTaskMap">
+        select
+        *
+        from w_inventory_transaction_task
+        <where>
+            <if test="id != null">
+                and id = #{id}
+            </if>
+            <if test="wInventoryTransactionOrdersId != null">
+                and w_inventory_transaction_orders_id = #{wInventoryTransactionOrdersId}
+            </if>
+            <if test="taskCode != null and taskCode != ''">
+                and task_code = #{taskCode}
+            </if>
+            <if test="startPosition != null and startPosition != ''">
+                and start_position = #{startPosition}
+            </if>
+            <if test="endPosition != null and endPosition != ''">
+                and end_position = #{endPosition}
+            </if>
+            <if test="vectorCode != null and vectorCode != ''">
+                and vector_code = #{vectorCode}
+            </if>
+            <if test="errorInfo != null and errorInfo != ''">
+                and error_info = #{errorInfo}
+            </if>
+            <if test="status != null">
+                and status = #{status}
+            </if>
+            <if test="taskType != null">
+                and task_type = #{taskType}
+            </if>
+            <if test="startTime != null">
+                and start_time = #{startTime}
+            </if>
+            <if test="endTime != null">
+                and end_time = #{endTime}
+            </if>
+            <if test="remarks != null and remarks != ''">
+                and remarks = #{remarks}
+            </if>
+            <if test="createdAt != null">
+                and created_at = #{createdAt}
+            </if>
+            <if test="createdBy != null">
+                and created_by = #{createdBy}
+            </if>
+            <if test="updatedAt != null">
+                and updated_at = #{updatedAt}
+            </if>
+            <if test="updatedBy != null">
+                and updated_by = #{updatedBy}
+            </if>
+        </where>
+        limit #{pageable.offset}, #{pageable.pageSize}
+    </select>
+
+    <!--统计总行数-->
+    <select id="count" resultType="java.lang.Long">
+        select count(1)
+        from w_inventory_transaction_task
+        <where>
+            <if test="id != null">
+                and id = #{id}
+            </if>
+            <if test="wInventoryTransactionOrdersId != null">
+                and w_inventory_transaction_orders_id = #{wInventoryTransactionOrdersId}
+            </if>
+            <if test="taskCode != null and taskCode != ''">
+                and task_code = #{taskCode}
+            </if>
+            <if test="startPosition != null and startPosition != ''">
+                and start_position = #{startPosition}
+            </if>
+            <if test="endPosition != null and endPosition != ''">
+                and end_position = #{endPosition}
+            </if>
+            <if test="vectorCode != null and vectorCode != ''">
+                and vector_code = #{vectorCode}
+            </if>
+            <if test="errorInfo != null and errorInfo != ''">
+                and error_info = #{errorInfo}
+            </if>
+            <if test="status != null">
+                and status = #{status}
+            </if>
+            <if test="taskType != null">
+                and task_type = #{taskType}
+            </if>
+            <if test="startTime != null">
+                and start_time = #{startTime}
+            </if>
+            <if test="endTime != null">
+                and end_time = #{endTime}
+            </if>
+            <if test="remarks != null and remarks != ''">
+                and remarks = #{remarks}
+            </if>
+            <if test="createdAt != null">
+                and created_at = #{createdAt}
+            </if>
+            <if test="createdBy != null">
+                and created_by = #{createdBy}
+            </if>
+            <if test="updatedAt != null">
+                and updated_at = #{updatedAt}
+            </if>
+            <if test="updatedBy != null">
+                and updated_by = #{updatedBy}
+            </if>
+        </where>
+    </select>
+
+    <!--新增所有列-->
+    <insert id="insert" keyProperty="id" useGeneratedKeys="true">
+        insert into w_inventory_transaction_task(w_inventory_transaction_orders_idtask_codestart_positionend_positionvector_codeerror_infostatustask_typestart_timeend_timeremarkscreated_atcreated_byupdated_atupdated_by)
+        values (#{wInventoryTransactionOrdersId}#{taskCode}#{startPosition}#{endPosition}#{vectorCode}#{errorInfo}#{status}#{taskType}#{startTime}#{endTime}#{remarks}#{createdAt}#{createdBy}#{updatedAt}#{updatedBy})
+    </insert>
+
+    <insert id="insertBatch" keyProperty="id" useGeneratedKeys="true">
+        insert into w_inventory_transaction_task(w_inventory_transaction_orders_idtask_codestart_positionend_positionvector_codeerror_infostatustask_typestart_timeend_timeremarkscreated_atcreated_byupdated_atupdated_by)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+        (#{entity.wInventoryTransactionOrdersId}#{entity.taskCode}#{entity.startPosition}#{entity.endPosition}#{entity.vectorCode}#{entity.errorInfo}#{entity.status}#{entity.taskType}#{entity.startTime}#{entity.endTime}#{entity.remarks}#{entity.createdAt}#{entity.createdBy}#{entity.updatedAt}#{entity.updatedBy})
+        </foreach>
+    </insert>
+
+    <insert id="insertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
+        insert into w_inventory_transaction_task(w_inventory_transaction_orders_idtask_codestart_positionend_positionvector_codeerror_infostatustask_typestart_timeend_timeremarkscreated_atcreated_byupdated_atupdated_by)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.wInventoryTransactionOrdersId}#{entity.taskCode}#{entity.startPosition}#{entity.endPosition}#{entity.vectorCode}#{entity.errorInfo}#{entity.status}#{entity.taskType}#{entity.startTime}#{entity.endTime}#{entity.remarks}#{entity.createdAt}#{entity.createdBy}#{entity.updatedAt}#{entity.updatedBy})
+        </foreach>
+        on duplicate key update
+w_inventory_transaction_orders_id = values(w_inventory_transaction_orders_id)task_code = values(task_code)start_position = values(start_position)end_position = values(end_position)vector_code = values(vector_code)error_info = values(error_info)status = values(status)task_type = values(task_type)start_time = values(start_time)end_time = values(end_time)remarks = values(remarks)created_at = values(created_at)created_by = values(created_by)updated_at = values(updated_at)updated_by = values(updated_by)
+    </insert>
+
+    <!--通过主键修改数据-->
+    <update id="update">
+        update w_inventory_transaction_task
+        <set>
+            <if test="wInventoryTransactionOrdersId != null">
+                w_inventory_transaction_orders_id = #{wInventoryTransactionOrdersId},
+            </if>
+            <if test="taskCode != null and taskCode != ''">
+                task_code = #{taskCode},
+            </if>
+            <if test="startPosition != null and startPosition != ''">
+                start_position = #{startPosition},
+            </if>
+            <if test="endPosition != null and endPosition != ''">
+                end_position = #{endPosition},
+            </if>
+            <if test="vectorCode != null and vectorCode != ''">
+                vector_code = #{vectorCode},
+            </if>
+            <if test="errorInfo != null and errorInfo != ''">
+                error_info = #{errorInfo},
+            </if>
+            <if test="status != null">
+                status = #{status},
+            </if>
+            <if test="taskType != null">
+                task_type = #{taskType},
+            </if>
+            <if test="startTime != null">
+                start_time = #{startTime},
+            </if>
+            <if test="endTime != null">
+                end_time = #{endTime},
+            </if>
+            <if test="remarks != null and remarks != ''">
+                remarks = #{remarks},
+            </if>
+            <if test="createdAt != null">
+                created_at = #{createdAt},
+            </if>
+            <if test="createdBy != null">
+                created_by = #{createdBy},
+            </if>
+            <if test="updatedAt != null">
+                updated_at = #{updatedAt},
+            </if>
+            <if test="updatedBy != null">
+                updated_by = #{updatedBy},
+            </if>
+        </set>
+        where id = #{id}
+    </update>
+
+    <!--通过主键删除-->
+    <delete id="deleteById">
+        delete from w_inventory_transaction_task where id = #{id}
+    </delete>
+
+</mapper>
+

+ 189 - 9
src/main/resources/static/wms/out/index.html

@@ -138,7 +138,32 @@
                     title="执行出库"
                     :visible.sync="dialogVisibleTask"
                     :before-close="handleCloseTask" width="80%">
-                    <div class="table-container" style="margin-bottom: 80px;">
+                <el-form :inline="true" :model="formInline" class="demo-form-inline">
+                    <el-form-item label="入库口">
+                        <el-select v-model="entryPoint" placeholder="请选择">
+                            <el-option
+                                    v-for="item in options"
+                                    :key="item.value"
+                                    :label="item.label"
+                                    :value="item.value">
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item>
+                        <el-input type="text" v-model="palletCode" placeholder="托盘编码" style="width: 100px;" :disabled="true"></el-input>
+                    </el-form-item>
+                    <el-form-item>
+                        <el-input type="text" v-model="binCode" placeholder="料箱编码" style="width: 100px;" :disabled="true"></el-input>
+                    </el-form-item>
+                    <el-form-item>
+                        <el-input type="text" v-model="inputCode" placeholder="扫码顺序 托盘 >  物料编码" @change="handleScan()" style="width: 300px" ></el-input>
+                    </el-form-item>
+                    </el-form-item>
+                    <el-form-item>
+                        <el-button type="primary" @click="outSubmit()" :disabled="isViewMode">托盘回库</el-button>
+                    </el-form-item>
+                </el-form>
+                    <div class="table-container" style="margin-bottom: 80px;margin-top: 20px;">
                         <div class="table-wrapper">
                             <div class="table-title">需求明细</div>
                             <el-table ref="singleTable" :data="detailListTask" v-loading="loading" :border=true label="需求明细"
@@ -203,20 +228,28 @@
                         </div>
 
                         <div class="table-wrapper">
-                            <div class="table-title" style="top: -50px">
+                            <div class="table-title">
                                 <span>出库明细</span>
-                                 <el-input type="text" v-model="palletCode" placeholder="托盘编码" :disabled="true" style="width: 100px;margin-left:10px"></el-input>
-                                <el-input type="text" v-model="inputCode" placeholder="扫码顺序 托盘 >  物料编码" @keydown.enter="handleScan()" style="width: 300px;margin-left:10px" ></el-input>
-                                <el-button type="primary" @click="outSubmit()" :disabled="isViewMode">托盘回库</el-button>
+                                 <!--<el-input type="text" v-model="palletCode" placeholder="托盘编码" :disabled="true" style="width: 100px;margin-left:10px"></el-input>
+                                <el-input type="text" v-model="inputCode" placeholder="扫码顺序 托盘 >  物料编码" @change="handleScan()" style="width: 300px;margin-left:10px" ></el-input>
+                                <el-button type="primary" @click="outSubmit()" :disabled="isViewMode">托盘回库</el-button>-->
                             </div>
                             <el-table ref="singleTable" :data="detailListOut" v-loading="loading" :border=true label="库存明细"
                                       tooltip-effect="dark"
                                       highlight-current-row max-height="500" style="width: 100%;"
-                                      :default-sort="{prop: 'createDate', order: 'descending'}"
+                                      :default-sort="{prop: 'createDate', order: 'descending'}" @selection-change="handleSelectionChange"
                             >
+                                <el-table-column
+                                        type="selection"
+                                        >
+                                </el-table-column>
                                 <el-table-column prop="materialCode" label="物料编码" :show-overflow-tooltip="true"></el-table-column>
                                 <el-table-column prop="materialName" label="物料名称" :show-overflow-tooltip="true"></el-table-column>
-                                <el-table-column prop="planAmount" label="计划出库数量" :show-overflow-tooltip="true"></el-table-column>
+                                <el-table-column prop="amount" label="本次出库数量" :show-overflow-tooltip="true">
+                                    <template slot-scope="scope">
+                                        <el-input v-model="scope.row.amount" type="number"></el-input>
+                                    </template>
+                                </el-table-column>
                             </el-table>
                         </div>
                     </div>
@@ -262,6 +295,7 @@
                 detailListStore: [],
                 detailListPallet: [],
                 detailListOut: [],
+                options:[],
                 name: '',
                 createDate: '',
                 currentPage: 1,
@@ -273,6 +307,7 @@
                     inOutCode: ''
                 },
                 detailType:'',
+                palletCode:'',
                 dialogVisible:false,
                 dialogVisibleTask:false,
                 order: this.initOrder(),
@@ -284,7 +319,8 @@
                 inputCode:'',
                 selection: [],
                 isViewMode:false,
-                orderId:''
+                orderId:'',
+                wInventoryTransactionOrdersId:'',
             }
         },
         created() {
@@ -323,6 +359,16 @@
                     .catch(error => {
                         // 处理错误
                     });
+                axios.post('/Dic/list', {
+                    'dicCode': 'entryPoint'
+                })
+                    .then(response => {
+                        console.log(response)
+                        this.options = response.data;
+                    })
+                    .catch(error => {
+                        // 处理错误
+                    });
 
             },
             queryClick() {
@@ -548,6 +594,7 @@
                 this.detailList=[];
             },toDo(row){
                 this.dialogVisibleTask=true;
+                this.wInventoryTransactionOrdersId=row.id;
                 axios.get('/order/getOrderById/'+row.id, {
                 })
                     .then(response => {
@@ -563,7 +610,9 @@
 
             },handleCloseTask(){
                 this.dialogVisibleTask=false;
-                this.detailListPallet=[]
+                this.detailListPallet=[];
+                this.inputCode='';
+                this.palletCode='';
             },handleSelectChange(row){
                 console.log(row)
                 row.inventoryManagementList.forEach(item=>{
@@ -591,6 +640,137 @@
                     .catch(error => {
                         // 处理错误
                     });
+            },handleScan(){
+                console.log(this.inputCode)
+                axios.get('/order/verifyCode/'+this.inputCode, {
+                })
+                    .then(response => {
+                        const verify=response.data.data;
+                        if(verify === null){
+                            this.$message.error('无法识别'+this.inputCode);
+                            this.inputCode='';
+                            return
+                        }
+
+                        if(verify === 0){
+                            const flag =this.detailListPallet.some(vo=>{
+                                if(vo.materialCode === this.inputCode){
+                                    const flag1=this.detailListOut.some(item =>{
+                                        if(item.materialCode === this.inputCode){
+                                            item.amount=parseInt(item.amount)+1;
+                                            return true;
+                                        }
+                                        return false;
+
+                                    })
+                                    if(!flag1){
+                                        const newRow = {
+                                            "materialCode":this.inputCode,
+                                            "materialName":vo.materialName,
+                                            "amount":1
+                                        }
+                                        this.detailListOut.push(newRow);
+                                    }
+
+                                    return true;
+                                }
+                                return false;
+                            })
+
+                            if(!flag){
+                                this.$message.error('托盘明细中无法识别'+this.inputCode);
+                            }
+                        }else if(verify === 1){
+                            console.log(this.detailListTask)
+                            const allMaterials = this.detailListTask.reduce((accumulator, currentObject) => {
+                                return accumulator.concat(currentObject.inventoryManagementList);
+                            }, []);
+                            let locationCode1='';
+                            const hasMatchingCode = allMaterials.some(task => {
+                                if (task.palletCode === this.inputCode) {
+                                    locationCode1 = task.storageLocationCode;
+                                    return true;
+                                }
+                                return false;
+                            });
+                            if(!hasMatchingCode){
+                                this.$message.error("库存明细中无法识别到 " + this.inputCode);
+                                this.inputCode='';
+                                return;
+                            }
+                            axios.get('/wInventoryManagement/'+locationCode1, {
+                            })
+                                .then(response => {
+                                    console.log(response)
+                                    if(response.data.success){
+                                        const res=response.data.data;
+                                        this.detailListPallet=res;
+                                    }
+                                })
+                                .catch(error => {
+                                    // 处理错误
+                                });
+                            this.palletCode=this.inputCode;
+                        }
+                        this.inputCode='';
+                    })
+                    .catch(error => {
+                        // 处理错误
+                    });
+
+
+            },handleSelectionChange(selection) {
+                this.selection = selection
+            },outSubmit(){
+                if (!this.selection.length) {
+                    this.$message({
+                        message: '至少勾选一行数据',
+                        type: "error"
+                    })
+                    return
+                }
+                this.selection.forEach(item=>{
+                    if(item.amount === '' || item.amount <= 0){
+                        this.$message({
+                            message: '本次出库数量不能为空或小于等于0',
+                            type: "error"
+                        })
+                        return
+                    }
+                })
+
+                if(this.entryPoint ===''){
+                    this.$message({
+                        message: '入库口不能为空',
+                        type: "error"
+                    })
+                    return
+                }
+                axios.post('/wStorageLocationManagement', {
+                    'startPosition':this.entryPoint,
+                    'wInventoryTransactionOrdersId':this.wInventoryTransactionOrdersId,
+                    'vectorCode':this.palletCode,
+                    'status':0,
+                    'taskType':1,//表示这个任务的出入库类型,不代表实际的出入库操作
+                    'detailList':this.selection
+
+                })
+                    .then(response => {
+                        if(response.data.success){
+                            const code=response.data.data;
+                            this.$message({
+                                message: '空托盘 '+code +' 已出库',
+                                type: 'success'
+                            });
+                        }else{
+                            this.$message.error(response.data.data);
+                        }
+
+                    })
+                    .catch(error => {
+                        // 处理错误
+                    });
+
             }
         }