wangxinhui
2025-05-13 ad4d32dc4e162ba7fb71cd3bc213f1d71c964551
最新代码上传
已删除5个文件
已修改27个文件
已重命名2个文件
已添加17个文件
1347 ■■■■■ 文件已修改
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/3af1e258-93ea-4eb7-beaf-1a32711c2304.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/44cb5461-c100-4e78-a381-4330ae4ab9de.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/8dd87865-fe22-4130-8231-509473f7b6d4.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/dc43775f-a589-43e0-ab2e-b520b2970e2f.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/成品仓/AGV_CPExtend.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/板材仓/ConveyorLineJob_BC.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/板材仓/RGVJob_BC.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/package-lock.json 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/package.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/extension/inbound/proInStatistics.js 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/proOutboundOrderDetail.vue 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/router/viewGird.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/Index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/charts/AssembleDist.vue 418 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/inbound/proInStatistics.vue 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/inbound/purchaseOrder.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/inbound/takeStockOrder.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/2176e72f-5c08-467b-a195-d29b07fa8150.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/3abc5cd6-1f76-4eec-970e-7b02818d60fc.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/4382f799-a985-4ba2-b4ed-4747dfb56fbd.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/5c317bcb-c94b-4bed-9f83-e46eb803dadb.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/64543623-d20f-4ad8-bb49-9a281bd1f5fd.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/75693363-5582-43f5-be32-c05f8e59864c.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/98f0b9d5-ff15-4c89-a627-e626a260486c.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/d99124c1-6980-4477-97d8-7d3cc479e764.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/MaterielInfoService.cs 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/SupplierInfoService.cs 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/UserInfoService.cs 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpProInErpStaticResponseContent.cs 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/ProInStaticDTO.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/MesSolderModel.cs 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/ERPService/InvokeERPService.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/IERPService/IInvokeERPService.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IProInStatisticsRepository.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IProInStatisticsService.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/ProInStatisticsRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ProInStatisticsService.cs 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_MesProInOrder.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ProInStatistics.cs 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/AssignInboundTaskLocation_BC.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesProductService.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesSolderService.cs 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/ERP/ErpController.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/ProInStatisticsController.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/LargeScreen/LargeController.cs 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/3af1e258-93ea-4eb7-beaf-1a32711c2304.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/44cb5461-c100-4e78-a381-4330ae4ab9de.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/8dd87865-fe22-4130-8231-509473f7b6d4.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/dc43775f-a589-43e0-ab2e-b520b2970e2f.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/³ÉÆ·²Ö/AGV_CPExtend.cs
@@ -55,7 +55,7 @@
                            };
                            if (taskDTO.TaskTyp== "CPC")
                            {
                                taskDTO.Priority = (24 - DateTime.Now.Hour).ToString();
                                taskDTO.Priority = task.Grade.ToString();
                            }
                            if (task.GroupId.IsNotEmptyOrNull())
                            {
@@ -67,10 +67,12 @@
                                throw new Exception(content.Message);
                            if (taskDTO.TaskTyp == "CPC")
                            {
                                task.Dispatchertime = DateTime.Now;
                                _taskService.UpdateTask(task, TaskStatusEnum.AGV_Executing);
                            }
                            else
                            {
                                task.Dispatchertime = DateTime.Now;
                                _taskService.UpdateTask(task, TaskStatusEnum.AGV_Takeing);
                            }
                            Thread.Sleep(500);
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/°å²Ä²Ö/ConveyorLineJob_BC.cs
@@ -228,7 +228,7 @@
                                else//生产退库 //换巷道入库
                                {
                                    #region ç”Ÿäº§é€€åº“,带任务号查询任务
                                    Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == conveyorLineInfoRead.TaskNum && x.NextAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && x.WarehouseId == warehouseDevice.WarehouseId); // å¸¦ä»»åŠ¡å·æŸ¥è¯¢ä»»åŠ¡
                                    Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == conveyorLineInfoRead.TaskNum && x.NextAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && x.WarehouseId == warehouseDevice.WarehouseId && x.TaskState == TaskStatusEnum.Line_Execute.ObjToInt()); // å¸¦ä»»åŠ¡å·æŸ¥è¯¢ä»»åŠ¡
                                    Dt_Task taskIn = _taskRepository.QueryFirst(x => x.TaskNum == conveyorLineInfoRead.TaskNum && _taskService.TaskInboundTypes.Contains(x.TaskType) && x.DeviceCode == item.StationDeviceCode && x.NextAddress == item.StationCode && x.WarehouseId == warehouseDevice.WarehouseId && x.TaskState == TaskStatusEnum.Line_Executing.ObjToInt()); // å¸¦ä»»åŠ¡å·æŸ¥è¯¢ä»»åŠ¡
                                    if (task != null)
                                    {
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/°å²Ä²Ö/RGVJob_BC.cs
@@ -133,7 +133,7 @@
                                        device.SetValue(W_ConveyorLineDB.Spare1, ConveyorWorkTypeEnum.Inbound.ObjToInt(), item.StationCode);
                                        device.SetValue(W_ConveyorLineDB.EndPos, task.NextAddress, item.StationCode);
                                        device.SetValue(W_ConveyorLineDB.ACK, true, item.StationCode);
                                        _taskService.UpdateTask(task, TaskStatusEnum.Line_Executing);
                                        _taskService.UpdateTask(task, TaskStatusEnum.Line_Execute);
                                    }
                                }
                            }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/package-lock.json
@@ -4701,9 +4701,9 @@
      "integrity": "sha512-GODcnWq3YGoTnygPfi02ygEiRxqUxpJwuRHjdhJYuxpcZmDq4rjBiXYmbCCzStxo176ixfLT6i4NPwQooRySnw=="
    },
    "dayjs": {
      "version": "1.11.5",
      "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.5.tgz",
      "integrity": "sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA=="
      "version": "1.11.13",
      "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz",
      "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="
    },
    "debug": {
      "version": "4.3.2",
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/package.json
@@ -14,6 +14,7 @@
    "ali-oss": "^6.17.1",
    "axios": "^0.21.1",
    "core-js": "^3.6.5",
    "dayjs": "^1.11.13",
    "echarts": "^5.0.2",
    "element-plus": "^2.2.14",
    "jsbarcode": "^3.11.6",
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/extension/inbound/proInStatistics.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/proOutboundOrderDetail.vue
@@ -2,6 +2,7 @@
  <div>
    <vol-box
      v-model="dialogFormVisible"
      :on-model-close="closeCustomModel"
      :lazy="true"
      width="20%"
      :padding="15"
@@ -185,6 +186,7 @@
      formLabelWidth: '160px',
      formFields1: {
        LineCode: "",
        Grade: "0",
      },
      formRules1:[[
          {
@@ -201,7 +203,16 @@
            extra: {
              
            },
          }]],
          }],
          [
          {
            title: "是否优先",
            field: "Grade",
            data: [],
            required: false,
            type: "switch",
          },
        ]],
      form: {
        name: '',
        region: '',
@@ -472,17 +483,18 @@
      var keys = this.selection.map((item) => item.id); // èŽ·å–é€‰ä¸­è¡Œçš„id
      this.http
        .post("api/Task/OutProductTask?stationCode="+this.formFields1.LineCode, keys, "数据处理中")
        .post("api/Task/OutProductTask?stationCode="+this.formFields1.LineCode +"&grade="+this.formFields1.Grade, keys, "数据处理中")
        .then((x) => {
          if (!x.status) return this.$message.error(x.message);
          this.$message.success("操作成功");
          this.formFields1.LineCode="";
          this.formFields1.Grade="0";
          this.dialogFormVisible=false;
          this.$parent.refresh();
          this.showDetialBox = false;
          this.$emit("parentCall", ($vue) => {
            $vue.getData();
          });
          this.formFields1.LineCode="";
          this.dialogFormVisible=false;
          this.$parent.refresh();
        });
    },
    setCurrent(row) {
@@ -537,6 +549,12 @@
          }
        });
    },
    closeCustomModel() {
      this.formFields1.LineCode="";
      this.formFields1.Grade="0";
          this.dialogFormVisible=false;
          this.$parent.refresh();
    },
    getDictionary(row, column) {
      if (this.dictionaryList) {
        var item = this.dictionaryList.find((x) => x.dicNo == column.bindKey);
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/router/viewGird.js
@@ -273,6 +273,16 @@
    path: '/materielnfoStatistics',
    name: 'materielnfoStatistics',
    component: () => import('@/views/stock/materielnfoStatistics.vue')
  },
  {
    path: '/materielnfoStatistics',
    name: 'materielnfoStatistics',
    component: () => import('@/views/stock/materielnfoStatistics.vue')
  },
  {
    path: '/proInStatistics',
    name: 'proInStatistics',
    component: () => import('@/views/inbound/proInStatistics.vue')
  }
]
export default viewgird
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/Index.vue
@@ -339,7 +339,7 @@
        console.log("WebSocket è¿žæŽ¥å…³é—­");
        setTimeout(createSocket, 10000);
      };
      //监听socket错误信息
      client.onerror = function () {};
    };
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/charts/AssembleDist.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,418 @@
<template>
  <el-card
    style="border-radius: 0"
    :body-style="{ padding: '1rem 2rem' }"
    v-loading="loading"
  >
    <template #header>
      <div
        style="
          font-weight: bold;
          font-size: 1.2rem;
          height: 2rem;
          line-height: 2rem;
        "
      >
        æˆå“å½“月数据统计 &nbsp; &nbsp;
        <el-button @click="refresh" type="success">刷新</el-button>
      </div>
    </template>
    <div style="display: flex; justify-content: space-between">
      <div ref="operationDom" style="height: 25rem; width: 100%"></div>
    </div>
  </el-card>
</template>
<script setup>
import { ref, onMounted, onUnmounted, nextTick } from "vue";
// å¼•å…¥echarts
import * as echarts from "echarts";
import dayjs from "dayjs";
import { ElLoading } from "element-plus";
import http from "@/../src/api/http.js";
const loading = ref(true);
// åˆ›å»ºä¸€ä¸ªå“åº”式引用来保存DOM元素
const operationDom = ref(null);
let operationChartInstance = null;
let infoChartInstance = null;
const infoDom = ref(null);
const xData = ref([]);
const yData = ref([]);
const refresh =  () => {
  const url = "api/ProInStatistics/GetMonthProductions";
  http.post(url, {}, true).then((result) => {
    loading.value = true;
    operationChartInstance = echarts.init(operationDom.value);
  // infoChartInstance=echarts.init(infoDom.value)
  let dateList = [
    ["2025-5-1", 0],
    ["2025-5-2", 0],
    ["2025-5-3", 0],
    ["2025-5-4", 0],
    ["2025-5-5", 0],
    ["2025-5-6", 0],
    ["2025-5-7", 10050],
    ["2025-5-8", 30000],
    ["2025-5-9", 300000],
    ["2025-5-10", 0],
    ["2025-5-11", 0],
    ["2025-5-12", 0],
    ["2025-5-13", 0],
    ["2025-5-14", 0],
    ["2025-5-15", 0],
    ["2025-5-16", 0],
    ["2025-5-17", 0],
    ["2025-5-18", 0],
    ["2025-5-19", 0],
    ["2025-5-20", 0],
    ["2025-5-21", 0],
    ["2025-5-22", 0],
    ["2025-5-23", 0],
    ["2025-5-24", 0],
    ["2025-5-25", 0],
    ["2025-5-26", 0],
    ["2025-5-27", 0],
    ["2025-5-28", 0],
    ["2025-5-29", 0],
    ["2025-5-30", 0],
    ["2025-5-31", 0],
  ];
  dateList=[];
  const data = result.data;
    data.forEach((item) => {
      dateList.push([item.dateNow, item.dayProDuctions]);
    });
  console.log(dateList);
  const heatmapData = [];
  const lunarData = [];
  for (let i = 0; i < dateList.length; i++) {
    heatmapData.push([dateList[i][0], Math.random() * 300]);
    lunarData.push([dateList[i][0], 1, dateList[i][1], dateList[i][2]]);
  }
  let chartData = [];
  dateList.forEach((item) => {
    chartData.push({
      value: [item[0], item[1]],
      itemStyle:
        item[0] === dayjs().format('YYYY-MM-DD')
          ? {
              borderColor: "red",
            }
          : {}, //当前日期标注边框为红色
      symbol: "rect", // æ ¸å¿ƒ1,长方形来填充
    });
  });
  var option = {
    // tooltip: {
    //   formatter: function (params) {
    //     return '降雨量: ' + params.value[1].toFixed(2);
    //   }
    // },
    visualMap: {
      show: false,
      min: 0,
      max: 300,
      calculable: true,
      seriesIndex: [2],
      orient: "horizontal",
      left: "center",
      bottom: 20,
      inRange: {
        color: ["#e0ffff", "#006edd"],
        opacity: 0.3,
      },
      controller: {
        inRange: {
          opacity: 0.5,
        },
      },
    },
    calendar: {
      left: "center",
      top: 49,
      cellSize: [70, 70],
      orient: "vertical",
      dayLabel: {
        firstDay: 1,
        nameMap: "cn",
      },
      monthLabel: {
        formatter: "{M}月",
      },
      range: "2025-05",
      yearLabel: {
        show: false,
      },
    },
    series: [
      {
        type: "scatter",
        coordinateSystem: "calendar",
        symbolSize(params) {
          //核心2
          if (params[0] === dayjs().format('YYYY-MM-DD')) {
            return 70; //当前日期高亮 å®½åº¦é«˜åº¦è®¾ç½®æˆå’Œå•元格宽度高度一样
          } else {
            return 1;
          }
        },
        label: {
          show: true,
          formatter: function (params) {
            var d = echarts.number.parseDate(params.value[0]);
            if (params.value[0] === dayjs().format('YYYY-MM-DD')) {
              return d.getDate() + "\n\n当日入仓量\n\n";
            }
            return d.getDate() + "\n\n入仓量\n\n";
          },
          color: "#000",
        },
        data: chartData,
        silent: true,
      },
      {
        type: "scatter",
        coordinateSystem: "calendar",
        symbolSize: 0,
        label: {
          show: true,
          formatter: function (params) {
            return (
              "\n\n\n" +
              (params.value[1] && params.value[1] != undefined
                ? params.value[1] + "㎡"
                : "0㎡")
            );
          },
          fontSize: 14,
          fontWeight: 700,
          color: "#a00",
        },
        data: chartData,
        silent: true,
      },
      // {
      //   type: 'scatter',
      //   coordinateSystem: 'calendar',
      //   symbolSize: 0,
      //   label: {
      //     show: true,
      //     formatter: function (params) {
      //       return '\n\n\n' + (params.value[3]?params.value[3]+'㎡' : '');
      //     },
      //     fontSize: 14,
      //     fontWeight: 700,
      //     color: '#a00'
      //   },
      //   data: lunarData,
      //   silent: true
      // },
    ],
  };
  operationChartInstance.setOption(option);
  // infoChartInstance.setOption(option);
  nextTick(() => {
    loading.value = false;
  });
  });
};
// åˆå§‹åŒ–ECharts实例并设置配置项(这里以折线图为例,但可灵活替换)
onMounted(async () => {
  await nextTick(); // ç¡®ä¿DOM已经渲染完成
  const url = "api/ProInStatistics/GetMonthProductions";
  http.post(url, {}, true).then((result) => {
  operationChartInstance = echarts.init(operationDom.value);
  // infoChartInstance=echartss.init(infoDom.value)
  let dateList = [
    ["2025-5-1", 0],
    ["2025-5-2", 0],
    ["2025-5-3", 0],
    ["2025-5-4", 0],
    ["2025-5-5", 0],
    ["2025-5-6", 0],
    ["2025-5-7", 10050],
    ["2025-5-8", 30000],
    ["2025-5-9", 300000],
    ["2025-5-10", 0],
    ["2025-5-11", 0],
    ["2025-5-12", 0],
    ["2025-5-13", 0],
    ["2025-5-14", 0],
    ["2025-5-15", 0],
    ["2025-5-16", 0],
    ["2025-5-17", 0],
    ["2025-5-18", 0],
    ["2025-5-19", 0],
    ["2025-5-20", 0],
    ["2025-5-21", 0],
    ["2025-5-22", 0],
    ["2025-5-23", 0],
    ["2025-5-24", 0],
    ["2025-5-25", 0],
    ["2025-5-26", 0],
    ["2025-5-27", 0],
    ["2025-5-28", 0],
    ["2025-5-29", 0],
    ["2025-5-30", 0],
    ["2025-5-31", 0],
  ];
  dateList=[];
  const data = result.data;
    data.forEach((item) => {
      dateList.push([item.dateNow, item.dayProDuctions]);
    });
  console.log(dateList);
  const heatmapData = [];
  const lunarData = [];
  for (let i = 0; i < dateList.length; i++) {
    heatmapData.push([dateList[i][0], Math.random() * 300]);
    lunarData.push([dateList[i][0], 1, dateList[i][1], dateList[i][2]]);
  }
  let chartData = [];
  dateList.forEach((item) => {
    chartData.push({
      value: [item[0], item[1]],
      itemStyle:
        item[0] === dayjs().format('YYYY-MM-DD')
          ? {
              borderColor: "red",
            }
          : {}, //当前日期标注边框为红色
      symbol: "rect", // æ ¸å¿ƒ1,长方形来填充
    });
  });
  var option = {
    // tooltip: {
    //   formatter: function (params) {
    //     return '降雨量: ' + params.value[1].toFixed(2);
    //   }
    // },
    visualMap: {
      show: false,
      min: 0,
      max: 300,
      calculable: true,
      seriesIndex: [2],
      orient: "horizontal",
      left: "center",
      bottom: 20,
      inRange: {
        color: ["#e0ffff", "#006edd"],
        opacity: 0.3,
      },
      controller: {
        inRange: {
          opacity: 0.5,
        },
      },
    },
    calendar: {
      left: "center",
      top: 49,
      cellSize: [70, 70],
      orient: "vertical",
      dayLabel: {
        firstDay: 1,
        nameMap: "cn",
      },
      monthLabel: {
        formatter: "{M}月",
      },
      range: "2025-05",
      yearLabel: {
        show: false,
      },
    },
    series: [
      {
        type: "scatter",
        coordinateSystem: "calendar",
        symbolSize(params) {
          //核心2
          if (params[0] === dayjs().format('YYYY-MM-DD')) {
            return 70; //当前日期高亮 å®½åº¦é«˜åº¦è®¾ç½®æˆå’Œå•元格宽度高度一样
          } else {
            return 1;
          }
        },
        label: {
          show: true,
          formatter: function (params) {
            var d = echarts.number.parseDate(params.value[0]);
            if (params.value[0] === dayjs().format('YYYY-MM-DD')) {
              return d.getDate() + "\n\n当日入仓量\n\n";
            }
            return d.getDate() + "\n\n入仓量\n\n";
          },
          color: "#000",
        },
        data: chartData,
        silent: true,
      },
      {
        type: "scatter",
        coordinateSystem: "calendar",
        symbolSize: 0,
        label: {
          show: true,
          formatter: function (params) {
            return (
              "\n\n\n" +
              (params.value[1] && params.value[1] != undefined
                ? params.value[1] + "㎡"
                : "0㎡")
            );
          },
          fontSize: 14,
          fontWeight: 700,
          color: "#a00",
        },
        data: chartData,
        silent: true,
      },
      // {
      //   type: 'scatter',
      //   coordinateSystem: 'calendar',
      //   symbolSize: 0,
      //   label: {
      //     show: true,
      //     formatter: function (params) {
      //       return '\n\n\n' + (params.value[3]?params.value[3]+'㎡' : '');
      //     },
      //     fontSize: 14,
      //     fontWeight: 700,
      //     color: '#a00'
      //   },
      //   data: lunarData,
      //   silent: true
      // },
    ],
  };
  operationChartInstance.setOption(option);
});
  // infoChartInstance.setOption(option);
  nextTick(() => {
    loading.value = false;
  });
});
// é”€æ¯ECharts实例
onUnmounted(() => {
  if (operationChartInstance != null && operationChartInstance.dispose) {
    operationChartInstance.dispose();
  }
});
//窗口大小变化重绘echart
window.onresize = function () {
  if (operationChartInstance != null && operationChartInstance.resize) {
    operationChartInstance.resize();
  }
};
</script>
<style></style>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/inbound/proInStatistics.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,133 @@
<template>
    <div>
      <assemble-dist></assemble-dist>
    </div>
    <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/proInStatistics.js";
  import { ref, defineComponent } from "vue";
  import AssembleDistVue from '../charts/AssembleDist.vue';
  export default defineComponent({
    components: {
      'assemble-dist': AssembleDistVue,
    },
    setup() {
      const table = ref({
        key: "id",
        footer: "Foots",
        cnName: "成品入库统计",
        name: "proInStatistics",
        url: "/proInStatistics/",
        sortName: "id",
      });
      const editFormFields = ref({
      });
      const editFormOptions = ref([
        [
        ],
      ]);
      const searchFormFields = ref({
        warehouseId: "",
        productCode: "",
        productRev: "",
      });
      const searchFormOptions = ref([
        [
        { title: "产品编码", field: "productCode",type: "like"},
          {
            title: "仓库",
            field: "warehouseId",
            type: "select",
            dataKey: "warehouses",
            data: []
        },
        { title: "产品版本", field: "productRev",type: "like"},
        ],
      ]);
      const columns = ref([
        {
          field: "id",
          title: "Id",
          type: "int",
          width: 90,
          hidden: true,
          readonly: true,
          require: true,
          align: "left",
        },
        {
          field: "warehouseId",
          title: "所属仓库",
          type: "string",
          width: 120,
          align: "left",
          bind: { key: "warehouses", data: [] },
        },
        {
          field: "productCode",
          title: "产品型号",
          type: "string",
          width: 150,
          align: "left",
        },
        {
          field: "productRev",
          title: "产品版本",
          type: "string",
          width: 90,
          align: "left",
        },
        {
          field: "pcsQty",
          title: "包装Pcs数量",
          type: "string",
          width: 120,
          align: "left",
        },
        {
          field: "squareMeter",
          title: "面积(㎡)",
          type: "string",
          width: 200,
          align: "left",
        },
        {
          field: "createDate",
          title: "创建时间",
          type: "datetime",
          width: 160,
          align: "left",
        },
        {
          field: "modifyDate",
          title: "修改时间",
          type: "datetime",
          width: 160,
          align: "left",
        }
      ]);
      const detail = ref({
        cnName: "#detailCnName",
        table: "",
        columns: [],
        sortName: "",
      });
      return {
        table,
        extend,
        editFormFields,
        editFormOptions,
        searchFormFields,
        searchFormOptions,
        columns,
        detail,
      };
    },
  });
  </script>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/inbound/purchaseOrder.vue
@@ -153,6 +153,7 @@
        type: "datetime",
        width: 160,
        align: "left",
      },
      {
        field: "modifier",
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/inbound/takeStockOrder.vue
@@ -1,5 +1,8 @@
<template>
    <!-- <div>
      <assemble-dist></assemble-dist>
    </div> -->
    <view-grid
      ref="grid"
      :columns="columns"
@@ -13,12 +16,17 @@
    >
    </view-grid>
  </template>
        <script>
<script>
  import extend from "@/extension/inbound/takeStockOrder.js";
  import { ref, defineComponent } from "vue";
  // import AssembleDistVue from '../charts/AssembleDist.vue';
  export default defineComponent({
    // components: {
    //   'assemble-dist': AssembleDistVue,
    // },
    setup() {
      const table = ref({
      //使用组件AssembleDist
      const table = ref({
        key: "id",
        footer: "Foots",
        cnName: "盘点单",
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/2176e72f-5c08-467b-a195-d29b07fa8150.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/3abc5cd6-1f76-4eec-970e-7b02818d60fc.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/4382f799-a985-4ba2-b4ed-4747dfb56fbd.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/5c317bcb-c94b-4bed-9f83-e46eb803dadb.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/64543623-d20f-4ad8-bb49-9a281bd1f5fd.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/75693363-5582-43f5-be32-c05f8e59864c.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/98f0b9d5-ff15-4c89-a627-e626a260486c.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/d99124c1-6980-4477-97d8-7d3cc479e764.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/MaterielInfoService.cs
@@ -109,26 +109,48 @@
                    Dt_MaterielInfo materielInfo = BaseDal.QueryFirst(x => x.MaterielCode == model.Code);
                    if (materielInfo == null)
                    {
                        return WebResponseContent.Instance.Error($"未找到物料信息");
                        Dt_MaterielInfo materielInfoAddNew = new Dt_MaterielInfo()
                        {
                            IsCheck = warehouse == null ? 0 : (WhetherEnum)model.IsCheck,
                            MaterielCode = model.Code,
                            MaterielInvOrgId = model.InvOrgId,
                            MaterielLength = model.Length,
                            MaterielModel = model.Model,
                            MaterielName = model.Name,
                            MaterielSize = model.Size,
                            MaterielSourceType = (MaterielSourceTypeEnum)(model.ItemSourceType.ObjToInt()),
                            MaterielSpec = warehouse == null ? "空" : model.StandType,
                            MaterielState = (EnableEnum)(model.State.ObjToInt()),
                            MaterielThickness = model.Thickness,
                            MaterielType = (MaterielTypeEnum)(model.ItemType.ObjToInt()),
                            MaterielUnit = model.Unit == null ? "" : model.Unit,
                            MaterielVersion = model.MaterialVersion,
                            MaterielWide = model.Wide,
                            WarehouseId = warehouse == null ? 0 : warehouse.WarehouseId,
                        };
                        BaseDal.AddData(materielInfoAddNew);
                    }
                    materielInfo.IsCheck = warehouse == null ? 0 : (WhetherEnum)model.IsCheck;
                    materielInfo.MaterielCode = model.Code;
                    materielInfo.MaterielInvOrgId = model.InvOrgId;
                    materielInfo.MaterielLength = model.Length;
                    materielInfo.MaterielModel = model.Model;
                    materielInfo.MaterielName = model.Name;
                    materielInfo.MaterielSize = model.Size;
                    materielInfo.MaterielSourceType = (MaterielSourceTypeEnum)model.ItemSourceType.ObjToInt();
                    materielInfo.MaterielSpec = warehouse == null ? "" : model.StandType;
                    materielInfo.MaterielState = (EnableEnum)model.State.ObjToInt();
                    materielInfo.MaterielThickness = model.Thickness;
                    materielInfo.MaterielType = (MaterielTypeEnum)model.ItemType.ObjToInt();
                    materielInfo.MaterielUnit = model.Unit == null ? "" : model.Unit;
                    materielInfo.MaterielVersion = model.MaterialVersion;
                    materielInfo.MaterielWide = model.Wide;
                    materielInfo.WarehouseId = warehouse == null ? 0 : warehouse.WarehouseId;
                    BaseDal.UpdateData(materielInfo);
                    else
                    {
                        materielInfo.IsCheck = warehouse == null ? 0 : (WhetherEnum)model.IsCheck;
                        materielInfo.MaterielCode = model.Code;
                        materielInfo.MaterielInvOrgId = model.InvOrgId;
                        materielInfo.MaterielLength = model.Length;
                        materielInfo.MaterielModel = model.Model;
                        materielInfo.MaterielName = model.Name;
                        materielInfo.MaterielSize = model.Size;
                        materielInfo.MaterielSourceType = (MaterielSourceTypeEnum)model.ItemSourceType.ObjToInt();
                        materielInfo.MaterielSpec = warehouse == null ? "" : model.StandType;
                        materielInfo.MaterielState = (EnableEnum)model.State.ObjToInt();
                        materielInfo.MaterielThickness = model.Thickness;
                        materielInfo.MaterielType = (MaterielTypeEnum)model.ItemType.ObjToInt();
                        materielInfo.MaterielUnit = model.Unit == null ? "" : model.Unit;
                        materielInfo.MaterielVersion = model.MaterialVersion;
                        materielInfo.MaterielWide = model.Wide;
                        materielInfo.WarehouseId = warehouse == null ? 0 : warehouse.WarehouseId;
                        BaseDal.UpdateData(materielInfo);
                    }
                }
                else if (model.OperateType.ObjToInt() == 2)
                {
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/SupplierInfoService.cs
@@ -48,13 +48,30 @@
                    Dt_SupplierInfo supplierInfo = BaseDal.QueryFirst(x => x.SupplierCode == model.Code);
                    if (supplierInfo == null)
                    {
                        return WebResponseContent.Instance.Error($"未找到该供应商信息");
                        Dt_SupplierInfo supplierInfoAddNew = new Dt_SupplierInfo()
                        {
                            Status = 1,
                            SupplierCode = model.Code,
                            ContactAddress = model.ContactAddress,
                            ContactNumber = model.ContactNumber,
                            Contacts = model.Contacts,
                            Description = model.Description,
                            Email = model.Email,
                            InvOrgId = model.InvOrgId,
                            SupplierName = model.Name,
                            SupplierShortName = model.ShortName
                        };
                        BaseDal.AddData(supplierInfoAddNew);
                    }
                    supplierInfo.Status = 1;
                    supplierInfo.SupplierCode = model.Code;
                    supplierInfo.SupplierName = model.Name;
                    supplierInfo.SupplierShortName = model.ShortName;
                    BaseDal.UpdateData(supplierInfo);
                    else
                    {
                        supplierInfo.Status = 1;
                        supplierInfo.SupplierCode = model.Code;
                        supplierInfo.SupplierName = model.Name;
                        supplierInfo.SupplierShortName = model.ShortName;
                        BaseDal.UpdateData(supplierInfo);
                    }
                }
                else if (model.OperateType == "2")
                {
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/UserInfoService.cs
@@ -61,14 +61,40 @@
                    Dt_UserInfo userInfo = BaseDal.QueryFirst(x => x.Code == model.Code);
                    if (userInfo == null)
                    {
                        return WebResponseContent.Instance.Error($"未找到该员工号【{model.Code}】信息");
                        Dt_UserInfo userInfoAddNew = new Dt_UserInfo()
                        {
                            Code = model.Code,
                            DeptName = model.DeptName,
                            DeptNo = model.DeptNo,
                            InvOrgId = model.InvOrgId,
                            Name = model.Name,
                            State = model.State
                        };
                        Sys_User userAddNew = new Sys_User()
                        {
                            UserName = userInfo.Code,
                            RoleId = 0,
                            UserPwd = "TC123456".EncryptDES(AppSecret.User),
                            RoleName = "",
                            Enable = (byte)userInfo.State,
                            LastModifyPwdDate = DateTime.Now,
                            Address = "系统服务器",
                            TenantId = 0,
                            Creater = "系统",
                            UserTrueName = userInfo.Name,
                        };
                        BaseDal.AddData(userInfoAddNew);
                        _userRepository.AddData(userAddNew);
                    }
                    userInfo.State = model.State;
                    userInfo.DeptName = model.DeptName;
                    userInfo.DeptNo = model.DeptNo;
                    userInfo.InvOrgId = model.InvOrgId;
                    userInfo.Name = model.Name;
                    BaseDal.UpdateData(userInfo);
                    else
                    {
                        userInfo.State = model.State;
                        userInfo.DeptName = model.DeptName;
                        userInfo.DeptNo = model.DeptNo;
                        userInfo.InvOrgId = model.InvOrgId;
                        userInfo.Name = model.Name;
                        BaseDal.UpdateData(userInfo);
                    }
                }
                else if (model.OperateType == "2")
                {
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs
@@ -38,6 +38,11 @@
        [Description("ERP成品订单客户查询接口调用")]
        InvokeErpOutProErpSyncApi,
        /// <summary>
        /// ERP成品入库产品型号面积查询接口
        /// </summary>
        [Description("ERP成品入库产品型号面积查询接口")]
        InvokeProInErpStatic,
        /// <summary>
        /// MES同步测试架台账信息
        /// </summary>
        [Description("MES同步测试架台账信息")]
@@ -48,6 +53,11 @@
        [Description("MES同步板料出库")]
        WMS_MES_MaterialLotaAcept,
        /// <summary>
        /// MES接口获取批次信息ZH
        /// </summary>
        [Description("MES接口获取批次信息ZH")]
        WMS_MES_GetProductByLot,
        /// <summary>
        /// MES同步成品出库
        /// </summary>
        [Description("MES同步成品出库")]
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpProInErpStaticResponseContent.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,53 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_DTO.ERP
{
    /// <summary>
    /// æˆå“åº“存面积接收返参
    /// </summary>
    public class ErpProInErpStaticResponseContent
    {
        /// <summary>
        /// è¿”回码
        /// </summary>
        public int Code { get; set; }
        /// <summary>
        /// è¿”回信息
        /// </summary>
        public string Msg { get; set; }
        /// <summary>
        /// åº“存信息
        /// </summary>
        public List<ProInStatic> Data { get; set; }
    }
    /// <summary>
    /// å‚æ•°
    /// </summary>
    public class ProInStatic
    {
        /// <summary>
        /// ç”Ÿäº§ç‰ˆæœ¬
        /// </summary>
        public string PartRev { get; set; }
        /// <summary>
        /// ç”Ÿäº§åž‹å·
        /// </summary>
        public string PartNum { get; set; }
        /// <summary>
        /// ç›®å‰å›ºå®šä¸º1
        /// </summary>
        public string Jbfl { get; set; }
        /// <summary>
        /// å•元面积
        /// </summary>
        public float UnitArea { get; set; }
        /// <summary>
        /// ç”Ÿäº§åž‹å·+生产版本
        /// </summary>
        public string PartNumWithRev { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/ProInStaticDTO.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_DTO.Inbound
{
    /// <summary>
    ///
    /// </summary>
    public class ProInStaticDTO
    {
        public string ProductCode { get; set; }
        public string ProductVersion { get; set; }
        public float SumPcs { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/MesSolderModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_DTO.MES
{
    /// <summary>
    /// MES阻焊获取批次物料信息
    /// </summary>
    public class MesSolderModel
    {
        /// <summary>
        /// æ–™å·
        /// </summary>
        public string Product { get; set; }
        /// <summary>
        /// ç‰ˆæœ¬
        /// </summary>
        public string ProductVersion { get; set; }
        /// <summary>
        /// æ•°é‡
        /// </summary>
        public float Qty { get; set; }
        /// <summary>
        /// å‘¨æœŸ
        /// </summary>
        public string DateCode { get; set; }
        /// <summary>
        /// æ‰¹æ¬¡
        /// </summary>
        public string LotNo { get; set; }
        /// <summary>
        /// æ˜¯å¦æ»¡Lot
        /// </summary>
        public string IsFullNumber { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_External/ERPService/InvokeERPService.cs
@@ -192,6 +192,22 @@
            return response;
        }
        /// <summary>
        /// ERP成品入库产品型号面积查询
        /// </summary>
        /// <returns></returns>
        public string InvokeProInErpStatic(string partNum,string partNumWithRev)
        {
            Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.InvokeProInErpStatic.ToString());
            object inObj = new { partNum, partNumWithRev };
            string request = JsonConvert.SerializeObject(inObj, settings);
            Dictionary<string, string> requestHeader = new Dictionary<string, string>
            {
                { "AccessToken", "TCKJF60B03C07E8E41B0B3CF759B7B01AB81HATC"},
            };
            string response = HttpHelper.Post(apiInfo.ApiAddress, request, headers: requestHeader);
            return response;
        }
        /// <summary>
        /// ERP成品入库上报接口调用
        /// </summary>
        public string InvokeProInApi(ERPProInboundModel inboundModel)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_External/IERPService/IInvokeERPService.cs
@@ -86,5 +86,10 @@
        /// </summary>
        /// <returns></returns>
        string InvokeOutProErpSync(string outProOrderNo);
        /// <summary>
        /// ERP成品入库产品型号面积查询
        /// </summary>
        /// <returns></returns>
        string InvokeProInErpStatic(string partNum, string partNumWithRev);
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IProInStatisticsRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_IInboundRepository
{
    public interface IProInStatisticsRepository : IRepository<Dt_ProInStatistics>
    {
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IProInStatisticsService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core;
using WIDESEA_Core.BaseServices;
using WIDESEA_DTO.MES;
using WIDESEA_IInboundRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_IInboundService
{
    public interface IProInStatisticsService : IService<Dt_ProInStatistics>
    {
        IProInStatisticsRepository Repository { get; }
        void SaveStatic(MesBagInfoModel mesBagInfoModel);
        WebResponseContent GetMonthProductions();
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs
@@ -354,7 +354,7 @@
        /// <param name="ProOutNo">出库订单号</param>
        /// <param name="StationCode">站台地址</param>
        /// <returns></returns>
        Task<WebResponseContent> OutProductTask(int[] keys, string StationCode);
        Task<WebResponseContent> OutProductTask(int[] keys, string StationCode, int Grade);
        /// <summary>
        /// æˆå“ä½™æ–™é€€åº“入仓
        /// </summary>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/ProInStatisticsRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseRepository;
using WIDESEA_IInboundRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_InboundRepository
{
    public class ProInStatisticsRepository : RepositoryBase<Dt_ProInStatistics>, IProInStatisticsRepository
    {
        public ProInStatisticsRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
        {
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ProInStatisticsService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,95 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Helper;
using WIDESEA_DTO.ERP;
using WIDESEA_DTO.Inbound;
using WIDESEA_DTO.MES;
using WIDESEA_External.ERPService;
using WIDESEA_IBasicRepository;
using WIDESEA_IInboundRepository;
using WIDESEA_IInboundService;
using WIDESEA_Model.Models;
namespace WIDESEA_InboundService
{
    public class ProInStatisticsService : ServiceBase<Dt_ProInStatistics, IProInStatisticsRepository>, IProInStatisticsService
    {
        public IProInStatisticsRepository Repository => BaseDal;
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        private readonly IInvokeERPService _invokeERPService;
        private readonly IBasicRepository _basicRepository;
        public ProInStatisticsService(IProInStatisticsRepository BaseDal, IUnitOfWorkManage unitOfWorkManag,IInvokeERPService invokeERPService,IBasicRepository basicRepository) : base(BaseDal)
        {
            _unitOfWorkManage = unitOfWorkManag;
            _invokeERPService = invokeERPService;
            _basicRepository = basicRepository;
        }
        public void SaveStatic(MesBagInfoModel mesBagInfoModel)
        {
            List<ProInStaticDTO> mESBagDetails = mesBagInfoModel.BagDetails.GroupBy(x=>new { x.ProductCode, x.ProductVersion }).Select(x=>new ProInStaticDTO
            {
                ProductCode= x.Key.ProductCode,
                ProductVersion= x.Key.ProductVersion,
                SumPcs=x.Sum(x => x.OKPCSQTY)
            }).ToList();
            List<Dt_ProInStatistics> proInStatistics= new List<Dt_ProInStatistics>();
            Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseCode==mesBagInfoModel.WarehouseCode);
            foreach (var m in mESBagDetails)
            {
                string response = _invokeERPService.InvokeProInErpStatic(m.ProductCode, m.ProductCode + m.ProductVersion);
                ErpProInErpStaticResponseContent erpProInErpStatic = response.DeserializeObject<ErpProInErpStaticResponseContent>();
                if (erpProInErpStatic.Code != 200)
                {
                    return;
                }
                float adjusted = (float)Math.Round(erpProInErpStatic.Data[0].UnitArea, 3);
                Dt_ProInStatistics inStatistics = new Dt_ProInStatistics()
                {
                    WarehouseId = warehouse.WarehouseId,
                    ProductCode = m.ProductCode,
                    ProductRev = m.ProductVersion,
                    PcsQty = m.SumPcs,
                    SquareMeter = (float)Math.Round((adjusted * m.SumPcs), 3),
                    Remark = mesBagInfoModel.BatchNo
                };
                proInStatistics.Add(inStatistics);
            }
            BaseDal.AddData(proInStatistics);
        }
        /// <summary>
        /// èŽ·å–æœˆä»½äº§é‡
        /// </summary>
        /// <returns></returns>
        public WebResponseContent GetMonthProductions()
        {
            WebResponseContent content=new WebResponseContent();
            try
            {
                DateTime date = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
                List<object> list = new List<object>();
                //本月总天数
                int daysInMonth = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);
                for (int i = 1; i <= daysInMonth; i++)
                {
                    DateTime dateTime = date.AddDays(i);
                    //获取数据
                    var dayProDuctions = BaseDal.QueryData(x => x.CreateDate <= dateTime && x.CreateDate >= dateTime.AddDays(-1)).Sum(x => x.SquareMeter);
                    list.Add(new { dateNow= dateTime.AddHours(-1).ToString("yyyy-MM-dd"), dayProDuctions });
                }
                content.OK("成功",list);
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_MesProInOrder.cs
@@ -59,7 +59,7 @@
        /// <summary>
        /// ä¸Šä¼ ERP状态
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "上传ERP状态")]
        [SugarColumn(IsNullable = true, ColumnDescription = "上传ERP状态")]
        public int UpErpStatus { get; set; }
        /// <summary>
        /// å¤‡æ³¨
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ProInStatistics.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
using Magicodes.ExporterAndImporter.Core;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.DB.Models;
namespace WIDESEA_Model.Models
{
    /// <summary>
    /// æˆå“å…¥åº“统计表
    /// </summary>
    [SugarTable(nameof(Dt_ProInStatistics), "成品入库统计表")]
    public class Dt_ProInStatistics : BaseEntity
    {
        /// <summary>
        /// ä¸»é”®
        /// </summary>
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主键")]
        public int Id { get; set; }
        /// <summary>
        /// ä»“库主键
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "仓库主键")]
        public int WarehouseId { get; set; }
        /// <summary>
        /// äº§å“åž‹å·
        /// </summary>
        [ExporterHeader(DisplayName = "产品型号")]
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "产品型号")]
        public string ProductCode { get; set; }
        /// <summary>
        /// äº§å“ç‰ˆæœ¬
        /// </summary>
        [ExporterHeader(DisplayName = "产品版本")]
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "产品版本")]
        public string ProductRev { get; set; }
        /// <summary>
        /// PCS数
        /// </summary>
        [ExporterHeader(DisplayName = "PCS数")]
        [SugarColumn(IsNullable = false, ColumnDescription = "PCS数")]
        public float PcsQty { get; set; }
        /// <summary>
        /// é¢ç§¯
        /// </summary>
        [ExporterHeader(DisplayName = "面积(㎡)")]
        [SugarColumn(IsNullable = false, ColumnDescription = "面积(㎡)")]
        public float SquareMeter { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [ExporterHeader(DisplayName = "胶框号")]
        [SugarColumn(IsNullable = false, ColumnDescription = "备注")]
        public string Remark { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/AssignInboundTaskLocation_BC.cs
@@ -230,7 +230,7 @@
                    roadwayNo = location?.RoadwayNo ?? "";
                    break;
                }
                return !string.IsNullOrEmpty(roadwayNo) ? WebResponseContent.Instance.OK(data: roadwayNo) : WebResponseContent.Instance.Error("未找到可分配巷道");
                return !string.IsNullOrEmpty(roadwayNo) ? WebResponseContent.Instance.OK(data: roadwayNo) : WebResponseContent.Instance.Error("未找到可分配巷道"+ $":{locationCounts.Serialize()}");
            }
            catch (Exception ex)
            {
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesProductService.cs
@@ -78,12 +78,10 @@
                    {
                        return content.Error(inProRespone.Message);
                    }
                    _proInStatisticsService.SaveStatic(bagInfoModel);
                    return content.OK(inProRespone.Message);
                }
                else if (isValid)
                {
                }
                foreach (var item in bagInfoModel.BagDetails)
                {
                    if (proDetailsExists.Contains(item.BagNo))
@@ -170,9 +168,9 @@
                int taskId = BaseDal.AddData(newTask);
                newTask.TaskId = taskId;
                Db.InsertNav(proStockInfo).Include(x => x.proStockInfoDetails).ExecuteCommand();
                //上传ERP
                WebResponseContent responseContent = _inboundOrderService.FeedbackProIn(mesProInOrder);
                _proInStatisticsService.SaveStatic(bagInfoModel);
                if (!responseContent.Status)
                {
                    mesProInOrder.UpErpStatus = WhetherEnum.False.ObjToInt();
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesSolderService.cs
@@ -1,9 +1,16 @@
using System;
using Newtonsoft.Json.Serialization;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.APIEnum;
using WIDESEA_Core.Helper;
using WIDESEA_Core;
using WIDESEA_DTO;
using WIDESEA_DTO.MES;
using WIDESEA_Model.Models;
namespace WIDESEA_TaskInfoService
{
@@ -27,5 +34,35 @@
                return responseContent;
            }
        }
        /// <summary>
        /// é˜²ç„Šç«‹åº“入库后调用MES接口获取批次信息
        /// </summary>
        /// <param name="LotNo"></param>
        /// <returns></returns>
        public MesSolderModel? GetProductByLot(string LotNo)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMS_MES_GetProductByLot.ToString());
                string requestApi = apiInfo.ApiAddress + "?lotNo=" + LotNo;
                string response = HttpMesHelper.Post(requestApi);
                MesResponseContent mesResponseContent = response.DeserializeObject<MesResponseContent>();
                //调用接口
                if (mesResponseContent.BSucc == true)
                {
                    MesSolderModel? mesSolder= mesResponseContent.Content.ToString()?.DeserializeObject<MesSolderModel>();
                    return mesSolder;
                }
                else
                {
                    throw new Exception(mesResponseContent.StrMsg);
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -73,6 +73,8 @@
        private readonly IPalletTypeInfoRepository _palletTypeInfoRepository;
        private readonly IOutProStockInfoRepository _outProStockInfoRepository;
        private readonly IOutboundRepository _outboundRepository;
        private readonly IProInStatisticsRepository _proInStatisticsRepository;
        private readonly IProInStatisticsService _proInStatisticsService;
        public ITaskRepository Repository => BaseDal;
        private Dictionary<string, OrderByType> _taskOrderBy = new()
@@ -85,7 +87,7 @@
        public List<int> TaskOutboundTypes => typeof(TaskTypeEnum).GetEnumIndexList();
        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IStockRepository stockRepository, IBasicService basicService, IRecordService recordService, IOutboundService outboundService, IStockService stockService, IBasicRepository basicRepository, IApiInfoRepository apiInfoRepository, IInvokeERPService invokeERPService, IInboundRepository inboundRepository, IInboundOrderService inboundOrderService, IPalletTypeInfoRepository palletTypeInfoRepository, IOutProStockInfoRepository outProStockInfoRepository, IOutboundRepository outboundRepository) : base(BaseDal)
        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IStockRepository stockRepository, IBasicService basicService, IRecordService recordService, IOutboundService outboundService, IStockService stockService, IBasicRepository basicRepository, IApiInfoRepository apiInfoRepository, IInvokeERPService invokeERPService, IInboundRepository inboundRepository, IInboundOrderService inboundOrderService, IPalletTypeInfoRepository palletTypeInfoRepository, IOutProStockInfoRepository outProStockInfoRepository, IOutboundRepository outboundRepository, IProInStatisticsRepository proInStatisticsRepository, IProInStatisticsService proInStatisticsService) : base(BaseDal)
        {
            _mapper = mapper;
            _unitOfWorkManage = unitOfWorkManage;
@@ -102,6 +104,8 @@
            _palletTypeInfoRepository = palletTypeInfoRepository;
            _outProStockInfoRepository = outProStockInfoRepository;
            _outboundRepository = outboundRepository;
            _proInStatisticsRepository = proInStatisticsRepository;
            _proInStatisticsService = proInStatisticsService;
        }
        /// <summary>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs
@@ -404,7 +404,7 @@
                {
                    return WebResponseContent.Instance.Error($"未找到组盘信息");
                }
                if (stockInfo.StockStatus != StockStatusEmun.组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.手动组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.出库完成.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.拣选完成.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.退库.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.MES退库.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.MES空托退库.ObjToInt())
                if (stockInfo.StockStatus != StockStatusEmun.退库.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.MES退库.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.MES空托退库.ObjToInt())
                {
                    return WebResponseContent.Instance.Error($"该托盘状态不正确,不可申请入库");
                }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs
@@ -83,7 +83,7 @@
        /// <param name="ProOutNo">出库订单号</param>
        /// <param name="StationCode">站台地址</param>
        /// <returns></returns>
        public async Task<WebResponseContent> OutProductTask(int[] keys, string StationCode)
        public async Task<WebResponseContent> OutProductTask(int[] keys, string StationCode, int Grade)
        {
            WebResponseContent content = new WebResponseContent();
            try
@@ -93,10 +93,10 @@
                    return await Task.FromResult(content.Error("线体输入错误"));
                }
                //获取成品出库订单
                List<Dt_ProOutOrderDetail> _ProOutOrderDetails = await _outboundRepository.ProOutOrderDetailRepository.QueryDataAsync(x => keys.Contains(x.Id));
                List<Dt_ProOutOrderDetail> _ProOutOrderDetails = await _outboundRepository.ProOutOrderDetailRepository.QueryDataAsync(x => keys.Contains(x.Id) && x.ProOrderDetailStatus== OrderDetailStatusEnum.New.ObjToInt());
                if (_ProOutOrderDetails.Count<=0)
                {
                    return await Task.FromResult(content.Error("勾选订单明细不存在"));
                    return await Task.FromResult(content.Error("勾选订单明细状态为出库中"));
                }
                List<Dt_Task> tasks = new List<Dt_Task>();
                List<StockSelectViewDTO> stockSelectViews = new List<StockSelectViewDTO>();
@@ -124,10 +124,26 @@
                }
                if (result.Item1 != null && result.Item1.Count > 0)
                {
                    Dt_Task? task = BaseDal.QueryData(x=>x.TaskType==TaskTypeEnum.OutProduct.ObjToInt()).OrderByDescending(x=>x.Grade).FirstOrDefault();
                    //更新出库目的位置
                    result.Item1.ForEach(x =>
                    {
                        x.TargetAddress = StationCode;
                        if (Grade==1 || task==null)
                        {
                            x.Grade = 127;
                        }
                        else
                        {
                            if (task.Grade==0 || task.Grade==1)
                            {
                                x.Grade = 1;
                            }
                            else
                            {
                                x.Grade = task.Grade - 1;
                            }
                        }
                    });
                    tasks.AddRange(result.Item1);
                }
@@ -422,9 +438,7 @@
                {
                    x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
                });
                string groupId = DateTime.Now.ToString("yyyyMMddHHmmss");
                tasks.ForEach(x => x.OrderNo = proOutOrder.ProOutOrderNo);
                tasks.ForEach(x => x.GroupId = groupId);
                proStockInfos = result.Item1;
                proOutOrderDetails = result.Item2;
                outProStockInfos = result.Item3;
@@ -445,10 +459,14 @@
        public List<Dt_Task> GetTasks(List<Dt_ProStockInfo> stockInfos, TaskTypeEnum taskType)
        {
            List<Dt_Task> tasks = new List<Dt_Task>();
            for (int i = 0; i < stockInfos.Count; i++)
            string groupId = DateTime.Now.ToString("yyMMddHHmmss");
            for (int i = 1; i <= stockInfos.Count; i++)
            {
                Dt_ProStockInfo stockInfo = stockInfos[i];
                Dt_ProStockInfo stockInfo = stockInfos[i-1];
                if (i%5==0)
                {
                    groupId= DateTime.Now.AddSeconds(i).ToString("yyMMddHHmmss");
                }
                if (stockInfo != null)
                {
                    Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode);
@@ -468,6 +486,7 @@
                            TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                            PalletType = stockInfo.PalletType,
                            WarehouseId = stockInfo.WarehouseId,
                            GroupId= groupId
                        };
                        tasks.Add(task);
                    }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/ERP/ErpController.cs
@@ -325,5 +325,14 @@
        {
            return _invokeERPService.InvokeOutProErpSync(outProOrderNo);
        }
        /// <summary>
        /// ERP成品入库产品型号面积查询
        /// </summary>
        /// <returns></returns>
        [HttpPost, Route("InvokeProInErpStatic"), AllowAnonymous]
        public string InvokeProInErpStatic(string partNum, string partNumWithRev)
        {
            return _invokeERPService.InvokeProInErpStatic(partNum, partNumWithRev);
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/ProInStatisticsController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
using Microsoft.AspNetCore.Mvc;
using WIDESEA_Core;
using WIDESEA_Core.BaseController;
using WIDESEA_IInboundService;
using WIDESEA_Model.Models;
namespace WIDESEA_WMSServer.Controllers.Inbound
{
    /// <summary>
    /// Mes成品入库明细
    /// </summary>
    [Route("api/ProInStatistics")]
    [ApiController]
    public class ProInStatisticsController : ApiBaseController<IProInStatisticsService, Dt_ProInStatistics>
    {
        public ProInStatisticsController(IProInStatisticsService service) : base(service)
        {
        }
        [HttpGet,HttpPost,Route("GetMonthProductions")]
        public WebResponseContent GetMonthProductions()
        {
            return Service.GetMonthProductions();
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/LargeScreen/LargeController.cs
@@ -21,6 +21,7 @@
using SqlSugar;
using WIDESEA_IStockService;
using WIDESEA_Common.StockEnum;
using HslCommunication.WebSocket;
namespace WIDESEA_WMSServer.Controllers.LargeScreen
{
@@ -28,26 +29,42 @@
    [ApiController]
    public class LargeController : ControllerBase
    {
        //private readonly IOutboundService _outboundService;
        //private readonly ITaskService _taskService;
        //private readonly ITask_HtyService _task_HtyService;
        //private readonly IBasicService _basicService;
        //private readonly IMesProInOrderService _mesProInOrderService;
        //private readonly IOutProStockInfoService _outProStockInfoService;
        //private readonly IProStockInfoDetailService _proStockInfoDetailService;
        //private readonly IProStockInfoService _proStockInfoService;
        private readonly IOutboundService _outboundService;
        private readonly ITaskService _taskService;
        private readonly ITask_HtyService _task_HtyService;
        private readonly IBasicService _basicService;
        private readonly IMesProInOrderService _mesProInOrderService;
        private readonly IOutProStockInfoService _outProStockInfoService;
        private readonly WebSocketServer _webSocketServer;
        private readonly IProStockInfoDetailService _proStockInfoDetailService;
        private readonly IProStockInfoService _proStockInfoService;
        //public LargeController(IOutboundService outboundService, ITaskService taskService, ITask_HtyService task_HtyService, IBasicService basicService, IMesProInOrderService mesProInOrderService, IOutProStockInfoService outProStockInfoService,IProStockInfoDetailService proStockInfoDetailService, IProStockInfoService proStockInfoService)
        //{
        //    _outboundService = outboundService;
        //    _taskService = taskService;
        //    _task_HtyService = task_HtyService;
        //    _basicService = basicService;
        //    _mesProInOrderService = mesProInOrderService;
        //    _outProStockInfoService = outProStockInfoService;
        //    _proStockInfoDetailService= proStockInfoDetailService;
        //    _proStockInfoService=proStockInfoService;
        //}
        public LargeController(IOutboundService outboundService, ITaskService taskService, ITask_HtyService task_HtyService, IBasicService basicService, IMesProInOrderService mesProInOrderService, IOutProStockInfoService outProStockInfoService, IProStockInfoDetailService proStockInfoDetailService, IProStockInfoService proStockInfoService, WebSocketServer webSocketServer)
        {
            _outboundService = outboundService;
            _taskService = taskService;
            _task_HtyService = task_HtyService;
            _basicService = basicService;
            _mesProInOrderService = mesProInOrderService;
            _outProStockInfoService = outProStockInfoService;
            _proStockInfoDetailService = proStockInfoDetailService;
            _proStockInfoService = proStockInfoService;
            _webSocketServer = webSocketServer;
        }
        /// <summary>
        /// æµ‹è¯•
        /// </summary>
        /// <returns></returns>
        [HttpPost, Route("PushInfoSocket"), AllowAnonymous]
        public WebResponseContent ProMonthTaskStatistics(string info)
        {
            WebSocketSession[] webSocketSession = _webSocketServer.OnlineSessions;
            if (webSocketSession != null)
            {
                _webSocketServer.SendClientPayload(webSocketSession[0], "同意");
            }
            return WebResponseContent.Instance.OK(_webSocketServer.OnlineSessions.Select(x=>x.Url).Serialize());
        }
        ///// <summary>
        ///// æˆå“å½“月任务统计
        ///// </summary>
@@ -173,7 +190,7 @@
        //    try
        //    {
        //        var list = _proStockInfoDetailService.Repository.QueryData(x => true).GroupBy(x => x.ProductCode).Select(x => new { pCode = x.Key, qtys = x.Sum(x=>x.StockPcsQty) }).OrderByDescending(x=>x.qtys).Take(5);
        //        content.OK("成功", list);
        //    }
        //    catch (Exception ex)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs
@@ -183,9 +183,9 @@
        /// <param name="StationCode">站台地址</param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("OutProductTask"), AllowAnonymous]
        public async Task<WebResponseContent> OutProductTask([FromBody] int[] keys, string StationCode)
        public async Task<WebResponseContent> OutProductTask([FromBody] int[] keys, string StationCode, int Grade)
        {
            return await Service.OutProductTask(keys, StationCode);
            return await Service.OutProductTask(keys, StationCode, Grade);
        }
        /// <summary>
        /// æˆå“ä½™æ–™é€€åº“入仓
@@ -213,9 +213,9 @@
        /// ç”Ÿæˆæˆå“æåº“任务
        /// </summary>
        [HttpPost, HttpGet, Route("OutProRworkTask"), AllowAnonymous]
        public async Task<WebResponseContent> OutProRworkTask([FromBody] int[] keys, string StationCode)
        public async Task<WebResponseContent> OutProRworkTask([FromBody] int[] keys, string StationCode, int Grade)
        {
            return await Service.OutProductTask(keys, StationCode);
            return await Service.OutProductTask(keys, StationCode, Grade);
        }
        ///// <summary>
        ///// ç”ŸæˆMESPP仓大卷出库任务