invoice.go 8.7 KB

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