private List <CommodityCode> GetCompareSimpleCommodity(HashSet <string> preCommodityEpsCollect, HashSet <string> afterCommodityEpsCollect)
        {
            var commodityCodes = new List <CommodityCode>();

            foreach (string currentEps in afterCommodityEpsCollect)
            {
                if (!preCommodityEpsCollect.Contains(currentEps))
                {
                    commodityCodes.Add(new CommodityCode
                    {
                        name = currentEps,
                        //TODO: 需要关联当前本地的设备,货位,库房id
                        EquipmentId   = ApplicationState.GetEquipId(),
                        EquipmentName = ApplicationState.GetEquipName(),
                        operate_type  = (int)OperateType.入库
                    });
                }
            }

            foreach (string currentEps in preCommodityEpsCollect)
            {
                if (!afterCommodityEpsCollect.Contains(currentEps))
                {
                    commodityCodes.Add(new CommodityCode
                    {
                        name         = currentEps,
                        operate_type = (int)OperateType.出库
                    });
                }
            }

            return(commodityCodes);
        }
        /// <summary>
        /// 根据拣货单号获取商品详情
        /// </summary>
        /// <param name="pickTaskName"></param>
        /// <returns></returns>
        public BaseData <PickCommodity> GetPickTaskCommodityDetail(BaseData <PickTask> baseDataPickTask)
        {
            //校验是否含有数据,如果含有数据,拼接具体字段
            BaseData <PickCommodity> baseDataPickTaskCommodityDetail = HttpHelper.GetInstance().ResultCheck((HttpHelper hh) => {
                //var pickTaskIds = baseDataPickTask.body.objects.Select(it => it.id).ToList();

                return(hh.Get <PickCommodity>(new QueryParam
                {
                    //@in =
                    //{
                    //	field = "PickTaskId",
                    //	in_list = BllHelper.ParamUrlEncode(pickTaskIds)
                    //}
                    view_filter =
                    {
                        filter                =
                        {
                            //logical_relation = "1 AND 2 AND 3",
                            logical_relation  = "1 AND 2",
                            expressions       =
                            {
                                //这种写法有问题,暂时把这个条件删除,在后面过滤
                                //new QueryParam.Expressions
                                //{
                                //    field = "PickTaskId",
                                //    @operator = "INRANGE",
                                //    operands =  BllHelper.OperandsProcess(pickTaskIds)
                                //},
                                new QueryParam.Expressions
                                {
                                    field     = "StoreHouseId",
                                    @operator = "==",
                                    operands  ={ $"'{ HttpUtility.UrlEncode(ApplicationState.GetHouseId()) }'"                 }
                                },
                                new QueryParam.Expressions
                                {
                                    field     = "EquipmentId",
                                    @operator = "==",
                                    operands  ={ $"'{ HttpUtility.UrlEncode(ApplicationState.GetEquipId()) }'"                 }
                                }
                            }
                        }
                    }
                }));
            }, baseDataPickTask);

            //baseDataPickTaskCommodityDetail.body.objects = baseDataPickTaskCommodityDetail.body.objects.Where(it => it.EquipmentId == ApplicationState.GetValue<string>((int)ApplicationKey.EquipId)).ToList();

            HttpHelper.GetInstance().ResultCheck(baseDataPickTask, out bool isSuccess);
            HttpHelper.GetInstance().ResultCheck(baseDataPickTaskCommodityDetail, out bool isSuccess1);

            if (isSuccess && isSuccess1)
            {
                var pickTaskIds = baseDataPickTask.body.objects.Select(it => it.id).ToList();
                baseDataPickTaskCommodityDetail.body.objects = baseDataPickTaskCommodityDetail.body.objects.Where(it => pickTaskIds.Contains(it.PickTaskId)).ToList();
            }

            return(baseDataPickTaskCommodityDetail);
        }
Beispiel #3
0
        public static HashSet <CommodityEps> GetEpcDataJsonInventory(out bool isGetSuccess)
        {
            isGetSuccess = true;
            string com1 = ApplicationState.GetMRfidCOM();
            var    ret  = new HashSet <CommodityEps>()
            {
                new CommodityEps
                {
                    CommodityCodeName = "RF00000327",
                    EquipmentId       = ApplicationState.GetEquipId(),
                    EquipmentName     = ApplicationState.GetEquipName(),
                    StoreHouseId      = ApplicationState.GetHouseId(),
                    StoreHouseName    = ApplicationState.GetHouseName(),
                    GoodsLocationName = ApplicationState.GetCabNameByRFidCom(com1),
                    GoodsLocationId   = ApplicationState.GetCabIdByRFidCom(com1)
                },
                new CommodityEps
                {
                    CommodityCodeName = "RF00000333",
                    EquipmentId       = ApplicationState.GetEquipId(),
                    EquipmentName     = ApplicationState.GetEquipName(),
                    StoreHouseId      = ApplicationState.GetHouseId(),
                    StoreHouseName    = ApplicationState.GetHouseName(),
                    GoodsLocationName = ApplicationState.GetCabNameByRFidCom(com1),
                    GoodsLocationId   = ApplicationState.GetCabIdByRFidCom(com1)
                },
                new CommodityEps
                {
                    CommodityCodeName = "RF00000324",
                    EquipmentId       = ApplicationState.GetEquipId(),
                    EquipmentName     = ApplicationState.GetEquipName(),
                    StoreHouseId      = ApplicationState.GetHouseId(),
                    StoreHouseName    = ApplicationState.GetHouseName(),
                    GoodsLocationName = ApplicationState.GetCabNameByRFidCom(com1),
                    GoodsLocationId   = ApplicationState.GetCabIdByRFidCom(com1)
                }
            };

            return(ret);
        }
        /// <summary>
        /// 通过【调拨上架任务】(AllotShelf.id=AllotShelfCommodity.AllotShelfId)从表格 【调拨上架商品明细】中查询获取调拨上架商品的列表信息
        /// </summary>
        /// <param name="allotShelf"></param>
        /// <returns></returns>
        public BaseData <AllotShelfCommodity> GetShelfTaskCommodityDetail(AllotShelf allotShelf)
        {
            BaseData <AllotShelfCommodity> baseDataAllotShelfCommodity = HttpHelper.GetInstance().Get <AllotShelfCommodity>(new QueryParam
            {
                view_filter =
                {
                    filter                =
                    {
                        logical_relation = "1 AND 2 AND 3",
                        expressions      =
                        {
                            new QueryParam.Expressions
                            {
                                field     = "AllotShelfId",
                                @operator = "==",
                                operands  = { $"'{ HttpUtility.UrlEncode(allotShelf.id) }'" }
                            },
                            new QueryParam.Expressions
                            {
                                field     = "StoreHouseId",
                                @operator = "==",
                                operands  = { $"'{ HttpUtility.UrlEncode(ApplicationState.GetHouseId()) }'" }
                            },
                            new QueryParam.Expressions
                            {
                                field     = "EquipmentId",
                                @operator = "==",
                                operands  = { $"'{ HttpUtility.UrlEncode(ApplicationState.GetEquipId()) }'" }
                            }
                        }
                    }
                }
            });

            //校验是否含有数据,如果含有数据,拼接具体字段
            HttpHelper.GetInstance().ResultCheck(baseDataAllotShelfCommodity, out bool isSuccess);

            if (isSuccess)
            {
                baseDataAllotShelfCommodity.body.objects.ForEach(it =>
                {
                    ///按理说根据该条件查询出来的商品设备名称和库房名称已经固定
                    ////拼接设备名字
                    //if (!string.IsNullOrEmpty(it.EquipmentId))
                    //{
                    //    it.EquipmentName = GetNameById<Equipment>(it.EquipmentId);
                    //}
                    it.EquipmentName = HttpUtility.UrlEncode(ApplicationState.GetEquipName());


                    ////拼接库房名字
                    //if (!string.IsNullOrEmpty(it.StoreHouseId))
                    //{
                    //    it.StoreHouseName = GetNameById<StoreHouse>(it.StoreHouseId);
                    //}
                    it.StoreHouseName = HttpUtility.UrlEncode(ApplicationState.GetHouseName());

                    //拼接商品码名称
                    if (!string.IsNullOrEmpty(it.CommodityCodeId))
                    {
                        it.CommodityCodeName = GetNameById <CommodityCode>(it.CommodityCodeId);
                    }

                    //拼接货位名字
                    if (!string.IsNullOrEmpty(it.GoodsLocationId))
                    {
                        it.GoodsLocationName = GetNameById <GoodsLocation>(it.GoodsLocationId);
                    }

                    //拼接商品名字
                    if (!string.IsNullOrEmpty(it.CommodityId))
                    {
                        it.CommodityName = GetNameById <Commodity>(it.CommodityId);
                    }
                });
            }

            return(baseDataAllotShelfCommodity);
        }
Beispiel #5
0
        /// <summary>
        /// 根据eps json获取eps对象数据
        /// </summary>
        /// <param name="isGetSuccess"></param>
        /// <returns></returns>
        public static HashSet <CommodityEps> GetEpcDataJson(out bool isGetSuccess)
        {
            isGetSuccess = true;

            //string com1 = "COM1";
            string           com1        = ApplicationState.GetMRfidCOM();
            HashSet <string> com1HashSet = new HashSet <string>();

            string log = "";

#if DUALCAB
            //string com4 = "COM4";
            string           com4        = ApplicationState.GetSRfidCOM();
            HashSet <string> com4HashSet = new HashSet <string>();
#endif
            HashSet <CommodityEps> currentEpcDataHs = new HashSet <CommodityEps>();

            //TODO:需要补充id
            GClient com1ClientConn = CreateClientConn(com1, "115200", out bool isCom1Connect);
            if (isCom1Connect)
            {
                com1HashSet = DealComData(com1ClientConn, com1, out isGetSuccess);
            }
            else
            {
                isGetSuccess = false;
            }

#if DUALCAB
            GClient com4ClientConn = CreateClientConn(com4, "115200", out bool isCom4Connect);
            if (isCom4Connect)
            {
                com4HashSet = DealComData(com4ClientConn, com4, out isGetSuccess);
            }
            else
            {
                isGetSuccess = false;
            }
#endif

            WaitHandle.WaitAll(manualEvents.ToArray());
            manualEvents.Clear();

            //提取com1的标签epc,并组装
            foreach (string rfid in com1HashSet)
            {
                CommodityEps commodityEps = new CommodityEps
                {
                    CommodityCodeName = $"RF{rfid.Substring(rfid.Length - 8)}",
                    EquipmentId       = ApplicationState.GetEquipId(),
                    EquipmentName     = ApplicationState.GetEquipName(),
                    StoreHouseId      = ApplicationState.GetHouseId(),
                    StoreHouseName    = ApplicationState.GetHouseName(),
                    GoodsLocationName = ApplicationState.GetCabNameByRFidCom(com1),
                    GoodsLocationId   = ApplicationState.GetCabIdByRFidCom(com1)
                };

                currentEpcDataHs.Add(commodityEps);
                LogUtils.Debug(commodityEps.CommodityCodeName + commodityEps.CommodityName);
                log += commodityEps.CommodityCodeName + " ";
            }

#if DUALCAB
            //提取com4的标签epc,并组装
            foreach (string rfid in com4HashSet)
            {
                CommodityEps commodityEps = new CommodityEps
                {
                    CommodityCodeName = $"RF{rfid.Substring(rfid.Length - 8)}",
                    EquipmentId       = ApplicationState.GetEquipId(),
                    EquipmentName     = ApplicationState.GetEquipName(),
                    StoreHouseId      = ApplicationState.GetHouseId(),
                    StoreHouseName    = ApplicationState.GetHouseName(),
                    GoodsLocationName = ApplicationState.GetCabNameByRFidCom(com1),
                    GoodsLocationId   = ApplicationState.GetCabIdByRFidCom(com1)
                };

                currentEpcDataHs.Add(commodityEps);
                LogUtils.Debug(commodityEps.CommodityCodeName + commodityEps.CommodityName);
                log += commodityEps.CommodityCodeName + " ";
            }
#endif

            Task.Factory.StartNew(a =>
            {
                LogUtils.Debug(log);
            }, log);

            LogUtils.Debug("RFID NUM:" + currentEpcDataHs.Count());
            return(currentEpcDataHs);
        }
Beispiel #6
0
        /// <summary>
        /// 检测并变更手术类【有单领用】领用状态,和商品变动状态明细
        /// </summary>
        /// <param name="baseDataCommodityCode"></param>
        /// <param name="order"></param>
        /// <param name="operationDetail"></param>
        /// <returns></returns>
        public void GetOperationOrderChangeWithOrder(BaseData <CommodityCode> baseDataCommodityCode, ConsumingOrder order, BaseData <ConsumingGoodsDetail> consumingGoodsDetail)
        {
            HttpHelper.GetInstance().ResultCheck(consumingGoodsDetail, out bool isSuccess);

            HttpHelper.GetInstance().ResultCheck(baseDataCommodityCode, out bool isSuccess1);

            if (isSuccess && isSuccess1)
            {
                //手术待领用商品明细
                var operationDetails = consumingGoodsDetail.body.objects.Where(item => Convert.ToInt32(item.unusedAmount) != 0);
                //获取待领用商品CommodityId列表(去重后)
                var detailCommodityIds = operationDetails.Select(it => it.CommodityId).Distinct().ToList();
                //变更后的Id列表
                var commodityCodes = baseDataCommodityCode.body.objects;
                //是否主单异常
                var IsException = false;

                commodityCodes.ForEach(it =>
                {
                    if (it.operate_type == (int)OperateType.入库)
                    {
                        it.AbnormalDisplay = AbnormalDisplay.异常.ToString();
                        IsException        = true;
                    }
                    else
                    {
                        if (detailCommodityIds.Contains(it.CommodityId))
                        {
                            if (it.QualityStatus == QualityStatusType.过期.ToString() || it.InventoryStatus == CommodityInventoryChangeStatus.待回收.ToString())
                            {
                                it.AbnormalDisplay = AbnormalDisplay.异常.ToString();
                                IsException        = true;
                            }
                            else
                            {
                                it.AbnormalDisplay = AbnormalDisplay.正常.ToString();
                            }
                        }
                        else
                        {
                            it.AbnormalDisplay = AbnormalDisplay.异常.ToString();
                            IsException        = true;
                        }
                    }
                });

                if (IsException)
                {
                    order.Status = ConsumingOrderStatus.异常.ToString();
                }
                else
                {
                    //变动商品明细CommodityId列表(去重后)
                    var baseDataCommodityIds = commodityCodes.Select(it => it.CommodityId).Distinct().ToList();

                    //是否名称全部一致
                    bool isAllContains = detailCommodityIds.All(baseDataCommodityIds.Contains) && baseDataCommodityIds.Count == detailCommodityIds.Count;

                    bool isAllNormal = true;
                    bool isAllSame   = true; //
                    foreach (ConsumingGoodsDetail ccd in operationDetails)
                    {
                        //详情对应的Commodity领用数量
                        var tempCount = commodityCodes.Where(cit => cit.CommodityId == ccd.CommodityId).Count();

                        //任何一种商品的数量不一致
                        if (ccd.unusedAmount != null)
                        {
                            if (Convert.ToInt32(ccd.unusedAmount) < tempCount)
                            {
                                isAllNormal = false;
                                break;
                            }

                            if (Convert.ToInt32(ccd.unusedAmount) != tempCount)
                            {
                                isAllSame = false;
                            }
                        }
                    }

                    //只有种类和数量完全一致的情况下,才会修改领用单状态
                    if (isAllContains && isAllNormal)
                    {
                        if (isAllSame)
                        {
                            BaseData <ConsumingGoodsDetail> bdConsumingGoodsDetail = GetAllOperationOrderGoodsDetail(order);

                            HttpHelper.GetInstance().ResultCheck(bdConsumingGoodsDetail, out bool isSuccess2);

                            if (isSuccess2)
                            {
                                if (bdConsumingGoodsDetail.body.objects.Where(item => Convert.ToInt32(item.unusedAmount) != 0 && item.EquipmentId != ApplicationState.GetEquipId()).Count() == 0)
                                {
                                    order.Status = ConsumingOrderStatus.已完成.ToString();
                                }
                                else
                                {
                                    order.Status = ConsumingOrderStatus.领用中.ToString();
                                }
                            }
                            else
                            {
                                LogUtils.Error("GetOperationOrderChangeWithOrder: GetAllOperationOrderGoodsDetail" + bdConsumingGoodsDetail.message);
                            }
                        }
                        else
                        {
                            order.Status = ConsumingOrderStatus.领用中.ToString();
                        }
                    }
                    else
                    {
                        order.Status = ConsumingOrderStatus.异常.ToString();
                    }
                }
            }
        }
        public Task Execute(IJobExecutionContext context)
        {
            LogUtils.Debug("GetInventoryPlanJoB进入");

            var baseDataInventoryPlan = InventoryTaskBll.GetInstance().GetInventoryPlanByEquipmnetNameOrId(ApplicationState.GetEquipId());

            //校验是否含有数据,如果含有数据,进行后续操作
            HttpHelper.GetInstance().ResultCheck(baseDataInventoryPlan, out bool isSuccess);

            if (isSuccess)
            {
                var inventoryPlans = baseDataInventoryPlan.body.objects;
                CustomizeScheduler.GetInstance().SchedulerStartOrUpdateOrDeleteByPlans(inventoryPlans).Wait();
                //cronStr = "0 44 11 * * ?";
            }
            else
            {
                LogUtils.Error($"拉取盘点定时计划失败!");
            }

            return(null);
        }
Beispiel #8
0
        /// <summary>
        /// 来源单据解析为【⼿手术单管理理】(ConsumingOrder.SourceBill.object_name=‘OperationOrder’ ):
        /// 通过【领⽤单id】(ConsumingGoodsDetail.ConsumingOrderId =ConsumingOrder.Id)从表格 【领⽤单商品明细】中查询获取领⽤商品的列表信息
        /// </summary>
        /// <param name="baseDataConsumingOrder"></param>
        /// <returns></returns>
        public BaseData <ConsumingGoodsDetail> GetOperationOrderGoodsDetail(BaseData <ConsumingOrder> baseDataConsumingOrder)
        {
            //校验是否含有数据,如果含有数据,拼接具体字段
            HttpHelper.GetInstance().ResultCheck(baseDataConsumingOrder, out bool isSuccess);
            if (!isSuccess)
            {
                return(new BaseData <ConsumingGoodsDetail>()
                {
                    code = (int)ResultCode.Parameter_Exception,
                    message = ResultCode.Parameter_Exception.ToString()
                });
            }
            if (!"OperationOrder".Equals(baseDataConsumingOrder.body.objects[0].SourceBill.object_name))
            {
                return(new BaseData <ConsumingGoodsDetail>()
                {
                    code = (Int32)ResultCode.Business_Exception,
                    message = ResultCode.Business_Exception.ToString()
                });
            }

            //根据领用单ID获取领用上列表信息
            BaseData <ConsumingGoodsDetail> baseOperationOrderGoodsDetail = HttpHelper.GetInstance().ResultCheck((HttpHelper hh) =>
            {
                return(hh.Get <ConsumingGoodsDetail>(new QueryParam
                {
                    view_filter =
                    {
                        filter                =
                        {
                            logical_relation  = "1 AND 2",
                            expressions       =
                            {
                                new QueryParam.Expressions
                                {
                                    field     = "ConsumingOrderId",
                                    @operator = "==",
                                    operands  ={ $"'{ HttpUtility.UrlEncode(baseDataConsumingOrder.body.objects[0].id) }'"                 }
                                },
                                new QueryParam.Expressions
                                {
                                    field     = "EquipmentId",
                                    @operator = "==",
                                    operands  ={ $"'{ HttpUtility.UrlEncode(ApplicationState.GetEquipId()) }'"                             }
                                }
                            }
                        }
                    }
                }));
            }, baseDataConsumingOrder);

            //校验是否含有数据,如果含有数据,拼接具体字段
            HttpHelper.GetInstance().ResultCheck(baseOperationOrderGoodsDetail, out bool isSuccess2);

            if (isSuccess2)
            {
                baseOperationOrderGoodsDetail.body.objects.ForEach(it =>
                {
                    //拼接商品码名称
                    if (!string.IsNullOrEmpty(it.CommodityId))
                    {
                        it.CommodityName = GetNameById <Commodity>(it.CommodityId);
                    }
                    ;
                });
            }

            return(baseOperationOrderGoodsDetail);
        }
        /// <summary>
        /// 【手动盘点】获取盘点任务相关信息
        /// 通过【盘点任务名称】从表格InvoentoryTask【盘点任务】中查询获取盘点任务id。
        /// 通过【盘点任务单】(InventoryTask.id =InventoryOrder.InventoryTaskId)从表格【盘点单】中查询获得盘点单列列表
        /// taskName 盘点任务名称
        /// </summary>
        /// <param name="taskName"></param>
        /// <returns></returns>
        public BaseData <InventoryOrder> GetInventoryOrdersByInventoryTaskName(string taskName)
        {
            var task = GetInventoryTaskByInventoryTaskName(taskName);

            //校验是否含有数据,如果含有数据,拼接具体字段
            HttpHelper.GetInstance().ResultCheck(task, out bool isSuccess);

            var orders = new BaseData <InventoryOrder>();

            if (isSuccess)
            {
                //确认数据只有一条
                if (!string.IsNullOrEmpty(task.body.objects[0].id))                //id = AQACQqweJ4wBAAAAXRA4vCD_sxWaDwQA
                {
                    orders = HttpHelper.GetInstance().Get <InventoryOrder>(new QueryParam
                    {
                        view_filter =
                        {
                            filter                =
                            {
                                logical_relation = "1 AND 2 AND 3 AND 4",
                                expressions      =
                                {
                                    new QueryParam.Expressions
                                    {
                                        field     = "InventoryTaskId",
                                        @operator = "==",
                                        operands  = { $"'{ HttpUtility.UrlEncode(task.body.objects[0].id) }'" }
                                    },
                                    new QueryParam.Expressions
                                    {
                                        field     = "Status",
                                        @operator = "==",
                                        operands  = { $"'{ HttpUtility.UrlEncode(InventoryTaskStatus.待盘点.ToString()) }'" }
                                    },
                                    new QueryParam.Expressions
                                    {
                                        field     = "StoreHouseId",
                                        @operator = "==",
                                        operands  = { $"'{ HttpUtility.UrlEncode(ApplicationState.GetHouseId()) }'" }
                                    },
                                    new QueryParam.Expressions
                                    {
                                        field     = "EquipmentId",
                                        @operator = "==",
                                        operands  = { $"'{ HttpUtility.UrlEncode(ApplicationState.GetEquipId()) }'" }
                                    }
                                }
                            }
                        }
                    });
                    //校验是否含有数据,如果含有数据,拼接具体字段
                    HttpHelper.GetInstance().ResultCheck(orders, out bool isSuccess2);
                    if (isSuccess2)
                    {
                        orders.body.objects.ForEach(order =>
                        {
                            //根据所在盘点货位获取所在货位名称
                            if (!string.IsNullOrEmpty(order.GoodsLocationId))
                            {
                                order.GoodsLocationName = GetNameById <GoodsLocation>(order.GoodsLocationId);
                            }
                            //根据所在设备编号查询设备名称
                            if (!string.IsNullOrEmpty(order.EquipmentId))
                            {
                                order.EquipmentName = GetNameById <Equipment>(order.EquipmentId);
                            }
                            //根据盘点库房编号查询盘点库房名称
                            if (!string.IsNullOrEmpty(order.StoreHouseId))
                            {
                                order.StoreHouseName = GetNameById <StoreHouse>(order.StoreHouseId);
                            }
                        });
                    }
                }
            }
            else
            {
                orders.code    = task.code;
                orders.message = task.message;
            }
            return(orders);
        }
        /// <summary>
        /// 【智能柜】 自动盘点更新盘点单管理和其商品明细 ,post请求为admintoken
        /// </summary>
        /// <param name="orders"></param>
        /// <returns></returns>
        public BasePostData <InventoryDetail> CreateInventoryOrderAndDetail(List <CommodityCode> commodityCodes)
        {
            BasePostData <InventoryDetail> inventoryDetailRet;

            if (null == commodityCodes || commodityCodes.Count <= 0)
            {
                inventoryDetailRet = new BasePostData <InventoryDetail>()
                {
                    code    = (int)ResultCode.Parameter_Exception,
                    message = ResultCode.Parameter_Exception.ToString()
                };

                return(inventoryDetailRet);
            }

            //创建盘点任务单
            var inventoryTasks = HttpHelper.GetInstance().PostByAdminToken(new PostParam <InventoryTask>()
            {
                objects = { new InventoryTask {
                                Status = InventoryTaskStatus.待确认.ToString()
                            } }
            });

            HttpHelper.GetInstance().ResultCheck(inventoryTasks, out bool isSuccess);

            if (isSuccess)
            {
                string now = GetDateTimeNow();
                List <InventoryOrder> inventoryOrderList = new List <InventoryOrder>();

                //分柜创建盘点任务
                commodityCodes.Select(it => it.GoodsLocationId).Distinct().ToList().ForEach(goodsLocationId =>
                {
                    inventoryOrderList.Add(new InventoryOrder
                    {
                        ConfirmDate     = now,
                        InventoryTaskId = inventoryTasks.body[0].id,
                        Status          = InventoryOrderStatus.待盘点.ToString(),               //创建盘点单状态为[待盘点]
                        //TODO: 需要当前设备id,货位id和库房id
                        GoodsLocationId = goodsLocationId,
                        EquipmentId     = ApplicationState.GetEquipId(),
                        StoreHouseId    = ApplicationState.GetHouseId(),
                        Type            = "自动创建"
                    });
                });

                //创建盘点单
                var inventoryOrders = HttpHelper.GetInstance().PostByAdminToken(new PostParam <InventoryOrder>()
                {
                    objects = inventoryOrderList
                });

                inventoryDetailRet = HttpHelper.GetInstance().ResultCheck((HttpHelper hh) =>
                {
                    BaseData <CommodityInventoryDetail> CommodityInventoryDetails = null;

                    if (commodityCodes.Count > 0)
                    {
                        var commodityCodeIds = commodityCodes.Select(it => it.id).Distinct().ToList();

                        CommodityInventoryDetails = hh.Get <CommodityInventoryDetail>(new QueryParam
                        {
                            @in =
                            {
                                field   = "CommodityCodeId",
                                in_list = BllHelper.ParamUrlEncode(commodityCodeIds)
                            }
                        });
                    }
                    if (CommodityInventoryDetails != null)
                    {
                        hh.ResultCheck(CommodityInventoryDetails, out bool isSuccessq);

                        if (isSuccessq)
                        {
                            commodityCodes.ForEach(it =>
                            {
                                it.CommodityInventoryId = CommodityInventoryDetails.body.objects.Where(cit => cit.CommodityCodeId == it.id).First().id;
                            });
                        }
                    }

                    List <InventoryDetail> inventoryDetailList = new List <InventoryDetail>();
                    commodityCodes.ForEach(it =>
                    {
                        inventoryDetailList.Add(new InventoryDetail
                        {
                            CommodityInventoryId = it.CommodityInventoryId,
                            InventoryOrderId     = inventoryOrders.body.Where(iit => iit.GoodsLocationId == it.GoodsLocationId).Select(iit => iit.id).First(),
                            CommodityCodeId      = it.id
                        });
                    });
                    //创建盘名单明细列表
                    return(hh.PostByAdminToken(new PostParam <InventoryDetail>()
                    {
                        objects = inventoryDetailList
                    }));
                }, inventoryOrders);

                //更新盘点单状态
                if (inventoryDetailRet != null)
                {
                    var orderIds = inventoryDetailRet.body.Select(it => it.InventoryOrderId).Distinct().ToList();

                    orderIds.ForEach(id =>
                    {
                        var temp = inventoryOrders.body.Where(it => it.id.Equals(id)).First();
                        //temp.Status = InventoryOrderStatus.已完成.ToString();

                        //执行更新操作,异常状态记录日志,详情见方法体内部
                        UpdateInventoryOrderStatus(temp);
                    });
                }
            }
            else
            {
                inventoryDetailRet = new BasePostData <InventoryDetail>()
                {
                    code    = (int)ResultCode.Result_Exception,
                    message = ResultCode.Result_Exception.ToString()
                };
            }

            return(inventoryDetailRet);
        }
        /// <summary>
        /// 结束操作
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void onEndOperation(object sender, RoutedEventArgs e)
        {
            if (isSuccess)
            {
                //获取没有上架商品的信息

                List <string> codeIds = bdCommodityCode.body.objects.Select(item => item.id).ToList();

                List <AllotShelfCommodity> list = bdCommodityDetail.body.objects.Where(item => item.Status == "未上架" || !codeIds.Contains(item.CommodityCodeId)).ToList();

                //还有未上架的商品,让用户选择原因
                if (list.Count > 0)
                {
                    normalView.Visibility   = Visibility.Hidden;
                    abnormalView.Visibility = Visibility.Visible;
                }
                else
                {
                    BaseData <AllotShelfCommodity> bdAllotShelfCommodity = AllotShelfBll.GetInstance().GetShelfTaskAllCommodityDetail(allotShelf);

                    HttpHelper.GetInstance().ResultCheck(bdCommodityDetail, out bool isSuccess1);
                    if (!isSuccess1)
                    {
                        MessageBox.Show("获取拣货任务单商品明细信息错误!" + bdCommodityDetail.message, "温馨提示", MessageBoxButton.OK);
                        allotShelf.Status = AllotShelfStatusEnum.异常.ToString();
                    }
                    else
                    {
                        int cnt = bdAllotShelfCommodity.body.objects.Where(item => item.Status == "未上架" && item.EquipmentId != ApplicationState.GetEquipId()).Count();
                        if (cnt > 0)
                        {
                            allotShelf.Status = AllotShelfStatusEnum.进行中.ToString();
                        }
                        else
                        {
                            allotShelf.Status = AllotShelfStatusEnum.已完成.ToString();
                        }
                    }
                }
            }
            bExit = (((Button)sender).Name == "YesAndExitBtn" ? true : false);
            EndOperation(bExit);
        }
        /// <summary>
        /// 根据上架单号获取商品详情
        /// </summary>
        /// <param name="shelfTaskName"></param>
        /// <returns></returns>
        public BaseData <ShelfTaskCommodityDetail> GetShelfTaskCommodityDetail(ShelfTask shelfTask)
        {
            BaseData <ShelfTaskCommodityDetail> baseDataShelfTaskCommodityDetail = HttpHelper.GetInstance().Get <ShelfTaskCommodityDetail>(new QueryParam
            {
                view_filter =
                {
                    filter                =
                    {
                        logical_relation = "1 AND 2 AND 3",
                        expressions      =
                        {
                            new QueryParam.Expressions
                            {
                                field     = "ShelfTaskId",
                                @operator = "==",
                                operands  = { $"'{ HttpUtility.UrlEncode(shelfTask.id) }'"  }
                            },
                            new QueryParam.Expressions
                            {
                                field     = "StoreHouseId",
                                @operator = "==",
                                operands  = { $"'{ HttpUtility.UrlEncode(ApplicationState.GetHouseId()) }'" }
                            },
                            new QueryParam.Expressions
                            {
                                field     = "EquipmentId",
                                @operator = "==",
                                operands  = { $"'{ HttpUtility.UrlEncode(ApplicationState.GetEquipId()) }'" }
                            }
                        }
                    }
                }
            });

            //校验是否含有数据,如果含有数据,拼接具体字段
            HttpHelper.GetInstance().ResultCheck(baseDataShelfTaskCommodityDetail, out bool isSuccess);

            if (isSuccess)
            {
                baseDataShelfTaskCommodityDetail.body.objects.ForEach(it =>
                {
                    //拼接设备名字
                    if (!string.IsNullOrEmpty(it.EquipmentId))
                    {
                        it.EquipmentName = GetNameById <Equipment>(it.EquipmentId);
                    }

                    //拼接库房名字
                    if (!string.IsNullOrEmpty(it.StoreHouseId))
                    {
                        it.StoreHouseName = GetNameById <StoreHouse>(it.StoreHouseId);
                    }

                    //拼接货位名字
                    if (!string.IsNullOrEmpty(it.GoodsLocationId))
                    {
                        it.GoodsLocationName = GetNameById <GoodsLocation>(it.GoodsLocationId);
                    }

                    //拼接商品名字
                    if (!string.IsNullOrEmpty(it.CommodityId))
                    {
                        it.CommodityName = GetNameById <Commodity>(it.CommodityId);
                    }
                });
            }

            return(baseDataShelfTaskCommodityDetail);
        }