ziwen 2 年之前
父节点
当前提交
8061880378

+ 153 - 31
controller/contract/pre_register.go

@@ -175,8 +175,6 @@ func (rg *PreRegisterController) Add(c *gin.Context) {
 			return
 		}
 	}
-	
-
 
 	//新增合同
 	ob := new(fms.ContractRegister)
@@ -568,7 +566,6 @@ func (rg *PreRegisterController) Edit(c *gin.Context) {
 	resp.Ok("操作成功", c)
 }
 
-
 // Del
 // @Title 删除到款预登记
 // @Description 删除到款预登记
@@ -588,42 +585,59 @@ func (rg *PreRegisterController) Del(c *gin.Context) {
 		return
 	}
 
-	ob := new(fms.ContractInvoice)
-	item, e := ob.Fetch(req.InvoiceId)
+	if req.InvoiceId != 0 {
+		ob := new(fms.ContractInvoice)
+		item, e := ob.Fetch(req.InvoiceId)
+		if e != nil {
+			if e == utils.ErrNoRow {
+				resp.Fail("合同登记不存在或已被删除", c)
+				return
+			}
+			resp.FailMsg("获取合同登记失败", "Err:"+e.Error(), c)
+			return
+		}
+		e = item.Delete()
+		if e != nil {
+			resp.FailMsg("删除记录失败", "Err:"+e.Error(), c)
+			return
+		}
+	}
+
+	if req.ArriveId != 0 {
+		ob := new(fms.ContractInvoice)
+		item, e := ob.Fetch(req.ArriveId)
+		if e != nil {
+			if e == utils.ErrNoRow {
+				resp.Fail("合同登记不存在或已被删除", c)
+				return
+			}
+			resp.FailMsg("获取合同登记失败", "Err:"+e.Error(), c)
+			return
+		}
+		e = item.Delete()
+		if e != nil {
+			resp.FailMsg("删除记录失败", "Err:"+e.Error(), c)
+			return
+		}
+	}
+
+	ob := new(fms.ContractPreRegister)
+	item, e := ob.Fetch(req.PreRegisterId)
 	if e != nil {
 		if e == utils.ErrNoRow {
-			resp.Fail("合同登记不存在或已被删除", c)
+			resp.Fail("预登记记录不存在或已被删除", c)
 			return
 		}
-		resp.FailMsg("获取合同登记失败", "Err:"+e.Error(), c)
+		resp.FailMsg("获取登记失败", "Err:"+e.Error(), c)
 		return
 	}
 	e = item.Delete()
 	if e != nil {
-		resp.FailMsg("删除记录失败", "Err:"+e.Error(), c)
+		resp.FailMsg("删除预登记记录失败", "Err:"+e.Error(), c)
 		return
 	}
 
-	// 操作日志
-	//go func() {
-	//	opData := ""
-	//	opDataByte, e := json.Marshal(req)
-	//	if e != nil {
-	//		return
-	//	}
-	//	opData = string(opDataByte)
-	//
-	//	logItem := new(fms.ContractRegisterLog)
-	//	logItem.ContractRegisterId = req.ContractRegisterId
-	//	logItem.AdminId = int(adminInfo.AdminId)
-	//	logItem.AdminName = adminInfo.RealName
-	//	logItem.OpData = opData
-	//	logItem.OpType = fms.ContractRegisterOpTypeDel
-	//	logItem.CreateTime = nowTime
-	//	if e = logItem.Create(); e != nil {
-	//		return
-	//	}
-	//}()
+	//todo 合同看情况要不要删
 
 	resp.Ok("操作成功", c)
 }
@@ -658,18 +672,126 @@ func (rg *PreRegisterController) Detail(c *gin.Context) {
 		return
 	}
 
+	nItme := fms.ContractRegisterItem{
+		ContractRegisterId: item.ContractRegisterId,
+		ContractCode:       item.ContractCode,
+		RelateContractCode: item.RelateContractCode,
+		CrmContractId:      item.CrmContractId,
+		ContractSource:     item.ContractSource,
+		CompanyName:        item.CompanyName,
+		ActualCompanyName:  item.ActualCompanyName,
+		ProductIds:         item.ProductIds,
+		SellerId:           item.SellerId,
+		SellerName:         item.SellerName,
+		RaiSellerId:        item.RaiSellerId,
+		RaiSellerName:      item.RaiSellerName,
+		ContractType:       item.ContractType,
+		ContractAmount:     item.ContractAmount,
+		InvoicedAmount:     item.InvoicedAmount,
+		PaymentAmount:      item.PaymentAmount,
+		CurrencyUnit:       item.CurrencyUnit,
+		RMBRate:            item.RMBRate,
+		StartDate:          item.StartDate.Format(utils.FormatDate),
+		EndDate:            item.EndDate.Format(utils.FormatDate),
+		SignDate:           item.SignDate.Format(utils.FormatDate),
+		AgreedPayTime:      item.AgreedPayTime,
+		ContractStatus:     item.ContractStatus,
+		RegisterStatus:     item.RegisterStatus,
+		Remark:             item.Remark,
+		ServiceRemark:      item.ServiceRemark,
+		HasPayment:         item.HasPayment,
+		NewCompany:         item.NewCompany,
+		CreateTime:         item.CreateTime.Format(utils.FormatDateTime),
+	}
+
 	cond := `contract_register_id = ? AND invoice_type = ? `
 	pars := make([]interface{}, 0)
 	pars = append(pars, req.ContractRegisterId, req.InvoiceType)
-	list, e := fms.GetContractInvoiceItemList(cond, pars)
+	list, e := fms.GetContractInvoiceDetailItemList(cond, pars)
 	if e != nil {
 		err = fmt.Errorf("获取开票到款列表失败, Err: %s", e.Error())
 		return
 	}
 
+	//获取ficc小套餐品种
+	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, 1, 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])
+	}
+
+	sTempIdMap := make(map[string]int, 0)
+
+	for i := range classifyArr {
+		if classifyArr[i] == "市场策略" {
+			continue
+		}
+		checkList := make([]int, 0)
+		if classifyArr[i] == "宏观经济" {
+			checkList = append(checkList, 1)
+		}
+
+		pItem := fms.ContractServiceTemplateItem{
+			ServiceTemplateId: 90000 + i*100,
+		}
+
+		ficcItems := ficcItemMap[classifyArr[i]]
+		for _, ficcItem := range ficcItems {
+			sTempIdMap[strconv.Itoa(ficcItem.ChartPermissionId)] = pItem.ServiceTemplateId + ficcItem.ChartPermissionId
+		}
+	}
+
+	services, e := fms.GetContractServiceAndDetailList(req.ContractRegisterId)
+	if e != nil {
+		err = fmt.Errorf(fmt.Sprint("查找合同服务异常", e))
+		return
+	}
+
+	serviceTemplateIdSlice := make([]string, 0)
+	for _, service := range services {
+		if service.Title == "FICC小套餐" {
+			serviceTemplateIdSlice = strings.Split(service.ChartPermissionIds,",")
+		}
+	}
+
+	serviceTemplateIds := make([]int, 0)
+	for _, v := range serviceTemplateIdSlice {
+		serviceTemplateIds = append(serviceTemplateIds, sTempIdMap[v])
+	}
 	respItem := fms.ContractPreRegisterDetail{
-		ContractRegister: item,
-		List:             list,
+		ContractRegisterItem: &nItme,
+		List:                 list,
+		Services:             services,
+		ServiceTemplateIds:   serviceTemplateIds,
 	}
 
 	resp.OkData("获取成功", respItem, c)

+ 6 - 1
controller/contract/register.go

@@ -1190,6 +1190,7 @@ func (rg *RegisterController) Invoice(c *gin.Context) {
 // @Param   ServiceType		query	int		false	"套餐类型"
 // @Param   ContractType	query	int		false	"合同类型"
 // @Param   RegisterStatus	query	int		false	"登记状态"
+// @Param   ListParam		query	int		false	"套餐类型: 0-全部; 1-ficc; 2-权益"
 // @Success 200 string "操作成功"
 // @router /contract/register/export [get]
 func (rg *RegisterController) Export(c *gin.Context) {
@@ -1240,7 +1241,11 @@ func (rg *RegisterController) Export(c *gin.Context) {
 			cond += ` AND 1 = 2`
 		}
 	}
-
+	if req.ListParam == 1 {
+		cond += ` AND product_ids = '2' `
+	}else if req.ListParam == 2 {
+		cond += ` AND product_ids = '2' `
+	}
 	// 获取列表数据
 	cr := new(fms.ContractRegister)
 	list, e := cr.List(cond, pars)

+ 66 - 0
models/fms/contract_invoice.go

@@ -515,3 +515,69 @@ type PreRegisterListReq struct {
 	Keyword string `json:"keyword" form:"keyword" binding:"omitempty" description:"关键词"`
 	base.PageReq
 }
+
+// ContractInvoiceDetailItem 预登记列表详情用-invoice_time换register_time
+type ContractInvoiceDetailItem struct {
+	ContractInvoiceId  int     `gorm:"column:contract_invoice_id" json:"contract_invoice_id" description:"开票ID"`
+	ContractRegisterId int     `gorm:"column:contract_register_id" json:"contract_register_id" description:"登记ID"`
+	ContractCode       string  `gorm:"column:contract_code" json:"contract_code" description:"合同编号"`
+	ContractStatus     int     `json:"contract_status" description:"合同状态: 1-已审批; 2-单章寄出; 3-已签回"`
+	Amount             float64 `gorm:"column:amount" json:"amount" description:"换算金额"`
+	OriginAmount       float64 `gorm:"column:origin_amount" json:"origin_amount" description:"开票/到款金额"`
+	CurrencyUnit       string  `gorm:"column:currency_unit" json:"currency_unit" description:"货币国际代码"`
+	UnitName           string  `json:"unit_name" description:"货币单位名称"`
+	InvoiceType        int     `gorm:"column:invoice_type" json:"invoice_type" description:"类型: 1-开票登记; 2-到款登记;3-开票预登记;4-到款预登记"`
+	InvoiceDate        string  `gorm:"column:register_time" json:"register_time" description:"开票日期/到款月"`
+	SellerId           int     `gorm:"column:seller_id" json:"seller_id" description:"销售ID"`
+	SellerName         string  `gorm:"column:seller_name" json:"seller_name" description:"销售名称"`
+	PayType            int     `gorm:"column:pay_type" json:"pay_type" description:"付款方式:0-无;1-年付;2-半年付;3-季付;4-次付;5-异常"`
+	Remark             string  `gorm:"column:remark" json:"remark" description:"备注信息"`
+	ServiceProductId   int     `gorm:"column:service_product_id" json:"service_product_id" description:"套餐类型:1ficc套餐,2权益套餐"`
+	IsPrePay           int     `gorm:"column:is_pre_pay" json:"is_pre_pay" description:"是否预付款: 0-不是; 1-是"`
+	StartDate          string  `gorm:"column:start_date" json:"start_date" description:"约定开始时间"`
+	EndDate            string  `gorm:"column:end_date" json:"end_date" description:"约定结束时间"`
+	CreateTime         string  `gorm:"column:create_time" json:"create_time" description:"创建时间"`
+}
+
+
+// GetContractInvoiceDetailItemList 预登记列表详情用-获取开票到款列表
+func GetContractInvoiceDetailItemList(condition string, pars []interface{}) (itemList []*ContractInvoiceDetailItem, err error) {
+	list := make([]*ContractInvoice, 0)
+	err = global.DEFAULT_MYSQL.Model(ContractInvoice{}).
+		Where("is_deleted = 0").
+		Where(condition, pars...).
+		Order("contract_invoice_id ASC").
+		Find(&list).Error
+	if err != nil {
+		return
+	}
+	itemList = formatContractInvoice2DetailItemList(list)
+	return
+}
+
+// formatContractInvoice2ItemList 预登记列表详情用-格式化ContractInvoice
+func formatContractInvoice2DetailItemList(list []*ContractInvoice) (itemList []*ContractInvoiceDetailItem) {
+	itemList = make([]*ContractInvoiceDetailItem, 0)
+	for i := range list {
+		itemList = append(itemList, &ContractInvoiceDetailItem{
+			ContractInvoiceId:  list[i].ContractInvoiceId,
+			ContractRegisterId: list[i].ContractRegisterId,
+			ContractCode:       list[i].ContractCode,
+			Amount:             list[i].Amount,
+			OriginAmount:       list[i].OriginAmount,
+			CurrencyUnit:       list[i].CurrencyUnit,
+			InvoiceType:        list[i].InvoiceType,
+			InvoiceDate:        utils.TimeTransferString(utils.FormatDate, list[i].InvoiceDate),
+			SellerId:           list[i].SellerId,
+			SellerName:         list[i].SellerName,
+			PayType:            list[i].PayType,
+			Remark:             list[i].Remark,
+			ServiceProductId:   list[i].ServiceProductId,
+			IsPrePay:           list[i].IsPrePay,
+			StartDate:          list[i].StartDate.Format(utils.FormatDate),
+			EndDate:            list[i].StartDate.Format(utils.FormatDate),
+			CreateTime:         utils.TimeTransferString(utils.FormatDateTime, list[i].CreateTime),
+		})
+	}
+	return
+}

+ 4 - 1
models/fms/contract_pre_payment.go

@@ -176,5 +176,8 @@ type PreRegisterEditReqItem struct {
 
 // PreRegisterDelReq 预登记删除请求体
 type PreRegisterDelReq struct {
-	InvoiceId int `json:"invoice_id" description:"开票ID"`
+	ContractRegisterId int `json:"contract_register_id" binding:"required,gte=1" description:"登记ID"`
+	InvoiceId          int `json:"invoice_id" description:"开票ID"`
+	ArriveId           int `json:"arrive_id" description:"到款ID"`
+	PreRegisterId      int `json:"pre_register_id" description:"预登记ID"`
 }

+ 15 - 2
models/fms/contract_pre_register.go

@@ -126,6 +126,17 @@ func (c *ContractPreRegister) Create() (err error) {
 	return
 }
 
+func (c *ContractPreRegister) Fetch(id int) (item *ContractPreRegister, err error) {
+	err = global.DEFAULT_MYSQL.Model(c).Where(" pre_register_id = ?", id).First(&item).Error
+	return
+}
+
+// 删除
+func (c *ContractPreRegister) Delete() (err error) {
+	err = global.DEFAULT_MYSQL.Delete(c).Error
+	return
+}
+
 // GetContractInvoiceItemList 获取开票到款列表
 func GetContractPreRegisterItemList(condition string, pars []interface{}) (itemList []*ContractPreRegisterItem, err error) {
 	list := make([]*ContractPreRegister, 0)
@@ -183,6 +194,8 @@ type PreRegisterDetailReq struct {
 
 // ContractPreRegisterDetail 预登记详情
 type ContractPreRegisterDetail struct {
-	*ContractRegister
-	List []*ContractInvoiceItem `json:"list" description:"开票到款列表"`
+	*ContractRegisterItem
+	List               []*ContractInvoiceDetailItem `json:"list" description:"开票到款列表"`
+	Services           []*ContractServiceAndDetail  `json:"services" description:"套餐列表"`
+	ServiceTemplateIds []int                       `json:"serviceTemplateIds" description:"小套餐列表"`
 }

+ 2 - 0
models/fms/contract_register.go

@@ -77,6 +77,7 @@ func (c *ContractRegister) List(condition string, pars []interface{}) (list []*C
 	list = make([]*ContractRegister, 0)
 	err = global.DEFAULT_MYSQL.Model(c).
 		Where("is_deleted = 0").
+		Where("register_status <> 0").
 		Where(condition, pars...).
 		Find(&list).Error
 	return
@@ -103,6 +104,7 @@ type ContractRegisterListReq struct {
 	ServiceTypes   string `json:"service_types" form:"service_types" description:"套餐类型"`
 	ContractType   int    `json:"contract_type" form:"contract_type" description:"合同类型"`
 	RegisterStatus int    `json:"register_status" form:"register_status" description:"登记状态"`
+	ListParam     int    `json:"list_param" form:"list_param" description:"套餐类型: 0-全部; 1-ficc; 2-权益"`
 	base.PageReq
 }