package contract import ( "fmt" "github.com/gin-gonic/gin" "github.com/go-playground/validator/v10" "hongze/fms_api/controller/resp" "hongze/fms_api/global" "hongze/fms_api/models/base" "hongze/fms_api/models/fms" ) // // RegisterController 合同登记 type PrePaymentController struct{} // List // @Title 到款预登记列表 // @Description 到款预登记列表 // @Param Keyword query string false "关键词" // @Param StartDate query string false "合同开始日期" // @Param EndDate query string false "合同结束日期" // @Param SortType query string true "如何排序,是正序还是倒序,枚举值:`asc 正序`,`desc 倒叙`" // @Success 200 {object} fms.ContractRegisterItem // @router /contract/pre_pay/list [get] func (rg *PrePaymentController) List(c *gin.Context) { var req fms.PrePayListReq if e := c.BindQuery(&req); e != nil { err, ok := e.(validator.ValidationErrors) if !ok { resp.FailData("参数解析失败", "Err:"+e.Error(), c) return } resp.FailData("参数解析失败", err.Translate(global.Trans), c) return } cond := `1 = 1` pars := make([]interface{}, 0) // 合同编号/客户姓名/销售/实际使用方 if req.Keyword != "" { kw := "%" + req.Keyword + "%" cond += ` AND (company_name LIKE ? OR contract_code LIKE ? OR seller_name LIKE ? OR actual_company_name LIKE ?)` pars = append(pars, kw, kw, kw, kw) } if req.StartDate != "" && req.EndDate != "" { st := fmt.Sprint(req.StartDate, " 00:00:00") ed := fmt.Sprint(req.EndDate, " 23:59:59") cond += ` AND (create_time BETWEEN ? AND ?)` pars = append(pars, st, ed) } page := new(base.Page) page.SetPageSize(req.PageSize) page.SetCurrent(req.Current) page.AddOrderItem(base.OrderItem{Column: "create_time", Asc: false}) total, list, e := fms.GetContractRegisterItemPageList(page, cond, pars) if e != nil { resp.FailMsg("获取失败", "获取合同登记列表失败, Err: "+e.Error(), c) return } registerIds := make([]int, 0) for i := range list { registerIds = append(registerIds, list[i].ContractRegisterId) } serviceMap := make(map[int]string, 0) invoiceMap := make(map[int][]*fms.ContractInvoiceItem, 0) paymentMap := make(map[int][]*fms.ContractInvoiceItem, 0) if len(registerIds) > 0 { // 获取服务套餐 servicesNameList, e := fms.GetContractRegisterServicesNameByRegisterIds(registerIds) if e != nil { resp.FailMsg("获取失败", "获取套餐拼接字符串失败, Err: "+e.Error(), c) return } for i := range servicesNameList { serviceMap[servicesNameList[i].ContractRegisterId] = servicesNameList[i].ServicesName } // 获取开票/到款列表 invoiceCond := `contract_register_id IN ?` invoicePars := make([]interface{}, 0) invoicePars = append(invoicePars, registerIds) invoiceList, e := fms.GetContractInvoiceItemList(invoiceCond, invoicePars) if e != nil { resp.FailMsg("获取失败", "获取开票/到款列表失败, Err: "+e.Error(), c) return } for i := range invoiceList { if invoiceMap[invoiceList[i].ContractRegisterId] == nil { invoiceMap[invoiceList[i].ContractRegisterId] = make([]*fms.ContractInvoiceItem, 0) } if paymentMap[invoiceList[i].ContractRegisterId] == nil { paymentMap[invoiceList[i].ContractRegisterId] = make([]*fms.ContractInvoiceItem, 0) } if invoiceList[i].InvoiceType == fms.ContractInvoiceTypeMake { invoiceMap[invoiceList[i].ContractRegisterId] = append(invoiceMap[invoiceList[i].ContractRegisterId], invoiceList[i]) } if invoiceList[i].InvoiceType == fms.ContractInvoiceTypePay { paymentMap[invoiceList[i].ContractRegisterId] = append(paymentMap[invoiceList[i].ContractRegisterId], invoiceList[i]) } } } respList := make([]*fms.ContractRegisterList, 0) for i := range list { v := new(fms.ContractRegisterList) v.ContractRegisterItem = list[i] v.ServicesName = serviceMap[list[i].ContractRegisterId] v.InvoiceList = invoiceMap[list[i].ContractRegisterId] v.PaymentList = paymentMap[list[i].ContractRegisterId] respList = append(respList, v) } page.SetTotal(total) baseData := new(base.BaseData) baseData.SetPage(page) baseData.SetList(respList) resp.OkData("获取成功", baseData, c) }