contract_dao.go 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  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) 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. err = session.Commit()
  64. if err != nil {
  65. session.Rollback()
  66. return errors.New("新增合同出错-db")
  67. }
  68. return nil
  69. }
  70. // 更新合同
  71. func (d *ContractDao) Update(contractsCm *models.CmContracts, columns []string, projectId int, bidsectionId int, treeId int) error {
  72. session := d.engine.NewSession()
  73. defer session.Close()
  74. err := session.Begin()
  75. if err != nil {
  76. return errors.New("session出错-db")
  77. }
  78. // 1.更新合同表
  79. successNum, err := session.Id(contractsCm.Id).MustCols(columns...).Update(contractsCm)
  80. if err != nil {
  81. session.Rollback()
  82. return errors.New("更新失败")
  83. }
  84. if successNum == 0 {
  85. session.Rollback()
  86. return errors.New("合同数据异常,更新失败")
  87. }
  88. // 2.更新项目节表
  89. _, err = session.Exec("UPDATE cm_tree_contracts SET `contract_name` = ?,`contract_price` = ? "+
  90. "where tree_id = ? and project_id = ? and bidsection_id = ? ",
  91. contractsCm.Name, contractsCm.Price,
  92. treeId, projectId, bidsectionId)
  93. if err != nil {
  94. session.Rollback()
  95. return errors.New("编辑合同出错-项目节更新失败")
  96. }
  97. err = session.Commit()
  98. if err != nil {
  99. session.Rollback()
  100. return errors.New("session出错-db")
  101. }
  102. return nil
  103. }
  104. // 删除合同
  105. func (d *ContractDao) Delete(projectId int, bidsectionId int, treeId int, id int) error {
  106. contractsCm := models.CmContracts{}
  107. session := d.engine.NewSession()
  108. defer session.Close()
  109. err := session.Begin()
  110. if err != nil {
  111. return errors.New("session出错-db")
  112. }
  113. // 1.删除合同
  114. successNum, err := session.Where("id = ? and tree_id=? and bidsection_id= ? and project_id=? ", id, treeId, bidsectionId, projectId).Delete(contractsCm)
  115. if err != nil {
  116. session.Rollback()
  117. return errors.New("删除失败")
  118. }
  119. if successNum == 0 {
  120. session.Rollback()
  121. return errors.New("合同数据异常,删除失败")
  122. }
  123. // 2.删除项目节上合同信息
  124. _, 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 "+
  125. "where tree_id = ? and project_id = ? and bidsection_id = ? ",
  126. treeId, projectId, bidsectionId)
  127. if err != nil {
  128. session.Rollback()
  129. return errors.New("编辑合同出错-项目节更新失败")
  130. }
  131. err = session.Commit()
  132. if err != nil {
  133. session.Rollback()
  134. return errors.New("session出错-db")
  135. }
  136. return nil
  137. }
  138. // 删除合同
  139. func (d *ContractDao) Close(projectId int, bidsectionId int, treeId int, id int) error {
  140. session := d.engine.NewSession()
  141. defer session.Close()
  142. err := session.Begin()
  143. if err != nil {
  144. return errors.New("session出错-db")
  145. }
  146. // 1.关闭合同-关闭合同,默认锁定合同
  147. contractsCm := models.CmContracts{}
  148. contractsCm.Status = 2
  149. contractsCm.Locking = 1
  150. successNum, err := session.Where("id = ? and project_id = ? and bidsection_id = ? ", id, projectId, bidsectionId).Update(contractsCm)
  151. if err != nil {
  152. session.Rollback()
  153. return errors.New("关闭合同出错")
  154. }
  155. if successNum == 0 {
  156. session.Rollback()
  157. return errors.New("关闭合同异常")
  158. }
  159. // 2.更新项目节合同状态,锁定合同
  160. treeContractsCm := models.CmTreeContracts{}
  161. treeContractsCm.ContractStatus = 2
  162. treeContractsCm.ContractLocking = 1
  163. successNum, err = session.Where("tree_id = ? and project_id = ? and bidsection_id = ? ", treeId, projectId, bidsectionId).Update(treeContractsCm)
  164. if err != nil {
  165. session.Rollback()
  166. return errors.New("关闭合同出错-项目节")
  167. }
  168. if successNum == 0 {
  169. session.Rollback()
  170. return errors.New("关闭合同异常-项目节")
  171. }
  172. err = session.Commit()
  173. if err != nil {
  174. session.Rollback()
  175. return errors.New("session出错-db")
  176. }
  177. return nil
  178. }
  179. // 删除合同
  180. func (d *ContractDao) Unlock(projectId int, bidsectionId int, treeId int, id int) error {
  181. session := d.engine.NewSession()
  182. defer session.Close()
  183. err := session.Begin()
  184. if err != nil {
  185. return errors.New("session出错-db")
  186. }
  187. // 1.解锁合同
  188. contractsCm := models.CmContracts{}
  189. contractsCm.Locking = 0
  190. successNum, err := session.Where("id = ? and project_id = ? and bidsection_id = ? ", id, projectId, bidsectionId).Cols("locking").Update(contractsCm)
  191. if err != nil {
  192. session.Rollback()
  193. return errors.New("解锁合同出错")
  194. }
  195. if successNum == 0 {
  196. session.Rollback()
  197. return errors.New("解锁合同异常")
  198. }
  199. // 2.更新项目节上合同锁状态
  200. treeContractsCm := models.CmTreeContracts{}
  201. treeContractsCm.ContractLocking = 0
  202. successNum, err = session.Where("tree_id = ? and project_id = ? and bidsection_id = ? ", treeId, projectId, bidsectionId).Cols("contract_locking").Update(treeContractsCm)
  203. if err != nil {
  204. session.Rollback()
  205. return errors.New("解锁合同出错-项目节")
  206. }
  207. if successNum == 0 {
  208. session.Rollback()
  209. return errors.New("解锁合同异常-项目节")
  210. }
  211. err = session.Commit()
  212. if err != nil {
  213. session.Rollback()
  214. return errors.New("session出错-db")
  215. }
  216. return nil
  217. }