فهرست منبع

Merge branch 'crm1.0' into debug

Roc 3 سال پیش
والد
کامیت
4b6703d829
4فایلهای تغییر یافته به همراه219 افزوده شده و 11 حذف شده
  1. 49 0
      controllers/seal.go
  2. 9 0
      models/request/seal/sale.go
  3. 54 11
      services/seal/approval.go
  4. 107 0
      services/seal/seal.go

+ 49 - 0
controllers/seal.go

@@ -104,6 +104,55 @@ func (this *SealCommon) Edit() {
 	}, "发起重申成功")
 }
 
+// @Title 审批者编辑用印
+// @Description 审批者编辑用印接口
+// @Param	request	body seal.EditReq true "type json string"
+// @Success 200 {object} seal.AddSealResp
+// @router /check_edit [post]
+func (this *SealCommon) CheckEdit() {
+	var req sealReq.CheckEditReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		this.FailWithMessage("参数解析异常!", "参数解析失败,Err:"+err.Error())
+		return
+	}
+
+	//参数校验
+	paramVerify := utils.Rules{
+		"SealId":      {utils.NotEmpty()},
+		"Use":         {utils.NotEmpty()},
+		"CompanyName": {utils.NotEmpty()},
+		"CreditCode":  {utils.NotEmpty()},
+		"ServiceType": {utils.NotEmpty()},
+		"SealType":    {utils.NotEmpty()},
+		"FileUrl":     {utils.NotEmpty()},
+	}
+	err = utils.Verify(req, paramVerify, utils.LANG_CN)
+
+	sealId := req.SealId
+	if sealId <= 0 {
+		this.FailWithMessage("请传入用印单编号!", "请传入用印单编号!")
+		return
+	}
+
+	//数据校验(校验是否具有审批权限)
+	sealInfo, approvalInfo, approvalRecord, err := sealService.CheckApproveAuth(sealId, this.AdminWx)
+
+	err = sealService.CheckEdit(sealInfo, approvalInfo, approvalRecord, req.FileNum, req.Use, req.SealType, req.Remark, this.AdminWx)
+	if err != nil {
+		this.FailWithMessage("修改合同失败!", "修改合同失败,Err:"+err.Error())
+		return
+	}
+	tmpErr := sealService.Apply(sealInfo)
+	if tmpErr != nil {
+		this.FailWithMessage("发起重申失败!", "发起重申失败,Err:"+tmpErr.Error())
+		return
+	}
+	this.OkDetailed(sealResp.AddSealResp{
+		SealId: sealInfo.SealId,
+	}, "发起重申成功")
+}
+
 // @Title 获取用印详情
 // @Description 获取用印详情接口
 // @Param   SealId   query   int  true       "用印id"

+ 9 - 0
models/request/seal/sale.go

@@ -29,6 +29,15 @@ type EditReq struct {
 	FileNum        int    `description:"文件份数"`
 }
 
+//审批者编辑用印请求
+type CheckEditReq struct {
+	SealId   int    `description:"用印单id"`
+	Use      string `description:"用印用途,枚举值:'销售合同', '渠道合同', '付款通知函', '招投标', '战略合作协议';默认:销售合同"`
+	SealType string `description:"加盖印章类型,枚举值:'合同章', '公章', '法人章';默认:合同章"`
+	Remark   string `description:"备注,长度255位"`
+	FileNum  int    `description:"文件份数"`
+}
+
 //作废用印请求
 type InvalidReq struct {
 	SealId            int  `description:"用印id"`

+ 54 - 11
services/seal/approval.go

@@ -18,10 +18,63 @@ import (
 	"time"
 )
 
+//消息来源
 var sourceType = 3
 
 //提交审批
 func Apply(sealInfo *seal.Seal) (err error) {
+	//发起审批
+	approval, contractApprovalRecordList, err := apply(sealInfo)
+	if err != nil {
+		return
+	}
+
+	//待办通知
+	{
+		//发送消息下级审批人
+		go messageToNodeUser(contractApprovalRecordList[0].NodeId, approval.ApplyUserId, approval.ContractApprovalId, 1, 1, sealInfo.CompanyName, sealInfo.Use)
+
+		//go messageToAllCcUser(approval.ApplyUserId, approval.ContractApprovalId, 1, 1, sealInfo.CompanyName, sealInfo.Use)
+	}
+	return
+}
+
+//审批人修改后重新提交审批单
+func CheckApply(sealInfo *seal.Seal, opUser *custom.AdminWx) (err error) {
+	//发起审批
+	approvalInfo, contractApprovalRecordList, err := apply(sealInfo)
+	if err != nil {
+		return
+	}
+
+	//校验一级审批人是否与当前提交人一致,如果一致的话,那么审批通过且不发送消息给一级审批人
+	var contractApprovalRecord *contract_approval_record.ContractApprovalRecord
+	for _, tmpContractApprovalRecord := range contractApprovalRecordList {
+		if tmpContractApprovalRecord.NodeId == approvalInfo.CurrNodeId && tmpContractApprovalRecord.ApproveUserId == opUser.AdminId {
+			contractApprovalRecord = tmpContractApprovalRecord
+		}
+	}
+
+	//如果一级审批人和当前提交人一致,那么审批通过,且不发送消息给一级审批人
+	if contractApprovalRecord != nil {
+		err = Approved(sealInfo, approvalInfo, contractApprovalRecord, opUser, "")
+	} else {
+		//如果一级审批人和当前提交人不一致,那么发送消息给一级审批人,重走审批流程
+		//待办通知
+		{
+			//发送消息下级审批人
+			go messageToNodeUser(contractApprovalRecordList[0].NodeId, approvalInfo.ApplyUserId, approvalInfo.ContractApprovalId, 1, 1, sealInfo.CompanyName, sealInfo.Use)
+
+			//发送消息给所有的抄送人
+			//go messageToAllCcUser(approval.ApplyUserId, approval.ContractApprovalId, 1, 1, sealInfo.CompanyName, sealInfo.Use)
+		}
+	}
+
+	return
+}
+
+//发起审批
+func apply(sealInfo *seal.Seal) (approval *contract_approval.ContractApproval, contractApprovalRecordList []*contract_approval_record.ContractApprovalRecord, err error) {
 	//用印状态判断
 	ignoreStatus := []string{"待提交", "已撤回", "已驳回"}
 	if !strings.Contains(strings.Join(ignoreStatus, ","), sealInfo.Status) {
@@ -52,7 +105,7 @@ func Apply(sealInfo *seal.Seal) (err error) {
 	}
 
 	//校验是否存在待审批的审批单(其实没有多大意义,只是为了 异常数据校验)
-	approval := &contract_approval.ContractApproval{
+	approval = &contract_approval.ContractApproval{
 		ContractId:     sealInfo.SealId,
 		ApprovalType:   "seal",
 		Status:         "待审批",
@@ -74,7 +127,6 @@ func Apply(sealInfo *seal.Seal) (err error) {
 		err = errors.New("用印异常,不允许提交审批,存在待审核的审批单")
 		return
 	}
-	contractApprovalRecordList := make([]*contract_approval_record.ContractApprovalRecord, 0)
 
 	ApproveUserMap := make(map[int]approval_flow_node.User)
 	for _, nodeItem := range flowItemInfo.NodeList {
@@ -106,15 +158,6 @@ func Apply(sealInfo *seal.Seal) (err error) {
 	if err != nil {
 		return
 	}
-
-	//待办通知
-	{
-		//发送消息下级审批人
-		go messageToNodeUser(contractApprovalRecordList[0].NodeId, approval.ApplyUserId, approval.ContractApprovalId, 1, 1, sealInfo.CompanyName, sealInfo.Use)
-
-		//发送消息给所有的抄送人
-		//go messageToAllCcUser(approval.ApplyUserId, approval.ContractApprovalId, 1, 1, sealInfo.CompanyName, sealInfo.Use)
-	}
 	return
 }
 

+ 107 - 0
services/seal/seal.go

@@ -6,9 +6,11 @@ import (
 	"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"
 	"hongze/hongze_mobile_admin/models/tables/contract_approval"
 	"hongze/hongze_mobile_admin/models/tables/contract_approval_record"
 	"hongze/hongze_mobile_admin/models/tables/seal"
+	"hongze/hongze_mobile_admin/services"
 	contractService "hongze/hongze_mobile_admin/services/contract"
 	"hongze/hongze_mobile_admin/utils"
 	"strings"
@@ -113,6 +115,111 @@ func Edit(sealId, userId, contractId, fileNum int, use, companyName, userCompany
 	return
 }
 
+//审批者修改用印
+func CheckEdit(sealInfo *seal.Seal, approvalInfo *contract_approval.ContractApproval, approvalRecord *contract_approval_record.ContractApprovalRecord, fileNum int, use, sealType, remark string, opUser *custom.AdminWx) (err error) {
+	useList := []string{"销售合同", "渠道合同", "付款通知函", "招投标", "战略合作协议"}
+	sealTypeList := []string{"合同章", "公章", "法人章"}
+	if !strings.Contains(strings.Join(useList, ","), use) {
+		err = errors.New("用印用途异常")
+		return
+	}
+	if !strings.Contains(strings.Join(sealTypeList, ","), sealType) {
+		err = errors.New("加盖印章类型异常")
+		return
+	}
+
+	//判断是否是合规账号
+	if opUser.RoleTypeCode != utils.ROLE_TYPE_CODE_COMPLIANCE {
+		err = errors.New("当前账号无修改权限")
+		return
+	}
+
+	//用印状态判断
+	ignoreStatus := []string{"待提交", "已撤回", "已驳回"}
+	if !strings.Contains(strings.Join(ignoreStatus, ","), sealInfo.Status) {
+		err = errors.New("用印状态异常,不允许修改,当前用印状态:" + sealInfo.Status)
+		return
+	}
+
+	//变更字段判断
+	updateCol := make([]string, 0)
+	updateContent := make([]string, 0)
+	if sealInfo.Use != use {
+		updateCol = append(updateCol, "Use")
+		updateContent = append(updateContent, "用印用途")
+	}
+	if sealInfo.SealType != sealType {
+		updateCol = append(updateCol, "SealType")
+		updateContent = append(updateContent, "加盖何种印章")
+	}
+	if sealInfo.Remark != remark {
+		updateCol = append(updateCol, "Remark")
+		updateContent = append(updateContent, "备注")
+	}
+	if sealInfo.FileNum != fileNum {
+		updateCol = append(updateCol, "FileNum")
+		updateContent = append(updateContent, "文件份数")
+	}
+	if len(updateCol) <= 0 {
+		err = errors.New("没有变更信息")
+		return
+	}
+	content := "用印修改:" + opUser.AdminName + "修改了" + strings.Join(updateContent, "、")
+
+	//如果变更了盖章类型(涉及到审批流程变更),那么需要变更审批流
+	//变更审批流:先驳回用印申请,再修改用印,再发消息给申请人,再替申请人重新发起申请,
+	//然后遍历审批流程,当前操作人节点之前的全部审核通过,最后通过当前操作人的节点(改成如果一级审批人如果是自己,那么直接通过这一级审批,否则不通过,让审批单重走流程)
+	if (sealInfo.SealType == "合同章" && strings.Contains("公章,法人章", sealType)) || (strings.Contains("公章,法人章", sealInfo.SealType) && sealType == "合同章") {
+		//先驳回
+		err = Reject(sealInfo, approvalInfo, approvalRecord, opUser, "")
+		if err != nil {
+			return
+		}
+		//修改用印申请,给申请人发消息
+		sealInfo.Use = use
+		sealInfo.SealType = sealType
+		sealInfo.Remark = remark
+		sealInfo.FileNum = fileNum
+		sealInfo.ModifyTime = time.Now()
+		checkEdit(sealInfo, updateCol, approvalRecord.ContractApprovalRecordId, content, opUser)
+
+		//重新发起申请
+		err = CheckApply(sealInfo, opUser)
+		if err != nil {
+			return
+		}
+
+	} else { //修改用印基础信息 并 审批通过
+
+		//修改用印申请,给申请人发消息
+		sealInfo.Use = use
+		sealInfo.SealType = sealType
+		sealInfo.Remark = remark
+		sealInfo.FileNum = fileNum
+		sealInfo.ModifyTime = time.Now()
+		checkEdit(sealInfo, updateCol, approvalRecord.ContractApprovalRecordId, content, opUser)
+
+		//审核通过
+		err = Approved(sealInfo, approvalInfo, approvalRecord, opUser, "")
+
+	}
+
+	return
+}
+
+func checkEdit(sealInfo *seal.Seal, updateCol []string, approvalRecordId int, content string, opUser *custom.AdminWx) {
+	_ = sealInfo.Update(updateCol)
+
+	//给用印人,发送修改消息
+	sysUserMobile := ""
+	sysUser, _ := admin.GetAdminById(opUser.AdminId)
+	if sysUser != nil {
+		sysUserMobile = sysUser.Mobile
+	}
+	go services.AddCompanyApprovalMessage(opUser.AdminId, sealInfo.UserId, 0, approvalRecordId, 3, sourceType, 2, sealInfo.CompanyName, content, content, sysUserMobile)
+	return
+}
+
 //作废用印
 func Invalid(sealId int, opUser *custom.AdminWx, isInvalidContract bool) (err error) {
 	//查询当前合同信息