wangxinhui
2025-03-01 bec50a799a5ce50177023d072c62415451f7c7d9
物料条码生成界面优化,MES成品入库单...
已删除2个文件
已修改14个文件
已重命名1个文件
已添加7个文件
590 ■■■■ 文件已修改
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/c3952f00-6f03-46e1-a8c4-0c2746ff48ae.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/extension/basic/extend/materielcodeSelectView.vue 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/extension/basic/extend/purchaseOrderNoSelectView.vue 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/extension/basic/materielCodeInfo.js 133 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/basic/materielCodeInfo.vue 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/123043ec-a235-4994-bbaf-1853882028ac.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/16bda44f-cb60-43e3-8deb-16983a6c8720.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/3a86d184-9f6a-4b52-8eb2-6a125517673d.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/5522edfe-1b4b-4136-8bdb-deca45c9c98e.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/bcaff427-9b5a-40c5-b7b6-df06507540f9.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/fed89d2c-c26e-4f31-9fa3-8a0b7f92a8fd.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/MaterielCodeInfoService.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/AnalysisCodeEnum.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/AnalysisFormatTypeEnum.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/ProSerNumAnalysisModel.cs 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/MesProInOrderService.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_MaterielCodeInfo.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_MesProInOrderDetail.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_MesRworkOutboundOrder.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_StockInfoDetail.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/MesProInOrderController.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/c3952f00-6f03-46e1-a8c4-0c2746ff48ae.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/extension/basic/extend/materielcodeSelectView.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,144 @@
<template>
  <vol-box
    :lazy="true"
    v-model="model"
    title="选择物料编号"
    :width="200"
    :padding="0"
  >
    <div>
      <div>
        <!-- æœç´¢é…ç½® -->
        <div class="search-form">
          <label>物料编号:</label>
          <el-input style="width: 100px" v-model="MaterialCode"></el-input>
        </div>
        <el-table
          ref="singleTable"
          :data="filteredData"
          style="width: 100%; height: 100%"
          highlight-current-row
          height="500px"
          @selection-change="handleSelectionChange"
        >
          >
          <el-table-column type="selection" width="55"> </el-table-column>
          <el-table-column
            v-for="(item, index) in tableColumns.filter((x) => !x.hidden)"
            :key="index"
            :prop="item.prop"
            :label="item.title"
            align="center"
          >
          </el-table-column>
        </el-table>
      </div>
    </div>
    <template #footer>
      <div><el-button type="primary" @click="onSelect">确认</el-button></div>
    </template>
  </vol-box>
</template>
<script>
import VolBox from "@/components/basic/VolBox.vue";
/******注意:如果出现提示没有权限的问题,见后台开发文档上的【重写后台权限】*****/
//这里使用的vue2语法,也可以写成vue3语法
export default {
  components: {
    "vol-box": VolBox,
  },
  methods: {},
  data() {
    return {
      model: false, //弹出框
      wareId: null,
      showDetialBox: false,
      MaterialCode:null,
      selection:null,
      tableData: [],
      filteredData: [],
      tableColumns: [
        {
          prop: "materielCode",
          title: "物料编号",
          type: "string",
        },
      ],
    };
  },
  watch: {
    MaterialCode(newVal) {
      this.filterLocalData(newVal);
    }
  },
  methods: {
    open(val) {
      //打开主表选择数据
      this.model = true;
      this.wareId=val;
      this.getData();
    },
    filterLocalData(code) {
      if (code) {
        this.filteredData = this.tableData.filter((item) => {
            return item.materielCode.includes(code);
        });
        console.log(this.filteredData.length);
        console.log(this.tableData.length);
      } else {
        this.filteredData = [...this.tableData]; // é‡ç½®ä¸ºå®Œæ•´æ•°æ®
      }
    },
    handleSelectionChange(val) {
        this.selection = val;
        if (this.selection.length > 1) {
            this.$message.error("仅选择一条数据");
            // æ¸…空选中的第一条数据
            this.$refs.singleTable.clearSelection();
        }
        console.log(this.selection);
    },
    getData() {
      this.http
        .post(
          "/api/PurchaseOrderDetail/GetPurchaseOrderDetailMaterielCode?warehouseId=" + this.wareId,
          null,
          "查询中"
        )
        .then((x) => {
          this.tableData=x.data.map((i) => ({
            "materielCode":i
          }))
          this.filteredData=x.data.map((i) => ({
            "materielCode":i
          }))
        });
    },
    onSelect() {
      if (!this.selection) {
        return this.$message.error("请选择数据");
      }
      this.$emit("parentCall", ($parent) => {
        //如:回写编辑表单数据
        $parent.editFormFields.materielCode = this.selection[0].materielCode;
        this.model = false;
      });
      this.MaterialCode = null;
      this.tableData = [];
      this.filteredData = [];
    },
  },
};
</script>
<style lang="less" scoped>
.search-form {
  display: flex;
  padding: 10px;
  line-height: 34px;
  button {
    margin-left: 10px;
  }
}
</style>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/extension/basic/extend/purchaseOrderNoSelectView.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,144 @@
<template>
    <vol-box
      :lazy="true"
      v-model="model"
      title="选择采购单号"
      :width="280"
      :padding="0"
    >
      <div>
        <div>
          <!-- æœç´¢é…ç½® -->
          <div class="search-form">
            <label>采购单号:</label>
            <el-input style="width: 160px" v-model="MaterialCode"></el-input>
          </div>
          <el-table
            ref="singleTable"
            :data="filteredData"
            style="width: 100%; height: 100%"
            highlight-current-row
            height="500px"
            @selection-change="handleSelectionChange"
          >
            >
            <el-table-column type="selection" width="55"> </el-table-column>
            <el-table-column
              v-for="(item, index) in tableColumns.filter((x) => !x.hidden)"
              :key="index"
              :prop="item.prop"
              :label="item.title"
              align="center"
            >
            </el-table-column>
          </el-table>
        </div>
      </div>
      <template #footer>
        <div><el-button type="primary" @click="onSelect">确认</el-button></div>
      </template>
    </vol-box>
  </template>
  <script>
  import VolBox from "@/components/basic/VolBox.vue";
  /******注意:如果出现提示没有权限的问题,见后台开发文档上的【重写后台权限】*****/
  //这里使用的vue2语法,也可以写成vue3语法
  export default {
    components: {
      "vol-box": VolBox,
    },
    methods: {},
    data() {
      return {
        model: false, //弹出框
        wareId: null,
        showDetialBox: false,
        MaterialCode:null,
        selection:null,
        tableData: [],
        filteredData: [],
        tableColumns: [
          {
            prop: "purchaseOrderNo",
            title: "采购单号",
            type: "string",
          },
        ],
      };
    },
    watch: {
      MaterialCode(newVal) {
        this.filterLocalData(newVal);
      }
    },
    methods: {
      open(val) {
        //打开主表选择数据
        this.model = true;
        this.wareId=val;
        this.getData();
      },
      filterLocalData(code) {
        if (code) {
          this.filteredData = this.tableData.filter((item) => {
              return item.purchaseOrderNo.includes(code);
          });
          console.log(this.filteredData.length);
          console.log(this.tableData.length);
        } else {
          this.filteredData = [...this.tableData]; // é‡ç½®ä¸ºå®Œæ•´æ•°æ®
        }
      },
      handleSelectionChange(val) {
          this.selection = val;
          if (this.selection.length > 1) {
              this.$message.error("仅选择一条数据");
              // æ¸…空选中的第一条数据
              this.$refs.singleTable.clearSelection();
          }
          console.log(this.selection);
      },
      getData() {
        this.http
          .post(
            "/api/PurchaseOrderDetail/GetPurchaseOrderNos?materielCode="  + this.wareId,
            null,
            "查询中"
          )
          .then((x) => {
            this.tableData=x.data.map((i) => ({
              "purchaseOrderNo":i
            }))
            this.filteredData=x.data.map((i) => ({
              "purchaseOrderNo":i
            }))
          });
      },
      onSelect() {
        if (!this.selection) {
          return this.$message.error("请选择数据");
        }
        this.$emit("parentCall", ($parent) => {
          //如:回写编辑表单数据
          $parent.editFormFields.purchaseOrderNo = this.selection[0].purchaseOrderNo;
          this.model = false;
        });
        this.MaterialCode = null;
        this.tableData = [];
        this.filteredData = [];
      },
    },
  };
  </script>
  <style lang="less" scoped>
  .search-form {
    display: flex;
    padding: 10px;
    line-height: 34px;
    button {
      margin-left: 10px;
    }
  }
  </style>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/extension/basic/materielCodeInfo.js
@@ -1,5 +1,7 @@
//此js文件是用来自定义扩展业务代码,可以扩展一些自定义页面或者重新配置生成的代码
import gridBody from './extend/materielcodeprintView.vue'
import modelHeader from './extend/materielcodeSelectView.vue'
import modelBody from './extend/purchaseOrderNoSelectView.vue'
let extension = {
  components: {
    //查询界面扩展组件
@@ -7,8 +9,8 @@
    gridBody: gridBody,
    gridFooter: '',
    //新建、编辑弹出框扩展组件
    modelHeader: '',
    modelBody: '',
    modelHeader: modelHeader,
    modelBody: modelBody,
    modelFooter: ''
  },
  tableAction: '', //指定某张表的权限(这里填写表名,默认不用填写)
@@ -33,71 +35,76 @@
      let day = String(date.getDate()).padStart(2, "0");
      return year + "-" + month + "-" + day;
    },
    // æ–°å¢žæ–¹æ³•:加载物料编号数据
    async loadMaterielCodes(option) {
      try {
        option.loading = true;
        const { page, pageSize, keyword } = option.pagination;
        const res = await this.http.post("/api/PurchaseOrderDetail/GetPurchaseOrderDetailMaterielCode", {
          warehouseId: this.editFormFields.warehouseId,
          keyword,
          page,
          pageSize
        }, true);
        if (res.status) {
          option.pagination.total = res.total || res.data.length;
          const newData = res.data.map(item => ({ key: item, value: item }));
          option.data = page === 1 ? newData : [...option.data, ...newData];
        }
      } catch (error) {
        this.$error("数据加载失败");
      } finally {
        option.loading = false;
      }
    },
    //下面这些方法可以保留也可以删除
    onInit() {  //框架初始化配置前,
      this.$nextTick(() => {
        let warehouseIdOption = this.getOption("warehouseId");
        let materielCodeOption = this.getOption("materielCode");
        let purchaseOrderNoOption = this.getOption("purchaseOrderNo");
        let materielQueryOption = this.getOption("materielQuery");
        warehouseIdOption.onChange = (val, option) => {
          this.editFormFields.materielCode = "";
          materielCodeOption.data = [];
          this.editFormFields.purchaseOrderNo = "";
          purchaseOrderNoOption.data = [];
          if (val == null || val == 0) {
            return this.$error("请选择仓库!")
          }
          this.http.post("/api/PurchaseOrderDetail/GetPurchaseOrderDetailMaterielCode?warehouseId=" + val, {}, true).then(
            source => {
              if (!source.status) return this.$error(source.message);
              this.$nextTick(() => {
        this.editFormOptions.forEach((option) => {
          option.forEach((item) => {
            if (item.field == 'materielCode') {
              //初始化弹出框选择器配置
              item.extra = {
                icon: 'el-icon-zoom-out', //显示图标
                text: '选择数据', //显示文本
                style: 'color: #3a8ee6;font-size: 13px;cursor: pointer;',
                //触发事件
                click: (item) => {
                  this.$refs.modelHeader.open(this.editFormFields.warehouseId);
                }
              };
            }
          });
        });
        this.editFormOptions.forEach((option) => {
          option.forEach((item) => {
            if (item.field == 'purchaseOrderNo') {
              //初始化弹出框选择器配置
              item.extra = {
                icon: 'el-icon-zoom-out', //显示图标
                text: '选择数据', //显示文本
                style: 'color: #3a8ee6;font-size: 13px;cursor: pointer;',
                //触发事件
                click: (item) => {
                  this.$refs.modelBody.open(this.editFormFields.materielCode);
                }
              };
            }
          });
        });
        // warehouseIdOption.onChange = (val, option) => {
        //   this.editFormFields.materielCode = "";
        //   materielCodeOption.data = [];
        //   this.editFormFields.purchaseOrderNo = "";
        //   purchaseOrderNoOption.data = [];
        //   if (val == null || val == 0) {
        //     return this.$error("请选择仓库!")
        //   }
        //   this.http.post("/api/PurchaseOrderDetail/GetPurchaseOrderDetailMaterielCode?warehouseId=" + val, {}, true).then(
        //     source => {
        //       if (!source.status) return this.$error(source.message);
        //       this.$nextTick(() => {
                for (let i = 0; i < source.data.length; i++) {
                  materielCodeOption.data.push({ key: source.data[i], value: source.data[i] })
                }
              })
            })
        }
        materielCodeOption.onChange = (val, option) => {
          this.editFormFields.purchaseOrderNo = "";
          purchaseOrderNoOption.data = [];
          if (val == null || val == 0) {
            return this.$error("请选择物料编号!")
          }
          this.http.post("/api/PurchaseOrderDetail/GetPurchaseOrderNos?materielCode=" + val, {}, true).then(
            source => {
              if (!source.status) return this.$error(source.message);
              this.$nextTick(() => {
                for (let i = 0; i < source.data.length; i++) {
                  purchaseOrderNoOption.data.push({ key: source.data[i], value: source.data[i] })
                }
              });
            })
        }
        //         for (let i = 0; i < source.data.length; i++) {
        //           materielCodeOption.data.push({ key: source.data[i], value: source.data[i] })
        //         }
        //       })
        //     })
        // }
        // materielCodeOption.onChange = (val, option) => {
        //   this.editFormFields.purchaseOrderNo = "";
        //   purchaseOrderNoOption.data = [];
        //   if (val == null || val == 0) {
        //     return this.$error("请选择物料编号!")
        //   }
        //   this.http.post("/api/PurchaseOrderDetail/GetPurchaseOrderNos?materielCode=" + val, {}, true).then(
        //     source => {
        //       if (!source.status) return this.$error(source.message);
        //       this.$nextTick(() => {
        //         for (let i = 0; i < source.data.length; i++) {
        //           purchaseOrderNoOption.data.push({ key: source.data[i], value: source.data[i] })
        //         }
        //       });
        //     })
        // }
      });
      this.columns.push({
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/basic/materielCodeInfo.vue
@@ -31,7 +31,6 @@
      warehouseId: "",
      purchaseOrderNo: "",
      materielCode: "",
      materielQuery:"",
      productionDate: "",
      effectiveDate: "",
    });
@@ -47,30 +46,18 @@
        },
      ],
      [
        {
          title: "搜索物料",
          field: "materielQuery",
          type: "string",
          required: true,
        },
      ],
      [
        
        {
          title: "物料编码",
          field: "materielCode",
          type: "select",
          data: [],
          required: true,
          type: "string",
        },
      ],
      [
        {
          title: "采购单号",
          field: "purchaseOrderNo",
          type: "select",
          data: [],
          required: true,
          type: "string",
        },
      ],
      [
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/123043ec-a235-4994-bbaf-1853882028ac.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/16bda44f-cb60-43e3-8deb-16983a6c8720.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/3a86d184-9f6a-4b52-8eb2-6a125517673d.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/5522edfe-1b4b-4136-8bdb-deca45c9c98e.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/bcaff427-9b5a-40c5-b7b6-df06507540f9.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/fed89d2c-c26e-4f31-9fa3-8a0b7f92a8fd.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/MaterielCodeInfoService.cs
@@ -16,8 +16,21 @@
{
    public class MaterielCodeInfoService : ServiceBase<Dt_MaterielCodeInfo, IMaterielCodeInfoRepository>, IMaterielCodeInfoService
    {
        public MaterielCodeInfoService(IMaterielCodeInfoRepository BaseDal) : base(BaseDal)
        private readonly IBasicRepository _basicRepository;
        public MaterielCodeInfoService(IMaterielCodeInfoRepository BaseDal, IBasicRepository basicRepository) : base(BaseDal)
        {
            _basicRepository = basicRepository;
        }
        public override WebResponseContent AddData(SaveModel saveModel)
        {
            string? MaterialCode = saveModel.MainData["materielCode"].ToString();
            Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x=>x.MaterielCode== MaterialCode);
            if (materielInfo == null)
            {
                return WebResponseContent.Instance.Error("物料不存在");
            }
            saveModel.MainData.Add(nameof(Dt_MaterielCodeInfo.MaterielName).FirstLetterToLower(), materielInfo.MaterielName);
            return base.AddData(saveModel);
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/AnalysisCodeEnum.cs
@@ -24,6 +24,7 @@
        [Description("外箱码")]
        OutterCode,
        MatSerNumAnalysis
        MatSerNumAnalysis,
        ProSerNumAnalysis
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/AnalysisFormatTypeEnum.cs
@@ -37,10 +37,27 @@
        /// </summary>
        [Description("订单号")]
        ODN,
        /// <summary>
        /// æœ‰æ•ˆæœŸ
        /// </summary>
        [Description("有效期")]
        ED,
        /// <summary>
        /// å‘¨æœŸ
        /// </summary>
        [Description("周期")]
        DC,
        /// <summary>
        /// å‰æ¿æ•°
        /// </summary>
        [Description("叉板数")]
        XQ,
        /// <summary>
        /// PCS数量
        /// </summary>
        [Description("PCS数量")]
        PCSQ,
        /// <summary>
        /// åŽŸå§‹æ•°æ®
        /// </summary>
        [Description("原始数据")]
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/ProSerNumAnalysisModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,52 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.Attributes;
using WIDESEA_Core.CodeConfigEnum;
namespace WIDESEA_DTO.Basic
{
    /// <summary>
    /// æˆå“å†…外包码解析
    /// </summary>
    [AnalysisRule, ModelValidate]
    public class ProSerNumAnalysisModel
    {
        /// <summary>
        /// å†…包号
        /// </summary>
        [AnalysisItemRule(AnalysisFormatTypeEnum.MTC), PropertyValidate("内包号", NotNullAndEmpty = true)]
        public string BagNO { get; set; }
        /// <summary>
        /// äº§å“å·
        /// </summary>
        [AnalysisItemRule(AnalysisFormatTypeEnum.BHN), PropertyValidate("产品号", NotNullAndEmpty = true)]
        public string ProductCode { get; set; }
        /// <summary>
        /// å‘¨æœŸ
        /// </summary>
        [AnalysisItemRule(AnalysisFormatTypeEnum.DC), PropertyValidate("周期", NotNullAndEmpty = true)]
        public string DateCode { get; set; }
        /// <summary>
        /// X板数
        /// </summary>
        [AnalysisItemRule(AnalysisFormatTypeEnum.ED), PropertyValidate("X板数", NotNullAndEmpty = true)]
        public string XQty { get; set; }
        /// <summary>
        /// PCS数量
        /// </summary>
        [AnalysisItemRule(AnalysisFormatTypeEnum.PCSQ), PropertyValidate("PCS数量", NotNullAndEmpty = true)]
        public string OKPCSQTY { get; set; }
        /// <summary>
        /// åŽŸå§‹æ•°æ®
        /// </summary>
        [AnalysisItemRule(AnalysisFormatTypeEnum.BD), PropertyValidate("原始数据", NotNullAndEmpty = true)]
        public string SerialNumber { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/MesProInOrderService.cs
@@ -3,9 +3,13 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.OrderEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.CodeConfigEnum;
using WIDESEA_Core.Helper;
using WIDESEA_DTO.Basic;
using WIDESEA_DTO.MES;
using WIDESEA_IBasicRepository;
using WIDESEA_IInboundRepository;
@@ -19,10 +23,48 @@
    {
        public IMesProInOrderRepository Repository => BaseDal;
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        public MesProInOrderService(IMesProInOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManag) : base(BaseDal)
        private readonly IInboundRepository _inboundRepository;
        public MesProInOrderService(IMesProInOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManag, IInboundRepository inboundRepository) : base(BaseDal)
        {
            _unitOfWorkManage = unitOfWorkManag;
            _inboundRepository = inboundRepository;
        }
        /// <summary>
        /// æˆå“å…¥åº“扫码
        /// </summary>
        /// <param name="Id"></param>
        /// <param name="saveModel"></param>
        /// <returns></returns>
        public WebResponseContent ProInboundScan(int Id,string serNum)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                //获取对应MES成品入库单据
                Dt_MesProInOrder mesProInOrder = BaseDal.Db.Queryable<Dt_MesProInOrder>().Includes(x => x.Details).First();
                if (mesProInOrder==null)
                {
                    return content.Error("当前MES入库单据不存在");
                }
                if (mesProInOrder.MesProStatus>= InOrderStatusEnum.入库完成.ObjToInt())
                {
                    return content.Error("当前单据已入库或关闭状态");
                }
                ProSerNumAnalysisModel model = CodeAnalysisHelper.CodeAnalysis<ProSerNumAnalysisModel>(AnalysisCodeEnum.ProSerNumAnalysis, serNum);
                float SumPCSQty = mesProInOrder.Details.Sum(x => x.OKPCSQTY);
                float OverPCSQty = mesProInOrder.Details.Sum(x=>x.OverInQuantity);
                if ((OverPCSQty+model.OKPCSQTY.ObjToInt())>SumPCSQty)
                {
                    return content.Error($"当前入库订单数量溢出{(OverPCSQty + model.OKPCSQTY.ObjToInt())- SumPCSQty}");
                }
                //获取对应内包明细
                Dt_MesProInOrderDetail? proInOrderDetail = mesProInOrder.Details.FirstOrDefault(x=>x.BagNo==model.BagNO) ?? throw new Exception($"未找到");
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_MaterielCodeInfo.cs
@@ -31,7 +31,7 @@
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 200, ColumnDescription = "物料名称")]
        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "物料名称")]
        public string MaterielName { get; set; }
        /// <summary>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_MesProInOrderDetail.cs
@@ -69,7 +69,7 @@
        /// <summary>
        /// X位
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "X位")]
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "X位")]
        public string XSite { get; set; }
        /// <summary>
        /// ERP工单
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_MesRworkOutboundOrder.cs
@@ -13,7 +13,7 @@
    /// <summary>
    /// æˆå“è¿”工提库出库单
    /// </summary>
    [SugarTable(nameof(Dt_MesPPOutboundOrderDetail), "成品返工提库出库单")]
    [SugarTable(nameof(Dt_MesRworkOutboundOrder), "成品返工提库出库单")]
    public class Dt_MesRworkOutboundOrder : BaseEntity
    {
        /// <summary>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_StockInfoDetail.cs
@@ -84,7 +84,7 @@
        /// <summary>
        /// è£åˆ‡åŽå®½åº¦
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "裁切后宽度")]
        [SugarColumn(IsNullable = true, ColumnDescription = "裁切后宽度")]
        public float CutedWidth { get; set; }
        /// <summary>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs
@@ -944,10 +944,6 @@
                {
                    mesProInOrderDetails.Add(_mapper.Map<Dt_MesProInOrderDetail>(item));
                }
                mesProInOrderDetails.ForEach(x =>
                {
                    x.OverInQuantity = 0;
                });
                Dt_MesProInOrder mesProInOrder = new Dt_MesProInOrder()
                {
                    WarehouseId = warehouse.WarehouseId,
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/MesProInOrderController.cs
@@ -15,5 +15,6 @@
        public MesProInOrderController(IMesProInOrderService service) : base(service)
        {
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs
@@ -9,6 +9,7 @@
using WIDESEA_Core.Helper;
using WIDESEA_DTO;
using WIDESEA_DTO.Inbound;
using WIDESEA_DTO.MES;
using WIDESEA_DTO.Outbound;
using WIDESEA_DTO.System;
using WIDESEA_DTO.Task;
@@ -33,6 +34,7 @@
            CreateMap<Dt_ReceiveOrderDetail, Dt_CheckOrder>().ForMember(a => a.ReceivedQuantity, b => b.MapFrom(x => x.ReceivedQuantity)).ForMember(a => a.MaterielCode, b => b.MapFrom(x => x.MaterielCode)).ForMember(a => a.CheckOrderStatus, b => b.MapFrom(x => CheckOrderStatusEnum.NotCheck.ObjToInt()));
            CreateMap<Dt_Task, WMSTaskDTO>();
            CreateMap<MESBagDetail, Dt_MesProInOrderDetail>().ForMember(x => x.OverInQuantity, b => b.MapFrom(b => 0));
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs
@@ -44,7 +44,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();