supplier.go 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068
  1. package service
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/issue9/conv"
  6. log "github.com/sirupsen/logrus"
  7. "strconv"
  8. "strings"
  9. "time"
  10. "youngee_b_api/db"
  11. "youngee_b_api/model/gorm_model"
  12. "youngee_b_api/model/http_model"
  13. )
  14. var Supplier *supplier
  15. type supplier struct {
  16. }
  17. // CreateSupplier 创建younggee平台用户账号与服务商用户信息
  18. func (*supplier) CreateSupplier(ctx context.Context, phone string) (*http_model.RegisterData, error) {
  19. // 1. 创建YG平台用户
  20. userInfo := gorm_model.YounggeeUser{
  21. Phone: phone,
  22. User: "1003",
  23. Username: phone,
  24. Password: "1003",
  25. RealName: "",
  26. Role: "6",
  27. Email: "",
  28. LastLoginTime: time.Now().UTC().Local(),
  29. }
  30. userId, createUserErr := db.CreateUser(ctx, userInfo)
  31. if createUserErr != nil {
  32. log.Infof("[CreateSupplierUser] fail,err:%+v", createUserErr)
  33. return nil, createUserErr
  34. } else {
  35. // 2. 创建服务商信息
  36. supplierInfo := &gorm_model.YoungeeSupplier{
  37. SupplierName: phone,
  38. PhoneNumber: phone,
  39. UserId: *userId,
  40. }
  41. supplierId, createSupplierErr := db.CreateSupplier(ctx, *supplierInfo)
  42. fmt.Println(supplierId)
  43. if createSupplierErr != nil {
  44. log.Infof("[CreateSupplierUser] fail,err:%+v", createSupplierErr)
  45. return nil, createSupplierErr
  46. }
  47. res := &http_model.RegisterData{
  48. UserID: *userId,
  49. }
  50. return res, nil
  51. }
  52. }
  53. // GetSupplierAccountInfo 查询服务商账号信息
  54. func (*supplier) GetSupplierAccountInfo(ctx context.Context, req *http_model.GetAccountInfoRequest) (*http_model.GetAccountInfoData, error) {
  55. var supplierUserInfo *http_model.GetAccountInfoData
  56. supplierUserInfo = &http_model.GetAccountInfoData{}
  57. if req.SubAccountId == 0 {
  58. // 1. 服务商主账号
  59. supplierInfo, supplierInfoErr := db.GetSupplierById(ctx, req.SupplierId)
  60. if supplierInfoErr != nil {
  61. log.Infof("[GetSupplierAccountInfo] fail,err:%+v", supplierInfoErr)
  62. return nil, supplierInfoErr
  63. }
  64. if supplierInfo != nil {
  65. supplierUserInfo.SupplierName = supplierInfo.SupplierName
  66. supplierUserInfo.Type = 1
  67. supplierUserInfo.Avatar = supplierInfo.Avatar
  68. supplierUserInfo.Phone = supplierInfo.PhoneNumber
  69. }
  70. } else {
  71. // 2. 服务商子账号
  72. subAccountInfo, subAccountInfoErr := db.FindSubAccountById(ctx, req.SubAccountId)
  73. if subAccountInfoErr != nil {
  74. log.Infof("[GetSupplierAccountInfo] fail,err:%+v", subAccountInfoErr)
  75. return nil, subAccountInfoErr
  76. }
  77. if subAccountInfo != nil {
  78. supplierUserInfo.SubAccountName = subAccountInfo.SubAccountName
  79. supplierUserInfo.Type = 2
  80. supplierUserInfo.Avatar = subAccountInfo.Avatar
  81. supplierUserInfo.Phone = subAccountInfo.PhoneNumber
  82. jobInfo, jobInfoErr := db.FindJobByJobId(ctx, subAccountInfo.JobId)
  83. if jobInfoErr != nil {
  84. log.Infof("[GetSupplierAccountInfo] fail,err:%+v", jobInfoErr)
  85. return nil, subAccountInfoErr
  86. }
  87. if jobInfo != nil {
  88. supplierUserInfo.JobName = jobInfo.JobName
  89. }
  90. }
  91. }
  92. return supplierUserInfo, nil
  93. }
  94. // GetSupplierReviewInfo 查询服务商认证信息
  95. func (*supplier) GetSupplierReviewInfo(ctx context.Context, req *http_model.GetReviewInfoRequest) (*http_model.GetReviewInfoData, error) {
  96. var supplierUserInfo *http_model.GetReviewInfoData
  97. supplierUserInfo = &http_model.GetReviewInfoData{}
  98. // 1. 服务商信息
  99. supplierInfo, supplierInfoErr := db.GetSupplierById(ctx, req.SupplierId)
  100. if supplierInfoErr != nil {
  101. log.Infof("[GetSupplierReviewInfo] fail,err:%+v", supplierInfoErr)
  102. return nil, supplierInfoErr
  103. }
  104. if supplierInfo != nil {
  105. if supplierInfo.ReviewStatus == 1 {
  106. supplierUserInfo.ReviewStatus = 1
  107. } else if supplierInfo.SupplierType == 1 {
  108. supplierUserInfo.ReviewStatus = 2
  109. supplierUserInfo.SupplierType = 1
  110. supplierUserInfo.IdBack = supplierInfo.IdBack
  111. supplierUserInfo.IdFront = supplierInfo.IdFront
  112. supplierUserInfo.IdNumber = supplierInfo.IdNumber
  113. supplierUserInfo.Name = supplierInfo.Name
  114. } else if supplierInfo.SupplierType == 2 {
  115. supplierUserInfo.ReviewStatus = 2
  116. supplierUserInfo.SupplierType = 2
  117. supplierUserInfo.CompanyName = supplierInfo.CompanyName
  118. supplierUserInfo.USCI = supplierInfo.Usci
  119. supplierUserInfo.BusinessLicense = supplierInfo.BusinessLicense
  120. }
  121. }
  122. return supplierUserInfo, nil
  123. }
  124. // GetSupplierContactInfo 查询服务商联系方式
  125. func (*supplier) GetSupplierContactInfo(ctx context.Context, req *http_model.GetContactInfoRequest) (*http_model.GetContactInfoData, error) {
  126. var contactInfo *http_model.GetContactInfoData
  127. contactInfo = &http_model.GetContactInfoData{}
  128. // 1. 服务商主账号
  129. if req.SubAccountId == 0 {
  130. supplierInfo, supplierInfoErr := db.GetSupplierById(ctx, req.SupplierId)
  131. if supplierInfoErr != nil {
  132. log.Infof("[GetSupplierContactInfo] fail,err:%+v", supplierInfoErr)
  133. return nil, supplierInfoErr
  134. }
  135. if supplierInfo != nil {
  136. contactInfo.ContactPhone = supplierInfo.ContactPhone
  137. contactInfo.WechatQRCode = supplierInfo.WechatQrCode
  138. contactInfo.WechatNumber = supplierInfo.WechatNumber
  139. }
  140. } else {
  141. // 2. 服务商子账号
  142. subAccountInfo, subAccountInfoErr := db.FindSubAccountById(ctx, req.SubAccountId)
  143. if subAccountInfoErr != nil {
  144. log.Infof("[GetSupplierContactInfo] fail,err:%+v", subAccountInfoErr)
  145. return nil, subAccountInfoErr
  146. }
  147. if subAccountInfo != nil {
  148. contactInfo.ContactPhone = subAccountInfo.ContactPhone
  149. contactInfo.WechatQRCode = subAccountInfo.WechatQRCode
  150. contactInfo.WechatNumber = subAccountInfo.WechatNumber
  151. }
  152. }
  153. return contactInfo, nil
  154. }
  155. // GetSupplierIncomeList 查询服务商收入列表
  156. func (*supplier) GetSupplierIncomeList(ctx context.Context, req *http_model.FullSProjectIncomeListRequest) (*http_model.FullSProjectIncomeData, error) {
  157. var sProjectIncomeData *http_model.FullSProjectIncomeData
  158. sProjectIncomeData = &http_model.FullSProjectIncomeData{}
  159. // 1. 查询
  160. supplierIncome, total, err := db.GetSupplierIncomeList(ctx, req.PageSize, req.PageNum, req.SupplierId, req.IncomeStatus)
  161. if err != nil {
  162. return nil, nil
  163. }
  164. // 2. 补充种草/本地生活任务信息
  165. if supplierIncome != nil {
  166. sProjectIncomeData.Total = total
  167. for _, income := range supplierIncome {
  168. // 2.1. 种草任务基本信息
  169. if income.IncomeType == 1 {
  170. var sProjectInfo *http_model.FullSProjectIncomeListResponse
  171. sProjectInfo = &http_model.FullSProjectIncomeListResponse{}
  172. sProjectData, sProjectErr := db.GetSProjectDetail(ctx, income.SProjectID)
  173. if sProjectErr != nil {
  174. log.Infof("[GetSProjectDetail] fail,err:%+v", sProjectErr)
  175. return nil, sProjectErr
  176. }
  177. if sProjectData != nil {
  178. sProjectInfo.SProjectId = sProjectData.SProjectId
  179. sProjectInfo.IncomeId = income.IncomeID
  180. sProjectInfo.IncomeType = income.IncomeType
  181. sProjectInfo.SProjectId = sProjectData.SProjectId
  182. sProjectInfo.ProjectName = sProjectData.ProjectName
  183. sProjectInfo.ProjectPlatform = sProjectData.ProjectPlatform
  184. sProjectInfo.ServiceCharge = sProjectData.ServiceCharge
  185. sProjectInfo.ServiceChargeSettle = sProjectData.ServiceChargeSettle
  186. sProjectInfo.RecruitNum = sProjectData.RecruitNum
  187. sProjectInfo.SettleNum = sProjectData.SettleNum
  188. sProjectInfo.FinishTime = conv.MustString(sProjectData.FinishTime)
  189. // 2.2. 商品基本信息
  190. productInfo, productErr := db.GetProductByID(ctx, sProjectData.ProductId)
  191. if productErr != nil {
  192. log.Infof("[GetProductByID] fail,err:%+v", productErr)
  193. return nil, productErr
  194. }
  195. if productInfo != nil {
  196. sProjectInfo.ProductName = productInfo.ProductName
  197. sProjectInfo.ProductPrice = productInfo.ProductPrice
  198. }
  199. // 2.3. 商品图片信息
  200. productPhotoInfo, productPhotoErr := db.GetProductPhotoByProductID(ctx, sProjectData.ProductId)
  201. if productPhotoErr != nil {
  202. log.Infof("[GetProductPhotoByProductID] fail,err:%+v", productPhotoErr)
  203. return nil, productPhotoErr
  204. }
  205. if productPhotoInfo != nil {
  206. for _, photo := range productPhotoInfo {
  207. fmt.Println(photo)
  208. if photo.Symbol == 1 {
  209. sProjectInfo.ProductPhotoSymbol = 1
  210. sProjectInfo.ProductPhotoUrl = photo.PhotoUrl
  211. sProjectInfo.ProductPhotoUid = photo.PhotoUid
  212. }
  213. }
  214. }
  215. }
  216. }
  217. // 2.1. 本地生活任务基本信息
  218. if income.IncomeType == 2 {
  219. var sLocalInfo *http_model.FullSProjectIncomeListResponse
  220. sLocalInfo = &http_model.FullSProjectIncomeListResponse{}
  221. sLocalData, sLocalErr := db.GetSLocalLifeDetail(ctx, income.SLocalID)
  222. if sLocalErr != nil {
  223. log.Infof("[GetSLocalLifeDetail] fail,err:%+v", sLocalErr)
  224. return nil, sLocalErr
  225. }
  226. if sLocalData != nil {
  227. sLocalInfo.IncomeId = income.IncomeID
  228. sLocalInfo.IncomeType = income.IncomeType
  229. sLocalInfo.SLocalId = sLocalData.SLocalId
  230. sLocalInfo.LocalName = sLocalData.LocalName
  231. sLocalInfo.LocalPlatform = sLocalData.LocalPlatform
  232. sLocalInfo.ServiceCharge = sLocalData.ServiceCharge
  233. sLocalInfo.ServiceChargeSettle = sLocalData.ServiceChargeSettle
  234. sLocalInfo.RecruitNum = sLocalData.RecruitNum
  235. sLocalInfo.SettleNum = sLocalData.SettleNum
  236. sLocalInfo.FinishTime = conv.MustString(sLocalData.FinishTime)
  237. // 2.2. 门店基本信息
  238. storeInfo, storeErr := db.FindStoreById(ctx, sLocalData.StoreId)
  239. if storeErr != nil {
  240. log.Infof("[GetProductByID] fail,err:%+v", storeErr)
  241. return nil, storeErr
  242. }
  243. if storeInfo != nil {
  244. sLocalInfo.StoreName = storeInfo.StoreName
  245. }
  246. // 2.3. 门店图片信息
  247. storePhotoInfo, storePhotoErr := db.GetStorePhotoByStoreID(ctx, sLocalData.StoreId)
  248. if storePhotoErr != nil {
  249. log.Infof("[GetProductPhotoByProductID] fail,err:%+v", storePhotoErr)
  250. return nil, storePhotoErr
  251. }
  252. if storePhotoInfo != nil {
  253. for _, photo := range storePhotoInfo {
  254. fmt.Println(photo)
  255. if photo.Symbol == 1 {
  256. sLocalInfo.StoreMainPhotoSymbol = 1
  257. sLocalInfo.StoreMainPhotoUrl = photo.PhotoUrl
  258. sLocalInfo.StoreMainPhotoUid = photo.PhotoUid
  259. }
  260. }
  261. }
  262. }
  263. }
  264. }
  265. } else {
  266. sProjectIncomeData.Total = 0
  267. }
  268. return sProjectIncomeData, nil
  269. }
  270. // CreateSupplierInvoice 创建服务商发票
  271. func (*supplier) CreateSupplierInvoice(ctx context.Context, req *http_model.CreateSupplierInvoiceRequest) error {
  272. // 1. 数据转换
  273. var invoiceData *gorm_model.YounggeeSupplierInvoice
  274. invoiceData = &gorm_model.YounggeeSupplierInvoice{
  275. SupplierId: req.SupplierId,
  276. InvoiceStatus: 1,
  277. IncomeIds: req.IncomeIds,
  278. }
  279. if req.SOperatorType == 1 {
  280. invoiceData.SOperatorType = 1
  281. invoiceData.SOperator = req.SupplierId
  282. } else if req.SOperatorType == 2 {
  283. invoiceData.SOperatorType = 2
  284. invoiceData.SOperator = req.SubAccountId
  285. }
  286. // 2. 插入数据库
  287. err := db.CreateSupplierInvoice(ctx, invoiceData)
  288. if err != nil {
  289. return err
  290. }
  291. return nil
  292. }
  293. // UpdateSupplierInvoice 更新服务商发票
  294. func (*supplier) UpdateSupplierInvoice(ctx context.Context, req *http_model.UpdateSupplierInvoiceRequest) error {
  295. // 1. 数据转换
  296. var invoiceData *gorm_model.YounggeeSupplierInvoice
  297. var currentTime time.Time
  298. currentTime = time.Now()
  299. invoiceData = &gorm_model.YounggeeSupplierInvoice{
  300. InvoiceId: req.InvoiceId,
  301. InvoiceUrl: req.InvoiceUrl,
  302. Company: req.Company,
  303. UploadInvoiceTime: &currentTime,
  304. }
  305. // 2. 更新
  306. err := db.UpdateSupplierInvoice(ctx, invoiceData)
  307. if err != nil {
  308. return err
  309. }
  310. // 3. 更新服务商收入状态
  311. incomeIds, dbErr := db.GetIncomeIdsByInvoiceId(ctx, req.InvoiceId)
  312. if dbErr != nil {
  313. return dbErr
  314. }
  315. if incomeIds == "" {
  316. return nil
  317. }
  318. strSlice := strings.Split(incomeIds, ",")
  319. intSlice := make([]int, len(strSlice))
  320. for i, s := range strSlice {
  321. num, err := strconv.Atoi(s)
  322. if err != nil {
  323. fmt.Println("转换错误:", err)
  324. return err
  325. }
  326. intSlice[i] = num
  327. }
  328. updateSupplierIncomeErr := db.UpdateSupplierIncomeStatus(ctx, intSlice, 3)
  329. if updateSupplierIncomeErr != nil {
  330. return updateSupplierIncomeErr
  331. }
  332. return nil
  333. }
  334. // UpdateSupplierIncomeStatus 修改服务商收入状态
  335. func (*supplier) UpdateSupplierIncomeStatus(ctx context.Context, incomeIds string, incomeStatus int) error {
  336. // 1. 转换incomeIds为数组
  337. strSlice := strings.Split(incomeIds, ",")
  338. intSlice := make([]int, len(strSlice))
  339. for i, s := range strSlice {
  340. num, err := strconv.Atoi(s)
  341. if err != nil {
  342. fmt.Println("转换错误:", err)
  343. return err
  344. }
  345. intSlice[i] = num
  346. }
  347. // 2. 修改数据库中数据
  348. updateSupplierIncomeErr := db.UpdateSupplierIncomeStatus(ctx, intSlice, incomeStatus)
  349. if updateSupplierIncomeErr != nil {
  350. return updateSupplierIncomeErr
  351. }
  352. return nil
  353. }
  354. // GetSupplierInvoiceList 查找服务商发票列表
  355. func (*supplier) GetSupplierInvoiceList(ctx context.Context, req *http_model.SupplierInvoiceListRequest) (*http_model.SupplierInvoiceListData, error) {
  356. // 1. 查询服务商发票信息
  357. supplierInvoiceList, total, err := db.GetInvoiceListBySupplierId(ctx, req.SupplierId, req.InvoiceStatus, 4, req.PageSize, req.PageNum)
  358. if err != nil {
  359. return nil, err
  360. }
  361. // 2. 根据发票中的incomeIds去查找任务及其服务费收入
  362. var supplierInvoiceData *http_model.SupplierInvoiceListData
  363. supplierInvoiceData = &http_model.SupplierInvoiceListData{}
  364. for _, supplierInvoice := range supplierInvoiceList {
  365. var supplierInvoiceInfo *http_model.SupplierInvoiceInfo
  366. supplierInvoiceInfo = &http_model.SupplierInvoiceInfo{}
  367. // 2.1. 基础信息填入
  368. supplierInvoiceInfo.UploadInvoiceTime = supplierInvoice.UploadInvoiceTime
  369. supplierInvoiceInfo.InvoiceUrl = supplierInvoice.InvoiceUrl
  370. supplierInvoiceInfo.AgreeTime = supplierInvoice.AgreeTime
  371. supplierInvoiceInfo.RejectTime = supplierInvoice.RejectTime
  372. supplierInvoiceInfo.Company = supplierInvoice.Company
  373. supplierInvoiceInfo.SOperator = supplierInvoice.SOperator
  374. supplierInvoiceInfo.FailReason = supplierInvoice.FailReason
  375. // 2.2. 任务及其收入信息填入
  376. incomeIds := supplierInvoice.IncomeIds
  377. strSlice := strings.Split(incomeIds, ",")
  378. intSlice := make([]int, len(strSlice))
  379. for i, s := range strSlice {
  380. num, err := strconv.Atoi(s)
  381. if err != nil {
  382. fmt.Println("转换错误:", err)
  383. return nil, err
  384. }
  385. intSlice[i] = num
  386. }
  387. for _, incomeId := range intSlice {
  388. var sTaskInfo *http_model.STaskInfo
  389. sTaskInfo = &http_model.STaskInfo{}
  390. currIncome, incomeErr := db.GetIncomeInfoByIncomeId(ctx, incomeId)
  391. if incomeErr != nil {
  392. return nil, incomeErr
  393. }
  394. sTaskInfo.ServiceCharge = currIncome.ServiceChargeSettle
  395. supplierInvoiceInfo.Amount += currIncome.ServiceChargeSettle
  396. if currIncome.IncomeType == 1 {
  397. sTaskInfo.Id = currIncome.SProjectID
  398. } else if currIncome.IncomeType == 3 {
  399. sTaskInfo.Id = currIncome.SLocalID
  400. }
  401. supplierInvoiceInfo.STaskInfo = append(supplierInvoiceInfo.STaskInfo, sTaskInfo)
  402. }
  403. supplierInvoiceData.SupplierInvoiceList = append(supplierInvoiceData.SupplierInvoiceList, supplierInvoiceInfo)
  404. }
  405. supplierInvoiceData.Total = total
  406. return supplierInvoiceData, nil
  407. }
  408. // GetSupplierToWithdrawList 服务商待提现列表
  409. func (*supplier) GetSupplierToWithdrawList(ctx context.Context, req *http_model.SupplierToWithdrawListRequest) (*http_model.SupplierToWithdrawListData, error) {
  410. // 1. 判断服务商类型
  411. var supplierInvoiceData *http_model.SupplierToWithdrawListData
  412. supplierInvoiceData = &http_model.SupplierToWithdrawListData{}
  413. supplierInfo, supplierErr := db.GetSupplierById(ctx, req.SupplierId)
  414. if supplierErr != nil {
  415. return nil, supplierErr
  416. }
  417. if supplierInfo != nil {
  418. // 企业服务商
  419. if supplierInfo.SupplierType == 2 {
  420. // 查询企业服务商发票信息
  421. supplierInvoiceList, total, supplierInvoiceErr := db.GetInvoiceListBySupplierId(ctx, req.SupplierId, 3, 1, req.PageSize, req.PageNum)
  422. if supplierInvoiceErr != nil {
  423. return nil, supplierInvoiceErr
  424. }
  425. if supplierInvoiceList != nil {
  426. for _, supplierInvoice := range supplierInvoiceList {
  427. // 2. 根据发票中的incomeIds去查找任务及其服务费收入
  428. var supplierInvoiceInfo *http_model.SupplierToWithdrawInfo
  429. supplierInvoiceInfo = &http_model.SupplierToWithdrawInfo{}
  430. // supplierInvoiceInfo.Amount = 0.0
  431. // 2.1. 基础信息填入
  432. supplierInvoiceInfo.AgreeTime = supplierInvoice.AgreeTime
  433. supplierInvoiceInfo.Company = supplierInvoice.Company
  434. supplierInvoiceInfo.SupplierType = supplierInfo.SupplierType
  435. // 2.2. 任务及其收入信息填入
  436. incomeIds := supplierInvoice.IncomeIds
  437. strSlice := strings.Split(incomeIds, ",")
  438. intSlice := make([]int, len(strSlice))
  439. for i, s := range strSlice {
  440. num, err := strconv.Atoi(s)
  441. if err != nil {
  442. fmt.Println("转换错误:", err)
  443. return nil, err
  444. }
  445. intSlice[i] = num
  446. }
  447. for _, incomeId := range intSlice {
  448. var sTaskInfo *http_model.STaskInfo
  449. sTaskInfo = &http_model.STaskInfo{}
  450. currIncome, incomeErr := db.GetIncomeInfoByIncomeId(ctx, incomeId)
  451. if incomeErr != nil {
  452. return nil, incomeErr
  453. }
  454. sTaskInfo.ServiceCharge = currIncome.ServiceChargeSettle
  455. supplierInvoiceInfo.Amount += currIncome.ServiceChargeSettle
  456. if currIncome.IncomeType == 1 {
  457. sTaskInfo.Id = currIncome.SProjectID
  458. } else if currIncome.IncomeType == 3 {
  459. sTaskInfo.Id = currIncome.SLocalID
  460. }
  461. supplierInvoiceInfo.STaskInfo = append(supplierInvoiceInfo.STaskInfo, sTaskInfo)
  462. }
  463. supplierInvoiceData.ToWithdrawList = append(supplierInvoiceData.ToWithdrawList, supplierInvoiceInfo)
  464. }
  465. supplierInvoiceData.Total = total
  466. }
  467. } else if supplierInfo.SupplierType == 1 {
  468. // 个人服务商
  469. // 查询个人服务商收入信息
  470. supplierIncomeList, supplierIncomeTotal, supplierIncomeErr := db.GetSupplierIncomeList(ctx, req.PageSize, req.PageNum, req.SupplierId, 5)
  471. if supplierIncomeErr != nil {
  472. return nil, supplierIncomeErr
  473. }
  474. if supplierIncomeList != nil {
  475. supplierInvoiceData.Total = supplierIncomeTotal
  476. for _, supplierIncome := range supplierIncomeList {
  477. var supplierInvoiceInfo *http_model.SupplierToWithdrawInfo
  478. supplierInvoiceInfo = &http_model.SupplierToWithdrawInfo{}
  479. supplierInvoiceInfo.SupplierType = supplierInfo.SupplierType
  480. supplierInvoiceInfo.IncomeId = supplierIncome.IncomeID
  481. supplierInvoiceInfo.Amount = supplierIncome.ServiceChargeSettle
  482. supplierInvoiceInfo.AmountActual = supplierIncome.ServiceChargeSettle * 0.05
  483. var sTaskInfo *http_model.STaskInfo
  484. sTaskInfo = &http_model.STaskInfo{}
  485. sTaskInfo.ServiceCharge = supplierIncome.ServiceChargeSettle
  486. if supplierIncome.IncomeType == 1 {
  487. sTaskInfo.Id = supplierIncome.SProjectID
  488. } else if supplierIncome.IncomeType == 3 {
  489. sTaskInfo.Id = supplierIncome.SLocalID
  490. }
  491. supplierInvoiceInfo.STaskInfo = append(supplierInvoiceInfo.STaskInfo, sTaskInfo)
  492. supplierInvoiceData.ToWithdrawList = append(supplierInvoiceData.ToWithdrawList, supplierInvoiceInfo)
  493. }
  494. }
  495. }
  496. }
  497. return supplierInvoiceData, nil
  498. }
  499. // CreateSupplierWithdraw 创建服务商提现信息
  500. func (*supplier) CreateSupplierWithdraw(ctx context.Context, req *http_model.CreateSupplierWithdrawRequest) error {
  501. var supplierWithdrawInfoList []*gorm_model.YounggeeSupplierWithdraw
  502. // 1. 判断服务商类型
  503. supplierInfo, supplierErr := db.GetSupplierById(ctx, req.SupplierId)
  504. if supplierErr != nil {
  505. return supplierErr
  506. }
  507. if supplierInfo != nil {
  508. if supplierInfo.SupplierType == 1 {
  509. // 1.1. 个人服务商
  510. supplierPaymentInfo, supplierPaymentErr := db.GetSupplierPaymentInfoById(ctx, supplierInfo.SupplierId)
  511. if supplierPaymentErr != nil {
  512. return supplierPaymentErr
  513. }
  514. if supplierPaymentInfo != nil {
  515. for _, withdrawInfo := range req.IncomeIds {
  516. var supplierWithdrawInfo *gorm_model.YounggeeSupplierWithdraw
  517. supplierWithdrawInfo = &gorm_model.YounggeeSupplierWithdraw{}
  518. // 1.2.1. 接口传入信息填入
  519. supplierWithdrawInfo.SupplierId = req.SupplierId
  520. supplierWithdrawInfo.WithdrawStatus = 2
  521. supplierWithdrawInfo.BankName = supplierPaymentInfo.BankName
  522. supplierWithdrawInfo.BankNumber = supplierPaymentInfo.BankNumber
  523. var currentTime time.Time
  524. currentTime = time.Now()
  525. supplierWithdrawInfo.SupplyTime = &currentTime
  526. supplierWithdrawInfo.WithdrawAmount = 0.0
  527. // 1.2.2. 查找服务商信息填入
  528. supplierWithdrawInfo.Name = supplierInfo.Name
  529. supplierWithdrawInfo.Phone = supplierPaymentInfo.Phone
  530. // 1.2.3. 收入信息填入
  531. currIncome, incomeInfoErr := db.GetIncomeInfoByIncomeId(ctx, withdrawInfo)
  532. if incomeInfoErr != nil {
  533. return incomeInfoErr
  534. }
  535. if currIncome != nil {
  536. supplierWithdrawInfo.WithdrawAmount += currIncome.ServiceChargeSettle
  537. }
  538. supplierWithdrawInfo.AmountPayable = supplierWithdrawInfo.WithdrawAmount
  539. supplierWithdrawInfoList = append(supplierWithdrawInfoList, supplierWithdrawInfo)
  540. }
  541. }
  542. } else if supplierInfo.SupplierType == 2 {
  543. // 1.2. 机构服务商
  544. supplierPaymentInfo, supplierPaymentErr := db.GetSupplierPaymentInfoById(ctx, supplierInfo.SupplierId)
  545. if supplierPaymentErr != nil {
  546. return supplierPaymentErr
  547. }
  548. if supplierPaymentInfo != nil {
  549. for _, withdrawInfo := range req.InvoiceIds {
  550. var supplierWithdrawInfo *gorm_model.YounggeeSupplierWithdraw
  551. supplierWithdrawInfo = &gorm_model.YounggeeSupplierWithdraw{}
  552. // 1.2.1. 接口传入信息填入
  553. supplierWithdrawInfo.SupplierId = req.SupplierId
  554. supplierWithdrawInfo.WithdrawStatus = 2
  555. supplierWithdrawInfo.BankName = supplierPaymentInfo.BankName
  556. supplierWithdrawInfo.BankNumber = supplierPaymentInfo.BankNumber
  557. var currentTime time.Time
  558. currentTime = time.Now()
  559. supplierWithdrawInfo.SupplyTime = &currentTime
  560. supplierWithdrawInfo.WithdrawAmount = 0.0
  561. // 1.2.2. 查找服务商信息填入
  562. supplierWithdrawInfo.Name = supplierInfo.Name
  563. supplierWithdrawInfo.Phone = supplierInfo.PhoneNumber
  564. supplierWithdrawInfo.Company = supplierInfo.CompanyName
  565. // 1.2.3. 收入信息填入
  566. incomeIds, incomeErr := db.GetIncomeIdsByInvoiceId(ctx, withdrawInfo)
  567. if incomeErr != nil {
  568. return incomeErr
  569. }
  570. if incomeIds != "" {
  571. strSlice := strings.Split(incomeIds, ",")
  572. intSlice := make([]int, len(strSlice))
  573. for i, s := range strSlice {
  574. num, err := strconv.Atoi(s)
  575. if err != nil {
  576. fmt.Println("转换错误:", err)
  577. return err
  578. }
  579. intSlice[i] = num
  580. }
  581. for _, incomeId := range intSlice {
  582. currIncome, incomeInfoErr := db.GetIncomeInfoByIncomeId(ctx, incomeId)
  583. if incomeInfoErr != nil {
  584. return incomeInfoErr
  585. }
  586. if currIncome != nil {
  587. supplierWithdrawInfo.WithdrawAmount += currIncome.ServiceChargeSettle
  588. }
  589. }
  590. supplierWithdrawInfo.AmountPayable = supplierWithdrawInfo.WithdrawAmount
  591. }
  592. supplierWithdrawInfoList = append(supplierWithdrawInfoList, supplierWithdrawInfo)
  593. }
  594. }
  595. }
  596. }
  597. // 2. 数据库插入
  598. err := db.CreateSupplierWithdraw(ctx, supplierWithdrawInfoList)
  599. if err != nil {
  600. return err
  601. }
  602. return nil
  603. }
  604. // GetSupplierWithdrawList 服务商提现列表
  605. func (*supplier) GetSupplierWithdrawList(ctx context.Context, req *http_model.SupplierWithdrawListRequest) (*http_model.SupplierWithdrawListData, error) {
  606. var supplierWithdrawListData *http_model.SupplierWithdrawListData
  607. supplierWithdrawListData = &http_model.SupplierWithdrawListData{}
  608. // 1. 根据服务商ID和提现状态去查找提现信息列表
  609. supplierWithdrawList, total, supplierWithdrawErr := db.GetSupplierWithdrawList(ctx, req.PageSize, req.PageNum, req.SupplierId, req.WithdrawStatus)
  610. if supplierWithdrawErr != nil {
  611. return nil, supplierWithdrawErr
  612. }
  613. if supplierWithdrawList != nil {
  614. supplierWithdrawListData.Total = total
  615. supplierInfo, supplierErr := db.GetSupplierById(ctx, req.SupplierId)
  616. if supplierErr != nil {
  617. return nil, supplierErr
  618. }
  619. if supplierInfo != nil {
  620. if supplierInfo.SupplierId == 1 {
  621. // 2. 个人服务商
  622. var supplierWithdrawInfo *http_model.SupplierWithdrawInfo
  623. supplierWithdrawInfo = &http_model.SupplierWithdrawInfo{}
  624. for _, withdrawInfo := range supplierWithdrawList {
  625. IncomeId, IncomeIdErr := strconv.Atoi(withdrawInfo.IncomeIds)
  626. if IncomeIdErr != nil {
  627. return nil, IncomeIdErr
  628. }
  629. incomeInfo, incomeErr := db.GetIncomeInfoByIncomeId(ctx, IncomeId)
  630. if incomeErr != nil {
  631. return nil, incomeErr
  632. }
  633. if incomeInfo != nil {
  634. var sTaskInfo *http_model.STaskInfo
  635. sTaskInfo = &http_model.STaskInfo{}
  636. if incomeInfo.IncomeType == 1 {
  637. sTaskInfo.Id = incomeInfo.SProjectID
  638. sTaskInfo.ServiceCharge = incomeInfo.ServiceChargeSettle
  639. } else if incomeInfo.IncomeType == 3 {
  640. sTaskInfo.Id = incomeInfo.SLocalID
  641. sTaskInfo.ServiceCharge = incomeInfo.ServiceChargeSettle
  642. }
  643. supplierWithdrawInfo.STaskInfo = append(supplierWithdrawInfo.STaskInfo, sTaskInfo)
  644. }
  645. supplierWithdrawInfo.SupplierType = 1
  646. supplierWithdrawInfo.SupplierWithdrawId = withdrawInfo.SupplierWithdrawId
  647. supplierWithdrawInfo.WithdrawAmount = withdrawInfo.WithdrawAmount
  648. supplierWithdrawInfo.AmountPayable = withdrawInfo.AmountPayable
  649. supplierWithdrawInfo.Name = withdrawInfo.Name
  650. supplierWithdrawInfo.IDNumber = withdrawInfo.IDNumber
  651. supplierWithdrawInfo.BankName = withdrawInfo.BankName
  652. supplierWithdrawInfo.BankNumber = withdrawInfo.BankNumber
  653. supplierWithdrawInfo.Phone = withdrawInfo.Phone
  654. // supplierWithdrawInfo.Company = withdrawInfo.Company
  655. supplierWithdrawInfo.SupplyTime = conv.MustString(withdrawInfo.SupplyTime)
  656. supplierWithdrawInfo.AgreeTime = conv.MustString(withdrawInfo.AgreeTime)
  657. supplierWithdrawInfo.RejectTime = conv.MustString(withdrawInfo.RejectTime)
  658. supplierWithdrawInfo.FailReason = withdrawInfo.FailReason
  659. supplierWithdrawListData.WithdrawList = append(supplierWithdrawListData.WithdrawList, supplierWithdrawInfo)
  660. }
  661. } else if supplierInfo.SupplierId == 2 {
  662. // 3. 企业服务商
  663. for _, withdrawInfo := range supplierWithdrawList {
  664. var supplierWithdrawInfo *http_model.SupplierWithdrawInfo
  665. supplierWithdrawInfo = &http_model.SupplierWithdrawInfo{}
  666. InvoiceId, InvoiceIdErr := strconv.Atoi(withdrawInfo.InvoiceIds)
  667. if InvoiceIdErr != nil {
  668. return nil, InvoiceIdErr
  669. }
  670. incomeIds, incomeIdsErr := db.GetIncomeIdsByInvoiceId(ctx, InvoiceId)
  671. if incomeIdsErr != nil {
  672. return nil, incomeIdsErr
  673. }
  674. if incomeIds != "" {
  675. strSlice := strings.Split(incomeIds, ",")
  676. intSlice := make([]int, len(strSlice))
  677. for i, s := range strSlice {
  678. num, err := strconv.Atoi(s)
  679. if err != nil {
  680. fmt.Println("转换错误:", err)
  681. return nil, err
  682. }
  683. intSlice[i] = num
  684. }
  685. for _, incomeId := range intSlice {
  686. var sTaskInfo *http_model.STaskInfo
  687. sTaskInfo = &http_model.STaskInfo{}
  688. currIncome, incomeInfoErr := db.GetIncomeInfoByIncomeId(ctx, incomeId)
  689. if incomeInfoErr != nil {
  690. return nil, incomeInfoErr
  691. }
  692. if currIncome != nil {
  693. if currIncome.IncomeType == 1 {
  694. sTaskInfo.Id = currIncome.SProjectID
  695. sTaskInfo.ServiceCharge = currIncome.ServiceChargeSettle
  696. } else if currIncome.IncomeType == 3 {
  697. sTaskInfo.Id = currIncome.SLocalID
  698. sTaskInfo.ServiceCharge = currIncome.ServiceChargeSettle
  699. }
  700. supplierWithdrawInfo.STaskInfo = append(supplierWithdrawInfo.STaskInfo, sTaskInfo)
  701. }
  702. }
  703. }
  704. supplierWithdrawInfo.SupplierType = 1
  705. supplierWithdrawInfo.SupplierWithdrawId = withdrawInfo.SupplierWithdrawId
  706. supplierWithdrawInfo.WithdrawAmount = withdrawInfo.WithdrawAmount
  707. supplierWithdrawInfo.AmountPayable = withdrawInfo.AmountPayable
  708. supplierWithdrawInfo.Name = withdrawInfo.Name
  709. supplierWithdrawInfo.IDNumber = withdrawInfo.IDNumber
  710. supplierWithdrawInfo.BankName = withdrawInfo.BankName
  711. supplierWithdrawInfo.BankNumber = withdrawInfo.BankNumber
  712. supplierWithdrawInfo.Phone = withdrawInfo.Phone
  713. supplierWithdrawInfo.Company = withdrawInfo.Company
  714. supplierWithdrawInfo.SupplyTime = conv.MustString(withdrawInfo.SupplyTime)
  715. supplierWithdrawInfo.AgreeTime = conv.MustString(withdrawInfo.AgreeTime)
  716. supplierWithdrawInfo.RejectTime = conv.MustString(withdrawInfo.RejectTime)
  717. supplierWithdrawInfo.FailReason = withdrawInfo.FailReason
  718. supplierWithdrawListData.WithdrawList = append(supplierWithdrawListData.WithdrawList, supplierWithdrawInfo)
  719. }
  720. }
  721. }
  722. }
  723. return supplierWithdrawListData, nil
  724. }
  725. func (*supplier) GetSupplierAmountBillList(ctx context.Context, req *http_model.SupplierAmountBillListRequest) (*http_model.SupplierAmountBillData, error) {
  726. return nil, nil
  727. }
  728. // GetManageInvoiceInfo 查找后台回票信息
  729. func (*supplier) GetManageInvoiceInfo(ctx context.Context, req *http_model.ManageInvoiceInfoRequest) (*http_model.ManageInvoiceInfoData, error) {
  730. var invoiceInfo *http_model.ManageInvoiceInfoData
  731. invoiceInfo = &http_model.ManageInvoiceInfoData{}
  732. manageInvoiceInfo, manageInvoiceErr := db.GetManageInvoice(ctx)
  733. if manageInvoiceErr != nil {
  734. return nil, manageInvoiceErr
  735. }
  736. if manageInvoiceInfo != nil {
  737. invoiceInfo.InvoiceInfoID = manageInvoiceInfo.InvoiceInfoID
  738. invoiceInfo.Address = manageInvoiceInfo.Address
  739. invoiceInfo.Phone = manageInvoiceInfo.Phone
  740. invoiceInfo.BankNumber = manageInvoiceInfo.BankNumber
  741. invoiceInfo.EnterpriseName = manageInvoiceInfo.EnterpriseName
  742. invoiceInfo.ProjectNameToChoose = manageInvoiceInfo.ProjectNameToChoose
  743. invoiceInfo.BankName = manageInvoiceInfo.BankName
  744. }
  745. return invoiceInfo, nil
  746. }
  747. // GetWithdrawAmount 查找可提现、提现中、已提现金额
  748. func (*supplier) GetWithdrawAmount(ctx context.Context, req *http_model.WithdrawAmountRequest) (*http_model.WithdrawAmountData, error) {
  749. var amountInfo *http_model.WithdrawAmountData
  750. amountInfo = &http_model.WithdrawAmountData{}
  751. amountInfo.WithdrawAble = 0.0
  752. amountInfo.PendingWithdraw = 0.0
  753. amountInfo.Withdrawn = 0.0
  754. // 可提现
  755. platformConfirmingIncome, platformConfirmingErr := db.GetFullSupplierIncomeList(ctx, req.SupplierId, 5)
  756. if platformConfirmingErr != nil {
  757. return nil, platformConfirmingErr
  758. }
  759. if platformConfirmingIncome != nil {
  760. for _, income := range platformConfirmingIncome {
  761. amountInfo.WithdrawAble += income.ServiceChargeSettle
  762. }
  763. }
  764. // 提现中
  765. pendingWithdrawIncome, pendingWithdrawErr := db.GetFullSupplierIncomeList(ctx, req.SupplierId, 7)
  766. if pendingWithdrawErr != nil {
  767. return nil, pendingWithdrawErr
  768. }
  769. if pendingWithdrawIncome != nil {
  770. for _, income := range pendingWithdrawIncome {
  771. amountInfo.PendingWithdraw += income.ServiceChargeSettle
  772. }
  773. }
  774. // 已经提现
  775. withdrawnIncome, withdrawnErr := db.GetFullSupplierIncomeList(ctx, req.SupplierId, 8)
  776. if withdrawnErr != nil {
  777. return nil, withdrawnErr
  778. }
  779. if withdrawnIncome != nil {
  780. for _, income := range withdrawnIncome {
  781. amountInfo.Withdrawn += income.ServiceChargeSettle
  782. }
  783. }
  784. return amountInfo, nil
  785. }
  786. // GetSupplierBillAmount 服务商账单 总余额、可提现金额
  787. func (*supplier) GetSupplierBillAmount(ctx context.Context, req *http_model.SupplierAmountRequest) (*http_model.SupplierBillAmountData, error) {
  788. var incomeData *http_model.SupplierBillAmountData
  789. incomeData = &http_model.SupplierBillAmountData{}
  790. incomeData.FullAmount = 0.0
  791. incomeData.Settle = 0.0
  792. // 1. 个人服务商
  793. if req.SupplierType == 1 {
  794. supplierIncome, supplierIncomeErr := db.GetFullSupplierIncomeList(ctx, req.SupplierId, 5)
  795. if supplierIncomeErr != nil {
  796. return nil, supplierIncomeErr
  797. }
  798. if supplierIncome != nil {
  799. for _, income := range supplierIncome {
  800. incomeData.FullAmount += income.ServiceChargeSettle
  801. }
  802. incomeData.Settle = incomeData.FullAmount
  803. }
  804. } else if req.SupplierType == 2 {
  805. // 2. 企业服务商
  806. // 可提现
  807. supplierIncome, supplierIncomeErr := db.GetFullSupplierIncomeList(ctx, req.SupplierId, 5)
  808. if supplierIncomeErr != nil {
  809. return nil, supplierIncomeErr
  810. }
  811. if supplierIncome != nil {
  812. for _, income := range supplierIncome {
  813. incomeData.Settle += income.ServiceChargeSettle
  814. }
  815. incomeData.FullAmount = incomeData.Settle
  816. }
  817. // 可回票
  818. supplierToInvoice, supplierToInvoiceErr := db.GetFullSupplierIncomeList(ctx, req.SupplierId, 1)
  819. if supplierToInvoiceErr != nil {
  820. return nil, supplierToInvoiceErr
  821. }
  822. if supplierToInvoice != nil {
  823. for _, invoice := range supplierToInvoice {
  824. incomeData.FullAmount += invoice.ServiceChargeSettle
  825. }
  826. }
  827. }
  828. // fmt.Println(incomeData)
  829. return incomeData, nil
  830. }
  831. // GetWithdrawPaymentInfo 查找提现收款信息
  832. func (*supplier) GetWithdrawPaymentInfo(ctx context.Context, req *http_model.WithdrawPaymentInfoRequest) (*http_model.WithdrawPaymentInfoData, error) {
  833. var paymentInfo *http_model.WithdrawPaymentInfoData
  834. paymentInfo = &http_model.WithdrawPaymentInfoData{}
  835. // 1. 个人服务商
  836. if req.SupplierType == 1 {
  837. // 1.1. 个人认证信息
  838. supplierInfo, supplierErr := db.GetSupplierById(ctx, req.SupplierId)
  839. if supplierErr != nil {
  840. return nil, supplierErr
  841. }
  842. if supplierInfo != nil {
  843. paymentInfo.Name = supplierInfo.Name
  844. paymentInfo.IDNumber = supplierInfo.IdNumber
  845. }
  846. // 1.2. 提现收款信息查询
  847. supplierPaymentInfo, supplierPaymentErr := db.GetSupplierPaymentInfoById(ctx, req.SupplierId)
  848. if supplierPaymentErr != nil {
  849. return nil, supplierPaymentErr
  850. }
  851. if supplierPaymentInfo != nil {
  852. paymentInfo.Tag = 2
  853. paymentInfo.Phone = supplierPaymentInfo.Phone
  854. paymentInfo.SupplierType = supplierPaymentInfo.SupplierType
  855. paymentInfo.BankName = supplierPaymentInfo.BankName
  856. paymentInfo.BankNumber = supplierPaymentInfo.BankNumber
  857. } else {
  858. paymentInfo.Tag = 1
  859. }
  860. } else if req.SupplierType == 2 {
  861. // 2. 机构服务商
  862. // 2.1. 机构认证信息
  863. supplierInfo, supplierErr := db.GetSupplierById(ctx, req.SupplierId)
  864. if supplierErr != nil {
  865. return nil, supplierErr
  866. }
  867. if supplierInfo != nil {
  868. paymentInfo.Company = supplierInfo.CompanyName
  869. }
  870. // 2.2. 提现收款信息查询
  871. supplierPaymentInfo, supplierPaymentErr := db.GetSupplierPaymentInfoById(ctx, req.SupplierId)
  872. if supplierPaymentErr != nil {
  873. return nil, supplierPaymentErr
  874. }
  875. if supplierPaymentInfo != nil {
  876. paymentInfo.Tag = 2
  877. paymentInfo.PaymentInfoID = supplierPaymentInfo.PaymentInfoID
  878. paymentInfo.SupplierType = supplierPaymentInfo.SupplierType
  879. paymentInfo.BankName = supplierPaymentInfo.BankName
  880. paymentInfo.BankNumber = supplierPaymentInfo.BankNumber
  881. } else {
  882. paymentInfo.Tag = 1
  883. }
  884. }
  885. return paymentInfo, nil
  886. }
  887. // UpdateWithdrawPaymentInfo 更新提现收款信息
  888. func (*supplier) UpdateWithdrawPaymentInfo(ctx context.Context, req *http_model.UpdateWithdrawPaymentInfoRequest) error {
  889. var paymentInfo *gorm_model.SupplierPaymentInfo
  890. paymentInfo = &gorm_model.SupplierPaymentInfo{}
  891. paymentInfo.PaymentInfoID = req.PaymentInfoId
  892. paymentInfo.SupplierID = req.SupplierID
  893. paymentInfo.Phone = req.Phone
  894. paymentInfo.BankName = req.BankName
  895. paymentInfo.BankNumber = req.BankNumber
  896. paymentInfo.Name = req.Name
  897. paymentInfo.IDNumber = req.IDNumber
  898. paymentInfo.Company = req.Company
  899. updatePaymentInfoErr := db.UpdateSupplierPayment(ctx, paymentInfo)
  900. if updatePaymentInfoErr != nil {
  901. return updatePaymentInfoErr
  902. }
  903. return nil
  904. }
  905. // CreateWithdrawPaymentInfo 创建提现收款信息
  906. func (*supplier) CreateWithdrawPaymentInfo(ctx context.Context, req *http_model.CreateWithdrawPaymentInfoRequest) error {
  907. // 1. 个人服务商
  908. if req.SupplierType == 1 {
  909. var paymentInfo *gorm_model.SupplierPaymentInfo
  910. paymentInfo = &gorm_model.SupplierPaymentInfo{}
  911. paymentInfo.SupplierID = req.SupplierID
  912. paymentInfo.Phone = req.Phone
  913. paymentInfo.BankName = req.BankName
  914. paymentInfo.BankNumber = req.BankNumber
  915. paymentInfo.Name = req.Name
  916. paymentInfo.IDNumber = req.IDNumber
  917. paymentInfo.SupplierType = req.SupplierType
  918. createPaymentInfoErr := db.CreateSupplierPayment(ctx, paymentInfo)
  919. if createPaymentInfoErr != nil {
  920. return createPaymentInfoErr
  921. }
  922. } else if req.SupplierType == 2 {
  923. // 2. 机构服务商
  924. var paymentInfo *gorm_model.SupplierPaymentInfo
  925. paymentInfo = &gorm_model.SupplierPaymentInfo{}
  926. paymentInfo.SupplierType = req.SupplierType
  927. paymentInfo.SupplierID = req.SupplierID
  928. paymentInfo.BankName = req.BankName
  929. paymentInfo.BankNumber = req.BankNumber
  930. paymentInfo.Name = req.Name
  931. paymentInfo.IDNumber = req.IDNumber
  932. paymentInfo.Company = req.Company
  933. createPaymentInfoErr := db.CreateSupplierPayment(ctx, paymentInfo)
  934. if createPaymentInfoErr != nil {
  935. return createPaymentInfoErr
  936. }
  937. }
  938. return nil
  939. }
  940. // GetSupplierInvoiceAmount 可回发票、待传发票、平台确认中、已回发票金额
  941. func (*supplier) GetSupplierInvoiceAmount(ctx context.Context, req *http_model.InvoiceAmountRequest) (*http_model.InvoiceAmountData, error) {
  942. var invoiceAmount *http_model.InvoiceAmountData
  943. invoiceAmount = &http_model.InvoiceAmountData{}
  944. invoiceAmount.InvoiceReturned = 0.0
  945. invoiceAmount.PendingUpload = 0.0
  946. invoiceAmount.CanUpload = 0.0
  947. invoiceAmount.PlatformConfirming = 0.0
  948. // 可回发票
  949. supplierIncome, supplierIncomeErr := db.GetFullSupplierIncomeList(ctx, req.SupplierId, 1)
  950. if supplierIncomeErr != nil {
  951. return nil, supplierIncomeErr
  952. }
  953. if supplierIncome != nil {
  954. for _, income := range supplierIncome {
  955. invoiceAmount.CanUpload += income.ServiceChargeSettle
  956. }
  957. }
  958. // 待传发票
  959. pendingUploadIncome, pendingUploadErr := db.GetFullSupplierIncomeList(ctx, req.SupplierId, 2)
  960. if pendingUploadErr != nil {
  961. return nil, pendingUploadErr
  962. }
  963. if pendingUploadIncome != nil {
  964. for _, income := range pendingUploadIncome {
  965. invoiceAmount.PendingUpload += income.ServiceChargeSettle
  966. }
  967. }
  968. // 平台确认中
  969. platformConfirmingIncome, platformConfirmingErr := db.GetFullSupplierIncomeList(ctx, req.SupplierId, 3)
  970. if platformConfirmingErr != nil {
  971. return nil, platformConfirmingErr
  972. }
  973. if platformConfirmingIncome != nil {
  974. for _, income := range platformConfirmingIncome {
  975. invoiceAmount.PlatformConfirming += income.ServiceChargeSettle
  976. }
  977. }
  978. // 已回票
  979. InvoiceReturnedIncome, InvoiceReturnedErr := db.GetFullSupplierIncomeList(ctx, req.SupplierId, 5)
  980. if InvoiceReturnedErr != nil {
  981. return nil, InvoiceReturnedErr
  982. }
  983. if InvoiceReturnedIncome != nil {
  984. for _, income := range InvoiceReturnedIncome {
  985. invoiceAmount.InvoiceReturned += income.ServiceChargeSettle
  986. }
  987. }
  988. return invoiceAmount, nil
  989. }