/* * @description: 合同相关数据库操作 * @Author: CP * @Date: 2020-11-17 10:41:05 * @FilePath: \construction_management\dao\contract_dao.go */ package dao import ( "errors" "log" "github.com/go-xorm/xorm" "go.mod/models" ) //数据库操作引擎 type ContractDao struct { engine *xorm.Engine } //获得一个DAO对象 func NewContractDao(engine *xorm.Engine) *ContractDao { return &ContractDao{ engine: engine, } } // 获得本项目的合同项目节 func (d *ContractDao) Get(id int) *models.CmContracts { data := &models.CmContracts{} _, err := d.engine. Where("id=? ", id). Get(data) if err != nil { data.Id = 0 return data } return data } // 新增合同 // contractData *models.CmContracts // contractTotal 合同总数 // priceTotal 收入总金额 func (d *ContractDao) Add(contractData *models.CmContracts) error { session := d.engine.NewSession() defer session.Close() err := session.Begin() if err != nil { return errors.New("新增合同出错-db") } // 1.写入合同表 _, err = session.Insert(contractData) if err != nil { log.Println(err) session.Rollback() return errors.New("新增合同出错") } // 2.更新项目节表 _, err = session.Exec("UPDATE cm_tree_contracts SET `contract_id` = ?,`contract_name` = ?,`contract_code` = ?,`contract_price` = ? "+ "where tree_id = ? and project_id = ? and bidsection_id = ? ", contractData.Id, contractData.Name, contractData.Code, contractData.Price, contractData.TreeId, contractData.ProjectId, contractData.BidsectionId) if err != nil { session.Rollback() return errors.New("新增合同出错-项目节更新失败") } err = session.Commit() if err != nil { session.Rollback() return errors.New("新增合同出错-db") } return nil } // 更新合同 func (d *ContractDao) Update(contractsCm *models.CmContracts, columns []string, projectId int, bidsectionId int, treeId int) error { session := d.engine.NewSession() defer session.Close() err := session.Begin() if err != nil { return errors.New("session出错-db") } // 1.更新合同表 successNum, err := session.Id(contractsCm.Id).MustCols(columns...).Update(contractsCm) if err != nil { session.Rollback() return errors.New("更新失败") } if successNum == 0 { session.Rollback() return errors.New("合同数据异常,更新失败") } // 2.更新项目节表 _, err = session.Exec("UPDATE cm_tree_contracts SET `contract_name` = ?,`contract_price` = ? "+ "where tree_id = ? and project_id = ? and bidsection_id = ? ", contractsCm.Name, contractsCm.Price, treeId, projectId, bidsectionId) if err != nil { session.Rollback() return errors.New("编辑合同出错-项目节更新失败") } err = session.Commit() if err != nil { session.Rollback() return errors.New("session出错-db") } return nil } // 删除合同 func (d *ContractDao) Delete(projectId int, bidsectionId int, treeId int, id int) error { contractsCm := models.CmContracts{} session := d.engine.NewSession() defer session.Close() err := session.Begin() if err != nil { return errors.New("session出错-db") } // 1.删除合同 successNum, err := session.Where("id = ? and tree_id=? and bidsection_id= ? and project_id=? ", id, treeId, bidsectionId, projectId).Delete(contractsCm) if err != nil { session.Rollback() return errors.New("删除失败") } if successNum == 0 { session.Rollback() return errors.New("合同数据异常,删除失败") } // 2.删除项目节上合同信息 _, err = session.Exec("UPDATE cm_tree_contracts SET `contract_name` = '',`contract_code` = '',`contract_price` = 0,`contract_id` = 0,`contract_returned` = 0,`contracts_paid` = 0,`contract_status` = 0 "+ "where tree_id = ? and project_id = ? and bidsection_id = ? ", treeId, projectId, bidsectionId) if err != nil { session.Rollback() return errors.New("编辑合同出错-项目节更新失败") } err = session.Commit() if err != nil { session.Rollback() return errors.New("session出错-db") } return nil } // 删除合同 func (d *ContractDao) Close(projectId int, bidsectionId int, treeId int, id int) error { session := d.engine.NewSession() defer session.Close() err := session.Begin() if err != nil { return errors.New("session出错-db") } // 1.关闭合同-关闭合同,默认锁定合同 contractsCm := models.CmContracts{} contractsCm.Status = 2 contractsCm.Locking = 1 successNum, err := session.Where("id = ? and project_id = ? and bidsection_id = ? ", id, projectId, bidsectionId).Update(contractsCm) if err != nil { session.Rollback() return errors.New("关闭合同出错") } if successNum == 0 { session.Rollback() return errors.New("关闭合同异常") } // 2.更新项目节合同状态,锁定合同 treeContractsCm := models.CmTreeContracts{} treeContractsCm.ContractStatus = 2 treeContractsCm.ContractLocking = 1 successNum, err = session.Where("tree_id = ? and project_id = ? and bidsection_id = ? ", treeId, projectId, bidsectionId).Update(treeContractsCm) if err != nil { session.Rollback() return errors.New("关闭合同出错-项目节") } if successNum == 0 { session.Rollback() return errors.New("关闭合同异常-项目节") } err = session.Commit() if err != nil { session.Rollback() return errors.New("session出错-db") } return nil } // 删除合同 func (d *ContractDao) Unlock(projectId int, bidsectionId int, treeId int, id int) error { session := d.engine.NewSession() defer session.Close() err := session.Begin() if err != nil { return errors.New("session出错-db") } // 1.解锁合同 contractsCm := models.CmContracts{} contractsCm.Locking = 0 successNum, err := session.Where("id = ? and project_id = ? and bidsection_id = ? ", id, projectId, bidsectionId).Cols("locking").Update(contractsCm) if err != nil { session.Rollback() return errors.New("解锁合同出错") } if successNum == 0 { session.Rollback() return errors.New("解锁合同异常") } // 2.更新项目节上合同锁状态 treeContractsCm := models.CmTreeContracts{} treeContractsCm.ContractLocking = 0 successNum, err = session.Where("tree_id = ? and project_id = ? and bidsection_id = ? ", treeId, projectId, bidsectionId).Cols("contract_locking").Update(treeContractsCm) if err != nil { session.Rollback() return errors.New("解锁合同出错-项目节") } if successNum == 0 { session.Rollback() return errors.New("解锁合同异常-项目节") } err = session.Commit() if err != nil { session.Rollback() return errors.New("session出错-db") } return nil }