ziwen 2 years ago
parent
commit
49969ede5e
2 changed files with 61 additions and 144 deletions
  1. 39 144
      controller/contract/pre_payment.go
  2. 22 0
      models/fms/contract_pre_payment.go

+ 39 - 144
controller/contract/pre_payment.go

@@ -13,7 +13,6 @@ import (
 	"hongze/fms_api/services/alarm_msg"
 	fmsService "hongze/fms_api/services/fms"
 	"hongze/fms_api/utils"
-	"strconv"
 	"time"
 )
 
@@ -104,12 +103,12 @@ func (rg *PrePaymentController) Add(c *gin.Context) {
 	// 日期校验
 	startDate, e := time.ParseInLocation(utils.FormatDate, req.StartDate, time.Local)
 	if e != nil {
-		resp.FailMsg("合同开始日期格式有误", "合同开始日期格式有误, Err: "+e.Error(), c)
+		resp.FailMsg("约定开始日期格式有误", "合同开始日期格式有误, Err: "+e.Error(), c)
 		return
 	}
 	endDate, e := time.ParseInLocation(utils.FormatDate, req.EndDate, time.Local)
 	if e != nil {
-		resp.FailMsg("合同结束日期格式有误", "合同结束日期格式有误, Err: "+e.Error(), c)
+		resp.FailMsg("约定结束日期格式有误", "合同结束日期格式有误, Err: "+e.Error(), c)
 		return
 	}
 
@@ -144,6 +143,7 @@ func (rg *PrePaymentController) Add(c *gin.Context) {
 	ob.OriginAmount = req.Amount
 	ob.CurrencyUnit = req.CurrencyUnit
 	ob.Remark = req.Remark
+	ob.NewCompany = req.NewCompany
 	ob.Set()
 
 
@@ -163,7 +163,7 @@ func (rg *PrePaymentController) Add(c *gin.Context) {
 // @Success 200 string "操作成功"
 // @router /contract/pre_pay/edit [post]
 func (rg *PrePaymentController) Edit(c *gin.Context) {
-	req := new(fms.ContractRegisterEditReq)
+	req := new(fms.PrepayEditReq)
 	err := c.ShouldBind(&req)
 	if err != nil {
 		errs, ok := err.(validator.ValidationErrors)
@@ -180,173 +180,68 @@ func (rg *PrePaymentController) Edit(c *gin.Context) {
 	// 日期校验
 	startDate, e := time.ParseInLocation(utils.FormatDate, req.StartDate, time.Local)
 	if e != nil {
-		resp.FailMsg("合同开始日期格式有误", "合同开始日期格式有误, Err: "+e.Error(), c)
+		resp.FailMsg("约定开始日期格式有误", "合同开始日期格式有误, Err: "+e.Error(), c)
 		return
 	}
 	endDate, e := time.ParseInLocation(utils.FormatDate, req.EndDate, time.Local)
 	if e != nil {
-		resp.FailMsg("合同结束日期格式有误", "合同结束日期格式有误, Err: "+e.Error(), c)
+		resp.FailMsg("约定结束日期格式有误", "合同结束日期格式有误, Err: "+e.Error(), c)
 		return
 	}
-	signDate, _ := time.ParseInLocation(utils.FormatDate, "0000-00-00", time.Local)
-	if req.SignDate != "" {
-		signDateTime, e := time.ParseInLocation(utils.FormatDate, req.SignDate, time.Local)
-		if e != nil {
-			resp.FailMsg("合同签订日期格式有误", "合同签订日期格式有误, Err: "+e.Error(), c)
-			return
-		}
-		signDate = signDateTime
-	}
 
-	ob := new(fms.ContractRegister)
-	item, e := ob.Fetch(req.ContractRegisterId)
+	// 货币及汇率
+	rateList, e := fmsService.GetTodayCurrencyRateList()
 	if e != nil {
-		if e == utils.ErrNoRow {
-			resp.Fail("登记记录不存在或已被删除", c)
-			return
-		}
-		resp.FailMsg("操作失败", "获取合同登记信息失败, Err:"+e.Error(), c)
+		resp.FailMsg("操作失败", "获取今日货币汇率失败, Err: "+e.Error(), c)
 		return
 	}
-	// 是否存在相同合同编号的登记
-	existCond := `contract_code = ?`
-	existPars := make([]interface{}, 0)
-	existPars = append(existPars, req.ContractCode)
-	exist, e := ob.FetchByCondition(existCond, existPars)
-	if e != nil && e != utils.ErrNoRow {
-		resp.FailMsg("操作失败", "获取相同登记号失败, Err: "+e.Error(), c)
-		return
+	var rate float64
+	for i := range rateList {
+		if req.CurrencyUnit == rateList[i].Code {
+			rate = rateList[i].RMBRate
+			break
+		}
 	}
-	if exist != nil && exist.ContractRegisterId > 0 && exist.ContractRegisterId != item.ContractRegisterId {
-		resp.Fail("合同编号已存在", c)
+	if rate <= 0 {
+		resp.FailMsg("操作失败", "货币汇率信息有误", c)
 		return
 	}
-	originHasPayment := item.HasPayment
 
-	updateCols := []string{
-		"ContractCode", "RelateContractCode", "CrmContractId", "ContractSource", "CompanyName", "ActualCompanyName",
-		"SellerId", "SellerName", "ContractType", "ContractAmount", "StartDate", "EndDate", "SignDate", "AgreedPayTime",
-		"ContractStatus", "RegisterStatus", "Remark", "ServiceRemark", "HasPayment", "NewCompany", "ModifyTime",
+	ob := new(fms.ContractPrePayment)
+
+	item, e := ob.Fetch(req.PrePayId)
+	if e != nil {
+		if e == utils.ErrNoRow {
+			resp.Fail("预到款登记记录不存在或已被删除", c)
+			return
+		}
+		resp.FailMsg("操作失败", "获取预到款登记信息失败, Err:"+e.Error(), c)
+		return
 	}
-	nowTime := time.Now().Local()
-	item.ContractCode = req.ContractCode
-	item.RelateContractCode = req.RelateContractCode
-	item.CrmContractId = req.CrmContractId
-	item.ContractSource = req.ContractSource
 	item.CompanyName = req.CompanyName
-	item.ActualCompanyName = req.ActualCompanyName
 	item.SellerId = req.SellerId
 	item.SellerName = req.SellerName
-	item.ContractType = req.ContractType
-	item.ContractAmount = req.ContractAmount
+	item.CurrencyUnit = req.CurrencyUnit
 	item.StartDate = startDate
 	item.EndDate = endDate
-	item.SignDate = signDate
-	item.AgreedPayTime = req.AgreedPayTime
-	item.ContractStatus = req.ContractStatus
-	item.RegisterStatus = fms.ContractRegisterStatusIng
+	item.AdminId = int(adminInfo.AdminId)
+	item.AdminName = adminInfo.AdminName
+	item.Amount = req.Amount * rate
+	item.OriginAmount = req.Amount
+	item.CurrencyUnit = req.CurrencyUnit
 	item.Remark = req.Remark
-	item.ServiceRemark = req.ServiceRemark
-	item.HasPayment = req.HasPayment
 	item.NewCompany = req.NewCompany
-	item.ModifyTime = nowTime
-
-	// 存在代付的直接完成登记, 且不允许进行开票/到款登记
-	if req.HasPayment == 1 {
-		item.RegisterStatus = fms.ContractRegisterStatusComplete
-		updateCols = append(updateCols, "RegisterStatus")
-	}
+	item.ModifyTime = time.Now().Local()
 
-	// 开票到款信息
-	invoiceOB := new(fms.ContractInvoice)
-	invoiceCond := `contract_register_id = ?`
-	invoicePars := make([]interface{}, 0)
-	invoicePars = append(invoicePars, req.ContractRegisterId)
-	invoiceList, e := invoiceOB.List(invoiceCond, invoicePars, "")
-	if e != nil {
-		resp.FailMsg("操作失败", "获取合同开票到款列表失败, Err: "+e.Error(), c)
-		return
-	}
-	invoiceUpdateCols := make([]string, 0)
-
-	// 开票到款操作类型: 0-无; 1-更新; 2-删除;
-	logRemark := req.Remark
-	invoiceHandleType := 0
-	if originHasPayment == 0 && req.HasPayment == 1 {
-		// 若从无代付修改为有代付, 则删除无代付期间新增的所有开票到款登记
-		invoiceHandleType = 2
-	} else {
-		// 修改了货币单位后,同步更新汇率及开票到款的换算金额
-		if req.CurrencyUnit != item.CurrencyUnit {
-			rateList, e := fmsService.GetTodayCurrencyRateList()
-			if e != nil {
-				resp.FailMsg("操作失败", "获取货币列表及汇率失败, Err: "+e.Error(), c)
-				return
-			}
-			var rate float64
-			for i := range rateList {
-				if rateList[i].Code == req.CurrencyUnit {
-					rate = rateList[i].RMBRate
-					break
-				}
-			}
-			if rate < 0 {
-				resp.FailMsg("操作失败", "货币汇率有误", c)
-				return
-			}
-			item.CurrencyUnit = req.CurrencyUnit
-			item.RMBRate = rate
-			updateCols = append(updateCols, "CurrencyUnit", "RMBRate")
-
-			// 调整开票到款换算后的金额, 保留两位小数
-			for i := range invoiceList {
-				invoiceList[i].CurrencyUnit = req.CurrencyUnit
-				a, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", invoiceList[i].OriginAmount/rate), 64)
-				invoiceList[i].Amount = a
-			}
-			invoiceUpdateCols = append(invoiceUpdateCols, "CurrencyUnit", "Amount")
-			invoiceHandleType = 1
-			logRemark = fmt.Sprintf("金额单位由%s修改为%s\n%s", item.CurrencyUnit, req.CurrencyUnit, logRemark)
-		}
-	}
-
-	// 套餐信息
-	serviceList, e := fmsService.HandleContractServiceAndDetail(req.ProductId, req.Services, true)
-	if e != nil {
-		resp.FailMsg("操作失败", "获取合同套餐详情失败, Err: "+e.Error(), c)
-		return
+	updateCols := []string{
+		"ContractCode", "CompanyName", "SellerId", "SellerName", "Amount", "StartDate", "EndDate",
+		"Remark", "ModifyTime","NewCompany", "OriginAmount", "CurrencyUnit",
 	}
-
-	// 更新合同登记、套餐、开票到款
-	if e = fms.UpdateContractRegister(item, updateCols, serviceList, invoiceList, invoiceUpdateCols, invoiceHandleType); e != nil {
-		resp.FailMsg("操作失败", "更新合同及套餐失败, Err: "+e.Error(), c)
+	if e = item.Update(updateCols); e != nil {
+		resp.FailMsg("操作失败", "更新到预款登记失败, Err:"+e.Error(), c)
 		return
 	}
 
-	// 校验金额-是否修改状态
-	go fmsService.CheckContractRegisterAmount(item.ContractRegisterId)
-
-	// 操作日志
-	go func() {
-		opData := ""
-		opDataByte, e := json.Marshal(req)
-		if e != nil {
-			return
-		}
-		opData = string(opDataByte)
-
-		logItem := new(fms.ContractRegisterLog)
-		logItem.ContractRegisterId = item.ContractRegisterId
-		logItem.AdminId = int(adminInfo.AdminId)
-		logItem.AdminName = adminInfo.RealName
-		logItem.OpData = opData
-		logItem.OpType = fms.ContractRegisterOpTypeEdit
-		logItem.CreateTime = nowTime
-		logItem.Remark = logRemark
-		if e = logItem.Create(); e != nil {
-			return
-		}
-	}()
 	resp.Ok("操作成功", c)
 }
 

+ 22 - 0
models/fms/contract_pre_payment.go

@@ -23,6 +23,7 @@ type ContractPrePayment struct {
 	Remark             string    `gorm:"column:remark" json:"remark" description:"备注信息"`
 	StartDate          time.Time `gorm:"column:start_date" json:"start_date" description:"约定开始时间"`
 	EndDate            time.Time `gorm:"column:end_date" json:"end_date" description:"约定结束时间"`
+	NewCompany         int       `gorm:"column:new_company" json:"new_company" description:"是否为新客户: 0-否; 1-是"`
 	base.TimeBase
 }
 
@@ -41,6 +42,7 @@ type ContractPrePaymentRespItem struct {
 	Remark             string  `gorm:"column:remark" json:"remark" description:"备注信息"`
 	StartDate          string  `gorm:"column:start_date" json:"start_date" description:"约定开始时间"`
 	EndDate            string  `gorm:"column:end_date" json:"end_date" description:"约定结束时间"`
+	NewCompany         int       `gorm:"column:new_company" json:"new_company" description:"是否为新客户: 0-否; 1-是"`
 	CreateTime         string  `gorm:"autoCreateTime;column:create_time" json:"create_time" description:"创建时间"`
 	ModifyTime         string  `gorm:"autoUpdateTime:milli;column:modify_time" json:"modify_time" description:"最后更新时间"`
 }
@@ -83,6 +85,7 @@ func formatPrePay2Item(item *ContractPrePayment) (formatItem *ContractPrePayment
 	formatItem.PrePayId = item.PrePayId
 	formatItem.ContractRegisterId = item.ContractRegisterId
 	formatItem.ContractCode = item.ContractCode
+	formatItem.CompanyName = item.CompanyName
 	formatItem.SellerId = item.SellerId
 	formatItem.SellerName = item.SellerName
 	formatItem.Amount = item.Amount
@@ -93,6 +96,7 @@ func formatPrePay2Item(item *ContractPrePayment) (formatItem *ContractPrePayment
 	formatItem.AdminId = item.AdminId
 	formatItem.AdminName = item.AdminName
 	formatItem.Remark = item.Remark
+	formatItem.NewCompany = item.NewCompany
 	formatItem.CreateTime = utils.TimeTransferString(utils.FormatDateTime, item.CreateTime)
 	formatItem.ModifyTime = utils.TimeTransferString(utils.FormatDateTime, item.ModifyTime)
 	return
@@ -108,9 +112,27 @@ type PrepayAddReq struct {
 	StartDate    string  `json:"start_date" binding:"required" description:"约定开始日期"`
 	EndDate      string  `json:"end_date" binding:"required" description:"约定结束日期"`
 	Remark       string  `json:"remark" description:"备注信息"`
+	NewCompany   int     `json:"new_company" description:"是否为新客户: 0-否; 1-是"`
 }
 
 func (c *ContractPrePayment) Create() (err error) {
 	err = global.DEFAULT_MYSQL.Create(c).Error
 	return
 }
+
+func (c *ContractPrePayment) Fetch(id int) (item *ContractPrePayment, err error) {
+	err = global.DEFAULT_MYSQL.Model(c).Where(" pre_pay_id = ?", id).First(&item).Error
+	return
+}
+
+func (c *ContractPrePayment) Update(updateCols []string) (err error) {
+	err = global.DEFAULT_MYSQL.Model(c).Select(updateCols).Updates(c).Error
+	return
+}
+
+
+// ContractRegisterEditReq 编辑合同登记请求体
+type PrepayEditReq struct {
+	PrePayId int `json:"pre_pay_id" binding:"required,gte=1" description:"登记ID"`
+	PrepayAddReq
+}