作者 yangfu

模板管理修改

... ... @@ -105,3 +105,61 @@ func (this *TemplateController) TemplateList() {
msg = protocol.NewReturnResponse(rsp, err)
return
}
//TemplateEditVisible
//@router /templateEditVisible [post]
func (this *TemplateController) TemplateEditVisible() {
var msg *protocol.ResponseMessage
defer func() {
this.ResposeJson(msg)
}()
var request *protocol.TemplateEditVisibleRequest
if err := json.Unmarshal(this.Ctx.Input.RequestBody, &request); err != nil {
log.Error("json 解析失败", err)
msg = protocol.BadRequestParam("1")
return
}
uid := this.GetUserId()
companyId := this.GetCompanyId()
if companyId <= 0 {
log.Debug("companyId:%d err", companyId)
msg = protocol.BadRequestParam("1")
return
}
if b, m := this.Valid(request); !b {
msg = m
return
}
rsp, err := audit.TemplateEditVisible(uid, companyId, request)
msg = protocol.NewReturnResponse(rsp, err)
}
//TemplateOperateCategory
//@router /templateOperateCategory [post]
func (this *TemplateController) TemplateOperateCategory() {
var msg *protocol.ResponseMessage
defer func() {
this.ResposeJson(msg)
}()
var request *protocol.TemplateOperateCategoryRequest
if err := json.Unmarshal(this.Ctx.Input.RequestBody, &request); err != nil {
log.Error("json 解析失败", err)
msg = protocol.BadRequestParam("1")
return
}
uid := this.GetUserId()
companyId := this.GetCompanyId()
if companyId <= 0 {
log.Debug("companyId:%d err", companyId)
msg = protocol.BadRequestParam("1")
return
}
if b, m := this.Valid(request); !b {
msg = m
return
}
rsp, err := audit.TemplateOperateCategory(uid, companyId, request)
msg = protocol.NewReturnResponse(rsp, err)
}
... ...
... ... @@ -82,3 +82,14 @@ func DeleteAuditForm(id int) (err error) {
}
return
}
// GetAuditFormById retrieves AuditForm by Id. Returns error if
// Id doesn't exist
func GetAuditFormByTemplateId(id int) (v []*AuditForm, err error) {
o := orm.NewOrm()
sql := `select * from audit_form where audit_template_id =? and enable_status=1 order by sort_num`
if _, err = o.Raw(sql, id).QueryRows(&v); err == nil {
return v, nil
}
return nil, err
}
... ...
... ... @@ -8,22 +8,33 @@ import (
)
type AuditTemplate struct {
Id int64 `orm:"column(id);auto" description:"唯一编号"`
CompanyId int `orm:"column(company_id)" description:"公司id"`
ChanceTypeId int `orm:"column(chance_type_id)" description:"机会类型 chance_type.id"`
Name string `orm:"column(name);size(20)" description:"子分类名称"`
Doc string `orm:"column(doc);size(255)" description:"说明"`
Icon string `orm:"column(icon);size(255)" description:"图标"`
NoticeType int8 `orm:"column(notice_type)" description:"通知方式"`
NoApprover int8 `orm:"column(no_approver)" description:"审核人空时:【1:自动通过】【2:转交给管理员】"`
SortNum int `orm:"column(sort_num)" description:"自定义排序编号"`
VisibleType int8 `orm:"column(visible_type)" description:"可见范围 0:所有人 1:指定部门 "`
EnableStatus int8 `orm:"column(enable_status)" description:"是否有效 1:有效 0:无效"`
CreateAt time.Time `orm:"column(create_at);type(timestamp)" description:"创建时间"`
UpdateAt time.Time `orm:"column(update_at);type(timestamp)" description:"更新时间"`
Example string `orm:"column(examplte);null" description:"示例"`
Id int64 `orm:"column(id);auto" description:"唯一编号"`
CompanyId int `orm:"column(company_id)" description:"公司id"`
ChanceTypeId int `orm:"column(chance_type_id)" description:"机会类型 chance_type.id"`
Name string `orm:"column(name);size(20)" description:"子分类名称"`
Doc string `orm:"column(doc);size(255)" description:"说明"`
Icon string `orm:"column(icon);size(255)" description:"图标"`
NoticeType int8 `orm:"column(notice_type)" description:"通知方式"`
NoApprover int8 `orm:"column(no_approver)" description:"审核人空时:【1:自动通过】【2:转交给管理员】"`
SortNum int `orm:"column(sort_num)" description:"自定义排序编号"`
VisibleType int8 `orm:"column(visible_type)" description:"可见范围 0:所有人 1:指定部门 "`
VisibleObject string `orm:"column(visible_object)" description:"可见的对象 部门 指定人 json"`
EnableStatus int8 `orm:"column(enable_status)" description:"是否有效 1:有效 0:无效"`
CreateAt time.Time `orm:"column(create_at);type(timestamp)" description:"创建时间"`
UpdateAt time.Time `orm:"column(update_at);type(timestamp)" description:"更新时间"`
Example string `orm:"column(example);null" description:"示例"`
}
const (
VisibleTypeAll = 0
VisibleTypeDepartment = 1
)
const (
VisibleObject_Department = 1
VisibleObject_User = 2
)
func (t *AuditTemplate) TableName() string {
return "audit_template"
}
... ... @@ -80,3 +91,14 @@ func DeleteAuditTemplate(id int64) (err error) {
}
return
}
func GetAuditTemplateByTypeId(chanceTypeId int) (v []*AuditTemplate, err error) {
o := orm.NewOrm()
_, err = o.QueryTable(&AuditTemplate{}).
Filter("chance_type_id", chanceTypeId).All(&v)
if err == orm.ErrNoRows {
return v, nil
}
return
}
... ...
... ... @@ -82,3 +82,12 @@ func GetChanceTypeAll() (v []*ChanceType, err error) {
}
return
}
func GetChanceTypeByCompany(companyId int) (v []*ChanceType, err error) {
o := orm.NewOrm()
sql := "select * from chance_type where company_id=?"
if _, err = o.Raw(sql, companyId).QueryRows(&v); err == nil {
return
}
return
}
... ...
... ... @@ -154,3 +154,15 @@ func GetDepartmentByCompanyId(companyId int64) ([]Department, error) {
All(&result)
return result, err
}
func GetDepartmentByIds(departmentIds []int64) ([]Department, error) {
var (
result []Department
err error
)
o := orm.NewOrm()
_, err = o.QueryTable(&Department{}).
Filter("id__in", departmentIds).
All(&result)
return result, err
}
... ...
... ... @@ -16,7 +16,7 @@ type InputElement struct {
Lable string `json:"lable"` //标题
InputType string `json:"inputType"` //输入类型
Required int `json:"required"` //是否必填
CurrentValue string `json:"value"` //"当前填写的值"
CurrentValue string `json:"-"` //"当前填写的值"
SectionType int8 `json:"sectionType"`
ValueList string `json:"-"` //输入候选值 value_list
... ... @@ -106,9 +106,10 @@ type TemplateUpdateResponse struct {
type TemplateListRequest struct {
}
type TemplateListResponse struct {
List []*TemplateList `json:"list"`
}
type ChanceType struct {
type TemplateList struct {
Id int `json:"id"`
Name string `json:"name"`
Icon string `json:"icon"`
... ... @@ -127,7 +128,33 @@ type TemplateItem struct {
}
type VisibleObject struct {
Id string `json:"id"`
Name string `json:"name",omitempty`
Type int `json:"type"` //1:部门 2:指定人员
}
/*TemplateEditVisible */
type TemplateEditVisibleRequest struct {
Id int `json:"id"` //模板编号
VisibleObject []VisibleObject `json:"visibleObject" valid:"Required"`
}
type TemplateEditVisibleResponse struct {
}
/*TemplateAddCategory */
type TemplateOperateCategoryRequest struct {
Id int `json:"id"`
Name string `json:"name,omitempty"`
Type int //1:部门 2:指定人员
Name string `json:"name"`
Icon string `json:"icon"`
}
type TemplateOperateCategoryResponse struct {
}
/*TemplateGet */
type TemplateGetRequest struct {
Id int `json:"id" valid:"Required"`
}
type TemplateGetResponse struct {
Template Template `json:"template"`
Example string `json:"example"` //示例`
}
... ...
package agg
import (
"encoding/json"
"fmt"
orm2 "github.com/astaxie/beego/orm"
"oppmg/common/log"
"oppmg/models"
"oppmg/protocol"
"strconv"
)
func getUsers(jsonData string) (v []models.User, err error) {
var vObjs []protocol.VisibleObject
var ids []int64
var id int64
if err = json.Unmarshal([]byte(jsonData), &vObjs); err != nil {
return
}
for i := 0; i < len(vObjs); i++ {
if vObjs[i].Type != models.VisibleObject_User {
continue
}
if id, err = strconv.ParseInt(vObjs[i].Id, 10, 64); err != nil {
return
}
if id == 0 {
continue
}
ids = append(ids, id)
}
if len(ids) == 0 {
return
}
return models.GetUserNameByIds(ids)
}
func getDepartments(jsonData string) (v []models.Department, err error) {
var vObjs []protocol.VisibleObject
var ids []int64
var id int64
if err = json.Unmarshal([]byte(jsonData), &vObjs); err != nil {
return
}
for i := 0; i < len(vObjs); i++ {
if vObjs[i].Type != models.VisibleObject_Department {
continue
}
if id, err = strconv.ParseInt(vObjs[i].Id, 10, 64); err != nil {
return
}
if id == 0 {
continue
}
ids = append(ids, id)
}
if len(ids) == 0 {
return
}
return models.GetDepartmentByIds(ids)
}
func GetVisibleObject(jsonData string) (v []protocol.VisibleObject, err error) {
var (
users []models.User
departments []models.Department
)
if len(jsonData) == 0 {
return
}
if departments, err = getDepartments(jsonData); err != nil && err != orm2.ErrNoRows {
log.Error(err.Error())
return
}
for i := range departments {
v = append(v, protocol.VisibleObject{
Id: fmt.Sprintf("%v", departments[i].Id),
Name: departments[i].Name,
Type: models.VisibleObject_Department,
})
}
if users, err = getUsers(jsonData); err != nil && err != orm2.ErrNoRows {
log.Error(err.Error())
return
}
for i := range users {
v = append(v, protocol.VisibleObject{
Id: fmt.Sprintf("%v", users[i].Id),
Name: users[i].NickName,
Type: models.VisibleObject_User,
})
}
return
}
... ...
... ... @@ -2,16 +2,19 @@ package audit
import (
"database/sql"
"encoding/json"
"fmt"
orm2 "github.com/astaxie/beego/orm"
"oppmg/common/log"
"oppmg/models"
"oppmg/protocol"
"oppmg/services/agg"
"oppmg/utils"
"strings"
"time"
)
//添加模板
func TemplateAdd(uid, companyId int64, request *protocol.TemplateAddRequest) (rsp *protocol.TemplateAddResponse, err error) {
var (
auditForm *models.AuditForm
... ... @@ -27,6 +30,7 @@ func TemplateAdd(uid, companyId int64, request *protocol.TemplateAddRequest) (rs
//模板
{
template = &models.AuditTemplate{
ChanceTypeId: request.Template.ChanceTypeId,
CompanyId: int(companyId),
Name: request.Template.Name,
Doc: request.Template.Doc,
... ... @@ -74,6 +78,7 @@ func TemplateAdd(uid, companyId int64, request *protocol.TemplateAddRequest) (rs
return
}
//模板更新
func TemplateUpdate(uid, companyId int64, request *protocol.TemplateUpdateRequest) (rsp *protocol.TemplateUpdateResponse, err error) {
var (
template *models.AuditTemplate
... ... @@ -176,8 +181,158 @@ func insertOrUpdateInput(orm orm2.Ormer, companyId int64, templateId int, input
return
}
//模板列表
func TemplateList(uid, companyId int64, request *protocol.TemplateListRequest) (rsp *protocol.TemplateListResponse, err error) {
var ()
var (
chanceTypes []*models.ChanceType
templates []*models.AuditTemplate
)
if chanceTypes, err = models.GetChanceTypeByCompany(int(companyId)); err != nil {
log.Error("get:%v msg:%v", companyId, err.Error())
return
}
rsp = &protocol.TemplateListResponse{}
for i := 0; i < len(chanceTypes); i++ {
t := chanceTypes[i]
item := &protocol.TemplateList{
Id: t.Id,
Name: t.Name,
Icon: t.Icon,
}
rsp.List = append(rsp.List, item)
if templates, err = models.GetAuditTemplateByTypeId(t.Id); err != nil {
log.Error(err.Error())
continue
}
for j := range templates {
temp := templates[j]
var vObj []protocol.VisibleObject
//TODO:可见
//1.检查可见性
//2.可见对象 VisibleObject
if temp.VisibleType == models.VisibleTypeDepartment {
if vObj, err = agg.GetVisibleObject(temp.VisibleObject); err != nil {
log.Error(err.Error())
return
}
}
tempItem := &protocol.TemplateItem{
Id: temp.Id,
Name: temp.Name,
Doc: temp.Doc,
Icon: temp.Icon,
EnableStatus: temp.EnableStatus,
Sort: temp.SortNum,
VisibleType: temp.VisibleType,
VisibleObject: vObj,
}
item.Templates = append(item.Templates, tempItem)
}
}
return
}
//编辑可见范围
func TemplateEditVisible(uid, companyId int64, request *protocol.TemplateEditVisibleRequest) (rsp *protocol.TemplateEditVisibleResponse, err error) {
var (
template *models.AuditTemplate
data []byte
)
rsp = &protocol.TemplateEditVisibleResponse{}
if template, err = models.GetAuditTemplateById(int64(request.Id)); err != nil {
log.Error(err.Error())
return
}
if template.CompanyId != int(companyId) {
err = protocol.NewErrWithMessage("10027")
log.Error("template_id:%v companyId:%v want:%v not equal.", request.Id, companyId, template.CompanyId)
return
}
if data, err = json.Marshal(request.VisibleObject); err != nil {
log.Error(err.Error())
return
}
if err = utils.UpdateTableByMap(template, map[string]interface{}{"VisibleObject": string(data)}); err != nil {
log.Error(err.Error())
return
}
return
}
//操作一级分类
func TemplateOperateCategory(uid, companyId int64, request *protocol.TemplateOperateCategoryRequest) (rsp *protocol.TemplateOperateCategoryResponse, err error) {
var (
chanceType *models.ChanceType
)
rsp = &protocol.TemplateOperateCategoryResponse{}
if request.Id > 0 { //编辑
if chanceType, err = models.GetChanceTypeById(request.Id); err != nil {
log.Error(err.Error())
return
}
if chanceType.CompanyId != int(companyId) {
err = protocol.NewErrWithMessage("10027")
log.Error("template_id:%v companyId:%v want:%v not equal.", request.Id, companyId, chanceType.CompanyId)
}
if err = utils.UpdateTableByMap(chanceType, map[string]interface{}{"Name": request.Name, "Icon": request.Icon, "UpdateAt": time.Now()}); err != nil {
log.Error(err.Error())
return
}
return
}
chanceType = &models.ChanceType{
Name: request.Name,
Icon: request.Icon,
CompanyId: int(companyId),
CreateAt: time.Now(),
UpdateAt: time.Now(),
}
if _, err = models.AddChanceType(chanceType); err != nil {
log.Error(err.Error())
}
return
}
//获取模板详情
func TemplateGet(uid, companyId int64, request *protocol.TemplateGetRequest) (rsp *protocol.TemplateGetResponse, err error) {
var (
template *models.AuditTemplate
auditForm []*models.AuditForm
)
rsp = &protocol.TemplateGetResponse{}
if template, err = models.GetAuditTemplateById(int64(request.Id)); err != nil {
log.Error("template_id:%v 不存在 ,err:%v", request.Id, err.Error())
return
}
{
rsp.Template = protocol.Template{
Id: template.Id,
ChanceTypeId: template.ChanceTypeId,
Name: template.Name,
Doc: template.Doc,
Icon: template.Icon,
}
rsp.Example = template.Example
if auditForm, err = models.GetAuditFormByTemplateId(int(template.Id)); err != nil {
if err == sql.ErrNoRows {
err = nil
}
return
}
for i := range auditForm {
input := auditForm[i]
rsp.Template.InputList = append(rsp.Template.InputList, &protocol.InputElement{
Id: input.Id,
Sort: input.SortNum,
Lable: input.InputType,
Required: int(input.Required),
SectionType: input.Section,
})
}
}
return
}
... ...