package suppliercert import ( "strconv" "strings" "dashoo.cn/backend/api/business/auditsetting" "dashoo.cn/backend/api/business/oilsupplier/classorgsetting" "dashoo.cn/backend/api/business/workflow" "dashoo.cn/business2/userRole" "dashoo.cn/utils" "dashoo.cn/backend/api/business/oilsupplier/suppliercertsub" . "dashoo.cn/backend/api/mydb" "github.com/go-xorm/xorm" ) type OilSupplierCertService struct { MyServiceBase } func GetOilSupplierCertService(xormEngine *xorm.Engine) *OilSupplierCertService { s := new(OilSupplierCertService) s.DBE = xormEngine return s } //通用多部门多实例审核方法 func (s *OilSupplierCertService) SubmitOrgAudit(certId, wfName, wfNodeCode, userId, result, remarks, OilSupplierCertSubName, OilClassOrgSettingName string, status string, step string) (processInstanceId, res string) { //取出审批列表 var supplierCert OilSupplierCert s.GetEntityById(certId, &supplierCert) //取出准入分类列表 var subList []suppliercertsub.OilSupplierCertSub certSubSrv := suppliercertsub.GetOilSupplierCertSubService(s.DBE) subWhere := " 1=1 " subWhere += " and SupplierCertId='" + certId + "'" certSubSrv.GetEntitysByWhere(OilSupplierCertSubName, subWhere, &subList) var subClassIds string for _, certSub := range subList { subClassIds += strconv.Itoa(certSub.SubClassId) + "," } subClassIds = strings.Trim(subClassIds, ",") if len(subClassIds) <= 0 { panic("没有选择准入分类") } //取出审核部门 classorgSrv := classorgsetting.GetOilClassOrgSettingService(s.DBE) var list []classorgsetting.OilClassOrgSetting var orgListStr string var where string where += " 1=1 " subWhere += " and SupplierTypeCode='" + supplierCert.SupplierTypeCode + "'" where += " and ClassId in (" + subClassIds + ")" where += " and AuditStepCode = '" + wfNodeCode + "'" classorgSrv.GetEntitysByWhere(OilClassOrgSettingName, where, &list) if len(list) <= 0 { panic("未配置准入分类审批部门") } subClassIdsCheck := subClassIds + "," //拼接工作流的需要审批的部门及部门相关的审核人员信息 var orgAudits []workflow.MultiOrgAuditVM userSvc := userRole.GetUserService(s.DBE) auditSrv := auditsetting.GetOilAuditSettingService(s.DBE) for _, certsetting := range list { var auditSetting auditsetting.Base_OilAuditSetting var orgAudit workflow.MultiOrgAuditVM orgAudit.OrgId = strconv.Itoa(certsetting.OrganizeId) orgAudit.OrgName = certsetting.OrganizeName auditWhere := " 1=1 " auditWhere += " and OrganizeId = '" + strconv.Itoa(certsetting.OrganizeId) + "'" auditWhere += " and AuditStepCode = '" + wfNodeCode + "'" auditSrv.GetEntity(&auditSetting, auditWhere) userIds := userSvc.GetUserIdsByRoleId(strconv.Itoa(auditSetting.RoleId)) tempstr := strings.Join(userIds, ",") orgAudit.UserIds = strings.Replace(tempstr, "uid_", "", -1) orgAudits = append(orgAudits, orgAudit) orgListStr += "org_" + strconv.Itoa(certsetting.OrganizeId) + "," //排除未设置部门的分类 subClassIdsCheck = strings.Replace(subClassIdsCheck, strconv.Itoa(certsetting.ClassId)+",", "", 1) } orgListStr = strings.Trim(orgListStr, ",") if len(subClassIdsCheck) > 0 { panic("存在准入分类 " + subClassIdsCheck + " 未设置审核部门") } if len(orgListStr) <= 0 { panic("未找到审核部门") } //多实例工作流 svcActiviti := workflow.GetActivitiService(s.DBE) if supplierCert.WorkflowId == "0" || len(supplierCert.WorkflowId) <= 0 { //启动工作流 processInstanceId = svcActiviti.StartProcess(wfName, certId, userId) } //多实例提交给下一步 var ActiComplete workflow.MultiActiCompleteVM ActiComplete.ProcessKey = wfName ActiComplete.BusinessKey = certId ActiComplete.UserNames = "" ActiComplete.MultiOrgAudits = orgAudits ActiComplete.UserId = userId ActiComplete.Result = result ActiComplete.Remarks = remarks if status == "" { ActiComplete.CallbackUrl = "" } else { ActiComplete.CallbackUrl = utils.Cfg.MustValue("workflow", "callbackHost") + "/api/suppliercert/auditcallback?Id=" + strconv.Itoa(supplierCert.Id) + "&status=" + status + "&step=" + step } res = svcActiviti.MultiTaskComplete(ActiComplete) return processInstanceId, res } //查询已经申请的准入记录 func (s *OilSupplierCertService) IsCanApplyByExtOrganizeUser(applyType, departmentId, userId string, isCompanyUser int) bool { /*parameterSvc := baseparameter.GetBaseparameterService(s.DBE) //取出外部门ID extOrganizeId := parameterSvc.GetBaseparameterMessage("GFGL", "paramset", "ExtOrganizeId") if extOrganizeId == departmentId {*/ if isCompanyUser == 1 { where := " SupplierTypeCode = '" + applyType + "'" where += " and CreateUserId = '" + userId + "'" var model OilSupplierCert count, _ := s.GetCount(&model, where) if count > 0 { return false } } return true } func (s *OilSupplierCertService) GetAuditUser(organizeId, auditstepcode string, entitiesPtr interface{}) { where := "( a.DepartmentId in (" + organizeId + ") OR a.CompanyId in (" + organizeId + ")) and AuditStepCode='" + auditstepcode + "'" //where := "a.DepartmentId=" + organizeId + " and AuditStepCode='" + auditstepcode + "'" sql := "SELECT a.UserId Id, a.UserName RealName FROM Base_OilAuditSetting o LEFT JOIN OilAuditUser a ON o.Id = a.SettingId where " + where s.DBE.SQL(sql).Find(entitiesPtr) return } func (s *OilSupplierCertService) GetAuditUserInSetting(organizeId, auditstepcode string, entitiesPtr interface{}) { where := "u.UnitId=" + organizeId //where := "a.DepartmentId=" + organizeId + " and AuditStepCode='" + auditstepcode + "'" sql := "SELECT a.UserId Id, a.UserName RealName FROM Base_OilAuditSetting o LEFT JOIN Base_User a ON o.Id = a.SettingId where " + where s.DBE.SQL(sql).Find(entitiesPtr) return } func (s *OilSupplierCertService) GetAuditUserByNoLogin(organizeId string, entitiesPtr interface{}) { where := "( a.DepartmentId=" + organizeId + " OR a.CompanyId=" + organizeId + ")" sql := "SELECT a.UserId Id, a.UserName RealName FROM Base_OilAuditSetting o LEFT JOIN OilAuditUser a ON o.Id = a.SettingId where " + where s.DBE.SQL(sql).Find(entitiesPtr) return }