package qualchange import ( "dashoo.cn/backend/api/business/auditsetting" "dashoo.cn/backend/api/business/oilsupplier/classorgsetting" "dashoo.cn/backend/api/business/oilsupplier/suppliercert" "dashoo.cn/backend/api/business/oilsupplier/suppliercertsub" "dashoo.cn/backend/api/business/workflow" . "dashoo.cn/backend/api/mydb" "dashoo.cn/business2/userRole" "strings" "strconv" "dashoo.cn/utils" . "dashoo.cn/utils/db" "github.com/go-xorm/xorm" ) type QualChangeService struct { MyServiceBase } func GetQualChangeService(xormEngine *xorm.Engine) *QualChangeService { s := new(QualChangeService) s.DBE = xormEngine return s } //获取资质列表 func (s *QualChangeService) GetQualPagingEntitiesWithOrderBytbl(supname, supcername, supfilename, qualmainname, order, where string, pageIndex, itemsPerPage int64) (int64,[]OilSupplierQual) { var err error var total int64 if where == "" { where = " 1=1 " } //获取总记录数 sqlCount := `select count(*) from ` + supname + ` a left join ` + supcername + ` b on a.Id=b.SupplierId left join `+ qualmainname + ` c on a.Id = c.SupplierId where a.Id in ( select SupplierId from `+ supfilename +`) and `+ where var sql string sql = `select a.*, b.AccessCardNo, b.Id CertId, c.Id QualId, c.Status Status, c.Step Step, c.WorkFlowId WorkFlowId, c.CreateOn ConmmitTime from ` + supname + ` a left join ` + supcername + ` b on a.Id=b.SupplierId left join `+ qualmainname + ` c on a.Id = c.SupplierId where a.Id in ( select SupplierId from `+ supfilename +`) and` + where + ` order by ` + order + ` limit ` + utils.ToStr((pageIndex-1)*itemsPerPage) + "," + utils.ToStr(itemsPerPage) List := make([]OilSupplierQual, 0) utils.DBE.Sql(sql).Find(&List) resultsSlice, err := s.DBE.Query(sqlCount) LogError(err) if len(resultsSlice) > 0 { results := resultsSlice[0] for _, value := range results { total, err = strconv.ParseInt(string(value), 10, 64) LogError(err) break } } return total, List } //通用多部门多实例审核方法 func (s *QualChangeService) SubmitOrgAudit(workflowid, certId, annualId, wfName, wfNodeCode, userId, result, remarks, OilSupplierCertSubName, OilClassOrgSettingName string) (processInstanceId string) { //取出审批列表 var supplierCert 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 workflowid == "0" || len(workflowid) <= 0 { //启动工作流 processInstanceId = svcActiviti.StartProcess(wfName, annualId, userId) } //多实例提交给下一步 var ActiComplete workflow.MultiActiCompleteVM ActiComplete.ProcessKey = wfName ActiComplete.BusinessKey = annualId ActiComplete.UserNames = "" ActiComplete.MultiOrgAudits = orgAudits ActiComplete.UserId = userId ActiComplete.Result = result ActiComplete.Remarks = remarks ActiComplete.CallbackUrl = "" svcActiviti.MultiTaskComplete(ActiComplete) return processInstanceId }