浏览代码

Merge branch 'crm/crm_16.8' of http://8.136.199.33:3000/hongze/hz_crm_api

zhangchuanxing 1 月之前
父节点
当前提交
1095eca4c6

+ 136 - 28
controllers/company_apply_v2.go

@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"hongze/hz_crm_api/models"
 	"hongze/hz_crm_api/models/company"
+	"hongze/hz_crm_api/models/seal"
 	"hongze/hz_crm_api/models/system"
 	"hongze/hz_crm_api/services"
 	"hongze/hz_crm_api/services/company_apply"
@@ -154,6 +155,7 @@ func (this *CompanyApplyController) ApplyServiceUpdate() {
 			}
 			if totalLastYear > 0 {
 				raicontractType = "新签合同"
+				req.ContractType = "新签合同"
 			}
 		}
 
@@ -205,6 +207,42 @@ func (this *CompanyApplyController) ApplyServiceUpdate() {
 			br.ErrMsg = "生成合同编码失败,Err:" + err.Error()
 			return
 		}
+		var sealId int
+		if productId == 2 {
+			contractCode, err = seal.GetSealCodeRai() //权益客户合同编号格式替换
+			if err != nil {
+				br.Msg = "生成合同编码失败"
+				br.ErrMsg = "生成合同编码失败,Err:" + err.Error()
+				return
+			}
+			sealCount, err := seal.GetCountByDateAndCompanyId(req.StartDate, req.EndDate, req.CompanyId)
+			if err != nil {
+				br.Msg = "生成合同编码失败"
+				br.ErrMsg = "获取用印合同数量信息失败,Err:" + err.Error()
+				return
+			}
+			crmConfig, err := company.GetConfigDetailByCode("rai_seal_check") //权益非标合同是否校验用印提交
+			if err != nil {
+				br.Msg = "获取配置失败"
+				br.ErrMsg = "获取配置失败,Err:" + err.Error()
+				return
+			}
+
+			if sealCount == 0 && crmConfig.ConfigValue == "1" {
+				br.Msg = "此合同暂未申请用印,请核对合同期限是否有误"
+				return
+			}
+			if sealCount > 0 {
+				sealInfo, err := seal.GetSealInfoByDateAndCompanyId(req.StartDate, req.EndDate, req.CompanyId)
+				if err != nil {
+					br.Msg = "生成合同编码失败"
+					br.ErrMsg = "获取用印合同信息失败,Err:" + err.Error()
+					return
+				}
+				contractCode = sealInfo.Code
+				sealId = sealInfo.SealId
+			}
+		}
 		//当前是否存在待审批的单子
 		nowCompanyApprovalInfo, err := company.GetCompanyApprovalById(req.CompanyId, productId)
 		if (err == nil || nowCompanyApprovalInfo != nil) || err != nil && err.Error() != utils.ErrNoRow() {
@@ -257,7 +295,19 @@ func (this *CompanyApplyController) ApplyServiceUpdate() {
 			br.ErrMsg = "新增合同失败,Err:" + err.Error()
 			return
 		}
+
+		//如果用印ID > 0 建立合同ID,与用印申请表的关系
+		if sealId > 0 {
+			//用印作废
+			err = seal.UpdateSealCompanyContractId(int(newId), sealId)
+			if err != nil {
+				br.Msg = "操作失败"
+				br.ErrMsg = "添加用印与合同的关系失败,Err:" + err.Error()
+				return
+			}
+		}
 		go services.UpdateCompanyContractInheritEndDate(int(newId))
+
 		permissionArr := strings.Split(req.PermissionIds, ",")
 		permissionMap := make(map[int]int) //权限id的map集合,用来避免重复添加权限校验
 
@@ -655,6 +705,10 @@ func (this *CompanyApplyController) ApplyTurnPositive() {
 			}
 		}
 	}
+	//权益合同类型,有一套单独的逻辑
+	if productId == 2 {
+		contractType = raicontractType
+	}
 
 	var companyApprovalId int
 	// 全新的申请转正
@@ -665,35 +719,76 @@ func (this *CompanyApplyController) ApplyTurnPositive() {
 			br.ErrMsg = "生成合同编码失败,Err:" + err.Error()
 			return
 		}
+
 		//如果是权益的合同,合同编号另取
-		//if productId == 2 {
-		//	sealCount, err := seal.GetCountByDateAndCompanyId(req.StartDate, req.EndDate, req.CompanyId)
-		//	if err != nil {
-		//		br.Msg = "生成合同编码失败"
-		//		br.ErrMsg = "获取用印合同数量信息失败,Err:" + err.Error()
-		//		return
-		//	}
-		//	crmConfig, err := company.GetConfigDetailByCode("rai_seal_check") //权益非标合同是否校验用印提交
-		//	if err != nil {
-		//		br.Msg = "获取配置失败"
-		//		br.ErrMsg = "获取配置失败,Err:" + err.Error()
-		//		return
-		//	}
-		//
-		//	if sealCount == 0 && crmConfig.ConfigValue == "1" {
-		//		br.Msg = "此合同暂未申请用印,请核对合同期限是否有误"
-		//		return
-		//	}
-		//	if sealCount > 0 {
-		//		sealInfo, err := seal.GetSealInfoByDateAndCompanyId(req.StartDate, req.EndDate, req.CompanyId)
-		//		if err != nil {
-		//			br.Msg = "生成合同编码失败"
-		//			br.ErrMsg = "获取用印合同信息失败,Err:" + err.Error()
-		//			return
-		//		}
-		//		contractCode = sealInfo.Code
-		//	}
-		//}
+
+		if productId == 2 {
+			sealCount, err := seal.GetCountByDateAndCompanyId(req.StartDate, req.EndDate, req.CompanyId)
+			if err != nil {
+				br.Msg = "生成合同编码失败"
+				br.ErrMsg = "获取用印合同数量信息失败,Err:" + err.Error()
+				return
+			}
+			crmConfig, err := company.GetConfigDetailByCode("rai_seal_check") //权益非标合同是否校验用印提交
+			if err != nil {
+				br.Msg = "获取配置失败"
+				br.ErrMsg = "获取配置失败,Err:" + err.Error()
+				return
+			}
+
+			if sealCount == 0 && crmConfig.ConfigValue == "1" {
+				br.Msg = "此合同暂未申请用印,请核对合同期限是否有误"
+				return
+			}
+			if sealCount > 0 {
+				sealInfo, err := seal.GetSealInfoByDateAndCompanyId(req.StartDate, req.EndDate, req.CompanyId)
+				if err != nil {
+					br.Msg = "生成合同编码失败"
+					br.ErrMsg = "获取用印合同信息失败,Err:" + err.Error()
+					return
+				}
+				contractCode = sealInfo.Code
+			}
+		}
+
+		var sealId int
+
+		if productId == 2 {
+			contractCode, err = seal.GetSealCodeRai() //权益客户合同编号格式替换
+			if err != nil {
+				br.Msg = "生成合同编码失败"
+				br.ErrMsg = "生成合同编码失败,Err:" + err.Error()
+				return
+			}
+			sealCount, err := seal.GetCountByDateAndCompanyId(req.StartDate, req.EndDate, req.CompanyId)
+			if err != nil {
+				br.Msg = "生成合同编码失败"
+				br.ErrMsg = "获取用印合同数量信息失败,Err:" + err.Error()
+				return
+			}
+			crmConfig, err := company.GetConfigDetailByCode("rai_seal_check") //权益非标合同是否校验用印提交
+			if err != nil {
+				br.Msg = "获取配置失败"
+				br.ErrMsg = "获取配置失败,Err:" + err.Error()
+				return
+			}
+
+			if sealCount == 0 && crmConfig.ConfigValue == "1" {
+				br.Msg = "此合同暂未申请用印,请核对合同期限是否有误"
+				return
+			}
+			if sealCount > 0 {
+				sealInfo, err := seal.GetSealInfoByDateAndCompanyId(req.StartDate, req.EndDate, req.CompanyId)
+				if err != nil {
+					br.Msg = "生成合同编码失败"
+					br.ErrMsg = "获取用印合同信息失败,Err:" + err.Error()
+					return
+				}
+				contractCode = sealInfo.Code
+				sealId = sealInfo.SealId
+			}
+		}
+
 		//当前是否存在待审批的单子
 		nowCompanyApprovalInfo, err := company.GetCompanyApprovalById(req.CompanyId, productId)
 		if (err == nil || nowCompanyApprovalInfo != nil) || err != nil && err.Error() != utils.ErrNoRow() {
@@ -747,7 +842,20 @@ func (this *CompanyApplyController) ApplyTurnPositive() {
 			br.ErrMsg = "新增合同失败,Err:" + err.Error()
 			return
 		}
+
+		//如果用印ID > 0 建立合同ID,与用印申请表的关系
+		if sealId > 0 {
+			//用印作废
+			err = seal.UpdateSealCompanyContractId(int(newId), sealId)
+			if err != nil {
+				br.Msg = "操作失败"
+				br.ErrMsg = "添加用印与合同的关系失败,Err:" + err.Error()
+				return
+			}
+		}
+
 		go services.UpdateCompanyContractInheritEndDate(int(newId))
+
 		permissionArr := strings.Split(req.PermissionIds, ",")
 		permissionMap := make(map[int]int) //权限id的map集合,用来避免重复添加权限校验
 		permissionItems := make([]*company.CompanyContractPermission, 0)

+ 212 - 4
controllers/seal/seal_approval.go

@@ -13,6 +13,8 @@ import (
 	sealModels "hongze/hz_crm_api/models/seal"
 	"hongze/hz_crm_api/models/seal/request"
 	"hongze/hz_crm_api/models/seal/response"
+	"hongze/hz_crm_api/services"
+	contractService "hongze/hz_crm_api/services/contract"
 	"hongze/hz_crm_api/services/seal"
 	"hongze/hz_crm_api/utils"
 	"os"
@@ -464,16 +466,47 @@ func (this *SealApprovalController) Apply() {
 		br.ErrMsg = "参数解析异常!Err:" + err.Error()
 		return
 	}
+
+	creditCode := req.CreditCode
+	startDate := req.StartDate
+
 	reqVerify := utils.Rules{
-		"Use":               {utils.NotEmpty()},
-		"CompanyName":       {utils.NotEmpty()},
-		"CreditCode":        {utils.NotEmpty()},
-		"ServiceType":       {utils.NotEmpty()},
+		"Use":         {utils.NotEmpty()},
+		"CompanyName": {utils.NotEmpty()},
+		"CreditCode":  {utils.NotEmpty()},
+		//"ServiceType":       {utils.NotEmpty()},
 		"SealType":          {utils.NotEmpty()},
 		"FileUrls":          {utils.NotEmpty()},
 		"AffiliatedCompany": {utils.NotEmpty()},
 	}
 
+	//目前只有权益的用印申请会有开始时间,先作为权益的标识判断 CRM_16.8
+	if startDate != "" {
+		companyInfo, tmpErr := company.GetCompanyByCreditCode(creditCode)
+		//如果查询异常,且并不是在系统中找不到该社会信用码,那么就异常返回
+		if tmpErr != nil {
+			br.Msg = "根据社会信用码获取客户信息失败!"
+			br.ErrMsg = "根据社会信用码获取客户信息失败!Err:" + err.Error()
+			return
+		}
+
+		req.CompanyId = companyInfo.CompanyId
+		totalLastYear, err := contractService.GetCompanyContractCountRaiByLastYear(req.CompanyId, req.StartDate)
+		if err != nil {
+			br.Msg = "获取合同信息失败"
+			br.ErrMsg = "获取合同信息失败,Err:" + err.Error()
+			return
+		}
+		if totalLastYear > 0 {
+			req.ServiceType = "新签合同"
+		} else {
+			req.ServiceType = "续约合同"
+		}
+		reqVerify["Money"] = []string{utils.NotEmpty()}
+	} else {
+		reqVerify["ServiceType"] = []string{utils.NotEmpty()}
+	}
+
 	err = utils.Verify(req, reqVerify, utils.LANG_CN)
 	if err != nil {
 		br.Msg = "参数丢失!"
@@ -561,6 +594,30 @@ func (this *SealApprovalController) Edit() {
 		br.ErrMsg = "归属公司不能为空"
 		return
 	}
+	startDate := req.StartDate
+	creditCode := req.CreditCode
+	if startDate != "" {
+		companyInfo, tmpErr := company.GetCompanyByCreditCode(creditCode)
+		//如果查询异常,且并不是在系统中找不到该社会信用码,那么就异常返回
+		if tmpErr != nil {
+			br.Msg = "根据社会信用码获取客户信息失败!"
+			br.ErrMsg = "根据社会信用码获取客户信息失败!Err:" + err.Error()
+			return
+		}
+
+		companyId := companyInfo.CompanyId
+		totalLastYear, err := contractService.GetCompanyContractCountRaiByLastYear(companyId, req.StartDate)
+		if err != nil {
+			br.Msg = "获取合同信息失败"
+			br.ErrMsg = "获取合同信息失败,Err:" + err.Error()
+			return
+		}
+		if totalLastYear > 0 {
+			req.ServiceType = "新签合同"
+		} else {
+			req.ServiceType = "续约合同"
+		}
+	}
 
 	// 编辑用印
 	err = seal.EditApply(this.SysUser, req)
@@ -998,3 +1055,154 @@ func (this *SealApprovalController) AffiliatedCompanyList() {
 	br.Msg = "获取成功"
 	br.Data = list
 }
+
+// 用印客户名称检索
+// @Title 用印客户名称检索列表
+// @Description 关联公司列表
+// @Param   KeyWord   query   string  true       "搜索关键词"
+// @Success 200 {object} company.CompanySearchView
+// @router /company/search [get]
+func (this *SealApprovalController) CompanySearch() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser is Empty"
+		br.Ret = 408
+		return
+	}
+	KeyWord := this.GetString("KeyWord")
+	if KeyWord == "" {
+		br.Msg = "请输入搜索词!"
+		return
+	}
+	KeyWord = "%" + KeyWord + "%"
+	productId := services.GetProductId(sysUser.RoleTypeCode)
+	var groupId int
+	if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_GROUP || sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP {
+		groupId = sysUser.GroupId
+	} else {
+		groupId = -1
+	}
+
+	list, err := company.GetCompanySearchBySeal(productId, sysUser.AdminId, groupId, KeyWord)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "搜索客户失败!"
+		br.ErrMsg = "搜索客户失败!Err:" + err.Error()
+		return
+	}
+	if list == nil {
+		list = make([]*company.CompanySearchView, 0)
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = list
+}
+
+// 用印合同编号检索
+// @Title 用印合同编号检索
+// @Description 关联用印信息列表
+// @Param   KeyWord   query   string  true       "搜索关键词"
+// @Success 200 {object} sealModels.SealSearCodeViewListResp
+// @router /sealcode/search [get]
+func (this *SealApprovalController) SealCodeSearch() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser is Empty"
+		br.Ret = 408
+		return
+	}
+	KeyWord := this.GetString("KeyWord")
+	if KeyWord == "" {
+		br.Msg = "请输入搜索词!"
+		return
+	}
+	KeyWord = "%" + KeyWord + "%"
+	var condition string
+	var pars []interface{}
+	condition += ` AND code LIKE ?  AND  user_id = ?   `
+	pars = append(pars, KeyWord, sysUser.AdminId)
+
+	list, err := sealModels.GetList(condition, pars, 0, 100)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "搜索客户失败!"
+		br.ErrMsg = "搜索客户失败!Err:" + err.Error()
+		return
+	}
+	resp := new(sealModels.SealSearCodeViewListResp)
+	if list == nil {
+		resp.List = make([]*sealModels.SealSearCodeView, 0)
+	} else {
+		for _, v := range list {
+			item := new(sealModels.SealSearCodeView)
+			item.SealId = v.SealId
+			item.Code = v.Code
+			item.StartDate = v.StartDate
+			item.EndDate = v.EndDate
+			item.Money = v.Money
+			resp.List = append(resp.List, item)
+		}
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// 通过ID获取用印对应详情
+// @Title 通过ID获取用印对应详情接口
+// @Description 获取用印对应详情
+// @Param   SealId   query   int	  true       "用印ID"
+// @Success 200 {object} response.SealSearCodeViewDetailResp
+// @router /sealdetail/by_sealid [get]
+func (this *SealApprovalController) SealdetailById() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser is Empty"
+		br.Ret = 408
+		return
+	}
+	sealId, _ := this.GetInt("SealId")
+	if sealId == 0 {
+		br.Msg = "请输入用印ID!"
+		return
+	}
+
+	sealInfo, err := sealModels.GetSealInfoById(sealId)
+	if err != nil {
+		br.Msg = "获取用印失败!"
+		br.ErrMsg = "获取用印失败!Err:" + err.Error()
+		return
+	}
+
+	resp := new(sealModels.SealSearCodeViewDetailResp)
+
+	item := new(sealModels.SealSearCodeView)
+	item.SealId = sealInfo.SealId
+	item.Code = sealInfo.Code
+	item.StartDate = sealInfo.StartDate
+	item.EndDate = sealInfo.EndDate
+	item.Money = sealInfo.Money
+	resp.Detail = item
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 30 - 0
models/company/company.go

@@ -1998,3 +1998,33 @@ func GetCompanyListByCompanyId(companyId []int) (items []*Company, err error) {
 	_, err = o.Raw(sql, companyId).QueryRows(&items)
 	return
 }
+
+type CompanySearchView struct {
+	CompanyId      int    `orm:"column(company_id);pk"`
+	CompanyName    string `description:"客户名称"`
+	CreditCode     string `description:"社会统一信用码"`
+	CompanyCode    string `description:"客户编码"`
+	EnglishCompany int    `description:"是否为英文客户"`
+}
+
+func GetCompanySearchBySeal(productId, sellerId, groupId int, keyWord string) (items []*CompanySearchView, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+				b.company_id,
+				a.company_name,
+				a.credit_code
+			FROM
+				company AS a
+			INNER JOIN company_product AS b ON a.company_id = b.company_id 
+			WHERE
+			     1=1 
+				 AND  b.product_id = ?
+				 AND (b.seller_id = ?  OR b.share_seller_id = ?  OR b.group_id =  ?  ) 
+			  	 AND a.company_name LIKE ?
+			GROUP BY b.company_id `
+	_, err = o.Raw(sql, productId, sellerId, sellerId, groupId, keyWord).QueryRows(&items)
+	if err != nil {
+		return
+	}
+	return
+}

+ 4 - 0
models/contract/contract.go

@@ -480,6 +480,7 @@ func InvalidContract(contractInfo *Contract) (err error) {
 // GetCompanyContractCode 生成合同编号
 func GetCompanyContractCode(productId int, contractBusinessType string) (companyCode string, err error) {
 	var num int
+	var num2 int
 	o := orm.NewOrm()
 	today := utils.GetToday(utils.FormatDate)
 	sql := `SELECT COUNT(1) AS num FROM contract where create_time>=?`
@@ -487,6 +488,9 @@ func GetCompanyContractCode(productId int, contractBusinessType string) (company
 	if err != nil {
 		return
 	}
+	sql = `SELECT COUNT(1) AS num FROM seal where create_time>=?` // 把合规的部分也算上
+	err = o.Raw(sql, today).QueryRow(&num2)
+	num += num2
 	companyType := ""
 	switch productId {
 	case 1:

+ 5 - 1
models/seal/request/seal_approval.go

@@ -14,8 +14,9 @@ type SealApprovalApplyReq struct {
 	FileNum           int      `description:"文件份数"`
 	AffiliatedCompany string   `description:"归属公司"`
 	CompanyId         int      `description:"客户id"`
-	StartDate         string   `description:"开始日期"`
+	StartDate         string   `description:"开始日期."`
 	EndDate           string   `description:"结束日期"`
+	Money             float64  `description:"合同金额"`
 }
 
 // 用印审批编辑请求
@@ -32,6 +33,9 @@ type SealApprovalEditReq struct {
 	FileUrls          []string `description:"多个文件附件地址"`
 	FileNum           int      `description:"文件份数"`
 	AffiliatedCompany string   `description:"归属公司"`
+	StartDate         string   `description:"开始日期"`
+	EndDate           string   `description:"结束日期"`
+	Money             float64  `description:"合同金额"`
 }
 
 // 用印审批撤回请求

+ 127 - 2
models/seal/seal.go

@@ -34,6 +34,12 @@ type Seal struct {
 	CreateTime        time.Time `description:"添加时间"`
 	CheckBackFileTime time.Time `description:"签回用印附件时间"`
 	AffiliatedCompany string    `description:"归属公司"`
+	ProductId         int       `description:"产品id,1:ficc;2:权益."`
+	CompanyId         int       `description:"客户id."`
+	StartDate         string    `description:"开始日期."`
+	EndDate           string    `description:"结束日期。"`
+	CompanyContractId int       `description:"合同id"`
+	Money             float64   `description:"合同金额"`
 }
 
 var EnumUse = []string{"销售合同", "渠道合同", "付款通知函", "招投标", "战略合作协议", "代付合同", "总对总协议"}
@@ -60,7 +66,8 @@ func GetSealInfoByContractId(sealId int) (sealInfo *Seal, err error) {
 // GetSealInfoByDateAndCompanyId 根据起始时间,公司ID获取合同信息
 func GetSealInfoByDateAndCompanyId(startDate, endDate string, companyId int) (sealInfo *Seal, err error) {
 	o := orm.NewOrm()
-	sql := `select * from seal where start_date = ? and end_date = ? AND company_id =?  AND  product_id = 2  order by seal_id asc limit 1 `
+
+	sql := `select * from seal where start_date = ? and end_date = ? AND company_id =?  AND  product_id = 2   AND  company_contract_id  = 0  order by seal_id asc limit 1 `
 	err = o.Raw(sql, startDate, endDate, companyId).QueryRow(&sealInfo)
 	return
 }
@@ -68,7 +75,8 @@ func GetSealInfoByDateAndCompanyId(startDate, endDate string, companyId int) (se
 // GetCountByDateAndCompanyId  根据起始时间,公司ID获取合同信息数量
 func GetCountByDateAndCompanyId(startDate, endDate string, companyId int) (count int, err error) {
 	o := orm.NewOrm()
-	sql := "select count(*) AS COUNT from seal   where start_date = ? and end_date = ? AND company_id =?  AND  product_id = 2   "
+
+	sql := "select count(*) AS COUNT from seal   where start_date = ? and end_date = ? AND company_id =?  AND  product_id = 2   AND  company_contract_id  = 0    "
 	err = o.Raw(sql, startDate, endDate, companyId).QueryRow(&count)
 	return
 }
@@ -111,9 +119,19 @@ func Invalid(sealInfo *Seal) (err error) {
 	return
 }
 
+// UpdateSealCompanyContractId 添加用印与合同的关系
+func UpdateSealCompanyContractId(companyContractId, sealId int) (err error) {
+	//修改用印数据入库
+	o := orm.NewOrm()
+	msql := " UPDATE seal SET company_contract_id = ? WHERE seal_id = ? "
+	_, err = o.Raw(msql, companyContractId, sealId).Exec()
+	return
+}
+
 // GetSealCode 生成合同编号
 func GetSealCode() (code string, err error) {
 	var num int
+	var num2 int
 	o := orm.NewOrm()
 	today := utils.GetToday(utils.FormatDate)
 	sql := `SELECT COUNT(1) AS num FROM seal where create_time>=?`
@@ -122,10 +140,34 @@ func GetSealCode() (code string, err error) {
 		return
 	}
 
+	sql = `SELECT COUNT(1) AS num FROM contract where create_time>=?` // 把正式合同的部分也算上
+	err = o.Raw(sql, today).QueryRow(&num2)
+	num += num2
+
 	code = "HZ" + time.Now().Format("20060102") + fmt.Sprintf("%03d", num)
 	return
 }
 
+// GetSealCodeRai 生成权益合同编号1
+func GetSealCodeRai() (code string, err error) {
+	var num int
+	var num2 int
+	o := orm.NewOrm()
+	today := utils.GetToday(utils.FormatDate)
+	sql := `SELECT COUNT(1) AS num FROM seal where create_time>=?`
+	err = o.Raw(sql, today).QueryRow(&num)
+	if err != nil {
+		return
+	}
+
+	sql = `SELECT COUNT(1) AS num FROM contract where create_time>=?` // 把正式合同的部分也算上
+	err = o.Raw(sql, today).QueryRow(&num2)
+	num += num2
+
+	code = "HZEQ" + time.Now().Format("20060102") + fmt.Sprintf("%03d", num)
+	return
+}
+
 type CompanyNameList struct {
 	CompanyName string `description:"客户名称,甲方名称,长度32位"`
 }
@@ -174,6 +216,46 @@ func GetList(condition string, pars []interface{}, startSize, pageSize int) (lis
 	return
 }
 
+//type SealApprovalItem struct {
+//	ContractApprovalId       int                     `description:"审批单ID"`
+//	ContractId               int                     `description:"合同ID"`
+//	ContractApprovalRecordId int                     `description:"审批流ID"`
+//	Code                     string                  `description:"合同编号"`
+//	Use                      string                  `description:"用印用途,枚举值:'销售合同','渠道合同','付款通知函','招投标','战略合作协议'"`
+//	ContractType             string                  `description:"合同类型,枚举值:'新签合同','续约合同','补充协议','代付合同'"`
+//	Status                   string                  `description:"合同状态,枚举值:待审批','已审批','已驳回','已撤回','已签回',默认待审批"`
+//	ApproveStatus            string                  `json:"-" description:"审批单状态,枚举值:待审批','已审批','已驳回','已撤回',默认待审批"`
+//	ApplyContent             string                  `description:"申请内容"`
+//	ApplyUserId              int                     `description:"申请人ID"`
+//	ApplyUserName            string                  `description:"申请人名称"`
+//	ContractDetail           string                  `json:"-" description:"提交审批时的合同信息;用印快照"`
+//	ContractInfo             contract.ContractDetail `json:"-" description:"提交审批时的合同信息;用印快照"`
+//	ApproveRemark            string                  `description:"审核备注"`
+//	SealType                 string                  `description:"用印类型"`
+//	CompanyName              string                  `description:"客户名称"`
+//	FileUrl                  string                  `description:"合同下载地址"`
+//	CurrNodeId               int                     `description:"当前审批节点id"`
+//	StartNodeId              int                     `description:"开始审批节点id"`
+//	//UserId                   int                     `description:"申请人id"`
+//	//UserName                 string                  `description:"申请人名称"`
+//	SealId               int       `description:"用印审批ID"`
+//	CreateTime           time.Time `description:"发起审批的时间"`
+//	ModifyTime           time.Time `description:"最后一次修改的时间"`
+//	ApproveTime          time.Time `description:"审批时间"`
+//	InvalidTime          time.Time `description:"作废时间"`
+//	CheckBackFileUrl     string    `description:"签回附件地址"`
+//	CheckBackFileTime    time.Time `description:"签回用印附件时间"`
+//	CreditCode           string    `description:"社会信用码"`
+//	CreateTimeStr        string    `description:"发起审批的时间(字符串)"`
+//	ModifyTimeStr        string    `description:"最后一次修改的时间(字符串)"`
+//	ApproveTimeStr       string    `description:"审批时间(字符串)"`
+//	InvalidTimeStr       string    `description:"作废时间(字符串)"`
+//	CheckBackFileTimeStr string    `description:"签回用印附件时间(字符串)"`
+//	ContractCode         string    `description:"合同编码"`
+//	AffiliatedCompany    string    `description:"归属公司"`
+//	ProductId            int       `description:"产品id,1:ficc;2:权益。"`
+//}
+
 type SealApprovalItem struct {
 	ContractApprovalId       int `description:"审批单ID"`
 	ContractId               int `description:"合同ID"`
@@ -211,10 +293,34 @@ type SealApprovalItem struct {
 	CheckBackFileTimeStr string    `description:"签回用印附件时间(字符串)"`
 	ContractCode         string    `description:"合同编码"`
 	AffiliatedCompany    string    `description:"归属公司"`
+	ProductId            int       `description:"产品id,1:ficc;2:权益。"`
 }
 
 // GetSealApprovalListByWhere 获取用印审批列表-分页
+//func GetSealApprovalListByWhere(condition, joinCondition string, pars []interface{}, startSize, pageSize int) (list []*SealApprovalItem, total int, err error) {
+//	o := orm.NewOrm()
+//	fields := `a.contract_approval_id,c.contract_id,a.apply_content,a.approve_remark,a.apply_user_id,a.apply_user_name,a.curr_node_id,a.start_node_id,c.create_time,a.modify_time,a.status approval_status,
+//			   c.status,c.seal_id,c.seal_type,c.service_type contract_type,c.use,c.company_name,c.file_url,c.approve_time,c.invalid_time,c.code,c.credit_code,c.check_back_file_time,c.check_back_file_url,c.product_id,c.affiliated_company `
+//	sql := `SELECT ` + fields + ` from contract_approval a JOIN ( SELECT max( contract_approval_id ) max_id,contract_id FROM contract_approval where 1=1 and approval_type = "seal" `
+//	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 ` + joinCondition + `
+//WHERE c.is_delete = 0 AND a.approval_type="seal" `
+//	sql += condition
+//	sql += ` group by c.seal_id order by c.create_time desc`
+//	totalSql := `SELECT COUNT(1) total FROM (` + sql + `) z`
+//	err = o.Raw(totalSql, pars).QueryRow(&total)
+//	if err != nil {
+//		return
+//	}
+//	sql += ` LIMIT ?,? `
+//	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&list)
+//
+//	return
+//}
+
 func GetSealApprovalListByWhere(condition, joinCondition string, pars []interface{}, startSize, pageSize int) (list []*SealApprovalItem, total int, err error) {
+	//git
 	o := orm.NewOrm()
 	fields := `a.contract_approval_id,c.contract_id,a.apply_content,a.approve_remark,a.apply_user_id,a.apply_user_name,a.curr_node_id,a.start_node_id,c.create_time,a.modify_time,a.status approval_status,
 			   c.status,c.seal_id,c.seal_type,c.service_type contract_type,c.use,c.company_name,c.file_url,c.approve_time,c.invalid_time,c.code,c.credit_code,c.check_back_file_time,c.check_back_file_url,c.affiliated_company `
@@ -297,3 +403,22 @@ WHERE c.is_delete = 0 AND a.approval_type="seal" `
 
 	return
 }
+
+// Seal 用印结构体
+type SealSearCodeView struct {
+	SealId    int     `orm:"column(seal_id);pk"`
+	Code      string  `description:"用印编号,长度32位"`
+	StartDate string  `description:"开始日期."`
+	EndDate   string  `description:"结束日期。"`
+	Money     float64 `description:"合同金额"`
+}
+
+// Seal 用印结构体
+type SealSearCodeViewListResp struct {
+	List []*SealSearCodeView
+}
+
+// Seal 用印结构体
+type SealSearCodeViewDetailResp struct {
+	Detail *SealSearCodeView
+}

+ 27 - 0
routers/commentsRouter.go

@@ -8044,6 +8044,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/seal:SealApprovalController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/seal:SealApprovalController"],
+        beego.ControllerComments{
+            Method: "CompanySearch",
+            Router: `/company/search`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/seal:SealApprovalController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/seal:SealApprovalController"],
         beego.ControllerComments{
             Method: "Del",
@@ -8116,6 +8125,24 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/seal:SealApprovalController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/seal:SealApprovalController"],
+        beego.ControllerComments{
+            Method: "SealCodeSearch",
+            Router: `/sealcode/search`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/seal:SealApprovalController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/seal:SealApprovalController"],
+        beego.ControllerComments{
+            Method: "SealdetailById",
+            Router: `/sealdetail/by_sealid`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/seal:SealApprovalController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/seal:SealApprovalController"],
         beego.ControllerComments{
             Method: "VerifierEdit",

+ 188 - 7
services/seal/seal.go

@@ -123,7 +123,7 @@ func ApplySeal(sysUser *system.Admin, req request.SealApprovalApplyReq) (err err
 	}()
 
 	// 添加用印
-	sealInfo, err := addSeal(sysUser.AdminId, req.ContractId, req.FileNum, sysUser.RealName, req.Use, req.CompanyName, req.UseCompanyName, req.CreditCode, req.ServiceType, req.SealType, req.Remark, req.FileUrls, req.AffiliatedCompany)
+	sealInfo, err := addSeal(sysUser.AdminId, req.ContractId, req.FileNum, req.CompanyId, sysUser.RealName, req.Use, req.CompanyName, req.UseCompanyName, req.CreditCode, req.ServiceType, req.SealType, req.Remark, req.FileUrls, req.AffiliatedCompany, req.StartDate, req.EndDate, req.Money)
 	if err != nil {
 		return
 	}
@@ -140,7 +140,7 @@ func ApplySeal(sysUser *system.Admin, req request.SealApprovalApplyReq) (err err
 }
 
 // addSeal 新增用印
-func addSeal(userId, contractId, fileNum int, userName, use, companyName, useCompanyName, creditCode, serviceType, sealType, remark string, fileUrls []string, affiliatedCompany string) (sealInfo *seal.Seal, err error) {
+func addSeal(userId, contractId, fileNum, companyId int, userName, use, companyName, useCompanyName, creditCode, serviceType, sealType, remark string, fileUrls []string, affiliatedCompany, startDate, endDate string, money float64) (sealInfo *seal.Seal, err error) {
 	if !strings.Contains(strings.Join(seal.EnumUse, ","), use) {
 		err = errors.New("用印用途异常")
 		return
@@ -149,8 +149,27 @@ func addSeal(userId, contractId, fileNum int, userName, use, companyName, useCom
 		err = errors.New("业务类型异常")
 		return
 	}
+	adminAll, err := system.GetAdminList()
+	if err != nil {
+		return
+	}
+	//adminMap := make(map[int]*system.AdminView)
+	mapRaiSllerId := make(map[int]bool) // 是否为权益销售
+	for _, v := range adminAll {
+		//adminMap[v.AdminId] = v
+		if v.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER || v.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP || v.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN {
+			mapRaiSllerId[v.AdminId] = true
+		}
+	}
 
-	sealCode, err := seal.GetSealCode()
+	var sealCode string
+	var productId int
+	if mapRaiSllerId[userId] {
+		sealCode, err = seal.GetSealCodeRai()
+		productId = utils.COMPANY_PRODUCT_RAI_ID
+	} else {
+		sealCode, err = seal.GetSealCode()
+	}
 	if err != nil {
 		return
 	}
@@ -160,6 +179,7 @@ func addSeal(userId, contractId, fileNum int, userName, use, companyName, useCom
 	if len(fileUrls) == 1 {
 		fileUrl = fileUrls[0]
 	}
+
 	sealInfo = &seal.Seal{
 		Code:              sealCode,
 		UserId:            userId,
@@ -178,7 +198,13 @@ func addSeal(userId, contractId, fileNum int, userName, use, companyName, useCom
 		ModifyTime:        now,
 		CreateTime:        now,
 		AffiliatedCompany: affiliatedCompany,
+		ProductId:         productId,
+		CompanyId:         companyId,
+		StartDate:         startDate,
+		EndDate:           endDate,
+		Money:             money,
 	}
+
 	err = seal.AddSeal(sealInfo)
 	if err != nil {
 		return
@@ -214,7 +240,7 @@ func EditApply(sysUser *system.Admin, req request.SealApprovalEditReq) (err erro
 	}()
 
 	// 编辑用印
-	sealInfo, err := editSeal(req.SealId, sysUser.AdminId, req.ContractId, req.FileNum, req.Use, req.CompanyName, req.UseCompanyName, req.CreditCode, req.ServiceType, req.SealType, req.Remark, req.FileUrls, req.AffiliatedCompany)
+	sealInfo, err := editSeal(req.SealId, sysUser.AdminId, req.ContractId, req.FileNum, req.Use, req.CompanyName, req.UseCompanyName, req.CreditCode, req.ServiceType, req.SealType, req.Remark, req.FileUrls, req.AffiliatedCompany, req.StartDate, req.EndDate, req.Money)
 	if err != nil {
 		return
 	}
@@ -231,7 +257,7 @@ func EditApply(sysUser *system.Admin, req request.SealApprovalEditReq) (err erro
 }
 
 // editSeal 编辑用印申请
-func editSeal(sealId, userId, contractId, fileNum int, use, companyName, userCompanyName, creditCode, serviceType, sealType, remark string, fileUrls []string, affiliatedCompany string) (sealInfo *seal.Seal, err error) {
+func editSeal(sealId, userId, contractId, fileNum int, use, companyName, userCompanyName, creditCode, serviceType, sealType, remark string, fileUrls []string, affiliatedCompany, startDate, endDate string, money float64) (sealInfo *seal.Seal, err error) {
 	if !strings.Contains(strings.Join(seal.EnumUse, ","), use) {
 		err = errors.New("用印用途异常")
 		return
@@ -278,7 +304,10 @@ func editSeal(sealId, userId, contractId, fileNum int, use, companyName, userCom
 	sealInfo.CreateTime = now // 更新提交时间
 	sealInfo.Status = "待提交"
 	sealInfo.AffiliatedCompany = affiliatedCompany
-	err = sealInfo.Update([]string{"Use", "CompanyName", "UseCompanyName", "CreditCode", "ServiceType", "SealType", "Remark", "FileUrl", "FileNum", "ContractId", "ModifyTime", "CreateTime", "Status", "AffiliatedCompany"})
+	sealInfo.StartDate = startDate
+	sealInfo.EndDate = endDate
+	sealInfo.Money = money
+	err = sealInfo.Update([]string{"Use", "CompanyName", "UseCompanyName", "CreditCode", "ServiceType", "SealType", "Remark", "FileUrl", "FileNum", "ContractId", "ModifyTime", "CreateTime", "Status", "AffiliatedCompany", "StartDate", "EndDate", "Money"})
 	if err != nil {
 		return
 	}
@@ -485,7 +514,6 @@ func reapply(sealInfo *seal.Seal, opUser *system.Admin) (err error) {
 	return
 }
 
-// GetSealApprovalPageList 获取用印审批分页列表
 func GetSealApprovalPageList(condition, joinCondition string, pars []interface{}, startSize, pageSize int, sysUser *system.Admin) (newList []*response.SealApprovalList, total int, err error) {
 	// 1.列表数据
 	list, total, err := seal.GetSealApprovalListByWhere(condition, joinCondition, pars, startSize, pageSize)
@@ -588,6 +616,15 @@ func GetSealApprovalPageList(condition, joinCondition string, pars []interface{}
 			}
 
 			// 合同编码
+
+			//if selfContract, has := selfContractMap[item.ContractId]; has {
+			//	list[i].ContractCode = selfContract.ContractCode
+			//} else {
+			//	if item.ProductId == utils.COMPANY_PRODUCT_RAI_ID {
+			//		list[i].ContractCode = item.Code
+			//	}
+			//}
+
 			if selfContract, has := selfContractMap[item.ContractId]; has {
 				list[i].ContractCode = selfContract.ContractCode
 			}
@@ -617,6 +654,150 @@ func GetSealApprovalPageList(condition, joinCondition string, pars []interface{}
 	return
 }
 
+// GetSealApprovalPageList 获取用印审批分页列表
+//func GetSealApprovalPageList(condition, joinCondition string, pars []interface{}, startSize, pageSize int, sysUser *system.Admin) (newList []*response.SealApprovalList, total int, err error) {
+//	// 1.列表数据
+//	list, total, err := seal.GetSealApprovalListByWhere(condition, joinCondition, pars, startSize, pageSize)
+//	if err != nil {
+//		err = errors.New(fmt.Sprint("获取用印审批列表失败,Err:"+err.Error(), err))
+//		return
+//	}
+//
+//	// 2.操作权限
+//	if len(list) > 0 {
+//		// 取出所有列表最新的审批IDs
+//		approvalIdSlice := make([]string, 0)
+//		// 取出所有列表的关联合同id
+//		contractIdSlice := make([]string, 0)
+//		for i := 0; i < len(list); i++ {
+//			approvalIdSlice = append(approvalIdSlice, strconv.Itoa(list[i].ContractApprovalId))
+//			contractIdSlice = append(contractIdSlice, strconv.Itoa(list[i].ContractId))
+//		}
+//		approvalIdStr := strings.Join(approvalIdSlice, ",")
+//
+//		// 通过审批IDs获取所有的审批流
+//		approvalRecordList, tempErr := contract.GetContractApprovalRecordListByContractApprovalIds(approvalIdStr)
+//		//approvalRecordList, tempErr := contract.GetContractApprovalRecordList(approvalIdStr, sysUser.AdminId)
+//		if tempErr != nil {
+//			err = errors.New(fmt.Sprint("获取审批流失败,Err:"+tempErr.Error(), err))
+//			return
+//		}
+//
+//		// 获取自己的审批流列表数据
+//		selfContractApprovalRecordList, tempErr := contract.GetSelfContractApprovalRecordList(approvalIdStr, sysUser.AdminId)
+//		if tempErr != nil {
+//			err = errors.New(fmt.Sprint("获取审批列表失败,Err:"+tempErr.Error(), err))
+//			return
+//		}
+//		selfContractApprovalRecordMap := make(map[int]*contract.ContractApprovalRecord)
+//		for i := 0; i < len(selfContractApprovalRecordList); i++ {
+//			selfContractApprovalRecordMap[selfContractApprovalRecordList[i].ContractApprovalId] = selfContractApprovalRecordList[i]
+//		}
+//
+//		// 获取所有关联的合同列表
+//		selfContractMap := make(map[int]*contract.ContractList)
+//		{
+//			if len(contractIdSlice) > 0 {
+//				contractIdStr := strings.Join(contractIdSlice, ",")
+//				contractList, tempErr := contract.GetContractListByContractIds(contractIdStr)
+//				if tempErr != nil {
+//					err = errors.New(fmt.Sprint("获取合同失败,Err:"+tempErr.Error(), err))
+//					return
+//				}
+//				for i := 0; i < len(contractList); i++ {
+//					selfContractMap[contractList[i].ContractId] = contractList[i]
+//				}
+//			}
+//		}
+//
+//		for i := 0; i < len(list); i++ {
+//			item := list[i]
+//			list[i].CreateTimeStr = item.CreateTime.Format(utils.FormatDateTime)
+//			list[i].ModifyTimeStr = item.ModifyTime.Format(utils.FormatDateTime)
+//			list[i].ApproveTimeStr = item.ApproveTime.Format(utils.FormatDateTime)
+//			list[i].InvalidTimeStr = item.InvalidTime.Format(utils.FormatDateTime)
+//			list[i].CheckBackFileTimeStr = item.CheckBackFileTime.Format(utils.FormatDateTime)
+//
+//			if item.ApproveStatus == "已审批" || item.ApproveStatus == "已驳回" {
+//				list[i].ApproveTime = item.ModifyTime
+//				list[i].ApproveTimeStr = item.ModifyTime.Format(utils.FormatDateTime)
+//			}
+//
+//			// 如果当前状态是待审批的话,那么校验自己的审批流数据,然后去返回对应的状态
+//			if item.Status == "待审批" {
+//				// 如果是自己发起的审批单,同时已经经过了一轮审批,那么标记为处理中
+//				if item.ApplyUserId == sysUser.AdminId && item.CurrNodeId > item.StartNodeId {
+//					list[i].Status = "处理中"
+//				} else if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_ADMIN && item.CurrNodeId > item.StartNodeId {
+//					// 如果是超管角色,同时已经经过了一轮审批,那么标记为处理中
+//					list[i].Status = "处理中"
+//				} else {
+//					// 此处可能出现同一审批人同时有权限处理一级二级的情况
+//					maxNodeId := 0
+//					tempStatus := "待审批"
+//					for _, selfRecord := range selfContractApprovalRecordList {
+//						if item.ContractApprovalId == selfRecord.ContractApprovalId {
+//							if selfRecord.NodeId > maxNodeId {
+//								maxNodeId = selfRecord.NodeId
+//							}
+//							if maxNodeId < item.CurrNodeId && selfRecord.NodeType != "cc" {
+//								tempStatus = "处理中"
+//							} else if maxNodeId == item.CurrNodeId && selfRecord.NodeType != "cc" {
+//								tempStatus = "待审批"
+//							}
+//						}
+//					}
+//					list[i].Status = tempStatus
+//					/*if contractApprovalRecord, has := selfContractApprovalRecordMap[item.ContractApprovalId]; has {
+//						if contractApprovalRecord.NodeId < item.CurrNodeId && contractApprovalRecord.NodeType != "cc" {
+//							list[i].Status = "处理中"
+//						}
+//					}*/
+//				}
+//			}
+//			// 合同编码
+//
+//			//if selfContract, has := selfContractMap[item.ContractId]; has {
+//			//	list[i].ContractCode = selfContract.ContractCode
+//			//} else {
+//			//	if item.ProductId == utils.COMPANY_PRODUCT_RAI_ID {
+//			//		list[i].ContractCode = item.Code
+//			//	}
+//			//}
+//
+//			if selfContract, has := selfContractMap[item.ContractId]; has {
+//				list[i].ContractCode = selfContract.ContractCode
+//			} else {
+//				if item.ProductId == utils.COMPANY_PRODUCT_RAI_ID {
+//					list[i].ContractCode = item.Code
+//				}
+//			}
+//
+//			// 取出item对应approval_id的审批流
+//			var tempApprovalRecordMap []*contract.ContractApprovalRecord
+//			for _, recordItem := range approvalRecordList {
+//				if item.ContractApprovalId == recordItem.ContractApprovalId {
+//					tempApprovalRecordMap = append(tempApprovalRecordMap, recordItem)
+//				}
+//			}
+//			// 获取对该条数据的操作权限
+//			opButton, tempErr := handleListOpButton(item, tempApprovalRecordMap, sysUser)
+//			if tempErr != nil {
+//				err = errors.New(fmt.Sprint("获取操作权限失败,Err:"+tempErr.Error(), err))
+//				return
+//			}
+//
+//			tempNewList := &response.SealApprovalList{
+//				SealApprovalItem: item,
+//				OpButton:         opButton,
+//			}
+//			newList = append(newList, tempNewList)
+//		}
+//	}
+//
+//	return
+//}
+
 // handleOpButton 列表数据操作权限
 func handleListOpButton(approvalItem *seal.SealApprovalItem, recordList []*contract.ContractApprovalRecord, sysUser *system.Admin) (opButton response.SealApprovalOpButton, err error) {
 	// 待审批状态下,如果是自己发起的审批单,同时已经经过了一轮审批,那么标记为处理中