report_approve.go 37 KB

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