コード例 #1
0
        public async Task <RouteData <Wms_StockOutMaterialDetailDto> > SearchMaterial(long storeId, long stockOutId, string materialNo)
        {
            Wms_material material = await _client.Queryable <Wms_material>().FirstAsync(x => x.MaterialNo == materialNo);

            if (material == null)
            {
                return(RouteData <Wms_StockOutMaterialDetailDto> .From(PubMessages.E1005_MATERIALNO_NOTFOUND));
            }
            Wms_stockout stockout = await _client.Queryable <Wms_stockout>().FirstAsync(x => x.StockOutId == stockOutId);

            if (stockout == null)
            {
                return(RouteData <Wms_StockOutMaterialDetailDto> .From(PubMessages.E2115_STOCKOUT_HASNOT_MATERIAL));
            }
            Wms_stockoutdetail detail = await _client.Queryable <Wms_stockoutdetail>().FirstAsync(x => x.StockOutId == stockOutId && x.MaterialId == material.MaterialId);

            if (detail == null)
            {
                return(RouteData <Wms_StockOutMaterialDetailDto> .From(PubMessages.E2115_STOCKOUT_HASNOT_MATERIAL));
            }
            Wms_StockOutMaterialDetailDto detailDto = new Wms_StockOutMaterialDetailDto()
            {
                StockOutId       = detail.StockOutId.ToString(),
                StockOutDetailId = detail.StockOutDetailId.ToString(),
                MaterialId       = material.MaterialId.ToString(),
                MaterialNo       = material.MaterialNo,
                MaterialName     = material.MaterialName,
                OrderNo          = stockout.OrderNo,
                PlanOutQty       = (int)detail.PlanOutQty,
                ActOutQty        = (int)detail.ActOutQty,
                Qty = 0
            };

            return(RouteData <Wms_StockOutMaterialDetailDto> .From(detailDto));
        }
コード例 #2
0
        public async Task <RouteData <Wms_StockOutDto> > Get(long storeId, string no)
        {
            Wms_stockout model = await _client.Queryable <Wms_stockout>().FirstAsync(c => c.StockOutNo == no && c.WarehouseId == storeId && c.IsDel == 1);

            if (model == null)
            {
                RouteData <Wms_stockin> .From(PubMessages.E2013_STOCKIN_NOTFOUND);
            }
            Wms_StockOutDto dto = JsonConvert.DeserializeObject <Wms_StockOutDto>(JsonConvert.SerializeObject(model));
            List <Wms_StockMaterialDetailDto> details = await _client.Queryable <Wms_stockoutdetail_box, Wms_inventorybox, Wms_stockoutdetail, Wms_material>
                                                            ((sidb, ib, sid, m) => new object[] {
                JoinType.Left, sidb.InventoryBoxId == ib.InventoryBoxId,
                JoinType.Left, sidb.StockOutDetailId == sid.StockOutDetailId,
                JoinType.Left, sid.MaterialId == m.MaterialId,
            })
                                                        .Where((sidb, ib, sid, m) => sid.StockOutId == model.StockOutId)
                                                        .Select((sidb, ib, sid, m) => new Wms_StockMaterialDetailDto()
            {
                InventoryBoxNo     = ib.InventoryBoxNo,
                StockId            = sid.StockOutId.ToString(),
                StockDetailId      = sid.StockOutDetailId.ToString(),
                StockInUniqueIndex = sid.UniqueIndex,
                MaterialId         = m.MaterialId.ToString(),
                MaterialNo         = m.MaterialNo,
                MaterialName       = m.MaterialName,
                PlanQty            = sidb.PlanQty * -1,
                ActQty             = sidb.Qty * -1,
                Qty = 0
            })
                                                        .ToListAsync();

            dto.Details = details.ToArray();
            return(RouteData <Wms_StockOutDto> .From(dto));
        }
コード例 #3
0
        public async Task <string> WorkList(long storeId, long pid)
        {
            Wms_stockout stockout = await _client.Queryable <Wms_stockout>().FirstAsync(x => x.StockOutId == pid);

            if (stockout == null)
            {
                return("");
            }
            IWMSOperationApiAccessor wmsAccessor = WMSApiManager.GetOperationApiAccessor(storeId.ToString(), _client, this.UserDto);

            Wms_StockOutWorkDetailDto[] result = await wmsAccessor.GetStockOutCurrentPlan(pid);

            return(Bootstrap.GridData(result, result.Length).JilToJson());
        }
コード例 #4
0
ファイル: StockOutController.cs プロジェクト: avalise/MyReps
        public IActionResult Add(string id)
        {
            var model = new Wms_stockout();

            if (id.IsEmpty())
            {
                return(View(model));
            }
            else
            {
                model = _stockoutServices.QueryableToEntity(c => c.StockOutId == SqlFunc.ToInt64(id) && c.IsDel == 1);
                return(View(model));
            }
        }
コード例 #5
0
        public IActionResult Add(long id, long storeId)
        {
            var model = new Wms_stockout();

            if (id == 0)
            {
                model.WarehouseId = storeId;
                return(View(model));
            }
            else
            {
                model = _stockoutServices.QueryableToEntity(c => c.StockOutId == SqlFunc.ToInt64(id) && c.IsDel == 1);
                return(View(model));
            }
        }
コード例 #6
0
        public void MaterialQRCode(long storeId, long detailboxId)
        {
            Wms_stockoutdetail_box detailBox = _client.Queryable <Wms_stockoutdetail_box>()
                                               .First(c => c.DetailBoxId == detailboxId);

            Wms_stockoutdetail detail = _client.Queryable <Wms_stockoutdetail>()
                                        .First(c => c.StockOutDetailId == detailBox.StockOutDetailId);

            Wms_stockout stockout = _client.Queryable <Wms_stockout>()
                                    .First(c => c.StockOutId == detail.StockOutId);

            string dateStr = DateTime.Now.ToString("yyyyMMddhhmmssfff");
            string strQR   = $"{detail.UniqueIndex}@@{detailBox.StockInUniqueIndex}@@{dateStr}@@{detailBox.PlanQty} ";

            QRCodeGenerator qrGenerator = new QRCodeGenerator();
            QRCodeData      qrCodeData  = qrGenerator.CreateQrCode(
                strQR, QRCodeGenerator.ECCLevel.Q);
            QRCode qrCode      = new QRCode(qrCodeData);
            Bitmap qrCodeImage = qrCode.GetGraphic(20);

            qrCodeImage.Save(this.Response.Body, ImageFormat.Png);
        }
コード例 #7
0
        public IActionResult AddOrUpdate([FromForm] Wms_stockout model, [FromForm] string id)
        {
            var validator = new StockOutFluent();
            var results   = validator.Validate(model);
            var success   = results.IsValid;

            if (!success)
            {
                string msg = results.Errors.Aggregate("", (current, item) => (current + item.ErrorMessage + "</br>"));
                return(BootJsonH((PubEnum.Failed.ToInt32(), msg)));
            }
            if (id.IsEmptyZero())
            {
                if (!model.OrderNo.IsEmpty())
                {
                    if (_stockoutServices.IsAny(c => c.OrderNo == model.OrderNo))
                    {
                        return(BootJsonH((false, PubConst.StockOut1)));
                    }
                }
                model.StockOutNo     = _serialnumServices.GetSerialnum(UserDtoCache.UserId, "Wms_stockout");
                model.StockOutId     = PubId.SnowflakeId;
                model.StockOutStatus = StockOutStatus.initial.ToByte();
                model.CreateBy       = UserDtoCache.UserId;
                bool flag = _stockoutServices.Insert(model);
                return(BootJsonH(flag ? (flag, PubConst.Add1) : (flag, PubConst.Add2)));
            }
            else
            {
                model.StockOutId   = id.ToInt64();
                model.ModifiedBy   = UserDtoCache.UserId;
                model.ModifiedDate = DateTimeExt.DateTime;
                var flag = _stockoutServices.Update(model);
                return(BootJsonH(flag ? (flag, PubConst.Update1) : (flag, PubConst.Update2)));
            }
        }
コード例 #8
0
        public async Task <RouteData> StockOutReport(long stockOutId, [FromBody] OutsideStockOutReportDto result)
        {
            try
            {
                _logger.LogInformation($"[出库任务状态变化通知]收到通知,StockOutId={stockOutId},data={JsonConvert.SerializeObject(result)}");
                result.StockOutId = stockOutId;
                Wms_stockout stockOut = await _client.Queryable <Wms_stockout>()
                                        .FirstAsync(x => x.StockOutId == result.StockOutId);

                if (stockOut == null)
                {
                    _logger.LogError($"[出库任务状态变化通知]E2113-没有找到出库单,StockOutId={stockOutId}");
                    return(YL.Core.Dto.RouteData.From(PubMessages.E2113_STOCKOUT_NOTFOUND));
                }
                if (stockOut.StockOutStatus == StockOutStatus.task_finish.ToInt32())
                {
                    _logger.LogError($"[出库任务状态变化通知]E2114-出库单状态已标记为完成,本次操作中断,StockOutId={stockOutId}, StockOutNo={stockOut.StockOutNo}");
                    //return YL.Core.Dto.RouteData.From(PubMessages.E2114_STOCKOUT_ALLOW_FINISHED);
                    return(new RouteData());
                }
                Wms_mestask mesTask = await _client.Queryable <Wms_mestask>()
                                      .FirstAsync(x => x.MesTaskId == stockOut.MesTaskId);

                if (mesTask == null)
                {
                    _logger.LogError($"[出库任务状态变化通知]E3000-没有找到相应的Mes任务,StockOutId={stockOutId}, StockOutNo={stockOut.StockOutNo}, MesTaskId={stockOut.MesTaskId}");
                    return(YL.Core.Dto.RouteData.From(PubMessages.E3000_MES_STOCKINTASK_NOTFOUND));
                }


                Wms_stockoutdetail[] details = _client.Queryable <Wms_stockoutdetail>()
                                               .Where(x => x.StockOutId == result.StockOutId).ToArray();

                _client.BeginTran();
                foreach (OutsideStockOutReportDetail detail in result.Details)
                {
                    Wms_stockoutdetail localDetail = details.FirstOrDefault(
                        x => x.UniqueIndex == detail.UniqueIndex);
                    if (localDetail == null)
                    {
                        _client.RollbackTran();
                        _logger.LogError($"[出库任务状态变化通知]E2115-没有找到相应的物料,StockOutId={stockOutId}, StockOutNo={stockOut.StockOutNo} ,UniqueOutdex ={ detail.UniqueIndex}");
                        return(YL.Core.Dto.RouteData.From(PubMessages.E2115_STOCKOUT_HASNOT_MATERIAL, $"MaterialId={detail.MaterialId}"));
                    }
                    localDetail.PlanOutQty   = detail.PlanOutQty;
                    localDetail.ActOutQty    = detail.ActOutQty;
                    localDetail.Status       = detail.Status.ToInt32();
                    localDetail.ModifiedBy   = PubConst.InterfaceUserId;
                    localDetail.ModifiedUser = detail.ModifiedBy;
                    localDetail.ModifiedDate = Convert.ToDateTime(detail.ModifiedDate);
                    localDetail.Remark       = detail.Remark;
                }

                if (_client.Updateable(details).ExecuteCommand() == 0)
                {
                    _client.RollbackTran();
                    _logger.LogError($"[出库任务状态变化通知]E0002-任务明细更新失败,StockOutId={stockOutId}, StockOutNo={stockOut.StockOutNo}");
                    return(YL.Core.Dto.RouteData.From(PubMessages.E0002_UPDATE_COUNT_FAIL));
                }

                stockOut.StockOutStatus = result.StockOutStatus.ToInt32();
                stockOut.ModifiedBy     = PubConst.InterfaceUserId;
                stockOut.ModifiedUser   = PubConst.InterfaceUserName;

                if (_client.Updateable(stockOut).ExecuteCommand() == 0)
                {
                    _client.RollbackTran();
                    _logger.LogError($"[出库任务状态变化通知]E0002-任务更新失败,StockOutId={stockOutId}, StockOutNo={stockOut.StockOutNo}");
                    return(YL.Core.Dto.RouteData.From(PubMessages.E0002_UPDATE_COUNT_FAIL));
                }

                bool anyWorking = await _client.Queryable <Wms_stockout>()
                                  .AnyAsync(x => x.MesTaskId == mesTask.MesTaskId &&
                                            x.StockOutStatus != (int)StockOutStatus.task_finish &&
                                            x.StockOutStatus != (int)StockOutStatus.task_canceled);

                if (!anyWorking)
                {
                    _logger.LogInformation($"[出库任务状态变化通知]所有相关任务已完成,尝试通知MES MesTaskId={stockOut.MesTaskId}");
                    await _client.NofityStockOut(mesTask);
                }
                else
                {
                    _logger.LogInformation($"[出库任务状态变化通知]尚有未完成任务,等待其余任务完成通知 MesTaskId={stockOut.MesTaskId}");
                }

                _logger.LogInformation($"[出库任务状态变化通知]通知处理正常完成,StockOutId={stockOutId}");
                _client.CommitTran();
                return(new RouteData());
            }
            catch (Exception ex)
            {
                _client.RollbackTran();
                _logger.LogError($"[出库任务状态变化通知]E-1-发生异常,处理结束 ex={ex.ToString()}");
                return(new RouteData()
                {
                    Code = -1, Message = ex.Message
                });
            }
        }
コード例 #9
0
        public static async Task <RouteData> ConfirmRelationStockOut(
            this ISqlSugarClient client, long inventoryBoxTaskId, SysUserDto user)
        {
            List <Wms_stockoutdetail_box> stockOutDeltailBoxs =
                await client.Queryable <Wms_stockoutdetail_box>().Where(x => x.InventoryBoxTaskId == inventoryBoxTaskId).ToListAsync();

            if (stockOutDeltailBoxs.Count == 0)
            {
                return(new RouteData()); //如果没有相关任务则不做处理
            }
            List <long> confiredStockOutIds = new List <long>();

            foreach (Wms_stockoutdetail_box detailbox in stockOutDeltailBoxs)
            {
                Wms_stockoutdetail stockOutDetail =
                    await client.Queryable <Wms_stockoutdetail>().Where(x => x.StockOutDetailId == detailbox.StockOutDetailId).FirstAsync();

                if (stockOutDetail == null)
                {
                    continue;
                }
                if (stockOutDetail.Status == (int)StockOutStatus.task_finish)
                {
                    continue;
                }
                if (stockOutDetail.ActOutQty < stockOutDetail.PlanOutQty)
                {
                    continue;
                }
                stockOutDetail.Status       = (int)StockOutStatus.task_finish;
                stockOutDetail.ModifiedBy   = user.UserId;
                stockOutDetail.ModifiedUser = user.UserName;
                stockOutDetail.ModifiedDate = DateTime.Now;
                if (client.Updateable(stockOutDetail).ExecuteCommand() == 0)
                {
                    continue;
                }

                if (!confiredStockOutIds.Contains(stockOutDetail.StockOutId.Value))
                {
                    confiredStockOutIds.Add(stockOutDetail.StockOutId.Value);
                }
            }

            foreach (long stockOutId in confiredStockOutIds)
            {
                bool hasWorking = await client.Queryable <Wms_stockoutdetail>().AnyAsync(x => x.StockOutId == stockOutId && x.Status != (int)StockInStatus.task_finish);

                if (!hasWorking)
                {
                    Wms_stockout stockout = await client.Queryable <Wms_stockout>().FirstAsync(x => x.StockOutId == stockOutId);

                    if (stockout == null)
                    {
                        continue;
                    }
                    stockout.StockOutStatus = (int)StockOutStatus.task_finish;
                    stockout.ModifiedBy     = user.UserId;
                    stockout.ModifiedUser   = user.UserName;
                    stockout.ModifiedDate   = DateTime.Now;
                    if (client.Updateable(stockout).ExecuteCommand() == 0)
                    {
                        //LOG
                    }

                    bool anyWorking = await client.Queryable <Wms_stockout>()
                                      .AnyAsync(x => x.MesTaskId == stockout.MesTaskId &&
                                                x.StockOutStatus != (int)StockOutStatus.task_finish &&
                                                x.StockOutStatus != (int)StockOutStatus.task_canceled);

                    if (!anyWorking)
                    {
                        Wms_mestask mesTask = await client.Queryable <Wms_mestask>()
                                              .FirstAsync(x => x.MesTaskId == stockout.MesTaskId);

                        if (mesTask == null)
                        {
                            //正常不可能
                            return(YL.Core.Dto.RouteData.From(PubMessages.E3100_MES_STOCKOUTTASK_NOTFOUND));
                        }
                        try
                        {
                            //通知处理无论成功失败不影响后续处理
                            await client.NofityStockOut(mesTask);
                        }
                        catch { }
                    }
                }
            }
            return(new RouteData());
        }