annualauditService.go 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. package annualaudit
  2. import (
  3. "dashoo.cn/backend/api/business/auditsetting"
  4. "dashoo.cn/backend/api/business/oilsupplier/classorgsetting"
  5. "dashoo.cn/backend/api/business/oilsupplier/suppliercert"
  6. "dashoo.cn/backend/api/business/oilsupplier/suppliercertsub"
  7. "dashoo.cn/backend/api/business/workflow"
  8. . "dashoo.cn/backend/api/mydb"
  9. "dashoo.cn/business2/userRole"
  10. "dashoo.cn/utils"
  11. "github.com/go-xorm/xorm"
  12. "strconv"
  13. "strings"
  14. )
  15. type OilAnnualAuditService struct {
  16. MyServiceBase
  17. }
  18. func GetOilAnnualAuditService(xormEngine *xorm.Engine) *OilAnnualAuditService {
  19. s := new(OilAnnualAuditService)
  20. s.DBE = xormEngine
  21. return s
  22. }
  23. func (s *OilAnnualAuditService) GetSupplierList(supname, auditname string) []Suppliername {
  24. var sql string
  25. //sql = `select * from `+ supname +` where Id not in ( select SupplierId from `+ auditname +` where YEAR(CreateOn)=YEAR(NOW()))`
  26. sql = `select * from `+ supname
  27. //sql = `select c.id,c.value from ( select a.*, b.SupplierId as tempcolum from `+ supname +` a left join `+ auditname +` b on a.Id = b.SupplierId where YEAR(b.CreateOn)=YEAR(NOW())) as c where c.tempcolum is null`
  28. List := make([]Suppliername, 0)
  29. utils.DBE.Sql(sql).Find(&List)
  30. return List
  31. }
  32. //通用多部门多实例审核方法
  33. func (s *OilAnnualAuditService) SubmitOrgAudit(status, workflowid, certId, annualId, wfName, wfNodeCode, userId, result, remarks, OilSupplierCertSubName, OilClassOrgSettingName string) (processInstanceId, res string) {
  34. //取出审批列表
  35. var supplierCert suppliercert.OilSupplierCert
  36. s.GetEntityById(certId, &supplierCert)
  37. //取出准入分类列表
  38. var subList []suppliercertsub.OilSupplierCertSub
  39. certSubSrv := suppliercertsub.GetOilSupplierCertSubService(s.DBE)
  40. subWhere := " 1=1 "
  41. subWhere += " and SupplierCertId='" + certId + "'"
  42. certSubSrv.GetEntitysByWhere(OilSupplierCertSubName, subWhere, &subList)
  43. var subClassIds string
  44. for _, certSub := range subList {
  45. subClassIds += strconv.Itoa(certSub.SubClassId) + ","
  46. }
  47. subClassIds = strings.Trim(subClassIds, ",")
  48. if len(subClassIds) <= 0 {
  49. panic("没有选择准入分类")
  50. }
  51. //取出审核部门
  52. classorgSrv := classorgsetting.GetOilClassOrgSettingService(s.DBE)
  53. var list []classorgsetting.OilClassOrgSetting
  54. var orgListStr string
  55. var where string
  56. where += " 1=1 "
  57. subWhere += " and SupplierTypeCode='" + supplierCert.SupplierTypeCode + "'"
  58. where += " and ClassId in (" + subClassIds + ")"
  59. where += " and AuditStepCode = '" + wfNodeCode + "'"
  60. classorgSrv.GetEntitysByWhere(OilClassOrgSettingName, where, &list)
  61. if len(list) <= 0 {
  62. panic("未配置准入分类审批部门")
  63. }
  64. subClassIdsCheck := subClassIds + ","
  65. //拼接工作流的需要审批的部门及部门相关的审核人员信息
  66. var orgAudits []workflow.MultiOrgAuditVM
  67. userSvc := userRole.GetUserService(s.DBE)
  68. auditSrv := auditsetting.GetOilAuditSettingService(s.DBE)
  69. for _, certsetting := range list {
  70. var auditSetting auditsetting.Base_OilAuditSetting
  71. var orgAudit workflow.MultiOrgAuditVM
  72. orgAudit.OrgId = strconv.Itoa(certsetting.OrganizeId)
  73. orgAudit.OrgName = certsetting.OrganizeName
  74. auditWhere := " 1=1 "
  75. auditWhere += " and OrganizeId = '" + strconv.Itoa(certsetting.OrganizeId) + "'"
  76. auditWhere += " and AuditStepCode = '" + wfNodeCode + "'"
  77. auditSrv.GetEntity(&auditSetting, auditWhere)
  78. userIds := userSvc.GetUserIdsByRoleId(strconv.Itoa(auditSetting.RoleId))
  79. tempstr := strings.Join(userIds, ",")
  80. orgAudit.UserIds = strings.Replace(tempstr, "uid_", "", -1)
  81. orgAudits = append(orgAudits, orgAudit)
  82. orgListStr += "org_" + strconv.Itoa(certsetting.OrganizeId) + ","
  83. //排除未设置部门的分类
  84. subClassIdsCheck = strings.Replace(subClassIdsCheck, strconv.Itoa(certsetting.ClassId)+",", "", 1)
  85. }
  86. orgListStr = strings.Trim(orgListStr, ",")
  87. if len(subClassIdsCheck) > 0 {
  88. panic("存在准入分类 " + subClassIdsCheck + " 未设置审核部门")
  89. }
  90. if len(orgListStr) <= 0 {
  91. panic("未找到审核部门")
  92. }
  93. //多实例工作流
  94. svcActiviti := workflow.GetActivitiService(s.DBE)
  95. if workflowid == "0" || len(workflowid) <= 0 {
  96. //启动工作流
  97. processInstanceId = svcActiviti.StartProcess(wfName, annualId, userId)
  98. }
  99. //多实例提交给下一步
  100. var ActiComplete workflow.MultiActiCompleteVM
  101. ActiComplete.ProcessKey = wfName
  102. ActiComplete.BusinessKey = annualId
  103. ActiComplete.UserNames = ""
  104. ActiComplete.MultiOrgAudits = orgAudits
  105. ActiComplete.UserId = userId
  106. ActiComplete.Result = result
  107. ActiComplete.Remarks = remarks
  108. ActiComplete.CallbackUrl = utils.Cfg.MustValue("workflow", "callbackHost")+"/api/annualaudit/auditcallback?status="+ status +"&annualId="+ annualId
  109. res = svcActiviti.MultiTaskComplete(ActiComplete)
  110. return processInstanceId, res
  111. }
  112. func (s *OilAnnualAuditService) GetMyPagingEntitiesWithOrderBytbl(supplierTableName, AnnualAuditName string, pageIndex, itemsPerPage int64, orderby string, asc bool, entitiesPtr interface{}, where string) (total int64) {
  113. var resultsSlice []map[string][]byte
  114. //获取总记录数
  115. sqlCount := `select count(*) from ` + supplierTableName + ` a `
  116. sqlCount += ` left join ` + AnnualAuditName + " b on b.SupplierId = a.Id"
  117. sqlCount += ` where ` + where
  118. var sql string
  119. sql = `select a.SupplierName, b.* `
  120. sql += ` from ` + supplierTableName + ` a `
  121. sql += ` left join ` + AnnualAuditName + " b on b.SupplierId = a.Id"
  122. sql += ` where ` + where
  123. if asc {
  124. sql += ` order by ` + orderby + ` ASC `
  125. } else {
  126. sql += ` order by ` + orderby + ` DESC `
  127. }
  128. if (pageIndex != 0 && itemsPerPage !=0) {
  129. sql += ` limit ` + utils.ToStr((pageIndex-1)*itemsPerPage) + "," + utils.ToStr(itemsPerPage)
  130. }
  131. s.DBE.SQL(sql).Find(entitiesPtr)
  132. resultsSlice, _ = s.DBE.Query(sqlCount)
  133. if len(resultsSlice) > 0 {
  134. results := resultsSlice[0]
  135. for _, value := range results {
  136. total, _ = strconv.ParseInt(string(value), 10, 64)
  137. break
  138. }
  139. }
  140. return total
  141. }
  142. func (s *OilAnnualAuditService) GetProcessInfoWithOrderBytbl(oilAnnualAuditName string, pageIndex, itemsPerPage int64, orderby string, asc bool, entitiesPtr interface{}, where string) (total int64) {
  143. var resultsSlice []map[string][]byte
  144. //获取总记录数
  145. sqlCount := `select count(*) from ` + oilAnnualAuditName
  146. sqlCount += ` where ` + where
  147. var sql string
  148. sql = `select a.SupplierName, a.Id, `
  149. sql += ` a.Status, a.SupplierTypeName SupplierTypeCode, `
  150. sql += ` a.WorkflowId, '3' as Type, a.CreateOn, a.AccessCardNo, a.ModifiedOn as AddinTime, u.Realname AS ContactName, u.Telephone AS Mobile,`
  151. sql += ` CASE WHEN uu.IsCompanyUser = 1 THEN c.CheckUnitName
  152. WHEN uu.IsCompanyUser = 0 THEN uu.Unit
  153. ELSE ''
  154. END AS RecUnitName`
  155. sql += ` from ` + oilAnnualAuditName + ` a `
  156. sql += ` LEFT JOIN Base_User u ON a.CreateUserId = u.Id`
  157. sql += ` Left join OilSupplier s on a.SupplierId = s.Id
  158. left join Base_User uu on s.CreateUserId = uu.Id
  159. left join OilCorporateInfo c on s.CreateUserId = c.UserId`
  160. sql += ` where ` + where
  161. if asc {
  162. sql += ` order by ` + orderby + ` ASC `
  163. } else {
  164. sql += ` order by ` + orderby + ` DESC `
  165. }
  166. if (pageIndex != 0 && itemsPerPage !=0) {
  167. sql += ` limit ` + utils.ToStr((pageIndex-1)*itemsPerPage) + "," + utils.ToStr(itemsPerPage)
  168. }
  169. s.DBE.SQL(sql).Find(entitiesPtr)
  170. resultsSlice, _ = s.DBE.Query(sqlCount)
  171. if len(resultsSlice) > 0 {
  172. results := resultsSlice[0]
  173. for _, value := range results {
  174. total, _ = strconv.ParseInt(string(value), 10, 64)
  175. break
  176. }
  177. }
  178. return total
  179. }