|
@@ -9,11 +9,14 @@ package services
|
|
|
import (
|
|
|
"errors"
|
|
|
"fmt"
|
|
|
+ "html"
|
|
|
"log"
|
|
|
"strconv"
|
|
|
"time"
|
|
|
|
|
|
"github.com/kataras/iris/v12"
|
|
|
+ "go.mod/comm"
|
|
|
+ "go.mod/conf"
|
|
|
"go.mod/dao"
|
|
|
"go.mod/datasource"
|
|
|
"go.mod/models"
|
|
@@ -29,6 +32,8 @@ type ContractService interface {
|
|
|
ValidRuleGet(ctx iris.Context) (*viewmodels.TreeSectionContract, error)
|
|
|
ValidRuleSerial(ctx iris.Context) (*viewmodels.TreeSectionContract, error)
|
|
|
ValidRuleContractAdd(ctx iris.Context) (*viewmodels.Contracts, error)
|
|
|
+ ValidRuleContractEdi(ctx iris.Context) (*viewmodels.Contracts, error)
|
|
|
+ ValidRuleContractDel(ctx iris.Context) (*viewmodels.Contracts, error)
|
|
|
|
|
|
Get(treeId int, bidsectionId int, projectId int) *viewmodels.TreeSectionContract
|
|
|
GetSectionTreeContract(attribution string, bidsectionId int, projectId int) []*viewmodels.Contracts
|
|
@@ -41,19 +46,19 @@ type ContractService interface {
|
|
|
MoveDepth(sectionData *viewmodels.TreeSectionContract, bidsectionId int, projectId int) error
|
|
|
MoveSerial(sectionData *viewmodels.TreeSectionContract, bidsectionId int, projectId int) error
|
|
|
|
|
|
- GetContract(contractId int) *models.CmContracts
|
|
|
+ GetContract(contractId int) *viewmodels.Contracts
|
|
|
Add(contractData *viewmodels.Contracts, projectId int, bidsectionId int, treeId int) error
|
|
|
+ Update(contractData *viewmodels.Contracts, projectId int, bidsectionId int, treeId int) error
|
|
|
+ Delete(projectId int, bidsectionId int, treeId int, id int) error
|
|
|
+ Close(projectId int, bidsectionId int, treeId int, id int) error
|
|
|
+ Unlock(projectId int, bidsectionId int, treeId int, id int) error
|
|
|
}
|
|
|
|
|
|
//返回service操作类
|
|
|
type contractService struct {
|
|
|
treeContractDao *dao.TreeContractDao
|
|
|
contractDao *dao.ContractDao
|
|
|
- // dao *dao.ProjectAccountDao
|
|
|
- // projectDao *dao.ProjectDao
|
|
|
- // bidsectionDao *dao.BidsectionDao
|
|
|
-
|
|
|
- // bidAccountDao *dao.BidAccountDao
|
|
|
+ treeDao *dao.TreeDao
|
|
|
}
|
|
|
|
|
|
//创建项目用户service
|
|
@@ -61,11 +66,7 @@ func NewContractService() ContractService {
|
|
|
return &contractService{
|
|
|
treeContractDao: dao.NewTreeContractDao(datasource.InstanceDbMaster()),
|
|
|
contractDao: dao.NewContractDao(datasource.InstanceDbMaster()),
|
|
|
- // projectAccountDao: dao.NewProjectAccountDao(datasource.InstanceDbMaster()),
|
|
|
- // projectDao: dao.NewProjectDao(datasource.InstanceDbMaster()),
|
|
|
- // bidsectionDao: dao.NewBidsectionDao(datasource.InstanceDbMaster()),
|
|
|
-
|
|
|
- // bidAccountDao: dao.NewBidAccountDao(datasource.InstanceDbMaster()),
|
|
|
+ treeDao: dao.NewTreeDao(datasource.InstanceDbMaster()),
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -190,6 +191,60 @@ func (s *contractService) ValidRuleContractAdd(ctx iris.Context) (*viewmodels.Co
|
|
|
log.Println("参数验证错误, error=", err)
|
|
|
return contractsVaild, err
|
|
|
}
|
|
|
+
|
|
|
+ // xss
|
|
|
+ contractsVaild.Code = html.EscapeString(contractsVaild.Code)
|
|
|
+ contractsVaild.Name = html.EscapeString(contractsVaild.Name)
|
|
|
+ contractsVaild.Price = html.EscapeString(contractsVaild.Price)
|
|
|
+
|
|
|
+ return contractsVaild, nil
|
|
|
+}
|
|
|
+
|
|
|
+// 校验编辑接口
|
|
|
+func (s *contractService) ValidRuleContractEdi(ctx iris.Context) (*viewmodels.Contracts, error) {
|
|
|
+ // 创建一个存放前端传过来参数
|
|
|
+ contractsVaild := &viewmodels.Contracts{}
|
|
|
+ // 存放raw的值,放入到contractsVaild
|
|
|
+ err := ctx.ReadJSON(contractsVaild)
|
|
|
+ if err != nil {
|
|
|
+ log.Println("folder-ValidRule-ReadForm转换异常, error=", err)
|
|
|
+ return contractsVaild, err
|
|
|
+ }
|
|
|
+ // 验证合同传参
|
|
|
+ err = contractsVaild.ValidateEdi()
|
|
|
+ if err != nil {
|
|
|
+ log.Println("参数验证错误, error=", err)
|
|
|
+ return contractsVaild, err
|
|
|
+ }
|
|
|
+
|
|
|
+ contractsVaild.Content = html.EscapeString(contractsVaild.Content)
|
|
|
+ contractsVaild.Name = html.EscapeString(contractsVaild.Name)
|
|
|
+ contractsVaild.Price = html.EscapeString(contractsVaild.Price)
|
|
|
+
|
|
|
+ contractsVaild.PartyA = html.EscapeString(contractsVaild.PartyA)
|
|
|
+ contractsVaild.PartyASigner = html.EscapeString(contractsVaild.PartyASigner)
|
|
|
+ contractsVaild.PartyB = html.EscapeString(contractsVaild.PartyB)
|
|
|
+ contractsVaild.PartyBSigner = html.EscapeString(contractsVaild.PartyBSigner)
|
|
|
+
|
|
|
+ return contractsVaild, nil
|
|
|
+}
|
|
|
+
|
|
|
+func (s *contractService) ValidRuleContractDel(ctx iris.Context) (*viewmodels.Contracts, error) {
|
|
|
+ // 创建一个存放前端传过来参数
|
|
|
+ contractsVaild := &viewmodels.Contracts{}
|
|
|
+ // 存放raw的值,放入到contractsVaild
|
|
|
+ err := ctx.ReadJSON(contractsVaild)
|
|
|
+ if err != nil {
|
|
|
+ log.Println("folder-ValidRule-ReadForm转换异常, error=", err)
|
|
|
+ return contractsVaild, err
|
|
|
+ }
|
|
|
+ // 验证合同传参
|
|
|
+ err = contractsVaild.ValidateDel()
|
|
|
+ if err != nil {
|
|
|
+ log.Println("参数验证错误, error=", err)
|
|
|
+ return contractsVaild, err
|
|
|
+ }
|
|
|
+
|
|
|
return contractsVaild, nil
|
|
|
}
|
|
|
|
|
@@ -203,8 +258,37 @@ func (s *contractService) Get(treeId int, bidsectionId int, projectId int) *view
|
|
|
}
|
|
|
|
|
|
// 获得合同详情
|
|
|
-func (s *contractService) GetContract(contractId int) *models.CmContracts {
|
|
|
- return s.contractDao.Get(contractId)
|
|
|
+func (s *contractService) GetContract(contractId int) *viewmodels.Contracts {
|
|
|
+ contract := s.contractDao.Get(contractId)
|
|
|
+ contractsVM := &viewmodels.Contracts{}
|
|
|
+
|
|
|
+ id, _ := comm.AesEncrypt(strconv.Itoa(contract.Id), conf.SignSecret)
|
|
|
+ treeId, _ := comm.AesEncrypt(strconv.Itoa(contract.TreeId), conf.SignSecret)
|
|
|
+ bidsectionId, _ := comm.AesEncrypt(strconv.Itoa(contract.BidsectionId), conf.SignSecret)
|
|
|
+
|
|
|
+ contractsVM.Id = id
|
|
|
+ contractsVM.TreeId = treeId
|
|
|
+ contractsVM.ContractsType = contract.ContractsType
|
|
|
+ contractsVM.BidsectionId = bidsectionId
|
|
|
+
|
|
|
+ contractsVM.Name = contract.Name
|
|
|
+ contractsVM.Content = contract.Content
|
|
|
+ contractsVM.Code = contract.Code
|
|
|
+ contractsVM.PartyA = contract.PartyA
|
|
|
+ contractsVM.PartyASigner = contract.PartyASigner
|
|
|
+ contractsVM.PartyB = contract.PartyB
|
|
|
+ contractsVM.PartyBSigner = contract.PartyBSigner
|
|
|
+ contractsVM.Remarks = contract.Remarks
|
|
|
+ contractsVM.Price = contract.Price
|
|
|
+ contractsVM.Returned = contract.Returned
|
|
|
+ contractsVM.Paid = contract.Paid
|
|
|
+ contractsVM.Status = contract.Status
|
|
|
+
|
|
|
+ contractsVM.CreateTime = contract.CreateTime.Format(conf.SysTimeform)
|
|
|
+ contractsVM.UpdateTime = contract.UpdateTime.Format(conf.SysTimeform)
|
|
|
+ contractsVM.SignerTime = contract.SignerTime.Format(conf.SysTimeform)
|
|
|
+
|
|
|
+ return contractsVM
|
|
|
}
|
|
|
|
|
|
// 新增合同
|
|
@@ -235,23 +319,152 @@ func (s *contractService) Add(contractData *viewmodels.Contracts, projectId int,
|
|
|
contractsCm.CreateTime = time.Now()
|
|
|
contractsCm.UpdateTime = time.Now()
|
|
|
|
|
|
- // 获得该标段下合同总数 - 总收入金额
|
|
|
+ err := s.contractDao.Add(contractsCm)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ // 3.获得该标段下合同总数 - 总收入金额
|
|
|
+ contractTotal, priceTotal := s.getContractTotalAndPrice(bidsectionId, projectId)
|
|
|
+ // 更新标段目录上合同金额和总数
|
|
|
+ err = s.treeDao.UpdateContractsAndIncomePrice(projectId, bidsectionId, contractTotal, priceTotal)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+// 更新合同
|
|
|
+func (s *contractService) Update(contractData *viewmodels.Contracts, projectId int, bidsectionId int, treeId int) error {
|
|
|
+ // 1. 项目节存在
|
|
|
+ contractsTree := s.treeContractDao.Get(treeId, bidsectionId, projectId)
|
|
|
+ if contractsTree.Id == 0 {
|
|
|
+ return errors.New("未找到项目节")
|
|
|
+ }
|
|
|
+ // 2.项目节是没有合同
|
|
|
+ if contractsTree.ContractId == 0 {
|
|
|
+ return errors.New("该项目节上没有找到合同")
|
|
|
+ }
|
|
|
+
|
|
|
+ contractsCm := &models.CmContracts{}
|
|
|
+ contractsCm.Id = contractsTree.ContractId
|
|
|
+ contractsCm.Content = contractData.Content
|
|
|
+ contractsCm.Name = contractData.Name
|
|
|
+ contractsCm.Price = contractData.Price
|
|
|
+ contractsCm.PartyA = contractData.PartyA
|
|
|
+ contractsCm.PartyASigner = contractData.PartyASigner
|
|
|
+ contractsCm.PartyB = contractData.PartyB
|
|
|
+ contractsCm.PartyBSigner = contractData.PartyBSigner
|
|
|
+
|
|
|
+ loc, _ := time.LoadLocation("Local")
|
|
|
+ SignerTime, err := time.ParseInLocation(conf.SysTimeform, contractData.SignerTime, loc)
|
|
|
+ if err != nil {
|
|
|
+ return errors.New("签约时间填写异常")
|
|
|
+ }
|
|
|
+ contractsCm.SignerTime = SignerTime
|
|
|
+ contractsCm.Remarks = contractData.Remarks
|
|
|
+
|
|
|
+ columns := []string{"Content", "Name", "Price", "PartyA", "PartyASigner", "PartyB", "PartyBSigner"}
|
|
|
+ err = s.contractDao.Update(contractsCm, columns, projectId, bidsectionId, treeId)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ // 3.获得该标段下合同总数 - 总收入金额
|
|
|
+ contractTotal, priceTotal := s.getContractTotalAndPrice(bidsectionId, projectId)
|
|
|
+ // 更新标段目录上合同金额和总数
|
|
|
+ err = s.treeDao.UpdateContractsAndIncomePrice(projectId, bidsectionId, contractTotal, priceTotal)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+// 删除合同
|
|
|
+func (s *contractService) Delete(projectId int, bidsectionId int, treeId int, id int) error {
|
|
|
+ // 1. 项目节存在
|
|
|
+ contractsTree := s.treeContractDao.Get(treeId, bidsectionId, projectId)
|
|
|
+ if contractsTree.Id == 0 {
|
|
|
+ return errors.New("未找到项目节")
|
|
|
+ }
|
|
|
+ // 2.项目节是没有合同
|
|
|
+ if contractsTree.ContractId == 0 {
|
|
|
+ return errors.New("该项目节上没有找到合同")
|
|
|
+ }
|
|
|
+
|
|
|
+ // 删除合同
|
|
|
+ err := s.contractDao.Delete(projectId, bidsectionId, treeId, id)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ // 3.获得该标段下合同总数 - 总收入金额
|
|
|
+ contractTotal, priceTotal := s.getContractTotalAndPrice(bidsectionId, projectId)
|
|
|
+ // 更新标段目录上合同金额和总数
|
|
|
+ err = s.treeDao.UpdateContractsAndIncomePrice(projectId, bidsectionId, contractTotal, priceTotal)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+// 关闭合同
|
|
|
+func (s *contractService) Close(projectId int, bidsectionId int, treeId int, id int) error {
|
|
|
+ // 1. 项目节存在
|
|
|
+ contractsTree := s.treeContractDao.Get(treeId, bidsectionId, projectId)
|
|
|
+ if contractsTree.Id == 0 {
|
|
|
+ return errors.New("未找到项目节")
|
|
|
+ }
|
|
|
+ // 2.项目节是没有合同
|
|
|
+ if contractsTree.ContractId == 0 {
|
|
|
+ return errors.New("该项目节上没有找到合同")
|
|
|
+ }
|
|
|
+
|
|
|
+ // 删除合同
|
|
|
+ err := s.contractDao.Close(projectId, bidsectionId, treeId, id)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+// 解锁合同
|
|
|
+func (s *contractService) Unlock(projectId int, bidsectionId int, treeId int, id int) error {
|
|
|
+ // 1. 项目节存在
|
|
|
+ contractsTree := s.treeContractDao.Get(treeId, bidsectionId, projectId)
|
|
|
+ if contractsTree.Id == 0 {
|
|
|
+ return errors.New("未找到项目节")
|
|
|
+ }
|
|
|
+ // 2.项目节是没有合同
|
|
|
+ if contractsTree.ContractId == 0 {
|
|
|
+ return errors.New("该项目节上没有找到合同")
|
|
|
+ }
|
|
|
+
|
|
|
+ // 删除合同
|
|
|
+ err := s.contractDao.Unlock(projectId, bidsectionId, treeId, id)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+// 获得合同总数量和总金额
|
|
|
+func (s *contractService) getContractTotalAndPrice(bidsectionId int, projectId int) (contractTotal int, priceTotal float64) {
|
|
|
contractList := s.treeContractDao.GetContract(bidsectionId, projectId)
|
|
|
- priceTotal := 0.00
|
|
|
+ priceTotal = 0.00
|
|
|
for _, item := range contractList {
|
|
|
contractPrice, _ := strconv.ParseFloat(item.ContractPrice, 64)
|
|
|
priceTotal = priceTotal + contractPrice
|
|
|
}
|
|
|
// 合同总数
|
|
|
- contractTotal := len(contractList) + 1
|
|
|
+ // contractTotal = len(contractList) + 1
|
|
|
+ contractTotal = len(contractList)
|
|
|
// 合同收入总金额
|
|
|
- price, _ := strconv.ParseFloat(contractsCm.Price, 64)
|
|
|
- priceTotal = priceTotal + price
|
|
|
+ // price, _ := strconv.ParseFloat(priceString, 64)
|
|
|
+ // priceTotal = priceTotal + price
|
|
|
// 保留2位小数
|
|
|
priceTotal, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", priceTotal), 64)
|
|
|
- err := s.contractDao.Add(contractsCm, contractTotal, priceTotal)
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
- return nil
|
|
|
+
|
|
|
+ return contractTotal, priceTotal
|
|
|
}
|