Browse Source

Merge branch 'crm1.0' into debug

Roc 3 years ago
parent
commit
4b3fac8246

+ 23 - 0
controllers/contract.go

@@ -253,3 +253,26 @@ func (this *ContractCommon) List() {
 		Paging: page,
 	}, "获取成功")
 }
+
+// @Title 作废合同
+// @Description 作废合同接口
+// @Param   ContractId   query   int  true       "合同id"
+// @Success Ret=200 作废成功
+// @router /invalid [get]
+func (this *ContractCommon) Invalid() {
+	contractId, _ := this.GetInt("ContractId")
+	//合同id
+	if contractId <= 0 {
+		this.FailWithMessage("合同id必传!", "合同id必传!")
+		return
+	}
+
+	err := contractService.InvalidContract(contractId, this.AdminWx)
+	if err != nil {
+		this.FailWithMessage("作废合同失败!", "作废合同失败,Err:"+err.Error())
+		return
+	}
+
+	this.OkWithMessage("作废成功")
+	return
+}

+ 1 - 0
controllers/contract_approval.go

@@ -276,6 +276,7 @@ func (this *ContractApprovalCommon) Detail() {
 		flowNodeListResp = append(flowNodeListResp, flowNodeMap[key])
 	}
 
+	//是否具有签回合同权限
 	uploadStatus := []string{"已审批", "已签回"}
 	if this.AdminWx.RoleTypeCode == utils.ROLE_TYPE_CODE_COMPLIANCE && strings.Contains(strings.Join(uploadStatus, ","), contractInfo.Status) {
 		contractOpButton.UploadFile = true

+ 29 - 0
controllers/seal.go

@@ -181,6 +181,35 @@ func (this *SealCommon) Detail() {
 	this.OkDetailed(resp, "获取成功")
 }
 
+// @Title 作废合同
+// @Description 作废合同接口
+// @Param   SealId   query   int  true       "用印id"
+// @Success Ret=200 作废成功
+// @router /invalid [get]
+func (this *SealCommon) Invalid() {
+	var req sealReq.InvalidReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		this.FailWithMessage("参数解析异常!", "参数解析失败,Err:"+err.Error())
+		return
+	}
+
+	//用印id
+	if req.SealId <= 0 {
+		this.FailWithMessage("用印id必传!", "用印id必传!")
+		return
+	}
+
+	err = sealService.Invalid(req.SealId, this.AdminWx, req.IsInvalidContract)
+	if err != nil {
+		this.FailWithMessage("作废用印失败!", "作废用印失败,Err:"+err.Error())
+		return
+	}
+
+	this.OkWithMessage("作废成功")
+	return
+}
+
 // @Title 根据客户名称获取已存在系统中客户名称列表
 // @Description 获取合同详情接口
 // @Param   CompanyName   query   string  true       "客户名称"

+ 13 - 0
controllers/seal_approval.go

@@ -266,9 +266,15 @@ func (this *SealApprovalCommon) Detail() {
 	for _, approvalRecord := range approvalRecordList {
 		//如果当前节点正好是该节点,同时审批单状态是待审批状态,然后当前账号又有权限,该账号也正是审批人,那么允许审批操作
 		if contractApprovalInfo.CurrNodeId == approvalRecord.NodeId && contractApprovalInfo.Status == "待审批" {
+			//审核权限
 			if this.AdminWx.AdminId == approvalRecord.ApproveUserId && approvalRecord.NodeType == "check" {
 				sealOpButton.Approval = true
 			}
+
+			//合规在审批过程中具有 部分修改权限
+			if this.AdminWx.AdminId == approvalRecord.ApproveUserId && this.AdminWx.RoleTypeCode == utils.ROLE_TYPE_CODE_COMPLIANCE && approvalRecord.NodeType == "check" {
+				sealOpButton.CheckEdit = true
+			}
 		}
 		if tmpFlowNodeList, ok := flowNodeMap[approvalRecord.NodeId]; ok {
 			flowNodeMap[approvalRecord.NodeId] = append(tmpFlowNodeList, *approvalRecord)
@@ -289,6 +295,13 @@ func (this *SealApprovalCommon) Detail() {
 	if (this.AdminWx.RoleTypeCode == utils.ROLE_TYPE_CODE_COMPLIANCE || this.AdminWx.AdminId == sealInfo.UserId) && sealInfo.Status == "已审批" {
 		sealOpButton.Invalid = true
 	}
+
+	//编辑权限
+	editStatus := []string{"已驳回", "待提交", "已撤回"}
+	if this.AdminWx.RoleTypeCode == utils.ROLE_TYPE_CODE_COMPLIANCE && strings.Contains(strings.Join(editStatus, ","), sealInfo.Status) {
+		sealOpButton.Edit = true
+	}
+
 	resp := sealResp.SealDetailResp{
 		SealDetail:   sealDetail,
 		FlowNodeList: flowNodeListResp,

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

@@ -28,3 +28,9 @@ type EditReq struct {
 	FileUrl        string `description:"文件附件地址"`
 	FileNum        int    `description:"文件份数"`
 }
+
+//作废用印请求
+type InvalidReq struct {
+	SealId            int  `description:"用印id"`
+	IsInvalidContract bool `description:"是否同步作废合同,默认:false"`
+}

+ 4 - 2
models/response/seal/seal.go

@@ -26,6 +26,8 @@ type SealDetailResp struct {
 
 //合同操作按钮
 type OpButton struct {
-	Approval bool `description:"是否有审批权限"`
-	Invalid  bool `description:"是否有作废合同权限"`
+	Approval  bool `description:"是否有审批权限"`
+	Invalid   bool `description:"是否有作废合同权限"`
+	Edit      bool `description:"是否有编辑合同权限"`
+	CheckEdit bool `description:"审核状态下是否有编辑合同权限"`
 }

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

@@ -342,7 +342,7 @@ func InvalidContract(contractInfo *Contract) (err error) {
 	contractInfo.Status = "已作废"
 	contractInfo.ModifyTime = time.Now()
 	//合同数据入库
-	_, err = o.Update(contractInfo)
+	_, err = o.Update(contractInfo, "Status", "ModifyTime")
 	if err != nil {
 		return
 	}

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

@@ -66,11 +66,11 @@ func DeleteSeal(sealInfo *Seal) (err error) {
 }
 
 //作废用印
-func InvalidSeal(sealInfo *Seal) (err error) {
+func Invalid(sealInfo *Seal) (err error) {
 	sealInfo.Status = "已作废"
 	sealInfo.ModifyTime = time.Now()
 	//修改用印数据入库
-	err = sealInfo.Update([]string{"IsDelete", "ModifyTime"})
+	err = sealInfo.Update([]string{"Status", "ModifyTime"})
 	return
 }
 

+ 36 - 0
services/contract/contract.go

@@ -11,6 +11,42 @@ import (
 	"hongze/hongze_mobile_admin/utils"
 )
 
+//作废合同
+func InvalidContract(contractId int, opUser *custom.AdminWx) (err error) {
+	//查询当前合同信息
+	nowContract, err := contract.GetContractById(contractId)
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			err = errors.New(fmt.Sprint("根据合同编号:", contractId, " 找不到初始合同"))
+		}
+		return
+	}
+	if nowContract.SellerId != opUser.AdminId && opUser.RoleTypeCode != utils.ROLE_TYPE_CODE_COMPLIANCE {
+		err = errors.New("当前账号无操作权限")
+		return
+	}
+	if nowContract.Status != "已审批" {
+		err = errors.New("合同状态异常,不允许作废,当前合同状态:" + nowContract.Status)
+		return
+	}
+
+	//如果删除状态 >0,那么代表已经被删除了
+	if nowContract.IsDelete > 0 {
+		err = errors.New("该合同已删除")
+		return
+	}
+
+	//合同作废
+	err = contract.InvalidContract(nowContract)
+	if err != nil {
+		return
+	}
+	//添加操作日志
+	remark := "作废合同模板"
+	_ = contract_operation_record.AddContractOperationRecord(nowContract.ContractId, opUser.AdminId, 0, "invalid", opUser.RealName, remark)
+	return
+}
+
 //根据id获取合同详情(包含服务)
 func GetContractDetail(contractId int) (contractDetail *contract.ContractDetail, err error) {
 	contractDetail, err = contract.GetContractDetailById(contractId)

+ 47 - 0
services/seal/seal.go

@@ -3,7 +3,10 @@ package seal
 import (
 	"errors"
 	"fmt"
+	"github.com/astaxie/beego/logs"
+	"hongze/hongze_mobile_admin/models/custom"
 	"hongze/hongze_mobile_admin/models/tables/seal"
+	contractService "hongze/hongze_mobile_admin/services/contract"
 	"hongze/hongze_mobile_admin/utils"
 	"strings"
 	"time"
@@ -106,3 +109,47 @@ func Edit(sealId, userId, contractId, fileNum int, use, companyName, userCompany
 
 	return
 }
+
+//作废用印
+func Invalid(sealId int, opUser *custom.AdminWx, isInvalidContract bool) (err error) {
+	//查询当前合同信息
+	sealInfo, err := seal.GetSealInfoById(sealId)
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			err = errors.New(fmt.Sprint("根据用印编号:", sealId, " 找不到初始用印"))
+		}
+		return
+	}
+	if sealInfo.UserId != opUser.AdminId && opUser.RoleTypeCode != utils.ROLE_TYPE_CODE_COMPLIANCE {
+		err = errors.New("当前账号无操作权限")
+		return
+	}
+	if sealInfo.Status != "已审批" {
+		err = errors.New("用印状态异常,不允许作废,当前用印状态:" + sealInfo.Status)
+		return
+	}
+
+	//如果删除状态 >0,那么代表已经被删除了
+	if sealInfo.IsDelete > 0 {
+		err = errors.New("该用印已删除")
+		return
+	}
+
+	//用印作废
+	err = seal.Invalid(sealInfo)
+	if err != nil {
+		return
+	}
+
+	//如果是系统合同,同时需要同步作废合同时,那么逻辑处理
+	if sealInfo.ContractId > 0 && isInvalidContract {
+		err = contractService.InvalidContract(sealInfo.ContractId, opUser)
+		if err != nil {
+			logs.Info("作废用印时,同步作废合同失败,Err:", err.Error())
+		}
+	}
+	//添加操作日志
+	//remark := "作废合同模板"
+	//_ = contract_operation_record.AddContractOperationRecord(nowContract.ContractId, opUser.AdminId, 0, "invalid", opUser.RealName, remark)
+	return
+}