1
huangxiaoqiang
2025-12-29 d174e304ad0c38c78eb25f04a2ab97cc471620c5
1
已修改6个文件
196 ■■■■ 文件已修改
项目代码/WIDESEA_WMSClient/src/extension/outbound/extend/newAllocateOrderDetail.vue 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WIDESEA_WMSClient/src/views/outbound/outPicking.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_BasicService/LocationInfoService.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IBasicService/ILocationInfoService.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_InboundService/InboundService.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ÏîÄ¿´úÂë/WIDESEA_WMSClient/src/extension/outbound/extend/newAllocateOrderDetail.vue
@@ -315,149 +315,20 @@
      });
    },
    outbound() {
      // if (this.selection.length === 0) {
      //   return this.$message.error("请选择单据明细");
      // }
      // const platformOptions = [
      //   { label: "站台2", value: "2-1" },
      //   { label: "站台3", value: "3-1" },
      // ];
      // const mountNode = document.createElement("div");
      // document.body.appendChild(mountNode);
      if (this.selection.length === 0) {
        return this.$message.error("请选择单据明细");
      }
      // const formData = reactive({
      //   selectedPlatform: platformOptions[0].value,
      // });
      // const vnode = createVNode(
      //   ElDialog,
      //   {
      //     title: "出库操作 - é€‰æ‹©å‡ºåº“站台",
      //     width: "500px",
      //     modelValue: true,
      //     appendToBody: true,
      //     "onUpdate:modelValue": (isVisible) => {
      //       if (!isVisible) {
      //         render(null, mountNode);
      //         document.body.removeChild(mountNode);
      //       }
      //     },
      //     style: {
      //       padding: "20px 0",
      //       borderRadius: "8px",
      //     },
      //   },
      //   {
      //     default: () =>
      //       h(
      //         ElForm,
      //         {
      //           model: formData,
      //           rules: {
      //             selectedPlatform: [
      //               { required: true, message: "请选择出库站台", trigger: "change" },
      //             ],
      //           },
      //           ref: "outboundForm",
      //           labelWidth: "100px",
      //           style: {
      //             padding: "0 30px",
      //           },
      //         },
      //         [
      //           h(ElFormItem, {
      //             label: "出库站台",
      //             prop: "selectedPlatform",
      //             style: {
      //               marginBottom: "24px",
      //             },
      //           }, [
      //             h(ElSelect, {
      //               placeholder: "请选择出库站台(3-12)",
      //               modelValue: formData.selectedPlatform,
      //               "onUpdate:modelValue": (val) => {
      //                 formData.selectedPlatform = val;
      //               },
      //               style: {
      //                 width: "100%",
      //                 height: "40px",
      //                 borderRadius: "4px",
      //                 borderColor: "#dcdfe6",
      //               },
      //             }, platformOptions.map((platform) =>
      //               h(ElOption, { label: platform.label, value: platform.value })
      //             )),
      //           ]),
      //           h("div", {
      //             style: {
      //               textAlign: "right",
      //               marginTop: "8px",
      //               paddingRight: "4px",
      //             },
      //           }, [
      //             h(ElButton, {
      //               type: "text",
      //               onClick: () => {
      //                 render(null, mountNode);
      //                 document.body.removeChild(mountNode);
      //                 ElMessage.info("取消出库操作");
      //               },
      //               style: {
      //                 marginRight: "8px",
      //                 color: "#606266",
      //               },
      //             }, "取消"),
      //             h(ElButton, {
      //               type: "primary",
      //               onClick: async () => {
      //                 const formRef = vnode.component.refs.outboundForm;
      //                 try {
      //                   await formRef.validate();
      //                 } catch (err) {
      //                   return;
      //                 }
      //                 const keys = this.selection.map((item) => item.id);
      //                 const requestParams = {
      //                   detailIds: keys,
      //                   outboundTargetLocation: formData.selectedPlatform,
      //                   outboundQuantity: 1,
      //                   operator: "",
      //                   orderNo: this.row.orderNo,
      //                 };
      //                 this.http
      //                   .post(
      //                     "api/Outbound/ProcessPickingOutbound",
      //                     requestParams,
      //                     "数据处理中"
      //                   )
      //                   .then((x) => {
      //                     if (!x.status) return ElMessage.error(x.message);
      //                     ElMessage.success("操作成功");
      //                     this.showDetialBox = false;
      //                     this.$emit("parentCall", ($vue) => {
      //                       $vue.getData();
      //                     });
      //                     render(null, mountNode);
      //                     document.body.removeChild(mountNode);
      //                   })
      //                 // .catch(() => {
      //                 //   ElMessage.error("请求失败,请稍后重试");
      //                 // });
      //               },
      //               style: {
      //                 borderRadius: "4px",
      //                 padding: "8px 20px",
      //               },
      //             }, "确定出库"),
      //           ]),
      //         ]),
      //   }
      // );
      // vnode.appContext = this.$.appContext;
      // render(vnode, mountNode);
      const keys = this.selection.map((item) => item.id);
      const requestParams = {
        detailIds: keys,
        outboundQuantity: 1,
        operator: "",
        orderNo: this.row.orderNo,
        isBatch: this.isBatch
      };
      console.log(requestParams);
      this.$refs.DirectOutbound.open(requestParams);
    },
    outboundbatch() {
      if (this.selection.length === 0) {
ÏîÄ¿´úÂë/WIDESEA_WMSClient/src/views/outbound/outPicking.vue
@@ -40,8 +40,8 @@
                    <el-row :gutter="20">
                        <el-col :span="8">
                            <el-form-item label="托盘码" prop="palletCode">
                                <el-input ref="palletInput" v-model="scanForm.palletCode" placeholder="请扫描托盘码"
                                    size="large" clearable @keyup.enter="handlePalletScan">
                                <el-input ref="palletInput" v-model="scanForm.palletCode" placeholder="请扫描托盘码" size="large"
                                    clearable @keyup.enter="handlePalletScan">
                                    <template #prefix>
                                        <i class="el-icon-box"></i>
                                    </template>
@@ -311,8 +311,8 @@
        </el-dialog>
        <!-- æ•´å‡ºç¡®è®¤å¯¹è¯æ¡† -->
        <el-dialog v-model="wholeOutDialogVisible" title="整出操作确认" width="500px"
            :before-close="handleWholeOutDialogClose" custom-class="whole-out-dialog" style="margin-right: 0px;">
        <el-dialog v-model="wholeOutDialogVisible" title="整出操作确认" width="500px" :before-close="handleWholeOutDialogClose"
            custom-class="whole-out-dialog" style="margin-right: 0px;">
            <div class="whole-out-content" v-if="wholeOutInfo">
                <!-- è­¦å‘Šæç¤º -->
                <el-alert title="该托盘包含需要整出的物料" type="warning" :closable="false" show-icon class="whole-out-alert">
@@ -361,7 +361,7 @@
                        <div class="info-item">
                            <label>整出数量:</label>
                            <span class="info-value highlight">{{ wholeOutInfo.assignQuantity }} {{ wholeOutInfo.unit
                                }}</span>
                            }}</span>
                        </div>
                        <div class="info-item">
                            <label>当前库存:</label>
@@ -882,7 +882,7 @@
        // æ£€æŸ¥æ˜¯å¦åŒ…含整出
        hasWholeOut() {
            return this.unpickedData.some(item => item.assignQuantity === item.originalQuantity) && !this.matMixed;
            return this.unpickedData.some(item => item.assignQuantity === item.originalQuantity) && !this.matMixed
        },
        // è®¡ç®—剩余库存
ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_BasicService/LocationInfoService.cs
@@ -184,6 +184,19 @@
                return first;
            }
        }
        public bool QueryLocationCount(int locationType)
        {
            try
            {
                return BaseDal.QueryData(x => x.LocationType == locationType && x.LocationStatus == (int)LocationStatusEnum.Free && x.EnableStatus == (int)EnableEnum.Enable).Any();
            }
            catch (Exception)
            {
                return false;
            }
        }
        public Dt_LocationInfo? AssignLocation()
        {
            lock (_locker)
ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_IBasicService/ILocationInfoService.cs
@@ -61,6 +61,8 @@
        Dt_LocationInfo? AssignLocation();
        bool QueryLocationCount(int locationType);
        List<LocationTypeDto> GetLocationTypes();
ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs
@@ -471,7 +471,7 @@
                if (!result2.Item1) return content = WebResponseContent.Instance.Error(result2.Item2);
                bool code = _locationTypeRepository.Db.Queryable<Dt_LocationType>().Where(x => x.LocationType == materielGroupDTO.WarehouseCode).Any();
                bool statu = _locationInfoRepository.Db.Queryable<Dt_LocationInfo>().Where(x => x.LocationType == materielGroupDTO.WarehouseCode && x.LocationStatus == (int)LocationStatusEnum.Free).Any();
                bool statu = _locationInfoRepository.Db.Queryable<Dt_LocationInfo>().Where(x => x.LocationType == materielGroupDTO.WarehouseCode && x.LocationStatus == (int)LocationStatusEnum.Free && x.EnableStatus == (int)EnableEnum.Enable).Any();
                if (!statu)
                {
                    return content = WebResponseContent.Instance.Error($"该区域无货位可分配");
ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_InboundService/InboundService.cs
@@ -24,6 +24,7 @@
using WIDESEA_DTO.Allocate;
using WIDESEA_DTO.Inbound;
using WIDESEA_DTO.ReturnMES;
using WIDESEA_IBasicService;
using WIDESEA_IInboundService;
using WIDESEA_IStockService;
using WIDESEA_Model.Models;
@@ -48,7 +49,8 @@
        private readonly IRepository<Dt_AllocateMaterialInfo> _allocateMaterialInfo;
        private readonly HttpClientHelper _httpClientHelper;
        private readonly IRepository<Dt_MesReturnRecord> _mesReturnRecord;
        public InboundService(IUnitOfWorkManage unitOfWorkManage, IInboundOrderDetailService inboundOrderDetailService, IInboundOrderService inbounOrderService, IRepository<Dt_InboundOrder> inboundOrderRepository, IRepository<Dt_WarehouseArea> warehouseAreaRepository, IRepository<Dt_LocationType> locationTypeRepository, IRepository<Dt_StockInfo> stockInfoRepository, IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository, IStockService stockService, IRepository<Dt_Task> taskRepository,IRepository<Dt_AllocateMaterialInfo> allocateMaterialInfo, HttpClientHelper httpClientHelper, IRepository<Dt_MesReturnRecord> mesReturnRecord)
        private readonly ILocationInfoService _locationInfoService;
        public InboundService(IUnitOfWorkManage unitOfWorkManage, IInboundOrderDetailService inboundOrderDetailService, IInboundOrderService inbounOrderService, IRepository<Dt_InboundOrder> inboundOrderRepository, IRepository<Dt_WarehouseArea> warehouseAreaRepository, IRepository<Dt_LocationType> locationTypeRepository, IRepository<Dt_StockInfo> stockInfoRepository, IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository, IStockService stockService, IRepository<Dt_Task> taskRepository,IRepository<Dt_AllocateMaterialInfo> allocateMaterialInfo, HttpClientHelper httpClientHelper, IRepository<Dt_MesReturnRecord> mesReturnRecord,ILocationInfoService locationInfoService)
        {
            _unitOfWorkManage = unitOfWorkManage;
            InboundOrderDetailService = inboundOrderDetailService;
@@ -63,6 +65,7 @@
            _allocateMaterialInfo = allocateMaterialInfo;
            _httpClientHelper = httpClientHelper;
            _mesReturnRecord = mesReturnRecord;
            _locationInfoService = locationInfoService;
        }
        public async Task<WebResponseContent> GroupPallet(GroupPalletDto palletDto)
@@ -115,6 +118,11 @@
                if (stockInfo != null && stockInfo.Details.Count > 0 && stockInfo.Details.FirstOrDefault()?.WarehouseCode != palletDto.WarehouseType)
                {
                    return content.Error($"该托盘组盘仓库为{stockInfo.Details.FirstOrDefault()?.WarehouseCode}与当前仓库{palletDto.WarehouseType}不一致,不允许组盘");
                }
                if (!_locationInfoService.QueryLocationCount(Convert.ToInt32(palletDto.locationType)))
                {
                    return content.Error($"该库区{palletDto.locationType}不存在空闲库位");
                }
                foreach (var item in details)
@@ -376,7 +384,7 @@
                                        .Where(x => x.OrderId == inboundOrder.Id && x.OrderDetailStatus==(int)OrderDetailStatusEnum.Over && x.ReturnToMESStatus == 0)
                                        .ToList();
                var stocks = _stockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.StockStatus == 6)
                var stocks = _stockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.StockStatus == (int)StockStatusEmun.入库完成)
                                            .Where(it => SqlFunc.Subqueryable<Dt_StockInfoDetail>().Where(s => s.StockId == it.Id && s.OrderNo == inboundOrder.InboundOrderNo).Any())
                                            .ToList();