/// <summary>
        /// 盘点
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task <DetailGoodsDto> Check(InOutGoodsDto input)
        {
            GoodsRecord record = input.MapTo <GoodsRecord>();
            Goods       result = await _goodsManager.CheckGoods(record);

            return(result.MapTo <DetailGoodsDto>());
        }
        /// <summary>
        /// 出库
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task <DetailGoodsDto> Out(InOutGoodsDto input)
        {
            Goods entity = Repository.FirstOrDefault(input.Id);

            if (entity != null)
            {
                entity.GoodsNum = entity.GoodsNum - input.GoodsNum;
            }
            GoodsRecord record = input.MapTo <GoodsRecord>();

            record.OperateType = GoodsOperateType.Out;
            string recordId = await _goodsRecordManager.OutRecord(record);

            entity = await Repository.UpdateAsync(entity);

            if (entity.GoodsNum <= MinNum)
            {
                EventBus.Trigger(new GoodsNumChangedEventData
                {
                    Id        = entity.Id,
                    GoodsName = entity.GoodsName,
                    GoodsNum  = entity.GoodsNum,
                    MinNum    = MinNum
                });

                ////注册事件
                //var goodsChangedEvent = EventBus.Register<GoodsNumChangedEventData>(data =>
                //{
                //    /*
                //     * To do
                //     **/
                //});
                ////取消注册事件
                //goodsChangedEvent.Dispose();


                //string message = string.Format("货品{0}当前库存为{1},低于最低允许库存{2},请及时采购补充!", entity.GoodsName, entity.GoodsNum, MinNum);
                //await _messageManager.BoradcastMessage(message);
            }

            DetailGoodsDto result = entity.MapTo <DetailGoodsDto>();

            return(await Task.FromResult(result));
        }
        /// <summary>
        /// 入库
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task <DetailGoodsDto> In(InOutGoodsDto input)
        {
            Goods entity = Repository.FirstOrDefault(input.Id);

            if (entity != null)
            {
                entity.GoodsNum = entity.GoodsNum + input.GoodsNum;
            }
            GoodsRecord record = input.MapTo <GoodsRecord>();

            record.OperateType = GoodsOperateType.In;
            string recordId = await _goodsRecordManager.InRecord(record);

            entity = await Repository.UpdateAsync(entity);

            DetailGoodsDto result = entity.MapTo <DetailGoodsDto>();

            return(await Task.FromResult(result));
        }