Browse Source

合同套餐、合同品种

hsun 2 years ago
parent
commit
81df34909f

+ 69 - 0
controller/contract/service.go

@@ -1,4 +1,73 @@
 package contract
 
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/go-playground/validator/v10"
+	"hongze/fms_api/controller/resp"
+	"hongze/fms_api/global"
+	"hongze/fms_api/models/fms"
+)
+
 // ServiceController 合同套餐
 type ServiceController struct{}
+
+// ServiceList
+// @Title 合同套餐列表
+// @Description 合同套餐列表
+// @Param   ProductId  query  int  false  "品种类型: 1-FICC(默认); 2-权益"
+// @Success 200 {object} crm.ContractSearchListResp
+// @router /contract/service/list [get]
+func (sr *ServiceController) List(c *gin.Context) {
+	var req fms.ContractServiceListReq
+	if e := c.BindQuery(&req); e != nil {
+		err, ok := e.(validator.ValidationErrors)
+		if !ok {
+			resp.FailData("参数解析失败", "Err:"+e.Error(), c)
+			return
+		}
+		resp.FailData("参数解析失败", err.Translate(global.Trans), c)
+		return
+	}
+
+	productId := 0
+	if req.ProductId == 0 {
+		productId = 1
+	}
+
+	list, e := fms.GetContractServiceTemplateMapByProductId(productId)
+	if e != nil {
+		resp.FailData("获取失败", "获取产品套餐失败, Err: "+e.Error(), c)
+		return
+	}
+	for i := 0; i < len(list); i++ {
+		secList, e := fms.GetContractServiceTemplateMapByParentId(list[i].ServiceTemplateId)
+		if e != nil {
+			resp.FailData("获取失败", "Err:"+e.Error(), c)
+			return
+		}
+		secondLen := len(secList)
+		for j := 0; j < secondLen; j++ {
+			detail, e := fms.GetContractServiceDetailByTemplateId(secList[j].ServiceTemplateId)
+			if e != nil {
+				resp.FailData("获取失败", "获取详情模板失败, Err:"+e.Error(), c)
+				return
+			}
+			secList[j].Detail = detail
+			// 权益存在第三级主客观套餐
+			thirdList, e := fms.GetContractServiceTemplateMapByParentId(secList[j].ServiceTemplateId)
+			if e != nil {
+				resp.FailData("获取失败", "获取三级套餐失败, Err:"+e.Error(), c)
+				return
+			}
+			secList[j].Children = thirdList
+		}
+		detail, e := fms.GetContractServiceDetailByTemplateId(list[i].ServiceTemplateId)
+		if e != nil {
+			resp.FailData("获取失败", "获取详情模板失败, Err:"+e.Error(), c)
+			return
+		}
+		list[i].Detail = detail
+		list[i].Children = secList
+	}
+	resp.OkData("获取成功", list, c)
+}

+ 100 - 0
controller/crm/contract.go

@@ -7,7 +7,9 @@ import (
 	"hongze/fms_api/global"
 	"hongze/fms_api/models/base"
 	"hongze/fms_api/models/crm"
+	"hongze/fms_api/models/system"
 	"hongze/fms_api/utils"
+	"strings"
 )
 
 // ContractController CRM系统合同
@@ -100,3 +102,101 @@ func (rg *ContractController) SearchList(c *gin.Context) {
 	baseData.SetList(respList)
 	resp.OkData("获取成功", baseData, c)
 }
+
+// PermissionList
+// @Title 合同品种列表
+// @Description 合同品种列表
+// @Param   ProductId  query  int  false  "品种类型: 1-FICC(默认); 2-权益"
+// @Success 200 {object} crm.PermissionSetResp
+// @router /crm/contract/permission_list [get]
+func (rg *ContractController) PermissionList(c *gin.Context) {
+	var req crm.ContractPermissionListReq
+	if e := c.BindQuery(&req); e != nil {
+		err, ok := e.(validator.ValidationErrors)
+		if !ok {
+			resp.FailData("参数解析失败", "Err:"+e.Error(), c)
+			return
+		}
+		resp.FailData("参数解析失败", err.Translate(global.Trans), c)
+		return
+	}
+	productId := 0
+	if req.ProductId == 0 {
+		productId = 1
+	}
+	respList := new(crm.PermissionSetResp)
+
+	// FICC
+	if productId == 1 {
+		// 获取品种分类配置
+		sysConf := new(system.SysConfig)
+		confCond := `config_code = ?`
+		confPars := make([]interface{}, 0)
+		confPars = append(confPars, system.ConfigKeyCrmPermissionFiccClassify)
+		confItem, e := sysConf.FetchByCondition(confCond, confPars)
+		if e != nil {
+			resp.FailData("获取失败", "Err:"+e.Error(), c)
+			return
+		}
+		if confItem.ConfigValue == "" {
+			resp.FailData("获取失败", "FICC品种分类配置为空", c)
+			return
+		}
+		classifyArr := strings.Split(confItem.ConfigValue, ",")
+		if len(classifyArr) == 0 {
+			resp.FailData("获取失败", "FICC品种分类配置为空", c)
+			return
+		}
+
+		// 获取FICC权限
+		ficcCond := `enabled = 1 AND permission_type = 0 AND product_id = ? AND classify_name IN ?`
+		ficcPars := make([]interface{}, 0)
+		ficcPars = append(ficcPars, productId, classifyArr)
+		items, e := crm.GetPermissionSetItemsByCondition(ficcCond, ficcPars)
+		if e != nil {
+			resp.FailData("获取失败", "获取FICC权限信息失败, Err: "+e.Error(), c)
+			return
+		}
+		ficcItemMap := make(map[string][]*crm.PermissionSetItem, 0)
+		for i := range items {
+			if ficcItemMap[items[i].ClassifyName] == nil {
+				ficcItemMap[items[i].ClassifyName] = make([]*crm.PermissionSetItem, 0)
+			}
+			ficcItemMap[items[i].ClassifyName] = append(ficcItemMap[items[i].ClassifyName], items[i])
+		}
+
+		for i := range classifyArr {
+			if classifyArr[i] == "市场策略" {
+				continue
+			}
+			checkList := make([]int, 0)
+			if classifyArr[i] == "宏观经济" {
+				checkList = append(checkList, 1)
+			}
+			p := new(crm.PermissionSetList)
+			p.ClassifyName = classifyArr[i]
+			p.Items = ficcItemMap[classifyArr[i]]
+			p.CheckList = make([]int, 0)
+			respList.List = append(respList.List, p)
+		}
+	}
+
+	// 权益
+	if productId == 2 {
+		raiCond := `enabled = 1 AND permission_type = 0 AND product_id = ? AND classify_name = ?`
+		raiPars := make([]interface{}, 0)
+		raiPars = append(raiPars, productId, crm.CompanyProductRaiName)
+		items, e := crm.GetPermissionSetItemsByCondition(raiCond, raiPars)
+		if e != nil {
+			resp.FailData("获取失败", "获取权益权限信息失败, Err: "+e.Error(), c)
+			return
+		}
+
+		p := new(crm.PermissionSetList)
+		p.ClassifyName = crm.CompanyProductRaiName
+		p.Items = items
+		p.CheckList = make([]int, 0)
+		respList.List = append(respList.List, p)
+	}
+	resp.OkData("获取成功", respList, c)
+}

+ 61 - 0
models/crm/chart_permission.go

@@ -0,0 +1,61 @@
+package crm
+
+import (
+	"hongze/fms_api/global"
+	"time"
+)
+
+// ChartPermission CRM系统-权限表
+type ChartPermission struct {
+	ChartPermissionId   int       `gorm:"primaryKey;column:chart_permission_id" description:"权限ID"`
+	ChartPermissionName string    `description:"名称"`
+	PermissionName      string    `description:"权限名"`
+	Sort                int       `description:"排序"`
+	Enabled             int       `description:"是否可用"`
+	CreatedTime         time.Time `description:"创建时间"`
+	LastUpdatedTime     time.Time `description:"更新时间"`
+	TeleconferenceSort  int       `description:"电话会类型排序"`
+	Remark              string    `description:"备注"`
+	ClassifyName        string    `description:"分类名称"`
+	ProductName         string    `description:"产品名称"`
+	ProductID           int       `description:"产品ID"`
+	ImageURL            string    `description:"图片地址"`
+	ShowType            int       `description:"1:查研观向小程序展示"`
+	IsOther             int       `description:"是否是其他,用于查研观向小程序后台展示"`
+	IsReport            int       `description:"是否是报告,用于查研观向小程序前台报告展示"`
+	CygxAuth            int       `description:"是否是权限,用于查研观向小程序前台权限校验"`
+	YbImgUrl            string    `description:"研报小程序报告列表icon"`
+	PriceDrivenState    int       `description:"品种价格驱动开启状态 0-关闭 1-开启"`
+}
+
+type PermissionSetResp struct {
+	List []*PermissionSetList
+}
+
+type PermissionSetList struct {
+	ClassifyName string `description:"分类"`
+	Items        []*PermissionSetItem
+	CheckList    []int
+}
+
+type PermissionSetItem struct {
+	ChartPermissionId int    `description:"权限id"`
+	PermissionName    string `description:"权限名称"`
+	PermissionType    int    `description:"1主观,2客观"`
+	Checked           bool   `description:"选中状态"`
+	ClassifyName      string `description:"分类名称"`
+}
+
+func GetPermissionSetItemsByCondition(condition string, pars []interface{}) (items []*PermissionSetItem, err error) {
+	items = make([]*PermissionSetItem, 0)
+	err = global.MYSQL["report"].Model(ChartPermission{}).
+		Where(condition, pars...).
+		Order("sort ASC").
+		Find(&items).Error
+	return
+}
+
+// ContractPermissionListReq CRM系统合同权限-列表请求体
+type ContractPermissionListReq struct {
+	ProductId int `json:"product_id" form:"product_id" binding:"omitempty" description:"产品: 1-FICC; 2-权益"`
+}

+ 4 - 2
models/crm/constants.go

@@ -30,8 +30,10 @@ const (
 	ROLE_TYPE_CODE_FINANCE         = "finance"         //财务角色
 	ROLE_TYPE_CODE_FICC_TEAM       = "ficc_team"       //ficc销售组长
 
-	CompanyProductFicc = 1 // FICC
-	CompanyProductRai  = 2 // 权益
+	CompanyProductFicc     = 1
+	CompanyProductRai      = 2
+	CompanyProductFiccName = "ficc"
+	CompanyProductRaiName  = "权益"
 
 	// 合同类型
 	ContractTypeNew   = "新签合同" // 新签

+ 32 - 0
models/fms/contract_service_detail.go

@@ -0,0 +1,32 @@
+package fms
+
+import (
+	"hongze/fms_api/global"
+	"time"
+)
+
+// ContractServiceDetail 合同服务内容详情/表单数据
+type ContractServiceDetail struct {
+	Id                 int       `gorm:"primaryKey;column:id" json:"id"`
+	ContractServiceId  int       `gorm:"column:contract_service_id" json:"contract_service_id" description:"合同服务id"`
+	ContractRegisterId int       `gorm:"column:contract_register_id" json:"contract_register_id" description:"合同id"`
+	ServiceTemplateId  int       `gorm:"column:service_template_id" json:"service_template_id" description:"服务模板id"`
+	Col1               string    `gorm:"column:col_1" json:"col_1" description:"第1列数据"`
+	Col2               string    `gorm:"column:col_2" json:"col_2" description:"第2列数据"`
+	Col3               string    `gorm:"column:col_3" json:"col_3" description:"第3列数据"`
+	Col4               string    `gorm:"column:col_4" json:"col_4" description:"第4列数据"`
+	Col5               string    `gorm:"column:col_5" json:"col_5" description:"第5列数据"`
+	Col6               string    `gorm:"column:col_6" json:"col_6" description:"第6列数据"`
+	Col7               string    `gorm:"column:col_7" json:"col_7" description:"第7列数据"`
+	CreateTime         time.Time `gorm:"column:create_time" description:"创建时间"`
+}
+
+// GetContractServiceDetailByTemplateId 根据服务模板ID获取对应的套餐表格数据详情
+func GetContractServiceDetailByTemplateId(serviceTemplateId int) (items []*ContractServiceDetail, err error) {
+	items = make([]*ContractServiceDetail, 0)
+	err = global.DEFAULT_MYSQL.Model(ContractServiceDetail{}).
+		Where("service_template_id = ? AND contract_service_id = 0", serviceTemplateId).
+		Order("id ASC").
+		Find(&items).Error
+	return
+}

+ 56 - 0
models/fms/contract_service_template.go

@@ -0,0 +1,56 @@
+package fms
+
+import (
+	"hongze/fms_api/global"
+	"time"
+)
+
+// ContractServiceTemplate 合同服务模板表
+type ContractServiceTemplate struct {
+	ServiceTemplateId int       `gorm:"primaryKey;column:service_template_id"`
+	ProductId         string    `description:"产品id"`
+	Pid               int       `description:"父级id"`
+	Title             string    `description:"套餐名称"`
+	Value             string    `description:"对应的数据"`
+	SelectType        string    `description:"选择器类型,单选还是多选,radio;单选:checkbox"`
+	SelectName        string    `description:"选择器名称"`
+	TableValue        string    `description:"表格数据,用于word生成时的json数据"`
+	Remark            string    `description:"表头备注"`
+	ChartPermissionId int       `description:"权限id"`
+	CreateTime        time.Time `description:"创建时间"`
+	ModifyTime        time.Time `description:"修改时间"`
+}
+
+type ContractServiceTemplateMapItems struct {
+	ServiceTemplateId int    `description:"套餐模板ID"`
+	ProductId         int    `description:"产品id"`
+	Pid               int    `description:"父级id"`
+	Title             string `description:"套餐名称"`
+	Value             string `description:"对应的数据"`
+	SelectType        string `description:"选择器类型,单选还是多选,radio;单选:checkbox"`
+	SelectName        string `description:"选择器名称"`
+	ChartPermissionId int    `description:"权限id"`
+	Children          []*ContractServiceTemplateMapItems
+	Detail            []*ContractServiceDetail
+}
+
+// ContractServiceListReq CRM系统合同套餐-列表请求体
+type ContractServiceListReq struct {
+	ProductId int `json:"product_id" form:"product_id" binding:"omitempty" description:"产品: 1-FICC; 2-权益"`
+}
+
+func GetContractServiceTemplateMapByProductId(productId int) (items []*ContractServiceTemplateMapItems, err error) {
+	items = make([]*ContractServiceTemplateMapItems, 0)
+	err = global.DEFAULT_MYSQL.Model(ContractServiceTemplate{}).
+		Where("product_id = ? AND pid = 0 AND is_delete = 0", productId).
+		Find(&items).Error
+	return
+}
+
+func GetContractServiceTemplateMapByParentId(parentId int) (items []*ContractServiceTemplateMapItems, err error) {
+	items = make([]*ContractServiceTemplateMapItems, 0)
+	err = global.DEFAULT_MYSQL.Model(ContractServiceTemplate{}).
+		Where("pid = ? AND is_delete = 0", parentId).
+		Find(&items).Error
+	return
+}

+ 35 - 0
models/system/sys_config.go

@@ -0,0 +1,35 @@
+package system
+
+import (
+	"hongze/fms_api/global"
+	"time"
+)
+
+const (
+	ConfigKeyCrmPermissionFiccClassify = "crm_permission_ficc_classify"
+)
+
+// SysConfig 系统配置
+type SysConfig struct {
+	ConfigId    int       `gorm:"primaryKey;column:config_id" json:"config_id" description:"配置ID"`
+	ConfigCode  string    `gorm:"column:config_code" json:"config_code" description:"配置编码"`
+	ConfigValue string    `gorm:"column:config_value" json:"config_value" description:"配置值"`
+	Remark      string    `gorm:"column:remark" json:"remark" description:"备注信息"`
+	CreateTime  time.Time `gorm:"column:create_time" json:"create_time" description:"创建时间"`
+}
+
+func (c *SysConfig) TableName() string {
+	return "sys_config"
+}
+
+func (c *SysConfig) Update(updateCols []string) (err error) {
+	err = global.DEFAULT_MYSQL.Model(c).Select(updateCols).Updates(c).Error
+	return
+}
+
+func (c *SysConfig) FetchByCondition(condition string, pars []interface{}) (item *SysConfig, err error) {
+	err = global.DEFAULT_MYSQL.Model(c).
+		Where(condition, pars...).
+		First(&item).Error
+	return
+}

+ 5 - 0
routers/contract.go

@@ -19,4 +19,9 @@ func InitContract(rg *gin.RouterGroup) {
 	crGroup.POST("export", cr.Export)
 	crGroup.POST("invoice", cr.Invoice)
 	crGroup.POST("payment", cr.Invoice) // 与开票登记用同一个func, 路由作区分划分权限
+
+	// 合同套餐
+	sr := new(contract.ServiceController)
+	srGroup := rg.Group("service/").Use(middleware.Token())
+	srGroup.GET("list", sr.List)
 }

+ 1 - 0
routers/crm.go

@@ -11,6 +11,7 @@ func InitCrm(rg *gin.RouterGroup) {
 	ct := new(crm.ContractController)
 	crGroup := rg.Group("contract/").Use(middleware.Token())
 	crGroup.GET("search_list", ct.SearchList)
+	crGroup.GET("permission_list", ct.PermissionList)
 
 	// 销售
 	sl := new(crm.CompanySellerController)