1
hutongqing
2024-12-16 ab205a55b008fe73696073b2a141e618b13fb271
1
已删除4个文件
已修改53个文件
已添加7个文件
758 ■■■■■ 文件已修改
代码管理/WMS/WIDESEA_WMSClient/src/extension/inbound/purchaseOrder.js 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/StockSelect.vue 97 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/router/viewGird.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/inbound/purchaseOrder.vue 327 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/341739e1-48c0-452c-a5ea-3c213effa27e.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/4cc8f357-fc0c-4940-a3b6-b8853a50c180.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/5b6089c5-1619-43fe-9608-d5b598449936.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/719780bf-fe87-4572-8100-bc81ec4f7f74.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/7f936e8e-287c-47e4-a8cd-003d0971fc1d.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/a8d0b8fd-acc9-4a57-a8ad-394a2d0e11e0.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/c1efb1e4-a109-49ce-9975-1c6c4061c161.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/ea02e79b-60fd-46cb-830c-ee3a3c992700.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/BasicRepository.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/LocationInfoRepository.cs 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/MaterielInfoRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/SupplierInfoRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/WarehouseRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_CheckRepository/CheckOrderRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_CheckRepository/CheckOrderResultRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceBase.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/ILocationInfoRepository.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IMaterielInfoRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/ISupplierInfoRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IWarehouseRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ICheckRepository/ICheckOrderRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ICheckRepository/ICheckOrderResultRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IInboundOrderDetailRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IInboundOrderDetail_HtyRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IInboundOrderRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IInboundOrder_HtyRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IPurchaseOrderDetailRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IPurchaseOrderRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IReceiveOrderDetailRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IReceiveOrderRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutStockLockInfoRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutboundOrderDetailRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutboundOrderDetail_HtyRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutboundOrderRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutboundOrder_HtyRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IStockRepository/IStockInfoRepository.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoService.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/InboundOrderDetailRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/InboundOrderDetail_HtyRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/InboundOrderRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/InboundOrder_HtyRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/PurchaseOrderDetailRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/PurchaseOrderRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/ReceiveOrderDetailRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/ReceiveOrderRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutStockLockInfoRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutboundOrderDetailRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutboundOrderDetail_HtyRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutboundOrderRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutboundOrder_HtyRepository.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetailService.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/StockInfoRepository.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/WIDESEA_StockService.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/PurchaseOrderController.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/extension/inbound/purchaseOrder.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
//此js文件是用来自定义扩展业务代码,可以扩展一些自定义页面或者重新配置生成的代码
let extension = {
    components: {
      //查询界面扩展组件
      gridHeader: '',
      gridBody: '',
      gridFooter: '',
      //新建、编辑弹出框扩展组件
      modelHeader: '',
      modelBody: '',
      modelFooter: ''
    },
    tableAction: '', //指定某张表的权限(这里填写表名,默认不用填写)
    buttons: { view: [], box: [], detail: [] }, //扩展的按钮
    methods: {
       //下面这些方法可以保留也可以删除
      onInit() {
      },
      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/extend/StockSelect.vue
@@ -1,6 +1,12 @@
<template>
  <div>
    <vol-box v-model="showDetialBox" :lazy="true" width="60%" :padding="15" title="指定库存">
    <vol-box
      v-model="showDetialBox"
      :lazy="true"
      width="60%"
      :padding="15"
      title="指定库存"
    >
      <div class="box-head">
        <el-alert :closable="false" style="width: 100%">
          <el-row>
@@ -9,41 +15,87 @@
              <el-divider direction="vertical"></el-divider>
              <span class="less-style">物料编号: {{ row.materielCode }} </span>
              <el-divider direction="vertical"></el-divider>
              <span class="less-style">需求数量: {{ row.orderQuantity }}
              <span class="less-style"
                >需求数量: {{ row.orderQuantity }}
              </span>
              <el-divider direction="vertical"></el-divider>
              <span :class="selectionClass">已选数量: {{ selectionSum }}
              <span :class="selectionClass"
                >已选数量: {{ selectionSum }}
              </span>
            </el-col>
            <el-col :span="2">
              <el-link type="primary" size="small" style="float: right; height: 20px"
                @click="getData">刷新</el-link></el-col>
              <el-link
                type="primary"
                size="small"
                style="float: right; height: 20px"
                @click="getData"
                >刷新</el-link
              ></el-col
            >
            <el-col :span="2">
              <el-link type="primary" size="small" style="float: right; height: 20px"
                @click="revokeAssign">撤销分配</el-link></el-col>
              <el-link
                type="primary"
                size="small"
                style="float: right; height: 20px"
                @click="revokeAssign"
                >撤销分配</el-link
              ></el-col
            >
          </el-row>
        </el-alert>
      </div>
      <div class="box-table" style="margin-top: 1%">
        <el-table ref="singleTable" :data="tableData" style="width: 100%; height: 100%" highlight-current-row
          @row-click="handleRowClick" height="500px" @selection-change="handleSelectionChange">
        <el-table
          ref="singleTable"
          :data="tableData"
          style="width: 100%; height: 100%"
          highlight-current-row
          @row-click="handleRowClick"
          height="500px"
          @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">
          <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" v-if="item.type == 'icon'">
              <el-tooltip class="item" effect="dark" :content="item.title" placement="bottom"><el-button type="text"
                  @click="tableButtonClick(scoped.row, item)"><i :class="item.icon"
                    style="font-size: 22px"></i></el-button></el-tooltip>
              <el-tooltip
                class="item"
                effect="dark"
                :content="item.title"
                placement="bottom"
                ><el-button
                  type="text"
                  @click="tableButtonClick(scoped.row, item)"
                  ><i :class="item.icon" style="font-size: 22px"></i></el-button
              ></el-tooltip>
            </template>
          </el-table-column>
        </el-table>
      </div>
      <template #footer>
        <el-button type="primary" size="small" @click="outbound">直接出库</el-button>
        <el-button type="primary" size="small" @click="lockStock">锁定库存</el-button>
        <el-button type="danger" size="small" @click="showDetialBox = false">关闭</el-button>
        <el-button type="primary" size="small" @click="outbound"
          >直接出库</el-button
        >
        <el-button type="primary" size="small" @click="lockStock"
          >锁定库存</el-button
        >
        <el-button type="danger" size="small" @click="showDetialBox = false"
          >关闭</el-button
        >
      </template>
    </vol-box>
  </div>
@@ -96,6 +148,7 @@
  },
  methods: {
    open(row) {
      console.log(row);
      this.row = row;
      this.showDetialBox = true;
      this.originalQuantity = this.row.lockQuantity;
@@ -145,7 +198,9 @@
      this.http
        .post(
          "api/StockInfo/GetStockSelectViews?materielCode=" +
          this.row.materielCode,
            this.row.materielCode +
            "&orderId=" +
            this.row.orderId,
          null,
          "查询中"
        )
@@ -227,12 +282,12 @@
  background: oldlace;
}
.box-table .el-table tbody tr:hover>td {
.box-table .el-table tbody tr:hover > td {
  background-color: #d8e0d4 !important;
  /* color: #ffffff; */
}
.box-table .el-table tbody tr.current-row>td {
.box-table .el-table tbody tr.current-row > td {
  background-color: #f0f9eb !important;
  /* color: #ffffff; */
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/router/viewGird.js
@@ -117,6 +117,10 @@
    path: '/receiveOrder',
    name: 'receiveOrder',
    component: () => import('@/views/inbound/receiveOrder.vue')
  },{
    path: '/purchaseOrder',
    name: 'purchaseOrder',
    component: () => import('@/views/inbound/purchaseOrder.vue')
  }]
export default viewgird
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue
@@ -28,7 +28,7 @@
    });
    const editFormFields = ref({
      orderType: "",
      orderNo:"",
      inboundOrderNo: "",
      upperOrderNo: "",
      remark: "",
    });
@@ -43,10 +43,10 @@
          data: [],
        },
        {
        field: "orderNo",
        title: "单据编号",
        type: "string",
      },
          field: "inboundOrderNo",
          title: "单据编号",
          type: "string",
        },
        {
          title: "上游单据编号",
          field: "upperOrderNo",
@@ -60,7 +60,7 @@
      ],
    ]);
    const searchFormFields = ref({
      orderNo: "",
      inboundOrderNo: "",
      upperOrderNo: "",
      orderType: "",
      orderStatus: "",
@@ -70,7 +70,7 @@
    });
    const searchFormOptions = ref([
      [
        { title: "单据编号", field: "orderNo", type: "like" },
        { title: "单据编号", field: "inboundOrderNo", type: "like" },
        { title: "上游单据编号", field: "upperOrderNo", type: "like" },
        {
          title: "单据类型",
@@ -111,7 +111,7 @@
        align: "left",
      },
      {
        field: "orderNo",
        field: "inboundOrderNo",
        title: "单据编号",
        type: "string",
        width: 120,
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/inbound/purchaseOrder.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,327 @@
<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/inbound/purchaseOrder.js";
import { ref, defineComponent } from "vue";
export default defineComponent({
  setup() {
    const table = ref({
      key: "id",
      footer: "Foots",
      cnName: "入库单",
      name: "purchaseOrder",
      url: "/PurchaseOrder/",
      sortName: "CreateDate",
    });
    const editFormFields = ref({
      // orderType: "",
      // inboundOrderNo: "",
      // upperOrderNo: "",
      // remark: "",
    });
    const editFormOptions = ref([
      // [
      //   {
      //     title: "单据类型",
      //     required: true,
      //     field: "orderType",
      //     type: "select",
      //     dataKey: "inOrderType",
      //     data: [],
      //   },
      //   {
      //     field: "inboundOrderNo",
      //     title: "单据编号",
      //     type: "string",
      //   },
      //   {
      //     title: "上游单据编号",
      //     field: "upperOrderNo",
      //     type: "string",
      //   },
      //   {
      //     title: "备注",
      //     field: "remark",
      //     type: "textarea",
      //   },
      // ],
    ]);
    const searchFormFields = ref({
      inboundOrderNo: "",
      upperOrderNo: "",
      orderType: "",
      orderStatus: "",
      createType: "",
      creater: "",
      createDate: "",
    });
    const searchFormOptions = ref([
      [
        { title: "单据编号", field: "inboundOrderNo", type: "like" },
        { title: "上游单据编号", field: "upperOrderNo", type: "like" },
        {
          title: "单据类型",
          field: "orderType",
          type: "select",
          dataKey: "inOrderType",
          data: [],
        },
        {
          title: "单据状态",
          field: "orderStatus",
          type: "select",
          dataKey: "inboundState",
          data: [],
        },
      ],
      [
        {
          title: "创建方式",
          field: "createType",
          type: "select",
          dataKey: "createType",
          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,
        require: true,
        align: "left",
      },
      {
        field: "purchaseOrderNo",
        title: "采购单号",
        type: "string",
        width: 120,
        align: "left",
        link: true,
      },
      {
        field: "purchaseOrderType",
        title: "单据类型",
        type: "string",
        width: 150,
        align: "left",
      },
      {
        field: "supplierCode",
        title: "供应商编号",
        type: "string",
        width: 150,
        align: "left",
      },
      {
        field: "orderQuantity",
        title: "采购数量",
        type: "decimal",
        width: 90,
        align: "left",
      },
      {
        field: "purchaseOrderStatus",
        title: "采购单状态",
        type: "string",
        width: 90,
        align: "left",
      },
      {
        field: "orderDate",
        title: "下单日期",
        type: "string",
        width: 90,
        align: "left",
      },
      {
        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: "InboundOrderDetail",
      columns: [
        {
          field: "id",
          title: "Id",
          type: "int",
          width: 90,
          hidden: true,
          readonly: true,
          require: true,
          align: "left",
        },
        {
          field: "purchaseOrderId",
          title: "采购单主键",
          type: "string",
          width: 90,
          align: "left",
          hidden: true,
        },
        {
          field: "rowNo",
          title: "行号",
          type: "string",
          width: 150,
          align: "left",
        },
        {
          field: "materielCode",
          title: "物料编号",
          type: "select",
          width: 150,
          align: "left",
          edit: { type: "" },
          required: true,
        },
        {
          field: "materielName",
          title: "物料名称",
          type: "string",
          width: 150,
          align: "left",
          edit: { type: "" },
        },
        // {
        //   field: "batchNo",
        //   title: "批次号",
        //   type: "decimal",
        //   width: 90,
        //   align: "left",
        //   edit: { type: "" },
        //   required: true,
        // },
        {
          field: "purchaseDetailQuantity",
          title: "单据数量",
          type: "decimal",
          width: 90,
          align: "left",
        },
        {
          field: "unit",
          title: "单位",
          type: "string",
          width: 120,
          align: "left",
        },
        {
          field: "warehouseId",
          title: "仓库编号",
          type: "string",
          width: 200,
          align: "left",
        },
        {
          field: "purchaseDetailStatus",
          title: "订单明细状态",
          type: "string",
          width: 180,
          align: "left",
        },
        {
          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_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/341739e1-48c0-452c-a5ea-3c213effa27e.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/4cc8f357-fc0c-4940-a3b6-b8853a50c180.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/5b6089c5-1619-43fe-9608-d5b598449936.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/719780bf-fe87-4572-8100-bc81ec4f7f74.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/7f936e8e-287c-47e4-a8cd-003d0971fc1d.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/a8d0b8fd-acc9-4a57-a8ad-394a2d0e11e0.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/c1efb1e4-a109-49ce-9975-1c6c4061c161.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/ea02e79b-60fd-46cb-830c-ee3a3c992700.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/BasicRepository.cs
@@ -10,20 +10,26 @@
{
    public class BasicRepository : IBasicRepository
    {
        /// <summary>
        /// è´§ä½ä»“储层
        /// </summary>
        public ILocationInfoRepository LocationInfoRepository { get; }
        /// <summary>
        /// ç‰©æ–™ä»“储层
        /// </summary>
        public IMaterielInfoRepository MaterielInfoRepository { get; }
        /// <summary>
        /// ä»“库仓储层
        /// </summary>
        public IWarehouseRepository WarehouseRepository { get; }
        public IStockInfoDetailRepository StockInfoDetailServiceRepository { get; }
        public BasicRepository(ILocationInfoRepository locationInfoRepository, IMaterielInfoRepository materielInfoRepository, IWarehouseRepository warehouseRepository, IStockInfoDetailRepository stockInfoDetailServiceRepository)
        public BasicRepository(ILocationInfoRepository locationInfoRepository, IMaterielInfoRepository materielInfoRepository, IWarehouseRepository warehouseRepository)
        {
            LocationInfoRepository = locationInfoRepository;
            MaterielInfoRepository = materielInfoRepository;
            WarehouseRepository = warehouseRepository;
            StockInfoDetailServiceRepository = stockInfoDetailServiceRepository;
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/LocationInfoRepository.cs
@@ -14,6 +14,9 @@
namespace WIDESEA_BasicRepository
{
    /// <summary>
    /// è´§ä½ä»“储实现层
    /// </summary>
    public class LocationInfoRepository : RepositoryBase<Dt_LocationInfo>, ILocationInfoRepository
    {
        public LocationInfoRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
@@ -21,11 +24,23 @@
        }
        /// <summary>
        /// èŽ·å–åˆ†ç»„æ‰€æœ‰è´§ä½
        /// </summary>
        /// <param name="roadway"></param>
        /// <returns></returns>
        public List<LocationGroupDTO> GetAllLocationGroups(string roadway)
        {
            return QueryTabs<Dt_LocationInfo, Dt_LocationInfo, LocationGroupDTO>((a, b) => a.Column == b.Column && a.Layer == b.Layer && a.Row != b.Row && SqlFunc.Abs(a.Row - b.Row) == 1, (a, b) => new LocationGroupDTO { DepthA = a.Depth, DepthB = b.Depth, EnableStatusA = a.EnableStatus, EnableStatusB = b.EnableStatus, IdA = a.Id, IdB = b.Id, LocationCodeA = a.LocationCode, LocationCodeB = b.LocationCode, LocationStatusA = a.LocationStatus, LocationStatusB = b.LocationStatus, LocationTypeA = a.LocationType, LocationTypeB = b.LocationType }, a => a.Depth == 1 && a.RoadwayNo == roadway, b => b.Depth == 2 && b.RoadwayNo == roadway, x => true);
        }
        /// <summary>
        /// æ ¹æ®çŠ¶æ€èŽ·å–åˆ†ç»„è´§ä½
        /// </summary>
        /// <param name="roadway"></param>
        /// <param name="locationAStatus"></param>
        /// <param name="locationBStatus"></param>
        /// <returns></returns>
        public List<LocationGroupDTO> GetLocationGroups(string roadway, LocationStatusEnum locationAStatus, LocationStatusEnum locationBStatus)
        {
            return QueryTabs<Dt_LocationInfo, Dt_LocationInfo, LocationGroupDTO>(
@@ -36,16 +51,21 @@
                x => true);
        }
        public override bool UpdateData(Dt_LocationInfo entity)
        {
            return base.UpdateData(entity);
        }
        /// <summary>
        /// æ ¹æ®è´§ä½ç¼–号集合获取货位信息
        /// </summary>
        /// <param name="locationCodes"></param>
        /// <returns></returns>
        public List<Dt_LocationInfo> GetLocationInfos(List<string> locationCodes)
        {
            return QueryData(x => locationCodes.Contains(x.LocationCode));
        }
        /// <summary>
        /// æ‰¹é‡ä¿®æ”¹è´§ä½çŠ¶æ€
        /// </summary>
        /// <param name="locationInfos"></param>
        /// <param name="locationStatus"></param>
        public void UpdateLocationStatus(List<Dt_LocationInfo> locationInfos, LocationStatusEnum locationStatus)
        {
            locationInfos.ForEach(x =>
@@ -55,6 +75,11 @@
            UpdateData(locationInfos);
        }
        /// <summary>
        /// èŽ·å–å¯å‡ºåº“è´§ä½ç¼–å·
        /// </summary>
        /// <param name="warehouseId"></param>
        /// <returns></returns>
        public List<string> GetCanOutLocationCodes(int warehouseId)
        {
            return QueryData(x => x.LocationCode, x => x.WarehouseId == warehouseId && x.LocationStatus == LocationStatusEnum.InStock.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt())).Distinct().ToList();
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/MaterielInfoRepository.cs
@@ -9,6 +9,9 @@
namespace WIDESEA_BasicRepository
{
    /// <summary>
    /// ç‰©æ–™ä¿¡æ¯ä»“储实现层
    /// </summary>
    public class MaterielInfoRepository : RepositoryBase<Dt_MaterielInfo>, IMaterielInfoRepository
    {
        public MaterielInfoRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/SupplierInfoRepository.cs
@@ -9,6 +9,9 @@
namespace WIDESEA_BasicRepository
{
    /// <summary>
    /// ä¾›åº”商信息仓储实现层
    /// </summary>
    public class SupplierInfoRepository : RepositoryBase<Dt_SupplierInfo>, ISupplierInfoRepository
    {
        public SupplierInfoRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/WarehouseRepository.cs
@@ -12,6 +12,9 @@
namespace WIDESEA_BasicRepository
{
    /// <summary>
    /// ä»“库信息实现层
    /// </summary>
    public class WarehouseRepository : RepositoryBase<Dt_Warehouse>, IWarehouseRepository
    {
        public WarehouseRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_CheckRepository/CheckOrderRepository.cs
@@ -9,6 +9,9 @@
namespace WIDESEA_CheckRepository
{
    /// <summary>
    /// è´¨æ£€å•仓储实现层
    /// </summary>
    public class CheckOrderRepository : RepositoryBase<Dt_CheckOrder>, ICheckOrderRepository
    {
        public CheckOrderRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_CheckRepository/CheckOrderResultRepository.cs
@@ -9,6 +9,9 @@
namespace WIDESEA_CheckRepository
{
    /// <summary>
    /// è´¨æ£€ç»“果仓储实现层
    /// </summary>
    public class CheckOrderResultRepository : RepositoryBase<Dt_CheckOrderResult>, ICheckOrderResultRepository
    {
        public CheckOrderResultRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceBase.cs
@@ -207,7 +207,7 @@
                }
                else
                {
                    return "";
                    return "1 = 1";
                }
                //UserRole? userRole = PermissionDataHostService.UserRoles.FirstOrDefault(x => x.UserId == App.User.UserId);
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/ILocationInfoRepository.cs
@@ -11,6 +11,9 @@
namespace WIDESEA_IBasicRepository
{
    /// <summary>
    /// è´§ä½ä¿¡æ¯ä»“储接口层
    /// </summary>
    public interface ILocationInfoRepository : IRepository<Dt_LocationInfo>
    {
        /// <summary>
@@ -43,6 +46,11 @@
        /// <param name="locationStatus">货位状态</param>
        void UpdateLocationStatus(List<Dt_LocationInfo> locationInfos, LocationStatusEnum locationStatus);
        /// <summary>
        /// èŽ·å–å¯å‡ºåº“è´§ä½ç¼–å·
        /// </summary>
        /// <param name="warehouseId"></param>
        /// <returns></returns>
        List<string> GetCanOutLocationCodes(int warehouseId);
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IMaterielInfoRepository.cs
@@ -8,6 +8,9 @@
namespace WIDESEA_IBasicRepository
{
    /// <summary>
    /// ç‰©æ–™ä¿¡æ¯ä»“储接口层
    /// </summary>
    public interface IMaterielInfoRepository : IRepository<Dt_MaterielInfo>
    {
    }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/ISupplierInfoRepository.cs
@@ -8,6 +8,9 @@
namespace WIDESEA_IBasicRepository
{
    /// <summary>
    /// ä¾›åº”商信息仓储接口层
    /// </summary>
    public interface ISupplierInfoRepository : IRepository<Dt_SupplierInfo>
    {
    }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IWarehouseRepository.cs
@@ -8,6 +8,9 @@
namespace WIDESEA_IBasicRepository
{
    /// <summary>
    /// ä»“库信息仓储接口层
    /// </summary>
    public interface IWarehouseRepository : IRepository<Dt_Warehouse>
    {
        /// <summary>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_ICheckRepository/ICheckOrderRepository.cs
@@ -8,6 +8,9 @@
namespace WIDESEA_ICheckRepository
{
    /// <summary>
    /// è´¨æ£€å•仓储接口层
    /// </summary>
    public interface ICheckOrderRepository : IRepository<Dt_CheckOrder>
    {
    }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_ICheckRepository/ICheckOrderResultRepository.cs
@@ -8,6 +8,9 @@
namespace WIDESEA_ICheckRepository
{
    /// <summary>
    /// è´¨æ£€ç»“果仓储接口层
    /// </summary>
    public interface ICheckOrderResultRepository : IRepository<Dt_CheckOrderResult>
    {
    }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IInboundOrderDetailRepository.cs
@@ -8,6 +8,9 @@
namespace WIDESEA_IInboundRepository
{
    /// <summary>
    /// å…¥åº“单明细仓储接口层
    /// </summary>
    public interface IInboundOrderDetailRepository : IRepository<Dt_InboundOrderDetail>
    {
    }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IInboundOrderDetail_HtyRepository.cs
@@ -8,6 +8,9 @@
namespace WIDESEA_IInboundRepository
{
    /// <summary>
    /// å…¥åº“单明细历史仓储接口层
    /// </summary>
    public interface IInboundOrderDetail_HtyRepository : IRepository<Dt_InboundOrderDetail_Hty>
    {
    }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IInboundOrderRepository.cs
@@ -8,6 +8,9 @@
namespace WIDESEA_IInboundRepository
{
    /// <summary>
    /// å…¥åº“单仓储接口层
    /// </summary>
    public interface IInboundOrderRepository : IRepository<Dt_InboundOrder>
    {
    }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IInboundOrder_HtyRepository.cs
@@ -8,6 +8,9 @@
namespace WIDESEA_IInboundRepository
{
    /// <summary>
    /// å…¥åº“单历史仓储接口层
    /// </summary>
    public interface IInboundOrder_HtyRepository : IRepository<Dt_InboundOrder_Hty>
    {
    }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IPurchaseOrderDetailRepository.cs
@@ -8,6 +8,9 @@
namespace WIDESEA_IInboundRepository
{
    /// <summary>
    /// é‡‡è´­å•明细仓储接口层
    /// </summary>
    public interface IPurchaseOrderDetailRepository : IRepository<Dt_PurchaseOrderDetail>
    {
    }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IPurchaseOrderRepository.cs
@@ -8,6 +8,9 @@
namespace WIDESEA_IInboundRepository
{
    /// <summary>
    /// é‡‡è´­å•仓储接口层
    /// </summary>
    public interface IPurchaseOrderRepository : IRepository<Dt_PurchaseOrder>
    {
    }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IReceiveOrderDetailRepository.cs
@@ -8,6 +8,9 @@
namespace WIDESEA_IInboundRepository
{
    /// <summary>
    /// æ”¶è´§å•明细仓储接口层
    /// </summary>
    public interface IReceiveOrderDetailRepository : IRepository<Dt_ReceiveOrderDetail>
    {
    }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IReceiveOrderRepository.cs
@@ -8,6 +8,9 @@
namespace WIDESEA_IInboundRepository
{
    /// <summary>
    /// æ”¶è´§å•仓储接口层
    /// </summary>
    public interface IReceiveOrderRepository : IRepository<Dt_ReceiveOrder>
    {
    }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutStockLockInfoRepository.cs
@@ -8,6 +8,9 @@
namespace WIDESEA_IOutboundRepository
{
    /// <summary>
    /// å‡ºåº“详情信息仓储接口层
    /// </summary>
    public interface IOutStockLockInfoRepository : IRepository<Dt_OutStockLockInfo>
    {
    }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutboundOrderDetailRepository.cs
@@ -8,6 +8,9 @@
namespace WIDESEA_IOutboundRepository
{
    /// <summary>
    /// å…¥åº“单明细仓储接口层
    /// </summary>
    public interface IOutboundOrderDetailRepository : IRepository<Dt_OutboundOrderDetail>
    {
    }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutboundOrderDetail_HtyRepository.cs
@@ -8,6 +8,9 @@
namespace WIDESEA_IOutboundRepository
{
    /// <summary>
    /// å‡ºåº“单明细历史仓储接口层
    /// </summary>
    public interface IOutboundOrderDetail_HtyRepository : IRepository<Dt_OutboundOrderDetail_Hty>
    {
    }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutboundOrderRepository.cs
@@ -8,6 +8,9 @@
namespace WIDESEA_IOutboundRepository
{
    /// <summary>
    /// å…¥åº“单仓储接口层
    /// </summary>
    public interface IOutboundOrderRepository : IRepository<Dt_OutboundOrder>
    {
    }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutboundOrder_HtyRepository.cs
@@ -8,6 +8,9 @@
namespace WIDESEA_IOutboundRepository
{
    /// <summary>
    /// å‡ºåº“单历史仓储接口层
    /// </summary>
    public interface IOutboundOrder_HtyRepository : IRepository<Dt_OutboundOrder_Hty>
    {
    }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IStockRepository/IStockInfoRepository.cs
@@ -17,7 +17,7 @@
        List<Dt_StockInfo> GetStockInfos(string materielCode);
        List<Dt_StockInfo> GetStockInfos(string materielCode, List<string> locationCodes);
        List<Dt_StockInfo> GetStockInfos(string materielCode, string lotNo, List<string> locationCodes);
        List<Dt_StockInfo> GetStockInfosByIds(List<int> ids);
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoService.cs
@@ -14,8 +14,10 @@
    {
        IStockInfoRepository Repository { get; }
        List<StockSelectViewDTO> GetStockSelectViews(int orderId, string materielCode);
        List<Dt_StockInfo> GetOutboundStocks(List<Dt_StockInfo> stockInfos, string materielCode, float needQuantity, out float residueQuantity);
        List<Dt_StockInfo> GetUseableStocks(string materielCode, int warehoseId);
        List<Dt_StockInfo> GetUseableStocks(string materielCode, string batchNo, int warehoseId);
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/InboundOrderDetailRepository.cs
@@ -9,6 +9,9 @@
namespace WIDESEA_InboundRepository
{
    /// <summary>
    /// å…¥åº“单明细仓储实现层
    /// </summary>
    public class InboundOrderDetailRepository : RepositoryBase<Dt_InboundOrderDetail>, IInboundOrderDetailRepository
    {
        public InboundOrderDetailRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/InboundOrderDetail_HtyRepository.cs
@@ -9,6 +9,9 @@
namespace WIDESEA_InboundRepository
{
    /// <summary>
    /// å…¥åº“单明细历史仓储实现层
    /// </summary>
    public class InboundOrderDetail_HtyRepository : RepositoryBase<Dt_InboundOrderDetail_Hty>, IInboundOrderDetail_HtyRepository
    {
        public InboundOrderDetail_HtyRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/InboundOrderRepository.cs
@@ -9,6 +9,9 @@
namespace WIDESEA_InboundRepository
{
    /// <summary>
    /// å…¥åº“单仓储实现层
    /// </summary>
    public class InboundOrderRepository : RepositoryBase<Dt_InboundOrder>, IInboundOrderRepository
    {
        private readonly IUnitOfWorkManage _unitOfWorkManage;
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/InboundOrder_HtyRepository.cs
@@ -9,6 +9,9 @@
namespace WIDESEA_InboundRepository
{
    /// <summary>
    /// å…¥åº“单历史仓储实现层
    /// </summary>
    public class InboundOrder_HtyRepository : RepositoryBase<Dt_InboundOrder_Hty>, IInboundOrder_HtyRepository
    {
        private readonly IUnitOfWorkManage _unitOfWorkManage;
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/PurchaseOrderDetailRepository.cs
@@ -9,6 +9,9 @@
namespace WIDESEA_InboundRepository
{
    /// <summary>
    /// é‡‡è´­å•明细仓储实现层
    /// </summary>
    public class PurchaseOrderDetailRepository : RepositoryBase<Dt_PurchaseOrderDetail>, IPurchaseOrderDetailRepository
    {
        public PurchaseOrderDetailRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/PurchaseOrderRepository.cs
@@ -9,6 +9,9 @@
namespace WIDESEA_InboundRepository
{
    /// <summary>
    /// é‡‡è´­å•仓储实现层
    /// </summary>
    public class PurchaseOrderRepository : RepositoryBase<Dt_PurchaseOrder>, IPurchaseOrderRepository
    {
        public PurchaseOrderRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/ReceiveOrderDetailRepository.cs
@@ -9,6 +9,9 @@
namespace WIDESEA_InboundRepository
{
    /// <summary>
    /// æ”¶è´§å•明细仓储实现层
    /// </summary>
    public class ReceiveOrderDetailRepository : RepositoryBase<Dt_ReceiveOrderDetail>, IReceiveOrderDetailRepository
    {
        public ReceiveOrderDetailRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/ReceiveOrderRepository.cs
@@ -9,6 +9,9 @@
namespace WIDESEA_InboundRepository
{
    /// <summary>
    /// æ”¶è´§å•仓储实现层
    /// </summary>
    public class ReceiveOrderRepository : RepositoryBase<Dt_ReceiveOrder>, IReceiveOrderRepository
    {
        public ReceiveOrderRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs
@@ -125,7 +125,8 @@
                        OverInQuantity = 0,
                        ReceiptQuantity = 0,
                        RowNo = item.RowNo,
                        Unit = item.Unit
                        Unit = item.Unit,
                        BatchNo = item.LotNo
                    };
                    inboundOrder.Details.Add(detail);
                }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail.cs
@@ -20,6 +20,9 @@
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "物料编号")]
        public string MaterielCode { get; set; }
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "批次号")]
        public string BatchNo { get; set; }
        [SugarColumn(IsNullable = false, ColumnDescription = "单据数量")]
        public float OrderQuantity { get; set; }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutStockLockInfoRepository.cs
@@ -8,6 +8,9 @@
namespace WIDESEA_IOutboundRepository
{
    /// <summary>
    /// å‡ºåº“详情信息仓储实现层
    /// </summary>
    public class OutStockLockInfoRepository : RepositoryBase<Dt_OutStockLockInfo>, IOutStockLockInfoRepository
    {
        public OutStockLockInfoRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutboundOrderDetailRepository.cs
@@ -9,6 +9,9 @@
namespace WIDESEA_OutboundRepository
{
    /// <summary>
    /// å‡ºåº“单明细仓储实现层
    /// </summary>
    public class OutboundOrderDetailRepository : RepositoryBase<Dt_OutboundOrderDetail>, IOutboundOrderDetailRepository
    {
        public OutboundOrderDetailRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutboundOrderDetail_HtyRepository.cs
@@ -9,6 +9,9 @@
namespace WIDESEA_OutboundRepository
{
    /// <summary>
    /// å‡ºåº“单明细历史仓储实现层
    /// </summary>
    public class OutboundOrderDetail_HtyRepository : RepositoryBase<Dt_OutboundOrderDetail_Hty>, IOutboundOrderDetail_HtyRepository
    {
        public OutboundOrderDetail_HtyRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutboundOrderRepository.cs
@@ -9,6 +9,9 @@
namespace WIDESEA_OutboundRepository
{
    /// <summary>
    /// å‡ºåº“单仓储实现层
    /// </summary>
    public class OutboundOrderRepository : RepositoryBase<Dt_OutboundOrder>, IOutboundOrderRepository
    {
        public OutboundOrderRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutboundOrder_HtyRepository.cs
@@ -9,6 +9,9 @@
namespace WIDESEA_OutboundRepository
{
    /// <summary>
    /// å‡ºåº“单历史仓储实现层
    /// </summary>
    public class OutboundOrder_HtyRepository : RepositoryBase<Dt_OutboundOrder_Hty>, IOutboundOrder_HtyRepository
    {
        public OutboundOrder_HtyRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetailService.cs
@@ -59,7 +59,7 @@
            List<Dt_StockInfo> outStock = new List<Dt_StockInfo>();
            List<Dt_StockInfo> stockInfos = _stockService.StockInfoService.GetUseableStocks(outboundOrderDetail.MaterielCode, outboundOrder.WarehouseId);
            List<Dt_StockInfo> stockInfos = _stockService.StockInfoService.GetUseableStocks(outboundOrderDetail.MaterielCode, outboundOrderDetail.BatchNo, outboundOrder.WarehouseId);
            float stockTotalQuantity = stockInfos.Select(x => x.Details.Sum(v => v.StockQuantity - v.OutboundQuantity)).Sum(x => x);
            if (stockTotalQuantity >= needQuantity)//库存够
            {
@@ -181,7 +181,7 @@
            needQuantity -= assignQuantity;
            if (outboundOrderDetail.OrderQuantity > outboundOrderDetail.LockQuantity)
            {
                List<Dt_StockInfo> stockInfos = _stockService.StockInfoService.GetUseableStocks(outboundOrderDetail.MaterielCode, outboundOrder.WarehouseId);
                List<Dt_StockInfo> stockInfos = _stockService.StockInfoService.GetUseableStocks(outboundOrderDetail.MaterielCode, outboundOrderDetail.BatchNo, outboundOrder.WarehouseId);
                stockInfos = stockInfos.Where(x => !stockSelectViews.Select(v => v.PalletCode).Contains(x.PalletCode)).ToList();
                List<Dt_StockInfo> autoAssignStocks = _stockService.StockInfoService.GetOutboundStocks(stockInfos, outboundOrderDetail.MaterielCode, needQuantity, out float residueQuantity);
                outboundOrderDetail.LockQuantity += needQuantity - residueQuantity;
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/StockInfoRepository.cs
@@ -65,9 +65,9 @@
            //return sugarQueryable.InnerJoin(sugarQueryable1, (a, b) => a.LocationCode == b.LocationCode).Select((a, b) => b).Includes(x => x.Details).ToList();
        }
        public List<Dt_StockInfo> GetStockInfos(string materielCode, List<string> locationCodes)
        public List<Dt_StockInfo> GetStockInfos(string materielCode, string lotNo, List<string> locationCodes)
        {
            return Db.Queryable<Dt_StockInfo>().Where(x => locationCodes.Contains(x.LocationCode)).Includes(x => x.Details).Where(x => x.Details.Any(v => v.MaterielCode == materielCode)).ToList();
            return Db.Queryable<Dt_StockInfo>().Where(x => locationCodes.Contains(x.LocationCode)).Includes(x => x.Details).Where(x => x.Details.Any(v => v.MaterielCode == materielCode && v.BatchNo == lotNo)).ToList();
            //ISugarQueryable<Dt_LocationInfo> sugarQueryable = Db.Queryable<Dt_LocationInfo>().Where(x => locationCodes.Contains(x.LocationCode));
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs
@@ -12,6 +12,7 @@
using WIDESEA_Core.Helper;
using WIDESEA_DTO.Stock;
using WIDESEA_IBasicRepository;
using WIDESEA_IOutboundRepository;
using WIDESEA_IRecordRepository;
using WIDESEA_IRecordService;
using WIDESEA_IStockRepository;
@@ -24,13 +25,50 @@
    {
        private readonly IMapper _mapper;
        private readonly IBasicRepository _basicRepository;
        private readonly IOutboundRepository _outboundRepository;
        public IStockInfoRepository Repository => BaseDal;
        public StockInfoService(IStockInfoRepository BaseDal, IMapper mapper, IBasicRepository basicRepository) : base(BaseDal)
        public StockInfoService(IStockInfoRepository BaseDal, IMapper mapper, IBasicRepository basicRepository, IOutboundRepository outboundRepository) : base(BaseDal)
        {
            _mapper = mapper;
            _basicRepository = basicRepository;
            _outboundRepository = outboundRepository;
        }
        public List<StockSelectViewDTO> GetStockSelectViews(int orderId, string materielCode)
        {
            try
            {
                Dt_OutboundOrder outboundOrder = _outboundRepository.OutboundOrderRepository.QueryFirst(x => x.Id == orderId);
                if (outboundOrder == null)
                {
                    throw new Exception($"未找到出库单信息");
                }
                List<string> locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(outboundOrder.WarehouseId);
                return BaseDal.QueryTabs<Dt_StockInfo, Dt_StockInfoDetail, StockSelectViewDTO>((a, b) => a.Id == b.StockId, (a, b) => new StockSelectViewDTO
                {
                    LocationCode = a.LocationCode,
                    MaterielCode = b.MaterielCode,
                    MaterielName = b.MaterielName,
                    PalletCode = a.PalletCode,
                    UseableQuantity = b.StockQuantity - b.OutboundQuantity
                }, a => locationCodes.Contains(a.LocationCode), b => b.StockQuantity > b.OutboundQuantity && b.MaterielCode == materielCode, x => true).GroupBy(x => x.PalletCode).Select(x => new StockSelectViewDTO
                {
                    LocationCode = x.FirstOrDefault()?.LocationCode ?? "",
                    MaterielCode = x.FirstOrDefault()?.MaterielCode ?? "",
                    MaterielName = x.FirstOrDefault()?.MaterielName ?? "",
                    PalletCode = x.Key,
                    UseableQuantity = x.Sum(x => x.UseableQuantity)
                }).ToList();
            }
            catch (Exception ex)
            {
                return null;
            }
        }
        public List<Dt_StockInfo> GetOutboundStocks(List<Dt_StockInfo> stockInfos, string materielCode, float needQuantity, out float residueQuantity)
@@ -110,11 +148,11 @@
            return outStocks;
        }
        public List<Dt_StockInfo> GetUseableStocks(string materielCode, int warehoseId)
        public List<Dt_StockInfo> GetUseableStocks(string materielCode, string batchNo, int warehoseId)
        {
            List<string> locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(warehoseId);
            return BaseDal.GetStockInfos(materielCode, locationCodes);
            return BaseDal.GetStockInfos(materielCode, batchNo, locationCodes);
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_StockService/WIDESEA_StockService.csproj
@@ -8,6 +8,7 @@
  <ItemGroup>
    <ProjectReference Include="..\WIDESEA_IBasicRepository\WIDESEA_IBasicRepository.csproj" />
    <ProjectReference Include="..\WIDESEA_IOutboundRepository\WIDESEA_IOutboundRepository.csproj" />
    <ProjectReference Include="..\WIDESEA_IRecordRepository\WIDESEA_IRecordRepository.csproj" />
    <ProjectReference Include="..\WIDESEA_IRecordService\WIDESEA_IRecordService.csproj" />
    <ProjectReference Include="..\WIDESEA_IStockService\WIDESEA_IStockService.csproj" />
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/PurchaseOrderController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WIDESEA_Core.BaseController;
using WIDESEA_IInboundService;
using WIDESEA_Model.Models;
namespace WIDESEA_WMSServer.Controllers.Inbound
{
    [Route("api/PurchaseOrder")]
    [ApiController]
    public class PurchaseOrderController : ApiBaseController<IPurchaseOrderService, Dt_PurchaseOrder>
    {
        public PurchaseOrderController(IPurchaseOrderService service) : base(service)
        {
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs
@@ -18,5 +18,10 @@
        {
        }
        [HttpPost, HttpGet, Route("GetStockSelectViews")]
        public List<StockSelectViewDTO> GetStockSelectViews(int orderId, string materielCode)
        {
            return Service.GetStockSelectViews(orderId, materielCode);
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs
@@ -43,7 +43,7 @@
builder.Services.AddWebSocketSetup();
builder.Services.AddSqlsugarSetup();//SqlSugar å¯åŠ¨æœåŠ¡
builder.Services.AddDbSetup();//Db å¯åŠ¨æœåŠ¡
builder.Services.AddInitializationHostServiceSetup();//应用初始化服务注入
//builder.Services.AddInitializationHostServiceSetup();//应用初始化服务注入
builder.Services.AddHostedService<PermissionDataHostService>();//应用初始化服务注入
builder.Services.AddAutoMapperSetup();