local_life_service.go 36 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094
  1. package service
  2. import (
  3. "errors"
  4. "github.com/sirupsen/logrus"
  5. "reflect"
  6. "strconv"
  7. "strings"
  8. "time"
  9. "youngee_m_api/app/dao"
  10. "youngee_m_api/app/entity"
  11. "youngee_m_api/app/util"
  12. "youngee_m_api/app/vo"
  13. )
  14. type LocalLifeService struct{}
  15. // 创建本地生活任务
  16. func (s LocalLifeService) CreateLocalLife(localCreateParam *vo.LocalCreateParam) (*string, error) {
  17. // a) 生成本地生活项目id
  18. localId := strings.ReplaceAll(util.GenerateUUID(11), "-", "")
  19. // b) 查找关联门店信息
  20. product, err := dao.StoreDao{}.GetStoreByID(localCreateParam.StoreId)
  21. if err != nil {
  22. return nil, err
  23. }
  24. if product == nil {
  25. return nil, errors.New("未找到关联门店")
  26. }
  27. // c)创建种草任务
  28. var operatorType int64
  29. if localCreateParam.SubAccountId == 0 {
  30. operatorType = 1
  31. } else {
  32. operatorType = 2
  33. }
  34. // d) 任务截止时间
  35. recruitDdl, err1 := time.ParseInLocation("2006-01-02 15:04:05", localCreateParam.RecruitDdl, time.Local)
  36. if err1 != nil {
  37. return nil, errors.New("failed to parse recruitDdl")
  38. }
  39. // 获取定时任务配置id
  40. infoAutoTask := entity.InfoAutoTask{}
  41. infoAutoTask = dao.InfoAutoTaskDao{}.GetAutoTaskLast(localCreateParam.EnterpriseId)
  42. infoAutoDefault := entity.InfoAutoDefault{}
  43. infoAutoDefault = dao.InfoAutoDefaultDao{}.GetAutoDefaultLast(localCreateParam.EnterpriseId)
  44. t := time.Now()
  45. if recruitDdl.Before(t) {
  46. return nil, errors.New("请修改截止时间")
  47. }
  48. newLocalLife := entity.LocalLifeInfo{
  49. EnterpriseID: localCreateParam.EnterpriseId,
  50. SubAccountID: localCreateParam.SubAccountId,
  51. OperatorType: operatorType,
  52. TaskStatus: 1,
  53. LocalID: localId,
  54. LocalType: localCreateParam.LocalType,
  55. LocalPlatform: localCreateParam.Platform,
  56. StoreID: localCreateParam.StoreId,
  57. StoreRelatedAt: time.Now(),
  58. PromoteBody: localCreateParam.PromoteBody,
  59. Donate: localCreateParam.Donate,
  60. TeamBuyingId: localCreateParam.TeamBuyingId,
  61. TeamBuyingRelatedAt: time.Now(),
  62. CreatedAt: t,
  63. AutoTaskID: infoAutoTask.AutoTaskID,
  64. AutoDefaultID: infoAutoDefault.AutoDefaultID,
  65. LocalName: localCreateParam.LocalName,
  66. TalentType: localCreateParam.TalentType,
  67. RecruitDdl: recruitDdl,
  68. TaskForm: localCreateParam.TaskForm,
  69. ContentType: localCreateParam.ContentType,
  70. TaskDetail: localCreateParam.TaskDetail,
  71. }
  72. if localCreateParam.LocalType == 1 {
  73. newLocalLife.ServiceChargeRate = localCreateParam.ServiceChargeRate
  74. }
  75. err = dao.LocalLifeDao{}.CreateLocalLife(newLocalLife)
  76. if err != nil {
  77. return nil, err
  78. }
  79. // 4. 更新选品brief和示例(本地生活任务补充信息)
  80. if localCreateParam.LocalBrief != nil {
  81. // 插入新的brief
  82. for _, v := range localCreateParam.LocalBrief {
  83. brief := entity.LocalLifeBrief{
  84. LocalID: localId,
  85. FileUid: v.FileUid,
  86. FileName: v.Name,
  87. FileUrl: v.FileUrl,
  88. CreatedAt: time.Now(),
  89. Type: v.Type,
  90. }
  91. err = dao.LocalLifeBriefDao{}.CreateLocalBrief(brief)
  92. if err != nil {
  93. return nil, err
  94. }
  95. }
  96. }
  97. if localCreateParam.LocalMaterial != nil {
  98. // 删除已有示例
  99. err = dao.LocalLifeMaterialDao{}.DeleteLocalMaterialByLocalId(localId)
  100. if err != nil {
  101. return nil, err
  102. }
  103. // 插入新的示例
  104. for _, v := range localCreateParam.LocalMaterial {
  105. material := entity.LocalLifeMaterial{
  106. LocalID: localId,
  107. FileUid: v.FileUid,
  108. FileName: v.Name,
  109. FileUrl: v.FileUrl,
  110. CreatedAt: time.Now(),
  111. Type: v.Type,
  112. }
  113. err = dao.LocalLifeMaterialDao{}.CreateLocalMaterial(material)
  114. if err != nil {
  115. return nil, err
  116. }
  117. }
  118. }
  119. // 更新公开种草任务的招募策略
  120. var totalRecruitNum int64
  121. var estimatedCost float64
  122. if localCreateParam.RecruitStrategys != nil {
  123. // 2. 接收并创建新的招募策略
  124. if len(localCreateParam.RecruitStrategys) != 0 {
  125. var recruits []entity.RecruitStrategy
  126. for _, strategy := range localCreateParam.RecruitStrategys {
  127. if strategy.FeeForm == 2 {
  128. estimatedCost += float64(strategy.RecruitNumber) * strategy.Offer
  129. }
  130. recruitStrategy := entity.RecruitStrategy{
  131. FeeForm: strategy.FeeForm,
  132. StrategyID: strategy.StrategyID,
  133. FollowersLow: strategy.FollowersLow,
  134. FollowersUp: strategy.FollowersUp,
  135. RecruitNumber: strategy.RecruitNumber,
  136. ProjectID: localId,
  137. StrategyType: 1,
  138. ServiceRate: localCreateParam.ServiceChargeRate,
  139. }
  140. totalRecruitNum += strategy.RecruitNumber
  141. if strategy.FeeForm == 2 {
  142. recruitStrategy.Offer = strategy.Offer
  143. recruitStrategy.ServiceCharge = strategy.Offer * localCreateParam.ServiceChargeRate
  144. recruitStrategy.TOffer = strategy.Offer * (1 - localCreateParam.ServiceChargeRate)
  145. }
  146. recruits = append(recruits, recruitStrategy)
  147. }
  148. err = dao.RecruitStrategyDao{}.CreateRecruitStrategy(recruits)
  149. if err != nil {
  150. return nil, err
  151. }
  152. }
  153. }
  154. _ = dao.LocalLifeDao{}.UpdateLocal(entity.LocalLifeInfo{LocalID: localId, EstimatedCost: estimatedCost})
  155. return &localId, nil
  156. }
  157. // 更新公开本地生活任务(招募要求、执行要求)
  158. func (s LocalLifeService) UpdateLocal(localUpdateParam *vo.LocalUpdateParam) (*string, error) {
  159. // 1. 检查该项目id有无本地任务
  160. localID := localUpdateParam.LocalID
  161. localLife, err := dao.LocalLifeDao{}.GetLocalById(localID)
  162. if err != nil {
  163. return nil, err
  164. }
  165. if localLife == nil {
  166. return nil, errors.New("本地生活项目不存在")
  167. }
  168. recruitDdl := time.Time{} //赋零值
  169. recruitDdl, _ = time.ParseInLocation("2006-01-02 15:04:05", localUpdateParam.RecruitDdl, time.Local)
  170. if recruitDdl.Before(localLife.CreatedAt) {
  171. return nil, errors.New("请修改截止时间")
  172. }
  173. // 更新公开种草任务的招募策略
  174. var totalRecruitNum int64
  175. var estimatedCost float64
  176. if localUpdateParam.RecruitStrategys != nil {
  177. // 1. 删除已有的招募策略
  178. err = dao.RecruitStrategyDao{}.DeleteRecruitStrategyByProjectID(localUpdateParam.LocalID)
  179. if err != nil {
  180. return nil, err
  181. }
  182. // 2. 接收并创建新的招募策略
  183. if len(localUpdateParam.RecruitStrategys) != 0 {
  184. var recruits []entity.RecruitStrategy
  185. for _, strategy := range localUpdateParam.RecruitStrategys {
  186. if strategy.FeeForm == 2 {
  187. estimatedCost += float64(strategy.RecruitNumber) * strategy.Offer
  188. }
  189. recruitStrategy := entity.RecruitStrategy{
  190. FeeForm: strategy.FeeForm,
  191. StrategyID: strategy.StrategyID,
  192. FollowersLow: strategy.FollowersLow,
  193. FollowersUp: strategy.FollowersUp,
  194. RecruitNumber: strategy.RecruitNumber,
  195. ProjectID: localLife.LocalID,
  196. StrategyType: 1,
  197. ServiceRate: localLife.ServiceChargeRate,
  198. }
  199. totalRecruitNum += strategy.RecruitNumber
  200. if strategy.FeeForm == 2 {
  201. recruitStrategy.Offer = strategy.Offer
  202. recruitStrategy.ServiceCharge = strategy.Offer * localUpdateParam.ServiceChargeRate
  203. recruitStrategy.TOffer = strategy.Offer * (1 - localUpdateParam.ServiceChargeRate)
  204. }
  205. recruits = append(recruits, recruitStrategy)
  206. }
  207. err = dao.RecruitStrategyDao{}.CreateRecruitStrategy(recruits)
  208. if err != nil {
  209. return nil, err
  210. }
  211. }
  212. }
  213. // 2. 数据准备
  214. //// a) 查找关联商品信息
  215. //product, err := dao.ProductDAO{}.GetProductByID(project.ProductID)
  216. //if err != nil {
  217. // return nil, err
  218. //}
  219. //productPhotos, err := dao.ProductPhotoDAO{}.GetProductPhotoByProductID(project.ProductID)
  220. //productInfoToJson, _ := json.Marshal(product)
  221. //productPhotosToJson, _ := json.Marshal(productPhotos)
  222. // d) 任务截止时间
  223. //// f) 更新选品状态
  224. //if localUpdateParam.LocalStatus != 2 && localUpdateParam.LocalStatus != 8 {
  225. // localUpdateParam.LocalStatus = 1
  226. //}
  227. t := time.Now()
  228. updateLocalLife := entity.LocalLifeInfo{
  229. StoreID: localUpdateParam.StoreId,
  230. TeamBuyingId: localUpdateParam.TeamBuyingId,
  231. ServiceChargeRate: localUpdateParam.ServiceChargeRate,
  232. PromoteBody: localUpdateParam.PromoteBody,
  233. Donate: localUpdateParam.Donate,
  234. //TaskStatus: localUpdateParam.LocalStatus,
  235. LocalName: localUpdateParam.LocalName,
  236. TalentType: localUpdateParam.TalentType,
  237. RecruitDdl: recruitDdl,
  238. TaskForm: localUpdateParam.TaskForm,
  239. ContentType: localUpdateParam.ContentType,
  240. TaskDetail: localUpdateParam.TaskDetail,
  241. UpdatedAt: t,
  242. EstimatedCost: estimatedCost,
  243. }
  244. //if localUpdateParam.LocalStatus == 2 {
  245. // updateLocalLife.SubmitAt = t
  246. //}
  247. // 合并传入参数和数据表中原记录,若传入参数字段值为空,则将字段赋值为原记录中值
  248. result := util.MergeStructValue(&updateLocalLife, localLife)
  249. // 利用反射机制将interface类型转换为结构体类型
  250. v := reflect.ValueOf(&result).Elem()
  251. if v.Kind() == reflect.Struct {
  252. updateLocalLife = v.Interface().(entity.LocalLifeInfo)
  253. //fmt.Println(p)
  254. }
  255. // c) 计算预估成本(如果有)
  256. /*
  257. var estimatedCost float64
  258. if conv.MustInt(updateSelection.TaskMode, 0) == 1 {
  259. estimatedCost = conv.MustFloat64(updateSelection.TaskReward, 0) * conv.MustFloat64(updateSelection.SampleNum, 0)
  260. }
  261. estimatedCostToString, _ := conv.String(estimatedCost)
  262. updateSelection.EstimatedCost = estimatedCostToString
  263. */
  264. // 3. 更新选品
  265. err = dao.LocalLifeDao{}.UpdateLocal(updateLocalLife)
  266. if err != nil {
  267. return nil, err
  268. }
  269. // 4. 更新选品brief和示例(本地生活任务补充信息)
  270. if localUpdateParam.LocalBrief != nil {
  271. // 删除已有brief
  272. err = dao.LocalLifeBriefDao{}.DeleteLocalBriefByLocalId(localLife.LocalID)
  273. if err != nil {
  274. return nil, err
  275. }
  276. // 插入新的brief
  277. for _, v := range localUpdateParam.LocalBrief {
  278. brief := entity.LocalLifeBrief{
  279. LocalID: localLife.LocalID,
  280. FileUid: v.FileUid,
  281. FileName: v.Name,
  282. FileUrl: v.FileUrl,
  283. CreatedAt: time.Now(),
  284. Type: v.Type,
  285. }
  286. err = dao.LocalLifeBriefDao{}.CreateLocalBrief(brief)
  287. if err != nil {
  288. return nil, err
  289. }
  290. }
  291. }
  292. if localUpdateParam.LocalMaterial != nil {
  293. // 删除已有示例
  294. err = dao.LocalLifeMaterialDao{}.DeleteLocalMaterialByLocalId(localLife.LocalID)
  295. if err != nil {
  296. return nil, err
  297. }
  298. // 插入新的示例
  299. for _, v := range localUpdateParam.LocalMaterial {
  300. material := entity.LocalLifeMaterial{
  301. LocalID: localLife.LocalID,
  302. FileUid: v.FileUid,
  303. FileName: v.Name,
  304. FileUrl: v.FileUrl,
  305. CreatedAt: time.Now(),
  306. Type: v.Type,
  307. }
  308. err = dao.LocalLifeMaterialDao{}.CreateLocalMaterial(material)
  309. if err != nil {
  310. return nil, err
  311. }
  312. }
  313. }
  314. return &updateLocalLife.LocalID, nil
  315. }
  316. // 更新定向本地生活任务(招募要求、执行要求)
  317. func (s LocalLifeService) UpdateLocalTarget(localUpdateParam *vo.LocalUpdateParam) (*string, error) {
  318. // 1. 检查该项目id有无本地任务
  319. localID := localUpdateParam.LocalID
  320. localLife, err := dao.LocalLifeDao{}.GetLocalById(localID)
  321. if err != nil {
  322. return nil, err
  323. }
  324. if localLife == nil {
  325. return nil, errors.New("本地生活项目不存在")
  326. }
  327. println("更新定向本地生活任务的招募策略")
  328. // 更新公开种草任务的招募策略
  329. var totalRecruitNum int64
  330. var estimatedCost float64
  331. if localUpdateParam.RecruitStrategys != nil {
  332. // 1. 删除已有的招募策略
  333. err = dao.RecruitStrategyDao{}.DeleteRecruitStrategyByProjectID(localUpdateParam.LocalID)
  334. if err != nil {
  335. return nil, err
  336. }
  337. // 2. 接收并创建新的招募策略
  338. if len(localUpdateParam.RecruitStrategys) != 0 {
  339. var recruits []entity.RecruitStrategy
  340. for _, strategy := range localUpdateParam.RecruitStrategys {
  341. if strategy.FeeForm == 2 {
  342. estimatedCost += float64(strategy.RecruitNumber) * strategy.Offer
  343. }
  344. recruitStrategy := entity.RecruitStrategy{
  345. FeeForm: strategy.FeeForm,
  346. StrategyID: strategy.StrategyID,
  347. FollowersLow: strategy.FollowersLow,
  348. FollowersUp: strategy.FollowersUp,
  349. RecruitNumber: strategy.RecruitNumber,
  350. ProjectID: localLife.LocalID,
  351. StrategyType: 1,
  352. ServiceRate: localLife.ServiceChargeRate,
  353. }
  354. totalRecruitNum += strategy.RecruitNumber
  355. if strategy.FeeForm == 2 {
  356. recruitStrategy.Offer = strategy.Offer // 报价
  357. }
  358. recruits = append(recruits, recruitStrategy)
  359. }
  360. err = dao.RecruitStrategyDao{}.CreateRecruitStrategy(recruits)
  361. if err != nil {
  362. return nil, err
  363. }
  364. }
  365. }
  366. // 2. 数据准备
  367. // a) 查找关联商品信息
  368. //product, err := dao.ProductDAO{}.GetProductByID(project.ProductID)
  369. //if err != nil {
  370. // return nil, err
  371. //}
  372. //productPhotos, err := dao.ProductPhotoDAO{}.GetProductPhotoByProductID(project.ProductID)
  373. //productInfoToJson, _ := json.Marshal(product)
  374. //productPhotosToJson, _ := json.Marshal(productPhotos)
  375. // d) 任务截止时间
  376. recruitDdl := time.Time{} //赋零值
  377. recruitDdl, _ = time.ParseInLocation("2006-01-02 15:04:05", localUpdateParam.RecruitDdl, time.Local)
  378. //// f) 更新选品状态
  379. //if localUpdateParam.LocalStatus != 2 && localUpdateParam.LocalStatus != 8 {
  380. // localUpdateParam.LocalStatus = 1
  381. //}
  382. t := time.Now()
  383. updateLocalLife := entity.LocalLifeInfo{
  384. StoreID: localUpdateParam.StoreId,
  385. TeamBuyingId: localUpdateParam.TeamBuyingId,
  386. ServiceChargeRate: localUpdateParam.ServiceChargeRate,
  387. PromoteBody: localUpdateParam.PromoteBody,
  388. Donate: localUpdateParam.Donate,
  389. //TaskStatus: localUpdateParam.LocalStatus,
  390. LocalName: localUpdateParam.LocalName,
  391. TalentType: localUpdateParam.TalentType,
  392. RecruitDdl: recruitDdl,
  393. TaskForm: localUpdateParam.TaskForm,
  394. ContentType: localUpdateParam.ContentType,
  395. TaskDetail: localUpdateParam.TaskDetail,
  396. UpdatedAt: t,
  397. Tools: localUpdateParam.Tools,
  398. EstimatedCost: estimatedCost,
  399. }
  400. //if localUpdateParam.LocalStatus == 2 {
  401. // updateLocalLife.SubmitAt = t
  402. //}
  403. // 合并传入参数和数据表中原记录,若传入参数字段值为空,则将字段赋值为原记录中值
  404. result := util.MergeStructValue(&updateLocalLife, localLife)
  405. // 利用反射机制将interface类型转换为结构体类型
  406. v := reflect.ValueOf(&result).Elem()
  407. if v.Kind() == reflect.Struct {
  408. updateLocalLife = v.Interface().(entity.LocalLifeInfo)
  409. //fmt.Println(p)
  410. }
  411. // c) 计算预估成本(如果有)
  412. /*
  413. var estimatedCost float64
  414. if conv.MustInt(updateSelection.TaskMode, 0) == 1 {
  415. estimatedCost = conv.MustFloat64(updateSelection.TaskReward, 0) * conv.MustFloat64(updateSelection.SampleNum, 0)
  416. }
  417. estimatedCostToString, _ := conv.String(estimatedCost)
  418. updateSelection.EstimatedCost = estimatedCostToString
  419. */
  420. // 3. 更新选品
  421. err = dao.LocalLifeDao{}.UpdateLocal(updateLocalLife)
  422. if err != nil {
  423. return nil, err
  424. }
  425. // 4. 更新选品brief和示例(本地生活任务补充信息)
  426. if localUpdateParam.LocalBrief != nil {
  427. // 删除已有brief
  428. err = dao.ProjectBriefDao{}.DeleteSecBriefBySelectionId(localLife.LocalID)
  429. if err != nil {
  430. return nil, err
  431. }
  432. // 插入新的brief
  433. for _, v := range localUpdateParam.LocalBrief {
  434. brief := entity.ProjectBrief{
  435. ProjectID: localLife.LocalID,
  436. FileUid: v.FileUid,
  437. FileName: v.Name,
  438. FileUrl: v.FileUrl,
  439. CreatedAt: time.Now(),
  440. Type: v.Type,
  441. }
  442. err = dao.ProjectBriefDao{}.CreateProjectBrief(brief)
  443. if err != nil {
  444. return nil, err
  445. }
  446. }
  447. }
  448. if localUpdateParam.LocalMaterial != nil {
  449. // 删除已有示例
  450. err = dao.ProjectMaterialDao{}.DeleteProjectMaterialByProjectId(localLife.LocalID)
  451. if err != nil {
  452. return nil, err
  453. }
  454. // 插入新的示例
  455. for _, v := range localUpdateParam.LocalMaterial {
  456. projectMaterial := entity.ProjectMaterial{
  457. ProjectID: localLife.LocalID,
  458. FileUid: v.FileUid,
  459. FileName: v.Name,
  460. FileUrl: v.FileUrl,
  461. CreatedAt: time.Now(),
  462. Type: v.Type,
  463. }
  464. err = dao.ProjectMaterialDao{}.CreateProjectMaterial(projectMaterial)
  465. if err != nil {
  466. return nil, err
  467. }
  468. }
  469. }
  470. return &updateLocalLife.LocalID, nil
  471. }
  472. // 本地生活任务预览
  473. func (s LocalLifeService) GetLocalLifeDetail(localId string) (*vo.ReLocalDetail, error) {
  474. reLocalDetail := vo.ReLocalDetail{}
  475. localLife, err := dao.LocalLifeDao{}.GetLocalById(localId)
  476. if err != nil {
  477. logrus.Errorf("[localLifeDB service] call GetLocalById error,err:%+v", err)
  478. return nil, err
  479. }
  480. // 系统信息
  481. reLocalDetail.LocalId = localId
  482. reLocalDetail.LocalStatus = localLife.TaskStatus
  483. reLocalDetail.LocalPlatform = localLife.LocalPlatform
  484. reLocalDetail.CreatedAt = localLife.CreatedAt.Format("2006-01-02 15:04:05")
  485. reLocalDetail.EstimatedCost = localLife.EstimatedCost // 预估成本
  486. reLocalDetail.ServiceChargeRate = localLife.ServiceChargeRate
  487. var creatorName, phone string
  488. if localLife.OperatorType == 1 && localLife.SubAccountID == 0 {
  489. enterprise, err := dao.EnterpriseDao{}.GetEnterprise(localLife.EnterpriseID)
  490. if err == nil && enterprise != nil {
  491. creatorName = enterprise.BusinessName
  492. phone, err = dao.UserDao{}.GetPhoneByUserId(enterprise.UserId)
  493. }
  494. } else if localLife.OperatorType == 1 && localLife.SubAccountID != 0 {
  495. subAccount, err := dao.SubAccountDao{}.GetSubAccount(localLife.SubAccountID)
  496. if err == nil && subAccount != nil {
  497. creatorName = subAccount.SubAccountName
  498. phone, err = dao.UserDao{}.GetPhoneByUserId(subAccount.UserId)
  499. }
  500. }
  501. reLocalDetail.CreatorName = creatorName
  502. reLocalDetail.Phone = phone
  503. // 关联主体
  504. var reStore vo.ReStorePreview
  505. store, err := dao.StoreDao{}.GetStoreByID(localLife.StoreID)
  506. if err == nil {
  507. photoUrl, e := dao.ProductPhotoDAO{}.GetMainPhotoByStoreID(store.StoreID)
  508. if e != nil {
  509. photoUrl = ""
  510. }
  511. reStore = vo.ReStorePreview{
  512. StoreID: store.StoreID,
  513. StoreName: store.StoreName,
  514. StoreLocation: store.StoreLocation,
  515. StoreCategory: store.StoreCategory,
  516. TeamNum: store.TeamNum,
  517. StoreDetail: store.StoreDetail,
  518. CreatedAt: store.CreatedAt.Format("2006-01-02 15:04:05"),
  519. PhotoUrl: photoUrl,
  520. }
  521. }
  522. reLocalDetail.StoreInfo = &reStore
  523. var reTeamBuying vo.ReTeamBuyingPreview
  524. teamBuying, err := dao.TeamBuyingDao{}.GetTeamBuyingByID(localLife.TeamBuyingId)
  525. if err == nil {
  526. photoUrl, e := dao.ProductPhotoDAO{}.GetMainPhotoByTeamBuyingID(teamBuying.TeamBuyingID)
  527. if e != nil {
  528. photoUrl = ""
  529. }
  530. reTeamBuying = vo.ReTeamBuyingPreview{
  531. TeamBuyingID: teamBuying.TeamBuyingID,
  532. TeamBuyingName: teamBuying.TeamBuyingName,
  533. TeamBuyingPrice: teamBuying.TeamBuyingPrice,
  534. TeamBuyingCategory: teamBuying.TeamBuyingCategory,
  535. TeamBuyingDetail: teamBuying.TeamBuyingDetail,
  536. CreatedAt: teamBuying.CreatedAt.Format("2006-01-02 15:04:05"),
  537. PhotoUrl: photoUrl,
  538. }
  539. }
  540. reLocalDetail.TeamBuyingInfo = &reTeamBuying
  541. reLocalDetail.PromoteBody = localLife.PromoteBody
  542. reLocalDetail.Donate = localLife.Donate
  543. // 招募要求
  544. reLocalDetail.TalentType = localLife.TalentType
  545. reLocalDetail.RecruitDdl = localLife.RecruitDdl.Format("2006-01-02 15:04:05")
  546. var recruitStrategysPreviews []*vo.LocalRecruitStrategy
  547. recruitStrategys, err := dao.RecruitStrategyDao{}.GetRecruitStrategyByProjectId(localId)
  548. if err != nil {
  549. logrus.Errorf("[localLifeDB service] call GetRecruitStrategy error,err:%+v", err)
  550. return nil, err
  551. }
  552. for _, recruitStrategy := range recruitStrategys {
  553. recruitStrategysPreview := &vo.LocalRecruitStrategy{
  554. StrategyId: recruitStrategy.StrategyID,
  555. FeeForm: recruitStrategy.FeeForm,
  556. FollowersLow: recruitStrategy.FollowersLow,
  557. FollowersUp: recruitStrategy.FollowersUp,
  558. RecruitNumber: recruitStrategy.RecruitNumber,
  559. Offer: recruitStrategy.Offer,
  560. TOffer: recruitStrategy.TOffer,
  561. ServiceCharge: recruitStrategy.ServiceCharge,
  562. SelectedNumber: recruitStrategy.SelectedNumber,
  563. TotalOffer: recruitStrategy.TotalOffer,
  564. }
  565. recruitStrategysPreviews = append(recruitStrategysPreviews, recruitStrategysPreview)
  566. }
  567. reLocalDetail.RecruitStrategys = recruitStrategysPreviews
  568. // 执行要求
  569. reLocalDetail.TaskForm = localLife.TaskForm
  570. reLocalDetail.ContentType = localLife.ContentType
  571. reLocalDetail.TaskDetail = localLife.TaskDetail
  572. taskBriefInfos, err := dao.ProjectBriefDao{}.GetProjectBriefInfo(localId)
  573. if err != nil {
  574. logrus.Errorf("[localLifeDB service] call GetProjectBriefInfo error,err:%+v", err)
  575. return nil, err
  576. }
  577. taskMaterials, err := dao.ProjectMaterialDao{}.GetProjectMaterialInfo(localId)
  578. if err != nil {
  579. logrus.Errorf("[localLifeDB service] call GetprojectMaterialInfo error,err:%+v", err)
  580. return nil, err
  581. }
  582. reLocalDetail.TaskBriefs = taskBriefInfos
  583. reLocalDetail.TaskMaterials = taskMaterials
  584. reLocalDetail.Tools = localLife.Tools
  585. return &reLocalDetail, nil
  586. }
  587. //// 本地生活提交审核
  588. //func (s LocalLifeService) LocalLifeToReview(localUpdateParam *vo.LocalUpdateParam) (*string, error) {
  589. // localId := localUpdateParam.LocalID
  590. //
  591. // local, err := dao.LocalLifeDao{}.GetLocalById(localId)
  592. // if err != nil {
  593. // logrus.Errorf("[projectInfoDB service] call GetProject error,err:%+v", err)
  594. // return nil, err
  595. // }
  596. //
  597. // localName := local.LocalName // 任务标题
  598. // localDetail := local.TaskDetail // 任务详情
  599. // store, err := dao.StoreDao{}.GetStoreByID(local.StoreID)
  600. // if err != nil {
  601. // return nil, err
  602. // }
  603. // storeName := store.StoreName // 门店名称
  604. // storeDetail := store.StoreDetail // 门店特点
  605. // storeMainPhoto, err1 := dao.ProductPhotoDAO{}.GetMainPhotoByStoreID(store.StoreID)
  606. // if err1 != nil {
  607. // return nil, err1
  608. // }
  609. // teamBuying, err2 := dao.TeamBuyingDao{}.GetTeamBuyingByID(local.TeamBuyingId)
  610. // if err2 != nil {
  611. // return nil, err2
  612. // }
  613. // teamBuyingName := teamBuying.TeamBuyingName // 团购标题
  614. // teamBuyingDetail := teamBuying.TeamBuyingDetail // 团购详情
  615. // teamBuyingMainPhoto, err3 := dao.ProductPhotoDAO{}.GetMainPhotoByTeamBuyingID(teamBuying.TeamBuyingID)
  616. // if err3 != nil {
  617. // return nil, err3
  618. // }
  619. // var images []string
  620. // var videos []string
  621. // var videoJobIds []string
  622. // var documents []string
  623. // var documentJobIds []string
  624. // reviewService := review_service.GetConfig()
  625. //
  626. // storePhotos, err4 := dao.ProductPhotoDAO{}.GetProductPhotoByStoreID(local.StoreID)
  627. // if err4 != nil {
  628. // return nil, err4
  629. // }
  630. // for _, storePhoto := range storePhotos {
  631. // if storePhoto.Symbol == 2 || storePhoto.Symbol == 4 {
  632. // images = append(images, storePhoto.PhotoUrl)
  633. // } else if storePhoto.Symbol == 3 || storePhoto.Symbol == 5 {
  634. // var videoJobId *string
  635. // var reviewErr error
  636. // i := 10
  637. // for {
  638. // videoJobId, reviewErr = reviewService.CheckVideo(storePhoto.PhotoUrl)
  639. // if reviewErr == nil || i == 0 {
  640. // break
  641. // }
  642. // i -= 1
  643. // }
  644. // if reviewErr != nil {
  645. // return nil, reviewErr
  646. // }
  647. // videos = append(videos, storePhoto.PhotoUrl)
  648. // videoJobIds = append(videoJobIds, *videoJobId)
  649. // }
  650. // }
  651. // teamBuyingPhotos, err5 := dao.ProductPhotoDAO{}.GetProductPhotoByTeamBuyingID(local.TeamBuyingId)
  652. // if err5 != nil {
  653. // return nil, err5
  654. // }
  655. // for _, teamBuyingPhoto := range teamBuyingPhotos {
  656. // if teamBuyingPhoto.Symbol == 2 || teamBuyingPhoto.Symbol == 4 {
  657. // images = append(images, teamBuyingPhoto.PhotoUrl)
  658. // } else if teamBuyingPhoto.Symbol == 3 || teamBuyingPhoto.Symbol == 5 {
  659. // var videoJobId *string
  660. // var reviewErr error
  661. // i := 10
  662. // for {
  663. // videoJobId, reviewErr = reviewService.CheckVideo(teamBuyingPhoto.PhotoUrl)
  664. // if reviewErr == nil || i == 0 {
  665. // break
  666. // }
  667. // i -= 1
  668. // }
  669. // if reviewErr != nil {
  670. // return nil, reviewErr
  671. // }
  672. // videos = append(videos, teamBuyingPhoto.PhotoUrl)
  673. // videoJobIds = append(videoJobIds, *videoJobId)
  674. // }
  675. // }
  676. //
  677. // localBriefInfos, err6 := dao.LocalLifeBriefDao{}.GetLocalBriefInfo(localId)
  678. // if err6 != nil {
  679. // return nil, err6
  680. // }
  681. // for _, localBriefInfo := range localBriefInfos {
  682. // if localBriefInfo.Type == 1 {
  683. // images = append(images, localBriefInfo.FileUrl)
  684. // } else if localBriefInfo.Type == 2 {
  685. // var documentJobId *string
  686. // var reviewErr error
  687. // i := 10
  688. // fileType := "pdf"
  689. // parts := strings.Split(localBriefInfo.FileName, ".")
  690. // if len(parts) > 1 {
  691. // fileType = parts[len(parts)-1]
  692. // }
  693. // for {
  694. // documentJobId, reviewErr = reviewService.CheckDocument(localBriefInfo.FileUrl, fileType)
  695. // if reviewErr == nil || i == 0 {
  696. // break
  697. // }
  698. // i -= 1
  699. // }
  700. // if reviewErr != nil {
  701. // return nil, reviewErr
  702. // }
  703. // documents = append(documents, localBriefInfo.FileUrl)
  704. // documentJobIds = append(documentJobIds, *documentJobId)
  705. // }
  706. // }
  707. // localMaterials, err7 := dao.LocalLifeMaterialDao{}.GetLocalMaterialInfo(localId)
  708. // if err7 != nil {
  709. // return nil, err7
  710. // }
  711. // for _, localMaterial := range localMaterials {
  712. // if localMaterial.Type == 1 {
  713. // images = append(images, localMaterial.FileUrl)
  714. // } else if localMaterial.Type == 2 {
  715. // var videoJobId *string
  716. // var reviewErr error
  717. // i := 10
  718. // for {
  719. // videoJobId, reviewErr = reviewService.CheckVideo(localMaterial.FileUrl)
  720. // if reviewErr == nil || i == 0 {
  721. // break
  722. // }
  723. // i -= 1
  724. // }
  725. // if reviewErr != nil {
  726. // return nil, reviewErr
  727. // }
  728. // videos = append(videos, localMaterial.FileUrl)
  729. // videoJobIds = append(videoJobIds, *videoJobId)
  730. // }
  731. // }
  732. //
  733. // newReviewLocal := &entity.ReviewLocalLife{
  734. // LocalID: localId,
  735. // TaskName: localName,
  736. // TaskDetail: localDetail,
  737. // StoreMainPhoto: storeMainPhoto,
  738. // StoreName: storeName,
  739. // StoreDetail: storeDetail,
  740. // TeamBuyingMainPhoto: teamBuyingMainPhoto,
  741. // TeamBuyingName: teamBuyingName,
  742. // TeamBuyingDetail: teamBuyingDetail,
  743. // Images: strings.Join(images, ","),
  744. // Videos: strings.Join(videos, ","),
  745. // Documents: strings.Join(documents, ","),
  746. // VideoJobIds: strings.Join(videoJobIds, ","),
  747. // DocumentJobIds: strings.Join(documentJobIds, ","),
  748. // Status: 1,
  749. // }
  750. // err8 := dao.LocalLifeReviewDao{}.Create(newReviewLocal)
  751. // if err8 != nil {
  752. // return nil, err8
  753. // }
  754. //
  755. // t := time.Now()
  756. // updateLocal := entity.LocalLifeInfo{
  757. // LocalID: localId,
  758. // TaskStatus: 2,
  759. // UpdatedAt: t,
  760. // }
  761. // err9 := dao.LocalLifeDao{}.UpdateLocal(updateLocal)
  762. // if err9 != nil {
  763. // return nil, err9
  764. // }
  765. // return &localId, nil
  766. //}
  767. // 本地生活任务列表
  768. func (s LocalLifeService) GetLocalLifeTaskList(param *vo.LocalSearchParam) (vo.ResultVO, error) {
  769. if param.Page == 0 {
  770. param.Page = 1
  771. }
  772. if param.PageSize == 0 {
  773. param.PageSize = 10
  774. }
  775. var result vo.ResultVO
  776. reLocalTaskPreviews, total, err := (&dao.LocalLifeDao{}).GetLocalPreviews(param)
  777. if err != nil {
  778. return result, err
  779. }
  780. for i := range reLocalTaskPreviews {
  781. var creatorName string
  782. var storeName string
  783. var storeLocation string
  784. var mainImage string
  785. if reLocalTaskPreviews[i].SubAccountId == 0 {
  786. enterprise, err := dao.EnterpriseDao{}.GetEnterprise(reLocalTaskPreviews[i].EnterpriseId)
  787. if err == nil && enterprise != nil {
  788. creatorName = enterprise.BusinessName
  789. }
  790. } else {
  791. subAccount, err := dao.SubAccountDao{}.GetSubAccount(reLocalTaskPreviews[i].SubAccountId)
  792. if err == nil && subAccount != nil {
  793. creatorName = subAccount.SubAccountName
  794. }
  795. }
  796. store, err := dao.StoreDao{}.GetStoreByID(reLocalTaskPreviews[i].StoreId)
  797. if err == nil && store != nil {
  798. storeName = store.StoreName
  799. storeLocation = store.StoreLocation
  800. }
  801. mainImage, err = dao.ProductPhotoDAO{}.GetMainPhotoByStoreID(reLocalTaskPreviews[i].StoreId)
  802. reLocalTaskPreviews[i].CreatorName = creatorName
  803. reLocalTaskPreviews[i].StoreName = storeName
  804. reLocalTaskPreviews[i].StoreLocation = storeLocation
  805. reLocalTaskPreviews[i].MainImage = mainImage
  806. }
  807. result = vo.ResultVO{
  808. Page: param.Page,
  809. PageSize: param.PageSize,
  810. Total: total,
  811. Data: reLocalTaskPreviews,
  812. }
  813. return result, nil
  814. }
  815. // 删除本地生活任务
  816. func (s LocalLifeService) DeleteLocalLife(localId string) (*string, error) {
  817. res, err := dao.LocalLifeDao{}.DeleteLocalLife(localId)
  818. if err != nil {
  819. logrus.Errorf("[DeleteLocalLife service] call DeleteLocalLife error,err:%+v", err)
  820. return res, err
  821. }
  822. return res, nil
  823. }
  824. // 草稿箱——本地生活
  825. func (s LocalLifeService) GetLocalLifeDraftList(param *vo.LocalDraftParam) (vo.ResultVO, error) {
  826. if param.Page == 0 {
  827. param.Page = 1
  828. }
  829. if param.PageSize == 0 {
  830. param.PageSize = 10
  831. }
  832. var result vo.ResultVO
  833. reLocalTaskPreviews, total, err := (&dao.LocalLifeDao{}).GetLocalDraftList(param)
  834. if err != nil {
  835. return result, err
  836. }
  837. for i := range reLocalTaskPreviews {
  838. var creatorName string
  839. var storeName string
  840. var storeLocation string
  841. var mainImage string
  842. if reLocalTaskPreviews[i].SubAccountId == 0 {
  843. enterprise, err := dao.EnterpriseDao{}.GetEnterprise(reLocalTaskPreviews[i].EnterpriseId)
  844. if err == nil && enterprise != nil {
  845. creatorName = enterprise.BusinessName
  846. }
  847. } else {
  848. subAccount, err := dao.SubAccountDao{}.GetSubAccount(reLocalTaskPreviews[i].SubAccountId)
  849. if err == nil && subAccount != nil {
  850. creatorName = subAccount.SubAccountName
  851. }
  852. }
  853. store, err := dao.StoreDao{}.GetStoreByID(reLocalTaskPreviews[i].StoreId)
  854. if err == nil && store != nil {
  855. storeName = store.StoreName
  856. storeLocation = store.StoreLocation
  857. }
  858. mainImage, err = dao.ProductPhotoDAO{}.GetMainPhotoByStoreID(reLocalTaskPreviews[i].StoreId)
  859. reLocalTaskPreviews[i].CreatorName = creatorName
  860. reLocalTaskPreviews[i].StoreName = storeName
  861. reLocalTaskPreviews[i].StoreLocation = storeLocation
  862. reLocalTaskPreviews[i].MainImage = mainImage
  863. }
  864. result = vo.ResultVO{
  865. Page: param.Page,
  866. PageSize: param.PageSize,
  867. Total: total,
  868. Data: reLocalTaskPreviews,
  869. }
  870. return result, nil
  871. }
  872. // 探店本地生活列表
  873. func (s LocalLifeService) GetStoreExploreList(param *vo.LocalSearchParam) (vo.ResultVO, error) {
  874. if param.Page == 0 {
  875. param.Page = 1
  876. }
  877. if param.PageSize == 0 {
  878. param.PageSize = 10
  879. }
  880. var result vo.ResultVO
  881. reLocalStoreExplorePreviews, total, err := (&dao.LocalLifeDao{}).GetLocalStoreExplorePreviews(param)
  882. if err != nil {
  883. return result, err
  884. }
  885. for i := range reLocalStoreExplorePreviews {
  886. var creatorName string
  887. var storeName string
  888. var storeLocation string
  889. var mainImage string
  890. if reLocalStoreExplorePreviews[i].SubAccountId == 0 {
  891. enterprise, err := dao.EnterpriseDao{}.GetEnterprise(reLocalStoreExplorePreviews[i].EnterpriseId)
  892. if err == nil && enterprise != nil {
  893. creatorName = enterprise.BusinessName
  894. }
  895. } else {
  896. subAccount, err := dao.SubAccountDao{}.GetSubAccount(reLocalStoreExplorePreviews[i].SubAccountId)
  897. if err == nil && subAccount != nil {
  898. creatorName = subAccount.SubAccountName
  899. }
  900. }
  901. store, err := dao.StoreDao{}.GetStoreByID(reLocalStoreExplorePreviews[i].StoreId)
  902. if err == nil && store != nil {
  903. storeName = store.StoreName
  904. storeLocation = store.StoreLocation
  905. }
  906. mainImage, err = dao.ProductPhotoDAO{}.GetMainPhotoByStoreID(reLocalStoreExplorePreviews[i].StoreId)
  907. reLocalStoreExplorePreviews[i].CreatorName = creatorName
  908. reLocalStoreExplorePreviews[i].StoreName = storeName
  909. reLocalStoreExplorePreviews[i].StoreLocation = storeLocation
  910. reLocalStoreExplorePreviews[i].MainImage = mainImage
  911. }
  912. result = vo.ResultVO{
  913. Page: param.Page,
  914. PageSize: param.PageSize,
  915. Total: total,
  916. Data: reLocalStoreExplorePreviews,
  917. }
  918. return result, nil
  919. }
  920. // 探店达人详情
  921. func (s LocalLifeService) GetStoreExploreInfo(param *vo.StoreExploreParam) (*vo.ResultVO, error) {
  922. if param.Page <= 0 {
  923. param.Page = 1
  924. }
  925. if param.PageSize <= 0 {
  926. param.PageSize = 10
  927. }
  928. var reStoreExploreTalents []*vo.ReStoreExploreTalent
  929. var total int64
  930. result := vo.ResultVO{
  931. Page: param.Page,
  932. PageSize: param.PageSize,
  933. Total: total,
  934. Data: reStoreExploreTalents,
  935. }
  936. var localLifeTaskInfos []*entity.LocalLifeTaskInfo
  937. var err error
  938. localLifeId := param.LocalLifeId
  939. if param.Status == 1 { // 待预约
  940. localLifeTaskInfos, total, err = dao.LocalLifeTaskInfoDao{}.GetListByTaskStage(localLifeId, 1, "", param.Page, param.PageSize)
  941. } else if param.Status == 2 { // 待确认
  942. localLifeTaskInfos, total, err = dao.LocalLifeTaskInfoDao{}.GetListByTaskStage(localLifeId, 2, param.SearchTime, param.Page, param.PageSize)
  943. } else if param.Status == 3 { // 待探店
  944. localLifeTaskInfos, total, err = dao.LocalLifeTaskInfoDao{}.GetListByTaskStage(localLifeId, 5, param.SearchTime, param.Page, param.PageSize)
  945. } else if param.Status == 4 { // 已探店
  946. localLifeTaskInfos, total, err = dao.LocalLifeTaskInfoDao{}.GetListByTaskStage(localLifeId, 6, param.SearchTime, param.Page, param.PageSize)
  947. }
  948. if err != nil {
  949. return nil, err
  950. }
  951. for _, localLifeTaskInfo := range localLifeTaskInfos {
  952. // 获取达人信息
  953. talentInfo, err := dao.TalentInfoDao{}.SelectTalentInfo(localLifeTaskInfo.TalentID)
  954. if err != nil {
  955. return nil, err
  956. }
  957. //regionName, err := dao.RegionInfoDao{}.SelectRegion(talentInfo.VisitStoreRegion)
  958. //if err != nil {
  959. // regionName = ""
  960. //}
  961. regionName := localLifeTaskInfo.City
  962. talentPreview := &vo.TalentPreview{
  963. TalentId: localLifeTaskInfo.TalentID,
  964. TalentPhoto: talentInfo.Avatar,
  965. TalentName: talentInfo.TalentWxNickname,
  966. Account: "",
  967. Location: regionName,
  968. }
  969. reStoreExploreTalent := &vo.ReStoreExploreTalent{
  970. ReTalentPreview: talentPreview,
  971. TaskId: localLifeTaskInfo.TaskID,
  972. }
  973. if param.Status == 1 {
  974. reStoreExploreTalent.CooperateTime = localLifeTaskInfo.SelectDate.Format("2006-01-02 15:04:05")
  975. } else if param.Status == 2 {
  976. reStoreExploreTalent.ReserveTime = localLifeTaskInfo.ReserveTime.Format("2006-01-02 15:04:05")
  977. } else if param.Status == 3 {
  978. reStoreExploreTalent.ExploreTime = localLifeTaskInfo.ExploreTime.Format("2006-01-02 15:04:05")
  979. reStoreExploreTalent.Operator = ""
  980. } else if param.Status == 4 {
  981. reStoreExploreTalent.FinishExploreTime = localLifeTaskInfo.FinishExploreTime.Format("2006-01-02 15:04:05")
  982. reStoreExploreTalent.Operator = ""
  983. }
  984. reStoreExploreTalents = append(reStoreExploreTalents, reStoreExploreTalent)
  985. }
  986. result = vo.ResultVO{
  987. Page: param.Page,
  988. PageSize: param.PageSize,
  989. Total: total,
  990. Data: reStoreExploreTalents,
  991. }
  992. return &result, nil
  993. }
  994. // 终止合作
  995. func (s LocalLifeService) StoreExploreOver(param *vo.LocalTalentOperateParam) (*string, error) {
  996. taskId := param.TaskId
  997. if taskId == "" {
  998. return nil, errors.New("taskId is empty")
  999. }
  1000. updateData := map[string]interface{}{
  1001. "task_stage": 17,
  1002. "terminate_reason": param.Reason,
  1003. "terminate_time": time.Now(),
  1004. }
  1005. if param.SubAccountId == 0 {
  1006. updateData["terminate_operator_type"] = 1
  1007. updateData["terminate_operator"] = param.EnterpriseId
  1008. } else {
  1009. updateData["terminate_operator_type"] = 2
  1010. updateData["terminate_operator"] = param.SubAccountId
  1011. }
  1012. err := dao.LocalLifeTaskInfoDao{}.UpdateField(param.TaskId, updateData)
  1013. if err != nil {
  1014. return nil, err
  1015. }
  1016. return &taskId, nil
  1017. }
  1018. // 预约时间批量同意/驳回
  1019. func (s LocalLifeService) StoreExploreOperate(param *vo.LocalTalentOperateParam) error {
  1020. taskIds := param.TaskIds
  1021. if taskIds == nil {
  1022. return errors.New("taskIds is empty")
  1023. }
  1024. var bookIds []int64
  1025. for _, taskId := range taskIds {
  1026. bookInfo, err := dao.BookInfoDao{}.GetLastByTaskId(taskId)
  1027. if err != nil {
  1028. return err
  1029. }
  1030. bookIds = append(bookIds, bookInfo.BookID)
  1031. }
  1032. var bookinfoNew entity.BookInfo
  1033. if param.Status == 2 {
  1034. bookinfoNew = entity.BookInfo{
  1035. IsReview: 1,
  1036. IsOk: 2,
  1037. RejectAt: time.Now(),
  1038. ReviseOpinion: param.Reason,
  1039. }
  1040. } else if param.Status == 1 {
  1041. bookinfoNew = entity.BookInfo{
  1042. IsReview: 1,
  1043. IsOk: 1,
  1044. AgreeAt: time.Now(),
  1045. }
  1046. } else {
  1047. return errors.New("status error")
  1048. }
  1049. if param.SubAccountId == 0 {
  1050. bookinfoNew.BOperatorType = 1
  1051. bookinfoNew.BOperator = param.EnterpriseId
  1052. } else {
  1053. bookinfoNew.BOperatorType = 2
  1054. bookinfoNew.BOperator = strconv.FormatInt(param.SubAccountId, 10)
  1055. }
  1056. err1 := dao.BookInfoDao{}.UpdateBookStatus(bookIds, bookinfoNew)
  1057. if err1 != nil {
  1058. return err1
  1059. }
  1060. if param.Status == 1 {
  1061. err2 := dao.LocalLifeTaskInfoDao{}.UpdateLocalStatus(taskIds, entity.LocalLifeTaskInfo{
  1062. TaskStage: 7,
  1063. })
  1064. if err2 != nil {
  1065. return err2
  1066. }
  1067. }
  1068. return nil
  1069. }