wangxinhui
2025-09-13 57148c2264abe80bd3b472f2980104d90dad5c61
合并,接口优化等
已添加13个文件
已修改20个文件
1222 ■■■■■ 文件已修改
代码管理/WMS/WIDESEA_WMSClient/src/extension/outbound/proCollectOutOrder.js 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/router/viewGird.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/outbound/proCollectOutOrder.vue 314 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_BC.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderResultService.cs 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/InboundOrderMenu.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/OutboundOrderEnum.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IProCollectOutOrderDetailRepository.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IProCollectOutOrderRepository.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundService.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IProCollectOutOrderDetailService.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IProCollectOutOrderService.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs 134 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReturnOrderService.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Check/Dt_CheckOrder.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrderDetail.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_ProCollectOutOrder.cs 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_ProCollectOutOrderDetail.cs 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/ProCollectOutOrderDetailRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/ProCollectOutOrderRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProCollectOutOrderDetailService.cs 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProCollectOutOrderService.cs 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/AssignInboundTaskLocation_BC.cs 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/ERP/ErpController.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/ProCollectOutOrderController.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/extension/outbound/proCollectOutOrder.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,110 @@
//此js文件是用来自定义扩展业务代码,可以扩展一些自定义页面或者重新配置生成的代码
import { el } from 'element-plus/es/locales.mjs';
import gridBody from './extend/proOutboundOrderDetail.vue'
let extension = {
    components: {
      //查询界面扩展组件
      gridHeader: '',
      gridBody: gridBody,
      gridFooter: '',
      //新建、编辑弹出框扩展组件
      modelHeader: '',
      modelBody: '',
      modelFooter: ''
    },
    tableAction: '', //指定某张表的权限(这里填写表名,默认不用填写)
    buttons: { view: [], box: [], detail: [] }, //扩展的按钮
    methods: {
       //下面这些方法可以保留也可以删除
      onInit() {
        let outSysc = this.buttons.find(x => x.value == 'ExecuteOutboundSync');
        if (outSysc) {
          outSysc.onClick = function () {
            let rows = this.$refs.table.getSelected();
            if (rows.length == 0) return this.$error("请选择数据!");
            if (rows.length > 1) return this.$error("请选择单条数据!");
            // this.$confirm("确认创建收货单" + rows[0].receiveOrderNo + "的入库吗?", "警告", {
            //   confirmButtonText: "确定",
            //   cancelButtonText: "取消",
            //   type: "warning",
            //   center: true,
            // }).then(() => {
              var keys = rows.map(x => { return x.proOutOrderNo });
              this.http
                .post("api/ProOutOrder/OutProErpSync?outProOrderNo=" + keys[0], null, "数据处理中")
                .then((x) => {
                  if (!x.status) return this.$message.error(x.message);
                  this.$message.success("操作成功");
                  this.refresh();
                });
            // });
          }
        }
        //扩展页面初始化操作
        this.columns.push({
            field: '操作',
            title: '操作',
            width: 90,
            fixed: 'right',
            align: 'center',
            formatter: (row) => {
                return (
                    '<i style="cursor: pointer;color: #2d8cf0;"class="el-icon-view">查看明细</i>'
                );
            },
            click: (row) => {
                this.$refs.gridBody.open(row);
            }
        });
      },
      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); //单击行时选中当前行;
        let outSysc = this.buttons.find(x => x.value == 'ExecuteOutboundSync');
        console.log(outSysc);
        if (row.proOrderStatus==2) {
          if (!outSysc.hidden){
            this.$message.warning(row.proOutOrderNo+"订单已完成,无需同步");
            outSysc.hidden=true;
          }
        }else{
          outSysc.hidden=false;
        }
      },
      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/router/viewGird.js
@@ -302,6 +302,10 @@
    path: '/inspectOrder',
    name: 'inspectOrder',
    component: () => import('@/views/check/inspectOrder.vue')
  }, {
    path: '/proCollectOutOrder',
    name: 'proCollectOutOrder',
    component: () => import('@/views/outbound/proCollectOutOrder.vue')
  }
]
export default viewgird
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/outbound/proCollectOutOrder.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,314 @@
<template>
    <view-grid
      ref="grid"
      :columns="columns"
      :detail="detail"
      :editFormFields="editFormFields"
      :editFormOptions="editFormOptions"
      :searchFormFields="searchFormFields"
      :searchFormOptions="searchFormOptions"
      :table="table"
      :extend="extend"
    >
    </view-grid>
  </template>
      <script>
  import extend from "@/extension/outbound/proCollectOutOrder.js";
  import { ref, defineComponent } from "vue";
  export default defineComponent({
    setup() {
      const table = ref({
        key: "id",
        footer: "Foots",
        cnName: "成品领料出库单",
        name: "proCollectOutOrder",
        url: "/proCollectOutOrder/",
        sortName: "id",
      });
      const editFormFields = ref({
        proOrderType: "",
        proCollectOutOrderNo: "",
        proOrderStatus: "",
        warehouseId: "",
      });
      const editFormOptions = ref([
        [
          {
            title: "单据类型",
            required: true,
            field: "proOrderType",
            type: "select",
            dataKey: "ProOrderType",
            data: [{key:2,value:"成品领料出库单"}]
          },
          {
            field: "proCollectOutOrderNo",
            title: "单据编号",
            type: "string",
            readonly: true,
          },
          {
            title: "单据状态",
            field: "proOrderStatus",
            type: "select",
            dataKey: "outboundStatusEnum",
            data: [],
            readonly: true,
          },
          {
            title: "仓库",
            field: "warehouseId",
            type: "select",
            dataKey: "warehouses",
            data: [],
            required: true,
          },
        ],
      ]);
      const searchFormFields = ref({
        proOutOrderNo: "",
        proOrderStatus: "",
      });
      const searchFormOptions = ref([
        [
          { title: "出库单号", field: "proOutOrderNo", type: "like" },
          {
            title: "单据状态",
            field: "proOrderStatus",
            type: "select",
            dataKey: "outboundStatusEnum",
            data: [],
          },
        ]
      ]);
      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: 90,
          align: "left",
          bind: { key: "warehouses", data: [] },
        },
        {
          field: "proCollectOutOrderNo",
          title: "出库单号",
          type: "string",
          width: 160,
          align: "left",
          link: true,
        },
        {
          field: "proOrderType",
          title: "单据类型",
          type: "string",
          width: 150,
          align: "left",
          bind: { key: "ProOrderType", data: [{key:2,value:"成品领料出库单"}] },
        },
        {
          field: "proOrderStatus",
          title: "单据状态",
          type: "decimal",
          width: 90,
          align: "left",
          bind: { key: "outboundStatusEnum", data: [] },
        },
        // {
        //   field: "createType",
        //   title: "创建方式",
        //   type: "string",
        //   width: 120,
        //   align: "left",
        //   bind: { key: "createType", data: [] },
        // },
        // {
        //   field: "departmentCode",
        //   title: "修改时间",
        //   type: "string",
        //   width: 120,
        //   align: "left",
        //   hidden: true,
        // },
        {
          field: "creater",
          title: "创建人",
          type: "string",
          width: 90,
          align: "left",
        },
        {
          field: "createDate",
          title: "创建时间",
          type: "datetime",
          width: 160,
          align: "left",
        },
        // {
        //   field: "modifier",
        //   title: "修改人",
        //   type: "string",
        //   width: 100,
        //   align: "left",
        // },
        // {
        //   field: "modifyDate",
        //   title: "修改时间",
        //   type: "datetime",
        //   width: 160,
        //   align: "left",
        // },
        {
          field: "remark",
          title: "备注",
          type: "string",
          width: 100,
          align: "left",
        },
      ]);
      const detail = ref({
        cnName: "出库明细单",
        table: "proCollectOutOrderDetail",
        columns: [
          {
            field: "id",
            title: "Id",
            type: "int",
            width: 90,
            hidden: true,
            readonly: true,
            require: true,
            align: "left",
          },
          {
            field: "proCollectOrderId",
            title: "出库单主键",
            type: "string",
            width: 90,
            align: "left",
            hidden: true,
          },
          {
            field: "rowId",
            title: "行号",
            type: "string",
            width: 90,
            align: "left",
            required: true,
          },
          {
            field: "pCode",
            title: "产品编码",
            type: "string",
            width: 150,
            align: "left",
            required: true,
          },
          {
            field: "pVer",
            title: "产品版本",
            type: "string",
            width: 150,
            align: "left",
          },
          {
            field: "lLot",
            title: "产品批次",
            type: "string",
            width: 90,
            align: "left",
          },
          {
            field: "dateCode",
            title: "产品周期",
            type: "string",
            width: 100,
            align: "left",
          },
          {
            field: "qtyPcs",
            title: "出库合格PCS数",
            type: "string",
            width: 130,
            align: "left",
            required: true,
          },
          {
            field: "overQtyPcs",
            title: "已出数量",
            type: "string",
            width: 100,
            align: "left",
          },
          {
            field: "lockQtyPcs",
            title: "锁定数量",
            type: "string",
            width: 100,
            align: "left",
          },
          {
            field: "setQty",
            title: "Set数",
            type: "string",
            width: 100,
            align: "left",
          },
          {
            field: "proOrderDetailStatus",
            title: "订单明细状态",
            type: "string",
            width: 180,
            align: "left",
            bind: { key: "orderDetailStatusEnum", data: [] },
          },
          {
            field: "unit",
            title: "单位",
            type: "string",
            width: 100,
            align: "left",
          },
          {
            field: "orderDate",
            title: "审核日期",
            type: "datetime",
            width: 160,
            align: "left",
          },
          {
            field: "remark",
            title: "备注",
            type: "string",
            width: 100,
            align: "left",
          },
        ],
        sortName: "id",
        key: "id",
      });
      return {
        table,
        extend,
        editFormFields,
        editFormOptions,
        searchFormFields,
        searchFormOptions,
        columns,
        detail,
      };
    },
  });
  </script>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_BC.cs
@@ -75,15 +75,15 @@
                if(heightType == 1)
                {
                    undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x=>x.Layer <= 3).ToList();
                    definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Layer <= 3).ToList();
                    undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x=>x.Layer <= 4).ToList();
                    definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Layer <= 4).ToList();
                }
                else if(heightType == 2)
                {
                    undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Layer == 4).ToList();
                    definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Layer == 4).ToList();
                }
                else if (heightType == 3)
                //else if(heightType == 2)
                //{
                //    undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Layer == 4).ToList();
                //    definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Layer == 4).ToList();
                //}
                else if (heightType == 2)
                {
                    undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Layer == 5).ToList();
                    definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Layer == 5).ToList();
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderResultService.cs
@@ -3,8 +3,10 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.CommonEnum;
using WIDESEA_Common.OrderEnum;
using WIDESEA_Common.StockEnum;
using WIDESEA_Common.WareHouseEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
@@ -12,6 +14,7 @@
using WIDESEA_Core.Helper;
using WIDESEA_External.Model;
using WIDESEA_IApprovalRepository;
using WIDESEA_IBasicRepository;
using WIDESEA_ICheckRepository;
using WIDESEA_ICheckService;
using WIDESEA_IInboundRepository;
@@ -31,7 +34,10 @@
        private readonly IPurchaseOrderDetailRepository _purchaseOrderDetailRepository;
        private readonly IOutboundRepository _outboundRepository;
        private readonly IStockRepository _stockRepository;
        public CheckOrderResultService(ICheckOrderResultRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, ICheckOrderRepository checkOrderRepository, IReceiveOrderRepository receiveOrderRepository, ICheckOrderService checkOrderService, IPurchaseOrderRepository purchaseOrderRepository, IPurchaseOrderDetailRepository purchaseOrderDetailRepository, IOutboundRepository outboundRepository, IStockRepository stockRepository) : base(BaseDal)
        private readonly IWarehouseRepository _warehouseRepository;
        private readonly IReceiveOrderDetailRepository _receiveOrderDetailRepository;
        public CheckOrderResultService(ICheckOrderResultRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, ICheckOrderRepository checkOrderRepository, IReceiveOrderRepository receiveOrderRepository, ICheckOrderService checkOrderService, IPurchaseOrderRepository purchaseOrderRepository, IPurchaseOrderDetailRepository purchaseOrderDetailRepository, IOutboundRepository outboundRepository, IStockRepository stockRepository,IWarehouseRepository warehouseRepository, IReceiveOrderDetailRepository receiveOrderDetailRepository) : base(BaseDal)
        {
            _checkOrderRepository = checkOrderRepository;
            _unitOfWorkManage = unitOfWorkManage;
@@ -41,6 +47,8 @@
            _purchaseOrderDetailRepository = purchaseOrderDetailRepository;
            _outboundRepository = outboundRepository;
            _stockRepository = stockRepository;
            _warehouseRepository=warehouseRepository;
            _receiveOrderDetailRepository = receiveOrderDetailRepository;
        }
        /// <summary>
@@ -61,6 +69,7 @@
                {
                    return content.Error($"未找到该质检单");
                }
                Dt_Warehouse warehouse = _warehouseRepository.QueryFirst(x => x.WarehouseId == checkOrder.WarehouseId);
                Dt_ReceiveOrder receiveOrder = _receiveOrderRepository.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderNo == checkOrder.ReceiveOrderNo).Includes(x => x.Details).First();
                if (receiveOrder.ReceiveOrderStatus!=ReceiveOrderStatusEnum.Completed.ObjToInt())
                {
@@ -178,6 +187,8 @@
                {
                    return content.Error($"未找到该质检单");
                }
                Dt_Warehouse warehouse = _warehouseRepository.QueryFirst(x => x.WarehouseId == checkOrder.WarehouseId);
                //获取收货单
                Dt_ReceiveOrder receiveOrder = _receiveOrderRepository.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderNo == checkOrder.ReceiveOrderNo).Includes(x => x.Details).First();
                if (receiveOrder.ReceiveOrderStatus != ReceiveOrderStatusEnum.Completed.ObjToInt())
                {
@@ -203,6 +214,7 @@
                    {
                        return content.Error($"未找到缺陷类型");
                    }
                    //检验结果
                    checkOrderResult = new Dt_CheckOrderResult()
                    {
                        Quantity = (float)Convert.ToDecimal(eRPCheckResult.Quantity),
@@ -212,7 +224,7 @@
                        Note = eRPCheckResult.Note,
                        SampleCount = 0,
                    };
                    //获取对应采购单
                    //获取对应采购单扣除收货数量
                    Dt_ReceiveOrderDetail receiveOrderDetail = receiveOrder.Details.First(x => x.RowNo == checkOrder.ReceiveDetailRowNo);
                    purchaseOrder = _purchaseOrderRepository.Db.Queryable<Dt_PurchaseOrder>().Where(x => x.PurchaseOrderNo == receiveOrderDetail.PurchaseOrderNo).Includes(x => x.Details).Where(x => x.Details.Any(v => v.RowNo == receiveOrderDetail.PurchaseOrderDetailRowNo)).First();
                    if (purchaseOrder == null)
@@ -226,6 +238,7 @@
                    }
                    purchaseOrderDetail.PurchaseDetailReceiveQty -= (float)Convert.ToDecimal(eRPCheckResult.Quantity);
                }
                //判断检验合格结果
                if (checkModel.Result == CheckAcceptEnum.Accept.ToString())
                {
                    checkOrder.Result = CheckAcceptEnum.Accept.ToString();
@@ -239,17 +252,33 @@
                    return content.Error("未找到检验类型");
                }
                checkOrder.CheckOrderStatus = CheckOrderStatusEnum.Checked.ObjToInt();
                List<Dt_ReceiveOrderDetail> receiveOrderDetails = new List<Dt_ReceiveOrderDetail>();
                //根据检验数量扣除合格数量
                if (checkOrderResult != null)
                {
                    checkOrder.QualifiedQuantity = checkOrder.ReceivedQuantity - checkOrderResult.Quantity;
                    //更新收货检验合格标识
                    if (warehouse.WarehouseCode == WarehouseEnum.HA152.ToString() || warehouse.WarehouseCode == WarehouseEnum.HA58.ToString())
                    {
                        receiveOrderDetails = receiveOrder.Details.Where(x=>x.RowNo==checkOrder.ReceiveDetailRowNo).OrderByDescending(x => x.RowNo).Take((int)checkOrderResult.Quantity).ToList();
                        receiveOrderDetails.ForEach(x =>
                        {
                            x.IsCheckOk = WhetherEnum.True.ObjToInt();
                        });
                    }
                }
                else
                {
                    checkOrder.QualifiedQuantity = checkOrder.ReceivedQuantity;
                }
                checkOrder.CheckUserName = App.User.UserName;
                _unitOfWorkManage.BeginTran();
                if (receiveOrderDetails.Count > 0)
                {
                    _receiveOrderDetailRepository.UpdateData(receiveOrderDetails);
                }
                //更新采购单
                if (checkOrderResult != null && purchaseOrder != null && purchaseOrderDetail != null)
                {
                    BaseDal.AddData(checkOrderResult);
@@ -298,7 +327,7 @@
            try
            {
                Dt_CheckOrder checkOrder = _checkOrderRepository.QueryFirst(x => x.CheckOrderId == checkOrderId);
                //获取质检单对应的收货单
                //获取质检单
                if (checkOrder == null)
                {
                    return content.Error($"未找到该质检单");
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/InboundOrderMenu.cs
@@ -85,20 +85,28 @@
        EmptyDisk = 125,
        /// <summary>
        /// å…¶ä»–入库单
        /// ç»´ä¿®é€€æ–™å•
        /// </summary>
        [Description("其他入库单")]
        Other = 130,
        [Description("维修退料单")]
        RMStock = 130,
        /// <summary>
        /// å®¢ä¾›å›žæ”¶
        /// </summary>
        [Description("客供回收")]
        CustomerRecovery=135,
        /// <summary>
        /// é€æ£€å…¥åº“单
        /// </summary>
        [Description("送检入库单")]
        Inspect = 140,
        /// <summary>
        /// Bom退料单
        /// </summary>
        [Description("Bom退料单")]
        BomReturn = 145,
    }
    /// <summary>
    /// æˆå“å…¥åº“单据类型
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/OutboundOrderEnum.cs
@@ -125,5 +125,10 @@
        /// </summary>
        [Description("成品调拨出库单")]
        ProOutAllocat = 1,
        /// <summary>
        /// æˆå“é¢†æ–™å‡ºåº“单
        /// </summary>
        [Description("成品领料出库单")]
        ProCollect = 2,
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs
@@ -43,6 +43,12 @@
        OutAllocate = 150,
        /// <summary>
        /// ç»´ä¿®å‘料出库
        /// </summary>
        [Description("维修发料出库")]
        OutMaintenance = 160,
        /// <summary>
        /// MES出库
        /// </summary>
        [Description("MES出库")]
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IProCollectOutOrderDetailRepository.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_IOutboundRepository
{
    public interface IProCollectOutOrderDetailRepository : IRepository<Dt_ProCollectOutOrderDetail>
    {
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IProCollectOutOrderRepository.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_IOutboundRepository
{
    public interface IProCollectOutOrderRepository : IRepository<Dt_ProCollectOutOrder>
    {
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundService.cs
@@ -31,5 +31,6 @@
        IErpProTransferOrderService ErpProTransferOrderService { get; }
        IErpProScrapSheetService ErpProScrapSheetService { get; }
        IErpProScrapSheetDetailService ErpProScrapSheetDetailService { get;}
        IProCollectOutOrderService ProCollectOutOrderService { get; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IProCollectOutOrderDetailService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
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.ERP;
using WIDESEA_IOutboundRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_IOutboundService
{
    public interface IProCollectOutOrderDetailService : IService<Dt_ProCollectOutOrderDetail>
    {
        IProCollectOutOrderDetailRepository Repository { get; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IProCollectOutOrderService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
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.ERP;
using WIDESEA_IOutboundRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_IOutboundService
{
    public interface IProCollectOutOrderService : IService<Dt_ProCollectOutOrder>
    {
        IProCollectOutOrderRepository Repository { get; }
        /// <summary>
        /// æŽ¥æ”¶æˆå“é¢†æ–™å‡ºåº“单据
        /// </summary>
        /// <param name="erpProOutLingOrder"></param>
        /// <returns></returns>
        WebResponseContent ProductOutOrder(ErpProOutLingOrder erpProOutLingOrder);
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs
@@ -627,7 +627,7 @@
                #region å…¥åº“完成上报ERP
                if (inboundOrder != null && inboundOrder.OrderStatus == InOrderStatusEnum.入库完成.ObjToInt() && inboundOrder.OrderType != InOrderTypeEnum.Allocat.ObjToInt())
                {
                    if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt())
                    if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt() || inboundOrder.OrderType == InOrderTypeEnum.BomReturn.ObjToInt())
                    {
                        FeedbackReturnOrder(inboundOrder, returnOrder);
                    }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs
@@ -9,6 +9,7 @@
using System.Threading.Tasks;
using WIDESEA_Common.CommonEnum;
using WIDESEA_Common.OrderEnum;
using WIDESEA_Common.WareHouseEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
@@ -62,6 +63,7 @@
        {
            try
            {
                //获取收货单
                Dt_ReceiveOrder receiveOrder = _inboundRepository.ReceiveOrderRepository.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderNo == orderNo).Includes(x => x.Details).First();
                if (receiveOrder == null)
                {
@@ -97,6 +99,7 @@
                {
                    return WebResponseContent.Instance.Error($"库存{stockInfo.PalletCode}中批次{model.LotNo}已存在");
                }
                //日期格式验证
                if (model!=null)
                {
                    string format = "yyyy-MM-dd"; // ç›®æ ‡æ ¼å¼
@@ -274,8 +277,8 @@
                            ReceivedQuantity = model.Quantity,
                            MaterielCode = model.MaterielCode,
                            LotNo = model.LotNo,
                            MaterielName=materielInfo.MaterielName,
                            MaterielSpec=materielInfo.MaterielSpec,
                            MaterielName = materielInfo.MaterielName,
                            MaterielSpec = materielInfo.MaterielSpec,
                            ReceiveOrderId = receiveOrder.ReceiveOrderId,
                            PurchaseOrderDetailRowNo = purchaseOrderDetail.RowNo,
                            IfInspection = materielInfo.IsCheck.ObjToInt(),
@@ -283,7 +286,8 @@
                            PriceInTax = 0,
                            TaxRate = "",
                            RowNo = rowNo + 1,
                            Unit = purchaseOrderDetail.Unit
                            Unit = purchaseOrderDetail.Unit,
                            IsCheckOk = WhetherEnum.False.ObjToInt()
                        };
                        if (receiveOrder.ReceiveOrderStatus == ReceiveOrderStatusEnum.NotStarted.ObjToInt())
                        {
@@ -329,8 +333,10 @@
                        }
                        _inboundRepository.ReceiveOrderRepository.UpdateData(receiveOrder);
                        _inboundRepository.PurchaseOrderDetailRepository.UpdateData(purchaseOrderDetail);
                        if (materielInfo.IsCheck == WhetherEnum.True)
                        //物料检验上传
                        if (materielInfo.IsCheck == WhetherEnum.True && (warehouse.WarehouseCode != WarehouseEnum.HA152.ToString() && warehouse.WarehouseCode != WarehouseEnum.HA58.ToString()))
                        {
                            //收货结果上报
                            Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail);
                            checkOrder.OrderType = CheckTypeEnum.ReceiveCheck.ObjToInt();
                            checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo;
@@ -367,11 +373,13 @@
                            {
                                throw new Exception(mesResponseContent.StrMsg);
                            }
                            //QMS回传结果
                            ReceiveResultDTO? receiveResult = JsonConvert.DeserializeObject<ReceiveResultDTO>(mesResponseContent.Content.ToString());
                            if (receiveResult == null)
                            {
                                throw new Exception("接收QMS结果失败");
                            }
                            //更新检验单号
                            Dt_CheckOrder _CheckOrder = _checkOrderRepository.QueryFirst(x => x.CheckOrderId == id);
                            _CheckOrder.CheckOrderNo = receiveResult.InspectionNumber;
                            _checkOrderRepository.UpdateData(_CheckOrder);
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs
@@ -1,5 +1,6 @@
using AutoMapper;
using MailKit.Search;
using Newtonsoft.Json;
using SqlSugar;
using System;
using System.Collections.Generic;
@@ -7,8 +8,10 @@
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_BasicRepository;
using WIDESEA_Common.CommonEnum;
using WIDESEA_Common.OrderEnum;
using WIDESEA_Common.WareHouseEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
@@ -17,9 +20,11 @@
using WIDESEA_DTO;
using WIDESEA_DTO.Basic;
using WIDESEA_DTO.ERP;
using WIDESEA_DTO.QMS;
using WIDESEA_DTO.Stock;
using WIDESEA_External.ERPService;
using WIDESEA_External.Model;
using WIDESEA_External.QMSService;
using WIDESEA_IBasicRepository;
using WIDESEA_ICheckRepository;
using WIDESEA_IInboundRepository;
@@ -36,8 +41,10 @@
        private readonly IInboundRepository _inboundRepository;
        private readonly IBasicRepository _basicRepository;
        private readonly IInvokeERPService _invokeERPService;
        private readonly ISupplierInfoRepository _supplierInfoRepository;
        private readonly IInvokeQMSService _invokeQMSService;
        public ReceiveOrderService(IReceiveOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IMapper mapper, ICheckOrderRepository checkOrderRepository, IInboundRepository inboundRepository, IBasicRepository basicRepository, IInvokeERPService invokeERPService) : base(BaseDal)
        public ReceiveOrderService(IReceiveOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IMapper mapper, ICheckOrderRepository checkOrderRepository, IInboundRepository inboundRepository, IBasicRepository basicRepository, IInvokeERPService invokeERPService, ISupplierInfoRepository supplierInfoRepository, IInvokeQMSService invokeQMSService) : base(BaseDal)
        {
            _mapper = mapper;
            _unitOfWorkManage = unitOfWorkManage;
@@ -45,6 +52,8 @@
            _inboundRepository = inboundRepository;
            _basicRepository = basicRepository;
            _invokeERPService = invokeERPService;
            _supplierInfoRepository = supplierInfoRepository;
            _invokeQMSService = invokeQMSService;
        }
        public override PageGridData<Dt_ReceiveOrder> GetPageData(PageDataOptions options)
        {
@@ -190,10 +199,13 @@
                {
                    return WebResponseContent.Instance.Error($"未找到仓库信息");
                }
                Dt_SupplierInfo supplierInfo = _supplierInfoRepository.QueryFirst(x => x.SupplierCode == receiveOrder.SuppliersId);
                List<Dt_CheckOrder> checkOrders = new List<Dt_CheckOrder>();
                //生成ERP推送信息
                List<RecevieOrderDetailModel> recevieOrderDetails = new List<RecevieOrderDetailModel>();
                foreach (var item in receiveOrder.Details)
                {
                    //添加收货明细
                    RecevieOrderDetailModel recevieOrderDetail = new RecevieOrderDetailModel()
                    {
                        Currcode = "",
@@ -206,8 +218,7 @@
                        QtyRecieved = item.ReceivedQuantity,
                        Serno = item.RowNo,
                        Supplotno = item.LotNo,
                        Taxrate = "",
                        Taxrate = ""
                    };
                    if (receiveOrder.ReceiveOrderType!=ReceiveOrderTypeEnum.PO.ObjToInt())
                    {
@@ -215,6 +226,78 @@
                        recevieOrderDetail.Currcode = "RMB";
                    }
                    recevieOrderDetails.Add(recevieOrderDetail);
                    if (warehouse.WarehouseCode == WarehouseEnum.HA152.ToString() || warehouse.WarehouseCode == WarehouseEnum.HA58.ToString())
                    {
                        string lotNo = item.LotNo.Substring(0, item.LotNo.IndexOf("-"));
                        Dt_CheckOrder? ExistcheckOrder = checkOrders.FirstOrDefault(x => x.LotNo == lotNo && x.MaterielCode == item.MaterielCode && x.PurchaseOrderNo == item.PurchaseOrderNo);
                        if (ExistcheckOrder == null)
                        {
                            //检验结果结果上报
                            Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(item);
                            checkOrder.LotNo = lotNo;
                            checkOrder.OrderType = CheckTypeEnum.ReceiveCheck.ObjToInt();
                            checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo;
                            checkOrder.Result = CheckAcceptEnum.NotCheckAccept.ToString();
                            checkOrder.QualifiedQuantity = 0;
                            checkOrder.ReceiveDetailRowNo = item.RowNo;
                            checkOrder.WarehouseId = receiveOrder.WarehouseId;
                            checkOrder.ScrappedQuantity = 0;
                            checkOrder.MaterielSpec = item.MaterielSpec;
                            checkOrder.ReturnQuantity = 0;
                            checkOrder.DefectedQuantity = 0;
                            checkOrder.MaterielName = item.MaterielName;
                            checkOrders.Add(checkOrder);
                        }
                        else
                        {
                            //添加检验收货数量
                            ExistcheckOrder.ReceivedQuantity += item.ReceivedQuantity;
                        }
                    }
                }
                _unitOfWorkManage.BeginTran();
                //干膜/PP上报QMS结果
                if (checkOrders.Count > 0)
                {
                    foreach (var checkOrder in checkOrders)
                    {
                        int id = _checkOrderRepository.AddData(checkOrder);
                        QMSReceiveCheckModel qMSReceiveCheck = new QMSReceiveCheckModel()
                        {
                            UniqueTag = id.ToString(),
                            EntryNumber = receiveOrder.ReceiveOrderNo,
                            MaterialCode = checkOrder.MaterielCode,
                            MaterialName = checkOrder.MaterielName,
                            Quantity = (decimal)checkOrder.ReceivedQuantity,
                            SupplierCode = receiveOrder.SuppliersId,
                            SupplierName = supplierInfo.SupplierName,
                            BatchNumber = checkOrder.LotNo,
                            DeliveryNumber = receiveOrder.DeliveryCode,
                            PurchaseNumber = checkOrder.PurchaseOrderNo,
                            RowNumber = checkOrder.ReceiveDetailRowNo,
                            WarehouseCode = warehouse.WarehouseCode,
                            ReceiptDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                            Remark = " "
                        };
                        //调用QMS来料检验接口
                        string response = _invokeQMSService.InvokeReceiveCheckApi(qMSReceiveCheck);
                        MesResponseContent mesResponseContent = response.DeserializeObject<MesResponseContent>();
                        if (!mesResponseContent.BSucc)
                        {
                            throw new Exception(mesResponseContent.StrMsg);
                        }
                        //QMS回传结果
                        ReceiveResultDTO? receiveResult = JsonConvert.DeserializeObject<ReceiveResultDTO>(mesResponseContent.Content.ToString());
                        if (receiveResult == null)
                        {
                            throw new Exception("接收QMS结果失败");
                        }
                        //更新检验单号
                        Dt_CheckOrder _CheckOrder = _checkOrderRepository.QueryFirst(x => x.CheckOrderId == id);
                        _CheckOrder.CheckOrderNo = receiveResult.InspectionNumber;
                        _checkOrderRepository.UpdateData(_CheckOrder);
                    }
                }
                ERPReceiveModel receiveModel = new ERPReceiveModel()
@@ -232,18 +315,18 @@
                    Way = 1,
                    Details = recevieOrderDetails
                };
                //更新收货单信息
                receiveOrder.ReceiveOrderStatus = ReceiveOrderStatusEnum.Completed.ObjToInt();
                //收货推送至ER
                string response = _invokeERPService.InvokeMatReceiveApi(receiveModel);
                ErpRequestContent requestContent = response.DeserializeObject<ErpRequestContent>();
                //收货推送至ERP
                string responseReceive = _invokeERPService.InvokeMatReceiveApi(receiveModel);
                ErpRequestContent requestContent = responseReceive.DeserializeObject<ErpRequestContent>();
                if (requestContent.res != 1)
                {
                    return WebResponseContent.Instance.Error($"{requestContent.Data}");
                    throw new Exception($"{requestContent.Data}");
                }
                receiveOrder.UploadStatus = WhetherEnum.True.ObjToInt();
                BaseDal.UpdateData(receiveOrder);
                _unitOfWorkManage.CommitTran();
                if (receiveOrder.Details.FirstOrDefault(x=>x.IfInspection==WhetherEnum.True.ObjToInt())==null)
                {
                    //创建入库单 todo:明细都是不检验自动创建入库单
@@ -253,6 +336,7 @@
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
@@ -294,13 +378,14 @@
            try
            {
                Dt_ReceiveOrder receiveOrder = Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderId == receiveOrderId).Includes(x => x.Details).First();
                if (receiveOrder.UploadStatus!= WhetherEnum.True.ObjToInt())
                {
                    return WebResponseContent.Instance.Error($"该收货单来料上传ERP失败无法创建入库单据");
                }
                if (receiveOrder == null)
                {
                    return WebResponseContent.Instance.Error($"未找到该收货单信息");
                }
                //ERP判断是否上传
                if (receiveOrder.UploadStatus!= WhetherEnum.True.ObjToInt())
                {
                    return WebResponseContent.Instance.Error($"该收货单来料上传ERP失败无法创建入库单据");
                }
                if (receiveOrder.Details == null || receiveOrder.Details.Count() <= 0)
                {
@@ -310,22 +395,21 @@
                {
                    return WebResponseContent.Instance.Error($"该收货单未完成");
                }
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseId==receiveOrder.WarehouseId);
                //验证入库单是否重复生成
                Dt_InboundOrder OldCreateOrder = _inboundRepository.InboundOrderRepository.QueryFirst(x => x.UpperOrderNo == receiveOrder.ReceiveOrderNo);
                if (receiveOrder.CreateInOrderStatus==WhetherEnum.True.ObjToInt() || OldCreateOrder!=null)
                {
                    return WebResponseContent.Instance.Error($"该收货单对应的入库单已存在");
                }
                #region æ³¨é‡Š
                #region åˆ¤æ–­æ”¶è´§å•检验是否完成
                List<Dt_CheckOrder> checkOrders = _checkOrderRepository.QueryData(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo);
                if (checkOrders.FirstOrDefault(x => x.CheckOrderStatus == CheckOrderStatusEnum.NotCheck.ObjToInt()) != null)
                {
                    return WebResponseContent.Instance.Error($"该收货单未质检完成");
                }
                //if (checkOrders.FirstOrDefault(x => x.AuditStatus != AuditStatusEnum.Agree.ObjToInt()) != null)
                //{
                //    return WebResponseContent.Instance.Error($"该收货单质检结果审批未完成");
                //}
                if (checkOrders.FirstOrDefault(x => x.Result != CheckAcceptEnum.Accept.ToString()) != null)
                {
                    return WebResponseContent.Instance.Error($"收货明细中存有质检未通过");
@@ -343,18 +427,22 @@
                    Details = new List<Dt_InboundOrderDetail>()
                };
                List<Dt_MaterielInfo> materielCodeInfos = _basicRepository.MaterielInfoRepository.QueryData(x => receiveOrder.Details.Select(x => x.MaterielCode).ToList().Contains(x.MaterielCode));
                foreach (var item in receiveOrder.Details)
                foreach (var item in receiveOrder.Details.Where(x=> x.IsCheckOk!=WhetherEnum.True.ObjToInt()))
                {
                    float quantity = item.ReceivedQuantity;
                    #region æ³¨é‡Š
                    if (item.IfInspection == WhetherEnum.True.ObjToInt())
                    {
                        Dt_CheckOrder? checkOrder = checkOrders.FirstOrDefault(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo && x.ReceiveDetailRowNo == item.RowNo);
                        if (checkOrder == null)
                        if (warehouse.WarehouseCode != WarehouseEnum.HA152.ToString() && warehouse.WarehouseCode != WarehouseEnum.HA58.ToString())
                        {
                            return WebResponseContent.Instance.Error($"质检单数据错误");
                            Dt_CheckOrder? checkOrder = checkOrders.FirstOrDefault(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo && x.ReceiveDetailRowNo == item.RowNo);
                            if (checkOrder == null)
                            {
                                return WebResponseContent.Instance.Error($"质检单数据错误");
                            }
                            quantity = checkOrder.QualifiedQuantity.GetValueOrDefault() + checkOrder.DefectedQuantity.GetValueOrDefault();
                        }
                        quantity = checkOrder.QualifiedQuantity.GetValueOrDefault() + checkOrder.DefectedQuantity.GetValueOrDefault();
                    }
                    #endregion
                    Dt_InboundOrderDetail detail = new Dt_InboundOrderDetail()
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReturnOrderService.cs
@@ -226,6 +226,10 @@
                    Remark=returnOrder.Remark,
                    Details= inboundOrderDetails
                };
                if (returnOrder.ReturnOrderType==ReturnOrderTypeEnum.BomReturn.ObjToInt())
                {
                    inboundOrder.OrderType = InOrderTypeEnum.BomReturn.ObjToInt();
                }
                returnOrder.ReturnOrderStatus=ReturnOrderStatusEnum.Returning.ObjToInt();
                _unitOfWorkManage.BeginTran();
                BaseDal.UpdateData(returnOrder);
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Check/Dt_CheckOrder.cs
@@ -76,6 +76,18 @@
        public string MaterielSpec { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "物料名称")]
        public string MaterielName { get; set; }
        /// <summary>
        /// é‡‡è´­å•号
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "采购单号")]
        public string PurchaseOrderNo { get; set; }
        /// <summary>
        /// åˆæ ¼æ•°é‡
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "合格数量")]
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrderDetail.cs
@@ -109,5 +109,11 @@
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "物料规格")]
        public string MaterielSpec { get; set; }
        /// <summary>
        /// æ£€éªŒä¸åˆæ ¼æ ‡è¯†
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "检验不合格标识")]
        public int IsCheckOk { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_ProCollectOutOrder.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,53 @@
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_ProCollectOutOrder), "成品领料出库单")]
    public class Dt_ProCollectOutOrder : 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>
        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "成品领料出库单号")]
        public string ProCollectOutOrderNo { get; set; }
        /// <summary>
        /// è®¢å•类型
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "订单类型")]
        public int ProOrderType { get; set; }
        /// <summary>
        /// è®¢å•状态
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "订单状态")]
        public int ProOrderStatus { get; set; }
        /// <summary>
        /// æˆå“é¢†æ–™å‡ºåº“单详情
        /// </summary>
        [Navigate(NavigateType.OneToMany, nameof(Dt_ProCollectOutOrderDetail.ProCollectOrderId), nameof(Id))]
        public List<Dt_ProCollectOutOrderDetail> Details { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_ProCollectOutOrderDetail.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,117 @@
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_ProCollectOutOrderDetail), "成品领料出库明细单")]
    public class Dt_ProCollectOutOrderDetail : BaseEntity
    {
        /// <summary>
        /// ä¸»é”®
        /// </summary>
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主键")]
        public int Id { get; set; }
        /// <summary>
        /// æˆå“å‡ºåº“单主键
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "领料出库主键")]
        public int ProCollectOrderId { get; set; }
        /// <summary>
        /// å‡ºåº“单行号
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "出库单行号")]
        public int RowId { get; set; }
        /// <summary>
        /// å‡ºåº“单明细状态
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "出库单明细状态")]
        public int ProOrderDetailStatus { get; set; }
        /// <summary>
        /// äº§å“ç¼–码
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "产品编码")]
        public string PCode { get; set; }
        /// <summary>
        /// äº§å“ç‰ˆæœ¬
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "产品版本")]
        public string PVer { get; set; }
        /// <summary>
        /// äº§å“æ‰¹æ¬¡
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "产品批次")]
        public string PLot { get; set; }
        /// <summary>
        /// äº§å“å‘¨æœŸ
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "产品周期")]
        public string DateCode { get; set; }
        /// <summary>
        /// å‡ºåº“合格PCS数
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "出库合格PCS数")]
        public float QtyPcs { get; set; }
        /// <summary>
        /// å·²å‡ºæ•°é‡
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "已出数量")]
        public float OverQtyPcs { get; set; }
        /// <summary>
        /// é”å®šæ•°é‡
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "锁定数量")]
        public float LockQtyPcs { get; set; }
        /// <summary>
        /// Set数
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "Set数")]
        public float SetQty { get; set; }
        /// <summary>
        /// X板数
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "X板数")]
        public float XQty { get; set; }
        /// <summary>
        /// X板位
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "X板位")]
        public string XSite { get; set; }
        /// <summary>
        /// å•位
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "单位")]
        public string Unit { get; set; }
        /// <summary>
        /// å®¡æ ¸æ—¥æœŸ
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "审核日期")]
        public DateTime OrderDate { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 500, ColumnDescription = "备注")]
        public string Note { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/ProCollectOutOrderDetailRepository.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_IOutboundRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_OutboundRepository
{
    public class ProCollectOutOrderDetailRepository : RepositoryBase<Dt_ProCollectOutOrderDetail>, IProCollectOutOrderDetailRepository
    {
        public ProCollectOutOrderDetailRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
        {
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/ProCollectOutOrderRepository.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_IOutboundRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_OutboundRepository
{
    public class ProCollectOutOrderRepository : RepositoryBase<Dt_ProCollectOutOrder>, IProCollectOutOrderRepository
    {
        public ProCollectOutOrderRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
        {
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs
@@ -32,8 +32,9 @@
        public IErpProScrapSheetService ErpProScrapSheetService { get; }
        public IErpProScrapSheetDetailService ErpProScrapSheetDetailService { get; }
        public IProCollectOutOrderService ProCollectOutOrderService { get; }
        public OutboundService(IOutboundOrderDetailService outboundOrderDetailService, IMesRworkOutboundOrderService rworkOutboundOrderService,IMesPPOutboundOrderDetailService mesPPOutboundOrderDetailService, IMesPPCutOutboundOrderDetailService mesPPCutOutboundOrderDetailService, IMesPPCutOutboundOrderService mesPPCutOutboundOrderService, IMesPPOutboundOrderService mesPPOutboundOrderService, IOutboundOrderService outboundOrderService, IOutStockLockInfoService outboundStockLockInfoService, IMesOutboundOrderService mesOutboundOrderService,IProOutOrderService proOutOrderService, IProOutOrderDetailService proOutOrderDetailService,IErpProTransferOrderService erpProTransferOrderService,
            IErpProScrapSheetService erpProScrapSheetService, IErpProScrapSheetDetailService erpProScrapSheetDetailService)
            IErpProScrapSheetService erpProScrapSheetService, IErpProScrapSheetDetailService erpProScrapSheetDetailService,IProCollectOutOrderService proCollectOutOrderService)
        {
            OutboundOrderDetailService = outboundOrderDetailService;
            OutboundOrderService = outboundOrderService;
@@ -49,6 +50,7 @@
            ErpProTransferOrderService = erpProTransferOrderService;
            ErpProScrapSheetService = erpProScrapSheetService;
            ErpProScrapSheetDetailService = erpProScrapSheetDetailService;
            ProCollectOutOrderService= proCollectOutOrderService;
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProCollectOutOrderDetailService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,52 @@
using AutoMapper;
using Castle.Core.Resource;
using Org.BouncyCastle.Asn1.Cmp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using WIDESEA_Common.OrderEnum;
using WIDESEA_Common.StockEnum;
using WIDESEA_Common.WareHouseEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.CodeConfigEnum;
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
using WIDESEA_DTO.ERP;
using WIDESEA_DTO.Outbound;
using WIDESEA_External.ERPService;
using WIDESEA_External.Model;
using WIDESEA_IBasicRepository;
using WIDESEA_IBasicService;
using WIDESEA_IOutboundRepository;
using WIDESEA_IOutboundService;
using WIDESEA_IRecordService;
using WIDESEA_IStockRepository;
using WIDESEA_IStockService;
using WIDESEA_Model.Models;
namespace WIDESEA_OutboundService
{
    public partial class ProCollectOutOrderDetailService : ServiceBase<Dt_ProCollectOutOrderDetail, IProCollectOutOrderDetailRepository>, IProCollectOutOrderDetailService
    {
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        private readonly IBasicRepository _basicRepository;
        private readonly IMapper _mapper;
        private readonly IInvokeERPService _invokeERPService;
        public IProCollectOutOrderDetailRepository Repository => BaseDal;
        public ProCollectOutOrderDetailService(IProCollectOutOrderDetailRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IBasicRepository basicRepository, IMapper mapper, IInvokeERPService invokeERPService) : base(BaseDal)
        {
            _unitOfWorkManage = unitOfWorkManage;
            _basicRepository = basicRepository;
            _mapper = mapper;
            _invokeERPService = invokeERPService;
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProCollectOutOrderService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,105 @@
using AutoMapper;
using Castle.Core.Resource;
using Org.BouncyCastle.Asn1.Cmp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using WIDESEA_Common.OrderEnum;
using WIDESEA_Common.StockEnum;
using WIDESEA_Common.WareHouseEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.CodeConfigEnum;
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
using WIDESEA_DTO.ERP;
using WIDESEA_DTO.Outbound;
using WIDESEA_External.ERPService;
using WIDESEA_External.Model;
using WIDESEA_IBasicRepository;
using WIDESEA_IBasicService;
using WIDESEA_IOutboundRepository;
using WIDESEA_IOutboundService;
using WIDESEA_IRecordService;
using WIDESEA_IStockRepository;
using WIDESEA_IStockService;
using WIDESEA_Model.Models;
namespace WIDESEA_OutboundService
{
    public partial class ProCollectOutOrderService : ServiceBase<Dt_ProCollectOutOrder, IProCollectOutOrderRepository>, IProCollectOutOrderService
    {
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        private readonly IBasicRepository _basicRepository;
        private readonly IMapper _mapper;
        private readonly IInvokeERPService _invokeERPService;
        private readonly IProCollectOutOrderDetailRepository _proCollectOutOrderDetailRepository;
        public IProCollectOutOrderRepository Repository => BaseDal;
        public ProCollectOutOrderService(IProCollectOutOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IBasicRepository basicRepository, IMapper mapper, IInvokeERPService invokeERPService,IProCollectOutOrderDetailRepository proCollectOutOrderDetailRepository) : base(BaseDal)
        {
            _unitOfWorkManage = unitOfWorkManage;
            _basicRepository = basicRepository;
            _mapper = mapper;
            _invokeERPService = invokeERPService;
            _proCollectOutOrderDetailRepository = proCollectOutOrderDetailRepository;
        }
        public WebResponseContent ProductOutOrder(ErpProOutLingOrder erpProOutLingOrder)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == erpProOutLingOrder.WaType);
                if (warehouse == null)
                {
                    return content.Error($"未找到该仓库信息");
                }
                Dt_ProCollectOutOrder proCollectOutOrder = BaseDal.Db.Queryable<Dt_ProCollectOutOrder>().Where(x=>x.ProCollectOutOrderNo==erpProOutLingOrder.OrderNo).Includes(x=>x.Details).First();
                if (_proCollectOutOrderDetailRepository.QueryFirst(x=>x.RowId==erpProOutLingOrder.RowId)!=null)
                {
                    return content.Error($"成品领料单,行号{erpProOutLingOrder.RowId}已存在");
                }
                if (proCollectOutOrder!=null)
                {
                    if (proCollectOutOrder.ProOrderStatus!= OutOrderStatusEnum.未开始.ObjToInt())
                    {
                        return content.Error($"当前单据已开始执行");
                    }
                    else
                    {
                        Dt_ProCollectOutOrderDetail proCollectOutOrderDetail = _mapper.Map<Dt_ProCollectOutOrderDetail>(erpProOutLingOrder);
                        proCollectOutOrderDetail.ProCollectOrderId = proCollectOutOrder.Id;
                        _proCollectOutOrderDetailRepository.AddData(proCollectOutOrderDetail);
                        return content.OK("接收成功");
                    }
                }
                else
                {
                    Dt_ProCollectOutOrderDetail proCollectOutOrderDetail = _mapper.Map<Dt_ProCollectOutOrderDetail>(erpProOutLingOrder);
                    Dt_ProCollectOutOrder collectOutOrder = new Dt_ProCollectOutOrder()
                    {
                        WarehouseId = warehouse.WarehouseId,
                        ProCollectOutOrderNo = erpProOutLingOrder.OrderNo,
                        ProOrderType = ErpProOutTypeEnum.ProCollect.ObjToInt(),
                        ProOrderStatus = OutOrderStatusEnum.未开始.ObjToInt(),
                        Details=new List<Dt_ProCollectOutOrderDetail> { proCollectOutOrderDetail }
                    };
                    BaseDal.Db.InsertNav(collectOutOrder).Include(x=>x.Details).ExecuteCommand();
                    return content.OK("接收成功");
                }
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs
@@ -107,18 +107,31 @@
                    {
                        return content.Error($"客户{item.Customer}不存在!");
                    }
                    //寄售单据
                    if (outOrderDTO.OType == 2)
                    {
                        Dt_ProOutOrderDetail? ExistProDetail = proOutOrderDetails.FirstOrDefault(x => x.PCode == item.PCode && x.SaleOrder == item.SaleOrder && x.PVer == item.PVer && x.DateCode == item.DateCode);
                        if (ExistProDetail!=null)
                        {
                            Dt_ProOutOrderDetail OutOrderDetail = _mapper.Map<Dt_ProOutOrderDetail>(item);
                            ExistProDetail.QtyPcs += (OutOrderDetail.QtyPcs + OutOrderDetail.SpareQty);
                            ExistProDetail.SpareQty += OutOrderDetail.SpareQty;
                            continue;
                        }
                    }
                    Dt_ProOutOrderDetail proOutOrderDetail = _mapper.Map<Dt_ProOutOrderDetail>(item);
                    if (!string.IsNullOrEmpty(item.SaleOrder))
                    {
                        if (keyValuePairs!=null && keyValuePairs.ContainsKey(item.SaleOrder))
                        if (keyValuePairs != null && keyValuePairs.ContainsKey(item.SaleOrder))
                        {
                            proOutOrderDetail.EndCustomer = keyValuePairs[item.SaleOrder];
                        }
                        else
                        {
                            string request = _invokeERPService.InvokeProSaleCustomer(item.SaleOrder);
                            ErpSaleCustomResponseContent responseContent=request.DeserializeObject<ErpSaleCustomResponseContent>();
                            if (responseContent.Code!=200)
                            ErpSaleCustomResponseContent responseContent = request.DeserializeObject<ErpSaleCustomResponseContent>();
                            if (responseContent.Code != 200)
                            {
                                return content.Error($"订单{item.SaleOrder}终端客户获取失败!");
                            }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/AssignInboundTaskLocation_BC.cs
@@ -164,15 +164,15 @@
                string roadwayNo = "";
                if (heightType == 1)
                {
                    List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == palletType || x.LocationType == LocationTypeEnum.Undefined.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && roadwayNos.Contains(x.RoadwayNo) && x.Layer <= 3).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                    List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == palletType || x.LocationType == LocationTypeEnum.Undefined.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && roadwayNos.Contains(x.RoadwayNo) && x.Layer <= 4).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                    roadwayNo = locationCounts.OrderBy(x => x.Count).FirstOrDefault()?.RoadwayNo ?? "";
                }
                //else if (heightType == 2)
                //{
                //    List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == palletType || x.LocationType == LocationTypeEnum.Undefined.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && roadwayNos.Contains(x.RoadwayNo) && x.Layer == 4).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                //    roadwayNo = locationCounts.OrderBy(x => x.Count).FirstOrDefault()?.RoadwayNo ?? "";
                //}
                else if (heightType == 2)
                {
                    List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == palletType || x.LocationType == LocationTypeEnum.Undefined.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && roadwayNos.Contains(x.RoadwayNo) && x.Layer == 4).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                    roadwayNo = locationCounts.OrderBy(x => x.Count).FirstOrDefault()?.RoadwayNo ?? "";
                }
                else if (heightType == 3)
                {
                    List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == palletType || x.LocationType == LocationTypeEnum.Undefined.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && roadwayNos.Contains(x.RoadwayNo) && x.Layer == 5).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                    roadwayNo = locationCounts.OrderBy(x => x.Count).FirstOrDefault()?.RoadwayNo ?? "";
@@ -212,13 +212,13 @@
                List<LocationCount> locationCounts = new List<LocationCount>();
                if (heightType == 1)
                {
                    locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == task.PalletType || (IsBCS ? false : x.LocationType == LocationTypeEnum.Undefined.ObjToInt())) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && (IsBCS ? !IsBCS : ("SC01_BC".Contains(x.RoadwayNo) ? x.Column % 2 == 0 : x.Column % 2 == 1)) && x.Layer <= 3 && roadwayNos.Contains(x.RoadwayNo)).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                    locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == task.PalletType || (IsBCS ? false : x.LocationType == LocationTypeEnum.Undefined.ObjToInt())) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && (IsBCS ? !IsBCS : ("SC01_BC".Contains(x.RoadwayNo) ? x.Column % 2 == 0 : x.Column % 2 == 1)) && x.Layer <= 4 && roadwayNos.Contains(x.RoadwayNo)).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                }
                //else if(heightType == 2)
                //{
                //    locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == task.PalletType || (IsBCS ? false : x.LocationType == LocationTypeEnum.Undefined.ObjToInt())) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && (IsBCS ? !IsBCS : ("SC01_BC".Contains(x.RoadwayNo) ? x.Column % 2 == 0 : x.Column % 2 == 1)) && x.Layer == 4 && roadwayNos.Contains(x.RoadwayNo)).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                //}
                else if(heightType == 2)
                {
                    locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == task.PalletType || (IsBCS ? false : x.LocationType == LocationTypeEnum.Undefined.ObjToInt())) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && (IsBCS ? !IsBCS : ("SC01_BC".Contains(x.RoadwayNo) ? x.Column % 2 == 0 : x.Column % 2 == 1)) && x.Layer == 4 && roadwayNos.Contains(x.RoadwayNo)).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                }
                else if(heightType == 3)
                {
                    locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == task.PalletType || (IsBCS ? false : x.LocationType == LocationTypeEnum.Undefined.ObjToInt())) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && (IsBCS ? !IsBCS : ("SC01_BC".Contains(x.RoadwayNo) ? x.Column % 2 == 0 : x.Column % 2 == 1)) && x.Layer == 5 && roadwayNos.Contains(x.RoadwayNo)).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -139,29 +139,6 @@
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        /// æ”¾è´§å®Œæˆ
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        public WebResponseContent PutFinish(string code, string barCode = "", string taskNum = "")
        {
            try
            {
                string url = AppSettings.Get("WCS");
                if (string.IsNullOrEmpty(url))
                {
                    return WebResponseContent.Instance.Error($"未找到WCSAApi地址,请检查配置文件");
                }
                string response = HttpHelper.Post($"{url}/api/CTU_AGV/PutFinish?code={code}&barCode={barCode}&taskNum={taskNum}" );
                return JsonConvert.DeserializeObject<WebResponseContent>(response) ?? WebResponseContent.Instance.Error("返回错误");
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        public WebResponseContent AGVTasks(SaveModel saveModel)
        {
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs
@@ -64,13 +64,13 @@
                    int heightType = 0;
                    if(needRelocationItem.Layer == 5)
                    {
                        heightType = 3;
                    }
                    else if(needRelocationItem.Layer == 4)
                    {
                        heightType = 2;
                    }
                    else if(needRelocationItem.Layer <= 3 && needRelocationItem.Layer >= 1)
                    //else if(needRelocationItem.Layer == 4)
                    //{
                    //    heightType = 2;
                    //}
                    else if(needRelocationItem.Layer <= 4 && needRelocationItem.Layer >= 1)
                    {
                        heightType = 1;
                    }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/ERP/ErpController.cs
@@ -177,7 +177,9 @@
        [HttpPost, Route("ProductOutOrder"), AllowAnonymous, MethodParamsValidate]
        public ErpResponseContent ProductOutOrder([FromBody] Root<ErpProOutLingOrder> root)
        {
            return Instance.OK();
            WebResponseContent content = _outboundService.ProCollectOutOrderService.ProductOutOrder(root.Content);
            if (content.Status) return Instance.OK();
            else return Instance.Error(content.Message);
        }
        /// <summary>
        /// é”€å”®æŒ‡æ´¾å•接收
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/ProCollectOutOrderController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using WIDESEA_Core;
using WIDESEA_Core.BaseController;
using WIDESEA_IOutboundService;
using WIDESEA_Model.Models;
using WIDESEA_OutboundService;
namespace WIDESEA_WMSServer.Controllers.Outbound
{
    /// <summary>
    /// æˆå“é¢†æ–™å‡ºåº“单
    /// </summary>
    [Route("api/ProCollectOutOrder")]
    [ApiController]
    public class ProCollectOutOrderController : ApiBaseController<IProCollectOutOrderService, Dt_ProCollectOutOrder>
    {
        public ProCollectOutOrderController(IProCollectOutOrderService service) : base(service)
        {
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs
@@ -41,6 +41,7 @@
            CreateMap<Dt_MesProInOrderDetail, Dt_ProStockInfoDetail>().ForMember(x => x.ProOutDetailStatus, b => b.MapFrom(b => StockStatusEmun.组盘暂存.ObjToInt())).ForMember(x => x.OutboundQuantity, b => b.MapFrom(b => 0)).ForMember(x => x.StockPcsQty, b => b.MapFrom(b => b.OKPCSQTY));
            CreateMap<ErpProductWarehousingOrderDTO, Dt_ErpProInOrder>().ForMember(x => x.ProSaleOrderNo, b => b.MapFrom(b => b.SaleOrder)).ForMember(x => x.Remark, b => b.MapFrom(b => b.Note)).ForMember(x => x.UpperOrderNo, b => b.MapFrom(b => b.TransferNo)).ForMember(x => x.ProStockAttribute, b => b.MapFrom(b => ProStockAttributeEnum.成品.ObjToInt())).ForMember(x => x.ProInStatus, b => b.MapFrom(b => InOrderStatusEnum.未开始.ObjToInt()));
            CreateMap<ErpProductTransferOrderDTO, Dt_ErpProTransferOrder>().ForMember(x => x.ProSaleOrderNo, b => b.MapFrom(b => b.SaleOrder)).ForMember(x => x.Remark, b => b.MapFrom(b => b.Note)).ForMember(x => x.UpperOrderNo, b => b.MapFrom(b => b.TransferNo)).ForMember(x => x.OrderType, b => b.MapFrom(b => ErpProOutTypeEnum.ProOutAllocat.ObjToInt())).ForMember(x => x.ProStockAttribute, b => b.MapFrom(b => ProStockAttributeEnum.研发.ObjToInt()));
            CreateMap<ErpProOutLingOrder, Dt_ProCollectOutOrderDetail>().ForMember(x => x.ProOrderDetailStatus, b => b.MapFrom(b => 0)).ForMember(x => x.OverQtyPcs, b => b.MapFrom(b => 0)).ForMember(x => x.LockQtyPcs, b => b.MapFrom(b => 0));
        }
    }
}