repair.go 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. package order
  2. import (
  3. "errors"
  4. "fmt"
  5. "time"
  6. "zhiyuan/models"
  7. "zhiyuan/models/final"
  8. "zhiyuan/pkg/app"
  9. "zhiyuan/pkg/db"
  10. orderParam "zhiyuan/pkg/param/order"
  11. "zhiyuan/pkg/utils"
  12. "zhiyuan/services/admin"
  13. admin2 "zhiyuan/services/final/admin"
  14. "zhiyuan/services/form"
  15. "github.com/gogf/gf/v2/os/gtime"
  16. )
  17. var ASOrderRepair models.ASOrderRepair
  18. func GetRepairList(where map[string]interface{}, fields []string, retVal interface{}) ([]*models.ASOrderRepair, error) {
  19. return ASOrderRepair.GetMulti(where, fields, retVal)
  20. }
  21. func GetRepairInfo(where map[string]interface{}, field []string, retVal interface{}) (*models.ASOrderRepair, error) {
  22. return ASOrderRepair.GetOne(where, field, retVal)
  23. }
  24. func GetCountWidthOrder(where string, param map[string]interface{}) (int64, error) {
  25. sql := "zy_as_order_repair r LEFT JOIN zy_as_order o ON o.id=r.order_id LEFT JOIN zy_as_order_detail d ON o.id=d.order_id WHERE " + where
  26. return db.CountRaw(sql, param)
  27. }
  28. func GetListWidthOrder(where map[string]string, param map[string]interface{}, page app.Page, retVal interface{}) error {
  29. if page.PageNum > 0 && page.PageSize > 0 {
  30. where["_page_num"] = db.ToString(page.PageNum)
  31. where["_page_size"] = db.ToString(page.PageSize)
  32. }
  33. sql := "SELECT e.*, " +
  34. "o.site_id,o.pkg_id,o.pick_id,o.cycle,o.example_at,o.order_acceptance_at,o.worker_start_at,o.worker_confirm_at,o.manager_confirm_at," +
  35. "o.room_type,o.worker_id,o.manager_id,o.worker_status,o.manager_status,o.item_status,o.order_status,o.pictures,o.confirm_type,o.acceptance_failed_remark," +
  36. "p.pick_name,p.standard," +
  37. "s.village as village" +
  38. " FROM " +
  39. " zy_work_extension e " +
  40. " LEFT JOIN zy_mat_pick_work o ON o.id=e.work_id " +
  41. " LEFT JOIN zy_mat_pick p ON p.id=o.pick_id " +
  42. " LEFT JOIN zy_final_site s ON s.id=o.site_id "
  43. return db.GetMultiRaw(sql, where, param, retVal)
  44. }
  45. func CountRepair(where map[string]interface{}) (int64, error) {
  46. return db.Count(ASOrderRepair.TableName(), where)
  47. }
  48. func CountExtension(where map[string]interface{}) (int64, error) {
  49. return db.Count(final.WorkExtension{}.TableName(), where)
  50. }
  51. func Repair(form form.OrderRepair, orderID int) error {
  52. orderInfo, _ := GetInfoByID(orderID, nil, nil)
  53. if orderInfo == nil {
  54. return errors.New("工单不存在")
  55. }
  56. if !utils.IsContain(orderParam.Allow.Feedback, orderInfo.State) {
  57. return errors.New("工单状态有误")
  58. }
  59. if form.Leader > 0 && form.Leader != orderInfo.Leader {
  60. return errors.New("权限有误")
  61. }
  62. formatTime := utils.DateParseUnix(form.FinishedAt, "Y-m-d H:i")
  63. if formatTime == 0 {
  64. return errors.New("日期格式有误")
  65. }
  66. if !admin.CheckAuth([]string{"aftersale:order:repair_no_pic"}, form.Leader) && form.Pics == "" {
  67. return errors.New("请上传现场图片")
  68. }
  69. supervisorInfo, _ := admin.GetOne(map[string]interface{}{"id": form.Supervisor}, nil, nil)
  70. audit_type := 0
  71. if orderInfo.StartTime != 0 {
  72. if form.State == 1 {
  73. audit_type = 2
  74. } else {
  75. now := time.Now().Unix()
  76. if now < orderInfo.EndTime-24*60*60 && int64(formatTime) > orderInfo.EndTime {
  77. audit_type = 1
  78. }
  79. }
  80. }
  81. // 已有记录
  82. repairMap := map[string]interface{}{
  83. "order_id": orderID,
  84. "state": form.State,
  85. "duration": form.Duration,
  86. "content": form.Content,
  87. "worker_name": supervisorInfo.Username,
  88. "worker_phone": supervisorInfo.Phone,
  89. "supervisor": form.Supervisor,
  90. "pics": form.Pics,
  91. "finished_at": formatTime,
  92. "audit_type": audit_type,
  93. }
  94. repairID, err := db.InsertOne(ASOrderRepair.TableName(), repairMap)
  95. if err != nil {
  96. return errors.New("添加反馈失败")
  97. }
  98. if _, err = db.Update(ASOrder.TableName(), map[string]interface{}{"id": orderID}, map[string]interface{}{"repair_id": repairID}); err != nil {
  99. return errors.New("添加反馈失败")
  100. }
  101. AddTypeVisit(orderID, time.Now().Unix(), 3)
  102. AddTypeVisit(orderID, int64(formatTime), 4)
  103. return nil
  104. }
  105. func GetRepairInfoByID(id int, fields []string, retVal interface{}) (*models.ASOrderRepair, error) {
  106. return ASOrderRepair.GetOne(map[string]interface{}{"id": id}, fields, retVal)
  107. }
  108. func RepairCheck(repairID int, state int, adminID int, remark string) error {
  109. if state == 0 {
  110. return errors.New("状态有误")
  111. }
  112. repairInfo, _ := GetRepairInfo(map[string]interface{}{"id": repairID}, nil, nil)
  113. if repairInfo == nil {
  114. return errors.New("维修不存在")
  115. }
  116. if repairInfo.AuditType == 0 {
  117. return errors.New("维修无需审核")
  118. }
  119. if repairInfo.AuditState != 0 {
  120. return errors.New("维修已审核")
  121. }
  122. orderInfo, _ := GetInfoByID(repairInfo.OrderID, nil, nil)
  123. if orderInfo == nil {
  124. return errors.New("工单不存在")
  125. }
  126. if repairInfo.AuditType == 1 {
  127. if state == 1 {
  128. _, err := db.Update(ASOrder.TableName(), map[string]interface{}{"id": repairInfo.OrderID}, map[string]interface{}{"end_time": repairInfo.FinishedAt})
  129. if err != nil {
  130. return err
  131. }
  132. }
  133. } else if repairInfo.AuditType == 2 {
  134. if state == 1 {
  135. data := map[string]interface{}{"finish_state": 2, "finish_time": repairInfo.CreatedAt}
  136. if int64(repairInfo.CreatedAt) > orderInfo.EndTime {
  137. data["incomplete_count"] = orderInfo.IncompleteCount + 1
  138. }
  139. _, err := db.Update(ASOrder.TableName(), map[string]interface{}{"id": repairInfo.OrderID}, data)
  140. if err != nil {
  141. return err
  142. }
  143. } else {
  144. //typeInfo, _ := aftersale.GetTypeOne(map[string]interface{}{"id": orderInfo.MainType}, nil, nil)
  145. //now := time.Now()
  146. data := map[string]interface{}{
  147. "incomplete_count": orderInfo.IncompleteCount + 1,
  148. //"end_time": now.AddDate(0, 0, typeInfo.RepairDays).Unix(),
  149. }
  150. _, err := db.Update(ASOrder.TableName(), map[string]interface{}{"id": repairInfo.OrderID}, data)
  151. if err != nil {
  152. return err
  153. }
  154. }
  155. }
  156. _, err := db.Update(ASOrderRepair.TableName(), map[string]interface{}{"id": repairID}, map[string]interface{}{
  157. "audit_state": state,
  158. "audit_id": adminID,
  159. "audit_at": time.Now().Unix(),
  160. "audit_remark": remark,
  161. })
  162. if err != nil {
  163. return err
  164. }
  165. return nil
  166. }
  167. func ExtensionCheck(ExtensionID int, state int, adminID int, remark string) error {
  168. if state == 0 {
  169. return errors.New("状态有误")
  170. }
  171. var extensionInfo *final.WorkExtension
  172. err := db.GetOne(final.WorkExtension{}.TableName(), map[string]interface{}{"id": ExtensionID}, nil, &extensionInfo)
  173. if extensionInfo == nil {
  174. return errors.New("工单不存在")
  175. }
  176. if extensionInfo.AuditState != 0 {
  177. return errors.New("工单已审核")
  178. }
  179. workInfo, _ := GetWorkInfoByID(extensionInfo.WorkId, nil, nil)
  180. if workInfo == nil {
  181. return errors.New("工单不存在")
  182. }
  183. fmt.Println("------------workInfo-----------", workInfo)
  184. //加载节假日
  185. holidays := admin2.LoadHolidays()
  186. extensionDay, err := admin2.CalculateEndDate(holidays, gtime.New(workInfo.ExampleAt).Format("Y-m-d"), extensionInfo.Duration)
  187. if err != nil {
  188. return err
  189. }
  190. auditState := 2
  191. if state == 1 {
  192. //1 修改extension表状态
  193. auditState = 1
  194. //节点延期
  195. if extensionInfo.Type == 0 {
  196. _, err := db.Exec("UPDATE zy_mat_pick_work SET example_at = ? WHERE id= ?", []interface{}{
  197. extensionDay,
  198. extensionInfo.WorkId,
  199. })
  200. if err != nil {
  201. fmt.Println(err)
  202. return err
  203. }
  204. } else {
  205. //整体延期
  206. _, err := db.Exec("UPDATE zy_mat_pick_work SET example_at = DATE_ADD(example_at, INTERVAL ? DAY) WHERE site_id= ?", []interface{}{
  207. extensionInfo.Duration,
  208. workInfo.SiteId,
  209. })
  210. if err != nil {
  211. fmt.Println(err)
  212. return err
  213. }
  214. }
  215. }
  216. //更新extension表状态
  217. _, err = db.Exec("UPDATE zy_work_extension SET "+
  218. "audit_id = ?,"+
  219. "audit_at = ?, "+
  220. "audit_remark = ?, "+
  221. "audit_state = ? "+
  222. "WHERE id= ?", []interface{}{
  223. adminID,
  224. time.Now().Unix(),
  225. remark,
  226. auditState,
  227. ExtensionID,
  228. })
  229. if err != nil {
  230. fmt.Println(err)
  231. return err
  232. }
  233. return nil
  234. }