public override async Task HandleRevert(FlowSheet flowSheet)
        {
            //数据处理
            var formObj     = Newtonsoft.Json.JsonConvert.DeserializeObject <JObject>(flowSheet.FlowInstance.FormData);
            var sheetData   = formObj["sheetData"];
            var sheetHeader = sheetData["header"];

            var storeId  = sheetHeader["storeId"].ToObject <int>(); //出货仓库id;
            var unitId   = sheetHeader["unitId"].ToObject <int>();  //代理商id
            var totalFee = sheetHeader["totalFee"].ToObjectWithDefault <decimal>();
            //更改往来单位金额
            await UnitManager.ChangeFee(unitId, null, totalFee, flowSheet);

            var materialSellIds = new List <int>();
            var toOutMaterials  = new Dictionary <int, int>();

            foreach (var sheetItem in sheetData["body"])
            {
                var materialId     = sheetItem["materialId"].ToObjectWithDefault <int>(); //商品Id
                var sellMaterialId = Convert.ToInt32(sheetItem["id"]);                    //对应的销售物料Id
                var number         = sheetItem["number"].ToObjectWithDefault <int>();     //出货数量
                if (number == 0)
                {
                    continue;
                }
                //取消销售出库记录
                var materialSellOut = await MaterialSellOutManager.GetAll()
                                      .Where(o => o.UnitId == unitId && o.FlowSheetId == sheetItem["flowSheetId"].ToObjectWithDefault <int>() && o.OutNumber == number && o.MaterialId == materialId)
                                      .FirstOrDefaultAsync();

                if (materialSellOut != null)
                {
                    await MaterialSellOutManager.DeleteAsync(materialSellOut);
                }

                materialSellIds.Add(sellMaterialId);
                //加入待出库集合
                if (!toOutMaterials.ContainsKey(materialId))
                {
                    toOutMaterials.Add(materialId, number);
                }
                else
                {
                    toOutMaterials[materialId] += number;
                }

                await MaterialSellManager.Out(unitId, sellMaterialId, storeId, -number, flowSheet);
            }
            //出库
            foreach (var item in toOutMaterials)
            {
                await StoreMaterialManager.CountMaterial(storeId, item.Key, item.Value, flowSheet);
            }
            await MaterialSellManager.CheckSellSheetStatus(materialSellIds);
        }
        public override async Task Handle(FlowSheet flowSheet)
        {
            await base.Handle(flowSheet);

            //数据处理
            var formObj     = Newtonsoft.Json.JsonConvert.DeserializeObject <JObject>(flowSheet.FlowInstance.FormData);
            var sheetData   = formObj["sheetData"];
            var sheetHeader = sheetData["header"];

            flowSheet.SheetDate = sheetHeader["sheetDate"].ToObjectWithDefault <DateTime>();
            flowSheet.Remarks   = sheetHeader["remarks"].ToObjectWithDefault <string>();
            var storeId  = sheetHeader["storeId"].ToObject <int>(); //出货仓库id;
            var unitId   = sheetHeader["unitId"].ToObject <int>();  //代理商id
            var totalFee = sheetHeader["totalFee"].ToObjectWithDefault <decimal>();

            flowSheet.UnitId = unitId;
            flowSheet.SetPropertyValue("StoreName", sheetHeader["storeName"].ToObjectWithDefault <string>());
            flowSheet.SetPropertyValue("Fee", totalFee);

            //更改往来单位金额
            await UnitManager.ChangeFee(unitId, null, -totalFee, flowSheet);

            var materialSellIds = new List <int>();
            var toOutMaterials  = new Dictionary <int, int>();

            foreach (var sheetItem in sheetData["body"])
            {
                var materialId     = sheetItem["materialId"].ToObjectWithDefault <int>(); //商品Id
                var sellMaterialId = Convert.ToInt32(sheetItem["id"]);                    //对应的销售物料Id
                var number         = sheetItem["number"].ToObjectWithDefault <int>();     //出货数量
                if (number == 0)
                {
                    continue;
                }
                //建立销售出库记录
                var materialSellOut = new MaterialSellOut()
                {
                    UnitId      = unitId,
                    FlowSheetId = sheetItem["flowSheetId"].ToObjectWithDefault <int>(),
                    MaterialId  = materialId,
                    OutNumber   = number,
                    Price       = sheetItem["price"].ToObjectWithDefault <decimal>(),
                    Discount    = sheetItem["discount"].ToObjectWithDefault <decimal>()
                };
                await MaterialSellOutManager.InsertAsync(materialSellOut);

                materialSellIds.Add(sellMaterialId);
                //加入待出库集合
                if (!toOutMaterials.ContainsKey(materialId))
                {
                    toOutMaterials.Add(materialId, number);
                }
                else
                {
                    toOutMaterials[materialId] += number;
                }

                await MaterialSellManager.Out(unitId, sellMaterialId, storeId, number, flowSheet);
            }
            //出库
            foreach (var item in toOutMaterials)
            {
                //检测库存是否足够
                if (!StoreMaterialManager.IsSatisfied(item.Key, storeId, unitId, item.Value, out var message))
                {
                    throw new UserFriendlyException(message);
                }
                await StoreMaterialManager.CountMaterial(storeId, item.Key, -item.Value, flowSheet);
            }
            await MaterialSellManager.CheckSellSheetStatus(materialSellIds);
        }