contract_dao.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. // contractData *models.CmContracts
  38. // contractTotal 合同总数
  39. // priceTotal 收入总金额
  40. func (d *ContractDao) Add(contractData *models.CmContracts, contractTotal int, priceTotal float64) error {
  41. session := d.engine.NewSession()
  42. defer session.Close()
  43. err := session.Begin()
  44. if err != nil {
  45. return errors.New("新增合同出错-db")
  46. }
  47. // 1.写入合同表
  48. _, err = session.Insert(contractData)
  49. if err != nil {
  50. log.Println(err)
  51. session.Rollback()
  52. return errors.New("新增合同出错")
  53. }
  54. // 2.更新项目节表
  55. _, err = session.Exec("UPDATE cm_tree_contracts SET `contract_id` = ?,`contract_name` = ?,`contract_code` = ?,`contract_price` = ? "+
  56. "where tree_id = ? and project_id = ? and bidsection_id = ? ",
  57. contractData.Id, contractData.Name, contractData.Code, contractData.Price,
  58. contractData.TreeId, contractData.ProjectId, contractData.BidsectionId)
  59. if err != nil {
  60. session.Rollback()
  61. return errors.New("新增合同出错-项目节更新失败")
  62. }
  63. // 3.更新标段目录金额合计
  64. // 3-1 获得项目-标段下合同总数
  65. // 3-2 获得项目标段下合同收入中金额
  66. _, err = session.Exec("UPDATE cm_tree SET `contracts` = ?,`contracts_income` = ? "+
  67. "where project_id = ? and bidsection_id = ? ",
  68. contractTotal, priceTotal,
  69. contractData.ProjectId, contractData.BidsectionId)
  70. if err != nil {
  71. session.Rollback()
  72. return errors.New("新增合同出错-标段目录更新失败")
  73. }
  74. err = session.Commit()
  75. if err != nil {
  76. session.Rollback()
  77. return errors.New("新增合同出错-db")
  78. }
  79. return nil
  80. }