package suppliercertappend import ( "dashoo.cn/backend/api/business/oilsupplier/supplier" "dashoo.cn/backend/api/business/oilsupplier/supplierfile" "fmt" "strconv" "strings" "dashoo.cn/backend/api/business/auditsetting" "dashoo.cn/backend/api/business/oilsupplier/classorgsetting" "dashoo.cn/backend/api/business/oilsupplier/suppliercertappendsub" "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" ) type OilSupplierCertAppendService struct { MyServiceBase } func GetOilSupplierCertAppendService(xormEngine *xorm.Engine) *OilSupplierCertAppendService { s := new(OilSupplierCertAppendService) s.DBE = xormEngine return s } //通用多部门多实例审核方法 func (s *OilSupplierCertAppendService) SubmitOrgAudit(certId, wfName, wfNodeCode, userId, result, remarks, OilSupplierCertSubName, OilClassOrgSettingName string) (processInstanceId string) { //取出审批列表 var supplierCert OilSupplierCertAppend s.GetEntityById(certId, &supplierCert) //取出准入分类列表 var subList []suppliercertappendsub.OilSupplierCertAppendSub certSubSrv := suppliercertsub.GetOilSupplierCertSubService(s.DBE) subWhere := " 1=1 " subWhere += " and SupplierCertAppendId='" + 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.AppendType + "'" 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 { //启动工作流 fmt.Println("-=========certId=========", certId) 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 ActiComplete.CallbackUrl = "" svcActiviti.MultiTaskComplete(ActiComplete) return processInstanceId } func (s *OilSupplierCertAppendService) GetMyPagingEntitiesWithOrderBytbl(supplierTableName, supplierCertAppendName 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 ` + supplierCertAppendName + " b on b.SupplierId = a.Id" sqlCount += ` where ` + where var sql string sql = `select a.SupplierName, b.* ` sql += ` from ` + supplierTableName + ` a ` sql += ` left join ` + supplierCertAppendName + " 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 *OilSupplierCertAppendService) GetTodoEntitie(supplierTableName, supplierCertAppendName string, entitiesPtr interface{}, where string) bool { var sql string sql = `select b.Id, a.SupplierName, b.AppendType SupplierTypeCode, b.Status ` sql += ` from ` + supplierTableName + ` a ` sql += ` left join ` + supplierCertAppendName + " b on b.SupplierId = a.Id" sql += ` where ` + where has, _ := s.DBE.SQL(sql).Get(entitiesPtr) return has } func (s *OilSupplierCertAppendService) GetProcessInfoWithOrderBytbl(supplierCertAppendName string, pageIndex, itemsPerPage int64, orderby string, asc bool, entitiesPtr interface{}, where string) (total int64) { var resultsSlice []map[string][]byte //获取总记录数 sqlCount := `select count(*) from ` + supplierCertAppendName + ` a ` sqlCount += ` where ` + where var sql string sql = `select a.SupplierName, a.Id, ` sql += ` a.Status, a.AppendType SupplierTypeCode, ` sql += ` a.WorkflowId, a.ProcessKey, '2' 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 ` + supplierCertAppendName + ` 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 } func (s *OilSupplierCertAppendService) IsSupplierCertAppendCanSubmit(supplierId, supplierCertAppendId string) bool { //获取主表信息 var supplierEntity supplier.OilSupplier supplierService := supplier.GetOilSupplierService(s.DBE) supplierService.GetEntityById(supplierId, &supplierEntity) //获取准入信息表 var supplierCertAppendEntity OilSupplierCertAppend s.GetEntityById(supplierCertAppendId, &supplierCertAppendEntity) //对准入范围的判断 var certSubList []suppliercertsub.OilSupplierCertSub certsubService := suppliercertsub.GetOilSupplierCertSubService(s.DBE) certsubService.GetListByAppendId(supplierCertAppendId, &certSubList) if len(certSubList) <= 0 { panic("准入范围不能为空!") } if supplierEntity.Grade == supplier.GRADE_2 { for _, certSubItem := range certSubList { if certSubItem.GoodsLevel == supplier.GOODS_LEVEL_1 { panic("二级供应商不能准入一级物资!") } } } //请上传现场考察报告 //paramSvc := baseparameter.GetBaseparameterService(utils.DBE) //isInvestigate := paramSvc.GetBaseparameterMessage("GFGL1", "paramset", "isInvestigate") //if isInvestigate == "true" && // supplierCertEntity.Type == supplier.SUPPLIER_TYPE_GOODS && //当前只有物资类才可上传现场考察报告 // supplierEntity.OperType == "代理商" && // supplierCertEntity.InStyle != supplier.IN_STYPE_GOODS_LEVEL_1 { // // scenefileService := supplierscenefile.GetSupplierScenefileService(utils.DBE) // scenefileEntity := scenefileService.GetSceneFileList( strconv.Itoa(supplierEntity.Id) ) // if len(scenefileEntity.FileUrl) <= 0 { // panic("请上传现场考察报告!") // } //} //对准入资质的判断 fmt.Println("资质文件查询1,主表id:" + strconv.Itoa(supplierEntity.Id)) supplierFileService := supplierfile.GetSupplierfileService(utils.DBE) supplierFiles := supplierFileService.GetListBySupplierId(strconv.Itoa(supplierEntity.Id)) fmt.Println("资质文件查询1,主表id:" + strconv.Itoa(supplierEntity.Id)) needBiddingBook := false hasBiddingBook := false if supplierCertAppendEntity.InStyle == supplier.IN_STYPE_BIDDING { needBiddingBook = true // 招标准入需提供招标中标结果 } for _, fileItem := range supplierFiles { /* if fileItem.FileType == "1" { // 1:必须上传的文件, 0:非必须上传 } */ fmt.Println("资质文件1: " + fileItem.NeedFileType + " , 匹配名称: " + supplier.BIDDING_BOOK_NAME) if fileItem.NeedFileType == supplier.BIDDING_BOOK_NAME { hasBiddingBook = true } /*if len(fileItem.FileUrl) <= 0 { panic("请上传文件 [" + fileItem.NeedFileType + "] !") }*/ } //其它判断 if needBiddingBook && !hasBiddingBook { panic("招标准入需提供招标中标结果 !") } return true }