Pārlūkot izejas kodu

fix:合同详情,新增返回关联合同详情记录

Roc 3 gadi atpakaļ
vecāks
revīzija
e0060d82b3

+ 5 - 0
controllers/contract_approval.go

@@ -258,6 +258,11 @@ func (c *ContractApprovalCommon) List() {
 			if item.Status == "待审批" && status == "处理中" {
 				list[i].Status = "处理中"
 			}
+
+			//如果是代付合同,那么就展示代付合同的审核内容
+			if item.ContractBusinessType == "代付合同" {
+				item.ApplyContent = "代付合同"
+			}
 		}
 	}
 

+ 1 - 1
models/db_init.go

@@ -80,7 +80,7 @@ func init() {
 		new(resource.Resource),
 		new(wx_token.WxToken),
 		new(wx_user.WxUser),
-		new(seal.Seal),
+		new(seal.Seal), //用印表
 	)
 
 }

+ 120 - 116
models/tables/contract/contract.go

@@ -11,44 +11,45 @@ import (
 
 //合同
 type Contract struct {
-	ContractId        int       `orm:"column(contract_id);pk"`
-	ContractCode      string    `description:"合同编号,长度32位"`
-	SellerId          int       `description:"所属销售id"`
-	SellerName        string    `description:"所属销售名称"`
-	ProductId         int       `description:"产品id,1:ficc;2:权益"`
-	ContractType      string    `description:"合同类型,枚举值:'新签合同','续约合同','补充协议'"`
-	Status            string    `description:"合同状态,枚举值:'待提交','待审批','已撤回','已审批','已驳回','已作废','已签回','已解约'"`
-	StartDate         time.Time `description:"合同开始日期"`
-	EndDate           time.Time `description:"合同结束日期"`
-	OriginalPrice     float64   `description:"合同原金额,优惠前的金额"`
-	Price             float64   `description:"实际金额,优惠后的金额"`
-	PayRemark         string    `description:"付款方式说明,长度255位"`
-	PayChannel        string    `description:"付款渠道,长度255位"`
-	CompanyName       string    `description:"客户名称,甲方名称,长度32位"`
-	CreditCode        string    `description:"社会统一信用代码,长度64位"`
-	ProvinceId        int       `description:"省级id"`
-	Province          string    `description:"省级名称,长度16位"`
-	CityId            int       `description:"市级id"`
-	City              string    `description:"市级名称,长度32位"`
-	Address           string    `description:"详细地址"`
-	Fax               string    `description:"传真,长度32位"`
-	Phone             string    `description:"电话,长度32位"`
-	Postcode          string    `description:"邮编,长度16位"`
-	Remark            string    `description:"补充内容,长度255位"`
-	ModifyContent     string    `description:"修改内容"`
-	ApprovalRemark    string    `description:"审核备注"`
-	FileUrl           string    `description:"合同文件地址"`
-	CheckBackFileUrl  string    `description:"签回合同文件地址"`
-	RescindFileUrl    string    `description:"解约合同文件地址"`
-	TemplateId        int       `description:"模板id"`
-	SourceId          int       `description:"来源合同id,默认是0;如果是通过其他合同复制过来的,那么就是原合同的id"`
-	IsDelete          int       `description:"是否已经删除,0:未删除,1:已删除",json:"-"`
-	ApproveTime       time.Time `description:"审批时间"`
-	InvalidTime       time.Time `description:"作废时间"`
-	CheckBackFileTime time.Time `description:"合同签回时间"`
-	RescindTime       time.Time `description:"解约时间"`
-	ModifyTime        time.Time `description:"合同最近一次修改时间"`
-	CreateTime        time.Time `description:"合同添加时间"`
+	ContractId           int       `orm:"column(contract_id);pk"`
+	ContractCode         string    `description:"合同编号,长度32位"`
+	SellerId             int       `description:"所属销售id"`
+	SellerName           string    `description:"所属销售名称"`
+	ProductId            int       `description:"产品id,1:ficc;2:权益"`
+	ContractBusinessType string    `description:"合同业务类型,枚举值:'业务合同','代付合同'"`
+	ContractType         string    `description:"合同类型,枚举值:'新签合同','续约合同','补充协议'"`
+	Status               string    `description:"合同状态,枚举值:'待提交','待审批','已撤回','已审批','已驳回','已作废','已签回','已解约'"`
+	StartDate            time.Time `description:"合同开始日期"`
+	EndDate              time.Time `description:"合同结束日期"`
+	OriginalPrice        float64   `description:"合同原金额,优惠前的金额"`
+	Price                float64   `description:"实际金额,优惠后的金额"`
+	PayRemark            string    `description:"付款方式说明,长度255位"`
+	PayChannel           string    `description:"付款渠道,长度255位"`
+	CompanyName          string    `description:"客户名称,甲方名称,长度32位"`
+	CreditCode           string    `description:"社会统一信用代码,长度64位"`
+	ProvinceId           int       `description:"省级id"`
+	Province             string    `description:"省级名称,长度16位"`
+	CityId               int       `description:"市级id"`
+	City                 string    `description:"市级名称,长度32位"`
+	Address              string    `description:"详细地址"`
+	Fax                  string    `description:"传真,长度32位"`
+	Phone                string    `description:"电话,长度32位"`
+	Postcode             string    `description:"邮编,长度16位"`
+	Remark               string    `description:"补充内容,长度255位"`
+	ModifyContent        string    `description:"修改内容"`
+	ApprovalRemark       string    `description:"审核备注"`
+	FileUrl              string    `description:"合同文件地址"`
+	CheckBackFileUrl     string    `description:"签回合同文件地址"`
+	RescindFileUrl       string    `description:"解约合同文件地址"`
+	TemplateId           int       `description:"模板id"`
+	SourceId             int       `description:"来源合同id,默认是0;如果是通过其他合同复制过来的,那么就是原合同的id"`
+	IsDelete             int       `description:"是否已经删除,0:未删除,1:已删除",json:"-"`
+	ApproveTime          time.Time `description:"审批时间"`
+	InvalidTime          time.Time `description:"作废时间"`
+	CheckBackFileTime    time.Time `description:"合同签回时间"`
+	RescindTime          time.Time `description:"解约时间"`
+	ModifyTime           time.Time `description:"合同最近一次修改时间"`
+	CreateTime           time.Time `description:"合同添加时间"`
 }
 
 //更新合同基础信息
@@ -68,45 +69,46 @@ func GetContractById(contractId int) (contractInfo *Contract, err error) {
 
 //合同详情信息(包含服务信息等)
 type ContractDetail struct {
-	ContractId        int       `description:"合同唯一id"`
-	ContractCode      string    `description:"合同编号,长度32位"`
-	SellerId          int       `description:"所属销售id"`
-	SellerName        string    `description:"所属销售名称"`
-	ProductId         int       `description:"产品id,1:ficc;2:权益"`
-	ContractType      string    `description:"合同类型,枚举值:'新签合同','续约合同','补充协议'"`
-	Status            string    `description:"合同状态,枚举值:'待提交','待审批','已撤回','已审批','已驳回','已作废','已解约'"`
-	StartDate         time.Time `description:"合同开始日期"`
-	EndDate           time.Time `description:"合同结束日期"`
-	OriginalPrice     float64   `description:"合同原金额,优惠前的金额"`
-	Price             float64   `description:"实际金额,优惠后的金额"`
-	PayRemark         string    `description:"付款方式说明,长度255位"`
-	PayChannel        string    `description:"付款渠道,长度255位"`
-	CompanyName       string    `description:"客户名称,甲方名称,长度32位"`
-	CreditCode        string    `description:"社会统一信用代码,长度64位"`
-	ProvinceId        int       `description:"省级id"`
-	Province          string    `description:"省级名称,长度16位"`
-	CityId            int       `description:"市级id"`
-	City              string    `description:"市级名称,长度32位"`
-	Address           string    `description:"详细地址"`
-	Fax               string    `description:"传真,长度32位"`
-	Phone             string    `description:"电话,长度32位"`
-	Postcode          string    `description:"邮编,长度16位"`
-	Remark            string    `description:"补充内容,长度255位"`
-	SellerRemark      string    `description:"销售备注,长度255位"`
-	ModifyContent     string    `description:"修改内容"`
-	ApprovalRemark    string    `description:"审核备注"`
-	FileUrl           string    `description:"合同文件地址"`
-	CheckBackFileUrl  string    `description:"签回合同文件地址"`
-	RescindFileUrl    string    `description:"解约合同文件地址"`
-	TemplateId        int       `description:"模板id"`
-	SourceId          int       `description:"来源合同id,默认是0;如果是通过其他合同复制过来的,那么就是原合同的id"`
-	IsDelete          int       `json:"-" description:"是否已经删除,0:未删除,1:已删除"`
-	ModifyTime        time.Time `description:"合同最近一次修改时间"`
-	CreateTime        time.Time `description:"合同添加时间"`
-	ApproveTime       time.Time `description:"审批时间"`
-	InvalidTime       time.Time `description:"作废时间"`
-	CheckBackFileTime time.Time `description:"合同签回时间"`
-	RescindTime       time.Time `description:"解约时间"`
+	ContractId           int       `description:"合同唯一id"`
+	ContractCode         string    `description:"合同编号,长度32位"`
+	SellerId             int       `description:"所属销售id"`
+	SellerName           string    `description:"所属销售名称"`
+	ProductId            int       `description:"产品id,1:ficc;2:权益"`
+	ContractBusinessType string    `description:"合同业务类型,枚举值:'业务合同','代付合同'"`
+	ContractType         string    `description:"合同类型,枚举值:'新签合同','续约合同','补充协议'"`
+	Status               string    `description:"合同状态,枚举值:'待提交','待审批','已撤回','已审批','已驳回','已作废','已解约'"`
+	StartDate            time.Time `description:"合同开始日期"`
+	EndDate              time.Time `description:"合同结束日期"`
+	OriginalPrice        float64   `description:"合同原金额,优惠前的金额"`
+	Price                float64   `description:"实际金额,优惠后的金额"`
+	PayRemark            string    `description:"付款方式说明,长度255位"`
+	PayChannel           string    `description:"付款渠道,长度255位"`
+	CompanyName          string    `description:"客户名称,甲方名称,长度32位"`
+	CreditCode           string    `description:"社会统一信用代码,长度64位"`
+	ProvinceId           int       `description:"省级id"`
+	Province             string    `description:"省级名称,长度16位"`
+	CityId               int       `description:"市级id"`
+	City                 string    `description:"市级名称,长度32位"`
+	Address              string    `description:"详细地址"`
+	Fax                  string    `description:"传真,长度32位"`
+	Phone                string    `description:"电话,长度32位"`
+	Postcode             string    `description:"邮编,长度16位"`
+	Remark               string    `description:"补充内容,长度255位"`
+	SellerRemark         string    `description:"销售备注,长度255位"`
+	ModifyContent        string    `description:"修改内容"`
+	ApprovalRemark       string    `description:"审核备注"`
+	FileUrl              string    `description:"合同文件地址"`
+	CheckBackFileUrl     string    `description:"签回合同文件地址"`
+	RescindFileUrl       string    `description:"解约合同文件地址"`
+	TemplateId           int       `description:"模板id"`
+	SourceId             int       `description:"来源合同id,默认是0;如果是通过其他合同复制过来的,那么就是原合同的id"`
+	IsDelete             int       `json:"-" description:"是否已经删除,0:未删除,1:已删除"`
+	ModifyTime           time.Time `description:"合同最近一次修改时间"`
+	CreateTime           time.Time `description:"合同添加时间"`
+	ApproveTime          time.Time `description:"审批时间"`
+	InvalidTime          time.Time `description:"作废时间"`
+	CheckBackFileTime    time.Time `description:"合同签回时间"`
+	RescindTime          time.Time `description:"解约时间"`
 
 	StartDateStr         string `description:"合同起始时间"`
 	EndDateStr           string `description:"合同结束时间"`
@@ -118,7 +120,8 @@ type ContractDetail struct {
 	RescindTimeStr       string `description:"解约时间"`
 	Service              []*contract.ContractServiceAndDetail
 
-	PermissionLookList []*company_report_permission.PermissionLookList `description:"合同里面的权限列表"`
+	PermissionLookList         []*company_report_permission.PermissionLookList `description:"合同里面的权限列表"`
+	RelationContractDetailList []*ContractDetail                               `description:"关联合同详情"`
 }
 
 //根据合同id获取合同详情信息
@@ -189,44 +192,45 @@ func AddContract(contractInfo *Contract, contractServiceAndDetailList []*contrac
 }
 
 type ContractList struct {
-	ContractId        int       `description:"合同唯一id"`
-	ContractCode      string    `description:"合同编号,长度32位"`
-	SellerId          int       `description:"所属销售id"`
-	SellerName        string    `description:"所属销售名称"`
-	ProductId         int       `description:"产品id,1:ficc;2:权益"`
-	ContractType      string    `description:"合同类型,枚举值:'新签合同','续约合同','补充协议'"`
-	Status            string    `description:"合同状态,枚举值:'待提交','待审批','已撤回','已审批','已驳回','已作废'"`
-	StartDate         time.Time `description:"合同开始日期"`
-	EndDate           time.Time `description:"合同结束日期"`
-	OriginalPrice     float64   `description:"合同原金额,优惠前的金额"`
-	Price             float64   `description:"实际金额,优惠后的金额"`
-	PayRemark         string    `description:"付款方式说明,长度255位"`
-	CompanyName       string    `description:"客户名称,甲方名称,长度32位"`
-	UseCompanyName    string    `description:"使用方名称,长度32位"`
-	CreditCode        string    `description:"社会统一信用代码,长度64位"`
-	ProvinceId        int       `description:"省级id"`
-	Province          string    `description:"省级名称,长度16位"`
-	CityId            int       `description:"市级id"`
-	City              string    `description:"市级名称,长度32位"`
-	Address           string    `description:"详细地址"`
-	Fax               string    `description:"传真,长度32位"`
-	Phone             string    `description:"电话,长度32位"`
-	Postcode          string    `description:"邮编,长度16位"`
-	Remark            string    `json:"-" description:"补充内容,长度255位"`
-	SellerRemark      string    `description:"销售备注,长度255位"`
-	ApprovalRemark    string    `description:"审核备注"`
-	ModifyContent     string    `description:"修改内容"`
-	FileUrl           string    `description:"合同文件地址"`
-	CheckBackFileUrl  string    `description:"签回合同文件地址"`
-	TemplateId        int       `description:"模板id"`
-	SourceId          int       `description:"来源合同id,默认是0;如果是通过其他合同复制过来的,那么就是原合同的id"`
-	IsDelete          int       `json:"-" description:"是否已经删除,0:未删除,1:已删除"`
-	ModifyTime        time.Time `description:"合同最近一次修改时间"`
-	CreateTime        time.Time `description:"合同添加时间"`
-	ApproveTime       time.Time `description:"审批时间"`
-	InvalidTime       time.Time `description:"作废时间"`
-	CheckBackFileTime time.Time `description:"合同签回时间"`
-	RescindTime       time.Time `description:"解约时间"`
+	ContractId           int       `description:"合同唯一id"`
+	ContractCode         string    `description:"合同编号,长度32位"`
+	SellerId             int       `description:"所属销售id"`
+	SellerName           string    `description:"所属销售名称"`
+	ProductId            int       `description:"产品id,1:ficc;2:权益"`
+	ContractBusinessType string    `description:"合同业务类型,枚举值:'业务合同','代付合同'"`
+	ContractType         string    `description:"合同类型,枚举值:'新签合同','续约合同','补充协议'"`
+	Status               string    `description:"合同状态,枚举值:'待提交','待审批','已撤回','已审批','已驳回','已作废'"`
+	StartDate            time.Time `description:"合同开始日期"`
+	EndDate              time.Time `description:"合同结束日期"`
+	OriginalPrice        float64   `description:"合同原金额,优惠前的金额"`
+	Price                float64   `description:"实际金额,优惠后的金额"`
+	PayRemark            string    `description:"付款方式说明,长度255位"`
+	CompanyName          string    `description:"客户名称,甲方名称,长度32位"`
+	UseCompanyName       string    `description:"使用方名称,长度32位"`
+	CreditCode           string    `description:"社会统一信用代码,长度64位"`
+	ProvinceId           int       `description:"省级id"`
+	Province             string    `description:"省级名称,长度16位"`
+	CityId               int       `description:"市级id"`
+	City                 string    `description:"市级名称,长度32位"`
+	Address              string    `description:"详细地址"`
+	Fax                  string    `description:"传真,长度32位"`
+	Phone                string    `description:"电话,长度32位"`
+	Postcode             string    `description:"邮编,长度16位"`
+	Remark               string    `json:"-" description:"补充内容,长度255位"`
+	SellerRemark         string    `description:"销售备注,长度255位"`
+	ApprovalRemark       string    `description:"审核备注"`
+	ModifyContent        string    `description:"修改内容"`
+	FileUrl              string    `description:"合同文件地址"`
+	CheckBackFileUrl     string    `description:"签回合同文件地址"`
+	TemplateId           int       `description:"模板id"`
+	SourceId             int       `description:"来源合同id,默认是0;如果是通过其他合同复制过来的,那么就是原合同的id"`
+	IsDelete             int       `json:"-" description:"是否已经删除,0:未删除,1:已删除"`
+	ModifyTime           time.Time `description:"合同最近一次修改时间"`
+	CreateTime           time.Time `description:"合同添加时间"`
+	ApproveTime          time.Time `description:"审批时间"`
+	InvalidTime          time.Time `description:"作废时间"`
+	CheckBackFileTime    time.Time `description:"合同签回时间"`
+	RescindTime          time.Time `description:"解约时间"`
 
 	StartDateStr         string `description:"合同起始时间"`
 	EndDateStr           string `description:"合同结束时间"`

+ 9 - 7
models/tables/contract_approval/contract_approval.go

@@ -93,6 +93,7 @@ type ContractApprovalList struct {
 	ContractDetail           string                  `json:"-" description:"提交审批时的合同信息;合同快照"`
 	ContractInfo             contract.ContractDetail `json:"-" description:"提交审批时的合同信息;合同快照"`
 	ApproveRemark            string                  `description:"审核备注"`
+	ContractBusinessType     string                  `description:"合同业务类型,枚举值:'业务合同','代付合同'"`
 	ContractType             string                  `description:"合同类型"`
 	Price                    float64                 `description:"合同金额"`
 	CompanyName              string                  `description:"客户名称"`
@@ -119,13 +120,13 @@ type ContractApprovalList struct {
 	RescindTimeStr           string                  `description:"解约时间(字符串类型)"`
 }
 
-//获取合同审批列表数据
+// GetContractApprovalList 获取合同审批列表数据
 func GetContractApprovalList(childCondition, condition, joinCondition string, childPars, pars []interface{}, startSize, pageSize int) (list []*ContractApprovalList, err error) {
 	o := orm.NewOrm()
 	sql := `
 SELECT
 a.contract_approval_id,d.contract_approval_record_id,a.contract_id,a.apply_content,a.approve_remark,a.create_time,a.modify_time,a.status approve_status,c.status,c.product_id,
-c.contract_type,c.start_date,c.end_date,c.price,c.company_name,c.credit_code,c.seller_id,c.seller_name,c.file_url,c.contract_code,c.approve_time,c.invalid_time,c.check_back_file_time,c.rescind_time from contract_approval a
+c.contract_type,c.start_date,c.end_date,c.price,c.company_name,c.credit_code,c.seller_id,c.seller_name,c.file_url,c.contract_code,c.approve_time,c.invalid_time,c.check_back_file_time,c.rescind_time,c.contract_business_type from contract_approval a
 	join 
 	( SELECT max( contract_approval_id ) max_id,contract_id FROM contract_approval where 1=1 `
 	sql += childCondition
@@ -139,7 +140,7 @@ WHERE c.is_delete = 0  AND a.approval_type="contract" `
 	return
 }
 
-//获取审批后的数据
+// GetContractApprovalListCountV2 获取审批后的数据(待审批、处理中的)
 func GetContractApprovalListCountV2(childCondition, condition string, childPars, pars []interface{}) (count int, err error) {
 	o := orm.NewOrm()
 	sql := `
@@ -161,12 +162,13 @@ WHERE c.is_delete = 0  AND a.approval_type="contract" `
 	return
 }
 
+// GetContractApprovalListV2 获取审批后的数据(待审批、处理中的)
 func GetContractApprovalListV2(childCondition, condition, orderBy string, childPars, pars []interface{}, startSize, pageSize int) (list []*ContractApprovalList, err error) {
 	o := orm.NewOrm()
 	sql := `
 SELECT
 a.contract_approval_id,d.contract_approval_record_id,a.contract_id,a.apply_content,a.approve_remark,a.create_time,a.modify_time,a.status approve_status,c.status,c.product_id,
-c.contract_type,c.start_date,c.end_date,c.price,c.company_name,c.credit_code,c.seller_id,c.seller_name,c.file_url,c.contract_code,c.approve_time,c.invalid_time,c.check_back_file_time,c.rescind_time from contract_approval a
+c.contract_type,c.start_date,c.end_date,c.price,c.company_name,c.credit_code,c.seller_id,c.seller_name,c.file_url,c.contract_code,c.approve_time,c.invalid_time,c.check_back_file_time,c.rescind_time,c.contract_business_type from contract_approval a
 	join 
 	( SELECT max( contract_approval_id ) max_id,contract_id FROM contract_approval where 1=1 `
 	sql += childCondition
@@ -198,7 +200,7 @@ WHERE c.is_delete = 0  AND a.approval_type="contract" `
 	return
 }
 
-//合同客户统计数
+// GetContractListCountV2 合同客户统计数(包含待提交的)
 func GetContractListCountV2(childCondition, condition, joinCondition, unionCondition string, childPars, pars, unionPars []interface{}) (count int, err error) {
 	o := orm.NewOrm()
 	sql := `
@@ -226,13 +228,13 @@ where is_delete=0 and b.contract_approval_id is null ` + unionCondition + `)`
 	return
 }
 
-//获取合同审批列表数据
+// GetContractListV2 获取合同审批列表数据(包含待提交的)
 func GetContractListV2(childCondition, condition, joinCondition, unionCondition string, childPars, pars, unionPars []interface{}, startSize, pageSize int) (list []*ContractApprovalList, err error) {
 	o := orm.NewOrm()
 	sql := `
 SELECT
 a.contract_approval_id,d.contract_approval_record_id,a.contract_id,a.apply_content,a.approve_remark,a.create_time,a.modify_time,a.status approve_status,c.status,c.product_id,
-c.contract_type,c.start_date,c.end_date,c.price,c.company_name,c.seller_id,c.seller_name,c.file_url,c.contract_code,c.approve_time,c.invalid_time,c.check_back_file_time,c.rescind_time from contract_approval a
+c.contract_type,c.start_date,c.end_date,c.price,c.company_name,c.seller_id,c.seller_name,c.file_url,c.contract_code,c.approve_time,c.invalid_time,c.check_back_file_time,c.rescind_time,c.contract_business_type from contract_approval a
 	join 
 	( SELECT max( contract_approval_id ) max_id,contract_id FROM contract_approval where 1=1 `
 	sql += childCondition

+ 70 - 0
models/tables/contract_relation/contract_relation.go

@@ -0,0 +1,70 @@
+package contract_relation
+
+import (
+	"hongze/hongze_mobile_admin/models/custom/contract"
+	"rdluck_tools/orm"
+)
+
+// ContractRelation 合同关系表结构体
+type ContractRelation struct {
+	ContractId                int `description:"业务合同id"`
+	PaymentOnBehalfContractId int `description:"代付合同id"`
+}
+
+type RelationContractList struct {
+	ContractId                int     `description:"合同id"`
+	CompanyName               string  `description:"甲方名称"`
+	PaymentOnBehalfContractId int     `description:"代付合同id"`
+	Price                     float64 `description:"付款金额"`
+	Service                   []*contract.ContractServiceAndDetail
+	//ContractId int `description:"合同id"`
+}
+
+// GetContractRelationListByRelationContractIds 根据业务合同id集合获取对应的业务合同基础信息
+func GetContractRelationListByRelationContractIds(contractIdStr string) (list []*RelationContractList, err error) {
+	o := orm.NewOrm()
+	sql := `select a.contract_id,a.company_name,b.payment_on_behalf_contract_id from contract a join contract_relation b on a.contract_id=b.payment_on_behalf_contract_id where a.status in ("已签回","已审批") AND a.is_delete = 0 AND b.contract_id in (` + contractIdStr + `)  order by a.contract_id asc`
+
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}
+
+// GetContractRelationListByPaymentOnBehalfContractIds 根据代付合同id集合获取对应的代付合同基础信息
+func GetContractRelationListByPaymentOnBehalfContractIds(contractIdStr string) (list []*RelationContractList, err error) {
+	o := orm.NewOrm()
+	sql := `select  a.contract_id,a.company_name,b.payment_on_behalf_contract_id from contract a join contract_relation b on a.contract_id=b.contract_id
+where a.status in ("已签回","已审批") AND a.is_delete = 0 AND b.payment_on_behalf_contract_id in (` + contractIdStr + `) order by a.contract_id asc`
+
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}
+
+// GetContractRelationListByRelationContractId 根据业务合同id获取对应的代付合同基础信息
+func GetContractRelationListByRelationContractId(contractId int) (list []*RelationContractList, err error) {
+	o := orm.NewOrm()
+	sql := `select a.contract_id,a.company_name,b.payment_on_behalf_contract_id from contract a join contract_relation b on  a.contract_id=b.payment_on_behalf_contract_id
+where a.status in ("已签回","已审批") AND a.is_delete = 0 AND b.contract_id =?  order by a.contract_id asc`
+
+	_, err = o.Raw(sql, contractId).QueryRows(&list)
+	return
+}
+
+// GetContractRelationListByPaymentOnBehalfContractId 根据代付合同id获取对应的代付合同基础信息
+func GetContractRelationListByPaymentOnBehalfContractId(contractId int) (list []*RelationContractList, err error) {
+	o := orm.NewOrm()
+	sql := `select  a.contract_id,a.company_name,b.payment_on_behalf_contract_id from contract a join contract_relation b on  a.contract_id=b.contract_id
+where a.status in ("已签回","已审批") AND a.is_delete = 0 AND b.payment_on_behalf_contract_id =? order by a.contract_id asc`
+
+	_, err = o.Raw(sql, contractId).QueryRows(&list)
+	return
+}
+
+// GetContractRelationListByContractId 根据业务合同id获取已经给他代付过的合同列表
+func GetContractRelationListByContractId(contractId int) (list []*RelationContractList, err error) {
+	o := orm.NewOrm()
+	sql := `select  a.contract_id,a.company_name,b.payment_on_behalf_contract_id,a.price from contract a join contract_relation b on  a.contract_id=b.payment_on_behalf_contract_id
+where a.status in ("已签回","已审批","待审批") AND a.is_delete = 0 AND b.contract_id =? order by a.contract_id asc`
+
+	_, err = o.Raw(sql, contractId).QueryRows(&list)
+	return
+}

+ 50 - 0
services/contract/contract.go

@@ -13,6 +13,7 @@ import (
 	"hongze/hongze_mobile_admin/models/tables/contract_approval"
 	"hongze/hongze_mobile_admin/models/tables/contract_approval_record"
 	"hongze/hongze_mobile_admin/models/tables/contract_operation_record"
+	"hongze/hongze_mobile_admin/models/tables/contract_relation"
 	"hongze/hongze_mobile_admin/models/tables/contract_service_detail"
 	"hongze/hongze_mobile_admin/utils"
 	"rdluck_tools/orm"
@@ -59,6 +60,54 @@ func InvalidContract(contractId int, opUser *custom.AdminWx) (err error) {
 
 // GetContractDetail 根据id获取合同详情(包含服务)
 func GetContractDetail(contractId int) (contractDetail *contract.ContractDetail, err error) {
+	contractDetail, err = getContractDetail(contractId)
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			err = errors.New("找不到该合同")
+		}
+		return
+	}
+	relationContractDetailList := make([]*contract.ContractDetail, 0)
+	switch contractDetail.ContractBusinessType {
+	case "业务合同":
+		tmpList, tmpErr := contract_relation.GetContractRelationListByRelationContractId(contractDetail.ContractId)
+		if tmpErr != nil {
+			err = errors.New("查询业务关联合同异常:" + tmpErr.Error())
+			return
+		}
+
+		//获取所有关联合同详情
+		for _, relationContract := range tmpList {
+			tmpContractDetail, tmpErr := getContractDetail(relationContract.PaymentOnBehalfContractId)
+			if tmpErr != nil {
+				err = errors.New("查询业务关联合同详情异常:" + tmpErr.Error())
+				return
+			}
+			relationContractDetailList = append(relationContractDetailList, tmpContractDetail)
+		}
+	case "代付合同":
+		tmpList, tmpErr := contract_relation.GetContractRelationListByPaymentOnBehalfContractId(contractDetail.ContractId)
+		if tmpErr != nil {
+			err = errors.New("查询代付关联合同异常:" + tmpErr.Error())
+			return
+		}
+
+		//获取所有关联合同详情
+		for _, relationContract := range tmpList {
+			tmpContractDetail, tmpErr := getContractDetail(relationContract.ContractId)
+			if tmpErr != nil {
+				err = errors.New("查询业务关联合同详情异常:" + tmpErr.Error())
+				return
+			}
+			relationContractDetailList = append(relationContractDetailList, tmpContractDetail)
+		}
+	}
+	contractDetail.RelationContractDetailList = relationContractDetailList
+	return
+}
+
+// getContractDetail 根据id获取合同详情(包含服务)
+func getContractDetail(contractId int) (contractDetail *contract.ContractDetail, err error) {
 	contractDetail, err = contract.GetContractDetailById(contractId)
 	if err != nil {
 		if err.Error() == utils.ErrNoRow() {
@@ -66,6 +115,7 @@ func GetContractDetail(contractId int) (contractDetail *contract.ContractDetail,
 		}
 		return
 	}
+	//获取合同服务内容详情
 	serviceList, err := contractCustom.GetContractServiceAndDetailList(contractId)
 	if err != nil {
 		err = errors.New(fmt.Sprint("查找合同服务异常", err))