invoice.go 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. package db
  2. import (
  3. context "context"
  4. "encoding/json"
  5. "fmt"
  6. "time"
  7. "youngee_b_api/consts"
  8. "youngee_b_api/model/gorm_model"
  9. "youngee_b_api/model/http_model"
  10. "youngee_b_api/util"
  11. "github.com/issue9/conv"
  12. "github.com/sirupsen/logrus"
  13. )
  14. func AddReceiveAddress(ctx context.Context, enterpriseId string, req *http_model.AddReceiveAddressRequest) error {
  15. db := GetReadDB(ctx)
  16. return db.Debug().Model(gorm_model.YounggeeInvoiceAddress{}).Create(&gorm_model.YounggeeInvoiceAddress{
  17. EnterpriseID: enterpriseId,
  18. Name: req.ReceiveName,
  19. RegionCode: req.RegionCode,
  20. Address: req.ReceiveAddress,
  21. Phone: req.ReceivePhone,
  22. UpdateAt: time.Now(),
  23. }).Error
  24. }
  25. func AddReceiveInfo(ctx context.Context, enterpriseId string, req *http_model.AddReceiveInfoRequest) error {
  26. db := GetReadDB(ctx)
  27. return db.Debug().Model(gorm_model.YounggeeInvoiceInfo{}).Create(&gorm_model.YounggeeInvoiceInfo{
  28. EnterpriseID: enterpriseId,
  29. HeadType: consts.GetHeadType(req.HeadType),
  30. InvoiceHeader: req.InvoiceHead,
  31. InvoiceType: consts.GetInvoiceType(req.InvoiceType),
  32. TaxCode: req.TaxNum,
  33. Bank: req.BaseBank,
  34. BankCardNumber: req.BaseBankCardNum,
  35. RegisteredAddress: req.EnterpriseAddress,
  36. RegisteredPhone: req.EnterprisePhone,
  37. UpdateAt: time.Now(),
  38. }).Error
  39. }
  40. func GetReceiveAddress(ctx context.Context, enterpriseId string) (*http_model.ReceiveAddressData, error) {
  41. db := GetReadDB(ctx)
  42. var InvoiceAddress []*gorm_model.YounggeeInvoiceAddress
  43. db = db.Debug().Model(gorm_model.YounggeeInvoiceAddress{}).Where(
  44. "enterprise_id = ?",
  45. enterpriseId,
  46. )
  47. db = db.Order("update_at desc").Find(&InvoiceAddress)
  48. var receiveAddress http_model.ReceiveAddressData
  49. for _, v := range InvoiceAddress {
  50. ReceiveAddressPreview := new(http_model.ReceiveAddressPreview)
  51. ReceiveAddressPreview.AddressID = v.AddressID
  52. ReceiveAddressPreview.ReceiveName = v.Name
  53. ReceiveAddressPreview.AddressPhone = v.Phone
  54. ReceiveAddressPreview.Address = v.Address
  55. ReceiveAddressPreview.RegionCode = v.RegionCode
  56. receiveAddress.ReceiveAddressPreview = append(receiveAddress.ReceiveAddressPreview, ReceiveAddressPreview)
  57. }
  58. return &receiveAddress, nil
  59. }
  60. func GetReceiveInfo(ctx context.Context, enterpriseId string) (*http_model.ReceiveInfoData, error) {
  61. db := GetReadDB(ctx)
  62. var InvoiceInfo []*gorm_model.YounggeeInvoiceInfo
  63. db = db.Debug().Model(gorm_model.YounggeeInvoiceInfo{}).Where(
  64. "enterprise_id = ?",
  65. enterpriseId,
  66. )
  67. db = db.Order("update_at desc").Find(&InvoiceInfo)
  68. var ReceiveInfoData http_model.ReceiveInfoData
  69. for _, v := range InvoiceInfo {
  70. ReceiveInfoPreview := new(http_model.ReceiveInfoPreview)
  71. ReceiveInfoPreview.InvoiceHead = v.InvoiceHeader
  72. ReceiveInfoPreview.InvoiceID = v.InvoiceID
  73. ReceiveInfoPreview.HeadType = v.HeadType
  74. ReceiveInfoPreview.InvoiceType = v.InvoiceType
  75. ReceiveInfoPreview.EnterprisePhone = v.RegisteredPhone
  76. ReceiveInfoPreview.TaxNum = v.TaxCode
  77. ReceiveInfoPreview.BaseBank = v.Bank
  78. ReceiveInfoPreview.BaseBankCardNum = v.BankCardNumber
  79. ReceiveInfoPreview.EnterpriseAddress = v.RegisteredAddress
  80. ReceiveInfoData.ReceiveInfoPreview = append(ReceiveInfoData.ReceiveInfoPreview, ReceiveInfoPreview)
  81. }
  82. return &ReceiveInfoData, nil
  83. }
  84. func OperateReceiveInfo(ctx context.Context, enterpriseId string, req *http_model.OperateReceiveInfoRequest) error {
  85. db := GetReadDB(ctx)
  86. if req.OperateType == 2 {
  87. return db.Debug().Delete(&gorm_model.YounggeeInvoiceInfo{}, req.InvoiceId).Error
  88. }
  89. return db.Debug().Model(gorm_model.YounggeeInvoiceInfo{}).Where("enterprise_id = ? AND invoice_id = ?", enterpriseId, req.InvoiceId).Updates(
  90. &gorm_model.YounggeeInvoiceInfo{
  91. HeadType: consts.GetHeadType(req.HeadType),
  92. InvoiceHeader: req.InvoiceHead,
  93. InvoiceType: consts.GetInvoiceType(req.InvoiceType),
  94. TaxCode: req.TaxNum,
  95. Bank: req.BaseBank,
  96. BankCardNumber: req.BaseBankCardNum,
  97. RegisteredAddress: req.EnterpriseAddress,
  98. RegisteredPhone: req.EnterprisePhone,
  99. UpdateAt: time.Now(),
  100. }).Error
  101. }
  102. func OperateReceiveAddress(ctx context.Context, enterpriseId string, req *http_model.OperateReceiveAddressRequest) error {
  103. db := GetReadDB(ctx)
  104. if req.OperateType == 2 {
  105. return db.Debug().Delete(&gorm_model.YounggeeInvoiceAddress{}, req.AddressID).Error
  106. }
  107. return db.Debug().Model(gorm_model.YounggeeInvoiceAddress{}).Where("enterprise_id = ? AND address_id = ?", enterpriseId, req.AddressID).Updates(
  108. &gorm_model.YounggeeInvoiceAddress{
  109. Name: req.ReceiveName,
  110. RegionCode: req.RegionCode,
  111. Address: req.ReceiveAddress,
  112. Phone: req.ReceivePhone,
  113. UpdateAt: time.Now(),
  114. }).Error
  115. }
  116. func AddInvoiceRecord(ctx context.Context, enterpriseId string, req *http_model.AddInvoiceRecordRequest) error {
  117. invoiceInfo := gorm_model.YounggeeInvoiceInfo{}
  118. //fmt.Println("req:", req)
  119. //fmt.Println("invoice_id", req.InvoiceID)
  120. db1 := GetReadDB(ctx)
  121. db1.Debug().Model(gorm_model.YounggeeInvoiceInfo{}).Where("invoice_id = ?", req.InvoiceID).First(&invoiceInfo)
  122. invoiceInfoToJson, _ := json.Marshal(invoiceInfo)
  123. addressInfo := gorm_model.YounggeeInvoiceAddress{}
  124. db2 := GetReadDB(ctx)
  125. db2.Debug().Model(gorm_model.YounggeeInvoiceAddress{}).Where("address_id = ?", req.AddressID).First(&addressInfo)
  126. addressInfoToJson, _ := json.Marshal(addressInfo)
  127. for _, rechargeId := range req.RechargeIds {
  128. rechargeId1 := rechargeId
  129. rechargeInfo := gorm_model.YounggeeRechargeRecord{}
  130. fmt.Println("rechargeId1:", rechargeId1)
  131. db3 := GetReadDB(ctx)
  132. db3.Model(gorm_model.YounggeeRechargeRecord{}).Where("recharge_id = ?", rechargeId1).Find(&rechargeInfo)
  133. db := GetReadDB(ctx)
  134. err := db.Debug().Model(gorm_model.YounggeeInvoiceRecord{}).Create(&gorm_model.YounggeeInvoiceRecord{
  135. BillingID: GetBillingId(ctx, enterpriseId),
  136. EnterpriseID: enterpriseId,
  137. InvoiceAmount: rechargeInfo.RechargeAmount,
  138. InvoiceSnap: string(invoiceInfoToJson),
  139. AddressSnap: string(addressInfoToJson),
  140. Status: 1,
  141. InvoiceType: invoiceInfo.InvoiceType,
  142. Phone: invoiceInfo.RegisteredPhone,
  143. SubmitAt: time.Now(),
  144. }).Error
  145. if err != nil {
  146. return err
  147. }
  148. }
  149. db3 := GetReadDB(ctx)
  150. return db3.Debug().Model(gorm_model.YounggeeRechargeRecord{}).Where("recharge_id IN ?", req.RechargeIds).Updates(gorm_model.YounggeeRechargeRecord{
  151. InvoiceStatus: 3,
  152. }).Error
  153. }
  154. func GetBillingId(ctx context.Context, enterpriseId string) string {
  155. db := GetReadDB(ctx)
  156. // 1、年月日
  157. year := time.Now().Year()
  158. month := time.Now().Month()
  159. day := time.Now().Day()
  160. yearData, _ := util.GetDayNum("year", year)
  161. monthData, _ := util.GetDayNum("month", int(month))
  162. dayData, _ := util.GetDayNum("day", day)
  163. sum := 0
  164. sum += dayData + monthData
  165. leap := 0
  166. if (yearData%400 == 0) || ((yearData%4 == 0) && (yearData%100 != 0)) {
  167. leap = 1
  168. }
  169. if (leap == 1) && (monthData > 2) {
  170. sum += 1
  171. }
  172. last := ""
  173. billingIdPrefix := "9" + conv.MustString(enterpriseId)[len(conv.MustString(enterpriseId))-2:] + conv.MustString(sum)
  174. var billingIdLast string
  175. err := db.Model(gorm_model.YounggeeInvoiceRecord{}).Select("billing_id").Where("billing_id like ?", billingIdPrefix+"%").
  176. Last(&billingIdLast).Error
  177. if err != nil {
  178. last = "0"
  179. } else {
  180. last = billingIdLast[len(billingIdLast)-2:]
  181. }
  182. var lastInt int
  183. lastInt = conv.MustInt(last)
  184. if lastInt+1 < 10 {
  185. last = "0" + conv.MustString(conv.MustInt(last)+1)
  186. } else {
  187. last = conv.MustString(conv.MustInt(last) + 1)
  188. }
  189. return billingIdPrefix + last
  190. }
  191. func GetInvoiceRecords(ctx context.Context, req *http_model.GetInvoiceRecordRequest, enterpriseID string) (*http_model.InvoiceRecordsData, error) {
  192. db := GetReadDB(ctx)
  193. var invoiceRecords []*gorm_model.YounggeeInvoiceRecord
  194. db = db.Debug().Model(gorm_model.YounggeeInvoiceRecord{}).Where("status = 2 and enterprise_id = ?", enterpriseID)
  195. if req.BillingAt != "" {
  196. db = db.Where("billing_at like ?", req.BillingAt+"%")
  197. }
  198. err := db.Order("billing_at desc").Find(&invoiceRecords).Error
  199. if err != nil {
  200. logrus.WithContext(ctx).Errorf("[GetInvoiceRecords] error query mysql limit, err:%+v", err)
  201. return nil, err
  202. }
  203. // var enterpriseIds []string
  204. // for _, invoiceRecord := range invoiceRecords {
  205. // enterpriseIds = append(enterpriseIds, invoiceRecord.EnterpriseID)
  206. // }
  207. // util.RemoveStrRepByMap(enterpriseIds)
  208. // enterpriseIdToUserInfoMap := make(map[string]gorm_model.Enterprise)
  209. // db1 := GetReadDB(ctx)
  210. // for _, v := range enterpriseIds {
  211. // enterpriseInfo := gorm_model.Enterprise{}
  212. // db1.Model(gorm_model.Enterprise{}).Where("enterprise_id = ?", v).Find(&enterpriseInfo)
  213. // enterpriseIdToUserInfoMap[v] = enterpriseInfo
  214. // }
  215. var InvoiceRecords []*http_model.InvoiceRecordsPreviews
  216. for _, invoiceRecord := range invoiceRecords {
  217. InvoiceRecord := new(http_model.InvoiceRecordsPreviews)
  218. InvoiceRecord.BillingId = invoiceRecord.BillingID
  219. InvoiceRecord.InvoiceInfo = invoiceRecord.InvoiceSnap
  220. InvoiceRecord.AddressInfo = invoiceRecord.AddressSnap
  221. InvoiceRecord.InvoiceType = invoiceRecord.InvoiceType
  222. InvoiceRecord.Amount = invoiceRecord.InvoiceAmount
  223. InvoiceRecord.ShipmentNumber = invoiceRecord.ShipmentNumber
  224. InvoiceRecord.BillingAt = conv.MustString(invoiceRecord.BillingAt, "")[:19]
  225. InvoiceRecords = append(InvoiceRecords, InvoiceRecord)
  226. }
  227. var InvoiceRecordsData http_model.InvoiceRecordsData
  228. InvoiceRecordsData.InvoiceRecordsPreviews = InvoiceRecords
  229. return &InvoiceRecordsData, nil
  230. }