123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305 |
- package service
- import (
- "encoding/json"
- "fmt"
- "time"
- "youngee_b_api/app/consts"
- "youngee_b_api/app/dao"
- "youngee_b_api/app/entity"
- "youngee_b_api/app/util"
- "youngee_b_api/app/vo"
- )
- type InvoiceService struct{}
- // 设置默认开票抬头
- func (s InvoiceService) UpdateInvoiceDefault(param *vo.InvoiceDefaultParam) (*int64, error) {
- var err error
- invoiceInfo, err := dao.InvoiceInfoDao{}.SelectDefault(param.EnterpriseId, param.InvoiceType, 1)
- if err != nil {
- return nil, err
- }
- if invoiceInfo != nil && invoiceInfo.InvoiceID != 0 {
- err := dao.InvoiceInfoDao{}.Delete(invoiceInfo.InvoiceID)
- if err != nil {
- return nil, err
- }
- }
- if param.HeadType == 0 {
- param.HeadType = 1
- }
- invoiceInfoAdd := entity.InvoiceInfo{
- EnterpriseID: param.EnterpriseId,
- InvoiceType: param.InvoiceType,
- HeadType: consts.GetHeadType(param.HeadType),
- InvoiceHeader: param.InvoiceHead,
- TaxCode: param.TaxCode,
- RegisteredAddress: param.RegisteredAddress,
- RegisteredPhone: param.RegisteredPhone,
- Bank: param.Bank,
- BankCardNumber: param.BankCardNumber,
- IsDefault: 1,
- UpdateAt: time.Now(),
- }
- err = dao.InvoiceInfoDao{}.Insert(&invoiceInfoAdd)
- if err != nil {
- return nil, err
- }
- return &invoiceInfoAdd.InvoiceID, nil
- }
- // 获取默认开票抬头
- func (s InvoiceService) GetInvoiceDefault(param *vo.InvoiceDefaultParam) (*vo.ReInvoiceInfo, error) {
- invoiceInfo, err := dao.InvoiceInfoDao{}.SelectDefault(param.EnterpriseId, param.InvoiceType, 1)
- if err != nil {
- return nil, err
- }
- reInvoiceInfo := &vo.ReInvoiceInfo{
- InvoiceHeader: invoiceInfo.InvoiceHeader,
- TaxCode: invoiceInfo.TaxCode,
- RegisteredAddress: invoiceInfo.RegisteredAddress,
- RegisteredPhone: invoiceInfo.RegisteredPhone,
- Bank: invoiceInfo.Bank,
- BankCardNumber: invoiceInfo.BankCardNumber,
- IsDefault: invoiceInfo.IsDefault,
- }
- return reInvoiceInfo, nil
- }
- // 确认开票
- func (s InvoiceService) BillInvoice(param *vo.InvoiceBillParam) (*string, error) {
- var err error
- billingId := util.GenerateDateRelatedUUID(16)
- taskIds := param.TaskIds
- // 将二维数组转换为 JSON 字符串
- jsonData, _ := json.Marshal(taskIds)
- // 将 []byte 转换为 string
- taskIdsString := string(jsonData)
- invoiceRecordAdd := entity.InvoiceRecord{
- BillingId: billingId,
- EnterpriseID: param.EnterpriseId,
- SubAccountId: param.SubAccountId,
- InvoiceAmount: param.InvoiceAmount,
- InvoiceBody: param.InvoiceBody,
- InvoiceContent: param.InvoiceContent,
- InvoiceType: param.InvoiceType,
- InvoiceHeader: param.InvoiceHead,
- TaxCode: param.TaxCode,
- RegisteredAddress: param.RegisteredAddress,
- RegisteredPhone: param.RegisteredPhone,
- Bank: param.Bank,
- BankCardNumber: param.BankCardNumber,
- TaskIds: taskIdsString,
- Status: 1,
- SubmitAt: time.Now(),
- }
- err = dao.InvoiceRecordDao{}.Insert(&invoiceRecordAdd)
- if err != nil {
- return nil, err
- }
- // 更新选品表的开票状态字段
- // 电商带货
- err = dao.SelectionInfoDAO{}.UpdateInvoiceStatus(taskIds[0])
- if err != nil {
- return nil, err
- }
- // 品牌种草
- err = dao.ProjectDAO{}.UpdateInvoiceStatus(taskIds[1])
- if err != nil {
- return nil, err
- }
- // 本地生活
- return &billingId, nil
- }
- // 开票记录
- func (s InvoiceService) GetBillList(param *vo.InvoiceBillListParam) (vo.ResultVO, error) {
- if param.Page <= 0 {
- param.Page = 1
- }
- if param.PageSize <= 0 {
- param.PageSize = 10
- }
- var result vo.ResultVO
- var reInvoiceRecords []*vo.ReInvoiceRecord
- invoiceRecords, total, _ := dao.InvoiceRecordDao{}.GetBillList(param.EnterpriseId, param.SubAccountId, param.BillStatus, param.Page, param.PageSize)
- //if err != nil {
- // result = vo.ResultVO{
- // Page: param.Page,
- // PageSize: param.PageSize,
- // Total: total,
- // Data: reInvoiceRecords,
- // }
- // return result, err
- //}
- for _, invoiceRecord := range invoiceRecords {
- var creatorName string
- if invoiceRecord.SubAccountId == 0 {
- enterprise, err := dao.EnterpriseDao{}.GetEnterprise(invoiceRecord.EnterpriseID)
- if err == nil && enterprise != nil {
- creatorName = enterprise.BusinessName
- }
- } else {
- subAccount, err := dao.SubAccountDao{}.GetSubAccount(invoiceRecord.SubAccountId)
- if err == nil && subAccount != nil {
- creatorName = subAccount.SubAccountName
- }
- }
- var taskNumber int
- // 将 JSON 字符串解码为二维数组
- var arrayData [3][]string
- err := json.Unmarshal([]byte(invoiceRecord.TaskIds), &arrayData)
- if err != nil {
- fmt.Println("Error unmarshaling JSON:", err)
- return result, err
- }
- for _, array := range arrayData {
- taskNumber += len(array)
- }
- reInvoiceRecord := &vo.ReInvoiceRecord{
- BillingId: invoiceRecord.BillingId,
- InvoiceAmount: invoiceRecord.InvoiceAmount,
- CreatorName: creatorName,
- SubmitAt: invoiceRecord.SubmitAt.Format("2006-01-02 15:04:05"),
- InvoiceBody: invoiceRecord.InvoiceBody,
- InvoiceType: invoiceRecord.InvoiceType,
- Status: invoiceRecord.Status,
- TaskNumber: int64(taskNumber),
- InvoiceUrl: invoiceRecord.InvoiceUrl,
- }
- if param.BillStatus == 2 {
- reInvoiceRecord.BillingAt = invoiceRecord.BillingAt.Format("2006-01-02 15:04:05")
- }
- reInvoiceRecords = append(reInvoiceRecords, reInvoiceRecord)
- }
- result = vo.ResultVO{
- Page: param.Page,
- PageSize: param.PageSize,
- Total: total,
- Data: reInvoiceRecords,
- }
- return result, nil
- }
- // 可开票账单
- func (s InvoiceService) GetBillableList(param *vo.InvoiceBillListParam) (vo.ResultVO, error) {
- if param.Page <= 0 {
- param.Page = 1
- }
- if param.PageSize <= 0 {
- param.PageSize = 10
- }
- var result vo.ResultVO
- var reBillableInfos []*vo.ReBillableInfo
- var billableSelections []*entity.SelectionInfo
- var billableProjects []*entity.Project
- // 电商带货
- billableSelections, _, _ = dao.InvoiceRecordDao{}.GetBillableSelectionList(param.EnterpriseId, param.SubAccountId, param.Page, param.PageSize)
- // 品牌种草
- billableProjects, _, _ = dao.InvoiceRecordDao{}.GetBillableProjectList(param.EnterpriseId, param.SubAccountId, param.Page, param.PageSize)
- // 本地生活
- // 汇总结果
- for _, billableSelection := range billableSelections {
- // 获取商品详情字段
- var creatorName string
- var productName string
- var productPrice float64
- var mainImage string
- if billableSelection.SubAccountId == 0 {
- enterprise, err := dao.EnterpriseDao{}.GetEnterprise(billableSelection.EnterpriseID)
- if err == nil && enterprise != nil {
- creatorName = enterprise.BusinessName
- }
- } else {
- subAccount, err := dao.SubAccountDao{}.GetSubAccount(billableSelection.SubAccountId)
- if err == nil && subAccount != nil {
- creatorName = subAccount.SubAccountName
- }
- }
- product, err := dao.ProductDAO{}.GetProductByID(billableSelection.ProductID)
- if err == nil && product != nil {
- productName = product.ProductName
- productPrice = product.ProductPrice
- }
- mainImage, err = dao.ProductPhotoDAO{}.GetMainPhotoByProductID(billableSelection.ProductID)
- // 电商带货汇总
- reBillableInfo := &vo.ReBillableInfo{
- ProductId: billableSelection.ProductID,
- MainImage: mainImage,
- ProductName: productName,
- ProductPrice: productPrice,
- Platform: billableSelection.Platform,
- CreatorName: creatorName,
- TaskType: "电商带货",
- BillableAmount: billableSelection.SettlementAmount,
- TaskId: billableSelection.SelectionID,
- }
- reBillableInfos = append(reBillableInfos, reBillableInfo)
- }
- for _, billableProject := range billableProjects {
- // 获取商品详情字段
- var creatorName string
- var productName string
- var productPrice float64
- var mainImage string
- if billableProject.SubAccountId == 0 {
- enterprise, err := dao.EnterpriseDao{}.GetEnterprise(billableProject.EnterpriseID)
- if err == nil && enterprise != nil {
- creatorName = enterprise.BusinessName
- }
- } else {
- subAccount, err := dao.SubAccountDao{}.GetSubAccount(billableProject.SubAccountId)
- if err == nil && subAccount != nil {
- creatorName = subAccount.SubAccountName
- }
- }
- product, err := dao.ProductDAO{}.GetProductByID(billableProject.ProductID)
- if err == nil && product != nil {
- productName = product.ProductName
- productPrice = product.ProductPrice
- }
- mainImage, err = dao.ProductPhotoDAO{}.GetMainPhotoByProductID(billableProject.ProductID)
- // 品牌种草汇总
- reBillableInfo := &vo.ReBillableInfo{
- ProductId: billableProject.ProductID,
- MainImage: mainImage,
- ProductName: productName,
- ProductPrice: productPrice,
- Platform: billableProject.ProjectPlatform,
- CreatorName: creatorName,
- TaskType: "品牌种草",
- BillableAmount: billableProject.SettlementAmount,
- TaskId: billableProject.ProjectId,
- }
- reBillableInfos = append(reBillableInfos, reBillableInfo)
- }
- // 本地生活
- startIndex := (param.Page - 1) * param.PageSize
- endIndex := startIndex + param.PageSize
- // 分页
- if startIndex >= len(reBillableInfos) {
- result = vo.ResultVO{
- Page: param.Page,
- PageSize: param.PageSize,
- Total: int64(len(reBillableInfos)),
- Data: nil,
- }
- return result, nil
- }
- if endIndex > len(reBillableInfos) {
- endIndex = len(reBillableInfos)
- }
- result = vo.ResultVO{
- Page: param.Page,
- PageSize: param.PageSize,
- Total: int64(len(reBillableInfos)),
- Data: reBillableInfos[startIndex:endIndex],
- }
- return result, nil
- }
|