/// <summary> /// @xis 添加入库单详情 /// </summary> /// <param name="model"></param> /// <returns></returns> public async Task <SVResult <int> > AddStockDetails(t_stock_in_detail model) { SVResult <int> res = new SVResult <int> { state = false }; //添加的产品为冻结 if (model.quantity <= 0) { res.code = ErrorCodeConst.ERROR_1043; return(res); } string sql = g_sqlMaker.Insert <t_stock_in_detail>(i => new { i.order_sn, i.unit_price, i.quantity, i.stock_id, i.batch_number, i.expiration_date, i.factory_id, i.instructions, i.material_number, i.model_number, i.package_size, i.product_name, i.report_card_url, i.retest_date, i.spare_parts, i.unit_name }).ToSQL(); int id = await g_dbHelper.ExecScalarAsync <int>(sql, model); if (id <= 0) { res.code = ErrorCodeConst.ERROR_1018; return(res); } res.state = true; res.data = id; return(res); }
/// <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); }
/// <summary> /// @xis 添加库存 /// </summary> /// <param name="model"></param> /// <returns></returns> public async Task <SVResult <int> > AddStock(t_stock model) { SVResult <int> res = new SVResult <int> { state = false }; string sql_insert = g_sqlMaker.Insert <t_stock>(i => new { i.batch_number, i.expiration_date, i.factory_id, i.freeze_quantity, i.instructions, i.material_number, i.model_number, i.package_size, i.product_name, i.quantity, i.remark, i.report_card_url, i.retest_date, i.spare_parts, i.state, i.status, i.unit_price, i.util_name }).ToSQL(); //验证 if (string.IsNullOrWhiteSpace(model.product_name)) { res.code = ErrorCodeConst.ERROR_1044; return(res); } if (model.product_name.Length > 30) { res.code = ErrorCodeConst.ERROR_1046; return(res); } if (model.factory_id <= 0) { res.code = ErrorCodeConst.ERROR_1045; return(res); } IFactoryServer factoryServer = new FactoryServerImpl(g_dbHelper, g_logServer); t_factory factory_model = await factoryServer.GetFactoryByIdEnable(g => new { g.id }, model.factory_id); if (factory_model == null) { res.code = ErrorCodeConst.ERROR_1045; return(res); } int id = await g_dbHelper.ExecScalarAsync <int>(sql_insert, model); if (id <= 0) { res.code = ErrorCodeConst.ERROR_1018; return(res); } res.data = id; res.state = true; return(res); }