caipin 4 tahun lalu
induk
melakukan
ccfa976150

+ 24 - 0
bootstrap/bootstrap.go

@@ -7,6 +7,7 @@
 package bootstrap
 
 import (
+	"log"
 	"time"
 
 	"github.com/iris-contrib/middleware/csrf"
@@ -14,6 +15,7 @@ import (
 	"github.com/kataras/iris/v12/middleware/logger"
 	"github.com/kataras/iris/v12/middleware/recover"
 	"go.mod/conf"
+	"google.golang.org/grpc"
 )
 
 //配置器,定制化的配置--方法类型
@@ -30,6 +32,18 @@ type Bootstrapper struct {
 	AppSpawnDate time.Time
 }
 
+var RpcConnect *grpc.ClientConn
+
+func init() {
+	log.Println("rpcClient初始化中...")
+	conn, err := grpc.Dial(conf.NodeRpcHost, grpc.WithInsecure())
+	if err != nil {
+		log.Fatalf("did not connect: %v", err)
+	}
+	RpcConnect = conn
+	log.Println("rpcClient初始化成功")
+}
+
 //新建和返回一个Bootstrapper
 func New(appName, appOwner string, cfgs ...Configurator) *Bootstrapper {
 	b := &Bootstrapper{
@@ -104,6 +118,14 @@ func (b *Bootstrapper) SetupCsrfHandlers(csrfKey string) {
 // 	//b.Party("/", j2.Serve)
 // }
 
+// 装配rpcClient
+func (b *Bootstrapper) SetupRpcClient() {
+	b.Use(func(ctx iris.Context) {
+		ctx.Values().Set("RpcConnect", RpcConnect)
+		ctx.Next()
+	})
+}
+
 //处理异常--设置错误信息展示
 func (b *Bootstrapper) SetupErrorHandlers() {
 	b.OnAnyErrorCode(func(ctx iris.Context) {
@@ -161,6 +183,8 @@ func (b *Bootstrapper) Bootstrap() *Bootstrapper {
 	b.SetupCsrfHandlers(CsrfKey)
 	// 设置jwt
 	//b.SetupJwtHandlers(JwtKey)
+	// 设置rpc
+	b.SetupRpcClient()
 	//设置异常信息
 	b.SetupErrorHandlers()
 

+ 1 - 1
dao/bidsection_dao.go

@@ -84,5 +84,5 @@ func (d *BidsectionDao) Create(data *models.CmTree) error {
 		return errors.New("创建标段出错-db")
 	}
 
-	return err
+	return nil
 }

+ 47 - 0
dao/contract_dao.go

@@ -7,6 +7,9 @@
 package dao
 
 import (
+	"errors"
+	"log"
+
 	"github.com/go-xorm/xorm"
 	"go.mod/models"
 )
@@ -35,3 +38,47 @@ func (d *ContractDao) Get(id int) *models.CmContracts {
 	}
 	return data
 }
+
+// 新增合同
+func (d *ContractDao) Add(contractData *models.CmContracts) error {
+	session := d.engine.NewSession()
+	defer session.Close()
+	err := session.Begin()
+	if err != nil {
+		return errors.New("新增合同出错-db")
+	}
+	// 1.写入合同表
+	_, err = session.Insert(contractData)
+	if err != nil {
+		log.Println(err)
+		session.Rollback()
+		return errors.New("新增合同出错")
+	}
+	// 2.更新项目节表
+	_, err = session.Exec("UPDATE  cm_tree_contracts SET `contract_id` = ?,`contract_name` = ?,`contract_code` = ?,`contract_price` = ? "+
+		"where tree_id = ? and project_id = ? and bidsection_id = ? ",
+		contractData.Id, contractData.Name, contractData.Code, contractData.Price,
+		contractData.TreeId, contractData.ProjectId, contractData.BidsectionId)
+	if err != nil {
+		session.Rollback()
+		return errors.New("新增合同出错-项目节更新失败")
+	}
+	// 3.更新标段目录金额合计
+	// 3-1 获得项目-标段下合同总数
+	// 3-2 获得项目标段下合同收入中金额
+	_, err = session.Exec("UPDATE  cm_tree SET `contracts` = ?,`contracts_income` = ? "+
+		"where project_id = ? and bidsection_id = ? ",
+		contractData.Id, contractData.Name, contractData.Code, contractData.Price,
+		contractData.ProjectId, contractData.BidsectionId)
+	if err != nil {
+		session.Rollback()
+		return errors.New("新增合同出错-标段目录更新失败")
+	}
+
+	err = session.Commit()
+	if err != nil {
+		session.Rollback()
+		return errors.New("新增合同出错-db")
+	}
+	return nil
+}

+ 1 - 0
go.mod

@@ -20,6 +20,7 @@ require (
 	github.com/iris-contrib/swagger/v12 v12.2.0-alpha
 	github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88 // indirect
 	github.com/kataras/blocks v0.0.4 // indirect
+	github.com/kataras/iris v0.0.2
 	github.com/kataras/iris/v12 v12.2.0-alpha
 	github.com/kataras/tunnel v0.0.2 // indirect
 	github.com/kirinlabs/HttpRequest v1.0.5

+ 17 - 0
go.sum

@@ -6,6 +6,7 @@ github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53 h1:sR+/8Yb4slttB4vD+b9btVEnWgL3Q00OBTzVT8B9C0c=
 github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno=
+github.com/CloudyKit/jet/v4 v4.1.0/go.mod h1:DhUsGNEpjPmBD0zmGNP8DaSV1dGO8g9U4adIK8BCWmw=
 github.com/CloudyKit/jet/v5 v5.0.2 h1:BRmCtzF/jn8JlZk+c93WcO2bzaJJVjjAhGmsa/6JBoE=
 github.com/CloudyKit/jet/v5 v5.0.2/go.mod h1:dmmuzWBdd8bDyJYGZVFdhD21ptN+mjyigFubrffTGTw=
 github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo=
@@ -62,7 +63,9 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/denisenkom/go-mssqldb v0.0.0-20190707035753-2be1aa521ff4 h1:YcpmyvADGYw5LqMnHqSkyIELsHCGF6PkrmM31V8rF7o=
 github.com/denisenkom/go-mssqldb v0.0.0-20190707035753-2be1aa521ff4/go.mod h1:zAg7JM8CkOJ43xKXIj7eRO9kmWm/TW578qo+oDO6tuM=
+github.com/dgraph-io/badger/v2 v2.0.3/go.mod h1:3KY8+bsP8wI0OEnQJAKpd4wIJW/Mm32yw2j/9FUVnIM=
 github.com/dgraph-io/badger/v2 v2.2007.2/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE=
+github.com/dgraph-io/ristretto v0.0.2-0.20200115201040-8f368f2f2ab3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E=
 github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E=
 github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
 github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
@@ -170,6 +173,7 @@ github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
 github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
+github.com/google/uuid v1.1.2-0.20200519141726-cb32006e483f/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
 github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
@@ -204,6 +208,7 @@ github.com/iris-contrib/middleware/jwt v0.0.0-20200913183508-5d1bed0e6ea4 h1:bTW
 github.com/iris-contrib/middleware/jwt v0.0.0-20200913183508-5d1bed0e6ea4/go.mod h1:qWmmNphlBd+VWJiSq5jWzfXCwEyo9ApyZauMoiptcA0=
 github.com/iris-contrib/pongo2 v0.0.1 h1:zGP7pW51oi5eQZMIlGA3I+FHY9/HOQWDB+572yin0to=
 github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g=
+github.com/iris-contrib/schema v0.0.2/go.mod h1:iYszG0IOsuIsfzjymw1kMzTL8YQcCWlm65f3wX8J5iA=
 github.com/iris-contrib/schema v0.0.6 h1:CPSBLyx2e91H2yJzPuhGuifVRnZBBJ3pCOMbOvPZaTw=
 github.com/iris-contrib/schema v0.0.6/go.mod h1:iYszG0IOsuIsfzjymw1kMzTL8YQcCWlm65f3wX8J5iA=
 github.com/iris-contrib/swagger/v12 v12.2.0-alpha h1:0hPMn7LIp4czdrvX/Okw2jWi9PUloEp65KsJW1zajPw=
@@ -222,16 +227,21 @@ github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfV
 github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
 github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88 h1:uC1QfSlInpQF+M0ao65imhwqKnz3Q2z/d8PWZRMQvDM=
 github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k=
+github.com/kataras/blocks v0.0.2/go.mod h1:KPyOYc1M3MgzsznVcdjErtcYWO3AZXQbQ8fMYWcr3oA=
 github.com/kataras/blocks v0.0.3 h1:Ltvtne0oA6hIYBxyQpDmMIjQkQ8bKkWwj8Q8egkTxKw=
 github.com/kataras/blocks v0.0.3/go.mod h1:fu8wIPm3TgpiqW1fdPUSR8m/VMcZgj52vBYe1aS1mu0=
 github.com/kataras/blocks v0.0.4 h1:lvp/Yr7WoYJKuHpI8f4Shlsl1lb+PE2Lyt0qta5kYWA=
 github.com/kataras/blocks v0.0.4/go.mod h1:fu8wIPm3TgpiqW1fdPUSR8m/VMcZgj52vBYe1aS1mu0=
+github.com/kataras/golog v0.0.18/go.mod h1:jRYl7dFYqP8aQj9VkwdBUXYZSfUktm+YYg1arJILfyw=
 github.com/kataras/golog v0.1.5 h1:WbXu2rUc3yX/QB2mcNP5AjR64UlaaxkYrGMkO58T4Js=
 github.com/kataras/golog v0.1.5/go.mod h1:jOSQ+C5fUqsNSwurB/oAHq1IFSb0KI3l6GMa7xB6dZA=
+github.com/kataras/iris v0.0.2 h1:Tteb6pXLN9QiXvTCXCP31LRHu1LHlVA6Rappr9vWa1c=
+github.com/kataras/iris v0.0.2/go.mod h1:ab8yy1jWHFgoI+/B+zoIsQpVY/XUY+NNvVCXJ27Zat8=
 github.com/kataras/iris/v12 v12.2.0-alpha h1:MryoCsEmxmrQw0oIdNzVxFq61HvWrQqK2ukbsW5vlvI=
 github.com/kataras/iris/v12 v12.2.0-alpha/go.mod h1:gPkAD6kL4Q2s5YX913agSH3nNVrLPLAebyE3dI+3yEE=
 github.com/kataras/neffos v0.0.16 h1:ilpNTJw5C/YWChdXQq3IAGOdGBIA6LU+amEniTJaTTc=
 github.com/kataras/neffos v0.0.16/go.mod h1:BqWkF1c6cSyqw85dfCdqXxK5cMo/hyBGhtNuFkxHyMg=
+github.com/kataras/pio v0.0.8/go.mod h1:NFfMp2kVP1rmV4N6gH6qgWpuoDKlrOeYi3VrAIWCGsE=
 github.com/kataras/pio v0.0.10 h1:b0qtPUqOpM2O+bqa5wr2O6dN4cQNwSmFd6HQqgVae0g=
 github.com/kataras/pio v0.0.10/go.mod h1:gS3ui9xSD+lAUpbYnjOGiQyY7sUMJO+EHpiRzhtZ5no=
 github.com/kataras/sitemap v0.0.5 h1:4HCONX5RLgVy6G4RkYOV3vKNcma9p236LdGOipJsaFE=
@@ -243,6 +253,7 @@ github.com/kataras/tunnel v0.0.2/go.mod h1:VOlCoaUE5zN1buE+yAjWCkjfQ9hxGuhomKLsj
 github.com/kirinlabs/HttpRequest v1.0.5 h1:1bWj23Tzxm5Zyzm3YURa+ujnBXoXiIbsQq3K9U4SP8s=
 github.com/kirinlabs/HttpRequest v1.0.5/go.mod h1:XV38fA4rXZox83tlEV9KIQ7Cdsut319x6NGzVLuRlB8=
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
 github.com/klauspost/compress v1.11.0 h1:wJbzvpYMVGG9iTI9VxpnNZfd4DzMPoCWze3GgSqz8yg=
 github.com/klauspost/compress v1.11.0/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
@@ -276,6 +287,7 @@ github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5
 github.com/mediocregopher/radix/v3 v3.5.0/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8=
 github.com/mediocregopher/radix/v3 v3.5.2 h1:A9u3G7n4+fWmDZ2ZDHtlK+cZl4q55T+7RjKjR0/MAdk=
 github.com/mediocregopher/radix/v3 v3.5.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8=
+github.com/microcosm-cc/bluemonday v1.0.3/go.mod h1:8iwZnFn2CDDNZ0r6UXhF4xawGvzaqzCRa1n3/lO3W2w=
 github.com/microcosm-cc/bluemonday v1.0.4 h1:p0L+CTpo/PLFdkoPcJemLXG+fpMD7pYOoDEq1axMbGg=
 github.com/microcosm-cc/bluemonday v1.0.4/go.mod h1:8iwZnFn2CDDNZ0r6UXhF4xawGvzaqzCRa1n3/lO3W2w=
 github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
@@ -327,6 +339,7 @@ github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNue
 github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
 github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
 github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
+github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
 github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
 github.com/schollz/closestmatch v2.1.0+incompatible h1:Uel2GXEpJqOWBrlyI+oY9LTiyyjYS17cCYRqP13/SHk=
 github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g=
@@ -420,6 +433,7 @@ golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8U
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a h1:vclmkQCjlDX5OydZ9wv8rBCcS0QyQY66Mpf/7BZbInM=
 golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -449,6 +463,7 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
 golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA=
 golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 golang.org/x/net v0.0.0-20200904194848-62affa334b73 h1:MXfv8rhZWmFeqX3GNZRsd6vOLoaCHjYEX3qkRo3YBUA=
@@ -487,6 +502,7 @@ golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200724161237-0e2f3a69832c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200808120158-1030fc2bf1d9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200909081042-eff7692f9009 h1:W0lCpv29Hv0UaM1LXb9QlBHLNP8UFfcKjblhVCWftOM=
 golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200929083018-4d22bbb62b3c h1:/h0vtH0PyU0xAoZJVcRw1k0Ng+U0JAy3QDiFmppIlIE=
@@ -571,6 +587,7 @@ gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
 gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
 gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
 gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y=
+gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
 gopkg.in/ini.v1 v1.61.0 h1:LBCdW4FmFYL4s/vDZD1RQYX7oAR6IjujCYgMdbHBR10=
 gopkg.in/ini.v1 v1.61.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
 gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=

+ 59 - 6
services/contract_service.go

@@ -7,7 +7,9 @@
 package services
 
 import (
+	"errors"
 	"log"
+	"time"
 
 	"github.com/kataras/iris/v12"
 	"go.mod/dao"
@@ -24,9 +26,9 @@ type ContractService interface {
 	ValidRuleSectionDelete(ctx iris.Context) (*viewmodels.TreeSectionContract, error)
 	ValidRuleGet(ctx iris.Context) (*viewmodels.TreeSectionContract, error)
 	ValidRuleSerial(ctx iris.Context) (*viewmodels.TreeSectionContract, error)
+	ValidRuleContractAdd(ctx iris.Context) (*viewmodels.Contracts, error)
 
 	Get(treeId int, bidsectionId int, projectId int) *viewmodels.TreeSectionContract
-	GetAll()
 	GetSectionTreeContract(attribution string, bidsectionId int, projectId int) []*viewmodels.Contracts
 	GetSecionTree(bidsectionId int, projectId int) *viewmodels.TreeSectionContract
 	SetSection(templateNumber int, bidsectionId int, projectIdInt int) error
@@ -38,6 +40,7 @@ type ContractService interface {
 	MoveSerial(sectionData *viewmodels.TreeSectionContract, bidsectionId int, projectId int) error
 
 	GetContract(contractId int) *models.CmContracts
+	Add(contractData *viewmodels.Contracts, projectId int, bidsectionId int, treeId int) error
 }
 
 //返回service操作类
@@ -55,6 +58,7 @@ type contractService struct {
 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()),
@@ -168,6 +172,25 @@ func (s *contractService) ValidRuleSerial(ctx iris.Context) (*viewmodels.TreeSec
 	return treeSectionVaild, nil
 }
 
+// 新增合同参数验证
+func (s *contractService) ValidRuleContractAdd(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.ValidateAdd()
+	if err != nil {
+		log.Println("参数验证错误, error=", err)
+		return contractsVaild, err
+	}
+	return contractsVaild, nil
+}
+
 // 获得项目节
 func (s *contractService) Get(treeId int, bidsectionId int, projectId int) *viewmodels.TreeSectionContract {
 	// 1.获得项目节
@@ -177,12 +200,42 @@ func (s *contractService) Get(treeId int, bidsectionId int, projectId int) *view
 	return sectionVM
 }
 
-// 获得合同标段内容
-func (s *contractService) GetAll() {
-
-}
-
 // 获得合同详情
 func (s *contractService) GetContract(contractId int) *models.CmContracts {
 	return s.contractDao.Get(contractId)
 }
+
+// 新增合同
+func (s *contractService) Add(contractData *viewmodels.Contracts, projectId int, bidsectionId int, treeId int) error {
+	// 1. 项目节存在
+	contracts := s.treeContractDao.Get(treeId, bidsectionId, projectId)
+	if contracts.Id == 0 {
+		return errors.New("未找到项目节")
+	}
+	// k := int32(projectId)
+	// 2.项目节是没有合同
+	if contracts.ContractId != 0 {
+		return errors.New("该项目节上已经存在合同")
+	}
+
+	// 3.新增合同 --合计标段上的金额
+	contractsCm := &models.CmContracts{}
+	contractsCm.Code = contractData.Code
+	contractsCm.Name = contractData.Name
+	contractsCm.ContractsType = contractData.ContractsType
+	contractsCm.Price = contractData.Price
+	contractsCm.Returned = "0"
+	contractsCm.Paid = "0"
+	contractsCm.TreeId = treeId
+	contractsCm.ProjectId = projectId
+	contractsCm.BidsectionId = bidsectionId
+	contractsCm.Status = 0
+	contractsCm.CreateTime = time.Now()
+	contractsCm.UpdateTime = time.Now()
+
+	err := s.contractDao.Add(contractsCm)
+	if err != nil {
+		return err
+	}
+	return nil
+}

+ 21 - 18
services/rpc_service.go

@@ -11,20 +11,20 @@ import (
 	"log"
 	"time"
 
-	"go.mod/conf"
-	rpc "go.mod/proto"
+	safe "go.mod/proto"
 	"google.golang.org/grpc"
 )
 
 type RpcService interface {
-	Test()
+	Test(RpcConnect *grpc.ClientConn)
 }
 
 //返回service操作类
 type rpcService struct {
 	// address     string
 	// defaultName string
-	rpcClient *grpc.ClientConn
+	//Ctx iris.Context
+	//rpcClient *grpc.ClientConn
 	// 定义proto 接口文件- /proto/rpc.proto
 	// pb.UnimplementedGreeterServer
 }
@@ -33,31 +33,34 @@ type rpcService struct {
 func NewRpcService() RpcService {
 	return &rpcService{
 		// address:     "192.168.1.26:5001",
-		rpcClient: newGrpcClient(conf.NodeRpcHost),
+		//rpcClient: GetGrpcClient(ctx),
 	}
 }
 
-func newGrpcClient(address string) *grpc.ClientConn {
-	// 启动grpc客户端,连接grpc服务端
-	conn, err := grpc.Dial(address, grpc.WithInsecure())
-	if err != nil {
-		log.Fatalf("did not connect: %v", err)
-	}
-	// defer conn.Close()
-	return conn
-}
+// func GetGrpcClient(ctx iris.Context) *grpc.ClientConn {
+// 	// // 启动grpc客户端,连接grpc服务端
+// 	// conn, err := grpc.Dial(address, grpc.WithInsecure())
+// 	// if err != nil {
+// 	// 	log.Fatalf("did not connect: %v", err)
+// 	// }
+// 	// // defer conn.Close()
+// 	// return conn
+// }
 
 // 具体的业务逻辑
-func (s *rpcService) Test() {
+func (s *rpcService) Test(RpcConnect *grpc.ClientConn) {
 	// 1.结束后关闭
-	defer s.rpcClient.Close()
+	//defer s.rpcClient.Close()
 	// 使用连接,创建HelloService实例
-	rpcClient := rpc.NewGreeterClient(s.rpcClient)
+
+	// RpcConnect := s.Ctx.Values().Get("RpcConnect").(*grpc.ClientConn)
+
+	rpcClient := safe.NewGreeterClient(RpcConnect)
 	// c := pb.NewGreeterClient(conn)
 
 	ctx, cancel := context.WithTimeout(context.Background(), time.Second)
 	defer cancel()
-	r, err := rpcClient.SayHello(ctx, &rpc.HelloRequest{Name: "caipin"})
+	r, err := rpcClient.SayHello(ctx, &safe.HelloRequest{Name: "caipin"})
 	if err != nil {
 		log.Fatalf("could not greet: %v", err)
 	}

+ 34 - 26
web/api/contract_api.go

@@ -7,6 +7,8 @@
 package api
 
 import (
+	"fmt"
+
 	"github.com/kataras/iris/v12"
 	"go.mod/lib"
 	"go.mod/models"
@@ -180,30 +182,36 @@ func (c *ContractApi) GetIncome() {
 // 新增合同
 func (c *ContractApi) PostIncomeCreate() {
 
-	// // 获得模板号
-	// sectionData, err := c.ServiceContract.ValidRuleAdd(c.Ctx)
-	// if err != nil {
-	// 	c.Ctx.JSON(iris.Map{"code": -1, "msg": "解析参数出错"})
-	// 	return
-	// }
-
-	// // 项目ID
-	// projectIdInt, err := utils.GetProjectId(c.Ctx)
-	// if err != nil {
-	// 	c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
-	// 	return
-	// }
-	// // 标段ID
-	// bidsectionId, err := utils.GetDecryptId(sectionData.BidsectionId)
-	// if err != nil {
-	// 	c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
-	// 	return
-	// }
-
-	// err = c.ServiceContract.Add(sectionData, bidsectionId, projectIdInt)
-	// if err != nil {
-	// 	c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
-	// 	return
-	// }
-	// c.Ctx.JSON(iris.Map{"code": 0, "msg": "新增成功"})
+	// 获得模板号
+	contractData, err := c.ServiceContract.ValidRuleContractAdd(c.Ctx)
+	if err != nil {
+		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
+		return
+	}
+
+	// 项目ID
+	projectIdInt, err := utils.GetProjectId(c.Ctx)
+	if err != nil {
+		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
+		return
+	}
+	// 标段ID
+	bidsectionId, err := utils.GetDecryptId(contractData.BidsectionId)
+	if err != nil {
+		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
+		return
+	}
+	// 项目节ID
+	treeId, err := utils.GetDecryptId(contractData.TreeId)
+	if err != nil {
+		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
+		return
+	}
+
+	err = c.ServiceContract.Add(contractData, projectIdInt, bidsectionId, treeId)
+	if err != nil {
+		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
+		return
+	}
+	c.Ctx.JSON(iris.Map{"code": 0, "msg": "新增成功"})
 }

+ 8 - 2
web/api/rpc_api.go

@@ -9,6 +9,7 @@ package api
 import (
 	"github.com/kataras/iris/v12"
 	"go.mod/services"
+	"google.golang.org/grpc"
 )
 
 type RpcApi struct {
@@ -18,7 +19,12 @@ type RpcApi struct {
 	ServiceRpc services.RpcService
 }
 
-// 实例1
+// func (c *RpcApi) BeforeActivation(b mvc.BeforeActivation) {
+// 	fmt.Println("dd")
+// }
+
+// 实例1  RpcConnect *grpc.ClientConn
 func (c *RpcApi) Get() {
-	c.ServiceRpc.Test()
+	RpcConnect := c.Ctx.Values().Get("RpcConnect").(*grpc.ClientConn)
+	c.ServiceRpc.Test(RpcConnect)
 }

+ 1 - 1
web/main.go

@@ -40,7 +40,6 @@ func newApp() *bootstrap.Bootstrapper {
 // @securityDefinitions.apikey ApiKeyAuth
 // @in header
 // @name X-CSRF-Token
-
 func main() {
 	// 服务器集群的时候才需要区分这项设置
 	// 比如:根据服务器的IP、名称、端口号等,或者运行的参数
@@ -54,6 +53,7 @@ func main() {
 	config := &swagger.Config{
 		URL: "http://cm.com/docs/swagger.json", //The url pointing to API definition
 	}
+
 	app.Get("/swagger/{any:path}", swagger.CustomWrapHandler(config, swaggerFiles.Handler))
 
 	app.Listen(fmt.Sprintf(":%d", port))

+ 26 - 12
web/viewmodels/contract.go

@@ -8,20 +8,34 @@ package viewmodels
 
 import (
 	"time"
+
+	validation "github.com/go-ozzo/ozzo-validation/v3"
 )
 
 type Contracts struct {
 	Id            string    `form:"id" json:"id" `
-	TreeId        string    `xorm:"not null default 0 comment('树ID') INT(11)"`
-	ContractsType int       `xorm:"not null comment('合同类型(1收入合同2支出合同)') TINYINT(1)"`
-	ProjectId     string    `xorm:"not null default 0 comment('项目ID') INT(11)"`
-	BidsectionId  string    `xorm:"comment('标段ID') INT(11)"`
-	Name          string    `xorm:"not null comment('名称') VARCHAR(64)"`
-	Code          string    `xorm:"comment('合同编号') VARCHAR(32)"`
-	Price         string    `xorm:"not null comment('合同金额 0') DECIMAL(12,2)"`
-	Returned      string    `xorm:"not null comment('回款总金额 0') DECIMAL(12,2)"`
-	Paid          string    `xorm:"not null default 0.00 comment('合同已支付金额 0') DECIMAL(12,2)"`
-	Status        int       `xorm:"not null comment('合同状态 0') TINYINT(1)"`
-	CreateTime    time.Time `xorm:"comment('创建时间') DATETIME"`
-	UpdateTime    time.Time `xorm:"not null default 'CURRENT_TIMESTAMP' comment('更新时间') TIMESTAMP"`
+	TreeId        string    `form:"treeId" json:"treeId" `
+	ContractsType int       `form:"contractsType" json:"contractsType" `
+	ProjectId     string    `form:"projectId" json:"projectId" `
+	BidsectionId  string    `form:"bidsectionId" json:"bidsectionId" `
+	Name          string    `form:"name" json:"name" `
+	Code          string    `form:"code" json:"code" `
+	Price         string    `form:"price" json:"price" `
+	Returned      string    `form:"returned" json:"returned" `
+	Paid          string    `form:"paid" json:"paid" `
+	Status        int       `form:"status" json:"status" `
+	CreateTime    time.Time `form:"createTime" json:"createTime" `
+	UpdateTime    time.Time `form:"updateTime" json:"updateTime" `
+}
+
+// 验证方法
+func (l Contracts) ValidateAdd() error {
+	return validation.ValidateStruct(&l,
+		validation.Field(&l.TreeId, validation.Required.Error("项目节ID不能为空")),
+		validation.Field(&l.BidsectionId, validation.Required.Error("标段ID不能为空")),
+		validation.Field(&l.Code, validation.Required.Error("合同编号不能为空")),
+		validation.Field(&l.Name, validation.Required.Error("名称不能为空")),
+		validation.Field(&l.ContractsType, validation.Required.Error("合同类型不能为空"), validation.In(1, 2).Error("未找到相关合同类型")),
+		validation.Field(&l.Price, validation.Required.Error("合同金额不能为空")),
+	)
 }