2
3

oilsuppliercertappendService.go 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. package suppliercertappend
  2. import (
  3. "dashoo.cn/backend/api/business/oilsupplier/supplier"
  4. "dashoo.cn/backend/api/business/oilsupplier/supplierfile"
  5. "fmt"
  6. "strconv"
  7. "strings"
  8. "dashoo.cn/backend/api/business/auditsetting"
  9. "dashoo.cn/backend/api/business/oilsupplier/classorgsetting"
  10. "dashoo.cn/backend/api/business/oilsupplier/suppliercertappendsub"
  11. "dashoo.cn/backend/api/business/oilsupplier/suppliercertsub"
  12. "dashoo.cn/backend/api/business/workflow"
  13. . "dashoo.cn/backend/api/mydb"
  14. "dashoo.cn/business2/userRole"
  15. "dashoo.cn/utils"
  16. "github.com/go-xorm/xorm"
  17. )
  18. type OilSupplierCertAppendService struct {
  19. MyServiceBase
  20. }
  21. func GetOilSupplierCertAppendService(xormEngine *xorm.Engine) *OilSupplierCertAppendService {
  22. s := new(OilSupplierCertAppendService)
  23. s.DBE = xormEngine
  24. return s
  25. }
  26. //通用多部门多实例审核方法
  27. func (s *OilSupplierCertAppendService) SubmitOrgAudit(certId, wfName, wfNodeCode, userId, result, remarks, OilSupplierCertSubName, OilClassOrgSettingName string) (processInstanceId string) {
  28. //取出审批列表
  29. var supplierCert OilSupplierCertAppend
  30. s.GetEntityById(certId, &supplierCert)
  31. //取出准入分类列表
  32. var subList []suppliercertappendsub.OilSupplierCertAppendSub
  33. certSubSrv := suppliercertsub.GetOilSupplierCertSubService(s.DBE)
  34. subWhere := " 1=1 "
  35. subWhere += " and SupplierCertAppendId='" + certId + "'"
  36. certSubSrv.GetEntitysByWhere(OilSupplierCertSubName, subWhere, &subList)
  37. var subClassIds string
  38. for _, certSub := range subList {
  39. subClassIds += strconv.Itoa(certSub.SubClassId) + ","
  40. }
  41. subClassIds = strings.Trim(subClassIds, ",")
  42. if len(subClassIds) <= 0 {
  43. panic("没有选择准入分类")
  44. }
  45. //取出审核部门
  46. classorgSrv := classorgsetting.GetOilClassOrgSettingService(s.DBE)
  47. var list []classorgsetting.OilClassOrgSetting
  48. var orgListStr string
  49. var where string
  50. where += " 1=1 "
  51. subWhere += " and SupplierTypeCode='" + supplierCert.AppendType + "'"
  52. where += " and ClassId in (" + subClassIds + ")"
  53. where += " and AuditStepCode = '" + wfNodeCode + "'"
  54. classorgSrv.GetEntitysByWhere(OilClassOrgSettingName, where, &list)
  55. if len(list) <= 0 {
  56. panic("未配置准入分类审批部门")
  57. }
  58. subClassIdsCheck := subClassIds + ","
  59. //拼接工作流的需要审批的部门及部门相关的审核人员信息
  60. var orgAudits []workflow.MultiOrgAuditVM
  61. userSvc := userRole.GetUserService(s.DBE)
  62. auditSrv := auditsetting.GetOilAuditSettingService(s.DBE)
  63. for _, certsetting := range list {
  64. var auditSetting auditsetting.Base_OilAuditSetting
  65. var orgAudit workflow.MultiOrgAuditVM
  66. orgAudit.OrgId = strconv.Itoa(certsetting.OrganizeId)
  67. orgAudit.OrgName = certsetting.OrganizeName
  68. auditWhere := " 1=1 "
  69. auditWhere += " and OrganizeId = '" + strconv.Itoa(certsetting.OrganizeId) + "'"
  70. auditWhere += " and AuditStepCode = '" + wfNodeCode + "'"
  71. auditSrv.GetEntity(&auditSetting, auditWhere)
  72. userIds := userSvc.GetUserIdsByRoleId(strconv.Itoa(auditSetting.RoleId))
  73. tempstr := strings.Join(userIds, ",")
  74. orgAudit.UserIds = strings.Replace(tempstr, "uid_", "", -1)
  75. orgAudits = append(orgAudits, orgAudit)
  76. orgListStr += "org_" + strconv.Itoa(certsetting.OrganizeId) + ","
  77. //排除未设置部门的分类
  78. subClassIdsCheck = strings.Replace(subClassIdsCheck, strconv.Itoa(certsetting.ClassId)+",", "", 1)
  79. }
  80. orgListStr = strings.Trim(orgListStr, ",")
  81. if len(subClassIdsCheck) > 0 {
  82. panic("存在准入分类 " + subClassIdsCheck + " 未设置审核部门")
  83. }
  84. if len(orgListStr) <= 0 {
  85. panic("未找到审核部门")
  86. }
  87. //多实例工作流
  88. svcActiviti := workflow.GetActivitiService(s.DBE)
  89. if supplierCert.WorkFlowId == "0" || len(supplierCert.WorkFlowId) <= 0 {
  90. //启动工作流
  91. fmt.Println("-=========certId=========", certId)
  92. processInstanceId = svcActiviti.StartProcess(wfName, certId, userId)
  93. }
  94. //多实例提交给下一步
  95. var ActiComplete workflow.MultiActiCompleteVM
  96. ActiComplete.ProcessKey = wfName
  97. ActiComplete.BusinessKey = certId
  98. ActiComplete.UserNames = ""
  99. ActiComplete.MultiOrgAudits = orgAudits
  100. ActiComplete.UserId = userId
  101. ActiComplete.Result = result
  102. ActiComplete.Remarks = remarks
  103. ActiComplete.CallbackUrl = ""
  104. svcActiviti.MultiTaskComplete(ActiComplete)
  105. return processInstanceId
  106. }
  107. func (s *OilSupplierCertAppendService) GetMyPagingEntitiesWithOrderBytbl(supplierTableName, supplierCertAppendName string, pageIndex, itemsPerPage int64, orderby string, asc bool, entitiesPtr interface{}, where string) (total int64) {
  108. var resultsSlice []map[string][]byte
  109. //获取总记录数
  110. sqlCount := `select count(*) from ` + supplierTableName + ` a `
  111. sqlCount += ` left join ` + supplierCertAppendName + " b on b.SupplierId = a.Id"
  112. sqlCount += ` where ` + where
  113. var sql string
  114. sql = `select a.SupplierName, b.* `
  115. sql += ` from ` + supplierTableName + ` a `
  116. sql += ` left join ` + supplierCertAppendName + " b on b.SupplierId = a.Id"
  117. sql += ` where ` + where
  118. if asc {
  119. sql += ` order by ` + orderby + ` ASC `
  120. } else {
  121. sql += ` order by ` + orderby + ` DESC `
  122. }
  123. if pageIndex != 0 && itemsPerPage != 0 {
  124. sql += ` limit ` + utils.ToStr((pageIndex-1)*itemsPerPage) + "," + utils.ToStr(itemsPerPage)
  125. }
  126. s.DBE.SQL(sql).Find(entitiesPtr)
  127. resultsSlice, _ = s.DBE.Query(sqlCount)
  128. if len(resultsSlice) > 0 {
  129. results := resultsSlice[0]
  130. for _, value := range results {
  131. total, _ = strconv.ParseInt(string(value), 10, 64)
  132. break
  133. }
  134. }
  135. return total
  136. }
  137. func (s *OilSupplierCertAppendService) GetTodoEntitie(supplierTableName, supplierCertAppendName string, entitiesPtr interface{}, where string) bool {
  138. var sql string
  139. sql = `select b.Id, a.SupplierName, b.AppendType SupplierTypeCode, b.Status `
  140. sql += ` from ` + supplierTableName + ` a `
  141. sql += ` left join ` + supplierCertAppendName + " b on b.SupplierId = a.Id"
  142. sql += ` where ` + where
  143. has, _ := s.DBE.SQL(sql).Get(entitiesPtr)
  144. return has
  145. }
  146. func (s *OilSupplierCertAppendService) GetProcessInfoWithOrderBytbl(supplierCertAppendName string, pageIndex, itemsPerPage int64, orderby string, asc bool, entitiesPtr interface{}, where string) (total int64) {
  147. var resultsSlice []map[string][]byte
  148. //获取总记录数
  149. sqlCount := `select count(*) from ` + supplierCertAppendName + ` a `
  150. sqlCount += ` where ` + where
  151. var sql string
  152. sql = `select a.SupplierName, a.Id, `
  153. sql += ` a.Status, a.AppendType SupplierTypeCode, `
  154. sql += ` a.WorkflowId, a.ProcessKey, '2' as Type, a.CreateOn, a.AccessCardNo, a.ModifiedOn as AddinTime, u.Realname AS ContactName, u.Telephone AS Mobile,`
  155. sql += ` case when uu.IsCompanyUser = 1 then c.CheckUnitName
  156. when uu.IsCompanyUser = 0 then uu.Unit
  157. else ''
  158. end As RecUnitName `
  159. sql += ` from ` + supplierCertAppendName + ` a `
  160. sql += ` LEFT JOIN Base_User u ON a.CreateUserId = u.Id`
  161. sql += ` Left join OilSupplier s on a.SupplierId = s.Id
  162. left join Base_User uu on s.CreateUserId = uu.Id
  163. left join OilCorporateInfo c on s.CreateUserId = c.UserId`
  164. sql += ` where ` + where
  165. if asc {
  166. sql += ` order by ` + orderby + ` ASC `
  167. } else {
  168. sql += ` order by ` + orderby + ` DESC `
  169. }
  170. if pageIndex != 0 && itemsPerPage != 0 {
  171. sql += ` limit ` + utils.ToStr((pageIndex-1)*itemsPerPage) + "," + utils.ToStr(itemsPerPage)
  172. }
  173. s.DBE.SQL(sql).Find(entitiesPtr)
  174. resultsSlice, _ = s.DBE.Query(sqlCount)
  175. if len(resultsSlice) > 0 {
  176. results := resultsSlice[0]
  177. for _, value := range results {
  178. total, _ = strconv.ParseInt(string(value), 10, 64)
  179. break
  180. }
  181. }
  182. return total
  183. }
  184. func (s *OilSupplierCertAppendService) IsSupplierCertAppendCanSubmit(supplierId, supplierCertAppendId string) bool {
  185. //获取主表信息
  186. var supplierEntity supplier.OilSupplier
  187. supplierService := supplier.GetOilSupplierService(s.DBE)
  188. supplierService.GetEntityById(supplierId, &supplierEntity)
  189. //获取准入信息表
  190. var supplierCertAppendEntity OilSupplierCertAppend
  191. s.GetEntityById(supplierCertAppendId, &supplierCertAppendEntity)
  192. //对准入范围的判断
  193. var certSubList []suppliercertsub.OilSupplierCertSub
  194. certsubService := suppliercertsub.GetOilSupplierCertSubService(s.DBE)
  195. certsubService.GetListByAppendId(supplierCertAppendId, &certSubList)
  196. if len(certSubList) <= 0 {
  197. panic("准入范围不能为空!")
  198. }
  199. if supplierEntity.Grade == supplier.GRADE_2 {
  200. for _, certSubItem := range certSubList {
  201. if certSubItem.GoodsLevel == supplier.GOODS_LEVEL_1 {
  202. panic("二级供应商不能准入一级物资!")
  203. }
  204. }
  205. }
  206. //请上传现场考察报告
  207. //paramSvc := baseparameter.GetBaseparameterService(utils.DBE)
  208. //isInvestigate := paramSvc.GetBaseparameterMessage("GFGL1", "paramset", "isInvestigate")
  209. //if isInvestigate == "true" &&
  210. // supplierCertEntity.Type == supplier.SUPPLIER_TYPE_GOODS && //当前只有物资类才可上传现场考察报告
  211. // supplierEntity.OperType == "代理商" &&
  212. // supplierCertEntity.InStyle != supplier.IN_STYPE_GOODS_LEVEL_1 {
  213. //
  214. // scenefileService := supplierscenefile.GetSupplierScenefileService(utils.DBE)
  215. // scenefileEntity := scenefileService.GetSceneFileList( strconv.Itoa(supplierEntity.Id) )
  216. // if len(scenefileEntity.FileUrl) <= 0 {
  217. // panic("请上传现场考察报告!")
  218. // }
  219. //}
  220. //对准入资质的判断
  221. fmt.Println("资质文件查询1,主表id:" + strconv.Itoa(supplierEntity.Id))
  222. supplierFileService := supplierfile.GetSupplierfileService(utils.DBE)
  223. supplierFiles := supplierFileService.GetListBySupplierId(strconv.Itoa(supplierEntity.Id))
  224. fmt.Println("资质文件查询1,主表id:" + strconv.Itoa(supplierEntity.Id))
  225. needBiddingBook := false
  226. hasBiddingBook := false
  227. if supplierCertAppendEntity.InStyle == supplier.IN_STYPE_BIDDING {
  228. needBiddingBook = true // 招标准入需提供招标中标结果
  229. }
  230. for _, fileItem := range supplierFiles {
  231. /* if fileItem.FileType == "1" { // 1:必须上传的文件, 0:非必须上传
  232. } */
  233. fmt.Println("资质文件1: " + fileItem.NeedFileType + " , 匹配名称: " + supplier.BIDDING_BOOK_NAME)
  234. if fileItem.NeedFileType == supplier.BIDDING_BOOK_NAME {
  235. hasBiddingBook = true
  236. }
  237. /*if len(fileItem.FileUrl) <= 0 {
  238. panic("请上传文件 [" + fileItem.NeedFileType + "] !")
  239. }*/
  240. }
  241. //其它判断
  242. if needBiddingBook && !hasBiddingBook {
  243. panic("招标准入需提供招标中标结果 !")
  244. }
  245. return true
  246. }