caipin 4 jaren geleden
bovenliggende
commit
d101a58f6c

+ 34 - 2
dao/contract_dao.go

@@ -8,7 +8,9 @@ package dao
 
 import (
 	"errors"
+	"fmt"
 	"log"
+	"strconv"
 
 	"github.com/go-xorm/xorm"
 	"go.mod/models"
@@ -108,10 +110,40 @@ func (d *ContractDao) Update(contractsCm *models.CmContracts, columns []string,
 		return errors.New("合同数据异常,更新失败")
 	}
 
+	// 3.更新合同状态,合同金额和回款金额比对
+	// 3-1获得回款总金额
+	datalist := make([]models.CmContractsReturn, 0)
+	err = d.engine.Where(" project_id =? and bidsection_id = ? and contracts_id =? ", projectId, bidsectionId, contractsCm.Id).Find(&datalist)
+	if err != nil {
+		session.Rollback()
+		return errors.New("编辑合同出错-项目节更新失败")
+	}
+	contractsPrice := 0.00
+	for _, item := range datalist {
+		price, _ := strconv.ParseFloat(item.Price, 64)
+		if item.ContractsId == contractsCm.Id {
+			contractsPrice = contractsPrice + price
+		}
+	}
+	contractsPrice, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", contractsPrice), 64)
+	// 合同状态判定
+	contractsDetailPrice, _ := strconv.ParseFloat(contractsCm.Price, 64)
+	// 总回款大于等于合同金额 待关闭
+	contractStatus := 0
+	if contractsPrice >= contractsDetailPrice {
+		contractStatus = 1
+	}
+	// 更新合同表状态
+	_, err = session.Exec("UPDATE  cm_contracts SET  status = ? where id = ? ", contractStatus, contractsCm.Id)
+	if err != nil {
+		session.Rollback()
+		return errors.New("合同状态更新失败")
+	}
+
 	// 2.更新项目节表
-	_, err = session.Exec("UPDATE  cm_tree_contracts SET `contract_name` = ?,`contract_price` = ? "+
+	_, err = session.Exec("UPDATE  cm_tree_contracts SET `contract_name` = ?,`contract_price` = ? and contract_status = ? "+
 		"where tree_id = ? and project_id = ? and bidsection_id = ? ",
-		contractsCm.Name, contractsCm.Price,
+		contractsCm.Name, contractsCm.Price, contractStatus,
 		treeId, projectId, bidsectionId)
 	if err != nil {
 		session.Rollback()

+ 18 - 3
dao/contract_return_dao.go

@@ -106,6 +106,13 @@ func (d *ContractReturnDao) UpdateTotalPrice(projectId int, bidsectionId int, co
 		return errors.New("session出错-db")
 	}
 
+	// 0.获得合同金额
+	contractsDetail := &models.CmContracts{}
+	_, err = d.engine.Where(" id = ? ", contractsId).Get(contractsDetail)
+	if err != nil {
+		return errors.New("未找到合同")
+	}
+
 	// 1.获得合同回款总金额
 	datalist := make([]models.CmContractsReturn, 0)
 	err = d.engine.Where(" project_id =? and bidsection_id = ? ", projectId, bidsectionId).Find(&datalist)
@@ -125,15 +132,23 @@ func (d *ContractReturnDao) UpdateTotalPrice(projectId int, bidsectionId int, co
 	priceTotal, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", priceTotal), 64)
 	contractsPrice, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", contractsPrice), 64)
 
+	// 1-1合同状态的判定
+	contractsDetailPrice, _ := strconv.ParseFloat(contractsDetail.Price, 64)
+	// 总回款大于等于合同金额 待关闭
+	contractStatus := 0
+	if contractsPrice >= contractsDetailPrice {
+		contractStatus = 1
+	}
+
 	// 2.更新合同表 合同下回款总金额
-	_, err = session.Exec("UPDATE  cm_contracts SET `returned` = ? where id = ? ", contractsPrice, contractsId)
+	_, err = session.Exec("UPDATE  cm_contracts SET `returned` = ? and status = ? where id = ? ", contractsPrice, contractStatus, contractsId)
 	if err != nil {
 		session.Rollback()
 		return errors.New("金额更新失败")
 	}
 	// 3.更新项目节 合同下回款总金额
-	_, err = session.Exec("UPDATE  cm_tree_contracts SET `contract_returned` = ? where project_id = ? and bidsection_id=? and contract_id=? ",
-		contractsPrice, projectId, bidsectionId, contractsId)
+	_, err = session.Exec("UPDATE  cm_tree_contracts SET `contract_returned` = ? and contract_status = ? where project_id = ? and bidsection_id=? and contract_id=? ",
+		contractsPrice, contractStatus, projectId, bidsectionId, contractsId)
 	if err != nil {
 		session.Rollback()
 		return errors.New("金额更新失败")

+ 1 - 0
dao/tree_dao.go

@@ -350,6 +350,7 @@ func (d *TreeDao) Update(data *models.CmTree, columns []string) error {
 
 // 更新标段目录上合同金额和总数
 func (d *TreeDao) UpdateContractsAndIncomePrice(projectId int, bidsectionId int, contractTotal int, priceTotal float64) error {
+	// 1.更新标段 上的合同总金额
 	_, err := d.engine.Exec("UPDATE  cm_tree SET `contracts` = ?,`contracts_income` = ? "+
 		"where project_id = ? and bidsection_id = ? ",
 		contractTotal, priceTotal,

+ 1 - 0
services/contract_section_tree_service.go

@@ -353,6 +353,7 @@ func (s *contractService) makeSectionView(data *models.CmTreeContracts) *viewmod
 	section.ContractReturned = data.ContractReturned
 	section.ContractsPaid = data.ContractsPaid
 	section.ContractStatus = data.ContractStatus
+	section.ContractLocking = data.ContractLocking
 
 	section.CreateTime = data.CreateTime.Format(conf.SysTimeform)
 	return section

+ 16 - 0
services/contract_service.go

@@ -304,6 +304,7 @@ func (s *contractService) GetContract(contractId int) *viewmodels.Contracts {
 	contractsVM.Returned = contract.Returned
 	contractsVM.Paid = contract.Paid
 	contractsVM.Status = contract.Status
+	contractsVM.Locking = contract.Locking
 
 	contractsVM.CreateTime = contract.CreateTime.Format(conf.SysTimeform)
 	contractsVM.UpdateTime = contract.UpdateTime.Format(conf.SysTimeform)
@@ -368,6 +369,11 @@ func (s *contractService) Update(contractData *viewmodels.Contracts, projectId i
 		return errors.New("该项目节上没有找到合同")
 	}
 
+	// 3.合同锁定 不能删除
+	if contractsTree.ContractLocking == 1 {
+		return errors.New("该合同已锁定")
+	}
+
 	contractsCm := &models.CmContracts{}
 	contractsCm.Id = contractsTree.ContractId
 	contractsCm.Content = contractData.Content
@@ -413,6 +419,11 @@ func (s *contractService) Delete(projectId int, bidsectionId int, treeId int, id
 		return errors.New("该项目节上没有找到合同")
 	}
 
+	// 3.合同锁定 不能删除
+	if contractsTree.ContractLocking == 1 {
+		return errors.New("该合同已锁定")
+	}
+
 	// 删除合同
 	err := s.contractDao.Delete(projectId, bidsectionId, treeId, id)
 	if err != nil {
@@ -447,6 +458,11 @@ func (s *contractService) Close(projectId int, bidsectionId int, treeId int, id
 		return errors.New("该项目节上没有找到合同")
 	}
 
+	// 3.合同锁定 不能删除
+	if contractsTree.ContractLocking == 1 {
+		return errors.New("该合同已锁定")
+	}
+
 	// 关闭合同
 	err := s.contractDao.Close(projectId, bidsectionId, treeId, id)
 	if err != nil {

+ 1 - 0
web/viewmodels/contract.go

@@ -22,6 +22,7 @@ type Contracts struct {
 	Returned      string `form:"returned" json:"returned" `
 	Paid          string `form:"paid" json:"paid" `
 	Status        int    `form:"status" json:"status" `
+	Locking       int    `form:"locking" json:"locking" `
 	CreateTime    string `form:"createTime" json:"createTime" `
 	UpdateTime    string `form:"updateTime" json:"updateTime" `
 

+ 1 - 0
web/viewmodels/tree_section_contract.go

@@ -31,6 +31,7 @@ type TreeSectionContract struct {
 	ContractReturned string `form:"contractReturned" json:"contractReturned"`
 	ContractsPaid    string `form:"contractsPaid" json:"contractsPaid"`
 	ContractStatus   int    `form:"contractStatus" json:"contractStatus"`
+	ContractLocking  int    `form:"contractLocking" json:"contractLocking"`
 
 	CreateTime string                 `form:"createTime" json:"createTime"`
 	Children   []*TreeSectionContract `json:"children"`