diff --git a/cmd/web/main.go b/cmd/web/main.go index a2a991b..9191e9e 100644 --- a/cmd/web/main.go +++ b/cmd/web/main.go @@ -384,13 +384,15 @@ func (s *pdfTable) addRows(style string, alignStr string, cells ...pdfCell) { s.alignStr = alignStr _, s.fontH = s.pdf.GetFontSize() // 记录需要的最高行高 - x, y := s.pdf.GetXY() // 获取当前位置 - s.x = x - s.y = y - x = s.x - y = s.y + + x := s.x + y := s.y + fmt.Println(x, y) for column, cell := range cells { y = s.columnYList[column] + if y <= 0 { + y = s.y + } lines := s.pdf.SplitText(cell.txtStr, cell.w) //h := float64(len(lines)) * cell.h cell.lines = len(lines) @@ -423,7 +425,135 @@ func gen3() { pdf.AddPage() pdf.AddUTF8Font("SIMFANG", "", "./SIMFANG.TTF") pdf.SetFont("SIMFANG", "", float64(10)) + + imgFileStr := "./static/assets/img/zking_logo.png" + infoPtr := pdf.RegisterImage(imgFileStr, "") + imgWd, imgHt := infoPtr.Extent() + pdf.Image(imgFileStr, 0, 0, imgWd, imgHt, false, "", 0, "") + pdf.Cell(40, 10, `注意:请认准阅读所附条款,尤其是黑体部分内容`) + + pdf.Ln(-1) + pdf.SetFontSize(20) + pdf.Cell(40, 10, "投标保证保险投保单") + pdf.Ln(-1) + pdf.SetFontSize(10) + pdf.Cell(40, 10, "在您填写本投保单前,请仔细阅读《紫金财产保险股份有限公司投标保证保险条款》 ,特别注意条款中有") + pdf.Ln(5) + pdf.Cell(40, 10, "关保险责任、 免除保险人责任和投保人、被保险人义务的规定, 同时听取本公司就条款所做的说明,") + pdf.Ln(5) + pdf.Cell(40, 10, "并可就其中内容要求本公司做出解释。在您已充分理解保险条款后,请您如实填写本投保单并签章确认。") + pdf.Ln(-1) + + genTable(pdf) + pdf.Ln(-1) + pdf.Cell(40, 10, "投保人声明:贵公司已向本人交付并详细介绍了《紫金财产保险股份有限公司投标保证保险条款》的内容, 特 别是对保险合同中免除保险人责任的条款和投保人、被保险人义务的内容做了明确说明,本人已知悉其涵义, 同意投保并以此投保单作为订立保险合同的依据。") + pdf.Ln(-1) + pdf.Cell(40, 10, "投保人签章: 年 月 日") + pdf.Ln(-1) + pdf.AddPage() + + pdf.Cell(40, 10, "紫金财产保险股份有限公司") + pdf.Ln(-1) + pdf.Cell(40, 10, "投标保证保险(2021 版)条款") + pdf.Ln(-1) + pdf.Cell(40, 10, "注册编号:C00013731412021102203263") + pdf.Ln(-1) + pdf.Cell(40, 10, "备案号:(紫金保险)(备-保证保险)【2022】(主) 001 号") + pdf.Ln(-1) + pdf.Cell(40, 10, "关保险责任、 免除保险人责任和投保人、被保险人义务的规定, 同时听取本公司就条款所做的说明,") + + pdf.Ln(-1) + pdf.Ln(-1) + pdf.Ln(-1) + pdf.Cell(40, 10, "总则") + pdf.Ln(-1) + pdf.MultiCell(100, 6, "第一条 本保险合同由保险条款、投保单、保险单、保险凭证、批单和特别约定组成。凡涉及本保险合同的约定,均应采取书面形式。", "0", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "第二条 本保险合同的投保人是指响应招标人特定或不特定邀请、参加投标竞争的法人或其他组织,即投标人。", "0", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "第三条 本保险合同的被保险人是指在招标投标活动中以择优选择中标人为目的提出 招标项目进行招标的法人或其他组织,即招标人。", "0", "", false) + pdf.Ln(-1) + pdf.Cell(40, 10, "总则") + pdf.Ln(-1) + pdf.MultiCell(40, 6, "第四条 在保险期间内,投保人在投标过程中因存在如下情形导致其根据《中华人民共 和国招标投标法》及《中华人民共和国招标投标法实施条例》的相关规定或招标文件的约定 须向被保险人承担经济赔偿责任的,被保险人可向保险人提出索赔,保险人依据本保险合同 的约定,在保险金额范围内承担赔偿责任:\n", "0", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(一)投标截止后投保人未经被保险人同意撤销投标文件;", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(二)投保人与其他投标人互相串通;", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(三)投保人以他人名义投标或以其他方式弄虚作假,骗取中标;", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(四)投保人无正当理由在接到中标通知书后未在相关法律法规或招标文件要求的时限 内签订合同;", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(五)投保人违反招标文件或者在参加投标活动中存在其他实质性违反诚实信用原则的 行为。", "1", "", false) + pdf.Ln(-1) + pdf.Cell(40, 10, "责任免除") + pdf.Ln(-1) + pdf.Cell(40, 10, "第五条 如出现下列任一情形,保险人不承担保险责任:") + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(一)投保人与被保险人签订的合同经人民法院或仲裁机构认定不成立、不生效、无 效、被撤销、被解除的;", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(二)投保人与被保险人互相串通,为投保人谋取中标;", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(三)被保险人未按招标文件的要求履行相关义务的;", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(四)投保人和被保险人未经保险人同意更改招标文件内容,损害保险人利益的;", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(五)投保人与被保险人订立的协议或合同背离招标文件及中标人投标文件实质性内容;", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(六)被保险人及其代表的故意行为、犯罪行为;", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(七)所有投标被否决,被保险人重新招标的;", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(八)被保险人同意投保人在投标截止日后撤销投标文件。", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "第六条 下列原因造成的损失和费用,保险人不负责赔偿:", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(一)战争、敌对行为、军事行为、武装冲突、罢工、骚乱、暴动、恐怖活动;", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(二)核辐射、核爆炸、核污染及其他放射性污染;", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(三)大气污染、土地污染、水污染及其他各种污染;", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(四)行政行为或司法行为;", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(五)洪水、台风、地震、海啸等自然灾害。", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "第七条 下列损失和费用,保险人不负责赔偿:", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(一)被保险人根据招标文件的要求应承担的责任,以及为收集、确认、证明投保人 造成损失所产生的任何费用;", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(二)被保险人与投保人就招标投标活动产生纠纷所致的任何法律费用,包括但不限 于诉讼或仲裁费、财产保全或证据保全费、强制执行费、评估费、拍卖费、鉴定费、律师 费、差旅费、调查取证费等;", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(三)本保险合同载明的免赔额,或根据本保险合同载明的免赔率计算的免赔额;", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(四)被保险人以外的任何第三方的损失;", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(五)各类间接损失;", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(六)罚款、罚金及惩罚性赔偿;", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(七)因不可归责于投保人而导致的被保险人的损失;", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(八)本保险合同中载明的免赔额,或按本保险合同中载明的免赔率计算的免赔额;", "1", "", false) + pdf.Ln(-1) + pdf.MultiCell(40, 6, "(九)其他不属于本保险责任范围内的损失、费用和责任。;", "1", "", false) + pdf.Ln(-1) + pdf.Cell(40, 10, "责任免除") + + err := pdf.OutputFileAndClose("./test4.pdf") + if err != nil { + fmt.Println(err) + } +} + +func genTable(pdf *gofpdf.Fpdf) { + x, y := pdf.GetXY() + fmt.Println(x) + fmt.Println(y) myPdf := pdfTable{pdf: pdf} + myPdf.x = x + myPdf.y = y myPdf.columnYList = make([]float64, 5) width, _ := pdf.GetPageSize() // 页面宽度 @@ -586,8 +716,11 @@ func gen3() { {w: 0, h: tableH, txtStr: ""}, }...) - err := pdf.OutputFileAndClose("./test4.pdf") - if err != nil { - fmt.Println(err) - } + myPdf.addRows("", "LM", []pdfCell{ + {w: 70, h: 5 * tableH, txtStr: "偿付能力信息"}, + {w: 0, h: 5 * tableH, txtStr: ""}, + {w: 3 * tableWidth, h: 5 * tableH, txtStr: "我公司最近季度的综合偿付能力充足率和风险综合评级结果告知如下:\n1、我公司2024年1季度综合偿付能力充足率:339.97%, 已达到政府监管要 求。\n2、我公司2024年1季度核心偿付能力充足率:262.64%, 已达到政府监管要 求。\n3、我公司2023年4季度风险综合评级:AAA级。"}, + {w: 0, h: 5 * tableH, txtStr: ""}, + {w: 0, h: 5 * tableH, txtStr: ""}, + }...) } diff --git a/conf/config.yaml b/conf/config.yaml index 69c3eff..d8109d6 100644 --- a/conf/config.yaml +++ b/conf/config.yaml @@ -21,8 +21,8 @@ jwt: issuer: "insure" zking: base-url: "https://test-open.zking.com" - app-id: "" - app-secret: "" + app-id: "zijin" + app-secret: "25CCFF96DC3E106F33E0D8C0B61126B0" suixing: base-url: "https://test-open.zking.com" # app-id: "2024060132098212" diff --git a/service/order_service.go b/service/order_service.go index cb6ad9a..08c12c4 100644 --- a/service/order_service.go +++ b/service/order_service.go @@ -3,7 +3,6 @@ package service import ( "encoding/json" "errors" - "fmt" "github.com/xuri/excelize/v2" "gorm.io/gorm" "insure/dto/request/manage" @@ -319,19 +318,16 @@ func (s *orderService) PostToZking(orderSn string) (*zking.Result, error) { Applicant: applicant, Assured: assured, } - createDataStr, err := json.Marshal(createData) - if err != nil { - return nil, err - } + data, _ := json.Marshal(createData) - fmt.Println(string(createDataStr)) param := zking.CommonParam{ AppID: global.Config.Zking.AppID, RequestID: order.RequestID, Timestamp: strconv.Itoa(int(time.Now().Unix())), Version: "1.0.0", - Data: string(createDataStr), + Data: string(data), } + result, err := zking.InsureApi.SuixingCreate(param) if err != nil { return nil, err diff --git a/test4.pdf b/test4.pdf index aea900d..bc8b752 100644 Binary files a/test4.pdf and b/test4.pdf differ diff --git a/third_party/zking/api.go b/third_party/zking/api.go index e0d0912..25a34b0 100644 --- a/third_party/zking/api.go +++ b/third_party/zking/api.go @@ -3,6 +3,7 @@ package zking import ( "encoding/json" "fmt" + "github.com/tidwall/gjson" "insure/e" "insure/global" "insure/utils" @@ -36,13 +37,19 @@ func (api *insureApi) SuixingCreate(param CommonParam) (*Result, error) { func (api *insureApi) Sign(param *CommonParam) error { //vals, err := utils.StructToURLValues(param) + data, err := json.Marshal(param) + if err != nil { + return err + } + dataRet := gjson.Get(string(data), "data") + fmt.Println(dataRet.String()) vals := url.Values{} - vals.Set("appid", param.AppID) + vals.Set("appid", global.Config.Zking.AppID) vals.Set("requestid", param.RequestID) vals.Set("timestamp", param.Timestamp) vals.Set("version", param.Version) - vals.Set("data", utils.Md5(param.Data)) - vals.Set("appsecret", "aaaaaa") + vals.Set("data", utils.Md5(dataRet.String())) + vals.Set("appsecret", global.Config.Zking.AppSecret) fmt.Println(vals.Encode()) param.Sign = utils.Sha1(vals.Encode()) return nil @@ -69,6 +76,7 @@ func (api *insureApi) post(uri string, data interface{}) ([]byte, error) { return nil, err } + fmt.Println(string(dataStr)) body := strings.NewReader(string(dataStr)) u := global.Config.Zking.BaseUrl + uri diff --git a/third_party/zking/common_param.go b/third_party/zking/common_param.go index cc65cdd..9052841 100644 --- a/third_party/zking/common_param.go +++ b/third_party/zking/common_param.go @@ -5,6 +5,7 @@ type CommonParam struct { RequestID string `json:"requestid" form:"requestid"` Timestamp string `json:"timestamp" form:"timestamp"` Version string `json:"version" form:"version"` - Data string `json:"data" form:"data"` - Sign string `json:"sign" form:"sign"` + //Data suixing.CreateData `json:"data" form:"data"` + Data string `json:"data" form:"data"` + Sign string `json:"sign" form:"sign"` }