safe_dao.go 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. /*
  2. * @description: 安全巡检数据库操作相关
  3. * @Author: LanJianRong
  4. * @Date: 2020-11-20
  5. * @FilePath: \construction_management\dao\safe_dao.go
  6. */
  7. package dao
  8. import (
  9. "errors"
  10. "fmt"
  11. "time"
  12. "github.com/go-xorm/xorm"
  13. "go.mod/models"
  14. "go.mod/web/viewmodels"
  15. )
  16. //数据库操作引擎
  17. type SafeDao struct {
  18. engine *xorm.Engine
  19. }
  20. //获得一个DAO对象
  21. func NewSafeDao(engine *xorm.Engine) *SafeDao {
  22. return &SafeDao{
  23. engine: engine,
  24. }
  25. }
  26. func (d *SafeDao) FindById(id int) *models.CmSafe {
  27. data := &models.CmSafe{Id: id}
  28. ok, err := d.engine.Get(data)
  29. if ok && err == nil {
  30. return data
  31. } else {
  32. data.Id = 0
  33. return data
  34. }
  35. }
  36. // id获得数据
  37. func (d *SafeDao) GetListByBid(id int, pageNo int, pageSize int) ([]models.CmSafe, int64) {
  38. dataList := make([]models.CmSafe, 0)
  39. start := (pageNo - 1) * pageSize
  40. total, err := d.engine.
  41. Where("bidsection_id=?", id).
  42. Asc("id").
  43. Limit(pageSize, start).
  44. FindAndCount(&dataList)
  45. if err != nil {
  46. return dataList, 0
  47. }
  48. return dataList, total
  49. }
  50. // 插入单条记录
  51. func (d *SafeDao) InsertRecord(data models.CmSafe) (bool, error) {
  52. affected, err := d.engine.InsertOne(data)
  53. return affected > 0, err
  54. }
  55. // 删除记录
  56. func (d *SafeDao) DeleteRecord(id int) error {
  57. session := d.engine.NewSession()
  58. defer session.Close()
  59. err := session.Begin()
  60. if err != nil {
  61. session.Rollback()
  62. return err
  63. }
  64. safe := &models.CmSafe{Id: id}
  65. _, err = session.Get(safe)
  66. if err != nil {
  67. session.Rollback()
  68. return err
  69. }
  70. bidsectionId := safe.BidsectionId
  71. _, err = session.ID(id).Delete(safe)
  72. if err != nil {
  73. session.Rollback()
  74. return err
  75. }
  76. // 计算当前安全巡检总数
  77. _, err = session.Exec("update `cm_tree` set `safe_total` = if(`safe_total` >= 1, `safe_total` - 1, 0) where `bidsection_id` = ?", bidsectionId)
  78. if err != nil {
  79. session.Rollback()
  80. return err
  81. }
  82. err = session.Commit()
  83. return err
  84. }
  85. // 根据code获取记录
  86. func (d *SafeDao) FindByCode(code string) (bool, error) {
  87. data := &models.CmSafe{Code: code}
  88. has, err := d.engine.Get(data)
  89. return has, err
  90. }
  91. // 筛选出应用了当前规则的条数
  92. func (d *SafeDao) CountRuleCode(bid int) (int64, error) {
  93. data := &models.CmSafe{}
  94. total, err := d.engine.Where("`bidsection_id` = ?", bid).Count(data)
  95. if err != nil {
  96. total = 0
  97. }
  98. return total, err
  99. }
  100. // 更改status
  101. func (d *SafeDao) ChangeStatus(id int, status int, inspection string, inspectionDetail string, demand string, createTime time.Time) error {
  102. data := &models.CmSafe{Status: status, Inspection: inspection, InspectionDetail: inspectionDetail, Demand: demand, CreateTime: createTime}
  103. _, err := d.engine.ID(id).Cols("status", " inspection", "inspection_detail", "demand", "create_time").Update(data)
  104. return err
  105. }
  106. // 获得某状态下的安全
  107. func (d *SafeDao) GetStatus(bidsectionId int, status int) []models.CmSafe {
  108. datalist := make([]models.CmSafe, 0)
  109. _ = d.engine.
  110. Where("bidsection_id = ? and status=? ", bidsectionId, status).
  111. Desc("id").
  112. Find(&datalist)
  113. return datalist
  114. }
  115. // 获得某状态下的安全
  116. func (d *SafeDao) GetStatusByProjectAndAccount(projectId int, projectAccountId int, status int) []models.CmSafe {
  117. datalist := make([]models.CmSafe, 0)
  118. _ = d.engine.
  119. Where("project_id = ? and audit_id= ? and status=? ", projectId, projectAccountId, status).
  120. Desc("id").
  121. Find(&datalist)
  122. return datalist
  123. }
  124. // 获得某年份下的安全
  125. func (d *SafeDao) GetTypeYear(bidsectionId int, year int) []viewmodels.SafeSurveyList {
  126. startYear := fmt.Sprintf("%d-01-01:00.00.00", year)
  127. endYear := fmt.Sprintf("%d-12-31:23.59.59", year)
  128. datalist := make([]viewmodels.SafeSurveyList, 0)
  129. _ = d.engine.Table("`cm_safe` as cs").
  130. Select("cs.id, cs.`create_time`, cs.`inspection_detail`, cs.status, pa.`name` as `audit_name`").
  131. Where("cs.bidsection_id = ? and cs.create_time>='"+startYear+"' and cs.create_time<='"+endYear+"' ", bidsectionId).
  132. Join("left", "cm_project_account as pa", "pa.id = cs.uid").
  133. Desc("id").
  134. Find(&datalist)
  135. return datalist
  136. }
  137. // 根据bid
  138. func (d *SafeDao) GetCountsByBid(bidsectionId int, status int, isAll bool) (int64, error) {
  139. data := &models.CmSafe{}
  140. if isAll == true {
  141. counts, err := d.engine.Where("bidsection_id = ?", bidsectionId).Count(data)
  142. return counts, err
  143. } else {
  144. counts, err := d.engine.Where("bidsection_id = ? and status = ?", bidsectionId, status).Count(data)
  145. return counts, err
  146. }
  147. }
  148. // 事务-创建新的安全巡检记录
  149. func (d *SafeDao) CreateSafe(data models.CmSafe) error {
  150. session := d.engine.NewSession()
  151. defer session.Close()
  152. err := session.Begin()
  153. if err != nil {
  154. session.Rollback()
  155. return err
  156. }
  157. has, err := session.Where("code = ?", data.Code).Get(&data)
  158. // err或者code存在都回滚
  159. if err != nil {
  160. session.Rollback()
  161. return err
  162. }
  163. if has == true {
  164. session.Rollback()
  165. return errors.New("该编号已存在!")
  166. }
  167. _, err = session.Insert(data)
  168. if err != nil {
  169. session.Rollback()
  170. return err
  171. }
  172. // 更新cm_tree中的safe_total、safe_rectification
  173. _, err = session.Exec("update `cm_tree` set `safe_total` = `safe_total` + 1 , `safe_rectification` = `safe_rectification` + 1 where `bidsection_id` = ?", data.BidsectionId)
  174. if err != nil {
  175. session.Rollback()
  176. return err
  177. }
  178. err = session.Commit()
  179. if err != nil {
  180. return err
  181. }
  182. return nil
  183. }