wangxinhui
2025-11-21 5336bfc54525253a30f1f8238806d3a67f388e14
优化接口,增加字段等
已添加1个文件
已修改36个文件
941 ■■■■■ 文件已修改
项目代码/BigScreen/package-lock.json 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/BigScreen/src/api/ajax.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/BigScreen/src/router/index.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/BigScreen/src/views/indexLine.vue 198 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Common/APIEnum/APIEnum.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_DTO/MESResponse.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/ConveyorLineJob_CPH.cs 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Common/OrderEnum/OutboundOrderMenu.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_DTO/Basic/ERPMaterialDTO.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_DTO/ERP/SGOutOrderDTO.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_DTO/MES/MESReturnIssueDTO.cs 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_DTO/Task/WMSTaskDTO.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_External/Model/MESDeliveryModel.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundService/IMESProInOrderInfoService.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundService/MESProInOrderInfoService.cs 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Basic/Dt_MaterielInfo.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_OutMESOrder.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_OutSGOrder.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_OutSGOrderDetail.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_OutStockLockInfo.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/TaskInfo/Dt_Task.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundService/OutLineViewService.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundService/OutSGOrderService.cs 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundService/OutStockLockInfoService.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_StockService/StockInfoService.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/MesTaskService.cs 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/MES/MesController.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Outbound/OutLineViewController.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/appsettings.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/接口协议/龙利得MES接口.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
ÏîÄ¿´úÂë/BigScreen/package-lock.json
@@ -2349,11 +2349,6 @@
        "fastq": "^1.6.0"
      }
    },
    "@popperjs/core": {
      "version": "npm:@sxzz/popperjs-es@2.11.7",
      "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
      "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
    },
    "@sideway/address": {
      "version": "4.1.5",
      "resolved": "https://registry.npmmirror.com/@sideway/address/-/address-4.1.5.tgz",
@@ -7396,6 +7391,13 @@
        "lodash-unified": "^1.0.2",
        "memoize-one": "^6.0.0",
        "normalize-wheel-es": "^1.2.0"
      },
      "dependencies": {
        "@popperjs/core": {
          "version": "npm:@sxzz/popperjs-es@2.11.7",
          "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
          "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
        }
      }
    },
    "element-ui": {
ÏîÄ¿´úÂë/BigScreen/src/api/ajax.js
@@ -1,8 +1,8 @@
// è¿™ä¸ªæ—¶axios的配置
import axios from 'axios';
// import { config } from 'vue/types/umd';
axios.defaults.baseURL = 'http://192.168.2.155:8099'; //'http://192.168.2.155:8099';
//axios.defaults.baseURL = 'http://127.0.0.1:9293';
axios.defaults.baseURL = 'http://192.168.35.3:9283';
// é”™è¯¯ä¿¡æ¯å¤„理
const  errorHandle = (status, other) => {
  switch (status) {
ÏîÄ¿´úÂë/BigScreen/src/router/index.js
@@ -4,7 +4,7 @@
Vue.use(VueRouter)
const routes = [{
  path: '/line',
  path: '/',
  name: 'indexLine',
  component: () => import('../views/indexLine.vue')
},
ÏîÄ¿´úÂë/BigScreen/src/views/indexLine.vue
@@ -24,7 +24,7 @@
                    font-size: 50px;
                    font-weight: bold;
                    color: #90EE90;
                  ">立库输送轨道原纸信息(共 å·ï¼‰</span>
                  ">立库输送轨道原纸信息(共{{showMsg}}卷)</span>
                            //时间
                            <div style="position: absolute; right: 20px;">
                                <p style="
@@ -64,6 +64,7 @@
    data() {
        return {
            timing: null,
            timeRequest: null,
            loading: true,
            dateDay: null,
            dateYear: null,
@@ -82,139 +83,22 @@
                ],
                data: [
                    [
                        '<span style="color:#FF4500; font-size:75px;">705010</span>',
                        '<span style="color:#FF4500; font-size:75px;">015004</span>',
                        '<span style="color:#FF4500; font-size:75px;">X2</span>',
                        '<span style="color:#FF4500; font-size:75px;">1</span>',
                        '<span style="color:#FF4500; font-size:75px;">1200</span>',
                        '<span style="color:#FF4500; font-size:75px;;">4798</span>',
                        '<span style="color:#FF4500; font-size:75px;">180</span>',
                        '<span style="color:#FF4500; font-size:60px;">705010</span>',
                        '<span style="color:#FF4500; font-size:60px;">015004</span>',
                        '<span style="color:#FF4500; font-size:60px;">X2</span>',
                        '<span style="color:#FF4500; font-size:60px;">1</span>',
                        '<span style="color:#FF4500; font-size:60px;">1200</span>',
                        '<span style="color:#FF4500; font-size:60px;;">4798</span>',
                        '<span style="color:#FF4500; font-size:60px;">180</span>',
                    ],
                    [
                        '<span style="color:#FF4500; font-size:75px;">705010</span>',
                        '<span style="color:#FF4500; font-size:75px;">015004</span>',
                        '<span style="color:#FF4500; font-size:75px;">X2</span>',
                        '<span style="color:#FF4500; font-size:75px;">2</span>',
                        '<span style="color:#FF4500; font-size:75px;">1200</span>',
                        '<span style="color:#FF4500; font-size:75px;;">4798</span>',
                        '<span style="color:#FF4500; font-size:75px;">180</span>',
                    ],
                    [
                        '<span style="color:#FF4500; font-size:75px;">705010</span>',
                        '<span style="color:#FF4500; font-size:75px;">015004</span>',
                        '<span style="color:#FF4500; font-size:75px;">X2</span>',
                        '<span style="color:#FF4500; font-size:75px;">3</span>',
                        '<span style="color:#FF4500; font-size:75px;">1200</span>',
                        '<span style="color:#FF4500; font-size:75px;;">4798</span>',
                        '<span style="color:#FF4500; font-size:75px;">180</span>',
                    ],
                    [
                        '<span style="color:#FF4500; font-size:75px;">705010</span>',
                        '<span style="color:#FF4500; font-size:75px;">015004</span>',
                        '<span style="color:#FF4500; font-size:75px;">X2</span>',
                        '<span style="color:#FF4500; font-size:75px;">4</span>',
                        '<span style="color:#FF4500; font-size:75px;">1200</span>',
                        '<span style="color:#FF4500; font-size:75px;;">4798</span>',
                        '<span style="color:#FF4500; font-size:75px;">180</span>',
                    ],
                    [
                        '<span style="color:#FF4500; font-size:75px;">705010</span>',
                        '<span style="color:#FF4500; font-size:75px;">015004</span>',
                        '<span style="color:#FF4500; font-size:75px;">X2</span>',
                        '<span style="color:#FF4500; font-size:75px;">5</span>',
                        '<span style="color:#FF4500; font-size:75px;">1200</span>',
                        '<span style="color:#FF4500; font-size:75px;;">4798</span>',
                        '<span style="color:#FF4500; font-size:75px;">180</span>',
                    ],
                    [
                        '<span style="color:#FF4500; font-size:75px;">705010</span>',
                        '<span style="color:#FF4500; font-size:75px;">015004</span>',
                        '<span style="color:#FF4500; font-size:75px;">X2</span>',
                        '<span style="color:#FF4500; font-size:75px;">6</span>',
                        '<span style="color:#FF4500; font-size:75px;">1200</span>',
                        '<span style="color:#FF4500; font-size:75px;;">4798</span>',
                        '<span style="color:#FF4500; font-size:75px;">180</span>',
                    ],
                    [
                        '<span style="color:#FF4500; font-size:75px;">705010</span>',
                        '<span style="color:#FF4500; font-size:75px;">015004</span>',
                        '<span style="color:#FF4500; font-size:75px;">X2</span>',
                        '<span style="color:#FF4500; font-size:75px;">7</span>',
                        '<span style="color:#FF4500; font-size:75px;">1200</span>',
                        '<span style="color:#FF4500; font-size:75px;;">4798</span>',
                        '<span style="color:#FF4500; font-size:75px;">180</span>',
                    ],
                    [
                        '<span style="color:#FF4500; font-size:75px;">705010</span>',
                        '<span style="color:#FF4500; font-size:75px;">015004</span>',
                        '<span style="color:#FF4500; font-size:75px;">X2</span>',
                        '<span style="color:#FF4500; font-size:75px;">8</span>',
                        '<span style="color:#FF4500; font-size:75px;">1200</span>',
                        '<span style="color:#FF4500; font-size:75px;;">4798</span>',
                        '<span style="color:#FF4500; font-size:75px;">180</span>',
                    ],
                    [
                        '<span style="color:#FF4500; font-size:75px;">705010</span>',
                        '<span style="color:#FF4500; font-size:75px;">015004</span>',
                        '<span style="color:#FF4500; font-size:75px;">X2</span>',
                        '<span style="color:#FF4500; font-size:75px;">9</span>',
                        '<span style="color:#FF4500; font-size:75px;">1200</span>',
                        '<span style="color:#FF4500; font-size:75px;;">4798</span>',
                        '<span style="color:#FF4500; font-size:75px;">180</span>',
                    ],
                    [
                        '<span style="color:#FF4500; font-size:75px;">705010</span>',
                        '<span style="color:#FF4500; font-size:75px;">015004</span>',
                        '<span style="color:#FF4500; font-size:75px;">X2</span>',
                        '<span style="color:#FF4500; font-size:75px;">10</span>',
                        '<span style="color:#FF4500; font-size:75px;">1200</span>',
                        '<span style="color:#FF4500; font-size:75px;;">4798</span>',
                        '<span style="color:#FF4500; font-size:75px;">180</span>',
                    ],
                    [
                        '<span style="color:#FF4500; font-size:75px;">705010</span>',
                        '<span style="color:#FF4500; font-size:75px;">015004</span>',
                        '<span style="color:#FF4500; font-size:75px;">X2</span>',
                        '<span style="color:#FF4500; font-size:75px;">11</span>',
                        '<span style="color:#FF4500; font-size:75px;">1200</span>',
                        '<span style="color:#FF4500; font-size:75px;;">4798</span>',
                        '<span style="color:#FF4500; font-size:75px;">180</span>',
                    ],
                    [
                        '<span style="color:#FF4500; font-size:75px;">705010</span>',
                        '<span style="color:#FF4500; font-size:75px;">015004</span>',
                        '<span style="color:#FF4500; font-size:75px;">X2</span>',
                        '<span style="color:#FF4500; font-size:75px;">12</span>',
                        '<span style="color:#FF4500; font-size:75px;">1200</span>',
                        '<span style="color:#FF4500; font-size:75px;;">4798</span>',
                        '<span style="color:#FF4500; font-size:75px;">180</span>',
                    ],
                    [
                        '<span style="color:#FF4500; font-size:75px;">705010</span>',
                        '<span style="color:#FF4500; font-size:75px;">015004</span>',
                        '<span style="color:#FF4500; font-size:75px;">X2</span>',
                        '<span style="color:#FF4500; font-size:75px;">13</span>',
                        '<span style="color:#FF4500; font-size:75px;">1200</span>',
                        '<span style="color:#FF4500; font-size:75px;;">4798</span>',
                        '<span style="color:#FF4500; font-size:75px;">180</span>',
                    ],
                    [
                        '<span style="color:#FF4500; font-size:75px;">705010</span>',
                        '<span style="color:#FF4500; font-size:75px;">015004</span>',
                        '<span style="color:#FF4500; font-size:75px;">X2</span>',
                        '<span style="color:#FF4500; font-size:75px;">14</span>',
                        '<span style="color:#FF4500; font-size:75px;">1200</span>',
                        '<span style="color:#FF4500; font-size:75px;;">4798</span>',
                        '<span style="color:#FF4500; font-size:75px;">180</span>',
                    ],
                    [
                        '<span style="color:#FF4500; font-size:75px;">705010</span>',
                        '<span style="color:#FF4500; font-size:75px;">015004</span>',
                        '<span style="color:#FF4500; font-size:75px;">X2</span>',
                        '<span style="color:#FF4500; font-size:75px;">15</span>',
                        '<span style="color:#FF4500; font-size:75px;">1200</span>',
                        '<span style="color:#FF4500; font-size:75px;;">4798</span>',
                        '<span style="color:#FF4500; font-size:75px;">180</span>',
                        '<span style="color:#FF4500; font-size:60px;">705010</span>',
                        '<span style="color:#FF4500; font-size:60px;">015004</span>',
                        '<span style="color:#FF4500; font-size:60px;">X2</span>',
                        '<span style="color:#FF4500; font-size:60px;">2</span>',
                        '<span style="color:#FF4500; font-size:60px;">1200</span>',
                        '<span style="color:#FF4500; font-size:60px;;">4798</span>',
                        '<span style="color:#FF4500; font-size:60px;">180</span>',
                    ],
                ],
                headerHeight: 60,
@@ -222,12 +106,12 @@
                evenRowBGC: "rgba(0, 0, 0, 0.6)",
                headerBGC: "rgba(0, 0, 0, 0.6)",
                waitTime: 5000,
                columnWidth: [350, 350, 200, 200, 250, 250, 350],
                columnWidth: [380, 380, 180, 200, 200, 250, 250],
                rowNum: 10,
                align: ["center", "center", "center", "center", "center", "center", "center"],
            },
            IsDetail: true,
            OrderCreator: {},
            showMsg:""
        };
    },
    components: {
@@ -240,10 +124,11 @@
            this.updateTime(); // æ¯ç§’æ›´æ–°æ—¶é—´
        }, 1000);
        this.cancelLoading();
        // this.GetOrderDetail();
        this.GetOrderDetail();
    },
    beforeDestroy() {
        clearInterval(this.timing);
        clearInterval(this.timeRequest);
    },
    methods: {
        // æ›´æ–°åŒ—京时间
@@ -278,42 +163,51 @@
            }, 1000);
        },
        GetOrderDetail() {
            axios.post("/api/dt_WorkOrder/getWorkOrderInfo", null, "").then((res) => {
            axios.post("/api/OutLineView/GetOutLineView", null, "").then((res) => {
                if (res.data.status) {
                    if (res.data.data == null) {
                        return;
                    }
                    var sp = '</span>';
                    this.showMsg=res.data.message
                    var arr = [];
                    res.data.data.dt_WorkOrderDetail.forEach((x) => {
                    res.data.data.forEach((x) => {
                        var item = [
                            '<span style="color:#67e0e3;">' + x.layer + '层' + sp,
                            '<span style="color:#9fe6b8;">' + (x.lj_hight == null ? '无需测量' : x.lj_hight + 'mm') + sp,
                            '<span style="color:#fb7503;">' + (x.measure_hight == null ? '无需测量' : x.measure_hight + 'mm') + sp,
                            '<span style="color:#fb7503;">' + x.lj_is_tolerance + sp,
                                '<span style="color:#FF4500; font-size:55px;">'+x.palletCode+'</span>',
                                '<span style="color:#FF4500; font-size:55px;">'+x.orderNo+'</span>',
                                '<span style="color:#FF4500; font-size:55px;">'+x.materielCode+'</span>',
                                '<span style="color:#FF4500; font-size:55px;">'+x.machineName+'</span>',
                                '<span style="color:#FF4500; font-size:55px;">'+x.materialWide+'</span>',
                                '<span style="color:#FF4500; font-size:55px;;">'+x.originalQuantity+'</span>',
                                '<span style="color:#FF4500; font-size:55px;">'+x.orderQuantity+'</span>',
                        ];
                        arr.push(item);
                    });
                    this.OrderCreator = res.data.data;
                    if (this.IsDetail) {
                        this.config = {
                            header: [
                                '<span style="font-size:18px;">层数</span>',
                                '<span style="font-size:18px;">累计标准饼厚</span>',
                                '<span style="font-size:18px;">累计饼厚</span>',
                                '<span style="font-size:18px;">测高结果</span>'
                            '<span style="font-size:50px;">纸卷条码</span>',
                            '<span style="font-size:50px;">工单号</span>',
                            '<span style="font-size:50px;">代码</span>',
                            '<span style="font-size:50px;">上机位</span>',
                            '<span style="font-size:50px;">宽幅</span>',
                            '<span style="font-size:50px;">纸卷长</span>',
                            '<span style="font-size:50px;">需用纸长</span>'
                            ],
                            data: arr,
                            waitTime: 10000,
                            rowNum: 15,
                            columnWidth: [75, 150, 110, 110],
                            align: ["center", "center", "center", "center"]
                            headerHeight: 60,
                            oddRowBGC: "rgba(0, 0, 0, 0.6)",
                            evenRowBGC: "rgba(0, 0, 0, 0.6)",
                            headerBGC: "rgba(0, 0, 0, 0.6)",
                            waitTime: 5000,
                            columnWidth: [380, 380, 180, 200, 200, 250, 250],
                            rowNum: 10,
                            align: ["center", "center", "center", "center", "center", "center", "center"],
                        };
                    } else {
                        this.$refs["scrollBoard"].updateRows(arr)
                    }
                    if (this.IsDetail) {
                        setInterval(() => {
                        this.timeRequest = setInterval(() => {
                            this.GetOrderDetail();
                        }, 10000);
                        this.IsDetail = false;
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Common/APIEnum/APIEnum.cs
@@ -80,6 +80,11 @@
        /// é¢„调度接口
        /// </summary>
        [Description("预调度接口")]
        AGV_CTUScheduleTaskTask
        AGV_CTUScheduleTaskTask,
        /// <summary>
        /// MES小车到达通知
        /// </summary>
        [Description("MES小车到达通知")]
        MESAvgArriveNotice
    }
}
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_DTO/MESResponse.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_External.Model
{
    /// <summary>
    /// MES返回
    /// </summary>
    public class MESResponse
    {
        /// <summary>
        /// æˆåŠŸç»“æžœ
        /// </summary>
        public bool Result { get; set; }
        /// <summary>
        /// è¿”回信息
        /// </summary>
        public string Msg { get; set; }
        /// <summary>
        /// è¿”回对象
        /// </summary>
        public bool Obj { get; set; }
    }
}
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs
@@ -73,5 +73,13 @@
        public string AGVArea { get; set; }
        public int PalletType { get; set; }
        /// <summary>
        /// MES计划Id
        /// </summary>
        public int DispatchPlanId { get; set; }
        /// <summary>
        /// åŠ å·¥ä¸­å¿ƒ
        /// </summary>
        public string WorkCentreCode { get; set; }
    }
}
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs
@@ -99,7 +99,11 @@
        //上传条码
        WebResponseContent MESBoxCodeNotice(string boxCode);
        WebResponseContent MESAvgArriveNotice(RequestAGVArriveDTO requestAGVArriveDTO);
        /// <summary>
        /// åˆ¤æ–­å…è®¸æ”¾è´§
        /// </summary>
        /// <returns></returns>
        string MESAvgArriveNotice(RequestAGVArriveDTO requestAGVArriveDTO);
        /// <summary>
        /// å ç›˜æœºç”³è¯·ç©ºæ‰˜å…¥æˆå“åº“
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs
@@ -205,5 +205,21 @@
        [ExporterHeader(DisplayName = "备注")]
        [SugarColumn(IsNullable = true, Length = 255, ColumnDescription = "备注")]
        public string Remark { get; set; }
        /// <summary>
        /// åŠ å·¥ä¸­å¿ƒç¼–ç 
        /// </summary>
        [ImporterHeader(Name = "加工中心编码")]
        [ExporterHeader(DisplayName = "加工中心编码")]
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "加工中心编码")]
        public string WorkCentreCode { get; set; }
        /// <summary>
        /// ç‰©æ–™ç¼–号
        /// </summary>
        [ImporterHeader(Name = "MES计划Id")]
        [ExporterHeader(DisplayName = "MES计划Id")]
        [SugarColumn(IsNullable = true, ColumnDescription = "MES计划Id")]
        public int DispatchPlanId { get; set; }
    }
}
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs
@@ -2,7 +2,9 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.Text;
using System.Text.RegularExpressions;
using WIDESEA_DTO.Agv;
using WIDESEA_External.Model;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Enums;
@@ -70,7 +72,7 @@
                    }
                    else//出库放货请求
                    {
                        var content = PutRequest(task.NextAddress, task.PalletType);
                        var content = PutRequest(task.NextAddress, task);
                        if (!content.Status)
                        {
                            throw new Exception(content.Message);
@@ -89,7 +91,7 @@
                    }
                    else//入库放货请求
                    {
                        var content = PutRequest(task.NextAddress, task.TaskNum);
                        var content = PutRequest(task.NextAddress, task);
                        if (!content.Status)
                        {
                            throw new Exception(content.Message);
@@ -312,7 +314,7 @@
        /// <param name="palletType"></param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("PutRequest"), AllowAnonymous]
        public WebResponseContent PutRequest(string code, int taskNum)
        public WebResponseContent PutRequest(string code, Dt_Task task)
        {
            WebResponseContent content = new WebResponseContent();
            try
@@ -330,14 +332,20 @@
                    {
                        SD_WorkCentreAgvArriveNoticeInfo=new List<AgvArriveNotice> { new AgvArriveNotice()
                        {
                            DispatchPlanMaterialId=409,
                            WorkCentreCode="66",
                            LocationCode="3-ZD-ZJZZ",
                            CallId="4534c242-27a7-4fb6-86f5-460b09db303d"
                            DispatchPlanMaterialId=task.DispatchPlanId,
                            WorkCentreCode=task.WorkCentreCode,
                            LocationCode=code,
                            CallId=Guid.NewGuid().ToString().Replace("-","")
                        } }
                    };
                    WebResponseContent webResponse= _taskService.MESAvgArriveNotice(requestAGVArriveDTO);
                    if (webResponse.Message.Contains("\"obj\": true"))
                    MESResponse response = _taskService.MESAvgArriveNotice(requestAGVArriveDTO).DeserializeObject<MESResponse>() ?? throw new Exception("未获取到返回信息");
                    if (!response.Result)
                    {
                        throw new Exception($"调用MES小车允许放货报错,MES返回信息"+ Regex.Replace(response.Msg, @"\\u([0-9a-fA-F]{4})", match => {
                            return ((char)Convert.ToInt32(match.Groups[1].Value, 16)).ToString();
                        }));
                    }
                    if (response.Obj)
                    {
                        return content.Error($"允许取料");
                    }
@@ -389,7 +397,7 @@
                        bool RequestPut = otherDevice.GetValue<CoveryorDB, bool>(CoveryorDB.C_RequestPut, stationManger.StationDeviceCode);
                        if (!RequestPut)
                        {
                            otherDevice.SetValue(CoveryorDB.C_InTaskNum, taskNum, stationManger.StationDeviceCode);
                            otherDevice.SetValue(CoveryorDB.C_InTaskNum, task.TaskNum, stationManger.StationDeviceCode);
                            otherDevice.SetValue(CoveryorDB.C_RequestPut, true, stationManger.StationDeviceCode);
                            Thread.Sleep(1000);
                        }
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -18,6 +18,7 @@
using Newtonsoft.Json;
using SqlSugar;
using System.Diagnostics.CodeAnalysis;
using System.Net.Http.Headers;
using WIDESEA_DTO.Agv;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.APIEnum;
@@ -484,24 +485,54 @@
            }
            return content;
        }
        public WebResponseContent MESAvgArriveNotice(RequestAGVArriveDTO requestAGVArriveDTO)
        /// <summary>
        /// åˆ¤æ–­å…è®¸æ”¾è´§
        /// </summary>
        /// <returns></returns>
        public string MESAvgArriveNotice(RequestAGVArriveDTO requestAGVArriveDTO)
        {
            WebResponseContent content = new WebResponseContent();
            Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.MESAvgArriveNotice.ToString());
            string response = Post(apiInfo.ApiAddress, JsonConvert.SerializeObject(requestAGVArriveDTO));
            return response;
        }
        public static string Post(string serviceAddress, string requestJson = "", string contentType = "application/json", Dictionary<string, string>? headers = null)
        {
            string result = string.Empty;
            DateTime beginDate = DateTime.Now;
            try
            {
                string address = AppSettings.Get("WMSApiAddress");
                if (string.IsNullOrEmpty(address))
                using (HttpContent httpContent = new StringContent(requestJson))
                {
                    return WebResponseContent.Instance.Error($"未找到WMSApi地址");
                    httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                    using HttpClient httpClient = new HttpClient();
                    httpClient.Timeout = new TimeSpan(0, 0, 30);
                    string LoginToken = AppSettings.Get("MESLoginToken");
                    headers = new Dictionary<string, string>
                    {
                        //正式
                        { "LoginToken", LoginToken }
                    };
                    if (headers != null)
                    {
                        foreach (var header in headers)
                            httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
                    }
                    HttpResponseMessage responseMessage = httpClient.PostAsync(serviceAddress, httpContent).Result;
                    result = responseMessage.Content.ReadAsStringAsync().Result;
                }
                string responseStr = HttpHelper.Post($"{address}/api/Mes/MESAvgArriveNotice", requestAGVArriveDTO.Serialize());
                return content.OK(responseStr);
                return result;
            }
            catch (Exception ex)
            catch (Exception e)
            {
                content = WebResponseContent.Instance.Error(ex.Message);
                throw new Exception(e.Message);
            }
            return content;
            finally
            {
                Logger.Add(serviceAddress, requestJson == null ? "" : requestJson, result, beginDate);
            }
        }
        public WebResponseContent CPEmptyInbound(string palletCode,string SourceAddress)
        {
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/³ÉÆ·²Ö/ConveyorLineJob_CPH.cs
@@ -42,7 +42,6 @@
        private readonly IRouterExtension _routerExtension;
        private readonly List<Dt_WarehouseDevice> warehouseDevices;
        private static object lockObj = 0;//
        private static List<string> strings = new List<string>();
        public ConveyorLineJob_CPH(ICacheService cacheService, ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IRouterService routerService, IRouterExtension routerExtension)
        {
@@ -54,14 +53,6 @@
            _routerRepository = routerRepository;
            _routerService = routerService;
            _routerExtension = routerExtension;
            //string boxCodes = AppSettings.Get("BoxCodes");
            //if (!string.IsNullOrEmpty(boxCodes) && strings.Count<=0)
            //{
            //    foreach (string s in boxCodes.Split(","))
            //    {
            //        strings.Add(s);
            //    }
            //}
            string? warehouseDevicesStr = _cacheService.Get<string>(nameof(Dt_WarehouseDevice));
            if (!string.IsNullOrEmpty(warehouseDevicesStr))
            {
@@ -80,19 +71,19 @@
                if (lockObj.ToString()=="0")
                {
                    lockObj = 1;
                    Task task = Task.Run(() =>
                    Task task = Task.Run(async () =>
                    {
                        try
                        {
                            while (true)
                            bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
                            if (flag && value != null)
                            {
                                bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
                                if (flag && value != null)
                                //获取当前设备
                                OtherDevice device = (OtherDevice)value;
                                List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == device.DeviceCode);
                                Dt_StationManger? RequestIn = stationMangers.FirstOrDefault(x => x.StationType == StationTypeEnum.StationType_OnlyInbound.ObjToInt());
                                while (true)
                                {
                                    //获取当前设备
                                    OtherDevice device = (OtherDevice)value;
                                    List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == device.DeviceCode);
                                    Dt_StationManger? RequestIn = stationMangers.FirstOrDefault(x => x.StationType == StationTypeEnum.StationType_OnlyInbound.ObjToInt());
                                    if (RequestIn != null)
                                    {
                                        DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == RequestIn.StationCode && x.DeviceProParamType == nameof(R_CLineCPHDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
@@ -103,47 +94,26 @@
                                            //码垛环线请求任务 
                                            if (conveyorLineInfoRead != null && (conveyorLineInfoRead.R_State == 2 || conveyorLineInfoRead.R_State == 3) && conveyorLineInfoRead.R_TaskNo <= 0 && !string.IsNullOrEmpty(conveyorLineInfoRead.R_BoxCode) && conveyorLineInfoRead.R_Request == 1)
                                            {
                                                //WebResponseContent content = _taskService.MESBoxCodeNotice(conveyorLineInfoRead.R_BoxCode);
                                                ////向WMS请求任务
                                                //if (true)
                                                //{
                                                //}
                                                //string[] strings = conveyorLineInfoRead.R_BoxCode.Split("-");
                                                //if (strings.Length==2)
                                                //{
                                                #region todo:临时逻辑
                                                ////写入执行数据
                                                //if (strings.FirstOrDefault(x=>x == conveyorLineInfoRead.R_BoxCode)!=null)
                                                //{
                                                    device.SetValue(W_CLineCPHDB.W_TaskNo, 100 + 5, RequestIn.StationCode);
                                                    device.SetValue(W_CLineCPHDB.W_Channel, 14, RequestIn.StationCode);
                                                    device.SetValue(W_CLineCPHDB.W_Long, 465, RequestIn.StationCode);
                                                    device.SetValue(W_CLineCPHDB.W_Wide, 375, RequestIn.StationCode);
                                                    device.SetValue(W_CLineCPHDB.W_High, 690, RequestIn.StationCode);
                                                    device.SetValue(W_CLineCPHDB.W_TMID, conveyorLineInfoRead.R_BoxCode, RequestIn.StationCode);
                                                    device.SetValue(W_CLineCPHDB.W_Request, 1, RequestIn.StationCode);
                                                //    WebResponseContent content = _taskService.MESBoxCodeNotice(conveyorLineInfoRead.R_BoxCode);
                                                //    if (content.Message.Contains("true"))
                                                //    {
                                                //        strings.Remove(conveyorLineInfoRead.R_BoxCode);
                                                //        WriteInfo(RequestIn.StationName, content.Message);
                                                //    }
                                                //    else
                                                //    {
                                                //        WriteError(RequestIn.StationName, content.Message);
                                                //    }
                                                //}
                                                //else
                                                //{
                                                //    WriteError(RequestIn.StationName, $"未找到条码{conveyorLineInfoRead.R_BoxCode}数据");
                                                //}
                                                //写入执行数据
                                                device.SetValue(W_CLineCPHDB.W_TaskNo, 100 + 5, RequestIn.StationCode);
                                                device.SetValue(W_CLineCPHDB.W_Channel, 14, RequestIn.StationCode);
                                                device.SetValue(W_CLineCPHDB.W_Long, 485, RequestIn.StationCode);
                                                device.SetValue(W_CLineCPHDB.W_Wide, 460, RequestIn.StationCode);
                                                device.SetValue(W_CLineCPHDB.W_High, 420, RequestIn.StationCode);
                                                device.SetValue(W_CLineCPHDB.W_TMID, conveyorLineInfoRead.R_BoxCode, RequestIn.StationCode);
                                                device.SetValue(W_CLineCPHDB.W_Request, 1, RequestIn.StationCode);
                                                WebResponseContent content = _taskService.MESBoxCodeNotice(conveyorLineInfoRead.R_BoxCode);
                                                if (content.Status)
                                                {
                                                    WriteInfo(RequestIn.StationName, content.Message);
                                                }
                                                else
                                                {
                                                    WriteError(RequestIn.StationName, content.Message);
                                                }
                                                #endregion
                                                //}
                                                //else
                                                //{
                                                //    WriteError(RequestIn.StationName, $"数据截取错误:{strings}");
                                                //}
                                            }
                                        }
                                        else
@@ -151,7 +121,7 @@
                                            WriteError(RequestIn.StationName, $"未找到设备子编号{RequestIn.StationCode}的协议信息");
                                        }
                                    }
                                    foreach (var item in stationMangers.Where(x=>x.StationType==StationTypeEnum.StationType_OnlyOutbound.ObjToInt()))
                                    foreach (var item in stationMangers.Where(x => x.StationType == StationTypeEnum.StationType_OnlyOutbound.ObjToInt()))
                                    {
                                        DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(R_CLineCPHDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                                        if (deviceProRead != null)
@@ -171,21 +141,20 @@
                                            }
                                        }
                                    }
                                    Thread.Sleep(100);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            lockObj = 0;
                            WriteError(nameof(ConveyorLineJob_CPH), $"错误信息:{ex.Message}");
                        }
                    });
                }
                
            }
            return Task.CompletedTask;
        }
    }
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Common/OrderEnum/OutboundOrderMenu.cs
@@ -50,6 +50,11 @@
        /// ä¸€æœŸç”Ÿç®¡é¢†æ–™
        /// </summary>
        [Description("一期生管领料")]
        OutSGPick=1
        OutSGPick = 1,
        /// <summary>
        /// äºŒæœŸMES领料
        /// </summary>
        [Description("二期MES领料")]
        OutMESPick = 2
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_DTO/Basic/ERPMaterialDTO.cs
@@ -85,9 +85,14 @@
        public string WarehouseCode { get; set; }
        /// <summary>
        /// è®¡é‡å•位(Kg:千克)
        /// è®¡é‡å•位
        /// </summary>
        [PropertyValidate("计量单位:Kg:公斤、M:米、Pcs:个(只)", NotNullAndEmpty = true)]
        public string Unit { get; set; }
        /// <summary>
        /// è®¡é‡å•位
        /// </summary>
        [PropertyValidate("计量单位:Kg:公斤、M:米、Pcs:个(只)", NotNullAndEmpty = true)]
        public string AssistUnitCode { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_DTO/ERP/SGOutOrderDTO.cs
@@ -89,5 +89,17 @@
        /// </summary>
        [PropertyValidate("生产工单号", NotNullAndEmpty = true)]
        public string OrderId { get; set; }
        /// <summary>
        /// å·¥å•用纸序号(上游)
        /// </summary>
        [PropertyValidate("工单用纸序号", NotNullAndEmpty = true)]
        public int Number { get; set; }
        /// <summary>
        /// å¤‡æ³¨(上游)
        /// </summary>
        [PropertyValidate("工单用纸序号", NotNullAndEmpty = true)]
        public string Remark { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_DTO/MES/MESReturnIssueDTO.cs
@@ -14,22 +14,23 @@
    public class MESReturnIssueDTO
    {
        /// <summary>
        /// å‡ºåº“来源明细ID
        /// </summary>
        [PropertyValidate("出库来源明细ID", NotNullAndEmpty = true)]
        public int OutDetailId { get; set; }
        /// <summary>
        /// å‘¼å«Id
        /// </summary>
        [PropertyValidate("呼叫Id", NotNullAndEmpty = true)]
        public string IssueId { get; set; }
        /// <summary>
        /// åŠ å·¥ä¸­å¿ƒ
        /// </summary>
        [PropertyValidate("加工中心", NotNullAndEmpty = true)]
        public string MakeCode { get; set; }
        /// <summary>
        /// å‘¨è½¬ä½ç½®ç¼–号
        /// </summary>
        [PropertyValidate("周转位置编号", NotNullAndEmpty = true)]
        public string PointCode { get; set; }
        /// <summary>
        /// ä½™æ–™ä¿¡æ¯
        /// </summary>
@@ -62,10 +63,10 @@
        [PropertyValidate("退料数量", NotNullAndEmpty = true)]
        public decimal ReturnQuantity { get; set; }
        /// <summary>
        /// æ˜¯å¦é¢†æ–™ï¼ˆ1未领料 0已临料)
        /// æ˜¯å¦é¢†æ–™ï¼ˆ1未领料 0已领料)
        /// </summary>
        [PropertyValidate("是否领料(1未领料 0已临料)", NotNullAndEmpty = true)]
        public string Whether { get; set; }
        [PropertyValidate("是否领料(1未领料 0已领料)", NotNullAndEmpty = true)]
        public int Whether { get; set; }
        /// <summary>
        /// é€€æ–™å·¥å•号(ERP相关)
        /// </summary>
@@ -75,7 +76,7 @@
        /// ç›´å¾„
        /// </summary>
        [PropertyValidate("直径", NotNullAndEmpty = true)]
        public string Thickness { get; set; }
        public decimal Thickness { get; set; }
        /// <summary>
        /// å¹…宽
        /// </summary>
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_DTO/Task/WMSTaskDTO.cs
@@ -85,6 +85,14 @@
        /// 
        /// </summary>
        public int PalletType { get; set; }
        /// <summary>
        /// MES计划Id
        /// </summary>
        public int DispatchPlanId { get; set; }
        /// <summary>
        /// åŠ å·¥ä¸­å¿ƒ
        /// </summary>
        public string WorkCentreCode { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_External/Model/MESDeliveryModel.cs
@@ -35,7 +35,7 @@
        /// <summary>
        /// æ•°é‡
        /// </summary>
        public int MainQuantity { get; set; }
        public decimal MainQuantity { get; set; }
        /// <summary>
        /// è¾…单位编码
        /// </summary>
@@ -47,7 +47,7 @@
        /// <summary>
        /// ä»“库编码
        /// </summary>
        public string StockInfoCode { get; set; }
        public string StockInfoCode { get; set; } = "CKDA003";
        /// <summary>
        /// æ‰¹å·
        /// </summary>
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundService/IMESProInOrderInfoService.cs
@@ -15,12 +15,10 @@
    {
        IMESProInOrderInfoRepository Repository { get; }
        /// <summary>
        /// æˆå“/半成品信息同步接口
        /// </summary>
        WebResponseContent ReceiveProCodeInfo(List<MESProInDTO> proInDTOs);
        /// <summary>
        /// MES工单停止接口
        /// </summary>
        WebResponseContent ReceiveProOrderStop(MESOrderStopDTO orderStopDTO);
        WebResponseContent MESBoxCode(string boxCode);
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundService/MESProInOrderInfoService.cs
@@ -3,6 +3,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using WIDESEA_Common.MaterielEnum;
using WIDESEA_Common.OrderEnum;
@@ -11,6 +12,8 @@
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Helper;
using WIDESEA_DTO.MES;
using WIDESEA_External.MESService;
using WIDESEA_External.Model;
using WIDESEA_IBasicRepository;
using WIDESEA_IInboundRepository;
using WIDESEA_IInboundService;
@@ -24,75 +27,15 @@
        private readonly IBasicRepository _basicRepository;
        private readonly IAGVStationInfoRepository _agvStationInfoRepository;
        private readonly IMapper _mapper;
        public MESProInOrderInfoService(IMESProInOrderInfoRepository BaseDal,IBasicRepository basicRepository,IMapper mapper, IAGVStationInfoRepository agvStationInfoRepository) : base(BaseDal)
        private readonly IInvokeMESService _invokeMESService;
        public MESProInOrderInfoService(IMESProInOrderInfoRepository BaseDal,IBasicRepository basicRepository,IMapper mapper, IAGVStationInfoRepository agvStationInfoRepository,IInvokeMESService invokeMESService) : base(BaseDal)
        {
            _basicRepository = basicRepository;
            _mapper = mapper;
            _agvStationInfoRepository = agvStationInfoRepository;
            _invokeMESService = invokeMESService;
        }
        /// <summary>
        /// æˆå“/半成品信息同步接口
        /// </summary>
        public WebResponseContent ReceiveProCodeInfo(List<MESProInDTO> proInDTOs)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                if (proInDTOs==null || proInDTOs.Count<=0)
                {
                    return content.Error("传入信息为空");
                }
                //获取所有成品,半成品信息
                List<Dt_MESProInOrderInfo> proInOrderInfos = BaseDal.QueryData();
                //获取所有物料信息
                List<Dt_MaterielInfo> materielInfos = _basicRepository.MaterielInfoRepository.QueryData(x => x.MaterielInvOrgId == MaterielInvOrgEnum.新厂.ObjToInt());
                MESProInDTO? CheckMaterialCode = proInDTOs.FirstOrDefault(x => !materielInfos.Select(x => x.MaterielCode).Contains(x.MaterialCode));
                if (CheckMaterialCode != null)
                {
                    return content.Error($"物料编码{nameof(MESProInDTO.MaterialCode)}:{CheckMaterialCode.MaterialCode}信息不存在");
                }
                //获取所有AGV点位
                List<Dt_AGVStationInfo> aGVStationInfos = _agvStationInfoRepository.QueryData(x => !string.IsNullOrEmpty(x.MESPointCode));
                //判断是否存在重复
                MESProInDTO? proInDTO = proInDTOs.FirstOrDefault(x=>x.IsMantissa==false && proInOrderInfos.Select(x=>x.BarCode).Contains(x.BarCode));
                if (proInDTO!=null)
                {
                    return content.Error($"{proInDTO.ProductOrderNo}生产工单{proInDTO.BarCode}条码已存在");
                }
                Dt_MESProInOrderInfo? proInOrderInfo = proInOrderInfos.FirstOrDefault(x=>x.MESProInStatus==InOrderStatusEnum.关闭.ObjToInt() && proInDTOs.Select(x=>x.ProductOrderNo).Distinct().Contains(x.ProductOrderNo));
                if (proInOrderInfo != null)
                {
                    return content.Error($"{proInOrderInfo.ProductOrderNo}生产工单已关闭");
                }
                List<Dt_MESProInOrderInfo> AddMESProInOrders = new List<Dt_MESProInOrderInfo>();
                foreach (var item in proInDTOs)
                {
                    Dt_MaterielInfo materielInfo = materielInfos.FirstOrDefault(x=>x.MaterielCode== item.MaterialCode);
                    if (materielInfo.MaterielSourceType!=MaterielTypeEnum.成品.ObjToInt())
                    {
                        Dt_AGVStationInfo? CheckPointCode = aGVStationInfos.FirstOrDefault(x=>x.MESPointCode==item?.PointCode);
                        if (CheckPointCode == null)
                        {
                            return content.Error($"周转位{nameof(MESReturnIssueDTO.PointCode)}{item?.PointCode}不存在,仅成品物料可不传");
                        }
                    }
                    Dt_MESProInOrderInfo AddproInOrderInfo = _mapper.Map<Dt_MESProInOrderInfo>(item);
                    AddproInOrderInfo.WarehouseId = materielInfo.WarehouseId;
                    AddproInOrderInfo.MESProOrderType = materielInfo.MaterielSourceType;
                    AddMESProInOrders.Add(AddproInOrderInfo);
                }
                BaseDal.AddData(AddMESProInOrders);
                content.OK("接收成功");
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// MES工单停止接口
        /// </summary>
@@ -107,14 +50,14 @@
                    return content.Error("传入信息不能为空");
                }
                //获取对应单据
                List<Dt_MESProInOrderInfo>? mESProInOrderInfos = BaseDal.QueryData(x => x.ProductOrderNo == orderStopDTO.ProductOrderNo && x.MESProInStatus != OutOrderStatusEnum.关闭.ObjToInt());
                List<Dt_MESProInOrderInfo>? mESProInOrderInfos = BaseDal.QueryData(x => x.ProductOrderNo == orderStopDTO.ProductOrderNo && x.MESProInStatus != InOrderStatusEnum.关闭.ObjToInt());
                if (mESProInOrderInfos == null || mESProInOrderInfos.Count <= 0)
                {
                    return content.Error($"成品或半成品工单{nameof(MESOrderStopDTO.ProductOrderNo)}{orderStopDTO.ProductOrderNo}不存在或已关闭");
                }
                mESProInOrderInfos.ForEach(x =>
                {
                    x.MESProInStatus = OutOrderStatusEnum.关闭.ObjToInt();
                    x.MESProInStatus = InOrderStatusEnum.关闭.ObjToInt();
                });
                BaseDal.UpdateData(mESProInOrderInfos);
                content.OK($"工单{nameof(MESOrderStopDTO.ProductOrderNo)}{orderStopDTO.ProductOrderNo}停止成功");
@@ -125,5 +68,49 @@
            }
            return content;
        }
        /// <summary>
        /// MES工单停止接口
        /// </summary>
        /// <summary>
        public WebResponseContent MESBoxCode(string boxCode)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                if (boxCode.IsNullOrEmpty())
                {
                    return content.Error("传入信息不能为空");
                }
                //获取对应单据
                Dt_MESProInOrderInfo mESProInOrderInfo = BaseDal.QueryFirst(x => x.BarCode == boxCode);
                if (mESProInOrderInfo == null)
                {
                    return content.Error($"成品条码{boxCode}不存在");
                }
                if (mESProInOrderInfo.MESProInStatus==InOrderStatusEnum.入库完成.ObjToInt())
                {
                    return content.Error($"成品条码{boxCode}已入库");
                }
                mESProInOrderInfo.MESProInStatus = InOrderStatusEnum.入库完成.ObjToInt();
                MESResponse response = _invokeMESService.MESBoxCodeNotice(boxCode).DeserializeObject<MESResponse>() ?? throw new Exception("未获取到MES返回信息");
                if (!response.Result)
                {
                    throw new Exception($"MES配送出发接口调用报错,MES返回信息{DecodeUnicode(response.Msg)}");
                }
                BaseDal.UpdateData(mESProInOrderInfo);
                content.OK($"成品条码{boxCode}扫码入库");
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
        public static string DecodeUnicode(string input)
        {
            return Regex.Replace(input, @"\\u([0-9a-fA-F]{4})", match => {
                return ((char)Convert.ToInt32(match.Groups[1].Value, 16)).ToString();
            });
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Basic/Dt_MaterielInfo.cs
@@ -96,6 +96,12 @@
        public string MaterielUnit { get; set; }
        /// <summary>
        /// è¾…单位
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "辅单位")]
        public string AssistUnitCode { get; set; }
        /// <summary>
        /// ç‰©æ–™çŠ¶æ€(0:禁用、1:可用)
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "物料状态(0:禁用、1:可用)")]
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_OutMESOrder.cs
@@ -120,6 +120,18 @@
        public decimal OutTotalUsage { get; set; }
        /// <summary>
        /// åŸºæœ¬å•位
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "基本单位")]
        public string MaterielUnit { get; set; }
        /// <summary>
        /// è¾…单位
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "辅单位")]
        public string AssistUnitCode { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "备注")]
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_OutSGOrder.cs
@@ -55,6 +55,12 @@
        public string ShortName { get; set; }
        /// <summary>
        /// å·¥å•用纸序号
        /// </summary>
        [SugarColumn(IsNullable = false,  ColumnDescription = "工单用纸序号")]
        public int Number { get; set; }
        /// <summary>
        /// å‡ºåº“单状态
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "出库单状态")]
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_OutSGOrderDetail.cs
@@ -111,6 +111,12 @@
        public string MaterialName { get; set; }
        /// <summary>
        /// å¤‡æ³¨(上游)
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "备注(上游)")]
        public string Remark { get; set; }
        /// <summary>
        /// å‡ºåº“单明细状态
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "出库单明细状态")]
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_OutStockLockInfo.cs
@@ -106,6 +106,12 @@
        public string Unit { get; set; }
        /// <summary>
        /// è¾…单位
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "辅单位")]
        public string AssistUnit { get; set; }
        /// <summary>
        /// æœºå°ä½ç½®
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "机台位置")]
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/TaskInfo/Dt_Task.cs
@@ -142,6 +142,7 @@
        [ExporterHeader(DisplayName = "任务下发时间")]
        [SugarColumn(IsNullable = true, ColumnDescription = "任务下发时间")]
        public DateTime? Dispatchertime { get; set; }
        /// <summary>
        /// ä»»åŠ¡ç»„
        /// </summary>
@@ -149,6 +150,7 @@
        [ExporterHeader(DisplayName = "任务组")]
        [SugarColumn(IsNullable = true, ColumnDescription = "任务组")]
        public string GroupId { get; set; }
        /// <summary>
        /// ä»»åŠ¡ç‰©æ–™é•¿åº¦
        /// </summary>
@@ -156,6 +158,7 @@
        [ExporterHeader(DisplayName = "任务物料长度")]
        [SugarColumn(IsNullable = true, ColumnDescription = "任务物料长度")]
        public int TaskLength { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
@@ -163,6 +166,7 @@
        [ExporterHeader(DisplayName = "备注")]
        [SugarColumn(IsNullable = true, Length = 255, ColumnDescription = "备注")]
        public string Remark { get; set; }
        /// <summary>
        /// ç‰©æ–™ç¼–号
        /// </summary>
@@ -170,6 +174,23 @@
        [ExporterHeader(DisplayName = "物料编号")]
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "物料编号")]
        public string MaterielCode { get; set; }
        /// <summary>
        /// åŠ å·¥ä¸­å¿ƒç¼–ç 
        /// </summary>
        [ImporterHeader(Name = "加工中心编码")]
        [ExporterHeader(DisplayName = "加工中心编码")]
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "加工中心编码")]
        public string WorkCentreCode { get; set; }
        /// <summary>
        /// ç‰©æ–™ç¼–号
        /// </summary>
        [ImporterHeader(Name = "MES计划Id")]
        [ExporterHeader(DisplayName = "MES计划Id")]
        [SugarColumn(IsNullable = true, ColumnDescription = "MES计划Id")]
        public int DispatchPlanId { get; set; }
        /// <summary>
        /// ç‰©æ–™æ•°é‡
        /// </summary>
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundService/OutLineViewService.cs
@@ -4,9 +4,11 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.TaskEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Helper;
using WIDESEA_IBasicRepository;
using WIDESEA_IOutboundRepository;
using WIDESEA_IOutboundService;
@@ -37,8 +39,9 @@
            try
            {
                //获取数据
                List<Dt_OutLineView> lineViews = BaseDal.QueryData();
                List<Dt_OutLineView> lineViews = BaseDal.QueryData().OrderBy(x=>x.CreateDate).ToList();
                int taskCount = BaseDal.Db.Queryable<Dt_Task>().Where(x=>x.TaskType==TaskTypeEnum.OldYLOutbound.ObjToInt() && x.TaskStatus==TaskStatusEnum.Line_Executing.ObjToInt()).Count();
                content.OK($"{taskCount}", lineViews);
            }
            catch (Exception ex)
            {
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundService/OutSGOrderService.cs
@@ -20,6 +20,9 @@
using WIDESEA_Common.WareHouseEnum;
using WIDESEA_Core.Helper;
using System.Reflection;
using System.Text.RegularExpressions;
using Microsoft.AspNetCore.Http;
using HslCommunication;
namespace WIDESEA_OutboundService
{
@@ -51,12 +54,12 @@
                //获取所有排程单
                List<Dt_OutSGOrder> outSGOrders = BaseDal.Db.Queryable<Dt_OutSGOrder>().Includes(x => x.Details).ToList();
                List<Dt_OutSGOrderDetail> outSGOrderDetails= outSGOrders.SelectMany(x=>x.Details).ToList();
                //判断单据
                Dt_OutSGOrderDetail? ExistAddOutOrderDetail = outSGOrderDetails.FirstOrDefault(x => outOrderDTOs.Select(t => t.BoardMpsDetailId).Distinct().Contains(x.BoardMpsDetailId));
                if (ExistAddOutOrderDetail != null)
                {
                    return content.Error($"出库排程明细{nameof(SGOutOrderDTO.BoardMpsDetailId)}:{ExistAddOutOrderDetail.BoardMpsDetailId}已存在");
                }
                ////判断单据
                //Dt_OutSGOrderDetail? ExistAddOutOrderDetail = outSGOrderDetails.FirstOrDefault(x => outOrderDTOs.Select(t => t.BoardMpsDetailId).Distinct().Contains(x.BoardMpsDetailId));
                //if (ExistAddOutOrderDetail != null)
                //{
                //    return content.Error($"出库排程明细{nameof(SGOutOrderDTO.BoardMpsDetailId)}:{ExistAddOutOrderDetail.BoardMpsDetailId}已存在");
                //}
                //获取所有物料
                List<Dt_MaterielInfo> materielInfos = _basicRepository.MaterielInfoRepository.QueryData(x => x.WarehouseId == WarehouseEnum.LLDYL.ObjToInt() && x.MaterielInvOrgId == MaterielInvOrgEnum.老厂.ObjToInt() && x.MaterialSourceId != 0);
                SGOutOrderDTO? sGOutOrderDTO = outOrderDTOs.FirstOrDefault(x => !materielInfos.Select(x => x.MaterielCode).Contains(x.MaterialNo));
@@ -66,15 +69,28 @@
                    return content.Error($"生产排程{sGOutOrderDTO.OrderId}物料:{sGOutOrderDTO.MaterialNo}不存在");
                }
                List<Dt_OutSGOrder> AddOutSGOrders = new List<Dt_OutSGOrder>();
                foreach (var item in outOrderDTOs)
                foreach (var item in outOrderDTOs.OrderBy(x=>x.Number))
                {
                    //获取工单
                    Dt_OutSGOrder? ExistOutSGOrder = AddOutSGOrders.FirstOrDefault(x => x.OrderId == item.OrderId);
                    //获取物料
                    Dt_MaterielInfo materielInfo = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterialNo);
                    //明细提前转换
                    Dt_OutSGOrderDetail outSGOrderDetail = _mapper.Map<Dt_OutSGOrderDetail>(item);
                    //获取物料
                    Dt_MaterielInfo? materielInfo = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterialNo);
                    string code = ExtractFirstPercentContent(outSGOrderDetail.Remark);
                    //处理特殊指定排程判断
                    if (!code.IsNullOrEmpty() && code.StartsWith(outSGOrderDetail.MaterialNo))
                    {
                        materielInfo = materielInfos.FirstOrDefault(x => x.MaterielCode == code);
                        if (materielInfo==null)
                        {
                            return content.Error($"生产排程{item.OrderId}指定排程物料:{code}不存在");
                        }
                        outSGOrderDetail.MaterialNo = code;
                    }
                    outSGOrderDetail.MaterialName = materielInfo.MaterielName;
                    //判断工单是否已经存在
                    if (ExistOutSGOrder != null)
                    {
@@ -82,7 +98,6 @@
                    }
                    else
                    {
                        Dt_OutSGOrder outSGOrder = _mapper.Map<Dt_OutSGOrder>(item);
                        outSGOrder.Details = new List<Dt_OutSGOrderDetail>() { outSGOrderDetail };
                        AddOutSGOrders.Add(outSGOrder);
@@ -97,5 +112,20 @@
            }
            return content;
        }
        public static string ExtractFirstPercentContent(string input)
        {
            if (string.IsNullOrEmpty(input))
                return null;
            Regex regex = new Regex(@"%(.*?)%");
            Match match = regex.Match(input);
            if (match.Success && match.Groups[1].Success)
            {
                return match.Groups[1].Value.Trim();
            }
            return null;
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundService/OutStockLockInfoService.cs
@@ -75,20 +75,22 @@
                PalletCode = outStock.PalletCode,
                AssignQuantity = assignQuantity,
                MaterielCode = ouMESOrder.MaterialCode,
                BatchNo = ouMESOrder.MaterialLot,
                BatchNo = outStock.BatchNo,
                LocationCode = outStock.LocationCode,
                MaterielName = outStock.MaterielName,
                OrderDetailId = ouMESOrder.OutDetailId,
                OrderNo = ouMESOrder.OutMESOrderNo,
                MakeCode = ouMESOrder.MakeCode,
                MachineName=ouMESOrder.MakeArea.ToString(),
                OrderType=OutOrderTypeEnum.OutMESPick.ObjToInt(),
                MaterielId = outStock.MaterielId,
                OriginalQuantity = outStock.StockLength,
                Status = taskNum == null ? OutLockStockStatusEnum.已分配.ObjToInt() : OutLockStockStatusEnum.出库中.ObjToInt(),
                StockId = outStock.Id,
                TaskNum = taskNum,
                OrderQuantity = ouMESOrder.ReqQuantity,
                Unit = outStock.Unit
                Unit = outStock.Unit,
                AssistUnit= ouMESOrder.AssistUnitCode
            };
            return outStockLockInfo;
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_StockService/StockInfoService.cs
@@ -155,7 +155,8 @@
                    BSTResponse<BSTStockInfoDTO> bSTResponse = _invokeERPService.BSTStockAsync(item.PalletCode).DeserializeObject<BSTResponse<BSTStockInfoDTO>>();
                    if (bSTResponse.Code == 500)
                    {
                        throw new Exception($"未找到条码{item.PalletCode}一期ERP库存不存在");
                        content.Message += $"条码{item.PalletCode}一期ERP库存不存在,";
                        continue;
                    }
                    BSTStockInfoDTO bSTStockInfoDTO = bSTResponse.Data ?? throw new Exception($"一期ERP未返回{item.PalletCode}的库存信息");
                    if (item.StockLength != bSTStockInfoDTO.StockMeter && bSTStockInfoDTO.StockMeter>0)
@@ -180,7 +181,7 @@
                    BaseDal.DeleteAndMoveIntoHty(stockInfosDel, App.User.UserId > 0 ? OperateTypeEnum.人工完成 : OperateTypeEnum.自动完成);
                }
                _unitOfWorkManage.CommitTran();
                content.OK("更新成功");
                content.OK();
            }
            catch (Exception ex)
            {
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/MesTaskService.cs
@@ -33,6 +33,8 @@
using WIDESEA_External.Model;
using System.Text.Json;
using System.Text.RegularExpressions;
using WIDESEA_Common.MaterielEnum;
using MailKit.Search;
namespace WIDESEA_TaskInfoService
{
@@ -90,8 +92,8 @@
                        DispatchPlanMaterialId = autoIssueDTO.OutDetailId,
                        InvItemCode = task.MaterielCode,
                        Quantity = outStockLockInfo.AssignQuantity,
                        SendOutTime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"),
                        ArrivalTime = DateTime.Now.AddMinutes(15).ToString("yyyy-MM-dd hh:mm:ss")
                        SendOutTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                        ArrivalTime = DateTime.Now.AddMinutes(15).ToString("yyyy-MM-dd HH:mm:ss")
                    };
                    MESDispatchModel dispatchModel = new MESDispatchModel()
                    {
@@ -99,15 +101,15 @@
                    };
                    _unitOfWorkManage.BeginTran();
                    task.TaskStatus = TaskStatusEnum.New.ObjToInt();
                    task.TargetAddress = stationInfo.AGVStationCode;
                    task.TargetAddress = autoIssueDTO.PointCode.StartsWith("YS") ? stationInfo.AGVStationCode : autoIssueDTO.PointCode;
                    BaseDal.UpdateData(task);
                    MESResponse mESResponse = _invokeMESService.MESDispatchUp(dispatchModel).DeserializeObject<MESResponse>() ?? throw new Exception("未获取到返回信息");
                    if (!mESResponse.Result)
                    {
                        throw new Exception($"MES配送出发接口调用报错,MES返回信息{DecodeUnicode(mESResponse.Msg)}");
                    }
                    PushTasksToWCS(new List<Dt_Task> { task });
                    _unitOfWorkManage.CommitTran();
                    PushTasksToWCS(new List<Dt_Task> { task });
                    return content.OK("叫料成功");
                }
            }
@@ -167,8 +169,8 @@
                        DispatchPlanMaterialId = manualIssueDTO.OutDetailId,
                        InvItemCode = task.MaterielCode,
                        Quantity = outStockLockInfo.AssignQuantity,
                        SendOutTime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"),
                        ArrivalTime = DateTime.Now.AddMinutes(15).ToString("yyyy-MM-dd hh:mm:ss")
                        SendOutTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                        ArrivalTime = DateTime.Now.AddMinutes(15).ToString("yyyy-MM-dd HH:mm:ss")
                    };
                    MESDispatchModel dispatchModel = new MESDispatchModel()
                    {
@@ -176,15 +178,15 @@
                    };
                    _unitOfWorkManage.BeginTran();
                    task.TaskStatus = TaskStatusEnum.New.ObjToInt();
                    task.TargetAddress = stationInfo.AGVStationCode;
                    task.TargetAddress = manualIssueDTO.PointCode.StartsWith("YS") ? stationInfo.AGVStationCode : manualIssueDTO.PointCode;
                    BaseDal.UpdateData(task);
                    MESResponse mESResponse = _invokeMESService.MESDispatchUp(dispatchModel).DeserializeObject<MESResponse>() ?? throw new Exception("未获取到返回信息");
                    if (!mESResponse.Result)
                    {
                        throw new Exception($"MES配送出发接口调用报错,MES返回信息{DecodeUnicode(mESResponse.Msg)}");
                    }
                    PushTasksToWCS(new List<Dt_Task> { task });
                    _unitOfWorkManage.CommitTran();
                    PushTasksToWCS(new List<Dt_Task> { task });
                    return content.OK("叫料成功");
                }
            }
@@ -216,16 +218,116 @@
                    {
                        return content.Error($"周转位{nameof(MESReturnIssueDTO.PointCode)}{returnIssueDTO.PointCode}不存在");
                    }
                    //获取所有库存
                    List<Dt_StockInfo> stockInfosOld = _stockRepository.StockInfoRepository.QueryData();
                    ////空托
                    //foreach (var item in returnIssueDTOs.Where(x=>x.ReturnMaterial==null))
                    //{
                    //}
                    //退料
                    List<Dt_StockInfo> stockInfos=new List<Dt_StockInfo>();
                    List<Dt_Task> tasksNew = new List<Dt_Task>();
                    foreach (var item in returnIssueDTOs.Where(x => x.ReturnMaterial != null))
                    {
                        MESReturnMaterial? returnMaterial = item.ReturnMaterial;
                        if (returnMaterial.BarCode.IsNullOrEmpty())
                        {
                            return content.Error($"退料传入条码不能为空");
                        }
                        Dt_AGVStationInfo aGVStationInfo = aGVStationInfos.FirstOrDefault(x => x.MESPointCode == item.PointCode);
                        Dt_MaterielInfo? materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == returnMaterial.MaterialCode);
                        if (materielInfo == null)
                        {
                            return content.Error($"未找到条码{returnMaterial.BarCode}物料信息");
                        }
                        //判断
                        if (returnMaterial.Thickness <= 0 && materielInfo.WarehouseId==WarehouseEnum.LLDYL.ObjToInt())
                        {
                            return content.Error($"物料{returnMaterial.MaterialCode}条码{returnMaterial.BarCode}直径不能小于0");
                        }
                        if (returnMaterial.Wide <= 0 && materielInfo.WarehouseId == WarehouseEnum.LLDYL.ObjToInt())
                        {
                            return content.Error($"物料{returnMaterial.MaterialCode}条码{returnMaterial.BarCode}直径不能小于0");
                        }
                        Dt_StockInfo? stockInfoOld = stockInfosOld.FirstOrDefault(x => x.PalletCode == returnMaterial.BarCode);
                        if (stockInfoOld != null)
                        {
                            return content.Error($"条码{returnMaterial.BarCode}信息已存在");
                        }
                        //生成库存组盘信息
                        Dt_StockInfo stockInfo = new Dt_StockInfo()
                        {
                            MaterielInvOrgId = materielInfo.MaterielInvOrgId,
                            PalletCode = returnMaterial.BarCode,
                            LocationCode = "",
                            PalletType = 1,
                            WarehouseId = materielInfo.WarehouseId,
                            StockAttribute = materielInfo.MaterielSourceType,
                            StockStatus = StockStatusEmun.MES余料退库.ObjToInt(),
                            MaterielSpec = materielInfo.MaterielSpec,
                            BatchNo = returnMaterial.MaterialLot,
                            Unit = materielInfo.MaterielUnit,
                            MaterielThickness = returnMaterial.Thickness,
                            MaterielWide = returnMaterial.Wide,
                            MaterielWeight = returnMaterial.Weight,
                            MaterielCode = materielInfo.MaterielCode,
                            StockLength = returnMaterial.ReturnQuantity,
                            OrderNo = returnMaterial.ReturnOrderNo,
                            MaterielName = materielInfo.MaterielName,
                            IsFull = WhetherEnum.True.ObjToInt(),
                            IsPick = returnMaterial.Whether == 0 ? WhetherEnum.True.ObjToInt() : WhetherEnum.False.ObjToInt(),
                            Remark = StockStatusEmun.MES余料退库.ToString()
                        };
                        if (stockInfo.MaterielWide > 1200)
                        {
                            stockInfo.PalletType = 2;
                        }
                        stockInfos.Add(stockInfo);
                        //生成余料退料任务
                        Dt_Task newTask = new Dt_Task()
                        {
                            CurrentAddress = item.PointCode.StartsWith("YS") ? aGVStationInfo.AGVStationCode : item.PointCode,
                            Grade = 0,
                            NextAddress = "",
                            PalletCode = stockInfo.PalletCode,
                            Roadway = "",
                            SourceAddress = item.PointCode.StartsWith("YS") ? aGVStationInfo.AGVStationCode : item.PointCode,
                            TargetAddress = "",
                            TaskStatus = TaskStatusEnum.New.ObjToInt(),
                            WarehouseId = materielInfo.WarehouseId,
                            PalletType = stockInfo.PalletType,
                            MaterielCode=stockInfo.MaterielCode,
                            Quantity=stockInfo.StockLength,
                            OrderNo=stockInfo.OrderNo,
                            TaskLength = (int)stockInfo.MaterielWide,
                            GroupId= item.IssueId,
                            WorkCentreCode=item.MakeCode
                        };
                        TaskTypeEnum taskTypeEnum = aGVStationInfo.StationArea switch
                        {
                            nameof(StationAreaEnum.一楼印刷) => TaskTypeEnum.PrintYLBackInbound,
                            _ => throw new Exception("未找到对应任务")
                        };
                        newTask.TaskType = taskTypeEnum.ObjToInt();
                        tasksNew.Add(newTask);
                    }
                    _unitOfWorkManage.BeginTran();
                    BaseDal.AddData(tasksNew);
                    _stockRepository.StockInfoRepository.AddData(stockInfos);
                    _unitOfWorkManage.CommitTran();
                    //推送任务
                    PushTasksToWCS(tasksNew);
                    content.OK("呼叫成功");
                }
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                content.Error(ex.Message);
            }
            return content;
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs
@@ -1605,6 +1605,10 @@
                            return content.Error($"周转位{nameof(MESReturnIssueDTO.PointCode)}{item?.PointCode}不存在,仅成品物料可不传");
                        }
                    }
                    if (materielInfo.MaterielSourceType == MaterielTypeEnum.成品.ObjToInt() && (item.Length <= 0 || item.Width <= 0 || item.Height<=0))
                    {
                        return content.Error($"箱码{item.ProPackCode},长度/宽度/高度不能为0");
                    }
                    Dt_MESProInOrderInfo AddproInOrderInfo = _mapper.Map<Dt_MESProInOrderInfo>(item);
                    AddproInOrderInfo.WarehouseId = materielInfo.WarehouseId;
                    AddproInOrderInfo.MESProOrderType = materielInfo.MaterielSourceType;
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs
@@ -25,6 +25,7 @@
using WIDESEA_DTO.MES;
using WIDESEA_DTO.Outbound;
using Microsoft.IdentityModel.Tokens;
using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
namespace WIDESEA_TaskInfoService
{
@@ -189,7 +190,22 @@
                                x.Status=OutLockStockStatusEnum.出库完成.ObjToInt();
                            });
                            _outboundRepository.OutStockLockInfoRepository.UpdateData(outStockLockInfos);
                            _outboundService.OutLineViewService.SaveLineView(outStockLockInfos);
                            List<Dt_OutStockLockInfo> outStockLockInfosSG = outStockLockInfos.Where(x => x.OrderType == OutOrderTypeEnum.OutSGPick.ObjToInt()).ToList();
                            List<Dt_OutStockLockInfo> outStockLockInfosMES = outStockLockInfos.Where(x => x.OrderType == OutOrderTypeEnum.OutMESPick.ObjToInt()).ToList();
                            if (outStockLockInfosSG !=null && outStockLockInfosSG.Count()>0)
                            {
                                _outboundService.OutLineViewService.SaveLineView(outStockLockInfosSG);
                            }
                            if (outStockLockInfosMES != null && outStockLockInfosMES.Count() > 0)
                            {
                                Dt_AGVStationInfo aGVStationInfo = _basicRepository.AGVStationInfoRepository.QueryFirst(x=>x.AGVStationCode==task.TargetAddress);
                                MESDeliveryModel mESDeliveryModel = MESDeliveryUp(outStockLockInfosMES, aGVStationInfo.MESPointCode);
                                MESResponse response = _invokeMESService.MESDelivery(mESDeliveryModel).DeserializeObject<MESResponse>() ?? throw new Exception("未获取到返回信息");
                                if (!response.Result)
                                {
                                    throw new Exception($"MES配送出发接口调用报错,MES返回信息{DecodeUnicode(response.Msg)}");
                                }
                            }
                        }
                        _basicService.LocationInfoService.UpdateLocationStatus(locationInfoStart, stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId);
                        BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.人工完成 : OperateTypeEnum.自动完成);
@@ -207,6 +223,34 @@
                _unitOfWorkManage.RollbackTran();
                return content.Error(ex.Message);
            }
        }
        /// <summary>
        /// é…é€é€è¾¾ä¿¡æ¯
        /// </summary>
        /// <returns></returns>
        public MESDeliveryModel MESDeliveryUp(List<Dt_OutStockLockInfo> outStockLockInfos,string address)
        {
            MESDeliveryModel mESDeliveryModel = new MESDeliveryModel()
            {
                PRO_DispatchPlanMaterialsInfoNew= new List<MESDeliveryInfo>()
            };
            foreach (var item in outStockLockInfos)
            {
                MESDeliveryInfo mESDeliveryInfo = new MESDeliveryInfo()
                {
                    InvItemCode=item.MaterielCode,
                    DispatchPlanMaterialId=item.OrderDetailId,
                    UnitCode=item.Unit,
                    GradeCode="001",
                    MainQuantity=item.AssignQuantity,
                    AssistUnitCode=item.AssistUnit,
                    LocationCode= address,
                    LotNumber=item.BatchNo,
                    MaterialBarCode=item.PalletCode
                };
                mESDeliveryModel.PRO_DispatchPlanMaterialsInfoNew.Add(mESDeliveryInfo);
            }
            return mESDeliveryModel;
        }
        /// <summary>
        /// åº“存数据转出库任务(原料/半成品)
@@ -294,7 +338,9 @@
                            MaterielCode = stockInfo.MaterielCode,
                            RfidCode = stockInfo.RfidCode,
                            Quantity = stockInfo.StockLength,
                            OrderNo= outStockLockInfo.OrderNo
                            OrderNo= outStockLockInfo.OrderNo,
                            DispatchPlanId=outStockLockInfo.OrderDetailId,
                            WorkCentreCode=outStockLockInfo.MakeCode
                        };
                        if (stockInfo.MaterielWide > 0)
                        {
@@ -842,6 +888,8 @@
                    Dt_MakeCenterInfo makeCenterInfo=makeCenterInfos.FirstOrDefault(x => x.MakeCode == item.MakeCode);
                    item.MakeArea = makeCenterInfo.MakeArea;
                    item.WarehouseId = materielInfo.WarehouseId;
                    item.MaterielUnit = materielInfo.MaterielUnit;
                    item.AssistUnitCode = materielInfo.AssistUnitCode;
                }
                
                _unitOfWorkManage.BeginTran();
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/MES/MesController.cs
@@ -144,9 +144,9 @@
        /// <param name="boxCode"></param>
        /// <returns></returns>
        [HttpPost,HttpGet, Route("MESBoxCodeNotice"), AllowAnonymous]
        public string MESBoxCodeNotice(string boxCode)
        public WebResponseContent MESBoxCodeNotice(string boxCode)
        {
            return _invokeMESService.MESBoxCodeNotice(boxCode);
            return _proInOrderInfoService.MESBoxCode(boxCode);
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Outbound/OutLineViewController.cs
@@ -1,4 +1,5 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using WIDESEA_Core;
using WIDESEA_Core.BaseController;
using WIDESEA_IOutboundService;
@@ -7,7 +8,7 @@
namespace WIDESEA_WMSServer.Controllers.Outbound
{
    /// <summary>
    /// åšæ€é€šé¢†æ–™ä¿¡æ¯
    /// å‡ºåº“线体缓存
    /// </summary>
    [Route("api/OutLineView")]
    [ApiController]
@@ -20,6 +21,7 @@
        /// èŽ·å–çº¿ä½“åŽŸçº¸
        /// </summary>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("GetOutLineView"), AllowAnonymous]
        public WebResponseContent GetOutLineView()
        {
            return Service.GetOutLineView();
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/appsettings.json
@@ -30,7 +30,7 @@
  "LogAopEnable": false,
  "PrintSql": true, //打印SQL语句
  "ApiName": "WIDESEA",
  "ExpMinutes": 120,
  "ExpMinutes": 360,
  "QuartzJobAutoStart": true,
  "PDAVersion": "4",
  "WebSocketPort": 9296
ÏîÄ¿×ÊÁÏ/½Ó¿ÚЭÒé/ÁúÀûµÃMES½Ó¿Ú.xlsx
Binary files differ