contract_dao.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /*
  2. * @description: 合同相关数据库操作
  3. * @Author: CP
  4. * @Date: 2020-11-17 10:41:05
  5. * @FilePath: \construction_management\dao\contract_dao.go
  6. */
  7. package dao
  8. import (
  9. "errors"
  10. "log"
  11. "github.com/go-xorm/xorm"
  12. "go.mod/models"
  13. )
  14. //数据库操作引擎
  15. type ContractDao struct {
  16. engine *xorm.Engine
  17. }
  18. //获得一个DAO对象
  19. func NewContractDao(engine *xorm.Engine) *ContractDao {
  20. return &ContractDao{
  21. engine: engine,
  22. }
  23. }
  24. // 获得本项目的合同项目节
  25. func (d *ContractDao) Get(id int) *models.CmContracts {
  26. data := &models.CmContracts{}
  27. _, err := d.engine.
  28. Where("id=? ", id).
  29. Get(data)
  30. if err != nil {
  31. data.Id = 0
  32. return data
  33. }
  34. return data
  35. }
  36. // 新增合同
  37. func (d *ContractDao) Add(contractData *models.CmContracts) error {
  38. session := d.engine.NewSession()
  39. defer session.Close()
  40. err := session.Begin()
  41. if err != nil {
  42. return errors.New("新增合同出错-db")
  43. }
  44. // 1.写入合同表
  45. _, err = session.Insert(contractData)
  46. if err != nil {
  47. log.Println(err)
  48. session.Rollback()
  49. return errors.New("新增合同出错")
  50. }
  51. // 2.更新项目节表
  52. _, err = session.Exec("UPDATE cm_tree_contracts SET `contract_id` = ?,`contract_name` = ?,`contract_code` = ?,`contract_price` = ? "+
  53. "where tree_id = ? and project_id = ? and bidsection_id = ? ",
  54. contractData.Id, contractData.Name, contractData.Code, contractData.Price,
  55. contractData.TreeId, contractData.ProjectId, contractData.BidsectionId)
  56. if err != nil {
  57. session.Rollback()
  58. return errors.New("新增合同出错-项目节更新失败")
  59. }
  60. // 3.更新标段目录金额合计
  61. // 3-1 获得项目-标段下合同总数
  62. // 3-2 获得项目标段下合同收入中金额
  63. _, err = session.Exec("UPDATE cm_tree SET `contracts` = ?,`contracts_income` = ? "+
  64. "where project_id = ? and bidsection_id = ? ",
  65. contractData.Id, contractData.Name, contractData.Code, contractData.Price,
  66. contractData.ProjectId, contractData.BidsectionId)
  67. if err != nil {
  68. session.Rollback()
  69. return errors.New("新增合同出错-标段目录更新失败")
  70. }
  71. err = session.Commit()
  72. if err != nil {
  73. session.Rollback()
  74. return errors.New("新增合同出错-db")
  75. }
  76. return nil
  77. }