package suppliercert import ( "dashoo.cn/backend/api/business/auditsetting" "dashoo.cn/backend/api/business/oilsupplier/classorgsetting" "dashoo.cn/backend/api/business/oilsupplier/supplier" "dashoo.cn/backend/api/business/oilsupplier/supplierfile" "dashoo.cn/backend/api/business/oilsupplier/supplierscenefile" "dashoo.cn/backend/api/business/workflow" baseparameter "dashoo.cn/business2/parameter" "dashoo.cn/business2/userRole" "dashoo.cn/utils" "fmt" "strconv" "strings" "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, commercialNo, userId string, isCompanyUser int) bool { /*parameterSvc := baseparameter.GetBaseparameterService(s.DBE) //取出外部门ID extOrganizeId := parameterSvc.GetBaseparameterMessage("GFGL", "paramset", "ExtOrganizeId") if extOrganizeId == departmentId {*/ if isCompanyUser == 1 { var tempMap []map[string]string 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 + "')" tempMap, _ = s.DBE.QueryString(sql) if tempMap != nil && tempMap[0]["1"] != "" { 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 } func (s *OilSupplierCertService) IsSupplierCertCanSubmit(supplierId, supplierCertId string) bool { //获取主表信息 var supplierEntity supplier.OilSupplier supplierService := supplier.GetOilSupplierService(s.DBE) supplierService.GetEntityById(supplierId, &supplierEntity) //获取准入信息表 var supplierCertEntity OilSupplierCert s.GetEntityById(supplierCertId, &supplierCertEntity) //对准入范围的判断 var certSubList []suppliercertsub.OilSupplierCertSub certsubService := suppliercertsub.GetOilSupplierCertSubService(s.DBE) certsubService.GetListByCertId(supplierCertId, &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("资质文件查询,主表id:" + strconv.Itoa(supplierEntity.Id)) supplierFileService := supplierfile.GetSupplierfileService(utils.DBE) supplierFiles := supplierFileService.GetListBySupplierId(strconv.Itoa(supplierEntity.Id)) fmt.Println("资质文件查询,主表id:" + strconv.Itoa(supplierEntity.Id)) needBiddingBook := false hasBiddingBook := false if supplierCertEntity.InStyle == supplier.IN_STYPE_BIDDING { needBiddingBook = true // 招标准入需提供中标通知书 } for _, fileItem := range supplierFiles { fmt.Println("资质文件: " + fileItem.NeedFileType + " , 匹配名称: " + supplier.BIDDING_BOOK_NAME) /* if fileItem.FileType == "1" { // 1:必须上传的文件, 0:非必须上传 } */ if fileItem.NeedFileType == supplier.BIDDING_BOOK_NAME { hasBiddingBook = true } if len(fileItem.FileUrl) <= 0 { panic("请上传文件 [" + fileItem.NeedFileType + "] !") } } //其它判断 if needBiddingBook && !hasBiddingBook { panic("招标准入需提供中标通知书 !") } return true }