oilsuppliercertService.go 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. package suppliercert
  2. import (
  3. "dashoo.cn/backend/api/business/auditsetting"
  4. "dashoo.cn/backend/api/business/oilsupplier/classorgsetting"
  5. "dashoo.cn/backend/api/business/oilsupplier/supplier"
  6. "dashoo.cn/backend/api/business/oilsupplier/supplierfile"
  7. "dashoo.cn/backend/api/business/oilsupplier/supplierscenefile"
  8. "dashoo.cn/backend/api/business/workflow"
  9. baseparameter "dashoo.cn/business2/parameter"
  10. "dashoo.cn/business2/userRole"
  11. "dashoo.cn/utils"
  12. "fmt"
  13. "strconv"
  14. "strings"
  15. "dashoo.cn/backend/api/business/oilsupplier/suppliercertsub"
  16. . "dashoo.cn/backend/api/mydb"
  17. "github.com/go-xorm/xorm"
  18. )
  19. type OilSupplierCertService struct {
  20. MyServiceBase
  21. }
  22. func GetOilSupplierCertService(xormEngine *xorm.Engine) *OilSupplierCertService {
  23. s := new(OilSupplierCertService)
  24. s.DBE = xormEngine
  25. return s
  26. }
  27. //通用多部门多实例审核方法
  28. func (s *OilSupplierCertService) SubmitOrgAudit(certId, wfName, wfNodeCode, userId, result, remarks, OilSupplierCertSubName, OilClassOrgSettingName string, status string, step string) (processInstanceId, res string) {
  29. //取出审批列表
  30. var supplierCert OilSupplierCert
  31. s.GetEntityById(certId, &supplierCert)
  32. //取出准入分类列表
  33. var subList []suppliercertsub.OilSupplierCertSub
  34. certSubSrv := suppliercertsub.GetOilSupplierCertSubService(s.DBE)
  35. subWhere := " 1=1 "
  36. subWhere += " and SupplierCertId='" + certId + "'"
  37. certSubSrv.GetEntitysByWhere(OilSupplierCertSubName, subWhere, &subList)
  38. var subClassIds string
  39. for _, certSub := range subList {
  40. subClassIds += strconv.Itoa(certSub.SubClassId) + ","
  41. }
  42. subClassIds = strings.Trim(subClassIds, ",")
  43. if len(subClassIds) <= 0 {
  44. panic("没有选择准入分类")
  45. }
  46. //取出审核部门
  47. classorgSrv := classorgsetting.GetOilClassOrgSettingService(s.DBE)
  48. var list []classorgsetting.OilClassOrgSetting
  49. var orgListStr string
  50. var where string
  51. where += " 1=1 "
  52. subWhere += " and SupplierTypeCode='" + supplierCert.SupplierTypeCode + "'"
  53. where += " and ClassId in (" + subClassIds + ")"
  54. where += " and AuditStepCode = '" + wfNodeCode + "'"
  55. classorgSrv.GetEntitysByWhere(OilClassOrgSettingName, where, &list)
  56. if len(list) <= 0 {
  57. panic("未配置准入分类审批部门")
  58. }
  59. subClassIdsCheck := subClassIds + ","
  60. //拼接工作流的需要审批的部门及部门相关的审核人员信息
  61. var orgAudits []workflow.MultiOrgAuditVM
  62. userSvc := userRole.GetUserService(s.DBE)
  63. auditSrv := auditsetting.GetOilAuditSettingService(s.DBE)
  64. for _, certsetting := range list {
  65. var auditSetting auditsetting.Base_OilAuditSetting
  66. var orgAudit workflow.MultiOrgAuditVM
  67. orgAudit.OrgId = strconv.Itoa(certsetting.OrganizeId)
  68. orgAudit.OrgName = certsetting.OrganizeName
  69. auditWhere := " 1=1 "
  70. auditWhere += " and OrganizeId = '" + strconv.Itoa(certsetting.OrganizeId) + "'"
  71. auditWhere += " and AuditStepCode = '" + wfNodeCode + "'"
  72. auditSrv.GetEntity(&auditSetting, auditWhere)
  73. userIds := userSvc.GetUserIdsByRoleId(strconv.Itoa(auditSetting.RoleId))
  74. tempstr := strings.Join(userIds, ",")
  75. orgAudit.UserIds = strings.Replace(tempstr, "uid_", "", -1)
  76. orgAudits = append(orgAudits, orgAudit)
  77. orgListStr += "org_" + strconv.Itoa(certsetting.OrganizeId) + ","
  78. //排除未设置部门的分类
  79. subClassIdsCheck = strings.Replace(subClassIdsCheck, strconv.Itoa(certsetting.ClassId)+",", "", 1)
  80. }
  81. orgListStr = strings.Trim(orgListStr, ",")
  82. if len(subClassIdsCheck) > 0 {
  83. panic("存在准入分类 " + subClassIdsCheck + " 未设置审核部门")
  84. }
  85. if len(orgListStr) <= 0 {
  86. panic("未找到审核部门")
  87. }
  88. //多实例工作流
  89. svcActiviti := workflow.GetActivitiService(s.DBE)
  90. if supplierCert.WorkflowId == "0" || len(supplierCert.WorkflowId) <= 0 {
  91. //启动工作流
  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. if status == "" {
  104. ActiComplete.CallbackUrl = ""
  105. } else {
  106. ActiComplete.CallbackUrl = utils.Cfg.MustValue("workflow", "callbackHost") + "/api/suppliercert/auditcallback?Id=" + strconv.Itoa(supplierCert.Id) + "&status=" + status + "&step=" + step
  107. }
  108. res = svcActiviti.MultiTaskComplete(ActiComplete)
  109. return processInstanceId, res
  110. }
  111. //查询已经申请的准入记录
  112. func (s *OilSupplierCertService) IsCanApplyByExtOrganizeUser(applyType, commercialNo, userId string, isCompanyUser int) bool {
  113. /*parameterSvc := baseparameter.GetBaseparameterService(s.DBE) //取出外部门ID
  114. extOrganizeId := parameterSvc.GetBaseparameterMessage("GFGL", "paramset", "ExtOrganizeId")
  115. if extOrganizeId == departmentId {*/
  116. if isCompanyUser == 1 {
  117. var tempMap []map[string]string
  118. sql := "select 1 from OilSupplier a left join OilSupplierCert b on a.Id=b.SupplierId where b.SupplierTypeCode = '" + applyType + "' and (b.CreateUserId = '" + userId + "' or a.CommercialNo='" + commercialNo + "')"
  119. tempMap, _ = s.DBE.QueryString(sql)
  120. if tempMap != nil && tempMap[0]["1"] != "" {
  121. return false
  122. }
  123. }
  124. return true
  125. }
  126. func (s *OilSupplierCertService) GetAuditUser(organizeId, auditstepcode string, entitiesPtr interface{}) {
  127. where := "( a.DepartmentId in (" + organizeId + ") OR a.CompanyId in (" + organizeId + ")) and AuditStepCode='" + auditstepcode + "'"
  128. //where := "a.DepartmentId=" + organizeId + " and AuditStepCode='" + auditstepcode + "'"
  129. sql := "SELECT a.UserId Id, a.UserName RealName FROM Base_OilAuditSetting o LEFT JOIN OilAuditUser a ON o.Id = a.SettingId where " + where
  130. s.DBE.SQL(sql).Find(entitiesPtr)
  131. return
  132. }
  133. func (s *OilSupplierCertService) GetAuditUserInSetting(organizeId, auditstepcode string, entitiesPtr interface{}) {
  134. where := "u.UnitId=" + organizeId
  135. //where := "a.DepartmentId=" + organizeId + " and AuditStepCode='" + auditstepcode + "'"
  136. sql := "SELECT a.UserId Id, a.UserName RealName FROM Base_OilAuditSetting o LEFT JOIN Base_User a ON o.Id = a.SettingId where " + where
  137. s.DBE.SQL(sql).Find(entitiesPtr)
  138. return
  139. }
  140. func (s *OilSupplierCertService) GetAuditUserByNoLogin(organizeId string, entitiesPtr interface{}) {
  141. where := "( a.DepartmentId=" + organizeId + " OR a.CompanyId=" + organizeId + ")"
  142. sql := "SELECT a.UserId Id, a.UserName RealName FROM Base_OilAuditSetting o LEFT JOIN OilAuditUser a ON o.Id = a.SettingId where " + where
  143. s.DBE.SQL(sql).Find(entitiesPtr)
  144. return
  145. }
  146. func (s *OilSupplierCertService) IsSupplierCertCanSubmit(supplierId, supplierCertId string) bool {
  147. //获取主表信息
  148. var supplierEntity supplier.OilSupplier
  149. supplierService := supplier.GetOilSupplierService(s.DBE)
  150. supplierService.GetEntityById(supplierId, &supplierEntity)
  151. //获取准入信息表
  152. var supplierCertEntity OilSupplierCert
  153. s.GetEntityById(supplierCertId, &supplierCertEntity)
  154. //对准入范围的判断
  155. var certSubList []suppliercertsub.OilSupplierCertSub
  156. certsubService := suppliercertsub.GetOilSupplierCertSubService(s.DBE)
  157. certsubService.GetListByCertId(supplierCertId, &certSubList)
  158. if len(certSubList) <= 0 {
  159. panic("准入范围不能为空!")
  160. }
  161. if supplierEntity.Grade == supplier.GRADE_2 {
  162. for _, certSubItem := range certSubList {
  163. if certSubItem.GoodsLevel == supplier.GOODS_LEVEL_1 {
  164. panic("二级供应商不能准入一级物资!")
  165. }
  166. }
  167. }
  168. //请上传现场考察报告
  169. paramSvc := baseparameter.GetBaseparameterService(utils.DBE)
  170. isInvestigate := paramSvc.GetBaseparameterMessage("GFGL1", "paramset", "isInvestigate")
  171. if isInvestigate == "true" &&
  172. supplierCertEntity.Type == supplier.SUPPLIER_TYPE_GOODS && //当前只有物资类才可上传现场考察报告
  173. supplierEntity.OperType == "代理商" &&
  174. supplierCertEntity.InStyle != supplier.IN_STYPE_GOODS_LEVEL_1 {
  175. scenefileService := supplierscenefile.GetSupplierScenefileService(utils.DBE)
  176. scenefileEntity := scenefileService.GetSceneFileList(strconv.Itoa(supplierEntity.Id))
  177. if len(scenefileEntity.FileUrl) <= 0 {
  178. panic("请上传现场考察报告!")
  179. }
  180. }
  181. //对准入资质的判断
  182. fmt.Println("资质文件查询,主表id:" + strconv.Itoa(supplierEntity.Id))
  183. supplierFileService := supplierfile.GetSupplierfileService(utils.DBE)
  184. supplierFiles := supplierFileService.GetListBySupplierId(strconv.Itoa(supplierEntity.Id))
  185. fmt.Println("资质文件查询,主表id:" + strconv.Itoa(supplierEntity.Id))
  186. needBiddingBook := false
  187. hasBiddingBook := false
  188. if supplierCertEntity.InStyle == supplier.IN_STYPE_BIDDING {
  189. needBiddingBook = true // 招标准入需提供中标通知书
  190. }
  191. for _, fileItem := range supplierFiles {
  192. fmt.Println("资质文件: " + fileItem.NeedFileType + " , 匹配名称: " + supplier.BIDDING_BOOK_NAME)
  193. /* if fileItem.FileType == "1" { // 1:必须上传的文件, 0:非必须上传
  194. } */
  195. if fileItem.NeedFileType == supplier.BIDDING_BOOK_NAME {
  196. hasBiddingBook = true
  197. }
  198. if len(fileItem.FileUrl) <= 0 {
  199. panic("请上传文件 [" + fileItem.NeedFileType + "] !")
  200. }
  201. }
  202. //其它判断
  203. if needBiddingBook && !hasBiddingBook {
  204. panic("招标准入需提供中标通知书 !")
  205. }
  206. return true
  207. }