1
wankeda
2026-01-03 821397b01a004f8560c987ef83146614a9356ecb
1

1
已添加17个文件
已删除4个文件
已修改23个文件
5650 ■■■■■ 文件已修改
WMS/WIDESEA_WMSClient/src/extension/outbound/extend/newoutOrderDetail.vue 558 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSClient/src/extension/outbound/newoutboundOrder.js 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSClient/src/extension/outbound/newoutboundOrderDetail.js 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSClient/src/router/viewGird.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSClient/src/views/outbound/newoutboundOrder.vue 374 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSClient/src/views/outbound/newoutboundOrderDetail.vue 195 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/ProjectEvaluation/widesea_wmsserver.strings.v9.bin 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/DesignTimeBuild/.dtbcache.v2 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/0ef058ae-c319-46a4-8f85-8d624cb5a8ab.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/13c6b113-1345-4876-866e-6cc96d92decf.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/41d0345b-0011-4845-b5c5-ca0de3bd57c8.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/58855021-a9b7-463d-b84b-0e8d9f9e221a.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/5a2dba86-478b-4ce5-8597-3dae38896b09.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/5b36fd38-46f6-4e8b-a9e4-f642a8363e78.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/69ffc742-0c8d-4790-90eb-1a1592090460.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/a3962f8b-f362-4486-8c2d-b964b5889a5a.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/.futdcache.v2 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/.suo 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.backup.json 472 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.json 498 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_CP.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_FL.cs 241 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_YS.cs 241 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService_Common.cs 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Common/InventoryAllocate.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutStockLockInfoService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_InboundService/Base/InboundOrderService.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_NewOutboundOrder.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Service/OutStockLockInfoService.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/NewPartialTaskService_Outbound.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs 161 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs 479 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs 468 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/NewOutboundOrderController.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/NewOutboundOrderDetailController.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
吉安PDA/pages.json 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
吉安PDA/pages/stash/FLinboundorder.vue 216 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
吉安PDA/pages/stash/FLraworderboxing.vue 609 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
吉安PDA/pages/stash/YSinboundorder.vue 216 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
吉安PDA/pages/stash/YSraworderboxing.vue 609 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSClient/src/extension/outbound/extend/newoutOrderDetail.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,558 @@
<template>
  <div>
    <vol-box
      v-model="showDetialBox"
      :lazy="true"
      width="75%"
      :padding="15"
      title="单据明细信息"
    >
      <div class="box-head">
        <el-alert :closable="false" style="width: 100%">
          <el-row>
            <el-col :span="16">
              <span>已选中 {{ selection.length }} é¡¹</span>
            </el-col>
            <el-col :span="8">
              <el-link
                type="primary"
                size="small"
                style="float: left; height: 20px;"
                @click="cancelOutFeedbackERP"
                >出库明细取消推送ERP</el-link
              >
              <el-link
                type="primary"
                size="small"
                style="float: right; height: 20px; margin-right: 10px"
                @click="outbound"
                >直接出库</el-link
              >
              <el-link
                type="primary"
                size="small"
                style="float: right; height: 20px; margin-right: 10px"
                @click="getData"
                >刷新</el-link
              ></el-col
            >
          </el-row>
        </el-alert>
      </div>
      <div class="box-table" style="margin-top: 1%">
        <el-table
          ref="singleTable"
          :data="tableData"
          :summary-method="getSummaries"
          show-summary
          style="width: 100%; height: 100%"
          highlight-current-row
          @current-change="handleCurrentChange"
          height="500px"
          @row-click="handleRowClick"
          @selection-change="handleSelectionChange"
        >
          <el-table-column type="selection" width="55"> </el-table-column>
          <el-table-column
            label="序号"
            type="index"
            fixed="left"
            width="55"
            align="center"
          ></el-table-column>
          <el-table-column
            v-for="(item, index) in tableColumns.filter((x) => !x.hidden)"
            :key="index"
            :prop="item.prop"
            :label="item.title"
            :width="item.width"
            align="center"
          >
            <template #default="scoped">
              <!-- å›¾æ ‡åˆ— -->
              <div v-if="item.type == 'icon'">
                <el-tooltip
                  class="item"
                  effect="dark"
                  :content="item.title"
                  placement="bottom"
                  ><el-link
                    type="primary"
                    :disabled="getButtonEnable(item.prop, scoped.row)"
                    @click="tableButtonClick(scoped.row, item)"
                    ><i :class="item.icon" style="font-size: 22px"></i></el-link
                ></el-tooltip>
              </div>
              <!-- æ ‡ç­¾åˆ— -->
              <div v-else-if="item.type == 'tag'">
                <el-tag size="small">
                  {{ getDictionary(scoped.row, item) }}
                </el-tag>
              </div>
              <!-- æ™®é€šæ–‡æœ¬åˆ— - å¸¦æº¢å‡ºéšè—å’ŒTooltip -->
              <div v-else>
                <el-tooltip
                  class="item"
                  effect="dark"
                  :content="formatCellContent(scoped.row[item.prop])"
                  placement="top"
                  :disabled="!shouldShowTooltip(scoped.row[item.prop], item)"
                >
                  <span
                    class="ellipsis-cell"
                    :style="{ width: calculateCellWidth(item) }"
                  >
                    {{ formatCellContent(scoped.row[item.prop]) }}
                  </span>
                </el-tooltip>
              </div>
            </template>
          </el-table-column>
        </el-table>
      </div>
    </vol-box>
    <stock-select ref="child" @parentCall="parentCall"></stock-select>
    <selected-stock
      ref="selectedStock"
      @parentCall="parentCall"
    ></selected-stock>
  </div>
</template>
<script>
import VolBox from "@/components/basic/VolBox.vue";
import VolForm from "@/components/basic/VolForm.vue";
import StockSelect from "./StockSelect.vue";
import SelectedStock from "./SelectedStock.vue";
export default {
  components: { VolBox, VolForm, StockSelect, SelectedStock },
  data() {
    return {
      row: null,
      showDetialBox: false,
      flag: false,
      currentRow: null,
      selection: [],
      tableData: [],
      tableColumns: [
        {
          prop: "id",
          title: "Id",
          type: "int",
          width: 90,
          hidden: true,
        },
        {
          prop: "orderId",
          title: "出库单主键",
          type: "string",
          width: 90,
          hidden: true,
        },
        {
          prop: "viewDetail",
          title: "出库详细",
          type: "icon",
          width: 90,
          icon: "el-icon-s-operation",
        },
        {
          prop: "materielCode",
          title: "物料编号",
          type: "string",
          width: 150,
        },
        {
          prop: "batchNo",
          title: "批次号",
          type: "string",
          width: 180,
        },
        {
          prop: "supplierBatch",
          title: "供应商批次号",
          type: "string",
          width: 180,
        },
        {
          prop: "orderQuantity",
          title: "单据数量",
          type: "string",
          width: 90,
        },
        {
          prop: "overOutQuantity",
          title: "已出数量",
          type: "string",
          width: 90,
        },
        {
          prop: "remark",
          title: "备注",
          type: "string",
          width: 180,
        },
        {
          prop: "orderDetailStatus",
          title: "订单明细状态",
          type: "tag",
          width: 180,
          bindKey: "orderDetailStatusEnum",
        },
        {
          prop: "materielName",
          title: "物料名称",
          type: "string",
          width: 150,
        },
        {
          prop: "locationName",
          title: "出库货位",
          type: "string",
          width: 200,
        },
        {
          prop: "creater",
          title: "创建人",
          type: "string",
          width: 90,
        },
        {
          prop: "createDate",
          title: "创建时间",
          type: "datetime",
          width: 160,
        },
        {
          prop: "modifier",
          title: "修改人",
          type: "string",
          width: 100,
        },
        {
          prop: "modifyDate",
          title: "修改时间",
          type: "datetime",
          width: 160,
        },
        {
          prop: "lockQuantity",
          title: "锁定数量",
          type: "int",
          width: 90,
        },
      ],
      paginations: {
        sort: "id",
        order: "desc",
        Foots: "",
        total: 0,
        sizes: [60, 100, 120],
        size: 60,
        Wheres: [],
        page: 1,
        rows: 60,
      },
      searchFormOptions: [
        [
          {
            title: "单据编号",
            field: "allocation_code",
            type: "like",
          },
          {
            title: "单据类型",
            field: "allocation_type",
            type: "select",
            dataKey: "OrderType",
            data: [],
          },
          {
            title: "单据状态",
            field: "allocation_state",
            type: "select",
            dataKey: "OrderState",
            data: [],
          },
        ],
      ],
      searchFormFields: {
        allocation_code: "",
        allocation_type: "",
        allocation_state: "",
      },
      dictionaryList: null,
    };
  },
  methods: {
    open(row) {
      this.row = row;
      this.showDetialBox = true;
      this.getDictionaryData();
      this.getData();
    },
    getSummaries(param) {
      const { columns, data } = param
      const sums = []
      columns.forEach((column, index) => {
        if (index === 0) {
          sums[index] = '合计'
          return
        }
        // ä»…对指定数值列求和并保留两位小数
        if (['lockQuantity', 'overOutQuantity', 'orderQuantity'].includes(column.property)) {
          const values = data.map(item => Number(item[column.property]))
          if (!values.every(value => isNaN(value))) {
            // è®¡ç®—总和
            const total = values.reduce((prev, curr) => {
              return prev + (isNaN(curr) ? 0 : curr)
            }, 0)
            // ä¿ç•™ä¸¤ä½å°æ•°
            sums[index] = total.toFixed(2)
          } else {
            sums[index] = '-'
          }
        } else {
          sums[index] = ''
        }
      })
      return sums
    },
    getData() {
      var wheres = [{ name: "orderId", value: this.row.id }];
      var param = {
        page: this.paginations.page,
        rows: this.paginations.rows,
        sort: this.paginations.sort,
        order: this.paginations.order,
        wheres: JSON.stringify(wheres),
      };
      this.http
        .post("api/NewOutboundOrderDetail/GetPageData", param, "查询中")
        .then((x) => {
          this.tableData = x.rows;
        });
    },
    tableButtonClick(row, column) {
      if (column.prop == "assignStock") {
        this.$refs.child.open(row);
      } else {
        this.$refs.selectedStock.open(row);
      }
    },
    lockstocks() {
      if (this.selection.length === 0) {
        return this.$message.error("请选择单据明细");
      }
      var keys = this.selection.map((item) => item.id);
      this.http
        .post("api/NewOutboundOrderDetail/LockOutboundStocks", keys, "数据处理中")
        .then((x) => {
          if (!x.status) return this.$message.error(x.message);
          this.$message.success("操作成功");
          this.showDetialBox = false;
          this.$emit("parentCall", ($vue) => {
            $vue.getData();
          });
        });
    },
    outbound() {
      if (this.selection.length === 0) {
        return this.$message.error("请选择单据明细");
      }
      var keys = this.selection.map((item) => item.id);
      this.http
        .post("api/Task/WMSGenerateNewOutboundTask", keys, "数据处理中")
        .then((x) => {
          if (!x.status) return this.$message.error(x.message);
          this.$message.success("操作成功");
          this.showDetialBox = false;
          this.$emit("parentCall", ($vue) => {
            $vue.getData();
          });
        });
    },
    cancelOutFeedbackERP() {
      if (this.selection.length === 0) {
        return this.$message.error("请选择单据明细");
      }
      var keys = this.selection.map((item) => item.id);
      this.$confirm("是否取消该出库单明细","单据取消警告",{
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
        center: true,
        }).then(() => {
          this.http
          .post("api/OutboundOrderDetail/CancelOutFeedbackERP", keys, "数据处理中")
          .then((x) => {
            if (!x.status) return this.$message.error(x.message);
            this.$message.success("操作成功");
            this.showDetialBox = false;
            this.$emit("parentCall", ($vue) => {
              $vue.getData();
            });
          });
        });
    },
    setCurrent(row) {
      this.$refs.singleTable.setCurrentRow(row);
    },
    handleCurrentChange(val) {
      this.currentRow = val;
    },
    getButtonEnable(propName, row) {
      if (propName == "assignStock") {
        if (
          row.orderDetailStatus !== 0 &&
          row.orderDetailStatus !== 60 &&
          row.orderDetailStatus !== 70 &&
          row.orderDetailStatus !== 80
        ) {
          return true;
        } else {
          return false;
        }
      }
      return false;
    },
    parentCall(fun) {
      if (typeof fun != "function") {
        return console.log("扩展组件需要传入一个回调方法才能获取父级Vue对象");
      }
      fun(this);
    },
    handleRowClick(row) {
      this.$refs.singleTable.toggleRowSelection(row);
    },
    handleSelectionChange(val) {
      this.selection = val;
    },
    getDictionaryData() {
      if (this.dictionaryList) {
        return;
      }
      var param = [];
      this.tableColumns.forEach((x) => {
        if (x.type == "tag" && x.bindKey != "") {
          param.push(x.bindKey);
        }
      });
      this.http
        .post("api/Sys_Dictionary/GetVueDictionary", param, "查询中")
        .then((x) => {
          if (x.length > 0) {
            this.dictionaryList = x;
          }
        });
    },
    getDictionary(row, column) {
      if (this.dictionaryList) {
        var item = this.dictionaryList.find((x) => x.dicNo == column.bindKey);
        if (item) {
          var dicItem = item.data.find((x) => x.key == row[column.prop]);
          if (dicItem) {
            return dicItem.value;
          } else {
            return row[column.prop];
          }
        } else {
          return row[column.prop];
        }
      }
    },
    // æ ¼å¼åŒ–单元格内容,处理null/undefined
    formatCellContent(content) {
      if (content === null || content === undefined) {
        return "无数据";
      }
      // å¯¹æ—¥æœŸç±»åž‹è¿›è¡Œç‰¹æ®Šå¤„理(如果需要)
      return content.toString();
    },
    // è®¡ç®—单元格宽度,预留边距
    calculateCellWidth(column) {
      // å¦‚果列定义了宽度,减去20px作为内边距
      if (column.width) {
        return `${column.width - 20}px`;
      }
      // æœªå®šä¹‰å®½åº¦åˆ™ä½¿ç”¨100%
      return "100%";
    },
    // åˆ¤æ–­æ˜¯å¦éœ€è¦æ˜¾ç¤ºTooltip
    shouldShowTooltip(content, column) {
      // æ ‡è®°ä¸ºä¸éœ€è¦æº¢å‡ºå¤„理的列不显示Tooltip
      if (column.noEllipsis) {
        return false;
      }
      // ç©ºå†…容不显示Tooltip
      const cellContent = this.formatCellContent(content);
      if (cellContent === "无数据") {
        return false;
      }
      // å†…容较短时也不显示Tooltip(根据实际需求调整长度阈值)
      return cellContent.length > 8;
    }
  },
};
</script>
<style scoped>
.text-button {
  border: 0px;
}
/* æ–‡æœ¬æº¢å‡ºéšè—æ ·å¼ */
.ellipsis-cell {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  position: relative;
  z-index: 1;
  display: inline-block;
  max-width: 100%;
}
</style>
<style>
.text-button:hover {
  background-color: #f0f9eb !important;
}
.el-table .warning-row {
  background: oldlace;
}
.box-table .el-table tbody tr:hover > td {
  background-color: #d8e0d4 !important;
}
.box-table .el-table tbody tr.current-row > td {
  background-color: #f0f9eb !important;
}
.el-table .success-row {
  background: #f0f9eb;
}
.box-table .el-table {
  border: 1px solid #ebeef5;
}
/* åˆè®¡è¡Œæ–‡æœ¬æº¢å‡ºå¤„理 */
.el-table__footer-wrapper .el-table__cell {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  position: relative;
  z-index: 1;
}
</style>
WMS/WIDESEA_WMSClient/src/extension/outbound/newoutboundOrder.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,81 @@
//此js文件是用来自定义扩展业务代码,可以扩展一些自定义页面或者重新配置生成的代码
import gridBody from './extend/newoutOrderDetail.vue'
import gridHeader from './extend/AddOutboundOrder.vue'
let extension = {
    components: {
      //查询界面扩展组件
      gridHeader: gridHeader,
      gridBody: gridBody,
      gridFooter: '',
      //新建、编辑弹出框扩展组件
      modelHeader: '',
      modelBody: '',
      modelFooter: ''
    },
    tableAction: '', //指定某张表的权限(这里填写表名,默认不用填写)
    buttons: { view: [], box: [], detail: [] }, //扩展的按钮
    methods: {
       //下面这些方法可以保留也可以删除
      onInit() {
        let addBtn = this.buttons.find(x => x.value == 'Add');
        if (addBtn) {
          addBtn.onClick = function () {
            this.$refs.gridHeader.open();
          }
        };
        //扩展页面初始化操作
        this.columns.push({
          field: '操作',
          title: '操作',
          width: 90,
          fixed: 'right',
          align: 'center',
          formatter: (row) => {
              return (
                  '<i style="cursor: pointer;color: #2d8cf0;"class="el-icon-view">查看明细</i>'
              );
          },
          click: (row) => {
              this.$refs.gridBody.open(row);
          }
      });
      },
      onInited() {
        //框架初始化配置后
        //如果要配置明细表,在此方法操作
        //this.detailOptions.columns.forEach(column=>{ });
      },
      searchBefore(param) {
        //界面查询前,可以给param.wheres添加查询参数
        //返回false,则不会执行查询
        return true;
      },
      searchAfter(result) {
        //查询后,result返回的查询数据,可以在显示到表格前处理表格的值
        return true;
      },
      addBefore(formData) {
        //新建保存前formData为对象,包括明细表,可以给给表单设置值,自己输出看formData的值
        return true;
      },
      updateBefore(formData) {
        //编辑保存前formData为对象,包括明细表、删除行的Id
        return true;
      },
      rowClick({ row, column, event }) {
        //查询界面点击行事件
        this.$refs.table.$refs.table.toggleRowSelection(row); //单击行时选中当前行;
      },
      modelOpenAfter(row) {
        //点击编辑、新建按钮弹出框后,可以在此处写逻辑,如,从后台获取数据
        //(1)判断是编辑还是新建操作: this.currentAction=='Add';
        //(2)给弹出框设置默认值
        //(3)this.editFormFields.字段='xxx';
        //如果需要给下拉框设置默认值,请遍历this.editFormOptions找到字段配置对应data属性的key值
        //看不懂就把输出看:console.log(this.editFormOptions)
      }
    }
  };
  export default extension;
WMS/WIDESEA_WMSClient/src/extension/outbound/newoutboundOrderDetail.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,89 @@
let extension = {
    components: {
      //查询界面扩展组件
      gridHeader: '',
      gridBody: '',
      gridFooter: '',
      //新建、编辑弹出框扩展组件
      modelHeader: '',
      modelBody: '',
      modelFooter: ''
    },
    tableAction: '', //指定某张表的权限(这里填写表名,默认不用填写)
    buttons: { view: [], box: [], detail: [] }, //扩展的按钮
    methods: {
      onInit() {
        this.columns.push({
          field: '操作',
          title: '操作',
          width: 90,
          fixed: 'right',
          align: 'center',
          formatter: (row) => {
              return (
                  '<i style="cursor: pointer;color: #2d8cf0;"class="el-icon-view">直接出库</i>'
              );
          },
          click: (row) => {
              this.$confirm("是否确认出库","出库操作确认",{
              confirmButtonText: "确定",
              cancelButtonText: "取消",
              type: "warning",
              center: true,
              }).then(() => {
                let rows = this.$refs.table.getSelected();
                if (rows.length == 0) return this.$error("请选择数据!");
                if (rows.length > 1) return this.$error("请选择一条数据!");
                const keys = rows.map(row => row.id);
                // å‘送POST请求,将ID数组作为请求体发送
                this.http
                .post("api/Task/WMSGenerateNewOutboundTask", keys, "数据处理中...")
                .then((x) => {
                    if (x.status) {
                    this.$Message.success('操作成功');
                    this.refresh();
                  } else {
                    return this.$error(x.message);
                  }
                });
              });
          }
      });
      },
      onInited() {
        //框架初始化配置后
        //如果要配置明细表,在此方法操作
        //this.detailOptions.columns.forEach(column=>{ });
      },
      searchBefore(param) {
        //界面查询前,可以给param.wheres添加查询参数
        //返回false,则不会执行查询
        return true;
      },
      searchAfter(result) {
        //查询后,result返回的查询数据,可以在显示到表格前处理表格的值
        return true;
      },
      addBefore(formData) {
        //新建保存前formData为对象,包括明细表,可以给给表单设置值,自己输出看formData的值
        return true;
      },
      updateBefore(formData) {
        //编辑保存前formData为对象,包括明细表、删除行的Id
        return true;
      },
      rowClick({ row, column, event }) {
        //查询界面点击行事件
        this.$refs.table.$refs.table.toggleRowSelection(row); //单击行时选中当前行;
      },
      modelOpenAfter(row) {
        //点击编辑、新建按钮弹出框后,可以在此处写逻辑,如,从后台获取数据
        //(1)判断是编辑还是新建操作: this.currentAction=='Add';
        //(2)给弹出框设置默认值
        //(3)this.editFormFields.字段='xxx';
        //如果需要给下拉框设置默认值,请遍历this.editFormOptions找到字段配置对应data属性的key值
        //看不懂就把输出看:console.log(this.editFormOptions)
      }
    }
  };
  export default extension;
WMS/WIDESEA_WMSClient/src/router/viewGird.js
@@ -80,6 +80,14 @@
    name: 'outboundOrderDetail',
    component: () => import('@/views/outbound/outboundOrderDetail.vue')
  }, {
    path: '/newoutboundOrder',
    name: 'newoutboundOrder',
    component: () => import('@/views/outbound/newoutboundOrder.vue')
  }, {
    path: '/newoutboundOrderDetail',
    name: 'newoutboundOrderDetail',
    component: () => import('@/views/outbound/newoutboundOrderDetail.vue')
  }, {
    path: '/stockInfo',
    name: 'stockInfo',
    component: () => import('@/views/stock/stockInfo.vue')
WMS/WIDESEA_WMSClient/src/views/outbound/newoutboundOrder.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,374 @@
<template>
  <view-grid
    ref="grid"
    :columns="columns"
    :detail="detail"
    :editFormFields="editFormFields"
    :editFormOptions="editFormOptions"
    :searchFormFields="searchFormFields"
    :searchFormOptions="searchFormOptions"
    :table="table"
    :extend="extend"
  >
  </view-grid>
</template>
    <script>
import extend from "@/extension/outbound/newoutboundOrder.js";
import { ref, defineComponent } from "vue";
export default defineComponent({
  setup() {
    const table = ref({
      key: "id",
      footer: "Foots",
      cnName: "出库单",
      name: "newoutboundOrder",
      url: "/newoutboundOrder/",
      sortName: "id",
    });
    const editFormFields = ref({
      orderType: "",
      orderNo:"",
      upperOrderNo: "",
      orderStatus: "",
      remark: "",
    });
    const editFormOptions = ref([
      [
        {
          title: "单据类型",
          required: true,
          field: "orderType",
          type: "select",
          dataKey: "inOrderType",
          data: [],
        },
        {
        field: "orderNo",
        title: "单据编号",
        type: "string",
      },
              {
        field: "outWareHouse",
        title: "仓库编码",
        type: "string",
      },
        {
          title: "上游单据编号",
          field: "upperOrderNo",
          type: "string",
        },
        {
          title: "单据状态",
          field: "orderStatus",
          type: "select",
          dataKey: "inboundState",
          data: [],
          readonly: true,
        },
        {
          title: "备注",
          field: "remark",
          type: "textarea",
        },
      ],
    ]);
    const searchFormFields = ref({
      orderNo: "",
      upperOrderNo: "",
      orderType: "",
      orderStatus: "",
      createType: "",
      creater: "",
      createDate: "",
    });
    const searchFormOptions = ref([
      [
        { title: "单据编号", field: "orderNo", type: "like" },
        { title: "上游单据编号", field: "upperOrderNo", type: "like" },
        {
          title: "单据大类",
          field: "orderType",
          type: "select",
          dataKey: "inOrderType",
          data: [],
        },
        {
          title: "单据状态",
          field: "orderStatus",
          type: "select",
          dataKey: "inboundState",
          data: [],
        },
      ],
      [
        {
        field: "outWareHouse",
        title: "出库仓库",
        type: "select",
        width: 120,
        align: "left",
        datakey:"",data:[{key:"SC01_BC", value:"板材仓"},{key:"SC02_BC", value:"板材仓(2)"}]
      },
        {
          title: "创建方式",
          field: "createType",
          type: "select",
          dataKey: "createType",
          data: [],
        },
        { title: "创建者", field: "creater", type: "like" },
        { title: "创建时间", field: "createDate", type: "datatime" },
      ],
    ]);
    const columns = ref([
      {
        field: "id",
        title: "Id",
        type: "int",
        width: 90,
        hidden: true,
        readonly: true,
        require: true,
        align: "left",
      },
      {
        field: "id",
        title: "主键",
        type: "int",
        width: 90,
        align: "left",
      },
      {
        field: "outWareHouse",
        title: "仓库",
        type: "string",
        width: 120,
        align: "left",
        bind:{key:"",data:[{key:"SC01_BC", value:"板材仓"},{key:"SC02_BC", value:"板材仓(2)"}]}
      },
      {
        field: "orderNo",
        title: "单据编号",
        type: "string",
        width: 170,
        align: "left",
        link: true,
      },
      {
        field: "upperOrderNo",
        title: "上游单据编号",
        type: "string",
        width: 150,
        align: "left",
      },
      {
        field: "orderType",
        title: "单据大类",
        type: "string",
        width: 150,
        align: "left",
        bind: { key: "inOrderType", data: [] },
      },
      {
        field: "inoutType",
        title: "出入库类型",
        type: "string",
        width: 90,
        align: "left",
        bind: { key: "inoutTypeEnum", data: [] },
      },
      {
        field: "orderStatus",
        title: "单据状态",
        type: "decimal",
        width: 90,
        align: "left",
        bind: { key: "outboundStatusEnum", data: [] },
      },
      {
        field: "createType",
        title: "创建方式",
        type: "string",
        width: 90,
        align: "left",
        bind: { key: "createType", data: [] },
      },
      {
        field: "creater",
        title: "创建人",
        type: "string",
        width: 90,
        align: "left",
      },
      {
        field: "createDate",
        title: "创建时间",
        type: "datetime",
        width: 160,
        align: "left",
      },
      {
        field: "modifier",
        title: "修改人",
        type: "string",
        width: 100,
        align: "left",
      },
      {
        field: "modifyDate",
        title: "修改时间",
        type: "datetime",
        width: 160,
        align: "left",
      },
      {
        field: "remark",
        title: "备注",
        type: "string",
        width: 100,
        align: "left",
      },
    ]);
    const detail = ref({
      cnName: "出库明细单",
      table: "OnboundOrderDetail",
      columns: [
        {
          field: "id",
          title: "Id",
          type: "int",
          width: 90,
          hidden: true,
          readonly: true,
          require: true,
          align: "left",
        },
        {
          field: "orderId",
          title: "出库单主键",
          type: "string",
          width: 90,
          align: "left",
          hidden: true,
        },
        {
          field: "materielCode",
          title: "物料编号",
          type: "string",
          width: 150,
          align: "left",
          edit: { type: "string" },
          required: true,
        },
        {
          field: "materielName",
          title: "物料名称",
          type: "string",
          width: 150,
          align: "left",
          edit: { type: "string" },
          required: true,
        },
        {
          field: "batchNo",
          title: "批次号",
          type: "decimal",
          width: 150,
          align: "left",
          edit: { type: "string" },
          required: true,
        },
        {
          field: "supplierBatch",
          title: "供应商批次号",
          type: "decimal",
          width: 180,
          align: "left",
          edit: { type: "string" },
          required: true,
        },
        {
          field: "orderQuantity",
          title: "单据数量",
          type: "string",
          width: 90,
          align: "left",
          edit: { type: "number" },
          required: true,
        },
        {
          field: "lockQuantity",
          title: "锁定数量",
          type: "int",
          width: 120,
          align: "left",
        },
        {
          field: "overOutQuantity",
          title: "已出数量",
          type: "string",
          width: 200,
          align: "left",
        },
        {
          field: "orderDetailStatus",
          title: "订单明细状态",
          type: "string",
          width: 180,
          align: "left",
          bind: { key: "orderDetailStatusEnum", data: [] },
        },
        {
          field: "creater",
          title: "创建人",
          type: "string",
          width: 90,
          align: "left",
        },
        {
          field: "createDate",
          title: "创建时间",
          type: "datetime",
          width: 160,
          align: "left",
        },
        {
          field: "modifier",
          title: "修改人",
          type: "string",
          width: 100,
          align: "left",
        },
        {
          field: "modifyDate",
          title: "修改时间",
          type: "datetime",
          width: 160,
          align: "left",
        },
        {
          field: "remark",
          title: "备注",
          type: "string",
          width: 100,
          align: "left",
        },
      ],
      sortName: "id",
      key: "id",
    });
    return {
      table,
      extend,
      editFormFields,
      editFormOptions,
      searchFormFields,
      searchFormOptions,
      columns,
      detail,
    };
  },
});
</script>
WMS/WIDESEA_WMSClient/src/views/outbound/newoutboundOrderDetail.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,195 @@
<template>
    <view-grid
      ref="grid"
      :columns="columns"
      :detail="detail"
      :editFormFields="editFormFields"
      :editFormOptions="editFormOptions"
      :searchFormFields="searchFormFields"
      :searchFormOptions="searchFormOptions"
      :table="table"
      :extend="extend"
    >
    </view-grid>
  </template>
    <script>
  import extend from "@/extension/outbound/newoutboundOrderDetail.js";
  import { ref, defineComponent } from "vue";
  export default defineComponent({
    setup() {
      const table = ref({
        key: "id",
        footer: "Foots",
        cnName: "出库单明细",
        name: "newoutboundOrderDetail",
        url: "/newoutboundOrderDetail/",
        sortName: "id",
      });
      const editFormFields = ref({
        deviceCode: "",
        deviceName: "",
        deviceType: "",
        deviceStatus: "",
        deviceIp: "",
        devicePort: "",
        devicePlcType: "",
        deviceRemark: "",
      });
      const editFormOptions = ref([
        [
        ],
      ]);
      const searchFormFields = ref({
        deviceCode: "",
        deviceType: "",
        deviceStatus: "",
      });
      const searchFormOptions = ref([
        [
        { title: "物料编号", field: "materielCode", type: "like" },
        { title: "物料名称", field: "materielName", type: "like" },
        { title: "出库单主键", field: "orderId", type: "int" },
        { title: "批次号", field: "batchNo", type: "like" },
      ],
      [
        {
          field: "orderDetailStatus",title: "订单明细状态",type: "select",dataKey:"orderDetailStatusEnum", data: []
        },
        { title: "创建者", field: "creater", type: "like" },
        { title: "创建时间", field: "createDate", type: "datetime" },
      ],
      ]);
      const columns = ref([
      {
          field: "id",
          title: "Id",
          type: "int",
          width: 90,
          hidden: true,
          readonly: true,
          align: "left",
        },
        {
          field: "orderId",
          title: "出库单主键",
          type: "string",
          width: 90,
          align: "left",
        },
        {
          field: "materielCode",
          title: "物料编号",
          type: "string",
          width: 150,
          align: "left",
        },
        {
          field: "batchNo",
          title: "批次号",
          type: "decimal",
          width: 150,
          align: "left",
        },
        {
          field: "orderQuantity",
          title: "单据数量",
          type: "string",
          width: 90,
          align: "left",
        },
        {
          field: "overOutQuantity",
          title: "已出数量",
          type: "string",
          width: 80,
          align: "left",
        },
        {
          field: "orderDetailStatus",
          title: "订单明细状态",
          type: "string",
          width: 90,
          bind: { key: "orderDetailStatusEnum", data: [] },
        },
        {
          field: "locationName",
          title: "指定出库货位",
          type: "string",
          width: 200,
        },
                {
          field: "remark",
          title: "备注",
          type: "string",
          width: 150,
          align: "left",
          color:"red"
        },
        {
          field: "creater",
          title: "创建人",
          type: "string",
          width: 90,
          align: "left",
        },
        {
          field: "createDate",
          title: "创建时间",
          type: "datetime",
          width: 160,
          align: "left",
        },
        {
          field: "modifier",
          title: "修改人",
          type: "string",
          width: 100,
          align: "left",
        },
        {
          field: "modifyDate",
          title: "修改时间",
          type: "datetime",
          width: 160,
          align: "left",
        },
        {
          field: "materielName",
          title: "物料名称",
          type: "string",
          width: 150,
          align: "left",
        },
        {
          field: "lockQuantity",
          title: "锁定数量",
          type: "int",
          width: 120,
          align: "left",
        },
      ]);
      const detail = ref({
        cnName: "#detailCnName",
        table: "",
        columns: [],
        sortName: "",
      });
      return {
        table,
        extend,
        editFormFields,
        editFormOptions,
        searchFormFields,
        searchFormOptions,
        columns,
        detail,
      };
    },
  });
  </script>
WMS/WIDESEA_WMSServer/.vs/ProjectEvaluation/widesea_wmsserver.strings.v9.bin
Binary files differ
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/DesignTimeBuild/.dtbcache.v2
Binary files differ
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/0ef058ae-c319-46a4-8f85-8d624cb5a8ab.vsidx
Binary files differ
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/13c6b113-1345-4876-866e-6cc96d92decf.vsidx
Binary files differ
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/41d0345b-0011-4845-b5c5-ca0de3bd57c8.vsidx
Binary files differ
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/58855021-a9b7-463d-b84b-0e8d9f9e221a.vsidx
Binary files differ
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/5a2dba86-478b-4ce5-8597-3dae38896b09.vsidx
Binary files differ
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/5b36fd38-46f6-4e8b-a9e4-f642a8363e78.vsidx
Binary files differ
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/69ffc742-0c8d-4790-90eb-1a1592090460.vsidx
Binary files differ
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/a3962f8b-f362-4486-8c2d-b964b5889a5a.vsidx
Binary files differ
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/.futdcache.v2
Binary files differ
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/.suo
Binary files differ
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.backup.json
@@ -11,12 +11,116 @@
      "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\partialtaskservice_inbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_core\\enums\\taskenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\enums\\taskenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_common\\taskenum\\tasktypeenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|solutionrelative:widesea_common\\taskenum\\tasktypeenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_basicservice\\service\\assignlocation\\locationinfoservice_fl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|solutionrelative:widesea_basicservice\\service\\assignlocation\\locationinfoservice_fl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_basicservice\\service\\locationinfoservice_common.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|solutionrelative:widesea_basicservice\\service\\locationinfoservice_common.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}|WIDESEA_InboundService\\WIDESEA_InboundService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_inboundservice\\base\\inboundorderservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}|WIDESEA_InboundService\\WIDESEA_InboundService.csproj|solutionrelative:widesea_inboundservice\\base\\inboundorderservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_taskinfoservice\\partialtaskservice_outbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\partialtaskservice_outbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{1B884AD3-7E67-44CD-B182-DEECDD671DD2}|WIDESEA_OutboundService\\WIDESEA_OutboundService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_outboundservice\\service\\outboundorderdetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{1B884AD3-7E67-44CD-B182-DEECDD671DD2}|WIDESEA_OutboundService\\WIDESEA_OutboundService.csproj|solutionrelative:widesea_outboundservice\\service\\outboundorderdetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{B9E62A73-1270-4FFC-B23C-F75C075D8460}|WIDESEA_StockRepository\\WIDESEA_StockRepository.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_stockrepository\\stockinforepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{B9E62A73-1270-4FFC-B23C-F75C075D8460}|WIDESEA_StockRepository\\WIDESEA_StockRepository.csproj|solutionrelative:widesea_stockrepository\\stockinforepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{9144117D-3D55-4250-9CF5-C6A8D8A07062}|WIDESEA_BasicRepository\\WIDESEA_BasicRepository.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_basicrepository\\locationinforepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{9144117D-3D55-4250-9CF5-C6A8D8A07062}|WIDESEA_BasicRepository\\WIDESEA_BasicRepository.csproj|solutionrelative:widesea_basicrepository\\locationinforepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_basicservice\\service\\assignlocation\\locationinfoservice_ys.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|solutionrelative:widesea_basicservice\\service\\assignlocation\\locationinfoservice_ys.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_basicservice\\service\\assignlocation\\locationinfoservice_cp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|solutionrelative:widesea_basicservice\\service\\assignlocation\\locationinfoservice_cp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_core\\helper\\codeanalysishelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\helper\\codeanalysishelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_taskinfoservice\\newpartialtaskservice_outbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\newpartialtaskservice_outbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\taskinfo\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\taskinfo\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{CE0DB91F-5A68-448E-A419-4C26B5039F51}|WIDESEA_ITaskInfoService\\WIDESEA_ITaskInfoService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{CE0DB91F-5A68-448E-A419-4C26B5039F51}|WIDESEA_ITaskInfoService\\WIDESEA_ITaskInfoService.csproj|solutionrelative:widesea_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\outbound\\newoutboundorderdetailcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\outbound\\newoutboundorderdetailcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_basicservice\\service\\assignlocation\\locationinfoservice_bc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|solutionrelative:widesea_basicservice\\service\\assignlocation\\locationinfoservice_bc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\filter\\customprofile.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\filter\\customprofile.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{69C05DDB-1AA6-4090-9916-029CD0E95B10}|WIDESEA_IOutboundService\\WIDESEA_IOutboundService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_ioutboundservice\\ioutboundorderservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{69C05DDB-1AA6-4090-9916-029CD0E95B10}|WIDESEA_IOutboundService\\WIDESEA_IOutboundService.csproj|solutionrelative:widesea_ioutboundservice\\ioutboundorderservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{1B884AD3-7E67-44CD-B182-DEECDD671DD2}|WIDESEA_OutboundService\\WIDESEA_OutboundService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_outboundservice\\service\\outstocklockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{1B884AD3-7E67-44CD-B182-DEECDD671DD2}|WIDESEA_OutboundService\\WIDESEA_OutboundService.csproj|solutionrelative:widesea_outboundservice\\service\\outstocklockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{1B884AD3-7E67-44CD-B182-DEECDD671DD2}|WIDESEA_OutboundService\\WIDESEA_OutboundService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_outboundservice\\base\\outboundorderservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{1B884AD3-7E67-44CD-B182-DEECDD671DD2}|WIDESEA_OutboundService\\WIDESEA_OutboundService.csproj|solutionrelative:widesea_outboundservice\\base\\outboundorderservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\outbound\\outboundorderdetailcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\outbound\\outboundorderdetailcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{69C05DDB-1AA6-4090-9916-029CD0E95B10}|WIDESEA_IOutboundService\\WIDESEA_IOutboundService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_ioutboundservice\\ioutstocklockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{69C05DDB-1AA6-4090-9916-029CD0E95B10}|WIDESEA_IOutboundService\\WIDESEA_IOutboundService.csproj|solutionrelative:widesea_ioutboundservice\\ioutstocklockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\outbound\\newoutboundordercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\outbound\\newoutboundordercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_model\\models\\outbound\\dt_newoutboundorder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|solutionrelative:widesea_model\\models\\outbound\\dt_newoutboundorder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_model\\models\\stock\\dt_stockinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|solutionrelative:widesea_model\\models\\stock\\dt_stockinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\outbound\\outboundordercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\outbound\\outboundordercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_common\\inventoryallocate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|solutionrelative:widesea_common\\inventoryallocate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    }
  ],
  "DocumentGroupContainers": [
@@ -26,7 +130,7 @@
      "DocumentGroups": [
        {
          "DockedWidth": 200,
          "SelectedChildIndex": 4,
          "SelectedChildIndex": 14,
          "Children": [
            {
              "$type": "Bookmark",
@@ -34,41 +138,169 @@
            },
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "Title": "PartialTaskService_Inbound.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "ViewState": "AgIAAJsAAAAAAAAAAAAgwLMAAAAgAAAAAAAAAA==",
              "DocumentIndex": 2,
              "Title": "TaskEnum.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Enums\\TaskEnum.cs",
              "RelativeDocumentMoniker": "WIDESEA_Core\\Enums\\TaskEnum.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Enums\\TaskEnum.cs",
              "RelativeToolTip": "WIDESEA_Core\\Enums\\TaskEnum.cs",
              "ViewState": "AgIAAFYAAAAAAAAAAAAAAGgAAAAVAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-28T07:07:34.552Z",
              "WhenOpened": "2026-01-03T07:04:27.255Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 3,
              "DocumentIndex": 10,
              "Title": "LocationInfoRepository.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicRepository\\LocationInfoRepository.cs",
              "RelativeDocumentMoniker": "WIDESEA_BasicRepository\\LocationInfoRepository.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicRepository\\LocationInfoRepository.cs",
              "RelativeToolTip": "WIDESEA_BasicRepository\\LocationInfoRepository.cs",
              "ViewState": "AgIAACUAAAAAAAAAAAA7wDoAAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2026-01-03T03:01:58.451Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 9,
              "Title": "StockInfoRepository.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_StockRepository\\StockInfoRepository.cs",
              "RelativeDocumentMoniker": "WIDESEA_StockRepository\\StockInfoRepository.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_StockRepository\\StockInfoRepository.cs",
              "RelativeToolTip": "WIDESEA_StockRepository\\StockInfoRepository.cs",
              "ViewState": "AgIAAEEAAAAAAAAAAAAkwE8AAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2026-01-03T03:01:58.472Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 4,
              "Title": "LocationInfoService_FL.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_FL.cs",
              "RelativeDocumentMoniker": "WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_FL.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_FL.cs",
              "RelativeToolTip": "WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_FL.cs",
              "ViewState": "AgIAAIMAAAAAAAAAAAAowJsAAAAYAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2026-01-03T02:25:38.725Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 11,
              "Title": "LocationInfoService_YS.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_YS.cs",
              "RelativeDocumentMoniker": "WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_YS.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_YS.cs",
              "RelativeToolTip": "WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_YS.cs",
              "ViewState": "AgIAAIoAAAAAAAAAAAAowJsAAAAYAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2026-01-03T02:25:30.112Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 13,
              "Title": "CodeAnalysisHelper.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Helper\\CodeAnalysisHelper.cs",
              "RelativeDocumentMoniker": "WIDESEA_Core\\Helper\\CodeAnalysisHelper.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Helper\\CodeAnalysisHelper.cs",
              "RelativeToolTip": "WIDESEA_Core\\Helper\\CodeAnalysisHelper.cs",
              "ViewState": "AgIAAA0AAAAAAAAAAAAAABwAAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2026-01-03T01:44:24.181Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 19,
              "Title": "CustomProfile.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Filter\\CustomProfile.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Filter\\CustomProfile.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Filter\\CustomProfile.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Filter\\CustomProfile.cs",
              "ViewState": "AgIAAAYAAAAAAAAAAAAAAB8AAAAMAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-31T03:08:49.347Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 12,
              "Title": "LocationInfoService_CP.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_CP.cs",
              "RelativeDocumentMoniker": "WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_CP.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_CP.cs",
              "RelativeToolTip": "WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_CP.cs",
              "ViewState": "AgIAAMoAAAAAAAAAAAAkwPEAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-30T07:33:26.365Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 5,
              "Title": "LocationInfoService_Common.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\LocationInfoService_Common.cs",
              "RelativeDocumentMoniker": "WIDESEA_BasicService\\Service\\LocationInfoService_Common.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\LocationInfoService_Common.cs",
              "RelativeToolTip": "WIDESEA_BasicService\\Service\\LocationInfoService_Common.cs",
              "ViewState": "AgIAABUAAAAAAAAAAAA2wBkAAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-30T07:33:26.455Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 18,
              "Title": "LocationInfoService_BC.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_BC.cs",
              "RelativeDocumentMoniker": "WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_BC.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_BC.cs",
              "RelativeToolTip": "WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_BC.cs",
              "ViewState": "AgIAAAYAAAAAAAAAAAAkwBkAAACnAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-30T07:33:26.479Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 14,
              "Title": "NewPartialTaskService_Outbound.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\NewPartialTaskService_Outbound.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\NewPartialTaskService_Outbound.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\NewPartialTaskService_Outbound.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\NewPartialTaskService_Outbound.cs",
              "ViewState": "AgIAABAAAAAAAAAAAAAAwBEAAAAMAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T12:50:49.961Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 15,
              "Title": "TaskController.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "ViewState": "AgIAADEAAAAAwIGgiMXlv0kAAAAoAAAAAAAAAA==",
              "ViewState": "AgIAADcAAAAAAAAAAADwv0gAAACOAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-28T06:56:56.873Z",
              "EditorCaption": ""
              "WhenOpened": "2025-12-28T06:56:56.873Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 2,
              "Title": "InboundOrderService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_InboundService\\Base\\InboundOrderService.cs",
              "RelativeDocumentMoniker": "WIDESEA_InboundService\\Base\\InboundOrderService.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_InboundService\\Base\\InboundOrderService.cs",
              "RelativeToolTip": "WIDESEA_InboundService\\Base\\InboundOrderService.cs",
              "ViewState": "AgIAADMBAAAAAAAAAAAmwEsBAAAIAAAAAAAAAA==",
              "DocumentIndex": 7,
              "Title": "PartialTaskService_Outbound.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Outbound.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\PartialTaskService_Outbound.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Outbound.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\PartialTaskService_Outbound.cs",
              "ViewState": "AgIAADEDAAAAAAAAAAAowEEDAAAoAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-28T06:29:01.1Z",
              "WhenOpened": "2025-12-28T07:43:45.41Z",
              "EditorCaption": ""
            },
            {
@@ -79,10 +311,206 @@
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\TaskService.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\TaskService.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\TaskService.cs",
              "ViewState": "AgIAAJoAAAAAAAAAAAAvwLYAAAANAAAAAAAAAA==",
              "ViewState": "AgIAALEBAAAAAAAAAAAcwMUBAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-28T06:28:46.582Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 6,
              "Title": "InboundOrderService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_InboundService\\Base\\InboundOrderService.cs",
              "RelativeDocumentMoniker": "WIDESEA_InboundService\\Base\\InboundOrderService.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_InboundService\\Base\\InboundOrderService.cs",
              "RelativeToolTip": "WIDESEA_InboundService\\Base\\InboundOrderService.cs",
              "ViewState": "AgIAAEMAAAAAAAAAAAAmwFgAAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-28T06:29:01.1Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "Title": "PartialTaskService_Inbound.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "ViewState": "AgIAAKgAAAAAAAAAAAAgwPIAAABMAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-28T07:07:34.552Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 26,
              "Title": "Dt_NewOutboundOrder.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Outbound\\Dt_NewOutboundOrder.cs",
              "RelativeDocumentMoniker": "WIDESEA_Model\\Models\\Outbound\\Dt_NewOutboundOrder.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Outbound\\Dt_NewOutboundOrder.cs",
              "RelativeToolTip": "WIDESEA_Model\\Models\\Outbound\\Dt_NewOutboundOrder.cs",
              "ViewState": "AgIAAAMAAAAAAAAAAAAowBwAAAATAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T14:37:04.942Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 3,
              "Title": "TaskTypeEnum.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\TaskEnum\\TaskTypeEnum.cs",
              "RelativeDocumentMoniker": "WIDESEA_Common\\TaskEnum\\TaskTypeEnum.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\TaskEnum\\TaskTypeEnum.cs",
              "RelativeToolTip": "WIDESEA_Common\\TaskEnum\\TaskTypeEnum.cs",
              "ViewState": "AgIAABEAAAAAAAAAAAAowCoAAAAVAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-30T02:03:06.718Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 20,
              "Title": "IOutboundOrderService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_IOutboundService\\IOutboundOrderService.cs",
              "RelativeDocumentMoniker": "WIDESEA_IOutboundService\\IOutboundOrderService.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_IOutboundService\\IOutboundOrderService.cs",
              "RelativeToolTip": "WIDESEA_IOutboundService\\IOutboundOrderService.cs",
              "ViewState": "AgIAAAIAAAAAAAAAAAAqwBIAAAArAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-30T02:01:25.531Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 21,
              "Title": "OutStockLockInfoService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_OutboundService\\Service\\OutStockLockInfoService.cs",
              "RelativeDocumentMoniker": "WIDESEA_OutboundService\\Service\\OutStockLockInfoService.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_OutboundService\\Service\\OutStockLockInfoService.cs",
              "RelativeToolTip": "WIDESEA_OutboundService\\Service\\OutStockLockInfoService.cs",
              "ViewState": "AgIAACEAAAAAAAAAAAAIwDgAAAAqAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T13:46:21.865Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 22,
              "Title": "OutboundOrderService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_OutboundService\\Base\\OutboundOrderService.cs",
              "RelativeDocumentMoniker": "WIDESEA_OutboundService\\Base\\OutboundOrderService.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_OutboundService\\Base\\OutboundOrderService.cs",
              "RelativeToolTip": "WIDESEA_OutboundService\\Base\\OutboundOrderService.cs",
              "ViewState": "AgIAAEwAAAAAAAAAAAAEwGIAAAAyAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T09:12:17.093Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 16,
              "Title": "ITaskService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_ITaskInfoService\\ITaskService.cs",
              "RelativeDocumentMoniker": "WIDESEA_ITaskInfoService\\ITaskService.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_ITaskInfoService\\ITaskService.cs",
              "RelativeToolTip": "WIDESEA_ITaskInfoService\\ITaskService.cs",
              "ViewState": "AgIAABYAAAAAAAAAAAD4vykAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T01:38:40.735Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 23,
              "Title": "OutboundOrderDetailController.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Outbound\\OutboundOrderDetailController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Outbound\\OutboundOrderDetailController.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Outbound\\OutboundOrderDetailController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Outbound\\OutboundOrderDetailController.cs",
              "ViewState": "AgIAAAMAAAAAAAAAAAAAACcAAAAJAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T13:07:44.429Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 8,
              "Title": "OutboundOrderDetailService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_OutboundService\\Service\\OutboundOrderDetailService.cs",
              "RelativeDocumentMoniker": "WIDESEA_OutboundService\\Service\\OutboundOrderDetailService.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_OutboundService\\Service\\OutboundOrderDetailService.cs",
              "RelativeToolTip": "WIDESEA_OutboundService\\Service\\OutboundOrderDetailService.cs",
              "ViewState": "AgIAACUBAAAAAAAAAAAmwDgBAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T13:47:44.557Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 24,
              "Title": "IOutStockLockInfoService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_IOutboundService\\IOutStockLockInfoService.cs",
              "RelativeDocumentMoniker": "WIDESEA_IOutboundService\\IOutStockLockInfoService.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_IOutboundService\\IOutStockLockInfoService.cs",
              "RelativeToolTip": "WIDESEA_IOutboundService\\IOutStockLockInfoService.cs",
              "ViewState": "AgIAAA0AAAAAAAAAAAAMwCAAAAAcAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T13:47:26.387Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 28,
              "Title": "OutboundOrderController.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Outbound\\OutboundOrderController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Outbound\\OutboundOrderController.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Outbound\\OutboundOrderController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Outbound\\OutboundOrderController.cs",
              "ViewState": "AgIAABoAAAAAAAAAAAAQwEQAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T13:06:47.708Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 17,
              "Title": "NewOutboundOrderDetailController.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Outbound\\NewOutboundOrderDetailController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Outbound\\NewOutboundOrderDetailController.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Outbound\\NewOutboundOrderDetailController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Outbound\\NewOutboundOrderDetailController.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAAmAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T13:06:43.184Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 25,
              "Title": "NewOutboundOrderController.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Outbound\\NewOutboundOrderController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Outbound\\NewOutboundOrderController.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Outbound\\NewOutboundOrderController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Outbound\\NewOutboundOrderController.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAoAAAAwAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T13:06:26.437Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 27,
              "Title": "Dt_StockInfo.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Stock\\Dt_StockInfo.cs",
              "RelativeDocumentMoniker": "WIDESEA_Model\\Models\\Stock\\Dt_StockInfo.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Stock\\Dt_StockInfo.cs",
              "RelativeToolTip": "WIDESEA_Model\\Models\\Stock\\Dt_StockInfo.cs",
              "ViewState": "AgIAABwAAAAAAAAAAIAzwDAAAAATAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T07:51:35.44Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 29,
              "Title": "InventoryAllocate.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\InventoryAllocate.cs",
              "RelativeDocumentMoniker": "WIDESEA_Common\\InventoryAllocate.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\InventoryAllocate.cs",
              "RelativeToolTip": "WIDESEA_Common\\InventoryAllocate.cs",
              "ViewState": "AgIAAC0AAAAAAAAAAADgvzwAAAAYAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T07:27:22.539Z"
            }
          ]
        }
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.json
@@ -3,28 +3,124 @@
  "WorkspaceRootPath": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\",
  "Documents": [
    {
      "AbsoluteMoniker": "D:0:0:{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}|WIDESEA_InboundService\\WIDESEA_InboundService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_inboundservice\\base\\inboundorderservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}|WIDESEA_InboundService\\WIDESEA_InboundService.csproj|solutionrelative:widesea_inboundservice\\base\\inboundorderservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_taskinfoservice\\partialtaskservice_outbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\partialtaskservice_outbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_model\\models\\outbound\\dt_newoutboundorder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|solutionrelative:widesea_model\\models\\outbound\\dt_newoutboundorder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{1B884AD3-7E67-44CD-B182-DEECDD671DD2}|WIDESEA_OutboundService\\WIDESEA_OutboundService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_outboundservice\\base\\outboundorderservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{1B884AD3-7E67-44CD-B182-DEECDD671DD2}|WIDESEA_OutboundService\\WIDESEA_OutboundService.csproj|solutionrelative:widesea_outboundservice\\base\\outboundorderservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_taskinfoservice\\partialtaskservice_inbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\partialtaskservice_inbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{1B884AD3-7E67-44CD-B182-DEECDD671DD2}|WIDESEA_OutboundService\\WIDESEA_OutboundService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_outboundservice\\service\\outboundorderdetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{1B884AD3-7E67-44CD-B182-DEECDD671DD2}|WIDESEA_OutboundService\\WIDESEA_OutboundService.csproj|solutionrelative:widesea_outboundservice\\service\\outboundorderdetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{9144117D-3D55-4250-9CF5-C6A8D8A07062}|WIDESEA_BasicRepository\\WIDESEA_BasicRepository.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_basicrepository\\locationinforepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{9144117D-3D55-4250-9CF5-C6A8D8A07062}|WIDESEA_BasicRepository\\WIDESEA_BasicRepository.csproj|solutionrelative:widesea_basicrepository\\locationinforepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_core\\enums\\taskenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\enums\\taskenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_common\\taskenum\\tasktypeenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|solutionrelative:widesea_common\\taskenum\\tasktypeenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_basicservice\\service\\assignlocation\\locationinfoservice_fl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|solutionrelative:widesea_basicservice\\service\\assignlocation\\locationinfoservice_fl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_basicservice\\service\\locationinfoservice_common.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|solutionrelative:widesea_basicservice\\service\\locationinfoservice_common.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}|WIDESEA_InboundService\\WIDESEA_InboundService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_inboundservice\\base\\inboundorderservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}|WIDESEA_InboundService\\WIDESEA_InboundService.csproj|solutionrelative:widesea_inboundservice\\base\\inboundorderservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{B9E62A73-1270-4FFC-B23C-F75C075D8460}|WIDESEA_StockRepository\\WIDESEA_StockRepository.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_stockrepository\\stockinforepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{B9E62A73-1270-4FFC-B23C-F75C075D8460}|WIDESEA_StockRepository\\WIDESEA_StockRepository.csproj|solutionrelative:widesea_stockrepository\\stockinforepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_basicservice\\service\\assignlocation\\locationinfoservice_ys.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|solutionrelative:widesea_basicservice\\service\\assignlocation\\locationinfoservice_ys.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_basicservice\\service\\assignlocation\\locationinfoservice_cp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|solutionrelative:widesea_basicservice\\service\\assignlocation\\locationinfoservice_cp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_core\\helper\\codeanalysishelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\helper\\codeanalysishelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_taskinfoservice\\newpartialtaskservice_outbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\newpartialtaskservice_outbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\taskinfo\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\taskinfo\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{CE0DB91F-5A68-448E-A419-4C26B5039F51}|WIDESEA_ITaskInfoService\\WIDESEA_ITaskInfoService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{CE0DB91F-5A68-448E-A419-4C26B5039F51}|WIDESEA_ITaskInfoService\\WIDESEA_ITaskInfoService.csproj|solutionrelative:widesea_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\taskinfo\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\taskinfo\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\outbound\\newoutboundorderdetailcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\outbound\\newoutboundorderdetailcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_basicservice\\service\\assignlocation\\locationinfoservice_bc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|solutionrelative:widesea_basicservice\\service\\assignlocation\\locationinfoservice_bc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\filter\\customprofile.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\filter\\customprofile.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{69C05DDB-1AA6-4090-9916-029CD0E95B10}|WIDESEA_IOutboundService\\WIDESEA_IOutboundService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_ioutboundservice\\ioutboundorderservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{69C05DDB-1AA6-4090-9916-029CD0E95B10}|WIDESEA_IOutboundService\\WIDESEA_IOutboundService.csproj|solutionrelative:widesea_ioutboundservice\\ioutboundorderservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{1B884AD3-7E67-44CD-B182-DEECDD671DD2}|WIDESEA_OutboundService\\WIDESEA_OutboundService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_outboundservice\\service\\outstocklockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{1B884AD3-7E67-44CD-B182-DEECDD671DD2}|WIDESEA_OutboundService\\WIDESEA_OutboundService.csproj|solutionrelative:widesea_outboundservice\\service\\outstocklockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\outbound\\outboundorderdetailcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\outbound\\outboundorderdetailcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{69C05DDB-1AA6-4090-9916-029CD0E95B10}|WIDESEA_IOutboundService\\WIDESEA_IOutboundService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_ioutboundservice\\ioutstocklockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{69C05DDB-1AA6-4090-9916-029CD0E95B10}|WIDESEA_IOutboundService\\WIDESEA_IOutboundService.csproj|solutionrelative:widesea_ioutboundservice\\ioutstocklockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\outbound\\newoutboundordercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\outbound\\newoutboundordercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_model\\models\\stock\\dt_stockinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|solutionrelative:widesea_model\\models\\stock\\dt_stockinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\outbound\\outboundordercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\outbound\\outboundordercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wms\\widesea_wmsserver\\widesea_common\\inventoryallocate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|solutionrelative:widesea_common\\inventoryallocate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    }
  ],
  "DocumentGroupContainers": [
@@ -34,7 +130,7 @@
      "DocumentGroups": [
        {
          "DockedWidth": 200,
          "SelectedChildIndex": 5,
          "SelectedChildIndex": 14,
          "Children": [
            {
              "$type": "Bookmark",
@@ -42,16 +138,157 @@
            },
            {
              "$type": "Document",
              "DocumentIndex": 4,
              "Title": "ITaskService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_ITaskInfoService\\ITaskService.cs",
              "RelativeDocumentMoniker": "WIDESEA_ITaskInfoService\\ITaskService.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_ITaskInfoService\\ITaskService.cs",
              "RelativeToolTip": "WIDESEA_ITaskInfoService\\ITaskService.cs",
              "ViewState": "AgIAABoAAAAAAAAAAAAQwDMAAAAbAAAAAAAAAA==",
              "DocumentIndex": 7,
              "Title": "TaskEnum.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Enums\\TaskEnum.cs",
              "RelativeDocumentMoniker": "WIDESEA_Core\\Enums\\TaskEnum.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Enums\\TaskEnum.cs",
              "RelativeToolTip": "WIDESEA_Core\\Enums\\TaskEnum.cs",
              "ViewState": "AgIAAFYAAAAAAAAAAAAAAGgAAAAVAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T01:38:40.735Z",
              "WhenOpened": "2026-01-03T07:04:27.255Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 6,
              "Title": "LocationInfoRepository.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicRepository\\LocationInfoRepository.cs",
              "RelativeDocumentMoniker": "WIDESEA_BasicRepository\\LocationInfoRepository.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicRepository\\LocationInfoRepository.cs",
              "RelativeToolTip": "WIDESEA_BasicRepository\\LocationInfoRepository.cs",
              "ViewState": "AgIAACcAAAAAAAAAAAAYwDoAAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2026-01-03T03:01:58.451Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 12,
              "Title": "StockInfoRepository.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_StockRepository\\StockInfoRepository.cs",
              "RelativeDocumentMoniker": "WIDESEA_StockRepository\\StockInfoRepository.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_StockRepository\\StockInfoRepository.cs",
              "RelativeToolTip": "WIDESEA_StockRepository\\StockInfoRepository.cs",
              "ViewState": "AgIAAEEAAAAAAAAAAAAkwE8AAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2026-01-03T03:01:58.472Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 9,
              "Title": "LocationInfoService_FL.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_FL.cs",
              "RelativeDocumentMoniker": "WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_FL.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_FL.cs",
              "RelativeToolTip": "WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_FL.cs",
              "ViewState": "AgIAAIMAAAAAAAAAAAAowJsAAAAYAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2026-01-03T02:25:38.725Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 13,
              "Title": "LocationInfoService_YS.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_YS.cs",
              "RelativeDocumentMoniker": "WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_YS.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_YS.cs",
              "RelativeToolTip": "WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_YS.cs",
              "ViewState": "AgIAAIoAAAAAAAAAAAAowJsAAAAYAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2026-01-03T02:25:30.112Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 15,
              "Title": "CodeAnalysisHelper.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Helper\\CodeAnalysisHelper.cs",
              "RelativeDocumentMoniker": "WIDESEA_Core\\Helper\\CodeAnalysisHelper.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Helper\\CodeAnalysisHelper.cs",
              "RelativeToolTip": "WIDESEA_Core\\Helper\\CodeAnalysisHelper.cs",
              "ViewState": "AgIAAA0AAAAAAAAAAAAAABwAAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2026-01-03T01:44:24.181Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 21,
              "Title": "CustomProfile.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Filter\\CustomProfile.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Filter\\CustomProfile.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Filter\\CustomProfile.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Filter\\CustomProfile.cs",
              "ViewState": "AgIAAAYAAAAAAAAAAAAAAB8AAAAMAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-31T03:08:49.347Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 14,
              "Title": "LocationInfoService_CP.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_CP.cs",
              "RelativeDocumentMoniker": "WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_CP.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_CP.cs",
              "RelativeToolTip": "WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_CP.cs",
              "ViewState": "AgIAAMoAAAAAAAAAAAAkwPEAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-30T07:33:26.365Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 10,
              "Title": "LocationInfoService_Common.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\LocationInfoService_Common.cs",
              "RelativeDocumentMoniker": "WIDESEA_BasicService\\Service\\LocationInfoService_Common.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\LocationInfoService_Common.cs",
              "RelativeToolTip": "WIDESEA_BasicService\\Service\\LocationInfoService_Common.cs",
              "ViewState": "AgIAABUAAAAAAAAAAAA2wBkAAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-30T07:33:26.455Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 20,
              "Title": "LocationInfoService_BC.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_BC.cs",
              "RelativeDocumentMoniker": "WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_BC.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_BC.cs",
              "RelativeToolTip": "WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_BC.cs",
              "ViewState": "AgIAAAYAAAAAAAAAAAAkwBkAAACnAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-30T07:33:26.479Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 16,
              "Title": "NewPartialTaskService_Outbound.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\NewPartialTaskService_Outbound.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\NewPartialTaskService_Outbound.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\NewPartialTaskService_Outbound.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\NewPartialTaskService_Outbound.cs",
              "ViewState": "AgIAABAAAAAAAAAAAAAAwBEAAAAMAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T12:50:49.961Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 17,
              "Title": "TaskController.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "ViewState": "AgIAADcAAAAAAAAAAADwv0gAAACOAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-28T06:56:56.873Z"
            },
            {
              "$type": "Document",
@@ -61,62 +298,221 @@
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\PartialTaskService_Outbound.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Outbound.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\PartialTaskService_Outbound.cs",
              "ViewState": "AgIAAKwAAAAAAAAAAAAmwM8AAAAwAAAAAAAAAA==",
              "ViewState": "AgIAAM8DAAAAAAAAAAAcwO8DAAAxAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-28T07:43:45.41Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 2,
              "Title": "PartialTaskService_Inbound.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "ViewState": "AgIAAJsAAAAAAAAAAAAgwLMAAAAgAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-28T07:07:34.552Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 5,
              "Title": "TaskController.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "ViewState": "AgIAABAAAAAAAAAAAAA4wCkAAAAyAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-28T06:56:56.873Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 0,
              "Title": "TaskService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\TaskService.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\TaskService.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\TaskService.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\TaskService.cs",
              "ViewState": "AgIAAAUGAAAAAAAAAAAmwBwGAAAhAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-28T06:28:46.582Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 11,
              "Title": "InboundOrderService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_InboundService\\Base\\InboundOrderService.cs",
              "RelativeDocumentMoniker": "WIDESEA_InboundService\\Base\\InboundOrderService.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_InboundService\\Base\\InboundOrderService.cs",
              "RelativeToolTip": "WIDESEA_InboundService\\Base\\InboundOrderService.cs",
              "ViewState": "AgIAACIFAAAAAAAAAAAAAFQFAABPAAAAAAAAAA==",
              "ViewState": "AgIAAEMAAAAAAAAAAAAmwFgAAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-28T06:29:01.1Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 3,
              "Title": "TaskService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\TaskService.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\TaskService.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\TaskService.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\TaskService.cs",
              "ViewState": "AgIAADADAAAAAAAAAAAmwEUDAAAaAAAAAAAAAA==",
              "DocumentIndex": 4,
              "Title": "PartialTaskService_Inbound.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "ViewState": "AgIAACYBAAAAAAAAAAAgwDoBAAAXAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-28T06:28:46.582Z",
              "WhenOpened": "2025-12-28T07:07:34.552Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 2,
              "Title": "Dt_NewOutboundOrder.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Outbound\\Dt_NewOutboundOrder.cs",
              "RelativeDocumentMoniker": "WIDESEA_Model\\Models\\Outbound\\Dt_NewOutboundOrder.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Outbound\\Dt_NewOutboundOrder.cs",
              "RelativeToolTip": "WIDESEA_Model\\Models\\Outbound\\Dt_NewOutboundOrder.cs",
              "ViewState": "AgIAAAMAAAAAAAAAAAAowBwAAAATAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T14:37:04.942Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 8,
              "Title": "TaskTypeEnum.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\TaskEnum\\TaskTypeEnum.cs",
              "RelativeDocumentMoniker": "WIDESEA_Common\\TaskEnum\\TaskTypeEnum.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\TaskEnum\\TaskTypeEnum.cs",
              "RelativeToolTip": "WIDESEA_Common\\TaskEnum\\TaskTypeEnum.cs",
              "ViewState": "AgIAABEAAAAAAAAAAAAowCoAAAAVAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-30T02:03:06.718Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 22,
              "Title": "IOutboundOrderService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_IOutboundService\\IOutboundOrderService.cs",
              "RelativeDocumentMoniker": "WIDESEA_IOutboundService\\IOutboundOrderService.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_IOutboundService\\IOutboundOrderService.cs",
              "RelativeToolTip": "WIDESEA_IOutboundService\\IOutboundOrderService.cs",
              "ViewState": "AgIAAAIAAAAAAAAAAAAqwBIAAAArAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-30T02:01:25.531Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 23,
              "Title": "OutStockLockInfoService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_OutboundService\\Service\\OutStockLockInfoService.cs",
              "RelativeDocumentMoniker": "WIDESEA_OutboundService\\Service\\OutStockLockInfoService.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_OutboundService\\Service\\OutStockLockInfoService.cs",
              "RelativeToolTip": "WIDESEA_OutboundService\\Service\\OutStockLockInfoService.cs",
              "ViewState": "AgIAACEAAAAAAAAAAAAIwDgAAAAqAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T13:46:21.865Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 3,
              "Title": "OutboundOrderService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_OutboundService\\Base\\OutboundOrderService.cs",
              "RelativeDocumentMoniker": "WIDESEA_OutboundService\\Base\\OutboundOrderService.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_OutboundService\\Base\\OutboundOrderService.cs",
              "RelativeToolTip": "WIDESEA_OutboundService\\Base\\OutboundOrderService.cs",
              "ViewState": "AgIAAJoBAAAAAAAAAAAlwGIAAAAyAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T09:12:17.093Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 18,
              "Title": "ITaskService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_ITaskInfoService\\ITaskService.cs",
              "RelativeDocumentMoniker": "WIDESEA_ITaskInfoService\\ITaskService.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_ITaskInfoService\\ITaskService.cs",
              "RelativeToolTip": "WIDESEA_ITaskInfoService\\ITaskService.cs",
              "ViewState": "AgIAABYAAAAAAAAAAAD4vykAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T01:38:40.735Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 24,
              "Title": "OutboundOrderDetailController.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Outbound\\OutboundOrderDetailController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Outbound\\OutboundOrderDetailController.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Outbound\\OutboundOrderDetailController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Outbound\\OutboundOrderDetailController.cs",
              "ViewState": "AgIAAAMAAAAAAAAAAAAAACcAAAAJAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T13:07:44.429Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 5,
              "Title": "OutboundOrderDetailService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_OutboundService\\Service\\OutboundOrderDetailService.cs",
              "RelativeDocumentMoniker": "WIDESEA_OutboundService\\Service\\OutboundOrderDetailService.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_OutboundService\\Service\\OutboundOrderDetailService.cs",
              "RelativeToolTip": "WIDESEA_OutboundService\\Service\\OutboundOrderDetailService.cs",
              "ViewState": "AgIAACYBAAAAAAAAAAAcwDgBAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T13:47:44.557Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 25,
              "Title": "IOutStockLockInfoService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_IOutboundService\\IOutStockLockInfoService.cs",
              "RelativeDocumentMoniker": "WIDESEA_IOutboundService\\IOutStockLockInfoService.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_IOutboundService\\IOutStockLockInfoService.cs",
              "RelativeToolTip": "WIDESEA_IOutboundService\\IOutStockLockInfoService.cs",
              "ViewState": "AgIAAA0AAAAAAAAAAAAMwCAAAAAcAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T13:47:26.387Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 28,
              "Title": "OutboundOrderController.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Outbound\\OutboundOrderController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Outbound\\OutboundOrderController.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Outbound\\OutboundOrderController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Outbound\\OutboundOrderController.cs",
              "ViewState": "AgIAABoAAAAAAAAAAAAQwEQAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T13:06:47.708Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 19,
              "Title": "NewOutboundOrderDetailController.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Outbound\\NewOutboundOrderDetailController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Outbound\\NewOutboundOrderDetailController.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Outbound\\NewOutboundOrderDetailController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Outbound\\NewOutboundOrderDetailController.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAAmAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T13:06:43.184Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 26,
              "Title": "NewOutboundOrderController.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Outbound\\NewOutboundOrderController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Outbound\\NewOutboundOrderController.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Outbound\\NewOutboundOrderController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Outbound\\NewOutboundOrderController.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAoAAAAwAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T13:06:26.437Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 27,
              "Title": "Dt_StockInfo.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Stock\\Dt_StockInfo.cs",
              "RelativeDocumentMoniker": "WIDESEA_Model\\Models\\Stock\\Dt_StockInfo.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Stock\\Dt_StockInfo.cs",
              "RelativeToolTip": "WIDESEA_Model\\Models\\Stock\\Dt_StockInfo.cs",
              "ViewState": "AgIAABwAAAAAAAAAAIAzwDAAAAATAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T07:51:35.44Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 29,
              "Title": "InventoryAllocate.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\InventoryAllocate.cs",
              "RelativeDocumentMoniker": "WIDESEA_Common\\InventoryAllocate.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\InventoryAllocate.cs",
              "RelativeToolTip": "WIDESEA_Common\\InventoryAllocate.cs",
              "ViewState": "AgIAAC0AAAAAAAAAAADgvzwAAAAYAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-29T07:27:22.539Z"
            }
          ]
        }
WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_CP.cs
@@ -90,7 +90,7 @@
                if (palletTypeInfo.LocaitonCount == 2)
                {
                    if (roadwayNo != "TestJCLK")
                    if (roadwayNo != "SC01_CP")
                        definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Column % 2 == 1).ToList();
                    else
                        definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Column % 2 == 0).ToList();
@@ -122,7 +122,7 @@
                {
                    if (palletTypeInfo.LocaitonCount == 2)
                    {
                        if (roadwayNo != "TestJCLK")
                        if (roadwayNo != "SC01_CP")
                            undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Column % 2 == 1).ToList();
                        else
                            undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Column % 2 == 0).ToList();
@@ -176,9 +176,9 @@
            if (palletTypeInfo.LocaitonCount == 2)
            {
                Dt_LocationInfo? nearLocation = null;
                if (emptyLocation.RoadwayNo != "TestJCLK" && emptyLocation.Column % 2 == 1)
                if (emptyLocation.RoadwayNo != "SC01_CP" && emptyLocation.Column % 2 == 1)
                    nearLocation = locationInfos.FirstOrDefault(x => x.Row == emptyLocation.Row && x.Layer == emptyLocation.Layer && x.Depth == emptyLocation.Depth && x.Column == emptyLocation.Column - 1);
                else if (emptyLocation.RoadwayNo == "TestJCLK" && emptyLocation.Column % 2 == 0)
                else if (emptyLocation.RoadwayNo == "SC01_CP" && emptyLocation.Column % 2 == 0)
                    nearLocation = locationInfos.FirstOrDefault(x => x.Row == emptyLocation.Row && x.Layer == emptyLocation.Layer && x.Depth == emptyLocation.Depth && x.Column == emptyLocation.Column + 1);
                if (nearLocation != null && DepthLocationIsEmpty_CP(locationInfos, nearLocation) != null)
                {
WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_FL.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,241 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SqlSugar.Extensions;
using WIDESEA_Core.Enums;
using WIDESEA_Model.Models;
namespace WIDESEA_BasicService
{
    public partial class LocationInfoService
    {
        private readonly static object _locker_FL = new object();
        static List<LocationCache> locationCaches_FL= new List<LocationCache>();
        /// <summary>
        /// æ¿æä»“货位分配
        /// </summary>
        /// <param name="roadwayNo">巷道号</param>
        /// <param name="palletType">
        /// æ‰˜ç›˜ç±»åž‹
        /// </param>
        /// <returns></returns>
        public Dt_LocationInfo? AssignLocation_FL(string roadwayNo, int palletType, Dt_PalletTypeInfo palletTypeInfo, string beRelocationCode = "", int heightType = 0)
        {
            lock (_locker_FL)
            {
                List<LocationCache> removeItems = locationCaches_FL.Where(x => (DateTime.Now - x.DateTime).TotalMinutes > 5).ToList();
                int count = removeItems.Count;
                for (int i = 0; i < count; i++)
                {
                    locationCaches_FL.Remove(removeItems[i]);
                }
                List<string> lockLocationCodes = locationCaches_FL.Select(x => x.LocationCode).ToList();
                List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => x.RoadwayNo == roadwayNo);
                if (locationInfos == null || locationInfos.Count == 0)
                {
                    throw new Exception($"未找到该巷道的货位信息,巷道号:{roadwayNo}");
                }
                if (!string.IsNullOrEmpty(beRelocationCode))
                {
                    Dt_LocationInfo? beRelocation = locationInfos.FirstOrDefault(x => x.LocationCode == beRelocationCode);
                    if (beRelocation == null)
                    {
                        throw new Exception($"未找到货位信息");
                    }
                    int maxDepth = locationInfos.Max(x => x.Depth);
                    int mathCurrentRow = beRelocation.Row - Convert.ToInt32(Math.Ceiling(beRelocation.Row / maxDepth / 2.0)) * maxDepth * 2;
                    if (mathCurrentRow <= maxDepth)
                    {
                        locationInfos = locationInfos.Where(x => x.Row - Convert.ToInt32(Math.Ceiling(x.Row / maxDepth / 2.0)) * maxDepth * 2 <= maxDepth).ToList();
                    }
                    else
                    {
                        locationInfos = locationInfos.Where(x => x.Row - Convert.ToInt32(Math.Ceiling(x.Row / maxDepth / 2.0)) * maxDepth * 2 > maxDepth).ToList();
                    }
                }
                //未定义类型的空货位
                List<Dt_LocationInfo> undefinedTypeEmptyLocations = locationInfos.Where(x => (x.EnableStatus == EnableStatusEnum.Normal.ObjToInt() || x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.LocationType == LocationTypeEnum.Undefined.ObjToInt() && !lockLocationCodes.Contains(x.LocationCode)).OrderByDescending(x => x.Depth).ThenBy(x => x.Layer).ThenBy(x => x.Column).ThenBy(x => x.Row).ToList();
                List<Dt_LocationInfo> definedTypeEmptyLocations = locationInfos.Where(x => (x.EnableStatus == EnableStatusEnum.Normal.ObjToInt() || x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.LocationType == palletType.ObjToInt() && !lockLocationCodes.Contains(x.LocationCode)).OrderByDescending(x => x.Depth).ThenBy(x => x.Layer).ThenBy(x => x.Column).ThenBy(x => x.Row).ToList();
                if (heightType == 1)
                {
                    undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Layer >= 14).ToList();
                    definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Layer >= 14).ToList();
                }
                else if (heightType == 2)
                {
                    undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Layer <= 13).ToList();
                    definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Layer <= 13).ToList();
                }
                else if (heightType == 3)
                {
                    undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Layer <= 4).ToList();
                    definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Layer <= 4).ToList();
                }
                //else
                //{
                //    undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => false).ToList();
                //    definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => false).ToList();
                //}
                if (palletTypeInfo.LocaitonCount == 2)
                {
                    if (roadwayNo != "SC01_FL")
                        definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Column % 2 == 1).ToList();
                    else
                        definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Column % 2 == 0).ToList();
                }
                if (definedTypeEmptyLocations.Any())
                {
                    for (int i = 0; i < definedTypeEmptyLocations.Count; i++)
                    {
                        Dt_LocationInfo definedTypeEmptyLocation = definedTypeEmptyLocations[i];
                        Dt_LocationInfo? locationInfo = GetUsableLocation_FL(locationInfos, definedTypeEmptyLocation, palletType, palletTypeInfo);
                        //判断货位两深及以上是否存在出库锁定货位
                        //if (locationInfo?.Depth == 1)
                        //{
                        //    Dt_LocationInfo? IsBebusyLocation = locationInfos.Where(x => x.Row == (locationInfo?.Row == 2 ? locationInfo?.Row - 1 : locationInfo?.Row + 1) && x.Column == locationInfo?.Column && x.Layer == locationInfo?.Layer).FirstOrDefault();
                        //    if (IsBebusyLocation != null && (IsBebusyLocation.LocationStatus < LocationStatusEnum.InStock.ObjToInt()))
                        //    {
                        //        continue;
                        //    }
                        //}
                        if (locationInfo != null)
                        {
                            locationCaches_FL.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now });
                            return locationInfo;
                        }
                    }
                }
                if ((/*locationInfos.Count * weightValue_BC >= definedTypeLocations.Count &&*/ undefinedTypeEmptyLocations.Any()))//如果已定义类型货位未超过比例,且有未定义类型的货位
                {
                    if (palletTypeInfo.LocaitonCount == 2)
                    {
                        if (roadwayNo != "SC01_FL")
                            undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Column % 2 == 1).ToList();
                        else
                            undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Column % 2 == 0).ToList();
                        for (int i = 0; i < undefinedTypeEmptyLocations.Count; i++)
                        {
                            Dt_LocationInfo undefinedTypeEmptyLocation = undefinedTypeEmptyLocations[i];
                            Dt_LocationInfo? locationInfo = GetUsableLocation_FL(locationInfos, undefinedTypeEmptyLocation, palletType, palletTypeInfo);
                            //判断货位两深及以上是否存在出库锁定货位
                            //if (locationInfo?.Depth == 1)
                            //{
                            //    Dt_LocationInfo? IsBebusyLocation = locationInfos.Where(x => x.Row == (locationInfo?.Row == 2 ? locationInfo?.Row - 1 : locationInfo?.Row + 1) && x.Column == locationInfo?.Column && x.Layer == locationInfo?.Layer).FirstOrDefault();
                            //    if (IsBebusyLocation != null && (IsBebusyLocation.LocationStatus < LocationStatusEnum.InStock.ObjToInt()))
                            //    {
                            //        continue;
                            //    }
                            //}
                            if (locationInfo != null)
                            {
                                //UpdateLocationStatus(locationInfo, palletType, LocationStatusEnum.Lock, locationInfo.WarehouseId);
                                locationCaches_FL.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now });
                                return locationInfo;
                            }
                        }
                    }
                    else
                    {
                        Dt_LocationInfo undefinedTypeEmptyLocation = undefinedTypeEmptyLocations.FirstOrDefault();
                        Dt_LocationInfo? locationInfo = GetUsableLocation_FL(locationInfos, undefinedTypeEmptyLocation, palletType, palletTypeInfo);
                        locationCaches_FL.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now });
                        return locationInfo;
                    }
                }
                return null;
            }
        }
        /// <summary>
        /// èŽ·å–å¯ç”¨è´§ä½(测试架仓)
        /// </summary>
        /// <param name="locationInfos"></param>
        /// <param name="emptyLocation"></param>
        /// <param name="palletType"></param>
        /// <returns></returns>
        private Dt_LocationInfo? GetUsableLocation_FL(List<Dt_LocationInfo> locationInfos, Dt_LocationInfo emptyLocation, int palletType, Dt_PalletTypeInfo palletTypeInfo)
        {
            if (palletTypeInfo.LocaitonCount == 2)
            {
                Dt_LocationInfo? nearLocation = null;
                if (emptyLocation.RoadwayNo != "SC01_FL" && emptyLocation.Column % 2 == 1)
                    nearLocation = locationInfos.FirstOrDefault(x => x.Row == emptyLocation.Row && x.Layer == emptyLocation.Layer && x.Depth == emptyLocation.Depth && x.Column == emptyLocation.Column - 1);
                else if (emptyLocation.RoadwayNo == "SC01_FL" && emptyLocation.Column % 2 == 0)
                    nearLocation = locationInfos.FirstOrDefault(x => x.Row == emptyLocation.Row && x.Layer == emptyLocation.Layer && x.Depth == emptyLocation.Depth && x.Column == emptyLocation.Column + 1);
                if (nearLocation != null && DepthLocationIsEmpty_FL(locationInfos, nearLocation) != null)
                {
                    Dt_LocationInfo? locationInfo = DepthLocationIsEmpty_FL(locationInfos, emptyLocation);
                    if (locationInfo != null)
                    {
                        return locationInfo;
                    }
                }
            }
            else
            {
                Dt_LocationInfo? locationInfo = DepthLocationIsEmpty_FL(locationInfos, emptyLocation);
                if (locationInfo != null)
                {
                    return locationInfo;
                }
            }
            return null;
        }
        /// <summary>
        /// åˆ¤æ–­ä¸åŒæ·±åº¦çš„同组货位状态是否为空闲空位(测试架仓)
        /// </summary>
        /// <param name="locationInfos"></param>
        /// <param name="emptyLocation"></param>
        /// <returns></returns>
        private Dt_LocationInfo? DepthLocationIsEmpty_FL(List<Dt_LocationInfo> locationInfos, Dt_LocationInfo emptyLocation)
        {
            List<Dt_LocationInfo> locations = GetGroupLocations(locationInfos, emptyLocation);
            bool moreDepthFlag = false;
            bool littleDepthFlag = false;
            if (emptyLocation.LocationType == 0)
            {
                List<Dt_LocationInfo> moreDepth = locations.Where(x => x.Depth > emptyLocation.Depth).ToList();
                moreDepthFlag = moreDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.InStock.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.LocationType != 0) == null;//查询大于当前货位深度的集合里是否有状态不为有货的货位,如果是true,则表示深货位有未被使用的情况
                List<Dt_LocationInfo> littleDepth = locations.Where(x => x.Depth <= emptyLocation.Depth).ToList();
                littleDepthFlag = littleDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.LocationType != 0) == null; //查询小于当前货位深度的集合里是否有状态不为空,且禁用状态不为禁用以及只入的货位,如果是true,则表示浅货位被使用或者被禁用的情况
            }
            else
            {
                List<Dt_LocationInfo> moreDepth = locations.Where(x => x.Depth > emptyLocation.Depth).ToList();
                moreDepthFlag = moreDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.InStock.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.LocationType != emptyLocation.LocationType) == null;//查询大于当前货位深度的集合里是否有状态不为有货的货位,如果是true,则表示深货位有未被使用的情况
                List<Dt_LocationInfo> littleDepth = locations.Where(x => x.Depth <= emptyLocation.Depth).ToList();
                littleDepthFlag = littleDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.LocationType != emptyLocation.LocationType) == null; //查询小于当前货位深度的集合里是否有状态不为空,且禁用状态不为禁用以及只入的货位,如果是true,则表示浅货位被使用或者被禁用的情况
            }
            if (moreDepthFlag && littleDepthFlag)
            {
                return emptyLocation;
            }
            return null;
        }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_YS.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,241 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SqlSugar.Extensions;
using WIDESEA_Core.Enums;
using WIDESEA_Model.Models;
namespace WIDESEA_BasicService
{
    public partial class LocationInfoService
    {
        private readonly static object _locker_YS = new object();
        static List<LocationCache> locationCaches_YS = new List<LocationCache>();
        /// <summary>
        /// æ¿æä»“货位分配
        /// </summary>
        /// <param name="roadwayNo">巷道号</param>
        /// <param name="palletType">
        /// æ‰˜ç›˜ç±»åž‹
        /// </param>
        /// <returns></returns>
        public Dt_LocationInfo? AssignLocation_YS(string roadwayNo, int palletType, Dt_PalletTypeInfo palletTypeInfo, string beRelocationCode = "", int heightType = 0)
        {
            lock (_locker_YS)
            {
                List<LocationCache> removeItems = locationCaches_YS.Where(x => (DateTime.Now - x.DateTime).TotalMinutes > 5).ToList();
                int count = removeItems.Count;
                for (int i = 0; i < count; i++)
                {
                    locationCaches_YS.Remove(removeItems[i]);
                }
                List<string> lockLocationCodes = locationCaches_YS.Select(x => x.LocationCode).ToList();
                List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => x.RoadwayNo == roadwayNo);
                if (locationInfos == null || locationInfos.Count == 0)
                {
                    throw new Exception($"未找到该巷道的货位信息,巷道号:{roadwayNo}");
                }
                if (!string.IsNullOrEmpty(beRelocationCode))
                {
                    Dt_LocationInfo? beRelocation = locationInfos.FirstOrDefault(x => x.LocationCode == beRelocationCode);
                    if (beRelocation == null)
                    {
                        throw new Exception($"未找到货位信息");
                    }
                    int maxDepth = locationInfos.Max(x => x.Depth);
                    int mathCurrentRow = beRelocation.Row - Convert.ToInt32(Math.Ceiling(beRelocation.Row / maxDepth / 2.0)) * maxDepth * 2;
                    if (mathCurrentRow <= maxDepth)
                    {
                        locationInfos = locationInfos.Where(x => x.Row - Convert.ToInt32(Math.Ceiling(x.Row / maxDepth / 2.0)) * maxDepth * 2 <= maxDepth).ToList();
                    }
                    else
                    {
                        locationInfos = locationInfos.Where(x => x.Row - Convert.ToInt32(Math.Ceiling(x.Row / maxDepth / 2.0)) * maxDepth * 2 > maxDepth).ToList();
                    }
                }
                //未定义类型的空货位
                List<Dt_LocationInfo> undefinedTypeEmptyLocations = locationInfos.Where(x => (x.EnableStatus == EnableStatusEnum.Normal.ObjToInt() || x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.LocationType == LocationTypeEnum.Undefined.ObjToInt() && !lockLocationCodes.Contains(x.LocationCode)).OrderByDescending(x => x.Depth).ThenBy(x => x.Layer).ThenBy(x => x.Column).ThenBy(x => x.Row).ToList();
                List<Dt_LocationInfo> definedTypeEmptyLocations = locationInfos.Where(x => (x.EnableStatus == EnableStatusEnum.Normal.ObjToInt() || x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.LocationType == palletType.ObjToInt() && !lockLocationCodes.Contains(x.LocationCode)).OrderByDescending(x => x.Depth).ThenBy(x => x.Layer).ThenBy(x => x.Column).ThenBy(x => x.Row).ToList();
                if (heightType == 1)
                {
                    undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Layer >= 14).ToList();
                    definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Layer >= 14).ToList();
                }
                else if (heightType == 2)
                {
                    undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Layer <= 13).ToList();
                    definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Layer <= 13).ToList();
                }
                else if (heightType == 3)
                {
                    undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Layer <= 4).ToList();
                    definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Layer <= 4).ToList();
                }
                //else
                //{
                //    undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => false).ToList();
                //    definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => false).ToList();
                //}
                if (palletTypeInfo.LocaitonCount == 2)
                {
                    if (roadwayNo != "SC01_YS")
                        definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Column % 2 == 1).ToList();
                    else
                        definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Column % 2 == 0).ToList();
                }
                if (definedTypeEmptyLocations.Any())
                {
                    for (int i = 0; i < definedTypeEmptyLocations.Count; i++)
                    {
                        Dt_LocationInfo definedTypeEmptyLocation = definedTypeEmptyLocations[i];
                        Dt_LocationInfo? locationInfo = GetUsableLocation_CP(locationInfos, definedTypeEmptyLocation, palletType, palletTypeInfo);
                        //判断货位两深及以上是否存在出库锁定货位
                        //if (locationInfo?.Depth == 1)
                        //{
                        //    Dt_LocationInfo? IsBebusyLocation = locationInfos.Where(x => x.Row == (locationInfo?.Row == 2 ? locationInfo?.Row - 1 : locationInfo?.Row + 1) && x.Column == locationInfo?.Column && x.Layer == locationInfo?.Layer).FirstOrDefault();
                        //    if (IsBebusyLocation != null && (IsBebusyLocation.LocationStatus < LocationStatusEnum.InStock.ObjToInt()))
                        //    {
                        //        continue;
                        //    }
                        //}
                        if (locationInfo != null)
                        {
                            locationCaches_YS.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now });
                            return locationInfo;
                        }
                    }
                }
                if ((/*locationInfos.Count * weightValue_BC >= definedTypeLocations.Count &&*/ undefinedTypeEmptyLocations.Any()))//如果已定义类型货位未超过比例,且有未定义类型的货位
                {
                    if (palletTypeInfo.LocaitonCount == 2)
                    {
                        if (roadwayNo != "SC01_YS")
                            undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Column % 2 == 1).ToList();
                        else
                            undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Column % 2 == 0).ToList();
                        for (int i = 0; i < undefinedTypeEmptyLocations.Count; i++)
                        {
                            Dt_LocationInfo undefinedTypeEmptyLocation = undefinedTypeEmptyLocations[i];
                            Dt_LocationInfo? locationInfo = GetUsableLocation_CP(locationInfos, undefinedTypeEmptyLocation, palletType, palletTypeInfo);
                            //判断货位两深及以上是否存在出库锁定货位
                            //if (locationInfo?.Depth == 1)
                            //{
                            //    Dt_LocationInfo? IsBebusyLocation = locationInfos.Where(x => x.Row == (locationInfo?.Row == 2 ? locationInfo?.Row - 1 : locationInfo?.Row + 1) && x.Column == locationInfo?.Column && x.Layer == locationInfo?.Layer).FirstOrDefault();
                            //    if (IsBebusyLocation != null && (IsBebusyLocation.LocationStatus < LocationStatusEnum.InStock.ObjToInt()))
                            //    {
                            //        continue;
                            //    }
                            //}
                            if (locationInfo != null)
                            {
                                //UpdateLocationStatus(locationInfo, palletType, LocationStatusEnum.Lock, locationInfo.WarehouseId);
                                locationCaches_YS.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now });
                                return locationInfo;
                            }
                        }
                    }
                    else
                    {
                        Dt_LocationInfo undefinedTypeEmptyLocation = undefinedTypeEmptyLocations.FirstOrDefault();
                        Dt_LocationInfo? locationInfo = GetUsableLocation_YS(locationInfos, undefinedTypeEmptyLocation, palletType, palletTypeInfo);
                        locationCaches_YS.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now });
                        return locationInfo;
                    }
                }
                return null;
            }
        }
        /// <summary>
        /// èŽ·å–å¯ç”¨è´§ä½(测试架仓)
        /// </summary>
        /// <param name="locationInfos"></param>
        /// <param name="emptyLocation"></param>
        /// <param name="palletType"></param>
        /// <returns></returns>
        private Dt_LocationInfo? GetUsableLocation_YS(List<Dt_LocationInfo> locationInfos, Dt_LocationInfo emptyLocation, int palletType, Dt_PalletTypeInfo palletTypeInfo)
        {
            if (palletTypeInfo.LocaitonCount == 2)
            {
                Dt_LocationInfo? nearLocation = null;
                if (emptyLocation.RoadwayNo != "SC01_YS" && emptyLocation.Column % 2 == 1)
                    nearLocation = locationInfos.FirstOrDefault(x => x.Row == emptyLocation.Row && x.Layer == emptyLocation.Layer && x.Depth == emptyLocation.Depth && x.Column == emptyLocation.Column - 1);
                else if (emptyLocation.RoadwayNo == "SC01_YS" && emptyLocation.Column % 2 == 0)
                    nearLocation = locationInfos.FirstOrDefault(x => x.Row == emptyLocation.Row && x.Layer == emptyLocation.Layer && x.Depth == emptyLocation.Depth && x.Column == emptyLocation.Column + 1);
                if (nearLocation != null && DepthLocationIsEmpty_YS(locationInfos, nearLocation) != null)
                {
                    Dt_LocationInfo? locationInfo = DepthLocationIsEmpty_YS(locationInfos, emptyLocation);
                    if (locationInfo != null)
                    {
                        return locationInfo;
                    }
                }
            }
            else
            {
                Dt_LocationInfo? locationInfo = DepthLocationIsEmpty_YS(locationInfos, emptyLocation);
                if (locationInfo != null)
                {
                    return locationInfo;
                }
            }
            return null;
        }
        /// <summary>
        /// åˆ¤æ–­ä¸åŒæ·±åº¦çš„同组货位状态是否为空闲空位(测试架仓)
        /// </summary>
        /// <param name="locationInfos"></param>
        /// <param name="emptyLocation"></param>
        /// <returns></returns>
        private Dt_LocationInfo? DepthLocationIsEmpty_YS(List<Dt_LocationInfo> locationInfos, Dt_LocationInfo emptyLocation)
        {
            List<Dt_LocationInfo> locations = GetGroupLocations(locationInfos, emptyLocation);
            bool moreDepthFlag = false;
            bool littleDepthFlag = false;
            if (emptyLocation.LocationType == 0)
            {
                List<Dt_LocationInfo> moreDepth = locations.Where(x => x.Depth > emptyLocation.Depth).ToList();
                moreDepthFlag = moreDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.InStock.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.LocationType != 0) == null;//查询大于当前货位深度的集合里是否有状态不为有货的货位,如果是true,则表示深货位有未被使用的情况
                List<Dt_LocationInfo> littleDepth = locations.Where(x => x.Depth <= emptyLocation.Depth).ToList();
                littleDepthFlag = littleDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.LocationType != 0) == null; //查询小于当前货位深度的集合里是否有状态不为空,且禁用状态不为禁用以及只入的货位,如果是true,则表示浅货位被使用或者被禁用的情况
            }
            else
            {
                List<Dt_LocationInfo> moreDepth = locations.Where(x => x.Depth > emptyLocation.Depth).ToList();
                moreDepthFlag = moreDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.InStock.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.LocationType != emptyLocation.LocationType) == null;//查询大于当前货位深度的集合里是否有状态不为有货的货位,如果是true,则表示深货位有未被使用的情况
                List<Dt_LocationInfo> littleDepth = locations.Where(x => x.Depth <= emptyLocation.Depth).ToList();
                littleDepthFlag = littleDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.LocationType != emptyLocation.LocationType) == null; //查询小于当前货位深度的集合里是否有状态不为空,且禁用状态不为禁用以及只入的货位,如果是true,则表示浅货位被使用或者被禁用的情况
            }
            if (moreDepthFlag && littleDepthFlag)
            {
                return emptyLocation;
            }
            return null;
        }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService_Common.cs
@@ -49,7 +49,10 @@
            {
                "SC01_BC" => AssignLocation_BC(roadwayNo, palletType, palletTypeInfo, beRelocationCode, heightType),
                "SC02_BC" => AssignLocation_BC(roadwayNo, palletType, palletTypeInfo, beRelocationCode, heightType),
                "TestJCLK" => AssignLocation_CP(roadwayNo, palletType, palletTypeInfo, beRelocationCode, heightType),
                "SC01_CP" => AssignLocation_CP(roadwayNo, palletType, palletTypeInfo, beRelocationCode, heightType),
                "SC02_CP" => AssignLocation_CP(roadwayNo, palletType, palletTypeInfo, beRelocationCode, heightType),
                "SC01_YS" => AssignLocation_YS(roadwayNo, palletType, palletTypeInfo, beRelocationCode, heightType),
                "SC01_FL" => AssignLocation_FL(roadwayNo, palletType, palletTypeInfo, beRelocationCode, heightType),
                //"HA58" => AssignLocation_PP(roadwayNo, palletType, palletTypeInfo, beRelocationCode),
                //"HA152" => AssignLocation_GM(roadwayNo, palletType, palletTypeInfo, beRelocationCode),
                //"HA64" => AssignLocation_CSJ(roadwayNo, palletType, palletTypeInfo, beRelocationCode),
WMS/WIDESEA_WMSServer/WIDESEA_Common/InventoryAllocate.cs
@@ -62,7 +62,7 @@
                    /// <summary>
                    /// LPN号
                    /// </summary>
                    public string LPN_No { get; set; }
                    public string LPNNo { get; set; }
                    /// <summary>
                    /// ç‰©æ–™ç¼–码
                    /// </summary>
@@ -83,6 +83,8 @@
                    /// åº“位
                    /// </summary>
                    public string LocationName { get; set; }
                    public List<string> LabelList=new List<string>();
                }
            }
WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs
@@ -71,6 +71,12 @@
        /// </summary>
        [Description("出空托")]
        PalletOutbound = 104,
        /// <summary>
        /// æˆå“å‡ºåº“
        /// </summary>
        [Description("成品出库")]
        OutProduct = 230,
    }
    public enum TaskRelocationTypeEnum
WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutStockLockInfoService.cs
@@ -30,6 +30,6 @@
        /// <param name="taskNum"></param>
        /// <returns></returns>
        Dt_OutStockLockInfo GetOutStockLockInfo(Dt_OutboundOrder outboundOrder, Dt_OutboundOrderDetail outboundOrderDetail, Dt_StockInfo outStock, decimal assignQuantity, int? taskNum = null);
        Dt_OutStockLockInfo GetOutStockLockInfo(Dt_NewOutboundOrder outboundOrder, Dt_NewOutboundOrderDetail outboundOrderDetail, Dt_StockInfo outStock, decimal assignQuantity, int? taskNum = null);
        Dt_OutStockLockInfo GetOutStockLockInfo(Dt_NewOutboundOrder outboundOrder, Dt_NewOutboundOrderDetail outboundOrderDetail, Dt_StockInfo outStock, Dt_StockInfoDetail stockInfoDetail ,decimal assignQuantity, int? taskNum = null);
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs
@@ -42,12 +42,14 @@
        WebResponseContent DeviceRequestInboundTaskSimple(string stationCode, string palletCode, int heightType);
        WebResponseContent CPDeviceRequestInboundTaskSimple(string stationCode, string palletCode, int heightType, string courceAddress);
        WebResponseContent ApplyLocation(string palletCode);
        Task<WebResponseContent> TaskCompleted(int taskNum);
        WebResponseContent UpdateTaskStatus(int tasknum, int tasktype);
        WebResponseContent GenerateOutboundTask(int orderDetailId, List<StockSelectViewDTO> stockSelectViews);
@@ -60,7 +62,7 @@
        WebResponseContent IsRelocations(int TaskNum, string SourceAddress);
        WebResponseContent Cancelinventory(int taskNum);
        WebResponseContent InboundTaskCompleted(int taskNum);
        WebResponseContent  OutboundTaskCompleted(int taskNum);
        WebResponseContent OutboundTaskCompleted(int taskNum);
        WebResponseContent AddOutboundOrders(Houseounbound orderAddDTO);
        WebResponseContent InventoryOut(HouseCancelOut houseInventoryOut);
        WebResponseContent InventoryIn(string name, int qty);
WMS/WIDESEA_WMSServer/WIDESEA_InboundService/Base/InboundOrderService.cs
@@ -551,8 +551,6 @@
                    x.OrderDetailStatus == OrderDetailStatusEnum.GroupAndInbound.ObjToInt());
                inboundOrder.OrderStatus = InOrderStatusEnum.入库中.ObjToInt();
                // äº‹åŠ¡å¤„ç†
                _unitOfWorkManage.BeginTran();
@@ -714,7 +712,7 @@
                    {
                        return content.Error($"未找到仓库信息");
                    }
                    if (warehouse.WarehouseCode.Contains("TestJCLK"))
                    if (warehouse.WarehouseCode.Contains("CP"))
                    {
                        if (item.SupplierBatch == null)
                        {
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_NewOutboundOrder.cs
@@ -54,7 +54,7 @@
        [SugarColumn(IsNullable = true, ColumnDescription = "出入库类型",Length = 50)]
        public string InoutType { get; set; }
        [Navigate(NavigateType.OneToMany, nameof(Dt_OutboundOrderDetail.OrderId), nameof(Id))]
        public List<Dt_OutboundOrderDetail> Details { get; set; }
        [Navigate(NavigateType.OneToMany, nameof(Dt_NewOutboundOrderDetail.OrderId), nameof(Id))]
        public List<Dt_NewOutboundOrderDetail> Details { get; set; }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Service/OutStockLockInfoService.cs
@@ -41,7 +41,7 @@
            return outStockLockInfo;
        }
        public Dt_OutStockLockInfo GetOutStockLockInfo(Dt_NewOutboundOrder outboundOrder, Dt_NewOutboundOrderDetail outboundOrderDetail, Dt_StockInfo outStock, decimal assignQuantity, int? taskNum = null)
        public Dt_OutStockLockInfo GetOutStockLockInfo(Dt_NewOutboundOrder outboundOrder, Dt_NewOutboundOrderDetail outboundOrderDetail, Dt_StockInfo outStock, Dt_StockInfoDetail stockInfoDetail, decimal assignQuantity, int? taskNum = null)
        {
            Dt_OutStockLockInfo outStockLockInfo = new Dt_OutStockLockInfo()
@@ -49,13 +49,13 @@
                PalletCode = outStock.PalletCode,
                AssignQuantity = assignQuantity,
                MaterielCode = outboundOrderDetail.MaterielCode,
                BatchNo = outboundOrderDetail.BatchNo ?? outStock.Details.FirstOrDefault()?.BatchNo,
                BatchNo = outboundOrderDetail.BatchNo ?? stockInfoDetail.BatchNo,
                LocationCode = outStock.LocationCode,
                MaterielName = outboundOrderDetail.MaterielName,
                OrderDetailId = outboundOrderDetail.Id,
                OrderNo = outboundOrder.OrderNo,
                OrderType = outboundOrder.OrderType,
                OriginalQuantity = outStock.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode).Sum(x => x.StockQuantity),
                OriginalQuantity = stockInfoDetail.StockQuantity,
                //Status = taskNum == null ? OutLockStockStatusEnum.已分配.ObjToInt() : OutLockStockStatusEnum.出库中.ObjToInt(),
                StockId = outStock.Id,
                TaskNum = taskNum,
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/NewPartialTaskService_Outbound.cs
@@ -20,7 +20,7 @@
                List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
                List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>();
                List<Dt_NewOutboundOrderDetail> outboundOrderDetails = _outboundService.NewOutboundOrderDetailService.Repository.QueryData(x => keys.Contains(x.OrderId));
                List<Dt_NewOutboundOrderDetail> outboundOrderDetails = _outboundService.NewOutboundOrderDetailService.Repository.QueryData(x => keys.Contains(x.Id));
                if (outboundOrderDetails == null || outboundOrderDetails.Count == 0)
                {
                    throw new Exception("未找到出库单明细信息");
@@ -29,7 +29,7 @@
                {
                    throw new Exception("所选出库单明细存在出库中或已完成");
                }
                List<Dt_NewOutboundOrder> outboundOrders = _outboundService.NewOutboundOrderService.Repository.QueryData(x => keys.Contains(x.Id));
                List<Dt_NewOutboundOrder> outboundOrders = _outboundService.NewOutboundOrderService.Repository.QueryData(x => x.Id == outboundOrderDetails.FirstOrDefault().OrderId);
                List<Dt_StockInfo> stockInfos = _stockService.StockInfoService.Repository.QueryData(x => outboundOrderDetails.Select(s => s.LPNNo).Contains(x.PalletCode));
                if (outboundOrderDetails == null || outboundOrderDetails.Count == 0)
                {
@@ -46,10 +46,11 @@
                    stockInfoDetail.OutboundQuantity += item.OrderQuantity;
                    item.LockQuantity += item.OrderQuantity;
                    var outboundOrder = outboundOrders.FirstOrDefault(x => x.Id == item.OrderId);
                    Dt_OutStockLockInfo outStockLockInfo = _outboundService.OutboundStockLockInfoService.GetOutStockLockInfo(outboundOrder, item, stockInfo, item.OrderQuantity);
                    Dt_OutStockLockInfo outStockLockInfo = _outboundService.OutboundStockLockInfoService.GetOutStockLockInfo(outboundOrder, item, stockInfo, stockInfoDetail, item.OrderQuantity);
                    outStockLockInfo.Status = OutStockStatus.出库中.ObjToInt();
                    item.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
                    outboundOrder.OrderStatus = OutboundStatusEnum.出库中.ObjToInt();
                    stockInfo.StockStatus = StockStatusEmun.出库锁定.ObjToInt();
                    var task = Newtasks.FirstOrDefault(x => x.PalletCode == item.LPNNo);
                    task.OrderNo = outboundOrder.OrderNo;
                    tasks.Add(task);
@@ -71,7 +72,7 @@
                _unitOfWorkManage.CommitTran();
                //将任务推送到WCS
                return PushTasksToWCS(tasks);
                return PushTasksWCS(tasks);
            }
            catch (Exception ex)
            {
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs
@@ -175,7 +175,7 @@
                _unitOfWorkManage.CommitTran();
                WMSTaskDTO wMSTaskDTO = _mapper.Map<WMSTaskDTO>(newTask);
                if (warehouse.WarehouseCode.Contains("TestJCLK"))
                if (warehouse.WarehouseCode.Contains("CP"))
                {
                    PushTasksWCS(new List<Dt_Task> { newTask });
                }
@@ -183,6 +183,163 @@
                {
                    PushTasksToWCS(new List<Dt_Task> { newTask });
                }
                return WebResponseContent.Instance.OK(data: wMSTaskDTO);
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        public WebResponseContent CPDeviceRequestInboundTaskSimple(string stationCode, string palletCode, int heightType, string courceAddress)
        {
            try
            {
                Dt_Task task = Repository.QueryFirst(x => x.PalletCode == palletCode);
                if (task != null)
                {
                    return WebResponseContent.Instance.Error($"该托盘{palletCode}已生成任务");
                }
                Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First();
                if (stockInfo == null)
                {
                    return WebResponseContent.Instance.Error($"未找到组盘信息");
                }
                ///判断是否存在回库单,进行回原库位逻辑
                string returnOrderNo = stockInfo.Details?.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.OrderNo;
                Dt_ReturnOrder returnOrder = _returnOrderRepository.QueryFirst(x => x.OrderNo == returnOrderNo && x.OrderStatus == InOrderStatusEnum.未开始.ObjToInt());
                Dt_RoadwayInfo returnRoadwayInfo = new Dt_RoadwayInfo();
                if (returnOrder != null && !string.IsNullOrEmpty(returnOrder.LocationCode))
                {
                    Dt_LocationInfo locationInfo1 = _locationInfoService.Repository.QueryFirst(x => x.LocationCode == returnOrder.LocationCode);
                    if (locationInfo1 == null)
                    {
                        return WebResponseContent.Instance.Error($"回库单中该库位{returnOrder.LocationCode}未找到");
                    }
                    returnRoadwayInfo = _basicRepository.RoadwayInfoRepository.QueryFirst(x => x.RoadwayNo == locationInfo1.RoadwayNo);
                }
                if (Repository.QueryFirst(x => x.SourceAddress == (returnRoadwayInfo.InStationCode != null ? returnRoadwayInfo.InStationCode : stationCode) && x.TaskStatus == TaskStatusEnum.New.ObjToInt()) != null)
                {
                    return WebResponseContent.Instance.Error($"该站点已有未执行的任务");
                }
                var details = stockInfo.Details.FirstOrDefault();
                if (!string.IsNullOrEmpty(stockInfo.LocationCode))
                {
                    return WebResponseContent.Instance.Error($"该托盘已绑定货位");
                }
                Dt_RoadwayInfo roadwayInfo = _basicRepository.RoadwayInfoRepository.QueryFirst(x => x.InStationCode == (returnRoadwayInfo.InStationCode != null ? returnRoadwayInfo.InStationCode : stationCode));
                if (roadwayInfo == null)
                {
                    return WebResponseContent.Instance.Error($"未找到该入库站台地址");
                }
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == roadwayInfo.RoadwayNo);
                if (warehouse == null)
                {
                    return WebResponseContent.Instance.Error("未找到该仓库");
                }
                Dt_LocationInfo? locationInfo = new Dt_LocationInfo();
                if (returnOrder != null && !string.IsNullOrEmpty(returnOrder.LocationCode))
                {
                    locationInfo = _locationInfoService.Repository.QueryFirst(x => x.LocationCode == returnOrder.LocationCode);
                    if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt() || locationInfo.EnableStatus == EnableStatusEnum.Disable.ObjToInt() || locationInfo.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt())
                    {
                        return WebResponseContent.Instance.Error($"该回库单货位{locationInfo.LocationCode}非锁定状态或货位启用状态不正确,请检查");
                    }
                }
                else
                {
                    locationInfo = _basicService.LocationInfoService.AssignLocation(roadwayInfo.RoadwayNo, stockInfo.PalletType, warehouse.WarehouseId, "", heightType);//, stockInfo.WarehouseId
                    if (locationInfo == null)
                    {
                        return WebResponseContent.Instance.Error($"货位分配失败,未找到可分配货位");
                    }
                }
                Dt_Task newTask = new Dt_Task()
                {
                    CurrentAddress = courceAddress,
                    Grade = 0,
                    NextAddress = "",
                    PalletCode = palletCode,
                    OrderNo = details.OrderNo,
                    Roadway = roadwayInfo.RoadwayNo,
                    SourceAddress = courceAddress,
                    TargetAddress = locationInfo.LocationCode,
                    TaskType = TaskTypeEnum.Inbound.ObjToInt(),
                    TaskStatus = TaskStatusEnum.New.ObjToInt(),
                    WarehouseId = stockInfo.WarehouseId,
                    PalletType = GetPalletType(warehouse, palletCode),//GetPalletType(warehouse, palletCode)
                    Creater = "WCS",
                    CreateDate = DateTime.Now
                };
                string MaterielCode = stockInfo.Details?.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.MaterielCode;
                float Quantity = (float)stockInfo.Details?.Where(x => x.StockId == stockInfo.Id).Sum(x => x.StockQuantity);
                if (MaterielCode != null && Quantity != null)
                {
                    newTask.MaterielCode = MaterielCode;
                    newTask.Quantity = (float)Quantity;
                }
                if (stockInfo.StockStatus == StockStatusEmun.余料退库.ObjToInt())
                {
                    newTask.TaskType = TaskTypeEnum.SurplusReturn.ObjToInt();
                }
                if (stockInfo.StockStatus == StockStatusEmun.反拣入库.ObjToInt())
                {
                    newTask.TaskType = TaskTypeEnum.ReverseIn.ObjToInt();
                }
                if (stockInfo.StockStatus == StockStatusEmun.盘点库存完成.ObjToInt())
                {
                    newTask.TaskType = TaskTypeEnum.InInventory.ObjToInt();
                }
                //if (stockInfo.StockStatus == StockStatusEmun.手动组盘暂存.ObjToInt())
                //{
                //    stockInfo.StockStatus = StockStatusEmun.手动组盘入库确认.ObjToInt();
                //}
                //else if (stockInfo.StockStatus == StockStatusEmun.MES退库.ObjToInt())
                //{
                //    newTask.TaskType = TaskTypeEnum.MesMatReturn.ObjToInt();
                //}
                //else if (stockInfo.StockStatus == StockStatusEmun.MES空托退库.ObjToInt())
                //{
                //    Dt_PalletTypeInfo palletTypeInfo = _palletTypeInfoRepository.QueryFirst(x => x.WarehouseId == stockInfo.WarehouseId && x.PalletType == stockInfo.PalletType);
                //    //todo å°æ‰˜ç›˜æš‚时未启用
                //    if (palletTypeInfo.LocaitonCount == 2)
                //    {
                //        newTask.TaskType = TaskTypeEnum.MesPalletLargeReturn.ObjToInt();
                //    }
                //    else
                //    {
                //        newTask.TaskType = TaskTypeEnum.MesPalletSmallReturn.ObjToInt();
                //    }
                //}
                //else
                //{
                stockInfo.StockStatus = StockStatusEmun.入库确认.ObjToInt();
                locationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt();
                //}
                _unitOfWorkManage.BeginTran();
                int taskId = BaseDal.AddData(newTask);
                newTask.TaskId = taskId;
                if (returnOrder != null)
                {
                    returnOrder.OrderStatus = InOrderStatusEnum.入库中.ObjToInt();
                    _returnOrderRepository.UpdateData(returnOrder);
                }
                _stockRepository.StockInfoRepository.UpdateData(stockInfo);
                _locationInfoService.UpdateData(locationInfo);
                _unitOfWorkManage.CommitTran();
                WMSTaskDTO wMSTaskDTO = _mapper.Map<WMSTaskDTO>(newTask);
                PushTasksWCS(new List<Dt_Task> { newTask });
                return WebResponseContent.Instance.OK(data: wMSTaskDTO);
            }
            catch (Exception ex)
@@ -206,7 +363,7 @@
                {
                    return WebResponseContent.Instance.Error($"未找到组盘信息");
                }
                return WebResponseContent.Instance.OK(data:stockInfo.WarehouseId);
                return WebResponseContent.Instance.OK(data: stockInfo.WarehouseId);
            }
            catch (Exception ex)
            {
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs
@@ -47,6 +47,10 @@
                if (stockInfo != null)
                {
                    Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode);
                    if (locationInfo==null)
                    {
                        throw new Exception("未找到出库库位");
                    }
                    Dt_Task dt_Task = BaseDal.QueryFirst(x => x.SourceAddress == locationInfo.LocationCode || x.TargetAddress == locationInfo.LocationCode);
                    if (dt_Task != null)
                    {
@@ -61,30 +65,58 @@
                    Dt_StockInfoDetail stockInfoDetail = _stockService.StockInfoDetailService.Repository.QueryFirst(x => x.StockId == stockInfo.Id);
                    if (roadwayInfo != null)
                    {
                        Dt_Task task = new()
                        if (roadwayInfo.RoadwayNo.Contains("CP"))
                        {
                            PalletType = stockInfo.PalletType,
                            OrderNo = stockInfoDetail.OrderNo,
                            CurrentAddress = locationInfo.LocationCode,
                            Grade = 0,
                            Creater = "WMS",
                            PalletCode = stockInfo.PalletCode,
                            NextAddress = roadwayInfo.OutSCStationCode,
                            Roadway = locationInfo.RoadwayNo,
                            SourceAddress = locationInfo.LocationCode,
                            TargetAddress = "",
                            TaskStatus = OutTaskStatusEnum.OutNew.ObjToInt(),
                            TaskType = taskType.ObjToInt(),
                            Depth = locationInfo.Depth,
                            WarehouseId = stockInfo.WarehouseId,
                            TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum))
                        };
                        if (taskType != TaskTypeEnum.OutEmpty)
                        {
                            task.MaterielCode = stockInfo.Details?.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.MaterielCode;
                            task.Quantity = (float)stockInfo.Details?.Where(x => x.StockId == stockInfo.Id).Sum(x => x.StockQuantity);
                            Dt_Task task = new()
                            {
                                PalletType = stockInfo.PalletType,
                                OrderNo = stockInfoDetail.OrderNo,
                                CurrentAddress = locationInfo.LocationCode,
                                Grade = 0,
                                Creater = "WMS",
                                PalletCode = stockInfo.PalletCode,
                                NextAddress = roadwayInfo.OutSCStationCode,
                                Roadway = locationInfo.RoadwayNo,
                                SourceAddress = locationInfo.LocationCode,
                                TargetAddress = "",
                                TaskStatus = OutTaskStatusEnum.OutNew.ObjToInt(),
                                TaskType = taskType.ObjToInt(),
                                Depth = locationInfo.Depth,
                                WarehouseId = stockInfo.WarehouseId,
                                TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                                MaterielCode = stockInfoDetail.MaterielCode,
                                Quantity = (float)stockInfoDetail.StockQuantity
                            };
                            tasks.Add(task);
                        }
                        tasks.Add(task);
                        else
                        {
                            Dt_Task task = new()
                            {
                                PalletType = stockInfo.PalletType,
                                OrderNo = stockInfoDetail.OrderNo,
                                CurrentAddress = locationInfo.LocationCode,
                                Grade = 0,
                                Creater = "WMS",
                                PalletCode = stockInfo.PalletCode,
                                NextAddress = roadwayInfo.OutSCStationCode,
                                Roadway = locationInfo.RoadwayNo,
                                SourceAddress = locationInfo.LocationCode,
                                TargetAddress = "",
                                TaskStatus = OutTaskStatusEnum.OutNew.ObjToInt(),
                                TaskType = taskType.ObjToInt(),
                                Depth = locationInfo.Depth,
                                WarehouseId = stockInfo.WarehouseId,
                                TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum))
                            };
                            if (taskType != TaskTypeEnum.OutEmpty)
                            {
                                task.MaterielCode = stockInfo.Details?.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.MaterielCode;
                                task.Quantity = (float)stockInfo.Details?.Where(x => x.StockId == stockInfo.Id).Sum(x => x.StockQuantity);
                            }
                            tasks.Add(task);
                        }
                    }
                }
@@ -254,36 +286,299 @@
                {
                    return WebResponseContent.Instance.Error($"未找到该仓库信息");
                }
                Dt_OutboundOrder oldOuboundOrder = BaseDal.Db.Queryable<Dt_OutboundOrder>().Where(x => x.UpperOrderNo == orderAddDTO.No).Includes(x => x.Details).First();
                Dt_Production production = new Dt_Production();
                if (oldOuboundOrder != null)
                if (warehouse.WarehouseCode.Contains("CP"))
                {
                    if (oldOuboundOrder.OutWareHouse != warehouse.WarehouseCode)
                    Dt_NewOutboundOrder newOutboundOrder = BaseDal.Db.Queryable<Dt_NewOutboundOrder>().Where(x => x.UpperOrderNo == orderAddDTO.No).Includes(x => x.Details).First();
                    Dt_Production production1 = new Dt_Production();
                    if (newOutboundOrder != null)
                    {
                        return WebResponseContent.Instance.Error($"仓库不一致");
                        if (newOutboundOrder.OutWareHouse != warehouse.WarehouseCode)
                        {
                            return WebResponseContent.Instance.Error($"仓库不一致");
                        }
                        else
                        {
                            OutboundOrderAddDTO orderAddDTO1 = new OutboundOrderAddDTO();
                            orderAddDTO1.Details = orderAddDTO.DetailList.DicToIEnumerable<OutboundOrderDetailAddDTO>();
                            var details = orderAddDTO1.Details.FirstOrDefault();
                            Dt_NewOutboundOrderDetail outboundOrderDetail = new Dt_NewOutboundOrderDetail()
                            {
                                LPNNo = details.LPNNo,
                                BatchNo = details.BatchNo,
                                MaterielCode = details.MaterielCode,
                                MaterielName = details.MaterielName,
                                MaterieSpec = details.MaterieSpec,
                                OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(),
                                OrderQuantity = details.OrderQuantity,
                                LinId = details.LinId,
                                OrderId = newOutboundOrder.Id,
                                Creater = "WMS",
                                CreateDate = DateTime.Now,
                                Remark = details.Remark,
                                SupplierBatch = details.SupplierBatch
                            };
                            _newOutboundOrderDetailRepository.AddData(outboundOrderDetail);
                            foreach (var item in orderAddDTO1.Details)
                            {
                                if (string.IsNullOrWhiteSpace(item.Remark))
                                {
                                    continue;
                                }
                                string[] remarkEntries = item.Remark.Split(
                                    new[] { ';' },
                                    StringSplitOptions.RemoveEmptyEntries
                                );
                                foreach (var entry in remarkEntries)
                                {
                                    string[] keyValuePairs = entry.Split(
                                        new[] { ',' },
                                        StringSplitOptions.RemoveEmptyEntries
                                    );
                                    foreach (var kvp in keyValuePairs)
                                    {
                                        int colonIndex = kvp.IndexOf(':');
                                        if (colonIndex <= 0 || colonIndex >= kvp.Length - 1)
                                        {
                                            continue;
                                        }
                                        string key = kvp.Substring(0, colonIndex).Trim();
                                        string value = kvp.Substring(colonIndex + 1).Trim();
                                        switch (key)
                                        {
                                            case "制造单号":
                                                production1.ProductionNo = value;
                                                break;
                                            case "制造部件":
                                                production1.ManufacturingCo = value;
                                                break;
                                            case "出库数量":
                                                if (decimal.TryParse(value, out decimal outQuantity))
                                                {
                                                    production1.OutQuantity = outQuantity;
                                                }
                                                else
                                                {
                                                    Console.WriteLine($"出库数量格式错误:{value}(应为数值,如14.0000)");
                                                }
                                                break;
                                            default:
                                                Console.WriteLine($"未知键名:{key}(对应值:{value},跳过该键值对)");
                                                break;
                                        }
                                    }
                                    production1.Creater = "WMS";
                                    production1.OrderId = outboundOrderDetail.Id;
                                    _productionRepository.AddData(production1);
                                }
                            }
                        }
                    }
                    else
                    {
                        OutboundOrderAddDTO orderAddDTO1 = new OutboundOrderAddDTO();
                        orderAddDTO1.OrderNo = orderAddDTO.No;
                        orderAddDTO1.UpperOrderNo = orderAddDTO.No;
                        orderAddDTO1.OutWareHouse = orderAddDTO.OutWareHouse;
                        orderAddDTO1.TransactionCode = orderAddDTO.TransactionCode ?? "工单发料";
                        orderAddDTO1.InoutType = orderAddDTO.OrderType ?? InoutTypeEnum.WorkFeed.ToString();
                        orderAddDTO1.OrderType = orderAddDTO.InoutType;
                        orderAddDTO1.System = orderAddDTO.System;
                        IEnumerable<int> inOrderTypes = Enum.GetValues<OrderTypeEmun>().Cast<int>();
                        orderAddDTO1.Details = orderAddDTO.DetailList.DicToIEnumerable<OutboundOrderDetailAddDTO>();
                        var details = orderAddDTO1.Details.FirstOrDefault();
                        Dt_OutboundOrderDetail outboundOrderDetail = new Dt_OutboundOrderDetail()
                        #region éªŒè¯æ•°æ®
                        (bool, string, object?) result = CheckOutboundOrderAddData(orderAddDTO1);
                        if (!result.Item1) return content = WebResponseContent.Instance.Error(result.Item2);
                        #endregion
                        Dt_NewOutboundOrder inboundOrder = _mapper.Map<Dt_NewOutboundOrder>(orderAddDTO1);
                        inboundOrder.OrderStatus = InboundStatusEnum.未开始.ObjToInt();
                        inboundOrder.Creater = "WMS";
                        inboundOrder.CreateDate = DateTime.Now;
                        inboundOrder.CreateType = CreateType.UpperSystemPush.ObjToInt();
                        _unitOfWorkManage.BeginTran();
                        bool a = BaseDal.Db.InsertNav(inboundOrder).Include(x => x.Details).ExecuteCommand();
                        foreach (var item in orderAddDTO1.Details)
                        {
                            LPNNo = details.LPNNo,
                            BatchNo = details.BatchNo,
                            MaterielCode = details.MaterielCode,
                            MaterielName = details.MaterielName,
                            MaterieSpec = details.MaterieSpec,
                            OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(),
                            OrderQuantity = details.OrderQuantity,
                            LinId = details.LinId,
                            OrderId = oldOuboundOrder.Id,
                            Creater = "WMS",
                            CreateDate = DateTime.Now,
                            Remark = details.Remark,
                            SupplierBatch = details.SupplierBatch
                        };
                        _outboundOrderDetailRepository.AddData(outboundOrderDetail);
                            if (string.IsNullOrWhiteSpace(item.Remark))
                            {
                                continue;
                            }
                            string[] remarkEntries = item.Remark.Split(
                                new[] { ';' },
                                StringSplitOptions.RemoveEmptyEntries
                            );
                            foreach (var entry in remarkEntries)
                            {
                                string[] keyValuePairs = entry.Split(
                                    new[] { ',' },
                                    StringSplitOptions.RemoveEmptyEntries
                                );
                                foreach (var kvp in keyValuePairs)
                                {
                                    int colonIndex = kvp.IndexOf(':');
                                    if (colonIndex <= 0 || colonIndex >= kvp.Length - 1)
                                    {
                                        continue;
                                    }
                                    string key = kvp.Substring(0, colonIndex).Trim();
                                    string value = kvp.Substring(colonIndex + 1).Trim();
                                    switch (key)
                                    {
                                        case "制造单号":
                                            production1.ProductionNo = value;
                                            break;
                                        case "制造部件":
                                            production1.ManufacturingCo = value;
                                            break;
                                        case "出库数量":
                                            if (decimal.TryParse(value, out decimal outQuantity))
                                            {
                                                production1.OutQuantity = outQuantity;
                                            }
                                            else
                                            {
                                                Console.WriteLine($"出库数量格式错误:{value}(应为数值,如14.0000)");
                                            }
                                            break;
                                        default:
                                            Console.WriteLine($"未知键名:{key}(对应值:{value},跳过该键值对)");
                                            break;
                                    }
                                }
                                production1.Creater = "WMS";
                                production1.OrderId = inboundOrder.Details.FirstOrDefault().Id;
                                _productionRepository.AddData(production1);
                            }
                        }
                        _unitOfWorkManage.CommitTran();
                    }
                }
                else
                {
                    Dt_OutboundOrder oldOuboundOrder = BaseDal.Db.Queryable<Dt_OutboundOrder>().Where(x => x.UpperOrderNo == orderAddDTO.No).Includes(x => x.Details).First();
                    Dt_Production production = new Dt_Production();
                    if (oldOuboundOrder != null)
                    {
                        if (oldOuboundOrder.OutWareHouse != warehouse.WarehouseCode)
                        {
                            return WebResponseContent.Instance.Error($"仓库不一致");
                        }
                        else
                        {
                            OutboundOrderAddDTO orderAddDTO1 = new OutboundOrderAddDTO();
                            orderAddDTO1.Details = orderAddDTO.DetailList.DicToIEnumerable<OutboundOrderDetailAddDTO>();
                            var details = orderAddDTO1.Details.FirstOrDefault();
                            Dt_OutboundOrderDetail outboundOrderDetail = new Dt_OutboundOrderDetail()
                            {
                                LPNNo = details.LPNNo,
                                BatchNo = details.BatchNo,
                                MaterielCode = details.MaterielCode,
                                MaterielName = details.MaterielName,
                                MaterieSpec = details.MaterieSpec,
                                OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(),
                                OrderQuantity = details.OrderQuantity,
                                LinId = details.LinId,
                                OrderId = oldOuboundOrder.Id,
                                Creater = "WMS",
                                CreateDate = DateTime.Now,
                                Remark = details.Remark,
                                SupplierBatch = details.SupplierBatch
                            };
                            _outboundOrderDetailRepository.AddData(outboundOrderDetail);
                            foreach (var item in orderAddDTO1.Details)
                            {
                                if (string.IsNullOrWhiteSpace(item.Remark))
                                {
                                    continue;
                                }
                                string[] remarkEntries = item.Remark.Split(
                                    new[] { ';' },
                                    StringSplitOptions.RemoveEmptyEntries
                                );
                                foreach (var entry in remarkEntries)
                                {
                                    string[] keyValuePairs = entry.Split(
                                        new[] { ',' },
                                        StringSplitOptions.RemoveEmptyEntries
                                    );
                                    foreach (var kvp in keyValuePairs)
                                    {
                                        int colonIndex = kvp.IndexOf(':');
                                        if (colonIndex <= 0 || colonIndex >= kvp.Length - 1)
                                        {
                                            continue;
                                        }
                                        string key = kvp.Substring(0, colonIndex).Trim();
                                        string value = kvp.Substring(colonIndex + 1).Trim();
                                        switch (key)
                                        {
                                            case "制造单号":
                                                production.ProductionNo = value;
                                                break;
                                            case "制造部件":
                                                production.ManufacturingCo = value;
                                                break;
                                            case "出库数量":
                                                if (decimal.TryParse(value, out decimal outQuantity))
                                                {
                                                    production.OutQuantity = outQuantity;
                                                }
                                                else
                                                {
                                                    Console.WriteLine($"出库数量格式错误:{value}(应为数值,如14.0000)");
                                                }
                                                break;
                                            default:
                                                Console.WriteLine($"未知键名:{key}(对应值:{value},跳过该键值对)");
                                                break;
                                        }
                                    }
                                    production.Creater = "WMS";
                                    production.OrderId = outboundOrderDetail.Id;
                                    _productionRepository.AddData(production);
                                }
                            }
                        }
                    }
                    else
                    {
                        OutboundOrderAddDTO orderAddDTO1 = new OutboundOrderAddDTO();
                        orderAddDTO1.OrderNo = orderAddDTO.No;
                        orderAddDTO1.UpperOrderNo = orderAddDTO.No;
                        orderAddDTO1.OutWareHouse = orderAddDTO.OutWareHouse;
                        orderAddDTO1.TransactionCode = orderAddDTO.TransactionCode ?? "工单发料";
                        orderAddDTO1.InoutType = orderAddDTO.OrderType ?? InoutTypeEnum.WorkFeed.ToString();
                        orderAddDTO1.OrderType = orderAddDTO.InoutType;
                        orderAddDTO1.System = orderAddDTO.System;
                        IEnumerable<int> inOrderTypes = Enum.GetValues<OrderTypeEmun>().Cast<int>();
                        orderAddDTO1.Details = orderAddDTO.DetailList.DicToIEnumerable<OutboundOrderDetailAddDTO>();
                        #region éªŒè¯æ•°æ®
                        (bool, string, object?) result = CheckOutboundOrderAddData(orderAddDTO1);
                        if (!result.Item1) return content = WebResponseContent.Instance.Error(result.Item2);
                        #endregion
                        Dt_OutboundOrder inboundOrder = _mapper.Map<Dt_OutboundOrder>(orderAddDTO1);
                        inboundOrder.OrderStatus = InboundStatusEnum.未开始.ObjToInt();
                        inboundOrder.Creater = "WMS";
                        inboundOrder.CreateDate = DateTime.Now;
                        inboundOrder.CreateType = CreateType.UpperSystemPush.ObjToInt();
                        _unitOfWorkManage.BeginTran();
                        bool a = BaseDal.Db.InsertNav(inboundOrder).Include(x => x.Details).ExecuteCommand();
                        foreach (var item in orderAddDTO1.Details)
                        {
                            if (string.IsNullOrWhiteSpace(item.Remark))
@@ -338,96 +633,14 @@
                                }
                                production.Creater = "WMS";
                                production.OrderId = outboundOrderDetail.Id;
                                production.OrderId = inboundOrder.Details.FirstOrDefault().Id;
                                _productionRepository.AddData(production);
                            }
                        }
                        _unitOfWorkManage.CommitTran();
                    }
                }
                else
                {
                    OutboundOrderAddDTO orderAddDTO1 = new OutboundOrderAddDTO();
                    orderAddDTO1.OrderNo = orderAddDTO.No;
                    orderAddDTO1.UpperOrderNo = orderAddDTO.No;
                    orderAddDTO1.OutWareHouse = orderAddDTO.OutWareHouse;
                    orderAddDTO1.TransactionCode = orderAddDTO.TransactionCode?? "工单发料";
                    orderAddDTO1.InoutType = orderAddDTO.OrderType ?? InoutTypeEnum.WorkFeed.ToString();
                    orderAddDTO1.OrderType = orderAddDTO.InoutType;
                    orderAddDTO1.System = orderAddDTO.System;
                    IEnumerable<int> inOrderTypes = Enum.GetValues<OrderTypeEmun>().Cast<int>();
                    orderAddDTO1.Details = orderAddDTO.DetailList.DicToIEnumerable<OutboundOrderDetailAddDTO>();
                    #region éªŒè¯æ•°æ®
                    (bool, string, object?) result = CheckOutboundOrderAddData(orderAddDTO1);
                    if (!result.Item1) return content = WebResponseContent.Instance.Error(result.Item2);
                    #endregion
                    Dt_OutboundOrder inboundOrder = _mapper.Map<Dt_OutboundOrder>(orderAddDTO1);
                    inboundOrder.OrderStatus = InboundStatusEnum.未开始.ObjToInt();
                    inboundOrder.Creater = "WMS";
                    inboundOrder.CreateDate = DateTime.Now;
                    inboundOrder.CreateType = CreateType.UpperSystemPush.ObjToInt();
                    _unitOfWorkManage.BeginTran();
                    bool a = BaseDal.Db.InsertNav(inboundOrder).Include(x => x.Details).ExecuteCommand();
                    foreach (var item in orderAddDTO1.Details)
                    {
                        if (string.IsNullOrWhiteSpace(item.Remark))
                        {
                            continue;
                        }
                        string[] remarkEntries = item.Remark.Split(
                            new[] { ';' },
                            StringSplitOptions.RemoveEmptyEntries
                        );
                        foreach (var entry in remarkEntries)
                        {
                            string[] keyValuePairs = entry.Split(
                                new[] { ',' },
                                StringSplitOptions.RemoveEmptyEntries
                            );
                            foreach (var kvp in keyValuePairs)
                            {
                                int colonIndex = kvp.IndexOf(':');
                                if (colonIndex <= 0 || colonIndex >= kvp.Length - 1)
                                {
                                    continue;
                                }
                                string key = kvp.Substring(0, colonIndex).Trim();
                                string value = kvp.Substring(colonIndex + 1).Trim();
                                switch (key)
                                {
                                    case "制造单号":
                                        production.ProductionNo = value;
                                        break;
                                    case "制造部件":
                                        production.ManufacturingCo = value;
                                        break;
                                    case "出库数量":
                                        if (decimal.TryParse(value, out decimal outQuantity))
                                        {
                                            production.OutQuantity = outQuantity;
                                        }
                                        else
                                        {
                                            Console.WriteLine($"出库数量格式错误:{value}(应为数值,如14.0000)");
                                        }
                                        break;
                                    default:
                                        Console.WriteLine($"未知键名:{key}(对应值:{value},跳过该键值对)");
                                        break;
                                }
                            }
                            production.Creater = "WMS";
                            production.OrderId = inboundOrder.Details.FirstOrDefault().Id;
                            _productionRepository.AddData(production);
                        }
                    }
                    _unitOfWorkManage.CommitTran();
                }
                content = WebResponseContent.Instance.OK();
@@ -611,7 +824,15 @@
                }
                _unitOfWorkManage.CommitTran();
                //将任务推送到WCS
                PushTasksToWCS(tasks);
                if (tasks.FirstOrDefault().Roadway.Contains("SC01_BC"))
                {
                    PushTasksToWCS(tasks);
                }
                else
                {
                    PushTasksWCS(tasks);
                }
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -106,6 +106,7 @@
        private readonly IOutboundOrderDetail_HtyService _outboundOrderDetail_HtyService;
        private readonly IPalletTypeInfoRepository _palletTypeInfoRepository;
        private readonly IOutboundOrderDetailRepository _outboundOrderDetailRepository;
        private readonly INewOutboundOrderDetailRepository _newOutboundOrderDetailRepository;
        private readonly IStockInfoDetailRepository _stockInfoDetailRepository;
        private readonly IReturnOrderRepository _returnOrderRepository;
        private readonly IProductionRepository _productionRepository;
@@ -113,7 +114,7 @@
        public ITaskRepository Repository => BaseDal;
        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IMaterielInfoService materielInfoService, IInboundOrderDetail_HtyService inboundOrderDetail_HtyService, IOutboundOrder_HtyService outboundOrder_HtyService, IOutboundOrderDetail_HtyService outboundOrderDetail_HtyService, IInboundOrder_HtyService inboundOrder_HtyService, IStockRepository stockRepository, IInboundOrderDetailService inboundOrderDetailService, IBasicService basicService, IOutboundService outboundService, IInboundService inboundService, IRecordService recordService, IStockService stockService, ITask_HtyService taskHtyService, ILocationInfoService locationInfoService, IOutboundOrderDetailRepository outboundOrderDetailRepository, IBasicRepository basicRepository, IStockInfoDetailRepository stockInfoDetailRepository, IPalletTypeInfoRepository palletTypeInfoRepository, IReturnOrderRepository returnOrderRepository, IProductionRepository productionRepository, IInboundRepository inboundRepository) : base(BaseDal)
        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IMaterielInfoService materielInfoService, IInboundOrderDetail_HtyService inboundOrderDetail_HtyService, IOutboundOrder_HtyService outboundOrder_HtyService, IOutboundOrderDetail_HtyService outboundOrderDetail_HtyService, IInboundOrder_HtyService inboundOrder_HtyService, IStockRepository stockRepository, IInboundOrderDetailService inboundOrderDetailService, IBasicService basicService, IOutboundService outboundService, IInboundService inboundService, IRecordService recordService, IStockService stockService, ITask_HtyService taskHtyService, ILocationInfoService locationInfoService, IOutboundOrderDetailRepository outboundOrderDetailRepository, IBasicRepository basicRepository, IStockInfoDetailRepository stockInfoDetailRepository, IPalletTypeInfoRepository palletTypeInfoRepository, IReturnOrderRepository returnOrderRepository, IProductionRepository productionRepository, IInboundRepository inboundRepository,INewOutboundOrderDetailRepository newOutboundOrderDetailRepository) : base(BaseDal)
        {
            _mapper = mapper;
            _stockRepository = stockRepository;
@@ -138,6 +139,7 @@
            _returnOrderRepository = returnOrderRepository;
            _productionRepository = productionRepository;
            _inboundRepository = inboundRepository;
            _newOutboundOrderDetailRepository = newOutboundOrderDetailRepository;
        }
        public string ReceiveWMSTaskin = WIDESEA_Core.Helper.AppSettings.Configuration["ReceiveWMSTaskin"];
@@ -492,7 +494,7 @@
                dt_StockInfo.LocationCode = dt_LocationInfo.LocationCode;
                if (warehouse.WarehouseCode.Contains("TestJCLK"))
                if (warehouse.WarehouseCode.Contains("CP"))
                {
                    // 1. èŽ·å–å…¥åº“å•ä¿¡æ¯
                    Dt_InboundOrder? inboundOrder = null;
@@ -691,49 +693,49 @@
                                    ApiType = "AsnController",
                                    Method = "AsrsGroudingAsn",
                                    Parameters = new List<HouseInboundPassBack.data>
                {
                    new HouseInboundPassBack.data
                    {
                        Value = new List<data.data1>
                        {
                            new data.data1
                            {
                                AsnNo = inboundOrder.OrderNo,
                                //InWarehouse = task.Roadway,
                                TransactionCode = inboundOrder.TransactionCode,
                                InoutType = inboundOrder.OrderType,
                                OrderType = inboundOrder.InoutType,
                                // éåŽ†æ‰€æœ‰åº“å­˜æ˜Žç»†ï¼Œæ·»åŠ åˆ° DetailList
                                DetailList = StockInfos.Select(d => new data.data1.Inbound
                                {
                                    LinId = d.Details.FirstOrDefault()?.LinId?? "",
                                    MaterielCode = d.Details.FirstOrDefault()?.MaterielCode?? "",
                                    OrderQuantity = d.Details.FirstOrDefault().StockQuantity,
                                    BatchNo = d.Details.FirstOrDefault()?.BatchNo,
                                    LPNNo = d.PalletCode,
                                    FinishQty = d.Details.FirstOrDefault().StockQuantity,
                                    LocationName = d.LocationCode,
                                    LabelList= d.Details
        .Where(detail => detail.StockDetails != null)
        .SelectMany(detail => detail.StockDetails)
        .Where(stockDetail => !string.IsNullOrEmpty(stockDetail.BoxCode))
        .Select(stockDetail => stockDetail.BoxCode )
        .ToList()
                                }).ToList()
                            }
                        }
                    }
                }
                                            {
                                                new HouseInboundPassBack.data
                                                {
                                                    Value = new List<data.data1>
                                                    {
                                                        new data.data1
                                                        {
                                                            AsnNo = inboundOrder.OrderNo,
                                                            //InWarehouse = task.Roadway,
                                                            TransactionCode = inboundOrder.TransactionCode,
                                                            InoutType = inboundOrder.OrderType,
                                                            OrderType = inboundOrder.InoutType,
                                                            // éåŽ†æ‰€æœ‰åº“å­˜æ˜Žç»†ï¼Œæ·»åŠ åˆ° DetailList
                                                            DetailList = StockInfos.Select(d => new data.data1.Inbound
                                                            {
                                                                LinId = d.Details.FirstOrDefault()?.LinId?? "",
                                                                MaterielCode = d.Details.FirstOrDefault()?.MaterielCode?? "",
                                                                OrderQuantity = d.Details.FirstOrDefault().StockQuantity,
                                                                BatchNo = d.Details.FirstOrDefault()?.BatchNo,
                                                                LPNNo = d.PalletCode,
                                                                FinishQty = d.Details.FirstOrDefault().StockQuantity,
                                                                LocationName = d.LocationCode,
                                                                LabelList= d.Details
                                                                .Where(detail => detail.StockDetails != null)
                                                                .SelectMany(detail => detail.StockDetails)
                                                                .Where(stockDetail => !string.IsNullOrEmpty(stockDetail.BoxCode))
                                                                .Select(stockDetail => stockDetail.BoxCode )
                                                                .ToList()
                                                            }).ToList()
                                                        }
                                                    }
                                                }
                                            }
                                };
                                var authResult = AuthenticateWithWMS();
                                if (authResult.IsSuccess)
                                {
                                    houseInboundPassBack.Context = new Dictionary<string, string>
            {
                { "Ticket", authResult.Ticket },
                { "InvOrgId", authResult.InvOrgId }
            };
                                            {
                                                { "Ticket", authResult.Ticket },
                                                { "InvOrgId", authResult.InvOrgId }
                                            };
                                    var response = HttpHelper.Post<MomRequestContent>(ReceiveWMSTaskin, houseInboundPassBack, "立库入库数量回传WMS");
                                    // åˆ¤æ–­Success的值
@@ -747,7 +749,68 @@
                            }
                            else if (inboundOrder.OrderStatus == InboundStatusEnum.入库完成.ObjToInt() && inboundOrder.OrderType == 2 && inboundOrder.System.Equals("SMOM"))
                            {
                                SendAllocateInfoToWMS(task, inboundOrder, dt_StockInfo);
                                List<Dt_StockInfo> StockInfos = _stockRepository.StockInfoRepository.Db
                                    .Queryable<Dt_StockInfo>()
                                    .Includes(x => x.Details, d => d.StockDetails)
                                    .Where(x => x.WarehouseId == task.WarehouseId &&
                                                x.Details.Any(v => v.OrderNo == inboundOrder.OrderNo))
                                    .ToList();
                                if (StockInfos.Count == 0) throw new Exception("未找到库存信息");
                                var inventoryAllocate = new InventoryAllocate
                                {
                                    ApiType = "InventoryAllocateController",
                                    Method = "AsrsFinishedStockCount",
                                    Parameters = new List<InventoryAllocate.Allocate>
                                        {
                                             new InventoryAllocate.Allocate
                                            {
                                                Value = new List<Allocate.data1>
                                                {
                                                new Allocate.data1
                                                {
                                                    No = inboundOrder.OrderNo,
                                                    //InWarehouse = task.Roadway,
                                                    TransactionCode = inboundOrder.TransactionCode,
                                                    InoutType = inboundOrder.OrderType,
                                                    OrderType = inboundOrder.InoutType,
                                                    DetailList = StockInfos.Select(d => new Allocate.data1.Inventory
                                                     {
                                                        LinId = d.Details.FirstOrDefault()?.LinId?? "",
                                                        MaterielCode = d.Details.FirstOrDefault()?.MaterielCode?? "",
                                                        OrderQuantity = d.Details.FirstOrDefault().StockQuantity,
                                                        BatchNo = d.Details.FirstOrDefault()?.BatchNo,
                                                        LPNNo = d.PalletCode,
                                                        FinishQty = d.Details.FirstOrDefault().StockQuantity,
                                                        LocationName = d.LocationCode,
                                                         LabelList= d.Details
                                                                    .Where(detail => detail.StockDetails != null)
                                                                    .SelectMany(detail => detail.StockDetails)
                                                                    .Where(stockDetail => !string.IsNullOrEmpty(stockDetail.BoxCode))
                                                                    .Select(stockDetail => stockDetail.BoxCode )
                                                                    .ToList()
                                                        }).ToList()
                                                }
                                                }
                                            }
                                        }
                                };
                                var authResult = AuthenticateWithWMS();
                                if (authResult.IsSuccess)
                                {
                                    inventoryAllocate.Context = new Dictionary<string, string>
                                        {
                                            { "Ticket", authResult.Ticket },
                                            { "InvOrgId", authResult.InvOrgId }
                                        };
                                    var response = HttpHelper.Post<MomRequestContent>(ReceiveWMSTaskAllocatein, inventoryAllocate, "调拨入库数量回传WMS");
                                    if (!response.Success)
                                    {
                                        throw new Exception($"操作失败:{response.Message ?? "未提供错误信息"}");
                                    }
                                }
                            }
                            _unitOfWorkManage.CommitTran();
@@ -760,8 +823,6 @@
                        }
                    }
                }
                else
                {
                    Dt_InboundOrder? inboundOrder = _inboundService.InbounOrderService.Db.Queryable<Dt_InboundOrder>().Where(x => x.OrderNo == dt_StockInfo.Details.FirstOrDefault().OrderNo).Includes(x => x.Details).First();
@@ -890,7 +951,7 @@
                }
                if (inboundOrder.OrderStatus == InboundStatusEnum.入库完成.ObjToInt() && inboundOrder.OrderType == 0 && inboundOrder.System.Equals("SMOM"))
                {
                    SendInboundInfoToWMS(task, inboundOrder, stockInfo);
                    //SendInboundInfoToWMS(task, inboundOrder, stockInfo);
                }
                else if (inboundOrder.OrderStatus == InboundStatusEnum.入库完成.ObjToInt() && inboundOrder.OrderType == 2 && inboundOrder.System.Equals("SMOM"))
                {
@@ -1288,7 +1349,7 @@
                        MaterielCode = d.Details.FirstOrDefault()?.MaterielCode?? "",
                        OrderQuantity = d.Details.FirstOrDefault().StockQuantity,
                        BatchNo = d.BatchNo,
                        LPN_No = d.PalletCode,
                        LPNNo = d.PalletCode,
                        FinishQty = d.Details.FirstOrDefault().StockQuantity,
                        LocationName = d.LocationCode
                    }).ToList()
@@ -1370,41 +1431,242 @@
                if (!validationResult.Status) return validationResult;
                int lastStatus = locationInfo.LocationStatus;
                Dt_Task task1 = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task1 == null)
                {
                    return WebResponseContent.Instance.Error("未找到该任务信息");
                }
                ///盘点出库任务完成逻辑
                if ((task.TaskType == TaskTypeEnum.OutInventory.ObjToInt()))
                {
                    return OutInventoryCompleted(task, stockInfo, locationInfo);
                }
                Dt_OutboundOrder inboundOrder = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrder>()
                .Where(x => x.OrderNo == task1.OrderNo)
                .Includes(x => x.Details)
                .First();
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId);
                if (inboundOrder == null) return WebResponseContent.Instance.Error("未找到出库单信息");
                Dt_OutboundOrderDetail outboundOrderDetails = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrderDetail>()
                .Where(x => x.OrderId == inboundOrder.Id && x.BatchNo == stockInfo.Details.FirstOrDefault().BatchNo)
                .First();
                if (outboundOrderDetails.LocationName != null && outboundOrderDetails.LocationName != "")
                if (warehouse.WarehouseCode.Contains("CP"))
                {
                    outboundOrderDetails = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrderDetail>()
                .Where(x => x.OrderId == inboundOrder.Id && x.BatchNo == stockInfo.Details.FirstOrDefault().BatchNo && x.LocationName == stockInfo.LocationCode)
                .First();
                    try
                    {
                        Dt_NewOutboundOrder outboundOrder = _outboundService.NewOutboundOrderService.Db.Queryable<Dt_NewOutboundOrder>().Where(x => x.OrderNo == task.OrderNo).Includes(x => x.Details)
                        .First();
                        Dt_NewOutboundOrderDetail outboundOrderDetails = _outboundService.NewOutboundOrderDetailService.Db.Queryable<Dt_NewOutboundOrderDetail>()
                        .Where(x => x.OrderId == outboundOrder.Id && x.LocationName == stockInfo.LocationCode)
                        .First();
                        //List<Dt_StockInfoDetail> stockInfoDetail = _stockInfoDetailRepository.QueryData(x => x.StockId == stockInfo.Id).ToList();
                        //foreach (var item in stockInfoDetail)
                        //{
                        //    outboundOrderDetails = _outboundService.NewOutboundOrderDetailService.Db.Queryable<Dt_NewOutboundOrderDetail>()
                        //       .Where(x => x.OrderId == outboundOrder.Id && x.BatchNo == item.BatchNo && x.LocationName == stockInfo.LocationCode)
                        //       .First();
                        //    item.OutboundQuantity += outboundOrderDetails.OverOutQuantity;
                        //}
                        int overCount = outboundOrder.Details.Count(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt());
                        foreach (var item in stockInfo.Details)
                        {
                            if (outboundOrderDetails == null) continue;
                            outboundOrderDetails.OverOutQuantity += item.OutboundQuantity;
                            if (outboundOrderDetails.OverOutQuantity == outboundOrderDetails.OrderQuantity)
                            {
                                outboundOrderDetails.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
                                overCount++;
                            }
                        }
                        if (outboundOrder.Details.Count == overCount)
                        {
                            outboundOrder.OrderStatus = OutboundStatusEnum.出库完成.ObjToInt();
                        }
                        _unitOfWorkManage.BeginTran();
                        ///更新出库单
                        _outboundService.NewOutboundOrderService.Repository.UpdateData(outboundOrder);
                        // æ›´æ–°å‡ºåº“订单详情
                        _outboundService.NewOutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
                        // æ›´æ–°åº“存状态
                        AddCPRetrueOrder(stockInfo, outboundOrder);
                        // åŒºåˆ†å•据数据来源更新货位状态
                        if (outboundOrder.System == null)
                        {
                            return WebResponseContent.Instance.Error("出库单数据源为空");
                        }
                        if (!outboundOrder.System.Equals("SMOM"))
                        {
                            UpdateLocationStatus(locationInfo);
                        }
                        // å¤„理任务完成
                        CompleteTask(task);
                        // æ·»åŠ çŠ¶æ€å˜æ›´è®°å½•
                        AddStatusChangeRecord(task, stockInfo, locationInfo);
                        string path = "http://fr.mankun.com:8080/webroot/decision/view/report?viewlet=fr-report\\SMOM/Product/Produce/OutBoundDetileReport.cpt&op=write&format=pdf";
                        string fullPath = AppDomain.CurrentDomain.BaseDirectory;
                        var url = Path.Combine(fullPath, "wwwroot", "Reports");
                        string savePath = Path.Combine(url, "本次出库.pdf");
                        if (outboundOrderDetails.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt() && outboundOrder.System.Equals("ERP"))
                        {
                            FeedBackOutERP(outboundOrder.OrderNo, outboundOrderDetails.LinId);
                            DownloadReport(path, savePath, outboundOrderDetails.Id);
                        }
                        ///单据完成推送SMOM系统
                        if (outboundOrder.OrderStatus == OutboundStatusEnum.出库完成.ObjToInt() && outboundOrder.System.Equals("SMOM"))
                        {
                            var stockInfoDetail1 = stockInfo.Details.FirstOrDefault();
                            List<Dt_OutStockLockInfo> outStockLockInfo = _outboundService.OutboundStockLockInfoService.Repository.QueryData(x => x.OrderNo == outboundOrder.OrderNo);
                            if (outStockLockInfo.Count == 0) throw new Exception("未找到库存信息");
                            //采购出库
                            if (outboundOrder.OrderType == 1)
                            {
                                var passBack = new HouseoutboundPassBack
                                {
                                    ApiType = "ShippingOrderController",
                                    Method = "AsrsOutboundSO",
                                    Parameters = new List<HouseoutboundPassBack.datas>
                                        {
                                        new HouseoutboundPassBack.datas
                                        {
                                            Value = new List<HouseoutboundPassBack.datas.data1>
                                            {
                                                new HouseoutboundPassBack.datas.data1
                                                {
                                                    No = outboundOrder.OrderNo,
                                                    OutWareHouse = task.Roadway,
                                                    TransactionCode = outboundOrder.TransactionCode,
                                                    InoutType = outboundOrder.OrderType,
                                                    OrderType = outboundOrder.InoutType,
                                                    DetailList = outStockLockInfo.Select(d => new HouseoutboundPassBack.datas.data1.Inbound
                                                        {
                                                            LinId = d.LinId?? "",
                                                            LPN_No = d.PalletCode,
                                                            MaterielCode = d.MaterielCode?? "",
                                                            OrderQuantity = d.OrderQuantity,
                                                            BatchNo = d.BatchNo,
                                                            FinishQty = d.OrderQuantity,
                                                            LocationName = d.LocationCode
                                                        })
                                                        .ToList()
                                                }
                                            }
                                        }
                                }
                                };
                                var authResult = AuthenticateWithWMS();
                                if (authResult.IsSuccess)
                                {
                                    passBack.Context = new Dictionary<string, string>
                                {
                                    { "Ticket", authResult.Ticket },
                                    { "InvOrgId", authResult.InvOrgId }
                                };
                                    var response = HttpHelper.Post<MomRequestContent>(ReceiveWMSTaskout, passBack, "立库出库数量回传WMS");
                                    if (!response.Success)
                                    {
                                        throw new Exception($"操作失败: {response.Message ?? "未提供错误信息"}");
                                    }
                                }
                            }
                            //调拨出库
                            if (outboundOrder.OrderType == 2)
                            {
                                var allocate = new InventoryAllocate
                                {
                                    ApiType = "InventoryAllocateController",
                                    Method = "AsrsFinishedStockCount",
                                    Parameters = new List<Allocate>
                                        {
                                            new Allocate
                                            {
                                                Value = new List<Allocate.data1>
                                                {
                                                    new Allocate.data1
                                                    {
                                                        No = outboundOrder.OrderNo,
                                                        InWarehouse = task.Roadway,
                                                        TransactionCode = outboundOrder.TransactionCode,
                                                        InoutType = outboundOrder.OrderType,
                                                        OrderType = outboundOrder.InoutType,
                                                        DetailList = outStockLockInfos.Select(item =>
                                                        {
                                                            return new Allocate.data1.Inventory
                                                            {
                                                                LinId = outboundOrderDetails.LinId,
                                                                LPNNo = item.PalletCode,
                                                                MaterielCode = outboundOrderDetails.MaterielCode,
                                                                OrderQuantity = outboundOrderDetails.OrderQuantity,
                                                                BatchNo = outboundOrderDetails.BatchNo,
                                                                FinishQty = outboundOrderDetails.OrderQuantity,
                                                                LocationName = task.SourceAddress
                                                            };
                                                        }).ToList()
                                                    }
                                                }
                                            }
                                        }
                                };
                                var authResult = AuthenticateWithWMS();
                                if (authResult.IsSuccess)
                                {
                                    allocate.Context = new Dictionary<string, string>
                                    {
                                        { "Ticket", authResult.Ticket },
                                        { "InvOrgId", authResult.InvOrgId }
                                    };
                                    var response = HttpHelper.Post<MomRequestContent>(ReceiveWMSTaskin, allocate, "立库入库数量回传WMS");
                                    if (!response.Success)
                                    {
                                        throw new Exception($"操作失败: {response.Message ?? "未提供错误信息"}");
                                    }
                                }
                            }
                        }
                        if (outboundOrder.OrderType == 240) // ç›˜ç‚¹å‡ºåº“
                        {
                            // ç›˜ç‚¹å‡ºåº“特殊处理逻辑
                        }
                        _unitOfWorkManage.CommitTran();
                        return WebResponseContent.Instance.OK();
                    }
                    catch
                    {
                        _unitOfWorkManage.RollbackTran();
                        throw;
                    }
                }
                if (outboundOrderDetails == null) return WebResponseContent.Instance.Error("未找到出库单信息");
                else
                {
                    Dt_OutboundOrder inboundOrder = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrder>()
                        .Where(x => x.OrderNo == task.OrderNo)
                        .Includes(x => x.Details)
                        .First();
                // 2. å¤„理出库订单详情
                //var outboundOrderDetails = ProcessOutboundOrderDetails(outStockLockInfos);
                    if (inboundOrder == null) return WebResponseContent.Instance.Error("未找到出库单信息");
                UpdateOutboundOrderDetails(stockInfo, inboundOrder, ref outboundOrderDetails);
                    Dt_OutboundOrderDetail outboundOrderDetails = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrderDetail>()
                        .Where(x => x.OrderId == inboundOrder.Id && x.BatchNo == stockInfo.Details.FirstOrDefault().BatchNo)
                        .First();
                    if (outboundOrderDetails.LocationName != null && outboundOrderDetails.LocationName != "")
                    {
                        outboundOrderDetails = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrderDetail>()
                    .Where(x => x.OrderId == inboundOrder.Id && x.BatchNo == stockInfo.Details.FirstOrDefault().BatchNo && x.LocationName == stockInfo.LocationCode)
                    .First();
                    }
                    if (outboundOrderDetails == null) return WebResponseContent.Instance.Error("未找到出库单信息");
                    UpdateOutboundOrderDetails(stockInfo, inboundOrder, ref outboundOrderDetails);
                    // 3. æ‰§è¡Œæ ¸å¿ƒå‡ºåº“逻辑
                    return ExecuteOutboundLogic(task, stockInfo, locationInfo, outboundOrderDetails, inboundOrder);
                }
                // 3. æ‰§è¡Œæ ¸å¿ƒå‡ºåº“逻辑
                return ExecuteOutboundLogic(task, stockInfo, locationInfo, outboundOrderDetails, inboundOrder);
            }
            catch (Exception ex)
            {
@@ -1784,7 +2046,7 @@
                            return new Allocate.data1.Inventory
                            {
                                LinId = outDetail.LinId,
                                LPN_No = item.PalletCode,
                                LPNNo = item.PalletCode,
                                MaterielCode = outDetail.MaterielCode,
                                OrderQuantity = outDetail.OrderQuantity,
                                BatchNo = outDetail.BatchNo,
@@ -1885,6 +2147,74 @@
            }
        }
        //成品回库单
        private void AddCPRetrueOrder(Dt_StockInfo stockInfo, Dt_NewOutboundOrder outboundOrder)
        {
            Dt_StockInfoDetail stockInfoDetail = _stockService.StockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
           .Where(x => x.StockId == stockInfo.Id)
           .First();
            if (stockInfoDetail == null)
            {
                throw new Exception("建立回库单时,未找到该库存信息");
            }
            if (outboundOrder.OrderType == OrderTypeEnum.反拣出库单.ObjToInt())
            {
                Dt_ReturnOrder returnOrder = _returnOrderRepository.QueryFirst(x => x.LPNNo == stockInfo.PalletCode && x.LocationCode == stockInfo.LocationCode && x.OrderStatus == InOrderStatusEnum.未开始.ObjToInt());
                if (returnOrder == null)
                {
                    throw new Exception("反拣出库后,未找到对应反拣回库单信息");
                }
                stockInfo.LocationCode = "";
                stockInfo.StockStatus = StockStatusEmun.反拣入库.ObjToInt();
                stockInfo.Remark = "反拣入库";
                stockInfoDetail.OutboundQuantity = 0;
                stockInfoDetail.StockQuantity += returnOrder.OrderQuantity;
                stockInfoDetail.OrderNo = returnOrder.OrderNo;
            }
            else
            {
                decimal returnQuantity = stockInfoDetail.StockQuantity - stockInfoDetail.OutboundQuantity;
                if (returnQuantity > 0)
                {
                    Dt_ReturnOrder returnOrder = new Dt_ReturnOrder
                    {
                        MaterielCode = stockInfoDetail.MaterielCode,
                        MaterielName = stockInfoDetail.MaterielName,
                        BatchNo = stockInfoDetail.BatchNo,
                        OrderQuantity = returnQuantity,
                        ReceiptQuantity = returnQuantity,
                        OrderStatus = InOrderStatusEnum.未开始.ObjToInt(),
                        LinId = stockInfoDetail.LinId,
                        LPNNo = stockInfo.PalletCode,
                        Creater = "LK",
                        CreateDate = DateTime.Now,
                        OrderType = OrderTypeEnum.余料回库单.ObjToInt(),
                        System = "WMS"
                    };
                    if (outboundOrder.System == "SMOM" && stockInfo.LocationCode != null)
                    {
                        returnOrder.LocationCode = stockInfo.LocationCode;
                    }
                    _unitOfWorkManage.BeginTran();
                    _returnOrderRepository.AddData(returnOrder);
                    stockInfo.LocationCode = "";
                    stockInfo.StockStatus = StockStatusEmun.余料退库.ObjToInt();
                    stockInfo.Remark = "余料退库";
                    stockInfoDetail.OutboundQuantity = 0;
                    stockInfoDetail.StockQuantity = returnQuantity;
                    stockInfoDetail.OrderNo = returnOrder.OrderNo;
                    _stockService.StockInfoService.Repository.UpdateData(stockInfo);
                    _stockService.StockInfoDetailService.Repository.UpdateData(stockInfoDetail);
                    _unitOfWorkManage.CommitTran();
                }
                else
                {
                    DeleteAndMoveIntoHtStockStatus(stockInfo);
                }
            }
        }
        /// <summary>
        /// å•据明细出库完成回调ERP(表单提交)
        /// </summary>
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/NewOutboundOrderController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WIDESEA_Common;
using WIDESEA_Core;
using WIDESEA_Core.BaseController;
using WIDESEA_DTO.Outbound;
using WIDESEA_IOutboundService;
using WIDESEA_Model.Models;
namespace WIDESEA_WMSServer.Controllers.Outbound
{
    [Route("api/NewOutboundOrder")]
    [ApiController]
    public class NewOutboundOrderController : ApiBaseController<INewOutboundOrderService, Dt_NewOutboundOrder>
    {
        public NewOutboundOrderController(INewOutboundOrderService service) : base(service)
        {
        }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/NewOutboundOrderDetailController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WIDESEA_Core;
using WIDESEA_Core.BaseController;
using WIDESEA_DTO.Stock;
using WIDESEA_IOutboundService;
using WIDESEA_Model.Models;
namespace WIDESEA_WMSServer.Controllers.Outbound
{
    [Route("api/NewOutboundOrderDetail")]
    [ApiController]
    public class NewOutboundOrderDetailController : ApiBaseController<INewOutboundOrderDetailService, Dt_NewOutboundOrderDetail>
    {
        public NewOutboundOrderDetailController(INewOutboundOrderDetailService service) : base(service)
        {
        }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs
@@ -69,6 +69,12 @@
            return Service.DeviceRequestInboundTaskSimple(stationCode, palletCode, heightType);
        }
        [HttpPost, HttpGet, Route("CPDeviceRequestInboundTaskSimple"), AllowAnonymous]
        public WebResponseContent CPDeviceRequestInboundTaskSimple(string stationCode, string palletCode, int heightType, string courceAddress)
        {
            return Service.CPDeviceRequestInboundTaskSimple(stationCode, palletCode, heightType, courceAddress);
        }
        /// <summary>
        /// ç”³è¯·å··é“
        /// </summary>
@@ -195,9 +201,9 @@
        }
        [HttpPost, Route("FeedBackInboundERP"), AllowAnonymous]
        public WebResponseContent FeedBackInboundERP(string upperOrderNo,string linId)
        public WebResponseContent FeedBackInboundERP(string upperOrderNo, string linId)
        {
            return Service.FeedBackInboundERP(upperOrderNo , linId);
            return Service.FeedBackInboundERP(upperOrderNo, linId);
        }
        /// <summary>
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs
@@ -29,6 +29,8 @@
            CreateMap<Dt_StockInfoDetail, Dt_StockQuantityChangeRecord>().ForMember(x => x.SerilNumber, b => b.MapFrom(b => b.SerialNumber)).ForMember(x => x.StockDetailId, b => b.MapFrom(b => b.Id));
            CreateMap<OutboundOrderDetailAddDTO, Dt_OutboundOrderDetail>().ForMember(x => x.OrderDetailStatus, b => b.MapFrom(b => 0));
            CreateMap<OutboundOrderAddDTO, Dt_OutboundOrder>();
            CreateMap<OutboundOrderDetailAddDTO, Dt_NewOutboundOrderDetail>().ForMember(x => x.OrderDetailStatus, b => b.MapFrom(b => 0));
            CreateMap<OutboundOrderAddDTO, Dt_NewOutboundOrder>();
        }
    }
}
¼ª°²PDA/pages.json
@@ -44,6 +44,20 @@
            }
        },
        {
            "path": "pages/stash/YSinboundorder",
            "style": {
                "navigationBarTitleText": "药水组盘",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/stash/FLinboundorder",
            "style": {
                "navigationBarTitleText": "辅料组盘",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/stash/raworderboxing",
            "style": {
                "navigationBarTitleText": "组盘入库",
@@ -58,6 +72,20 @@
            }
        },
        {
            "path": "pages/stash/YSraworderboxing",
            "style": {
                "navigationBarTitleText": "药水组盘入库",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/stash/FLraworderboxing",
            "style": {
                "navigationBarTitleText": "辅料组盘入库",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/stash/outboundorder",
            "style": {
                "navigationBarTitleText": "出库单",
¼ª°²PDA/pages/stash/FLinboundorder.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,216 @@
<template>
    <view>
        <u-sticky>
            <view style="background-color: #ffffff;">
                <uni-search-bar @confirm="search" v-model="searchValue"></uni-search-bar>
            </view>
        </u-sticky>
        <uni-list :border="true">
            <uni-list-item direction="column" clickable @click="groupClick(item.orderNo)" link
                :to="page+item.orderNo" v-for="item in allReceivingOrders" :key="item.orderNo">
                <template v-slot:body>
                    <uni-group margin-top="20">
                        <view style="line-height: 17px;color: #596671;font-size: 14px;text-align: center;display: flex;justify-content: space-between;">
                            å…¥åº“单号&nbsp;&nbsp;{{item.orderNo}}
                        </view>
                        <view style="margin-top: 10rpx;line-height: 17px;color: #596671;font-size: 14px;text-align: center;display: flex;justify-content: space-between;">
                            åˆ›å»ºäººå‘˜&nbsp;&nbsp;{{item.creater}}
                        </view>
                        <view style="margin-top: 10rpx;line-height: 17px;color: #596671;font-size: 14px;text-align: center;display: flex;justify-content: space-between;">
                            åˆ›å»ºæ—¥æœŸ&nbsp;&nbsp;{{item.createDate}}
                        </view>
                        <view
                            style="margin-top: 10rpx;display: flex;align-items: center; ">
                            <view style="text-align: center;line-height: 40rpx;border-radius: 8rpx; width: 238rpx;height: 40rpx;font-size: 22rpx;background-color:rgba(22,127,247,0.18);color: #1F63FF;">
                                è®¢å•状态&nbsp;&nbsp;{{item.InboundOrderStatus}}
                            </view>
                            <view style="text-align: center;line-height: 40rpx;border-radius: 8rpx; width: 158rpx;height: 40rpx;font-size: 22rpx;color: #F56C6C;">
                                æ€»é‡&nbsp;&nbsp;{{item.SumQty}}
                            </view>
                            <view style="text-align: center;line-height: 40rpx;border-radius: 8rpx; width: 158rpx;height: 40rpx;font-size: 22rpx;color: #F56C6C;">
                                å·²å…¥&nbsp;&nbsp;{{item.OverQty}}
                            </view>
                        </view>
                    </uni-group>
                </template>
            </uni-list-item>
        </uni-list>
        <uni-load-more :status="status" v-if="loadVisible"></uni-load-more>
        <u-back-top :scroll-top="scrollTop" top="400"></u-back-top>
    </view>
</template>
<script>
    import { InboundOrderStatus } from '../../common/config.js'
    export default {
        data() {
            return {
                page: "/pages/stash/FLraworderboxing?",
                loadVisible: false,
                searchValue: "",
                status: "more",
                allReceivingOrders: [],
                pageNo: 1,
                scrollTop: 0,
                warehouseId: "",
                isLoaded:false
            }
        },
        onLoad(res) {
            this.warehouseId = res.warehouseId;
            this.page = this.page + "warehouseId=" + this.warehouseId + "&orderNo=";
            this.getData();
        },
        onReachBottom() {
            this.pageNo += 1;
            this.getData();
            this.isLoaded=true;
        },
        onShow() {
            if (this.isLoaded) {
                // ä»Žå…¶ä»–页面返回时刷新
                this.getData();
            }
        },
        onPageScroll(e) {
            this.scrollTop = e.scrollTop;
        },
        methods: {
            search(res) {
                this.getData();
            },
            groupClick() {
            },
            getData() {
                var postData = {
                    MainData: {
                        warehouseId: this.warehouseId,
                        orderNo: this.searchValue,
                        pageNo: this.pageNo
                    },
                }
                this.$u.post('/api/InboundOrder/GetInboundOrders', postData).then((res) => {
                    if (res.status) {
                        if (res.data.length > 0) {
                            if (this.searchValue == '') {
                                this.allReceivingOrders = res.data.map(i => ({
                                    ...i,
                                    InboundOrderStatus: InboundOrderStatus.find(item => item.value == i
                                        .orderStatus).label,
                                    SumQty: i.details.map(item => item.orderQuantity).reduce((prev, next) => prev + next, 0),
                                    OverQty: i.details.map(item => item.overInQuantity).reduce((prev, next) => prev + next, 0)
                                }));
                                // this.allReceivingOrders = res.data;
                                if (this.allReceivingOrders.length > 3) {
                                    this.loadVisible = true;
                                } else {
                                    this.loadVisible = false;
                                }
                            } else {
                                this.allReceivingOrders = res.data.map(i => ({
                                    ...i,
                                    InboundOrderStatus: InboundOrderStatus.find(item => item.value == i
                                        .orderStatus).label,
                                    SumQty: i.details.map(item => item.orderQuantity).reduce((prev, next) => prev + next, 0),
                                    OverQty: i.details.map(item => item.overInQuantity).reduce((prev, next) => prev + next, 0)
                                }));
                                if (this.allReceivingOrders.length > 3) {
                                    this.loadVisible = true;
                                } else {
                                    this.loadVisible = false;
                                }
                            }
                        } else {
                            this.status = 'noMore';
                            //this.allReceivingOrders = [];
                            this.loadVisible = true;
                        }
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        display: flex;
        position: fixed;
        width: 100%;
        top: 10px;
        text-align: center;
        z-index: 999;
        left: 30px;
        height: 20%;
    }
    .footer {
        padding-top: 50%;
    }
</style>
¼ª°²PDA/pages/stash/FLraworderboxing.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,609 @@
<template>
    <view>
        <uni-segmented-control :current="current" :values="items" @clickItem="onClickItem">
        </uni-segmented-control>
        <view class="content">
            <view v-if="current === 0" class="headerstyle">
                <view class="itemstyle">
                    <uni-forms label-width="180">
                        <uni-forms-item :label="label">
                        </uni-forms-item>
                        <uni-forms-item label="托盘条码:">
                            <uni-easyinput type="text" placeholder="请扫描托盘条码" ref='midInput' :focus="!focus"
                                v-model="barcode" @confirm="barcodeInput" />
                        </uni-forms-item>
                        <uni-forms-item label="内箱标签:">
                            <uni-easyinput type="text" placeholder="请扫描内箱标签" ref='midInput' :focus="focus"
                                v-model="materSn" @confirm="snInput" />
                        </uni-forms-item>
                        <uni-forms-item :label="Testlabel" v-if="Test">
                            <uni-easyinput type="text" :placeholder="Testplaceholder" ref='midInput'
                                v-model="Initiallife" />
                        </uni-forms-item>
                        <uni-forms-item>
                            <view style="display: flex;justify-content: space-around;margin-top: 2%;">
                                <button @click="reset" type="default" size="default"
                                    style="width: 160rpx;border: 1rpx solid #007aff;color: #007aff;">重置</button>
                                <button @click="submit" type="primary" size="default" style="width: 160rpx;">组盘</button>
                            </view>
                        </uni-forms-item>
                    </uni-forms>
                    <uni-list>
                        <uni-list-item direction="column" v-for="(item,index) in matInfos" :key="index">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <uni-icons type="trash" size="22" style="position: absolute;right: 5%;"
                                        @click="deleteList(index)">
                                    </uni-icons>
                                    <view class="uni-content">
                                        <view class="uni-title-sub uni-ellipsis-2">采购单号:{{item.purchaseOrderNo}}</view>
                                        <view class="uni-note">物料编码:{{item.materielCode}}</view>
                                        <view class="uni-note">批次号:{{item.lotNo}}</view>
                                        <!-- ç›´æŽ¥ç¼–辑Q值对应的quantity字段 -->
                                        <view class="uni-note" style="display: flex; align-items: center; gap: 10rpx;">
                                            æ•°é‡ï¼š
                                            <uni-easyinput
                                                type="number"
                                                min="1"
                                                style="width: 150rpx; display: inline-block;"
                                                v-model="item.quantity"
                                                @input="handleQuantityChange(item)"
                                            />
                                        </view>
                                        <view class="uni-note">生产日期:{{item.productionDate}}</view>
                                        <view class="uni-note">有效期:{{item.effectiveDate}}</view>
                                        <view class="uni-note">交货单号:{{item.deliveryNote}}</view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                    </uni-list>
                </view>
            </view>
            <view v-if="current === 1" class="headerstyle">
                <view class="itemstyle">
                    <uni-forms label-width="120">
                        <uni-forms-item label="托盘条码">
                            <uni-easyinput type="text" :focus="!addressFocus" v-model="inboundBarcode"
                                placeholder="请扫描托盘条码" ref='midInput' @confirm="inputChangebarcode" />
                        </uni-forms-item>
                        <uni-forms-item label="地址条码">
                            <uni-easyinput type="text" v-model="address" :disabled="addressdisabled"
                                placeholder="请扫描地址条码" ref='midInput' :focus="addressFocus" />
                        </uni-forms-item>
                        <uni-forms-item>
                            <button @click="inbound" type="primary" size="default" style="margin-top: 2%;">入库确认</button>
                        </uni-forms-item>
                    </uni-forms>
                </view>
            </view>
            <view v-if="current === 2" class="headerstyle">
                <view class="itemstyle">
                    <uni-list :border="true">
                        <uni-list-item direction="column" v-for="(item,index) in orderInfo" :key="index">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <view class="uni-content">
                                        <view style="font-size: 18px;">单据号:{{orderNo}}</view>
                                        <view style="font-size: 18px;">物料编码:{{item.materielCode}}</view>
                                        <view>物料名称:{{item.materielName}}</view>
                                        <view style="font-size: 18px;">数量:{{item.orderQuantity}}</view>
                                        <view style="font-size: 18px;">组盘数量:{{item.receiptQuantity}}</view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                    </uni-list>
                </view>
            </view>
            <view v-if="current === 3" class="headerstyle">
                <view class="itemstyle">
                    <uni-forms label-width="180">
                        <uni-forms-item label="内箱标签:">
                            <uni-easyinput type="text" placeholder="请扫描内箱标签" ref='midInput' :focus="!pkfocus"
                                v-model="pkmaterSn" @confirm="pksnInput" />
                        </uni-forms-item>
                        <uni-forms-item>
                            <view style="display: flex;justify-content: space-around;margin-top: 2%;">
                                <button @click="resetInPk" type="default" size="default"
                                    style="width: 160rpx;border: 1rpx solid #007aff;color: #007aff;">重置</button>
                                <button @click="pksubmit" type="primary" size="default"
                                    style="margin-top: 2%;">入平库</button>
                            </view>
                        </uni-forms-item>
                    </uni-forms>
                    <uni-list>
                        <uni-list-item direction="column" v-for="(item,index) in pkmatInfos" :key="index">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <uni-icons type="trash" size="22" style="position: absolute;right: 5%;"
                                        @click="pkdeleteList(index)">
                                    </uni-icons>
                                    <view class="uni-content">
                                        <view class="uni-title-sub uni-ellipsis-2">采购单号:{{item.purchaseOrderNo}}</view>
                                        <view class="uni-note">物料编码:{{item.materielCode}}</view>
                                        <view class="uni-note">批次号:{{item.lotNo}}</view>
                                        <!-- ç›´æŽ¥ç¼–辑Q值对应的quantity字段 -->
                                        <view class="uni-note" style="display: flex; align-items: center; gap: 10rpx;">
                                            æ•°é‡ï¼š
                                            <uni-easyinput
                                                type="number"
                                                min="1"
                                                style="width: 150rpx; display: inline-block;"
                                                v-model="item.quantity"
                                                @input="handlePkQuantityChange(item)"
                                            />
                                        </view>
                                        <view class="uni-note">生产日期:{{item.productionDate}}</view>
                                        <view class="uni-note">有效期:{{item.effectiveDate}}</view>
                                        <view class="uni-note">交货单号:{{item.deliveryNote}}</view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                    </uni-list>
                </view>
            </view>
        </view>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    const innerAudioContext = uni.createInnerAudioContext();
    export default {
        data() {
            return {
                items: ['组盘', '入库', '单据信息'],
                current: 0,
                matTotal: [],
                matInfos: [],
                orderNo: "",
                label: "",
                orderInfo: [],
                focus: false,
                pkfocus: false,
                barcode: "",
                materSn: "",
                Initiallife: 1000,
                sns: [],
                pksns: [],
                addressFocus: false,
                inboundBarcode: "",
                address: "",
                check: true,
                value: "",
                matInfo: [],
                value2: "",
                matTotals: [],
                warehouseId: "",
                Test: false,
                Testlabel: "",
                Testplaceholder: "",
                Testcheck: false,
                pkmaterSn: "",
                pkmatInfos: [],
                addressdisabled: false
            }
        },
        onShow() {},
        onLoad(res) {
            this.focus = false;
            this.addressFocus = false;
            this.orderNo = res.orderNo;
            this.warehouseId = res.warehouseId;
            // if (this.warehouseId == 6) { //测试架仓库区ID
            //     this.Test = true;
            //     this.Testlabel = "初始寿命:";
            //     this.Testplaceholder = "请输入初始寿命";
            // } else if (this.warehouseId == 2) { //油墨仓库区ID
            //     this.Test = true;
            //     this.Testlabel = "数量:";
            //     this.Testplaceholder = "请输入数量";
            //     this.Initiallife = 16;
            // } else if (this.warehouseId == 5) { //辅料
            //     this.items.push("入平库");
            //     this.items[1] = "入立库";
            //     this.address = "8005";
            // } else if (this.warehouseId == 3) { //辅料
            //     this.address = "1011";
            //     this.addressdisabled = true;
            // }
            this.label = "单据编号:" + this.orderNo;
            this.getData();
        },
        methods: {
            // ç»„盘页数量编辑校验(直接修改原生quantity字段)
            handleQuantityChange(item) {
                item.quantity = item.quantity ? Math.max(1, parseInt(item.quantity)) : 1;
            },
            // å…¥å¹³åº“页数量编辑校验(直接修改原生quantity字段)
            handlePkQuantityChange(item) {
                item.quantity = item.quantity ? Math.max(1, parseInt(item.quantity)) : 1;
            },
            updateFocus() {
                this.$nextTick(() => {
                    this.materSn = '';
                    if (!this.focus) {
                        this.focus = true;
                    }
                });
            },
            barcodeFocus() {
                this.barcode = '';
                if (this.focus) {
                    this.focus = false;
                }
            },
            getData() {
                var postData = {
                    MainData: {
                        orderNo: this.orderNo
                    },
                }
                this.$u.post('/api/InboundOrderDetail/GetInboundOrderDetails', postData).then((res) => {
                    if (res.status) {
                        this.orderInfo = res.data;
                        if (this.orderInfo.length > 3) {
                            this.loadVisible = true;
                        }
                    }
                })
            },
            onClickItem(e) {
                this.focus = false;
                this.addressFocus = false;
                if (this.current !== e.currentIndex) {
                    this.current = e.currentIndex;
                    if (this.current == 2) {
                        this.getData();
                    }
                }
            },
            barcodeInput() {
                this.$nextTick(function(x) {
                    if (this.barcode.length > 0) {
                        this.focus = true;
                    }
                })
            },
            // ç»„盘页内箱码解析(直接操作原生quantity字段)
            snInput() {
                this.$nextTick(() => {
                    if (!this.materSn) return;
                    // å»¶è¿Ÿ100ms确保扫码完成
                    setTimeout(() => {
                        this.focus = false;
                        let matSn = this.materSn.trim();
                        // ä»“库11的特殊处理
                        if (this.warehouseId == 11) {
                            matSn = matSn.replace(/,SC.*/, '');
                        }
                        // æ ¡éªŒå†…箱码完整性
                        const requiredFields = ['M:', 'BS:', 'DM:', 'DE:', 'Q:', 'PO:', 'DN:'];
                        const hasAllFields = requiredFields.every(field => matSn.includes(field));
                        if (!hasAllFields) {
                            this.$refs.uToast.show({
                                title: "内箱码不完整,请重新扫描",
                                type: "error"
                            });
                            this.materSn = "";
                            return;
                        }
                        // æ ¡éªŒPO字段存在性
                        if (matSn.indexOf("PO") <= 0) {
                            this.$refs.uToast.show({
                                title: "内箱码格式错误(无PO标识)",
                                type: "error"
                            });
                            this.materSn = "";
                            return;
                        }
                        // è§£æžå†…箱码(直接使用返回的quantity作为Q值)
                        this.$u.post('/api/MaterielInfo/CodeAnalysis?serNum=' + matSn, {}).then((res) => {
                            this.Testcheck = false;
                            if (res.status) {
                                this.sns.push(res.data.serialNumber);
                                this.matInfos.push(res.data);
                                if (res.message) {
                                    this.$refs.uToast.show({
                                        title: res.message,
                                        type: "warning"
                                    });
                                }
                            } else {
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                });
                            }
                        });
                        this.materSn = "";
                    }, 1000);
                })
            },
            // å…¥å¹³åº“页内箱码解析(直接操作原生quantity字段)
            pksnInput() {
                this.$nextTick(() => {
                    if (!this.pkmaterSn) return;
                    // å»¶è¿Ÿ100ms确保扫码完成
                    setTimeout(() => {
                        let matSn = this.pkmaterSn.trim();
                        // æ ¡éªŒå†…箱码完整性
                        const requiredFields = ['M:', 'BS:', 'DM:', 'DE:', 'Q:', 'PO:', 'DN:'];
                        const hasAllFields = requiredFields.every(field => matSn.includes(field));
                        if (!hasAllFields) {
                            this.$refs.uToast.show({
                                title: "内箱码不完整,请重新扫描",
                                type: "error"
                            });
                            this.pkmaterSn = "";
                            return;
                        }
                        // æ ¡éªŒPO字段存在性
                        if (matSn.indexOf("PO") <= 0) {
                            this.$refs.uToast.show({
                                title: "内箱码格式错误(无PO标识)",
                                type: "error"
                            });
                            this.pkmaterSn = "";
                            return;
                        }
                        // è§£æžå†…箱码(直接使用返回的quantity作为Q值)
                        this.$u.post('/api/MaterielInfo/CodeAnalysis?serNum=' + matSn, {}).then((res) => {
                            if (res.status) {
                                this.pksns.push(res.data.serialNumber);
                                this.pkmatInfos.push(res.data);
                            } else {
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                });
                            }
                        });
                        this.pkmaterSn = "";
                    }, 100);
                })
            },
            inbound() {
                if (this.inboundBarcode == "") {
                    this.$refs.uToast.show({
                        title: "请扫描托盘条码",
                        type: "error"
                    })
                    return;
                }
                if (this.address == "") {
                    this.$refs.uToast.show({
                        title: "请扫描地址条码",
                        type: "error"
                    })
                    return;
                }
                var postData = {
                    MainData: {
                        "barcode": this.inboundBarcode,
                        "startPoint": this.address,
                        "warehouseId": this.warehouseId
                    }
                }
                this.$u.post('/api/Task/RequestInboundTask', postData).then(res => {
                    if (res.status) {
                        this.inboundBarcode = "";
                        if (this.warehouseId != 5) this.address = "";
                        setTimeout(() => {
                            this.addressFocus = false;
                            this.$refs.uToast.show({
                                title: "成功",
                                type: "success"
                            })
                        }, 200);
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    this.$refs.uToast.show({
                        title: err.message,
                        type: "error"
                    })
                })
            },
            inputChangebarcode() {
                this.addressFocus = false;
                this.$nextTick(function(x) {
                    if (this.inboundBarcode != '') {
                        this.addressFocus = true;
                    }
                })
            },
            deleteList(res) {
                this.matInfos.splice(res, 1);
                this.sns.splice(res, 1);
            },
            pkdeleteList(res) {
                this.pkmatInfos.splice(res, 1);
                this.pksns.splice(res, 1);
            },
            reset() {
                this.barcode = "";
                this.matInfos = [];
                this.sns = [];
                this.materSn = "";
                if (this.warehouseId != 6) {
                    this.Initiallife = 0;
                }
            },
            resetInPk() {
                this.pkmaterSn = "";
                this.pkfocus = false;
                this.pkmatInfos = [];
                this.pksns = [];
            },
            pksubmit() {
                if (this.pkmatInfos.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: 'error'
                    })
                    return;
                }
                // ç›´æŽ¥ä½¿ç”¨ä¿®æ”¹åŽçš„quantity(对应Q值)提交
                const submitData = this.pkmatInfos.map(item => ({
                    serialNumber: item.serialNumber,
                    quantity: item.quantity
                }));
                this.$u.post('/api/InboundOrder/InPinKu?warehouseId=' + this.warehouseId + "&orderNo=" + this.orderNo, submitData)
                    .then(res => {
                        if (res.status) {
                            this.$refs.uToast.show({
                                title: "入库成功",
                                type: "success"
                            })
                            this.pkfocus = false;
                            this.pkmatInfos = [];
                            this.pksns = [];
                        } else {
                            this.$refs.uToast.show({
                                title: res.message,
                                type: "error"
                            })
                        }
                    })
            },
            submit() {
                if (this.barcode == "") {
                    this.$refs.uToast.show({
                        title: "请扫描托盘条码",
                        type: 'error'
                    })
                    return;
                }
                if (this.matInfos.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: 'error'
                    })
                    return;
                }
                if (this.Test) {
                    if (!this.Testcheck) {
                        this.Testcheck = true;
                        if (this.warehouseId == 2) {
                            this.$refs.uToast.show({
                                title: "请确认数量",
                                type: 'error'
                            })
                        }
                        return;
                    }
                }
                // ç›´æŽ¥ä½¿ç”¨ä¿®æ”¹åŽçš„quantity(对应Q值)提交
                let submitSns = this.matInfos.map(item => ({
                    serialNumber: item.serialNumber,
                    quantity: item.quantity
                }));
                // æ²¹å¢¨ä»“库特殊处理
                if (this.warehouseId == 2) {
                    const firstItem = submitSns[0];
                    for (var i = 0; i < this.Initiallife - 1; i++) {
                        submitSns.push({...firstItem});
                    }
                }
                this.$u.post('/api/InboundOrder/MaterielGroup', {
                    MainData: {
                        "palletCode": this.barcode,
                        "orderNo": this.orderNo,
                        "initiallife": this.Initiallife,
                        "warehouseId": this.warehouseId
                    },
                    DelKeys: submitSns
                }).then(res => {
                    this.Testcheck = false;
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "组盘成功",
                            type: "success"
                        })
                        this.focus = false;
                        this.barcode = "";
                        this.matInfos = [];
                        this.sns = [];
                        this.matTotal = [];
                        if (this.warehouseId != 6) {
                            this.Initiallife = "";
                        }
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    .content {
        display: flex;
        height: 150px;
    }
    .content-text {
        font-size: 14px;
        color: #666;
    }
    .itemstyle {
        margin-top: 30px;
        margin-left: 5%;
    }
    .headerstyle {
        width: 90%;
    }
</style>
¼ª°²PDA/pages/stash/YSinboundorder.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,216 @@
<template>
    <view>
        <u-sticky>
            <view style="background-color: #ffffff;">
                <uni-search-bar @confirm="search" v-model="searchValue"></uni-search-bar>
            </view>
        </u-sticky>
        <uni-list :border="true">
            <uni-list-item direction="column" clickable @click="groupClick(item.orderNo)" link
                :to="page+item.orderNo" v-for="item in allReceivingOrders" :key="item.orderNo">
                <template v-slot:body>
                    <uni-group margin-top="20">
                        <view style="line-height: 17px;color: #596671;font-size: 14px;text-align: center;display: flex;justify-content: space-between;">
                            å…¥åº“单号&nbsp;&nbsp;{{item.orderNo}}
                        </view>
                        <view style="margin-top: 10rpx;line-height: 17px;color: #596671;font-size: 14px;text-align: center;display: flex;justify-content: space-between;">
                            åˆ›å»ºäººå‘˜&nbsp;&nbsp;{{item.creater}}
                        </view>
                        <view style="margin-top: 10rpx;line-height: 17px;color: #596671;font-size: 14px;text-align: center;display: flex;justify-content: space-between;">
                            åˆ›å»ºæ—¥æœŸ&nbsp;&nbsp;{{item.createDate}}
                        </view>
                        <view
                            style="margin-top: 10rpx;display: flex;align-items: center; ">
                            <view style="text-align: center;line-height: 40rpx;border-radius: 8rpx; width: 238rpx;height: 40rpx;font-size: 22rpx;background-color:rgba(22,127,247,0.18);color: #1F63FF;">
                                è®¢å•状态&nbsp;&nbsp;{{item.InboundOrderStatus}}
                            </view>
                            <view style="text-align: center;line-height: 40rpx;border-radius: 8rpx; width: 158rpx;height: 40rpx;font-size: 22rpx;color: #F56C6C;">
                                æ€»é‡&nbsp;&nbsp;{{item.SumQty}}
                            </view>
                            <view style="text-align: center;line-height: 40rpx;border-radius: 8rpx; width: 158rpx;height: 40rpx;font-size: 22rpx;color: #F56C6C;">
                                å·²å…¥&nbsp;&nbsp;{{item.OverQty}}
                            </view>
                        </view>
                    </uni-group>
                </template>
            </uni-list-item>
        </uni-list>
        <uni-load-more :status="status" v-if="loadVisible"></uni-load-more>
        <u-back-top :scroll-top="scrollTop" top="400"></u-back-top>
    </view>
</template>
<script>
    import { InboundOrderStatus } from '../../common/config.js'
    export default {
        data() {
            return {
                page: "/pages/stash/YSraworderboxing?",
                loadVisible: false,
                searchValue: "",
                status: "more",
                allReceivingOrders: [],
                pageNo: 1,
                scrollTop: 0,
                warehouseId: "",
                isLoaded:false
            }
        },
        onLoad(res) {
            this.warehouseId = res.warehouseId;
            this.page = this.page + "warehouseId=" + this.warehouseId + "&orderNo=";
            this.getData();
        },
        onReachBottom() {
            this.pageNo += 1;
            this.getData();
            this.isLoaded=true;
        },
        onShow() {
            if (this.isLoaded) {
                // ä»Žå…¶ä»–页面返回时刷新
                this.getData();
            }
        },
        onPageScroll(e) {
            this.scrollTop = e.scrollTop;
        },
        methods: {
            search(res) {
                this.getData();
            },
            groupClick() {
            },
            getData() {
                var postData = {
                    MainData: {
                        warehouseId: this.warehouseId,
                        orderNo: this.searchValue,
                        pageNo: this.pageNo
                    },
                }
                this.$u.post('/api/InboundOrder/GetInboundOrders', postData).then((res) => {
                    if (res.status) {
                        if (res.data.length > 0) {
                            if (this.searchValue == '') {
                                this.allReceivingOrders = res.data.map(i => ({
                                    ...i,
                                    InboundOrderStatus: InboundOrderStatus.find(item => item.value == i
                                        .orderStatus).label,
                                    SumQty: i.details.map(item => item.orderQuantity).reduce((prev, next) => prev + next, 0),
                                    OverQty: i.details.map(item => item.overInQuantity).reduce((prev, next) => prev + next, 0)
                                }));
                                // this.allReceivingOrders = res.data;
                                if (this.allReceivingOrders.length > 3) {
                                    this.loadVisible = true;
                                } else {
                                    this.loadVisible = false;
                                }
                            } else {
                                this.allReceivingOrders = res.data.map(i => ({
                                    ...i,
                                    InboundOrderStatus: InboundOrderStatus.find(item => item.value == i
                                        .orderStatus).label,
                                    SumQty: i.details.map(item => item.orderQuantity).reduce((prev, next) => prev + next, 0),
                                    OverQty: i.details.map(item => item.overInQuantity).reduce((prev, next) => prev + next, 0)
                                }));
                                if (this.allReceivingOrders.length > 3) {
                                    this.loadVisible = true;
                                } else {
                                    this.loadVisible = false;
                                }
                            }
                        } else {
                            this.status = 'noMore';
                            //this.allReceivingOrders = [];
                            this.loadVisible = true;
                        }
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        display: flex;
        position: fixed;
        width: 100%;
        top: 10px;
        text-align: center;
        z-index: 999;
        left: 30px;
        height: 20%;
    }
    .footer {
        padding-top: 50%;
    }
</style>
¼ª°²PDA/pages/stash/YSraworderboxing.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,609 @@
<template>
    <view>
        <uni-segmented-control :current="current" :values="items" @clickItem="onClickItem">
        </uni-segmented-control>
        <view class="content">
            <view v-if="current === 0" class="headerstyle">
                <view class="itemstyle">
                    <uni-forms label-width="180">
                        <uni-forms-item :label="label">
                        </uni-forms-item>
                        <uni-forms-item label="托盘条码:">
                            <uni-easyinput type="text" placeholder="请扫描托盘条码" ref='midInput' :focus="!focus"
                                v-model="barcode" @confirm="barcodeInput" />
                        </uni-forms-item>
                        <uni-forms-item label="内箱标签:">
                            <uni-easyinput type="text" placeholder="请扫描内箱标签" ref='midInput' :focus="focus"
                                v-model="materSn" @confirm="snInput" />
                        </uni-forms-item>
                        <uni-forms-item :label="Testlabel" v-if="Test">
                            <uni-easyinput type="text" :placeholder="Testplaceholder" ref='midInput'
                                v-model="Initiallife" />
                        </uni-forms-item>
                        <uni-forms-item>
                            <view style="display: flex;justify-content: space-around;margin-top: 2%;">
                                <button @click="reset" type="default" size="default"
                                    style="width: 160rpx;border: 1rpx solid #007aff;color: #007aff;">重置</button>
                                <button @click="submit" type="primary" size="default" style="width: 160rpx;">组盘</button>
                            </view>
                        </uni-forms-item>
                    </uni-forms>
                    <uni-list>
                        <uni-list-item direction="column" v-for="(item,index) in matInfos" :key="index">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <uni-icons type="trash" size="22" style="position: absolute;right: 5%;"
                                        @click="deleteList(index)">
                                    </uni-icons>
                                    <view class="uni-content">
                                        <view class="uni-title-sub uni-ellipsis-2">采购单号:{{item.purchaseOrderNo}}</view>
                                        <view class="uni-note">物料编码:{{item.materielCode}}</view>
                                        <view class="uni-note">批次号:{{item.lotNo}}</view>
                                        <!-- ç›´æŽ¥ç¼–辑Q值对应的quantity字段 -->
                                        <view class="uni-note" style="display: flex; align-items: center; gap: 10rpx;">
                                            æ•°é‡ï¼š
                                            <uni-easyinput
                                                type="number"
                                                min="1"
                                                style="width: 150rpx; display: inline-block;"
                                                v-model="item.quantity"
                                                @input="handleQuantityChange(item)"
                                            />
                                        </view>
                                        <view class="uni-note">生产日期:{{item.productionDate}}</view>
                                        <view class="uni-note">有效期:{{item.effectiveDate}}</view>
                                        <view class="uni-note">交货单号:{{item.deliveryNote}}</view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                    </uni-list>
                </view>
            </view>
            <view v-if="current === 1" class="headerstyle">
                <view class="itemstyle">
                    <uni-forms label-width="120">
                        <uni-forms-item label="托盘条码">
                            <uni-easyinput type="text" :focus="!addressFocus" v-model="inboundBarcode"
                                placeholder="请扫描托盘条码" ref='midInput' @confirm="inputChangebarcode" />
                        </uni-forms-item>
                        <uni-forms-item label="地址条码">
                            <uni-easyinput type="text" v-model="address" :disabled="addressdisabled"
                                placeholder="请扫描地址条码" ref='midInput' :focus="addressFocus" />
                        </uni-forms-item>
                        <uni-forms-item>
                            <button @click="inbound" type="primary" size="default" style="margin-top: 2%;">入库确认</button>
                        </uni-forms-item>
                    </uni-forms>
                </view>
            </view>
            <view v-if="current === 2" class="headerstyle">
                <view class="itemstyle">
                    <uni-list :border="true">
                        <uni-list-item direction="column" v-for="(item,index) in orderInfo" :key="index">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <view class="uni-content">
                                        <view style="font-size: 18px;">单据号:{{orderNo}}</view>
                                        <view style="font-size: 18px;">物料编码:{{item.materielCode}}</view>
                                        <view>物料名称:{{item.materielName}}</view>
                                        <view style="font-size: 18px;">数量:{{item.orderQuantity}}</view>
                                        <view style="font-size: 18px;">组盘数量:{{item.receiptQuantity}}</view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                    </uni-list>
                </view>
            </view>
            <view v-if="current === 3" class="headerstyle">
                <view class="itemstyle">
                    <uni-forms label-width="180">
                        <uni-forms-item label="内箱标签:">
                            <uni-easyinput type="text" placeholder="请扫描内箱标签" ref='midInput' :focus="!pkfocus"
                                v-model="pkmaterSn" @confirm="pksnInput" />
                        </uni-forms-item>
                        <uni-forms-item>
                            <view style="display: flex;justify-content: space-around;margin-top: 2%;">
                                <button @click="resetInPk" type="default" size="default"
                                    style="width: 160rpx;border: 1rpx solid #007aff;color: #007aff;">重置</button>
                                <button @click="pksubmit" type="primary" size="default"
                                    style="margin-top: 2%;">入平库</button>
                            </view>
                        </uni-forms-item>
                    </uni-forms>
                    <uni-list>
                        <uni-list-item direction="column" v-for="(item,index) in pkmatInfos" :key="index">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <uni-icons type="trash" size="22" style="position: absolute;right: 5%;"
                                        @click="pkdeleteList(index)">
                                    </uni-icons>
                                    <view class="uni-content">
                                        <view class="uni-title-sub uni-ellipsis-2">采购单号:{{item.purchaseOrderNo}}</view>
                                        <view class="uni-note">物料编码:{{item.materielCode}}</view>
                                        <view class="uni-note">批次号:{{item.lotNo}}</view>
                                        <!-- ç›´æŽ¥ç¼–辑Q值对应的quantity字段 -->
                                        <view class="uni-note" style="display: flex; align-items: center; gap: 10rpx;">
                                            æ•°é‡ï¼š
                                            <uni-easyinput
                                                type="number"
                                                min="1"
                                                style="width: 150rpx; display: inline-block;"
                                                v-model="item.quantity"
                                                @input="handlePkQuantityChange(item)"
                                            />
                                        </view>
                                        <view class="uni-note">生产日期:{{item.productionDate}}</view>
                                        <view class="uni-note">有效期:{{item.effectiveDate}}</view>
                                        <view class="uni-note">交货单号:{{item.deliveryNote}}</view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                    </uni-list>
                </view>
            </view>
        </view>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    const innerAudioContext = uni.createInnerAudioContext();
    export default {
        data() {
            return {
                items: ['组盘', '入库', '单据信息'],
                current: 0,
                matTotal: [],
                matInfos: [],
                orderNo: "",
                label: "",
                orderInfo: [],
                focus: false,
                pkfocus: false,
                barcode: "",
                materSn: "",
                Initiallife: 1000,
                sns: [],
                pksns: [],
                addressFocus: false,
                inboundBarcode: "",
                address: "",
                check: true,
                value: "",
                matInfo: [],
                value2: "",
                matTotals: [],
                warehouseId: "",
                Test: false,
                Testlabel: "",
                Testplaceholder: "",
                Testcheck: false,
                pkmaterSn: "",
                pkmatInfos: [],
                addressdisabled: false
            }
        },
        onShow() {},
        onLoad(res) {
            this.focus = false;
            this.addressFocus = false;
            this.orderNo = res.orderNo;
            this.warehouseId = res.warehouseId;
            // if (this.warehouseId == 6) { //测试架仓库区ID
            //     this.Test = true;
            //     this.Testlabel = "初始寿命:";
            //     this.Testplaceholder = "请输入初始寿命";
            // } else if (this.warehouseId == 2) { //油墨仓库区ID
            //     this.Test = true;
            //     this.Testlabel = "数量:";
            //     this.Testplaceholder = "请输入数量";
            //     this.Initiallife = 16;
            // } else if (this.warehouseId == 5) { //辅料
            //     this.items.push("入平库");
            //     this.items[1] = "入立库";
            //     this.address = "8005";
            // } else if (this.warehouseId == 3) { //辅料
            //     this.address = "1011";
            //     this.addressdisabled = true;
            // }
            this.label = "单据编号:" + this.orderNo;
            this.getData();
        },
        methods: {
            // ç»„盘页数量编辑校验(直接修改原生quantity字段)
            handleQuantityChange(item) {
                item.quantity = item.quantity ? Math.max(1, parseInt(item.quantity)) : 1;
            },
            // å…¥å¹³åº“页数量编辑校验(直接修改原生quantity字段)
            handlePkQuantityChange(item) {
                item.quantity = item.quantity ? Math.max(1, parseInt(item.quantity)) : 1;
            },
            updateFocus() {
                this.$nextTick(() => {
                    this.materSn = '';
                    if (!this.focus) {
                        this.focus = true;
                    }
                });
            },
            barcodeFocus() {
                this.barcode = '';
                if (this.focus) {
                    this.focus = false;
                }
            },
            getData() {
                var postData = {
                    MainData: {
                        orderNo: this.orderNo
                    },
                }
                this.$u.post('/api/InboundOrderDetail/GetInboundOrderDetails', postData).then((res) => {
                    if (res.status) {
                        this.orderInfo = res.data;
                        if (this.orderInfo.length > 3) {
                            this.loadVisible = true;
                        }
                    }
                })
            },
            onClickItem(e) {
                this.focus = false;
                this.addressFocus = false;
                if (this.current !== e.currentIndex) {
                    this.current = e.currentIndex;
                    if (this.current == 2) {
                        this.getData();
                    }
                }
            },
            barcodeInput() {
                this.$nextTick(function(x) {
                    if (this.barcode.length > 0) {
                        this.focus = true;
                    }
                })
            },
            // ç»„盘页内箱码解析(直接操作原生quantity字段)
            snInput() {
                this.$nextTick(() => {
                    if (!this.materSn) return;
                    // å»¶è¿Ÿ100ms确保扫码完成
                    setTimeout(() => {
                        this.focus = false;
                        let matSn = this.materSn.trim();
                        // ä»“库11的特殊处理
                        if (this.warehouseId == 11) {
                            matSn = matSn.replace(/,SC.*/, '');
                        }
                        // æ ¡éªŒå†…箱码完整性
                        const requiredFields = ['M:', 'BS:', 'DM:', 'DE:', 'Q:', 'PO:', 'DN:'];
                        const hasAllFields = requiredFields.every(field => matSn.includes(field));
                        if (!hasAllFields) {
                            this.$refs.uToast.show({
                                title: "内箱码不完整,请重新扫描",
                                type: "error"
                            });
                            this.materSn = "";
                            return;
                        }
                        // æ ¡éªŒPO字段存在性
                        if (matSn.indexOf("PO") <= 0) {
                            this.$refs.uToast.show({
                                title: "内箱码格式错误(无PO标识)",
                                type: "error"
                            });
                            this.materSn = "";
                            return;
                        }
                        // è§£æžå†…箱码(直接使用返回的quantity作为Q值)
                        this.$u.post('/api/MaterielInfo/CodeAnalysis?serNum=' + matSn, {}).then((res) => {
                            this.Testcheck = false;
                            if (res.status) {
                                this.sns.push(res.data.serialNumber);
                                this.matInfos.push(res.data);
                                if (res.message) {
                                    this.$refs.uToast.show({
                                        title: res.message,
                                        type: "warning"
                                    });
                                }
                            } else {
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                });
                            }
                        });
                        this.materSn = "";
                    }, 1000);
                })
            },
            // å…¥å¹³åº“页内箱码解析(直接操作原生quantity字段)
            pksnInput() {
                this.$nextTick(() => {
                    if (!this.pkmaterSn) return;
                    // å»¶è¿Ÿ100ms确保扫码完成
                    setTimeout(() => {
                        let matSn = this.pkmaterSn.trim();
                        // æ ¡éªŒå†…箱码完整性
                        const requiredFields = ['M:', 'BS:', 'DM:', 'DE:', 'Q:', 'PO:', 'DN:'];
                        const hasAllFields = requiredFields.every(field => matSn.includes(field));
                        if (!hasAllFields) {
                            this.$refs.uToast.show({
                                title: "内箱码不完整,请重新扫描",
                                type: "error"
                            });
                            this.pkmaterSn = "";
                            return;
                        }
                        // æ ¡éªŒPO字段存在性
                        if (matSn.indexOf("PO") <= 0) {
                            this.$refs.uToast.show({
                                title: "内箱码格式错误(无PO标识)",
                                type: "error"
                            });
                            this.pkmaterSn = "";
                            return;
                        }
                        // è§£æžå†…箱码(直接使用返回的quantity作为Q值)
                        this.$u.post('/api/MaterielInfo/CodeAnalysis?serNum=' + matSn, {}).then((res) => {
                            if (res.status) {
                                this.pksns.push(res.data.serialNumber);
                                this.pkmatInfos.push(res.data);
                            } else {
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                });
                            }
                        });
                        this.pkmaterSn = "";
                    }, 100);
                })
            },
            inbound() {
                if (this.inboundBarcode == "") {
                    this.$refs.uToast.show({
                        title: "请扫描托盘条码",
                        type: "error"
                    })
                    return;
                }
                if (this.address == "") {
                    this.$refs.uToast.show({
                        title: "请扫描地址条码",
                        type: "error"
                    })
                    return;
                }
                var postData = {
                    MainData: {
                        "barcode": this.inboundBarcode,
                        "startPoint": this.address,
                        "warehouseId": this.warehouseId
                    }
                }
                this.$u.post('/api/Task/RequestInboundTask', postData).then(res => {
                    if (res.status) {
                        this.inboundBarcode = "";
                        if (this.warehouseId != 5) this.address = "";
                        setTimeout(() => {
                            this.addressFocus = false;
                            this.$refs.uToast.show({
                                title: "成功",
                                type: "success"
                            })
                        }, 200);
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    this.$refs.uToast.show({
                        title: err.message,
                        type: "error"
                    })
                })
            },
            inputChangebarcode() {
                this.addressFocus = false;
                this.$nextTick(function(x) {
                    if (this.inboundBarcode != '') {
                        this.addressFocus = true;
                    }
                })
            },
            deleteList(res) {
                this.matInfos.splice(res, 1);
                this.sns.splice(res, 1);
            },
            pkdeleteList(res) {
                this.pkmatInfos.splice(res, 1);
                this.pksns.splice(res, 1);
            },
            reset() {
                this.barcode = "";
                this.matInfos = [];
                this.sns = [];
                this.materSn = "";
                if (this.warehouseId != 6) {
                    this.Initiallife = 0;
                }
            },
            resetInPk() {
                this.pkmaterSn = "";
                this.pkfocus = false;
                this.pkmatInfos = [];
                this.pksns = [];
            },
            pksubmit() {
                if (this.pkmatInfos.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: 'error'
                    })
                    return;
                }
                // ç›´æŽ¥ä½¿ç”¨ä¿®æ”¹åŽçš„quantity(对应Q值)提交
                const submitData = this.pkmatInfos.map(item => ({
                    serialNumber: item.serialNumber,
                    quantity: item.quantity
                }));
                this.$u.post('/api/InboundOrder/InPinKu?warehouseId=' + this.warehouseId + "&orderNo=" + this.orderNo, submitData)
                    .then(res => {
                        if (res.status) {
                            this.$refs.uToast.show({
                                title: "入库成功",
                                type: "success"
                            })
                            this.pkfocus = false;
                            this.pkmatInfos = [];
                            this.pksns = [];
                        } else {
                            this.$refs.uToast.show({
                                title: res.message,
                                type: "error"
                            })
                        }
                    })
            },
            submit() {
                if (this.barcode == "") {
                    this.$refs.uToast.show({
                        title: "请扫描托盘条码",
                        type: 'error'
                    })
                    return;
                }
                if (this.matInfos.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: 'error'
                    })
                    return;
                }
                if (this.Test) {
                    if (!this.Testcheck) {
                        this.Testcheck = true;
                        if (this.warehouseId == 2) {
                            this.$refs.uToast.show({
                                title: "请确认数量",
                                type: 'error'
                            })
                        }
                        return;
                    }
                }
                // ç›´æŽ¥ä½¿ç”¨ä¿®æ”¹åŽçš„quantity(对应Q值)提交
                let submitSns = this.matInfos.map(item => ({
                    serialNumber: item.serialNumber,
                    quantity: item.quantity
                }));
                // æ²¹å¢¨ä»“库特殊处理
                if (this.warehouseId == 2) {
                    const firstItem = submitSns[0];
                    for (var i = 0; i < this.Initiallife - 1; i++) {
                        submitSns.push({...firstItem});
                    }
                }
                this.$u.post('/api/InboundOrder/MaterielGroup', {
                    MainData: {
                        "palletCode": this.barcode,
                        "orderNo": this.orderNo,
                        "initiallife": this.Initiallife,
                        "warehouseId": this.warehouseId
                    },
                    DelKeys: submitSns
                }).then(res => {
                    this.Testcheck = false;
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "组盘成功",
                            type: "success"
                        })
                        this.focus = false;
                        this.barcode = "";
                        this.matInfos = [];
                        this.sns = [];
                        this.matTotal = [];
                        if (this.warehouseId != 6) {
                            this.Initiallife = "";
                        }
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    .content {
        display: flex;
        height: 150px;
    }
    .content-text {
        font-size: 14px;
        color: #666;
    }
    .itemstyle {
        margin-top: 30px;
        margin-left: 5%;
    }
    .headerstyle {
        width: 90%;
    }
</style>