safe_dao.go 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  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) GetInIdJoinAccount(ids []int) []viewmodels.SafeList {
  27. datalist := make([]viewmodels.SafeList, 0)
  28. err := d.engine.
  29. Table("`cm_safe` as cs").
  30. Select("cs.id, cs.`create_time`, cs.`inspection_detail`, cs.`inspection`,cs.code, cs.status, pa.`name` as `audit_name`, pa.`position`,cs.`bidsection_id`").
  31. In("cs.id", ids).
  32. // Where("cs.id in ( "+ids+" ) ").
  33. Join("left", "cm_project_account as pa", "pa.id = cs.uid").
  34. Desc("id").
  35. Find(&datalist)
  36. if err != nil {
  37. return datalist
  38. } else {
  39. return datalist
  40. }
  41. }
  42. func (d *SafeDao) FindById(id int) *models.CmSafe {
  43. data := &models.CmSafe{Id: id}
  44. ok, err := d.engine.Get(data)
  45. if ok && err == nil {
  46. return data
  47. } else {
  48. data.Id = 0
  49. return data
  50. }
  51. }
  52. // id获得数据
  53. func (d *SafeDao) GetListByBid(id int, pageNo int, pageSize int) ([]models.CmSafe, int64) {
  54. dataList := make([]models.CmSafe, 0)
  55. start := (pageNo - 1) * pageSize
  56. total, err := d.engine.
  57. Where("bidsection_id=?", id).
  58. Asc("id").
  59. Limit(pageSize, start).
  60. FindAndCount(&dataList)
  61. if err != nil {
  62. return dataList, 0
  63. }
  64. return dataList, total
  65. }
  66. // 插入单条记录
  67. func (d *SafeDao) InsertRecord(data models.CmSafe) (bool, error) {
  68. affected, err := d.engine.InsertOne(data)
  69. return affected > 0, err
  70. }
  71. // 删除记录
  72. func (d *SafeDao) DeleteRecord(id int) error {
  73. session := d.engine.NewSession()
  74. defer session.Close()
  75. err := session.Begin()
  76. if err != nil {
  77. session.Rollback()
  78. return err
  79. }
  80. safe := &models.CmSafe{Id: id}
  81. _, err = session.Get(safe)
  82. if err != nil {
  83. session.Rollback()
  84. return err
  85. }
  86. bidsectionId := safe.BidsectionId
  87. _, err = session.ID(id).Delete(safe)
  88. if err != nil {
  89. session.Rollback()
  90. return err
  91. }
  92. // 计算当前安全巡检总数
  93. _, err = session.Exec("update `cm_tree` set `safe_total` = if(`safe_total` >= 1, `safe_total` - 1, 0), `safe_rectification` = if(`safe_rectification` >= 1, `safe_rectification` - 1, 0) where `bidsection_id` = ?", bidsectionId)
  94. if err != nil {
  95. session.Rollback()
  96. return err
  97. }
  98. err = session.Commit()
  99. return err
  100. }
  101. // 根据code获取记录
  102. func (d *SafeDao) FindByCode(code string) (bool, error) {
  103. data := &models.CmSafe{Code: code}
  104. has, err := d.engine.Get(data)
  105. return has, err
  106. }
  107. // 筛选出应用了当前规则的条数
  108. func (d *SafeDao) CountRuleCode(bid int) (int64, error) {
  109. data := &models.CmSafe{}
  110. total, err := d.engine.Where("`bidsection_id` = ?", bid).Count(data)
  111. if err != nil {
  112. total = 0
  113. }
  114. return total, err
  115. }
  116. // 更改status
  117. func (d *SafeDao) ChangeStatus(id int, status int, inspection string, inspectionDetail string, demand string, createTime time.Time) error {
  118. data := &models.CmSafe{Status: status, Inspection: inspection, InspectionDetail: inspectionDetail, Demand: demand, CreateTime: createTime}
  119. _, err := d.engine.ID(id).Cols("status", " inspection", "inspection_detail", "demand", "create_time").Update(data)
  120. return err
  121. }
  122. // 获得某状态下的安全
  123. func (d *SafeDao) GetStatus(bidsectionId int, status int) []models.CmSafe {
  124. datalist := make([]models.CmSafe, 0)
  125. _ = d.engine.
  126. Where("bidsection_id = ? and status=? ", bidsectionId, status).
  127. Desc("id").
  128. Find(&datalist)
  129. return datalist
  130. }
  131. // 获得某状态下的安全
  132. func (d *SafeDao) GetStatusByProjectAndAccount(projectId int, projectAccountId int, status int) []models.CmSafe {
  133. datalist := make([]models.CmSafe, 0)
  134. _ = d.engine.
  135. Where("project_id = ? and audit_id= ? and status=? ", projectId, projectAccountId, status).
  136. Desc("id").
  137. Find(&datalist)
  138. return datalist
  139. }
  140. // 获得某年份下的审批记录
  141. func (d *SafeDao) GetTypeYear(bidsectionId int, year int) []viewmodels.SafeSurveyList {
  142. startYear := fmt.Sprintf("%d-01-01:00.00.00", year)
  143. endYear := fmt.Sprintf("%d-12-31:23.59.59", year)
  144. datalist := make([]viewmodels.SafeSurveyList, 0)
  145. _ = d.engine.Table("`cm_safe` as cs").
  146. // s.`update_time`, , pa.`name` as `audit_name`
  147. Select("cs.id , cs.`create_time`, cs.`inspection_detail`, cs.status").
  148. Where("cs.bidsection_id = ? and cs.create_time>='"+startYear+"' and cs.create_time<='"+endYear+"' ", bidsectionId).
  149. // Join("left", "cm_approver as s", "cs.id = s.data_id and s.data_id=1").
  150. // Join("left", "cm_project_account as pa", "pa.id = s.audit_id").
  151. Desc("id").
  152. Find(&datalist)
  153. // _ = d.engine.Table("`cm_approver` as cs").
  154. // Select("cs.data_id as id, cs.`update_time`, s.`inspection_detail`, cs.status, pa.`name` as `audit_name`").
  155. // Where("cs.bidsection_id = ? and status=1 and progress=1 and data_type=1 and cs.update_time>='"+startYear+"' and cs.update_time<='"+endYear+"' ", bidsectionId).
  156. // Join("left", "cm_safe as s", "s.id = cs.data_id").
  157. // Join("left", "cm_project_account as pa", "pa.id = cs.audit_id").
  158. // Desc("id").
  159. // Find(&datalist)
  160. return datalist
  161. }
  162. // // 获得某年份下的安全
  163. // func (d *SafeDao) GetTypeYear(bidsectionId int, year int) []viewmodels.SafeSurveyList {
  164. // startYear := fmt.Sprintf("%d-01-01:00.00.00", year)
  165. // endYear := fmt.Sprintf("%d-12-31:23.59.59", year)
  166. // datalist := make([]viewmodels.SafeSurveyList, 0)
  167. // _ = d.engine.Table("`cm_safe` as cs").
  168. // Select("cs.id, cs.`create_time`, cs.`inspection_detail`, cs.status, pa.`name` as `audit_name`").
  169. // Where("cs.bidsection_id = ? and cs.create_time>='"+startYear+"' and cs.create_time<='"+endYear+"' ", bidsectionId).
  170. // Join("left", "cm_project_account as pa", "pa.id = cs.uid").
  171. // Desc("id").
  172. // Find(&datalist)
  173. // return datalist
  174. // }
  175. // 根据bid
  176. func (d *SafeDao) GetCountsByBid(bidsectionId int, status int, isAll bool) (int64, error) {
  177. data := &models.CmSafe{}
  178. if isAll == true {
  179. counts, err := d.engine.Where("bidsection_id = ?", bidsectionId).Count(data)
  180. return counts, err
  181. } else {
  182. counts, err := d.engine.Where("bidsection_id = ? and status = ?", bidsectionId, status).Count(data)
  183. return counts, err
  184. }
  185. }
  186. // 事务-创建新的安全巡检记录
  187. func (d *SafeDao) CreateSafe(data models.CmSafe) error {
  188. session := d.engine.NewSession()
  189. defer session.Close()
  190. err := session.Begin()
  191. if err != nil {
  192. session.Rollback()
  193. return err
  194. }
  195. safe := models.CmSafe{}
  196. has, err := session.Where("code = ? and bidsection_id = ?", data.Code, data.BidsectionId).Get(&safe)
  197. // err或者code存在都回滚
  198. if err != nil {
  199. session.Rollback()
  200. return err
  201. }
  202. if has == true {
  203. session.Rollback()
  204. return errors.New("该编号已存在!")
  205. }
  206. _, err = session.Insert(data)
  207. if err != nil {
  208. session.Rollback()
  209. return err
  210. }
  211. // 更新cm_tree中的safe_total、safe_rectification
  212. _, err = session.Exec("update `cm_tree` set `safe_total` = `safe_total` + 1 , `safe_rectification` = `safe_rectification` + 1 where `bidsection_id` = ?", data.BidsectionId)
  213. if err != nil {
  214. session.Rollback()
  215. return err
  216. }
  217. err = session.Commit()
  218. if err != nil {
  219. return err
  220. }
  221. return nil
  222. }