hsun 2 years ago
parent
commit
fc88897424
3 changed files with 88 additions and 32 deletions
  1. 76 21
      controller/contract/register.go
  2. 4 0
      models/fms/contract_register.go
  3. 8 11
      services/fms/contract_register.go

+ 76 - 21
controller/contract/register.go

@@ -247,7 +247,7 @@ func (rg *RegisterController) Add(c *gin.Context) {
 		logItem := new(fms.ContractRegisterLog)
 		logItem.ContractRegisterId = ob.ContractRegisterId
 		logItem.AdminId = int(adminInfo.AdminId)
-		logItem.AdminName = adminInfo.AdminName
+		logItem.AdminName = adminInfo.RealName
 		logItem.OpData = opData
 		logItem.OpType = fms.ContractRegisterOpTypeSave
 		logItem.CreateTime = nowTime
@@ -371,7 +371,7 @@ func (rg *RegisterController) Edit(c *gin.Context) {
 		logItem := new(fms.ContractRegisterLog)
 		logItem.ContractRegisterId = item.ContractRegisterId
 		logItem.AdminId = int(adminInfo.AdminId)
-		logItem.AdminName = adminInfo.AdminName
+		logItem.AdminName = adminInfo.RealName
 		logItem.OpData = opData
 		logItem.OpType = fms.ContractRegisterOpTypeSave
 		logItem.CreateTime = nowTime
@@ -434,7 +434,7 @@ func (rg *RegisterController) Del(c *gin.Context) {
 		logItem := new(fms.ContractRegisterLog)
 		logItem.ContractRegisterId = req.ContractRegisterId
 		logItem.AdminId = int(adminInfo.AdminId)
-		logItem.AdminName = adminInfo.AdminName
+		logItem.AdminName = adminInfo.RealName
 		logItem.OpData = opData
 		logItem.OpType = fms.ContractRegisterOpTypeDel
 		logItem.CreateTime = nowTime
@@ -572,7 +572,7 @@ func (rg *RegisterController) UpdateStatus(c *gin.Context) {
 		logItem := new(fms.ContractRegisterLog)
 		logItem.ContractRegisterId = req.ContractRegisterId
 		logItem.AdminId = int(adminInfo.AdminId)
-		logItem.AdminName = adminInfo.AdminName
+		logItem.AdminName = adminInfo.RealName
 		logItem.OpData = opData
 		logItem.OpType = fms.ContractRegisterOpTypeStatus
 		logItem.CreateTime = nowTime
@@ -660,7 +660,7 @@ func (rg *RegisterController) Invoice(c *gin.Context) {
 		logItem := new(fms.ContractRegisterLog)
 		logItem.ContractRegisterId = req.ContractRegisterId
 		logItem.AdminId = int(adminInfo.AdminId)
-		logItem.AdminName = adminInfo.AdminName
+		logItem.AdminName = adminInfo.RealName
 		logItem.OpData = opData
 		logItem.OpType = opType
 		logItem.CreateTime = time.Now().Local()
@@ -671,8 +671,78 @@ func (rg *RegisterController) Invoice(c *gin.Context) {
 	resp.Ok("操作成功", c)
 }
 
-// 导出
+// Export
+// @Title 合同登记-导出
+// @Description 合同登记-导出
+// @Param   Keyword			query	string	false	"关键词"
+// @Param   StartDate		query	string	false	"合同开始日期"
+// @Param   EndDate			query	string	false	"合同结束日期"
+// @Param   ServiceType		query	int		false	"套餐类型"
+// @Param   ContractType	query	int		false	"合同类型"
+// @Param   RegisterStatus	query	int		false	"登记状态"
+// @Success 200 string "操作成功"
+// @router /contract/register/export [get]
 func (rg *RegisterController) Export(c *gin.Context) {
+	var req fms.ContractRegisterListReq
+	if e := c.BindQuery(&req); e != nil {
+		err, ok := e.(validator.ValidationErrors)
+		if !ok {
+			resp.FailData("参数解析失败", "Err:"+e.Error(), c)
+			return
+		}
+		resp.FailData("参数解析失败", err.Translate(global.Trans), c)
+		return
+	}
+
+	cond := `1 = 1`
+	pars := make([]interface{}, 0)
+	if req.Keyword != "" {
+		kw := "%" + req.Keyword + "%"
+		cond += ` AND (company_name LIKE ? OR contract_code LIKE ? OR seller_name LIKE ?)`
+		pars = append(pars, kw, kw, kw)
+	}
+	if req.StartDate != "" && req.EndDate != "" {
+		cond += ` AND (create_time BETWEEN ? AND ?)`
+		pars = append(pars, req.StartDate, req.EndDate)
+	}
+	if req.ContractType != 0 {
+		cond += ` AND contract_type = ?`
+		pars = append(pars, req.ContractType)
+	}
+	if req.RegisterStatus != 0 {
+		cond += ` AND register_status = ?`
+		pars = append(pars, req.RegisterStatus)
+	}
+	if req.ServiceType != 0 {
+		registerIds, e := fms.GetContractRegisterIdsByTempId(req.ServiceType)
+		if e != nil {
+			resp.FailMsg("获取失败", "获取合同登记IDs失败, Err: "+e.Error(), c)
+			return
+		}
+		if len(registerIds) > 0 {
+			cond += ` AND contract_register_id IN ?`
+			pars = append(pars, registerIds)
+		} else {
+			cond += ` AND 1 = 2`
+		}
+	}
+
+	// 获取列表数据
+	cr := new(fms.ContractRegister)
+	list, e := cr.List(cond, pars)
+	if e != nil {
+		resp.FailData("获取合同列表失败", "Err:"+e.Error(), c)
+		return
+	}
+	if len(list) == 0 {
+		resp.Fail("无有效数据可导出", c)
+		return
+	}
+	registerIds := make([]int, 0)
+	for i := range list {
+		registerIds = append(registerIds, list[i].ContractRegisterId)
+	}
+
 	// 获取小套餐品种
 	cpCond := `product_id = ? AND permission_name <> ?`
 	cpPars := make([]interface{}, 0)
@@ -696,20 +766,6 @@ func (rg *RegisterController) Export(c *gin.Context) {
 	//	return
 	//}
 
-	// 获取列表数据
-	cond := ``
-	pars := make([]interface{}, 0)
-	cr := new(fms.ContractRegister)
-	list, e := cr.List(cond, pars)
-	if e != nil {
-		resp.FailData("获取合同列表失败", "Err:"+e.Error(), c)
-		return
-	}
-	registerIds := make([]int, 0)
-	for i := range list {
-		registerIds = append(registerIds, list[i].ContractRegisterId)
-	}
-
 	// 套餐/开票/到款列表
 	serviceMap := make(map[int][]*fms.ContractService)
 	serviceChartPermissionsMap := make(map[int][]int)
@@ -983,7 +1039,6 @@ func (rg *RegisterController) Export(c *gin.Context) {
 		}
 	}
 
-
 	// 输出文件
 	var buffer bytes.Buffer
 	_ = xlsxFile.Write(&buffer)

+ 4 - 0
models/fms/contract_register.go

@@ -101,6 +101,8 @@ type ContractRegisterListReq struct {
 type ContractRegisterItem struct {
 	ContractRegisterId int     `json:"contract_register_id" description:"登记ID"`
 	ContractCode       string  `json:"contract_code" description:"合同编号"`
+	CrmContractId      int     `json:"crm_contract_id" description:"CRM系统-合同ID"`
+	ContractSource     int     `json:"contract_source" description:"合同来源: 0-非系统合同导入; 1-CRM合同导入"`
 	CompanyName        string  `json:"company_name" description:"客户名称"`
 	SellerId           int     `json:"seller_id" description:"CRM系统-销售ID"`
 	SellerName         string  `json:"seller_name" description:"CRM系统-销售名称"`
@@ -317,6 +319,8 @@ func formatContractRegister2Item(item *ContractRegister) (formatItem *ContractRe
 	formatItem = new(ContractRegisterItem)
 	formatItem.ContractRegisterId = item.ContractRegisterId
 	formatItem.ContractCode = item.ContractCode
+	formatItem.CrmContractId = item.CrmContractId
+	formatItem.ContractSource = item.ContractSource
 	formatItem.CompanyName = item.CompanyName
 	formatItem.SellerId = item.SellerId
 	formatItem.SellerName = item.SellerName

+ 8 - 11
services/fms/contract_register.go

@@ -26,8 +26,7 @@ func CheckContractRegisterAmount(registerId int) {
 		err = errors.New("获取合同登记信息失败, Err: " + e.Error())
 		return
 	}
-	amount := decimal.NewFromFloat(item.ContractAmount)
-	amount.Round(2)
+	amount := decimal.NewFromFloat(item.ContractAmount).Round(2)
 
 	// 获取开票/到款信息
 	invoiceCond := `contract_register_id = ?`
@@ -39,19 +38,17 @@ func CheckContractRegisterAmount(registerId int) {
 		err = errors.New("获取开票到款信息失败, Err: " + e.Error())
 		return
 	}
-	invoiceAmount := decimal.NewFromFloat(0.00)
-	paymentAmount := decimal.NewFromFloat(0.00)
+	invoiceAmount := decimal.NewFromFloat(0).Round(2)
+	paymentAmount := decimal.NewFromFloat(0).Round(2)
 	for i := range invoiceList {
-		a := decimal.NewFromFloat(invoiceList[i].Amount)
+		a := decimal.NewFromFloat(invoiceList[i].Amount).Round(2)
 		if invoiceList[i].InvoiceType == fms.ContractInvoiceTypeMake {
-			invoiceAmount.Add(a)
+			invoiceAmount = invoiceAmount.Add(a)
 		}
 		if invoiceList[i].InvoiceType == fms.ContractInvoiceTypePay {
-			paymentAmount.Add(a)
+			paymentAmount = paymentAmount.Add(a)
 		}
 	}
-	invoiceAmount.Round(2)
-	paymentAmount.Round(2)
 
 	// 核对金额是否相等, 并更新状态
 	status := fms.ContractRegisterStatusIng
@@ -59,8 +56,8 @@ func CheckContractRegisterAmount(registerId int) {
 		status = fms.ContractRegisterStatusComplete
 	}
 	updateCols := []string{"InvoicedAmount", "PaymentAmount", "RegisterStatus", "ModifyTime"}
-	ia, _ := invoiceAmount.Float64()
-	pa, _ := paymentAmount.Float64()
+	ia, _ := invoiceAmount.Round(2).Float64()
+	pa, _ := paymentAmount.Round(2).Float64()
 	item.InvoicedAmount = ia
 	item.PaymentAmount = pa
 	item.RegisterStatus = status