2
3

contractReview.go 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248
  1. package oilcontract
  2. import (
  3. "dashoo.cn/backend/api/business/auditsetting"
  4. "dashoo.cn/backend/api/business/oilcontract/contract"
  5. "dashoo.cn/backend/api/business/oilcontract/contractEvaluationItems"
  6. "dashoo.cn/backend/api/business/oilsupplier/supplier"
  7. "dashoo.cn/backend/api/business/organize"
  8. "dashoo.cn/business2/permission"
  9. "log"
  10. "sync"
  11. "dashoo.cn/backend/api/business/baseUser"
  12. "dashoo.cn/backend/api/business/oilcontract/contractReview"
  13. "dashoo.cn/backend/api/business/oilsupplier/suppliercert"
  14. "dashoo.cn/backend/api/business/workflow"
  15. "encoding/json"
  16. "fmt"
  17. "strconv"
  18. "strings"
  19. "time"
  20. // "dashoo.cn/backend/api/business/items"
  21. . "dashoo.cn/backend/api/controllers"
  22. "dashoo.cn/business2/userRole"
  23. "dashoo.cn/utils"
  24. )
  25. type OilContractReviewController struct {
  26. BaseController
  27. }
  28. // @Title 获取列表
  29. // @Description get user by token
  30. // @Success 200 {object} []contractReview.OilContractReviewWorkFlow
  31. // @router /list [get]
  32. func (this *OilContractReviewController) GetEntityList() {
  33. //获取分页信息
  34. page := this.GetPageInfoForm()
  35. where := " 1=1 "
  36. orderby := "r.Id"
  37. asc := " desc "
  38. Order := this.GetString("Order")
  39. Prop := this.GetString("Prop")
  40. if Order != "" && Prop != "" {
  41. orderby = Prop
  42. if Order == "asc" {
  43. asc = " asc "
  44. }
  45. }
  46. Id := this.GetString("Id")
  47. ContractClass := this.GetString("ContractClass")
  48. ContractName := this.GetString("ContractName")
  49. ProjectOwner := this.GetString("ProjectOwner")
  50. Telephone := this.GetString("Telephone")
  51. ContractNo := this.GetString("ContractNo")
  52. ContractId := this.GetString("ContractId")
  53. WorkflowId := this.GetString("WorkflowId")
  54. BusinessKey := this.GetString("BusinessKey")
  55. ProcessKey := this.GetString("ProcessKey")
  56. BackRemark := this.GetString("BackRemark")
  57. CreateOn := this.GetString("CreateOn")
  58. CreateOn1 := this.GetString("CreateOn1")
  59. SupplierName := this.GetString("SupplierName")
  60. SecondUnit := this.GetString("SecondUnit")
  61. PerformStatus := this.GetString("PerformStatus")
  62. Status := this.GetString("Status")
  63. Year := this.GetString("Year")
  64. Amount := this.GetString("Amount")
  65. IsAll := this.GetString("IsAll")
  66. if Id != "" {
  67. where = where + " and r.Id like '%" + Id + "%'"
  68. }
  69. if PerformStatus != "" {
  70. where = where + " and c.Status=" + PerformStatus + " "
  71. }
  72. if Amount != "" {
  73. where = where + " and c.Amount like '%" + Amount + "%'"
  74. }
  75. if ContractClass != "" {
  76. where = where + " and c.ContractClass = '" + ContractClass + "'"
  77. }
  78. if ProjectOwner != "" {
  79. where = where + " and c.ProjectOwner like '%" + ProjectOwner + "%'"
  80. }
  81. if Telephone != "" {
  82. where = where + " and c.Telephone like '%" + Telephone + "%'"
  83. }
  84. if ContractId != "" {
  85. where = where + " and r.ContractId = '" + ContractId + "'"
  86. }
  87. if WorkflowId != "" {
  88. where = where + " and r.WorkflowId like '%" + WorkflowId + "%'"
  89. }
  90. if BusinessKey != "" {
  91. where = where + " and r.BusinessKey like '%" + BusinessKey + "%'"
  92. }
  93. if ProcessKey != "" {
  94. where = where + " and r.ProcessKey like '%" + ProcessKey + "%'"
  95. }
  96. if BackRemark != "" {
  97. where = where + " and r.BackRemark like '%" + BackRemark + "%'"
  98. }
  99. if SupplierName != "" {
  100. where = where + " and c.SupplierName like '%" + SupplierName + "%'"
  101. }
  102. if ContractName != "" {
  103. where = where + " and c.ContractName like '%" + ContractName + "%'"
  104. }
  105. if ContractNo != "" {
  106. where = where + " and c.ContractNo like '%" + ContractNo + "%'"
  107. }
  108. if SecondUnit != "" {
  109. where = where + " and r.UnitId = " + SecondUnit
  110. }
  111. if Status != "" {
  112. where = where + " and r.Status=" + Status
  113. }
  114. if CreateOn != "" {
  115. dates := strings.Split(CreateOn, ",")
  116. if len(dates) == 2 {
  117. minDate := dates[0]
  118. maxDate := dates[1]
  119. where = where + " and r.CreateOn>='" + minDate + "' and r.CreateOn<='" + maxDate + "'"
  120. }
  121. }
  122. if CreateOn1 != "" {
  123. dates := strings.Split(CreateOn1, ",")
  124. if len(dates) == 2 {
  125. minDate := dates[0]
  126. maxDate := dates[1]
  127. where = where + " and c.StartDate>='" + minDate + "' and c.EndDate<='" + maxDate + "'"
  128. }
  129. }
  130. if Year != "" {
  131. where = where + " and r.CreateOn>='" + Year + "-01-01 00:00:00' and r.CreateOn<='" + Year + "-12-31 23:59:59' "
  132. }
  133. // 是否查看本部门的
  134. if IsAll == "" {
  135. //根据工作流查找
  136. //集中评审相关人可看数据
  137. actisvc := workflow.GetActivitiService(utils.DBE)
  138. //找出待办任务===准入
  139. var certIdList string
  140. ids := actisvc.GetMyTasks(workflow.OIL_DAILY_CONTRACT_EVALUATION, this.User.Id)
  141. ids1 := actisvc.GetMyTasks(workflow.OIL_DAILY_CONTRACT_EVA_BY_BUSINESS, this.User.Id)
  142. ids += "," + ids1
  143. if len(strings.Trim(ids, ",")) > 0 {
  144. certIdList += strings.Trim(ids, ",") + ","
  145. }
  146. certIdList = strings.Trim(certIdList, ",")
  147. certIdarr := strings.Split(certIdList, ",")
  148. for i, item := range certIdarr {
  149. idx := strings.Index(item, "-")
  150. if idx >= 0 {
  151. certIdarr[i] = strings.Split(item, "-")[0]
  152. }
  153. }
  154. certIdList = strings.Join(certIdarr, ",")
  155. if certIdList != "" {
  156. where += " and ( r.Id in (" + certIdList + ")" + " or r.CreateUserId = '" + this.User.Id + "')"
  157. } else {
  158. where = where + " and r.CreateUserId = '" + this.User.Id + "'"
  159. }
  160. } else {
  161. //超级管理员和有查看所有数据权限的用户不加条件
  162. svcPerm := permission.GetPermissionService(utils.DBE)
  163. isauth := svcPerm.IsAuthorized(this.User.Id, "oil_contract.Review.AllRecord")
  164. if !isauth {
  165. // 权限过滤 自己创建的评价 ,同二级部门创建的评价 ,企管法规处能看
  166. where = where + " and ( r.CreateUserId = '" + this.User.Id + "' "
  167. where = where + " or r.UnitId = '" + strconv.Itoa(this.User.UnitId) + "' "
  168. where = where + " )"
  169. }
  170. }
  171. svc := contractReview.GetOilContractReviewService(utils.DBE)
  172. var list []contractReview.OilContractReviewListVo
  173. total := svc.GetContractReviewList(page.CurrentPage, page.Size, orderby, asc, &list, where)
  174. var datainfo DataInfo
  175. datainfo.Items = list
  176. datainfo.CurrentItemCount = total
  177. datainfo.PageIndex = page.CurrentPage
  178. datainfo.ItemsPerPage = page.Size
  179. this.Data["json"] = &datainfo
  180. this.ServeJSON()
  181. }
  182. // @Title 获取字典列表
  183. // @Description get user by token
  184. // @Success 200 {object} map[string]interface{}
  185. // @router /dictlist [get]
  186. func (this *OilContractReviewController) GetDictList() {
  187. dictList := make(map[string]interface{})
  188. //dictSvc := items.GetItemsService(utils.DBE)
  189. userSvc := baseUser.GetBaseUserService(utils.DBE)
  190. //customerSvc := svccustomer.GetCustomerService(utils.DBE)
  191. //dictList["WellNo"] = dictSvc.GetKeyValueItems("WellNo", this.User.AccCode)
  192. var userEntity userRole.Base_User
  193. userSvc.GetEntityById(this.User.Id, &userEntity)
  194. dictList["Supervisers"] = userSvc.GetUserListByDepartmentId(this.User.AccCode, userEntity.Departmentid)
  195. //var dictCustomer []svccustomer.Customer
  196. //customerSvc.GetEntitysByWhere(this.User.AccCode + CustomerName, "", &dictCustomer)
  197. //dictList["EntrustCorp"] = &dictCustomer
  198. var datainfo DataInfo
  199. datainfo.Items = dictList
  200. this.Data["json"] = &datainfo
  201. this.ServeJSON()
  202. }
  203. // @Title 获取实体
  204. // @Description 获取实体
  205. // @Success 200 {object} contractReview.OilContractReviewWorkFlow
  206. // @router /get/:id [get]
  207. func (this *OilContractReviewController) GetEntity() {
  208. Id := this.Ctx.Input.Param(":id")
  209. var model contractReview.OilContractReview
  210. svc := contractReview.GetOilContractReviewService(utils.DBE)
  211. svc.GetEntityByIdBytbl(OilContractReviewName, Id, &model)
  212. this.Data["json"] = &model
  213. this.ServeJSON()
  214. }
  215. // @Title 添加
  216. // @Description 新增
  217. // @Param body body contractReview.OilContractReviewWorkFlow
  218. // @Success 200 {object} controllers.Request
  219. // @router /add [post]
  220. func (this *OilContractReviewController) AddEntity() {
  221. var modeVO contractReview.OilContractReviewVo
  222. var jsonBlob = this.Ctx.Input.RequestBody
  223. json.Unmarshal(jsonBlob, &modeVO)
  224. svc := contractReview.GetOilContractReviewService(utils.DBE)
  225. itemSvc := contractEvaluationItems.GetOilContractEvaluationItemsService(utils.DBE)
  226. var reviewMode contractReview.OilContractReview
  227. reviewMode.IsFinal = modeVO.IsFinal
  228. reviewMode.IsBusiness = modeVO.IsBusiness
  229. reviewMode.ContractId = modeVO.ContractId
  230. reviewMode.Status = "0"
  231. reviewMode.Unit = this.User.Unit
  232. reviewMode.UnitId = this.User.UnitId
  233. reviewMode.CreateOn = time.Now()
  234. reviewMode.CreateBy = this.User.Realname
  235. reviewMode.CreateUserId, _ = utils.StrTo(this.User.Id).Int()
  236. _, err := svc.InsertEntityBytbl(OilContractReviewName, &reviewMode)
  237. var items2 []contractEvaluationItems.OilContractEvaluationItems
  238. var items3 []contractEvaluationItems.OilContractEvaluationItems
  239. var items4 []contractEvaluationItems.OilContractEvaluationItems // 业务处室发起评价
  240. var errinfo ErrorDataInfo
  241. if len(modeVO.Items) == 0 {
  242. errinfo.Message = "操作失败!评价细项信息不完整!"
  243. errinfo.Code = -1
  244. this.Data["json"] = &errinfo
  245. this.ServeJSON()
  246. return
  247. }
  248. // 新增配置项
  249. for i, v := range modeVO.Items {
  250. fmt.Print(i)
  251. var temp2 contractEvaluationItems.OilContractEvaluationItems
  252. temp2.ContentReviewId = reviewMode.Id
  253. temp2.Type = v.Category
  254. temp2.Category = 0
  255. temp2.ItemId = v.Id
  256. temp2.ParentId = v.ParentId
  257. temp2.SequenceNo = v.SequenceNo
  258. temp2.Content = v.Content
  259. temp2.NormalScore = v.NormalScore
  260. temp2.Score = v.Score
  261. temp2.Value = v.Value
  262. temp2.LevelCode = v.LevelCode
  263. temp2.Remark = v.Remark
  264. temp2.Content = v.Content
  265. temp2.ModifiedOn = time.Now()
  266. temp2.ModifiedBy = this.User.Realname
  267. temp2.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int()
  268. items2 = append(items2, temp2)
  269. var temp3 contractEvaluationItems.OilContractEvaluationItems
  270. temp3.ContentReviewId = reviewMode.Id
  271. temp3.Type = v.Category
  272. temp3.Category = 1
  273. temp3.ItemId = v.Id
  274. temp3.ParentId = v.ParentId
  275. temp3.SequenceNo = v.SequenceNo
  276. temp3.Content = v.Content
  277. temp3.NormalScore = v.NormalScore
  278. temp3.Score = v.Score
  279. temp3.Value = v.Value
  280. temp3.LevelCode = v.LevelCode
  281. temp3.Remark = v.Remark
  282. temp3.Content = v.Content
  283. temp3.ModifiedOn = time.Now()
  284. temp3.ModifiedBy = this.User.Realname
  285. temp3.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int()
  286. items3 = append(items3, temp3)
  287. // 保存专业处室发起评价
  288. var temp4 contractEvaluationItems.OilContractEvaluationItems
  289. temp4.ContentReviewId = reviewMode.Id
  290. temp4.Type = v.Category
  291. temp4.Category = 2
  292. temp4.ItemId = v.Id
  293. temp4.ParentId = v.ParentId
  294. temp4.SequenceNo = v.SequenceNo
  295. temp4.Content = v.Content
  296. temp4.NormalScore = v.NormalScore
  297. temp4.Score = v.Score
  298. temp4.Value = v.Value
  299. temp4.LevelCode = v.LevelCode
  300. temp4.Remark = v.Remark
  301. temp4.Content = v.Content
  302. temp4.ModifiedOn = time.Now()
  303. temp4.ModifiedBy = this.User.Realname
  304. temp4.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int()
  305. items4 = append(items4, temp4)
  306. }
  307. errBool := true
  308. if modeVO.IsBusiness == 0 {
  309. _, err2 := itemSvc.DBE.Insert(items2)
  310. // 专业处室评价默认二级
  311. _, err3 := itemSvc.DBE.Insert(items3)
  312. if err2 == nil && err3 == nil {
  313. errBool = false
  314. }
  315. }
  316. if modeVO.IsBusiness == 1 {
  317. _, err4 := itemSvc.DBE.Insert(items4)
  318. if err4 == nil {
  319. errBool = false
  320. }
  321. }
  322. if err == nil && errBool == false {
  323. //新增
  324. errinfo.Message = "添加成功!"
  325. errinfo.Code = 0
  326. errinfo.Item = reviewMode.Id
  327. this.Data["json"] = &errinfo
  328. this.ServeJSON()
  329. } else {
  330. errinfo.Message = "添加失败!" + utils.AlertProcess(err.Error())
  331. errinfo.Code = -1
  332. this.Data["json"] = &errinfo
  333. this.ServeJSON()
  334. }
  335. }
  336. // @Title 从数据录入数据导出到word文档
  337. // @Description 数据存入word
  338. // @Success 200 {object} controllers.Request
  339. // @router /exportword/:id [get]
  340. func (this *OilContractReviewController) DocExport() {
  341. // 填物资类信息表首页信息
  342. Id := this.Ctx.Input.Param(":id")
  343. var Url string
  344. var fileName string
  345. svcActiviti := workflow.GetActivitiService(utils.DBE)
  346. var model contractReview.OilContractReview
  347. svc := contractReview.GetOilContractReviewService(utils.DBE)
  348. var items []contractEvaluationItems.OilContractEvaluationItems
  349. var items1 []contractEvaluationItems.OilContractEvaluationItems
  350. itemSvc := contractEvaluationItems.GetOilContractEvaluationItemsService(utils.DBE)
  351. var contractModel contract.OilContract
  352. contractSvc := contract.GetOilContractService(utils.DBE)
  353. where := " Id = '" + Id + "'"
  354. svc.GetEntityByWhere(OilContractReviewName, where, &model)
  355. where3 := " Id= '" + utils.ToStr(model.ContractId) + "' "
  356. contractSvc.GetEntityByWhere(OilContractName, where3, &contractModel)
  357. var score = 0.00
  358. var normalScore = 0.00
  359. var count = 1.00
  360. datamap := structToMapDemo(model)
  361. where2 := " b.ContentReviewId = " + Id + " AND a.Type = '" + contractModel.ContractClass + "'"
  362. itemSvc.GetSumScore(&items, where2)
  363. where2 = " ContentReviewId = " + Id
  364. itemSvc.GetCountItems(&items1, where2)
  365. if len(items1) == 2 {
  366. count += 1
  367. }
  368. if items != nil {
  369. for i, v := range items {
  370. fmt.Print(i)
  371. fmt.Print(utils.ToStr(v.ItemId))
  372. if v.Type == 1 {
  373. Score1, _ := strconv.ParseFloat(v.Score, 64)
  374. datamap["score_"+utils.ToStr(v.ItemId)] = Score1 / count
  375. datamap["content_"+utils.ToStr(v.ItemId)] = v.Remark
  376. if v.ParentId == 0 {
  377. score = score + (Score1 / count)
  378. normal, _ := strconv.ParseFloat(v.NormalScore, 64)
  379. normalScore = normalScore + (normal / count)
  380. }
  381. } else {
  382. datamap["bool_"+utils.ToStr(v.ItemId)] = If(v.Value == 1, "是", "否")
  383. }
  384. }
  385. }
  386. var supplierEntity supplier.OilSupplier
  387. supplierSvc := supplier.GetOilSupplierService(utils.DBE)
  388. supplierSvc.GetEntityByIdBytbl(OilSupplierName, contractModel.SupplierId, &supplierEntity)
  389. datamap["Score"] = utils.ToStr(score)
  390. datamap["Standard"] = utils.ToStr(normalScore)
  391. datamap["Discount"] = score
  392. if contractModel.Id != 0 {
  393. datamap["Amount"] = contractModel.Amount
  394. datamap["SupplierName"] = contractModel.SupplierName
  395. datamap["ProjectName"] = contractModel.ContractName
  396. datamap["ContractNo"] = contractModel.ContractNo
  397. datamap["SubPackage"] = If(contractModel.SubPackage == 1, "是", "否")
  398. if contractModel.ProjectType == "咨询" {
  399. datamap["ProjectType"] = "☑咨询 □勘察 □设计 □施工\n□监理 □检测 □工程总承包"
  400. } else if contractModel.ContractClass == "勘探" {
  401. datamap["ProjectType"] = "□咨询 ☑勘察 □设计 □施工\n□监理 □检测 □工程总承包"
  402. } else if contractModel.ContractClass == "设计" {
  403. datamap["ProjectType"] = "□咨询 □勘察 ☑设计 □施工\n□监理 □检测 □工程总承包"
  404. } else if contractModel.ContractClass == "施工" {
  405. datamap["ProjectType"] = "□咨询 □勘察 □设计 ☑施工\n□监理 □检测 □工程总承包"
  406. }
  407. datamap["ContractPeriod"] = contractModel.ContractPeriod
  408. datamap["OpenDate"] = contractModel.OpenDate.Format("2006年01月02日")
  409. datamap["PlanFinishDate"] = contractModel.PlanFinishDate.Format("2006年01月02日")
  410. datamap["ConstructionUnit"] = contractModel.ConstructionUnit
  411. datamap["ConstructionOwner"] = contractModel.ConstructionOwner
  412. datamap["ConstructionTelphone"] = contractModel.ConstructionTelphone
  413. }
  414. if supplierEntity.Id != 0 {
  415. if supplierEntity.Grade == "一级" {
  416. datamap["OperType"] = "☑一级供应商 □二级制造商 □二级贸易商 □代理商"
  417. } else if supplierEntity.OperType == "制造商" {
  418. datamap["OperType"] = "□一级供应商 ☑二级制造商 □二级贸易商 □代理商"
  419. } else if supplierEntity.OperType == "代理商" {
  420. datamap["OperType"] = "□一级供应商 □二级制造商 □二级贸易商 ☑代理商"
  421. } else if supplierEntity.OperType == "贸易商" {
  422. datamap["OperType"] = "□一级供应商 □二级制造商 ☑二级贸易商 □代理商"
  423. }
  424. }
  425. // 获取组织名称
  426. svcorg := organize.GetOrganizeService(utils.DBE)
  427. datamap["DepartName"] = svcorg.GetNameById(strconv.Itoa(this.User.UnitId))
  428. fileName = ""
  429. Url = ""
  430. if contractModel.ContractClass == "01" {
  431. fileName = "供应商日常业绩评价表模板.docx"
  432. Url = utils.Cfg.MustValue("workflow", "reviewGoodsUrl")
  433. } else if contractModel.ContractClass == "02" {
  434. fileName = "承包商日常业绩评价表模板.docx"
  435. Url = utils.Cfg.MustValue("workflow", "reviewBasisUrl")
  436. } else {
  437. if contractModel.ClassName == "供用水电气热合同" {
  438. datamap["OperType"] = "☑水电气热 □油田工程 □仓储保管\n□技术和知识产权 □运输 □服务\n□承揽 □租赁 □其他 "
  439. } else if contractModel.ClassName == "仓储保管合同" {
  440. datamap["OperType"] = "□水电气热 □油田工程 ☑仓储保管\n□技术和知识产权 □运输 □服务\n□承揽 □租赁 □其他 "
  441. } else if contractModel.ClassName == "技术合同和知识产权合同" {
  442. datamap["OperType"] = "□水电气热 □油田工程 □仓储保管\n☑技术和知识产权 □运输 □服务\n□承揽 □租赁 □其他 "
  443. } else if contractModel.ClassName == "运输合同" {
  444. datamap["OperType"] = "□水电气热 □油田工程 □仓储保管\n□技术和知识产权 ☑运输 □服务\n□承揽 □租赁 □其他 "
  445. } else if contractModel.ClassName == "服务合同" {
  446. datamap["OperType"] = "□水电气热 □油田工程 □仓储保管\n□技术和知识产权 □运输 ☑服务\n□承揽 □租赁 □其他 "
  447. } else if contractModel.ClassName == "承揽合同" {
  448. datamap["OperType"] = "□水电气热 □油田工程 □仓储保管\n□技术和知识产权 □运输 □服务\n☑承揽 □租赁 □其他 "
  449. } else if contractModel.ClassName == "租赁合同" {
  450. datamap["OperType"] = "□水电气热 □油田工程 □仓储保管\n□技术和知识产权 □运输 □服务\n□承揽 ☑租赁 □其他 "
  451. } else {
  452. datamap["OperType"] = "□水电气热 □油田工程 □仓储保管\n□技术和知识产权 □运输 □服务\n□承揽 □租赁 ☑其他 "
  453. }
  454. fileName = "服务商日常业绩评价表模板.docx"
  455. Url = utils.Cfg.MustValue("workflow", "reviewServiceUrl")
  456. }
  457. t := time.Now()
  458. datamap["CreateDate"] = t.Format("2006年01月02日")
  459. datamap["Year"] = t.Format("2006")
  460. datamap["Creater"] = this.User.Realname
  461. //datamap["TableComment"] = []string{"MajorEquipments", "ThreeYears", "Patent", "Winning"}
  462. retDocUrl := svcActiviti.FillWordTemplate(datamap, Url, fileName)
  463. //retDocUrl := svcActiviti.FillWordWatermarkTemplate(datamap, Url, fileName, model.SupplierName)
  464. var datainfo ErrorDataInfo
  465. datainfo.Code = 0
  466. datainfo.Item = retDocUrl
  467. datainfo.Message = "导出成功"
  468. this.Data["json"] = &datainfo
  469. this.ServeJSON()
  470. }
  471. func If(condition bool, trueVal, falseVal interface{}) interface{} {
  472. if condition {
  473. return trueVal
  474. }
  475. return falseVal
  476. }
  477. // @Title 添加
  478. // @Description 业务处室保存评价
  479. // @Param body body contractReview.OilContractReviewWorkFlow
  480. // @Success 200 {object} controllers.Request
  481. // @router /save-sec-evaluation/:id [post]
  482. func (this *OilContractReviewController) SaveEvaluationItemsBySec() {
  483. id := this.Ctx.Input.Param(":id")
  484. var errinfo ErrorInfo
  485. defer func() { //finally处理失败的异常
  486. if err := recover(); err != nil {
  487. errinfo.Message = err.(string)
  488. errinfo.Code = -1
  489. this.Data["json"] = &errinfo
  490. this.ServeJSON()
  491. } else {
  492. //返回正确结果
  493. errinfo.Message = "修改成功"
  494. errinfo.Code = 0
  495. this.Data["json"] = &errinfo
  496. this.ServeJSON()
  497. }
  498. }()
  499. if id == "" {
  500. panic("操作失败!请求信息不完整")
  501. }
  502. var modeVO contractReview.OilContractReviewVo
  503. itemSvc := contractEvaluationItems.GetOilContractEvaluationItemsService(utils.DBE)
  504. var jsonBlob = this.Ctx.Input.RequestBody
  505. json.Unmarshal(jsonBlob, &modeVO)
  506. if len(modeVO.Items) == 0 {
  507. panic("操作失败!评价细项信息不完整")
  508. }
  509. //where := "ContentReviewId=" + id + " AND Category = 1 "
  510. // 清除掉之前的
  511. //itemSvc.DeleteEntityBytbl(OilContractEvaluationItemsName, where)
  512. // 新增配置项
  513. for _, v := range modeVO.Items {
  514. if v.Id == 0 {
  515. panic("操作失败!请求信息Id不完整")
  516. }
  517. cols := []string{"Score", "Value", "Remark", "ModifiedOn", "ModifiedBy", "ModifiedUserId"}
  518. var temp contractEvaluationItems.OilContractEvaluationItems
  519. temp.Score = v.Score
  520. temp.Value = v.Value
  521. temp.Remark = v.Remark
  522. temp.ModifiedOn = time.Now()
  523. temp.ModifiedBy = this.User.Realname
  524. temp.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int()
  525. err := itemSvc.UpdateEntityBywheretbl(OilContractEvaluationItemsName, &temp, cols, "Category = 1 and ContentReviewId = "+id+" and ItemId = "+strconv.Itoa(v.Id))
  526. if err != nil {
  527. panic("修改失败!" + utils.AlertProcess(err.Error()))
  528. }
  529. }
  530. }
  531. // @Title 修改实体
  532. // @Description 企管法规处修改二级单位的评价内容
  533. // @Param body body contractReview.OilContractReviewWorkFlow
  534. // @Success 200 {object} controllers.Request
  535. // @router /prof-update/:id [post]
  536. func (this *OilContractReviewController) ProfUpdateSecEvaEntity() {
  537. id := this.Ctx.Input.Param(":id")
  538. var errinfo ErrorInfo
  539. defer func() { //finally处理失败的异常
  540. if err := recover(); err != nil {
  541. errinfo.Message = err.(string)
  542. errinfo.Code = -1
  543. this.Data["json"] = &errinfo
  544. this.ServeJSON()
  545. } else {
  546. //返回正确结果
  547. errinfo.Message = "修改成功"
  548. errinfo.Code = 0
  549. this.Data["json"] = &errinfo
  550. this.ServeJSON()
  551. }
  552. }()
  553. if id == "" {
  554. panic("操作失败!请求信息不完整")
  555. }
  556. var modeVO contractReview.OilContractReviewVo
  557. itemSvc := contractEvaluationItems.GetOilContractEvaluationItemsService(utils.DBE)
  558. var jsonBlob = this.Ctx.Input.RequestBody
  559. json.Unmarshal(jsonBlob, &modeVO)
  560. if len(modeVO.Items) == 0 {
  561. panic("操作失败!评价细项信息不完整")
  562. }
  563. //where := "ContentReviewId=" + id + " AND Category = 0 "
  564. // 清除掉之前的
  565. //itemSvc.DeleteEntityBytbl(OilContractEvaluationItemsName, where)
  566. // 新增配置项
  567. for _, v := range modeVO.Items {
  568. if v.Id == 0 {
  569. panic("操作失败!请求信息Id不完整")
  570. }
  571. cols := []string{"Score", "Value", "Remark", "ModifiedOn", "ModifiedBy", "ModifiedUserId"}
  572. var temp contractEvaluationItems.OilContractEvaluationItems
  573. temp.Score = v.Score
  574. temp.Value = v.Value
  575. temp.Remark = v.Remark
  576. temp.ModifiedOn = time.Now()
  577. temp.ModifiedBy = this.User.Realname
  578. temp.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int()
  579. err := itemSvc.UpdateEntityBywheretbl(OilContractEvaluationItemsName, &temp, cols, "Category = 0 and ContentReviewId = "+id+" and ItemId = "+strconv.Itoa(v.Id))
  580. if err != nil {
  581. panic("修改失败!" + utils.AlertProcess(err.Error()))
  582. }
  583. }
  584. }
  585. // @Title 修改实体
  586. // @Description 修改实体
  587. // @Param body body contractReview.OilContractReviewWorkFlow
  588. // @Success 200 {object} controllers.Request
  589. // @router /update/:id [post]
  590. func (this *OilContractReviewController) UpdateEntity() {
  591. id := this.Ctx.Input.Param(":id")
  592. var errinfo ErrorInfo
  593. defer func() { //finally处理失败的异常
  594. if err := recover(); err != nil {
  595. errinfo.Message = err.(string)
  596. errinfo.Code = -1
  597. this.Data["json"] = &errinfo
  598. this.ServeJSON()
  599. } else {
  600. //返回正确结果
  601. errinfo.Message = "修改成功"
  602. errinfo.Code = 0
  603. this.Data["json"] = &errinfo
  604. this.ServeJSON()
  605. }
  606. }()
  607. if id == "" {
  608. panic("操作失败!请求信息不完整")
  609. }
  610. var modeVO contractReview.OilContractReviewVo
  611. svc := contractReview.GetOilContractReviewService(utils.DBE)
  612. itemSvc := contractEvaluationItems.GetOilContractEvaluationItemsService(utils.DBE)
  613. var jsonBlob = this.Ctx.Input.RequestBody
  614. json.Unmarshal(jsonBlob, &modeVO)
  615. if len(modeVO.Items) == 0 {
  616. panic("操作失败!评价细项信息不完整")
  617. }
  618. var reviewMode contractReview.OilContractReview
  619. reviewMode.ContractId = modeVO.ContractId
  620. reviewMode.Status = "0"
  621. reviewMode.ModifiedOn = time.Now()
  622. reviewMode.ModifiedBy = this.User.Realname
  623. reviewMode.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int()
  624. cols := []string{
  625. "Id",
  626. "ContractId",
  627. "BackRemark",
  628. "FirstAudit",
  629. "SecondAudit",
  630. "ThirdAudit",
  631. "FourthAudit",
  632. "ProfessionalAudit",
  633. "AuditIndex",
  634. "IsFinal",
  635. "ModifiedOn",
  636. "ModifiedUserId",
  637. "ModifiedBy",
  638. }
  639. err := svc.UpdateEntityBytbl(OilContractReviewName, id, &reviewMode, cols)
  640. if err != nil {
  641. panic("修改失败!" + utils.AlertProcess(err.Error()))
  642. }
  643. cols = []string{"Score", "Value", "Remark", "ModifiedOn", "ModifiedBy", "ModifiedUserId"}
  644. if modeVO.IsBusiness == 0 {
  645. //where := "ContentReviewId=" + id + " AND Category = 0 "
  646. // 清除掉之前的
  647. //itemSvc.DeleteEntityBytbl(OilContractEvaluationItemsName, where)
  648. // 新增配置项
  649. for _, v := range modeVO.Items {
  650. if v.Id == 0 {
  651. panic("操作失败!请求信息Id不完整")
  652. }
  653. var temp contractEvaluationItems.OilContractEvaluationItems
  654. temp.Score = v.Score
  655. temp.Value = v.Value
  656. temp.Remark = v.Remark
  657. temp.ModifiedOn = time.Now()
  658. temp.ModifiedBy = this.User.Realname
  659. temp.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int()
  660. err := itemSvc.UpdateEntityBywheretbl(OilContractEvaluationItemsName, &temp, cols, "Category = 0 and ContentReviewId = "+id+" and ItemId = "+strconv.Itoa(v.Id))
  661. if err != nil {
  662. panic("修改失败!" + utils.AlertProcess(err.Error()))
  663. }
  664. }
  665. //where2 := "ContentReviewId=" + id + " AND Category = 1 "
  666. // 清除掉之前的
  667. //itemSvc.DeleteEntityBytbl(OilContractEvaluationItemsName, where2)
  668. // 新增配置项
  669. for _, v := range modeVO.Items {
  670. if v.Id == 0 {
  671. panic("操作失败!请求信息Id不完整")
  672. }
  673. var temp2 contractEvaluationItems.OilContractEvaluationItems
  674. temp2.Score = v.Score
  675. temp2.Value = v.Value
  676. temp2.Remark = v.Remark
  677. err := itemSvc.UpdateEntityBywheretbl(OilContractEvaluationItemsName, &temp2, cols, "Category = 1 and ContentReviewId = "+id+" and ItemId = "+strconv.Itoa(v.Id))
  678. if err != nil {
  679. panic("修改失败!" + utils.AlertProcess(err.Error()))
  680. }
  681. }
  682. }
  683. if modeVO.IsBusiness == 1 {
  684. //where3 := "ContentReviewId=" + id + " AND Category = 2 "
  685. // 清除掉之前的
  686. //itemSvc.DeleteEntityBytbl(OilContractEvaluationItemsName, where3)
  687. // 新增配置项
  688. for _, v := range modeVO.Items {
  689. if v.Id == 0 {
  690. panic("操作失败!请求信息Id不完整")
  691. }
  692. var temp3 contractEvaluationItems.OilContractEvaluationItems
  693. temp3.Score = v.Score
  694. temp3.Value = v.Value
  695. temp3.Remark = v.Remark
  696. temp3.ModifiedOn = time.Now()
  697. temp3.ModifiedBy = this.User.Realname
  698. temp3.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int()
  699. err := itemSvc.UpdateEntityBywheretbl(OilContractEvaluationItemsName, &temp3, cols, "Category = 2 and ContentReviewId = "+id+" and ItemId = "+strconv.Itoa(v.Id))
  700. if err != nil {
  701. panic("修改失败!" + utils.AlertProcess(err.Error()))
  702. }
  703. }
  704. }
  705. }
  706. // @Title 删除单条信息
  707. // @Description
  708. // @Success 200 {object} ErrorInfo
  709. // @Failure 403 :id 为空
  710. // @router /delete/:Id [delete]
  711. func (this *OilContractReviewController) DeleteEntity() {
  712. Id := this.Ctx.Input.Param(":Id")
  713. var errinfo ErrorInfo
  714. if Id == "" {
  715. errinfo.Message = "操作失败!请求信息不完整"
  716. errinfo.Code = -2
  717. this.Data["json"] = &errinfo
  718. this.ServeJSON()
  719. return
  720. }
  721. var model contractReview.OilContractReview
  722. var entityempty contractReview.OilContractReview
  723. svc := contractReview.GetOilContractReviewService(utils.DBE)
  724. // 评分审核是否结束校验
  725. svc.GetEntityByIdBytbl(OilContractReviewName, Id, &model)
  726. if model.Status > "0" && model.Status < "8" {
  727. errinfo.Message = "该合同评价正在审核,不允许删除!"
  728. errinfo.Code = -1
  729. this.Data["json"] = &errinfo
  730. this.ServeJSON()
  731. return
  732. }
  733. var setting auditsetting.Base_OilAuditSetting
  734. orgSvc := organize.GetOrganizeService(utils.DBE)
  735. whereAudit := "AuditStepCode='PROF_REGULATION'"
  736. orgSvc.GetEntity(&setting, whereAudit)
  737. res := orgSvc.UserInRoleById(this.User.Id, strconv.Itoa(setting.RoleId))
  738. if model.Status == "8" && !res {
  739. errinfo.Message = "无权删除!"
  740. errinfo.Code = -1
  741. this.Data["json"] = &errinfo
  742. this.ServeJSON()
  743. return
  744. }
  745. opdesc := "删除-" + Id
  746. err := svc.DeleteOperationAndWriteLogBytbl(OilContractReviewName, BaseOperationLogName, Id, &model, &entityempty, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, "钻井日报")
  747. if err == nil {
  748. activitiService := workflow.GetActivitiService(utils.DBE)
  749. var deleteProcessVM workflow.DeleteProcessVM
  750. if model.WorkflowId != "" && model.WorkflowId != "0" {
  751. deleteProcessVM.ProcessInstanceId = model.WorkflowId
  752. if model.Status == "8" {
  753. deleteProcessVM.DeleteReason = "企管法规处删除日常评价"
  754. } else {
  755. deleteProcessVM.DeleteReason = "日常评价审批未通过后,被申请人删除"
  756. }
  757. activitiService.DeleteComplete(deleteProcessVM)
  758. }
  759. errinfo.Message = "删除成功"
  760. errinfo.Code = 0
  761. this.Data["json"] = &errinfo
  762. this.ServeJSON()
  763. } else {
  764. errinfo.Message = "删除失败!" + utils.AlertProcess(err.Error())
  765. errinfo.Code = -1
  766. this.Data["json"] = &errinfo
  767. this.ServeJSON()
  768. }
  769. }
  770. // @Title 二级单位提交审批 --启动工作流
  771. // @Description 二级单位提交审批
  772. // @Success 200 {object} controllers.Request
  773. // @router /unit-audit/:id [post]
  774. func (this *OilContractReviewController) UnitAuditEntity() {
  775. Id := this.Ctx.Input.Param(":id")
  776. firstAudit := this.GetString("FirstAudit")
  777. secondAudit := this.GetString("SecondAudit")
  778. thirdAudit := this.GetString("ThirdAudit")
  779. AuditRemark := this.GetString("AuditRemark")
  780. userId := this.User.Id
  781. var baseUserInfo userRole.Base_User
  782. userService := userRole.GetUserService(utils.DBE)
  783. userService.GetEntityById(userId, &baseUserInfo)
  784. unitId := baseUserInfo.UnitId
  785. fmt.Println("2222222222")
  786. var errinfo ErrorDataInfo
  787. defer func() { //finally处理失败的异常
  788. if err := recover(); err != nil {
  789. errinfo.Message = err.(string)
  790. errinfo.Code = -1
  791. this.Data["json"] = &errinfo
  792. this.ServeJSON()
  793. } else {
  794. //返回正确结果
  795. errinfo.Message = "审核提交成功"
  796. errinfo.Code = 0
  797. this.Data["json"] = &errinfo
  798. this.ServeJSON()
  799. }
  800. }()
  801. //取出日常评审主表信息
  802. conRev := contractReview.GetOilContractReviewService(utils.DBE)
  803. var contractReviewEntity contractReview.OilContractReview
  804. conRev.GetEntityById(Id, &contractReviewEntity)
  805. if strconv.Itoa(contractReviewEntity.CreateUserId) != this.User.Id {
  806. panic("该评价创建人才可提交审核!")
  807. }
  808. //检查是否可提交
  809. //conRev.IsSupplierCertCanSubmit(strconv.Itoa(supplierCertEntity.SupplierId), certId)
  810. //取出合同表
  811. contractSvc := contract.GetOilContractService(utils.DBE)
  812. var contractEntity contract.OilContract
  813. contractSvc.GetEntityById(contractReviewEntity.ContractId, &contractEntity)
  814. svcActiviti := workflow.GetActivitiService(utils.DBE)
  815. //启动工作流
  816. businessKey := contractReviewEntity.BusinessKey
  817. processInstanceId := contractReviewEntity.WorkflowId
  818. // 如果被驳回,不再新启工作流
  819. if processInstanceId == "" {
  820. //启动工作流
  821. businessKey = Id + "-" + strconv.Itoa(contractReviewEntity.AuditIndex)
  822. processInstanceId = svcActiviti.StartProcess2(workflow.OIL_DAILY_CONTRACT_EVALUATION, businessKey, this.User.Id, "1", contractEntity.ContractClass, contractEntity.SupplierName)
  823. if len(processInstanceId) <= 0 {
  824. panic("工作流启动失败!")
  825. }
  826. contractReviewEntity.AuditIndex += 1
  827. }
  828. // 将启动和工作流,选择的初审和复审人员保存下来
  829. cols := []string{
  830. "Id",
  831. "FirstAudit",
  832. "SecondAudit",
  833. "thirdAudit",
  834. "WorkflowId",
  835. "BusinessKey",
  836. "ProcessKey",
  837. "CommitComId",
  838. "AuditIndex",
  839. }
  840. contractReviewEntity.ProcessKey = workflow.OIL_DAILY_CONTRACT_EVALUATION
  841. contractReviewEntity.BusinessKey = businessKey
  842. contractReviewEntity.WorkflowId = processInstanceId
  843. contractReviewEntity.FirstAudit, _ = strconv.Atoi(firstAudit)
  844. contractReviewEntity.SecondAudit, _ = strconv.Atoi(secondAudit)
  845. contractReviewEntity.ThirdAudit, _ = strconv.Atoi(thirdAudit)
  846. contractReviewEntity.CommitComId = strconv.Itoa(unitId)
  847. conRev.UpdateEntityByIdCols(Id, contractReviewEntity, cols)
  848. var ActiComplete workflow.ActiCompleteVM
  849. ActiComplete.ProcessKey = workflow.OIL_DAILY_CONTRACT_EVALUATION
  850. ActiComplete.BusinessKey = contractReviewEntity.BusinessKey
  851. ActiComplete.UserId = this.User.Id // 当前审批操作人员
  852. //ActiComplete.UserNames = secondAudit // 当前审批操作人员
  853. ActiComplete.Result = "2" //分办提交给二级单位初审
  854. ActiComplete.Remarks = AuditRemark
  855. ActiComplete.CallbackUrl = utils.Cfg.MustValue("workflow", "callbackHost")
  856. receiveVal := svcActiviti.TaskComplete(ActiComplete)
  857. if receiveVal != "true" {
  858. panic("工作流异常,请联系管理员!" + receiveVal)
  859. }
  860. }
  861. // @Title 分办之后的各级审批 --审批 包含:二级单位初审、复审, 业务处室专业审核、企管法规处审核
  862. // @Description 分办之后的各级审批
  863. // @Success 200 {object} controllers.Request
  864. // @router /common-audit/:id [post]
  865. func (this *OilContractReviewController) CommonAuditEntity() {
  866. Id := this.Ctx.Input.Param(":id")
  867. result := this.GetString("result")
  868. AuditRemark := this.GetString("AuditRemark")
  869. var errinfo ErrorDataInfo
  870. if Id == "" {
  871. errinfo.Message = "请至少选择一条申请进行审批!"
  872. errinfo.Code = -1
  873. this.Data["json"] = &errinfo
  874. this.ServeJSON()
  875. return
  876. }
  877. Ids := strings.Split(Id, ",")
  878. defer func() { //finally处理失败的异常
  879. if err := recover(); err != nil {
  880. errinfo.Message = err.(string)
  881. errinfo.Code = -1
  882. this.Data["json"] = &errinfo
  883. this.ServeJSON()
  884. } else {
  885. //返回正确结果
  886. msg := ""
  887. if len(Ids) > 1 {
  888. msg = "审核提交成功,请耐心等待批处理结果!"
  889. } else {
  890. msg = "审批成功!"
  891. }
  892. if result == "1" {
  893. errinfo.Message = msg
  894. } else {
  895. errinfo.Message = "审批驳回成功!"
  896. }
  897. errinfo.Code = 0
  898. this.Data["json"] = &errinfo
  899. this.ServeJSON()
  900. }
  901. }()
  902. var lock sync.Mutex
  903. for i := 0; i < len(Ids); i++ {
  904. lock.Lock()
  905. //取出日常评审主表信息
  906. conRev := contractReview.GetOilContractReviewService(utils.DBE)
  907. var contractReviewEntity contractReview.OilContractReview
  908. conRev.GetEntityById(Ids[i], &contractReviewEntity)
  909. svcActiviti := workflow.GetActivitiService(utils.DBE)
  910. var ActiComplete workflow.ActiCompleteVM
  911. if contractReviewEntity.IsBusiness == 1 {
  912. ActiComplete.ProcessKey = workflow.OIL_DAILY_CONTRACT_EVA_BY_BUSINESS // 业务处室分办提交的日常评价
  913. } else {
  914. ActiComplete.ProcessKey = workflow.OIL_DAILY_CONTRACT_EVALUATION // 二级单位提交的日常评价
  915. }
  916. ActiComplete.BusinessKey = contractReviewEntity.BusinessKey
  917. ActiComplete.UserId = this.User.Id //审批人员
  918. ActiComplete.Result = result //前台审批[同意、不同意]
  919. ActiComplete.Remarks = AuditRemark
  920. ActiComplete.CallbackUrl = utils.Cfg.MustValue("workflow", "callbackHost")
  921. if len(Ids) > 1 {
  922. go func() {
  923. receiveVal := svcActiviti.TaskComplete(ActiComplete)
  924. if receiveVal != "true" {
  925. log.Print("日常评价 工作流异常,业务ID:" + contractReviewEntity.BusinessKey + ",工作流信息:" + receiveVal)
  926. }
  927. }()
  928. time.Sleep(time.Duration(200) * time.Millisecond) // 休眠200毫秒
  929. } else {
  930. receiveVal := svcActiviti.TaskComplete(ActiComplete)
  931. if receiveVal != "true" {
  932. log.Print("日常评价 工作流异常,业务ID:" + contractReviewEntity.BusinessKey + ",工作流信息:" + receiveVal)
  933. }
  934. }
  935. lock.Unlock()
  936. }
  937. }
  938. // @Title 业务处室接收分办
  939. // @Description 业务处室接收分办
  940. // @Success 200 {object} controllers.Request
  941. // @router /business-separate-audit/:id [post]
  942. func (this *OilContractReviewController) BusinessOfficeSeparateAuditEntity() {
  943. Id := this.Ctx.Input.Param(":id")
  944. Result := this.GetString("Result")
  945. ProfessionalAudit := this.GetString("ProfessionalAudit")
  946. AuditRemark := this.GetString("AuditRemark")
  947. var errInfo ErrorDataInfo
  948. if Id == "" {
  949. errInfo.Message = "请至少选择一条申请进行审批!"
  950. errInfo.Code = -1
  951. this.Data["json"] = &errInfo
  952. this.ServeJSON()
  953. return
  954. }
  955. Ids := strings.Split(Id, ",")
  956. defer func() { //finally处理失败的异常
  957. if err := recover(); err != nil {
  958. errInfo.Message = err.(string)
  959. errInfo.Code = -1
  960. this.Data["json"] = &errInfo
  961. this.ServeJSON()
  962. } else {
  963. //返回正确结果
  964. msg := ""
  965. if len(Ids) > 1 {
  966. msg = "审核提交成功,请耐心等待批处理结果!"
  967. } else {
  968. msg = "审批成功!"
  969. }
  970. if Result == "1" {
  971. errInfo.Message = msg
  972. } else {
  973. errInfo.Message = "审批驳回成功!"
  974. }
  975. errInfo.Code = 0
  976. this.Data["json"] = &errInfo
  977. this.ServeJSON()
  978. }
  979. }()
  980. if Result == "1" && ProfessionalAudit == "" {
  981. panic("请选择审批人")
  982. }
  983. var lock sync.Mutex
  984. for i := 0; i < len(Ids); i++ {
  985. lock.Lock()
  986. //取出日常评审主表信息
  987. conRev := contractReview.GetOilContractReviewService(utils.DBE)
  988. var contractReviewEntity contractReview.OilContractReview
  989. conRev.GetEntityById(Ids[i], &contractReviewEntity)
  990. svcActiviti := workflow.GetActivitiService(utils.DBE)
  991. var ActiComplete workflow.ActiCompleteVM
  992. ActiComplete.ProcessKey = workflow.OIL_DAILY_CONTRACT_EVALUATION
  993. ActiComplete.BusinessKey = contractReviewEntity.BusinessKey
  994. ActiComplete.UserId = this.User.Id //审批人员
  995. ActiComplete.Result = Result //前台审批[同意、不同意]
  996. ActiComplete.UserNames = ProfessionalAudit
  997. ActiComplete.Remarks = AuditRemark
  998. ActiComplete.CallbackUrl = utils.Cfg.MustValue("workflow", "callbackHost")
  999. if len(Ids) > 1 {
  1000. go func() {
  1001. receiveVal := svcActiviti.TaskComplete(ActiComplete)
  1002. if receiveVal != "true" {
  1003. log.Print("日常评价 工作流异常,业务ID:" + contractReviewEntity.BusinessKey + ",工作流信息:" + receiveVal)
  1004. } else {
  1005. if Result == "1" {
  1006. cols := []string{
  1007. "Id",
  1008. "Status",
  1009. "ProfessionalAudit",
  1010. }
  1011. supplierCertId := strings.Split(contractReviewEntity.BusinessKey, "-")[0]
  1012. contractReviewEntity.Status = suppliercert.PROF_AUDIT_STATUS //专业处室接收
  1013. contractReviewEntity.ProfessionalAudit, _ = strconv.Atoi(ProfessionalAudit)
  1014. conRev.UpdateEntityByIdCols(supplierCertId, contractReviewEntity, cols)
  1015. fmt.Println("业务处室分办协程!" + strconv.Itoa(i))
  1016. }
  1017. }
  1018. }()
  1019. time.Sleep(time.Duration(200) * time.Millisecond) // 休眠200毫秒
  1020. } else {
  1021. receiveVal := svcActiviti.TaskComplete(ActiComplete)
  1022. if receiveVal != "true" {
  1023. log.Print("日常评价 工作流异常,业务ID:" + contractReviewEntity.BusinessKey + ",工作流信息:" + receiveVal)
  1024. } else {
  1025. if Result == "1" {
  1026. cols := []string{
  1027. "Id",
  1028. "Status",
  1029. "ProfessionalAudit",
  1030. }
  1031. supplierCertId := strings.Split(contractReviewEntity.BusinessKey, "-")[0]
  1032. contractReviewEntity.Status = suppliercert.PROF_AUDIT_STATUS //专业处室接收
  1033. contractReviewEntity.ProfessionalAudit, _ = strconv.Atoi(ProfessionalAudit)
  1034. conRev.UpdateEntityByIdCols(supplierCertId, contractReviewEntity, cols)
  1035. fmt.Println("业务处室分办协程!" + strconv.Itoa(i))
  1036. }
  1037. }
  1038. }
  1039. lock.Unlock()
  1040. }
  1041. }
  1042. // @Title 业务处室提交评价审核
  1043. // @Description 业务处室提交评价审核
  1044. // @Success 200 {object} controllers.Request
  1045. // @router /business-submit-review/:id [post]
  1046. func (this *OilContractReviewController) BusinessSubmitEvaEntity() {
  1047. Id := this.Ctx.Input.Param(":id")
  1048. ProfessionalAudit := this.GetString("ProfessionalAudit")
  1049. AuditRemark := this.GetString("AuditRemark")
  1050. userId := this.User.Id
  1051. var baseUserInfo userRole.Base_User
  1052. userService := userRole.GetUserService(utils.DBE)
  1053. userService.GetEntityById(userId, &baseUserInfo)
  1054. unitId := baseUserInfo.UnitId
  1055. var errInfo ErrorDataInfo
  1056. defer func() { //finally处理失败的异常
  1057. if err := recover(); err != nil {
  1058. errInfo.Message = err.(string)
  1059. errInfo.Code = -1
  1060. this.Data["json"] = &errInfo
  1061. this.ServeJSON()
  1062. } else {
  1063. //返回正确结果
  1064. errInfo.Message = "审核提交成功,请耐心等待批处理结果"
  1065. errInfo.Code = 0
  1066. this.Data["json"] = &errInfo
  1067. this.ServeJSON()
  1068. }
  1069. }()
  1070. if ProfessionalAudit == "" {
  1071. errInfo.Message = "请选择审批人"
  1072. errInfo.Code = -1
  1073. this.Data["json"] = &errInfo
  1074. this.ServeJSON()
  1075. }
  1076. //取出日常评审主表信息
  1077. conRev := contractReview.GetOilContractReviewService(utils.DBE)
  1078. var contractReviewEntity contractReview.OilContractReview
  1079. conRev.GetEntityById(Id, &contractReviewEntity)
  1080. //取出合同表
  1081. contractSvc := contract.GetOilContractService(utils.DBE)
  1082. var contractEntity contract.OilContract
  1083. contractSvc.GetEntityById(contractReviewEntity.ContractId, &contractEntity)
  1084. svcActiviti := workflow.GetActivitiService(utils.DBE)
  1085. //启动工作流
  1086. businessKey := contractReviewEntity.BusinessKey
  1087. processInstanceId := contractReviewEntity.WorkflowId
  1088. // 如果被驳回,不再新启工作流
  1089. if processInstanceId == "" {
  1090. //启动工作流
  1091. businessKey = Id + "-" + strconv.Itoa(contractReviewEntity.AuditIndex)
  1092. processInstanceId = svcActiviti.StartProcess2(workflow.OIL_DAILY_CONTRACT_EVA_BY_BUSINESS, businessKey, this.User.Id, "1", contractEntity.ContractClass, contractEntity.SupplierName)
  1093. if len(processInstanceId) <= 0 {
  1094. panic("工作流启动失败!")
  1095. }
  1096. contractReviewEntity.AuditIndex += 1
  1097. }
  1098. // 将启动和工作流,选择的初审和复审人员保存下来
  1099. cols := []string{
  1100. "Id",
  1101. "WorkflowId",
  1102. "BusinessKey",
  1103. "ProcessKey",
  1104. "CommitComId",
  1105. "AuditIndex",
  1106. "ProfessionalAudit",
  1107. }
  1108. contractReviewEntity.ProcessKey = workflow.OIL_DAILY_CONTRACT_EVA_BY_BUSINESS
  1109. contractReviewEntity.BusinessKey = businessKey
  1110. contractReviewEntity.WorkflowId = processInstanceId
  1111. contractReviewEntity.CommitComId = strconv.Itoa(unitId)
  1112. contractReviewEntity.ProfessionalAudit, _ = strconv.Atoi(ProfessionalAudit)
  1113. conRev.UpdateEntityByIdCols(Id, contractReviewEntity, cols)
  1114. var ActiComplete workflow.ActiCompleteVM
  1115. ActiComplete.ProcessKey = workflow.OIL_DAILY_CONTRACT_EVA_BY_BUSINESS
  1116. ActiComplete.BusinessKey = contractReviewEntity.BusinessKey
  1117. ActiComplete.UserId = this.User.Id // 当前审批操作人员
  1118. ActiComplete.Result = "1" //业务处室分办提交给处室审核
  1119. ActiComplete.UserNames = ProfessionalAudit
  1120. ActiComplete.Remarks = AuditRemark
  1121. ActiComplete.CallbackUrl = utils.Cfg.MustValue("workflow", "callbackHost")
  1122. receiveVal := svcActiviti.TaskComplete(ActiComplete)
  1123. if receiveVal != "true" {
  1124. panic("工作流异常,请联系管理员!" + receiveVal)
  1125. }
  1126. }