Pārlūkot izejas kodu

fix:客户名称搜索列表调整

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

+ 3 - 1
controllers/approval.go

@@ -72,7 +72,9 @@ func (this *ApprovalCommon) List() {
 	if roleTypeCode == utils.ROLE_TYPE_CODE_FICC_ADMIN || roleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN { //审批
 		condition += ` AND c.approve_role_type_code=? `
 		pars = append(pars, roleTypeCode)
-	} else if roleTypeCode == utils.ROLE_TYPE_CODE_FICC_SELLER || roleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER { //销售
+	} else if roleTypeCode == utils.ROLE_TYPE_CODE_ADMIN || roleTypeCode == utils.ROLE_TYPE_CODE_COMPLIANCE { //超管或者合规
+
+	} else { //销售
 		condition += ` AND c.apply_user_id=? `
 		pars = append(pars, sysUser.AdminId)
 	}

+ 142 - 0
controllers/contract.go

@@ -5,6 +5,7 @@ import (
 	contractReq "hongze/hongze_mobile_admin/models/request/contract"
 	contractResp "hongze/hongze_mobile_admin/models/response/contract"
 	"hongze/hongze_mobile_admin/models/tables/contract"
+	"hongze/hongze_mobile_admin/models/tables/contract_approval"
 	contractService "hongze/hongze_mobile_admin/services/contract"
 	"hongze/hongze_mobile_admin/utils"
 	"rdluck_tools/paging"
@@ -193,6 +194,147 @@ func (this *ContractCommon) List() {
 	}, "获取成功")
 }
 
+// @Title 合同列表(包含待提交的)
+// @Description 合同列表接口(包含待提交的)
+// @Param   ContractType   query   string  false       "合同类型,枚举值:'新签合同','续约合同','补充协议'"
+// @Param   Status   query   string  false       "合同状态,枚举值:'待提交','待审批','已撤回','已审批','已驳回','已作废'"
+// @Param   ProductId   query   int  false       "客户类型:传0或者不传为当前账号权限,1 代表是:ficc;2 代表是:权益"
+// @Param   ModifyStartTime   query   string  false       "服务更新时间的选择开始时间,格式:2021-05-23 00:00:00"
+// @Param   ModifyEndTime   query   string  false       "服务更新时间的选择结束时间,格式:2021-05-26 23:59:59"
+// @Param   SellerId   query   string  false       "选择的销售id"
+// @Param   Keyword   query   string  false       "搜索关键字"
+// @Success 200 {object} contract.ContractListRespV2
+// @router /listV2 [get]
+func (this *ContractCommon) ListV2() {
+	sysUser := this.AdminWx
+
+	//合同类型、产品类型、合同状态、更新时间、所选销售
+	//关键字:合同编号、客户名称,社会信用码
+	contractType := this.GetString("ContractType")
+	status := this.GetString("Status")
+	productId, _ := this.GetInt("ProductId")
+	modifyStartTime := this.GetString("ModifyStartTime")
+	modifyEndTime := this.GetString("ModifyEndTime")
+	sellerIds := this.GetString("SellerId")
+	keyword := this.GetString("Keyword")
+
+	childCondition := ""
+	condition := ""
+	unionCondition := ""
+
+	childPars := make([]interface{}, 0)
+	pars := make([]interface{}, 0)
+	unionPars := make([]interface{}, 0)
+
+	//归属
+	if status == "待审批" {
+		condition += ` AND ((c.seller_id = ? and a.start_node_id = a.curr_node_id) OR (d.approve_user_id = ? )) and d.status="待审批" `
+	} else {
+		condition += ` AND (c.seller_id = ? or d.approve_user_id = ?)`
+	}
+	pars = append(pars, sysUser.AdminId, sysUser.AdminId)
+
+	unionCondition += ` AND c.seller_id = ? `
+	unionPars = append(unionPars, sysUser.AdminId)
+
+	//合同类型、、更新时间、所选销售
+	//关键字:合同编号、客户名称,社会信用码
+	if contractType != "" {
+		condition += ` AND c.contract_type = ? `
+		pars = append(pars, contractType)
+
+		unionCondition += ` AND c.contract_type = ? `
+		unionPars = append(unionPars, contractType)
+	}
+	//审批状态
+	if status != "" {
+		if status == "已审批" {
+			condition += ` AND c.status in ("已审批","已驳回")  `
+			unionCondition += ` AND c.status in ("已审批","已驳回")  `
+		} else {
+			condition += ` AND c.status = ? `
+			unionCondition += ` AND c.status = ? `
+			if status == "处理中" {
+				pars = append(pars, "待审批")
+				unionPars = append(unionPars, "待审批")
+			} else {
+				pars = append(pars, status)
+				unionPars = append(unionPars, status)
+			}
+		}
+	} else {
+		condition += ` AND c.status not in ("已撤回","待提交")  `
+		unionCondition += ` AND c.status = "待提交"  `
+	}
+	//产品类型
+	if productId > 0 {
+		condition += ` AND c.product_id = ? `
+		pars = append(pars, productId)
+
+		unionCondition += ` AND c.product_id = ?  `
+		unionPars = append(unionPars, productId)
+	}
+	//所选销售
+	if sellerIds != "" {
+		condition += ` AND c.seller_id IN (` + sellerIds + `) `
+		unionCondition += ` AND c.seller_id IN (` + sellerIds + `) `
+	}
+	//更新开始时间
+	if modifyStartTime != "" {
+		condition += ` AND a.modify_time >= ? `
+		pars = append(pars, modifyStartTime)
+
+		unionCondition += ` AND a.modify_time >= ? `
+		unionPars = append(unionPars, modifyStartTime)
+	}
+	//更新结束时间
+	if modifyEndTime != "" {
+		condition += ` AND a.modify_time <= ? `
+		pars = append(pars, modifyEndTime)
+
+		unionCondition += ` AND a.modify_time <= ? `
+		unionPars = append(unionPars, modifyEndTime)
+	}
+	//关键字
+	if keyword != "" {
+		condition += ` AND (c.contract_code LIKE '%` + keyword + `%' OR c.company_name LIKE '%` + keyword + `%' OR c.credit_code LIKE '%` + keyword + `%' ) `
+		unionCondition += ` AND (c.contract_code LIKE '%` + keyword + `%' OR c.company_name LIKE '%` + keyword + `%' OR c.credit_code LIKE '%` + keyword + `%' ) `
+	}
+
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+
+	var startSize int
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize = paging.StartIndex(currentIndex, pageSize)
+
+	joinCondition := " and a.curr_node_id=d.node_id"
+
+	total, err := contract_approval.GetContractListCountV2(childCondition, condition, joinCondition, unionCondition, childPars, pars, unionPars)
+	if err != nil {
+		this.FailWithMessage("获取失败", "获取数据总数失败,Err:"+err.Error())
+		return
+	}
+	list, err := contract_approval.GetContractListV2(childCondition, condition, joinCondition, unionCondition, childPars, pars, unionPars, startSize, pageSize)
+
+	if err != nil {
+		this.FailWithMessage("获取合同列表失败", "获取合同列表失败,Err:"+err.Error())
+		return
+	}
+
+	page := paging.GetPaging(currentIndex, pageSize, total)
+
+	this.OkDetailed(contractResp.ContractListRespV2{
+		List:   list,
+		Paging: page,
+	}, "获取成功")
+}
+
 // @Title 作废合同
 // @Description 作废合同接口
 // @Param	request	body contract.InvalidReq true "type json string"

+ 4 - 5
controllers/message.go

@@ -201,19 +201,18 @@ func (this *MessageCommon) MessageList() {
 		approvalInfo := company_approval_message.ApprovalInfo{}
 		if messageInfo.SourceType == 1 {
 			if companyApproval, ok := companyApprovalMap[messageInfo.CompanyApprovalId]; ok {
+				//申请类型:1:试用->正式,2:冻结—>试用,3:试用延期,4:原销售申请领取流失客户,5:正式客户申请服务更新
 				switch companyApproval.ApplyMethod {
 				case 1:
 					approvalInfo.Type = "申请转正"
 				case 2:
 					approvalInfo.Type = "冻结转试用"
 				case 3:
-					approvalInfo.Type = "流失转正式"
+					approvalInfo.Type = "试用延期"
 				case 4:
-					approvalInfo.Type = "申请延期"
-				case 5:
 					approvalInfo.Type = "原销售申请领取流失客户"
-				case 6:
-					approvalInfo.Type = "服务更新"
+				case 5:
+					approvalInfo.Type = "正式客户申请服务更新"
 				}
 				approvalInfo.ApplyName = companyApproval.ApplyRealName
 				approvalInfo.ApplyTime = companyApproval.CreateTime

+ 12 - 1
controllers/seal.go

@@ -210,6 +210,7 @@ func (this *SealCommon) Invalid() {
 // @Success 200 {object} []string
 // @router /company_list [get]
 func (this *SealCommon) CompanyList() {
+	sysUser := this.AdminWx
 	companyName := this.GetString("CompanyName")
 	//合同id
 	if companyName == "" {
@@ -217,7 +218,17 @@ func (this *SealCommon) CompanyList() {
 		return
 	}
 	companyNameList := make([]string, 0)
-	list, err := seal.GetCompanyNameList(companyName)
+	childCondition := ""
+	condition := ""
+	childPars := make([]interface{}, 0)
+	pars := make([]interface{}, 0)
+
+	//归属
+	condition += ` AND (c.user_id = ? or d.approve_user_id = ?)`
+	pars = append(pars, sysUser.AdminId, sysUser.AdminId)
+	condition += ` AND c.company_name like "%` + companyName + `%"`
+
+	list, err := seal.GetCompanyNameListV2(childCondition, condition, childPars, pars)
 	if err != nil {
 		this.FailWithMessage("获取客户名称列表失败!", "获取客户名称列表失败,ERR:"+err.Error())
 		return

+ 5 - 0
models/response/contract/contract.go

@@ -13,6 +13,11 @@ type ContractListResp struct {
 	List   []*contract.ContractList `description:"列表数据"`
 }
 
+type ContractListRespV2 struct {
+	Paging *paging.PagingItem
+	List   []*contract_approval.ContractApprovalList `description:"列表数据"`
+}
+
 type ContractOperationRecordListResp struct {
 	Id               int       ``
 	ContractId       int       `description:"合同id"`

+ 2 - 2
models/tables/contract/contract.go

@@ -191,8 +191,8 @@ type ContractList struct {
 	ProductId         int       `description:"产品id,1:ficc;2:权益"`
 	ContractType      string    `description:"合同类型,枚举值:'新签合同','续约合同','补充协议'"`
 	Status            string    `description:"合同状态,枚举值:'待提交','待审批','已撤回','已审批','已驳回','已作废'"`
-	StartDate         time.Time `json:"-";description:"合同开始日期"`
-	EndDate           time.Time `json:"-";description:"合同结束日期"`
+	StartDate         time.Time `description:"合同开始日期"`
+	EndDate           time.Time `description:"合同结束日期"`
 	OriginalPrice     float64   `description:"合同原金额,优惠前的金额"`
 	Price             float64   `description:"实际金额,优惠后的金额"`
 	PayRemark         string    `description:"付款方式说明,长度255位"`

+ 62 - 0
models/tables/contract_approval/contract_approval.go

@@ -159,6 +159,7 @@ WHERE c.is_delete = 0  AND a.approval_type="contract" `
 	err = o.Raw(sql, childPars, pars).QueryRow(&count)
 	return
 }
+
 func GetContractApprovalListV2(childCondition, condition string, childPars, pars []interface{}, startSize, pageSize int) (list []*ContractApprovalList, err error) {
 	o := orm.NewOrm()
 	sql := `
@@ -178,6 +179,67 @@ WHERE c.is_delete = 0  AND a.approval_type="contract" `
 	return
 }
 
+//合同客户统计数
+func GetContractListCountV2(childCondition, condition, joinCondition, unionCondition string, childPars, pars, unionPars []interface{}) (count int, 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
+	join 
+	( SELECT max( contract_approval_id ) max_id,contract_id FROM contract_approval where 1=1 `
+	sql += childCondition
+	sql += `  GROUP BY contract_id ) b on a.contract_approval_id=b.max_id
+	JOIN contract c ON a.contract_id = c.contract_id 
+	JOIN contract_approval_record d on a.contract_approval_id=d.contract_approval_id ` + joinCondition + `
+WHERE c.is_delete = 0  AND a.approval_type="contract" `
+	sql += condition
+
+	sql += ` union (SELECT
+ contract_approval_id, 0 as contract_approval_record_id,c.contract_id,"" as apply_content,"" as approve_remark,
+ c.create_time,c.modify_time,"待提交" as 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 c left join contract_approval b on c.contract_id=b.contract_id 
+where is_delete=0 and b.contract_approval_id is null ` + unionCondition + `)`
+
+	sql = `select count(*) count from (select * from (` + sql + `) g group by contract_id ) f`
+	err = o.Raw(sql, childPars, pars, unionPars).QueryRow(&count)
+	return
+}
+
+//获取合同审批列表数据
+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
+	join 
+	( SELECT max( contract_approval_id ) max_id,contract_id FROM contract_approval where 1=1 `
+	sql += childCondition
+	sql += `  GROUP BY contract_id ) b on a.contract_approval_id=b.max_id
+	JOIN contract c ON a.contract_id = c.contract_id 
+	JOIN contract_approval_record d on a.contract_approval_id=d.contract_approval_id ` + joinCondition + `
+WHERE c.is_delete = 0  AND a.approval_type="contract" `
+	sql += condition
+
+	sql += ` union (SELECT
+ contract_approval_id, 0 as contract_approval_record_id,c.contract_id,"" as apply_content,"" as approve_remark,
+ c.create_time,c.modify_time,"待提交" as 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 c left join contract_approval b on c.contract_id=b.contract_id 
+where is_delete=0 and b.contract_approval_id is null ` + unionCondition + `)`
+
+	sql = `select * from (` + sql + `) g group by contract_id order by modify_time desc LIMIT ?,?`
+
+	_, err = o.Raw(sql, childPars, pars, unionPars, startSize, pageSize).QueryRows(&list)
+	return
+}
+
+type CompanyNameList struct {
+	CompanyName string `description:"客户名称,甲方名称,长度32位"`
+}
+
 //根据合同id获取合同审批单信息
 func (ContractApproval) CheckPendingByContractId(contractId int, approvalType string) (has bool, err error) {
 	o := orm.NewOrm()

+ 16 - 0
models/tables/seal/seal.go

@@ -104,3 +104,19 @@ func GetCompanyNameList(name string) (list []*CompanyNameList, err error) {
 	_, err = o.Raw(sql).QueryRows(&list)
 	return
 }
+
+func GetCompanyNameListV2(childCondition, condition string, childPars, pars []interface{}) (list []*CompanyNameList, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT c.company_name,a.modify_time from contract_approval a
+	join 
+	( SELECT max( contract_approval_id ) max_id,contract_id FROM contract_approval where 1=1 `
+	sql += childCondition
+	sql += `  GROUP BY contract_id ) b on a.contract_approval_id=b.max_id
+	JOIN seal c ON c.seal_id = a.contract_id 
+	JOIN contract_approval_record d on a.contract_approval_id=d.contract_approval_id 
+WHERE c.is_delete = 0 AND a.approval_type="seal" `
+	sql += condition
+	sql += ` group by company_name order by modify_time desc`
+	_, err = o.Raw(sql, childPars, pars).QueryRows(&list)
+	return
+}

+ 3 - 0
services/seal/seal.go

@@ -163,6 +163,7 @@ func CheckEdit(sealInfo *seal.Seal, approvalInfo *contract_approval.ContractAppr
 		updateCol = append(updateCol, "FileUrl")
 		updateContent = append(updateContent, "文件附件")
 	}
+	fmt.Println(updateCol)
 
 	if len(updateCol) <= 0 {
 		err = errors.New("没有变更信息")
@@ -184,6 +185,7 @@ func CheckEdit(sealInfo *seal.Seal, approvalInfo *contract_approval.ContractAppr
 		sealInfo.SealType = sealType
 		sealInfo.Remark = remark
 		sealInfo.FileNum = fileNum
+		sealInfo.FileUrl = fileUrl
 		sealInfo.ModifyTime = time.Now()
 		checkEdit(sealInfo, updateCol, approvalRecord.ContractApprovalRecordId, content, opUser)
 
@@ -206,6 +208,7 @@ func CheckEdit(sealInfo *seal.Seal, approvalInfo *contract_approval.ContractAppr
 		sealInfo.SealType = sealType
 		sealInfo.Remark = remark
 		sealInfo.FileNum = fileNum
+		sealInfo.FileUrl = fileUrl
 		sealInfo.ModifyTime = time.Now()
 		checkEdit(sealInfo, updateCol, approvalRecord.ContractApprovalRecordId, content, opUser)