package annualaudit 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" "dashoo.cn/utils" "github.com/go-xorm/xorm" "strconv" "strings" ) type OilAnnualAuditService struct { MyServiceBase } func GetOilAnnualAuditService(xormEngine *xorm.Engine) *OilAnnualAuditService { s := new(OilAnnualAuditService) s.DBE = xormEngine return s } func (s *OilAnnualAuditService) GetSupplierList(supname, auditname string) []Suppliername { var sql string //sql = `select * from `+ supname +` where Id not in ( select SupplierId from `+ auditname +` where YEAR(CreateOn)=YEAR(NOW()))` sql = `select * from `+ supname //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` List := make([]Suppliername, 0) utils.DBE.Sql(sql).Find(&List) return List } //通用多部门多实例审核方法 func (s *OilAnnualAuditService) SubmitOrgAudit(status, workflowid, certId, annualId, wfName, wfNodeCode, userId, result, remarks, OilSupplierCertSubName, OilClassOrgSettingName string) (processInstanceId, res 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 = utils.Cfg.MustValue("workflow", "callbackHost")+"/api/annualaudit/auditcallback?status="+ status +"&annualId="+ annualId res = svcActiviti.MultiTaskComplete(ActiComplete) return processInstanceId, res } func (s *OilAnnualAuditService) GetMyPagingEntitiesWithOrderBytbl(supplierTableName, AnnualAuditName string, pageIndex, itemsPerPage int64, orderby string, asc bool, entitiesPtr interface{}, where string) (total int64) { var resultsSlice []map[string][]byte //获取总记录数 sqlCount := `select count(*) from ` + supplierTableName + ` a ` sqlCount += ` left join ` + AnnualAuditName + " b on b.SupplierId = a.Id" sqlCount += ` where ` + where var sql string sql = `select a.SupplierName, b.* ` sql += ` from ` + supplierTableName + ` a ` sql += ` left join ` + AnnualAuditName + " b on b.SupplierId = a.Id" sql += ` where ` + where if asc { sql += ` order by ` + orderby + ` ASC ` } else { sql += ` order by ` + orderby + ` DESC ` } if (pageIndex != 0 && itemsPerPage !=0) { sql += ` limit ` + utils.ToStr((pageIndex-1)*itemsPerPage) + "," + utils.ToStr(itemsPerPage) } s.DBE.SQL(sql).Find(entitiesPtr) resultsSlice, _ = s.DBE.Query(sqlCount) if len(resultsSlice) > 0 { results := resultsSlice[0] for _, value := range results { total, _ = strconv.ParseInt(string(value), 10, 64) break } } return total } func (s *OilAnnualAuditService) GetProcessInfoWithOrderBytbl(oilAnnualAuditName string, pageIndex, itemsPerPage int64, orderby string, asc bool, entitiesPtr interface{}, where string) (total int64) { var resultsSlice []map[string][]byte //获取总记录数 sqlCount := `select count(*) from ` + oilAnnualAuditName sqlCount += ` where ` + where var sql string sql = `select a.SupplierName, a.Id, ` sql += ` a.Status, a.SupplierTypeName SupplierTypeCode, ` sql += ` a.WorkflowId, '3' as Type, a.CreateOn, a.AccessCardNo, a.ModifiedOn as AddinTime, u.Realname AS ContactName, u.Telephone AS Mobile,` sql += ` CASE WHEN uu.IsCompanyUser = 1 THEN c.CheckUnitName WHEN uu.IsCompanyUser = 0 THEN uu.Unit ELSE '' END AS RecUnitName` sql += ` from ` + oilAnnualAuditName + ` a ` sql += ` LEFT JOIN Base_User u ON a.CreateUserId = u.Id` sql += ` Left join OilSupplier s on a.SupplierId = s.Id left join Base_User uu on s.CreateUserId = uu.Id left join OilCorporateInfo c on s.CreateUserId = c.UserId` sql += ` where ` + where if asc { sql += ` order by ` + orderby + ` ASC ` } else { sql += ` order by ` + orderby + ` DESC ` } if (pageIndex != 0 && itemsPerPage !=0) { sql += ` limit ` + utils.ToStr((pageIndex-1)*itemsPerPage) + "," + utils.ToStr(itemsPerPage) } s.DBE.SQL(sql).Find(entitiesPtr) resultsSlice, _ = s.DBE.Query(sqlCount) if len(resultsSlice) > 0 { results := resultsSlice[0] for _, value := range results { total, _ = strconv.ParseInt(string(value), 10, 64) break } } return total }