1
helongyang
2025-12-26 5c238fa340e7a86834c65cf66c514f32d6d28f4a
1
已添加2个文件
已修改8个文件
1111 ■■■■ 文件已修改
代码管理/WMS/WIDESEA_WMSClient/src/extension/stock/ToUserProStockView.js 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/extension/system/Sys_Role.js 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/router/viewGird.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/stock/ToUserProStockView.vue 484 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/stock/ToUserStockView.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_BC.cs 150 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs 267 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/AssignInboundTaskLocation_BC.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/ReceiveOrderController.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/extension/stock/ToUserProStockView.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,157 @@
//此js文件是用来自定义扩展业务代码,可以扩展一些自定义页面或者重新配置生成的代码
import { el } from "element-plus/es/locales.mjs";
let extension = {
  components: {
    //查询界面扩展组件
    gridHeader: '',
    gridBody: '',
    gridFooter: '',
    //新建、编辑弹出框扩展组件
    modelHeader: '',
    modelBody: '',
    modelFooter: ''
  },
  tableAction: '', //指定某张表的权限(这里填写表名,默认不用填写)
  buttons: { view: [], box: [], detail: [] }, //扩展的按钮
  methods: {
    //下面这些方法可以保留也可以删除
    onInit() {
      // let InOrder = this.buttons.find(x => x.value == 'StockOutbound');
      // if (InOrder) {
      //   InOrder.onClick = function () {
      //     let rows = this.$refs.table.getSelected();
      //     if (rows.length == 0) return this.$error("请选择数据!");
      //     if (rows.length > 1) return this.$error("请选择单条数据!");
      //     var keys = rows.map(x => { return x.stockId });
      //     this.http
      //       .post("api/Task/Outbound?id="+keys[0], null, "数据处理中")
      //       .then((x) => {
      //         if (!x.status) return this.$message.error(x.message);
      //         this.$message.success("操作成功");
      //         this.refresh();
      //       });
      //   }
      // }
      this.columns.forEach(column => {
        if (column.field == 'materielCode') {
          column.formatter = (row) => {
            var str = '';
            var list = row.materielCode.split(',');
            for (let index = 0; index < list.length; index++) {
              str += list[index] + '<br>';
            }
            return str = list[0] == "" ? "空箱" : str;
          }
        }
        if (column.field == 'batchNo') {
          column.formatter = (row) => {
            var str = '';
            var list = row.batchNo.split(',');
            for (let index = 0; index < list.length; index++) {
              str += list[index] + '<br>';
            }
            return str = list[0] == "" ? "无" : str;
          }
        }
        if (column.field == 'materielInfo') {
          const today = new Date()
          column.formatter = (row) => {
            if (row.details.length > 0) {
              const today = new Date();
              const closestDate = row.details
                .map(x => {
                  const date = new Date(x.effectiveDate);
                  const diffInDays = Math.ceil(Math.abs((today - date) / (1000 * 60 * 60 * 24)));
                  return { date, diffInDays };
                })
                .reduce((closest, current) => (current.diffInDays < closest.diffInDays ? current : closest))
                .date;
              const daysSinceClosest = Math.ceil(Math.abs((today - closestDate) / (1000 * 60 * 60 * 24)));
              return '<span style="color: #F56C6C">' + daysSinceClosest + "天" + '</span>';
            } else {
              return '<span style="color: #F56C6C">' + "无保质期" + '</span>';
            }
          }
        }
        if (column.field == 'proinventoryage') {
          const today = new Date()
          column.formatter = (row) => {
              if (row.details.length > 0) {
                  const closestDate = row.details
                      .map(x => {
                          const date = new Date(x.createDate);
                          const ageInDays = Math.ceil((today - date) / (1000 * 60 * 60 * 24));
                          return { date, ageInDays };
                      })
                      .reduce((closest, current) => (current.ageInDays < closest.ageInDays ? current : closest))
                      .date;
                  const inventoryAge = Math.ceil((today - closestDate) / (1000 * 60 * 60 * 24));
                  row.inventoryAge = inventoryAge;
                  return `${inventoryAge} å¤©`;
              }
              // å¦‚果没有明细,返回空或提示信息
              return '-';
          }
        }
        if (column.field == 'sumStock') {
          column.formatter = (row) => {
            if (row.details.length > 0) {
              var sum = 0;
              const closestDate = row.details
                .map(x => {
                  sum += (x.stockQuantity)
                })
              return '<span style="color: #F56C6C">' + sum + row.details[0].unit + '</span>';
            } else {
              return '<span style="color: #F56C6C">' + "1个" + '</span>';
            }
          }
        }
      })
    },
    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/system/Sys_Role.js
@@ -1,9 +1,10 @@
let extension = {
  components: {//动态扩充组件或组件路径
    //表单header、content、footer对应位置扩充的组件
    gridHeader: '',
    gridBody: '',
        gridbody:'',
    gridFooter: '',
    //弹出框(修改、编辑、查看)header、content、footer对应位置扩充的组件
    modelHeader: '',
@@ -11,38 +12,10 @@
    modelFooter: ''
  },
  buttons: [],//扩展的按钮
  tableAction:"Sys_Role",
  methods: {//事件扩展
    onInited () {
      this.height = this.height - 80;
       this.editFormOptions.forEach(x => {
        x.forEach(item => {
          if (item.field == 'ParentId') {
            item.title = "上级角色";
            //设置任意节点都能选中(默认只能选中最后一个节点)
            item.changeOnSelect = true;
          }
        })
      })
    },
    onInit() {
      //设置treetable的唯一值字段(这个字段的值在表里面必须是唯一的)
      this.rowKey="Role_Id";
    },
    /***加载后台数据见Sys_RoleController.cs文件***/
    loadTreeChildren(tree, treeNode, resolve) { //加载子节点
      let url=`api/role/getTreeTableChildrenData?roleId=${tree.Role_Id}`;
      this.http.post(url,{}).then(result=>{
        resolve(result.rows)
      })
    },
      /***加载后台数据见Sys_RoleController.cs文件***/
    searchBefore(params){//判断加载根节点或子节点
      //没有查询条件,默认查询返回所有根节点数据
      if (!params.wheres.length) {
        params.value=1;
      }
      return true;
        onInited() {
    }
  }
};
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/router/viewGird.js
@@ -310,6 +310,10 @@
    path: '/ToUserStockView',
    name: 'ToUserStockView',
    component: () => import('@/views/stock/ToUserStockView.vue')
  }, {
    path: '/ToUserProStockView',
    name: 'ToUserProStockView',
    component: () => import('@/views/stock/ToUserProStockView.vue')
  }
]
export default viewgird
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/stock/ToUserProStockView.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,484 @@
<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/stock/ToUserProStockView.js";
  import { ref, defineComponent } from "vue";
  export default defineComponent({
    setup() {
      const table = ref({
        key: "proStockId",
        footer: "Foots",
        cnName: "成品库存视图",
        name: "proStockView",
        url: "/proStockView/",
        sortName: "proStockId",
      });
      const editFormFields = ref({
        // palletCode: "",
        // locationCode: "",
        // locationName: "",
      });
      const editFormOptions = ref([
      ]);
      const searchFormFields = ref({
        palletCode: "",
        // locationCode: "",
        materielCode:"",
        batchNo:"",
        specifyVer:"",
        warehouseId:"7"
      });
      const searchFormOptions = ref([
        [
          { title: "胶框号", field: "palletCode",type: "like" },
          { title: "货位状态", field: "locationStatus" ,type: "selectList",dataKey: "locationStatusEnum",data: [],},
          { title: "库存状态", field: "stockStatus",type: "selectList",dataKey: "stockStatusEmun",data: [],},
          { title: "产品编码", field: "productCode",type: "like"},
        ],
        [
          { title: "批次号", field: "lotNumber",type: "like"},
          { title: "货位编号", field: "locationCode",type: "like" },
          { title: "指派版本", field: "specifyVer",type: "like"},
          { title: "所属仓库", field: "warehouseId",type: "selectList",dataKey: "warehouses",data: [],},
        ],
        [
          { title: "产品版本", field: "productVersion",type: "like"},
          { title: "库存创建时间",field: "createDate",type: "datetime"},
        ]
      ]);
      const columns = ref([
        {
          field: "proStockId",
          title: "Id",
          type: "int",
          width: 90,
          hidden: true,
          readonly: true,
          require: true,
          align: "left",
        },
        {
          field: "palletCode",
          title: "胶框号",
          type: "string",
          width: 150,
          link: true,
          align: "left",
        },
        {
          field: "locationCode",
          title: "货位编号",
          type: "string",
          width: 200,
          align: "left",
        },
        {
          field: "locationName",
          title: "货位名称",
          type: "string",
          width: 270,
          align: "left",
        },
        {
          field: "warehouseId",
          title: "所属仓库",
          type: "string",
          width: 120,
          align: "left",
          bind: { key: "warehouses", data: [] },
        },
        {
          field: "proStockAttribute",
          title: "库存属性",
          type: "string",
          width: 80,
          align: "left",
          bind: { key: "proStockAttributeEnum", data: [] },
        },
        {
          field: "isFineWorks",
          title: "是否精品",
          type: "string",
          width: 80,
          align: "left",
          bind: { key: "enableEnum", data: [] },
        },
        // {
        //   field: "roadwayNo",
        //   title: "巷道编号",
        //   type: "decimal",
        //   width: 100,
        //   align: "left",
        //   hidden:true
        // },
        {
          field: "productCode",
          title: "产品编码",
          type: "string",
          width: 120,
          align: "left",
        },
        {
          field: "productVersion",
          title: "版本",
          type: "string",
          width: 100,
          align: "left"
        },
        {
          field: "specifyVer",
          title: "指派版本",
          type: "string",
          width: 100,
          align: "left"
        },
        {
          field: "dateCode",
          title: "产品周期",
          type: "string",
          width: 100,
          align: "left",
        },
        {
          field: "proinventoryage",
          title: "成品库龄",
          type: "string",
          width: 80,
          align: "left",
        },
        {
          field: "lotNumber",
          title: "产品批号",
          type: "string",
          width: 140,
          align: "left",
        },
        {
          field: "sumStocks",
          title: "库存数量",
          type: "string",
          width: 140,
          align: "left",
        },
        {
          field: "erpOrder",
          title: "ERP工单",
          type: "string",
          width: 200,
          align: "left",
        },
        {
          field: "moNumber",
          title: "制造工单",
          type: "string",
          width: 180,
          align: "left",
        },
        {
          field: "saleOrder",
          title: "销售订单",
          type: "string",
          width: 200,
          align: "left",
        },
        {
          field: "row",
          title: "货位行",
          type: "string",
          width: 90,
          align: "left",
          hidden: true,
        },
        {
          field: "column",
          title: "货位列",
          type: "int",
          width: 120,
          align: "left",
          hidden: true,
        },
        {
          field: "layer",
          title: "货位层",
          type: "string",
          width: 200,
          align: "left",
          hidden: true,
        },
        // {
        //   field: "depth",
        //   title: "货位深度",
        //   type: "string",
        //   width: 180,
        //   align: "left",
        //   hidden: true,
        // },
        {
          field: "stockStatus",
          title: "库存状态",
          type: "string",
          width: 120,
          align: "left",
          bind: { key: "stockStatusEmun", data: [] },
        },
        // {
        //   field: "locationType",
        //   title: "货位类型",
        //   type: "string",
        //   width: 100,
        //   align: "left",
        //   bind:{key: "locationTypeEnum", data: []}
        // },
        {
          field: "locationStatus",
          title: "货位状态",
          type: "string",
          width: 120,
          align: "left",
          bind: { key: "locationStatusEnum", data: [] },
        },
        {
          field: "enalbeStatus",
          title: "禁用状态",
          type: "string",
          width: 80,
          align: "left",
          bind: { key: "enableStatusEnum", 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",
          hidden:true
        },
      ]);
      const detail = ref({
        cnName: "库存明细信息",
        table: "ProStockInfoDetail",
        columns: [
          {
            field: "id",
            title: "Id",
            type: "int",
            width: 90,
            hidden: true,
            readonly: true,
            require: true,
            align: "left",
          },
          {
            field: "proStockId",
            title: "库存信息主键",
            type: "string",
            width: 90,
            align: "left",
            hidden: true
          },
          {
            field: "bagNo",
            title: "内包号",
            type: "string",
            width: 180,
            align: "left",
          },
          {
            field: "productCode",
            title: "产品编码",
            type: "string",
            width: 140,
            align: "left",
          },
          {
            field: "productVersion",
            title: "产品版本",
            type: "string",
            width: 80,
            align: "left",
          },
          {
            field: "dateCode",
            title: "周期",
            type: "string",
            width: 80,
            align: "left",
          },
          {
            field: "saleOrder",
            title: "销售订单",
            type: "string",
            width: 200,
            align: "left",
          },
          {
            field: "moNumber",
            title: "制造订单",
            type: "string",
            width: 150,
            align: "left",
          },
          {
            field: "erpOrder",
            title: "ERP工单",
            type: "string",
            width: 200,
            align: "left",
          },
          {
            field: "stockPcsQty",
            title: "库存PCS数",
            type: "string",
            width: 90,
            align: "left",
          },
          {
            field: "lotNumber",
            title: "产品批号",
            type: "string",
            width: 90,
            align: "left",
          },
        //   {
        //     field: "outboundQuantity",
        //     title: "出库PCS数量",
        //     type: "string",
        //     width: 90,
        //     align: "left",
        //   },
        //   {
        //     field: "outSETQty",
        //     title: "出库SET数量",
        //     type: "string",
        //     width: 90,
        //     align: "left",
        //   },
          {
            field: "xQty",
            title: "X数",
            type: "string",
            width: 90,
            align: "left",
          },
          {
            field: "xSite",
            title: "X位",
            type: "string",
            width: 100,
            align: "left",
          },
          {
            field: "proOutDetailStatus",
            title: "库存状态",
            type: "int",
            width: 120,
            align: "left",
            bind: { key: "stockStatusEmun", data: [] },
          },
          {
            field: "weight",
            title: "内包重量",
            type: "string",
            width: 80,
            align: "left",
          },
          {
            field: "creater",
            title: "创建人",
            type: "string",
            width: 90,
            align: "left",
            hidden: true
          },
          {
            field: "createDate",
            title: "创建时间",
            type: "datetime",
            width: 130,
            align: "left",
            hidden: true
          },
          {
            field: "modifier",
            title: "修改人",
            type: "string",
            width: 100,
            align: "left",
            hidden: true
          },
          {
            field: "modifyDate",
            title: "修改时间",
            type: "datetime",
            width: 160,
            align: "left",
            hidden: true
          },
          {
            field: "remark",
            title: "备注",
            type: "string",
            width: 100,
            align: "left",
            hidden: true
          },
        ],
        sortName: "id",
        key: "id",
      });
      return {
        table,
        extend,
        editFormFields,
        editFormOptions,
        searchFormFields,
        searchFormOptions,
        columns,
        detail,
      };
    },
  });
  </script>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/stock/ToUserStockView.vue
@@ -57,8 +57,6 @@
        { title: "库存创建时间",field: "createDate",type: "datetime"},
      ],
      [
        { title: "有效期查询",field: "effectiveDate",type: "date"},
        {title: "物料有效期",field: "expirationlabel",type: "selectList",dataKey:"expirationlabelEnum",data:[]},
        { title: "库龄(小于)", field: "inventoryage",type: "string"},
        { title: "库龄(大于)", field: "inventoryage1",type: "string"},
      ],
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_BC.cs
@@ -67,36 +67,57 @@
                    }
                }
                List<Dt_LocationInfo> allDefinedLocations = 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();
                //未定义类型的空货位
                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> 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();
                List<Dt_LocationInfo> _LocationInfos = definedTypeEmptyLocations;
                List<Dt_LocationInfo> definedTypeEmptyLocations = new List<Dt_LocationInfo>();
                List<Dt_LocationInfo> definedLocations1_4 = new List<Dt_LocationInfo>(); // 1-4层已定义货位
                List<Dt_LocationInfo> definedLocations5 = new List<Dt_LocationInfo>();  // 5层已定义货位
                if (heightType == 1)
                {
                    definedLocations1_4 = allDefinedLocations.Where(x => x.Layer <= 4).ToList();
                    definedLocations5 = allDefinedLocations.Where(x => x.Layer == 5).ToList();
                    definedTypeEmptyLocations = definedLocations1_4;
                    // æœªå®šä¹‰ç±»åž‹ä»…保留1-4层
                    undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x=>x.Layer <= 4).ToList();
                    definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Layer <= 4).ToList();
                }
                //else if(heightType == 2)
                //{
                //    undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Layer == 4).ToList();
                //    definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Layer == 4).ToList();
                //}
                else if (heightType == 2)
                {
                    // ä»…保留5层
                    definedTypeEmptyLocations = allDefinedLocations.Where(x => x.Layer == 5).ToList();
                    undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Layer == 5).ToList();
                    definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Layer == 5).ToList();
                }
                else
                {
                    undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => false).ToList();
                    // å…¶ä»–heightType:无可用货位
                    definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => false).ToList();
                    undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => false).ToList();
                }
                if (heightType==1 && !definedTypeEmptyLocations.Any())
                {
                    definedTypeEmptyLocations = _LocationInfos.Where(x => x.Layer == 5).ToList();
                }
                if (palletTypeInfo.LocaitonCount == 2)
                {
                    if (roadwayNo != "SC01_BC")
@@ -109,25 +130,70 @@
                {
                    for (int i = 0; i < definedTypeEmptyLocations.Count; i++)
                    {
                        Dt_LocationInfo definedTypeEmptyLocation = definedTypeEmptyLocations[i];
                        Dt_LocationInfo? locationInfo = GetUsableLocation_BC(locationInfos, definedTypeEmptyLocation, palletType, palletTypeInfo);
                        //判断货位两深及以上是否存在出库锁定货位
                        if (locationInfo?.Depth == 1)
                        Dt_LocationInfo currentLocation = definedTypeEmptyLocations[i];
                        Dt_LocationInfo? usableLocation = GetUsableLocation_BC(locationInfos, currentLocation, palletType, palletTypeInfo);
                        if (usableLocation?.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()))
                            int oppositeRow = usableLocation.Row == 2 ? usableLocation.Row - 1 : usableLocation.Row + 1;
                            Dt_LocationInfo? oppositeLocation = locationInfos.FirstOrDefault(x =>
                                x.Row == oppositeRow &&
                                x.Column == usableLocation.Column &&
                                x.Layer == usableLocation.Layer
                            );
                            if (oppositeLocation != null && (oppositeLocation.LocationStatus < LocationStatusEnum.InStock.ObjToInt()))
                            {
                                continue;
                            }
                        }
                        if (locationInfo != null)
                        if (usableLocation != null)
                        {
                            locationCaches_BC.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now });
                            return locationInfo;
                            locationCaches_BC.Add(new LocationCache { LocationCode = usableLocation.LocationCode, DateTime = DateTime.Now });
                            return usableLocation;
                        }
                    }
                }
                if (undefinedTypeEmptyLocations.Any() && palletType!=PalletTypeEnum.SmallPallet.ObjToInt())//如果已定义类型货位未超过比例,且有未定义类型的货位
                if (heightType == 1 && definedLocations5.Any())
                {
                    List<Dt_LocationInfo> filtered5Locations = definedLocations5;
                    if (palletTypeInfo.LocaitonCount == 2)
                    {
                        if (roadwayNo != "SC01_BC")
                            filtered5Locations = filtered5Locations.Where(x => x.Column % 2 == 1).ToList();
                        else
                            filtered5Locations = filtered5Locations.Where(x => x.Column % 2 == 0).ToList();
                    }
                    for (int i = 0; i < filtered5Locations.Count; i++)
                    {
                        Dt_LocationInfo currentLocation = filtered5Locations[i];
                        Dt_LocationInfo? usableLocation = GetUsableLocation_BC(locationInfos, currentLocation, palletType, palletTypeInfo);
                        if (usableLocation?.Depth == 1)
                        {
                            int oppositeRow = usableLocation.Row == 2 ? usableLocation.Row - 1 : usableLocation.Row + 1;
                            Dt_LocationInfo? oppositeLocation = locationInfos.FirstOrDefault(x =>
                                x.Row == oppositeRow &&
                                x.Column == usableLocation.Column &&
                                x.Layer == usableLocation.Layer
                            );
                            if (oppositeLocation != null && (oppositeLocation.LocationStatus < LocationStatusEnum.InStock.ObjToInt()))
                            {
                                continue;
                            }
                        }
                        if (usableLocation != null)
                        {
                            locationCaches_BC.Add(new LocationCache { LocationCode = usableLocation.LocationCode, DateTime = DateTime.Now });
                            return usableLocation;
                        }
                    }
                }
                if (undefinedTypeEmptyLocations.Any() && palletType != PalletTypeEnum.SmallPallet.ObjToInt())
                {
                    if (palletTypeInfo.LocaitonCount == 2)
                    {
@@ -138,26 +204,30 @@
                        for (int i = 0; i < undefinedTypeEmptyLocations.Count; i++)
                        {
                            Dt_LocationInfo undefinedTypeEmptyLocation = undefinedTypeEmptyLocations[i];
                            Dt_LocationInfo? locationInfo = GetUsableLocation_BC(locationInfos, undefinedTypeEmptyLocation, palletType, palletTypeInfo);
                            //判断货位两深及以上是否存在出库锁定货位
                            if (locationInfo?.Depth == 1)
                            Dt_LocationInfo currentLocation = undefinedTypeEmptyLocations[i];
                            Dt_LocationInfo? usableLocation = GetUsableLocation_BC(locationInfos, currentLocation, palletType, palletTypeInfo);
                            if (usableLocation?.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()))
                                int oppositeRow = usableLocation.Row == 2 ? usableLocation.Row - 1 : usableLocation.Row + 1;
                                Dt_LocationInfo? oppositeLocation = locationInfos.FirstOrDefault(x =>
                                    x.Row == oppositeRow &&
                                    x.Column == usableLocation.Column &&
                                    x.Layer == usableLocation.Layer
                                );
                                if (oppositeLocation != null && (oppositeLocation.LocationStatus < LocationStatusEnum.InStock.ObjToInt()))
                                {
                                    continue;
                                }
                            }
                            if (locationInfo != null)
                            {
                                //UpdateLocationStatus(locationInfo, palletType, LocationStatusEnum.Lock, locationInfo.WarehouseId);
                                locationCaches_BC.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now });
                                return locationInfo;
                            }
                        }
                    }
                    
                            if (usableLocation != null)
                            {
                                locationCaches_BC.Add(new LocationCache { LocationCode = usableLocation.LocationCode, DateTime = DateTime.Now });
                                return usableLocation;
                            }
                        }
                    }
                }
                return null;
            }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs
@@ -228,7 +228,15 @@
                    recevieOrderDetails.Add(recevieOrderDetail);
                    if (warehouse.WarehouseCode == WarehouseEnum.HA152.ToString() || warehouse.WarehouseCode == WarehouseEnum.HA58.ToString())
                    {
                        string lotNo = item.LotNo.Substring(0, item.LotNo.IndexOf("-"));
                        string lotNo;
                        if (item.LotNo.Contains("-"))
                        {
                            lotNo = item.LotNo.Substring(0, item.LotNo.IndexOf("-"));
                        }
                        else
                        {
                            lotNo = item.LotNo;
                        }
                        Dt_CheckOrder? ExistcheckOrder = checkOrders.FirstOrDefault(x => x.LotNo == lotNo && x.MaterielCode == item.MaterielCode && x.PurchaseOrderNo == item.PurchaseOrderNo);
                        if (ExistcheckOrder == null)
                        {
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs
@@ -421,37 +421,57 @@
            {
                if (webhookUrl == null || secret == null)
                {
                    webhookUrl = "https://oapi.dingtalk.com/robot/send?access_token=fbc3aaf4133ea650d8116fb86b3ebfd0c5e0d46775966ce87893a41886bdf9dc";
                    secret = "SECf221842b26356f22ccac84c4e60714e5287408ee8332a8f63503791382c3f5fb";
                    webhookUrl = "https://oapi.dingtalk.com/robot/send?access_token=c3e05f2c6bcd595383ee02e713446174b9201bad91db216590620fe0acd4e75e";
                    secret = "SEC617f06140fc7cbd8b91d3e203f270826320637af41e7423d756e62df40f62282";
                }
                // 1. å®šä¹‰ä»“库ID与仓库名称的映射关系(增加成品仓)
                var warehouseIdToName = new Dictionary<int, string>
                {
                    { 2, "油墨仓" },
                    { 3, "板材仓" },
                    { 4, "PP仓" },
                    { 6, "测试架仓" },
            { 7, "成品仓" }, // æ–°å¢žæˆå“ä»“
                    { 11, "干膜仓" },
                    { 12, "阻焊仓" }
                };
                // 2. æ—¶é—´ç›¸å…³é…ç½®ï¼Œç”¨äºŽç­›é€‰è¶…过90天的数据
                var currentTime = DateTime.Now;
                var ninetyDaysAgo = currentTime.AddDays(-90);
                // 3. å¤„理原材料仓(仓库ID â‰  7)
                // 3.1 æŸ¥è¯¢æ ‡è¯†ç ä¸º3(过期)的主表数据(排除仓库ID=5和7)
                var expirationLabel3Stocks = BaseDal.Db.Queryable<Dt_StockInfo>()
                    .Where(s => s.Expirationlabel == 3 && s.WarehouseId != 5)
                    .Where(s => s.Expirationlabel == 3 && s.WarehouseId != 5 && s.WarehouseId != 7 && s.LocationCode != "" && s.LocationCode != null)
                    .ToList();
                // 3.2 æŸ¥è¯¢è¶…过90天未修改(未使用)的主表数据(排除仓库ID=5和7)
                var over90DaysStocks = BaseDal.Db.Queryable<Dt_StockInfo>()
                    .Where(s => s.ModifyDate <= ninetyDaysAgo && s.Expirationlabel != 3 && s.WarehouseId != 5)
                    .Where(s => s.ModifyDate <= ninetyDaysAgo && s.Expirationlabel != 3 && s.WarehouseId != 5 && s.WarehouseId != 7 && s.LocationCode != "" && s.LocationCode != null)
                    .ToList();
                if (!expirationLabel3Stocks.Any() && !over90DaysStocks.Any())
                // 4. å¤„理成品仓(仓库ID = 7)
                var proOver90DaysStocks = new List<Dt_ProStockInfo>();
                if (warehouseIdToName.ContainsKey(7))
                {
                    proOver90DaysStocks = BaseDal.Db.Queryable<Dt_ProStockInfo>()
                        .Where(s => s.WarehouseId == 7 && s.ModifyDate <= ninetyDaysAgo && s.LocationCode != "" && s.LocationCode != null)
                        .ToList();
                }
                // æ— ç¬¦åˆæ¡ä»¶æ•°æ®æ—¶ç›´æŽ¥è¿”回
                if (!expirationLabel3Stocks.Any() && !over90DaysStocks.Any() && !proOver90DaysStocks.Any())
                {
                    return;
                }
                // 5. æå–原材料主表数据的ID
                var expirationLabel3StockIds = expirationLabel3Stocks.Select(s => s.Id).ToList();
                var over90DaysStockIds = over90DaysStocks.Select(s => s.Id).ToList();
                // 6. å…³è”查询原材料明细表数据
                var expirationLabel3Details = expirationLabel3StockIds.Any()
                    ? BaseDal.Db.Queryable<Dt_StockInfoDetail>()
                        .Where(d => expirationLabel3StockIds.Contains(d.StockId))
@@ -464,107 +484,264 @@
                        .ToList()
                    : new List<Dt_StockInfoDetail>();
                var stockIdToWarehouseId = expirationLabel3Stocks
                    .Concat(over90DaysStocks)
                    .ToDictionary(s => s.Id, s => s.WarehouseId);
                // 7. å¤„理成品仓明细数据
                var proOver90DaysDetails = new List<Dt_ProStockInfoDetail>();
                if (proOver90DaysStocks.Any())
                {
                    var proStockIds = proOver90DaysStocks.Select(s => s.Id).ToList();
                    proOver90DaysDetails = BaseDal.Db.Queryable<Dt_ProStockInfoDetail>()
                        .Where(d => proStockIds.Contains(d.ProStockId))
                        .ToList();
                }
                // 8. å»ºç«‹ä¸»è¡¨ID到仓库ID的映射(包括成品仓)
                var stockIdToWarehouseId = new Dictionary<int, int>();
                // åŽŸææ–™ä»“æ˜ å°„
                foreach (var stock in expirationLabel3Stocks.Concat(over90DaysStocks))
                {
                    if (!stockIdToWarehouseId.ContainsKey(stock.Id))
                    {
                        stockIdToWarehouseId[stock.Id] = stock.WarehouseId;
                    }
                }
                // æˆå“ä»“映射
                foreach (var proStock in proOver90DaysStocks)
                {
                    if (!stockIdToWarehouseId.ContainsKey(proStock.Id))
                    {
                        stockIdToWarehouseId[proStock.Id] = proStock.WarehouseId;
                    }
                }
                // 9. æŒ‰ä»“库分组处理物料数据
                // 9.1 åŽŸææ–™è¿‡æœŸç‰©æ–™
                var expirationLabel3Groups = expirationLabel3Details
                    .GroupBy(d => stockIdToWarehouseId[d.StockId])
                    .ToDictionary(g => g.Key, g => g.Select(d => new
                    {
                        d.MaterielCode,
                        d.BatchNo
                    }).ToList());
                        MaterielCode = d.MaterielCode,
                        BatchNo = d.BatchNo,
                        IsProStock = false // æ ‡è®°ä¸ºéžæˆå“ä»“
                    }).Distinct().ToList());
                // 9.2 åŽŸææ–™è¶…è¿‡90天未使用物料
                var over90DaysGroups = over90DaysDetails
                    .GroupBy(d => stockIdToWarehouseId[d.StockId])
                    .ToDictionary(g => g.Key, g => g.Select(d => new
                    {
                        d.MaterielCode,
                        d.BatchNo
                    }).ToList());
                        MaterielCode = d.MaterielCode,
                        BatchNo = d.BatchNo,
                        IsProStock = false // æ ‡è®°ä¸ºéžæˆå“ä»“
                    }).Distinct().ToList());
                // 9.3 æˆå“ä»“超过90天未使用物料
                if (proOver90DaysDetails.Any())
                {
                    var proWarehouseId = 7;
                    var proGroup = proOver90DaysDetails
                        .GroupBy(d => stockIdToWarehouseId[d.ProStockId])
                        .Select(g => new
                        {
                            WarehouseId = g.Key,
                            Materials = g.Select(d => new
                            {
                                MaterielCode = d.ProductCode, // æˆå“ä»“使用ProductCode字段
                                BatchNo = d.LotNumber,        // æˆå“ä»“使用LotNumber字段
                                IsProStock = true             // æ ‡è®°ä¸ºæˆå“ä»“
                            }).Distinct().ToList()
                        })
                        .FirstOrDefault();
                    if (proGroup != null)
                    {
                        // æ·»åŠ åˆ°over90DaysGroups中
                        if (over90DaysGroups.ContainsKey(proWarehouseId))
                        {
                            over90DaysGroups[proWarehouseId].AddRange(proGroup.Materials);
                        }
                        else
                        {
                            over90DaysGroups[proWarehouseId] = proGroup.Materials;
                        }
                    }
                }
                // 10. èŽ·å–æ‰€æœ‰æ¶‰åŠçš„ä»“åº“ID
                var allWarehouseIds = expirationLabel3Groups.Keys
                    .Union(over90DaysGroups.Keys)
                    .ToList();
                // 11. å‘送钉钉消息
                using (HttpClient httpClient = new HttpClient())
                {
                    foreach (var warehouseId in allWarehouseIds)
                    {
                        // 9.1 å¤„理仓库名称显示:优先用映射名称,无映射时显示原始ID
                        var warehouseName = warehouseIdToName.TryGetValue(warehouseId, out var name)
                            ? name
                            : $"仓库{warehouseId}";
                        var messageParts = new List<string>
                {
                    $"【{warehouseName}】物料提醒"
                };
                        // 11.1 æž„建markdown格式消息
                        var markdownContent = new StringBuilder();
                        markdownContent.AppendLine($"## {warehouseName}物料提醒通知\n");
                        // æ·»åŠ è¿‡æœŸç‰©æ–™ä¿¡æ¯
                        if (expirationLabel3Groups.TryGetValue(warehouseId, out var label3Materials) && label3Materials.Any())
                        // ç»Ÿè®¡ä¿¡æ¯
                        var expiredCount = expirationLabel3Groups.TryGetValue(warehouseId, out var expList) ?
                            expList.Count : 0;
                        var over90Count = over90DaysGroups.TryGetValue(warehouseId, out var over90List) ?
                            over90List.Count : 0;
                        // å¦‚果是成品仓,需要过滤出成品仓的数据
                        if (warehouseId == 7)
                        {
                            var label3Details = label3Materials
                                .Select(m => $"• ç‰©æ–™ç¼–码:{m.MaterielCode} | æ‰¹æ¬¡å·ï¼š{m.BatchNo}")
                                .Aggregate((current, next) => $"{current}\n{next}");
                            messageParts.Add($"一、过期物料\n{label3Details}");
                            over90Count = over90List?.Count(m => m.IsProStock) ?? 0;
                        }
                        // æ·»åŠ è¶…è¿‡90天未使用物料信息
                        if (over90DaysGroups.TryGetValue(warehouseId, out var over90Materials) && over90Materials.Any())
                        markdownContent.AppendLine($"**统计概览:**");
                        if (warehouseId == 7)
                        {
                            var over90Details = over90Materials
                                .Select(m => $"• ç‰©æ–™ç¼–码:{m.MaterielCode} | æ‰¹æ¬¡å·ï¼š{m.BatchNo}")
                                .Aggregate((current, next) => $"{current}\n{next}");
                            messageParts.Add($"二、超过90天未使用物料\n{over90Details}");
                            markdownContent.AppendLine($"- è¶…过90天未使用成品:{over90Count}条");
                        }
                        else
                        {
                            markdownContent.AppendLine($"- è¿‡æœŸç‰©æ–™ï¼š{expiredCount}条");
                            markdownContent.AppendLine($"- è¶…过90天未使用物料:{over90Count}条");
                        }
                        markdownContent.AppendLine();
                        // 11.2 æ·»åŠ è¿‡æœŸç‰©æ–™è¡¨æ ¼ï¼ˆå¦‚æžœæœ‰æ•°æ®ä¸”ä¸æ˜¯æˆå“ä»“ï¼‰
                        if (expiredCount > 0 && warehouseId != 7)
                        {
                            markdownContent.AppendLine("### ä¸€ã€è¿‡æœŸç‰©æ–™");
                            markdownContent.AppendLine("| åºå· | ç‰©æ–™ç¼–码 | æ‰¹æ¬¡å· |");
                            markdownContent.AppendLine("| :--- | :--- | :--- |");
                            int index = 1;
                            var expiredToShow = expList.Take(200);
                            foreach (var material in expiredToShow)
                            {
                                markdownContent.AppendLine($"| {index} | {material.MaterielCode} | {material.BatchNo} |");
                                index++;
                        }
                        var messageContent = string.Join("\n\n", messageParts);
                            if (expiredCount > 200)
                            {
                                markdownContent.AppendLine($"| ... | å…±{expiredCount}条,仅显示前200条 | ... |");
                            }
                            markdownContent.AppendLine();
                        }
                        // 11.3 æ·»åŠ è¶…è¿‡90天未使用物料表格(如果有数据)
                        if (over90Count > 0)
                        {
                            if (warehouseId == 7)
                            {
                                markdownContent.AppendLine("### è¶…过90天未使用成品");
                            }
                            else
                            {
                                markdownContent.AppendLine("### äºŒã€è¶…过90天未使用物料");
                            }
                            markdownContent.AppendLine("| åºå· | ç‰©æ–™ç¼–码 | æ‰¹æ¬¡å· |");
                            markdownContent.AppendLine("| :--- | :--- | :--- |");
                            int index = 1;
                            var over90ToShow = warehouseId == 7 ?
                                over90List?.Where(m => m.IsProStock).Take(500) :
                                over90List?.Take(500);
                            if (over90ToShow != null)
                            {
                                foreach (var material in over90ToShow)
                                {
                                    markdownContent.AppendLine($"| {index} | {material.MaterielCode} | {material.BatchNo} |");
                                    index++;
                                }
                                if (over90Count > (warehouseId == 7 ? 500 : 200))
                                {
                                    markdownContent.AppendLine($"| ... | å…±{over90Count}条,仅显示前{(warehouseId == 7 ? 500 : 200)}条 | ... |");
                                }
                            }
                            markdownContent.AppendLine();
                        }
                        // 11.4 æ·»åŠ æ—¶é—´æˆ³å’Œæç¤ºä¿¡æ¯
                        markdownContent.AppendLine($"**报告时间:** {currentTime:yyyy-MM-dd HH:mm:ss}");
                        if (warehouseId == 7)
                        {
                            markdownContent.AppendLine("**备注:** è¯·æˆå“ä»“管理人员及时处理超过90天未使用的成品。");
                        }
                        else
                        {
                            markdownContent.AppendLine("**备注:** è¯·ç›¸å…³ä»“库管理人员及时处理以上物料。");
                        }
                        var messageContent = markdownContent.ToString();
                        // 11.5 ç”Ÿæˆé’‰é’‰æ¶ˆæ¯æ‰€éœ€çš„æ—¶é—´æˆ³å’Œç­¾å
                        var timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
                        var sign = GenerateSign(timestamp, secret);
                        var url = $"{webhookUrl.Split('?')[0]}?access_token={new Uri(webhookUrl).Query.Split('=')[1]}&timestamp={timestamp}&sign={sign}";
                        // 11.6 æž„建钉钉请求URL
                        var uri = new Uri(webhookUrl);
                        var token = System.Web.HttpUtility.ParseQueryString(uri.Query)["access_token"];
                        var baseUrl = uri.GetLeftPart(UriPartial.Path);
                        var url = $"{baseUrl}?access_token={token}&timestamp={timestamp}&sign={sign}";
                        // æž„建请求体(符合钉钉text类型消息格式)
                        // 11.7 æž„建请求体(使用markdown格式)
                        var requestBody = new
                        {
                            msgtype = "text",
                            text = new { content = messageContent }
                            msgtype = "markdown",
                            markdown = new
                            {
                                title = $"{warehouseName}物料提醒",
                                text = messageContent
                            },
                            at = new
                            {
                                // å¯ä»¥æŒ‡å®š@某些人,如果不需要可以删除这部分
                                // atMobiles = new[] { "138xxxx8888" },
                                // isAtAll = false
                            }
                        };
                        var jsonBody = JsonConvert.SerializeObject(requestBody);
                        var content = new StringContent(jsonBody, Encoding.UTF8, "application/json");
                        // 11.8 å‘送POST请求并处理响应
                        var response = await httpClient.PostAsync(url, content);
                        if (!response.IsSuccessStatusCode)
                        {
                            var errorContent = await response.Content.ReadAsStringAsync();
                            throw new Exception($"【{warehouseName}】消息发送失败,状态码:{response.StatusCode},错误信息:{errorContent}");
                        }
                        // é¿å…å‘送频率过快
                        await Task.Delay(1000);
                    }
                }
            }
            catch (Exception ex)
            {
                // æ•获异常并补充上下文,便于问题定位
                throw new Exception($"钉钉消息推送整体失败,错误详情:{ex.Message}", ex);
            }
        }
        /// <summary>
        /// ç”ŸæˆåŠ ç­¾ç­¾å
        /// </summary>
        /// <param name="timestamp">时间戳</param>
        /// <returns>签名</returns>
        // é’‰é’‰ç­¾åç”Ÿæˆæ–¹æ³•
        private string GenerateSign(long timestamp,string secret)
        {
            var stringToSign = $"{timestamp}\n{secret}";
            using (var hmacsha256 = new System.Security.Cryptography.HMACSHA256(Encoding.UTF8.GetBytes(secret)))
            using (var hmac = new System.Security.Cryptography.HMACSHA256(Encoding.UTF8.GetBytes(secret)))
            {
                var hashBytes = hmacsha256.ComputeHash(Encoding.UTF8.GetBytes(stringToSign));
                return Convert.ToBase64String(hashBytes).Replace("+", "%2B").Replace("/", "%2F");
                var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(stringToSign));
                return Convert.ToBase64String(hash);
            }
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/AssignInboundTaskLocation_BC.cs
@@ -212,7 +212,7 @@
                List<LocationCount> locationCounts = new List<LocationCount>();
                if (heightType == 1)
                {
                    locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == task.PalletType || (IsBCS ? false : x.LocationType == LocationTypeEnum.Undefined.ObjToInt())) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && (IsBCS ? !IsBCS : ("SC01_BC".Contains(x.RoadwayNo) ? x.Column % 2 == 0 : x.Column % 2 == 1)) && x.Layer <= 4 && roadwayNos.Contains(x.RoadwayNo)).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                    locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == task.PalletType || (IsBCS ? false : x.LocationType == LocationTypeEnum.Undefined.ObjToInt())) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && (IsBCS ? !IsBCS : ("SC01_BC".Contains(x.RoadwayNo) ? x.Column % 2 == 0 : x.Column % 2 == 1)) && x.Layer <= 5 && roadwayNos.Contains(x.RoadwayNo)).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                }
                //else if(heightType == 2)
                //{
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/ReceiveOrderController.cs
@@ -35,7 +35,7 @@
        /// </summary>
        /// <param name="orderId"></param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("FeedbackReceiveOrder")]
        [HttpPost, HttpGet, Route("FeedbackReceiveOrder"),AllowAnonymous]
        public WebResponseContent FeedbackReceiveOrder(int orderId)
        {
            return Service.FeedbackReceiveOrder(orderId);