report_approve.go 38 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075
  1. package services
  2. import (
  3. "eta/eta_api/models"
  4. "eta/eta_api/models/report_approve"
  5. "eta/eta_api/models/smart_report"
  6. "eta/eta_api/services/alarm_msg"
  7. "eta/eta_api/utils"
  8. "fmt"
  9. "sort"
  10. "time"
  11. )
  12. // GetReportClassifyTreeRecursive 递归获取报告分类树
  13. func GetReportClassifyTreeRecursive(list []*models.Classify, parentId int) []*report_approve.ReportClassifyTreeItem {
  14. res := make([]*report_approve.ReportClassifyTreeItem, 0)
  15. for _, v := range list {
  16. if v.ParentId == parentId {
  17. t := new(report_approve.ReportClassifyTreeItem)
  18. t.ClassifyId = v.Id
  19. t.ClassifyName = v.ClassifyName
  20. t.ParentId = v.ParentId
  21. t.Children = GetReportClassifyTreeRecursive(list, v.Id)
  22. res = append(res, t)
  23. }
  24. }
  25. return res
  26. }
  27. // CheckReportApproveFlowChange 校验是否可变更分类
  28. func CheckReportApproveFlowChange(reportType, classifyFirstId, classifySecondId, classifyThirdId int) (ok bool, err error) {
  29. var count int
  30. cond := ` AND classify_id_first = ? AND classify_id_second = ? AND state = ?`
  31. pars := make([]interface{}, 0)
  32. pars = append(pars, classifyFirstId, classifySecondId, models.ReportStateWaitApprove)
  33. switch reportType {
  34. case report_approve.FlowReportTypeChinese:
  35. cond += ` AND classify_id_third = ? `
  36. pars = append(pars, classifyThirdId)
  37. ct, e := models.GetReportListCount(cond, pars)
  38. if e != nil {
  39. err = fmt.Errorf("GetReportListCount err: %s", e.Error())
  40. return
  41. }
  42. count = ct
  43. case report_approve.FlowReportTypeEnglish:
  44. ct, e := models.GetEnglishReportListCount(cond, pars, "")
  45. if e != nil {
  46. err = fmt.Errorf("GetEnglishReportListCount err: %s", e.Error())
  47. return
  48. }
  49. count = ct
  50. case report_approve.FlowReportTypeSmart:
  51. ob := new(smart_report.SmartReport)
  52. ct, e := ob.GetCountByCondition(cond, pars)
  53. if e != nil {
  54. err = fmt.Errorf("SmartReport GetCountByCondition err: %s", e.Error())
  55. return
  56. }
  57. count = ct
  58. default:
  59. err = fmt.Errorf("报告类型有误")
  60. return
  61. }
  62. if count <= 0 {
  63. ok = true
  64. }
  65. return
  66. }
  67. // CheckReportOpenApprove 校验报告是否开启了审批流
  68. func CheckReportOpenApprove(reportType, firstId, secondId, thirdId int) (opening bool, err error) {
  69. // 获取审批配置
  70. confMap, e := models.GetBusinessConf()
  71. if e != nil {
  72. err = fmt.Errorf("GetBusinessConf err: %s", e.Error())
  73. return
  74. }
  75. openMap := map[string]bool{"false": false, "true": true}
  76. openApprove := openMap[confMap[models.BusinessConfIsReportApprove]]
  77. // 查询对应分类是否有审批流
  78. flowOb := new(report_approve.ReportApproveFlow)
  79. flowCond := fmt.Sprintf(` AND %s = ? AND %s = ? AND %s = ? AND %s = ?`, report_approve.ReportApproveFlowCols.ReportType, report_approve.ReportApproveFlowCols.ClassifyFirstId, report_approve.ReportApproveFlowCols.ClassifySecondId, report_approve.ReportApproveFlowCols.ClassifyThirdId)
  80. flowPars := make([]interface{}, 0)
  81. flowPars = append(flowPars, reportType, firstId, secondId, thirdId)
  82. flowItem, e := flowOb.GetItemByCondition(flowCond, flowPars, "")
  83. if e != nil && !utils.IsErrNoRow(e) {
  84. err = fmt.Errorf("ApproveFlow GetItemByCondition err: %s", e.Error())
  85. return
  86. }
  87. if flowItem != nil && flowItem.ReportApproveFlowId <= 0 {
  88. flowItem = nil
  89. }
  90. // 开启审批/有审批流
  91. if openApprove && (flowItem != nil || confMap[models.BusinessConfReportApproveType] == models.BusinessConfReportApproveTypeOther) {
  92. opening = true
  93. return
  94. }
  95. return
  96. }
  97. // CheckReportCurrState 校验报告当前应有的状态
  98. func CheckReportCurrState(reportType, firstId, secondId, thirdId, operate int) (state int, err error) {
  99. // 获取审批配置
  100. confMap, e := models.GetBusinessConf()
  101. if e != nil {
  102. err = fmt.Errorf("GetBusinessConf err: %s", e.Error())
  103. return
  104. }
  105. openMap := map[string]bool{"false": false, "true": true}
  106. openApprove := openMap[confMap[models.BusinessConfIsReportApprove]]
  107. // 查询对应分类是否有审批流
  108. flowOb := new(report_approve.ReportApproveFlow)
  109. flowCond := fmt.Sprintf(` AND %s = ? AND %s = ? AND %s = ? AND %s = ?`, report_approve.ReportApproveFlowCols.ReportType, report_approve.ReportApproveFlowCols.ClassifyFirstId, report_approve.ReportApproveFlowCols.ClassifySecondId, report_approve.ReportApproveFlowCols.ClassifyThirdId)
  110. flowPars := make([]interface{}, 0)
  111. flowPars = append(flowPars, reportType, firstId, secondId, thirdId)
  112. flowItem, e := flowOb.GetItemByCondition(flowCond, flowPars, "")
  113. if e != nil && !utils.IsErrNoRow(e) {
  114. err = fmt.Errorf("ApproveFlow GetItemByCondition err: %s", e.Error())
  115. return
  116. }
  117. if flowItem != nil && flowItem.ReportApproveFlowId <= 0 {
  118. flowItem = nil
  119. }
  120. // 开启审批/有审批流
  121. if openApprove && (flowItem != nil || confMap[models.BusinessConfReportApproveType] == models.BusinessConfReportApproveTypeOther) {
  122. // 操作为无审批的操作时, 会转为有审批的初始状态-待提交
  123. stateMap := map[int]int{
  124. models.ReportOperateAdd: models.ReportStateWaitSubmit, // 新增
  125. models.ReportOperateEdit: models.ReportStateWaitSubmit, // 编辑
  126. models.ReportOperatePublish: models.ReportStateWaitSubmit, // 发布
  127. models.ReportOperateCancelPublish: models.ReportStateWaitSubmit, // 取消发布
  128. models.ReportOperateSubmitApprove: models.ReportStateWaitApprove, // 提审
  129. models.ReportOperateCancelApprove: models.ReportStateWaitSubmit, // 撤回
  130. }
  131. state = stateMap[operate]
  132. return
  133. }
  134. // 关闭审批/分类无审批
  135. // 操作为有审批的操作时, 会转为无审批的初始状态-未发布
  136. stateMap := map[int]int{
  137. models.ReportOperateAdd: models.ReportStateUnpublished, // 新增
  138. models.ReportOperateEdit: models.ReportStateUnpublished, // 编辑
  139. models.ReportOperatePublish: models.ReportStatePublished, // 发布
  140. models.ReportOperateCancelPublish: models.ReportStateUnpublished, // 取消发布
  141. models.ReportOperateSubmitApprove: models.ReportStateUnpublished, // 提审
  142. models.ReportOperateCancelApprove: models.ReportStateUnpublished, // 撤回
  143. }
  144. state = stateMap[operate]
  145. return
  146. }
  147. // SubmitReportApprove 提交审批
  148. func SubmitReportApprove(reportType, reportId int, reportTitle string, firstId, secondId, thirdId int, sysAdminId int, sysAdminName string) (approveId int, err error) {
  149. // 默认内部审批, 如果是走的第三方审批, 那么仅修改状态
  150. confMap, e := models.GetBusinessConf()
  151. if e != nil {
  152. err = fmt.Errorf("GetBusinessConf err: %s", e.Error())
  153. return
  154. }
  155. openMap := map[string]bool{"false": false, "true": true}
  156. openApprove := openMap[confMap[models.BusinessConfIsReportApprove]]
  157. if !openApprove {
  158. err = fmt.Errorf("未开启审批")
  159. return
  160. }
  161. confApproveType := confMap[models.BusinessConfReportApproveType]
  162. if confApproveType == "" {
  163. confApproveType = models.BusinessConfReportApproveTypeEta
  164. }
  165. if confApproveType == models.BusinessConfReportApproveTypeOther {
  166. return
  167. }
  168. // 查询审批流
  169. flowOb := new(report_approve.ReportApproveFlow)
  170. flowCond := fmt.Sprintf(` AND %s = ? AND %s = ? AND %s = ? AND %s = ?`, report_approve.ReportApproveFlowCols.ReportType, report_approve.ReportApproveFlowCols.ClassifyFirstId, report_approve.ReportApproveFlowCols.ClassifySecondId, report_approve.ReportApproveFlowCols.ClassifyThirdId)
  171. flowPars := make([]interface{}, 0)
  172. flowPars = append(flowPars, reportType, firstId, secondId, thirdId)
  173. flowItem, e := flowOb.GetItemByCondition(flowCond, flowPars, "")
  174. if e != nil && !utils.IsErrNoRow(e) {
  175. err = fmt.Errorf("ApproveFlow GetItemByCondition err: %s", e.Error())
  176. return
  177. }
  178. if flowItem != nil && flowItem.ReportApproveFlowId <= 0 {
  179. flowItem = nil
  180. }
  181. // 查询审批节点
  182. nodeOb := new(report_approve.ReportApproveNode)
  183. nodeCond := fmt.Sprintf(` AND %s = ? AND %s = ?`, report_approve.ReportApproveNodeCols.ReportApproveFlowId, report_approve.ReportApproveNodeCols.CurrVersion)
  184. nodePars := make([]interface{}, 0)
  185. nodePars = append(nodePars, flowItem.ReportApproveFlowId, flowItem.CurrVersion)
  186. nodeItems, e := nodeOb.GetItemsByCondition(nodeCond, nodePars, []string{}, "")
  187. if e != nil {
  188. err = fmt.Errorf("ApproveNodes GetItemsByCondition err: %s", e.Error())
  189. return
  190. }
  191. if len(nodeItems) == 0 {
  192. err = fmt.Errorf("无审批节点")
  193. return
  194. }
  195. // 取出首个节点
  196. firstNodeItem := new(report_approve.ReportApproveNode)
  197. for _, v := range nodeItems {
  198. if v.PrevNodeId == 0 {
  199. firstNodeItem = v
  200. continue
  201. }
  202. }
  203. if firstNodeItem == nil {
  204. err = fmt.Errorf("首个审批节点有误")
  205. return
  206. }
  207. // 审批信息
  208. now := time.Now().Local()
  209. newApprove := new(report_approve.ReportApprove)
  210. newApprove.ReportType = reportType
  211. newApprove.ReportId = reportId
  212. newApprove.ReportTitle = reportTitle
  213. newApprove.ClassifyFirstId = firstId
  214. newApprove.ClassifySecondId = secondId
  215. newApprove.ClassifyThirdId = thirdId
  216. newApprove.State = report_approve.ReportApproveStateApproving
  217. newApprove.FlowId = flowItem.ReportApproveFlowId
  218. newApprove.FlowVersion = flowItem.CurrVersion
  219. newApprove.StartNodeId = firstNodeItem.ReportApproveNodeId
  220. newApprove.CurrNodeId = firstNodeItem.ReportApproveNodeId
  221. newApprove.ApplyUserId = sysAdminId
  222. newApprove.ApplyUserName = sysAdminName
  223. newApprove.CreateTime = now
  224. newApprove.ModifyTime = now
  225. if e = newApprove.Create(); e != nil {
  226. err = fmt.Errorf("生成审批信息失败, Err: %s", e.Error())
  227. return
  228. }
  229. approveId = newApprove.ReportApproveId
  230. // 生成节点审批记录
  231. err = BuildNextNodeRecordAndMsg(firstNodeItem, newApprove.ReportApproveId, sysAdminId, sysAdminName)
  232. return
  233. }
  234. // CancelReportApprove 撤回审批
  235. func CancelReportApprove(reportType, reportId, approveId, sysAdminId int, sysAdminName string) (err error) {
  236. // 默认内部审批, 如果是走的第三方审批, 那么仅修改状态
  237. confMap, e := models.GetBusinessConf()
  238. if e != nil {
  239. err = fmt.Errorf("GetBusinessConf err: %s", e.Error())
  240. return
  241. }
  242. openMap := map[string]bool{"false": false, "true": true}
  243. openApprove := openMap[confMap[models.BusinessConfIsReportApprove]]
  244. if !openApprove {
  245. //err = fmt.Errorf("未开启审批")
  246. return
  247. }
  248. confApproveType := confMap[models.BusinessConfReportApproveType]
  249. if confApproveType == "" {
  250. confApproveType = models.BusinessConfReportApproveTypeEta
  251. }
  252. // 第三方审批仅修改报告状态
  253. if confApproveType == models.BusinessConfReportApproveTypeOther {
  254. e = updateReportApproveState(reportType, reportId, 0, models.ReportStateWaitSubmit)
  255. if e != nil {
  256. err = fmt.Errorf("更新报告审批撤回失败, Err: %s", e.Error())
  257. return
  258. }
  259. return
  260. }
  261. // 修改审批信息状态
  262. approveOb := new(report_approve.ReportApprove)
  263. approveItem, e := approveOb.GetItemById(approveId)
  264. if e != nil && !utils.IsErrNoRow(e) {
  265. err = fmt.Errorf("approve GetItemById err: %s", e.Error())
  266. return
  267. }
  268. if approveItem != nil && approveItem.ReportApproveId <= 0 {
  269. err = fmt.Errorf("审批不存在")
  270. return
  271. }
  272. if approveItem.State == report_approve.ReportApproveStateCancel {
  273. return
  274. }
  275. approveItem.State = report_approve.ReportApproveStateCancel
  276. cols := []string{"State", "ModifyTime"}
  277. if e = approveItem.Update(cols); e != nil {
  278. err = fmt.Errorf("approve Update err: %s", e.Error())
  279. return
  280. }
  281. // 修改报告状态
  282. e = updateReportApproveState(reportType, reportId, 0, models.ReportStateWaitSubmit)
  283. if e != nil {
  284. err = fmt.Errorf("更新报告审批撤回失败, Err: %s", e.Error())
  285. return
  286. }
  287. // 推送撤回消息
  288. go func() {
  289. recordOb := new(report_approve.ReportApproveRecord)
  290. recordCond := fmt.Sprintf(` AND %s = ?`, report_approve.ReportApproveRecordCols.ReportApproveId)
  291. recordPars := make([]interface{}, 0)
  292. recordPars = append(recordPars, approveId)
  293. recordItems, e := recordOb.GetItemsByCondition(recordCond, recordPars, []string{}, "")
  294. if e != nil {
  295. utils.FileLog.Info(fmt.Sprintf("approve record GetItemsByCondition err: %s", e.Error()))
  296. return
  297. }
  298. messageOb := new(report_approve.ReportApproveMessage)
  299. messages := make([]*report_approve.ReportApproveMessage, 0)
  300. for _, v := range recordItems {
  301. m := new(report_approve.ReportApproveMessage)
  302. m.SendUserId = sysAdminId
  303. m.ReceiveUserId = v.ApproveUserId
  304. m.Content = fmt.Sprintf("%s提交的【研报审批】已撤回", sysAdminName)
  305. m.ReportApproveId = approveId
  306. m.ApproveState = report_approve.ReportApproveStateCancel
  307. m.CreateTime = time.Now().Local()
  308. m.ModifyTime = time.Now().Local()
  309. messages = append(messages, m)
  310. }
  311. e = messageOb.CreateMulti(messages)
  312. if e != nil {
  313. utils.FileLog.Info(fmt.Sprintf("CancelReportApprove messages err: %s", e.Error()))
  314. return
  315. }
  316. }()
  317. return
  318. }
  319. // updateReportApproveState 更新报告审批状态
  320. func updateReportApproveState(reportType, reportId, approveId, state int) (err error) {
  321. updateCols := []string{"ApproveId", "State", "ModifyTime"}
  322. if reportType == report_approve.FlowReportTypeChinese {
  323. reportOb := new(models.Report)
  324. reportItem, e := reportOb.GetItemById(reportId)
  325. // 报告可能会被删除, 这里查不到就忽略掉
  326. if e != nil && !utils.IsErrNoRow(e) {
  327. err = fmt.Errorf("获取中文研报失败, Err: %s", e.Error())
  328. return
  329. }
  330. if reportItem != nil && reportItem.Id > 0 {
  331. reportItem.ApproveId = approveId
  332. reportItem.State = state
  333. reportItem.ModifyTime = time.Now().Local()
  334. if state == models.ReportStatePass || state == models.ReportStateRefused {
  335. updateCols = append(updateCols, "ApproveTime")
  336. reportItem.ApproveTime = time.Now().Local()
  337. }
  338. if state == models.ReportStatePass {
  339. updateCols = append(updateCols, "PublishTime")
  340. reportItem.PublishTime = time.Now().Local()
  341. }
  342. if e = reportItem.UpdateReport(updateCols); e != nil {
  343. err = fmt.Errorf("更新中文研报审批状态失败, Err: %s", e.Error())
  344. return
  345. }
  346. }
  347. }
  348. if reportType == report_approve.FlowReportTypeEnglish {
  349. reportItem, e := models.GetEnglishReportItemById(reportId)
  350. if e != nil && !utils.IsErrNoRow(e) {
  351. err = fmt.Errorf("获取英文研报失败, Err: %s", e.Error())
  352. return
  353. }
  354. if reportItem != nil && reportItem.Id > 0 {
  355. reportItem.ApproveId = approveId
  356. reportItem.State = state
  357. reportItem.ModifyTime = time.Now().Local()
  358. if state == models.ReportStatePass || state == models.ReportStateRefused {
  359. updateCols = append(updateCols, "ApproveTime")
  360. reportItem.ApproveTime = time.Now().Local()
  361. }
  362. if state == models.ReportStatePass {
  363. updateCols = append(updateCols, "PublishTime")
  364. reportItem.PublishTime = time.Now().Local()
  365. }
  366. if e = reportItem.UpdateReport(updateCols); e != nil {
  367. err = fmt.Errorf("更新英文研报审批状态失败, Err: %s", e.Error())
  368. return
  369. }
  370. }
  371. }
  372. if reportType == report_approve.FlowReportTypeSmart {
  373. reportOb := new(smart_report.SmartReport)
  374. reportItem, e := reportOb.GetItemById(reportId)
  375. if e != nil && !utils.IsErrNoRow(e) {
  376. err = fmt.Errorf("获取智能研报失败, Err: %s", e.Error())
  377. return
  378. }
  379. if reportItem != nil && reportItem.SmartReportId > 0 {
  380. reportItem.ApproveId = approveId
  381. reportItem.State = state
  382. reportItem.ModifyTime = time.Now().Local()
  383. if state == models.ReportStatePass || state == models.ReportStateRefused {
  384. updateCols = append(updateCols, "ApproveTime")
  385. reportItem.ApproveTime = time.Now().Local()
  386. }
  387. if state == models.ReportStatePass {
  388. updateCols = append(updateCols, "PublishTime")
  389. reportItem.PublishTime = time.Now().Local()
  390. }
  391. if e = reportItem.Update(updateCols); e != nil {
  392. err = fmt.Errorf("更新智能研报审批状态失败, Err: %s", e.Error())
  393. return
  394. }
  395. }
  396. }
  397. return
  398. }
  399. // PassReportApprove 通过审批
  400. func PassReportApprove(approveItem *report_approve.ReportApprove, recordItem *report_approve.ReportApproveRecord, sysAdminId int, reportUrl string) (tips string, err error) {
  401. if approveItem == nil {
  402. err = fmt.Errorf("审批信息有误")
  403. return
  404. }
  405. if recordItem == nil {
  406. err = fmt.Errorf("审批记录有误")
  407. return
  408. }
  409. // 查询审批流和审批流节点
  410. flowOb := new(report_approve.ReportApproveFlow)
  411. flowItem, e := flowOb.GetItemById(approveItem.FlowId)
  412. if e != nil && !utils.IsErrNoRow(e) {
  413. err = fmt.Errorf("获取审批流失败, Err: %s", e.Error())
  414. return
  415. }
  416. if flowItem != nil && flowItem.ReportApproveFlowId <= 0 {
  417. err = fmt.Errorf("审批流不存在")
  418. return
  419. }
  420. nodeOb := new(report_approve.ReportApproveNode)
  421. nodeCond := fmt.Sprintf(` AND %s = ? AND %s = ?`, report_approve.ReportApproveNodeCols.ReportApproveFlowId, report_approve.ReportApproveNodeCols.CurrVersion)
  422. nodePars := make([]interface{}, 0)
  423. nodePars = append(nodePars, flowItem.ReportApproveFlowId, flowItem.CurrVersion)
  424. nodeItems, e := nodeOb.GetItemsByCondition(nodeCond, nodePars, []string{}, "")
  425. if e != nil {
  426. err = fmt.Errorf("ApproveNodes GetItemsByCondition err: %s", e.Error())
  427. return
  428. }
  429. if len(nodeItems) == 0 {
  430. err = fmt.Errorf("无审批节点")
  431. return
  432. }
  433. nodeMap := make(map[int]*report_approve.ReportApproveNode)
  434. for _, v := range nodeItems {
  435. nodeMap[v.ReportApproveNodeId] = v
  436. }
  437. // 取出审批记录的节点
  438. currNodeItem := nodeMap[recordItem.NodeId]
  439. if currNodeItem == nil {
  440. err = fmt.Errorf("当前节点信息有误")
  441. return
  442. }
  443. currNode, e := report_approve.FormatReportApproveNode2Item(currNodeItem)
  444. if e != nil {
  445. err = fmt.Errorf("当前节点信息有误, Err: %s", e.Error())
  446. return
  447. }
  448. now := time.Now().Local()
  449. recordItem.State = report_approve.ReportApproveStatePass
  450. recordItem.ApproveTime = now
  451. recordItem.ModifyTime = now
  452. recordItem.NodeState = report_approve.ReportApproveStatePass
  453. recordItem.NodeApproveUserId = recordItem.ApproveUserId
  454. recordItem.NodeApproveUserName = recordItem.ApproveUserName
  455. recordItem.NodeApproveTime = now
  456. recordCols := []string{"State", "ApproveTime", "ModifyTime", "NodeState", "NodeApproveUserId", "NodeApproveUserName", "NodeApproveTime"}
  457. lastApprove := false
  458. // 依次审批
  459. if currNode.ApproveType == report_approve.NodeApproveTypeRoll {
  460. if e = recordItem.Update(recordCols); e != nil {
  461. err = fmt.Errorf("更新审批记录状态失败, Err: %s", e.Error())
  462. return
  463. }
  464. // 检查依次审批情况
  465. sort.Slice(currNode.Users, func(k, j int) bool {
  466. return currNode.Users[k].Sort < currNode.Users[j].Sort
  467. })
  468. userLen := len(currNode.Users)
  469. //lastRoll := false
  470. nextUser := new(report_approve.ReportApproveNodeUserReq) // 下一个审批人, 为nil则表示当前审批人即为最后
  471. for k, v := range currNode.Users {
  472. // 当前审批人
  473. if v.UserId == sysAdminId && recordItem.ApproveUserSort == v.Sort {
  474. //if k == (userLen - 1) {
  475. // lastRoll = true
  476. // break
  477. //}
  478. if (k + 1) < userLen {
  479. nextUser = currNode.Users[k+1]
  480. }
  481. }
  482. }
  483. //if lastRoll && currNode.NextNodeId == 0 {
  484. // lastApprove = true
  485. //}
  486. // 当前节点下一个审批人, 生成下一个审批记录且return
  487. if nextUser.UserId > 0 {
  488. newRecord := new(report_approve.ReportApproveRecord)
  489. newRecord.ReportApproveId = recordItem.ReportApproveId
  490. newRecord.State = report_approve.ReportApproveStateApproving
  491. newRecord.NodeId = currNode.ReportApproveNodeId
  492. newRecord.PrevNodeId = currNode.PrevNodeId
  493. newRecord.NextNodeId = currNode.NextNodeId
  494. newRecord.ApproveType = currNode.ApproveType
  495. newRecord.ApproveUserId = nextUser.UserId
  496. newRecord.ApproveUserName = nextUser.UserName
  497. newRecord.ApproveUserSort = nextUser.Sort
  498. newRecord.CreateTime = now
  499. newRecord.ModifyTime = now
  500. newRecord.NodeState = report_approve.ReportApproveStateApproving
  501. if e = newRecord.Create(); e != nil {
  502. err = fmt.Errorf("生成审批记录失败, Err: %s", e.Error())
  503. return
  504. }
  505. // 推送审批消息
  506. go func() {
  507. messageItem := new(report_approve.ReportApproveMessage)
  508. messageItem.SendUserId = approveItem.ApplyUserId
  509. messageItem.ReceiveUserId = nextUser.UserId
  510. messageItem.Content = "您有新的待办任务"
  511. messageItem.Remark = fmt.Sprintf("%s提交的【研报审批】需要您审批,请及时处理", approveItem.ApplyUserName)
  512. messageItem.ReportApproveId = approveItem.ReportApproveId
  513. messageItem.ApproveState = report_approve.ReportApproveStateApproving
  514. messageItem.CreateTime = now
  515. messageItem.ModifyTime = now
  516. if e = messageItem.Create(); e != nil {
  517. utils.FileLog.Info(fmt.Sprintf("PassReportApprove message err: %s", e.Error()))
  518. return
  519. }
  520. }()
  521. return
  522. }
  523. // 更新审批当前节点并进入下一个节点
  524. if currNode.NextNodeId > 0 {
  525. nextNode := nodeMap[currNode.NextNodeId]
  526. approveItem.CurrNodeId = currNode.NextNodeId
  527. approveItem.ModifyTime = now
  528. if e = approveItem.Update([]string{"CurrNodeId", "ModifyTime"}); e != nil {
  529. err = fmt.Errorf("更新审批当前节点失败, Err: %s", e.Error())
  530. return
  531. }
  532. err = BuildNextNodeRecordAndMsg(nextNode, approveItem.ReportApproveId, approveItem.ApplyUserId, approveItem.ApplyUserName)
  533. return
  534. } else {
  535. // 最后一个节点
  536. lastApprove = true
  537. }
  538. }
  539. // 会签
  540. if currNode.ApproveType == report_approve.NodeApproveTypeAll {
  541. // 查询其他审批人是否已审批
  542. otherOb := new(report_approve.ReportApproveRecord)
  543. otherCond := fmt.Sprintf(` AND %s = ? AND %s = ? AND %s <> ?`, report_approve.ReportApproveRecordCols.ReportApproveId, report_approve.ReportApproveRecordCols.NodeId, report_approve.ReportApproveRecordCols.ApproveUserId)
  544. otherPars := make([]interface{}, 0)
  545. otherPars = append(otherPars, approveItem.ReportApproveId, recordItem.NodeId, sysAdminId)
  546. otherRecords, e := otherOb.GetItemsByCondition(otherCond, otherPars, []string{}, "")
  547. if e != nil {
  548. err = fmt.Errorf("获取节点审批记录失败, Err: %s", e.Error())
  549. return
  550. }
  551. otherPass := true
  552. for _, v := range otherRecords {
  553. if v.State != report_approve.ReportApproveStatePass {
  554. otherPass = false
  555. }
  556. }
  557. // 其他人未审批, 仅更新当前审批记录
  558. if e = recordItem.Update(recordCols); e != nil {
  559. err = fmt.Errorf("更新审批记录状态失败, Err: %s", e.Error())
  560. return
  561. }
  562. // 其他人已审批且为最后节点
  563. if otherPass && currNode.NextNodeId == 0 {
  564. lastApprove = true
  565. }
  566. // 其他人已审批且不为最后节点, 进入下一节点
  567. if otherPass && currNode.NextNodeId > 0 {
  568. nextNode := nodeMap[currNode.NextNodeId]
  569. approveItem.CurrNodeId = currNode.NextNodeId
  570. approveItem.ModifyTime = now
  571. if e = approveItem.Update([]string{"CurrNodeId", "ModifyTime"}); e != nil {
  572. err = fmt.Errorf("更新审批当前节点失败, Err: %s", e.Error())
  573. return
  574. }
  575. err = BuildNextNodeRecordAndMsg(nextNode, approveItem.ReportApproveId, approveItem.ApplyUserId, approveItem.ApplyUserName)
  576. return
  577. }
  578. }
  579. // 或签
  580. if currNode.ApproveType == report_approve.NodeApproveTypeAny {
  581. // 需检查一下审批的当前节点和记录的节点是否匹配, 不匹配可能是因为另外的审批人已通过, 所以此处应给提示
  582. // 前端也有做相应的判断,但是两个人同时进入审批详情页时就可能出现这种情况
  583. if approveItem.CurrNodeId != recordItem.NodeId {
  584. tips = "该节点已完成审批, 请刷新页面"
  585. return
  586. }
  587. if e = recordItem.Update(recordCols); e != nil {
  588. err = fmt.Errorf("更新审批记录状态失败, Err: %s", e.Error())
  589. return
  590. }
  591. // 将该审批的同一个节点的记录标记为已审批
  592. if e = recordItem.UpdateNodeState(recordItem.ReportApproveId, recordItem.NodeId, recordItem.NodeState, recordItem.NodeApproveUserId, recordItem.NodeApproveUserName, recordItem.NodeApproveTime); e != nil {
  593. err = fmt.Errorf("更新同一节点的其他审批记录状态失败, Err: %s", e.Error())
  594. return
  595. }
  596. if currNode.NextNodeId == 0 {
  597. lastApprove = true
  598. }
  599. if currNode.NextNodeId > 0 {
  600. nextNode := nodeMap[currNode.NextNodeId]
  601. approveItem.CurrNodeId = currNode.NextNodeId
  602. approveItem.ModifyTime = now
  603. if e = approveItem.Update([]string{"CurrNodeId", "ModifyTime"}); e != nil {
  604. err = fmt.Errorf("更新审批当前节点失败, Err: %s", e.Error())
  605. return
  606. }
  607. err = BuildNextNodeRecordAndMsg(nextNode, approveItem.ReportApproveId, approveItem.ApplyUserId, approveItem.ApplyUserName)
  608. return
  609. }
  610. }
  611. // 最后一个审批, 更新审批记录、审批、报告状态、推送消息给申请人
  612. if lastApprove {
  613. if e = recordItem.Update(recordCols); e != nil {
  614. err = fmt.Errorf("更新审批记录状态失败, Err: %s", e.Error())
  615. return
  616. }
  617. approveItem.State = report_approve.ReportApproveStatePass
  618. approveItem.ApproveTime = now
  619. approveItem.ModifyTime = now
  620. approveCols := []string{"State", "ApproveTime", "ModifyTime"}
  621. if e = approveItem.Update(approveCols); e != nil {
  622. err = fmt.Errorf("更新审批信息失败, Err: %s", e.Error())
  623. return
  624. }
  625. if e = updateReportApproveState(approveItem.ReportType, approveItem.ReportId, approveItem.ReportApproveId, models.ReportStatePass); e != nil {
  626. err = fmt.Errorf("更新报告审批状态失败, Err: %s", e.Error())
  627. return
  628. }
  629. go func() {
  630. messageItem := new(report_approve.ReportApproveMessage)
  631. messageItem.SendUserId = sysAdminId
  632. messageItem.ReceiveUserId = approveItem.ApplyUserId
  633. messageItem.Content = "您提交的审批已通过"
  634. messageItem.Remark = "您提交的【研报审批】已通过"
  635. messageItem.ReportApproveId = approveItem.ReportApproveId
  636. messageItem.ApproveState = report_approve.ReportApproveStatePass
  637. messageItem.CreateTime = now
  638. messageItem.ModifyTime = now
  639. if e = messageItem.Create(); e != nil {
  640. utils.FileLog.Info(fmt.Sprintf("PassReportApprove message err: %s", e.Error()))
  641. return
  642. }
  643. }()
  644. // 审批通过之后的处理
  645. go func() {
  646. if e = AfterReportApprovePass(approveItem.ReportType, approveItem.ReportId); e != nil {
  647. utils.FileLog.Info(fmt.Sprintf("AfterReportApprovePass err: %s, ReportType: %d, ReportId: %d", e.Error(), approveItem.ReportType, approveItem.ReportId))
  648. return
  649. }
  650. }()
  651. }
  652. return
  653. }
  654. // RefuseReportApprove 驳回审批
  655. func RefuseReportApprove(approveItem *report_approve.ReportApprove, recordItem *report_approve.ReportApproveRecord, approveRemark string, sysAdminId int) (err error) {
  656. if approveItem == nil {
  657. err = fmt.Errorf("审批信息有误")
  658. return
  659. }
  660. if recordItem == nil {
  661. err = fmt.Errorf("审批记录有误")
  662. return
  663. }
  664. // 更新审批记录
  665. now := time.Now().Local()
  666. recordItem.State = report_approve.ReportApproveStateRefuse
  667. recordItem.ApproveRemark = approveRemark
  668. recordItem.ApproveTime = now
  669. recordItem.ModifyTime = now
  670. recordItem.NodeState = report_approve.ReportApproveStateRefuse
  671. recordItem.NodeApproveUserId = recordItem.ApproveUserId
  672. recordItem.NodeApproveUserName = recordItem.ApproveUserName
  673. recordItem.NodeApproveTime = now
  674. recordCols := []string{"State", "ApproveRemark", "ApproveTime", "ModifyTime", "NodeState", "NodeApproveUserId", "NodeApproveUserName", "NodeApproveTime"}
  675. if e := recordItem.Update(recordCols); e != nil {
  676. err = fmt.Errorf("更新审批记录状态失败, Err: %s", e.Error())
  677. return
  678. }
  679. // 将该审批的同一个节点的记录标记为已审批
  680. if e := recordItem.UpdateNodeState(recordItem.ReportApproveId, recordItem.NodeId, recordItem.NodeState, recordItem.NodeApproveUserId, recordItem.NodeApproveUserName, recordItem.NodeApproveTime); e != nil {
  681. err = fmt.Errorf("更新同一节点的其他审批记录状态失败, Err: %s", e.Error())
  682. return
  683. }
  684. // 驳回-更新审批, 报告状态, 推送消息
  685. approveItem.State = report_approve.ReportApproveStateRefuse
  686. approveItem.ApproveRemark = approveRemark
  687. approveItem.ApproveTime = now
  688. approveItem.ModifyTime = now
  689. approveCols := []string{"State", "ApproveRemark", "ApproveTime", "ModifyTime"}
  690. if e := approveItem.Update(approveCols); e != nil {
  691. err = fmt.Errorf("更新审批状态失败, Err: %s", e.Error())
  692. return
  693. }
  694. if e := updateReportApproveState(approveItem.ReportType, approveItem.ReportId, approveItem.ReportApproveId, models.ReportStateRefused); e != nil {
  695. err = fmt.Errorf("更新报告状态失败, Err: %s", e.Error())
  696. return
  697. }
  698. // 推送驳回消息给申请人
  699. go func() {
  700. messageItem := new(report_approve.ReportApproveMessage)
  701. messageItem.SendUserId = sysAdminId
  702. messageItem.ReceiveUserId = approveItem.ApplyUserId
  703. messageItem.Content = "您提交的审批被驳回"
  704. messageItem.Remark = "您提交的【研报审批】已被驳回"
  705. messageItem.ReportApproveId = approveItem.ReportApproveId
  706. messageItem.ApproveState = report_approve.ReportApproveStateRefuse
  707. messageItem.CreateTime = now
  708. messageItem.ModifyTime = now
  709. if e := messageItem.Create(); e != nil {
  710. utils.FileLog.Info(fmt.Sprintf("ApproveReport message err: %s", e.Error()))
  711. return
  712. }
  713. }()
  714. return
  715. }
  716. // BuildNextNodeRecordAndMsg 生成下一个节点的审批记录并推送消息
  717. func BuildNextNodeRecordAndMsg(approveNodeItem *report_approve.ReportApproveNode, approveId, sysAdminId int, sysAdminName string) (err error) {
  718. if approveNodeItem == nil {
  719. err = fmt.Errorf("approve node nil")
  720. return
  721. }
  722. // 根据节点审批方式生成审批记录
  723. now := time.Now().Local()
  724. approveNode, e := report_approve.FormatReportApproveNode2Item(approveNodeItem)
  725. if e != nil {
  726. err = fmt.Errorf("FormatReportApproveNode2Item err: %s", e.Error())
  727. return
  728. }
  729. if len(approveNode.Users) == 0 {
  730. err = fmt.Errorf("审批节点用户有误")
  731. return
  732. }
  733. newRecords := make([]*report_approve.ReportApproveRecord, 0)
  734. sort.Slice(approveNode.Users, func(k, j int) bool {
  735. return approveNode.Users[k].Sort < approveNode.Users[j].Sort
  736. })
  737. for _, u := range approveNode.Users {
  738. r := new(report_approve.ReportApproveRecord)
  739. r.ReportApproveId = approveId
  740. r.State = report_approve.ReportApproveStateApproving
  741. r.NodeId = approveNode.ReportApproveNodeId
  742. r.PrevNodeId = approveNode.PrevNodeId
  743. r.NextNodeId = approveNode.NextNodeId
  744. r.ApproveType = approveNode.ApproveType
  745. r.ApproveUserId = u.UserId
  746. r.ApproveUserName = u.UserName
  747. r.ApproveUserSort = u.Sort
  748. r.CreateTime = now
  749. r.ModifyTime = now
  750. r.NodeState = report_approve.ReportApproveStateApproving // 当前节点审批状态
  751. newRecords = append(newRecords, r)
  752. // 依次审批仅生成一条记录
  753. if approveNode.ApproveType == report_approve.NodeApproveTypeRoll {
  754. break
  755. }
  756. }
  757. recordOb := new(report_approve.ReportApproveRecord)
  758. if e = recordOb.CreateMulti(newRecords); e != nil {
  759. err = fmt.Errorf("生成节点审批记录失败, Err: %s", e.Error())
  760. return
  761. }
  762. // 推送审批消息
  763. go func() {
  764. messageOb := new(report_approve.ReportApproveMessage)
  765. messages := make([]*report_approve.ReportApproveMessage, 0)
  766. for _, v := range newRecords {
  767. m := new(report_approve.ReportApproveMessage)
  768. m.SendUserId = sysAdminId
  769. m.ReceiveUserId = v.ApproveUserId
  770. m.Content = "您有新的待办任务"
  771. m.Remark = fmt.Sprintf("%s提交的【研报审批】需要您审批,请及时处理", sysAdminName)
  772. m.ReportApproveId = approveId
  773. m.ApproveState = report_approve.ReportApproveStateApproving
  774. m.CreateTime = now
  775. m.ModifyTime = now
  776. messages = append(messages, m)
  777. }
  778. e = messageOb.CreateMulti(messages)
  779. if e != nil {
  780. utils.FileLog.Info(fmt.Sprintf("BuildNextNodeRecordAndMsg messages err: %s", e.Error()))
  781. return
  782. }
  783. }()
  784. return
  785. }
  786. // AfterReportApprovePass 报告审批通过后的处理
  787. func AfterReportApprovePass(reportType, reportId int) (err error) {
  788. // 中文研报
  789. if reportType == report_approve.FlowReportTypeChinese {
  790. reportInfo, e := models.GetReportByReportId(reportId)
  791. if e != nil {
  792. if utils.IsErrNoRow(e) {
  793. return
  794. }
  795. err = fmt.Errorf("获取研报信息失败, Err: %s", e.Error())
  796. return
  797. }
  798. if reportInfo != nil && reportInfo.Id <= 0 {
  799. return
  800. }
  801. // 重新生成音频,里面还涉及到章节类型的报告
  802. go UpdateReportVideo(reportInfo)
  803. // 生成报告pdf和长图
  804. {
  805. reportPdfUrl := GetGeneralPdfUrl(reportInfo.ReportCode, reportInfo.ClassifyNameFirst, reportInfo.ReportLayout)
  806. go Report2pdfAndJpeg(reportPdfUrl, reportId, 1)
  807. }
  808. //_ = CreateVideo(reportInfo)
  809. _ = UpdateReportEs(reportInfo.Id, models.ReportStatePublished)
  810. return
  811. }
  812. // 英文研报
  813. if reportType == report_approve.FlowReportTypeEnglish {
  814. _ = UpdateEnglishReportEs(reportId, models.ReportStatePublished)
  815. return
  816. }
  817. // 智能研报
  818. if reportType == report_approve.FlowReportTypeSmart {
  819. ob := new(smart_report.SmartReport)
  820. item, e := ob.GetItemById(reportId)
  821. if e != nil {
  822. if utils.IsErrNoRow(e) {
  823. return
  824. }
  825. err = fmt.Errorf("获取智能研报信息失败, Err: %s", e.Error())
  826. return
  827. }
  828. if item != nil && item.SmartReportId <= 0 {
  829. return
  830. }
  831. // 写入队列
  832. //var queue smart_report.Report2ImgQueueReq
  833. //queue.ReportType = 2
  834. //queue.ReportCode = item.ReportCode
  835. //_ = utils.Rc.LPush(utils.CACHE_CREATE_REPORT_IMGPDF_QUEUE, queue)
  836. // 生成音频
  837. if item.VideoUrl == "" {
  838. SmartReportBuildVideoAndUpdate(item)
  839. }
  840. // ES更新报告
  841. _ = SmartReportElasticUpsert(item.SmartReportId, models.ReportStatePublished)
  842. }
  843. return
  844. }
  845. // CheckCloseReportApproveConf 校验是否可以关闭报告审批
  846. func CheckCloseReportApproveConf() (yes bool, err error) {
  847. // 查询待审批中的报告数量
  848. count, e := models.GetReportStateCount(models.ReportStateWaitApprove)
  849. if e != nil {
  850. err = fmt.Errorf("查询审批中的报告数量失败, Err: %s", e.Error())
  851. return
  852. }
  853. if count > 0 {
  854. return
  855. }
  856. count, e = models.GetEnglishReportStateCount(models.ReportStateWaitApprove)
  857. if e != nil {
  858. err = fmt.Errorf("查询审批中的英文报告数量失败, Err: %s", e.Error())
  859. return
  860. }
  861. if count > 0 {
  862. return
  863. }
  864. smartOb := new(smart_report.SmartReport)
  865. cond := ` AND state = ?`
  866. pars := make([]interface{}, 0)
  867. pars = append(pars, models.ReportStateWaitApprove)
  868. count, e = smartOb.GetCountByCondition(cond, pars)
  869. if e != nil {
  870. err = fmt.Errorf("查询审批中的智能报告数量失败, Err: %s", e.Error())
  871. return
  872. }
  873. if count > 0 {
  874. return
  875. }
  876. yes = true
  877. return
  878. }
  879. // FlowOperateResetReportState 审批流变化-重置报告的初始状态
  880. func FlowOperateResetReportState(reportType, classifyFirstId, classifySecondId, classifyThirdId, oldState, State int) (err error) {
  881. defer func() {
  882. if err != nil {
  883. tips := fmt.Sprintf("审批流变化-重置报告初始状态失败, ErrMsg: %s", err.Error())
  884. utils.FileLog.Info(tips)
  885. go alarm_msg.SendAlarmMsg(tips, 2)
  886. }
  887. }()
  888. // 中文研报
  889. if reportType == report_approve.FlowReportTypeChinese {
  890. e := models.UpdateReportsStateByCond(classifyFirstId, classifySecondId, classifyThirdId, oldState, State)
  891. if e != nil {
  892. err = fmt.Errorf("UpdateReportsStateByCond err: %s", e.Error())
  893. }
  894. return
  895. }
  896. // 英文研报
  897. if reportType == report_approve.FlowReportTypeEnglish {
  898. e := models.UpdateEnglishReportsStateByCond(classifyFirstId, classifySecondId, oldState, State)
  899. if e != nil {
  900. err = fmt.Errorf("UpdateEnglishReportsStateByCond err: %s", e.Error())
  901. }
  902. return
  903. }
  904. // 智能研报
  905. if reportType == report_approve.FlowReportTypeSmart {
  906. e := smart_report.UpdateSmartReportsStateByCond(classifyFirstId, classifySecondId, oldState, State)
  907. if e != nil {
  908. err = fmt.Errorf("UpdateSmartReportsStateByCond err: %s", e.Error())
  909. }
  910. return
  911. }
  912. return
  913. }
  914. // ConfigChangeResetReportState 审批配置变化-重置报告的初始状态
  915. func ConfigChangeResetReportState(changeType string) (err error) {
  916. defer func() {
  917. if err != nil {
  918. tips := fmt.Sprintf("审批配置变化-重置报告初始状态失败, ErrMsg: %s", err.Error())
  919. utils.FileLog.Info(tips)
  920. go alarm_msg.SendAlarmMsg(tips, 2)
  921. }
  922. }()
  923. // 关闭审批-待提交->未发布
  924. if changeType == "" {
  925. e := models.UpdateReportsStateByCond(0, 0, 0, models.ReportStateWaitSubmit, models.ReportStateUnpublished)
  926. if e != nil {
  927. err = fmt.Errorf("UpdateReportsStateByCond err: %s", e.Error())
  928. }
  929. e = models.UpdateEnglishReportsStateByCond(0, 0, models.ReportStateWaitSubmit, models.ReportStateUnpublished)
  930. if e != nil {
  931. err = fmt.Errorf("UpdateEnglishReportsStateByCond err: %s", e.Error())
  932. }
  933. e = smart_report.UpdateSmartReportsStateByCond(0, 0, models.ReportStateWaitSubmit, models.ReportStateUnpublished)
  934. if e != nil {
  935. err = fmt.Errorf("UpdateSmartReportsStateByCond err: %s", e.Error())
  936. }
  937. return
  938. }
  939. // 开启内部审批-未发布->部分待提交
  940. if changeType == models.BusinessConfReportApproveTypeEta {
  941. flowOb := new(report_approve.ReportApproveFlow)
  942. flows, e := flowOb.GetItemsByCondition(``, make([]interface{}, 0), []string{}, "")
  943. if e != nil {
  944. err = fmt.Errorf("GetApproveFlows err: %s", e.Error())
  945. return
  946. }
  947. reportSecondIds, englishSecondIds, smartSecondIds := make([]int, 0), make([]int, 0), make([]int, 0)
  948. for _, v := range flows {
  949. if v.ReportType == report_approve.FlowReportTypeChinese {
  950. reportSecondIds = append(reportSecondIds, v.ClassifySecondId)
  951. continue
  952. }
  953. if v.ReportType == report_approve.FlowReportTypeEnglish {
  954. englishSecondIds = append(englishSecondIds, v.ClassifySecondId)
  955. continue
  956. }
  957. if v.ReportType == report_approve.FlowReportTypeSmart {
  958. smartSecondIds = append(smartSecondIds, v.ClassifySecondId)
  959. }
  960. }
  961. if len(reportSecondIds) > 0 {
  962. e = models.UpdateReportsStateBySecondIds(models.ReportStateUnpublished, models.ReportStateWaitSubmit, reportSecondIds)
  963. if e != nil {
  964. err = fmt.Errorf("UpdateReportsStateBySecondIds err: %s", e.Error())
  965. return
  966. }
  967. }
  968. if len(englishSecondIds) > 0 {
  969. e = models.UpdateEnglishReportsStateBySecondIds(models.ReportStateUnpublished, models.ReportStateWaitSubmit, englishSecondIds)
  970. if e != nil {
  971. err = fmt.Errorf("UpdateEnglishReportsStateBySecondIds err: %s", e.Error())
  972. return
  973. }
  974. }
  975. if len(smartSecondIds) > 0 {
  976. e = smart_report.UpdateSmartReportsStateBySecondIds(models.ReportStateUnpublished, models.ReportStateWaitSubmit, smartSecondIds)
  977. if e != nil {
  978. err = fmt.Errorf("UpdateSmartReportsStateBySecondIds err: %s", e.Error())
  979. return
  980. }
  981. }
  982. return
  983. }
  984. // 开启第三方审批->未发布->待提交
  985. if changeType == models.BusinessConfReportApproveTypeOther {
  986. e := models.UpdateReportsStateByCond(0, 0, 0, models.ReportStateUnpublished, models.ReportStateWaitSubmit)
  987. if e != nil {
  988. err = fmt.Errorf("UpdateReportsStateByCond err: %s", e.Error())
  989. }
  990. e = models.UpdateEnglishReportsStateByCond(0, 0, models.ReportStateUnpublished, models.ReportStateWaitSubmit)
  991. if e != nil {
  992. err = fmt.Errorf("UpdateEnglishReportsStateByCond err: %s", e.Error())
  993. }
  994. e = smart_report.UpdateSmartReportsStateByCond(0, 0, models.ReportStateUnpublished, models.ReportStateWaitSubmit)
  995. if e != nil {
  996. err = fmt.Errorf("UpdateSmartReportsStateByCond err: %s", e.Error())
  997. }
  998. return
  999. }
  1000. return
  1001. }