ziwen 1 年之前
父节点
当前提交
6424da7794
共有 2 个文件被更改,包括 211 次插入45 次删除
  1. 211 2
      controller/census/invoice_payment.go
  2. 0 43
      models/fms/invoice_payment_summary.go

+ 211 - 2
controller/census/invoice_payment.go

@@ -10,10 +10,8 @@ import (
 	"hongze/fms_api/global"
 	"hongze/fms_api/models"
 	"hongze/fms_api/models/base"
-	"hongze/fms_api/models/crm"
 	"hongze/fms_api/models/fms"
 	"hongze/fms_api/services/alarm_msg"
-	crmService "hongze/fms_api/services/crm"
 	fmsService "hongze/fms_api/services/fms"
 	"hongze/fms_api/utils"
 	"net/http"
@@ -2634,6 +2632,217 @@ func ExportIncomeList(c *gin.Context, list []*fms.IncomeSummaryItem) {
 	randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
 	fileName := sheetName + randStr + ".xlsx"
 
+	c.Writer.Header().Add("Content-Disposition", fmt.Sprintf(`attachment; filename="%s"`, fileName))
+	c.Writer.Header().Add("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
+	http.ServeContent(c.Writer, c.Request, fileName, time.Now(), content)
+}
+
+
+// ExportNotPaymentCensusList 导出开票未到款统计列表
+func ExportNotPaymentCensusList(c *gin.Context, results *fms.NotInvoicePaymentCensusResp) {
+	list := results.DataList
+	if len(list) == 0 {
+		resp.Fail("列表数据为空", c)
+		return
+	}
+
+	// 生成Excel文件
+	xlsxFile := xlsx.NewFile()
+	style := xlsx.NewStyle()
+	alignment := xlsx.Alignment{
+		Horizontal: "center",
+		Vertical:   "center",
+		WrapText:   true,
+	}
+	style.Alignment = alignment
+	style.ApplyAlignment = true
+
+	sheet, err := xlsxFile.AddSheet("开票未到款统计")
+	if err != nil {
+		resp.FailData("新增Sheet失败", "Err:"+err.Error(), c)
+		return
+	}
+	_ = sheet.SetColWidth(1, 1, 30)
+	_ = sheet.SetColWidth(3, 3, 30)
+
+	// 前三行-开票金额合计
+	rowA := sheet.AddRow()
+	cellAA := rowA.AddCell()
+	cellAA.SetString(fmt.Sprintf("开票未到款合计金额(换算后):%.2f(元)", results.InvoiceTotal))
+	rowBData := "已开票金额:"
+	for _, v := range results.InvoiceCurrencyTotal {
+		rowBData += fmt.Sprintf("%s%.2f(%s)  ", v.Name, v.Amount, v.UnitName)
+	}
+	rowB := sheet.AddRow()
+	rowB.AddCell().SetString(rowBData)
+	sheet.AddRow()
+
+	// 表头, 套餐动态获取
+	rowTitle := []string{"序号", "客户名称", "是否新客户", "合同有效期", "开票日", "开票金额", "到款日", "到款金额", "付款方式", "销售",
+		"销售组别", "销售类型"}
+	serviceTempCond := ``
+	serviceTempPars := make([]interface{}, 0)
+	serviceTempOB := new(fms.ContractServiceTemplate)
+	serviceTempList, e := serviceTempOB.List(serviceTempCond, serviceTempPars)
+	if e != nil {
+		resp.FailData("获取套餐模板列表失败", "Err:"+e.Error(), c)
+		return
+	}
+	serviceTempListMap := make(map[int]*fms.ContractServiceTemplate)
+	var serviceTempShow [] *fms.ContractServiceTemplate
+	for i := range serviceTempList {
+		serviceTempListMap[serviceTempList[i].ServiceTemplateId] = serviceTempList[i]
+	}
+	for i := range serviceTempList {
+		if serviceTempList[i].ProductId == 1 {
+			rowTitle = append(rowTitle, serviceTempList[i].Title)
+			serviceTempShow = append(serviceTempShow, serviceTempList[i])
+		}else if serviceTempList[i].ProductId == 2{
+			if serviceTempList[i].Title == "行业套餐" || serviceTempList[i].Title == "权益大套餐" || (serviceTempList[i].Title == "策略" && serviceTempListMap[serviceTempList[i].Pid].Pid==0){
+			}else if serviceTempList[i].Title == "医药" || serviceTempList[i].Title == "消费" || serviceTempList[i].Title == "科技" || serviceTempList[i].Title == "智造" {
+			}else {
+				serviceTempShow = append(serviceTempShow, serviceTempList[i])
+			}
+			if serviceTempList[i].Title == "行业套餐" || serviceTempList[i].Title == "45万" ||  serviceTempList[i].Title == "70万" {
+				continue
+			}
+
+			if serviceTempList[i].Pid > 0 &&  serviceTempListMap[serviceTempList[i].Pid].Pid > 0 {
+				continue
+			}
+
+			rowTitle = append(rowTitle, serviceTempList[i].Title)
+		}
+	}
+
+	hi := 0
+	insertHi := 0
+	titleRow := sheet.AddRow()
+	for i := range rowTitle {
+		v := titleRow.AddCell()
+		v.SetString(rowTitle[i])
+		v.SetStyle(style)
+		if rowTitle[i] != "权益大套餐" && rowTitle[i] != "医药" && rowTitle[i] != "消费" && rowTitle[i] != "科技" && rowTitle[i] != "智造" {
+			v.VMerge = 1
+			hi ++
+		}else{
+			if insertHi == 0 {
+				insertHi = hi
+			}
+			v.HMerge = 1
+			titleRow.AddCell().SetString("")
+		}
+	}
+
+	// 新增一行放主观和客观
+	specialRow := sheet.AddRow()
+	for i:=0; i< hi; i++ {
+		if i == insertHi {
+			v1 := specialRow.AddCell()
+			v1.SetString("45万")
+			v1.SetStyle(style)
+			v1 = specialRow.AddCell()
+			v1.SetString("70万")
+			v1.SetStyle(style)
+			for j:=0; j<8;j++ {
+				if j%2 ==0 {
+					v1 = specialRow.AddCell()
+					v1.SetString("主观")
+					v1.SetStyle(style)
+				}else{
+					v1 = specialRow.AddCell()
+					v1.SetString("客观")
+					v1.SetStyle(style)
+				}
+			}
+		}else{
+			v := specialRow.AddCell()
+			v.SetString("")
+		}
+	}
+
+	newCompanyMap := map[int]string{0: "否", 1: "是"}
+	sellerTypeMap := map[int]string{1:"FICC销售", 2:"权益销售"}
+	for k, v := range list {
+		dataRow := sheet.AddRow()
+		// 前四个单元格根据每行开票到款条数向下合并
+		l := len(v.InvoicePaymentList)
+		mergeRowNum := l - 1
+		// 序号
+		sortNum := k + 1
+		colA := dataRow.AddCell()
+		colA.VMerge = mergeRowNum
+		colA.SetString(fmt.Sprint(sortNum))
+		// 客户名称
+		colB := dataRow.AddCell()
+		colB.VMerge = mergeRowNum
+		colB.SetString(v.CompanyName)
+		// 是否新客户
+		colC := dataRow.AddCell()
+		colC.VMerge = mergeRowNum
+		colC.SetString(newCompanyMap[v.NewCompany])
+		// 合同有效期
+		colD := dataRow.AddCell()
+		colD.VMerge = mergeRowNum
+		colD.SetString(fmt.Sprint(v.StartDate, "至", v.EndDate))
+		// 开票到款信息
+		for k2, v2 := range v.InvoicePaymentList {
+			rowData := []string{
+				v2.InvoiceDate,                                // 开票日
+				fmt.Sprint(v2.InvoiceAmount),                  // 开票金额
+				v2.PaymentDate,                                // 到款日
+				fmt.Sprint(v2.PaymentAmount),                  // 到款金额
+				fms.ContractPaymentPayTypeNameMap[v2.PayType], // 付款方式
+				v2.SellerName,                                 // 销售
+				v2.SellerGroupName,                            // 组别
+				sellerTypeMap[v2.SellerType],                  // 销售类型
+			}
+			// 套餐金额信息
+			serviceTempShowAmount := make(map[int]string)
+			for i := range serviceTempShow {
+				for s2 := range v2.ServiceAmountList {
+					item := v2.ServiceAmountList[s2]
+					if item.ServiceTemplateId == serviceTempShow[i].ServiceTemplateId {
+						serviceTempShowAmount[serviceTempShow[i].ServiceTemplateId] = fmt.Sprint(item.Amount)
+						break
+					}else if serviceTempShow[i].Pid == item.ServiceTemplateId {
+						serviceTempShowAmount[serviceTempShow[i].ServiceTemplateId] = fmt.Sprint(item.Amount/2)
+						break
+					}
+				}
+			}
+			for i := range serviceTempShow {
+				sa := ""
+				if am, ok :=  serviceTempShowAmount[serviceTempShow[i].ServiceTemplateId]; ok {
+					sa = am
+				}
+				rowData = append(rowData, sa)
+			}
+			// 首行开票到款
+			if k2 == 0 {
+				for i := range rowData {
+					dataRow.AddCell().SetString(rowData[i])
+				}
+				continue
+			}
+			// 其他行开票到款, 加四列空的单元格用于合并
+			dataRowExtra := sheet.AddRow()
+			for i := 0; i < 4; i++ {
+				dataRowExtra.AddCell()
+			}
+			for i := range rowData {
+				dataRowExtra.AddCell().SetString(rowData[i])
+			}
+		}
+	}
+
+	// 输出文件
+	var buffer bytes.Buffer
+	_ = xlsxFile.Write(&buffer)
+	content := bytes.NewReader(buffer.Bytes())
+	randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
+	fileName := "商品到款统计_" + randStr + ".xlsx"
+
 	c.Writer.Header().Add("Content-Disposition", fmt.Sprintf(`attachment; filename="%s"`, fileName))
 	c.Writer.Header().Add("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
 	http.ServeContent(c.Writer, c.Request, fileName, time.Now(), content)

+ 0 - 43
models/fms/invoice_payment_summary.go

@@ -213,19 +213,6 @@ func GetContractSummaryIncomeAmount(condition string, pars []interface{}) (resul
 	return
 }
 
-type IncomeSummaryItemList []*IncomeSummaryItem
-
-func (c IncomeSummaryItemList) Len() int {
-	return len(c)
-}
-
-func (c IncomeSummaryItemList) Less(i, j int) bool {
-	return c[i].InvoiceDate.Before(c[j].InvoiceDate)
-}
-
-func (c IncomeSummaryItemList) Swap(i, j int) {
-	c[i], c[j] = c[j], c[i]
-}
 type InvoiceSummary struct {
 	SummaryId           int     `json:"summary_id" description:"汇总ID"`
 	PaymentAmountCount  float64 `gorm:"column:payment_amount_count" json:"payment_amount_count" description:"到款金额"`
@@ -291,36 +278,6 @@ type NotInvoicePaymentCensusResp struct {
 	NotPaymentCurrencyTotal []*InvoiceListCurrencyTotal `json:"not_payment_currency_total" description:"未开票-分币种总金额"`
 }
 
-// GetInvoicePaymentSummaryByRegisterIdAndInvoiceId 根据合同登记ID和开票ID获取汇总数据
-func GetInvoicePaymentSummaryByRegisterIdAndInvoiceId(registerId, invocieId int) (results []*ContractRegisterSummary, err error) {
-	sql := `SELECT * FROM invoice_payment_summary WHERE register_id = ? AND invoice_id= ? `
-	err = global.DEFAULT_MYSQL.Exec(sql, registerId, invocieId).Find(&results).Error
-	return
-}
-
-type IncomeSummaryItem struct {
-	CompanyName  string    `json:"company_name" description:"客户名称"`
-	ContractType int       `json:"contract_type" description:"是否为新客户: 2-否; 1-是"`
-	InvoiceDate  time.Time `json:"invoice_time" description:"开票日期"`
-	Amount       float64   `json:"amount" description:"金额"`
-	SellerName   string    `json:"seller_name" description:"销售名称"`
-}
-
-// GetContractSummaryIncomeAmount 获取汇总金额合计信息
-func GetContractSummaryIncomeAmount(condition string, pars []interface{}) (results []*IncomeSummaryItem, err error) {
-	query := global.DEFAULT_MYSQL.Table("invoice_payment_summary AS a").
-		Select("IF(a.invoice_id=0,d.amount, b.amount) AS amount,IF(a.invoice_id=0,d.invoice_time, b.invoice_time) AS invoice_date, c.contract_type,c.company_name,IF(a.invoice_id=0,d.seller_name, b.seller_name) AS seller_name,IF(a.invoice_id=0,d.seller_id, b.seller_id) AS final_seller_id").
-		Joins("LEFT JOIN contract_invoice AS b ON a.invoice_id = b.contract_invoice_id AND b.is_deleted = 0 ").
-		Joins("LEFT JOIN contract_invoice AS d ON a.payment_id = d.contract_invoice_id AND d.is_deleted = 0").
-		Joins("JOIN contract_register AS c ON a.register_id = c.contract_register_id AND c.is_deleted = 0").
-		Where(condition, pars...).Group("id").Order("invoice_date ")
-	//nq := global.DEFAULT_MYSQL.Table("(?) AS e", query).
-	//	Select(" IFNULL( SUM( e.amount ), 0 ) ")
-
-	err = query.Find(&results).Error
-	return
-}
-
 type IncomeSummaryItemList []*IncomeSummaryItem
 
 func (c IncomeSummaryItemList) Len() int {