worksitenode.go 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. package worksitenode
  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/worker"
  11. "zhiyuan/services/work/worknode"
  12. "zhiyuan/services/work/worksite"
  13. )
  14. var WorkSiteNode models.WorkSiteNode
  15. func Add(form form.WorkSiteNodeAdd, adminID int) (int64, error) {
  16. worksiteInfo, err := worksite.GetInfoByID(form.SiteId, nil, nil)
  17. if worksiteInfo == nil {
  18. return 0, errors.New("invalid worksite id")
  19. }
  20. if worksiteInfo.State != 0 {
  21. return 0, errors.New("项目已开工")
  22. }
  23. if form.StartTime > form.EndTime ||
  24. form.StartTime < worksiteInfo.StartTime ||
  25. form.EndTime < worksiteInfo.StartTime ||
  26. form.StartTime > worksiteInfo.EndTime ||
  27. form.EndTime > worksiteInfo.EndTime {
  28. return 0, errors.New("工期设置有误")
  29. }
  30. worknodeInfo, err := worknode.GetInfoByID(form.NodeId, nil, nil)
  31. if worknodeInfo == nil || worknodeInfo.State == 0 {
  32. return 0, errors.New("invalid worknode id")
  33. }
  34. workSiteNodeMap := map[string]interface{}{
  35. "`site_id`": form.SiteId,
  36. "`node_id`": form.NodeId,
  37. "`name`": form.Name,
  38. "`starttime`": form.StartTime,
  39. "`endtime`": form.EndTime,
  40. "`process_ids`": form.ProcessIds,
  41. "`return_visit_id`": form.ReturnVisitID,
  42. "`quality_accept_id`": form.QualityAcceptID,
  43. "`mark`": form.Mark,
  44. }
  45. workSiteNodeID, err := db.InsertOne(WorkSiteNode.TableName(), workSiteNodeMap)
  46. if err != nil {
  47. return 0, nil
  48. }
  49. return workSiteNodeID, nil
  50. }
  51. func EditByID(form form.WorkSiteNodeEdit, id int, adminID int) error {
  52. info, err := GetInfoByID(id, nil, nil)
  53. if info == nil {
  54. return errors.New("invalid id")
  55. }
  56. if info.State == 4 {
  57. return errors.New("节点已验收")
  58. }
  59. worksiteInfo, err := worksite.GetInfoByID(info.SiteId, nil, nil)
  60. if worksiteInfo == nil {
  61. return errors.New("invalid worksite id")
  62. }
  63. if worksiteInfo.State != 0 {
  64. return errors.New("项目已开工")
  65. }
  66. if form.StartTime > form.EndTime ||
  67. form.StartTime < worksiteInfo.StartTime ||
  68. form.EndTime < worksiteInfo.StartTime ||
  69. form.StartTime > worksiteInfo.EndTime ||
  70. form.EndTime > worksiteInfo.EndTime {
  71. return errors.New("工期设置有误")
  72. }
  73. workSiteNodeMap := map[string]interface{}{
  74. "`name`": form.Name,
  75. "`starttime`": form.StartTime,
  76. "`endtime`": form.EndTime,
  77. "`process_ids`": form.ProcessIds,
  78. "`return_visit_id`": form.ReturnVisitID,
  79. "`quality_accept_id`": form.QualityAcceptID,
  80. "`mark`": form.Mark,
  81. }
  82. _, err = db.Update(WorkSiteNode.TableName(), map[string]interface{}{"id": id}, workSiteNodeMap)
  83. return err
  84. }
  85. func EditQualityTimeByID(form form.WorkSiteNodeQualityTime, id int) error {
  86. info, err := GetInfoByID(id, nil, nil)
  87. if info == nil {
  88. return errors.New("invalid id")
  89. }
  90. workSiteNodeMap := map[string]interface{}{
  91. "`quality_time`": form.QualityTime,
  92. }
  93. _, err = db.Update(WorkSiteNode.TableName(), map[string]interface{}{"id": id}, workSiteNodeMap)
  94. return err
  95. }
  96. func QualityCheck(id int, adminID int) error {
  97. info, err := GetInfoByID(id, nil, nil)
  98. if info == nil {
  99. return errors.New("invalid id")
  100. }
  101. workSiteNodeMap := map[string]interface{}{
  102. "`quality_id`": adminID,
  103. "`quality_at`": time.Now().Unix(),
  104. }
  105. _, err = db.Update(WorkSiteNode.TableName(), map[string]interface{}{"id": id}, workSiteNodeMap)
  106. return err
  107. }
  108. func DeleteByID(id int, adminID int) error {
  109. info, _ := GetInfoByID(id, nil, nil)
  110. if info == nil {
  111. return errors.New("invalid id")
  112. }
  113. worksiteInfo, _ := worksite.GetInfoByID(info.SiteId, nil, nil)
  114. if worksiteInfo == nil {
  115. return errors.New("invalid worksite id")
  116. }
  117. if worksiteInfo.State != 0 {
  118. return errors.New("项目已开工")
  119. }
  120. _, err := db.DeleteSoft(WorkSiteNode.TableName(), map[string]interface{}{"id": id})
  121. return err
  122. }
  123. func DispatchByID(form form.WorkSiteNodeWorkerID, id int, adminID int) error {
  124. info, _ := GetInfoByID(id, nil, nil)
  125. if info == nil {
  126. return errors.New("invalid id")
  127. }
  128. //if info.State == 4 {
  129. // return errors.New("节点已验收")
  130. //}
  131. //if info.WorkerId != 0 {
  132. // return errors.New("已指派工人")
  133. //}
  134. worknodeInfo, _ := worknode.GetInfoByID(info.NodeId, nil, nil)
  135. if worknodeInfo == nil {
  136. return errors.New("invalid worknode id")
  137. }
  138. worksiteInfo, _ := worksite.GetInfoByID(info.SiteId, nil, nil)
  139. if worksiteInfo == nil {
  140. return errors.New("invalid worksite id")
  141. }
  142. //if worksiteInfo.ManagerId != adminID {
  143. // return errors.New("账号权限有误")
  144. //}
  145. if worksiteInfo.State == 2 {
  146. return errors.New("项目已完工")
  147. }
  148. if typeInfo, _ := worker.GetOneRaw(map[string]string{"where": "id={{worker_id}} AND FIND_IN_SET({{type_id}}, type_ids)"}, map[string]interface{}{"type_id": worknodeInfo.WorkTypeId, "worker_id": form.WorkerID}, nil); typeInfo == nil {
  149. return errors.New("工人工种有误")
  150. }
  151. workSiteNodeMap := map[string]interface{}{
  152. "`worker_id`": form.WorkerID,
  153. }
  154. _, err := db.Update(WorkSiteNode.TableName(), map[string]interface{}{"id": id}, workSiteNodeMap)
  155. return err
  156. }
  157. func StartByID(id int, adminID int) error {
  158. info, err := GetInfoByID(id, nil, nil)
  159. if info == nil {
  160. return errors.New("invalid id")
  161. }
  162. if info.State != 0 {
  163. return errors.New("节点状态有误")
  164. }
  165. worksiteInfo, err := worksite.GetInfoByID(info.SiteId, nil, nil)
  166. if worksiteInfo == nil {
  167. return errors.New("invalid worksite id")
  168. }
  169. if worksiteInfo.State == 3 {
  170. return errors.New("项目已停工")
  171. }
  172. now := time.Now().Unix()
  173. if worksiteInfo.State == 0 {
  174. _, err = db.Update(worksiteInfo.TableName(), map[string]interface{}{"id": worksiteInfo.ID}, map[string]interface{}{
  175. "real_starttime": now,
  176. "state": 1,
  177. })
  178. if err != nil {
  179. return err
  180. }
  181. }
  182. _, err = db.Update(info.TableName(), map[string]interface{}{"id": info.ID}, map[string]interface{}{
  183. "real_starttime": now,
  184. "state": 1,
  185. })
  186. if err != nil {
  187. return err
  188. }
  189. return nil
  190. }
  191. func ReturnVisitByID(forms form.ReturnVisitFrom, id int, adminID int) error {
  192. info, err := GetInfoByID(id, nil, nil)
  193. if info == nil {
  194. return errors.New("invalid id")
  195. }
  196. //if info.State != 3 {
  197. // return errors.New("节点状态有误")
  198. //}
  199. if info.ReturnVisitID == 0 {
  200. return errors.New("节点无需回访")
  201. }
  202. //if info.ReturnVisitContent != "" {
  203. // return errors.New("节点已回访")
  204. //}
  205. worksiteInfo, err := worksite.GetInfoByID(info.SiteId, nil, nil)
  206. if worksiteInfo == nil {
  207. return errors.New("invalid worksite id")
  208. }
  209. //if worksiteInfo.State != 1 {
  210. // return errors.New("项目未开工")
  211. //}
  212. data := map[string]interface{}{
  213. "return_visit_content": utils.JsonEncode(forms.ReturnVisit),
  214. }
  215. if info.ReturnVisitContent == "" {
  216. data["return_visit_admin_id"] = adminID
  217. data["return_visit_time"] = time.Now().Unix()
  218. }
  219. _, err = db.Update(info.TableName(), map[string]interface{}{"id": info.ID}, data)
  220. if err != nil {
  221. return err
  222. }
  223. return nil
  224. }
  225. func Count(where map[string]interface{}) (int64, error) {
  226. return db.Count(WorkSiteNode.TableName(), where)
  227. }
  228. func CountRaw(where string, param map[string]interface{}) (int64, error) {
  229. query := "`zy_work_site_node` WHERE " + where
  230. return db.CountRaw(query, param)
  231. }
  232. func GetList(where map[string]interface{}, fields []string, page app.Page, retVal interface{}) ([]*models.WorkSiteNode, error) {
  233. if page.PageNum > 0 && page.PageSize > 0 {
  234. where["_limit"] = db.GetOffset(uint(page.PageNum), uint(page.PageSize))
  235. }
  236. return WorkSiteNode.GetMulti(where, fields, retVal)
  237. }
  238. func GetWorkSiteNodesRaw(where map[string]string, param map[string]interface{}, retVal interface{}) error {
  239. field := "SELECT `zy_work_site_node`.*, `zy_work_node`.`color`, `zy_work_node`.`logo`, `zy_worker`.`name` as `worker_name`, `zy_worker`.`phone` as `worker_phone`, `zy_admin`.`username` as `return_visit_name`, `zy_admin`.`phone` as `return_visit_phone`, `zy_admin`.`headimgurl` as `return_visit_headimgurl` FROM `zy_work_site_node` left join `zy_work_node` on `zy_work_node`.`id` = `zy_work_site_node`.`node_id` left join `zy_worker` on `zy_worker`.`id` = `zy_work_site_node`.`worker_id` left join `zy_admin` on `zy_admin`.`id` = `zy_work_site_node`.`return_visit_admin_id` "
  240. return db.GetMultiRaw(field, where, param, retVal)
  241. }
  242. func GetOne(where map[string]interface{}, fields []string, retVal interface{}) (*models.WorkSiteNode, error) {
  243. return WorkSiteNode.GetOne(where, fields, retVal)
  244. }
  245. func GetWorkSiteNodeOne(where map[string]string, param map[string]interface{}, retVal interface{}) error {
  246. field := "SELECT `zy_work_site_node`.*, `zy_work_node`.`color`, `zy_work_node`.`logo`, `zy_work_node`.`work_type_id`, `zy_worker`.`name` as `worker_name`, `zy_worker`.`phone` as `worker_phone`, `zy_work_type`.`name` as `work_type_name`, `zy_admin`.`username` as `return_visit_name`, `zy_admin`.`phone` as `return_visit_phone`, `zy_admin`.`headimgurl` as `return_visit_headimgurl` FROM `zy_work_site_node` left join `zy_work_node` on `zy_work_node`.`id` = `zy_work_site_node`.`node_id` left join `zy_worker` on `zy_worker`.`id` = `zy_work_site_node`.`worker_id` left join `zy_admin` on `zy_admin`.`id` = `zy_work_site_node`.`return_visit_admin_id` left join `zy_work_type` on `zy_work_type`.`id` = `zy_work_node`.`work_type_id` "
  247. where["_page_size"] = utils.ToStr(1)
  248. where["_page_num"] = utils.ToStr(1)
  249. where["_group_by"] = "`zy_work_site_node`.`id`"
  250. return db.GetMultiRaw(field, where, param, retVal)
  251. }
  252. func GetWorkSiteNodeByID(id int, retVal interface{}) error {
  253. where := map[string]string{
  254. "where": "`zy_work_site_node`.`id` = {{id}}",
  255. }
  256. param := map[string]interface{}{"id": id}
  257. return GetWorkSiteNodeOne(where, param, retVal)
  258. }
  259. func GetInfoByID(id int, fields []string, retVal interface{}) (*models.WorkSiteNode, error) {
  260. return GetOne(map[string]interface{}{"id": id}, fields, retVal)
  261. }