worksiteclock.go 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. package worksiteclock
  2. import (
  3. "errors"
  4. "time"
  5. "zhiyuan/models"
  6. "zhiyuan/pkg/app"
  7. "zhiyuan/pkg/db"
  8. "zhiyuan/pkg/utils"
  9. "zhiyuan/services/form"
  10. "zhiyuan/services/work/worksite"
  11. "zhiyuan/services/work/worksitenode"
  12. )
  13. var WorkSiteClock models.WorkSiteClock
  14. func AddWorker(form form.WorkSiteClockAdd, workerID int) (int64, error) {
  15. worksitenodeInfo, err := worksitenode.GetInfoByID(form.SiteNodeId, nil, nil)
  16. if worksitenodeInfo == nil {
  17. return 0, errors.New("invalid worksitenode id")
  18. }
  19. if worksitenodeInfo.WorkerId != workerID {
  20. return 0, errors.New("账号权限有误")
  21. }
  22. if worksitenodeInfo.State == 4 {
  23. return 0, errors.New("节点已验收")
  24. }
  25. now := time.Now().Unix()
  26. if now < int64(worksitenodeInfo.StartTime) ||
  27. now > int64(worksitenodeInfo.EndTime) {
  28. return 0, errors.New("不在节点工期内")
  29. }
  30. worksiteInfo, err := worksite.GetInfoByID(worksitenodeInfo.SiteId, nil, nil)
  31. if worksiteInfo == nil {
  32. return 0, errors.New("invalid worksite id")
  33. }
  34. if worksiteInfo.State == 2 {
  35. return 0, errors.New("项目已完工")
  36. }
  37. clocks, err := WorkSiteClock.GetMulti(map[string]interface{}{
  38. "`site_id`": worksitenodeInfo.SiteId,
  39. "`site_node_id`": form.SiteNodeId,
  40. "`staff_type`": 0,
  41. "`staff_id`": workerID,
  42. "`created_at` >": "unix_timestamp(CURDATE())",
  43. }, nil, nil)
  44. if err != nil {
  45. return 0, errors.New("invalid")
  46. }
  47. if worksiteInfo.State == 0 {
  48. _, err = db.Update(worksiteInfo.TableName(), map[string]interface{}{"id": worksiteInfo.ID}, map[string]interface{}{"state": 1})
  49. if err != nil {
  50. return 0, nil
  51. }
  52. }
  53. if worksitenodeInfo.State == 0 {
  54. _, err = db.Update(worksitenodeInfo.TableName(), map[string]interface{}{"id": worksitenodeInfo.ID}, map[string]interface{}{"state": 1})
  55. if err != nil {
  56. return 0, nil
  57. }
  58. }
  59. workSiteClockMap := map[string]interface{}{
  60. "`site_id`": worksitenodeInfo.SiteId,
  61. "`site_node_id`": form.SiteNodeId,
  62. "`staff_type`": 0,
  63. "`staff_id`": workerID,
  64. "`pictures`": form.Pictures,
  65. "`content`": form.Content,
  66. "`type`": len(clocks) % 2,
  67. }
  68. workSiteClockID, err := db.InsertOne(WorkSiteClock.TableName(), workSiteClockMap)
  69. if err != nil {
  70. return 0, nil
  71. }
  72. return workSiteClockID, nil
  73. }
  74. func AddAdmin(form form.WorkSiteClockAdd, adminID int) (int64, error) {
  75. worksitenodeInfo, err := worksitenode.GetInfoByID(form.SiteNodeId, nil, nil)
  76. if worksitenodeInfo == nil {
  77. return 0, errors.New("invalid worksitenode id")
  78. }
  79. if worksitenodeInfo.State == 4 {
  80. return 0, errors.New("节点已验收")
  81. }
  82. now := time.Now().Unix()
  83. if now < int64(worksitenodeInfo.StartTime) ||
  84. now > int64(worksitenodeInfo.EndTime) {
  85. return 0, errors.New("不在节点工期内")
  86. }
  87. worksiteInfo, err := worksite.GetInfoByID(worksitenodeInfo.SiteId, nil, nil)
  88. if worksiteInfo == nil {
  89. return 0, errors.New("invalid worksite id")
  90. }
  91. if worksiteInfo.State == 2 {
  92. return 0, errors.New("项目已完工")
  93. }
  94. if worksiteInfo.ManagerId != adminID || worksiteInfo.DesignerId != adminID {
  95. return 0, errors.New("账号权限有误")
  96. }
  97. staff_type := 2
  98. if worksiteInfo.ManagerId == adminID {
  99. staff_type = 1
  100. }
  101. clocks, err := WorkSiteClock.GetMulti(map[string]interface{}{
  102. "`site_id`": worksitenodeInfo.SiteId,
  103. "`site_node_id`": form.SiteNodeId,
  104. "`staff_type`": staff_type,
  105. "`staff_id`": adminID,
  106. "`created_at` >": "unix_timestamp(CURDATE())",
  107. }, nil, nil)
  108. if err != nil {
  109. return 0, errors.New("invalid")
  110. }
  111. if worksiteInfo.State == 0 {
  112. _, err = db.Update(worksiteInfo.TableName(), map[string]interface{}{"id": worksiteInfo.ID}, map[string]interface{}{"state": 1})
  113. if err != nil {
  114. return 0, nil
  115. }
  116. }
  117. if worksitenodeInfo.State == 0 {
  118. _, err = db.Update(worksitenodeInfo.TableName(), map[string]interface{}{"id": worksitenodeInfo.ID}, map[string]interface{}{"state": 1})
  119. if err != nil {
  120. return 0, nil
  121. }
  122. }
  123. workSiteClockMap := map[string]interface{}{
  124. "`site_id`": worksitenodeInfo.SiteId,
  125. "`site_node_id`": form.SiteNodeId,
  126. "`staff_type`": staff_type,
  127. "`staff_id`": adminID,
  128. "`pictures`": form.Pictures,
  129. "`content`": form.Content,
  130. "`type`": len(clocks) % 2,
  131. }
  132. workSiteClockID, err := db.InsertOne(WorkSiteClock.TableName(), workSiteClockMap)
  133. if err != nil {
  134. return 0, nil
  135. }
  136. return workSiteClockID, nil
  137. }
  138. func EditByIDWorker(form form.WorkSiteClockEdit, id int, workerID int) error {
  139. info, err := GetInfoByID(id, nil, nil)
  140. if info == nil {
  141. return errors.New("invalid id")
  142. }
  143. if info.State == 1 {
  144. return errors.New("该日报已审核")
  145. }
  146. if info.StaffType != 0 || info.StaffId != workerID {
  147. return errors.New("账号权限有误")
  148. }
  149. worksitenodeInfo, err := worksitenode.GetInfoByID(info.SiteNodeId, nil, nil)
  150. if worksitenodeInfo == nil {
  151. return errors.New("invalid worksitenode id")
  152. }
  153. if worksitenodeInfo.WorkerId != workerID {
  154. return errors.New("账号权限有误")
  155. }
  156. if worksitenodeInfo.State == 4 {
  157. return errors.New("节点已验收")
  158. }
  159. workSiteClockMap := map[string]interface{}{
  160. "`pictures`": form.Pictures,
  161. "`content`": form.Content,
  162. }
  163. _, err = db.Update(WorkSiteClock.TableName(), map[string]interface{}{"id": id}, workSiteClockMap)
  164. return err
  165. }
  166. func EditByIDAdmin(form form.WorkSiteClockEdit, id int, adminID int) error {
  167. info, err := GetInfoByID(id, nil, nil)
  168. if info == nil {
  169. return errors.New("invalid id")
  170. }
  171. if info.State == 1 {
  172. return errors.New("该日报已审核")
  173. }
  174. if info.StaffType == 0 || info.StaffId != adminID {
  175. return errors.New("账号权限有误")
  176. }
  177. worksitenodeInfo, err := worksitenode.GetInfoByID(info.SiteNodeId, nil, nil)
  178. if worksitenodeInfo == nil {
  179. return errors.New("invalid worksitenode id")
  180. }
  181. if worksitenodeInfo.State == 4 {
  182. return errors.New("节点已验收")
  183. }
  184. workSiteClockMap := map[string]interface{}{
  185. "`pictures`": form.Pictures,
  186. "`content`": form.Content,
  187. }
  188. _, err = db.Update(WorkSiteClock.TableName(), map[string]interface{}{"id": id}, workSiteClockMap)
  189. return err
  190. }
  191. func DeleteByID(id int) error {
  192. info, _ := GetInfoByID(id, nil, nil)
  193. if info == nil {
  194. return errors.New("invalid id")
  195. }
  196. _, err := db.DeleteSoft(WorkSiteClock.TableName(), map[string]interface{}{"id": id})
  197. return err
  198. }
  199. func VerifyByID(id int, adminID int) error {
  200. info, err := GetInfoByID(id, nil, nil)
  201. if info == nil {
  202. return errors.New("invalid worker id")
  203. }
  204. if info.State == 1 {
  205. return errors.New("该日报已审核")
  206. }
  207. worksiteInfo, err := worksite.GetInfoByID(info.SiteId, nil, nil)
  208. if worksiteInfo == nil {
  209. return errors.New("invalid worksite id")
  210. }
  211. if worksiteInfo.ManagerId != adminID {
  212. return errors.New("账号权限有误")
  213. }
  214. workSiteClockMap := map[string]interface{}{
  215. "state": 1,
  216. }
  217. _, err = db.Update(WorkSiteClock.TableName(), map[string]interface{}{"id": id}, workSiteClockMap)
  218. return err
  219. }
  220. func Count(where map[string]interface{}) (int64, error) {
  221. return db.Count(WorkSiteClock.TableName(), where)
  222. }
  223. func CountRaw(where string, param map[string]interface{}) (int64, error) {
  224. query := "`zy_work_site_clock` WHERE " + where
  225. return db.CountRaw(query, param)
  226. }
  227. func GetList(where map[string]interface{}, fields []string, page app.Page, retVal interface{}) ([]*models.WorkSiteClock, error) {
  228. if page.PageNum > 0 && page.PageSize > 0 {
  229. where["_limit"] = db.GetOffset(uint(page.PageNum), uint(page.PageSize))
  230. }
  231. return WorkSiteClock.GetMulti(where, fields, retVal)
  232. }
  233. func GetWorkSiteClocksRaw(where map[string]string, param map[string]interface{}, retVal interface{}) error {
  234. field := "SELECT `zy_work_site_clock`.*, IF(`zy_work_site_clock`.`staff_type` = 0,`zy_worker`.`name`,`zy_admin`.`username`) as `staff_name`, IF(`zy_work_site_clock`.`staff_type` = 0,`zy_worker`.`phone`,`zy_admin`.`phone`) as `staff_phone`, `zy_work_site_node`.`name` as `node_name` FROM `zy_work_site_clock` left join `zy_worker` on `zy_work_site_clock`.`staff_type` = 0 AND `zy_worker`.`id` = `zy_work_site_clock`.`staff_id` left join `zy_admin` on `zy_work_site_clock`.`staff_type` <> 0 AND `zy_admin`.`id` = `zy_work_site_clock`.`staff_id` left join `zy_work_site_node` on `zy_work_site_node`.`id` = `zy_work_site_clock`.`site_node_id` "
  235. return db.GetMultiRaw(field, where, param, retVal)
  236. }
  237. func GetOne(where map[string]interface{}, fields []string, retVal interface{}) (*models.WorkSiteClock, error) {
  238. return WorkSiteClock.GetOne(where, fields, retVal)
  239. }
  240. func GetWorkSiteClockOne(where map[string]string, param map[string]interface{}, retVal interface{}) error {
  241. field := "SELECT `zy_work_site_clock`.*, IF(`zy_work_site_clock`.`staff_type` = 0,`zy_worker`.`name`,`zy_admin`.`username`) as `staff_name`, IF(`zy_work_site_clock`.`staff_type` = 0,`zy_worker`.`phone`,`zy_admin`.`phone`) as as `staff_phone`, `zy_work_site_node`.`name` as `node_name` FROM `zy_work_site_clock` left join `zy_worker` on `zy_work_site_clock`.`staff_type` = 0 AND `zy_worker`.`id` = `zy_work_site_clock`.`staff_id` left join `zy_admin` on `zy_work_site_clock`.`staff_type` <> 0 AND `zy_admin`.`id` = `zy_work_site_clock`.`staff_id` left join `zy_work_site_node` on `zy_work_site_node`.`id` = `zy_work_site_clock`.`site_node_id` "
  242. where["_page_size"] = utils.ToStr(1)
  243. where["_page_num"] = utils.ToStr(1)
  244. return db.GetMultiRaw(field, where, param, retVal)
  245. }
  246. func GetWorkSiteClockByID(id int, retVal interface{}) error {
  247. where := map[string]string{
  248. "where": "`zy_work_site_clock`.`id` = {{id}}",
  249. }
  250. param := map[string]interface{}{"id": id}
  251. return GetWorkSiteClockOne(where, param, retVal)
  252. }
  253. func GetInfoByID(id int, fields []string, retVal interface{}) (*models.WorkSiteClock, error) {
  254. return GetOne(map[string]interface{}{"id": id}, fields, retVal)
  255. }