package Contract import ( "ERP_storage/logs" "ERP_storage/models/Basic" "fmt" "git.baozhida.cn/ERP_libs/lib" orm2 "github.com/beego/beego/v2/client/orm" "strconv" "time" _ "github.com/astaxie/beego/cache/redis" "github.com/beego/beego/v2/adapter/orm" _ "github.com/go-sql-driver/mysql" ) // 合同产品清单 type ContractProduct struct { Id int `orm:"column(ID);size(11);auto;pk"` T_contract_number string `orm:"size(256);null"` // 合同编号 T_product_id int `orm:"size(20);null"` // 产品id T_product_total int `orm:"size(20);null"` // 产品总数量 T_product_out int `orm:"size(20);null"` // 产品已出库数量 T_price float32 `orm:"digits(12);decimals(2)"` // 产品单价 T_State int `orm:"size(2);default(1)"` // 0-已删除 1-未出库 2-已部分出库 3-已全部出库 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 ContractProductInfo struct { Id int T_product_id int T_product_total int T_product_out int T_price float32 T_State int } func (t *ContractProduct) TableName() string { return "contract_product" // 数据库名称 // ************** 替换 FormulaList ************** } type ContractProductDaoImpl struct { orm orm.Ormer } func NewContractProduct(orm orm.Ormer) *ContractProductDaoImpl { return &ContractProductDaoImpl{orm: orm} } func init() { //注册模型 orm.RegisterModel(new(ContractProduct)) } type ContractProduct_R struct { Id int T_contract_number string // 合同编号 T_product_total int // 产品总数量 T_product_out int // 产品已出库数量 T_price float32 // 产品单价 T_State int // 1-未出库 2-已部分出库 3-已全部出库 // ---------产品信息----------- T_product_id int // 产品id T_product_name string // 产品分类 T_product_class_name string // 产品分类名称 T_product_model string // 产品型号 T_product_spec string // 产品规格 T_product_relation_sn int // 关联sn 0-否 1-是 T_product_img string // 图片 T_device_list []string // sn关联列表 } type ContractProduct_Out struct { Id int T_contract_number string // 合同编号 T_stock_total int // 库存总数量 T_product_total int // 产品总数量 T_product_out int // 产品已出库数量 T_price float32 // 单价 T_State int // 1-未出库 2-已部分出库 3-已全部出库 // ---------产品信息----------- T_product_id int // 产品id T_product_name string // 产品分类 T_product_class_name string // 产品分类名称 T_product_model string // 产品型号 T_product_spec string // 产品规格 T_product_relation_sn int // 关联sn 0-否 1-是 T_product_img string // 图片 } func ContractProductToContractProduct_R(t ContractProduct) (r ContractProduct_R) { r.T_product_id = t.T_product_id product, _ := Basic.Read_Product_ById(t.T_product_id) r.Id = t.Id r.T_contract_number = t.T_contract_number r.T_product_total = t.T_product_total r.T_product_out = t.T_product_out r.T_price = t.T_price r.T_State = t.T_State r.T_product_name = product.T_name r.T_product_class_name = Basic.Read_ProductClass_Get(product.T_class) r.T_product_model = product.T_model r.T_product_spec = product.T_spec r.T_product_relation_sn = product.T_relation_sn r.T_product_img = product.T_img return r } func ContractProductToContractProduct_Out(t ContractProduct) (r ContractProduct_Out) { r.Id = t.Id r.T_contract_number = t.T_contract_number r.T_product_total = t.T_product_total r.T_product_out = t.T_product_out r.T_price = t.T_price r.T_State = t.T_State r.T_product_id = t.T_product_id product, _ := Basic.Read_Product_ById(t.T_product_id) r.T_product_name = product.T_name r.T_product_class_name = Basic.Read_ProductClass_Get(product.T_class) r.T_product_model = product.T_model r.T_product_spec = product.T_spec r.T_product_relation_sn = product.T_relation_sn r.T_product_img = product.T_img return r } // 添加 func (dao *ContractProductDaoImpl) Add_ContractProduct(r ContractProduct) (id int64, err error) { id, err = dao.orm.Insert(&r) if err != nil { logs.Error(lib.FuncName(), err) } return id, err } // 获取 ById func (dao *ContractProductDaoImpl) Read_ContractProductList_ByT_number(T_number string) (r []ContractProduct, err error) { qs := dao.orm.QueryTable(new(ContractProduct)) _, err = qs.Filter("T_contract_number", T_number).Filter("T_State__gt", 0).All(&r) if err != nil { logs.Error(lib.FuncName(), err) } return } func (dao *ContractProductDaoImpl) Read_ContractProduct_ByT_number_T_product_id(T_number string, T_product_id int) (r ContractProduct, err error) { qs := dao.orm.QueryTable(new(ContractProduct)) err = qs.Filter("T_product_id", T_product_id).Filter("T_contract_number", T_number).Filter("T_State__gt", 0).One(&r) if err != nil { logs.Error(lib.FuncName(), err) } return } // 修改 func (dao *ContractProductDaoImpl) Update_ContractProduct(m ContractProduct, cols ...string) error { _, err := dao.orm.Update(&m, cols...) if err != nil { logs.Error(lib.FuncName(), err) return err } return nil } // 删除 func (dao *ContractProductDaoImpl) Delete_ContractProduct(v ContractProduct) error { v.T_State = 0 _, err := dao.orm.Update(&v, "T_State") if err != nil { logs.Error(lib.FuncName(), err) } return err } // 获取列表 func (dao *ContractProductDaoImpl) Read_ContractProduct_List(T_number string) (r_ []ContractProduct) { var maps []ContractProduct // 也可以直接使用 Model 结构体作为表名 qs := dao.orm.QueryTable(new(ContractProduct)) // 过滤 cond := orm.NewCondition() cond = cond.And("T_State__gt", 0) if len(T_number) > 0 { cond = cond.And("T_contract_number", T_number) } // 查询 _, err := qs.SetCond((*orm2.Condition)(cond)).OrderBy("Id").All(&maps) if err != nil { logs.Error(lib.FuncName(), err) return } return maps } func (dao *ContractProductDaoImpl) Read_ContractProduct_OutList(T_number string) (r_ []ContractProduct) { var maps []ContractProduct // 也可以直接使用 Model 结构体作为表名 //qs := dao.orm.QueryTable(new(ContractProduct)) //// 过滤 //cond := orm.NewCondition() //cond = cond.And("T_State__gt", 0) // //if len(T_number) > 0 { // cond = cond.And("T_contract_number", T_number) //} // //// 查询 //_, err := qs.SetCond((*orm2.Condition)(cond)).OrderBy("Id").All(&maps) // //if err != nil { // logs.Error(lib.FuncName(), err) // return //} sql := "SELECT cp.ID,t_contract_number, t_product_id, t_product_total, t_product_out, cp.t__state, cp.create_time, cp.update_time, cp.t_price" + " FROM contract_product cp LEFT JOIN product ON cp.t_product_id=product.ID" + " WHERE cp.t_contract_number='" + T_number + "' AND product.t_class>=0 AND cp.t__state>0" fmt.Println(sql) _, err := dao.orm.Raw(sql).QueryRows(&maps) if err != nil { logs.Error(lib.FuncName(), err) } return maps } func (dao *ContractProductDaoImpl) Read_ContractProduct_T_State_List(T_number string) int64 { o := orm.NewOrm() var pl_lists orm2.ParamsList sql := fmt.Sprintf("SELECT DISTINCT t__state FROM contract_product WHERE t_contract_number = '%s'", T_number) _, err := o.Raw(sql).ValuesFlat(&pl_lists) if err != nil { logs.Error(lib.FuncName(), err) return 0 } if pl_lists[0] == nil { return 0 } key, _ := strconv.ParseInt(pl_lists[0].(string), 10, 64) return key }