safe_service.go 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. package services
  2. import (
  3. "errors"
  4. "fmt"
  5. "log"
  6. "strconv"
  7. "time"
  8. "github.com/kataras/iris/v12"
  9. "go.mod/comm"
  10. "go.mod/conf"
  11. "go.mod/dao"
  12. "go.mod/datasource"
  13. "go.mod/models"
  14. "go.mod/web/viewmodels"
  15. )
  16. type SafeService interface {
  17. Get(id int, pid int, pageNo int, pageSize int) ([]viewmodels.SafeList, int64)
  18. Post(data models.CmSafe) error
  19. Del(id int) error
  20. GetDetail(id int, pid int) viewmodels.SafeDetail
  21. GetSurvey(projectId int, bidsectionId int) map[string]interface{}
  22. ValidRule(ctx iris.Context) (viewmodels.Safe, error)
  23. }
  24. // //返回service操作类
  25. type safeService struct {
  26. daoSafe *dao.SafeDao
  27. daoSafeAudit *dao.SafeAuditDao
  28. daoProjectAccount *dao.ProjectAccountDao
  29. daoAnnex *dao.AnnexDao
  30. daoRule *dao.RuleDao
  31. daoApprover *dao.ApproverDao
  32. validDetail string
  33. }
  34. //创建项目用户service
  35. func NewSafeService() SafeService {
  36. return &safeService{
  37. validDetail: "/api/safe/detail",
  38. daoSafe: dao.NewSafeDao(datasource.InstanceDbMaster()),
  39. daoAnnex: dao.NewAnnexDao(datasource.InstanceDbMaster()),
  40. daoSafeAudit: dao.NewSafeAuditDao(datasource.InstanceDbMaster()),
  41. daoProjectAccount: dao.NewProjectAccountDao(datasource.InstanceDbMaster()),
  42. daoApprover: dao.NewApproverDao(datasource.InstanceDbMaster()),
  43. }
  44. }
  45. func (s *safeService) Get(id int, pid int, pageNo int, pageSize int) ([]viewmodels.SafeList, int64) {
  46. datalist, total := s.daoSafe.GetListByBid(id, pageNo, pageSize)
  47. safeList := make([]viewmodels.SafeList, 0)
  48. for _, item := range datalist {
  49. safeVM := viewmodels.SafeList{}
  50. safeVM.Code = item.Code
  51. account := s.daoProjectAccount.Get(item.Uid, pid)
  52. safeVM.AuditName = account.Name
  53. safeVM.CreateTime = item.CreateTime.Format(conf.SysTimeform)
  54. safeVM.Demand = item.Demand
  55. id, _ := comm.AesEncrypt(strconv.Itoa(item.Id), conf.SignSecret)
  56. safeVM.Id = id
  57. safeVM.Inspection = item.Inspection
  58. safeVM.InspectionDetail = item.InspectionDetail
  59. safeVM.Position = item.Position
  60. safeVM.Status = item.Status
  61. counts, _ := s.daoAnnex.GetCount(3, item.Id)
  62. safeVM.FileCounts = counts
  63. safeList = append(safeList, safeVM)
  64. }
  65. return safeList, total
  66. }
  67. // post请求,插入单条数据
  68. func (s *safeService) Post(data models.CmSafe) error {
  69. has := s.daoSafe.FindByCode(data.Code)
  70. if has {
  71. return errors.New("该编号已存在!")
  72. }
  73. Inserted, err := s.daoSafe.InsertRecord(data)
  74. if Inserted == true {
  75. return nil
  76. }
  77. return err
  78. }
  79. // delete请求,删除数据
  80. func (s *safeService) Del(id int) error {
  81. Deleted, err := s.daoSafe.DeleteRecord(id)
  82. if Deleted == true {
  83. return nil
  84. }
  85. return err
  86. }
  87. // 详情页数据拼装
  88. func (s *safeService) GetDetail(id int, pid int) viewmodels.SafeDetail {
  89. safeData := s.daoSafe.FindById(id)
  90. // fmt.Println(safeData)
  91. safeId, _ := comm.AesEncrypt(strconv.Itoa(safeData.Id), conf.SignSecret)
  92. bid, _ := comm.AesEncrypt(strconv.Itoa(safeData.BidsectionId), conf.SignSecret)
  93. uid, _ := comm.AesEncrypt(strconv.Itoa(safeData.Uid), conf.SignSecret)
  94. data := viewmodels.SafeDetail{}
  95. data.Id = safeId
  96. data.BidsectionId = bid
  97. data.Uid = uid
  98. data.Code = safeData.Code
  99. data.Inspection = safeData.Inspection
  100. data.InspectionDetail = safeData.InspectionDetail
  101. data.Demand = safeData.Demand
  102. account := s.daoProjectAccount.Get(safeData.Uid, pid)
  103. data.AuditName = account.Name
  104. data.CreateTime = safeData.CreateTime
  105. data.Times = safeData.Times
  106. data.Status = safeData.Status
  107. fileList, total := s.daoAnnex.GetList(3, safeData.Id, 1, conf.PageSize)
  108. // 加密id
  109. fileArr := make([]viewmodels.AnnexListView, 0)
  110. for _, item := range fileList {
  111. fileListVM := viewmodels.AnnexListView{}
  112. fileId, _ := comm.AesEncrypt(item.Id, conf.SignSecret)
  113. fileListVM.Id = fileId
  114. uid, _ := comm.AesEncrypt(item.AccountId, conf.SignSecret)
  115. fileListVM.AccountId = uid
  116. fileListVM.AccountName = item.AccountName
  117. fileListVM.CreateTime = item.CreateTime
  118. fileListVM.FileName = item.FileName
  119. fileListVM.FilePath = item.FilePath
  120. fileArr = append(fileArr, fileListVM)
  121. }
  122. fileVM := viewmodels.FileStruct{}
  123. fileVM.FileList = fileArr
  124. fileVM.Total = total
  125. data.File = fileVM
  126. auditors := s.daoApprover.GetAuditorsWithOwner(safeData.BidsectionId, int(1), safeData.Id, account.Id)
  127. encryptAuditors := make([]viewmodels.Auditors, 0)
  128. for _, item := range auditors {
  129. auditorVM := viewmodels.Auditors{}
  130. if item.Id != "" {
  131. id, _ := comm.AesEncrypt(item.Id, conf.SignSecret)
  132. auditorVM.Id = id
  133. }
  134. auditId, _ := comm.AesEncrypt(item.AuditId, conf.SignSecret)
  135. auditorVM.AuditId = auditId
  136. auditorVM.Name = item.Name
  137. auditorVM.Position = item.Position
  138. auditorVM.Mobile = item.Mobile
  139. auditorVM.AuditOrder = item.AuditOrder
  140. auditorVM.AccountGroup = item.AccountGroup
  141. auditorVM.Progress = item.Progress
  142. auditorVM.Company = item.Company
  143. auditorVM.Status = item.Status
  144. encryptAuditors = append(encryptAuditors, auditorVM)
  145. }
  146. auditHistory := s.daoSafeAudit.GetAuditHistory(safeData.Id, safeData.Times)
  147. data.AuditHistory = auditHistory
  148. // 整改单
  149. rectifiedInfo, _ := s.daoSafeAudit.GetLastedOrder(safeData.Id)
  150. data.RectifiedInfo = rectifiedInfo
  151. // 最新审批人信息
  152. latestAuditor := s.daoApprover.GetLastedAuditor(safeData.BidsectionId, 1, safeData.Id)
  153. data.LatestdAuditor = latestAuditor
  154. data.Auditors = encryptAuditors
  155. return data
  156. }
  157. // 安全概况
  158. func (s *safeService) GetSurvey(projectId int, bidsectionId int) map[string]interface{} {
  159. // 1.获得安全巡检
  160. year := time.Now().Year()
  161. safeList := s.daoSafe.GetTypeYear(bidsectionId, year)
  162. // 2.初始化
  163. rectifylist := make([]models.CmSafe, 0)
  164. rectifyTotal := 0
  165. approvalTotal := 0
  166. rectifyedTotal := 0
  167. // 3.当年数据初始化
  168. submitData := map[string]float64{
  169. fmt.Sprintf("%d-01", year): 0,
  170. fmt.Sprintf("%d-02", year): 0,
  171. fmt.Sprintf("%d-03", year): 0,
  172. fmt.Sprintf("%d-04", year): 0,
  173. fmt.Sprintf("%d-05", year): 0,
  174. fmt.Sprintf("%d-06", year): 0,
  175. fmt.Sprintf("%d-07", year): 0,
  176. fmt.Sprintf("%d-08", year): 0,
  177. fmt.Sprintf("%d-09", year): 0,
  178. fmt.Sprintf("%d-10", year): 0,
  179. fmt.Sprintf("%d-11", year): 0,
  180. fmt.Sprintf("%d-12", year): 0,
  181. }
  182. rectifyedData := submitData
  183. for _, item := range safeList {
  184. if item.Status == 2 {
  185. rectifylist = append(rectifylist, item)
  186. rectifyTotal++
  187. }
  188. if item.Status == 1 {
  189. approvalTotal++
  190. }
  191. if item.Status == 4 {
  192. rectifyedTotal++
  193. }
  194. if item.Status == 0 {
  195. submitData[item.CreateTime.Format(conf.SysTimeformMonth)] = submitData[item.CreateTime.Format(conf.SysTimeformMonth)] + 1
  196. }
  197. if item.Status == 4 {
  198. rectifyedData[item.CreateTime.Format(conf.SysTimeformMonth)] = rectifyedData[item.CreateTime.Format(conf.SysTimeformMonth)] + 1
  199. }
  200. }
  201. // 整改占总数比例 - 完成整改/提交巡检
  202. surveryData := map[string]interface{}{
  203. "rectifylist": rectifylist,
  204. "rectifyTotal": rectifyTotal,
  205. "approvalTotal": approvalTotal,
  206. "rectifyedTotal": rectifyedTotal,
  207. "submitData": submitData,
  208. "rectifyedData": rectifyedData,
  209. }
  210. return surveryData
  211. }
  212. // 规则校验
  213. func (s *safeService) ValidRule(ctx iris.Context) (viewmodels.Safe, error) {
  214. safeVaild := viewmodels.Safe{}
  215. // fmt.Println("---------------------------safeVaild", safeVaild)
  216. if ctx.Method() == "GET" {
  217. err := ctx.ReadForm(&safeVaild)
  218. if err != nil {
  219. log.Println("safe-ValidRule-ReadForm转换异常, error=", err)
  220. return safeVaild, err
  221. }
  222. if ctx.Path() == s.validDetail {
  223. // 一样要传id,所以用delete的方法判断
  224. err = safeVaild.ValidateDelete()
  225. } else {
  226. err = safeVaild.ValidateList()
  227. }
  228. return safeVaild, err
  229. }
  230. if ctx.Method() == "POST" {
  231. err := ctx.ReadJSON(&safeVaild)
  232. if err != nil {
  233. log.Println("safe-ValidRule-ReadJson转换异常, error=", err)
  234. return safeVaild, err
  235. }
  236. err = safeVaild.ValidateCreate()
  237. return safeVaild, err
  238. // if ctx.Path() == s.validCreate {
  239. // }
  240. // if ctx.Path() == s.validFile {
  241. // err = safeVaild.ValidateFile()
  242. // return safeVaild, err
  243. // }
  244. }
  245. if ctx.Method() == "PUT" {
  246. err := ctx.ReadForm(&safeVaild)
  247. if err != nil {
  248. log.Println("safe-ValidRule-ReadForm转换异常, error=", err)
  249. return safeVaild, err
  250. }
  251. err = safeVaild.ValidateDelete()
  252. return safeVaild, err
  253. }
  254. return safeVaild, nil
  255. }