Пример #1
0
        /// <summary>
        /// 有单领用数据提交
        /// (2019-08-27 18:08)变更提交顺序:
        /// 1)创建变更记录
        /// 2)创建主单状态
        /// 3)变更主单状态【已完成】,完成部分变更【进行中】,商品不在任务单内变更为【异常】
        /// 注:主单没有传完成时间,需要把字段添加上(FinishDate)
        /// </summary>
        /// <param name="baseDataCommodityCode"></param>
        /// <param name="order"></param>
        /// <returns></returns>
        public BasePostData <CommodityInventoryChange> SubmitConsumingChangeWithOrder(BaseData <CommodityCode> baseDataCommodityCode, ConsumingOrder order)
        {
            //领用类来源单据
            var sourceBill = new SourceBill()
            {
                object_name = "ConsumingOrder",
                object_id   = order.id
            };

            var tempChange = CommodityInventoryChangeBll.GetInstance().CreateCommodityInventoryChange(baseDataCommodityCode, sourceBill);

            //校验数据是否正常
            HttpHelper.GetInstance().ResultCheck(tempChange, out bool isSuccess);
            if (isSuccess)
            {
                //更新领用单状态信息
                var orderResult = UpdateConsumingOrderStatus(order);
                //校验数据是否正常
                HttpHelper.GetInstance().ResultCheck(orderResult, out bool isSuccess2);
                if (!isSuccess2)
                {
                    return(new BasePostData <CommodityInventoryChange>()
                    {
                        code = orderResult.code,
                        message = orderResult.message
                    });
                }
            }


            return(tempChange);
        }
Пример #2
0
        /// <summary>
        /// 拣货的库存变化
        /// </summary>
        /// <param name="baseDatacommodityCode"></param>
        /// <param name="pickTask"></param>
        /// <param name="bAutoSubmit">是否是主动提交</param>
        /// <returns></returns>
        public BasePostData <CommodityInventoryChange> CreatePickTaskCommodityInventoryChange(BaseData <CommodityCode> baseDataCommodityCode, PickTask pickTask, bool bAutoSubmit)
        {
            BasePostData <CommodityInventoryChange> retBaseSinglePostDataCommodityInventoryChange = null;

            //校验是否含有数据,如果含有数据,有就继续下一步
            baseDataCommodityCode = HttpHelper.GetInstance().ResultCheck(baseDataCommodityCode, out bool isSuccess);

            if (isSuccess)
            {
                var CommodityCodes = baseDataCommodityCode.body.objects;

                var CommodityInventoryChanges = new List <CommodityInventoryChange>(CommodityCodes.Count);

                CommodityCodes.ForEach(it => {
                    CommodityInventoryChange cic = new CommodityInventoryChange()
                    {
                        CommodityCodeId = it.id,           //商品码【扫描】
                        SourceBill      = new SourceBill() //来源单据
                        {
                            object_name = typeof(PickTask).Name,
                            object_id   = pickTask.id
                        }
                    };

                    if (it.operate_type == (int)OperateType.出库)
                    {
                        cic.ChangeStatus = CommodityInventoryChangeStatus.拣货作业.ToString();
                        cic.StoreHouseId = it.StoreHouseId;
                    }
                    else
                    {
                        cic.ChangeStatus    = CommodityInventoryChangeStatus.正常.ToString();
                        cic.EquipmentId     = it.EquipmentId;
                        cic.StoreHouseId    = it.StoreHouseId;
                        cic.GoodsLocationId = it.GoodsLocationId;
                    }

                    if (!bAutoSubmit && it.AbnormalDisplay == AbnormalDisplay.异常.ToString())
                    {
                        cic.AdjustStatus = CommodityInventoryChangeAdjustStatus.是.ToString();
                    }

                    CommodityInventoryChanges.Add(cic);
                });

                retBaseSinglePostDataCommodityInventoryChange = CommodityInventoryChangeBll.GetInstance().CreateCommodityInventoryChange(CommodityInventoryChanges);
            }
            else
            {
                retBaseSinglePostDataCommodityInventoryChange = new BasePostData <CommodityInventoryChange>
                {
                    code    = baseDataCommodityCode.code,
                    message = baseDataCommodityCode.message
                };
            }

            return(retBaseSinglePostDataCommodityInventoryChange);
        }
        /// <summary>
        /// 提交变更信息
        /// </summary>
        /// <param name="baseDataCommodityCode"></param>
        /// <param name="allotShelf"></param>
        /// <param name="baseAllotShelfCommodity"></param>
        /// <returns></returns>

        public BasePostData <CommodityInventoryChange> SubmitAllotShelfChangeWithOrder(BaseData <CommodityCode> baseDataCommodityCode, AllotShelf allotShelf, BaseData <AllotShelfCommodity> baseAllotShelfCommodity)
        {
            BasePostData <CommodityInventoryChange> retBaseSinglePostDataCommodityInventoryChange = null;

            //校验是否含有数据,如果含有数据,有就继续下一步
            baseDataCommodityCode = HttpHelper.GetInstance().ResultCheck(baseDataCommodityCode, out bool isSuccess);

            baseAllotShelfCommodity = HttpHelper.GetInstance().ResultCheck(baseAllotShelfCommodity, out bool isSuccess2);
            if (isSuccess && isSuccess2)
            {
                var CommodityCodes            = baseDataCommodityCode.body.objects;
                var CommodityInventoryChanges = new List <CommodityInventoryChange>(CommodityCodes.Count);

                //调拨上架商品明细
                var allotShelfCommodities = baseAllotShelfCommodity.body.objects;
                //获取待上架商品CommodityId列表(去重后)
                var detailCommodityIds = allotShelfCommodities.Select(it => it.CommodityId).Distinct().ToList();

                CommodityCodes.ForEach(it =>
                {
                    CommodityInventoryChange cic = new CommodityInventoryChange()
                    {
                        CommodityCodeId = it.id,           //商品码【扫描】
                        SourceBill      = new SourceBill() //来源单据
                        {
                            object_name = typeof(AllotShelf).Name,
                            object_id   = allotShelf.id
                        },
                        //EquipmentId = ApplicationState.GetEquipId(),
                        //StoreHouseId = ApplicationState.GetHouseId(),
                        //GoodsLocationId = it.GoodsLocationId
                    };

                    //【待确认】出库
                    if (it.operate_type == (int)OperateType.出库)
                    {
                        cic.ChangeStatus = CommodityInventoryChangeStatus.未上架.ToString();
                        cic.StoreHouseId = ApplicationState.GetHouseId();
                        cic.AdjustStatus = CommodityInventoryChangeAdjustStatus.是.ToString();
                    }
                    //入库
                    else
                    {
                        cic.ChangeStatus    = CommodityInventoryChangeStatus.正常.ToString();
                        cic.EquipmentId     = it.EquipmentId;
                        cic.StoreHouseId    = it.StoreHouseId;
                        cic.GoodsLocationId = it.GoodsLocationId;
                        //【待确认】
                        if (!detailCommodityIds.Contains(it.CommodityId))
                        {
                            cic.AdjustStatus = CommodityInventoryChangeAdjustStatus.是.ToString();
                        }
                    }

                    CommodityInventoryChanges.Add(cic);
                });

                retBaseSinglePostDataCommodityInventoryChange = CommodityInventoryChangeBll.GetInstance().CreateCommodityInventoryChange(CommodityInventoryChanges);
            }
            else
            {
                retBaseSinglePostDataCommodityInventoryChange = new BasePostData <CommodityInventoryChange>
                {
                    code    = baseDataCommodityCode.code,
                    message = baseDataCommodityCode.message
                };

                LogUtils.Error("CreateShelfTaskCommodityInventoryChange 失败! " + baseDataCommodityCode.message);
            }
            return(retBaseSinglePostDataCommodityInventoryChange);
        }
Пример #4
0
        /// <summary>
        /// 无单领用提交接口
        /// (2019-08-27 18:08)变更流程为:领用中->创建子表->变更主表状态[异常,已完成]
        /// 当领用过程中放进商品则主单状态异常,领用物品主单状态正常
        /// </summary>
        /// <param name="baseDataCommodityCode"></param>
        /// <returns></returns>
        public BasePostData <CommodityInventoryChange> SubmitConsumingChangeWithoutOrder(BaseData <CommodityCode> baseDataCommodityCode, ConsumingOrderType type, SourceBill sourceBill = null)
        {
            var normalList = new List <CommodityCode>();            //回退商品列表
            var lossList   = new List <CommodityCode>();            //领用商品列表
            var changeList = new List <CommodityInventoryChange>(); //商品库存变更记录列表

            baseDataCommodityCode.body.objects.ForEach(commodityCode =>
            {
                //为0标识为出库
                if (commodityCode.operate_type == 0)
                {
                    lossList.Add(commodityCode);
                }
                else
                {
                    normalList.Add(commodityCode);
                };
            });

            ConsumingOrder consumingOrder = new ConsumingOrder()
            {
                FinishDate = GetDateTimeNow(),//完成时间
                ////当入库数量大于0说明在领用的时候进行了入库操作,变更领用单状态为异常
                //Status = normalList.Count > 0 ? ConsumingOrderStatus.异常.ToString() : ConsumingOrderStatus.已完成.ToString(), //
                Status       = ConsumingOrderStatus.领用中.ToString(),
                StoreHouseId = ApplicationState.GetValue <String>((int)ApplicationKey.HouseId), //领用库房
                Type         = type.ToString(),                                                 //领用类型
                SourceBill   = type == ConsumingOrderType.医嘱处方领用 ? sourceBill : null            // 需要填写医嘱处方SourceBill
            };


            //创建领用单
            var order = CreateConsumingOrder(consumingOrder);

            //校验数据是否正常
            HttpHelper.GetInstance().ResultCheck(order, out bool isSuccess);

            if (!isSuccess)
            {
                LogUtils.Warn("CreateConsumingOrder 1:" + ResultCode.Result_Exception.ToString());
                return(new BasePostData <CommodityInventoryChange>()
                {
                    code = (int)ResultCode.Result_Exception,
                    message = ResultCode.Result_Exception.ToString()
                });
            }
            //当正常数量大于0说明向智能柜中存放商品,需要创建商品变更记录
            if (normalList.Count > 0)
            {
                normalList.ForEach(normal =>
                {
                    changeList.Add(new CommodityInventoryChange()
                    {
                        CommodityCodeId = normal.id,
                        SourceBill      = new SourceBill()
                        {
                            object_name = "ConsumingReturnOrder"
                        },
                        ChangeStatus    = CommodityInventoryChangeStatus.正常.ToString(),
                        EquipmentId     = normal.EquipmentId,
                        StoreHouseId    = normal.StoreHouseId,
                        GoodsLocationId = normal.GoodsLocationId
                    });
                });
            }

            //当消耗数量大于0说明向智能柜中取出商品,需要创建商品变更记录
            if (lossList.Count > 0)
            {
                lossList.ForEach(loss =>
                {
                    changeList.Add(new CommodityInventoryChange()
                    {
                        CommodityCodeId = loss.id,
                        SourceBill      = new SourceBill()
                        {
                            object_name = "ConsumingOrder",
                            object_id   = order.body[0].id
                        },
                        ChangeStatus = CommodityInventoryChangeStatus.已消耗.ToString()
                    });
                });
            }
            var changes = CommodityInventoryChangeBll.GetInstance().CreateCommodityInventoryChange(changeList);

            //校验数据是否正常
            HttpHelper.GetInstance().ResultCheck(changes, out bool isSuccess2);
            if (!isSuccess2)
            {
                LogUtils.Warn("CreateConsumingOrder 2:" + ResultCode.Result_Exception.ToString());
            }

            ////当入库数量大于0说明在领用的时候进行了入库操作, 或者领用商品中有过期商品, 变更领用单状态为异常
            if (normalList.Count > 0 || lossList.Where(item => item.QualityStatus == QualityStatusType.过期.ToString() || item.InventoryStatus == CommodityInventoryChangeStatus.待回收.ToString()).Count() > 0)
            {
                order.body[0].Status = ConsumingOrderStatus.异常.ToString();
            }
            else
            {
                order.body[0].Status = ConsumingOrderStatus.已完成.ToString();
            }
            //更新主表状态
            var orderResult = UpdateConsumingOrderStatus(order.body[0]);

            //校验数据是否正常,并记录日志
            HttpHelper.GetInstance().ResultCheck(orderResult, out bool isSuccess3);
            if (!isSuccess3)
            {
                LogUtils.Warn("CreateConsumingOrder 3:" + ResultCode.Result_Exception.ToString());
            }
            return(changes);
        }