예제 #1
0
        /// <summary>
        /// @xis 添加入库单
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task <int> AddStockInAsync(t_stock_in model)
        {
            string sql_insert_stock_in = g_sqlMaker.Insert <t_stock_in>(i => new
            {
                i.in_user_id,
                i.order_sn,
                i.position_id,
                i.status,
                i.department_id,
                i.apply_status,
                i.apply_process
            }).ToSQL();

            return(await g_dbHelper.ExecScalarAsync <int>(sql_insert_stock_in, model));
        }
예제 #2
0
        /// <summary>
        /// @xis 获取入库单详情
        /// </summary>
        /// <param name="reqmodel"></param>
        /// <returns></returns>
        public async Task <Result> GetStockInDetailAsync(reqmodel <StockInDetailModel> reqmodel)
        {
            Result <StockInDetailResult> result = new Result <StockInDetailResult> {
                code = ErrorCodeConst.ERROR_100, status = ErrorCodeConst.ERROR_403
            };
            t_stock_in stock_in_model = await GetStockInByOrderSn(f => new
            {
                f.in_user_id,
                f.department_id,
                f.add_time,
                f.apply_status,
                f.position_id,
                f.order_sn
            }, reqmodel.Data.order_sn);

            if (stock_in_model == null)
            {
                result.code = ErrorCodeConst.ERROR_1038;
                return(result);
            }

            IUserServer       userServer       = new UserServerImpl(g_dbHelper, g_logServer);
            IDepartmentServer departmentServer = new DepartmentServerImpl(g_dbHelper, g_logServer);
            IAuditServer      auditServer      = new AuditServerImpl(g_dbHelper, g_logServer);

            t_user user_model = await userServer.GetUserById(s => new { s.real_name, s.job_number }, stock_in_model.in_user_id);

            t_department depart_model = await departmentServer.GetDepartment(s => new { s.department_name }, stock_in_model.department_id);

            result.data = new StockInDetailResult
            {
                add_time          = stock_in_model.add_time.Value.ToString("yyyy-MM-dd hh:mm:ss") ?? "",
                applyer           = user_model.real_name,
                apply_status      = stock_in_model.apply_status,
                apply_status_desc = ((EnumApplyStatus)stock_in_model.apply_status).GetDesc(),
                audit_step_index  = auditServer.GetApplyIndex(EnumOrderType.IN, stock_in_model.department_id, stock_in_model.position_id, stock_in_model.apply_process),
                job_number        = user_model.job_number,
                order_sn          = stock_in_model.order_sn,
                depart_name       = depart_model.department_name,
                audit_list        = await auditServer.GetApplyedLogByOrderSnAsync(EnumOrderType.IN, stock_in_model.order_sn, stock_in_model.department_id, stock_in_model.position_id),
                products          = new List <StockInProductResult>()
            };

            //获取入库的库存信息
            List <t_stock_in_detail> stock_detail_list = await GetStockDetailsByOrderSn(f => new t_stock_in_detail {
            }, stock_in_model.order_sn);

            IFactoryServer factoryServer = new FactoryServerImpl(g_dbHelper, g_logServer);

            foreach (var item in stock_detail_list)
            {
                result.data.products.Add(new StockInProductResult
                {
                    batch_number    = item.batch_number,
                    expiration_date = item.expiration_date,
                    factory_id      = item.factory_id,
                    instructions    = item.instructions,
                    material_number = item.material_number,
                    model_number    = item.model_number,
                    package_size    = item.package_size,
                    product_name    = item.product_name,
                    report_card_url = item.report_card_url,
                    retest_date     = item.retest_date,
                    spare_parts     = item.spare_parts,
                    unit_name       = item.unit_name,
                    quantity        = item.quantity,
                    unit_price      = item.unit_price,
                    factory_name    = (await factoryServer.GetFactoryById(f => new { f.factory_name }, item.factory_id)).factory_name
                });
            }
            result.code   = ErrorCodeConst.ERROR_200;
            result.status = ErrorCodeConst.ERROR_200;
            return(result);
        }
예제 #3
0
        /// <summary>
        /// @xis 更新入库单
        /// </summary>
        /// <param name="selector"></param>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task <bool> UpdateStockInByOrderSn(Func <t_stock_in, dynamic> selector, t_stock_in model)
        {
            string sql = g_sqlMaker.Update(selector).Where("order_sn", "=", "@order_sn").ToSQL();

            return(await g_dbHelper.ExecAsync(sql, model) > 0);
        }
예제 #4
0
        /// <summary>
        /// @xis 入库申请
        /// </summary>
        /// <param name="reqmodel"></param>
        /// <returns></returns>
        public async Task <Result> StockInApplyAsync(reqmodel <StockInApplyModel> reqmodel)
        {
            const string modelname = "StockServerImpl.StockInApplyAsync";
            Result       result    = new Result {
                code = ErrorCodeConst.ERROR_1037, status = ErrorCodeConst.ERROR_403
            };

            //入库单
            t_stock_in stock_in = new t_stock_in
            {
                apply_status  = (int)EnumApplyStatus.Progress,
                in_user_id    = reqmodel.User.user_id,
                department_id = reqmodel.User.department_id,
                position_id   = reqmodel.User.position_id,
                status        = (int)EnumStatus.Enable,
                order_sn      = MakeOrderSn("IN"),
                apply_process = reqmodel.User.position_id,
                add_time      = DateTime.Now
            };

            List <t_stock_in_detail> stock_detail_list = new List <t_stock_in_detail>();
            List <t_stock>           stock_add_list    = new List <t_stock>();
            List <t_stock>           stock_update_list = new List <t_stock>();

            #region 数据验证
            if (reqmodel.Data.products.Count == 0)
            {
                result.code = ErrorCodeConst.ERROR_1042;
                return(result);
            }

            #endregion

            List <t_stock> stock_info_list = await GetStockByIds(s => new { s.id, s.freeze_quantity, s.rv }, reqmodel.Data.products.Select(s => s.id));

            //检查库存
            foreach (var item in reqmodel.Data.products)
            {
                //更新库存
                t_stock es_stock = stock_info_list.FirstOrDefault(f => f.id == item.id);
                if (es_stock != null)
                {
                    //添加已有的详细信息
                    stock_detail_list.Add(new t_stock_in_detail
                    {
                        order_sn        = stock_in.order_sn,
                        unit_price      = item.unit_price,
                        stock_id        = item.id,
                        quantity        = item.quantity,
                        batch_number    = item.batch_number,
                        expiration_date = item.expiration_date,
                        instructions    = item.instructions,
                        material_number = item.material_number,
                        model_number    = item.model_number,
                        package_size    = item.package_size,
                        product_name    = item.product_name,
                        report_card_url = item.report_card_url,
                        retest_date     = item.retest_date,
                        spare_parts     = item.spare_parts,
                        unit_name       = item.unit_name,
                        factory_id      = item.factory_id
                    });
                    continue;
                }
                //添加新产品
                stock_add_list.Add(new t_stock
                {
                    add_time        = DateTime.Now,
                    batch_number    = item.batch_number,
                    expiration_date = item.expiration_date,
                    instructions    = item.instructions,
                    material_number = item.material_number,
                    model_number    = item.model_number,
                    package_size    = item.package_size,
                    product_name    = item.product_name,
                    report_card_url = item.report_card_url,
                    retest_date     = item.retest_date,
                    spare_parts     = item.spare_parts,
                    state           = (int)EnumState.Normal,
                    status          = (int)EnumStatus.Enable,
                    unit_price      = item.unit_price,
                    util_name       = item.unit_name,
                    quantity        = item.quantity,//在详情处清0
                    freeze_quantity = 0,
                    factory_id      = item.factory_id
                });
            }

            try
            {
                g_dbHelper.Transaction();
                bool insert_stock_in = await AddStockInAsync(stock_in) > 0;

                if (!insert_stock_in)
                {
                    g_dbHelper.Rollback();
                    result.code = ErrorCodeConst.ERROR_1030;
                    g_logServer.Log(modelname, "入库单申请失败", $"用户:{reqmodel.User.user_name},添加入库单失败", models.enums.EnumLogType.Info);
                    return(result);
                }
                if (stock_add_list.Count > 0)
                {
                    foreach (var item in stock_add_list)
                    {
                        decimal quantity = item.quantity;
                        item.quantity = 0;
                        SVResult <int> add_result = await AddStock(item);

                        if (!add_result.state)
                        {
                            g_dbHelper.Rollback();
                            result.code = add_result.code;
                            g_logServer.Log(modelname, "入库单申请失败", $"用户:{reqmodel.User.user_name},添加新库存失败", models.enums.EnumLogType.Info);
                            return(result);
                        }

                        stock_detail_list.Add(new t_stock_in_detail
                        {
                            order_sn        = stock_in.order_sn,
                            stock_id        = add_result.data,
                            batch_number    = item.batch_number,
                            expiration_date = item.expiration_date,
                            factory_id      = item.factory_id,
                            instructions    = item.instructions,
                            material_number = item.material_number,
                            model_number    = item.model_number,
                            package_size    = item.package_size,
                            product_name    = item.product_name,
                            report_card_url = item.report_card_url,
                            retest_date     = item.retest_date,
                            spare_parts     = item.spare_parts,
                            unit_name       = item.util_name,
                            quantity        = quantity,
                            unit_price      = item.unit_price,
                        });
                    }
                }

                //if (stock_info_list.Count > 0)
                //{
                //    bool update_stock = await UpdateStock(u => new { u.freeze_quantity }, stock_info_list);
                //    if (!update_stock)
                //    {
                //        g_dbHelper.Rollback();
                //        result.code = ErrorCodeConst.ERROR_1030;
                //        g_logServer.Log(modelname, "入库单申请失败", $"用户:{reqmodel.User.user_name},更新库存失败", models.enums.EnumLogType.Info);
                //        return result;
                //    }
                //}

                SVResult <int> insert_stock_dtl_flag = await AddStockDetails(stock_detail_list);

                if (!insert_stock_dtl_flag.state)
                {
                    g_dbHelper.Rollback();
                    result.code = insert_stock_dtl_flag.code;
                    g_logServer.Log(modelname, "入库单申请失败", $"用户:{reqmodel.User.user_name},更新入库单详情失败", models.enums.EnumLogType.Info);
                    return(result);
                }

                g_dbHelper.Commit();
            }
            catch (Exception e)
            {
                g_dbHelper.Rollback();
                g_logServer.Log(modelname, "入库单申请失败", $"用户:{reqmodel.User.user_name},错误信息:{e.Message}", models.enums.EnumLogType.Error);
                return(result);
            }

            result.code   = ErrorCodeConst.ERROR_1036;
            result.status = ErrorCodeConst.ERROR_200;
            g_logServer.Log(modelname, "入库单申请成功", $"用户:{reqmodel.User.user_name},订单号:{stock_in.order_sn}", models.enums.EnumLogType.Info);
            return(result);
        }
예제 #5
0
        /// <summary>
        /// @xis 入库审批
        /// </summary>
        /// <param name="reqmodel"></param>
        /// <returns></returns>
        public async Task <Result> StockInAuditAsync(reqmodel <AuditModel> reqmodel)
        {
            const string modelname = "StockServerImpl.StockInAuditAsync";
            Result       result    = new Result {
                code = ErrorCodeConst.ERROR_1037, status = ErrorCodeConst.ERROR_403
            };

            t_stock_in stock_in = await GetStockInByOrderSn(s => new
            {
                s.apply_process,
                s.apply_status,
                s.department_id
            }, reqmodel.Data.order_sn);

            if (stock_in == null)
            {
                result.code = ErrorCodeConst.ERROR_1038;
                g_logServer.Log(modelname, "入库审批失败", $"用户:{reqmodel.User.user_name},订单不存在", EnumLogType.Info);
                return(result);
            }
            stock_in.order_sn = reqmodel.Data.order_sn;

            if (stock_in.apply_status == (int)EnumApplyStatus.Agree)
            {
                result.code = ErrorCodeConst.ERROR_1039;
                g_logServer.Log(modelname, "入库审批失败", $"用户:{reqmodel.User.user_name},订单号:{stock_in.order_sn},订单被审核完成", EnumLogType.Info);
                return(result);
            }
            if (stock_in.apply_status == (int)EnumApplyStatus.Reject)
            {
                result.code = ErrorCodeConst.ERROR_1041;
                g_logServer.Log(modelname, "入库审批失败", $"用户:{reqmodel.User.user_name},订单号:{stock_in.order_sn},订单被驳回", EnumLogType.Info);
                return(result);
            }
            IAuditServer auditServer  = new AuditServerImpl(g_dbHelper, g_logServer);
            int?         next_applyer = auditServer.GetNextApplyer(EnumOrderType.IN, stock_in.department_id, stock_in.apply_process);

            if (next_applyer == null)
            {
                result.code = ErrorCodeConst.ERROR_1030;
                g_logServer.Log(modelname, "入库审批失败", $"用户:{reqmodel.User.user_name},订单号:{stock_in.order_sn},流程错误", EnumLogType.Info);
                return(result);
            }

            if (next_applyer != reqmodel.User.position_id)
            {
                result.code = ErrorCodeConst.ERROR_1035;
                g_logServer.Log(modelname, "入库审批失败", $"用户:{reqmodel.User.user_name},订单号:{stock_in.order_sn},无法进行审批", EnumLogType.Info);
                return(result);
            }

            t_apply_log apply_log = new t_apply_log
            {
                apply_status = reqmodel.Data.act,
                order_sn     = reqmodel.Data.order_sn,
                user_id      = reqmodel.User.user_id,
                position_id  = reqmodel.User.position_id
            };

            stock_in.apply_process = reqmodel.User.position_id;
            try
            {
                g_dbHelper.Transaction();
                //审批记录更新
                bool insert_apply_log_flag = await AddApplyLog(apply_log);

                if (!insert_apply_log_flag)
                {
                    g_dbHelper.Rollback();
                    result.code = ErrorCodeConst.ERROR_1030;
                    g_logServer.Log(modelname, "入库审批失败", $"用户:{reqmodel.User.user_name},订单号:{stock_in.order_sn},添加审批记录失败", models.enums.EnumLogType.Info);
                    return(result);
                }

                //审批状态更新
                bool update_stock_in_flag;
                if (reqmodel.Data.act == 1)
                {
                    stock_in.apply_status = (int)EnumApplyStatus.Agree;
                }
                else
                {
                    //驳回
                    stock_in.apply_status = (int)EnumApplyStatus.Reject;
                }

                //最后一步或者拒绝则更新审批状态
                EnumApplyStepFlag step_flag = auditServer.GetApplyStepFlag(EnumOrderType.IN, stock_in.department_id, reqmodel.User.position_id);
                if (step_flag == EnumApplyStepFlag.End || stock_in.apply_status == (int)EnumApplyStatus.Reject)
                {
                    update_stock_in_flag = await UpdateStockInByOrderSn(u => new { u.apply_status, u.apply_process }, stock_in);
                }
                else
                {
                    update_stock_in_flag = await UpdateStockInByOrderSn(u => new { u.apply_process }, stock_in);
                }

                if (!update_stock_in_flag)
                {
                    g_dbHelper.Rollback();
                    result.code = ErrorCodeConst.ERROR_1030;
                    g_logServer.Log(modelname, "入库审批失败", $"用户:{reqmodel.User.user_name},订单号:{stock_in.order_sn},更新审批状态失败", models.enums.EnumLogType.Info);
                    return(result);
                }

                //同意并且是最后一步审批,更新库存数量
                if (step_flag == EnumApplyStepFlag.End && stock_in.apply_status == (int)EnumApplyStatus.Agree)
                {
                    bool update_quality_flag = await StockInApplySuccess(stock_in.order_sn);

                    if (!update_quality_flag)
                    {
                        g_dbHelper.Rollback();
                        result.code = ErrorCodeConst.ERROR_1030;
                        g_logServer.Log(modelname, "入库审批失败", $"用户:{reqmodel.User.user_name},订单号:{stock_in.order_sn},更新库存数量失败", models.enums.EnumLogType.Info);
                        return(result);
                    }
                }

                g_dbHelper.Commit();
            }
            catch (Exception ex)
            {
                g_dbHelper.Rollback();
                result.code = ErrorCodeConst.ERROR_1030;
                g_logServer.Log(modelname, "入库审批异常", $"用户:{reqmodel.User.user_name},订单号:{stock_in.order_sn},异常信息:{ex.Message}", models.enums.EnumLogType.Error);
                return(result);
            }
            result.code   = ErrorCodeConst.ERROR_1029;
            result.status = ErrorCodeConst.ERROR_200;
            g_logServer.Log(modelname, "入库审批成功", $"用户:{reqmodel.User.user_name},订单号:{stock_in.order_sn}", models.enums.EnumLogType.Info);
            return(result);
        }