Browse Source

Merge branch 'crm1.0' of hongze/hongze_mobile_admin into master

hongze 3 years ago
parent
commit
c81f791962

+ 5 - 0
controllers/contract.go

@@ -7,6 +7,7 @@ import (
 	"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/services/seal"
 	"hongze/hongze_mobile_admin/utils"
 	"rdluck_tools/paging"
 	"strings"
@@ -41,9 +42,13 @@ func (c *ContractCommon) UploadCheckBackFile() {
 	}
 	err = contractService.UploadCheckBackFile(req.ContractId, req.FileUrl, c.AdminWx)
 
+	//更新用印中的签回合同
+	_, _ = seal.UploadCheckBackFile(req.ContractId, req.FileUrl, c.AdminWx)
+
 	c.OkWithMessage("上传成功")
 }
 
+// Detail
 // @Title 获取合同详情
 // @Description 获取合同详情接口
 // @Param   ContractId   query   int  true       "合同id"

+ 37 - 1
controllers/seal.go

@@ -5,6 +5,7 @@ import (
 	sealReq "hongze/hongze_mobile_admin/models/request/seal"
 	sealResp "hongze/hongze_mobile_admin/models/response/seal"
 	"hongze/hongze_mobile_admin/models/tables/seal"
+	contractService "hongze/hongze_mobile_admin/services/contract"
 	sealService "hongze/hongze_mobile_admin/services/seal"
 	"hongze/hongze_mobile_admin/utils"
 	"rdluck_tools/paging"
@@ -155,7 +156,7 @@ func (c *SealCommon) CheckEdit() {
 // List
 // @Title 用印列表
 // @Description 用印列表接口
-// @Param   Status   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"
@@ -309,6 +310,41 @@ func (c *SealCommon) Invalid() {
 	return
 }
 
+// UploadCheckBackFile
+// @Title 上传签回附件
+// @Description 上传签回附件接口
+// @Param	request	body seal.UploadCheckBackFileReq true "type json string"
+// @Success Ret=200 上传成功
+// @router /upload_check_back_file [post]
+func (c *SealCommon) UploadCheckBackFile() {
+	var req sealReq.UploadCheckBackFileReq
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		c.FailWithMessage("参数解析异常!", "参数解析失败,Err:"+err.Error())
+		return
+	}
+	//用印编号
+	if req.SealId <= 0 {
+		c.FailWithMessage("请传入用印编号!", "请传入用印编号")
+		return
+	}
+
+	if req.FileUrl == "" {
+		c.FailWithMessage("请先上传附件!", "请先上传附件")
+		return
+	}
+	sealInfo, err := sealService.UploadCheckBackFile(req.SealId, req.FileUrl, c.AdminWx)
+	if err != nil {
+		c.FailWithMessage("参数解析异常!", "参数解析失败,Err:"+err.Error())
+		return
+	}
+	//如果是系统合同,那么需要去更新系统的签回附件
+	if sealInfo.ContractId > 0 {
+		_ = contractService.UploadCheckBackFile(sealInfo.ContractId, req.FileUrl, c.AdminWx)
+	}
+	c.OkWithMessage("上传成功")
+}
+
 //CompanyList
 // @Title 根据客户名称获取已存在系统中客户名称列表
 // @Description 获取合同详情接口

+ 1 - 1
controllers/seal_approval.go

@@ -25,7 +25,7 @@ type SealApprovalCommon struct {
 // @Param   Use   query   string  false       "用途,枚举值:销售合同, 渠道合同, 付款通知函, 招投标, 战略合作协议"
 // @Param   ServiceType   query   string  false       "业务类型,枚举值:"新签合同, 续约合同, 补充协议"
 // @Param   SealType   query   string  false       "公章类型,枚举值:合同章, 公章, 法人章"
-// @Param   Status   query   string  false       "合同状态,枚举值:'待审批','已审批','已驳回','已撤回'"
+// @Param   Status   query   string  false       "合同状态,枚举值:'待审批','已审批','已驳回','已撤回','已签回'"
 // @Param   UserId   query   string  false       "选择的申请人id"
 // @Param   Keyword   query   string  false       "搜索关键字"
 // @Param   KeywordEq   query   string  false       "搜索关键字(全等)"

+ 7 - 1
models/request/seal/sale.go

@@ -39,8 +39,14 @@ type CheckEditReq struct {
 	FileNum  int    `description:"文件份数"`
 }
 
-//作废用印请求
+// InvalidReq 作废用印请求
 type InvalidReq struct {
 	SealId            int  `description:"用印id"`
 	IsInvalidContract bool `description:"是否同步作废合同,默认:false"`
 }
+
+// UploadCheckBackFileReq 上传签回用印请求
+type UploadCheckBackFileReq struct {
+	FileUrl string `description:"签回用印url"`
+	SealId  int    `description:"用印id"`
+}

+ 6 - 5
models/response/seal/seal.go

@@ -27,11 +27,12 @@ type SealDetailResp struct {
 
 //OpButton 合同操作按钮
 type OpButton struct {
-	Approval  bool `description:"是否有审批权限"`
-	Invalid   bool `description:"是否有作废用印权限"`
-	Edit      bool `description:"是否有编辑用印权限"`
-	CheckEdit bool `description:"审核状态下是否有编辑用印权限"`
-	Cancel    bool `description:"是否有撤回用印权限"`
+	Approval   bool `description:"是否有审批权限"`
+	Invalid    bool `description:"是否有作废用印权限"`
+	Edit       bool `description:"是否有编辑用印权限"`
+	CheckEdit  bool `description:"审核状态下是否有编辑用印权限"`
+	Cancel     bool `description:"是否有撤回用印权限"`
+	UploadFile bool `description:"是否有上传签回文件权限"`
 }
 
 //RespSealList 列表数据

+ 4 - 3
models/tables/contract_approval/contract_approval.go

@@ -592,7 +592,7 @@ type SealApprovalList struct {
 	ContractId               int                     `description:"合同id"`
 	ContractApprovalRecordId int                     `description:"审批流id"`
 	ContractCode             string                  `description:"合同编号"`
-	Status                   string                  `description:"合同状态,枚举值:待审批','已审批','已驳回','已撤回',默认待审批"`
+	Status                   string                  `description:"合同状态,枚举值:待审批','已审批','已驳回','已撤回','已签回',默认待审批"`
 	ApproveStatus            string                  `json:"-" description:"审批单状态,枚举值:待审批','已审批','已驳回','已撤回',默认待审批"`
 	ApplyContent             string                  `description:"待审内容"`
 	ApplyUserId              int                     `description:"待审内容"`
@@ -611,6 +611,7 @@ type SealApprovalList struct {
 	ModifyTime               time.Time               `description:"最后一次修改的时间"`
 	ApproveTime              time.Time               `description:"审批时间"`
 	InvalidTime              time.Time               `description:"作废时间"`
+	CheckBackFileTime        time.Time               `description:"签回用印附件时间"`
 	StartDateStr             string                  `description:"合同开始日期(字符串类型)"`
 	EndDateStr               string                  `description:"合同结束日期(字符串类型)"`
 	CreateTimeStr            string                  `description:"发起审批的时间(字符串类型)"`
@@ -622,7 +623,7 @@ type SealApprovalList struct {
 //获取合同审批列表数据
 func GetSealApprovalList(childCondition, condition, joinCondition string, childPars, pars []interface{}, startSize, pageSize int) (list []*SealApprovalList, err error) {
 	o := orm.NewOrm()
-	sql := `SELECT a.contract_approval_id,a.contract_id,a.apply_content,a.approve_remark,a.apply_user_id,a.apply_user_name,a.curr_node_id,a.start_node_id,a.create_time,a.modify_time,a.status approval_status,c.status,c.seal_type,c.company_name,c.user_id,c.user_name,c.file_url,c.approve_time,c.invalid_time,c.code from contract_approval a
+	sql := `SELECT a.contract_approval_id,a.contract_id,a.apply_content,a.approve_remark,a.apply_user_id,a.apply_user_name,a.curr_node_id,a.start_node_id,a.create_time,a.modify_time,a.status approval_status,c.status,c.seal_type,c.company_name,c.user_id,c.user_name,c.file_url,c.approve_time,c.invalid_time,c.code,c.check_back_file_time from contract_approval a
 	join 
 	( SELECT max( contract_approval_id ) max_id,contract_id FROM contract_approval where 1=1 `
 	sql += childCondition
@@ -657,7 +658,7 @@ WHERE c.is_delete = 0  AND a.approval_type="seal" `
 }
 func GetSealApprovalListV2(childCondition, condition, orderBy string, childPars, pars []interface{}, startSize, pageSize int) (list []*SealApprovalList, err error) {
 	o := orm.NewOrm()
-	sql := `SELECT a.contract_approval_id,a.contract_id,a.apply_content,a.approve_remark,a.apply_user_id,a.apply_user_name,a.curr_node_id,a.start_node_id,a.create_time,a.modify_time,a.status approval_status,c.status,c.seal_type,c.company_name,c.user_id,c.user_name,c.file_url,c.approve_time,c.invalid_time,c.code from contract_approval a
+	sql := `SELECT a.contract_approval_id,a.contract_id,a.apply_content,a.approve_remark,a.apply_user_id,a.apply_user_name,a.curr_node_id,a.start_node_id,a.create_time,a.modify_time,a.status approval_status,c.status,c.seal_type,c.company_name,c.user_id,c.user_name,c.file_url,c.approve_time,c.invalid_time,c.code,c.check_back_file_time from contract_approval a
 	join 
 	( SELECT max( contract_approval_id ) max_id,contract_id FROM contract_approval where 1=1 `
 	sql += childCondition

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

@@ -32,7 +32,7 @@ func GetContractApprovalRecordById(contractApprovalRecordId int) (contractApprov
 	return
 }
 
-//根据审批单id获取所有审批流列表信息
+// GetContractApprovalRecordListByContractApprovalId 根据审批单id获取所有审批流列表信息
 func GetContractApprovalRecordListByContractApprovalId(contractApprovalId int) (contractApprovalRecordList []*ContractApprovalRecord, err error) {
 	o := orm.NewOrm()
 	sql := `select * from contract_approval_record where contract_approval_id=? order by node_id,contract_approval_record_id asc`
@@ -40,7 +40,7 @@ func GetContractApprovalRecordListByContractApprovalId(contractApprovalId int) (
 	return
 }
 
-//根据审批单id获取所有审批流列表信息
+// GetContractApprovalRecordListByContractApprovalIdAndNodeId 根据审批单id获取所有审批流列表信息
 func GetContractApprovalRecordListByContractApprovalIdAndNodeId(contractApprovalId, nodeId int) (contractApprovalRecordList []*ContractApprovalRecord, err error) {
 	o := orm.NewOrm()
 	sql := `select * from contract_approval_record where contract_approval_id=? and node_id=? order by node_id,contract_approval_record_id asc`

+ 32 - 22
models/tables/seal/seal.go

@@ -9,30 +9,32 @@ import (
 
 //Seal 用印结构体
 type Seal struct {
-	SealId         int       `orm:"column(seal_id);pk"`
-	Code           string    `description:"用印编号,长度32位"`
-	UserId         int       `description:"申请人id"`
-	UserName       string    `description:"申请人名称"`
-	Use            string    `description:"用印用途,枚举值:'销售合同', '渠道合同', '付款通知函', '招投标', '战略合作协议';默认:销售合同"`
-	CompanyName    string    `description:"客户名称,甲方名称,长度32位"`
-	UseCompanyName string    `description:"实际使用方客户名称,长度32位"`
-	CreditCode     string    `description:"社会统一信用代码,长度64位"`
-	ServiceType    string    `description:"业务类型,枚举值:'新签合同','续约合同','补充协议';默认:新签合同"`
-	SealType       string    `description:"加盖印章类型,枚举值:'合同章', '公章', '法人章';默认:合同章"`
-	Status         string    `description:"合同状态,枚举值:'待提交','待审批','已撤回','已审批','已驳回','已作废'"`
-	Remark         string    `description:"补充内容,长度255位"`
-	ApprovalRemark string    `description:"审核备注"`
-	FileUrl        string    `description:"文件附件地址"`
-	FileNum        int       `description:"文件附件份数"`
-	ContractId     int       `description:"系统合同id"`
-	IsDelete       int       `json:"-" description:"是否已经删除,0:未删除,1:已删除"`
-	ApproveTime    time.Time `description:"审批时间"`
-	InvalidTime    time.Time `description:"作废时间"`
-	ModifyTime     time.Time `description:"最近一次修改时间"`
-	CreateTime     time.Time `description:"添加时间"`
+	SealId            int       `orm:"column(seal_id);pk"`
+	Code              string    `description:"用印编号,长度32位"`
+	UserId            int       `description:"申请人id"`
+	UserName          string    `description:"申请人名称"`
+	Use               string    `description:"用印用途,枚举值:'销售合同', '渠道合同', '付款通知函', '招投标', '战略合作协议';默认:销售合同"`
+	CompanyName       string    `description:"客户名称,甲方名称,长度32位"`
+	UseCompanyName    string    `description:"实际使用方客户名称,长度32位"`
+	CreditCode        string    `description:"社会统一信用代码,长度64位"`
+	ServiceType       string    `description:"业务类型,枚举值:'新签合同','续约合同','补充协议';默认:新签合同"`
+	SealType          string    `description:"加盖印章类型,枚举值:'合同章', '公章', '法人章';默认:合同章"`
+	Status            string    `description:"合同状态,枚举值:'待提交','待审批','已撤回','已审批','已驳回','已作废','已签回'"`
+	Remark            string    `description:"补充内容,长度255位"`
+	ApprovalRemark    string    `description:"审核备注"`
+	FileUrl           string    `description:"文件附件地址"`
+	CheckBackFileUrl  string    `description:"已签回的文件地址"`
+	FileNum           int       `description:"文件附件份数"`
+	ContractId        int       `description:"系统合同id"`
+	IsDelete          int       `json:"-" description:"是否已经删除,0:未删除,1:已删除"`
+	ApproveTime       time.Time `description:"审批时间"`
+	InvalidTime       time.Time `description:"作废时间"`
+	ModifyTime        time.Time `description:"最近一次修改时间"`
+	CreateTime        time.Time `description:"添加时间"`
+	CheckBackFileTime time.Time `description:"签回用印附件时间"`
 }
 
-//GetSealInfoById 根据合同id获取合同信息
+//GetSealInfoById 根据用印id获取合同信息
 func GetSealInfoById(sealId int) (sealInfo *Seal, err error) {
 	o := orm.NewOrm()
 	sql := `select * from seal where seal_id = ? `
@@ -40,6 +42,14 @@ func GetSealInfoById(sealId int) (sealInfo *Seal, err error) {
 	return
 }
 
+//GetSealInfoByContractId 根据合同id获取合同信息
+func GetSealInfoByContractId(sealId int) (sealInfo *Seal, err error) {
+	o := orm.NewOrm()
+	sql := `select * from seal where contract_id = ? and status in ("已审批","已签回") order by seal_id asc limit 1`
+	err = o.Raw(sql, sealId).QueryRow(&sealInfo)
+	return
+}
+
 //AddSeal 用印添加
 func AddSeal(sealInfo *Seal) (err error) {
 	o := orm.NewOrm()

+ 1 - 1
services/contract/contract.go

@@ -85,7 +85,7 @@ func GetContractDetail(contractId int) (contractDetail *contract.ContractDetail,
 	return
 }
 
-// UploadCheckBackFile 上传签回合同附件
+// UploadCheckBackFile 更新上传签回合同附件
 func UploadCheckBackFile(contractId int, fileUrl string, opUser *custom.AdminWx) (err error) {
 	//获取合同信息
 	contractInfo, err := contract.GetContractById(contractId)

+ 68 - 10
services/seal/seal.go

@@ -3,7 +3,6 @@ package seal
 import (
 	"errors"
 	"fmt"
-	"github.com/astaxie/beego/logs"
 	"hongze/hongze_mobile_admin/models/custom"
 	sealResp "hongze/hongze_mobile_admin/models/response/seal"
 	"hongze/hongze_mobile_admin/models/tables/admin"
@@ -17,7 +16,7 @@ import (
 	"time"
 )
 
-//添加用印
+// AddSeal 添加用印
 func AddSeal(userId, contractId, fileNum int, userName, use, useCompanyName, companyName, creditCode, serviceType, sealType, remark, fileUrl string) (sealInfo *seal.Seal, err error) {
 	useList := []string{"销售合同", "渠道合同", "付款通知函", "招投标", "战略合作协议"}
 	serviceTypeList := []string{"新签合同", "续约合同", "补充协议"}
@@ -61,7 +60,7 @@ func AddSeal(userId, contractId, fileNum int, userName, use, useCompanyName, com
 	return
 }
 
-//修改用印
+// Edit 修改用印
 func Edit(sealId, userId, contractId, fileNum int, use, companyName, userCompanyName, creditCode, serviceType, sealType, remark, fileUrl string) (sealInfo *seal.Seal, err error) {
 	useList := []string{"销售合同", "渠道合同", "付款通知函", "招投标", "战略合作协议"}
 	serviceTypeList := []string{"新签合同", "续约合同", "补充协议"}
@@ -115,7 +114,7 @@ func Edit(sealId, userId, contractId, fileNum int, use, companyName, userCompany
 	return
 }
 
-//审批者修改用印
+// CheckEdit 审批者修改用印
 func CheckEdit(sealInfo *seal.Seal, approvalInfo *contract_approval.ContractApproval, approvalRecord *contract_approval_record.ContractApprovalRecord, fileNum int, fileUrl, use, sealType, remark string, opUser *custom.AdminWx) (err error) {
 	useList := []string{"销售合同", "渠道合同", "付款通知函", "招投标", "战略合作协议"}
 	sealTypeList := []string{"合同章", "公章", "法人章"}
@@ -220,7 +219,7 @@ func CheckEdit(sealInfo *seal.Seal, approvalInfo *contract_approval.ContractAppr
 	return
 }
 
-//审批人修改
+// checkEdit 审批人修改
 func checkEdit(sealInfo *seal.Seal, updateCol []string, approvalRecordId int, content string, opUser *custom.AdminWx) {
 	_ = sealInfo.Update(updateCol)
 
@@ -234,9 +233,9 @@ func checkEdit(sealInfo *seal.Seal, updateCol []string, approvalRecordId int, co
 	return
 }
 
-//作废用印
+// Invalid 作废用印
 func Invalid(sealId int, opUser *custom.AdminWx, isInvalidContract bool) (err error) {
-	//查询当前合同信息
+	//查询当前用印信息
 	sealInfo, err := seal.GetSealInfoById(sealId)
 	if err != nil {
 		if err.Error() == utils.ErrNoRow() {
@@ -269,16 +268,69 @@ func Invalid(sealId int, opUser *custom.AdminWx, isInvalidContract bool) (err er
 	if sealInfo.ContractId > 0 && isInvalidContract {
 		err = contractService.InvalidContract(sealInfo.ContractId, opUser)
 		if err != nil {
-			logs.Info("作废用印时,同步作废合同失败,Err:", err.Error())
+			utils.ApiLog.Println("作废用印时,同步作废合同失败,Err:", err.Error())
+		}
+	}
+
+	//获取最近一次提交的审批单信息
+	contractApproval, err := contract_approval.GetLastContractApprovalByContractId(sealInfo.SealId, "seal")
+	if err != nil {
+		err = nil
+		return
+	}
+	//如果有提测信息,那么需要给对应的审批人发送消息
+	if contractApproval != nil {
+		//作废后需要给审批者发送消息
+		contractApprovalRecordList, tmpErr := contract_approval_record.GetContractApprovalRecordListByContractApprovalId(contractApproval.ContractApprovalId)
+		if tmpErr != nil {
+			return
+		}
+		content := fmt.Sprint("作废", sealInfo.CompanyName, "用印申请")
+		for _, contractApprovalRecord := range contractApprovalRecordList {
+			if contractApprovalRecord.NodeType == "check" { //如果是审批人,那么需要发送消息给对方
+				//操作人信息
+				sysUserMobile := ""
+				sysUser, _ := admin.GetAdminById(contractApprovalRecord.ApproveUserId)
+				if sysUser != nil {
+					sysUserMobile = sysUser.Mobile
+				}
+				go services.AddCompanyApprovalMessage(opUser.AdminId, contractApprovalRecord.ApproveUserId, 0, contractApprovalRecord.ContractApprovalRecordId, 3, sourceType, 2, sealInfo.CompanyName, content, content, sysUserMobile)
+
+			}
 		}
 	}
+
 	//添加操作日志
 	//remark := "作废合同模板"
 	//_ = contract_operation_record.AddContractOperationRecord(nowContract.ContractId, opUser.AdminId, 0, "invalid", opUser.RealName, remark)
 	return
 }
 
-//获取审批流和权限
+// UploadCheckBackFile 上传签回用印附件(实际操作)
+func UploadCheckBackFile(sealId int, fileUrl string, opUser *custom.AdminWx) (sealInfo *seal.Seal, err error) {
+	//查询当前用印信息
+	sealInfo, err = seal.GetSealInfoById(sealId)
+	if err != nil {
+		return
+	}
+
+	//用印状态判断
+	if sealInfo.Status != "已审批" && sealInfo.Status != "已签回" {
+		err = errors.New("用印状态异常,不允许上传签回用印附件,当前用印状态:" + sealInfo.Status)
+		return
+	}
+	sealInfo.CheckBackFileUrl = fileUrl
+	sealInfo.Status = "已签回"
+	sealInfo.ModifyTime = time.Now()
+	sealInfo.CheckBackFileTime = time.Now()
+	err = sealInfo.Update([]string{"CheckBackFileUrl", "Status", "ModifyTime", "CheckBackFileTime"})
+	if err != nil {
+		return
+	}
+	return
+}
+
+// GetOpButton 获取审批流和权限
 func GetOpButton(sealInfo *seal.Seal, contractApprovalInfo *contract_approval.ContractApproval, opUser *custom.AdminWx) (sealOpButton sealResp.OpButton, flowNodeListResp [][]contract_approval_record.ContractApprovalRecord, err error) {
 	//审批流
 	approvalRecordList, err := contract_approval_record.GetContractApprovalRecordListByContractApprovalId(contractApprovalInfo.ContractApprovalId)
@@ -337,10 +389,16 @@ func GetOpButton(sealInfo *seal.Seal, contractApprovalInfo *contract_approval.Co
 	}
 
 	//作废权限
-	if (opUser.RoleTypeCode == utils.ROLE_TYPE_CODE_COMPLIANCE || opUser.AdminId == sealInfo.UserId) && sealInfo.Status == "已审批" {
+	if opUser.AdminId == sealInfo.UserId && sealInfo.Status == "已审批" {
 		sealOpButton.Invalid = true
 	}
 
+	//是否具有签回合同用印权限
+	uploadStatus := []string{"已审批", "已签回"}
+	if opUser.RoleTypeCode == utils.ROLE_TYPE_CODE_COMPLIANCE && strings.Contains(strings.Join(uploadStatus, ","), sealInfo.Status) {
+		sealOpButton.UploadFile = true
+	}
+
 	//编辑权限
 	editStatus := []string{"已驳回", "待提交", "已撤回"}
 	if opUser.AdminId == sealInfo.UserId && strings.Contains(strings.Join(editStatus, ","), sealInfo.Status) {

+ 1 - 0
services/wechat.go

@@ -55,6 +55,7 @@ func WxGetToken() (item *WxToken, err error) {
 	if err != nil {
 		return nil, err
 	}
+	item = &WxToken{}
 	err = json.Unmarshal(result, &item)
 	fmt.Println("WxGetToken start")
 	fmt.Println(string(result))

+ 2 - 2
services/wechat_send_msg.go

@@ -89,13 +89,13 @@ func sendTemplateMsg(sendUrl string, sendMap map[string]interface{}, items []*wx
 		data, err := json.Marshal(sendMap)
 		if err != nil {
 			fmt.Println("SendTemplateMsgOne Marshal Err:", err.Error())
-			utils.FileLog.Info("SendTemplateMsgOne Marshal Err:%s", err.Error())
+			utils.FileLog.Info(fmt.Sprintf("SendTemplateMsgOne Marshal Err:%s", err.Error()))
 			return err
 		}
 		err = toSendTemplateMsg(sendUrl, data)
 		if err != nil {
 			fmt.Println("send err:", err.Error())
-			utils.FileLog.Info("ToSendTemplateMsg Err:%s", err.Error())
+			utils.FileLog.Info(fmt.Sprintf("ToSendTemplateMsg Err:%s", err.Error()))
 		}
 	}
 	return