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

入库单 编辑 逻辑删除

oyq28 преди 1 година
родител
ревизия
51620dc733

+ 12 - 0
src/main/java/com/imcs/admin/business/controller/OrderController.java

@@ -34,6 +34,11 @@ public class OrderController {
         return orderService.getInList(page);
     }
 
+    @GetMapping("/getOrderById/{id}")
+    public Result getOrderById(@PathVariable Long id){
+        return Result.success(orderService.getOrderById(id));
+    }
+
     @PostMapping("/add")
     public Result add(@RequestBody WInventoryTransactionOrders orders){
          orderService.add(orders);
@@ -45,4 +50,11 @@ public class OrderController {
         return Result.success(orderService.verifyCode(inputCode));
     }
 
+    @GetMapping("/delete/{id}")
+    public Result  delete(@PathVariable Long id){
+        orderService.delete(id);
+        return Result.success();
+    }
+
+
 }

+ 1 - 0
src/main/java/com/imcs/admin/business/dao/WInventoryTransactionOrdersDao.java

@@ -6,4 +6,5 @@ import org.apache.ibatis.annotations.Param;
 
 public interface WInventoryTransactionOrdersDao  extends BaseMapper<WInventoryTransactionOrders> {
     Integer verifyCode(@Param("inputCode") String inputCode);
+
 }

+ 4 - 0
src/main/java/com/imcs/admin/business/service/OrderService.java

@@ -9,4 +9,8 @@ public interface OrderService {
     void add(WInventoryTransactionOrders orders);
 
     Integer verifyCode(String inputCode);
+
+    void delete(Long id);
+
+    WInventoryTransactionOrders getOrderById(Long id);
 }

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

@@ -161,7 +161,7 @@ public class BaseServiceImpl {
 
     }
 
-    public List<WInventoryTransactionChildTask> createSubTask(String endPosition,List<WInventoryTransactionChildTask> subList,Integer trTaskId,int childTaskType) {
+    public List<WInventoryTransactionChildTask> createSubTask(String endPosition,List<WInventoryTransactionChildTask> subList,Long trTaskId,int childTaskType) {
         //获取endPosition 需要移库的所有库位,获得的顺序为从内侧到外侧(先移动最外侧库位托盘)
         List<WInventoryManagement> wStorageLocationManagements = checkStorageRelocation(endPosition);
         List<WInventoryTransactionChildTask> faTask=new ArrayList<>();
@@ -179,7 +179,7 @@ public class BaseServiceImpl {
                 PolicyResult policyResult = (PolicyResult)movePolicy.getData();
                 String getEndPosition=policyResult.getLocationCode();
 
-                WInventoryTransactionChildTask task=new WInventoryTransactionChildTask(Long.valueOf(trTaskId),
+                WInventoryTransactionChildTask task=new WInventoryTransactionChildTask(trTaskId,
                         null,vo.getStorageLocationCode(),getEndPosition,vo.getPalletCode(),0,childTaskType,new Date(),getUserId(),createSubTask(getEndPosition, subList, trTaskId,Status.MOVE.getCode()));
                 faTask.add(task);
             });

+ 96 - 25
src/main/java/com/imcs/admin/business/service/impl/OrderServiceImpl.java

@@ -4,7 +4,9 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.json.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.gson.Gson;
@@ -20,6 +22,7 @@ import com.imcs.admin.entity.query.PolicyQuery;
 import com.imcs.admin.util.GenerateSerial;
 import com.imcs.admin.util.StringUtil;
 import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.lang.StringUtils;
 import org.bouncycastle.asn1.cms.PasswordRecipientInfo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -38,7 +41,7 @@ public class OrderServiceImpl extends BaseServiceImpl implements OrderService {
 
     @Override
     public Page getInList(Page page) {
-        LambdaQueryWrapper<WInventoryTransactionOrders> wrapper = Wrappers.lambdaQuery(WInventoryTransactionOrders.class).eq(WInventoryTransactionOrders::getInOutType,2);
+        LambdaQueryWrapper<WInventoryTransactionOrders> wrapper = Wrappers.lambdaQuery(WInventoryTransactionOrders.class).eq(WInventoryTransactionOrders::getInOutType,2).ne(WInventoryTransactionOrders::getStatus,-1);
         Page<WInventoryTransactionOrders> userPage = ordersDao.selectPage(page, wrapper);
         return userPage;
     }
@@ -56,7 +59,7 @@ public class OrderServiceImpl extends BaseServiceImpl implements OrderService {
         getEndPosition(orders);
 
         //入库任务 save
-        int trTaskId = saveOrderTask(orders,orderId);
+        Long trTaskId = saveOrderTask(orders,orderId);
 
         List<WInventoryTransactionChildTask> subList=new ArrayList<>();
 
@@ -93,29 +96,58 @@ public class OrderServiceImpl extends BaseServiceImpl implements OrderService {
 
 
 
-    private int saveOrderTask(WInventoryTransactionOrders orders,int orderId) {
-        //入库任务
+    private Long saveOrderTask(WInventoryTransactionOrders orders,int orderId) {
+
+        //先删 在插
+        if(StringUtils.equals(orders.getOperation(),"edit")){
+            LambdaQueryWrapper<WInventoryTransactionTask> query = Wrappers.lambdaQuery(WInventoryTransactionTask.class).eq(WInventoryTransactionTask::getWInventoryTransactionOrdersId,orders.getId());
+            WInventoryTransactionTask wInventoryTransactionTask = taskDao.selectOne(query);
+            if(wInventoryTransactionTask.getStatus() !=0){
+                throw new RuntimeException("入库任务正在执行,无法修改入库单");
+            }
+            //删除任务表和任务详情表
+
+            QueryWrapper<WInventoryTransactionTask> delete = new QueryWrapper<>();
+            delete.eq("w_inventory_transaction_orders_id",orders.getId());
+            taskDao.delete(delete);
+
+            QueryWrapper<WInventoryTransactionTaskDetail> deleteDetail = new QueryWrapper<>();
+            deleteDetail.eq("inventory_transaction_task_id",wInventoryTransactionTask.getId());
+            taskDetailDao.delete(deleteDetail);
+
+            //删除所有子任务
+            QueryWrapper<WInventoryTransactionChildTask> deleteChildTask = new QueryWrapper<>();
+            deleteChildTask.eq("w_inventory_transaction_task_id",wInventoryTransactionTask.getId());
+            childTaskDao.delete(deleteChildTask);
 
-        WInventoryTransactionTask.WInventoryTransactionTaskBuilder inTask = WInventoryTransactionTask.builder().taskCode(generateSerial.generateSerialNumber("inTask"))
-                .startPosition(orders.getStartPosition())
-                .endPosition(orders.getEndPosition())
-                .vectorCode(orders.getVectorCode())
-                .status(0)
-                .taskType(2)
-                .wInventoryTransactionOrdersId(Long.valueOf(orderId))
-                .createdAt(new Date())
-                .createdBy(getUserId());
-        int insert = taskDao.insert(inTask.build());
+        }
+
+
+        //入库任务
+        WInventoryTransactionTask wInventoryTransactionTask=new WInventoryTransactionTask();
+        wInventoryTransactionTask.setTaskCode(generateSerial.generateSerialNumber("inTask"));
+        wInventoryTransactionTask.setStartPosition(orders.getStartPosition());
+        wInventoryTransactionTask.setEndPosition(orders.getEndPosition());
+        wInventoryTransactionTask.setVectorCode(orders.getVectorCode());
+        wInventoryTransactionTask.setStatus(0);
+        wInventoryTransactionTask.setTaskType(2);
+        wInventoryTransactionTask.setWInventoryTransactionOrdersId(Long.valueOf(orderId));
+        wInventoryTransactionTask.setCreatedAt(new Date());
+        wInventoryTransactionTask.setCreatedBy(getUserId());
+        taskDao.insert(wInventoryTransactionTask);
+        Long id = wInventoryTransactionTask.getId();
 
         //入库任务详情
         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.setBatchNo(vo.getBatchNo());
+            taskDetail.setUnit(vo.getUnit());
+            taskDetail.setExpirationDate(vo.getExpirationDate());
+            taskDetail.setProductionDate(vo.getProductionDate());
+            taskDetail.setMaterialCode(vo.getMaterialCode());
+            taskDetail.setInventoryTransactionTaskId(id);
+            taskDetail.setStatus(0);
             taskDetail.setCreatedAt(new Date());
             taskDetail.setCreatedBy(getUserId());
             taskDetail.setAmount(vo.getRealAmount());
@@ -123,7 +155,7 @@ public class OrderServiceImpl extends BaseServiceImpl implements OrderService {
         });
 
         //判断目标库是否需要
-        return insert;
+        return id;
     }
 
     private void verifyMaterialCode(WInventoryTransactionOrders orders) {
@@ -138,15 +170,23 @@ public class OrderServiceImpl extends BaseServiceImpl implements OrderService {
 
 
     public int saveOrder(WInventoryTransactionOrders orders){
-        orders.setInOutCode(generateSerial.generateSerialNumber("inCode"));
-        int insert = ordersDao.insert(orders);
+        if(StringUtils.equals(orders.getOperation(),"add")){
+            orders.setInOutCode(generateSerial.generateSerialNumber("inCode"));
+            ordersDao.insert(orders);
+        }else{
+            ordersDao.updateById(orders);
+
+            QueryWrapper<WInventoryTransactionOrdersDetail> delete = new QueryWrapper<>();
+            delete.eq("inventory_transaction_orders_id",orders.getId());
+            ordersDetailDao.delete(delete);
+        }
         orders.getDetailList().stream().forEach(vo->{
-            vo.setInventoryTransactionOrdersId(Long.valueOf(insert));
+            vo.setInventoryTransactionOrdersId(Long.valueOf(orders.getId()));
             vo.setStatus(Status.NOT_IN_STOCK.getCode());
 
             ordersDetailDao.insert(vo);
         });
-        return insert;
+        return orders.getId().intValue();
     }
 
 
@@ -154,4 +194,35 @@ public class OrderServiceImpl extends BaseServiceImpl implements OrderService {
     public Integer verifyCode(String inputCode) {
         return ordersDao.verifyCode(inputCode);
     }
+
+    @Override
+    public void delete(Long id) {
+        //逻辑 入库单 删除
+        UpdateWrapper<WInventoryTransactionOrders> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.eq("id",id).set("status",-1);
+        ordersDao.update(null,updateWrapper);
+
+
+        QueryWrapper<WInventoryTransactionTask> taskQueryWrapper = new QueryWrapper<>();
+        taskQueryWrapper.eq("w_inventory_transaction_orders_id",id);
+        WInventoryTransactionTask wInventoryTransactionTask = taskDao.selectOne(taskQueryWrapper);
+
+        UpdateWrapper<WInventoryTransactionTask> updateTaskWrapper = new UpdateWrapper<>();
+        updateTaskWrapper.eq("id",wInventoryTransactionTask.getId()).set("status",-1);
+        taskDao.update(null,updateTaskWrapper);
+
+        UpdateWrapper<WInventoryTransactionChildTask> updateChildTaskWrapper = new UpdateWrapper<>();
+        updateChildTaskWrapper.eq("w_inventory_transaction_task_id",wInventoryTransactionTask.getId()).set("status",-1);
+        childTaskDao.update(null,updateChildTaskWrapper);
+    }
+
+    @Override
+    public WInventoryTransactionOrders getOrderById(Long id) {
+        LambdaQueryWrapper<WInventoryTransactionOrders> wrapper = Wrappers.lambdaQuery(WInventoryTransactionOrders.class).eq(WInventoryTransactionOrders::getId,id);
+        WInventoryTransactionOrders wInventoryTransactionOrders = ordersDao.selectOne(wrapper);
+        LambdaQueryWrapper<WInventoryTransactionOrdersDetail> detailLambdaQueryWrapper = Wrappers.lambdaQuery(WInventoryTransactionOrdersDetail.class).eq(WInventoryTransactionOrdersDetail::getInventoryTransactionOrdersId,id);
+        List<WInventoryTransactionOrdersDetail> wInventoryTransactionOrdersDetails = ordersDetailDao.selectList(detailLambdaQueryWrapper);
+        wInventoryTransactionOrders.setDetailList(wInventoryTransactionOrdersDetails);
+        return wInventoryTransactionOrders;
+    }
 }

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

@@ -34,17 +34,18 @@ public class WStorageLocationManagementServiceImpl extends BaseServiceImpl imple
         String palletCode = wInventoryManagement.getPalletCode();
         List<WInventoryTransactionChildTask> subList=new ArrayList<>();
 
+        WInventoryTransactionTask wInventoryTransactionTask=new WInventoryTransactionTask();
         //创建托盘出库任务
-        WInventoryTransactionTask.WInventoryTransactionTaskBuilder inTask = WInventoryTransactionTask.builder().taskCode(generateSerial.generateSerialNumber("inTask"))
-                .startPosition(storageLocationCode)
-                .endPosition(endPosition)
-                .vectorCode(palletCode)
-                .status(0)
-                .taskType(1)
-                .createdAt(new Date())
-                .createdBy(getUserId());
-        int insert = taskDao.insert(inTask.build());
-
+        wInventoryTransactionTask.setTaskCode(generateSerial.generateSerialNumber("inTask"));
+        wInventoryTransactionTask.setStartPosition(storageLocationCode);
+        wInventoryTransactionTask.setEndPosition(endPosition);
+        wInventoryTransactionTask.setVectorCode(palletCode);
+        wInventoryTransactionTask.setStatus(0);
+        wInventoryTransactionTask.setTaskType(1);
+        wInventoryTransactionTask.setCreatedAt(new Date());
+        wInventoryTransactionTask.setCreatedBy(getUserId());
+        taskDao.insert(wInventoryTransactionTask);
+        Long insert =wInventoryTransactionTask.getId();
         createSubTask(storageLocationCode, subList, insert, Status.MOVE.getCode());
         //保存移库子任务
         saveSubTask(subList,null);

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

@@ -91,6 +91,11 @@ public class WInventoryTransactionOrders implements Serializable {
      */
     private Integer updatedBy;
 
+    private String entryPoint;
+
+    private String vectorCode;//载体托盘或料盒编码
+
+
     @TableField(exist = false)
     List<WInventoryTransactionOrdersDetail> detailList;
 
@@ -102,7 +107,10 @@ public class WInventoryTransactionOrders implements Serializable {
     private String startPosition;//开始库位
     @TableField(exist = false)
     private String endPosition;//目标库位
+
     @TableField(exist = false)
-    private String vectorCode;//载体托盘或料盒编码
+    private String operation;//操作
+
+
 }
 

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

@@ -15,7 +15,6 @@ 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;

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

@@ -61,7 +61,7 @@ public class WInventoryTransactionTaskDetail implements Serializable {
 /**
      * 状态
      */
-    private String status;
+    private Integer status;
 /**
      * 创建时间
      */

+ 18 - 9
src/main/resources/static/wms/in/add.html

@@ -62,13 +62,17 @@
                 </el-table-column>
                 <el-table-column prop="materialCode" 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">
+                <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>
+                        <el-input v-model="scope.row.amount" type="number" @input="handleInput(scope.row)"></el-input>
                     </template>
                 </el-table-column>
                 <el-table-column prop="realAmount" label="已入库数量" :show-overflow-tooltip="true"></el-table-column>
-                <el-table-column prop="pendingAmount" label="待入库数量" :show-overflow-tooltip="true"></el-table-column>
+                <el-table-column prop="pendingAmount" label="待入库数量" :show-overflow-tooltip="true">
+                    <template slot-scope="scope">
+                        {{ getPendingAmount(scope.row) }}
+                    </template>
+                </el-table-column>
                 <el-table-column label="操作">
                     <template #default="scope">
                         <!-- 这里放置操作按钮 -->
@@ -252,7 +256,7 @@
                         this.migrationResultList.forEach(item => {
                             if (item.materialCode === code) {
                                 item.planAmount=item.planAmount+1;
-                                item.amount=item.amount+1;
+                                item.amount=parseInt(item.amount)+1;
                                 item.pendingAmount=item.pendingAmount+1;
                                 flag=false;
                             }
@@ -302,8 +306,8 @@
                 const newRow = {
                     outMaterialCode: code,
                     locationOptions:[{
-                        palletCode:'123',
-                        storageLocationCode:'123'
+                        palletCode:'',
+                        storageLocationCode:''
                     }]
                 };
                 axios.get('/wInventoryManagement/getPalletCode/'+code, {
@@ -379,9 +383,8 @@
                     })
                     return
                 }
-                const order={
+                let vectorCode=this.palletCode === ''?this.binCode:this.palletCode;
 
-                }
 
                 axios.post('/order/add', {
                     "orderType":2,
@@ -389,8 +392,10 @@
                     "detailType":this.detailType,
                     "status":0,
                     "startPosition":this.entryPoint,
-                    "vectorCode":this.palletCode,
+                    "entryPoint":this.entryPoint,
+                    "vectorCode":vectorCode,
                     "binCode":this.binCode,
+                    "operation":"add",
                     "detailList":this.selection
                 }).then(response => {
                     if(response.data.success){
@@ -405,6 +410,10 @@
 
 
 
+            }, getPendingAmount(row) {
+                return row.planAmount - row.realAmount;
+            },handleInput(row){
+                    row.planAmount=row.amount;
             }
         }
 

+ 446 - 0
src/main/resources/static/wms/in/edit.html

@@ -0,0 +1,446 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="UTF-8">
+    <!-- import CSS -->
+    <link rel="stylesheet" href="../../css/index.css">
+    <!-- import Vue before Element -->
+    <script src="../../js/vue.js"></script>
+    <!-- import JavaScript -->
+    <script src="../../js/index.js"></script>
+    <script src="../../js/axios.js"></script>
+</head>
+<body>
+<div id="app" v-cloak>
+    <div style="padding: 20px;">
+        <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 label="入库类型">
+                <el-select v-model="detailType" placeholder="请选择">
+                    <el-option
+                            v-for="item in detailTypeOptions"
+                            :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="托盘编码" :disabled="true"></el-input>
+            </el-form-item>
+            <el-form-item>
+                <el-input type="text" v-model="binCode" placeholder="料箱编码" :disabled="true"></el-input>
+            </el-form-item>
+            <el-form-item>
+                <el-input type="text" v-model="inputCode" placeholder="扫码顺序 托盘 > 料盒 > 物料编码" style="width: 300px" ></el-input>
+            </el-form-item>
+            <el-form-item>
+                <el-button type="primary" @click="addNewRow()">新增</el-button>
+            </el-form-item>
+            <el-form-item>
+                <el-button type="primary" @click="getPalletCode()">空托盘出库</el-button>
+            </el-form-item>
+        </el-form>
+        <div style="margin-bottom: 22px">
+            <el-table ref="singleTable" :data="migrationResultList" v-loading="loading" :border=true
+                      tooltip-effect="dark"
+                      highlight-current-row max-height="500" style="width: 100%;"
+                      :default-sort="{prop: 'createDate', order: 'descending'}"
+                      @selection-change="handleSelectionChange">
+                <el-table-column
+                        type="selection"
+                        width="55">
+                </el-table-column>
+                <el-table-column prop="materialCode" 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" @input="handleInput(scope.row)"></el-input>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="realAmount" label="已入库数量" :show-overflow-tooltip="true"></el-table-column>
+                <el-table-column prop="pendingAmount" label="待入库数量" :show-overflow-tooltip="true">
+                    <template slot-scope="scope">
+                        {{ getPendingAmount(scope.row) }}
+                    </template>
+                </el-table-column>
+                <el-table-column label="操作">
+                    <template #default="scope">
+                        <!-- 这里放置操作按钮 -->
+                        <el-button type="danger" @click="handleDelete(scope.row)">删除</el-button>
+                        <!-- 可以添加更多的操作按钮 -->
+                    </template>
+                </el-table-column>
+            </el-table>
+        </div>
+
+
+        <el-table ref="singleTable" :data="locationList" v-loading="loading" :border=true
+                  tooltip-effect="dark"
+                  highlight-current-row max-height="500" style="width: 100%;"
+                  :default-sort="{prop: 'createDate', order: 'descending'}"
+                  @selection-change="handleSelectionChange1">
+
+            <el-table-column prop="outMaterialCode" label="物料编码" :show-overflow-tooltip="true"></el-table-column>
+            <el-table-column prop="outLocationCode" label="库位编码" :show-overflow-tooltip="true"></el-table-column>
+            <el-table-column label="托盘" :show-overflow-tooltip="true">
+                <template #default="{ row }">
+                    <el-select v-model="row.outPalletCode" placeholder="请选择">
+                        <el-option
+                                v-for="option in row.locationOptions"
+                                :key="option.storageLocationCode"
+                                :label="option.palletCode"
+                                :value="option.palletCode">
+                        </el-option>
+                    </el-select>
+                </template>
+            </el-table-column>
+            <el-table-column label="操作">
+                <template #default="scope">
+                    <!-- 这里放置操作按钮 -->
+                    <el-button type="primary" @click="getOutPalletCode(scope.row)">出库</el-button>
+                    <!-- 可以添加更多的操作按钮 -->
+                </template>
+            </el-table-column>
+
+        </el-table>
+        <div style="display: flex; justify-content: center;margin-top: 22px">
+            <el-button type="primary" @click="submit()">提交</el-button>
+        </div>
+    </div>
+</div>
+</body>
+
+
+<script type="module">
+    new Vue({
+        el: '#app',
+        data: function () {
+            return {
+                migrationResultList: [],
+                locationList: [],
+                name: '',
+                createDate: '',
+                currentPage: 1,
+                total: 0,
+                currentPageSize: 10,
+                pageSizes: [10, 50, 100, 200, 300],
+                loading: false,
+                formInline: {
+                    palletCode: '',
+                    binCode: '',
+                    inputCode: '',
+                },
+                options:[],
+                detailTypeOptions:[],
+                locationOptions:[],
+                entryPoint:'',
+                detailType:'',
+                palletCode: '',
+                binCode: '',
+                inputCode: '',
+                outPallectCode:'',
+                selection: [],
+                id: '',
+                orderType: '',
+            }
+        },
+        created() {
+            console.log("初始化")
+            //this.queryClick();
+            this.getDic();
+            const urlParams = new URLSearchParams(window.location.search);
+            this.id = urlParams.get('id');
+            console.log(this.id)
+            this.queryClick();
+        },
+        methods: {
+            handleSizeChange(pageSize, total) {
+                this.currentPage = 1;
+                this.currentPageSize = pageSize;
+                this.queryClick();
+            },
+            handleCurrentChange(page) {
+                this.currentPage = page;
+                this.queryClick();
+            },
+            clear() {
+                this.ylCard = '';
+                this.master = '';
+            },
+            queryClick() {
+                this.loading = true;
+
+                axios.get('/order/getOrderById/'+this.id, {
+                })
+                    .then(response => {
+                        console.log(response)
+                        if(response.data.success){
+                            const res=response.data.data;
+                            this.orderType=res.orderType;
+                            this.entryPoint=res.entryPoint.toString();
+                            this.detailType=res.detailType.toString();
+
+                            //TODO 这里还有问题  这里只考虑的托盘 没有考虑料盒
+                            this.palletCode=res.vectorCode;
+                            this.migrationResultList=res.detailList;
+                            res.detailList.forEach(item=>{
+                                this.addOutPalletCode(item.materialCode)
+                            })
+                        }
+                        this.loading =false;
+                    })
+                    .catch(error => {
+                        // 处理错误
+                    });
+
+            }, getDic() {
+                axios.post('/Dic/list', {
+                    'dicCode': 'entryPoint'
+                })
+                    .then(response => {
+                        console.log(response)
+                        this.options = response.data;
+                    })
+                    .catch(error => {
+                        // 处理错误
+                    });
+                axios.post('/Dic/list', {
+                    'dicCode': 'detailType'
+                })
+                    .then(response => {
+                        console.log(response)
+                        this.detailTypeOptions = response.data;
+                    })
+                    .catch(error => {
+                        // 处理错误
+                    });
+
+            },handleSelectionChange1(val) {
+                this.multipleSelection = val;
+            },handleSelectionChange(selection) {
+                this.selection = selection
+            },addNewRow() {
+                // Define your new row object
+               const code= this.inputCode
+                //判断输入的是托盘编码 料箱编码 物料编码
+                axios.get('/order/verifyCode/'+code, {
+                })
+                    .then(response => {
+                        const verify=response.data.data;
+                        if(verify === null){
+                            this.$message.error('无法识别'+code);
+                            this.inputCode='';
+                            return
+                        }
+                        this.verifCode(code,verify);
+                    })
+                    .catch(error => {
+                        // 处理错误
+                    });
+            },verifCode(code,verify){
+                //0 物料编码  1 托盘编码 2 料盒编码
+                if(verify === 0){
+                    const newRow = {
+                        materialCode: code,
+                        planAmount: 1,
+                        amount: 1,
+                        realAmount: 0,
+                    };
+                    if(this.migrationResultList.length === 0){
+                        // Push the new row to migrationResultList
+                        this.migrationResultList.push(newRow);
+                        this.addOutPalletCode(code);
+                    }else{
+                        let flag = true;
+                        this.migrationResultList.forEach(item => {
+                            if (item.materialCode === code) {
+                                item.planAmount=item.planAmount+1;
+                                item.amount=parseInt(item.amount)+1;
+                                flag=false;
+                            }
+                        });
+                        if(flag){
+                            this.migrationResultList.push(newRow);
+                            this.addOutPalletCode(code);
+                        }
+                    }
+                }else if(verify === 1){
+                    this.palletCode=code;
+                }else if(verify === 2){
+                    this.binCode=code;
+                }
+
+
+                this.inputCode='';
+            },getPalletCode(){
+                //入库口 即空托盘出库的目的地
+                const inCode=this.entryPoint;
+                getPalletCodeCon(inCode)
+
+            },getOutPalletCode(row){
+                //入库口 即空托盘出库的目的地
+                const inCode=row.storageLocationCode;
+                getPalletCodeCon(inCode)
+
+            },getPalletCodeCon(inCode){
+                axios.get('/wStorageLocationManagement/getPalletCode/'+inCode, {
+                })
+                    .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 => {
+                        // 处理错误
+                    });
+            },addOutPalletCode(code){
+                const newRow = {
+                    outMaterialCode: code,
+                    locationOptions:[{
+                        palletCode:'',
+                        storageLocationCode:''
+                    }]
+                };
+                axios.get('/wInventoryManagement/getPalletCode/'+code, {
+                }).then(response => {
+                    let palletCodeList=[]
+                    if(response.data.success){
+                        response.data.data.forEach(item =>{
+                            const inv={
+                                palletCode:item.palletCode,
+                                storageLocationCode:item.storageLocationCode,
+                            }
+                            palletCodeList.push(inv)
+                        })
+                        this.$set(newRow, 'locationOptions', palletCodeList);
+                        this.$forceUpdate();
+                        if(palletCodeList.length > 0){
+                            newRow.outLocationCode=palletCodeList[0].storageLocationCode;
+                            newRow.outPalletCode=palletCodeList[0].palletCode;
+                            this.locationList.push(newRow)
+                        }
+                        console.log(this.locationList)
+                    }else{
+                        this.$message.error(response.data.data);
+                    }
+                })
+                .catch(error => {
+                    // 处理错误
+                });
+
+            },handleDelete(row) {
+                // 从 migrationResultList 中删除当前行
+                const index = this.migrationResultList.indexOf(row);
+                if (index !== -1) {
+                    this.migrationResultList.splice(index, 1);
+                }
+
+                this.locationList = this.locationList.filter(item => item.outMaterialCode !== row.materialCode);
+            },submit(){
+                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
+                }
+                if(this.detailType ===''){
+                    this.$message({
+                        message: '入库类型不能为空',
+                        type: "error"
+                    })
+                    return
+                }
+                if(this.palletCode ===''){
+                    this.$message({
+                        message: '托盘编码不能为空',
+                        type: "error"
+                    })
+                    return
+                }
+                const order={
+
+                }
+
+                axios.post('/order/add', {
+                    "id":this.id,
+                    "orderType":2,
+                    "inOutType":2,
+                    "detailType":this.detailType,
+                    "status":0,
+                    "startPosition":this.entryPoint,
+                    "vectorCode":this.palletCode,
+                    "binCode":this.binCode,
+                    "operation":"edit",
+                    "detailList":this.selection
+                }).then(response => {
+                    if(response.data.success){
+                        window.location.href = "index.html";
+                    }else{
+                        this.$message({
+                            message: response.data.msg,
+                            type: "error"
+                        })
+                    }
+                })
+                    .catch(error => {
+                        // 处理错误
+                    });
+
+
+
+
+
+            }, getPendingAmount(row) {
+                return row.planAmount - row.realAmount;
+            },handleInput(row){
+                if(this.orderType===2){
+                    row.planAmount=row.amount;
+                }
+                if(this.orderType===1 && parseInt(row.amount) > parseInt(row.planAmount)){
+                    this.$message({
+                        message: "本次入库数量不能大于计划入库数量",
+                        type: "error"
+                    })
+                    row.amount=row.planAmount;
+                }
+            }
+        }
+
+    })
+</script>
+
+</html>

+ 48 - 40
src/main/resources/static/wms/in/index.html

@@ -20,43 +20,11 @@
                         <el-input v-model="formInline.inOutCode" placeholder="入库单号"></el-input>
                     </el-form-item>
                     <el-form-item>
-                        <el-button type="primary" @click="queryClick">查询</el-button>
+                        <el-button type="primary" @click="queryClick()">查询</el-button>
                     </el-form-item>
                 </el-form>
-               <!-- <el-row>
-                    <el-col :span="3" class="firstCol line-height-32" style="display: flex; align-items: center; justify-content: flex-end;">
-                        医疗账号:
-                    </el-col>
-                    <el-col :span="4">
-                        <el-input v-model="ylCard" style="border:0px;"></el-input>
-                    </el-col>
-                    <el-col :span="3" class="firstCol line-height-32" style="text-align: right;">
-                        户主姓名:
-                    </el-col>
-                    <el-col :span="4">
-                        <el-input v-model="master" style="border:0px;"></el-input>
-                    </el-col>
-                    <el-col :span="2">
-                        <el-button size="small" type="info" plain @click="clear">
-                            重 置
-                        </el-button>
-                    </el-col>
-                    <el-col :span="2">
-                        <el-button size="small" type="primary" icon="el-icon-search" :loading="loading" @click="queryClick">
-                            <b>查 询</b>
-                        </el-button>
-                    </el-col>
-                </el-row>-->
-                <!--<el-row class="fromHeader">
-                    <el-col :span=3>
-                        <span class="titleTop"></span>
-                        <span class="headerText">
-                            查询结果
-                          </span>
-                    </el-col>
-                </el-row>-->
             </div>
-            <el-row class="filter-container">
+            <el-row class="filter-container" style="margin-bottom:10px">
                 <el-col>
                     <el-button type="primary" icon="el-icon-plus" size="medium" v-has-permission="['goodsShelves:add']" @click="add">新增</el-button>
                 </el-col>
@@ -65,14 +33,16 @@
                       tooltip-effect="dark"
                       highlight-current-row max-height="500" style="width: 100%;"
                       :default-sort="{prop: 'createDate', order: 'descending'}">
-               <!--<el-table-column prop="ylCard" label="医疗账号" show-overflow-tooltip="true" width="500">
-                </el-table-column>
-                <el-table-column prop="master" label="户主姓名" show-overflow-tooltip="true" width="400">
-                </el-table-column>
-                <el-table-column prop="createDate" label="创建时间" show-overflow-tooltip="true" sortable width="400">
-                </el-table-column>-->
 
                 <el-table-column prop="inOutCode" label="入库单编码" :show-overflow-tooltip="true"></el-table-column>
+
+                <el-table-column prop="detailType" label="mes/手动" :show-overflow-tooltip="true">
+                    <template slot-scope="{ row }">
+                        <el-tag >
+                            {{ getInOutTypeText(row.inOutType) }}
+                        </el-tag>
+                    </template>
+                </el-table-column>
                 <el-table-column prop="detailType" label="入库类型" :show-overflow-tooltip="true">
                     <template slot-scope="{ row }">
                         <el-tag >
@@ -87,10 +57,21 @@
                         </el-tag>
                     </template>
                 </el-table-column>
+                <el-table-column prop="entryPoint" label="入库口" :show-overflow-tooltip="true"></el-table-column>
+                <el-table-column prop="vectorCode" label="载体" :show-overflow-tooltip="true"></el-table-column>
                 <el-table-column prop="errorInfo" label="异常原因" :show-overflow-tooltip="true"></el-table-column>
                 <el-table-column prop="startTime" label="开始时间" :show-overflow-tooltip="true"></el-table-column>
                 <el-table-column prop="endTime" label="结束时间" :show-overflow-tooltip="true"></el-table-column>
                 <el-table-column prop="remarks" label="备注" :show-overflow-tooltip="true"></el-table-column>
+                <el-table-column label="操作" :show-overflow-tooltip="true">
+                    <template #default="scope">
+                        <!-- 这里放置操作按钮 -->
+                        <el-button-group>
+                            <el-button type="primary" @click="edit(scope.row)" icon="el-icon-edit">编辑</el-button>
+                            <el-button type="danger" @click="orderDelete(scope.row)" icon="el-icon-delete">删除</el-button>
+                        </el-button-group>
+                    </template>
+                </el-table-column>
 
             </el-table>
             <div class="pagination-block">
@@ -177,6 +158,16 @@
                         return ""
                 }
 
+            }, getInOutTypeText(status) {
+                switch (status) {
+                    case 1:
+                        return 'MES入库'; // 第三种类型的文本
+                    case 2:
+                        return '手动入库'; // 第四种类型的文本
+                    default:
+                        return ""
+                }
+
             }, getDetailTypeText(status) {
                 switch (status) {
                     case 0:
@@ -200,6 +191,23 @@
 
             },add(){
                 window.location.href = "add.html";
+            },edit(row){
+                window.location.href = "edit.html?id="+row.id;
+            },orderDelete(row){
+                axios.get('/order/delete/'+row.id, {
+                })
+                    .then(response => {
+                        if(response.data.success){
+                            this.$message({
+                                message: '删除成功',
+                                type: "success"
+                            })
+                            this.queryClick();
+                        }
+                    })
+                    .catch(error => {
+                        // 处理错误
+                    });
             }
         }