Forráskód Böngészése

add:入库添加入库批号

zoie 3 hónapja
szülő
commit
efc7502e17
5 módosított fájl, 168 hozzáadás és 83 törlés
  1. 87 38
      controllers/Stock.go
  2. 21 13
      models/Stock/StockIn.go
  3. 45 21
      models/Stock/StockInProduct.go
  4. 2 0
      models/Stock/StockOut.go
  5. 13 11
      routers/Stock.go

+ 87 - 38
controllers/Stock.go

@@ -13,6 +13,12 @@ import (
 	"ERP_storage/models/Stock"
 	"errors"
 	"fmt"
+	"math"
+	"os"
+	"strconv"
+	"strings"
+	"time"
+
 	"github.com/beego/beego/v2/adapter/orm"
 	beego "github.com/beego/beego/v2/server/web"
 	"github.com/robfig/cron/v3"
@@ -20,11 +26,6 @@ import (
 	natslibs "gogs.baozhida.cn/zoie/ERP_libs/Nats"
 	userlibs "gogs.baozhida.cn/zoie/ERP_libs/User"
 	"gogs.baozhida.cn/zoie/ERP_libs/lib"
-	"math"
-	"os"
-	"strconv"
-	"strings"
-	"time"
 )
 
 type StockController struct {
@@ -423,13 +424,14 @@ func (c *StockController) StockIn_List() {
 	T_start_date := c.GetString("T_start_date")
 	T_end_date := c.GetString("T_end_date")
 	T_name := c.GetString("T_name")
+	T_batch_number := c.GetString("T_batch_number")
 
 	userList, _ := NatsServer.Read_User_List_All()
 	Account.Read_User_All_Map(userList)
 	Basic.Read_Depot_All_Map()
 
 	StockInDao := Stock.NewStockIn(orm.NewOrm())
-	R_List, R_cnt := StockInDao.Read_StockIn_List(T_name, T_depot_id, T_start_date, T_end_date, page, page_z)
+	R_List, R_cnt := StockInDao.Read_StockIn_List(T_batch_number, T_name, T_depot_id, T_start_date, T_end_date, page, page_z)
 
 	var r_jsons lib.R_JSONS
 	r_jsons.Num = R_cnt
@@ -647,21 +649,47 @@ func (c *StockController) StockIn_Get() {
 	return
 }
 
-func (c *StockController) StockIn_Add() {
-
+func (c *StockController) StockIn_generate_number() {
+	StockOutDao := Stock.NewStockOut(orm.NewOrm())
 	rand_x := 0
 	T_number := ""
-	o := orm.NewOrm()
-	o.Begin()
-	StockInDao := Stock.NewStockIn(o)
 	for true {
 		T_number = "RK-" + lib.GetRandstring(8, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", int64(rand_x))
-		_, err := StockInDao.Read_StockIn_ByT_number(T_number)
+		_, err := StockOutDao.Read_StockOut_ByT_number(T_number)
 		if err != nil && err.Error() == orm.ErrNoRows.Error() {
 			break
 		}
 		rand_x += 1
 	}
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: T_number}
+	c.ServeJSON()
+	return
+}
+
+func (c *StockController) StockIn_Add() {
+
+	o := orm.NewOrm()
+	o.Begin()
+	StockInDao := Stock.NewStockIn(o)
+
+	T_number := c.GetString("T_number")
+
+	// 检查前端传入的T_number是否已提交过
+	_, err := StockInDao.Read_StockIn_ByT_number(T_number)
+	if err == nil {
+		// 入库编号已存在,不需要做任何处理
+		o.Rollback()
+		c.Data["json"] = lib.JSONS{Code: 200, Msg: "入库编号已存在,无需重复提交!", Data: T_number}
+		c.ServeJSON()
+		return
+	}
+	if err != nil && err.Error() != orm.ErrNoRows.Error() {
+		// 数据库查询错误
+		o.Rollback()
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "查询入库编号失败"}
+		c.ServeJSON()
+		return
+	}
 
 	T_depot_id, _ := c.GetInt("T_depot_id")
 	T_type, _ := c.GetInt("T_type") // 1-入库 2-退库
@@ -670,6 +698,7 @@ func (c *StockController) StockIn_Add() {
 	T_remark := c.GetString("T_remark")
 	T_project := c.GetString("T_project")
 	T_return_user := c.GetString("T_return_user")
+	T_batch_number := c.GetString("T_batch_number")
 	date, is := lib.DateStrToTime(T_date)
 	if !is {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "日期格式错误!"}
@@ -686,14 +715,15 @@ func (c *StockController) StockIn_Add() {
 	NatsServer.AddUserLogs(c.User.T_uuid, "仓库管理", "入库", T_product)
 
 	var_ := Stock.StockIn{
-		T_number:      T_number,
-		T_depot_id:    T_depot_id,
-		T_type:        T_type,
-		T_date:        T_date,
-		T_remark:      T_remark,
-		T_submit:      c.User.T_uuid,
-		T_project:     T_project,
-		T_return_user: T_return_user,
+		T_number:       T_number,
+		T_depot_id:     T_depot_id,
+		T_type:         T_type,
+		T_date:         T_date,
+		T_remark:       T_remark,
+		T_submit:       c.User.T_uuid,
+		T_project:      T_project,
+		T_return_user:  T_return_user,
+		T_batch_number: T_batch_number,
 	}
 
 	StockInProductDao := Stock.NewStockInProduct(o)
@@ -701,7 +731,7 @@ func (c *StockController) StockIn_Add() {
 	DeviceDao := Stock.NewDevice(o)
 	IotCardDao := Property.NewIotCard(&o)
 
-	_, err := StockInDao.Add_StockIn(var_)
+	_, err = StockInDao.Add_StockIn(var_)
 	if err != nil {
 		o.Rollback()
 		c.Data["json"] = lib.JSONS{Code: 203, Msg: "入库失败"}
@@ -775,12 +805,13 @@ func (c *StockController) StockIn_Add() {
 			}
 		}
 		stockInProduct := Stock.StockInProduct{
-			T_number:      T_number,
-			T_product_id:  product_id,
-			T_depot_id:    T_depot_id,
-			T_num:         num,    // 入库数量
-			T_date:        T_date, // 入库日期
-			T_relation_sn: T_relation_sn,
+			T_number:       T_number,
+			T_product_id:   product_id,
+			T_depot_id:     T_depot_id,
+			T_num:          num,    // 入库数量
+			T_date:         T_date, // 入库日期
+			T_relation_sn:  T_relation_sn,
+			T_batch_number: T_batch_number,
 		}
 		_, err = StockInProductDao.Add_StockInProduct(stockInProduct)
 		if err != nil {
@@ -888,6 +919,7 @@ func (c *StockController) StockIn_Edit() {
 	T_remark := c.GetString("T_remark")
 	T_project := c.GetString("T_project")
 	T_return_user := c.GetString("T_return_user")
+	T_batch_number := c.GetString("T_batch_number")
 	date, is := lib.DateStrToTime(T_date)
 	if !is {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "日期格式错误!"}
@@ -916,6 +948,7 @@ func (c *StockController) StockIn_Edit() {
 		return
 	}
 	T_old_date := stockIn.T_date
+	T_old_batch_number := stockIn.T_batch_number
 
 	// 查询入库产品信息
 	productOldList := StockInProductDao.Read_StockInProduct_List_ByT_number(stockIn.T_number)
@@ -1221,8 +1254,11 @@ func (c *StockController) StockIn_Edit() {
 	if len(T_return_user) > 0 {
 		stockIn.T_return_user = T_return_user
 	}
+	if len(T_batch_number) > 0 {
+		stockIn.T_batch_number = T_batch_number
+	}
 
-	err = StockInDao.Update_StockIn(stockIn, "T_remark", "T_date", "T_project", "T_return_user")
+	err = StockInDao.Update_StockIn(stockIn, "T_remark", "T_date", "T_project", "T_return_user", "T_batch_number")
 	if err != nil {
 		o.Rollback()
 		c.Data["json"] = lib.JSONS{Code: 203, Msg: "修改入库失败"}
@@ -1236,6 +1272,10 @@ func (c *StockController) StockIn_Edit() {
 		StockInProductDao.Update_StockInProduct_T_date(stockIn.T_number, T_date)
 		DeviceDao.Update_Device_CreateTimeByT_in_number(stockIn.T_number, T_date)
 	}
+	if len(T_batch_number) > 0 && T_old_batch_number != T_batch_number {
+		// 修改出库产品日期
+		StockInProductDao.Update_StockInProduct_T_batch_number(stockIn.T_number, T_date)
+	}
 
 	// 更新月份统计表
 	allProductList := []int{}
@@ -1951,18 +1991,27 @@ func (c *StockController) StockOut_generate_number() {
 
 func (c *StockController) StockOut_Add() {
 
-	rand_x := 0
-	T_number := ""
 	o := orm.NewOrm()
 	o.Begin()
 	StockOutDao := Stock.NewStockOut(o)
-	for true {
-		T_number = "CK-" + lib.GetRandstring(8, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", int64(rand_x))
-		_, err := StockOutDao.Read_StockOut_ByT_number(T_number)
-		if err != nil && err.Error() == orm.ErrNoRows.Error() {
-			break
-		}
-		rand_x += 1
+
+	// 检查前端传入的T_number是否已提交过
+	T_number := c.GetString("T_number")
+
+	_, err := StockOutDao.Read_StockOut_ByT_number(T_number)
+	if err == nil {
+		// 入库编号已存在,不需要做任何处理
+		o.Rollback()
+		c.Data["json"] = lib.JSONS{Code: 200, Msg: "出库编号已存在,无需重复提交!", Data: T_number}
+		c.ServeJSON()
+		return
+	}
+	if err != nil && err.Error() != orm.ErrNoRows.Error() {
+		// 数据库查询错误
+		o.Rollback()
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "查询入库编号失败"}
+		c.ServeJSON()
+		return
 	}
 
 	T_contract_number := c.GetString("T_contract_number")
@@ -2014,7 +2063,7 @@ func (c *StockController) StockOut_Add() {
 	ContractDao := Contract.NewContract(o)
 	ContractProductDao := Contract.NewContractProduct(o)
 
-	_, err := StockOutDao.Add_StockOut(var_)
+	_, err = StockOutDao.Add_StockOut(var_)
 	if err != nil {
 		o.Rollback()
 		c.Data["json"] = lib.JSONS{Code: 203, Msg: "出库失败"}

+ 21 - 13
models/Stock/StockIn.go

@@ -17,17 +17,18 @@ import (
 
 // 入库
 type StockIn struct {
-	Id            int       `orm:"column(ID);size(11);auto;pk"`
-	T_number      string    `orm:"size(256);null"`                                        // 入库单号
-	T_type        int       `orm:"size(256);;default(1)"`                                 // 入库类型 1-入库 2-退库
-	T_depot_id    int       `orm:"size(20);null"`                                         // 仓库id
-	T_date        string    `orm:"size(256);null"`                                        // 业务日期
-	T_submit      string    `orm:"size(256);null"`                                        // 经办人
-	T_remark      string    `orm:"type(text);null"`                                       // 备注
-	T_project     string    `orm:"type(text);null"`                                       // 退库项目
-	T_return_user string    `orm:"type(text);null"`                                       // 退库人
-	CreateTime    time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
-	UpdateTime    time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
+	Id             int       `orm:"column(ID);size(11);auto;pk"`
+	T_number       string    `orm:"size(256);null"`                                        // 入库单号
+	T_type         int       `orm:"size(256);;default(1)"`                                 // 入库类型 1-入库 2-退库
+	T_depot_id     int       `orm:"size(20);null"`                                         // 仓库id
+	T_date         string    `orm:"size(256);null"`                                        // 业务日期
+	T_submit       string    `orm:"size(256);null"`                                        // 经办人
+	T_remark       string    `orm:"type(text);null"`                                       // 备注
+	T_project      string    `orm:"type(text);null"`                                       // 退库项目
+	T_return_user  string    `orm:"type(text);null"`                                       // 退库人
+	T_batch_number string    `orm:"type(256);null"`                                        // 批次号
+	CreateTime     time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
+	UpdateTime     time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
 }
 
 func (t *StockIn) TableName() string {
@@ -60,6 +61,7 @@ type StockIn_R struct {
 	T_project          string
 	T_return_user      string
 	T_return_user_name string
+	T_batch_number     string
 }
 
 type StockIn_Detail struct {
@@ -75,6 +77,7 @@ type StockIn_Detail struct {
 	T_project          string
 	T_return_user      string
 	T_return_user_name string
+	T_batch_number     string
 	T_Product          []StockInProduct_R
 }
 
@@ -89,6 +92,7 @@ func StockInToStockIn_R(t StockIn) (r StockIn_R) {
 	r.T_submit_name = Account.Read_User_T_name_Get(t.T_submit)
 	r.T_remark = t.T_remark
 	r.T_project = t.T_project
+	r.T_batch_number = t.T_batch_number
 	r.T_return_user = t.T_return_user
 	r.T_return_user_name = Account.Read_User_T_name_Get(t.T_return_user)
 	return r
@@ -107,6 +111,7 @@ func StockInToStockIn_Detail(t StockIn, productList []StockInProduct_R) (r Stock
 	r.T_Product = productList
 	r.T_project = t.T_project
 	r.T_return_user = t.T_return_user
+	r.T_batch_number = t.T_batch_number
 	r.T_return_user_name = Account.Read_User_T_name_Get(t.T_return_user)
 	return r
 }
@@ -151,7 +156,7 @@ func (dao *StockInDaoImpl) Delete_StockIn(m StockIn) error {
 }
 
 // 获取列表
-func (dao *StockInDaoImpl) Read_StockIn_List(T_name string, T_depot_id int, T_start_date, T_end_date string, page, page_z int) (r_ []StockIn_R, cnt int64) {
+func (dao *StockInDaoImpl) Read_StockIn_List(T_batch_number, T_name string, T_depot_id int, T_start_date, T_end_date string, page, page_z int) (r_ []StockIn_R, cnt int64) {
 	qs := dao.orm.QueryTable(new(StockIn))
 	var offset int64
 	if page <= 1 {
@@ -167,6 +172,9 @@ func (dao *StockInDaoImpl) Read_StockIn_List(T_name string, T_depot_id int, T_st
 		cond = cond.And("T_depot_id", T_depot_id)
 	}
 
+	if len(T_batch_number) > 0 {
+		cond = cond.And("T_batch_number__icontains", T_batch_number)
+	}
 	if len(T_name) > 0 {
 		cond = cond.And("T_number__icontains", T_name)
 	}
@@ -215,7 +223,7 @@ func (dao *StockInDaoImpl) Read_StockInProduct_List(T_name, T_start_date, T_end_
 	var r []StockInProductList
 	sqlWhere := ""
 	if len(T_name) > 0 {
-		sqlWhere += " AND (si.t_number like \"%" + T_name + "%\" or si.t_remark like \"%" + T_name + "%\")"
+		sqlWhere += " AND (si.t_number like \"%" + T_name + "%\" or si.t_batch_number like \"%" + T_name + "%\" or si.t_remark like \"%" + T_name + "%\")"
 	}
 	if T_depot_id > 0 {
 		sqlWhere += fmt.Sprintf(" AND si.t_depot_id = %d", T_depot_id)

+ 45 - 21
models/Stock/StockInProduct.go

@@ -16,30 +16,32 @@ import (
 
 // 入库产品mingxi
 type StockInProduct struct {
-	Id            int       `orm:"column(ID);size(11);auto;pk"`
-	T_number      string    `orm:"size(256);null"`                                        // 入库单号
-	T_depot_id    int       `orm:"size(20);null"`                                         // 仓库id
-	T_product_id  int       `orm:"size(20);null"`                                         // 产品id
-	T_num         int       `orm:"size(20);null"`                                         // 入库数量
-	T_date        string    `orm:"size(256);null"`                                        // 业务日期
-	T_relation_sn string    `orm:"type(text);null"`                                       // 关联sn,20220101,20230202,
-	CreateTime    time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
-	UpdateTime    time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
+	Id             int       `orm:"column(ID);size(11);auto;pk"`
+	T_number       string    `orm:"size(256);null"`                                        // 入库单号
+	T_depot_id     int       `orm:"size(20);null"`                                         // 仓库id
+	T_product_id   int       `orm:"size(20);null"`                                         // 产品id
+	T_num          int       `orm:"size(20);null"`                                         // 入库数量
+	T_date         string    `orm:"size(256);null"`                                        // 业务日期
+	T_relation_sn  string    `orm:"type(text);null"`                                       // 关联sn,20220101,20230202,
+	T_batch_number string    `orm:"type(text);null"`                                       // 关联sn,20220101,20230202,
+	CreateTime     time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
+	UpdateTime     time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
 }
 
 // 入库列表
 type StockInProductList struct {
-	Id            int
-	T_number      string // StockIn - 入库单号
-	T_depot_id    int    // StockIn - 仓库id
-	T_depot_name  string // StockIn - 仓库名称
-	T_type        int    // StockIn - 入库类型
-	T_date        string // StockIn - 业务日期
-	T_submit      string // StockIn - 经办人
-	T_submit_name string // StockIn - 经办人名称
-	T_remark      string // StockIn - 备注
-	T_num         int    // 入库数量
-	T_relation_sn string // 关联sn,20220101,20230202
+	Id             int
+	T_number       string // StockIn - 入库单号
+	T_depot_id     int    // StockIn - 仓库id
+	T_depot_name   string // StockIn - 仓库名称
+	T_type         int    // StockIn - 入库类型
+	T_date         string // StockIn - 业务日期
+	T_submit       string // StockIn - 经办人
+	T_submit_name  string // StockIn - 经办人名称
+	T_remark       string // StockIn - 备注
+	T_num          int    // 入库数量
+	T_relation_sn  string // 关联sn,20220101,20230202
+	T_batch_number string
 
 	T_device_list []string // sn关联列表
 
@@ -77,7 +79,8 @@ type StockInProduct_R struct {
 	T_num      int    // 入库数量
 	T_date     string // 日期
 	//T_relation_sn string   // 关联sn,20220101,20230202,
-	T_device_list []string // sn关联列表
+	T_device_list  []string // sn关联列表
+	T_batch_number string
 
 	// ---------产品信息-----------
 	T_product_id          int
@@ -97,6 +100,7 @@ func StockInProductToStockInProduct_R(t StockInProduct) (r StockInProduct_R) {
 	r.T_date = t.T_date
 	//r.T_relation_sn = t.T_relation_sn
 	r.T_device_list = lib.SplitString(t.T_relation_sn, ",")
+	r.T_batch_number = t.T_batch_number
 
 	r.T_product_id = t.T_product_id
 	product, _ := Basic.Read_Product_ById(t.T_product_id)
@@ -116,6 +120,7 @@ func StockInProductListToStockInProductList(t StockInProductList) (r StockInProd
 	r.T_depot_name = Basic.Read_Depot_Get(t.T_depot_id)
 	r.T_num = t.T_num
 	r.T_date = t.T_date
+	r.T_batch_number = t.T_batch_number
 
 	r.T_submit = t.T_submit
 	r.T_submit_name = Account.Read_User_T_name_Get(t.T_submit)
@@ -204,6 +209,25 @@ func (dao *StockInProductDaoImpl) Update_StockInProduct_T_date(T_number, T_date
 
 	return nil
 }
+func (dao *StockInProductDaoImpl) Update_StockInProduct_T_batch_number(T_number, T_batch_number string) error {
+	qs := dao.orm.QueryTable(new(StockInProduct))
+	var list []StockInProduct
+	_, err := qs.Filter("T_number", T_number).All(&list)
+	if err != nil {
+		logs.Error(lib.FuncName(), err)
+		return err
+	}
+	for _, product := range list {
+		product.T_batch_number = T_batch_number
+		_, err = dao.orm.Update(&product, "T_batch_number")
+		if err != nil {
+			logs.Error(lib.FuncName(), err)
+			return err
+		}
+	}
+
+	return nil
+}
 
 // 删除
 func (dao *StockInProductDaoImpl) Delete_StockInProduct(T_number string, T_depot_id, T_product_id int) error {

+ 2 - 0
models/Stock/StockOut.go

@@ -123,6 +123,7 @@ type StockOut_R struct {
 	T_warehouse_name           string // 出库人名称
 	T_project                  string // 关联项目
 	T_company_name             string // 公司名称
+	T_remark                   string // 备注
 	T_payment_method           string // 付款方式 A先款后货 B收部分定金50% C先货后款 D项目支持,无同意
 	T_state                    int    // 0 删除 1待审核  2财务通过 3财务不通过 4总经理通过 5总经理不通过 6已出库
 	T_state_str                string
@@ -180,6 +181,7 @@ func StockOutToStockOut_R(t StockOut) (r StockOut_R) {
 	r.T_company_name = t.T_company_name
 	r.T_payment_method = t.T_payment_method
 	r.T_state = t.T_state
+	r.T_remark = t.T_remark
 	r.T_state_str = Get_StockOut_audit_name(t.T_state)
 	r.T_finance_approval_opinion = t.T_finance_approval_opinion
 	r.T_manager_approval_opinion = t.T_manager_approval_opinion

+ 13 - 11
routers/Stock.go

@@ -27,6 +27,7 @@ func init() {
 		beego.NSRouter("/Del", &controllers.StockController{}, "*:StockIn_Del"),                               // 删除入库
 		beego.NSRouter("/Excel", &controllers.StockController{}, "*:StockIn_Excel"),                           // 导出入库
 		beego.NSRouter("/Excel_Batch", &controllers.StockController{}, "*:StockIn_Excel_Batch"),               // 批量导出入库
+		beego.NSRouter("/Generate_Number", &controllers.StockController{}, "*:StockIn_generate_number"),       // 批量导出入库
 
 	)
 	stockOut := beego.NewNamespace("/StockOut",
@@ -39,17 +40,18 @@ func init() {
 		beego.NSRouter("/Edit", &controllers.StockController{}, "*:StockOut_Edit"),                             // 修改出库
 		beego.NSRouter("/Del", &controllers.StockController{}, "*:StockOut_Del"),                               // 删除出库
 		beego.NSRouter("/Excel", &controllers.StockController{}, "*:StockOut_Excel"),
-		beego.NSRouter("/Excel_Batch", &controllers.StockController{}, "*:StockOut_Excel_Batch"),       // 批量导出入库
-		beego.NSRouter("/Apply", &controllers.StockController{}, "*:StockOut_Apply"),                   // 出库申请
-		beego.NSRouter("/Apply_Edit", &controllers.StockController{}, "*:StockOut_Apply_Edit"),         // 修改出库申请
-		beego.NSRouter("/Apply_Del", &controllers.StockController{}, "*:StockOut_Apply_Del"),           // 修改出库申请
-		beego.NSRouter("/Apply_List", &controllers.StockController{}, "*:StockOut_Apply_List"),         // 出库申请列表
-		beego.NSRouter("/Finance_List", &controllers.StockController{}, "*:StockOut_Finance_List"),     // 财务审核列表
-		beego.NSRouter("/Manager_List", &controllers.StockController{}, "*:StockOut_Manager_List"),     // 总经理审核列表
-		beego.NSRouter("/Warehouse_List", &controllers.StockController{}, "*:StockOut_Warehouse_List"), // 总经理审核列表
-		beego.NSRouter("/Audit", &controllers.StockController{}, "*:StockOut_Audit"),                   // 审核
-		beego.NSRouter("/Warehouse", &controllers.StockController{}, "*:StockOut_Warehouse"),           // 确认出库
-		// 导出出库
+		beego.NSRouter("/Excel_Batch", &controllers.StockController{}, "*:StockOut_Excel_Batch"),         // 批量导出入库
+		beego.NSRouter("/Apply", &controllers.StockController{}, "*:StockOut_Apply"),                     // 出库申请
+		beego.NSRouter("/Apply_Edit", &controllers.StockController{}, "*:StockOut_Apply_Edit"),           // 修改出库申请
+		beego.NSRouter("/Apply_Del", &controllers.StockController{}, "*:StockOut_Apply_Del"),             // 修改出库申请
+		beego.NSRouter("/Apply_List", &controllers.StockController{}, "*:StockOut_Apply_List"),           // 出库申请列表
+		beego.NSRouter("/Finance_List", &controllers.StockController{}, "*:StockOut_Finance_List"),       // 财务审核列表
+		beego.NSRouter("/Manager_List", &controllers.StockController{}, "*:StockOut_Manager_List"),       // 总经理审核列表
+		beego.NSRouter("/Warehouse_List", &controllers.StockController{}, "*:StockOut_Warehouse_List"),   // 总经理审核列表
+		beego.NSRouter("/Audit", &controllers.StockController{}, "*:StockOut_Audit"),                     // 审核
+		beego.NSRouter("/Warehouse", &controllers.StockController{}, "*:StockOut_Warehouse"),             // 确认出库
+		beego.NSRouter("/Generate_Number", &controllers.StockController{}, "*:StockOut_generate_number"), // 批量导出入库
+
 	)
 	beego.AddNamespace(device, stock, stockIn, stockOut)
 }